From f3d2029a61138d69437c1815a41fa6db3fd6198a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 1 Mar 2026 14:30:39 -0800 Subject: dm test --- src/lib/nip07.ts | 29 ++++++++++++++++++++++++++++- src/lib/nip17.ts | 10 ++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) (limited to 'src/lib') diff --git a/src/lib/nip07.ts b/src/lib/nip07.ts index ee31ee58..ce1cddaf 100644 --- a/src/lib/nip07.ts +++ b/src/lib/nip07.ts @@ -1,11 +1,34 @@ import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js"; -import { finalizeEvent } from "nostr-tools/pure"; +import { finalizeEvent, getPublicKey } from "nostr-tools/pure"; import * as libnip44 from "$lib/nip44"; import { u } from "$lib/nip44"; import { eventToSign, signer } from "$lib/store"; import { get } from "svelte/store"; +// Try to load sk from localStorage nsec and populate the signer store. +const tryNsecFromStorage = async (): Promise => { + const nsec = localStorage.getItem("nsec"); + if (!nsec) return null; + + try { + const { nip19 } = await import("nostr-tools"); + const { type, data } = nip19.decode(nsec); + if (type !== "nsec" || !(data instanceof Uint8Array)) return null; + + const sk = data; + const pk = getPublicKey(sk); + signer.set({ + method: "nsec", + params: { sk: bytesToHex(sk), pk }, + ready: true, + }); + return sk; + } catch { + return null; + } +}; + // Ensures we have access to a secret key, triggering the signer modal if needed. // Returns the sk as Uint8Array, or null if using NIP-07 extension. export const ensureSigner = async (userPubkey: string): Promise => { @@ -27,6 +50,10 @@ export const ensureSigner = async (userPubkey: string): Promise Math.floor(Date.now() / 1000 - Math.random() * TWO_DAYS); @@ -156,7 +154,11 @@ export const decrypt = async (wrapped: any, user: any): Promise => { if (sk === null) { return decryptNIP17MessageNIP07(wrapped); } else { - return unwrapEvent(wrapped, sk); + const skHex = bytesToHex(sk); + const sealedText = nip44Decrypt(wrapped.content, u.getConversationKey(skHex, wrapped.pubkey)); + const sealed = JSON.parse(sealedText); + const rumourText = nip44Decrypt(sealed.content, u.getConversationKey(skHex, sealed.pubkey)); + return JSON.parse(rumourText); } }; -- cgit v1.2.3