From 41eedc0630b9c1b1c55426ea71c632f757817388 Mon Sep 17 00:00:00 2001 From: BlowaterNostr <127284497+BlowaterNostr@users.noreply.github.com> Date: Tue, 11 Jul 2023 17:19:57 +0800 Subject: [PATCH] update nostr.ts (#62) --- UI/app.tsx | 2 +- UI/app_update.ts | 2 +- UI/contact-list.test.tsx | 4 +- UI/deno.lock | 6 +- UI/message-panel.tsx | 3 + UI/setting.test.tsx | 4 +- UI/setting.ts | 4 +- deno.lock | 21 +++++- features/dm.test.ts | 156 +++++++++++++++------------------------ features/dm.ts | 80 +++++--------------- features/profile.ts | 3 +- nostr.test.ts | 8 +- nostr.ts | 9 +-- 13 files changed, 116 insertions(+), 186 deletions(-) diff --git a/UI/app.tsx b/UI/app.tsx index 1d391c4..a04fb46 100644 --- a/UI/app.tsx +++ b/UI/app.tsx @@ -97,7 +97,7 @@ async function initProfileSyncer( // Sync DM events const messageStream = dm.getAllEncryptedMessagesOf( - myPublicKey.hex, + myPublicKey, pool, since, ); diff --git a/UI/app_update.ts b/UI/app_update.ts index e988797..c222588 100644 --- a/UI/app_update.ts +++ b/UI/app_update.ts @@ -210,7 +210,7 @@ export async function* UI_Interaction_Update( if (event.target.kind == NostrKind.DIRECT_MESSAGE) { const err = await sendDMandImages({ sender: app.myAccountContext, - receiverPublicKey: event.target.receiver.pubkey.hex, + receiverPublicKey: event.target.receiver.pubkey, message: event.text, files: event.files, kind: event.target.kind, diff --git a/UI/contact-list.test.tsx b/UI/contact-list.test.tsx index 3ad8bbd..8e39787 100644 --- a/UI/contact-list.test.tsx +++ b/UI/contact-list.test.tsx @@ -16,7 +16,7 @@ import { import { PrivateKey } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts"; import { InMemoryAccountContext } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts"; import { AsyncWebSocket } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/websocket.ts"; -import { relays } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay-list.test.ts"; +import { defaultRelays } from "./setting.ts"; const start = Date.now(); @@ -24,7 +24,7 @@ const myPrivateKey = PrivateKey.Generate(); const myPublicKey = PrivateKey.Generate().hex; const relayPool = new ConnectionPool(); -for (let url of relays.slice(0, 1)) { +for (let url of defaultRelays.slice(0, 1)) { const relay = SingleRelayConnection.New(url, AsyncWebSocket.New); if (relay instanceof Error) { fail(relay.message); diff --git a/UI/deno.lock b/UI/deno.lock index 9bd4508..f7e2b61 100644 --- a/UI/deno.lock +++ b/UI/deno.lock @@ -16,10 +16,10 @@ "https://esm.sh/v128/twind@0.16.16/denonext/twind.mjs": "0f80aa32016330a7bf964c8a6e29cbec8e81560d57e5bc317581c9d79b02fa5c", "https://esm.sh/v128/twind@0.16.16/twind.d.ts": "07018b644f38b8167d61aca629f7fc34b49ff4bf75d13a813caff530ebd4325a", "https://raw.githubusercontent.com/BlowaterNostr/csp/master/csp.ts": "3e8eed3d933748d48c83e2ae583bf86748621bcd6e8f181bef8a6ae8e5a4bfac", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/ende.ts": "28190c9017f4cbcb25ba57b27a85c561f65b7610b5fc36ee4d70e2c95a7f727a", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts": "3cef68a341119df674b980914021fd417274ce627bc8c77c405eda2a05174421", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/ende.ts": "00807d3602a65d5a6881c8fbb01d6886bf7a6640a2cc5c7c1bf00dd00b320ae7", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts": "1830bb6eded80c71aeae6a94ce921dbf09fcdf4820a3b846f8e8d9e23ce17119", "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nip19.ts": "880aa40c85bb770703b5e85d72f29fed96f21777dc17906017c385873aedfd44", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts": "542c4d2cd078f03776d7029b5e7db72eb6daa02dae59b7863f0d9b755c08e57b", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts": "6d4b0bde3978bdc3d6cdc802a6f51e2391cb7257cac3aa80a6e70212b11b18a1", "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay.ts": "93c5c6fe196dc9cae7c0e82ee8057a5350f77e69ae7d395fdb141a25b2664739", "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/scure.js": "fbc4be16918272bd167fff1184a7f5bbd1a676bad2a73130bb530d78df893a99", "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/vendor/esm.sh/v106/@noble/secp256k1@1.7.1/es2022/secp256k1.js": "69e32f6c686cc651ff2e6d4d22ed6e9b6f86b38311b405b47b2abdf3cb98eb4d", diff --git a/UI/message-panel.tsx b/UI/message-panel.tsx index 2540126..8cb9d79 100644 --- a/UI/message-panel.tsx +++ b/UI/message-panel.tsx @@ -471,6 +471,9 @@ export function ParseMessageContent( break; case "npub": const pubkey = PublicKey.FromBech32(itemStr); + if (pubkey instanceof Error) { + continue; + } const profile = getProfileEvent(db, pubkey); if (profile) { vnode.push(ProfileCard(profile.content, pubkey, eventEmitter)); diff --git a/UI/setting.test.tsx b/UI/setting.test.tsx index d5d2fcd..b3c76a5 100644 --- a/UI/setting.test.tsx +++ b/UI/setting.test.tsx @@ -4,11 +4,11 @@ import { sleep } from "https://raw.githubusercontent.com/BlowaterNostr/csp/maste import { EventBus } from "../event-bus.ts"; import { UI_Interaction_Event } from "./app_update.ts"; import { RelaySetting } from "./setting.tsx"; -import { relays } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay-list.test.ts"; import { ConnectionPool } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay.ts"; +import { defaultRelays } from "./setting.ts"; const pool = new ConnectionPool(); -pool.addRelayURLs(relays).then((errs) => { +pool.addRelayURLs(defaultRelays).then((errs) => { if (errs) { console.log(errs); } diff --git a/UI/setting.ts b/UI/setting.ts index e9c9825..a66e453 100644 --- a/UI/setting.ts +++ b/UI/setting.ts @@ -3,12 +3,12 @@ import { Database } from "../database.ts"; const damus = "wss://relay.damus.io"; const nos = "wss://nos.lol"; -const defaults = [ +export const defaultRelays = [ nos, damus, "wss://relay.nostr.wirednet.jp", ]; export function getRelayURLs(db: Database): string[] { - return defaults; + return defaultRelays; } diff --git a/deno.lock b/deno.lock index 4c97024..d342cff 100644 --- a/deno.lock +++ b/deno.lock @@ -6,11 +6,24 @@ "https://deno.land/std@0.176.0/testing/_diff.ts": "1a3c044aedf77647d6cac86b798c6417603361b66b54c53331b312caeb447aea", "https://deno.land/std@0.176.0/testing/_format.ts": "a69126e8a469009adf4cf2a50af889aca364c349797e63174884a52ff75cf4c7", "https://deno.land/std@0.176.0/testing/asserts.ts": "984ab0bfb3faeed92ffaa3a6b06536c66811185328c5dd146257c702c41b01ab", + "https://esm.sh/preact@10.11.3": "ad3c24796c4132c84b4b392f812228d53a0fd600fa64648f27aebd05ec09b24e", + "https://esm.sh/stable/preact@10.11.3/denonext/preact.mjs": "c828d9020ea26f07ba07b2f0a3ef97fd7ceb1c2a772c380ca05e2647ac8d3923", + "https://esm.sh/twind@0.16.16": "6c8934ebceb225d94d9e11f42338e09a94cf9e7bce84d9817a1123a0cea44cd2", + "https://esm.sh/v128/csstype@3.1.2/index.d.ts": "4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288", + "https://esm.sh/v128/preact@10.11.3/src/index.d.ts": "76842a9d103548261ee001f2aee5fa5cacc8b1b4b4032af537ed84603c8f4a31", + "https://esm.sh/v128/preact@10.11.3/src/jsx.d.ts": "77ce5bd7324455c9f6dc85bfc3c94b733acb92cc98fdf82e4b1059c8bca7866d", + "https://esm.sh/v128/style-vendorizer@2.2.3/denonext/style-vendorizer.mjs": "121455e7b04b631ef6463ce63cdcd29febd74d88c37713c774ceca8a1561c83d", + "https://esm.sh/v128/twind@0.16.16/denonext/twind.mjs": "0f80aa32016330a7bf964c8a6e29cbec8e81560d57e5bc317581c9d79b02fa5c", + "https://esm.sh/v128/twind@0.16.16/twind.d.ts": "07018b644f38b8167d61aca629f7fc34b49ff4bf75d13a813caff530ebd4325a", "https://raw.githubusercontent.com/BlowaterNostr/csp/master/csp.ts": "3e8eed3d933748d48c83e2ae583bf86748621bcd6e8f181bef8a6ae8e5a4bfac", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/ende.ts": "28190c9017f4cbcb25ba57b27a85c561f65b7610b5fc36ee4d70e2c95a7f727a", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts": "3cef68a341119df674b980914021fd417274ce627bc8c77c405eda2a05174421", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts": "542c4d2cd078f03776d7029b5e7db72eb6daa02dae59b7863f0d9b755c08e57b", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/ende.ts": "00807d3602a65d5a6881c8fbb01d6886bf7a6640a2cc5c7c1bf00dd00b320ae7", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts": "1830bb6eded80c71aeae6a94ce921dbf09fcdf4820a3b846f8e8d9e23ce17119", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nip19.ts": "880aa40c85bb770703b5e85d72f29fed96f21777dc17906017c385873aedfd44", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts": "6d4b0bde3978bdc3d6cdc802a6f51e2391cb7257cac3aa80a6e70212b11b18a1", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay-list.test.ts": "93c319f991c03c4a62d080960c83fc17542c0f593344ca37c9e56cad7428de2a", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay.ts": "93c5c6fe196dc9cae7c0e82ee8057a5350f77e69ae7d395fdb141a25b2664739", "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/scure.js": "fbc4be16918272bd167fff1184a7f5bbd1a676bad2a73130bb530d78df893a99", - "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/vendor/esm.sh/v106/@noble/secp256k1@1.7.1/es2022/secp256k1.js": "69e32f6c686cc651ff2e6d4d22ed6e9b6f86b38311b405b47b2abdf3cb98eb4d" + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/vendor/esm.sh/v106/@noble/secp256k1@1.7.1/es2022/secp256k1.js": "69e32f6c686cc651ff2e6d4d22ed6e9b6f86b38311b405b47b2abdf3cb98eb4d", + "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/websocket.ts": "d817c40d32fe45e30bfb30255287e76a977930f6709c9585772dc54e077a31ed" } } diff --git a/features/dm.test.ts b/features/dm.test.ts index c7c22a5..a6715ca 100644 --- a/features/dm.test.ts +++ b/features/dm.test.ts @@ -1,31 +1,32 @@ import { fail } from "https://deno.land/std@0.176.0/testing/asserts.ts"; import { AsyncWebSocket } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/websocket.ts"; -import { - PrivateKey, - publicKeyHexFromNpub, -} from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts"; +import { PrivateKey, PublicKey } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts"; import { InMemoryAccountContext, NostrKind, } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts"; -import { relays } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay-list.test.ts"; import { ConnectionPool, NoRelayRegistered, SingleRelayConnection, } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/relay.ts"; -import { getAllDecryptedMessagesOf, messagesBetween, sendDMandImages } from "./dm.ts"; +import { getAllDecryptedMessagesOf, sendDMandImages } from "./dm.ts"; +import { defaultRelays } from "../UI/setting.ts"; const testPrivateKey = PrivateKey.Generate(); -const myPublicKey = Deno.env.get("TEST_NOTIFICATION_PUBKEY"); -if (myPublicKey == undefined) { +const myPublicKeyString = Deno.env.get("TEST_NOTIFICATION_PUBKEY"); +if (myPublicKeyString == undefined) { + Deno.exit(1); +} +const myPublicKey = PublicKey.FromString(myPublicKeyString); +if (myPublicKey instanceof Error) { Deno.exit(1); } Deno.test("sendDMandImages", async (t) => { const pool = new ConnectionPool(); const ps = []; - for (let url of relays) { + for (let url of defaultRelays) { console.log(url); const relay = SingleRelayConnection.New(url, AsyncWebSocket.New); if (relay instanceof Error) { @@ -40,94 +41,68 @@ Deno.test("sendDMandImages", async (t) => { console.log(path); const data = await Deno.readFile(path); - // await t.step("able to send images only", async () => { - const errs = await sendDMandImages({ - sender: InMemoryAccountContext.New(testPrivateKey), - receiverPublicKey: publicKeyHexFromNpub(myPublicKey), - message: " ", // will be ignored - files: [new Blob([data])], - kind: NostrKind.DIRECT_MESSAGE, - lamport_timestamp: 0, - pool, - waitAll: true, - tags: [], - }); - if (errs instanceof Error) { - fail(errs.message); - } - if (errs) { - if (errs instanceof NoRelayRegistered) { - fail(JSON.stringify(errs)); - } else { - for (const err of errs) { - if (err && err instanceof NoRelayRegistered) { - fail(JSON.stringify(errs)); + await t.step("able to send images only", async () => { + const errs = await sendDMandImages({ + sender: InMemoryAccountContext.New(testPrivateKey), + receiverPublicKey: myPublicKey, + message: " ", // will be ignored + files: [new Blob([data])], + kind: NostrKind.DIRECT_MESSAGE, + lamport_timestamp: 0, + pool, + waitAll: true, + tags: [], + }); + if (errs instanceof Error) { + fail(errs.message); + } + if (errs) { + if (errs instanceof NoRelayRegistered) { + fail(JSON.stringify(errs)); + } else { + for (const err of errs) { + if (err && err instanceof NoRelayRegistered) { + fail(JSON.stringify(errs)); + } } } } - } - // }); + }); - // await t.step("send image and text", async () => { - const errs2 = await sendDMandImages({ - sender: InMemoryAccountContext.New(testPrivateKey), - receiverPublicKey: publicKeyHexFromNpub(myPublicKey), - message: "send image and text", - files: [new Blob([data])], - kind: NostrKind.DIRECT_MESSAGE, - lamport_timestamp: 0, - pool, - waitAll: true, - tags: [], - }); - if (errs2 instanceof Error) { - fail(errs2.message); - } - if (errs2) { - if (errs2 instanceof NoRelayRegistered) { - fail(JSON.stringify(errs2)); - } else { - for (const err of errs2) { - if (err && err instanceof NoRelayRegistered) { - fail(JSON.stringify(errs2)); + await t.step("send image and text", async () => { + const errs2 = await sendDMandImages({ + sender: InMemoryAccountContext.New(testPrivateKey), + receiverPublicKey: myPublicKey, + message: "send image and text", + files: [new Blob([data])], + kind: NostrKind.DIRECT_MESSAGE, + lamport_timestamp: 0, + pool, + waitAll: true, + tags: [], + }); + if (errs2 instanceof Error) { + fail(errs2.message); + } + if (errs2) { + if (errs2 instanceof NoRelayRegistered) { + fail(JSON.stringify(errs2)); + } else { + for (const err of errs2) { + if (err && err instanceof NoRelayRegistered) { + fail(JSON.stringify(errs2)); + } } } } - } - // }); + }); await pool.close(); }); -// Deno.test("sendDirectMessage", async () => { -// const pool = new ConnectionPool(); -// const ps = []; -// for (let url of relays) { -// const relay = SingleRelayConnection.New(url, AsyncWebSocket.New); -// if (relay instanceof Error) { -// fail(relay.message); -// } -// const p = pool.addRelay(relay); -// ps.push(p); -// } -// await Promise.all(ps); -// const eventID = await sendDirectMessage( -// InMemoryAccountContext.New(testPrivateKey), -// publicKeyFromNpub(myPublicKey), -// "sendDirectMessage", -// pool, -// ); -// if (eventID instanceof Error) { -// fail(eventID.message); -// } -// const oks = await pool.waitEventOK(eventID, false); -// console.log(oks); -// await pool.close(); -// }); - Deno.test("getAllDecryptedMessagesOf", async () => { const pool = new ConnectionPool(); - const relay = SingleRelayConnection.New(relays[0], AsyncWebSocket.New); + const relay = SingleRelayConnection.New(defaultRelays[0], AsyncWebSocket.New); if (relay instanceof Error) { fail(relay.message); } @@ -144,16 +119,3 @@ Deno.test("getAllDecryptedMessagesOf", async () => { } await pool.close(); }); - -Deno.test("messagesBetween", async () => { - const pool = new ConnectionPool(); - const relay = SingleRelayConnection.New(relays[0], AsyncWebSocket.New); - if (relay instanceof Error) { - fail(relay.message); - } - await pool.addRelay(relay); - let stream = messagesBetween(testPrivateKey.hex, myPublicKey, pool, 3); - let event = await stream.next(); - event = await stream.next(); - await pool.close(); -}); diff --git a/features/dm.ts b/features/dm.ts index 842a3d3..4add6a0 100644 --- a/features/dm.ts +++ b/features/dm.ts @@ -17,12 +17,13 @@ import { import { prepareNostrImageEvents, Tag } from "../nostr.ts"; import { PrivateKey, + PublicKey, publicKeyHexFromNpub, } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts"; export async function sendDMandImages(args: { sender: NostrAccountContext; - receiverPublicKey: string; + receiverPublicKey: PublicKey; message: string; files: Blob[]; kind: NostrKind; @@ -38,10 +39,10 @@ export async function sendDMandImages(args: { // build the nostr event const nostrEvent = await prepareEncryptedNostrEvent( sender, - receiverPublicKey, + receiverPublicKey.hex, kind, [ - ["p", receiverPublicKey], + ["p", receiverPublicKey.hex], ["lamport", String(lamport_timestamp)], ...tags, ], @@ -94,7 +95,7 @@ export async function sendSocialPost(args: { } export function getAllEncryptedMessagesOf( - publicKey: string, + publicKey: PublicKey, relay: ConnectionPool, since?: number, limit?: number, @@ -120,7 +121,7 @@ export async function* getAllDecryptedMessagesOf( limit: number, ) { const pub = ctx.publicKey; - const allEncryptedMessage = getAllEncryptedMessagesOf(pub.hex, pool, 0, limit); + const allEncryptedMessage = getAllEncryptedMessagesOf(pub, pool, 0, limit); for await (const { res: message } of allEncryptedMessage) { if (message.type === "EVENT") { yield decryptMessage(message, ctx, message.event.pubkey); @@ -131,38 +132,16 @@ export async function* getAllDecryptedMessagesOf( } } -export function messagesBetween( - myPrivateKey: string, - theirPublicKey: string, - relay: ConnectionPool, - limit: number, -) { - let events1 = messagesSendToMeBy( - myPrivateKey, - theirPublicKey, - relay, - limit, - ); - let events2 = messagesSendByMeTo( - myPrivateKey, - theirPublicKey, - relay, - limit, - ); - return merge(events1, events2); -} - async function* getAllEncryptedMessagesSendBy( - publicKey: string, + publicKey: PublicKey, relay: ConnectionPool, limit?: number, since?: number, ) { - publicKey = publicKeyHexFromNpub(publicKey); let resp = await relay.newSub( newSubID(), { - authors: [publicKey], + authors: [publicKey.hex], kinds: [4], limit: limit, since: since, @@ -177,18 +156,17 @@ async function* getAllEncryptedMessagesSendBy( } async function* getAllEncryptedMessagesReceivedBy( - publicKey: string, + publicKey: PublicKey, relay: ConnectionPool, limit?: number, since?: number, ) { - publicKey = publicKeyHexFromNpub(publicKey); const subid = newSubID(); let resp = await relay.newSub( subid, { kinds: [4], - "#p": [publicKey], + "#p": [publicKey.hex], limit: limit, since: since, }, @@ -202,19 +180,17 @@ async function* getAllEncryptedMessagesReceivedBy( } async function* getEncryptedMessagesBetween( - senderPubKey: string, - receiverPubKey: string, + senderPubKey: PublicKey, + receiverPubKey: PublicKey, relay: ConnectionPool, limit: number, ) { - senderPubKey = publicKeyHexFromNpub(senderPubKey); - receiverPubKey = publicKeyHexFromNpub(receiverPubKey); let resp = await relay.newSub( newSubID(), { - authors: [senderPubKey], + authors: [senderPubKey.hex], kinds: [4], - "#p": [receiverPubKey], + "#p": [receiverPubKey.hex], limit: limit, }, ); @@ -227,16 +203,14 @@ async function* getEncryptedMessagesBetween( } async function* messagesSendByMeTo( - myPriKey: string, - receiverPubKey: string, + myPriKey: PrivateKey, + receiverPubKey: PublicKey, relay: ConnectionPool, limit: number, ) { - receiverPubKey = publicKeyHexFromNpub(receiverPubKey); - const myPri = PrivateKey.FromHex(myPriKey) as PrivateKey; for await ( let { res: relayResponse } of getEncryptedMessagesBetween( - myPri.toPublicKey().hex, + myPriKey.toPublicKey(), receiverPubKey, relay, limit, @@ -246,26 +220,6 @@ async function* messagesSendByMeTo( } } -async function* messagesSendToMeBy( - myPriKey: string, - senderPubKey: string, - relay: ConnectionPool, - limit: number, -) { - senderPubKey = publicKeyHexFromNpub(senderPubKey); - const myPri = PrivateKey.FromHex(myPriKey) as PrivateKey; - for await ( - let { res: relayResponse } of getEncryptedMessagesBetween( - senderPubKey, - myPri.toPublicKey().hex, - relay, - limit, - ) - ) { - yield relayResponse; - } -} - async function decryptMessage( relayResponse: RelayResponse_Event, ctx: NostrAccountContext, diff --git a/features/profile.ts b/features/profile.ts index 8450537..611387e 100644 --- a/features/profile.ts +++ b/features/profile.ts @@ -33,12 +33,11 @@ export function profilesStream( ) { const chan = csp.chan<[NostrEvent, string]>(); (async () => { - const hexPublicKeys = Array.from(publicKeys).map((k) => publicKeyHexFromNpub(k)); let subId = newSubID(); let resp = await pool.newSub( subId, { - authors: hexPublicKeys, + authors: Array.from(publicKeys), kinds: [NostrKind.META_DATA], }, ); diff --git a/nostr.test.ts b/nostr.test.ts index a1ab989..fe97c12 100644 --- a/nostr.test.ts +++ b/nostr.test.ts @@ -25,7 +25,7 @@ import { PrivateKey } from "https://raw.githubusercontent.com/BlowaterNostr/nost Deno.test("prepareNostrImageEvents", async (t) => { const pri = PrivateKey.Generate(); - const pub = pri.toPublicKey().hex; + const pub = pri.toPublicKey(); let randomData = new Uint8Array(1024 * 48); // 48KB raw data for (let i = 0; i < randomData.length; i++) { @@ -47,7 +47,7 @@ Deno.test("prepareNostrImageEvents", async (t) => { await t.step("full", async () => { const decryptedEvents = []; for (const e of events) { - const decryptedEvent = await decryptNostrEvent(e, InMemoryAccountContext.New(pri), pub); + const decryptedEvent = await decryptNostrEvent(e, InMemoryAccountContext.New(pri), pub.hex); if (decryptedEvent instanceof Error) { fail(decryptedEvent.message); } @@ -63,7 +63,7 @@ Deno.test("prepareNostrImageEvents", async (t) => { const decryptedEvents = []; const partialEvents = events.slice(0, 1); // not enough events for (const e of partialEvents) { - const decryptedEvent = await decryptNostrEvent(e, InMemoryAccountContext.New(pri), pub); + const decryptedEvent = await decryptNostrEvent(e, InMemoryAccountContext.New(pri), pub.hex); if (decryptedEvent instanceof Error) { fail(decryptedEvent.message); } @@ -76,7 +76,7 @@ Deno.test("prepareNostrImageEvents", async (t) => { Deno.test("groupImageEvents", async () => { const pri = PrivateKey.Generate(); - const pub = pri.toPublicKey().hex; + const pub = pri.toPublicKey(); let randomData = new Uint8Array(1024 * 17); for (let i = 0; i < randomData.length; i++) { diff --git a/nostr.ts b/nostr.ts index 39606b8..799eaf1 100644 --- a/nostr.ts +++ b/nostr.ts @@ -3,6 +3,7 @@ */ import { PrivateKey, + PublicKey, publicKeyHexFromNpub, } from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/key.ts"; import * as nostr from "https://raw.githubusercontent.com/BlowaterNostr/nostr.ts/main/nostr.ts"; @@ -74,14 +75,12 @@ export function getTags(event: Event): Tags { export async function prepareNostrImageEvents( sender: nostr.NostrAccountContext, - receiverPublicKey: string, + receiverPublicKey: PublicKey, blob: Blob, kind: nostr.NostrKind, tags?: Tag[], ): Promise<[nostr.NostrEvent[], string] | Error> { // prepare nostr event - receiverPublicKey = publicKeyHexFromNpub(receiverPublicKey); - // read the blob const binaryContent = await nostr.blobToBase64(blob); @@ -92,7 +91,7 @@ export async function prepareNostrImageEvents( for (let i = 0; i < chunkCount; i++) { const chunk = binaryContent.slice(i * chunkSize, (i + 1) * chunkSize); // encryption - const encrypted = await sender.encrypt(receiverPublicKey, chunk); + const encrypted = await sender.encrypt(receiverPublicKey.hex, chunk); if (encrypted instanceof Error) { return encrypted; } @@ -102,7 +101,7 @@ export async function prepareNostrImageEvents( kind: kind, pubkey: sender.publicKey.hex, tags: [ - ["p", receiverPublicKey], + ["p", receiverPublicKey.hex], ["image", groupLeadEventID, String(chunkCount), String(i)], ...(tags || []), ],