@hashtree/worker 0.1.26 → 0.2.1

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 (258) hide show
  1. package/README.md +16 -16
  2. package/package.json +23 -19
  3. package/src/app-runtime.ts +393 -0
  4. package/src/capabilities/blossomBandwidthTracker.ts +74 -0
  5. package/src/capabilities/blossomTransport.ts +179 -0
  6. package/src/capabilities/connectivity.ts +54 -0
  7. package/src/capabilities/idbStorage.ts +94 -0
  8. package/src/capabilities/meshRouterStore.ts +426 -0
  9. package/src/capabilities/rootResolver.ts +497 -0
  10. package/src/client-id.ts +137 -0
  11. package/src/client.ts +501 -0
  12. package/{dist/entry.js → src/entry.ts} +1 -1
  13. package/src/htree-path.ts +53 -0
  14. package/src/htree-url.ts +156 -0
  15. package/src/index.ts +76 -0
  16. package/src/mediaStreaming.ts +64 -0
  17. package/src/p2p/boundedQueue.ts +168 -0
  18. package/src/p2p/errorMessage.ts +6 -0
  19. package/src/p2p/index.ts +48 -0
  20. package/src/p2p/lruCache.ts +78 -0
  21. package/src/p2p/meshQueryRouter.ts +361 -0
  22. package/src/p2p/protocol.ts +11 -0
  23. package/src/p2p/queryForwardingMachine.ts +197 -0
  24. package/src/p2p/signaling.ts +284 -0
  25. package/src/p2p/uploadRateLimiter.ts +85 -0
  26. package/src/p2p/webrtcController.ts +1168 -0
  27. package/src/p2p/webrtcProxy.ts +519 -0
  28. package/src/privacyGuards.ts +31 -0
  29. package/src/protocol.ts +124 -0
  30. package/src/relay/identity.ts +86 -0
  31. package/src/relay/mediaHandler.ts +1633 -0
  32. package/src/relay/ndk.ts +590 -0
  33. package/{dist/iris/nostr-wasm.js → src/relay/nostr-wasm.ts} +4 -1
  34. package/src/relay/nostr.ts +249 -0
  35. package/src/relay/protocol.ts +361 -0
  36. package/src/relay/publicAssetUrl.ts +25 -0
  37. package/src/relay/rootPathResolver.ts +50 -0
  38. package/src/relay/shims.d.ts +17 -0
  39. package/src/relay/signing.ts +332 -0
  40. package/src/relay/treeRootCache.ts +354 -0
  41. package/src/relay/treeRootSubscription.ts +577 -0
  42. package/src/relay/utils/constants.ts +139 -0
  43. package/src/relay/utils/errorMessage.ts +7 -0
  44. package/src/relay/utils/lruCache.ts +79 -0
  45. package/src/relay/webrtc.ts +5 -0
  46. package/src/relay/webrtcSignaling.ts +108 -0
  47. package/src/relay/worker.ts +1787 -0
  48. package/src/relay-client.ts +265 -0
  49. package/src/relay-entry.ts +1 -0
  50. package/src/runtime-network.ts +134 -0
  51. package/src/runtime.ts +153 -0
  52. package/src/transferableBytes.ts +5 -0
  53. package/src/tree-root.ts +851 -0
  54. package/src/types.ts +8 -0
  55. package/src/worker.ts +975 -0
  56. package/LICENSE +0 -21
  57. package/dist/app-runtime.d.ts +0 -60
  58. package/dist/app-runtime.d.ts.map +0 -1
  59. package/dist/app-runtime.js +0 -271
  60. package/dist/app-runtime.js.map +0 -1
  61. package/dist/capabilities/blossomBandwidthTracker.d.ts +0 -26
  62. package/dist/capabilities/blossomBandwidthTracker.d.ts.map +0 -1
  63. package/dist/capabilities/blossomBandwidthTracker.js +0 -53
  64. package/dist/capabilities/blossomBandwidthTracker.js.map +0 -1
  65. package/dist/capabilities/blossomTransport.d.ts +0 -22
  66. package/dist/capabilities/blossomTransport.d.ts.map +0 -1
  67. package/dist/capabilities/blossomTransport.js +0 -144
  68. package/dist/capabilities/blossomTransport.js.map +0 -1
  69. package/dist/capabilities/connectivity.d.ts +0 -3
  70. package/dist/capabilities/connectivity.d.ts.map +0 -1
  71. package/dist/capabilities/connectivity.js +0 -49
  72. package/dist/capabilities/connectivity.js.map +0 -1
  73. package/dist/capabilities/idbStorage.d.ts +0 -25
  74. package/dist/capabilities/idbStorage.d.ts.map +0 -1
  75. package/dist/capabilities/idbStorage.js +0 -73
  76. package/dist/capabilities/idbStorage.js.map +0 -1
  77. package/dist/capabilities/meshRouterStore.d.ts +0 -71
  78. package/dist/capabilities/meshRouterStore.d.ts.map +0 -1
  79. package/dist/capabilities/meshRouterStore.js +0 -316
  80. package/dist/capabilities/meshRouterStore.js.map +0 -1
  81. package/dist/capabilities/rootResolver.d.ts +0 -10
  82. package/dist/capabilities/rootResolver.d.ts.map +0 -1
  83. package/dist/capabilities/rootResolver.js +0 -393
  84. package/dist/capabilities/rootResolver.js.map +0 -1
  85. package/dist/client-id.d.ts +0 -18
  86. package/dist/client-id.d.ts.map +0 -1
  87. package/dist/client-id.js +0 -98
  88. package/dist/client-id.js.map +0 -1
  89. package/dist/client.d.ts +0 -61
  90. package/dist/client.d.ts.map +0 -1
  91. package/dist/client.js +0 -417
  92. package/dist/client.js.map +0 -1
  93. package/dist/entry.d.ts +0 -2
  94. package/dist/entry.d.ts.map +0 -1
  95. package/dist/entry.js.map +0 -1
  96. package/dist/htree-path.d.ts +0 -13
  97. package/dist/htree-path.d.ts.map +0 -1
  98. package/dist/htree-path.js +0 -38
  99. package/dist/htree-path.js.map +0 -1
  100. package/dist/htree-url.d.ts +0 -22
  101. package/dist/htree-url.d.ts.map +0 -1
  102. package/dist/htree-url.js +0 -118
  103. package/dist/htree-url.js.map +0 -1
  104. package/dist/index.d.ts +0 -17
  105. package/dist/index.d.ts.map +0 -1
  106. package/dist/index.js +0 -8
  107. package/dist/index.js.map +0 -1
  108. package/dist/iris/identity.d.ts +0 -36
  109. package/dist/iris/identity.d.ts.map +0 -1
  110. package/dist/iris/identity.js +0 -78
  111. package/dist/iris/identity.js.map +0 -1
  112. package/dist/iris/mediaHandler.d.ts +0 -64
  113. package/dist/iris/mediaHandler.d.ts.map +0 -1
  114. package/dist/iris/mediaHandler.js +0 -1285
  115. package/dist/iris/mediaHandler.js.map +0 -1
  116. package/dist/iris/ndk.d.ts +0 -96
  117. package/dist/iris/ndk.d.ts.map +0 -1
  118. package/dist/iris/ndk.js +0 -502
  119. package/dist/iris/ndk.js.map +0 -1
  120. package/dist/iris/nostr-wasm.d.ts +0 -14
  121. package/dist/iris/nostr-wasm.d.ts.map +0 -1
  122. package/dist/iris/nostr-wasm.js.map +0 -1
  123. package/dist/iris/nostr.d.ts +0 -60
  124. package/dist/iris/nostr.d.ts.map +0 -1
  125. package/dist/iris/nostr.js +0 -207
  126. package/dist/iris/nostr.js.map +0 -1
  127. package/dist/iris/protocol.d.ts +0 -583
  128. package/dist/iris/protocol.d.ts.map +0 -1
  129. package/dist/iris/protocol.js +0 -16
  130. package/dist/iris/protocol.js.map +0 -1
  131. package/dist/iris/publicAssetUrl.d.ts +0 -6
  132. package/dist/iris/publicAssetUrl.d.ts.map +0 -1
  133. package/dist/iris/publicAssetUrl.js +0 -14
  134. package/dist/iris/publicAssetUrl.js.map +0 -1
  135. package/dist/iris/rootPathResolver.d.ts +0 -9
  136. package/dist/iris/rootPathResolver.d.ts.map +0 -1
  137. package/dist/iris/rootPathResolver.js +0 -32
  138. package/dist/iris/rootPathResolver.js.map +0 -1
  139. package/dist/iris/signing.d.ts +0 -50
  140. package/dist/iris/signing.d.ts.map +0 -1
  141. package/dist/iris/signing.js +0 -299
  142. package/dist/iris/signing.js.map +0 -1
  143. package/dist/iris/treeRootCache.d.ts +0 -86
  144. package/dist/iris/treeRootCache.d.ts.map +0 -1
  145. package/dist/iris/treeRootCache.js +0 -269
  146. package/dist/iris/treeRootCache.js.map +0 -1
  147. package/dist/iris/treeRootSubscription.d.ts +0 -55
  148. package/dist/iris/treeRootSubscription.d.ts.map +0 -1
  149. package/dist/iris/treeRootSubscription.js +0 -479
  150. package/dist/iris/treeRootSubscription.js.map +0 -1
  151. package/dist/iris/utils/constants.d.ts +0 -76
  152. package/dist/iris/utils/constants.d.ts.map +0 -1
  153. package/dist/iris/utils/constants.js +0 -113
  154. package/dist/iris/utils/constants.js.map +0 -1
  155. package/dist/iris/utils/errorMessage.d.ts +0 -5
  156. package/dist/iris/utils/errorMessage.d.ts.map +0 -1
  157. package/dist/iris/utils/errorMessage.js +0 -8
  158. package/dist/iris/utils/errorMessage.js.map +0 -1
  159. package/dist/iris/utils/lruCache.d.ts +0 -26
  160. package/dist/iris/utils/lruCache.d.ts.map +0 -1
  161. package/dist/iris/utils/lruCache.js +0 -66
  162. package/dist/iris/utils/lruCache.js.map +0 -1
  163. package/dist/iris/webrtc.d.ts +0 -2
  164. package/dist/iris/webrtc.d.ts.map +0 -1
  165. package/dist/iris/webrtc.js +0 -3
  166. package/dist/iris/webrtc.js.map +0 -1
  167. package/dist/iris/webrtcSignaling.d.ts +0 -37
  168. package/dist/iris/webrtcSignaling.d.ts.map +0 -1
  169. package/dist/iris/webrtcSignaling.js +0 -86
  170. package/dist/iris/webrtcSignaling.js.map +0 -1
  171. package/dist/iris/worker.d.ts +0 -12
  172. package/dist/iris/worker.d.ts.map +0 -1
  173. package/dist/iris/worker.js +0 -1529
  174. package/dist/iris/worker.js.map +0 -1
  175. package/dist/iris-client.d.ts +0 -31
  176. package/dist/iris-client.d.ts.map +0 -1
  177. package/dist/iris-client.js +0 -197
  178. package/dist/iris-client.js.map +0 -1
  179. package/dist/iris-entry.d.ts +0 -2
  180. package/dist/iris-entry.d.ts.map +0 -1
  181. package/dist/iris-entry.js +0 -2
  182. package/dist/iris-entry.js.map +0 -1
  183. package/dist/mediaStreaming.d.ts +0 -7
  184. package/dist/mediaStreaming.d.ts.map +0 -1
  185. package/dist/mediaStreaming.js +0 -48
  186. package/dist/mediaStreaming.js.map +0 -1
  187. package/dist/p2p/boundedQueue.d.ts +0 -79
  188. package/dist/p2p/boundedQueue.d.ts.map +0 -1
  189. package/dist/p2p/boundedQueue.js +0 -134
  190. package/dist/p2p/boundedQueue.js.map +0 -1
  191. package/dist/p2p/errorMessage.d.ts +0 -5
  192. package/dist/p2p/errorMessage.d.ts.map +0 -1
  193. package/dist/p2p/errorMessage.js +0 -7
  194. package/dist/p2p/errorMessage.js.map +0 -1
  195. package/dist/p2p/index.d.ts +0 -8
  196. package/dist/p2p/index.d.ts.map +0 -1
  197. package/dist/p2p/index.js +0 -6
  198. package/dist/p2p/index.js.map +0 -1
  199. package/dist/p2p/lruCache.d.ts +0 -26
  200. package/dist/p2p/lruCache.d.ts.map +0 -1
  201. package/dist/p2p/lruCache.js +0 -65
  202. package/dist/p2p/lruCache.js.map +0 -1
  203. package/dist/p2p/meshQueryRouter.d.ts +0 -44
  204. package/dist/p2p/meshQueryRouter.d.ts.map +0 -1
  205. package/dist/p2p/meshQueryRouter.js +0 -228
  206. package/dist/p2p/meshQueryRouter.js.map +0 -1
  207. package/dist/p2p/protocol.d.ts +0 -10
  208. package/dist/p2p/protocol.d.ts.map +0 -1
  209. package/dist/p2p/protocol.js +0 -2
  210. package/dist/p2p/protocol.js.map +0 -1
  211. package/dist/p2p/queryForwardingMachine.d.ts +0 -46
  212. package/dist/p2p/queryForwardingMachine.d.ts.map +0 -1
  213. package/dist/p2p/queryForwardingMachine.js +0 -144
  214. package/dist/p2p/queryForwardingMachine.js.map +0 -1
  215. package/dist/p2p/signaling.d.ts +0 -63
  216. package/dist/p2p/signaling.d.ts.map +0 -1
  217. package/dist/p2p/signaling.js +0 -185
  218. package/dist/p2p/signaling.js.map +0 -1
  219. package/dist/p2p/uploadRateLimiter.d.ts +0 -21
  220. package/dist/p2p/uploadRateLimiter.d.ts.map +0 -1
  221. package/dist/p2p/uploadRateLimiter.js +0 -62
  222. package/dist/p2p/uploadRateLimiter.js.map +0 -1
  223. package/dist/p2p/webrtcController.d.ts +0 -168
  224. package/dist/p2p/webrtcController.d.ts.map +0 -1
  225. package/dist/p2p/webrtcController.js +0 -902
  226. package/dist/p2p/webrtcController.js.map +0 -1
  227. package/dist/p2p/webrtcProxy.d.ts +0 -62
  228. package/dist/p2p/webrtcProxy.d.ts.map +0 -1
  229. package/dist/p2p/webrtcProxy.js +0 -447
  230. package/dist/p2p/webrtcProxy.js.map +0 -1
  231. package/dist/privacyGuards.d.ts +0 -14
  232. package/dist/privacyGuards.d.ts.map +0 -1
  233. package/dist/privacyGuards.js +0 -27
  234. package/dist/privacyGuards.js.map +0 -1
  235. package/dist/protocol.d.ts +0 -225
  236. package/dist/protocol.d.ts.map +0 -1
  237. package/dist/protocol.js +0 -2
  238. package/dist/protocol.js.map +0 -1
  239. package/dist/runtime-network.d.ts +0 -23
  240. package/dist/runtime-network.d.ts.map +0 -1
  241. package/dist/runtime-network.js +0 -105
  242. package/dist/runtime-network.js.map +0 -1
  243. package/dist/runtime.d.ts +0 -23
  244. package/dist/runtime.d.ts.map +0 -1
  245. package/dist/runtime.js +0 -122
  246. package/dist/runtime.js.map +0 -1
  247. package/dist/tree-root.d.ts +0 -201
  248. package/dist/tree-root.d.ts.map +0 -1
  249. package/dist/tree-root.js +0 -632
  250. package/dist/tree-root.js.map +0 -1
  251. package/dist/types.d.ts +0 -2
  252. package/dist/types.d.ts.map +0 -1
  253. package/dist/types.js +0 -2
  254. package/dist/types.js.map +0 -1
  255. package/dist/worker.d.ts +0 -9
  256. package/dist/worker.d.ts.map +0 -1
  257. package/dist/worker.js +0 -797
  258. package/dist/worker.js.map +0 -1
