@hashtree/worker 0.1.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.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/capabilities/blossomBandwidthTracker.d.ts +26 -0
- package/dist/capabilities/blossomBandwidthTracker.d.ts.map +1 -0
- package/dist/capabilities/blossomBandwidthTracker.js +53 -0
- package/dist/capabilities/blossomBandwidthTracker.js.map +1 -0
- package/dist/capabilities/blossomTransport.d.ts +22 -0
- package/dist/capabilities/blossomTransport.d.ts.map +1 -0
- package/dist/capabilities/blossomTransport.js +124 -0
- package/dist/capabilities/blossomTransport.js.map +1 -0
- package/dist/capabilities/connectivity.d.ts +3 -0
- package/dist/capabilities/connectivity.d.ts.map +1 -0
- package/dist/capabilities/connectivity.js +49 -0
- package/dist/capabilities/connectivity.js.map +1 -0
- package/dist/capabilities/idbStorage.d.ts +25 -0
- package/dist/capabilities/idbStorage.d.ts.map +1 -0
- package/dist/capabilities/idbStorage.js +73 -0
- package/dist/capabilities/idbStorage.js.map +1 -0
- package/dist/client.d.ts +54 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +336 -0
- package/dist/client.js.map +1 -0
- package/dist/entry.d.ts +2 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +2 -0
- package/dist/entry.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/iris/identity.d.ts +36 -0
- package/dist/iris/identity.d.ts.map +1 -0
- package/dist/iris/identity.js +78 -0
- package/dist/iris/identity.js.map +1 -0
- package/dist/iris/mediaHandler.d.ts +16 -0
- package/dist/iris/mediaHandler.d.ts.map +1 -0
- package/dist/iris/mediaHandler.js +529 -0
- package/dist/iris/mediaHandler.js.map +1 -0
- package/dist/iris/ndk.d.ts +95 -0
- package/dist/iris/ndk.d.ts.map +1 -0
- package/dist/iris/ndk.js +496 -0
- package/dist/iris/ndk.js.map +1 -0
- package/dist/iris/nostr-wasm.d.ts +14 -0
- package/dist/iris/nostr-wasm.d.ts.map +1 -0
- package/dist/iris/nostr-wasm.js +246 -0
- package/dist/iris/nostr-wasm.js.map +1 -0
- package/dist/iris/nostr.d.ts +60 -0
- package/dist/iris/nostr.d.ts.map +1 -0
- package/dist/iris/nostr.js +207 -0
- package/dist/iris/nostr.js.map +1 -0
- package/dist/iris/protocol.d.ts +574 -0
- package/dist/iris/protocol.d.ts.map +1 -0
- package/dist/iris/protocol.js +16 -0
- package/dist/iris/protocol.js.map +1 -0
- package/dist/iris/signing.d.ts +50 -0
- package/dist/iris/signing.d.ts.map +1 -0
- package/dist/iris/signing.js +299 -0
- package/dist/iris/signing.js.map +1 -0
- package/dist/iris/treeRootCache.d.ts +73 -0
- package/dist/iris/treeRootCache.d.ts.map +1 -0
- package/dist/iris/treeRootCache.js +191 -0
- package/dist/iris/treeRootCache.js.map +1 -0
- package/dist/iris/treeRootSubscription.d.ts +49 -0
- package/dist/iris/treeRootSubscription.d.ts.map +1 -0
- package/dist/iris/treeRootSubscription.js +185 -0
- package/dist/iris/treeRootSubscription.js.map +1 -0
- package/dist/iris/utils/constants.d.ts +76 -0
- package/dist/iris/utils/constants.d.ts.map +1 -0
- package/dist/iris/utils/constants.js +113 -0
- package/dist/iris/utils/constants.js.map +1 -0
- package/dist/iris/utils/errorMessage.d.ts +5 -0
- package/dist/iris/utils/errorMessage.d.ts.map +1 -0
- package/dist/iris/utils/errorMessage.js +8 -0
- package/dist/iris/utils/errorMessage.js.map +1 -0
- package/dist/iris/utils/lruCache.d.ts +26 -0
- package/dist/iris/utils/lruCache.d.ts.map +1 -0
- package/dist/iris/utils/lruCache.js +66 -0
- package/dist/iris/utils/lruCache.js.map +1 -0
- package/dist/iris/webrtc.d.ts +2 -0
- package/dist/iris/webrtc.d.ts.map +1 -0
- package/dist/iris/webrtc.js +3 -0
- package/dist/iris/webrtc.js.map +1 -0
- package/dist/iris/webrtcSignaling.d.ts +37 -0
- package/dist/iris/webrtcSignaling.d.ts.map +1 -0
- package/dist/iris/webrtcSignaling.js +86 -0
- package/dist/iris/webrtcSignaling.js.map +1 -0
- package/dist/iris/worker.d.ts +12 -0
- package/dist/iris/worker.d.ts.map +1 -0
- package/dist/iris/worker.js +1582 -0
- package/dist/iris/worker.js.map +1 -0
- package/dist/iris-entry.d.ts +2 -0
- package/dist/iris-entry.d.ts.map +1 -0
- package/dist/iris-entry.js +2 -0
- package/dist/iris-entry.js.map +1 -0
- package/dist/mediaStreaming.d.ts +7 -0
- package/dist/mediaStreaming.d.ts.map +1 -0
- package/dist/mediaStreaming.js +48 -0
- package/dist/mediaStreaming.js.map +1 -0
- package/dist/p2p/boundedQueue.d.ts +74 -0
- package/dist/p2p/boundedQueue.d.ts.map +1 -0
- package/dist/p2p/boundedQueue.js +112 -0
- package/dist/p2p/boundedQueue.js.map +1 -0
- package/dist/p2p/errorMessage.d.ts +5 -0
- package/dist/p2p/errorMessage.d.ts.map +1 -0
- package/dist/p2p/errorMessage.js +7 -0
- package/dist/p2p/errorMessage.js.map +1 -0
- package/dist/p2p/index.d.ts +7 -0
- package/dist/p2p/index.d.ts.map +1 -0
- package/dist/p2p/index.js +5 -0
- package/dist/p2p/index.js.map +1 -0
- package/dist/p2p/lruCache.d.ts +26 -0
- package/dist/p2p/lruCache.d.ts.map +1 -0
- package/dist/p2p/lruCache.js +65 -0
- package/dist/p2p/lruCache.js.map +1 -0
- package/dist/p2p/protocol.d.ts +10 -0
- package/dist/p2p/protocol.d.ts.map +1 -0
- package/dist/p2p/protocol.js +2 -0
- package/dist/p2p/protocol.js.map +1 -0
- package/dist/p2p/queryForwardingMachine.d.ts +46 -0
- package/dist/p2p/queryForwardingMachine.d.ts.map +1 -0
- package/dist/p2p/queryForwardingMachine.js +144 -0
- package/dist/p2p/queryForwardingMachine.js.map +1 -0
- package/dist/p2p/signaling.d.ts +63 -0
- package/dist/p2p/signaling.d.ts.map +1 -0
- package/dist/p2p/signaling.js +165 -0
- package/dist/p2p/signaling.js.map +1 -0
- package/dist/p2p/webrtcController.d.ts +152 -0
- package/dist/p2p/webrtcController.d.ts.map +1 -0
- package/dist/p2p/webrtcController.js +813 -0
- package/dist/p2p/webrtcController.js.map +1 -0
- package/dist/p2p/webrtcProxy.d.ts +55 -0
- package/dist/p2p/webrtcProxy.d.ts.map +1 -0
- package/dist/p2p/webrtcProxy.js +386 -0
- package/dist/p2p/webrtcProxy.js.map +1 -0
- package/dist/privacyGuards.d.ts +14 -0
- package/dist/privacyGuards.d.ts.map +1 -0
- package/dist/privacyGuards.js +27 -0
- package/dist/privacyGuards.js.map +1 -0
- package/dist/protocol.d.ts +171 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +616 -0
- package/dist/worker.js.map +1 -0
- package/package.json +64 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
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
|
+
p2pFetchHandler = null;
|
|
15
|
+
constructor(workerFactory, config = {}) {
|
|
16
|
+
this.workerFactory = workerFactory;
|
|
17
|
+
this.config = config;
|
|
18
|
+
}
|
|
19
|
+
async init() {
|
|
20
|
+
if (this.initPromise)
|
|
21
|
+
return this.initPromise;
|
|
22
|
+
try {
|
|
23
|
+
this.spawnWorker();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw err instanceof Error ? err : new Error(String(err));
|
|
27
|
+
}
|
|
28
|
+
this.initPromise = new Promise((resolve, reject) => {
|
|
29
|
+
if (!this.worker) {
|
|
30
|
+
reject(new Error('Failed to create worker'));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const id = generateRequestId();
|
|
34
|
+
const timeoutId = setTimeout(() => {
|
|
35
|
+
this.pending.delete(id);
|
|
36
|
+
reject(new Error('Worker init timed out'));
|
|
37
|
+
}, REQUEST_TIMEOUT_MS);
|
|
38
|
+
this.pending.set(id, {
|
|
39
|
+
resolve: (message) => {
|
|
40
|
+
if (message.type === 'ready') {
|
|
41
|
+
resolve();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
reject(new Error('Unexpected init response'));
|
|
45
|
+
},
|
|
46
|
+
reject: (error) => reject(error),
|
|
47
|
+
timeoutId,
|
|
48
|
+
});
|
|
49
|
+
this.worker.postMessage({
|
|
50
|
+
type: 'init',
|
|
51
|
+
id,
|
|
52
|
+
config: this.config,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
return this.initPromise;
|
|
56
|
+
}
|
|
57
|
+
spawnWorker() {
|
|
58
|
+
if (this.workerFactory instanceof URL) {
|
|
59
|
+
this.worker = new Worker(this.workerFactory, { type: 'module' });
|
|
60
|
+
}
|
|
61
|
+
else if (typeof this.workerFactory === 'string') {
|
|
62
|
+
this.worker = new Worker(this.workerFactory, { type: 'module' });
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.worker = new this.workerFactory();
|
|
66
|
+
}
|
|
67
|
+
this.worker.onmessage = (event) => {
|
|
68
|
+
const message = event.data;
|
|
69
|
+
if (message.type === 'connectivityUpdate') {
|
|
70
|
+
this.connectivityListeners.forEach(listener => listener(message.state));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (message.type === 'uploadProgress') {
|
|
74
|
+
this.uploadProgressListeners.forEach(listener => listener(message.progress));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (message.type === 'blossomBandwidth') {
|
|
78
|
+
this.blossomBandwidthListeners.forEach(listener => listener(message.stats));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (message.type === 'p2pFetch') {
|
|
82
|
+
void this.handleP2PFetch(message.requestId, message.hashHex);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (message.type === 'error' && message.id) {
|
|
86
|
+
this.rejectPending(message.id, new Error(message.error));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if ('id' in message && typeof message.id === 'string') {
|
|
90
|
+
this.resolvePending(message.id, message);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
this.worker.onerror = (event) => {
|
|
94
|
+
const errorMessage = event instanceof ErrorEvent ? event.message : 'Worker error';
|
|
95
|
+
this.rejectAllPending(new Error(errorMessage));
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
rejectAllPending(error) {
|
|
99
|
+
for (const [id, pending] of this.pending.entries()) {
|
|
100
|
+
clearTimeout(pending.timeoutId);
|
|
101
|
+
pending.reject(error);
|
|
102
|
+
this.pending.delete(id);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
resolvePending(id, message) {
|
|
106
|
+
const pending = this.pending.get(id);
|
|
107
|
+
if (!pending)
|
|
108
|
+
return;
|
|
109
|
+
clearTimeout(pending.timeoutId);
|
|
110
|
+
pending.resolve(message);
|
|
111
|
+
this.pending.delete(id);
|
|
112
|
+
}
|
|
113
|
+
rejectPending(id, error) {
|
|
114
|
+
const pending = this.pending.get(id);
|
|
115
|
+
if (!pending)
|
|
116
|
+
return;
|
|
117
|
+
clearTimeout(pending.timeoutId);
|
|
118
|
+
pending.reject(error);
|
|
119
|
+
this.pending.delete(id);
|
|
120
|
+
}
|
|
121
|
+
async handleP2PFetch(requestId, hashHex) {
|
|
122
|
+
if (!this.worker)
|
|
123
|
+
return;
|
|
124
|
+
const id = generateRequestId();
|
|
125
|
+
if (!this.p2pFetchHandler) {
|
|
126
|
+
this.worker.postMessage({
|
|
127
|
+
type: 'p2pFetchResult',
|
|
128
|
+
id,
|
|
129
|
+
requestId,
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const data = await this.p2pFetchHandler(hashHex);
|
|
135
|
+
if (data && data.byteLength > 0) {
|
|
136
|
+
this.worker.postMessage({
|
|
137
|
+
type: 'p2pFetchResult',
|
|
138
|
+
id,
|
|
139
|
+
requestId,
|
|
140
|
+
data,
|
|
141
|
+
}, [data.buffer]);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.worker.postMessage({
|
|
145
|
+
type: 'p2pFetchResult',
|
|
146
|
+
id,
|
|
147
|
+
requestId,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
152
|
+
this.worker.postMessage({
|
|
153
|
+
type: 'p2pFetchResult',
|
|
154
|
+
id,
|
|
155
|
+
requestId,
|
|
156
|
+
error,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async request(payload, timeoutMs = REQUEST_TIMEOUT_MS, transfer = []) {
|
|
161
|
+
await this.initIfNeeded();
|
|
162
|
+
if (!this.worker) {
|
|
163
|
+
throw new Error('Worker not initialized');
|
|
164
|
+
}
|
|
165
|
+
const id = generateRequestId();
|
|
166
|
+
const message = { ...payload, id };
|
|
167
|
+
return new Promise((resolve, reject) => {
|
|
168
|
+
const timeoutId = setTimeout(() => {
|
|
169
|
+
this.pending.delete(id);
|
|
170
|
+
reject(new Error(`Worker request timed out: ${payload.type}`));
|
|
171
|
+
}, timeoutMs);
|
|
172
|
+
this.pending.set(id, { resolve, reject, timeoutId });
|
|
173
|
+
this.worker?.postMessage(message, transfer);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
async initIfNeeded() {
|
|
177
|
+
if (!this.initPromise) {
|
|
178
|
+
await this.init();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
await this.initPromise;
|
|
182
|
+
}
|
|
183
|
+
async putBlob(data, mimeType, upload = true) {
|
|
184
|
+
const res = await this.request({ type: 'putBlob', data, mimeType, upload }, PUT_BLOB_TIMEOUT_MS);
|
|
185
|
+
if (res.type !== 'blobStored') {
|
|
186
|
+
throw new Error('Unexpected response for putBlob');
|
|
187
|
+
}
|
|
188
|
+
if (!res.hashHex || !res.nhash) {
|
|
189
|
+
throw new Error('Failed to store blob');
|
|
190
|
+
}
|
|
191
|
+
return { hashHex: res.hashHex, nhash: res.nhash };
|
|
192
|
+
}
|
|
193
|
+
async beginPutBlobStream(mimeType, upload = true) {
|
|
194
|
+
const res = await this.request({ type: 'beginPutBlobStream', mimeType, upload });
|
|
195
|
+
if (res.type !== 'blobStreamStarted') {
|
|
196
|
+
throw new Error('Unexpected response for beginPutBlobStream');
|
|
197
|
+
}
|
|
198
|
+
if (!res.streamId) {
|
|
199
|
+
throw new Error('Failed to start blob stream');
|
|
200
|
+
}
|
|
201
|
+
return res.streamId;
|
|
202
|
+
}
|
|
203
|
+
async appendPutBlobStream(streamId, chunk) {
|
|
204
|
+
const res = await this.request({ type: 'appendPutBlobStream', streamId, chunk }, STREAM_APPEND_TIMEOUT_MS, [chunk.buffer]);
|
|
205
|
+
if (res.type !== 'void') {
|
|
206
|
+
throw new Error('Unexpected response for appendPutBlobStream');
|
|
207
|
+
}
|
|
208
|
+
if (res.error) {
|
|
209
|
+
throw new Error(res.error);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async finishPutBlobStream(streamId) {
|
|
213
|
+
const res = await this.request({ type: 'finishPutBlobStream', streamId }, PUT_BLOB_TIMEOUT_MS);
|
|
214
|
+
if (res.type !== 'blobStored') {
|
|
215
|
+
throw new Error('Unexpected response for finishPutBlobStream');
|
|
216
|
+
}
|
|
217
|
+
if (!res.hashHex || !res.nhash) {
|
|
218
|
+
throw new Error('Failed to finalize blob stream');
|
|
219
|
+
}
|
|
220
|
+
return { hashHex: res.hashHex, nhash: res.nhash };
|
|
221
|
+
}
|
|
222
|
+
async cancelPutBlobStream(streamId) {
|
|
223
|
+
const res = await this.request({ type: 'cancelPutBlobStream', streamId });
|
|
224
|
+
if (res.type !== 'void') {
|
|
225
|
+
throw new Error('Unexpected response for cancelPutBlobStream');
|
|
226
|
+
}
|
|
227
|
+
if (res.error) {
|
|
228
|
+
throw new Error(res.error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async getBlob(hashHex) {
|
|
232
|
+
const res = await this.request({ type: 'getBlob', hashHex });
|
|
233
|
+
if (res.type !== 'blob') {
|
|
234
|
+
throw new Error('Unexpected response for getBlob');
|
|
235
|
+
}
|
|
236
|
+
if (res.error || !res.data || !res.source) {
|
|
237
|
+
throw new Error(res.error || 'Blob not found');
|
|
238
|
+
}
|
|
239
|
+
return { data: res.data, source: res.source };
|
|
240
|
+
}
|
|
241
|
+
async getBlobForPeer(hashHex) {
|
|
242
|
+
const res = await this.request({ type: 'getBlob', hashHex, forPeer: true });
|
|
243
|
+
if (res.type !== 'blob') {
|
|
244
|
+
throw new Error('Unexpected response for getBlobForPeer');
|
|
245
|
+
}
|
|
246
|
+
if (res.error || !res.data) {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
return res.data;
|
|
250
|
+
}
|
|
251
|
+
async setBlossomServers(servers) {
|
|
252
|
+
const res = await this.request({ type: 'setBlossomServers', servers });
|
|
253
|
+
if (res.type !== 'void') {
|
|
254
|
+
throw new Error('Unexpected response for setBlossomServers');
|
|
255
|
+
}
|
|
256
|
+
if (res.error) {
|
|
257
|
+
throw new Error(res.error);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async registerMediaPort(port) {
|
|
261
|
+
const res = await this.request({ type: 'registerMediaPort', port }, REQUEST_TIMEOUT_MS, [port]);
|
|
262
|
+
if (res.type !== 'void') {
|
|
263
|
+
throw new Error('Unexpected response for registerMediaPort');
|
|
264
|
+
}
|
|
265
|
+
if (res.error) {
|
|
266
|
+
throw new Error(res.error);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async setStorageMaxBytes(maxBytes) {
|
|
270
|
+
const res = await this.request({ type: 'setStorageMaxBytes', maxBytes });
|
|
271
|
+
if (res.type !== 'void') {
|
|
272
|
+
throw new Error('Unexpected response for setStorageMaxBytes');
|
|
273
|
+
}
|
|
274
|
+
if (res.error) {
|
|
275
|
+
throw new Error(res.error);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
async getStorageStats() {
|
|
279
|
+
const res = await this.request({ type: 'getStorageStats' });
|
|
280
|
+
if (res.type !== 'storageStats') {
|
|
281
|
+
throw new Error('Unexpected response for getStorageStats');
|
|
282
|
+
}
|
|
283
|
+
if (res.error) {
|
|
284
|
+
throw new Error(res.error);
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
items: res.items,
|
|
288
|
+
bytes: res.bytes,
|
|
289
|
+
maxBytes: res.maxBytes,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
async probeConnectivity() {
|
|
293
|
+
const res = await this.request({ type: 'probeConnectivity' });
|
|
294
|
+
if (res.type !== 'connectivity') {
|
|
295
|
+
throw new Error('Unexpected response for probeConnectivity');
|
|
296
|
+
}
|
|
297
|
+
if (res.error || !res.state) {
|
|
298
|
+
throw new Error(res.error || 'Connectivity probe failed');
|
|
299
|
+
}
|
|
300
|
+
return res.state;
|
|
301
|
+
}
|
|
302
|
+
onConnectivityUpdate(listener) {
|
|
303
|
+
this.connectivityListeners.add(listener);
|
|
304
|
+
return () => {
|
|
305
|
+
this.connectivityListeners.delete(listener);
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
onUploadProgress(listener) {
|
|
309
|
+
this.uploadProgressListeners.add(listener);
|
|
310
|
+
return () => {
|
|
311
|
+
this.uploadProgressListeners.delete(listener);
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
onBlossomBandwidth(listener) {
|
|
315
|
+
this.blossomBandwidthListeners.add(listener);
|
|
316
|
+
return () => {
|
|
317
|
+
this.blossomBandwidthListeners.delete(listener);
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
setP2PFetchHandler(handler) {
|
|
321
|
+
this.p2pFetchHandler = handler;
|
|
322
|
+
}
|
|
323
|
+
async close() {
|
|
324
|
+
try {
|
|
325
|
+
await this.request({ type: 'close' });
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// Ignore close errors.
|
|
329
|
+
}
|
|
330
|
+
this.worker?.terminate();
|
|
331
|
+
this.worker = null;
|
|
332
|
+
this.initPromise = null;
|
|
333
|
+
this.rejectAllPending(new Error('Worker closed'));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/entry.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC"}
|
package/dist/entry.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HashtreeWorkerClient } from './client.js';
|
|
2
|
+
export type { WorkerFactory, P2PFetchHandler } from './client.js';
|
|
3
|
+
export type { BlossomServerConfig, WorkerConfig, WorkerRequest, WorkerResponse, ConnectivityState, UploadProgressState, BlossomBandwidthState, BlossomBandwidthServerStats, BlobSource, } from './protocol.js';
|
|
4
|
+
export { WebRTCController, WebRTCProxy, initWebRTCProxy, getWebRTCProxy, closeWebRTCProxy, } from './p2p/index.js';
|
|
5
|
+
export type { WebRTCControllerConfig } from './p2p/index.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAcnD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Identity Management
|
|
3
|
+
*
|
|
4
|
+
* Manages user identity for signing operations.
|
|
5
|
+
* - For nsec login: secret key available, sign directly
|
|
6
|
+
* - For extension login: delegate to main thread via NIP-07
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Initialize identity from config
|
|
10
|
+
*/
|
|
11
|
+
export declare function initIdentity(pubkey: string, nsecHex?: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Update identity (account switch)
|
|
14
|
+
*/
|
|
15
|
+
export declare function setIdentity(pubkey: string, nsecHex?: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clear identity on close
|
|
18
|
+
*/
|
|
19
|
+
export declare function clearIdentity(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get user's pubkey (or ephemeral fallback)
|
|
22
|
+
*/
|
|
23
|
+
export declare function getPubkey(): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get user's secret key (null for extension login)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSecretKey(): Uint8Array | null;
|
|
28
|
+
/**
|
|
29
|
+
* Get ephemeral secret key (fallback for sync signing)
|
|
30
|
+
*/
|
|
31
|
+
export declare function getEphemeralSecretKey(): Uint8Array | null;
|
|
32
|
+
/**
|
|
33
|
+
* Check if we have a secret key for direct signing
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasSecretKey(): boolean;
|
|
36
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/iris/identity.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAYH;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAanE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Worker Identity Management
|
|
4
|
+
*
|
|
5
|
+
* Manages user identity for signing operations.
|
|
6
|
+
* - For nsec login: secret key available, sign directly
|
|
7
|
+
* - For extension login: delegate to main thread via NIP-07
|
|
8
|
+
*/
|
|
9
|
+
import { generateSecretKey, getPublicKey } from 'nostr-tools';
|
|
10
|
+
// User identity (set via init or setIdentity)
|
|
11
|
+
let userPubkey = null;
|
|
12
|
+
let userSecretKey = null;
|
|
13
|
+
// Fallback ephemeral identity (used before user logs in)
|
|
14
|
+
let ephemeralSecretKey = null;
|
|
15
|
+
let ephemeralPubkey = null;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize identity from config
|
|
18
|
+
*/
|
|
19
|
+
export function initIdentity(pubkey, nsecHex) {
|
|
20
|
+
userPubkey = pubkey;
|
|
21
|
+
if (nsecHex) {
|
|
22
|
+
userSecretKey = new Uint8Array(nsecHex.match(/.{2}/g).map(b => parseInt(b, 16)));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
userSecretKey = null;
|
|
26
|
+
}
|
|
27
|
+
// Generate fallback ephemeral identity
|
|
28
|
+
if (!ephemeralSecretKey) {
|
|
29
|
+
ephemeralSecretKey = generateSecretKey();
|
|
30
|
+
ephemeralPubkey = getPublicKey(ephemeralSecretKey);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Update identity (account switch)
|
|
35
|
+
*/
|
|
36
|
+
export function setIdentity(pubkey, nsecHex) {
|
|
37
|
+
userPubkey = pubkey;
|
|
38
|
+
if (nsecHex) {
|
|
39
|
+
userSecretKey = new Uint8Array(nsecHex.match(/.{2}/g).map(b => parseInt(b, 16)));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
userSecretKey = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Clear identity on close
|
|
47
|
+
*/
|
|
48
|
+
export function clearIdentity() {
|
|
49
|
+
userPubkey = null;
|
|
50
|
+
userSecretKey = null;
|
|
51
|
+
ephemeralSecretKey = null;
|
|
52
|
+
ephemeralPubkey = null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get user's pubkey (or ephemeral fallback)
|
|
56
|
+
*/
|
|
57
|
+
export function getPubkey() {
|
|
58
|
+
return userPubkey || ephemeralPubkey;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get user's secret key (null for extension login)
|
|
62
|
+
*/
|
|
63
|
+
export function getSecretKey() {
|
|
64
|
+
return userSecretKey;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get ephemeral secret key (fallback for sync signing)
|
|
68
|
+
*/
|
|
69
|
+
export function getEphemeralSecretKey() {
|
|
70
|
+
return ephemeralSecretKey;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if we have a secret key for direct signing
|
|
74
|
+
*/
|
|
75
|
+
export function hasSecretKey() {
|
|
76
|
+
return userSecretKey !== null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/iris/identity.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,8CAA8C;AAC9C,IAAI,UAAU,GAAkB,IAAI,CAAC;AACrC,IAAI,aAAa,GAAsB,IAAI,CAAC;AAE5C,yDAAyD;AACzD,IAAI,kBAAkB,GAAsB,IAAI,CAAC;AACjD,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAgB;IAC3D,UAAU,GAAG,MAAM,CAAC;IACpB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QACzC,eAAe,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAgB;IAC1D,UAAU,GAAG,MAAM,CAAC;IACpB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,UAAU,GAAG,IAAI,CAAC;IAClB,aAAa,GAAG,IAAI,CAAC;IACrB,kBAAkB,GAAG,IAAI,CAAC;IAC1B,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,IAAI,eAAe,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,KAAK,IAAI,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media Streaming Handler for Hashtree Worker
|
|
3
|
+
*
|
|
4
|
+
* Handles media requests from the service worker via MessagePort.
|
|
5
|
+
* Supports both direct CID-based requests and path-based requests with live streaming.
|
|
6
|
+
*/
|
|
7
|
+
import type { HashTree } from '@hashtree/core';
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the media handler with the HashTree instance
|
|
10
|
+
*/
|
|
11
|
+
export declare function initMediaHandler(hashTree: HashTree): void;
|
|
12
|
+
/**
|
|
13
|
+
* Register a MessagePort from the service worker for media streaming
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerMediaPort(port: MessagePort, debug?: boolean): void;
|
|
16
|
+
//# sourceMappingURL=mediaHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaHandler.d.ts","sourceRoot":"","sources":["../../src/iris/mediaHandler.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAO,MAAM,gBAAgB,CAAC;AAwEpD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CA0B1E"}
|