@tensorix/metahub 0.5.8 → 0.6.0

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 (120) hide show
  1. package/README.md +35 -14
  2. package/README.zh-CN.md +41 -13
  3. package/dist/cli.js +5175 -2272
  4. package/dist/cli.js.map +69 -48
  5. package/dist/core/blobs.d.ts.map +1 -1
  6. package/dist/core/blocks.d.ts +6 -2
  7. package/dist/core/blocks.d.ts.map +1 -1
  8. package/dist/core/compact.d.ts.map +1 -1
  9. package/dist/core/crdt.d.ts +5 -6
  10. package/dist/core/crdt.d.ts.map +1 -1
  11. package/dist/core/db.d.ts.map +1 -1
  12. package/dist/core/documents.d.ts +39 -0
  13. package/dist/core/documents.d.ts.map +1 -1
  14. package/dist/core/errors.d.ts +6 -1
  15. package/dist/core/errors.d.ts.map +1 -1
  16. package/dist/core/history-archive.d.ts +41 -0
  17. package/dist/core/history-archive.d.ts.map +1 -0
  18. package/dist/core/history.d.ts.map +1 -1
  19. package/dist/core/hlc.d.ts +4 -0
  20. package/dist/core/hlc.d.ts.map +1 -1
  21. package/dist/core/node.d.ts.map +1 -1
  22. package/dist/core/properties.d.ts +6 -0
  23. package/dist/core/properties.d.ts.map +1 -1
  24. package/dist/core/replica/drafts.d.ts +26 -0
  25. package/dist/core/replica/drafts.d.ts.map +1 -0
  26. package/dist/core/replica/rpc.d.ts +8 -0
  27. package/dist/core/replica/rpc.d.ts.map +1 -0
  28. package/dist/core/replica/service.d.ts +970 -0
  29. package/dist/core/replica/service.d.ts.map +1 -0
  30. package/dist/core/replica/sync.d.ts +55 -0
  31. package/dist/core/replica/sync.d.ts.map +1 -0
  32. package/dist/core/schema-init.d.ts +1 -1
  33. package/dist/core/schema-init.d.ts.map +1 -1
  34. package/dist/core/search.d.ts +34 -0
  35. package/dist/core/search.d.ts.map +1 -1
  36. package/dist/core/snapshot.d.ts.map +1 -1
  37. package/dist/core/sync/bucket-v2.d.ts +110 -0
  38. package/dist/core/sync/bucket-v2.d.ts.map +1 -0
  39. package/dist/core/sync/client.d.ts +14 -1
  40. package/dist/core/sync/client.d.ts.map +1 -1
  41. package/dist/core/sync/commit-log.d.ts +41 -0
  42. package/dist/core/sync/commit-log.d.ts.map +1 -0
  43. package/dist/core/sync/current-checkpoint.d.ts +47 -0
  44. package/dist/core/sync/current-checkpoint.d.ts.map +1 -0
  45. package/dist/core/sync/data-map-db.d.ts.map +1 -1
  46. package/dist/core/sync/data-version.d.ts +29 -0
  47. package/dist/core/sync/data-version.d.ts.map +1 -0
  48. package/dist/core/sync/drop-keys.d.ts.map +1 -1
  49. package/dist/core/sync/drop-pull.d.ts.map +1 -1
  50. package/dist/core/sync/e2ee.d.ts +5 -0
  51. package/dist/core/sync/e2ee.d.ts.map +1 -1
  52. package/dist/core/sync/enroll.d.ts +2 -0
  53. package/dist/core/sync/enroll.d.ts.map +1 -1
  54. package/dist/core/sync/history-observation.d.ts +5 -0
  55. package/dist/core/sync/history-observation.d.ts.map +1 -0
  56. package/dist/core/sync/http-status.d.ts.map +1 -1
  57. package/dist/core/sync/page-messages.d.ts +8 -0
  58. package/dist/core/sync/page-messages.d.ts.map +1 -1
  59. package/dist/core/sync/peer-v2.d.ts +9 -0
  60. package/dist/core/sync/peer-v2.d.ts.map +1 -0
  61. package/dist/core/sync/peers.d.ts +1 -0
  62. package/dist/core/sync/peers.d.ts.map +1 -1
  63. package/dist/core/sync/portable-json.d.ts +5 -0
  64. package/dist/core/sync/portable-json.d.ts.map +1 -0
  65. package/dist/core/sync/protocol.d.ts +32 -0
  66. package/dist/core/sync/protocol.d.ts.map +1 -1
  67. package/dist/core/sync/recovery-desktop.d.ts +6 -0
  68. package/dist/core/sync/recovery-desktop.d.ts.map +1 -0
  69. package/dist/core/sync/recovery-intent.d.ts +7 -0
  70. package/dist/core/sync/recovery-intent.d.ts.map +1 -0
  71. package/dist/core/sync/recovery-local.d.ts +21 -0
  72. package/dist/core/sync/recovery-local.d.ts.map +1 -0
  73. package/dist/core/sync/recovery-v2.d.ts +40 -0
  74. package/dist/core/sync/recovery-v2.d.ts.map +1 -0
  75. package/dist/core/sync/retention-executor.d.ts +77 -0
  76. package/dist/core/sync/retention-executor.d.ts.map +1 -0
  77. package/dist/core/sync/retention-protocol.d.ts +74 -0
  78. package/dist/core/sync/retention-protocol.d.ts.map +1 -0
  79. package/dist/core/sync/retention-state.d.ts +87 -0
  80. package/dist/core/sync/retention-state.d.ts.map +1 -0
  81. package/dist/core/sync/routes.d.ts +1 -1
  82. package/dist/core/sync/routes.d.ts.map +1 -1
  83. package/dist/core/sync/server.d.ts +1 -1
  84. package/dist/core/sync/server.d.ts.map +1 -1
  85. package/dist/core/sync/share-export.d.ts.map +1 -1
  86. package/dist/core/sync/share-serve.d.ts.map +1 -1
  87. package/dist/core/sync/share-tools.d.ts +10 -0
  88. package/dist/core/sync/share-tools.d.ts.map +1 -0
  89. package/dist/core/sync/storage-s3-bun.d.ts +2 -1
  90. package/dist/core/sync/storage-s3-bun.d.ts.map +1 -1
  91. package/dist/core/sync/storage-s3-fetch.d.ts +8 -0
  92. package/dist/core/sync/storage-s3-fetch.d.ts.map +1 -0
  93. package/dist/core/sync/storage-s3-sign.d.ts +3 -0
  94. package/dist/core/sync/storage-s3-sign.d.ts.map +1 -1
  95. package/dist/core/sync/storage-v2.d.ts +18 -0
  96. package/dist/core/sync/storage-v2.d.ts.map +1 -0
  97. package/dist/core/sync/storage.d.ts +47 -6
  98. package/dist/core/sync/storage.d.ts.map +1 -1
  99. package/dist/core/sync/transport.d.ts +4 -0
  100. package/dist/core/sync/transport.d.ts.map +1 -0
  101. package/dist/core/sync/v2-ingest.d.ts +10 -0
  102. package/dist/core/sync/v2-ingest.d.ts.map +1 -0
  103. package/dist/core/sync/v2-maintenance.d.ts +10 -0
  104. package/dist/core/sync/v2-maintenance.d.ts.map +1 -0
  105. package/dist/db-worker.js +212 -160
  106. package/dist/edge-worker.js +4952 -186
  107. package/dist/index.js +9243 -6455
  108. package/dist/index.js.map +67 -47
  109. package/dist/metahub-sdk.js +5 -5
  110. package/dist/mh-runtime.js +2 -2
  111. package/dist/shared/views/date.d.ts +21 -0
  112. package/dist/shared/views/date.d.ts.map +1 -0
  113. package/dist/shared/views/model.d.ts +65 -0
  114. package/dist/shared/views/model.d.ts.map +1 -0
  115. package/dist/shared/views/query.d.ts +47 -0
  116. package/dist/shared/views/query.d.ts.map +1 -0
  117. package/dist/sw.js +9 -9
  118. package/dist/webui/server/routes.d.ts.map +1 -1
  119. package/dist/webui.js +131 -131
  120. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/core/replica/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { DbDriver } from "../driver.ts";
