@hashtree/worker 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/app-runtime.d.ts +60 -0
  2. package/dist/app-runtime.d.ts.map +1 -0
  3. package/dist/app-runtime.js +271 -0
  4. package/dist/app-runtime.js.map +1 -0
  5. package/dist/capabilities/blossomBandwidthTracker.d.ts +26 -0
  6. package/dist/capabilities/blossomBandwidthTracker.d.ts.map +1 -0
  7. package/dist/capabilities/blossomBandwidthTracker.js +53 -0
  8. package/dist/capabilities/blossomBandwidthTracker.js.map +1 -0
  9. package/dist/capabilities/blossomTransport.d.ts +22 -0
  10. package/dist/capabilities/blossomTransport.d.ts.map +1 -0
  11. package/dist/capabilities/blossomTransport.js +139 -0
  12. package/dist/capabilities/blossomTransport.js.map +1 -0
  13. package/dist/capabilities/connectivity.d.ts +3 -0
  14. package/dist/capabilities/connectivity.d.ts.map +1 -0
  15. package/dist/capabilities/connectivity.js +49 -0
  16. package/dist/capabilities/connectivity.js.map +1 -0
  17. package/dist/capabilities/idbStorage.d.ts +25 -0
  18. package/dist/capabilities/idbStorage.d.ts.map +1 -0
  19. package/dist/capabilities/idbStorage.js +73 -0
  20. package/dist/capabilities/idbStorage.js.map +1 -0
  21. package/dist/capabilities/meshRouterStore.d.ts +71 -0
  22. package/dist/capabilities/meshRouterStore.d.ts.map +1 -0
  23. package/dist/capabilities/meshRouterStore.js +316 -0
  24. package/dist/capabilities/meshRouterStore.js.map +1 -0
  25. package/dist/capabilities/rootResolver.d.ts +10 -0
  26. package/dist/capabilities/rootResolver.d.ts.map +1 -0
  27. package/dist/capabilities/rootResolver.js +392 -0
  28. package/dist/capabilities/rootResolver.js.map +1 -0
  29. package/dist/client-id.d.ts +18 -0
  30. package/dist/client-id.d.ts.map +1 -0
  31. package/dist/client-id.js +98 -0
  32. package/dist/client-id.js.map +1 -0
  33. package/dist/client.d.ts +61 -0
  34. package/dist/client.d.ts.map +1 -0
  35. package/dist/client.js +417 -0
  36. package/dist/client.js.map +1 -0
  37. package/dist/entry.d.ts +2 -0
  38. package/dist/entry.d.ts.map +1 -0
  39. package/dist/entry.js +3 -0
  40. package/dist/entry.js.map +1 -0
  41. package/dist/htree-path.d.ts +13 -0
  42. package/dist/htree-path.d.ts.map +1 -0
  43. package/dist/htree-path.js +38 -0
  44. package/dist/htree-path.js.map +1 -0
  45. package/dist/htree-url.d.ts +22 -0
  46. package/dist/htree-url.d.ts.map +1 -0
  47. package/dist/htree-url.js +118 -0
  48. package/dist/htree-url.js.map +1 -0
  49. package/dist/index.d.ts +17 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +8 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/mediaStreaming.d.ts +7 -0
  54. package/dist/mediaStreaming.d.ts.map +1 -0
  55. package/dist/mediaStreaming.js +48 -0
  56. package/dist/mediaStreaming.js.map +1 -0
  57. package/dist/p2p/boundedQueue.d.ts +79 -0
  58. package/dist/p2p/boundedQueue.d.ts.map +1 -0
  59. package/dist/p2p/boundedQueue.js +134 -0
  60. package/dist/p2p/boundedQueue.js.map +1 -0
  61. package/dist/p2p/errorMessage.d.ts +5 -0
  62. package/dist/p2p/errorMessage.d.ts.map +1 -0
  63. package/dist/p2p/errorMessage.js +7 -0
  64. package/dist/p2p/errorMessage.js.map +1 -0
  65. package/dist/p2p/index.d.ts +8 -0
  66. package/dist/p2p/index.d.ts.map +1 -0
  67. package/dist/p2p/index.js +6 -0
  68. package/dist/p2p/index.js.map +1 -0
  69. package/dist/p2p/lruCache.d.ts +26 -0
  70. package/dist/p2p/lruCache.d.ts.map +1 -0
  71. package/dist/p2p/lruCache.js +65 -0
  72. package/dist/p2p/lruCache.js.map +1 -0
  73. package/dist/p2p/meshQueryRouter.d.ts +57 -0
  74. package/dist/p2p/meshQueryRouter.d.ts.map +1 -0
  75. package/dist/p2p/meshQueryRouter.js +264 -0
  76. package/dist/p2p/meshQueryRouter.js.map +1 -0
  77. package/dist/p2p/protocol.d.ts +10 -0
  78. package/dist/p2p/protocol.d.ts.map +1 -0
  79. package/dist/p2p/protocol.js +2 -0
  80. package/dist/p2p/protocol.js.map +1 -0
  81. package/dist/p2p/queryForwardingMachine.d.ts +46 -0
  82. package/dist/p2p/queryForwardingMachine.d.ts.map +1 -0
  83. package/dist/p2p/queryForwardingMachine.js +144 -0
  84. package/dist/p2p/queryForwardingMachine.js.map +1 -0
  85. package/dist/p2p/signaling.d.ts +63 -0
  86. package/dist/p2p/signaling.d.ts.map +1 -0
  87. package/dist/p2p/signaling.js +185 -0
  88. package/dist/p2p/signaling.js.map +1 -0
  89. package/dist/p2p/uploadRateLimiter.d.ts +21 -0
  90. package/dist/p2p/uploadRateLimiter.d.ts.map +1 -0
  91. package/dist/p2p/uploadRateLimiter.js +62 -0
  92. package/dist/p2p/uploadRateLimiter.js.map +1 -0
  93. package/dist/p2p/webrtcController.d.ts +176 -0
  94. package/dist/p2p/webrtcController.d.ts.map +1 -0
  95. package/dist/p2p/webrtcController.js +938 -0
  96. package/dist/p2p/webrtcController.js.map +1 -0
  97. package/dist/p2p/webrtcProxy.d.ts +62 -0
  98. package/dist/p2p/webrtcProxy.d.ts.map +1 -0
  99. package/dist/p2p/webrtcProxy.js +447 -0
  100. package/dist/p2p/webrtcProxy.js.map +1 -0
  101. package/dist/privacyGuards.d.ts +14 -0
  102. package/dist/privacyGuards.d.ts.map +1 -0
  103. package/dist/privacyGuards.js +27 -0
  104. package/dist/privacyGuards.js.map +1 -0
  105. package/dist/protocol.d.ts +225 -0
  106. package/dist/protocol.d.ts.map +1 -0
  107. package/dist/protocol.js +2 -0
  108. package/dist/protocol.js.map +1 -0
  109. package/dist/relay/identity.d.ts +36 -0
  110. package/dist/relay/identity.d.ts.map +1 -0
  111. package/dist/relay/identity.js +78 -0
  112. package/dist/relay/identity.js.map +1 -0
  113. package/dist/relay/mediaHandler.d.ts +64 -0
  114. package/dist/relay/mediaHandler.d.ts.map +1 -0
  115. package/dist/relay/mediaHandler.js +1285 -0
  116. package/dist/relay/mediaHandler.js.map +1 -0
  117. package/dist/relay/ndk.d.ts +96 -0
  118. package/dist/relay/ndk.d.ts.map +1 -0
  119. package/dist/relay/ndk.js +502 -0
  120. package/dist/relay/ndk.js.map +1 -0
  121. package/dist/relay/nostr-wasm.d.ts +14 -0
  122. package/dist/relay/nostr-wasm.d.ts.map +1 -0
  123. package/dist/relay/nostr-wasm.js +246 -0
  124. package/dist/relay/nostr-wasm.js.map +1 -0
  125. package/dist/relay/nostr.d.ts +60 -0
  126. package/dist/relay/nostr.d.ts.map +1 -0
  127. package/dist/relay/nostr.js +207 -0
  128. package/dist/relay/nostr.js.map +1 -0
  129. package/dist/relay/protocol.d.ts +592 -0
  130. package/dist/relay/protocol.d.ts.map +1 -0
  131. package/dist/relay/protocol.js +16 -0
  132. package/dist/relay/protocol.js.map +1 -0
  133. package/dist/relay/publicAssetUrl.d.ts +6 -0
  134. package/dist/relay/publicAssetUrl.d.ts.map +1 -0
  135. package/dist/relay/publicAssetUrl.js +14 -0
  136. package/dist/relay/publicAssetUrl.js.map +1 -0
  137. package/dist/relay/rootPathResolver.d.ts +9 -0
  138. package/dist/relay/rootPathResolver.d.ts.map +1 -0
  139. package/dist/relay/rootPathResolver.js +32 -0
  140. package/dist/relay/rootPathResolver.js.map +1 -0
  141. package/dist/relay/signing.d.ts +50 -0
  142. package/dist/relay/signing.d.ts.map +1 -0
  143. package/dist/relay/signing.js +299 -0
  144. package/dist/relay/signing.js.map +1 -0
  145. package/dist/relay/treeRootCache.d.ts +86 -0
  146. package/dist/relay/treeRootCache.d.ts.map +1 -0
  147. package/dist/relay/treeRootCache.js +269 -0
  148. package/dist/relay/treeRootCache.js.map +1 -0
  149. package/dist/relay/treeRootSubscription.d.ts +55 -0
  150. package/dist/relay/treeRootSubscription.d.ts.map +1 -0
  151. package/dist/relay/treeRootSubscription.js +478 -0
  152. package/dist/relay/treeRootSubscription.js.map +1 -0
  153. package/dist/relay/utils/constants.d.ts +76 -0
  154. package/dist/relay/utils/constants.d.ts.map +1 -0
  155. package/dist/relay/utils/constants.js +113 -0
  156. package/dist/relay/utils/constants.js.map +1 -0
  157. package/dist/relay/utils/errorMessage.d.ts +5 -0
  158. package/dist/relay/utils/errorMessage.d.ts.map +1 -0
  159. package/dist/relay/utils/errorMessage.js +8 -0
  160. package/dist/relay/utils/errorMessage.js.map +1 -0
  161. package/dist/relay/utils/lruCache.d.ts +26 -0
  162. package/dist/relay/utils/lruCache.d.ts.map +1 -0
  163. package/dist/relay/utils/lruCache.js +66 -0
  164. package/dist/relay/utils/lruCache.js.map +1 -0
  165. package/dist/relay/webrtc.d.ts +2 -0
  166. package/dist/relay/webrtc.d.ts.map +1 -0
  167. package/dist/relay/webrtc.js +3 -0
  168. package/dist/relay/webrtc.js.map +1 -0
  169. package/dist/relay/webrtcSignaling.d.ts +37 -0
  170. package/dist/relay/webrtcSignaling.d.ts.map +1 -0
  171. package/dist/relay/webrtcSignaling.js +86 -0
  172. package/dist/relay/webrtcSignaling.js.map +1 -0
  173. package/dist/relay/worker.d.ts +12 -0
  174. package/dist/relay/worker.d.ts.map +1 -0
  175. package/dist/relay/worker.js +1540 -0
  176. package/dist/relay/worker.js.map +1 -0
  177. package/dist/relay-client.d.ts +31 -0
  178. package/dist/relay-client.d.ts.map +1 -0
  179. package/dist/relay-client.js +197 -0
  180. package/dist/relay-client.js.map +1 -0
  181. package/dist/relay-entry.d.ts +2 -0
  182. package/dist/relay-entry.d.ts.map +1 -0
  183. package/dist/relay-entry.js +2 -0
  184. package/dist/relay-entry.js.map +1 -0
  185. package/dist/runtime-network.d.ts +23 -0
  186. package/dist/runtime-network.d.ts.map +1 -0
  187. package/dist/runtime-network.js +105 -0
  188. package/dist/runtime-network.js.map +1 -0
  189. package/dist/runtime.d.ts +24 -0
  190. package/dist/runtime.d.ts.map +1 -0
  191. package/dist/runtime.js +126 -0
  192. package/dist/runtime.js.map +1 -0
  193. package/dist/transferableBytes.d.ts +2 -0
  194. package/dist/transferableBytes.d.ts.map +1 -0
  195. package/dist/transferableBytes.js +6 -0
  196. package/dist/transferableBytes.js.map +1 -0
  197. package/dist/tree-root.d.ts +201 -0
  198. package/dist/tree-root.d.ts.map +1 -0
  199. package/dist/tree-root.js +632 -0
  200. package/dist/tree-root.js.map +1 -0
  201. package/dist/types.d.ts +2 -0
  202. package/dist/types.d.ts.map +1 -0
  203. package/dist/types.js +2 -0
  204. package/dist/types.js.map +1 -0
  205. package/dist/worker.d.ts +9 -0
  206. package/dist/worker.d.ts.map +1 -0
  207. package/dist/worker.js +792 -0
  208. package/dist/worker.js.map +1 -0
  209. package/package.json +1 -1
