@opendatalabs/personal-server-ts-lite 0.0.1-canary.01ca694

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 (60) hide show
  1. package/dist/bridge.d.ts +23 -0
  2. package/dist/bridge.d.ts.map +1 -0
  3. package/dist/bridge.js +53 -0
  4. package/dist/bridge.js.map +1 -0
  5. package/dist/browser-runtime.d.ts +31 -0
  6. package/dist/browser-runtime.d.ts.map +1 -0
  7. package/dist/browser-runtime.js +109 -0
  8. package/dist/browser-runtime.js.map +1 -0
  9. package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
  10. package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
  11. package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
  12. package/dist/client.d.ts +22 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +376 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/diagnostics.d.ts +166 -0
  17. package/dist/diagnostics.d.ts.map +1 -0
  18. package/dist/diagnostics.js +265 -0
  19. package/dist/diagnostics.js.map +1 -0
  20. package/dist/index.d.ts +15 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +14 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/mcp-store.d.ts +35 -0
  25. package/dist/mcp-store.d.ts.map +1 -0
  26. package/dist/mcp-store.js +177 -0
  27. package/dist/mcp-store.js.map +1 -0
  28. package/dist/owner-binding.d.ts +7 -0
  29. package/dist/owner-binding.d.ts.map +1 -0
  30. package/dist/owner-binding.js +18 -0
  31. package/dist/owner-binding.js.map +1 -0
  32. package/dist/relay-tls.d.ts +19 -0
  33. package/dist/relay-tls.d.ts.map +1 -0
  34. package/dist/relay-tls.js +226 -0
  35. package/dist/relay-tls.js.map +1 -0
  36. package/dist/relay.d.ts +70 -0
  37. package/dist/relay.d.ts.map +1 -0
  38. package/dist/relay.js +368 -0
  39. package/dist/relay.js.map +1 -0
  40. package/dist/runtime.d.ts +95 -0
  41. package/dist/runtime.d.ts.map +1 -0
  42. package/dist/runtime.js +991 -0
  43. package/dist/runtime.js.map +1 -0
  44. package/dist/state.d.ts +62 -0
  45. package/dist/state.d.ts.map +1 -0
  46. package/dist/state.js +296 -0
  47. package/dist/state.js.map +1 -0
  48. package/dist/storage-utils.d.ts +8 -0
  49. package/dist/storage-utils.d.ts.map +1 -0
  50. package/dist/storage-utils.js +67 -0
  51. package/dist/storage-utils.js.map +1 -0
  52. package/dist/storage.d.ts +57 -0
  53. package/dist/storage.d.ts.map +1 -0
  54. package/dist/storage.js +575 -0
  55. package/dist/storage.js.map +1 -0
  56. package/dist/sync.d.ts +28 -0
  57. package/dist/sync.d.ts.map +1 -0
  58. package/dist/sync.js +158 -0
  59. package/dist/sync.js.map +1 -0
  60. package/package.json +40 -0
