@hashtree/worker 0.1.1 → 0.1.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 (44) hide show
  1. package/dist/capabilities/blossomTransport.d.ts.map +1 -1
  2. package/dist/capabilities/blossomTransport.js +41 -8
  3. package/dist/capabilities/blossomTransport.js.map +1 -1
  4. package/dist/htree-path.d.ts +13 -0
  5. package/dist/htree-path.d.ts.map +1 -0
  6. package/dist/htree-path.js +38 -0
  7. package/dist/htree-path.js.map +1 -0
  8. package/dist/iris/mediaHandler.d.ts +25 -1
  9. package/dist/iris/mediaHandler.d.ts.map +1 -1
  10. package/dist/iris/mediaHandler.js +838 -102
  11. package/dist/iris/mediaHandler.js.map +1 -1
  12. package/dist/iris/ndk.d.ts +2 -1
  13. package/dist/iris/ndk.d.ts.map +1 -1
  14. package/dist/iris/ndk.js +12 -6
  15. package/dist/iris/ndk.js.map +1 -1
  16. package/dist/iris/protocol.d.ts +3 -0
  17. package/dist/iris/protocol.d.ts.map +1 -1
  18. package/dist/iris/protocol.js.map +1 -1
  19. package/dist/iris/publicAssetUrl.d.ts +6 -0
  20. package/dist/iris/publicAssetUrl.d.ts.map +1 -0
  21. package/dist/iris/publicAssetUrl.js +14 -0
  22. package/dist/iris/publicAssetUrl.js.map +1 -0
  23. package/dist/iris/rootPathResolver.d.ts +9 -0
  24. package/dist/iris/rootPathResolver.d.ts.map +1 -0
  25. package/dist/iris/rootPathResolver.js +32 -0
  26. package/dist/iris/rootPathResolver.js.map +1 -0
  27. package/dist/iris/treeRootCache.d.ts +9 -1
  28. package/dist/iris/treeRootCache.d.ts.map +1 -1
  29. package/dist/iris/treeRootCache.js +57 -2
  30. package/dist/iris/treeRootCache.js.map +1 -1
  31. package/dist/iris/treeRootSubscription.d.ts +5 -0
  32. package/dist/iris/treeRootSubscription.d.ts.map +1 -1
  33. package/dist/iris/treeRootSubscription.js +279 -15
  34. package/dist/iris/treeRootSubscription.js.map +1 -1
  35. package/dist/iris/worker.js +12 -27
  36. package/dist/iris/worker.js.map +1 -1
  37. package/dist/p2p/signaling.d.ts.map +1 -1
  38. package/dist/p2p/signaling.js +31 -4
  39. package/dist/p2p/signaling.js.map +1 -1
  40. package/dist/p2p/webrtcController.d.ts +21 -4
  41. package/dist/p2p/webrtcController.d.ts.map +1 -1
  42. package/dist/p2p/webrtcController.js +199 -59
  43. package/dist/p2p/webrtcController.js.map +1 -1
  44. package/package.json +12 -3
@@ -16,8 +16,14 @@ import { LRUCache } from './utils/lruCache';
16
16
  // In-memory LRU cache for fast lookups (limited to 1000 entries to prevent memory leak)
17
17
  // Data is backed by persistent store so eviction is safe
18
18
  const memoryCache = new LRUCache(1000);
19
+ const updateListeners = new Set();
19
20
  // Store reference
20
21
  let store = null;
22
+ function notifyUpdate(npub, treeName, cid) {
23
+ for (const listener of updateListeners) {
24
+ listener(npub, treeName, cid);
25
+ }
26
+ }
21
27
  /**
22
28
  * Initialize the cache with a store
23
29
  */
