aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAdrien Hopkins <[email protected]>2025-09-05 19:43:20 -0500
committerAdrien Hopkins <[email protected]>2025-09-05 19:43:20 -0500
commitfd098a90952269db708f4d2d21de085c968e835e (patch)
treebb355ee885762e27161a77c55ae17a46b93f8323 /src/lib
parent4a2af45b77bb36a81b7f29908b3b320ddb76a769 (diff)
downloadcoinos-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/lib')
-rw-r--r--src/lib/nip17.ts30
1 files changed, 16 insertions, 14 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);