diff --git a/packages/app/package.json b/packages/app/package.json index 5742d707..e6eaca29 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -6,6 +6,8 @@ "@lightninglabs/lnc-web": "^0.2.3-alpha", "@noble/curves": "^1.0.0", "@noble/hashes": "^1.2.0", + "@nostr-dev-kit/ndk": "^2.3.1", + "@nostr-dev-kit/ndk-cache-dexie": "^2.2.1", "@scure/base": "^1.1.1", "@scure/bip32": "^1.3.0", "@scure/bip39": "^1.1.1", @@ -28,6 +30,7 @@ "marked": "^9.1.0", "marked-footnote": "^1.0.0", "match-sorter": "^6.3.1", + "nostr-tools": "^2.1.0", "qr-code-styling": "^1.6.0-rc.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/app/src/Element/Event/Create/util.ts b/packages/app/src/Element/Event/Create/util.ts index ae2f03b8..cf9bfabc 100644 --- a/packages/app/src/Element/Event/Create/util.ts +++ b/packages/app/src/Element/Event/Create/util.ts @@ -1,6 +1,5 @@ import { NostrEvent, OkResponse, SystemInterface } from "@snort/system"; import { removeUndefined } from "@snort/shared"; -import { getWebRtcPool } from "@/webrtc"; export async function sendEventToRelays( system: SystemInterface, @@ -8,7 +7,6 @@ export async function sendEventToRelays( customRelays?: Array, setResults?: (x: Array) => void, ) { - getWebRtcPool()?.send(ev); if (customRelays) { system.HandleEvent({ ...ev, relays: [] }); return removeUndefined( diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx index ad144cd4..f89731c7 100644 --- a/packages/app/src/index.tsx +++ b/packages/app/src/index.tsx @@ -65,6 +65,8 @@ import { setupWebLNWalletConfig } from "@/Wallet/WebLN"; import { Wallets } from "@/Wallet"; import Fuse from "fuse.js"; import NetworkGraph from "@/Pages/NetworkGraph"; +import { NDKEvent } from "@nostr-dev-kit/ndk"; +import ndk, { dexieAdapter } from "@/ndk"; declare global { interface Window { @@ -159,6 +161,15 @@ System.on("event", ev => { if (ev.kind === 3) { socialGraphInstance.handleFollowEvent(ev); } + const ndkEvent = new NDKEvent(ndk, ev); + dexieAdapter.setEvent(ndkEvent, []); +}); + +System.on("subscribe", (filters: Array) => { + const sub = ndk.subscribe(filters); + sub.on("event", event => { + System.HandleEvent(event.rawEvent()); + }); }); async function fetchProfile(key: string) { diff --git a/packages/app/src/ndk.ts b/packages/app/src/ndk.ts new file mode 100644 index 00000000..f32c81dc --- /dev/null +++ b/packages/app/src/ndk.ts @@ -0,0 +1,8 @@ +import NDKCacheAdapterDexie from "@nostr-dev-kit/ndk-cache-dexie"; +import NDK from "@nostr-dev-kit/ndk"; + +const dexieAdapter = new NDKCacheAdapterDexie(); +const ndk = new NDK({ cacheAdapter: dexieAdapter }); + +export { dexieAdapter }; +export default ndk; diff --git a/packages/app/src/webrtc/WebRTCConnection.ts b/packages/app/src/webrtc/WebRTCConnection.ts index 095c993d..e428939d 100644 --- a/packages/app/src/webrtc/WebRTCConnection.ts +++ b/packages/app/src/webrtc/WebRTCConnection.ts @@ -1,9 +1,13 @@ import { Socket } from "socket.io-client"; import EventEmitter from "eventemitter3"; +import ndk, { dexieAdapter } from "@/ndk"; +import { NDKEvent } from "@nostr-dev-kit/ndk"; +import { System } from "@/index"; export class WebRTCConnection extends EventEmitter { private peerConnection: RTCPeerConnection; private dataChannel: RTCDataChannel; + private seenEvents = new Set(); constructor( private socket: Socket, @@ -15,6 +19,15 @@ export class WebRTCConnection extends EventEmitter { this.dataChannel = this.peerConnection.createDataChannel("data"); this.registerPeerConnectionEvents(); this.setupDataChannel(); + System.on("subscribe", filters => { + this.send(JSON.stringify(["REQ", "", filters])); + }); + System.on("event", event => { + if (event.relays.length) return; // only send our own new events + if (this.seenEvents.has(event.id)) return; + this.seenEvents.add(event.id); + this.send(JSON.stringify(["EVENT", "", event])); + }); } private log(...args: T): void { @@ -56,22 +69,37 @@ export class WebRTCConnection extends EventEmitter { } private handleDataChannelMessage(event: MessageEvent): void { - this.log(`-> "${event.data}"`); - if (event.data === "ping") { - this.send("pong"); - } else { - try { - const data = JSON.parse(event.data); - this.emit("event", { ...data, relays: [`webrtc:${this.peerId}`] }); - } catch (e) { - // Ignore + try { + const data = JSON.parse(event.data); + const requestType = data[0]; + switch (requestType) { + case "EVENT": + const event = data[2]; + // this.log("-> EVENT", event); + if (this.seenEvents.has(event.id)) return; + this.seenEvents.add(event.id); + this.emit("event", { ...event, relays: [`webrtc:${this.peerId}`] }); + const ndkEvent = new NDKEvent(ndk, event); + dexieAdapter.setEvent(ndkEvent, []); + break; + case "REQ": // nostr subscription + // this.log("-> REQ", JSON.stringify(data)); + const filters = data[2]; + const sub = ndk.subscribe(filters); + sub.on("event", event => { + console.log("have event requested by peer", event.rawEvent()); + this.send(JSON.stringify(["EVENT", "", event.rawEvent()])); + }); + break; } + } catch (e) { + this.log("Error parsing data channel message", e); } } public send(data: string): void { if (this.dataChannel.readyState === "open") { - this.log(`<- "${data}"`); + // this.log(`<- "${data}"`); this.dataChannel.send(data); } } diff --git a/packages/app/src/webrtc/WebRTCPool.ts b/packages/app/src/webrtc/WebRTCPool.ts index f5ed5f65..2eb10b28 100644 --- a/packages/app/src/webrtc/WebRTCPool.ts +++ b/packages/app/src/webrtc/WebRTCPool.ts @@ -27,7 +27,12 @@ class WebRTCPool extends EventEmitter { this.peers.forEach(conn => { if (!recipients || recipients.includes(conn.peerId)) { try { - conn.send(typeof data === "string" ? data : JSON.stringify(data)); + if (typeof data === "string") { + conn.send(data); + } else { + const msg = JSON.stringify(["EVENT", "", data]); + conn.send(msg); + } } catch (e) { console.error(e); } diff --git a/packages/app/src/webrtc/index.ts b/packages/app/src/webrtc/index.ts index 89f5f606..6548ba72 100644 --- a/packages/app/src/webrtc/index.ts +++ b/packages/app/src/webrtc/index.ts @@ -25,7 +25,6 @@ LoginStore.hook(() => { console.log("event from webrtc", event); System.HandleEvent(event); }); - interval = setInterval(() => pool?.send("ping"), 10000); } }); diff --git a/packages/system/src/nostr-system.ts b/packages/system/src/nostr-system.ts index 0c49e028..916bfd52 100644 --- a/packages/system/src/nostr-system.ts +++ b/packages/system/src/nostr-system.ts @@ -2,7 +2,7 @@ import debug from "debug"; import EventEmitter from "eventemitter3"; import { unwrap, sanitizeRelayUrl, FeedCache, removeUndefined } from "@snort/shared"; -import { NostrEvent, TaggedNostrEvent } from "./nostr"; +import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr"; import { Connection, RelaySettings, ConnectionStateSnapshot, OkResponse } from "./connection"; import { Query } from "./query"; import { NoteCollection, NoteStore } from "./note-collection"; @@ -30,6 +30,7 @@ interface NostrSystemEvents { change: (state: SystemSnapshot) => void; auth: (challenge: string, relay: string, cb: (ev: NostrEvent) => void) => void; event: (ev: TaggedNostrEvent) => void; + subscribe: (filters: ReqFilter[]) => void; } /** @@ -206,11 +207,11 @@ export class NostrSystem extends EventEmitter implements Syst } } - this.emit("event", ev); - for (const [, v] of this.Queries) { v.handleEvent(sub, ev); } + + this.emit("event", ev); } /** @@ -352,6 +353,8 @@ export class NostrSystem extends EventEmitter implements Syst } qSend.filters = fNew; + this.emit("subscribe", fNew); + if (qSend.relay) { this.#log("Sending query to %s %O", qSend.relay, qSend); const s = this.#sockets.get(qSend.relay); diff --git a/yarn.lock b/yarn.lock index 973e39c0..00fb5c79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2564,6 +2564,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": + version: 1.1.0 + resolution: "@noble/curves@npm:1.1.0" + dependencies: + "@noble/hashes": 1.3.1 + checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0, @noble/curves@npm:^1.0.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:~1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -2573,15 +2582,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:~1.1.0": - version: 1.1.0 - resolution: "@noble/curves@npm:1.1.0" - dependencies: - "@noble/hashes": 1.3.1 - checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 - languageName: node - linkType: hard - "@noble/hashes@npm:1.3.1": version: 1.3.1 resolution: "@noble/hashes@npm:1.3.1" @@ -2596,7 +2596,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:~1.3.1": +"@noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.1": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" checksum: 8a6496d1c0c64797339bc694ad06cdfaa0f9e56cd0c3f68ae3666cfb153a791a55deb0af9c653c7ed2db64d537aa3e3054629740d2f2338bb1dcb7ab60cd205b @@ -2610,6 +2610,13 @@ __metadata: languageName: node linkType: hard +"@noble/secp256k1@npm:^2.0.0": + version: 2.0.0 + resolution: "@noble/secp256k1@npm:2.0.0" + checksum: 945d48a1142751658e89142c33a53c3d7cf8f0ce7cf43bd36b4dcfc1819bc7dc9c227737aca2c55a5699ff548122e21ca19395eb7682a1cea9d5e5e9cda22812 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2637,6 +2644,57 @@ __metadata: languageName: node linkType: hard +"@nostr-dev-kit/ndk-cache-dexie@npm:^2.2.1": + version: 2.2.1 + resolution: "@nostr-dev-kit/ndk-cache-dexie@npm:2.2.1" + dependencies: + "@nostr-dev-kit/ndk": 2.3.0 + debug: ^4.3.4 + dexie: ^3.2.4 + nostr-tools: ^1.14.0 + typescript-lru-cache: ^2.0.0 + checksum: 58a992f86dc1b2b03302041fc0a2a4fb30c296613fef1b1d084e223b3658e10dc3f8130b7315b506e0ba67510957267994d98117f4c59c27b313189ce6a5a239 + languageName: node + linkType: hard + +"@nostr-dev-kit/ndk@npm:2.3.0": + version: 2.3.0 + resolution: "@nostr-dev-kit/ndk@npm:2.3.0" + dependencies: + "@noble/hashes": ^1.3.1 + "@noble/secp256k1": ^2.0.0 + "@scure/base": ^1.1.1 + debug: ^4.3.4 + light-bolt11-decoder: ^3.0.0 + node-fetch: ^3.3.1 + nostr-tools: ^1.15.0 + tseep: ^1.1.1 + typescript-lru-cache: ^2.0.0 + utf8-buffer: ^1.0.0 + websocket-polyfill: ^0.0.3 + checksum: 7c04880a6a5ac3cb2826869ac4a81eeb0465041a7ee4769d8edd8b146ffbdd747ea76892ceff30fc0b050ac89256702c4c1af91c31003807c8bcda03aa89c340 + languageName: node + linkType: hard + +"@nostr-dev-kit/ndk@npm:^2.3.1": + version: 2.3.1 + resolution: "@nostr-dev-kit/ndk@npm:2.3.1" + dependencies: + "@noble/hashes": ^1.3.1 + "@noble/secp256k1": ^2.0.0 + "@scure/base": ^1.1.1 + debug: ^4.3.4 + light-bolt11-decoder: ^3.0.0 + node-fetch: ^3.3.1 + nostr-tools: ^1.15.0 + tseep: ^1.1.1 + typescript-lru-cache: ^2.0.0 + utf8-buffer: ^1.0.0 + websocket-polyfill: ^0.0.3 + checksum: ce3fa09da2286aa99ba92be2a503d11163d18f3d91aec8e8135fb5b388e49308a32f41946686be816d36e5144ce181b021986999ad9386689a5d2c721c1869a9 + languageName: node + linkType: hard + "@npmcli/agent@npm:^2.0.0": version: 2.2.0 resolution: "@npmcli/agent@npm:2.2.0" @@ -2928,6 +2986,8 @@ __metadata: "@lightninglabs/lnc-web": ^0.2.3-alpha "@noble/curves": ^1.0.0 "@noble/hashes": ^1.2.0 + "@nostr-dev-kit/ndk": ^2.3.1 + "@nostr-dev-kit/ndk-cache-dexie": ^2.2.1 "@scure/base": ^1.1.1 "@scure/bip32": ^1.3.0 "@scure/bip39": ^1.1.1 @@ -2969,6 +3029,7 @@ __metadata: marked: ^9.1.0 marked-footnote: ^1.0.0 match-sorter: ^6.3.1 + nostr-tools: ^2.1.0 postcss: ^8.4.31 postcss-preset-env: ^9.2.0 prettier: 2.8.3 @@ -4633,6 +4694,16 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:^4.0.1": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 7e9a46f1867dca72fda350966eb468eca77f4d623407b0650913fadf73d5750d883147d6e5e21c56f9d3b0bdc35d5474e80a600b9f31ec781315b4d2469ef087 + languageName: node + linkType: hard + "builtin-modules@npm:^3.1.0": version: 3.3.0 resolution: "builtin-modules@npm:3.3.0" @@ -5257,6 +5328,16 @@ __metadata: languageName: node linkType: hard +"d@npm:1, d@npm:^1.0.1": + version: 1.0.1 + resolution: "d@npm:1.0.1" + dependencies: + es5-ext: ^0.10.50 + type: ^1.0.1 + checksum: 49ca0639c7b822db670de93d4fbce44b4aa072cd848c76292c9978a8cd0fff1028763020ff4b0f147bd77bfe29b4c7f82e0f71ade76b2a06100543cdfd948d19 + languageName: node + linkType: hard + "data-joint@npm:1": version: 1.3.1 resolution: "data-joint@npm:1.3.1" @@ -5266,6 +5347,13 @@ __metadata: languageName: node linkType: hard +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c + languageName: node + linkType: hard + "data-urls@npm:^3.0.2": version: 3.0.2 resolution: "data-urls@npm:3.0.2" @@ -5289,6 +5377,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:^2.2.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + "decimal.js-light@npm:^2.4.1": version: 2.5.1 resolution: "decimal.js-light@npm:2.5.1" @@ -5665,6 +5762,38 @@ __metadata: languageName: node linkType: hard +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": + version: 0.10.62 + resolution: "es5-ext@npm:0.10.62" + dependencies: + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.3 + next-tick: ^1.1.0 + checksum: 25f42f6068cfc6e393cf670bc5bba249132c5f5ec2dd0ed6e200e6274aca2fed8e9aec8a31c76031744c78ca283c57f0b41c7e737804c6328c7b8d3fbcba7983 + languageName: node + linkType: hard + +"es6-iterator@npm:^2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: 1 + es5-ext: ^0.10.35 + es6-symbol: ^3.1.1 + checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": + version: 3.1.3 + resolution: "es6-symbol@npm:3.1.3" + dependencies: + d: ^1.0.1 + ext: ^1.1.2 + checksum: cd49722c2a70f011eb02143ef1c8c70658d2660dead6641e160b94619f408b9cf66425515787ffe338affdf0285ad54f4eae30ea5bd510e33f8659ec53bcaa70 + languageName: node + linkType: hard + "esbuild@npm:^0.19.3": version: 0.19.5 resolution: "esbuild@npm:0.19.5" @@ -6001,6 +6130,15 @@ __metadata: languageName: node linkType: hard +"ext@npm:^1.1.2": + version: 1.7.0 + resolution: "ext@npm:1.7.0" + dependencies: + type: ^2.7.2 + checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -6060,6 +6198,16 @@ __metadata: languageName: node linkType: hard +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: f19bc28a2a0b9626e69fd7cf3a05798706db7f6c7548da657cbf5026a570945f5eeaedff52007ea35c8bcd3d237c58a20bf1543bc568ab2422411d762dd3d5bf + languageName: node + linkType: hard + "fflate@npm:~0.6.10": version: 0.6.10 resolution: "fflate@npm:0.6.10" @@ -6172,6 +6320,15 @@ __metadata: languageName: node linkType: hard +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: ^3.1.2 + checksum: 82a34df292afadd82b43d4a740ce387bc08541e0a534358425193017bf9fb3567875dc5f69564984b1da979979b70703aa73dee715a17b6c229752ae736dd9db + languageName: node + linkType: hard + "fraction.js@npm:^4.3.6": version: 4.3.7 resolution: "fraction.js@npm:4.3.7" @@ -6975,6 +7132,13 @@ __metadata: languageName: node linkType: hard +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -8271,6 +8435,13 @@ __metadata: languageName: node linkType: hard +"mitata@npm:^0.1.6": + version: 0.1.6 + resolution: "mitata@npm:0.1.6" + checksum: fe64e22ae17bfb748a0d71b2ecf1f64da09c633520c819ac409018a49843adfd9817612a152651e5f1fa080f227fc382e0cdbb92a11e2f69f3cc9f843ba7d603 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -8292,6 +8463,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -8333,6 +8511,13 @@ __metadata: languageName: node linkType: hard +"next-tick@npm:^1.1.0": + version: 1.1.0 + resolution: "next-tick@npm:1.1.0" + checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b + languageName: node + linkType: hard + "ngraph.events@npm:^1.0.0, ngraph.events@npm:^1.2.1": version: 1.2.2 resolution: "ngraph.events@npm:1.2.2" @@ -8374,6 +8559,35 @@ __metadata: languageName: node linkType: hard +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.1": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: ^4.0.0 + fetch-blob: ^3.1.4 + formdata-polyfill: ^4.0.10 + checksum: 06a04095a2ddf05b0830a0d5302699704d59bda3102894ea64c7b9d4c865ecdff2d90fd042df7f5bc40337266961cb6183dcc808ea4f3000d024f422b462da92 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.7.1 + resolution: "node-gyp-build@npm:4.7.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 2ef8248021489db03be3e8098977cdc797b80a9b12b77c6dcb89b0dc89b8c62e6a482672ee298f61021740ae7f080fb33154cfec8fb158cec620f57b0fae87c0 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -8433,6 +8647,25 @@ __metadata: languageName: node linkType: hard +"nostr-tools@npm:^1.14.0, nostr-tools@npm:^1.15.0": + version: 1.17.0 + resolution: "nostr-tools@npm:1.17.0" + dependencies: + "@noble/ciphers": 0.2.0 + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.1 + "@scure/base": 1.1.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + peerDependencies: + typescript: ">=5.0.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 55cb4f7fd447a653fcc4f073f2cc6bea458e75ff5c40ab31baa2a8aae1e0ef2fabb840c08fa53a8fd5037dba7673c7361bb41fef60be5411525ceaa5ea46a1ca + languageName: node + linkType: hard + "nostr-tools@npm:^2.0.2": version: 2.0.2 resolution: "nostr-tools@npm:2.0.2" @@ -8453,6 +8686,27 @@ __metadata: languageName: node linkType: hard +"nostr-tools@npm:^2.1.0": + version: 2.1.0 + resolution: "nostr-tools@npm:2.1.0" + dependencies: + "@noble/ciphers": 0.2.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.1 + "@scure/base": 1.1.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + mitata: ^0.1.6 + nostr-wasm: v0.1.0 + peerDependencies: + typescript: ">=5.0.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 04e4bef90944fe83ef320422694fb59e9a3e40ba24af4cf0964a3b7957b6cd653f5524acc06f6f49f4f21168d812af1859aa52ef4ec19184022b2308dd2079bf + languageName: node + linkType: hard + "nostr-wasm@npm:v0.0.3": version: 0.0.3 resolution: "nostr-wasm@npm:0.0.3" @@ -8460,6 +8714,13 @@ __metadata: languageName: node linkType: hard +"nostr-wasm@npm:v0.1.0": + version: 0.1.0 + resolution: "nostr-wasm@npm:0.1.0" + checksum: c0b404912d47c98efa69b4838a5bb7b2094c869b1aa2a96359c978c911878e9b37228296ef6432254815c9d15cdeebaa16b6d45106db4f3673bb5a6a00cc669c + languageName: node + linkType: hard + "nostr-webrtc-server@workspace:packages/webrtc-server": version: 0.0.0-use.local resolution: "nostr-webrtc-server@workspace:packages/webrtc-server" @@ -10866,6 +11127,13 @@ __metadata: languageName: node linkType: hard +"tseep@npm:^1.1.1": + version: 1.1.3 + resolution: "tseep@npm:1.1.3" + checksum: 648bb443b46043edacfdac700237dcd98d635db3f4188662e9a50fd1e60afee0e9a625c618470acfe905b1785b6c4c46eb73f16a44d47a46807760c0606853f8 + languageName: node + linkType: hard + "tslib@npm:2.6.2, tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -10873,6 +11141,13 @@ __metadata: languageName: node linkType: hard +"tstl@npm:^2.0.7": + version: 2.5.13 + resolution: "tstl@npm:2.5.13" + checksum: 6442cf024066c10be8bd21f8578c3edbcba75b6d27a8965bc7f5dcb745a309753dffedbe28019b2cf5b159dd5f10cd9f64a1102fef4ab82917e0cca88a7e0ce2 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -10910,6 +11185,20 @@ __metadata: languageName: node linkType: hard +"type@npm:^1.0.1": + version: 1.2.0 + resolution: "type@npm:1.2.0" + checksum: dae8c64f82c648b985caf321e9dd6e8b7f4f2e2d4f846fc6fd2c8e9dc7769382d8a52369ddbaccd59aeeceb0df7f52fb339c465be5f2e543e81e810e413451ee + languageName: node + linkType: hard + +"type@npm:^2.7.2": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.0": version: 1.0.0 resolution: "typed-array-buffer@npm:1.0.0" @@ -10957,6 +11246,22 @@ __metadata: languageName: node linkType: hard +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + languageName: node + linkType: hard + +"typescript-lru-cache@npm:^2.0.0": + version: 2.0.0 + resolution: "typescript-lru-cache@npm:2.0.0" + checksum: 50948bb62cfe928f0baf4dcc09634cc2456520c0abf2ad726483039371eb523ee6b9c4f45210704f3c1fb30dc6ae5e5ffb27127a34d626848db9d80bcb3057d1 + languageName: node + linkType: hard + "typescript@npm:5, typescript@npm:^5.2.2": version: 5.2.2 resolution: "typescript@npm:5.2.2" @@ -11177,6 +11482,23 @@ __metadata: languageName: node linkType: hard +"utf-8-validate@npm:^5.0.2": + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 5579350a023c66a2326752b6c8804cc7b39dcd251bb088241da38db994b8d78352e388dcc24ad398ab98385ba3c5ffcadb6b5b14b2637e43f767869055e46ba6 + languageName: node + linkType: hard + +"utf8-buffer@npm:^1.0.0": + version: 1.0.0 + resolution: "utf8-buffer@npm:1.0.0" + checksum: 3107f643d03fef041f8b92b9f20714a1c7f3305ef2e0bf79d6b92bcc0660e8c10eaac113a561b40bf7f8b154ccdf835fabf41743ffd34911fcf8338e3378cb9b + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.2": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -11398,6 +11720,13 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:^3.0.3": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + languageName: node + linkType: hard + "webcrypto-core@npm:^1.7.7": version: 1.7.7 resolution: "webcrypto-core@npm:1.7.7" @@ -11425,6 +11754,30 @@ __metadata: languageName: node linkType: hard +"websocket-polyfill@npm:^0.0.3": + version: 0.0.3 + resolution: "websocket-polyfill@npm:0.0.3" + dependencies: + tstl: ^2.0.7 + websocket: ^1.0.28 + checksum: e4f2d532717f007eb69c424d9fa0e7296b56d19d6b7a753722523b9f3be3f7d0d70d12840392b70ad711c8f1eb508e40beb62abf64e8fc48992a27157ba2c45e + languageName: node + linkType: hard + +"websocket@npm:^1.0.28": + version: 1.0.34 + resolution: "websocket@npm:1.0.34" + dependencies: + bufferutil: ^4.0.1 + debug: ^2.2.0 + es5-ext: ^0.10.50 + typedarray-to-buffer: ^3.1.5 + utf-8-validate: ^5.0.2 + yaeti: ^0.0.6 + checksum: 8a0ce6d79cc1334bb6ea0d607f0092f3d32700b4dd19e4d5540f2a85f3b50e1f8110da0e4716737056584dde70bbebcb40bbd94bbb437d7468c71abfbfa077d8 + languageName: node + linkType: hard + "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -11834,6 +12187,13 @@ __metadata: languageName: node linkType: hard +"yaeti@npm:^0.0.6": + version: 0.0.6 + resolution: "yaeti@npm:0.0.6" + checksum: 6db12c152f7c363b80071086a3ebf5032e03332604eeda988872be50d6c8469e1f13316175544fa320f72edad696c2d83843ad0ff370659045c1a68bcecfcfea + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1"