@@ -88,25 +94,35 @@ export async function getCachedRootInfo(npub, treeName) {
88
94
  */
89
95
  export async function setCachedRoot(npub, treeName, cid, visibility = 'public', options) {
90
96
  const cacheKey = `${npub}/${treeName}`;
91
- const now = Math.floor(Date.now() / 1000);
97
+ const existing = await getCachedRootInfo(npub, treeName);
98
+ const updatedAt = options?.updatedAt ?? Math.floor(Date.now() / 1000);
99
+ if (existing && existing.updatedAt > updatedAt) {
100
+ return { applied: false, record: existing };
101
+ }
92
102
  const cached = {
93
103
  hash: cid.hash,
94
104
  key: cid.key,
95
105
  visibility,
96
- updatedAt: now,
106
+ labels: options?.labels ?? existing?.labels,
107
+ updatedAt,
97
108
  encryptedKey: options?.encryptedKey,
98
109
  keyId: options?.keyId,
99
110
  selfEncryptedKey: options?.selfEncryptedKey,
100
111
  selfEncryptedLinkKey: options?.selfEncryptedLinkKey,
101
112
  };
113
+ if (existing && cachedRootEquals(existing, cached)) {
114
+ return { applied: false, record: existing };
115
+ }
102
116
  // Update memory cache
103
117
  memoryCache.set(cacheKey, cached);
118
+ notifyUpdate(npub, treeName, { hash: cached.hash, key: cached.key });
104
119
  // Persist to store
105
120
  if (store) {
106
121
  const storageKey = await makeStorageKey(npub, treeName);
107
122
  const data = encode(cached);
108
123
  await store.put(storageKey, new Uint8Array(data));
109
124
  }
125
+ return { applied: true, record: cached };
110
126
  }
111
127
  /**
112
128
  * Merge a decrypted key into an existing cache entry (if hash matches).
@@ -125,6 +141,7 @@ export async function mergeCachedRootKey(npub, treeName, hash, key) {
125
141
  key,
126
142
  };
127
143
  memoryCache.set(cacheKey, merged);
144
+ notifyUpdate(npub, treeName, { hash: merged.hash, key: merged.key });
128
145
  if (store) {
129
146
  const storageKey = await makeStorageKey(npub, treeName);
130
147
  const data = encode(merged);
@@ -139,6 +156,7 @@ export async function removeCachedRoot(npub, treeName) {
139
156
  const cacheKey = `${npub}/${treeName}`;
140
157
  // Remove from memory cache
141
158
  memoryCache.delete(cacheKey);
159
+ notifyUpdate(npub, treeName, null);
142
160
  // Remove from persistent store
143
161
  if (store) {
144
162
  const storageKey = await makeStorageKey(npub, treeName);
@@ -171,6 +189,12 @@ export function listCachedRoots(npub) {
171
189
  export function clearMemoryCache() {
172
190
  memoryCache.clear();
173
191
  }
192
+ export function onCachedRootUpdate(listener) {
193
+ updateListeners.add(listener);
194
+ return () => {
195
+ updateListeners.delete(listener);
196
+ };
197
+ }
174
198
  /**
175
199
  * Get cache stats
176
200
  */
@@ -188,4 +212,35 @@ function hashEquals(a, b) {
188
212
  }
189
213
  return true;
190
214
  }
215
+ function optionalHashEquals(a, b) {
216
+ if (!a && !b)
217
+ return true;
218
+ if (!a || !b)
219
+ return false;
220
+ return hashEquals(a, b);
221
+ }
222
+ function labelsEqual(a, b) {
223
+ if (!a && !b)
224
+ return true;
225
+ if (!a || !b)
226
+ return false;
227
+ if (a.length !== b.length)
228
+ return false;
229
+ for (let i = 0; i < a.length; i += 1) {
230
+ if (a[i] !== b[i])
231
+ return false;
232
+ }
233
+ return true;
234
+ }
235
+ function cachedRootEquals(a, b) {
236
+ return (hashEquals(a.hash, b.hash) &&
237
+ optionalHashEquals(a.key, b.key) &&
238
+ a.visibility === b.visibility &&
239
+ labelsEqual(a.labels, b.labels) &&
240
+ a.updatedAt === b.updatedAt &&
241
+ a.encryptedKey === b.encryptedKey &&
242
+ a.keyId === b.keyId &&
243
+ a.selfEncryptedKey === b.selfEncryptedKey &&
244
+ a.selfEncryptedLinkKey === b.selfEncryptedLinkKey);
245
+ }
191
246
  //# sourceMappingURL=treeRootCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"treeRootCache.js","sourceRoot":"","sources":["../../src/iris/treeRootCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"treeRootCache.js","sourceRoot":"","sources":["../../src/iris/treeRootCache.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,13 @@
