mirror of
https://github.com/BlowaterNostr/blowater.git
synced 2024-10-18 07:33:22 +00:00
update nostr.ts (#62)
This commit is contained in:
parent
1fc7dbf731
commit
41eedc0630
@ -97,7 +97,7 @@ async function initProfileSyncer(
|
||||
|
||||
// Sync DM events
|
||||
const messageStream = dm.getAllEncryptedMessagesOf(
|
||||
myPublicKey.hex,
|
||||
myPublicKey,
|
||||
pool,
|
||||
since,
|
||||
);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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",
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
21
deno.lock
21
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"
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
});
|
||||
|
@ -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,
|
||||
|
@ -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],
|
||||
},
|
||||
);
|
||||
|
@ -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++) {
|
||||
|
9
nostr.ts
9
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 || []),
|
||||
],
|
||||
|
Loading…
Reference in New Issue
Block a user