@@ -0,0 +1,246 @@
1
+ // @ts-nocheck
2
+ function defineWasmEnv(label) {
3
+ label += ': ';
4
+ let AB_HEAP;
5
+ let ATU8_HEAP;
6
+ let ATU32_HEAP;
7
+ const console_out = (s_channel, s_out) => console[s_channel](label + s_out.replace(/\0/g, '\n'));
8
+ let s_error = '';
9
+ // for converting bytes to text
10
+ const utf8 = new TextDecoder();
11
+ const h_fds = {
12
+ // stdout
13
+ 1(s_out) {
14
+ console_out('debug', s_out);
15
+ },
16
+ // stderr
17
+ 2(s_out) {
18
+ console_out('error', (s_error = s_out));
19
+ }
20
+ };
21
+ const imports = {
22
+ abort() {
23
+ throw Error(label + (s_error || 'An unknown error occurred'));
24
+ },
25
+ memcpy: (ip_dst, ip_src, nb_size) => ATU8_HEAP.copyWithin(ip_dst, ip_src, ip_src + nb_size),
26
+ resize(w) {
27
+ throw Error(label + `Out of memory (resizing ${w})`);
28
+ },
29
+ write(i_fd, ip_iov, nl_iovs, ip_written) {
30
+ // output string
31
+ let s_out = '';
32
+ // track number of bytes read from buffers
33
+ let cb_read = 0;
34
+ // each pending iov
35
+ for (let i_iov = 0; i_iov < nl_iovs; i_iov++) {
36
+ // start of buffer in memory
37
+ const ip_start = ATU32_HEAP[ip_iov >> 2];
38
+ // size of buffer
39
+ const nb_len = ATU32_HEAP[(ip_iov + 4) >> 2];
40
+ ip_iov += 8;
41
+ // extract text from buffer
42
+ s_out += utf8.decode(ATU8_HEAP.subarray(ip_start, ip_start + nb_len));
43
+ // update number of bytes read
44
+ cb_read += nb_len;
45
+ }
46
+ // route to fd
47
+ if (h_fds[i_fd]) {
48
+ h_fds[i_fd](s_out);
49
+ }
50
+ else {
51
+ // no fd found
52
+ throw new Error(`libsecp256k1 tried writing to non-open file descriptor: ${i_fd}\n${s_out}`);
53
+ }
54
+ // write bytes read
55
+ ATU32_HEAP[ip_written >> 2] = cb_read;
56
+ // no error
57
+ return 0;
58
+ }
59
+ };
60
+ return [
61
+ imports,
62
+ (d_memory) => [
63
+ (AB_HEAP = d_memory.buffer),
64
+ (ATU8_HEAP = new Uint8Array(AB_HEAP)),
65
+ (ATU32_HEAP = new Uint32Array(AB_HEAP))
66
+ ]
67
+ ];
68
+ }
69
+ /*
70
+ * ================================
71
+ * GENERATED FILE WARNING
72
+ * Do not edit this file manually.
73
+ * ================================
74
+ */
75
+ const map_wasm_imports = (g_imports) => ({
76
+ a: {
77
+ a: g_imports.abort,
78
+ f: g_imports.memcpy,
79
+ d: g_imports.resize,
80
+ e: () => 52, // _fd_close,
81
+ c: () => 70, // _fd_seek,
82
+ b: g_imports.write,
83
+ },
84
+ });
85
+ const map_wasm_exports = (g_exports) => ({
86
+ malloc: g_exports['i'],
87
+ free: g_exports['j'],
88
+ sha256_initialize: g_exports['l'],
89
+ sha256_write: g_exports['m'],
90
+ sha256_finalize: g_exports['n'],
91
+ context_create: g_exports['o'],
92
+ xonly_pubkey_parse: g_exports['p'],
93
+ xonly_pubkey_serialize: g_exports['q'],
94
+ keypair_create: g_exports['r'],
95
+ keypair_xonly_pub: g_exports['s'],
96
+ schnorrsig_sign32: g_exports['t'],
97
+ schnorrsig_verify: g_exports['u'],
98
+ sbrk: g_exports['sbrk'],
99
+ memory: g_exports['g'],
100
+ init: () => g_exports['h'](),
101
+ });
102
+ /**
103
+ * Creates a new instance of the secp256k1 WASM and returns the Nostr wrapper
104
+ * @param z_src - a Response containing the WASM binary, a Promise that resolves to one,
105
+ * or the raw bytes to the WASM binary as a {@link BufferSource}
106
+ * @returns the wrapper API
107
+ */
108
+ const NostrWasm = async (z_src) => {
109
+ // prepare the runtime
110
+ const [defs, f_bind_heap] = defineWasmEnv('nostr-wasm');
111
+ const g_imports = map_wasm_imports(defs);
112
+ // prep the wasm module
113
+ let d_wasm;
114
+ // instantiate wasm binary by streaming the response bytes
115
+ if (z_src instanceof Response || z_src instanceof Promise) {
116
+ d_wasm = await WebAssembly.instantiateStreaming(z_src, g_imports);
117
+ }
118
+ else {
119
+ // instantiate using raw binary
120
+ d_wasm = await WebAssembly.instantiate(z_src, g_imports);
121
+ }
122
+ // create the exports struct
123
+ const g_wasm = map_wasm_exports(d_wasm.instance.exports);
124
+ // bind the heap and ref its view(s)
125
+ const [, ATU8_HEAP] = f_bind_heap(g_wasm.memory);
126
+ // call into the wasm module's init method
127
+ g_wasm.init();
128
+ const ip_sk = g_wasm.malloc(32 /* ByteLens.PRIVATE_KEY */);
129
+ const ip_ent = g_wasm.malloc(32 /* ByteLens.NONCE_ENTROPY */);
130
+ const ip_msg_hash = g_wasm.malloc(32 /* ByteLens.MSG_HASH */);
131
+ // scratch spaces
132
+ const ip_pubkey_scratch = g_wasm.malloc(32 /* ByteLens.XONLY_PUBKEY */);
133
+ const ip_sig_scratch = g_wasm.malloc(64 /* ByteLens.BIP340_SIG */);
134
+ // library handle: secp256k1_keypair;
135
+ const ip_keypair = g_wasm.malloc(96 /* ByteLens.KEYPAIR_LIB */);
136
+ // library handle: secp256k1_xonly_pubkey;
137
+ const ip_xonly_pubkey = g_wasm.malloc(64 /* ByteLens.XONLY_KEY_LIB */);
138
+ // library handle: secp256k1_sha256;
139
+ const ip_sha256 = g_wasm.malloc(104 /* ByteLens.SHA256_LIB */);
140
+ // create a reusable context
141
+ const ip_ctx = g_wasm.context_create(513 /* Flags.CONTEXT_SIGN */ | 257 /* Flags.CONTEXT_VERIFY */);
142
+ // an encoder for hashing strings
143
+ const utf8 = new TextEncoder();
144
+ /**
145
+ * Puts the given private key into program memory, runs the given callback, then zeroes out the key
146
+ * @param atu8_sk - the private key
147
+ * @param f_use - callback to use the key
148
+ * @returns whatever the callback returns
149
+ */
150
+ const with_keypair = (atu8_sk, f_use) => {
151
+ // prep callback return
152
+ let w_return;
153
+ // in case of any exception..
154
+ try {
155
+ // copy input bytes into place
156
+ ATU8_HEAP.set(atu8_sk, ip_sk);
157
+ // instantiate keypair
158
+ g_wasm.keypair_create(ip_ctx, ip_keypair, ip_sk);
159
+ // use private key
160
+ w_return = f_use();
161
+ }
162
+ finally {
163
+ // zero-out private key and keypair
164
+ ATU8_HEAP.fill(1, ip_sk, ip_sk + 32 /* ByteLens.PRIVATE_KEY */);
165
+ ATU8_HEAP.fill(2, ip_keypair, ip_keypair + 96 /* ByteLens.KEYPAIR_LIB */);
166
+ }
167
+ // forward result
168
+ return w_return;
169
+ };
170
+ const compute_event_id = (event) => {
171
+ const message = utf8.encode(`[0,"${event.pubkey}",${event.created_at},${event.kind},${JSON.stringify(event.tags)},${JSON.stringify(event.content)}]`);
172
+ const ip_message = g_wasm.malloc(message.length);
173
+ ATU8_HEAP.set(message, ip_message);
174
+ g_wasm.sha256_initialize(ip_sha256);
175
+ g_wasm.sha256_write(ip_sha256, ip_message, message.length);
176
+ g_wasm.sha256_finalize(ip_sha256, ip_msg_hash);
177
+ g_wasm.free(ip_message);
178
+ return ATU8_HEAP.slice(ip_msg_hash, ip_msg_hash + 32 /* ByteLens.MSG_HASH */);
179
+ };
180
+ return {
181
+ generateSecretKey: () => crypto.getRandomValues(new Uint8Array(32 /* ByteLens.PRIVATE_KEY */)),
182
+ getPublicKey(sk) {
183
+ if (1 /* BinaryResult.SUCCESS */ !==
184
+ with_keypair(sk, () => g_wasm.keypair_xonly_pub(ip_ctx, ip_xonly_pubkey, null, ip_keypair))) {
185
+ throw Error('failed to get pubkey from keypair');
186
+ }
187
+ // serialize the public key
188
+ g_wasm.xonly_pubkey_serialize(ip_ctx, ip_pubkey_scratch, ip_xonly_pubkey);
189
+ // extract result
190
+ return ATU8_HEAP.slice(ip_pubkey_scratch, ip_pubkey_scratch + 32 /* ByteLens.XONLY_PUBKEY */);
191
+ },
192
+ finalizeEvent(event, seckey, ent) {
193
+ with_keypair(seckey, () => {
194
+ // get public key (as in getPublicKey function above)
195
+ g_wasm.keypair_xonly_pub(ip_ctx, ip_xonly_pubkey, null, ip_keypair);
196
+ g_wasm.xonly_pubkey_serialize(ip_ctx, ip_pubkey_scratch, ip_xonly_pubkey);
197
+ const pubkey = ATU8_HEAP.slice(ip_pubkey_scratch, ip_pubkey_scratch + 32 /* ByteLens.XONLY_PUBKEY */);
198
+ event.pubkey = toHex(pubkey);
199
+ // compute event id
200
+ event.id = toHex(compute_event_id(event));
201
+ // copy entropy bytes into place, if they are provided
202
+ if (!ent && crypto.getRandomValues) {
203
+ ATU8_HEAP.set(crypto.getRandomValues(new Uint8Array(32)), ip_ent);
204
+ }
205
+ // perform signature (ip_msg_hash is already set from procedure above)
206
+ if (1 /* BinaryResult.SUCCESS */ !==
207
+ g_wasm.schnorrsig_sign32(ip_ctx, ip_sig_scratch, ip_msg_hash, ip_keypair, ip_ent)) {
208
+ throw Error('failed to sign');
209
+ }
210
+ });
211
+ const sig = ATU8_HEAP.slice(ip_sig_scratch, ip_sig_scratch + 64 /* ByteLens.BIP340_SIG */);
212
+ event.sig = toHex(sig);
213
+ },
214
+ verifyEvent(event) {
215
+ const id = fromHex(event.id);
216
+ // check event hash
217
+ const computed = compute_event_id(event);
218
+ for (let i = 0; i < id.length; i++) {
219
+ if (id[i] !== computed[i])
220
+ throw Error('id is invalid');
221
+ }
222
+ // copy event data into place
223
+ ATU8_HEAP.set(fromHex(event.sig), ip_sig_scratch);
224
+ ATU8_HEAP.set(fromHex(event.id), ip_msg_hash);
225
+ ATU8_HEAP.set(fromHex(event.pubkey), ip_pubkey_scratch);
226
+ // parse the public key
227
+ if (1 /* BinaryResult.SUCCESS */ !==
228
+ g_wasm.xonly_pubkey_parse(ip_ctx, ip_xonly_pubkey, ip_pubkey_scratch)) {
229
+ throw Error('pubkey is invalid');
230
+ }
231
+ // verify the signature
232
+ if (1 /* BinaryResult.SUCCESS */ !==
233
+ g_wasm.schnorrsig_verify(ip_ctx, ip_sig_scratch, ip_msg_hash, 32 /* ByteLens.MSG_HASH */, ip_xonly_pubkey)) {
234
+ throw Error('signature is invalid');
235
+ }
236
+ }
237
+ };
238
+ };
239
+ function toHex(bytes) {
240
+ return bytes.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');
241
+ }
242
+ function fromHex(hex) {
243
+ return new Uint8Array(hex.length / 2).map((_, i) => parseInt(hex.slice(i * 2, i * 2 + 2), 16));
244
+ }
245
+ export { NostrWasm };
246
+ //# sourceMappingURL=nostr-wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr-wasm.js","sourceRoot":"","sources":["../../src/relay/nostr-wasm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Nostr Relay Manager for Worker
3
+ *
4
+ * Manages WebSocket connections to Nostr relays using nostr-tools.
5
+ * Provides subscribe/publish functionality for the worker.
6
+ *
7
+ * Used for:
8
+ * - WebRTC signaling (kind 25050 ephemeral)
9
+ * - Tree root resolution (kind 30078)
10
+ */
11
+ import type { NostrFilter, SignedEvent, RelayStats } from './protocol';
12
+ export declare class NostrManager {
13
+ private pool;
14
+ private relays;
15
+ private subscriptions;
16
+ private relayStats;
17
+ private onEvent;
18
+ private onEose;
19
+ constructor();
20
+ /**
21
+ * Initialize with relay URLs
22
+ */
23
+ init(relays: string[]): void;
24
+ /**
25
+ * Set event callback
26
+ */
27
+ setOnEvent(callback: (subId: string, event: SignedEvent) => void): void;
28
+ /**
29
+ * Set EOSE callback
30
+ */
31
+ setOnEose(callback: (subId: string) => void): void;
32
+ /**
33
+ * Subscribe to events matching filters
34
+ */
35
+ subscribe(subId: string, filters: NostrFilter[]): void;
36
+ /**
37
+ * Unsubscribe from a subscription
38
+ */
39
+ unsubscribe(subId: string): void;
40
+ /**
41
+ * Publish an event to all relays
42
+ */
43
+ publish(event: SignedEvent): Promise<void>;
44
+ /**
45
+ * Get relay connection stats
46
+ */
47
+ getRelayStats(): RelayStats[];
48
+ /**
49
+ * Update relay connection status
50
+ * Called when connection state changes
51
+ */
52
+ setRelayConnected(url: string, connected: boolean): void;
53
+ /**
54
+ * Close all subscriptions and connections
55
+ */
56
+ close(): void;
57
+ }
58
+ export declare function getNostrManager(): NostrManager;
59
+ export declare function closeNostrManager(): void;
60
+ //# sourceMappingURL=nostr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr.d.ts","sourceRoot":"","sources":["../../src/relay/nostr.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiBvE,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,OAAO,CAA8D;IAC7E,OAAO,CAAC,MAAM,CAA0C;;IAMxD;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAgB5B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIvE;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAkEtD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWhC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhD;;OAEG;IACH,aAAa,IAAI,UAAU,EAAE;IAa7B;;;OAGG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAOxD;;OAEG;IACH,KAAK,IAAI,IAAI;CAWd;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
@@ -0,0 +1,207 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * Nostr Relay Manager for Worker
4
+ *
5
+ * Manages WebSocket connections to Nostr relays using nostr-tools.
6
+ * Provides subscribe/publish functionality for the worker.
7
+ *
8
+ * Used for:
9
+ * - WebRTC signaling (kind 25050 ephemeral)
10
+ * - Tree root resolution (kind 30078)
11
+ */
12
+ import { SimplePool } from 'nostr-tools';
13
+ export class NostrManager {
14
+ pool;
15
+ relays = [];
16
+ subscriptions = new Map();
17
+ relayStats = new Map();
18
+ onEvent = null;
19
+ onEose = null;
20
+ constructor() {
21
+ this.pool = new SimplePool();
22
+ }
23
+ /**
24
+ * Initialize with relay URLs
25
+ */
26
+ init(relays) {
27
+ this.relays = relays;
28
+ // Initialize stats for each relay
29
+ for (const url of relays) {
30
+ this.relayStats.set(url, {
31
+ url,
32
+ connected: false,
33
+ eventsReceived: 0,
34
+ eventsSent: 0,
35
+ });
36
+ }
37
+ console.log('[NostrManager] Initialized with relays:', relays);
38
+ }
39
+ /**
40
+ * Set event callback
41
+ */
42
+ setOnEvent(callback) {
43
+ this.onEvent = callback;
44
+ }
45
+ /**
46
+ * Set EOSE callback
47
+ */
48
+ setOnEose(callback) {
49
+ this.onEose = callback;
50
+ }
51
+ /**
52
+ * Subscribe to events matching filters
53
+ */
54
+ subscribe(subId, filters) {
55
+ // Close existing subscription with same ID if any
56
+ this.unsubscribe(subId);
57
+ console.log('[NostrManager] Creating subscription:', subId, 'to relays:', this.relays, 'filters:', filters);
58
+ // Convert our NostrFilter to nostr-tools Filter
59
+ // Subscribe to each filter separately and track them
60
+ const subs = [];
61
+ for (const f of filters) {
62
+ // Build filter with any tag filters (e.g., #e, #p, #d, #l)
63
+ const poolFilter = {
64
+ ids: f.ids,
65
+ authors: f.authors,
66
+ kinds: f.kinds,
67
+ since: f.since,
68
+ until: f.until,
69
+ limit: f.limit,
70
+ };
71
+ // Copy any tag filters (keys starting with #)
72
+ for (const key of Object.keys(f)) {
73
+ if (key.startsWith('#') && f[key]) {
74
+ poolFilter[key] = f[key];
75
+ }
76
+ }
77
+ try {
78
+ console.log('[NostrManager] pool.subscribe called with filter:', poolFilter);
79
+ const sub = this.pool.subscribe(this.relays, poolFilter, {
80
+ onevent: (event) => {
81
+ console.log('[NostrManager] Received event:', event.kind, 'from:', event.pubkey?.slice(0, 8), 'id:', event.id?.slice(0, 8));
82
+ // Convert to SignedEvent
83
+ const signedEvent = {
84
+ id: event.id,
85
+ pubkey: event.pubkey,
86
+ kind: event.kind,
87
+ content: event.content,
88
+ tags: event.tags,
89
+ created_at: event.created_at,
90
+ sig: event.sig,
91
+ };
92
+ this.onEvent?.(subId, signedEvent);
93
+ },
94
+ oneose: () => {
95
+ console.log('[NostrManager] EOSE for sub:', subId);
96
+ this.onEose?.(subId);
97
+ },
98
+ onerror: (err) => {
99
+ console.error('[NostrManager] Subscription error:', subId, err);
100
+ },
101
+ });
102
+ console.log('[NostrManager] Subscription object:', typeof sub, sub);
103
+ subs.push(sub);
104
+ }
105
+ catch (err) {
106
+ console.error('[NostrManager] Error creating subscription:', subId, err);
107
+ }
108
+ }
109
+ // Store all subs for this subscription ID
110
+ this.subscriptions.set(subId, { id: subId, filters, subs });
111
+ console.log('[NostrManager] Subscribed:', subId, filters);
112
+ }
113
+ /**
114
+ * Unsubscribe from a subscription
115
+ */
116
+ unsubscribe(subId) {
117
+ const sub = this.subscriptions.get(subId);
118
+ if (sub) {
119
+ for (const s of sub.subs) {
120
+ s.close();
121
+ }
122
+ this.subscriptions.delete(subId);
123
+ console.log('[NostrManager] Unsubscribed:', subId);
124
+ }
125
+ }
126
+ /**
127
+ * Publish an event to all relays
128
+ */
129
+ async publish(event) {
130
+ // Convert to nostr-tools Event
131
+ const poolEvent = {
132
+ id: event.id,
133
+ pubkey: event.pubkey,
134
+ kind: event.kind,
135
+ content: event.content,
136
+ tags: event.tags,
137
+ created_at: event.created_at,
138
+ sig: event.sig,
139
+ };
140
+ try {
141
+ await Promise.any(this.pool.publish(this.relays, poolEvent));
142
+ // Update stats for successful publish
143
+ for (const [, stats] of this.relayStats) {
144
+ stats.eventsSent++;
145
+ }
146
+ console.log('[NostrManager] Published event:', event.id);
147
+ }
148
+ catch (err) {
149
+ console.error('[NostrManager] Failed to publish:', err);
150
+ throw err;
151
+ }
152
+ }
153
+ /**
154
+ * Get relay connection stats
155
+ */
156
+ getRelayStats() {
157
+ const result = [];
158
+ for (const [url, stats] of this.relayStats) {
159
+ result.push({
160
+ url,
161
+ connected: stats.connected,
162
+ eventsReceived: stats.eventsReceived,
163
+ eventsSent: stats.eventsSent,
164
+ });
165
+ }
166
+ return result;
167
+ }
168
+ /**
169
+ * Update relay connection status
170
+ * Called when connection state changes
171
+ */
172
+ setRelayConnected(url, connected) {
173
+ const stats = this.relayStats.get(url);
174
+ if (stats) {
175
+ stats.connected = connected;
176
+ }
177
+ }
178
+ /**
179
+ * Close all subscriptions and connections
180
+ */
181
+ close() {
182
+ for (const [subId, sub] of this.subscriptions) {
183
+ for (const s of sub.subs) {
184
+ s.close();
185
+ }
186
+ console.log('[NostrManager] Closed subscription:', subId);
187
+ }
188
+ this.subscriptions.clear();
189
+ this.pool.close(this.relays);
190
+ console.log('[NostrManager] Closed');
191
+ }
192
+ }
193
+ // Singleton instance for the worker
194
+ let instance = null;
195
+ export function getNostrManager() {
196
+ if (!instance) {
197
+ instance = new NostrManager();
198
+ }
199
+ return instance;
200
+ }
201
+ export function closeNostrManager() {
202
+ if (instance) {
203
+ instance.close();
204
+ instance = null;
205
+ }
206
+ }
207
+ //# sourceMappingURL=nostr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr.js","sourceRoot":"","sources":["../../src/relay/nostr.ts"],"names":[],"mappings":"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"}