4
4
  * Worker subscribes directly to tree root events (kind 30078 with #l=hashtree).
5
5
  * Updates local cache and notifies main thread of changes.
6
6
  */
7
+ import type { CID } from '@hashtree/core';
7
8
  import type { SignedEvent, TreeVisibility } from './protocol';
8
9
  export interface TreeRootRecord {
9
10
  hash: Uint8Array;
10
11
  key?: Uint8Array;
11
12
  visibility: TreeVisibility;
13
+ labels?: string[];
12
14
  updatedAt: number;
13
15
  encryptedKey?: string;
14
16
  keyId?: string;
@@ -19,12 +21,15 @@ export interface ParsedTreeRootEvent {
19
21
  hash: string;
20
22
  key?: string;
21
23
  visibility: TreeVisibility;
24
+ labels?: string[];
22
25
  encryptedKey?: string;
23
26
  keyId?: string;
24
27
  selfEncryptedKey?: string;
25
28
  selfEncryptedLinkKey?: string;
26
29
  }
27
30
  export declare function parseTreeRootEvent(event: SignedEvent): ParsedTreeRootEvent | null;
31
+ export declare function getHistoricalTreeRoots(npub: string, treeName: string, timeoutMs?: number): Promise<CID[]>;
32
+ export declare function resolveTreeRootNow(npub: string, treeName: string, timeoutMs?: number): Promise<CID | null>;
28
33
  /**
29
34
  * Set callback to notify main thread of tree root updates
30
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"treeRootSubscription.d.ts","sourceRoot":"","sources":["../../src/iris/treeRootSubscription.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAS9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAYD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AA+BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,GAAG,IAAI,CAoCjF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GACzE,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAelE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMhE;AAcD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAI3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
1
+ {"version":3,"file":"treeRootSubscription.d.ts","sourceRoot":"","sources":["../../src/iris/treeRootSubscription.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAI1C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwB9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAYD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AA0FD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,GAAG,IAAI,CAqCjF;AAsFD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,GAAG,EAAE,CAAC,CA6DhB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAuErB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GACzE,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAiBlE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMhE;AAcD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAI3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
@@ -5,13 +5,84 @@
5
5
  * Worker subscribes directly to tree root events (kind 30078 with #l=hashtree).
6
6
  * Updates local cache and notifies main thread of changes.
7
7
  */
8
- import { subscribe as ndkSubscribe, unsubscribe as ndkUnsubscribe } from './ndk';
9
- import { setCachedRoot } from './treeRootCache';
8
+ import { SimplePool } from 'nostr-tools';
9
+ import { getNdk, subscribe as ndkSubscribe, unsubscribe as ndkUnsubscribe } from './ndk';
10
+ import { getCachedRoot, setCachedRoot } from './treeRootCache';
10
11
  import { nip19 } from 'nostr-tools';
12
+ import { NDKSubscriptionCacheUsage } from 'ndk';
11
13
  // Active subscriptions by pubkey
12
14
  const activeSubscriptions = new Map(); // pubkeyHex -> subId
15
+ const inFlightRootResolutions = new Map();
16
+ const inFlightHistoricalRootLists = new Map();
17
+ const historicalRootListCache = new Map();
18
+ const MAX_HISTORICAL_TREE_ROOT_EVENTS = 20;
19
+ const HISTORICAL_TREE_ROOT_CACHE_TTL_MS = 30_000;
20
+ const DEFAULT_TREE_ROOT_RELAYS = [
21
+ 'wss://relay.damus.io',
22
+ 'wss://relay.primal.net',
23
+ 'wss://relay.nostr.band',
24
+ 'wss://relay.snort.social',
25
+ 'wss://temp.iris.to',
26
+ 'wss://offchain.pub',
27
+ ];
13
28
  // Callback to notify main thread
14
29
  let notifyCallback = null;
30
+ function withTimeout(promise, timeoutMs) {
31
+ return Promise.race([
32
+ promise,
33
+ new Promise((resolve) => setTimeout(() => resolve(null), timeoutMs)),
34
+ ]);
35
+ }
36
+ function getHistoryRelayUrls() {
37
+ const urls = new Set(DEFAULT_TREE_ROOT_RELAYS);
38
+ const ndk = getNdk();
39
+ const connected = typeof ndk?.pool?.connectedRelays === 'function'
40
+ ? Array.from(ndk.pool.connectedRelays()).map((relay) => relay.url)
41
+ : [];
42
+ for (const url of connected) {
43
+ urls.add(url);
44
+ }
45
+ if (typeof ndk?.pool?.urls === 'function') {
46
+ for (const url of ndk.pool.urls()) {
47
+ urls.add(url);
48
+ }
49
+ }
50
+ return Array.from(urls);
51
+ }
52
+ function toSignedEvent(event) {
53
+ return {
54
+ id: event.id,
55
+ pubkey: event.pubkey,
56
+ kind: event.kind,
57
+ content: event.content,
58
+ tags: event.tags,
59
+ created_at: event.created_at,
60
+ sig: event.sig,
61
+ };
62
+ }
63
+ function uniqueEvents(events) {
64
+ const seen = new Set();
65
+ const result = [];
66
+ for (const event of events) {
67
+ const eventKey = event.id || `${event.created_at}:${event.pubkey}:${event.tags.find((tag) => tag[0] === 'd')?.[1] ?? ''}`;
68
+ if (seen.has(eventKey))
69
+ continue;
70
+ seen.add(eventKey);
71
+ result.push(event);
72
+ }
73
+ return result;
74
+ }
75
+ function parseLabels(event) {
76
+ const seen = new Set();
77
+ const labels = [];
78
+ for (const tag of event.tags) {
79
+ if (tag[0] !== 'l' || !tag[1] || seen.has(tag[1]))
80
+ continue;
81
+ seen.add(tag[1]);
82
+ labels.push(tag[1]);
83
+ }
84
+ return labels.length > 0 ? labels : undefined;
85
+ }
15
86
  function parseLegacyContent(event) {
16
87
  const content = event.content?.trim();
17
88
  if (!content)
@@ -69,12 +140,209 @@ export function parseTreeRootEvent(event) {
69
140
  hash,
70
141
  key,
71
142
  visibility,
143
+ labels: parseLabels(event),
72
144
  encryptedKey,
73
145
  keyId,
74
146
  selfEncryptedKey,
75
147
  selfEncryptedLinkKey,
76
148
  };
77
149
  }
150
+ async function fetchTreeRootEventsFromNdk(pubkeyHex, treeName, timeoutMs) {
151
+ const ndk = getNdk();
152
+ if (!ndk)
153
+ return [];
154
+ try {
155
+ const events = await withTimeout(ndk.fetchEvents({
156
+ kinds: [30078],
157
+ authors: [pubkeyHex],
158
+ '#d': [treeName],
159
+ limit: MAX_HISTORICAL_TREE_ROOT_EVENTS,
160
+ }, {
161
+ cacheUsage: NDKSubscriptionCacheUsage.ONLY_RELAY,
162
+ }), timeoutMs);
163
+ if (!events)
164
+ return [];
165
+ return uniqueEvents(Array.from(events).map((event) => toSignedEvent(event.rawEvent?.() ?? event)))
166
+ .sort((a, b) => (b.created_at ?? 0) - (a.created_at ?? 0));
167
+ }
168
+ catch {
169
+ return [];
170
+ }
171
+ }
172
+ async function fetchTreeRootEventsFromRelays(pubkeyHex, treeName, timeoutMs) {
173
+ const relayUrls = getHistoryRelayUrls();
174
+ if (relayUrls.length === 0)
175
+ return [];
176
+ const pool = new SimplePool();
177
+ try {
178
+ const events = await withTimeout(pool.querySync(relayUrls, {
179
+ kinds: [30078],
180
+ authors: [pubkeyHex],
181
+ '#d': [treeName],
182
+ limit: MAX_HISTORICAL_TREE_ROOT_EVENTS,
183
+ }, {
184
+ maxWait: timeoutMs,
185
+ }), timeoutMs + 500);
186
+ if (!events)
187
+ return [];
188
+ return uniqueEvents(Array.from(events).map((event) => toSignedEvent(event)))
189
+ .sort((a, b) => (b.created_at ?? 0) - (a.created_at ?? 0));
190
+ }
191
+ catch {
192
+ return [];
193
+ }
194
+ finally {
195
+ try {
196
+ pool.close(relayUrls);
197
+ }
198
+ catch { }
199
+ try {
200
+ pool.destroy();
201
+ }
202
+ catch { }
203
+ }
204
+ }
205
+ function cidKey(cid) {
206
+ const hash = Array.from(cid.hash, (byte) => byte.toString(16).padStart(2, '0')).join('');
207
+ const key = cid.key
208
+ ? Array.from(cid.key, (byte) => byte.toString(16).padStart(2, '0')).join('')
209
+ : '';
210
+ return `${hash}:${key}`;
211
+ }
212
+ function dedupeRoots(roots) {
213
+ const seen = new Set();
214
+ const result = [];
215
+ for (const root of roots) {
216
+ const key = cidKey(root);
217
+ if (seen.has(key))
218
+ continue;
219
+ seen.add(key);
220
+ result.push(root);
221
+ }
222
+ return result;
223
+ }
224
+ export async function getHistoricalTreeRoots(npub, treeName, timeoutMs = 8000) {
225
+ const cacheKey = `${npub}/${treeName}`;
226
+ const cached = historicalRootListCache.get(cacheKey);
227
+ if (cached && cached.expiresAt > Date.now()) {
228
+ return cached.roots;
229
+ }
230
+ if (cached) {
231
+ historicalRootListCache.delete(cacheKey);
232
+ }
233
+ const inFlight = inFlightHistoricalRootLists.get(cacheKey);
234
+ if (inFlight) {
235
+ return await inFlight;
236
+ }
237
+ const lookup = (async () => {
238
+ let pubkeyHex;
239
+ try {
240
+ const decoded = nip19.decode(npub);
241
+ if (decoded.type !== 'npub')
242
+ return [];
243
+ pubkeyHex = decoded.data;
244
+ }
245
+ catch {
246
+ return [];
247
+ }
248
+ const [ndkEvents, relayEvents] = await Promise.all([
249
+ fetchTreeRootEventsFromNdk(pubkeyHex, treeName, timeoutMs),
250
+ fetchTreeRootEventsFromRelays(pubkeyHex, treeName, timeoutMs),
251
+ ]);
252
+ const roots = dedupeRoots(uniqueEvents([...ndkEvents, ...relayEvents])
253
+ .sort((a, b) => (b.created_at ?? 0) - (a.created_at ?? 0))
254
+ .map((event) => {
255
+ const parsed = parseTreeRootEvent(event);
256
+ if (!parsed)
257
+ return null;
258
+ try {
259
+ return {
260
+ hash: hexToBytes(parsed.hash),
261
+ key: parsed.key ? hexToBytes(parsed.key) : undefined,
262
+ };
263
+ }
264
+ catch {
265
+ return null;
266
+ }
267
+ })
268
+ .filter((root) => !!root));
269
+ historicalRootListCache.set(cacheKey, {
270
+ roots,
271
+ expiresAt: Date.now() + HISTORICAL_TREE_ROOT_CACHE_TTL_MS,
272
+ });
273
+ return roots;
274
+ })();
275
+ inFlightHistoricalRootLists.set(cacheKey, lookup);
276
+ try {
277
+ return await lookup;
278
+ }
279
+ finally {
280
+ inFlightHistoricalRootLists.delete(cacheKey);
281
+ }
282
+ }
283
+ export async function resolveTreeRootNow(npub, treeName, timeoutMs = 8000) {
284
+ const cached = await getCachedRoot(npub, treeName);
285
+ if (cached) {
286
+ return cached;
287
+ }
288
+ const cacheKey = `${npub}/${treeName}`;
289
+ const inFlight = inFlightRootResolutions.get(cacheKey);
290
+ if (inFlight) {
291
+ return await inFlight;
292
+ }
293
+ const lookup = (async () => {
294
+ let pubkeyHex;
295
+ try {
296
+ const decoded = nip19.decode(npub);
297
+ if (decoded.type !== 'npub')
298
+ return null;
299
+ pubkeyHex = decoded.data;
300
+ }
301
+ catch {
302
+ return null;
303
+ }
304
+ const fetched = (await fetchTreeRootEventsFromNdk(pubkeyHex, treeName, timeoutMs))[0] ?? (await fetchTreeRootEventsFromRelays(pubkeyHex, treeName, timeoutMs))[0];
305
+ if (!fetched) {
306
+ return null;
307
+ }
308
+ const parsed = parseTreeRootEvent(fetched);
309
+ if (!parsed) {
310
+ return null;
311
+ }
312
+ const hash = hexToBytes(parsed.hash);
313
+ const key = parsed.key ? hexToBytes(parsed.key) : undefined;
314
+ const { applied, record } = await setCachedRoot(npub, treeName, { hash, key }, parsed.visibility, {
315
+ updatedAt: fetched.created_at,
316
+ labels: parsed.labels,
317
+ encryptedKey: parsed.encryptedKey,
318
+ keyId: parsed.keyId,
319
+ selfEncryptedKey: parsed.selfEncryptedKey,
320
+ selfEncryptedLinkKey: parsed.selfEncryptedLinkKey,
321
+ });
322
+ historicalRootListCache.delete(cacheKey);
323
+ if (notifyCallback && applied) {
324
+ notifyCallback(npub, treeName, {
325
+ hash: record.hash,
326
+ key: record.key,
327
+ visibility: record.visibility,
328
+ labels: record.labels,
329
+ updatedAt: record.updatedAt,
330
+ encryptedKey: record.encryptedKey,
331
+ keyId: record.keyId,
332
+ selfEncryptedKey: record.selfEncryptedKey,
333
+ selfEncryptedLinkKey: record.selfEncryptedLinkKey,
334
+ });
335
+ }
336
+ return { hash: record.hash, key: record.key };
337
+ })();
338
+ inFlightRootResolutions.set(cacheKey, lookup);
339
+ try {
340
+ return await lookup;
341
+ }
342
+ finally {
343
+ inFlightRootResolutions.delete(cacheKey);
344
+ }
345
+ }
78
346
  /**
79
347
  * Set callback to notify main thread of tree root updates
80
348
  */
@@ -94,7 +362,9 @@ export function subscribeToTreeRoots(pubkeyHex) {
94
362
  ndkSubscribe(subId, [{
95
363
  kinds: [30078],
96
364
  authors: [pubkeyHex],
97
- }]);
365
+ }], {
366
+ cacheUsage: NDKSubscriptionCacheUsage.ONLY_RELAY,
367
+ });
98
368
  return () => unsubscribeFromTreeRoots(pubkeyHex);