2
+ import { type SyncOpts, type SyncResult } from "../sync/client.ts";
3
+ import { type S3Config } from "../sync/storage.ts";
4
+ import { type ReplicaChange } from "./service.ts";
5
+ export type ReplicaSyncTarget = {
6
+ kind: "http";
7
+ url: string;
8
+ token?: string;
9
+ fetch?: SyncOpts["fetch"];
10
+ } | {
11
+ kind: "s3";
12
+ config: S3Config;
13
+ };
14
+ export interface ReplicaSyncStatus {
15
+ syncing: boolean;
16
+ connected: boolean;
17
+ authInvalid: boolean;
18
+ hydrationReady: boolean;
19
+ /** Number of local changes still unacknowledged by at least one target. */
20
+ pendingPush: number;
21
+ /** A target has not yet returned an exhausted pull page. */
22
+ pendingPull: boolean;
23
+ phase: "idle" | "syncing" | "hydrating" | "offline" | "error";
24
+ lastSyncAt: number | null;
25
+ lastSuccessAt: number | null;
26
+ error: string | null;
27
+ pushed: number;
28
+ pulled: number;
29
+ warnings: string[];
30
+ }
31
+ export interface ReplicaSyncOptions {
32
+ /** Secrets are resolved by the owner; never copied into SQLite. */
33
+ targets: () => readonly ReplicaSyncTarget[];
34
+ onChange?: (change: ReplicaChange) => void;
35
+ onStatus?: (status: ReplicaSyncStatus) => void;
36
+ intervalMs?: number;
37
+ debounceMs?: number;
38
+ batchSize?: number;
39
+ /** Bound each turn so a large hydration yields to other targets and UI work. */
40
+ pagesPerRound?: number;
41
+ syncTarget?: (target: ReplicaSyncTarget, signal: AbortSignal) => Promise<SyncResult>;
42
+ }
43
+ /** One coalescing scheduler per workspace; local reads and commands remain
44
+ * available between bounded ingestion pages, even while transports are offline. */
45
+ export declare function createReplicaSync(db: DbDriver, options: ReplicaSyncOptions): {
46
+ readonly status: ReplicaSyncStatus;
47
+ onStatus(listener: (status: ReplicaSyncStatus) => void): () => void;
48
+ start(): void;
49
+ stop(): Promise<void>;
50
+ setActive(value: boolean): void;
51
+ requestSync(): void;
52
+ syncNow: () => Promise<void>;
53
+ };
54
+ export type ReplicaSync = ReturnType<typeof createReplicaSync>;
55
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/replica/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGtF,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAExF,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AACrC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,OAAO,EAAE,MAAM,SAAS,iBAAiB,EAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACtF;AAID;mFACmF;AACnF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB;;uBAyIpD,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI;;;qBAUrC,OAAO;;mBA3BN,OAAO,CAAC,IAAI,CAAC;EAmClC;AACD,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -4,7 +4,7 @@ export declare function ftsAvailable(db: DbDriver): boolean;
4
4
  /**
5
5
  * Migrate legacy EAV records (record_values: one row per cell) to the JSON
6
6
  * layout (records.data: one row per record). Idempotent — keyed off schema
7
- * shape, no version flag. A no-op for fresh databases.
7
+ * shape, no version flag. Also installs the derived record paging index.
8
8
  */
