From dd53ded5186abf692a4b554a39a21f445672a5d4 Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 18 Sep 2024 17:57:36 +0300 Subject: [PATCH] fix: updates blossom authorisation event --- src/utils/const.ts | 2 ++ src/utils/misc.ts | 13 +++++++++---- src/utils/nostr.ts | 12 ++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/utils/const.ts b/src/utils/const.ts index 83aca9e..a512c2f 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -21,6 +21,8 @@ export const ONE_DAY_IN_MS = 24 * 60 * 60 * 1000 export const SIGIT_RELAY = 'wss://relay.sigit.io' +export const SIGIT_BLOSSOM = 'https://blossom.sigit.io' + export const DEFAULT_LOOK_UP_RELAY_LIST = [ SIGIT_RELAY, 'wss://user.kindpag.es', diff --git a/src/utils/misc.ts b/src/utils/misc.ts index f427b78..c84231b 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -16,6 +16,8 @@ import { CreateSignatureEventContent, Meta } from '../types' import { hexToNpub, unixNow } from './nostr' import { parseJson } from './string' import { hexToBytes } from '@noble/hashes/utils' +import { getHash } from './hash.ts' +import { SIGIT_BLOSSOM } from './const.ts' /** * Uploads a file to a file storage service. @@ -25,12 +27,18 @@ import { hexToBytes } from '@noble/hashes/utils' */ export const uploadToFileStorage = async (file: File) => { // Define event metadata for authorization + const hash = await getHash(await file.arrayBuffer()) + if (!hash) { + throw new Error("Can't get file hash.") + } + const event: EventTemplate = { kind: 24242, content: 'Authorize Upload', created_at: unixNow(), tags: [ ['t', 'upload'], + ['x', hash], ['expiration', String(unixNow() + 60 * 5)], // Set expiration time to 5 minutes from now ['name', file.name], ['size', String(file.size)] @@ -47,11 +55,8 @@ export const uploadToFileStorage = async (file: File) => { // Sign the authorization event using the dedicated key stored in user app data const authEvent = finalizeEvent(event, hexToBytes(key)) - // URL of the file storage service - const FILE_STORAGE_URL = 'https://blossom.sigit.io' // REFACTOR: should be an env - // Upload the file to the file storage service using Axios - const response = await axios.put(`${FILE_STORAGE_URL}/upload`, file, { + const response = await axios.put(`${SIGIT_BLOSSOM}/upload`, file, { headers: { Authorization: 'Nostr ' + btoa(JSON.stringify(authEvent)), // Set authorization header 'Content-Type': 'application/sigit' // Set content type header diff --git a/src/utils/nostr.ts b/src/utils/nostr.ts index a2799a3..ec42325 100644 --- a/src/utils/nostr.ts +++ b/src/utils/nostr.ts @@ -35,6 +35,7 @@ import { getDefaultRelayMap } from './relays' import { parseJson, removeLeadingSlash } from './string' import { timeout } from './utils' import { getHash } from './hash' +import { SIGIT_BLOSSOM } from './const.ts' /** * Generates a `d` tag for userAppData @@ -723,6 +724,11 @@ const uploadUserAppDataToBlossom = async ( type: 'application/octet-stream' }) + const hash = await getHash(await file.arrayBuffer()) + if (!hash) { + throw new Error("Can't get file hash.") + } + // Define event metadata for authorization const event: EventTemplate = { kind: 24242, @@ -730,6 +736,7 @@ const uploadUserAppDataToBlossom = async ( created_at: unixNow(), tags: [ ['t', 'upload'], + ['x', hash], ['expiration', String(unixNow() + 60 * 5)], // Set expiration time to 5 minutes from now ['name', file.name], ['size', String(file.size)] @@ -739,11 +746,8 @@ const uploadUserAppDataToBlossom = async ( // Finalize the event with the private key const authEvent = finalizeEvent(event, hexToBytes(privateKey)) - // URL of the file storage service - const FILE_STORAGE_URL = 'https://blossom.sigit.io' - // Upload the file to the file storage service using Axios - const response = await axios.put(`${FILE_STORAGE_URL}/upload`, file, { + const response = await axios.put(`${SIGIT_BLOSSOM}/upload`, file, { headers: { Authorization: 'Nostr ' + btoa(JSON.stringify(authEvent)) // Set authorization header } -- 2.34.1