diff --git a/src/hooks/useDirectMessages.ts b/src/hooks/useDirectMessages.ts index d3598cf..621bd27 100644 --- a/src/hooks/useDirectMessages.ts +++ b/src/hooks/useDirectMessages.ts @@ -1,16 +1,12 @@ import { useCallback, useMemo } from 'react'; import { useNostr } from '@nostrify/react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { nip44, nip19, getEventHash, generateSecretKey, getPublicKey } from 'nostr-tools'; +import { nip44, nip19, generateSecretKey, getPublicKey, finalizeEvent } from 'nostr-tools'; import type { NostrEvent } from '@nostrify/nostrify'; import { useCurrentUser } from './useCurrentUser'; import { useAppContext } from './useAppContext'; -// Uint8Array → hex string (replaces @noble/hashes/utils which dropped ./utils in v2) -const bytesToHex = (bytes: Uint8Array): string => - Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join(''); - // NIP-17 Message Types export interface DirectMessage { id: string; @@ -143,26 +139,14 @@ export function useSendDirectMessage() { ); const encryptedSeal = nip44.v2.encrypt(sealJson, conversationKey); - // Create gift wrap event - const giftWrap: NostrEvent = { - id: '', + // Create gift wrap event and sign with ephemeral key + return finalizeEvent({ pubkey: ephemeralPubkey, created_at: randomPastTimestamp(), kind: GIFT_WRAP_KIND, tags: [['p', targetPubkey]], content: encryptedSeal, - sig: '', - }; - - // Calculate ID and sign with ephemeral key - giftWrap.id = getEventHash(giftWrap); - - // Sign with ephemeral secret key using nostr-tools - const { schnorr } = await import('@noble/curves/secp256k1'); - const sig = schnorr.sign(giftWrap.id, ephemeralSecretKey); - giftWrap.sig = bytesToHex(sig); - - return giftWrap; + }, ephemeralSecretKey) as NostrEvent; }; // 3. Create gift wraps for all recipients AND sender (so sender sees own messages)