@hashtree/worker 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/app-runtime.d.ts +60 -0
  2. package/dist/app-runtime.d.ts.map +1 -0
  3. package/dist/app-runtime.js +271 -0
  4. package/dist/app-runtime.js.map +1 -0
  5. package/dist/capabilities/blossomBandwidthTracker.d.ts +26 -0
  6. package/dist/capabilities/blossomBandwidthTracker.d.ts.map +1 -0
  7. package/dist/capabilities/blossomBandwidthTracker.js +53 -0
  8. package/dist/capabilities/blossomBandwidthTracker.js.map +1 -0
  9. package/dist/capabilities/blossomTransport.d.ts +22 -0
  10. package/dist/capabilities/blossomTransport.d.ts.map +1 -0
  11. package/dist/capabilities/blossomTransport.js +139 -0
  12. package/dist/capabilities/blossomTransport.js.map +1 -0
  13. package/dist/capabilities/connectivity.d.ts +3 -0
  14. package/dist/capabilities/connectivity.d.ts.map +1 -0
  15. package/dist/capabilities/connectivity.js +49 -0
  16. package/dist/capabilities/connectivity.js.map +1 -0
  17. package/dist/capabilities/idbStorage.d.ts +25 -0
  18. package/dist/capabilities/idbStorage.d.ts.map +1 -0
  19. package/dist/capabilities/idbStorage.js +73 -0
  20. package/dist/capabilities/idbStorage.js.map +1 -0
  21. package/dist/capabilities/meshRouterStore.d.ts +71 -0
  22. package/dist/capabilities/meshRouterStore.d.ts.map +1 -0
  23. package/dist/capabilities/meshRouterStore.js +316 -0
  24. package/dist/capabilities/meshRouterStore.js.map +1 -0
  25. package/dist/capabilities/rootResolver.d.ts +10 -0
  26. package/dist/capabilities/rootResolver.d.ts.map +1 -0
  27. package/dist/capabilities/rootResolver.js +392 -0
  28. package/dist/capabilities/rootResolver.js.map +1 -0
  29. package/dist/client-id.d.ts +18 -0
  30. package/dist/client-id.d.ts.map +1 -0
  31. package/dist/client-id.js +98 -0
  32. package/dist/client-id.js.map +1 -0
  33. package/dist/client.d.ts +61 -0
  34. package/dist/client.d.ts.map +1 -0
  35. package/dist/client.js +417 -0
  36. package/dist/client.js.map +1 -0
  37. package/dist/entry.d.ts +2 -0
  38. package/dist/entry.d.ts.map +1 -0
  39. package/dist/entry.js +3 -0
  40. package/dist/entry.js.map +1 -0
  41. package/dist/htree-path.d.ts +13 -0
  42. package/dist/htree-path.d.ts.map +1 -0
  43. package/dist/htree-path.js +38 -0
  44. package/dist/htree-path.js.map +1 -0
  45. package/dist/htree-url.d.ts +22 -0
  46. package/dist/htree-url.d.ts.map +1 -0
  47. package/dist/htree-url.js +118 -0
  48. package/dist/htree-url.js.map +1 -0
  49. package/dist/index.d.ts +17 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +8 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/mediaStreaming.d.ts +7 -0
  54. package/dist/mediaStreaming.d.ts.map +1 -0
  55. package/dist/mediaStreaming.js +48 -0
  56. package/dist/mediaStreaming.js.map +1 -0
  57. package/dist/p2p/boundedQueue.d.ts +79 -0
  58. package/dist/p2p/boundedQueue.d.ts.map +1 -0
  59. package/dist/p2p/boundedQueue.js +134 -0
  60. package/dist/p2p/boundedQueue.js.map +1 -0
  61. package/dist/p2p/errorMessage.d.ts +5 -0
  62. package/dist/p2p/errorMessage.d.ts.map +1 -0
  63. package/dist/p2p/errorMessage.js +7 -0
  64. package/dist/p2p/errorMessage.js.map +1 -0
  65. package/dist/p2p/index.d.ts +8 -0
  66. package/dist/p2p/index.d.ts.map +1 -0
  67. package/dist/p2p/index.js +6 -0
  68. package/dist/p2p/index.js.map +1 -0
  69. package/dist/p2p/lruCache.d.ts +26 -0
  70. package/dist/p2p/lruCache.d.ts.map +1 -0
  71. package/dist/p2p/lruCache.js +65 -0
  72. package/dist/p2p/lruCache.js.map +1 -0
  73. package/dist/p2p/meshQueryRouter.d.ts +57 -0
  74. package/dist/p2p/meshQueryRouter.d.ts.map +1 -0
  75. package/dist/p2p/meshQueryRouter.js +264 -0
  76. package/dist/p2p/meshQueryRouter.js.map +1 -0
  77. package/dist/p2p/protocol.d.ts +10 -0
  78. package/dist/p2p/protocol.d.ts.map +1 -0
  79. package/dist/p2p/protocol.js +2 -0
  80. package/dist/p2p/protocol.js.map +1 -0
  81. package/dist/p2p/queryForwardingMachine.d.ts +46 -0
  82. package/dist/p2p/queryForwardingMachine.d.ts.map +1 -0
  83. package/dist/p2p/queryForwardingMachine.js +144 -0
  84. package/dist/p2p/queryForwardingMachine.js.map +1 -0
  85. package/dist/p2p/signaling.d.ts +63 -0
  86. package/dist/p2p/signaling.d.ts.map +1 -0
  87. package/dist/p2p/signaling.js +185 -0
  88. package/dist/p2p/signaling.js.map +1 -0
  89. package/dist/p2p/uploadRateLimiter.d.ts +21 -0
  90. package/dist/p2p/uploadRateLimiter.d.ts.map +1 -0
  91. package/dist/p2p/uploadRateLimiter.js +62 -0
  92. package/dist/p2p/uploadRateLimiter.js.map +1 -0
  93. package/dist/p2p/webrtcController.d.ts +176 -0
  94. package/dist/p2p/webrtcController.d.ts.map +1 -0
  95. package/dist/p2p/webrtcController.js +938 -0
  96. package/dist/p2p/webrtcController.js.map +1 -0
  97. package/dist/p2p/webrtcProxy.d.ts +62 -0
  98. package/dist/p2p/webrtcProxy.d.ts.map +1 -0
  99. package/dist/p2p/webrtcProxy.js +447 -0
  100. package/dist/p2p/webrtcProxy.js.map +1 -0
  101. package/dist/privacyGuards.d.ts +14 -0
  102. package/dist/privacyGuards.d.ts.map +1 -0
  103. package/dist/privacyGuards.js +27 -0
  104. package/dist/privacyGuards.js.map +1 -0
  105. package/dist/protocol.d.ts +225 -0
  106. package/dist/protocol.d.ts.map +1 -0
  107. package/dist/protocol.js +2 -0
  108. package/dist/protocol.js.map +1 -0
  109. package/dist/relay/identity.d.ts +36 -0
  110. package/dist/relay/identity.d.ts.map +1 -0
  111. package/dist/relay/identity.js +78 -0
  112. package/dist/relay/identity.js.map +1 -0
  113. package/dist/relay/mediaHandler.d.ts +64 -0
  114. package/dist/relay/mediaHandler.d.ts.map +1 -0
  115. package/dist/relay/mediaHandler.js +1285 -0
  116. package/dist/relay/mediaHandler.js.map +1 -0
  117. package/dist/relay/ndk.d.ts +96 -0
  118. package/dist/relay/ndk.d.ts.map +1 -0
  119. package/dist/relay/ndk.js +502 -0
  120. package/dist/relay/ndk.js.map +1 -0
  121. package/dist/relay/nostr-wasm.d.ts +14 -0
  122. package/dist/relay/nostr-wasm.d.ts.map +1 -0
  123. package/dist/relay/nostr-wasm.js +246 -0
  124. package/dist/relay/nostr-wasm.js.map +1 -0
  125. package/dist/relay/nostr.d.ts +60 -0
  126. package/dist/relay/nostr.d.ts.map +1 -0
  127. package/dist/relay/nostr.js +207 -0
  128. package/dist/relay/nostr.js.map +1 -0
  129. package/dist/relay/protocol.d.ts +592 -0
  130. package/dist/relay/protocol.d.ts.map +1 -0
  131. package/dist/relay/protocol.js +16 -0
  132. package/dist/relay/protocol.js.map +1 -0
  133. package/dist/relay/publicAssetUrl.d.ts +6 -0
  134. package/dist/relay/publicAssetUrl.d.ts.map +1 -0
  135. package/dist/relay/publicAssetUrl.js +14 -0
  136. package/dist/relay/publicAssetUrl.js.map +1 -0
  137. package/dist/relay/rootPathResolver.d.ts +9 -0
  138. package/dist/relay/rootPathResolver.d.ts.map +1 -0
  139. package/dist/relay/rootPathResolver.js +32 -0
  140. package/dist/relay/rootPathResolver.js.map +1 -0
  141. package/dist/relay/signing.d.ts +50 -0
  142. package/dist/relay/signing.d.ts.map +1 -0
  143. package/dist/relay/signing.js +299 -0
  144. package/dist/relay/signing.js.map +1 -0
  145. package/dist/relay/treeRootCache.d.ts +86 -0
  146. package/dist/relay/treeRootCache.d.ts.map +1 -0
  147. package/dist/relay/treeRootCache.js +269 -0
  148. package/dist/relay/treeRootCache.js.map +1 -0
  149. package/dist/relay/treeRootSubscription.d.ts +55 -0
  150. package/dist/relay/treeRootSubscription.d.ts.map +1 -0
  151. package/dist/relay/treeRootSubscription.js +478 -0
  152. package/dist/relay/treeRootSubscription.js.map +1 -0
  153. package/dist/relay/utils/constants.d.ts +76 -0
  154. package/dist/relay/utils/constants.d.ts.map +1 -0
  155. package/dist/relay/utils/constants.js +113 -0
  156. package/dist/relay/utils/constants.js.map +1 -0
  157. package/dist/relay/utils/errorMessage.d.ts +5 -0
  158. package/dist/relay/utils/errorMessage.d.ts.map +1 -0
  159. package/dist/relay/utils/errorMessage.js +8 -0
  160. package/dist/relay/utils/errorMessage.js.map +1 -0
  161. package/dist/relay/utils/lruCache.d.ts +26 -0
  162. package/dist/relay/utils/lruCache.d.ts.map +1 -0
  163. package/dist/relay/utils/lruCache.js +66 -0
  164. package/dist/relay/utils/lruCache.js.map +1 -0
  165. package/dist/relay/webrtc.d.ts +2 -0
  166. package/dist/relay/webrtc.d.ts.map +1 -0
  167. package/dist/relay/webrtc.js +3 -0
  168. package/dist/relay/webrtc.js.map +1 -0
  169. package/dist/relay/webrtcSignaling.d.ts +37 -0
  170. package/dist/relay/webrtcSignaling.d.ts.map +1 -0
  171. package/dist/relay/webrtcSignaling.js +86 -0
  172. package/dist/relay/webrtcSignaling.js.map +1 -0
  173. package/dist/relay/worker.d.ts +12 -0
  174. package/dist/relay/worker.d.ts.map +1 -0
  175. package/dist/relay/worker.js +1540 -0
  176. package/dist/relay/worker.js.map +1 -0
  177. package/dist/relay-client.d.ts +31 -0
  178. package/dist/relay-client.d.ts.map +1 -0
  179. package/dist/relay-client.js +197 -0
  180. package/dist/relay-client.js.map +1 -0
  181. package/dist/relay-entry.d.ts +2 -0
  182. package/dist/relay-entry.d.ts.map +1 -0
  183. package/dist/relay-entry.js +2 -0
  184. package/dist/relay-entry.js.map +1 -0
  185. package/dist/runtime-network.d.ts +23 -0
  186. package/dist/runtime-network.d.ts.map +1 -0
  187. package/dist/runtime-network.js +105 -0
  188. package/dist/runtime-network.js.map +1 -0
  189. package/dist/runtime.d.ts +24 -0
  190. package/dist/runtime.d.ts.map +1 -0
  191. package/dist/runtime.js +126 -0
  192. package/dist/runtime.js.map +1 -0
  193. package/dist/transferableBytes.d.ts +2 -0
  194. package/dist/transferableBytes.d.ts.map +1 -0
  195. package/dist/transferableBytes.js +6 -0
  196. package/dist/transferableBytes.js.map +1 -0
  197. package/dist/tree-root.d.ts +201 -0
  198. package/dist/tree-root.d.ts.map +1 -0
  199. package/dist/tree-root.js +632 -0
  200. package/dist/tree-root.js.map +1 -0
  201. package/dist/types.d.ts +2 -0
  202. package/dist/types.d.ts.map +1 -0
  203. package/dist/types.js +2 -0
  204. package/dist/types.js.map +1 -0
  205. package/dist/worker.d.ts +9 -0
  206. package/dist/worker.d.ts.map +1 -0
  207. package/dist/worker.js +792 -0
  208. package/dist/worker.js.map +1 -0
  209. package/package.json +1 -1
