diff options
| author | Adrien Hopkins <[email protected]> | 2025-10-01 11:13:09 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2025-10-01 11:13:09 -0500 |
| commit | 2f2348f459e3b6683284975e63df356e8c821bdc (patch) | |
| tree | 116ac01326052ff5ee5e375f2e93ff8f6ec66c25 /src | |
| parent | 48d2cac1abf64d549cf10c18c90b875a086c575f (diff) | |
| download | coinos-ui-2f2348f459e3b6683284975e63df356e8c821bdc.tar.gz coinos-ui-2f2348f459e3b6683284975e63df356e8c821bdc.zip | |
Fetch & display received DMs from relays
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/nip17.ts | 6 | ||||
| -rw-r--r-- | src/routes/(app)/dm/[recipient]/+page.svelte | 27 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/lib/nip17.ts b/src/lib/nip17.ts index 84790275..495f897e 100644 --- a/src/lib/nip17.ts +++ b/src/lib/nip17.ts @@ -79,13 +79,11 @@ const giftWrap = (event: object, receiverPK: string) => { return finalizeEvent(giftWrapEvent, secretKey); } -export const decryptNIP17MessageNIP07 = async (text: string): string => { - const wrapped = JSON.parse(text); +export const decryptNIP17MessageNIP07 = async (wrapped: object): object => { const sealedText = await window.nostr.nip44.decrypt( wrapped.pubkey, wrapped.content); const sealed = JSON.parse(sealedText); const rumourText = await window.nostr.nip44.decrypt( sealed.pubkey, sealed.content); - const rumour = JSON.parse(rumourText); - return rumour.content; + return JSON.parse(rumourText); } diff --git a/src/routes/(app)/dm/[recipient]/+page.svelte b/src/routes/(app)/dm/[recipient]/+page.svelte index 4f02829d..971c0cd5 100644 --- a/src/routes/(app)/dm/[recipient]/+page.svelte +++ b/src/routes/(app)/dm/[recipient]/+page.svelte @@ -12,8 +12,16 @@ const pool = new SimplePool(); import { PUBLIC_DM_RELAYS } from '$env/static/public'; const DM_RELAYS_LIST = PUBLIC_DM_RELAYS.split(','); + const DM_FETCH_LIMIT = 256; let text = $state(""); + let events = $state([]); + + pool.querySync(DM_RELAYS_LIST, + { kinds: [1059], "#p": [user.pubkey], limit: DM_FETCH_LIMIT }) + .then(wrapped => + Promise.all(wrapped.map(decryptMessage)) + .then(rumours => events = rumours)); const btnCreateMessage = async () => { let event; @@ -28,15 +36,12 @@ await Promise.any(pool.publish(DM_RELAYS_LIST, event)); } - const btnDecryptMessage = async () => { + const decryptMessage = async (event: object): object => { if (window.nostr) { - text = await libnip17.decryptNIP17MessageNIP07(text); + return await libnip17.decryptNIP17MessageNIP07(event); } else { - // TODO get events from relays instead of the text box - const wrapped = JSON.parse(text); const sk = await getPrivateKey(user); - const rumour = toolsnip17.unwrapEvent(wrapped, sk); - text = rumour.content; + return toolsnip17.unwrapEvent(event, sk); } } </script> @@ -56,9 +61,15 @@ >Direct Messages</h1> <p>You are sending nostr messages to {recipient.username}.</p> + <p>Received Messages:</p> + <ul> + {#each events as evt} + <li>{new Date(evt.created_at * 1000)}: "{evt.content}"</li> + {/each} + </ul> + <textarea id="message-contents" bind:value={text}></textarea> - <input type="button" class="btn" value="Generate Message" on:click={btnCreateMessage}> - <input type="button" class="btn" value="Decrypt Message" on:click={btnDecryptMessage}> + <input type="button" class="btn" value="Send Message" on:click={btnCreateMessage}> </div> </div> |