9
9
  export declare function migrateRecords(db: DbDriver): void;
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schema-init.d.ts","sourceRoot":"","sources":["../../src/core/schema-init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQrD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAO5C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAKlD;AAeD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsBjD;AAED;;;;GAIG;AACH;;;yDAGyD;AACzD,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAUhD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsB/C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAQnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAInD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAO/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA+BxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsDzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAanD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA+BrD;AAkCD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAEtD;AAED;6EAC6E;AAC7E,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAe7C"}
1
+ {"version":3,"file":"schema-init.d.ts","sourceRoot":"","sources":["../../src/core/schema-init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQrD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAO5C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAKlD;AAeD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA4BjD;AAED;;;;GAIG;AACH;;;yDAGyD;AACzD,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAUhD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsB/C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAQnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAInD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAO/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA+BxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsDzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAanD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA+BrD;AAkCD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAEtD;AAED;6EAC6E;AAC7E,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAgB7C"}
@@ -6,9 +6,43 @@ export interface SearchHit {
6
6
  title?: string;
7
7
  snippet: string;
8
8
  }
9
+ /** Maintain at most `limit` objects or oplog entries per synchronous turn. The
10
+ * rebuild checkpoint and index rows commit together, so app suspension or close
11
+ * can resume without indexing the whole hub on the first keystroke. */
12
+ export declare function updateSearchIndexStep(db: DbDriver, limit?: number): {
13
+ ready: boolean;
14
+ available: boolean;
15
+ };
16
+ /** Async facade for a native JS-thread owner. Every database command completes
17
+ * before yielding; cancellation prevents access after the owner closes SQLite. */
18
+ export declare function searchIncrementally(db: DbDriver, query: string, opts?: {
19
+ limit?: number;
20
+ batchSize?: number;
21
+ signal?: AbortSignal;
22
+ }): Promise<SearchHit[]>;
9
23
  /** Force a full rebuild of the search index (maintenance / repair). */
10
24
  export declare function rebuildSearchIndex(db: DbDriver): boolean;
11
25
  export declare function search(db: DbDriver, query: string, opts?: {
12
26
  limit?: number;
27
+ maintainIndex?: boolean;
13
28
  }): SearchHit[];
29
+ export interface SearchQuery {
30
+ offset?: number;
31
+ limit?: number;
32
+ }
33
+ export interface SearchPage {
34
+ hits: SearchHit[];
35
+ offset: number;
36
+ limit: number;
37
+ hasMore: boolean;
38
+ }
39
+ /** Backend selection is based on the whole query, never the requested page.
40
+ * Exhausting FTS therefore cannot unexpectedly switch later pages to LIKE. */
41
+ export declare function querySearch(db: DbDriver, text: string, query?: SearchQuery & {
42
+ maintainIndex?: boolean;
43
+ }): SearchPage;
44
+ export declare function querySearchIncrementally(db: DbDriver, text: string, query?: SearchQuery & {
45
+ batchSize?: number;
46
+ signal?: AbortSignal;
47
+ }): Promise<SearchPage>;
14
48
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAwKD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAIxD;AAoFD,wBAAgB,MAAM,CACpB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,SAAS,EAAE,CAWb"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AA8KD;;uEAEuE;AACvE,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,SAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAqCvG;AAED;kFACkF;AAClF,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAQpK;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAIxD;AAoFD,wBAAgB,MAAM,CACpB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,SAAS,EAAE,CAWb;AAGD,MAAM,WAAW,WAAW;IAAG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAChE,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAmBlG;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,WAAW,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,UAAU,CAezH;AAED,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtK"}
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/core/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AASjE,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAoBD,wFAAwF;AACxF,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB3E;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,CAAC,CAItB;AAED,iEAAiE;AACjE,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBzE;AAoCD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,eAAe,EACpB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/core/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AASjE,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAoBD,wFAAwF;AACxF,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB3E;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,CAAC,CAItB;AAED,iEAAiE;AACjE,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBzE;AAoCD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,eAAe,EACpB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,OAAO,CAAC,aAAa,CAAC,CAiDxB"}
@@ -0,0 +1,110 @@
1
+ import type { DbDriver } from "../driver.ts";
2
+ import { z } from "zod";
3
+ import type { StorageClient, S3Config } from "./storage.ts";
4
+ import { type CommitCodec } from "./commit-log.ts";
5
+ import { type CurrentCheckpoint } from "./current-checkpoint.ts";
6
+ import { MhError } from "../errors.ts";
7
+ export declare const BucketRootSchema: z.ZodObject<{
8
+ protocolVersion: z.ZodLiteral<2>;
9
+ workspaceId: z.ZodString;
10
+ checkpoint: z.ZodString;
11
+ }, z.core.$strict>;
12
+ export declare const BucketBatchSchema: z.ZodObject<{
13
+ protocolVersion: z.ZodLiteral<2>;
14
+ workspaceId: z.ZodString;
15
+ epoch: z.ZodNumber;
16
+ member: z.ZodString;
17
+ first: z.ZodNumber;
18
+ last: z.ZodNumber;
19
+ changes: z.ZodArray<z.ZodObject<{
20
+ hlc: z.ZodString;
21
+ node_id: z.ZodString;
22
+ dataset: z.ZodString;
23
+ row_id: z.ZodString;
24
+ col: z.ZodString;
25
+ value: z.ZodNullable<z.ZodString>;
26
+ txn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
27
+ }, z.core.$strip>>;
28
+ bases: z.ZodOptional<z.ZodArray<z.ZodNullable<z.ZodString>>>;
29
+ }, z.core.$strict>;
30
+ export type BucketBatch = z.infer<typeof BucketBatchSchema>;
31
+ export type BucketRoot = z.infer<typeof BucketRootSchema>;
32
+ /** All reads are exact-key reads. LIST/head hints never grant write or GC rights. */
33
+ export declare function createV2Bucket(client: StorageClient, config: S3Config, db?: DbDriver): {
34
+ prefix: string;
35
+ codec: CommitCodec;
36
+ root: () => Promise<BucketRoot | null>;
37
+ initialize: (checkpoint: CurrentCheckpoint) => Promise<BucketRoot>;
38
+ publish: (value: unknown) => Promise<string>;
39
+ load: (digest: string) => Promise<unknown>;
40
+ checkpointFor: (root: BucketRoot, digest: string, epoch: number) => Promise<{
41
+ format: "metahub-current";
42
+ protocolVersion: 2;
43
+ workspaceId: string;
44
+ epoch: number;
45
+ pendingRecovery: {
46
+ id: string;
47
+ kind: string;
48
+ target: string;
49
+ local: string;
50
+ remote: string | null;
51
+ status: string;
52
+ result: string | null;
53
+ }[];
54
+ managedDocuments: string[];
55
+ documentVersions: Record<string, string>;
56
+ history: {
57
+ documentId: string;
58
+ hash: string;
59
+ }[];
60
+ coveredSequence: number;
61
+ sourceCoverage: Record<string, number>;
62
+ changes: {
63
+ hlc: string;
64
+ node_id: string;
65
+ dataset: string;
66
+ row_id: string;
67
+ col: string;
68
+ value: string | null;
69
+ txn?: string | null | undefined;
70
+ }[];
71
+ deletedBlocks: {
72
+ id: string;
73
+ documentId: string | null;
74
+ confirmedAt?: number | undefined;
75
+ }[];
76
+ }>;
77
+ log: (root: BucketRoot) => {
78
+ initial: () => import("./commit-log.ts").CommitHead<import("./retention-state.ts").RetentionState>;
79
+ read(from?: import("./commit-log.ts").CommitHead<import("./retention-state.ts").RetentionState>, visit?: ((record: import("./commit-log.ts").CommitRecord<import("./retention-state.ts").RetentionEvent>, head: import("./commit-log.ts").CommitHead<import("./retention-state.ts").RetentionState>, rejected: MhError | null) => Promise<void>) | undefined, through?: number): Promise<import("./commit-log.ts").CommitHead<import("./retention-state.ts").RetentionState>>;
80
+ append(requestId: string, propose: (state: import("./retention-state.ts").RetentionState) => import("./retention-state.ts").RetentionEvent): Promise<import("./commit-log.ts").CommitHead<import("./retention-state.ts").RetentionState>>;
81
+ };
82
+ batchFor: (root: BucketRoot, event: {
83
+ epoch: number;
84
+ member: string;
85
+ first: number;
86
+ last: number;
87
+ objectHash: string;
88
+ }) => Promise<{
89
+ protocolVersion: 2;
90
+ workspaceId: string;
91
+ epoch: number;
92
+ member: string;
93
+ first: number;
94
+ last: number;
95
+ changes: {
96
+ hlc: string;
97
+ node_id: string;
98
+ dataset: string;
99
+ row_id: string;
100
+ col: string;
101
+ value: string | null;
102
+ txn?: string | null | undefined;
103
+ }[];
104
+ bases?: (string | null)[] | undefined;
105
+ }>;
106
+ objectKey: (digest: string) => string;
107
+ serverTime: () => number | null;
108
+ rootCommittedAt: () => number | null;
109
+ };
110
+ //# sourceMappingURL=bucket-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-v2.d.ts","sourceRoot":"","sources":["../../../src/core/sync/bucket-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKhF,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,eAAO,MAAM,gBAAgB;;;;kBAGlB,CAAC;AACZ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;kBAK8H,CAAC;AAC7J,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ;;;gBAsC5D,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;6BAqBX,iBAAiB,KAAG,OAAO,CAAC,UAAU,CAAC;qBAhC/C,OAAO,KAAG,OAAO,CAAC,MAAM,CAAC;mBAN3B,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;0BAqDlB,UAAU,UAAU,MAAM,SAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BzD,UAAU;;;;;qBAwBC,UAAU,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;wBAzGxG,MAAM;;;EAiHlC"}
@@ -8,23 +8,36 @@ export interface SyncResult {
8
8
  * `pulled`: a page of all-known changes ingests 0 but may not be the last
9
9
  * page (e.g. after a cursor reset re-pulls data we already hold). */
10
10
  received?: number;
11
- /** Storage-sync only: local own ops exist but were deferred by push batching. */
11
+ /** More local ops remain after this round. Drain bounded HTTP rounds while
12
+ * this is true OR `received` fills the requested pull page. */
12
13
  pendingPush?: boolean;
14
+ /** Storage transports set this when a bounded pull still has objects remaining. */
15
+ pendingPull?: boolean;
13
16
  /** Non-fatal problems this round (e.g. clock-skew refusals in either direction). */
14
17
  warnings?: string[];
15
18
  }