99
369
  }
100
370
  /**
@@ -135,24 +405,18 @@ export async function handleTreeRootEvent(event) {
135
405
  const hash = hexToBytes(parsed.hash);
136
406
  const key = parsed.key ? hexToBytes(parsed.key) : undefined;
137
407
  const visibility = parsed.visibility || 'public';
138
- // Build record
139
- const record = {
140
- hash,
141
- key,
142
- visibility,
143
- updatedAt: event.created_at,
144
- encryptedKey: parsed.encryptedKey,
145
- keyId: parsed.keyId,
146
- selfEncryptedKey: parsed.selfEncryptedKey,
147
- selfEncryptedLinkKey: parsed.selfEncryptedLinkKey,
148
- };
149
408
  // Update cache
150
- await setCachedRoot(npub, treeName, { hash, key }, visibility, {
409
+ const { applied, record } = await setCachedRoot(npub, treeName, { hash, key }, visibility, {
410
+ updatedAt: event.created_at,
411
+ labels: parsed.labels,
151
412
  encryptedKey: parsed.encryptedKey,
152
413
  keyId: parsed.keyId,
153
414
  selfEncryptedKey: parsed.selfEncryptedKey,
154
415
  selfEncryptedLinkKey: parsed.selfEncryptedLinkKey,
155
416
  });
417
+ if (!applied)
418
+ return;
419
+ historicalRootListCache.delete(`${npub}/${treeName}`);
156
420
  // Notify main thread
157
421
  if (notifyCallback) {
158
422
  notifyCallback(npub, treeName, record);
@@ -1 +1 @@
1
- {"version":3,"file":"treeRootSubscription.js","sourceRoot":"","sources":["../../src/iris/treeRootSubscription.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"treeRootSubscription.js","sourceRoot":"","sources":["../../src/iris/treeRootSubscription.ts"],"names":[],"mappings":"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"}