@@ -0,0 +1,575 @@
1
+ import { DataBlockStorageError, encodeDataBlockCursor, validateDataBlockCursor, } from "@opendatalabs/personal-server-ts-core/storage/blocks";
2
+ import { createStorageReadMethods, sortEntries } from "./storage-utils.js";
3
+ import { previewEnvelopeValue, previewJsonEnvelopePrefix, } from "@opendatalabs/personal-server-ts-core/storage/preview";
4
+ const DEFAULT_INDEXED_DB_NAME = "personal-server-lite-storage";
5
+ const DEFAULT_INDEXED_DB_STORE = "state";
6
+ const DEFAULT_INDEXED_DB_KEY = "data-storage-v1";
7
+ const TEXT_PAGE_MEDIA_TYPE = "text/plain; charset=utf-8";
8
+ const textEncoder = new TextEncoder();
9
+ const textDecoder = new TextDecoder();
10
+ function initialState() {
11
+ return {
12
+ version: 1,
13
+ nextId: 1,
14
+ entries: [],
15
+ envelopes: [],
16
+ };
17
+ }
18
+ function envelopePath(scope, collectedAt) {
19
+ return `data/${scope}/${collectedAt}.json`;
20
+ }
21
+ function blockTreePath(scope, collectedAt) {
22
+ return `blocks/${scope}/${collectedAt}`;
23
+ }
24
+ function blockManifestPath(scope, collectedAt) {
25
+ return `${blockTreePath(scope, collectedAt)}/manifest.json`;
26
+ }
27
+ function blockPayloadPath(scope, collectedAt, blockId) {
28
+ return `${blockTreePath(scope, collectedAt)}/${encodeURIComponent(blockId)}.json`;
29
+ }
30
+ function normalizeState(state) {
31
+ if (!state || state.version !== 1) {
32
+ return initialState();
33
+ }
34
+ return {
35
+ version: 1,
36
+ nextId: Math.max(state.nextId, 1),
37
+ entries: state.entries.map((entry) => ({
38
+ ...entry,
39
+ schemaId: entry.schemaId ?? null,
40
+ })),
41
+ envelopes: state.envelopes,
42
+ blockManifests: state.blockManifests ?? [],
43
+ blockPayloads: state.blockPayloads ?? [],
44
+ };
45
+ }
46
+ export function createIndexedDbFallbackDataFileStore(envelopes, blockManifests = new Map(), blockPayloads = new Map()) {
47
+ return {
48
+ kind: "indexeddb",
49
+ async readEnvelope(path) {
50
+ return envelopes.get(path) ?? null;
51
+ },
52
+ async readEnvelopePreview(path, { maxBytes }) {
53
+ const envelope = envelopes.get(path);
54
+ if (!envelope)
55
+ return null;
56
+ return previewEnvelopeValue(envelope, maxBytes);
57
+ },
58
+ async writeEnvelope(path, envelope) {
59
+ envelopes.set(path, envelope);
60
+ return new TextEncoder().encode(JSON.stringify(envelope)).length;
61
+ },
62
+ async deleteEnvelope(path) {
63
+ envelopes.delete(path);
64
+ },
65
+ async readBlockManifest(path) {
66
+ return blockManifests.get(path) ?? null;
67
+ },
68
+ async writeBlockManifest(path, manifest) {
69
+ blockManifests.set(path, manifest);
70
+ },
71
+ async readBlockPayload(path) {
72
+ return blockPayloads.get(path) ?? null;
73
+ },
74
+ async writeBlockPayload(path, block) {
75
+ blockPayloads.set(path, block);
76
+ },
77
+ async deleteBlockTree(pathPrefix) {
78
+ deleteMapPrefix(blockManifests, pathPrefix);
79
+ deleteMapPrefix(blockPayloads, pathPrefix);
80
+ },
81
+ };
82
+ }
83
+ function deleteMapPrefix(map, pathPrefix) {
84
+ const prefix = pathPrefix.endsWith("/") ? pathPrefix : `${pathPrefix}/`;
85
+ for (const path of map.keys()) {
86
+ if (path === pathPrefix || path.startsWith(prefix)) {
87
+ map.delete(path);
88
+ }
89
+ }
90
+ }
91
+ async function getOrCreateOpfsDirectory(root, parts) {
92
+ let dir = root;
93
+ for (const part of parts) {
94
+ dir = await dir.getDirectoryHandle(part, { create: true });
95
+ }
96
+ return dir;
97
+ }
98
+ async function getOpfsFileHandle(root, path, options) {
99
+ const parts = path.split("/").filter(Boolean);
100
+ const fileName = parts.pop();
101
+ if (!fileName) {
102
+ throw new Error("OPFS path must include a file name");
103
+ }
104
+ const dir = await getOrCreateOpfsDirectory(root, parts);
105
+ return dir.getFileHandle(fileName, options);
106
+ }
107
+ export async function isOpfsAvailable() {
108
+ return (typeof navigator !== "undefined" &&
109
+ typeof navigator.storage?.getDirectory === "function");
110
+ }
111
+ export async function createOpfsPsLiteDataFileStore() {
112
+ if (!(await isOpfsAvailable())) {
113
+ throw new Error("OPFS is not available in this runtime");
114
+ }
115
+ const root = await navigator.storage.getDirectory();
116
+ return {
117
+ kind: "opfs",
118
+ async readEnvelope(path) {
119
+ try {
120
+ const handle = await getOpfsFileHandle(root, path);
121
+ const file = await handle.getFile();
122
+ return JSON.parse(await file.text());
123
+ }
124
+ catch (err) {
125
+ if (err instanceof DOMException && err.name === "NotFoundError") {
126
+ return null;
127
+ }
128
+ throw err;
129
+ }
130
+ },
131
+ async readEnvelopePreview(path, { maxBytes }) {
132
+ try {
133
+ const handle = await getOpfsFileHandle(root, path);
134
+ const file = await handle.getFile();
135
+ return previewJsonEnvelopePrefix(await file.slice(0, maxBytes).text(), maxBytes, {
136
+ sourceTruncated: file.size > maxBytes,
137
+ });
138
+ }
139
+ catch (err) {
140
+ if (err instanceof DOMException && err.name === "NotFoundError") {
141
+ return null;
142
+ }
143
+ throw err;
144
+ }
145
+ },
146
+ async writeEnvelope(path, envelope) {
147
+ const encoded = JSON.stringify(envelope);
148
+ const handle = await getOpfsFileHandle(root, path, { create: true });
149
+ const writable = await handle.createWritable();
150
+ await writable.write(encoded);
151
+ await writable.close();
152
+ return new TextEncoder().encode(encoded).length;
153
+ },
154
+ async deleteEnvelope(path) {
155
+ const parts = path.split("/").filter(Boolean);
156
+ const fileName = parts.pop();
157
+ if (!fileName)
158
+ return;
159
+ try {
160
+ const dir = await getOrCreateOpfsDirectory(root, parts);
161
+ await dir.removeEntry(fileName);
162
+ }
163
+ catch (err) {
164
+ if (err instanceof DOMException && err.name === "NotFoundError") {
165
+ return;
166
+ }
167
+ throw err;
168
+ }
169
+ },
170
+ async readBlockManifest(path) {
171
+ return readJsonOpfsFile(root, path);
172
+ },
173
+ async writeBlockManifest(path, manifest) {
174
+ await writeJsonOpfsFile(root, path, manifest);
175
+ },
176
+ async readBlockPayload(path) {
177
+ return readJsonOpfsFile(root, path);
178
+ },
179
+ async writeBlockPayload(path, block) {
180
+ await writeJsonOpfsFile(root, path, block);
181
+ },
182
+ async deleteBlockTree(pathPrefix) {
183
+ await removeOpfsDirectoryTree(root, pathPrefix);
184
+ },
185
+ };
186
+ }
187
+ async function readJsonOpfsFile(root, path) {
188
+ try {
189
+ const handle = await getOpfsFileHandle(root, path);
190
+ const file = await handle.getFile();
191
+ return JSON.parse(await file.text());
192
+ }
193
+ catch (err) {
194
+ if (err instanceof DOMException && err.name === "NotFoundError") {
195
+ return null;
196
+ }
197
+ throw err;
198
+ }
199
+ }
200
+ async function writeJsonOpfsFile(root, path, value) {
201
+ const handle = await getOpfsFileHandle(root, path, { create: true });
202
+ const writable = await handle.createWritable();
203
+ try {
204
+ await writable.write(JSON.stringify(value));
205
+ }
206
+ finally {
207
+ await writable.close();
208
+ }
209
+ }
210
+ async function removeOpfsDirectoryTree(root, pathPrefix) {
211
+ const parts = pathPrefix.split("/").filter(Boolean);
212
+ const directoryName = parts.pop();
213
+ if (!directoryName)
214
+ return;
215
+ try {
216
+ const parent = await getOrCreateOpfsDirectory(root, parts);
217
+ await parent.removeEntry(directoryName, { recursive: true });
218
+ }
219
+ catch (err) {
220
+ if (err instanceof DOMException && err.name === "NotFoundError") {
221
+ return;
222
+ }
223
+ throw err;
224
+ }
225
+ }
226
+ function openIndexedDb(dbName, storeName) {
227
+ if (typeof indexedDB === "undefined") {
228
+ throw new Error("IndexedDB is not available in this runtime");
229
+ }
230
+ return new Promise((resolve, reject) => {
231
+ const request = indexedDB.open(dbName, 1);
232
+ request.onupgradeneeded = () => {
233
+ const db = request.result;
234
+ if (!db.objectStoreNames.contains(storeName)) {
235
+ db.createObjectStore(storeName);
236
+ }
237
+ };
238
+ request.onsuccess = () => resolve(request.result);
239
+ request.onerror = () => reject(request.error);
240
+ });
241
+ }
242
+ function runIndexedDbTransaction(options, mode, callback) {
243
+ return openIndexedDb(options.dbName, options.storeName).then((db) => new Promise((resolve, reject) => {
244
+ const transaction = db.transaction(options.storeName, mode);
245
+ const store = transaction.objectStore(options.storeName);
246
+ const request = callback(store);
247
+ request.onsuccess = () => resolve(request.result);
248
+ request.onerror = () => reject(request.error);
249
+ transaction.oncomplete = () => db.close();
250
+ transaction.onerror = () => {
251
+ db.close();
252
+ reject(transaction.error);
253
+ };
254
+ }));
255
+ }
256
+ export function createIndexedDbPsLitePersistence(options = {}) {
257
+ const resolved = {
258
+ dbName: options.dbName ?? DEFAULT_INDEXED_DB_NAME,
259
+ storeName: options.storeName ?? DEFAULT_INDEXED_DB_STORE,
260
+ key: options.key ?? DEFAULT_INDEXED_DB_KEY,
261
+ };
262
+ return {
263
+ async read() {
264
+ const state = await runIndexedDbTransaction(resolved, "readonly", (store) => store.get(resolved.key));
265
+ return state ?? null;
266
+ },
267
+ async write(state) {
268
+ await runIndexedDbTransaction(resolved, "readwrite", (store) => store.put(state, resolved.key));
269
+ },
270
+ };
271
+ }
272
+ export async function createPersistentPsLiteStorage(adapter, persistence = createIndexedDbPsLitePersistence(), dataFileStore) {
273
+ let state = normalizeState(await persistence.read());
274
+ const fallbackEnvelopes = new Map(state.envelopes.map((envelope) => [
275
+ envelopePath(envelope.scope, envelope.collectedAt),
276
+ envelope,
277
+ ]));
278
+ const fallbackBlockManifests = new Map((state.blockManifests ?? []).map(({ path, manifest }) => [path, manifest]));
279
+ const fallbackBlockPayloads = new Map((state.blockPayloads ?? []).map(({ path, block }) => [path, block]));
280
+ const fallbackStore = createIndexedDbFallbackDataFileStore(fallbackEnvelopes, fallbackBlockManifests, fallbackBlockPayloads);
281
+ const fileStore = dataFileStore ??
282
+ (adapter.kind !== "custom" && (await isOpfsAvailable())
283
+ ? await createOpfsPsLiteDataFileStore()
284
+ : fallbackStore);
285
+ const capabilities = {
286
+ metadata: adapter.kind === "custom" ? "custom" : "indexeddb",
287
+ files: fileStore.kind,
288
+ opfsAvailable: await isOpfsAvailable(),
289
+ };
290
+ let persistQueue = Promise.resolve();
291
+ async function persist() {
292
+ const snapshot = {
293
+ ...state,
294
+ envelopes: fileStore.kind === "indexeddb"
295
+ ? Array.from(fallbackEnvelopes.values())
296
+ : [],
297
+ blockManifests: fileStore.kind === "indexeddb"
298
+ ? Array.from(fallbackBlockManifests.entries()).map(([path, manifest]) => ({ path, manifest }))
299
+ : [],
300
+ blockPayloads: fileStore.kind === "indexeddb"
301
+ ? Array.from(fallbackBlockPayloads.entries()).map(([path, block]) => ({ path, block }))
302
+ : [],
303
+ };
304
+ const write = persistQueue.then(() => persistence.write(snapshot));
305
+ persistQueue = write.catch(() => undefined);
306
+ await write;
307
+ }
308
+ function entriesForScope(scope) {
309
+ return sortEntries(state.entries.filter((entry) => entry.scope === scope));
310
+ }
311
+ const storagePort = {
312
+ kind: adapter.kind === "custom" ? "custom" : "browser-indexeddb-opfs",
313
+ capabilities,
314
+ ...createStorageReadMethods(() => state.entries, entriesForScope),
315
+ findByFileId(fileId) {
316
+ return state.entries.find((entry) => entry.fileId === fileId);
317
+ },
318
+ findUnsynced(options) {
319
+ const entries = state.entries
320
+ .filter((entry) => entry.fileId === null)
321
+ .sort((a, b) => a.createdAt.localeCompare(b.createdAt));
322
+ return options?.limit === undefined
323
+ ? entries
324
+ : entries.slice(0, options.limit);
325
+ },
326
+ async readEnvelope(scope, collectedAt) {
327
+ const path = envelopePath(scope, collectedAt);
328
+ const envelope = (await fileStore.readEnvelope(path)) ??
329
+ (await fallbackStore.readEnvelope(path));
330
+ if (!envelope) {
331
+ throw new Error("Envelope not found");
332
+ }
333
+ return envelope;
334
+ },
335
+ async writeEnvelope(envelope) {
336
+ const path = envelopePath(envelope.scope, envelope.collectedAt);
337
+ const sizeBytes = await fileStore.writeEnvelope(path, envelope);
338
+ if (fileStore.kind !== "indexeddb") {
339
+ await fallbackStore.deleteEnvelope(path);
340
+ }
341
+ await persist();
342
+ return {
343
+ path,
344
+ relativePath: path,
345
+ sizeBytes,
346
+ };
347
+ },
348
+ async readScopeBlocks(scope, collectedAt, options) {
349
+ const manifestPath = blockManifestPath(scope, collectedAt);
350
+ const manifest = (await fileStore.readBlockManifest?.(manifestPath)) ??
351
+ (fileStore === fallbackStore
352
+ ? null
353
+ : await fallbackStore.readBlockManifest?.(manifestPath)) ??
354
+ null;
355
+ if (!manifest) {
356
+ throw new DataBlockStorageError("block_manifest_not_found", `Block manifest not found for ${scope} at ${collectedAt}`);
357
+ }
358
+ const cursorResult = options.cursor
359
+ ? validateDataBlockCursor(options.cursor, { scope, collectedAt })
360
+ : { ok: true, cursor: null };
361
+ if (!cursorResult.ok) {
362
+ throw new DataBlockStorageError("cursor_invalid", cursorResult.error.message);
363
+ }
364
+ const maxBytes = Math.max(1, options.maxBytes);
365
+ const startIndex = cursorResult.cursor?.blockIndex ?? 0;
366
+ const startOffset = cursorResult.cursor?.intraBlockOffset ?? 0;
367
+ const blocks = [];
368
+ let bytes = 0;
369
+ let nextIndex = startIndex;
370
+ let nextOffset;
371
+ while (nextIndex < manifest.blocks.length) {
372
+ const ref = manifest.blocks[nextIndex];
373
+ if (!ref) {
374
+ nextIndex += 1;
375
+ continue;
376
+ }
377
+ const offset = nextIndex === startIndex ? startOffset : 0;
378
+ if (offset >= ref.sizeBytes) {
379
+ nextIndex += 1;
380
+ continue;
381
+ }
382
+ if (blocks.length > 0 &&
383
+ offset === 0 &&
384
+ bytes + ref.sizeBytes > maxBytes) {
385
+ break;
386
+ }
387
+ const block = await readBlockPayloadFromStores(fileStore, fallbackStore, blockPayloadPath(scope, collectedAt, ref.id));
388
+ if (!block) {
389
+ throw new DataBlockStorageError("block_payload_not_found", `Block payload not found for ${scope} at ${collectedAt}: ${ref.id}`);
390
+ }
391
+ const page = pageBlock(block, offset, maxBytes - bytes);
392
+ blocks.push(page.block);
393
+ bytes += page.block.sizeBytes;
394
+ if (page.nextOffset !== undefined) {
395
+ nextOffset = page.nextOffset;
396
+ break;
397
+ }
398
+ nextIndex += 1;
399
+ }
400
+ return {
401
+ scope: manifest.scope,
402
+ collectedAt: manifest.collectedAt,
403
+ ...(manifest.schemaId ? { schemaId: manifest.schemaId } : {}),
404
+ contentKind: manifest.contentKind,
405
+ blocks,
406
+ ...(nextOffset !== undefined || nextIndex < manifest.blocks.length
407
+ ? {
408
+ nextCursor: encodeDataBlockCursor({
409
+ scope,
410
+ collectedAt,
411
+ blockIndex: nextIndex,
412
+ ...(nextOffset === undefined
413
+ ? {}
414
+ : { intraBlockOffset: nextOffset }),
415
+ }),
416
+ }
417
+ : {}),
418
+ warnings: manifest.warnings,
419
+ };
420
+ },
421
+ async hasScopeBlocks(scope, collectedAt) {
422
+ const manifestPath = blockManifestPath(scope, collectedAt);
423
+ const manifest = (await fileStore.readBlockManifest?.(manifestPath)) ??
424
+ (fileStore === fallbackStore
425
+ ? null
426
+ : await fallbackStore.readBlockManifest?.(manifestPath)) ??
427
+ null;
428
+ return Boolean(manifest);
429
+ },
430
+ async writeBlockManifest(scope, collectedAt, manifest, blocks) {
431
+ if (!fileStore.writeBlockManifest || !fileStore.writeBlockPayload) {
432
+ throw new Error("Block sidecar storage is not available");
433
+ }
434
+ await fileStore.deleteBlockTree?.(blockTreePath(scope, collectedAt));
435
+ for (const block of blocks) {
436
+ await fileStore.writeBlockPayload(blockPayloadPath(scope, collectedAt, block.id), block);
437
+ }
438
+ await fileStore.writeBlockManifest(blockManifestPath(scope, collectedAt), manifest);
439
+ if (fileStore.kind !== "indexeddb") {
440
+ await fallbackStore.deleteBlockTree?.(blockTreePath(scope, collectedAt));
441
+ }
442
+ await persist();
443
+ },
444
+ async insertEntry(entry) {
445
+ const indexed = {
446
+ ...entry,
447
+ schemaId: entry.schemaId ?? null,
448
+ id: state.nextId,
449
+ createdAt: new Date().toISOString(),
450
+ };
451
+ state = {
452
+ ...state,
453
+ nextId: state.nextId + 1,
454
+ entries: [
455
+ ...state.entries.filter((item) => item.path !== entry.path),
456
+ indexed,
457
+ ],
458
+ };
459
+ await persist();
460
+ return indexed;
461
+ },
462
+ async updateFileId(path, fileId) {
463
+ let updated = false;
464
+ state = {
465
+ ...state,
466
+ entries: state.entries.map((entry) => {
467
+ if (entry.path !== path)
468
+ return entry;
469
+ updated = true;
470
+ return { ...entry, fileId };
471
+ }),
472
+ };
473
+ if (updated) {
474
+ await persist();
475
+ }
476
+ return updated;
477
+ },
478
+ async deleteScope(scope) {
479
+ let deleted = 0;
480
+ const deletedPaths = [];
481
+ const deletedBlockTrees = [];
482
+ state = {
483
+ ...state,
484
+ entries: state.entries.filter((entry) => {
485
+ if (entry.scope !== scope)
486
+ return true;
487
+ deleted += 1;
488
+ deletedPaths.push(envelopePath(entry.scope, entry.collectedAt));
489
+ deletedBlockTrees.push(blockTreePath(entry.scope, entry.collectedAt));
490
+ return false;
491
+ }),
492
+ };
493
+ await Promise.all([
494
+ ...deletedPaths.flatMap((path) => [
495
+ fileStore.deleteEnvelope(path),
496
+ fallbackStore.deleteEnvelope(path),
497
+ ]),
498
+ ...deletedBlockTrees.flatMap((path) => [
499
+ fileStore.deleteBlockTree?.(path),
500
+ fallbackStore.deleteBlockTree?.(path),
501
+ ]),
502
+ ].filter((promise) => promise !== undefined));
503
+ await persist();
504
+ return deleted;
505
+ },
506
+ async deleteByFileId(fileId) {
507
+ const entry = state.entries.find((e) => e.fileId === fileId);
508
+ if (!entry)
509
+ return false;
510
+ const blobPath = envelopePath(entry.scope, entry.collectedAt);
511
+ // Delete the blob FIRST (both stores tolerate a missing blob); only drop the index row once
512
+ // the blob is gone. If blob deletion throws for a real reason, the row is preserved so the
513
+ // next sync retry re-attempts instead of orphaning the local blob.
514
+ await Promise.all([
515
+ fileStore.deleteEnvelope(blobPath),
516
+ fallbackStore.deleteEnvelope(blobPath),
517
+ fileStore.deleteBlockTree?.(blockTreePath(entry.scope, entry.collectedAt)) ?? Promise.resolve(),
518
+ fallbackStore.deleteBlockTree?.(blockTreePath(entry.scope, entry.collectedAt)) ?? Promise.resolve(),
519
+ ]);
520
+ state = {
521
+ ...state,
522
+ entries: state.entries.filter((e) => e !== entry),
523
+ };
524
+ await persist();
525
+ return true;
526
+ },
527
+ };
528
+ if (fileStore.readEnvelopePreview) {
529
+ storagePort.readEnvelopePreview = async (scope, collectedAt, { maxBytes }) => {
530
+ const path = envelopePath(scope, collectedAt);
531
+ const primaryPreview = await readPreviewFromFileStore(fileStore, path, maxBytes);
532
+ const preview = primaryPreview ??
533
+ (fileStore === fallbackStore
534
+ ? null
535
+ : await readPreviewFromFileStore(fallbackStore, path, maxBytes));
536
+ if (!preview) {
537
+ throw new Error("Envelope not found");
538
+ }
539
+ return preview;
540
+ };
541
+ }
542
+ return storagePort;
543
+ }
544
+ async function readPreviewFromFileStore(store, path, maxBytes) {
545
+ return (await store.readEnvelopePreview?.(path, { maxBytes })) ?? null;
546
+ }
547
+ function pageBlock(block, offsetBytes, maxBytes) {
548
+ const text = typeof block.value === "string" ? block.value : JSON.stringify(block.value);
549
+ const bytes = textEncoder.encode(text);
550
+ if (offsetBytes <= 0 && bytes.length <= maxBytes) {
551
+ return { block };
552
+ }
553
+ const start = Math.min(Math.max(0, offsetBytes), bytes.length);
554
+ const end = Math.min(bytes.length, start + Math.max(1, maxBytes));
555
+ const value = textDecoder.decode(bytes.slice(start, end));
556
+ return {
557
+ block: {
558
+ ...block,
559
+ path: `${block.path}[bytes ${start}:${end}]`,
560
+ mediaType: block.mediaType.startsWith("text/")
561
+ ? block.mediaType
562
+ : TEXT_PAGE_MEDIA_TYPE,
563
+ value,
564
+ sizeBytes: end - start,
565
+ truncated: end < bytes.length,
566
+ },
567
+ ...(end < bytes.length ? { nextOffset: end } : {}),
568
+ };
569
+ }
570
+ async function readBlockPayloadFromStores(primary, fallback, path) {
571
+ return ((await primary.readBlockPayload?.(path)) ??
572
+ (primary === fallback ? null : await fallback.readBlockPayload?.(path)) ??
573
+ null);
574
+ }
575
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sDAAsD,CAAC;AAK9D,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uDAAuD,CAAC;AAoD/D,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAC/D,MAAM,wBAAwB,GAAG,OAAO,CAAC;AACzC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC;AACjD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,SAAS,YAAY;IACnB,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,WAAmB;IACtD,OAAO,QAAQ,KAAK,IAAI,WAAW,OAAO,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,WAAmB;IACvD,OAAO,UAAU,KAAK,IAAI,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,WAAmB;IAC3D,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,WAAmB,EACnB,OAAe;IAEf,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC;AACpF,CAAC;AAED,SAAS,cAAc,CACrB,KAAyC;IAEzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;SACjC,CAAC,CAAC;QACH,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;QAC1C,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,SAAwC,EACxC,iBAAiD,IAAI,GAAG,EAAE,EAC1D,gBAA6C,IAAI,GAAG,EAAE;IAEtD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,CAAC,YAAY,CAAC,IAAI;YACrB,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;YAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC3B,OAAO,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ;YAChC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,IAAI;YACvB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,IAAI;YAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ;YACrC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,IAAI;YACzB,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK;YACjC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,UAAU;YAC9B,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YAC5C,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,GAAmB,EAAE,UAAkB;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAA+B,EAC/B,KAAe;IAEf,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAA+B,EAC/B,IAAY,EACZ,OAAkC;IAElC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CACL,OAAO,SAAS,KAAK,WAAW;QAChC,OAAO,SAAS,CAAC,OAAO,EAAE,YAAY,KAAK,UAAU,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B;IACjD,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,CAAC,YAAY,CAAC,IAAI;YACrB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAqB,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,yBAAyB,CAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,EACpC,QAAQ,EACR;oBACE,eAAe,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ;iBACtC,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,IAAI;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxD,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAChE,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,IAAI;YAC1B,OAAO,gBAAgB,CAAoB,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ;YACrC,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,IAAI;YACzB,OAAO,gBAAgB,CAAiB,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK;YACjC,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,UAAU;YAC9B,MAAM,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAA+B,EAC/B,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAM,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAA+B,EAC/B,IAAY,EACZ,KAAc;IAEd,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,IAA+B,EAC/B,UAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAClC,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,SAAiB;IAEjB,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1C,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE;YAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAoD,EACpD,IAAwB,EACxB,QAAkD;IAElD,OAAO,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAC1D,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEhC,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,WAAW,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC1C,WAAW,CAAC,OAAO,GAAG,GAAG,EAAE;YACzB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,UAA6C,EAAE;IAE/C,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,uBAAuB;QACjD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,wBAAwB;QACxD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,sBAAsB;KAC3C,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAEzC,QAAQ,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO,KAAK,IAAI,IAAI,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK;YACf,MAAM,uBAAuB,CAC3B,QAAQ,EACR,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAC1C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA6B,EAC7B,cAAwC,gCAAgC,EAAE,EAC1E,aAAmC;IAEnC,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QAChC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC;QAClD,QAAQ;KACT,CAAC,CACH,CAAC;IACF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CACpC,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAC3E,CAAC;IACF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CACpE,CAAC;IACF,MAAM,aAAa,GAAG,oCAAoC,CACxD,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,CACtB,CAAC;IACF,MAAM,SAAS,GACb,aAAa;QACb,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC;YACrD,CAAC,CAAC,MAAM,6BAA6B,EAAE;YACvC,CAAC,CAAC,aAAa,CAAC,CAAC;IACrB,MAAM,YAAY,GAA8B;QAC9C,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;QAC5D,KAAK,EAAE,SAAS,CAAC,IAAI;QACrB,aAAa,EAAE,MAAM,eAAe,EAAE;KACvC,CAAC;IAEF,IAAI,YAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,KAAK,UAAU,OAAO;QACpB,MAAM,QAAQ,GAAG;YACf,GAAG,KAAK;YACR,SAAS,EACP,SAAS,CAAC,IAAI,KAAK,WAAW;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACxC,CAAC,CAAC,EAAE;YACR,cAAc,EACZ,SAAS,CAAC,IAAI,KAAK,WAAW;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAC9C,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAC3C;gBACH,CAAC,CAAC,EAAE;YACR,aAAa,EACX,SAAS,CAAC,IAAI,KAAK,WAAW;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAC7C,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACrC;gBACH,CAAC,CAAC,EAAE;SACT,CAAC;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;IAED,SAAS,eAAe,CAAC,KAAa;QACpC,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,WAAW,GAEb;QACF,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB;QACrE,YAAY;QACZ,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC;QAEjE,YAAY,CAAC,MAAM;YACjB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAChE,CAAC;QAED,YAAY,CAAC,OAAO;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;iBAC1B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;iBACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1D,OAAO,OAAO,EAAE,KAAK,KAAK,SAAS;gBACjC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW;YACnC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC9C,MAAM,QAAQ,GACZ,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,QAAQ;YAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChE,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO;gBACL,IAAI;gBACJ,YAAY,EAAE,IAAI;gBAClB,SAAS;aACV,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO;YAC/C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,QAAQ,GACZ,CAAC,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC,SAAS,KAAK,aAAa;oBAC1B,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;gBAC1D,IAAI,CAAC;YACP,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,qBAAqB,CAC7B,0BAA0B,EAC1B,gCAAgC,KAAK,OAAO,WAAW,EAAE,CAC1D,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM;gBACjC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBACjE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAC7B,gBAAgB,EAChB,YAAY,CAAC,KAAK,CAAC,OAAO,CAC3B,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAqB,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,SAAS,GAAG,UAAU,CAAC;YAC3B,IAAI,UAA8B,CAAC;YAEnC,OAAO,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,SAAS,IAAI,CAAC,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAC5B,SAAS,IAAI,CAAC,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,IACE,MAAM,CAAC,MAAM,GAAG,CAAC;oBACjB,MAAM,KAAK,CAAC;oBACZ,KAAK,GAAG,GAAG,CAAC,SAAS,GAAG,QAAQ,EAChC,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAC5C,SAAS,EACT,aAAa,EACb,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAC7C,CAAC;gBACF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,qBAAqB,CAC7B,yBAAyB,EACzB,+BAA+B,KAAK,OAAO,WAAW,KAAK,GAAG,CAAC,EAAE,EAAE,CACpE,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBAE9B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAClC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC7B,MAAM;gBACR,CAAC;gBAED,SAAS,IAAI,CAAC,CAAC;YACjB,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,MAAM;gBACN,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM;oBAChE,CAAC,CAAC;wBACE,UAAU,EAAE,qBAAqB,CAAC;4BAChC,KAAK;4BACL,WAAW;4BACX,UAAU,EAAE,SAAS;4BACrB,GAAG,CAAC,UAAU,KAAK,SAAS;gCAC1B,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;yBACtC,CAAC;qBACH;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW;YACrC,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,QAAQ,GACZ,CAAC,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC,SAAS,KAAK,aAAa;oBAC1B,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;gBAC1D,IAAI,CAAC;YACP,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;YAC3D,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,SAAS,CAAC,iBAAiB,CAC/B,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,EAC9C,KAAK,CACN,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,CAAC,kBAAkB,CAChC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,EACrC,QAAQ,CACT,CAAC;YACF,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,aAAa,CAAC,eAAe,EAAE,CACnC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAClC,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAK;YACrB,MAAM,OAAO,GAAe;gBAC1B,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;gBAChC,EAAE,EAAE,KAAK,CAAC,MAAM;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACxB,OAAO,EAAE;oBACP,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;oBAC3D,OAAO;iBACR;aACF,CAAC;YACF,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM;YAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;wBAAE,OAAO,KAAK,CAAC;oBACtC,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC,CAAC;aACH,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,EAAE,CAAC;YAClB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAK;YACrB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,MAAM,iBAAiB,GAAa,EAAE,CAAC;YACvC,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAC;oBACvC,OAAO,IAAI,CAAC,CAAC;oBACb,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;oBAChE,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;oBACtE,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;aACH,CAAC;YACF,MAAM,OAAO,CAAC,GAAG,CACf;gBACE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC9B,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC;iBACnC,CAAC;gBACF,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrC,SAAS,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC;oBACjC,aAAa,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC;iBACtC,CAAC;aACH,CAAC,MAAM,CAAC,CAAC,OAAO,EAA4B,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CACvE,CAAC;YACF,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,MAAM;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9D,4FAA4F;YAC5F,2FAA2F;YAC3F,mEAAmE;YACnE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAClC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC;gBACtC,SAAS,CAAC,eAAe,EAAE,CACzB,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAC9C,IAAI,OAAO,CAAC,OAAO,EAAE;gBACtB,aAAa,CAAC,eAAe,EAAE,CAC7B,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAC9C,IAAI,OAAO,CAAC,OAAO,EAAE;aACvB,CAAC,CAAC;YACH,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;aAClD,CAAC;YACF,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAClC,WAAW,CAAC,mBAAmB,GAAG,KAAK,EACrC,KAAK,EACL,WAAW,EACX,EAAE,QAAQ,EAAE,EACZ,EAAE;YACF,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,MAAM,wBAAwB,CACnD,SAAS,EACT,IAAI,EACJ,QAAQ,CACT,CAAC;YACF,MAAM,OAAO,GACX,cAAc;gBACd,CAAC,SAAS,KAAK,aAAa;oBAC1B,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,MAAM,wBAAwB,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAA0B,EAC1B,IAAY,EACZ,QAAgB;IAEhB,OAAO,CAAC,MAAM,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,SAAS,SAAS,CAChB,KAAqB,EACrB,WAAmB,EACnB,QAAgB;IAEhB,MAAM,IAAI,GACR,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,WAAW,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,KAAK,EAAE;YACL,GAAG,KAAK;YACR,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,GAAG,GAAG;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,SAAS;gBACjB,CAAC,CAAC,oBAAoB;YACxB,KAAK;YACL,SAAS,EAAE,GAAG,GAAG,KAAK;YACtB,SAAS,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM;SAC9B;QACD,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAA4B,EAC5B,QAA6B,EAC7B,IAAY;IAEZ,OAAO,CACL,CAAC,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CACL,CAAC;AACJ,CAAC"}
package/dist/sync.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
2
+ import type { DataStoragePort } from "@opendatalabs/personal-server-ts-core/ports";
3
+ import { type SyncManager } from "@opendatalabs/personal-server-ts-core/sync/manager";
4
+ import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
5
+ import { type GatewayClient } from "@opendatalabs/vana-sdk/browser";
6
+ import type { PsLiteStateStore } from "./state.js";
7
+ import type { DiagnosticsRecorder } from "./diagnostics.js";
8
+ interface SyncCursor {
9
+ read(): Promise<string | null>;
10
+ write(timestamp: string): Promise<void>;
11
+ }
12
+ export interface PsLiteSyncOptions {
13
+ config: ServerConfig;
14
+ stateStore: PsLiteStateStore;
15
+ storage: DataStoragePort;
16
+ ownerAddress?: `0x${string}`;
17
+ ownerSignature: `0x${string}`;
18
+ serverAccount: ServerAccount;
19
+ gateway?: GatewayClient;
20
+ diagnostics?: DiagnosticsRecorder;
21
+ }
22
+ export declare function createPsLiteSyncCursor(stateStore: PsLiteStateStore): SyncCursor;
23
+ export declare function createPsLiteSyncManager(options: PsLiteSyncOptions): Promise<{
24
+ syncManager: SyncManager;
25
+ serverOwner: `0x${string}`;
26
+ }>;
27
+ export {};
28
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,oDAAoD,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQ5D,UAAU,UAAU;IAClB,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAWD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,gBAAgB,GAC3B,UAAU,CAaZ;AAwED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAAC,CAmEnE"}