diff options
| author | Adrien Hopkins <[email protected]> | 2025-09-05 19:43:20 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2025-09-05 19:43:20 -0500 |
| commit | fd098a90952269db708f4d2d21de085c968e835e (patch) | |
| tree | bb355ee885762e27161a77c55ae17a46b93f8323 /src | |
| parent | 4a2af45b77bb36a81b7f29908b3b320ddb76a769 (diff) | |
| download | coinos-ui-fd098a90952269db708f4d2d21de085c968e835e.tar.gz coinos-ui-fd098a90952269db708f4d2d21de085c968e835e.zip | |
Remove need for explicit key entry
If window.nostr is available, I don't need the sender's SK, I can do
everything with its functions. Otherwise, I'll ask for the SK using
getPrivateKey().
The override public key was only for testing, but I still don't need it
because I can get the users' private keys from the settings tab.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/nip17.ts | 30 | ||||
| -rw-r--r-- | src/routes/(app)/dm/[recipient]/+page.svelte | 40 |
2 files changed, 29 insertions, 41 deletions
diff --git a/src/lib/nip17.ts b/src/lib/nip17.ts index e0046d47..6a9888b6 100644 --- a/src/lib/nip17.ts +++ b/src/lib/nip17.ts @@ -6,31 +6,33 @@ const TWO_DAYS = 2 * 24 * 60 * 60; const randomTimestamp = () => Math.floor( Date.now() / 1000 - Math.random() * TWO_DAYS); -export const createNIP17Message = async (text: string, senderSK: Uint8Array, receiverPK: string) => { - const rumour = createRumour(text, senderSK, receiverPK); - let sealed; - if (window.nostr) { - sealed = await sealRumourNip07(rumour, receiverPK); - } else { - sealed = sealRumour(rumour, senderSK, receiverPK); - } - const wrapped = giftWrap(sealed, receiverPK); - return wrapped; +// Create a NIP-17 message using a provided sender secret key. +export const createNIP17MessageSK = (text: string, senderSK: Uint8Array, receiverPK: string) => { + const rumour = createRumour(text, getPublicKey(senderSK), receiverPK); + const sealed = sealRumourSK(rumour, senderSK, receiverPK); + return giftWrap(sealed, receiverPK); +} + +// Create a NIP-17 message using NIP-07, requiring no sender secret key. +export const createNIP17MessageNIP07 = async (text: string, senderPK: string, receiverPK: string) => { + const rumour = createRumour(text, senderPK, receiverPK); + const sealed = await sealRumourNip07(rumour, receiverPK); + return giftWrap(sealed, receiverPK); } -const createRumour = (text: string, senderSK: Uint8Array, receiverPK: string) => { +const createRumour = (text: string, senderPK: string, receiverPK: string) => { const rumour = { kind: 14, // rumour created_at: Math.floor(Date.now() / 1000), tags: [["p", receiverPK]], - pubkey: getPublicKey(senderSK), + pubkey: senderPK, content: text }; - rumour.id = getEventHash(rumour); + rumour.id = getEventHash(rumour); // do NOT sign rumours! return rumour; } -const sealRumour = (rumour: object, senderSK: Uint8Array, receiverPK: string) => { +const sealRumourSK = (rumour: object, senderSK: Uint8Array, receiverPK: string) => { const senderSKString = bytesToHex(senderSK); const conversationKey = u.getConversationKey(senderSKString, receiverPK); const encryptedRumour = encrypt(JSON.stringify(rumour), conversationKey); diff --git a/src/routes/(app)/dm/[recipient]/+page.svelte b/src/routes/(app)/dm/[recipient]/+page.svelte index 33edfcc6..446a1068 100644 --- a/src/routes/(app)/dm/[recipient]/+page.svelte +++ b/src/routes/(app)/dm/[recipient]/+page.svelte @@ -2,33 +2,26 @@ import Icon from "$comp/Icon.svelte"; import { hexToBytes, bytesToHex } from '@noble/hashes/utils'; import * as nip17 from 'nostr-tools/nip17'; - import { createNIP17Message } from '$lib/nip17'; + import { createNIP17MessageSK, createNIP17MessageNIP07 } from '$lib/nip17'; import { sign, getPrivateKey } from '$lib/nostr'; let { data } = $props(); const { user, recipient } = data; - let senderSK = $state(""); - let overridePK = $state(""); let text = $state(""); - getPrivateKey(user) - .then(key => senderSK = bytesToHex(key)) - .catch(console.log); - - const btnCreateMessage = () => { - try { - const recipientPK = overridePK || recipient.pubkey; - const skBytes = hexToBytes(senderSK); - const event = createNIP17Message(text, skBytes, recipientPK); - event.then(displayEvent); - } catch (error) { - console.log(error); + const btnCreateMessage = async () => { + let event; + if (window.nostr) { + event = await createNIP17MessageNIP07( + text, user.pubkey, recipient.pubkey); + } else { + const sk = await getPrivateKey(user); + event = createNIP17MessageSK(text, sk, recipient.pubkey); } - } - const displayEvent = (event: object) => { - console.log(JSON.stringify(event)); + // TODO send event to relays instead of displaying it + text = JSON.stringify(event); } </script> @@ -45,17 +38,10 @@ <h1 class="text-5xl font-medium text-left w-full mx-auto lg:mx-0 md:w-[500px]" >Direct Messages</h1> - <p><em>Testing Message:</em> You are sending nostr messages to {recipient.username}. Their pubkey is <code>{recipient.pubkey}</code>.</p> - - <label for="senderSKInput">(Temp) Sender Secret Key:</label> - <input id="senderSKInput" bind:value={senderSK}> - - <label for="overridePKInput">(Temp) Override Receiver Public Key:</label> - <input id="overridePKInput" bind:value={overridePK}> + <p>You are sending nostr messages to {recipient.username}.</p> - <label for="message-contents">Message Contents:</label> <textarea id="message-contents" bind:value={text}></textarea> - <input type="button" class="btn" value="Send Message" on:click={btnCreateMessage}> + <input type="button" class="btn" value="Generate Message" on:click={btnCreateMessage}> </div> </div> |