16
19
  /** Human-readable warnings for changes refused as clock-skewed, per author node. */
17
20
  export declare function skewWarnings(source: string, skewed: Record<string, number>): string[];
21
+ export type SyncSynchronousPhase = "prepare" | "serialize" | "ingest" | "acknowledge";
18
22
  export interface SyncOpts {
19
23
  /** Bearer credential; defaults to the one stored for this peer (pairing). */
20
24
  token?: string;
21
25
  /** Max changes to pull this round — chunked initial hydration. */
22
26
  pullLimit?: number;
27
+ /** Max changes to push this round. Omit to preserve the full-push behavior. */
28
+ pushLimit?: number;
23
29
  /** Datasets this replica opts out of (partial replica, e.g. site_files). */
24
30
  excludeDatasets?: string[];
25
31
  /** Hard transport budget. Every sync is bounded even when the peer accepts
26
32
  * the TCP connection but never replies. */
27
33
  timeoutMs?: number;
34
+ /** Session-owned transport (for example a credential-scoped fetch). */
35
+ fetch?: typeof fetch;
36
+ /** Cancel an in-flight round when its session is disposed. */
37
+ signal?: AbortSignal;
38
+ /** Optional diagnostic wrapper. Invoke run exactly once synchronously and
39
+ * preserve its result/error; no transport await occurs inside these phases. */
40
+ measureSync?<T>(phase: SyncSynchronousPhase, run: () => T): T;
28
41
  }