@@ -0,0 +1,126 @@
1
+ function getWindowLike(windowLike) {
2
+ if (windowLike)
3
+ return windowLike;
4
+ if (typeof window === 'undefined')
5
+ return null;
6
+ return window;
7
+ }
8
+ function normalizeBaseUrl(url) {
9
+ return (url ?? '').trim().replace(/\/$/, '');
10
+ }
11
+ function getQueryParam(name, windowLike) {
12
+ const runtimeWindow = getWindowLike(windowLike);
13
+ if (!runtimeWindow)
14
+ return null;
15
+ try {
16
+ const value = new URLSearchParams(runtimeWindow.location?.search ?? '').get(name);
17
+ return typeof value === 'string' ? value.trim() || null : null;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function getPageProtocol(windowLike) {
24
+ const runtimeWindow = getWindowLike(windowLike);
25
+ const protocol = runtimeWindow?.location?.protocol;
26
+ return typeof protocol === 'string' ? protocol.toLowerCase() : null;
27
+ }
28
+ function getPageHostname(windowLike) {
29
+ const runtimeWindow = getWindowLike(windowLike);
30
+ const hostname = runtimeWindow?.location?.hostname;
31
+ return typeof hostname === 'string' ? hostname.toLowerCase() : null;
32
+ }
33
+ function hasCanonicalHtreeIdentity(windowLike) {
34
+ const runtimeWindow = getWindowLike(windowLike);
35
+ const injectedCanonical = runtimeWindow?.__HTREE_CANONICAL_URL__;
36
+ const canonical = typeof injectedCanonical === 'string' && injectedCanonical.trim()
37
+ ? injectedCanonical.trim()
38
+ : getQueryParam('htree_canonical', windowLike);
39
+ return typeof canonical === 'string' && canonical.toLowerCase().startsWith('htree://');
40
+ }
41
+ function isLoopbackChildRuntime(windowLike) {
42
+ if (getPageProtocol(windowLike) !== 'http:')
43
+ return false;
44
+ const hostname = getPageHostname(windowLike);
45
+ if (!hostname)
46
+ return false;
47
+ return hostname === '127.0.0.1'
48
+ || hostname === 'localhost'
49
+ || hostname.endsWith('.htree.localhost');
50
+ }
51
+ function getServerProtocol(serverUrl) {
52
+ try {
53
+ return new URL(serverUrl).protocol.toLowerCase();
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
59
+ function isLocalHttpServerUrl(serverUrl) {
60
+ try {
61
+ const parsed = new URL(serverUrl);
62
+ const hostname = parsed.hostname.toLowerCase();
63
+ return (parsed.protocol === 'http:' || parsed.protocol === 'https:')
64
+ && (hostname === '127.0.0.1' || hostname === 'localhost' || hostname.endsWith('.htree.localhost'));
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ function getWindowHtreeBaseUrl(windowLike) {
71
+ const runtimeWindow = getWindowLike(windowLike);
72
+ return normalizeBaseUrl(runtimeWindow?.htree?.htreeBaseUrl);
73
+ }
74
+ export function getInjectedHtreeServerUrl(windowLike) {
75
+ const runtimeWindow = getWindowLike(windowLike);
76
+ if (!runtimeWindow)
77
+ return null;
78
+ const override = runtimeWindow.__HTREE_SERVER_URL__;
79
+ const fallback = getQueryParam('htree_server', runtimeWindow);
80
+ const candidate = typeof override === 'string' && override.trim() ? override : fallback;
81
+ const normalized = normalizeBaseUrl(candidate);
82
+ return normalized || null;
83
+ }
84
+ export function shouldEagerLoadMediaInNativeChildRuntime(windowLike) {
85
+ return isLoopbackChildRuntime(windowLike) && hasCanonicalHtreeIdentity(windowLike);
86
+ }
87
+ export function shouldPreferSameOriginHtreeRoutes(windowLike) {
88
+ const serverUrl = getInjectedHtreeServerUrl(windowLike);
89
+ if (!serverUrl)
90
+ return false;
91
+ const serverProtocol = getServerProtocol(serverUrl);
92
+ if (serverProtocol !== 'http:')
93
+ return false;
94
+ const pageProtocol = getPageProtocol(windowLike);
95
+ if (pageProtocol === 'https:')
96
+ return true;
97
+ if (pageProtocol === 'htree:') {
98
+ const hostname = getPageHostname(windowLike);
99
+ return hostname?.startsWith('npub1') === true || hostname === 'self';
100
+ }
101
+ if (hasCanonicalHtreeIdentity(windowLike) && !isLoopbackChildRuntime(windowLike))
102
+ return true;
103
+ return false;
104
+ }
105
+ export function canUseInjectedHtreeServerUrl(windowLike) {
106
+ const serverUrl = getInjectedHtreeServerUrl(windowLike);
107
+ return !!serverUrl && !shouldPreferSameOriginHtreeRoutes(windowLike);
108
+ }
109
+ export function canUseSameOriginHtreeProtocolStreaming(windowLike) {
110
+ return getPageProtocol(windowLike) === 'htree:';
111
+ }
112
+ export function resolveRuntimeHtreeBaseUrl(options = {}) {
113
+ const { windowLike, fallbackBaseUrl } = options;
114
+ const injectedServerUrl = getInjectedHtreeServerUrl(windowLike);
115
+ if (injectedServerUrl && canUseInjectedHtreeServerUrl(windowLike)) {
116
+ return injectedServerUrl;
117
+ }
118
+ const windowBaseUrl = getWindowHtreeBaseUrl(windowLike);
119
+ if (windowBaseUrl) {
120
+ if (!isLocalHttpServerUrl(windowBaseUrl) || canUseInjectedHtreeServerUrl(windowLike)) {
121
+ return windowBaseUrl;
122
+ }
123
+ }
124
+ return normalizeBaseUrl(fallbackBaseUrl);
125
+ }
126
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAoBA,SAAS,aAAa,CAAC,UAAmC;IACxD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,MAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,GAA8B;IACtD,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,UAAmC;IACtE,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,UAAmC;IAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACnD,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,SAAS,eAAe,CAAC,UAAmC;IAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACnD,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,SAAS,yBAAyB,CAAC,UAAmC;IACpE,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,aAAa,EAAE,uBAAuB,CAAC;IACjE,MAAM,SAAS,GAAG,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,EAAE;QACjF,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAC1B,CAAC,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACjD,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAmC;IACjE,IAAI,eAAe,CAAC,UAAU,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,QAAQ,KAAK,WAAW;WAC1B,QAAQ,KAAK,WAAW;WACxB,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;eAC/D,CAAC,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAmC;IAChE,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAmC;IAC3E,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,oBAAoB,CAAC;IACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxF,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,UAAU,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,UAAmC;IAC1F,OAAO,sBAAsB,CAAC,UAAU,CAAC,IAAI,yBAAyB,CAAC,UAAU,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,UAAmC;IACnF,MAAM,SAAS,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,cAAc,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,YAAY,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC;IACvE,CAAC;IACD,IAAI,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAmC;IAC9E,MAAM,SAAS,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,UAAmC;IACxF,OAAO,eAAe,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAA6C,EAAE;IAE/C,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAEhE,IAAI,iBAAiB,IAAI,4BAA4B,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,4BAA4B,CAAC,UAAU,CAAC,EAAE,CAAC;YACrF,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cloneTransferableBytes(bytes: Uint8Array): Uint8Array;
2
+ //# sourceMappingURL=transferableBytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferableBytes.d.ts","sourceRoot":"","sources":["../src/transferableBytes.ts"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpE"}
@@ -0,0 +1,6 @@
1
+ // Worker replies may reuse bytes from caches or stores. Copy them before
2
+ // transfer so postMessage ownership changes do not detach the source buffer.
3
+ export function cloneTransferableBytes(bytes) {
4
+ return bytes.slice();
5
+ }
6
+ //# sourceMappingURL=transferableBytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferableBytes.js","sourceRoot":"","sources":["../src/transferableBytes.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACtD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * TreeRootRegistry - Browser-side single source of truth for tree root data
3
+ *
4
+ * This module provides:
5
+ * - Unified record format for all root data
6
+ * - Subscription API that emits cached data immediately, then updates
7
+ * - Async resolve with timeout for waiting on first resolution
8
+ * - Local write tracking with dirty flag for publish throttling
9
+ * - Pluggable persistence (localStorage by default)
10
+ *
11
+ * This module lives under @hashtree/worker because it coordinates with worker
12
+ * updates and publish flows, but it runs on the app/main thread.
13
+ */
14
+ import type { Hash, TreeVisibility } from '@hashtree/core';
15
+ /**
16
+ * Source of the tree root update
17
+ */
18
+ export type TreeRootSource = 'local-write' | 'nostr' | 'prefetch' | 'worker';
19
+ /**
20
+ * Core record format - single source of truth for all root data
21
+ */
22
+ export interface TreeRootRecord {
23
+ hash: Hash;
24
+ key?: Hash;
25
+ visibility: TreeVisibility;
26
+ labels?: string[];
27
+ updatedAt: number;
28
+ source: TreeRootSource;
29
+ dirty: boolean;
30
+ encryptedKey?: string;
31
+ keyId?: string;
32
+ selfEncryptedKey?: string;
33
+ selfEncryptedLinkKey?: string;
34
+ }
35
+ /**
36
+ * Listener callback type
37
+ */
38
+ type Listener = (record: TreeRootRecord | null) => void;
39
+ /**
40
+ * Persistence interface - allows swapping localStorage for IndexedDB/etc
41
+ */
42
+ export interface RegistryPersistence {
43
+ save(key: string, record: TreeRootRecord): void;
44
+ load(key: string): TreeRootRecord | null;
45
+ delete(key: string): void;
46
+ loadAll(): Map<string, TreeRootRecord>;
47
+ }
48
+ /**
49
+ * TreeRootRegistry - singleton class for managing tree root data
50
+ */
51
+ declare class TreeRootRegistryImpl {
52
+ private records;
53
+ private listeners;
54
+ private globalListeners;
55
+ private persistence;
56
+ private publishTimers;
57
+ private publishFn;
58
+ private publishDelay;
59
+ private retryDelay;
60
+ constructor(persistence?: RegistryPersistence);
61
+ /**
62
+ * Hydrate from persistence on startup
63
+ */
64
+ private hydrate;
65
+ /**
66
+ * Set the publish function (called with throttling for dirty records)
67
+ */
68
+ setPublishFn(fn: (npub: string, treeName: string, record: TreeRootRecord) => Promise<boolean>): void;
69
+ /**
70
+ * Build cache key from npub and treeName
71
+ */
72
+ private makeKey;
73
+ /**
74
+ * Notify listeners of a record change
75
+ */
76
+ private notify;
77
+ private shouldAcceptUpdate;
78
+ private mergeSameHashMetadata;
79
+ /**
80
+ * Sync lookup - returns cached record or null (no side effects)
81
+ */
82
+ get(npub: string, treeName: string): TreeRootRecord | null;
83
+ /**
84
+ * Get by key directly
85
+ */
86
+ getByKey(key: string): TreeRootRecord | null;
87
+ /**
88
+ * Async resolve - returns current record if cached, otherwise waits for first resolve
89
+ */
90
+ resolve(npub: string, treeName: string, options?: {
91
+ timeoutMs?: number;
92
+ }): Promise<TreeRootRecord | null>;
93
+ /**
94
+ * Subscribe to updates for a specific tree
95
+ * Emits current snapshot immediately if available, then future updates
96
+ */
97
+ subscribe(npub: string, treeName: string, callback: Listener): () => void;
98
+ /**
99
+ * Subscribe to all registry updates (for bridges like Tauri/worker)
100
+ */
101
+ subscribeAll(callback: (key: string, record: TreeRootRecord | null) => void): () => void;
102
+ /**
103
+ * Set record from local write - marks dirty and schedules publish
104
+ */
105
+ setLocal(npub: string, treeName: string, hash: Hash, options?: {
106
+ key?: Hash;
107
+ visibility?: TreeVisibility;
108
+ labels?: string[];
109
+ encryptedKey?: string;
110
+ keyId?: string;
111
+ selfEncryptedKey?: string;
112
+ selfEncryptedLinkKey?: string;
113
+ }): void;
114
+ /**
115
+ * Set record from resolver (Nostr event) - only updates if newer
116
+ */
117
+ setFromResolver(npub: string, treeName: string, hash: Hash, updatedAt: number, options?: {
118
+ key?: Hash;
119
+ visibility?: TreeVisibility;
120
+ labels?: string[];
121
+ encryptedKey?: string;
122
+ keyId?: string;
123
+ selfEncryptedKey?: string;
124
+ selfEncryptedLinkKey?: string;
125
+ }): boolean;
126
+ /**
127
+ * Merge a decrypted key into an existing record without changing updatedAt/source.
128
+ * Returns true if the record was updated.
129
+ */
130
+ mergeKey(npub: string, treeName: string, hash: Hash, key: Hash): boolean;
131
+ /**
132
+ * Set record from worker (Nostr subscription routed through worker)
133
+ * Similar to setFromResolver but source is 'worker'
134
+ */
135
+ setFromWorker(npub: string, treeName: string, hash: Hash, updatedAt: number, options?: {
136
+ key?: Hash;
137
+ visibility?: TreeVisibility;
138
+ labels?: string[];
139
+ encryptedKey?: string;
140
+ keyId?: string;
141
+ selfEncryptedKey?: string;
142
+ selfEncryptedLinkKey?: string;
143
+ }): boolean;
144
+ /**
145
+ * Set record from external source (Tauri, worker, prefetch)
146
+ */
147
+ setFromExternal(npub: string, treeName: string, hash: Hash, source: TreeRootSource, options?: {
148
+ key?: Hash;
149
+ visibility?: TreeVisibility;
150
+ labels?: string[];
151
+ updatedAt?: number;
152
+ encryptedKey?: string;
153
+ keyId?: string;
154
+ selfEncryptedKey?: string;
155
+ selfEncryptedLinkKey?: string;
156
+ }): void;
157
+ /**
158
+ * Delete a record
159
+ */
160
+ delete(npub: string, treeName: string): void;
161
+ /**
162
+ * Schedule a throttled publish
163
+ */
164
+ private schedulePublish;
165
+ /**
166
+ * Execute the publish
167
+ */
168
+ private doPublish;
169
+ /**
170
+ * Force immediate publish of all dirty records
171
+ */
172
+ flushPendingPublishes(): Promise<void>;
173
+ /**
174
+ * Cancel pending publish (call before delete to prevent "undelete")
175
+ */
176
+ cancelPendingPublish(npub: string, treeName: string): void;
177
+ /**
178
+ * Get all records (for debugging/migration)
179
+ */
180
+ getAllRecords(): Map<string, TreeRootRecord>;
181
+ /**
182
+ * Check if a record exists
183
+ */
184
+ has(npub: string, treeName: string): boolean;
185
+ /**
186
+ * Get visibility for a tree
187
+ */
188
+ getVisibility(npub: string, treeName: string): TreeVisibility | undefined;
189
+ /**
190
+ * Get labels for a tree
191
+ */
192
+ getLabels(npub: string, treeName: string): string[] | undefined;
193
+ }
194
+ declare global {
195
+ interface Window {
196
+ __treeRootRegistry?: TreeRootRegistryImpl;
197
+ }
198
+ }
199
+ export declare const treeRootRegistry: TreeRootRegistryImpl;
200
+ export type { TreeRootRecord as TreeRootEntry };
201
+ //# sourceMappingURL=tree-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-root.d.ts","sourceRoot":"","sources":["../src/tree-root.ts"],"names":[],"mappings":"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"}