@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
@@ -1,134 +0,0 @@
1
- /**
2
- * BoundedQueue - Memory-safe queue with size limits
3
- *
4
- * Prevents memory blowup by enforcing both item count and byte limits.
5
- * When limits are exceeded, oldest items are dropped (FIFO eviction).
6
- *
7
- * Use this instead of plain arrays for queues that could grow unbounded,
8
- * especially for network buffers, send queues, and work queues.
9
- */
10
- export class BoundedQueue {
11
- items = [];
12
- bytesUsed = 0;
13
- maxItems;
14
- maxBytes;
15
- getBytes;
16
- onDrop;
17
- constructor(options) {
18
- this.maxItems = options.maxItems;
19
- this.maxBytes = options.maxBytes;
20
- this.getBytes = options.getBytes;
21
- this.onDrop = options.onDrop;
22
- }
23
- /**
24
- * Add item to queue, dropping oldest items if limits exceeded
25
- * @returns Number of items dropped to make room
26
- */
27
- push(item) {
28
- const itemBytes = this.getBytes(item);
29
- let dropped = 0;
30
- // Drop oldest items until we have room
31
- while (this.items.length > 0 &&
32
- (this.items.length >= this.maxItems || this.bytesUsed + itemBytes > this.maxBytes)) {
33
- const droppedItem = this.items.shift();
34
- const droppedBytes = this.getBytes(droppedItem);
35
- this.bytesUsed -= droppedBytes;
36
- dropped++;
37
- if (this.onDrop) {
38
- const reason = this.items.length >= this.maxItems ? 'items' : 'bytes';
39
- this.onDrop(droppedItem, reason);
40
- }
41
- }
42
- this.items.push(item);
43
- this.bytesUsed += itemBytes;
44
- return dropped;
45
- }
46
- /**
47
- * Add item to the front of the queue, dropping items from the back if limits are exceeded.
48
- * Useful for urgent control messages that should overtake bulk background traffic.
49
- */
50
- unshift(item) {
51
- const itemBytes = this.getBytes(item);
52
- let dropped = 0;
53
- while (this.items.length > 0 &&
54
- (this.items.length >= this.maxItems || this.bytesUsed + itemBytes > this.maxBytes)) {
55
- const droppedItem = this.items.pop();
56
- const droppedBytes = this.getBytes(droppedItem);
57
- this.bytesUsed -= droppedBytes;
58
- dropped++;
59
- if (this.onDrop) {
60
- const reason = this.items.length >= this.maxItems ? 'items' : 'bytes';
61
- this.onDrop(droppedItem, reason);
62
- }
63
- }
64
- this.items.unshift(item);
65
- this.bytesUsed += itemBytes;
66
- return dropped;
67
- }
68
- /**
69
- * Remove and return oldest item, or undefined if empty
70
- */
71
- shift() {
72
- const item = this.items.shift();
73
- if (item !== undefined) {
74
- this.bytesUsed -= this.getBytes(item);
75
- }
76
- return item;
77
- }
78
- /**
79
- * Peek at oldest item without removing
80
- */
81
- peek() {
82
- return this.items[0];
83
- }
84
- /**
85
- * Clear all items
86
- */
87
- clear() {
88
- this.items = [];
89
- this.bytesUsed = 0;
90
- }
91
- /**
92
- * Get current item count
93
- */
94
- get length() {
95
- return this.items.length;
96
- }
97
- /**
98
- * Get current byte usage
99
- */
100
- get bytes() {
101
- return this.bytesUsed;
102
- }
103
- /**
104
- * Check if queue is empty
105
- */
106
- get isEmpty() {
107
- return this.items.length === 0;
108
- }
109
- /**
110
- * Check if queue is at item capacity
111
- */
112
- get isFullItems() {
113
- return this.items.length >= this.maxItems;
114
- }
115
- /**
116
- * Check if queue is at byte capacity
117
- */
118
- get isFullBytes() {
119
- return this.bytesUsed >= this.maxBytes;
120
- }
121
- /**
122
- * Iterate over items (does not remove them)
123
- */
124
- *[Symbol.iterator]() {
125
- yield* this.items;
126
- }
127
- /**
128
- * Get all items as array (for iteration/reduce operations)
129
- */
130
- toArray() {
131
- return [...this.items];
132
- }
133
- }
134
- //# sourceMappingURL=boundedQueue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boundedQueue.js","sourceRoot":"","sources":["../../src/p2p/boundedQueue.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Extract error message from unknown error type
3
- */
4
- export declare function getErrorMessage(err: unknown): string;
5
- //# sourceMappingURL=errorMessage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorMessage.d.ts","sourceRoot":"","sources":["../../src/p2p/errorMessage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Extract error message from unknown error type
3
- */
4
- export function getErrorMessage(err) {
5
- return err instanceof Error ? err.message : String(err);
6
- }
7
- //# sourceMappingURL=errorMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorMessage.js","sourceRoot":"","sources":["../../src/p2p/errorMessage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,8 +0,0 @@
1
- export { WebRTCController, type WebRTCControllerConfig, } from './webrtcController.js';
2
- export { MeshQueryRouter, encodeForwardRequest, type MeshQueryRouterConfig, type MeshQueryRouterPeer, } from './meshQueryRouter.js';
3
- export { QueryForwardingMachine, type QueryForwardingMachineConfig, type ForwardDecision, type ForwardTimeoutEvent, } from './queryForwardingMachine.js';
4
- export { WebRTCProxy, initWebRTCProxy, getWebRTCProxy, closeWebRTCProxy, } from './webrtcProxy.js';
5
- export type { WebRTCCommand, WebRTCEvent, } from './protocol.js';
6
- export { SIGNALING_KIND, HELLO_TAG, MAX_EVENT_AGE_SEC, createSignalingFilters, sendSignalingMessage, decodeSignalingEvent, } from './signaling.js';
7
- export type { SignalingEventLike, GiftSeal, SignalingTemplate, SignalingInnerEvent, SignalingFilters, DecodedSignalingEvent, } from './signaling.js';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC"}
package/dist/p2p/index.js DELETED
@@ -1,6 +0,0 @@
1
- export { WebRTCController, } from './webrtcController.js';
2
- export { MeshQueryRouter, encodeForwardRequest, } from './meshQueryRouter.js';
3
- export { QueryForwardingMachine, } from './queryForwardingMachine.js';
4
- export { WebRTCProxy, initWebRTCProxy, getWebRTCProxy, closeWebRTCProxy, } from './webrtcProxy.js';
5
- export { SIGNALING_KIND, HELLO_TAG, MAX_EVENT_AGE_SEC, createSignalingFilters, sendSignalingMessage, decodeSignalingEvent, } from './signaling.js';
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,oBAAoB,GAGrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,GAIvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Simple LRU Cache implementation
3
- */
4
- export declare class LRUCache<K, V> {
5
- private cache;
6
- private maxSize;
7
- constructor(maxSize?: number);
8
- get(key: K): V | undefined;
9
- set(key: K, value: V): void;
10
- has(key: K): boolean;
11
- delete(key: K): boolean;
12
- clear(): void;
13
- get size(): number;
14
- keys(): IterableIterator<K>;
15
- values(): IterableIterator<V>;
16
- /**
17
- * Iterate over all entries (note: does not update LRU order)
18
- */
19
- entries(): IterableIterator<[K, V]>;
20
- forEach(callback: (value: V, key: K) => void): void;
21
- /**
22
- * Make the cache iterable
23
- */
24
- [Symbol.iterator](): IterableIterator<[K, V]>;
25
- }
26
- //# sourceMappingURL=lruCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lruCache.d.ts","sourceRoot":"","sources":["../../src/p2p/lruCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAY;IAIjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAU1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI3B,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI7B;;OAEG;IACF,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIpC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAInD;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAG9C"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Simple LRU Cache implementation
3
- */
4
- export class LRUCache {
5
- cache = new Map();
6
- maxSize;
7
- constructor(maxSize = 100) {
8
- this.maxSize = maxSize;
9
- }
10
- get(key) {
11
- const value = this.cache.get(key);
12
- if (value !== undefined) {
13
- // Move to end (most recently used)
14
- this.cache.delete(key);
15
- this.cache.set(key, value);
16
- }
17
- return value;
18
- }
19
- set(key, value) {
20
- // Delete first to reset position if exists
21
- this.cache.delete(key);
22
- // Evict oldest if at capacity
23
- if (this.cache.size >= this.maxSize) {
24
- const oldest = this.cache.keys().next().value;
25
- if (oldest !== undefined) {
26
- this.cache.delete(oldest);
27
- }
28
- }
29
- this.cache.set(key, value);
30
- }
31
- has(key) {
32
- return this.cache.has(key);
33
- }
34
- delete(key) {
35
- return this.cache.delete(key);
36
- }
37
- clear() {
38
- this.cache.clear();
39
- }
40
- get size() {
41
- return this.cache.size;
42
- }
43
- keys() {
44
- return this.cache.keys();
45
- }
46
- values() {
47
- return this.cache.values();
48
- }
49
- /**
50
- * Iterate over all entries (note: does not update LRU order)
51
- */
52
- *entries() {
53
- yield* this.cache.entries();
54
- }
55
- forEach(callback) {
56
- this.cache.forEach(callback);
57
- }
58
- /**
59
- * Make the cache iterable
60
- */
61
- [Symbol.iterator]() {
62
- return this.entries();
63
- }
64
- }
65
- //# sourceMappingURL=lruCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lruCache.js","sourceRoot":"","sources":["../../src/p2p/lruCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACX,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IACxB,OAAO,CAAS;IAExB,YAAY,UAAkB,GAAG;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,2CAA2C;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,CAAC,OAAO;QACN,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,QAAoC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -1,44 +0,0 @@
1
- import type { Store } from '@hashtree/core';
2
- import { type DataRequest, type PeerHTLConfig } from '@hashtree/nostr';
3
- export interface MeshQueryRouterPeer {
4
- peerId: string;
5
- canSend: () => boolean;
6
- getHtlConfig: () => PeerHTLConfig;
7
- sendRequest: (hash: Uint8Array, htl: number) => boolean;
8
- sendResponse: (hash: Uint8Array, data: Uint8Array) => Promise<void>;
9
- onForwardedRequest?: () => void;
10
- onForwardedResolved?: () => void;
11
- onForwardedSuppressed?: () => void;
12
- }
13
- export interface MeshQueryRouterConfig {
14
- localStore: Store;
15
- requestTimeoutMs: number;
16
- upstreamFetch?: (hash: Uint8Array) => Promise<Uint8Array | null>;
17
- maxForwardsPerPeerWindow?: number;
18
- forwardRateLimitWindowMs?: number;
19
- }
20
- export declare class MeshQueryRouter {
21
- private readonly localStore;
22
- private readonly requestTimeoutMs;
23
- private readonly rateLimiter;
24
- private readonly peers;
25
- private readonly hashesByRequester;
26
- private readonly inFlightByHash;
27
- private readonly pendingUpstreamFetches;
28
- private upstreamFetch?;
29
- constructor(config: MeshQueryRouterConfig);
30
- registerPeer(peer: MeshQueryRouterPeer): void;
31
- removePeer(peerId: string): void;
32
- setUpstreamFetch(upstreamFetch?: (hash: Uint8Array) => Promise<Uint8Array | null>): void;
33
- hasInFlight(hashKey: string): boolean;
34
- stop(): void;
35
- handleRequest(requesterId: string, req: DataRequest): Promise<void>;
36
- resolve(hash: Uint8Array, data: Uint8Array): Promise<void>;
37
- private beginQuery;
38
- private clearQuery;
39
- private trackRequester;
40
- private forwardRequest;
41
- private startUpstreamFetch;
42
- }
43
- export declare function encodeForwardRequest(hash: Uint8Array, htl: number): Uint8Array;
44
- //# sourceMappingURL=meshQueryRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meshQueryRouter.d.ts","sourceRoot":"","sources":["../../src/p2p/meshQueryRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAQL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,aAAa,CAAC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,KAAK,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AA+CD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiD;IACxF,OAAO,CAAC,aAAa,CAAC,CAAmD;gBAE7D,MAAM,EAAE,qBAAqB;IAUzC,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAI7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBhC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI;IAIxF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIrC,IAAI,IAAI,IAAI;IASN,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhE,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,kBAAkB;CAmC3B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAE9E"}
@@ -1,228 +0,0 @@
1
- import { MAX_HTL, createRequest, decrementHTL, encodeRequest, hashToKey, shouldForward, verifyHash, } from '@hashtree/nostr';
2
- class SlidingWindowRateLimiter {
3
- maxEvents;
4
- windowMs;
5
- eventsByPeer = new Map();
6
- constructor(maxEvents, windowMs) {
7
- this.maxEvents = maxEvents;
8
- this.windowMs = windowMs;
9
- }
10
- allow(peerId) {
11
- const now = Date.now();
12
- const events = this.eventsByPeer.get(peerId) ?? [];
13
- let firstActiveIndex = 0;
14
- while (firstActiveIndex < events.length && now - events[firstActiveIndex] >= this.windowMs) {
15
- firstActiveIndex += 1;
16
- }
17
- if (firstActiveIndex > 0) {
18
- events.splice(0, firstActiveIndex);
19
- }
20
- if (events.length >= this.maxEvents) {
21
- this.eventsByPeer.set(peerId, events);
22
- return false;
23
- }
24
- events.push(now);
25
- this.eventsByPeer.set(peerId, events);
26
- return true;
27
- }
28
- resetPeer(peerId) {
29
- this.eventsByPeer.delete(peerId);
30
- }
31
- clear() {
32
- this.eventsByPeer.clear();
33
- }
34
- }
35
- export class MeshQueryRouter {
36
- localStore;
37
- requestTimeoutMs;
38
- rateLimiter;
39
- peers = new Map();
40
- hashesByRequester = new Map();
41
- inFlightByHash = new Map();
42
- pendingUpstreamFetches = new Map();
43
- upstreamFetch;
44
- constructor(config) {
45
- this.localStore = config.localStore;
46
- this.requestTimeoutMs = config.requestTimeoutMs;
47
- this.upstreamFetch = config.upstreamFetch;
48
- this.rateLimiter = new SlidingWindowRateLimiter(config.maxForwardsPerPeerWindow ?? 64, config.forwardRateLimitWindowMs ?? 1000);
49
- }
50
- registerPeer(peer) {
51
- this.peers.set(peer.peerId, peer);
52
- }
53
- removePeer(peerId) {
54
- const hashes = this.hashesByRequester.get(peerId);
55
- if (hashes) {
56
- for (const hashKey of Array.from(hashes)) {
57
- const inFlight = this.inFlightByHash.get(hashKey);
58
- if (!inFlight)
59
- continue;
60
- inFlight.requesterIds.delete(peerId);
61
- if (inFlight.requesterIds.size === 0) {
62
- this.clearQuery(hashKey);
63
- }
64
- }
65
- }
66
- this.hashesByRequester.delete(peerId);
67
- this.peers.delete(peerId);
68
- this.rateLimiter.resetPeer(peerId);
69
- }
70
- setUpstreamFetch(upstreamFetch) {
71
- this.upstreamFetch = upstreamFetch;
72
- }
73
- hasInFlight(hashKey) {
74
- return this.inFlightByHash.has(hashKey);
75
- }
76
- stop() {
77
- for (const hashKey of Array.from(this.inFlightByHash.keys())) {
78
- this.clearQuery(hashKey);
79
- }
80
- this.hashesByRequester.clear();
81
- this.pendingUpstreamFetches.clear();
82
- this.rateLimiter.clear();
83
- }
84
- async handleRequest(requesterId, req) {
85
- const hashKey = hashToKey(req.h);
86
- const requester = this.peers.get(requesterId);
87
- if (!requester) {
88
- return;
89
- }
90
- const local = await this.localStore.get(req.h);
91
- if (local) {
92
- await requester.sendResponse(req.h, local);
93
- return;
94
- }
95
- const begin = this.beginQuery(hashKey, requesterId);
96
- if (begin === 'suppressed') {
97
- requester.onForwardedSuppressed?.();
98
- return;
99
- }
100
- if (begin === 'rate_limited') {
101
- return;
102
- }
103
- const upstreamActive = this.startUpstreamFetch(hashKey, req.h);
104
- const forwarded = this.forwardRequest(requesterId, req.h, req.htl ?? MAX_HTL);
105
- if (forwarded > 0) {
106
- requester.onForwardedRequest?.();
107
- return;
108
- }
109
- if (!upstreamActive) {
110
- this.clearQuery(hashKey);
111
- }
112
- }
113
- async resolve(hash, data) {
114
- const hashKey = hashToKey(hash);
115
- const requesterIds = this.clearQuery(hashKey);
116
- if (requesterIds.length === 0) {
117
- return;
118
- }
119
- await this.localStore.put(hash, data).catch(() => false);
120
- for (const requesterId of requesterIds) {
121
- const requester = this.peers.get(requesterId);
122
- if (!requester) {
123
- continue;
124
- }
125
- requester.onForwardedResolved?.();
126
- await requester.sendResponse(hash, data);
127
- }
128
- }
129
- beginQuery(hashKey, requesterId) {
130
- const existing = this.inFlightByHash.get(hashKey);
131
- if (existing) {
132
- this.trackRequester(hashKey, existing.requesterIds, requesterId);
133
- return 'suppressed';
134
- }
135
- if (!this.rateLimiter.allow(requesterId)) {
136
- return 'rate_limited';
137
- }
138
- const requesterIds = new Set();
139
- this.trackRequester(hashKey, requesterIds, requesterId);
140
- const timeoutId = setTimeout(() => {
141
- this.clearQuery(hashKey);
142
- }, this.requestTimeoutMs);
143
- this.inFlightByHash.set(hashKey, { requesterIds, timeoutId });
144
- return 'new';
145
- }
146
- clearQuery(hashKey) {
147
- const inFlight = this.inFlightByHash.get(hashKey);
148
- if (!inFlight) {
149
- return [];
150
- }
151
- clearTimeout(inFlight.timeoutId);
152
- this.inFlightByHash.delete(hashKey);
153
- const requesterIds = Array.from(inFlight.requesterIds);
154
- for (const requesterId of requesterIds) {
155
- const hashes = this.hashesByRequester.get(requesterId);
156
- if (!hashes)
157
- continue;
158
- hashes.delete(hashKey);
159
- if (hashes.size === 0) {
160
- this.hashesByRequester.delete(requesterId);
161
- }
162
- }
163
- return requesterIds;
164
- }
165
- trackRequester(hashKey, requesterIds, requesterId) {
166
- requesterIds.add(requesterId);
167
- let hashes = this.hashesByRequester.get(requesterId);
168
- if (!hashes) {
169
- hashes = new Set();
170
- this.hashesByRequester.set(requesterId, hashes);
171
- }
172
- hashes.add(hashKey);
173
- }
174
- forwardRequest(requesterId, hash, htl) {
175
- if (!shouldForward(htl)) {
176
- return 0;
177
- }
178
- const requester = this.peers.get(requesterId);
179
- if (!requester) {
180
- return 0;
181
- }
182
- const nextHtl = decrementHTL(htl, requester.getHtlConfig());
183
- let forwarded = 0;
184
- for (const peer of this.peers.values()) {
185
- if (peer.peerId === requesterId || !peer.canSend()) {
186
- continue;
187
- }
188
- if (peer.sendRequest(hash, nextHtl)) {
189
- forwarded += 1;
190
- }
191
- }
192
- return forwarded;
193
- }
194
- startUpstreamFetch(hashKey, hash) {
195
- if (!this.upstreamFetch) {
196
- return false;
197
- }
198
- const existing = this.pendingUpstreamFetches.get(hashKey);
199
- if (existing) {
200
- return true;
201
- }
202
- let pending;
203
- pending = this.upstreamFetch(hash)
204
- .then(async (data) => {
205
- if (!data) {
206
- return null;
207
- }
208
- const valid = await verifyHash(data, hash);
209
- if (!valid) {
210
- return null;
211
- }
212
- await this.resolve(hash, data);
213
- return data;
214
- })
215
- .catch(() => null)
216
- .finally(() => {
217
- if (this.pendingUpstreamFetches.get(hashKey) === pending) {
218
- this.pendingUpstreamFetches.delete(hashKey);
219
- }
220
- });
221
- this.pendingUpstreamFetches.set(hashKey, pending);
222
- return true;
223
- }
224
- }
225
- export function encodeForwardRequest(hash, htl) {
226
- return new Uint8Array(encodeRequest(createRequest(hash, htl)));
227
- }
228
- //# sourceMappingURL=meshQueryRouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meshQueryRouter.js","sourceRoot":"","sources":["../../src/p2p/meshQueryRouter.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { WebRTCCommand as CoreWebRTCCommand, WebRTCEvent as CoreWebRTCEvent } from '@hashtree/core';
2
- export type WebRTCCommand = CoreWebRTCCommand;
3
- export type WebRTCEvent = CoreWebRTCEvent | {
4
- type: 'rtc:bufferHigh';
5
- peerId: string;
6
- } | {
7
- type: 'rtc:bufferLow';
8
- peerId: string;
9
- };
10
- //# sourceMappingURL=protocol.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/p2p/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAClC,WAAW,IAAI,eAAe,EAC/B,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C,MAAM,MAAM,WAAW,GACnB,eAAe,GACf;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/p2p/protocol.ts"],"names":[],"mappings":""}
@@ -1,46 +0,0 @@
1
- type TimeoutHandle = ReturnType<typeof setTimeout>;
2
- export interface ForwardTimeoutEvent {
3
- hashKey: string;
4
- requesterIds: string[];
5
- }
6
- export type ForwardDecision = {
7
- kind: 'forward';
8
- targets: string[];
9
- } | {
10
- kind: 'suppressed';
11
- } | {
12
- kind: 'rate_limited';
13
- } | {
14
- kind: 'no_targets';
15
- };
16
- export interface QueryForwardingMachineConfig {
17
- requestTimeoutMs: number;
18
- maxForwardsPerPeerWindow?: number;
19
- forwardRateLimitWindowMs?: number;
20
- now?: () => number;
21
- scheduleTimeout?: (callback: () => void, delayMs: number) => TimeoutHandle;
22
- clearScheduledTimeout?: (timeoutId: TimeoutHandle) => void;
23
- onForwardTimeout?: (event: ForwardTimeoutEvent) => void;
24
- }
25
- export declare class QueryForwardingMachine {
26
- private readonly requestTimeoutMs;
27
- private readonly scheduleTimeout;
28
- private readonly clearScheduledTimeout;
29
- private readonly onForwardTimeout?;
30
- private readonly hashesByRequester;
31
- private readonly inFlightByHash;
32
- private readonly rateLimiter;
33
- constructor(config: QueryForwardingMachineConfig);
34
- beginForward(hashKey: string, requesterId: string, candidateTargets: string[]): ForwardDecision;
35
- resolveForward(hashKey: string): string[];
36
- cancelForward(hashKey: string): string[];
37
- removePeer(peerId: string): void;
38
- stop(): void;
39
- isInFlight(hashKey: string): boolean;
40
- getInFlightCount(): number;
41
- private handleForwardTimeout;
42
- private clearForward;
43
- private trackRequester;
44
- }
45
- export {};
46
- //# sourceMappingURL=queryForwardingMachine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryForwardingMachine.d.ts","sourceRoot":"","sources":["../../src/p2p/queryForwardingMachine.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD;AAiDD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2D;IAC3F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqC;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;gBAE3C,MAAM,EAAE,4BAA4B;IAYhD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,eAAe;IA0B/F,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIzC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIxC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBhC,IAAI,IAAI,IAAI;IAQZ,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpC,gBAAgB,IAAI,MAAM;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,cAAc;CASvB"}