29
42
  /** After a pull, advance the push cursor across the CONTIGUOUS prefix of
30
43
  * newly-appended oplog rows that came out of this round's response: the peer
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAmC,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAuB1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;;;0EAGsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAKrF;AAED,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;+CAC2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;yEAMyE;AACzE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAgB5F;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,QAAQ,GAAG,MAAW,GAC3B,OAAO,CAAC,UAAU,CAAC,CAsDrB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/sync/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAwB1D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;;;0EAGsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;mEAC+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAKrF;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtF,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;+CAC2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;mFAC+E;IAC/E,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC/D;AAKD;;;;;;yEAMyE;AACzE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAkB5F;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,QAAQ,GAAG,MAAW,GAC3B,OAAO,CAAC,UAAU,CAAC,CAiHrB"}
@@ -0,0 +1,41 @@
1
+ import { MhError } from "../errors.ts";
2
+ import type { StorageClient } from "./storage.ts";
3
+ export interface CommitRecord<T> {
4
+ protocolVersion: 2;
5
+ workspaceId: string;
6
+ sequence: number;
7
+ previous: string | null;
8
+ requestId: string;
9
+ payload: T;
10
+ }
11
+ export interface CommitHead<S> {
12
+ sequence: number;
13
+ hash: string | null;
14
+ state: S;
15
+ serverTime: number | null;
16
+ }
17
+ export interface CommitCodec {
18
+ encode(value: unknown): Promise<Uint8Array>;
19
+ decode(bytes: Uint8Array): Promise<unknown>;
20
+ }
21
+ export declare function commitHash(bytes: Uint8Array): Promise<string>;
22
+ /** Immutable numbered slots arbitrate concurrent proposals. Absence is only a
23
+ * read hint: append must win an atomic conditional create before it succeeds.
24
+ * Callers supply an authenticated codec and a pure validating state reducer. */
25
+ export declare function createCommitLog<S, T>(options: {
26
+ client: StorageClient;
27
+ prefix: string;
28
+ workspaceId: string;
29
+ codec: CommitCodec;
30
+ initialState(): S;
31
+ validateProposal?(payload: T): void;
32
+ checkHead?(state: S): void;
33
+ checkAccepted?(state: S, payload: T): void;
34
+ reduce(state: S, payload: T, committedAt: number): S;
35
+ parsePayload(value: unknown): T;
36
+ }): {
37
+ initial: () => CommitHead<S>;
38
+ read(from?: CommitHead<S>, visit?: (record: CommitRecord<T>, head: CommitHead<S>, rejected: MhError | null) => Promise<void>, through?: number): Promise<CommitHead<S>>;
39
+ append(requestId: string, propose: (state: S) => T): Promise<CommitHead<S>>;
40
+ };
41
+ //# sourceMappingURL=commit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-log.d.ts","sourceRoot":"","sources":["../../../src/core/sync/commit-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;CACZ;AACD,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AACD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AACD,wBAAsB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAInE;AAED;;gFAEgF;AAChF,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;IAC7C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,IAAI,CAAC,CAAC;IAClB,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;IACrD,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;CACjC;mBAIqB,UAAU,CAAC,CAAC,CAAC;uCAkDM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,qBAAuB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;sBAanJ,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAqCpF"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ import type { DbDriver } from "../driver.ts";
3
+ export declare const CurrentCheckpointSchema: z.ZodObject<{
4
+ format: z.ZodLiteral<"metahub-current">;
5
+ protocolVersion: z.ZodLiteral<2>;
6
+ workspaceId: z.ZodString;
7
+ epoch: z.ZodNumber;
8
+ pendingRecovery: z.ZodDefault<z.ZodArray<z.ZodObject<{
9
+ id: z.ZodString;
10
+ kind: z.ZodString;
11
+ target: z.ZodString;
12
+ local: z.ZodString;
13
+ remote: z.ZodNullable<z.ZodString>;
14
+ status: z.ZodString;
15
+ result: z.ZodNullable<z.ZodString>;
16
+ }, z.core.$strict>>>;
17
+ managedDocuments: z.ZodDefault<z.ZodArray<z.ZodString>>;
18
+ documentVersions: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
19
+ history: z.ZodDefault<z.ZodArray<z.ZodObject<{
20
+ documentId: z.ZodString;
21
+ hash: z.ZodString;
22
+ }, z.core.$strict>>>;
23
+ coveredSequence: z.ZodDefault<z.ZodNumber>;
24
+ sourceCoverage: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
25
+ changes: z.ZodArray<z.ZodObject<{
26
+ hlc: z.ZodString;
27
+ node_id: z.ZodString;
28
+ dataset: z.ZodString;
29
+ row_id: z.ZodString;
30
+ col: z.ZodString;
31
+ value: z.ZodNullable<z.ZodString>;
32
+ txn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
33
+ }, z.core.$strip>>;
34
+ deletedBlocks: z.ZodArray<z.ZodObject<{
35
+ id: z.ZodString;
36
+ documentId: z.ZodNullable<z.ZodString>;
37
+ confirmedAt: z.ZodOptional<z.ZodNumber>;
38
+ }, z.core.$strict>>;
39
+ }, z.core.$strict>;
40
+ export type CurrentCheckpoint = z.infer<typeof CurrentCheckpointSchema>;
41
+ /** Projection only. Never removes source oplog/history. Deleted bodies are not
42
+ * part of the current-state baseline; deletion identity remains explicit. */
43
+ export declare function captureCurrentCheckpoint(db: DbDriver, workspaceId: string, epoch: number): CurrentCheckpoint;
44
+ /** Install only into an empty shadow database. A caller must preserve and verify
45
+ * the old database/outbox before swapping this shadow into its live session. */
46
+ export declare function installCurrentCheckpoint(db: DbDriver, input: unknown, workspaceId: string): void;
47
+ //# sourceMappingURL=current-checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-checkpoint.d.ts","sourceRoot":"","sources":["../../../src/core/sync/current-checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ7C,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAUzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;6EAC6E;AAC7E,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAc5G;AAED;gFACgF;AAChF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAmChG"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-map-db.d.ts","sourceRoot":"","sources":["../../../src/core/sync/data-map-db.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAwD7C"}
1
+ {"version":3,"file":"data-map-db.d.ts","sourceRoot":"","sources":["../../../src/core/sync/data-map-db.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAwD7C"}
@@ -0,0 +1,29 @@
1
+ import { type DbDriver } from "../driver.ts";
2
+ export declare const dataVersionRange: {
3
+ readonly minSupportedDataVersion: 1;
4
+ readonly maxSupportedDataVersion: 2;
5
+ };
6
+ type Observation = {
7
+ workspaceId: string;
8
+ dataVersion: number;
9
+ awaitingCompatibleClient?: boolean;
10
+ };
11
+ export declare function knownDataVersion(db: DbDriver): Observation | null;
12
+ export declare function requireSupportedVersion(version: number, max?: number, min?: number): void;
13
+ export declare function localDataVersion(db: DbDriver): number;
14
+ export declare function beginVersionCheck(db: DbDriver, url: string): void;
15
+ export declare function finishVersionCheck(db: DbDriver, url: string): void;
16
+ export declare function assertUserEditAllowed(db: DbDriver): void;
17
+ export declare function assertWorkspaceWritable(db: DbDriver): void;
18
+ export declare function observeDataVersion(db: DbDriver, workspaceId: string, version: number): void;
19
+ export declare function openReadOnlyWorkspace(db: DbDriver): boolean;
20
+ export type VersionDraft = {
21
+ editor: string;
22
+ doc_id: string;
23
+ title: string;
24
+ body: string;
25
+ version: string | null;
26
+ };
27
+ export declare function saveVersionDraft(db: DbDriver, draft: VersionDraft): void;
28
+ export {};
29
+ //# sourceMappingURL=data-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-version.d.ts","sourceRoot":"","sources":["../../../src/core/sync/data-version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEtD,eAAO,MAAM,gBAAgB;;;CAAsE,CAAC;AAEpG,KAAK,WAAW,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAOjE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAmD,EAAE,GAAG,SAAmD,QAKtK;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,UAG5C;AAID,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,QAK1D;AACD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,QAK3D;AACD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,QAIjD;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,QAInD;AA2BD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAGpF;AAID,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,WAQjD;AAID,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACnH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,QAMjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"drop-keys.d.ts","sourceRoot":"","sources":["../../../src/core/sync/drop-keys.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,yFAAyF;IACzF,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAcD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAWpE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAIxE;AAID;;;;yEAIyE;AACzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,CAAC;IACtB,MAAM,EAAE,MAAM,aAAa,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAoB7D;AAqFD,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,aAAa,CAK5D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAErF;AAED;iFACiF;AACjF,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CAAC,UAAU,CAAC,CAMrB;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CAAC,WAAW,CAAC,CA4DtB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GAChE,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiB5E"}
1
+ {"version":3,"file":"drop-keys.d.ts","sourceRoot":"","sources":["../../../src/core/sync/drop-keys.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,yFAAyF;IACzF,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAcD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAWpE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAIxE;AAID;;;;yEAIyE;AACzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,CAAC;IACtB,MAAM,EAAE,MAAM,aAAa,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAoB7D;AAqFD,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,aAAa,CAK5D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAErF;AAED;iFACiF;AACjF,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CAAC,UAAU,CAAC,CAMrB;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CAAC,WAAW,CAAC,CA6DtB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAO,GAChE,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkB5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"drop-pull.d.ts","sourceRoot":"","sources":["../../../src/core/sync/drop-pull.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAqBhE;;iCAEiC;AACjC,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,EAAE,CAItD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB;sFACkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb;iEAC6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,eAAe,CAAC;IAC/D,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AA2BD;;;;;;;;;;;;;;gEAcgE;AAChE,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAU5E;AA2DD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAC3E,OAAO,CAAC,eAAe,CAAC,CAqL1B"}
1
+ {"version":3,"file":"drop-pull.d.ts","sourceRoot":"","sources":["../../../src/core/sync/drop-pull.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAqBhE;;iCAEiC;AACjC,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,EAAE,CAItD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB;sFACkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb;iEAC6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,eAAe,CAAC;IAC/D,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AA2BD;;;;;;;;;;;;;;gEAcgE;AAChE,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAU5E;AA2DD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAC3E,OAAO,CAAC,eAAe,CAAC,CAsL1B"}
@@ -15,6 +15,10 @@ export declare function fromB64(b64: string): Uint8Array;
15
15
  export declare function toB64url(bytes: Uint8Array): string;
16
16
  /** A fresh random 256-bit master key (raw bytes). */
17
17
  export declare function generateMasterKey(): Uint8Array;
18
+ type PasswordKdf = (passphrase: string, salt: Uint8Array, iterations: number) => Promise<Uint8Array>;
19
+ /** Native adapters can supply the platform PBKDF2 primitive while preserving
20
+ * the exact shared envelope format and work factor. */
21
+ export declare function setPasswordKdf(kdf: PasswordKdf | null): void;
18
22
  /** Wrap the master key under a passphrase-derived KEK → bucket keys/main.json. */
19
23
  export declare function wrapMasterKey(rawKey: Uint8Array, passphrase: string): Promise<KeyEnvelope>;
20
24
  /** Recover the master key from the envelope + passphrase. Throws `auth` on a
@@ -31,4 +35,5 @@ export declare function deriveShareKey(password: string, salt: Uint8Array): Prom
31
35
  export declare function encryptBytes(rawKey: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
32
36
  /** Inverse of encryptBytes. Throws `auth` if the key is wrong or data tampered. */
33
37
  export declare function decryptBytes(rawKey: Uint8Array, payload: Uint8Array): Promise<Uint8Array>;
38
+ export {};
34
39
  //# sourceMappingURL=e2ee.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"e2ee.d.ts","sourceRoot":"","sources":["../../../src/core/sync/e2ee.ts"],"names":[],"mappings":"AAkCA,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAI/C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAK/C;AAED;kEACkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAID,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,UAAU,CAE9C;AAmBD,kFAAkF;AAClF,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBhG;AAED;2EAC2E;AAC3E,wBAAsB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/F;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAc5F;AAWD,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUjG;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAU/F"}
1
+ {"version":3,"file":"e2ee.d.ts","sourceRoot":"","sources":["../../../src/core/sync/e2ee.ts"],"names":[],"mappings":"AAkCA,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAI/C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAK/C;AAED;kEACkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAID,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,UAAU,CAE9C;AAED,KAAK,WAAW,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAErG;uDACuD;AACvD,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAuB;AAwBpF,kFAAkF;AAClF,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBhG;AAED;2EAC2E;AAC3E,wBAAsB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/F;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAc5F;AAWD,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUjG;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAU/F"}
@@ -18,4 +18,6 @@ export declare function encodeEnroll(p: EnrollPayload): string;
18
18
  * user can paste whatever they copied. Throws MhError("invalid_input") on a
19
19
  * malformed token or a payload missing the fields needed to reach the bucket. */
20
20
  export declare function decodeEnroll(tokenOrUrl: string): EnrollPayload;
21
+ /** Open the native app with the same access-only payload used by the WebUI. */
22
+ export declare function mobileEnrollUrl(config: EnrollPayload): string;
21
23
  //# sourceMappingURL=enroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enroll.d.ts","sourceRoot":"","sources":["../../../src/core/sync/enroll.ts"],"names":[],"mappings":"AAaA;6EAC6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAmBD;8EAC8E;AAC9E,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAYrD;AAED;;;kFAGkF;AAClF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAoC9D"}
1
+ {"version":3,"file":"enroll.d.ts","sourceRoot":"","sources":["../../../src/core/sync/enroll.ts"],"names":[],"mappings":"AAaA;6EAC6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAmBD;8EAC8E;AAC9E,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAYrD;AAED;;;kFAGkF;AAClF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAoC9D;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,5 @@
1
+ import type { DbDriver } from "../driver.ts";
2
+ import type { Change } from "../crdt.ts";
3
+ export declare const historyChangeKey: (c: Change) => string;
4
+ export declare function observeHistory(db: DbDriver, changes: readonly Change[], at: number): void;
5
+ //# sourceMappingURL=history-observation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-observation.d.ts","sourceRoot":"","sources":["../../../src/core/sync/history-observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,WAAwD,CAAC;AACnG,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAQzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-status.d.ts","sourceRoot":"","sources":["../../../src/core/sync/http-status.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAc3D,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED;;iEAEiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIrG"}
1
+ {"version":3,"file":"http-status.d.ts","sourceRoot":"","sources":["../../../src/core/sync/http-status.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAkB3D,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED;;iEAEiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIrG"}
@@ -1,5 +1,6 @@
1
1
  import type { Locale } from "./locale.ts";
2
2
  declare const EN: {
3
+ readonly "\u9700\u8981\u66F4\u65B0\u5BA2\u6237\u7AEF\uFF1A\u5DE5\u4F5C\u533A\u6570\u636E\u7248\u672C\u4E3A {workspaceDataVersion}\uFF0C\u672C\u5BA2\u6237\u7AEF\u6700\u9AD8\u652F\u6301 {clientMaxDataVersion}\u3002": "Update the app: workspace data version {workspaceDataVersion} exceeds this client’s supported maximum of {clientMaxDataVersion}.";
3
4
  readonly "\u672C\u673A\u903B\u8F91\u65F6\u949F\u6BD4\u7CFB\u7EDF\u65F6\u95F4\u8D85\u524D {min} \u5206\u949F\uFF08\u7CFB\u7EDF\u65F6\u949F\u66FE\u88AB\u8C03\u9519\uFF0C\u6216\u6536\u5230\u8FC7\u65F6\u949F\u9519\u8BEF\u8BBE\u5907\u7684\u6570\u636E\uFF09\uFF0C\u8FD0\u884C mh repair --clock \u4FEE\u590D": "This device's logical clock is {min} min ahead of wall time (the system clock was wrong, or data arrived from a device with a wrong clock); run mh repair --clock";
4
5
  readonly "\u6570\u636E\u5E93\u6B63\u88AB\u53E6\u4E00\u4E2A\u8FDB\u7A0B\u5199\u5165\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5": "The database is being written by another process; retry shortly";
5
6
  readonly "\u901A\u8FC7 metahub \u5206\u4EAB": "Shared via metahub";
@@ -29,6 +30,13 @@ declare const EN: {
29
30
  readonly 解锁: "Unlock";
30
31
  readonly 受保护的分享: "Protected share";
31
32
  readonly 复制全文: "Copy all";
33
+ readonly 复制: "Copy";
34
+ readonly 下载: "Download";
35
+ readonly 宽屏: "Wide view";
36
+ readonly 收窄: "Standard view";
37
+ readonly 已开始下载: "Download started";
38
+ readonly 下载失败: "Download failed";
39
+ readonly 请等待保存完成: "Save your changes before downloading";
32
40
  readonly 已复制: "Copied";
33
41
  readonly 复制失败: "Copy failed";
34
42
  readonly 站点尚未同步: "Site not synced yet";
@@ -1 +1 @@
1
- {"version":3,"file":"page-messages.d.ts","sourceRoot":"","sources":["../../../src/core/sync/page-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2GE,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;AAEzC,wBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAGpG;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAGxG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAIhE"}
1
+ {"version":3,"file":"page-messages.d.ts","sourceRoot":"","sources":["../../../src/core/sync/page-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmHE,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;AAEzC,wBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAGpG;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAGxG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAIhE"}
@@ -0,0 +1,9 @@
1
+ import { type DbDriver } from "../driver.ts";
2
+ import type { Change } from "../crdt.ts";
3
+ export declare function editBases(db: DbDriver, changes: Change[]): (string | null)[];
4
+ /** HTTP cursors acknowledge peer delivery only; they never prove bucket source
5
+ * coverage. Reuse terminal deletion and conflict handling for every ingress. */
6
+ export declare function ingestPeerChanges(db: DbDriver, changes: Change[], bases?: (string | null)[]): import("../crdt.ts").IngestResult;
7
+ export declare function pendingPeerChanges(db: DbDriver): Change[];
8
+ export declare function confirmPeerChanges(db: DbDriver, changes: Change[]): void;
9
+ //# sourceMappingURL=peer-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-v2.d.ts","sourceRoot":"","sources":["../../../src/core/sync/peer-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMzC,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAK5E;AACD;gFACgF;AAChF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,qCAe3F;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAGzD;AACD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAGxE"}
@@ -156,6 +156,7 @@ export interface PeerSyncOutcome {
156
156
  pulled?: number;
157
157
  pendingPush?: boolean;
158
158
  error?: string;
159
+ code?: import("../errors.ts").MhErrorCode;
159
160
  /** Non-fatal follow-up problems (e.g. channel maintenance) after a
160
161
  * SUCCESSFUL data sync. Never flips `ok` and never sets a network error. */
161
162
  warnings?: string[];