@hashtree/worker 0.2.0 → 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.
- package/package.json +7 -3
- package/src/app-runtime.ts +393 -0
- package/src/capabilities/blossomBandwidthTracker.ts +74 -0
- package/src/capabilities/blossomTransport.ts +179 -0
- package/src/capabilities/connectivity.ts +54 -0
- package/src/capabilities/idbStorage.ts +94 -0
- package/src/capabilities/meshRouterStore.ts +426 -0
- package/src/capabilities/rootResolver.ts +497 -0
- package/src/client-id.ts +137 -0
- package/src/client.ts +501 -0
- package/{dist/entry.js → src/entry.ts} +1 -1
- package/src/htree-path.ts +53 -0
- package/src/htree-url.ts +156 -0
- package/src/index.ts +76 -0
- package/src/mediaStreaming.ts +64 -0
- package/src/p2p/boundedQueue.ts +168 -0
- package/src/p2p/errorMessage.ts +6 -0
- package/src/p2p/index.ts +48 -0
- package/src/p2p/lruCache.ts +78 -0
- package/src/p2p/meshQueryRouter.ts +361 -0
- package/src/p2p/protocol.ts +11 -0
- package/src/p2p/queryForwardingMachine.ts +197 -0
- package/src/p2p/signaling.ts +284 -0
- package/src/p2p/uploadRateLimiter.ts +85 -0
- package/src/p2p/webrtcController.ts +1168 -0
- package/src/p2p/webrtcProxy.ts +519 -0
- package/src/privacyGuards.ts +31 -0
- package/src/protocol.ts +124 -0
- package/src/relay/identity.ts +86 -0
- package/src/relay/mediaHandler.ts +1633 -0
- package/src/relay/ndk.ts +590 -0
- package/{dist/relay/nostr-wasm.js → src/relay/nostr-wasm.ts} +4 -1
- package/src/relay/nostr.ts +249 -0
- package/src/relay/protocol.ts +361 -0
- package/src/relay/publicAssetUrl.ts +25 -0
- package/src/relay/rootPathResolver.ts +50 -0
- package/src/relay/shims.d.ts +17 -0
- package/src/relay/signing.ts +332 -0
- package/src/relay/treeRootCache.ts +354 -0
- package/src/relay/treeRootSubscription.ts +577 -0
- package/src/relay/utils/constants.ts +139 -0
- package/src/relay/utils/errorMessage.ts +7 -0
- package/src/relay/utils/lruCache.ts +79 -0
- package/src/relay/webrtc.ts +5 -0
- package/src/relay/webrtcSignaling.ts +108 -0
- package/src/relay/worker.ts +1787 -0
- package/src/relay-client.ts +265 -0
- package/src/relay-entry.ts +1 -0
- package/src/runtime-network.ts +134 -0
- package/src/runtime.ts +153 -0
- package/{dist/transferableBytes.js → src/transferableBytes.ts} +2 -3
- package/src/tree-root.ts +851 -0
- package/src/types.ts +8 -0
- package/src/worker.ts +975 -0
- package/dist/app-runtime.d.ts +0 -60
- package/dist/app-runtime.d.ts.map +0 -1
- package/dist/app-runtime.js +0 -271
- package/dist/app-runtime.js.map +0 -1
- package/dist/capabilities/blossomBandwidthTracker.d.ts +0 -26
- package/dist/capabilities/blossomBandwidthTracker.d.ts.map +0 -1
- package/dist/capabilities/blossomBandwidthTracker.js +0 -53
- package/dist/capabilities/blossomBandwidthTracker.js.map +0 -1
- package/dist/capabilities/blossomTransport.d.ts +0 -22
- package/dist/capabilities/blossomTransport.d.ts.map +0 -1
- package/dist/capabilities/blossomTransport.js +0 -139
- package/dist/capabilities/blossomTransport.js.map +0 -1
- package/dist/capabilities/connectivity.d.ts +0 -3
- package/dist/capabilities/connectivity.d.ts.map +0 -1
- package/dist/capabilities/connectivity.js +0 -49
- package/dist/capabilities/connectivity.js.map +0 -1
- package/dist/capabilities/idbStorage.d.ts +0 -25
- package/dist/capabilities/idbStorage.d.ts.map +0 -1
- package/dist/capabilities/idbStorage.js +0 -73
- package/dist/capabilities/idbStorage.js.map +0 -1
- package/dist/capabilities/meshRouterStore.d.ts +0 -71
- package/dist/capabilities/meshRouterStore.d.ts.map +0 -1
- package/dist/capabilities/meshRouterStore.js +0 -316
- package/dist/capabilities/meshRouterStore.js.map +0 -1
- package/dist/capabilities/rootResolver.d.ts +0 -10
- package/dist/capabilities/rootResolver.d.ts.map +0 -1
- package/dist/capabilities/rootResolver.js +0 -392
- package/dist/capabilities/rootResolver.js.map +0 -1
- package/dist/client-id.d.ts +0 -18
- package/dist/client-id.d.ts.map +0 -1
- package/dist/client-id.js +0 -98
- package/dist/client-id.js.map +0 -1
- package/dist/client.d.ts +0 -61
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -417
- package/dist/client.js.map +0 -1
- package/dist/entry.d.ts +0 -2
- package/dist/entry.d.ts.map +0 -1
- package/dist/entry.js.map +0 -1
- package/dist/htree-path.d.ts +0 -13
- package/dist/htree-path.d.ts.map +0 -1
- package/dist/htree-path.js +0 -38
- package/dist/htree-path.js.map +0 -1
- package/dist/htree-url.d.ts +0 -22
- package/dist/htree-url.d.ts.map +0 -1
- package/dist/htree-url.js +0 -118
- package/dist/htree-url.js.map +0 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +0 -1
- package/dist/mediaStreaming.d.ts +0 -7
- package/dist/mediaStreaming.d.ts.map +0 -1
- package/dist/mediaStreaming.js +0 -48
- package/dist/mediaStreaming.js.map +0 -1
- package/dist/p2p/boundedQueue.d.ts +0 -79
- package/dist/p2p/boundedQueue.d.ts.map +0 -1
- package/dist/p2p/boundedQueue.js +0 -134
- package/dist/p2p/boundedQueue.js.map +0 -1
- package/dist/p2p/errorMessage.d.ts +0 -5
- package/dist/p2p/errorMessage.d.ts.map +0 -1
- package/dist/p2p/errorMessage.js +0 -7
- package/dist/p2p/errorMessage.js.map +0 -1
- package/dist/p2p/index.d.ts +0 -8
- package/dist/p2p/index.d.ts.map +0 -1
- package/dist/p2p/index.js +0 -6
- package/dist/p2p/index.js.map +0 -1
- package/dist/p2p/lruCache.d.ts +0 -26
- package/dist/p2p/lruCache.d.ts.map +0 -1
- package/dist/p2p/lruCache.js +0 -65
- package/dist/p2p/lruCache.js.map +0 -1
- package/dist/p2p/meshQueryRouter.d.ts +0 -57
- package/dist/p2p/meshQueryRouter.d.ts.map +0 -1
- package/dist/p2p/meshQueryRouter.js +0 -264
- package/dist/p2p/meshQueryRouter.js.map +0 -1
- package/dist/p2p/protocol.d.ts +0 -10
- package/dist/p2p/protocol.d.ts.map +0 -1
- package/dist/p2p/protocol.js +0 -2
- package/dist/p2p/protocol.js.map +0 -1
- package/dist/p2p/queryForwardingMachine.d.ts +0 -46
- package/dist/p2p/queryForwardingMachine.d.ts.map +0 -1
- package/dist/p2p/queryForwardingMachine.js +0 -144
- package/dist/p2p/queryForwardingMachine.js.map +0 -1
- package/dist/p2p/signaling.d.ts +0 -63
- package/dist/p2p/signaling.d.ts.map +0 -1
- package/dist/p2p/signaling.js +0 -185
- package/dist/p2p/signaling.js.map +0 -1
- package/dist/p2p/uploadRateLimiter.d.ts +0 -21
- package/dist/p2p/uploadRateLimiter.d.ts.map +0 -1
- package/dist/p2p/uploadRateLimiter.js +0 -62
- package/dist/p2p/uploadRateLimiter.js.map +0 -1
- package/dist/p2p/webrtcController.d.ts +0 -176
- package/dist/p2p/webrtcController.d.ts.map +0 -1
- package/dist/p2p/webrtcController.js +0 -938
- package/dist/p2p/webrtcController.js.map +0 -1
- package/dist/p2p/webrtcProxy.d.ts +0 -62
- package/dist/p2p/webrtcProxy.d.ts.map +0 -1
- package/dist/p2p/webrtcProxy.js +0 -447
- package/dist/p2p/webrtcProxy.js.map +0 -1
- package/dist/privacyGuards.d.ts +0 -14
- package/dist/privacyGuards.d.ts.map +0 -1
- package/dist/privacyGuards.js +0 -27
- package/dist/privacyGuards.js.map +0 -1
- package/dist/protocol.d.ts +0 -225
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -2
- package/dist/protocol.js.map +0 -1
- package/dist/relay/identity.d.ts +0 -36
- package/dist/relay/identity.d.ts.map +0 -1
- package/dist/relay/identity.js +0 -78
- package/dist/relay/identity.js.map +0 -1
- package/dist/relay/mediaHandler.d.ts +0 -64
- package/dist/relay/mediaHandler.d.ts.map +0 -1
- package/dist/relay/mediaHandler.js +0 -1285
- package/dist/relay/mediaHandler.js.map +0 -1
- package/dist/relay/ndk.d.ts +0 -96
- package/dist/relay/ndk.d.ts.map +0 -1
- package/dist/relay/ndk.js +0 -502
- package/dist/relay/ndk.js.map +0 -1
- package/dist/relay/nostr-wasm.d.ts +0 -14
- package/dist/relay/nostr-wasm.d.ts.map +0 -1
- package/dist/relay/nostr-wasm.js.map +0 -1
- package/dist/relay/nostr.d.ts +0 -60
- package/dist/relay/nostr.d.ts.map +0 -1
- package/dist/relay/nostr.js +0 -207
- package/dist/relay/nostr.js.map +0 -1
- package/dist/relay/protocol.d.ts +0 -592
- package/dist/relay/protocol.d.ts.map +0 -1
- package/dist/relay/protocol.js +0 -16
- package/dist/relay/protocol.js.map +0 -1
- package/dist/relay/publicAssetUrl.d.ts +0 -6
- package/dist/relay/publicAssetUrl.d.ts.map +0 -1
- package/dist/relay/publicAssetUrl.js +0 -14
- package/dist/relay/publicAssetUrl.js.map +0 -1
- package/dist/relay/rootPathResolver.d.ts +0 -9
- package/dist/relay/rootPathResolver.d.ts.map +0 -1
- package/dist/relay/rootPathResolver.js +0 -32
- package/dist/relay/rootPathResolver.js.map +0 -1
- package/dist/relay/signing.d.ts +0 -50
- package/dist/relay/signing.d.ts.map +0 -1
- package/dist/relay/signing.js +0 -299
- package/dist/relay/signing.js.map +0 -1
- package/dist/relay/treeRootCache.d.ts +0 -86
- package/dist/relay/treeRootCache.d.ts.map +0 -1
- package/dist/relay/treeRootCache.js +0 -269
- package/dist/relay/treeRootCache.js.map +0 -1
- package/dist/relay/treeRootSubscription.d.ts +0 -55
- package/dist/relay/treeRootSubscription.d.ts.map +0 -1
- package/dist/relay/treeRootSubscription.js +0 -478
- package/dist/relay/treeRootSubscription.js.map +0 -1
- package/dist/relay/utils/constants.d.ts +0 -76
- package/dist/relay/utils/constants.d.ts.map +0 -1
- package/dist/relay/utils/constants.js +0 -113
- package/dist/relay/utils/constants.js.map +0 -1
- package/dist/relay/utils/errorMessage.d.ts +0 -5
- package/dist/relay/utils/errorMessage.d.ts.map +0 -1
- package/dist/relay/utils/errorMessage.js +0 -8
- package/dist/relay/utils/errorMessage.js.map +0 -1
- package/dist/relay/utils/lruCache.d.ts +0 -26
- package/dist/relay/utils/lruCache.d.ts.map +0 -1
- package/dist/relay/utils/lruCache.js +0 -66
- package/dist/relay/utils/lruCache.js.map +0 -1
- package/dist/relay/webrtc.d.ts +0 -2
- package/dist/relay/webrtc.d.ts.map +0 -1
- package/dist/relay/webrtc.js +0 -3
- package/dist/relay/webrtc.js.map +0 -1
- package/dist/relay/webrtcSignaling.d.ts +0 -37
- package/dist/relay/webrtcSignaling.d.ts.map +0 -1
- package/dist/relay/webrtcSignaling.js +0 -86
- package/dist/relay/webrtcSignaling.js.map +0 -1
- package/dist/relay/worker.d.ts +0 -12
- package/dist/relay/worker.d.ts.map +0 -1
- package/dist/relay/worker.js +0 -1540
- package/dist/relay/worker.js.map +0 -1
- package/dist/relay-client.d.ts +0 -31
- package/dist/relay-client.d.ts.map +0 -1
- package/dist/relay-client.js +0 -197
- package/dist/relay-client.js.map +0 -1
- package/dist/relay-entry.d.ts +0 -2
- package/dist/relay-entry.d.ts.map +0 -1
- package/dist/relay-entry.js +0 -2
- package/dist/relay-entry.js.map +0 -1
- package/dist/runtime-network.d.ts +0 -23
- package/dist/runtime-network.d.ts.map +0 -1
- package/dist/runtime-network.js +0 -105
- package/dist/runtime-network.js.map +0 -1
- package/dist/runtime.d.ts +0 -24
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -126
- package/dist/runtime.js.map +0 -1
- package/dist/transferableBytes.d.ts +0 -2
- package/dist/transferableBytes.d.ts.map +0 -1
- package/dist/transferableBytes.js.map +0 -1
- package/dist/tree-root.d.ts +0 -201
- package/dist/tree-root.d.ts.map +0 -1
- package/dist/tree-root.js +0 -632
- package/dist/tree-root.js.map +0 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/worker.d.ts +0 -9
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -792
- package/dist/worker.js.map +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Simple LRU Cache implementation
|
|
4
|
+
*/
|
|
5
|
+
export class LRUCache<K, V> {
|
|
6
|
+
private cache = new Map<K, V>();
|
|
7
|
+
private maxSize: number;
|
|
8
|
+
|
|
9
|
+
constructor(maxSize: number = 100) {
|
|
10
|
+
this.maxSize = maxSize;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get(key: K): V | undefined {
|
|
14
|
+
const value = this.cache.get(key);
|
|
15
|
+
if (value !== undefined) {
|
|
16
|
+
// Move to end (most recently used)
|
|
17
|
+
this.cache.delete(key);
|
|
18
|
+
this.cache.set(key, value);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
set(key: K, value: V): void {
|
|
24
|
+
// Delete first to reset position if exists
|
|
25
|
+
this.cache.delete(key);
|
|
26
|
+
|
|
27
|
+
// Evict oldest if at capacity
|
|
28
|
+
if (this.cache.size >= this.maxSize) {
|
|
29
|
+
const oldest = this.cache.keys().next().value;
|
|
30
|
+
if (oldest !== undefined) {
|
|
31
|
+
this.cache.delete(oldest);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
this.cache.set(key, value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
has(key: K): boolean {
|
|
39
|
+
return this.cache.has(key);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
delete(key: K): boolean {
|
|
43
|
+
return this.cache.delete(key);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
clear(): void {
|
|
47
|
+
this.cache.clear();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get size(): number {
|
|
51
|
+
return this.cache.size;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
keys(): IterableIterator<K> {
|
|
55
|
+
return this.cache.keys();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
values(): IterableIterator<V> {
|
|
59
|
+
return this.cache.values();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Iterate over all entries (note: does not update LRU order)
|
|
64
|
+
*/
|
|
65
|
+
*entries(): IterableIterator<[K, V]> {
|
|
66
|
+
yield* this.cache.entries();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
forEach(callback: (value: V, key: K) => void): void {
|
|
70
|
+
this.cache.forEach(callback);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Make the cache iterable
|
|
75
|
+
*/
|
|
76
|
+
[Symbol.iterator](): IterableIterator<[K, V]> {
|
|
77
|
+
return this.entries();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* WebRTC Signaling Handler for Hashtree Worker
|
|
4
|
+
*
|
|
5
|
+
* Handles WebRTC signaling via Nostr (kind 25050).
|
|
6
|
+
* - Hello messages: broadcast with #l tag for peer discovery
|
|
7
|
+
* - Directed messages (offer/answer/candidates): gift-wrapped for privacy
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { SignedEvent } from './protocol';
|
|
11
|
+
import type { SignalingMessage } from '@hashtree/nostr';
|
|
12
|
+
import type { WebRTCController } from './webrtc';
|
|
13
|
+
import {
|
|
14
|
+
createSignalingFilters,
|
|
15
|
+
decodeSignalingEvent,
|
|
16
|
+
sendSignalingMessage,
|
|
17
|
+
} from '../p2p/signaling.js';
|
|
18
|
+
import { subscribe as ndkSubscribe, publish as ndkPublish } from './ndk';
|
|
19
|
+
import { signEvent, giftWrap, giftUnwrap } from './signing';
|
|
20
|
+
|
|
21
|
+
let webrtc: WebRTCController | null = null;
|
|
22
|
+
let signalingPubkey: string | null = null;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the WebRTC signaling handler
|
|
26
|
+
*/
|
|
27
|
+
export function initWebRTCSignaling(controller: WebRTCController): void {
|
|
28
|
+
webrtc = controller;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Send WebRTC signaling message via Nostr (kind 25050)
|
|
33
|
+
* - Hello messages: broadcast with #l tag
|
|
34
|
+
* - Directed messages (offer/answer/candidates): gift-wrapped
|
|
35
|
+
*/
|
|
36
|
+
export async function sendWebRTCSignaling(
|
|
37
|
+
msg: SignalingMessage,
|
|
38
|
+
recipientPubkey?: string
|
|
39
|
+
): Promise<void> {
|
|
40
|
+
try {
|
|
41
|
+
await sendSignalingMessage<SignedEvent>({
|
|
42
|
+
msg,
|
|
43
|
+
recipientPubkey,
|
|
44
|
+
signEvent,
|
|
45
|
+
giftWrap,
|
|
46
|
+
publish: ndkPublish,
|
|
47
|
+
});
|
|
48
|
+
} catch (err) {
|
|
49
|
+
console.error('[Worker] Failed to send WebRTC signaling:', err);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Subscribe to WebRTC signaling events.
|
|
55
|
+
* NOTE: The caller must set up the event handler via setOnEvent
|
|
56
|
+
* and route webrtc-* subscriptions to handleWebRTCSignalingEvent.
|
|
57
|
+
*/
|
|
58
|
+
export function setupWebRTCSignalingSubscription(myPubkey: string): void {
|
|
59
|
+
signalingPubkey = myPubkey;
|
|
60
|
+
const { since, helloFilter, directedFilter } = createSignalingFilters(myPubkey);
|
|
61
|
+
|
|
62
|
+
console.log('[WebRTC Signaling] Setting up subscriptions for', myPubkey.slice(0, 16), 'since', since);
|
|
63
|
+
|
|
64
|
+
// Subscribe to hello messages (broadcast discovery)
|
|
65
|
+
console.log('[WebRTC Signaling] Creating webrtc-hello subscription');
|
|
66
|
+
ndkSubscribe('webrtc-hello', [helloFilter]);
|
|
67
|
+
|
|
68
|
+
// Subscribe to directed signaling (offers/answers to us)
|
|
69
|
+
console.log('[WebRTC Signaling] Creating webrtc-directed subscription');
|
|
70
|
+
ndkSubscribe('webrtc-directed', [directedFilter]);
|
|
71
|
+
|
|
72
|
+
console.log('[WebRTC Signaling] Subscriptions setup complete');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Re-subscribe to WebRTC signaling after relay change.
|
|
77
|
+
* Call this after setRelays to ensure subscriptions work on new relays.
|
|
78
|
+
*/
|
|
79
|
+
export function resubscribeWebRTCSignaling(): void {
|
|
80
|
+
if (!signalingPubkey) {
|
|
81
|
+
console.warn('[WebRTC Signaling] Cannot resubscribe - no pubkey set');
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
console.log('[WebRTC Signaling] Resubscribing with pubkey:', signalingPubkey.slice(0, 16));
|
|
85
|
+
setupWebRTCSignalingSubscription(signalingPubkey);
|
|
86
|
+
console.log('[WebRTC Signaling] Resubscription complete');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Handle incoming WebRTC signaling event.
|
|
91
|
+
* Call this from the unified NostrManager event handler for webrtc-* subscriptions.
|
|
92
|
+
*/
|
|
93
|
+
export async function handleWebRTCSignalingEvent(event: SignedEvent): Promise<void> {
|
|
94
|
+
const decoded = await decodeSignalingEvent({
|
|
95
|
+
event,
|
|
96
|
+
giftUnwrap,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (!decoded) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (decoded.message.type !== 'hello') {
|
|
104
|
+
console.log('[WebRTC] Unwrapped message:', decoded.message.type, 'from', decoded.senderPubkey.slice(0, 8));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
webrtc?.handleSignalingMessage(decoded.message, decoded.senderPubkey);
|
|
108
|
+
}
|