package/dist/client.js DELETED
@@ -1,417 +0,0 @@
1
- import { generateRequestId } from '@hashtree/core';
2
- const REQUEST_TIMEOUT_MS = 30_000;
3
- const PUT_BLOB_TIMEOUT_MS = 15 * 60_000;
4
- const STREAM_APPEND_TIMEOUT_MS = 60_000;
5
- export class HashtreeWorkerClient {
6
- workerFactory;
7
- config;
8
- worker = null;
9
- initPromise = null;
10
- pending = new Map();
11
- connectivityListeners = new Set();
12
- uploadProgressListeners = new Set();
13
- blossomBandwidthListeners = new Set();
14
- diagnosticListeners = new Set();
15
- rootWatchListeners = new Map();
16
- pendingRootWatchUpdates = new Map();
17
- p2pFetchHandler = null;
18
- constructor(workerFactory, config = {}) {
19
- this.workerFactory = workerFactory;
20
- this.config = config;
21
- }
22
- async init() {
23
- if (this.initPromise)
24
- return this.initPromise;
25
- try {
26
- this.spawnWorker();
27
- }
28
- catch (err) {
29
- throw err instanceof Error ? err : new Error(String(err));
30
- }
31
- this.initPromise = new Promise((resolve, reject) => {
32
- if (!this.worker) {
33
- reject(new Error('Failed to create worker'));
34
- return;
35
- }
36
- const id = generateRequestId();
37
- const timeoutId = setTimeout(() => {
38
- this.pending.delete(id);
39
- reject(new Error('Worker init timed out'));
40
- }, REQUEST_TIMEOUT_MS);
41
- this.pending.set(id, {
42
- resolve: (message) => {
43
- if (message.type === 'ready') {
44
- resolve();
45
- return;
46
- }
47
- reject(new Error('Unexpected init response'));
48
- },
49
- reject: (error) => reject(error),
50
- timeoutId,
51
- });
52
- this.worker.postMessage({
53
- type: 'init',
54
- id,
55
- config: this.config,
56
- });
57
- });
58
- return this.initPromise;
59
- }
60
- spawnWorker() {
61
- if (this.workerFactory instanceof URL) {
62
- this.worker = new Worker(this.workerFactory, { type: 'module' });
63
- }
64
- else if (typeof this.workerFactory === 'string') {
65
- this.worker = new Worker(this.workerFactory, { type: 'module' });
66
- }
67
- else {
68
- this.worker = new this.workerFactory();
69
- }
70
- this.worker.onmessage = (event) => {
71
- const message = event.data;
72
- if (message.type === 'connectivityUpdate') {
73
- this.connectivityListeners.forEach(listener => listener(message.state));
74
- return;
75
- }
76
- if (message.type === 'uploadProgress') {
77
- this.uploadProgressListeners.forEach(listener => listener(message.progress));
78
- return;
79
- }
80
- if (message.type === 'blossomBandwidth') {
81
- this.blossomBandwidthListeners.forEach(listener => listener(message.stats));
82
- return;
83
- }
84
- if (message.type === 'diagnostic') {
85
- this.diagnosticListeners.forEach(listener => listener(message.event));
86
- return;
87
- }
88
- if (message.type === 'rootUpdate') {
89
- const listener = this.rootWatchListeners.get(message.watchId);
90
- if (listener) {
91
- listener(message.cid ?? null);
92
- }
93
- else {
94
- this.pendingRootWatchUpdates.set(message.watchId, message.cid ?? null);
95
- }
96
- return;
97
- }
98
- if (message.type === 'p2pFetch') {
99
- void this.handleP2PFetch(message.requestId, message.hashHex);
100
- return;
101
- }
102
- if (message.type === 'error' && message.id) {
103
- this.rejectPending(message.id, new Error(message.error));
104
- return;
105
- }
106
- if ('id' in message && typeof message.id === 'string') {
107
- this.resolvePending(message.id, message);
108
- }
109
- };
110
- this.worker.onerror = (event) => {
111
- const errorMessage = event instanceof ErrorEvent ? event.message : 'Worker error';
112
- this.rejectAllPending(new Error(errorMessage));
113
- };
114
- }
115
- rejectAllPending(error) {
116
- for (const [id, pending] of this.pending.entries()) {
117
- clearTimeout(pending.timeoutId);
118
- pending.reject(error);
119
- this.pending.delete(id);
120
- }
121
- }
122
- resolvePending(id, message) {
123
- const pending = this.pending.get(id);
124
- if (!pending)
125
- return;
126
- clearTimeout(pending.timeoutId);
127
- pending.resolve(message);
128
- this.pending.delete(id);
129
- }
130
- rejectPending(id, error) {
131
- const pending = this.pending.get(id);
132
- if (!pending)
133
- return;
134
- clearTimeout(pending.timeoutId);
135
- pending.reject(error);
136
- this.pending.delete(id);
137
- }
138
- async handleP2PFetch(requestId, hashHex) {
139
- if (!this.worker)
140
- return;
141
- const id = generateRequestId();
142
- if (!this.p2pFetchHandler) {
143
- this.worker.postMessage({
144
- type: 'p2pFetchResult',
145
- id,
146
- requestId,
147
- });
148
- return;
149
- }
150
- try {
151
- const data = await this.p2pFetchHandler(hashHex);
152
- if (data && data.byteLength > 0) {
153
- this.worker.postMessage({
154
- type: 'p2pFetchResult',
155
- id,
156
- requestId,
157
- data,
158
- }, [data.buffer]);
159
- return;
160
- }
161
- this.worker.postMessage({
162
- type: 'p2pFetchResult',
163
- id,
164
- requestId,
165
- });
166
- }
167
- catch (err) {
168
- const error = err instanceof Error ? err.message : String(err);
169
- this.worker.postMessage({
170
- type: 'p2pFetchResult',
171
- id,
172
- requestId,
173
- error,
174
- });
175
- }
176
- }
177
- async request(payload, timeoutMs = REQUEST_TIMEOUT_MS, transfer = []) {
178
- await this.initIfNeeded();
179
- if (!this.worker) {
180
- throw new Error('Worker not initialized');
181
- }
182
- const id = generateRequestId();
183
- const message = { ...payload, id };
184
- return new Promise((resolve, reject) => {
185
- const timeoutId = setTimeout(() => {
186
- this.pending.delete(id);
187
- reject(new Error(`Worker request timed out: ${payload.type}`));
188
- }, timeoutMs);
189
- this.pending.set(id, { resolve, reject, timeoutId });
190
- this.worker?.postMessage(message, transfer);
191
- });
192
- }
193
- async initIfNeeded() {
194
- if (!this.initPromise) {
195
- await this.init();
196
- return;
197
- }
198
- await this.initPromise;
199
- }
200
- async putBlob(data, mimeType, upload = true) {
201
- const res = await this.request({ type: 'putBlob', data, mimeType, upload }, PUT_BLOB_TIMEOUT_MS);
202
- if (res.type !== 'blobStored') {
203
- throw new Error('Unexpected response for putBlob');
204
- }
205
- if (!res.hashHex || !res.nhash) {
206
- throw new Error('Failed to store blob');
207
- }
208
- return { hashHex: res.hashHex, nhash: res.nhash };
209
- }
210
- async beginPutBlobStream(mimeType, upload = true) {
211
- const res = await this.request({ type: 'beginPutBlobStream', mimeType, upload });
212
- if (res.type !== 'blobStreamStarted') {
213
- throw new Error('Unexpected response for beginPutBlobStream');
214
- }
215
- if (!res.streamId) {
216
- throw new Error('Failed to start blob stream');
217
- }
218
- return res.streamId;
219
- }
220
- async appendPutBlobStream(streamId, chunk) {
221
- const res = await this.request({ type: 'appendPutBlobStream', streamId, chunk }, STREAM_APPEND_TIMEOUT_MS, [chunk.buffer]);
222
- if (res.type !== 'void') {
223
- throw new Error('Unexpected response for appendPutBlobStream');
224
- }
225
- if (res.error) {
226
- throw new Error(res.error);
227
- }
228
- }
229
- async finishPutBlobStream(streamId) {
230
- const res = await this.request({ type: 'finishPutBlobStream', streamId }, PUT_BLOB_TIMEOUT_MS);
231
- if (res.type !== 'blobStored') {
232
- throw new Error('Unexpected response for finishPutBlobStream');
233
- }
234
- if (!res.hashHex || !res.nhash) {
235
- throw new Error('Failed to finalize blob stream');
236
- }
237
- return { hashHex: res.hashHex, nhash: res.nhash };
238
- }
239
- async cancelPutBlobStream(streamId) {
240
- const res = await this.request({ type: 'cancelPutBlobStream', streamId });
241
- if (res.type !== 'void') {
242
- throw new Error('Unexpected response for cancelPutBlobStream');
243
- }
244
- if (res.error) {
245
- throw new Error(res.error);
246
- }
247
- }
248
- async getBlob(hashHex) {
249
- const res = await this.request({ type: 'getBlob', hashHex });
250
- if (res.type !== 'blob') {
251
- throw new Error('Unexpected response for getBlob');
252
- }
253
- if (res.error || !res.data || !res.source) {
254
- throw new Error(res.error || 'Blob not found');
255
- }
256
- return { data: res.data, source: res.source };
257
- }
258
- async getBlobForPeer(hashHex) {
259
- const res = await this.request({ type: 'getBlob', hashHex, forPeer: true });
260
- if (res.type !== 'blob') {
261
- throw new Error('Unexpected response for getBlobForPeer');
262
- }
263
- if (res.error || !res.data) {
264
- return null;
265
- }
266
- return res.data;
267
- }
268
- async setBlossomServers(servers) {
269
- const res = await this.request({ type: 'setBlossomServers', servers });
270
- if (res.type !== 'void') {
271
- throw new Error('Unexpected response for setBlossomServers');
272
- }
273
- if (res.error) {
274
- throw new Error(res.error);
275
- }
276
- }
277
- async registerMediaPort(port) {
278
- const res = await this.request({ type: 'registerMediaPort', port }, REQUEST_TIMEOUT_MS, [port]);
279
- if (res.type !== 'void') {
280
- throw new Error('Unexpected response for registerMediaPort');
281
- }
282
- if (res.error) {
283
- throw new Error(res.error);
284
- }
285
- }
286
- async setStorageMaxBytes(maxBytes) {
287
- const res = await this.request({ type: 'setStorageMaxBytes', maxBytes });
288
- if (res.type !== 'void') {
289
- throw new Error('Unexpected response for setStorageMaxBytes');
290
- }
291
- if (res.error) {
292
- throw new Error(res.error);
293
- }
294
- }
295
- async getStorageStats() {
296
- const res = await this.request({ type: 'getStorageStats' });
297
- if (res.type !== 'storageStats') {
298
- throw new Error('Unexpected response for getStorageStats');
299
- }
300
- if (res.error) {
301
- throw new Error(res.error);
302
- }
303
- return {
304
- items: res.items,
305
- bytes: res.bytes,
306
- maxBytes: res.maxBytes,
307
- };
308
- }
309
- async probeConnectivity() {
310
- const res = await this.request({ type: 'probeConnectivity' });
311
- if (res.type !== 'connectivity') {
312
- throw new Error('Unexpected response for probeConnectivity');
313
- }
314
- if (res.error || !res.state) {
315
- throw new Error(res.error || 'Connectivity probe failed');
316
- }
317
- return res.state;
318
- }
319
- async resolveRoot(npub, path, options = {}) {
320
- const res = await this.request({
321
- type: 'resolveRoot',
322
- npub,
323
- path,
324
- timeoutMs: options.timeoutMs,
325
- settleMs: options.settleMs,
326
- });
327
- if (res.type !== 'cid') {
328
- throw new Error('Unexpected response for resolveRoot');
329
- }
330
- if (res.error) {
331
- throw new Error(res.error);
332
- }
333
- return res.cid ?? null;
334
- }
335
- async watchRoot(npub, path, listener, options = {}) {
336
- const res = await this.request({
337
- type: 'watchRoot',
338
- npub,
339
- path,
340
- timeoutMs: options.timeoutMs,
341
- settleMs: options.settleMs,
342
- });
343
- if (res.type !== 'rootWatchStarted') {
344
- throw new Error('Unexpected response for watchRoot');
345
- }
346
- if (res.error) {
347
- throw new Error(res.error);
348
- }
349
- this.rootWatchListeners.set(res.watchId, listener);
350
- if ('cid' in res) {
351
- listener(res.cid ?? null);
352
- }
353
- if (this.pendingRootWatchUpdates.has(res.watchId)) {
354
- const pendingCid = this.pendingRootWatchUpdates.get(res.watchId) ?? null;
355
- this.pendingRootWatchUpdates.delete(res.watchId);
356
- listener(pendingCid);
357
- }
358
- return async () => {
359
- this.rootWatchListeners.delete(res.watchId);
360
- this.pendingRootWatchUpdates.delete(res.watchId);
361
- try {
362
- const stopRes = await this.request({ type: 'unwatchRoot', watchId: res.watchId });
363
- if (stopRes.type !== 'void') {
364
- throw new Error('Unexpected response for unwatchRoot');
365
- }
366
- if (stopRes.error) {
367
- throw new Error(stopRes.error);
368
- }
369
- }
370
- catch {
371
- // Ignore cleanup failures after local listener removal.
372
- }
373
- };
374
- }
375
- onConnectivityUpdate(listener) {
376
- this.connectivityListeners.add(listener);
377
- return () => {
378
- this.connectivityListeners.delete(listener);
379
- };
380
- }
381
- onUploadProgress(listener) {
382
- this.uploadProgressListeners.add(listener);
383
- return () => {
384
- this.uploadProgressListeners.delete(listener);
385
- };
386
- }
387
- onBlossomBandwidth(listener) {
388
- this.blossomBandwidthListeners.add(listener);
389
- return () => {
390
- this.blossomBandwidthListeners.delete(listener);
391
- };
392
- }
393
- onDiagnostic(listener) {
394
- this.diagnosticListeners.add(listener);
395
- return () => {
396
- this.diagnosticListeners.delete(listener);
397
- };
398
- }
399
- setP2PFetchHandler(handler) {
400
- this.p2pFetchHandler = handler;
401
- }
402
- async close() {
403
- try {
404
- await this.request({ type: 'close' });
405
- }
406
- catch {
407
- // Ignore close errors.
408
- }
409
- this.rootWatchListeners.clear();
410
- this.pendingRootWatchUpdates.clear();
411
- this.worker?.terminate();
412
- this.worker = null;
413
- this.initPromise = null;
414
- this.rejectAllPending(new Error('Worker closed'));
415
- }
416
- }
417
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/entry.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=entry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":""}
package/dist/entry.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,oBAAoB,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- export interface ParsedMutableHtreePath {
2
- npub: string;
3
- treeName: string;
4
- filePath: string;
5
- }
6
- export interface ParsedImmutableHtreePath {
7
- nhash: string;
8
- filePath: string;
9
- }
10
- export declare function getRawHtreePath(url: URL): string;
11
- export declare function parseMutableHtreePath(rawPath: string): ParsedMutableHtreePath | null;
12
- export declare function parseImmutableHtreePath(rawPath: string): ParsedImmutableHtreePath | null;
13
- //# sourceMappingURL=htree-path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"htree-path.d.ts","sourceRoot":"","sources":["../src/htree-path.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAGhD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAgBpF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAUxF"}
@@ -1,38 +0,0 @@
1
- function safeDecodePathSegment(segment) {
2
- try {
3
- return decodeURIComponent(segment);
4
- }
5
- catch {
6
- return segment;
7
- }
8
- }
9
- export function getRawHtreePath(url) {
10
- const pathMatch = url.href.match(/^[^:]+:\/\/[^/]+(.*)$/);
11
- return pathMatch ? (pathMatch[1]?.split('?')[0] || '') : url.pathname;
12
- }
13
- export function parseMutableHtreePath(rawPath) {
14
- const parts = rawPath.replace(/^\/+/, '').split('/');
15
- if (parts[0] !== 'htree' || parts.length < 3 || !parts[1]?.startsWith('npub1')) {
16
- return null;
17
- }
18
- const treeName = safeDecodePathSegment(parts[2] || '');
19
- if (!treeName) {
20
- return null;
21
- }
22
- return {
23
- npub: parts[1],
24
- treeName,
25
- filePath: parts.slice(3).map(safeDecodePathSegment).join('/'),
26
- };
27
- }
28
- export function parseImmutableHtreePath(rawPath) {
29
- const parts = rawPath.replace(/^\/+/, '').split('/');
30
- if (parts[0] !== 'htree' || parts.length < 2 || !parts[1]?.startsWith('nhash1')) {
31
- return null;
32
- }
33
- return {
34
- nhash: parts[1],
35
- filePath: parts.slice(2).map(safeDecodePathSegment).join('/'),
36
- };
37
- }
38
- //# sourceMappingURL=htree-path.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"htree-path.js","sourceRoot":"","sources":["../src/htree-path.ts"],"names":[],"mappings":"AAWA,SAAS,qBAAqB,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,QAAQ;QACR,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC9D,CAAC;AACJ,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type HtreeRuntimeWindowLike } from './runtime.js';
2
- export type ParsedHtreeUrl = {
3
- kind: 'mutable';
4
- npub: string;
5
- treeName: string;
6
- path: string;
7
- } | {
8
- kind: 'immutable';
9
- nhash: string;
10
- path: string;
11
- };
12
- export type MutableHtreeRequestStyle = 'htree' | 'gateway';
13
- export interface ResolveHtreeRequestUrlOptions {
14
- windowLike?: HtreeRuntimeWindowLike;
15
- fallbackBaseUrl?: string | null;
16
- baseUrl?: string | null;
17
- mutableStyle?: MutableHtreeRequestStyle;
18
- }
19
- export declare function parseHtreeUrl(input: string): ParsedHtreeUrl | null;
20
- export declare function buildHtreeRequestPath(input: string | ParsedHtreeUrl, mutableStyle?: MutableHtreeRequestStyle): string | null;
21
- export declare function resolveHtreeRequestUrl(input: string | ParsedHtreeUrl, options?: ResolveHtreeRequestUrlOptions): string;
22
- //# sourceMappingURL=htree-url.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"htree-url.d.ts","sourceRoot":"","sources":["../src/htree-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,6BAA6B;IAC5C,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAwCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA6ClE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,cAAc,EAC9B,YAAY,GAAE,wBAAkC,GAC/C,MAAM,GAAG,IAAI,CAqBf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,cAAc,EAC9B,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CAsBR"}
package/dist/htree-url.js DELETED
@@ -1,118 +0,0 @@
1
- import { canUseInjectedHtreeServerUrl, resolveRuntimeHtreeBaseUrl, } from './runtime.js';
2
- function safeDecodePathSegment(segment) {
3
- try {
4
- return decodeURIComponent(segment);
5
- }
6
- catch {
7
- return segment;
8
- }
9
- }
10
- function encodePath(path) {
11
- return path
12
- .split('/')
13
- .filter(Boolean)
14
- .map((segment) => encodeURIComponent(segment))
15
- .join('/');
16
- }
17
- function stripQueryAndHash(path) {
18
- const hashIndex = path.indexOf('#');
19
- const pathWithoutHash = hashIndex === -1 ? path : path.slice(0, hashIndex);
20
- const queryIndex = pathWithoutHash.indexOf('?');
21
- return queryIndex === -1 ? pathWithoutHash : pathWithoutHash.slice(0, queryIndex);
22
- }
23
- function normalizeRelativePath(path) {
24
- return stripQueryAndHash(path).replace(/^\/+/, '');
25
- }
26
- function resolveMutableRequestStyle(windowLike, baseUrl, explicitStyle) {
27
- if (explicitStyle)
28
- return explicitStyle;
29
- if (!baseUrl)
30
- return 'htree';
31
- if (canUseInjectedHtreeServerUrl(windowLike))
32
- return 'htree';
33
- return 'gateway';
34
- }
35
- export function parseHtreeUrl(input) {
36
- const trimmed = input.trim();
37
- if (!trimmed)
38
- return null;
39
- if (trimmed.startsWith('htree://')) {
40
- const withoutScheme = trimmed.slice('htree://'.length);
41
- const firstSlash = withoutScheme.indexOf('/');
42
- const head = firstSlash === -1 ? withoutScheme : withoutScheme.slice(0, firstSlash);
43
- const tail = firstSlash === -1 ? '' : withoutScheme.slice(firstSlash + 1);
44
- const rawSegments = normalizeRelativePath(tail).split('/').filter(Boolean);
45
- if (head.startsWith('npub1')) {
46
- const [rawTreeName = '', ...rawPathSegments] = rawSegments;
47
- const treeName = safeDecodePathSegment(rawTreeName);
48
- if (!treeName) {
49
- return null;
50
- }
51
- return {
52
- kind: 'mutable',
53
- npub: head,
54
- treeName,
55
- path: rawPathSegments.map(safeDecodePathSegment).join('/'),
56
- };
57
- }
58
- if (head.startsWith('nhash1')) {
59
- return {
60
- kind: 'immutable',
61
- nhash: head,
62
- path: rawSegments.map(safeDecodePathSegment).join('/'),
63
- };
64
- }
65
- return null;
66
- }
67
- if (trimmed.startsWith('nhash1')) {
68
- return {
69
- kind: 'immutable',
70
- nhash: stripQueryAndHash(trimmed),
71
- path: '',
72
- };
73
- }
74
- return null;
75
- }
76
- export function buildHtreeRequestPath(input, mutableStyle = 'htree') {
77
- if (typeof input === 'string') {
78
- const trimmed = input.trim();
79
- if (!trimmed)
80
- return null;
81
- if (trimmed.startsWith('/htree/')) {
82
- return trimmed;
83
- }
84
- }
85
- const parsed = typeof input === 'string' ? parseHtreeUrl(input) : input;
86
- if (!parsed)
87
- return typeof input === 'string' ? input.trim() : null;
88
- if (parsed.kind === 'mutable') {
89
- const encodedTreeName = encodeURIComponent(parsed.treeName);
90
- const encodedPath = encodePath(parsed.path);
91
- const prefix = mutableStyle === 'htree' ? `/htree/${parsed.npub}` : `/${parsed.npub}`;
92
- return `${prefix}/${encodedTreeName}${encodedPath ? `/${encodedPath}` : ''}`;
93
- }
94
- const encodedPath = encodePath(parsed.path);
95
- return `/htree/${parsed.nhash}${encodedPath ? `/${encodedPath}` : ''}`;
96
- }
97
- export function resolveHtreeRequestUrl(input, options = {}) {
98
- const trimmedInput = typeof input === 'string' ? input.trim() : '';
99
- if (trimmedInput && /^https?:\/\//i.test(trimmedInput)) {
100
- return trimmedInput;
101
- }
102
- const baseUrl = options.baseUrl?.trim()
103
- ? options.baseUrl.trim().replace(/\/$/, '')
104
- : resolveRuntimeHtreeBaseUrl({
105
- windowLike: options.windowLike,
106
- fallbackBaseUrl: options.fallbackBaseUrl,
107
- });
108
- const mutableStyle = resolveMutableRequestStyle(options.windowLike, baseUrl, options.mutableStyle);
109
- const requestPath = buildHtreeRequestPath(input, mutableStyle);
110
- if (!requestPath) {
111
- return trimmedInput;
112
- }
113
- if (!baseUrl) {
114
- return requestPath;
115
- }
116
- return `${baseUrl}${requestPath}`;
117
- }
118
- //# sourceMappingURL=htree-url.js.map