update nostr.ts (#62)

This commit is contained in:
BlowaterNostr 2023-07-11 17:19:57 +08:00 committed by GitHub
parent 1fc7dbf731
commit 41eedc0630
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 116 additions and 186 deletions

View File

@ -97,7 +97,7 @@ async function initProfileSyncer(
// Sync DM events
const messageStream = dm.getAllEncryptedMessagesOf(
myPublicKey.hex,
myPublicKey,
pool,
since,
);

View File

@ -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,

View File

@ -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);

View File

@ -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",

View File

@ -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));

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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"
}
}

View File

@ -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();
});

View File

@ -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,

View File

@ -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],
},
);

View File

@ -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++) {

View File

@ -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 || []),
],