@weaveprotocol/core 0.1.2 → 0.2.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 (183) hide show
  1. package/README.md +244 -39
  2. package/dist/identity/contact-key.d.ts +42 -0
  3. package/dist/identity/contact-key.d.ts.map +1 -0
  4. package/dist/identity/contact-key.js +133 -0
  5. package/dist/identity/contact-key.js.map +1 -0
  6. package/dist/index.d.ts +16 -7
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +10 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/network/mesh.d.ts +6 -0
  11. package/dist/network/mesh.d.ts.map +1 -1
  12. package/dist/network/mesh.js +11 -1
  13. package/dist/network/mesh.js.map +1 -1
  14. package/dist/network/multi-signaling.d.ts +12 -2
  15. package/dist/network/multi-signaling.d.ts.map +1 -1
  16. package/dist/network/multi-signaling.js +86 -14
  17. package/dist/network/multi-signaling.js.map +1 -1
  18. package/dist/network/peer-auth.d.ts +50 -16
  19. package/dist/network/peer-auth.d.ts.map +1 -1
  20. package/dist/network/peer-auth.js +52 -15
  21. package/dist/network/peer-auth.js.map +1 -1
  22. package/dist/node/carrier.d.ts +87 -0
  23. package/dist/node/carrier.d.ts.map +1 -1
  24. package/dist/node/carrier.js +180 -59
  25. package/dist/node/carrier.js.map +1 -1
  26. package/dist/node/copy.d.ts.map +1 -1
  27. package/dist/node/copy.js +6 -3
  28. package/dist/node/copy.js.map +1 -1
  29. package/dist/node/host.d.ts +117 -0
  30. package/dist/node/host.d.ts.map +1 -0
  31. package/dist/node/host.js +192 -0
  32. package/dist/node/host.js.map +1 -0
  33. package/dist/node/index.d.ts +6 -2
  34. package/dist/node/index.d.ts.map +1 -1
  35. package/dist/node/index.js +1 -0
  36. package/dist/node/index.js.map +1 -1
  37. package/dist/node/node.d.ts.map +1 -1
  38. package/dist/node/node.js +640 -25
  39. package/dist/node/node.js.map +1 -1
  40. package/dist/node/space-runtime.d.ts +42 -25
  41. package/dist/node/space-runtime.d.ts.map +1 -1
  42. package/dist/node/space-runtime.js +734 -35
  43. package/dist/node/space-runtime.js.map +1 -1
  44. package/dist/node/types.d.ts +269 -3
  45. package/dist/node/types.d.ts.map +1 -1
  46. package/dist/privacy/space-encryption.d.ts +16 -0
  47. package/dist/privacy/space-encryption.d.ts.map +1 -1
  48. package/dist/privacy/space-encryption.js +40 -0
  49. package/dist/privacy/space-encryption.js.map +1 -1
  50. package/dist/query/engine.js +1 -1
  51. package/dist/query/engine.js.map +1 -1
  52. package/dist/query/types.d.ts +7 -0
  53. package/dist/query/types.d.ts.map +1 -1
  54. package/dist/query/types.js.map +1 -1
  55. package/dist/react/use-query.d.ts +1 -1
  56. package/dist/react/use-query.d.ts.map +1 -1
  57. package/dist/records/topics.d.ts +21 -0
  58. package/dist/records/topics.d.ts.map +1 -0
  59. package/dist/records/topics.js +86 -0
  60. package/dist/records/topics.js.map +1 -0
  61. package/dist/schema/collection-def.d.ts +7 -0
  62. package/dist/schema/collection-def.d.ts.map +1 -1
  63. package/dist/schema/collection-def.js +4 -0
  64. package/dist/schema/collection-def.js.map +1 -1
  65. package/dist/schema/expression.d.ts +2 -0
  66. package/dist/schema/expression.d.ts.map +1 -1
  67. package/dist/schema/expression.js +1 -0
  68. package/dist/schema/expression.js.map +1 -1
  69. package/dist/schemas/contacts.d.ts +77 -0
  70. package/dist/schemas/contacts.d.ts.map +1 -0
  71. package/dist/schemas/contacts.js +35 -0
  72. package/dist/schemas/contacts.js.map +1 -0
  73. package/dist/schemas/index.d.ts +2 -0
  74. package/dist/schemas/index.d.ts.map +1 -1
  75. package/dist/schemas/index.js +1 -0
  76. package/dist/schemas/index.js.map +1 -1
  77. package/dist/session/auth.d.ts.map +1 -1
  78. package/dist/session/auth.js +14 -3
  79. package/dist/session/auth.js.map +1 -1
  80. package/dist/session/connect.d.ts +25 -1
  81. package/dist/session/connect.d.ts.map +1 -1
  82. package/dist/session/connect.js +9 -2
  83. package/dist/session/connect.js.map +1 -1
  84. package/dist/session/hosting.d.ts +155 -0
  85. package/dist/session/hosting.d.ts.map +1 -0
  86. package/dist/session/hosting.js +160 -0
  87. package/dist/session/hosting.js.map +1 -0
  88. package/dist/space/account-registry.d.ts +6 -0
  89. package/dist/space/account-registry.d.ts.map +1 -1
  90. package/dist/space/account-registry.js +16 -4
  91. package/dist/space/account-registry.js.map +1 -1
  92. package/dist/space/notify.d.ts +88 -0
  93. package/dist/space/notify.d.ts.map +1 -0
  94. package/dist/space/notify.js +127 -0
  95. package/dist/space/notify.js.map +1 -0
  96. package/dist/space/pass.d.ts +6 -0
  97. package/dist/space/pass.d.ts.map +1 -1
  98. package/dist/space/pass.js +5 -2
  99. package/dist/space/pass.js.map +1 -1
  100. package/dist/space/roles.d.ts +71 -0
  101. package/dist/space/roles.d.ts.map +1 -1
  102. package/dist/space/roles.js +114 -0
  103. package/dist/space/roles.js.map +1 -1
  104. package/dist/space/space-access.d.ts +24 -0
  105. package/dist/space/space-access.d.ts.map +1 -1
  106. package/dist/space/space-access.js +24 -0
  107. package/dist/space/space-access.js.map +1 -1
  108. package/dist/space/space-manager.d.ts +35 -1
  109. package/dist/space/space-manager.d.ts.map +1 -1
  110. package/dist/space/space-manager.js +72 -25
  111. package/dist/space/space-manager.js.map +1 -1
  112. package/dist/storage/blob/memory.d.ts +9 -0
  113. package/dist/storage/blob/memory.d.ts.map +1 -0
  114. package/dist/storage/blob/memory.js +20 -0
  115. package/dist/storage/blob/memory.js.map +1 -0
  116. package/dist/storage/blob/s3.d.ts +16 -0
  117. package/dist/storage/blob/s3.d.ts.map +1 -0
  118. package/dist/storage/blob/s3.js +86 -0
  119. package/dist/storage/blob/s3.js.map +1 -0
  120. package/dist/storage/blob-store.d.ts +26 -0
  121. package/dist/storage/blob-store.d.ts.map +1 -0
  122. package/dist/storage/blob-store.js +2 -0
  123. package/dist/storage/blob-store.js.map +1 -0
  124. package/dist/storage/encrypted-adapter.d.ts +3 -3
  125. package/dist/storage/encrypted-adapter.js +3 -3
  126. package/dist/storage/folder-adapter.d.ts +8 -8
  127. package/dist/storage/folder-adapter.d.ts.map +1 -1
  128. package/dist/storage/folder-adapter.js +7 -7
  129. package/dist/storage/folder-reconcile.d.ts +12 -14
  130. package/dist/storage/folder-reconcile.d.ts.map +1 -1
  131. package/dist/storage/folder-reconcile.js +20 -14
  132. package/dist/storage/folder-reconcile.js.map +1 -1
  133. package/dist/storage/index.d.ts +0 -1
  134. package/dist/storage/index.d.ts.map +1 -1
  135. package/dist/storage/index.js +0 -1
  136. package/dist/storage/index.js.map +1 -1
  137. package/dist/storage/indexeddb-adapter.d.ts.map +1 -1
  138. package/dist/storage/indexeddb-adapter.js +8 -9
  139. package/dist/storage/indexeddb-adapter.js.map +1 -1
  140. package/dist/storage/mirror.d.ts +68 -0
  141. package/dist/storage/mirror.d.ts.map +1 -0
  142. package/dist/storage/mirror.js +174 -0
  143. package/dist/storage/mirror.js.map +1 -0
  144. package/dist/storage/segment.d.ts +20 -0
  145. package/dist/storage/segment.d.ts.map +1 -0
  146. package/dist/storage/segment.js +27 -0
  147. package/dist/storage/segment.js.map +1 -0
  148. package/dist/storage/storage-provider.d.ts +36 -40
  149. package/dist/storage/storage-provider.d.ts.map +1 -1
  150. package/dist/storage/storage-provider.js +208 -117
  151. package/dist/storage/storage-provider.js.map +1 -1
  152. package/dist/sync/index.d.ts +1 -1
  153. package/dist/sync/index.d.ts.map +1 -1
  154. package/dist/sync/index.js +1 -1
  155. package/dist/sync/index.js.map +1 -1
  156. package/dist/sync/negentropy.d.ts +68 -0
  157. package/dist/sync/negentropy.d.ts.map +1 -0
  158. package/dist/sync/negentropy.js +379 -0
  159. package/dist/sync/negentropy.js.map +1 -0
  160. package/dist/sync/sync-engine.d.ts +45 -13
  161. package/dist/sync/sync-engine.d.ts.map +1 -1
  162. package/dist/sync/sync-engine.js +290 -207
  163. package/dist/sync/sync-engine.js.map +1 -1
  164. package/dist/sync/sync-messages.d.ts +42 -32
  165. package/dist/sync/sync-messages.d.ts.map +1 -1
  166. package/dist/sync/sync-messages.js +1 -1
  167. package/dist/sync/sync-messages.js.map +1 -1
  168. package/dist/types.d.ts +9 -0
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/types.js.map +1 -1
  171. package/dist/utils/hash.d.ts +9 -0
  172. package/dist/utils/hash.d.ts.map +1 -1
  173. package/dist/utils/hash.js +33 -0
  174. package/dist/utils/hash.js.map +1 -1
  175. package/package.json +3 -2
  176. package/dist/storage/mst.d.ts +0 -121
  177. package/dist/storage/mst.d.ts.map +0 -1
  178. package/dist/storage/mst.js +0 -402
  179. package/dist/storage/mst.js.map +0 -1
  180. package/dist/sync/anti-entropy.d.ts +0 -49
  181. package/dist/sync/anti-entropy.d.ts.map +0 -1
  182. package/dist/sync/anti-entropy.js +0 -62
  183. package/dist/sync/anti-entropy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAW,MAAM,aAAa,CAAC;AAKvE,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrD,mEAAmE;IACnE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACtD,2DAA2D;IAC3D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,kFAAkF;IAClF,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,8FAA8F;IAC9F,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,2GAA2G;IAC3G,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC9D,0DAA0D;IAC1D,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,yGAAyG;IACzG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,uGAAuG;IACvG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC1D,oCAAoC;IACpC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrC;;;;;;;;;;;;OAYG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,0CAA0C;IAC1C,UAAU,IAAI,cAAc,CAAC;IAC7B,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAQD,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AAOnC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAsMpH"}
1
+ {"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAW,MAAM,aAAa,CAAC;AAIvE,OAAO,EAAmD,OAAO,EAA4B,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAErI,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,mEAAmE;IACnE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACtD,2DAA2D;IAC3D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,kFAAkF;IAClF,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,8FAA8F;IAC9F,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,mGAAmG;IACnG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC9D,0DAA0D;IAC1D,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,yGAAyG;IACzG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,qFAAqF;IACrF,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,qFAAqF;IACrF,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,sFAAsF;IACtF,UAAU,IAAI,IAAI,CAAC;IACnB,0CAA0C;IAC1C,UAAU,IAAI,cAAc,CAAC;IAC7B,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,WAAW,OAAO,CAAC;AAOhC;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,CAGvE;AA8BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CA8P9E"}
@@ -1,191 +1,273 @@
1
1
  /**
2
2
  * @module storage-provider
3
- * A space's store: record versions, and the Merkle Search Tree that indexes them.
4
- *
5
- * The tree maps **record keys to version ids**:
3
+ * A space's store: record versions, and plain entries saying which is which.
6
4
  *
7
5
  * ```
8
- * r/<key> → the current version (every record)
9
- * g/<key> → the record's first version (once it has been edited)
10
- * h/<key>/<seq>/<id> → a superseded version (only if marked `retain`)
6
+ * r/<key> → the current version (every record)
7
+ * g/<key> → the record's first version (once it has been edited)
8
+ * h/<key>/<seq>/<id> → a superseded version (only if marked `retain`)
9
+ * i/<collection>/<time>/<id> → every version kept, by collection — what sync compares
11
10
  * ```
12
11
  *
13
12
  * A version that arrives is compared with the one at `r/<key>` by the ordering
14
13
  * rule (`records/version.ts`). The winner takes `r/<key>`; the loser's body is
15
14
  * dropped — unless it is the record's first version, kept as proof of who
16
15
  * created it, or its writer marked it `retain`. The same set of versions gives
17
- * the same tree whatever order they arrive in, which is what lets two peers
18
- * converge.
16
+ * the same entries whatever order they arrive in, which is what lets two
17
+ * peers converge.
18
+ *
19
+ * Sync compares the `i/` entries: the set of versions kept, one collection at
20
+ * a time (`sync/negentropy.ts`). Nothing else is stored for it. The sets are
21
+ * read once and kept in memory, updated by every change made here; a change
22
+ * made by another writer of the same store (a tab, a folder's other device)
23
+ * reaches them through {@link StorageProvider.invalidate}.
19
24
  */
20
- import { insertIntoMST, deleteFromMST, lookupInMST, listMSTEntries, collectReachableCids } from './mst.js';
21
25
  import { byVersion, supersedes } from '../records/version.js';
22
- import { utf8Encode, utf8Decode } from '../utils/encoding.js';
23
- const ROOT_KEY = '__mst_root';
24
- /** Unreachable nodes found by the last compaction, and when */
25
- const CONDEMNED_KEY = '__condemned';
26
- /** A tree node's key in the store: its CID, `b` and 52 base32 characters */
27
- const NODE_KEY = /^b[a-z2-7]{52}$/;
26
+ import { utf8Encode, utf8Decode, bytesToHex } from '../utils/encoding.js';
27
+ import { cidDigest } from '../utils/hash.js';
28
+ import { addToSum, combineSums, EMPTY_SUM, fingerprintOf, ItemSet, removeFromSum } from '../sync/negentropy.js';
28
29
  export const CURRENT_PREFIX = 'r/';
29
30
  export const GENESIS_PREFIX = 'g/';
30
31
  export const HISTORY_PREFIX = 'h/';
32
+ export const ITEM_PREFIX = 'i/';
31
33
  const currentKey = (key) => `${CURRENT_PREFIX}${key}`;
32
34
  const genesisKey = (key) => `${GENESIS_PREFIX}${key}`;
33
35
  /** `seq` padded so a key's history lists in order */
34
36
  const historyKey = (e) => `${HISTORY_PREFIX}${e.key}/${String(e.seq).padStart(15, '0')}/${e.id}`;
37
+ /**
38
+ * Where a version sorts for sync: its own time, in whole seconds. Only an
39
+ * order — a wrong clock makes a version slower to find, never lost.
40
+ */
41
+ export function syncTime(version) {
42
+ const ms = Date.parse(version.createdAt);
43
+ return Number.isFinite(ms) && ms > 0 ? Math.floor(ms / 1000) : 0;
44
+ }
45
+ /** Collection names may hold anything; the entry needs them free of `/`. */
46
+ const itemKey = (e) => `${ITEM_PREFIX}${encodeURIComponent(e.collection)}/${syncTime(e)}/${e.id}`;
47
+ /** Reads an `i/` entry back: null for anything malformed, or an id that is not a content id */
48
+ function parseItemKey(key) {
49
+ const [, collection, time, id, extra] = key.split('/');
50
+ if (collection === undefined || time === undefined || id === undefined || extra !== undefined)
51
+ return null;
52
+ const digest = cidDigest(id);
53
+ const timestamp = Number(time);
54
+ if (!digest || !Number.isSafeInteger(timestamp) || timestamp < 0)
55
+ return null;
56
+ try {
57
+ return { collection: decodeURIComponent(collection), id, item: { timestamp, id: digest } };
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
35
63
  /**
36
64
  * Creates a StorageProvider wrapping an adapter.
37
65
  * @param adapter The initialized storage adapter.
38
- * @returns The StorageProvider orchestrator.
39
66
  */
40
- export function createStorageProvider(adapter, options = {}) {
41
- async function getRootCid(store = adapter) {
42
- const bytes = await store.get(ROOT_KEY);
43
- return bytes ? utf8Decode(bytes) : null;
44
- }
45
- // Every change reads the root, rewrites the path to one entry, and writes a
46
- // new root. Two of those interleaved would each start from the same root and
47
- // the second would silently drop the first's entry. So changes take turns.
67
+ export function createStorageProvider(adapter) {
68
+ // Every change reads the current version, then writes. Two of those
69
+ // interleaved would each decide against the same current version, and one
70
+ // would lose its place. So changes take turns.
48
71
  let tail = Promise.resolve();
49
72
  const exclusively = (change) => {
50
73
  const run = tail.then(change, change);
51
74
  tail = run.catch(() => { });
52
75
  return run;
53
76
  };
77
+ // ─── What sync compares, in memory ─────────────────────────────────
78
+ /** Versions kept, by collection, then by id. Null until first needed. */
79
+ let kept = null;
80
+ /** Sorted sets, built when a reconciliation asks for one and dropped when their collection changes */
81
+ const sets = new Map();
82
+ /** The sum of each collection's ids, kept up to date on every change: a hello needs no sorting */
83
+ let totals = null;
84
+ /** Read in turn with changes, so none lands between the listing and the sets being kept up to date */
85
+ const loadKept = async () => kept ??
86
+ exclusively(async () => {
87
+ if (kept)
88
+ return kept;
89
+ const loaded = new Map();
90
+ for (const key of await adapter.list(ITEM_PREFIX)) {
91
+ const parsed = parseItemKey(key);
92
+ if (!parsed)
93
+ continue;
94
+ (loaded.get(parsed.collection) ?? loaded.set(parsed.collection, new Map()).get(parsed.collection)).set(parsed.id, parsed.item);
95
+ }
96
+ kept = loaded;
97
+ totals = new Map();
98
+ for (const [collection, byId] of loaded) {
99
+ let sum = EMPTY_SUM;
100
+ for (const item of byId.values())
101
+ sum = addToSum(sum, item.id);
102
+ totals.set(collection, sum);
103
+ }
104
+ return loaded;
105
+ });
106
+ /** Keeps the in-memory sets in step with a change just written */
107
+ const track = (added, removed) => {
108
+ for (const e of [...added, ...removed])
109
+ sets.delete(e.collection);
110
+ if (!kept || !totals)
111
+ return;
112
+ for (const e of removed) {
113
+ const item = kept.get(e.collection)?.get(e.id);
114
+ if (!item)
115
+ continue;
116
+ kept.get(e.collection).delete(e.id);
117
+ totals.set(e.collection, removeFromSum(totals.get(e.collection) ?? EMPTY_SUM, item.id));
118
+ }
119
+ for (const e of added) {
120
+ const digest = cidDigest(e.id);
121
+ const byId = kept.get(e.collection) ?? kept.set(e.collection, new Map()).get(e.collection);
122
+ if (!digest || byId.has(e.id))
123
+ continue;
124
+ byId.set(e.id, { timestamp: syncTime(e), id: digest });
125
+ totals.set(e.collection, addToSum(totals.get(e.collection) ?? EMPTY_SUM, digest));
126
+ }
127
+ };
128
+ // ─── Changes ───────────────────────────────────────────────────────
54
129
  /**
55
- * Runs one change of the tree. Its node writes are held and made in one
56
- * batch with the new root, so a change lands whole or not at all, in one
57
- * transaction rather than one per node. Versions it drops are deleted only
58
- * after, so the tree never names a record that is gone.
130
+ * Runs one change. Its entry writes are held and made in one batch, so a
131
+ * change lands whole or not at all. Versions it drops are deleted only
132
+ * after, so no entry ever names a record that is gone.
59
133
  */
60
134
  const change = (run) => exclusively(async () => {
61
135
  const writes = new Map();
62
- const tree = {
63
- ...adapter,
64
- get: async (key) => (writes.has(key) ? writes.get(key) : adapter.get(key)),
65
- has: async (key) => (writes.has(key) ? writes.get(key) !== null : adapter.has(key)),
66
- put: async (key, value) => void writes.set(key, value),
67
- delete: async (key) => void writes.set(key, null),
136
+ const added = new Map();
137
+ const dropped = new Map();
138
+ const entries = {
139
+ get: async (key) => {
140
+ const bytes = writes.has(key) ? writes.get(key) : await adapter.get(key);
141
+ return bytes ? utf8Decode(bytes) : null;
142
+ },
143
+ set: (key, id) => void writes.set(key, utf8Encode(id)),
144
+ unset: (key) => void writes.set(key, null),
145
+ keep: async (version) => {
146
+ await adapter.putExpression(version);
147
+ writes.set(itemKey(version), utf8Encode(version.id));
148
+ added.set(version.id, version);
149
+ dropped.delete(version.id);
150
+ },
151
+ drop: (version) => {
152
+ writes.set(itemKey(version), null);
153
+ dropped.set(version.id, version);
154
+ added.delete(version.id);
155
+ },
68
156
  };
69
- const dropped = [];
70
- const before = await getRootCid();
71
- const root = await run(tree, before, (id) => dropped.push(id));
72
- if (root === before && writes.size === 0 && dropped.length === 0)
73
- return root;
74
- writes.set(ROOT_KEY, root ? utf8Encode(root) : null);
157
+ await run(entries);
158
+ if (writes.size === 0 && dropped.size === 0)
159
+ return;
75
160
  await adapter.batch([...writes].map(([key, value]) => (value ? { type: 'put', key, value } : { type: 'delete', key })));
76
- for (const id of dropped)
161
+ for (const id of dropped.keys())
77
162
  await adapter.deleteExpression(id);
78
- changed();
79
- return root;
80
- });
81
- const graceMs = options.graceMs ?? 60_000;
82
- const compact = () => exclusively(async () => {
83
- const reachable = await collectReachableCids(adapter, await getRootCid());
84
- const dead = (await adapter.list('b')).filter((key) => NODE_KEY.test(key) && !reachable.has(key));
85
- const saved = await adapter.get(CONDEMNED_KEY);
86
- const earlier = saved ? JSON.parse(utf8Decode(saved)) : null;
87
- const ripe = graceMs === 0 ? dead : earlier && Date.now() - earlier.at >= graceMs ? earlier.cids : null;
88
- const condemn = (cids) => ({ type: 'put', key: CONDEMNED_KEY, value: utf8Encode(JSON.stringify({ at: Date.now(), cids })) });
89
- // Too soon to delete anything: remember what is dead now, unless an earlier list is already waiting.
90
- if (ripe === null) {
91
- if (!earlier)
92
- await adapter.batch([condemn(dead)]);
93
- return 0;
94
- }
95
- const doomed = new Set(ripe);
96
- const deleting = dead.filter((key) => doomed.has(key));
97
- await adapter.batch([...deleting.map((key) => ({ type: 'delete', key })), condemn(dead.filter((key) => !doomed.has(key)))]);
98
- return deleting.length;
163
+ track([...added.values()], [...dropped.values()]);
99
164
  });
100
- let changes = 0;
101
- /** Counts a change, and compacts once enough have piled up */
102
- const changed = () => {
103
- if (options.compactEvery && ++changes >= options.compactEvery) {
104
- changes = 0;
105
- void compact().catch(() => { });
106
- }
107
- };
108
165
  /**
109
166
  * Places a version that is not current: the record's first version if it is
110
167
  * the lowest-id one seen, history if retained, otherwise gone.
111
168
  */
112
- async function demote(tree, root, version, current, drop) {
169
+ async function demote(entries, version, current) {
113
170
  // A first version is kept as proof of who created the record — the one
114
171
  // with the lowest id, if several devices each created the same chosen key.
115
172
  // Not while the record is still at seq 0: then the current version is it.
116
173
  if (version.seq === 0 && current.seq > 0) {
117
- const heldId = await lookupInMST(tree, root, genesisKey(version.key));
174
+ const heldId = await entries.get(genesisKey(version.key));
118
175
  if (heldId === version.id)
119
- return root;
176
+ return;
120
177
  if (heldId === null || version.id < heldId) {
121
- await adapter.putExpression(version);
122
- root = await insertIntoMST(tree, root, genesisKey(version.key), version.id);
178
+ await entries.keep(version);
179
+ entries.set(genesisKey(version.key), version.id);
123
180
  const displaced = heldId ? await adapter.getExpression(heldId) : null;
124
- return displaced ? keepOrDrop(tree, root, displaced, drop) : root;
181
+ if (displaced)
182
+ await keepOrDrop(entries, displaced);
183
+ return;
125
184
  }
126
185
  }
127
- return keepOrDrop(tree, root, version, drop);
186
+ await keepOrDrop(entries, version);
128
187
  }
129
- async function keepOrDrop(tree, root, version, drop) {
188
+ async function keepOrDrop(entries, version) {
130
189
  if (version.retain) {
131
- await adapter.putExpression(version);
132
- return insertIntoMST(tree, root, historyKey(version), version.id);
190
+ await entries.keep(version);
191
+ entries.set(historyKey(version), version.id);
192
+ return;
133
193
  }
134
- drop(version.id);
135
- return root;
194
+ entries.drop(version);
136
195
  }
137
196
  const load = async (ids) => (await Promise.all([...ids].map((id) => adapter.getExpression(id)))).filter((v) => v !== null);
197
+ const readId = async (key) => {
198
+ const bytes = await adapter.get(key);
199
+ return bytes ? utf8Decode(bytes) : null;
200
+ };
138
201
  async function histories(prefix) {
139
- const root = await getRootCid();
140
202
  const ids = new Map();
141
- for (const tree of [CURRENT_PREFIX, GENESIS_PREFIX, HISTORY_PREFIX]) {
142
- for (const entry of await listMSTEntries(adapter, root, `${tree}${prefix}`)) {
143
- // `r/<key>`, `g/<key>`, `h/<key>/<seq>/<id>` — a record key holds no `/`.
144
- const key = entry.key.split('/')[1];
145
- (ids.get(key) ?? ids.set(key, new Set()).get(key)).add(entry.value);
203
+ const add = (key, id) => (ids.get(key) ?? ids.set(key, new Set()).get(key)).add(id);
204
+ for (const entry of [CURRENT_PREFIX, GENESIS_PREFIX]) {
205
+ for (const name of await adapter.list(`${entry}${prefix}`)) {
206
+ const id = await readId(name);
207
+ if (id)
208
+ add(name.slice(entry.length), id);
146
209
  }
147
210
  }
211
+ // `h/<key>/<seq>/<id>` — a record key holds no `/`, and the id is in the entry's name.
212
+ for (const name of await adapter.list(`${HISTORY_PREFIX}${prefix}`)) {
213
+ const [, key, , id] = name.split('/');
214
+ if (key && id)
215
+ add(key, id);
216
+ }
148
217
  const result = new Map();
149
218
  for (const [key, held] of ids)
150
219
  result.set(key, (await load(held)).sort(byVersion));
151
220
  return result;
152
221
  }
153
- async function currentOf(tree, root, key) {
154
- const id = await lookupInMST(tree, root, currentKey(key));
155
- return id ? adapter.getExpression(id) : null;
222
+ async function items(collection) {
223
+ const cached = sets.get(collection);
224
+ if (cached)
225
+ return cached;
226
+ const set = new ItemSet((await loadKept()).get(collection)?.values() ?? []);
227
+ sets.set(collection, set);
228
+ return set;
229
+ }
230
+ async function sums() {
231
+ await loadKept();
232
+ return new Map([...(totals ?? [])].filter(([, sum]) => sum.count > 0));
156
233
  }
157
234
  return Object.freeze({
158
235
  addExpression(incoming) {
159
- return change(async (tree, root, drop) => {
160
- const current = await currentOf(tree, root, incoming.key);
161
- if (current?.id === incoming.id)
162
- return root;
236
+ return change(async (entries) => {
237
+ const currentId = await entries.get(currentKey(incoming.key));
238
+ if (currentId === incoming.id)
239
+ return;
240
+ const current = currentId ? await adapter.getExpression(currentId) : null;
163
241
  if (current && !supersedes(incoming, current))
164
- return demote(tree, root, incoming, current, drop);
165
- await adapter.putExpression(incoming);
166
- root = await insertIntoMST(tree, root, currentKey(incoming.key), incoming.id);
167
- return current ? demote(tree, root, current, incoming, drop) : root;
242
+ return demote(entries, incoming, current);
243
+ await entries.keep(incoming);
244
+ entries.set(currentKey(incoming.key), incoming.id);
245
+ if (current)
246
+ await demote(entries, current, incoming);
168
247
  });
169
248
  },
170
249
  removeExpression(id) {
171
- return change(async (tree, root, drop) => {
250
+ return change(async (entries) => {
172
251
  const version = await adapter.getExpression(id);
173
- for (const key of version ? [currentKey(version.key), genesisKey(version.key), historyKey(version)] : []) {
174
- if ((await lookupInMST(tree, root, key)) === id)
175
- root = await deleteFromMST(tree, root, key);
252
+ if (!version)
253
+ return;
254
+ for (const key of [currentKey(version.key), genesisKey(version.key)]) {
255
+ if ((await entries.get(key)) === id)
256
+ entries.unset(key);
176
257
  }
177
- drop(id);
178
- return root;
258
+ entries.unset(historyKey(version));
259
+ entries.drop(version);
179
260
  });
180
261
  },
181
262
  async getExpression(id) {
182
263
  return adapter.getExpression(id);
183
264
  },
184
265
  async getCurrent(key) {
185
- return currentOf(adapter, await getRootCid(), key);
266
+ const id = await readId(currentKey(key));
267
+ return id ? adapter.getExpression(id) : null;
186
268
  },
187
269
  async getGenesis(key) {
188
- const id = await lookupInMST(adapter, await getRootCid(), genesisKey(key));
270
+ const id = await readId(genesisKey(key));
189
271
  return id ? adapter.getExpression(id) : null;
190
272
  },
191
273
  async history(key) {
@@ -193,28 +275,37 @@ export function createStorageProvider(adapter, options = {}) {
193
275
  },
194
276
  histories,
195
277
  async listCurrent() {
196
- return load((await listMSTEntries(adapter, await getRootCid(), CURRENT_PREFIX)).map((e) => e.value));
278
+ const ids = await Promise.all((await adapter.list(CURRENT_PREFIX)).map(readId));
279
+ return load(ids.filter((id) => id !== null));
197
280
  },
198
281
  async queryExpressions(collection) {
199
- // The index holds every version kept, not only current ones; the tree says which is current.
200
- const root = await getRootCid();
282
+ // The index holds every version kept, not only current ones; the entries say which is current.
201
283
  const held = await adapter.queryExpressions(collection, Infinity);
202
- const current = await Promise.all(held.map(async (v) => (await lookupInMST(adapter, root, currentKey(v.key))) === v.id));
284
+ const current = await Promise.all(held.map(async (v) => (await readId(currentKey(v.key))) === v.id));
203
285
  return held.filter((_, i) => current[i]);
204
286
  },
205
- async entries() {
206
- return listMSTEntries(adapter, await getRootCid());
287
+ async versionIds() {
288
+ return [...(await loadKept()).values()].flatMap((byId) => [...byId.keys()]);
207
289
  },
208
- async getRootCid() {
209
- return getRootCid();
290
+ items,
291
+ sums,
292
+ async fingerprint() {
293
+ let total = EMPTY_SUM;
294
+ for (const sum of (await sums()).values())
295
+ total = combineSums(total, sum);
296
+ return bytesToHex(await fingerprintOf(total));
297
+ },
298
+ invalidate() {
299
+ kept = null;
300
+ totals = null;
301
+ sets.clear();
210
302
  },
211
- compact,
212
303
  getAdapter() {
213
304
  return adapter;
214
305
  },
215
306
  async close() {
216
307
  await adapter.close();
217
- }
308
+ },
218
309
  });
219
310
  }
220
311
  //# sourceMappingURL=storage-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export * from './sync-messages.js';
2
- export * from './anti-entropy.js';
2
+ export * from './negentropy.js';
3
3
  export * from './sync-engine.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from './sync-messages.js';
2
- export * from './anti-entropy.js';
2
+ export * from './negentropy.js';
3
3
  export * from './sync-engine.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,68 @@
1
+ export declare const NEGENTROPY_VERSION = 97;
2
+ export declare const ID_SIZE = 32;
3
+ export declare const FINGERPRINT_SIZE = 16;
4
+ /** One thing in a set: when (for ordering only) and its 32-byte id */
5
+ export interface Item {
6
+ readonly timestamp: number;
7
+ readonly id: Uint8Array;
8
+ }
9
+ interface Bound {
10
+ readonly timestamp: number;
11
+ /** A prefix of an id, just long enough to fall between two neighbours */
12
+ readonly id: Uint8Array;
13
+ }
14
+ export declare function compareItems(a: Bound, b: Bound): number;
15
+ /** An id as the little-endian 256-bit number the sum is taken over */
16
+ export declare function idToNumber(id: Uint8Array): bigint;
17
+ /** The sum of some ids, and how many — a range's fingerprint before hashing */
18
+ export interface Sum {
19
+ readonly sum: bigint;
20
+ readonly count: number;
21
+ }
22
+ export declare const EMPTY_SUM: Sum;
23
+ export declare const addToSum: (s: Sum, id: Uint8Array) => Sum;
24
+ export declare const removeFromSum: (s: Sum, id: Uint8Array) => Sum;
25
+ export declare const combineSums: (a: Sum, b: Sum) => Sum;
26
+ /** Hashes a sum the one way both sides do: 32 little-endian bytes, then the count as a varint */
27
+ export declare function fingerprintOf(s: Sum): Promise<Uint8Array>;
28
+ /**
29
+ * Items sorted by (timestamp, id), with running sums so any range's
30
+ * fingerprint costs two lookups rather than a pass over it.
31
+ */
32
+ export declare class ItemSet {
33
+ readonly items: ReadonlyArray<Item>;
34
+ /** prefix[i] is the sum of the first i ids */
35
+ private readonly prefix;
36
+ constructor(items: Iterable<Item>);
37
+ get size(): number;
38
+ sum(begin: number, end: number): Sum;
39
+ fingerprint(begin: number, end: number): Promise<Uint8Array>;
40
+ /** The first index in [begin, end) whose item is not below `bound` */
41
+ lowerBound(begin: number, end: number, bound: Bound): number;
42
+ }
43
+ export interface Round {
44
+ /** What to send next; null when the initiator is done */
45
+ readonly message: Uint8Array | null;
46
+ /** Ids this side holds and the other lacks (initiator only) */
47
+ readonly have: ReadonlyArray<Uint8Array>;
48
+ /** Ids the other side holds and this one lacks (initiator only) */
49
+ readonly need: ReadonlyArray<Uint8Array>;
50
+ }
51
+ /**
52
+ * One side of one reconciliation.
53
+ *
54
+ * @param set This side's items
55
+ * @param frameSizeLimit Largest message to produce, in bytes; 0 for no limit.
56
+ * What doesn't fit is left for the next round.
57
+ */
58
+ export declare function createReconciler(set: ItemSet, options: {
59
+ readonly initiator: boolean;
60
+ readonly frameSizeLimit?: number;
61
+ }): {
62
+ /** The first message: the whole set, split into ranges. Initiator only. */
63
+ initiate(): Promise<Uint8Array>;
64
+ /** Takes the other side's message and works out the answer. */
65
+ reconcile(message: Uint8Array): Promise<Round>;
66
+ };
67
+ export {};
68
+ //# sourceMappingURL=negentropy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negentropy.d.ts","sourceRoot":"","sources":["../../src/sync/negentropy.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,kBAAkB,KAAO,CAAC;AACvC,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAYnC,sEAAsE;AACtE,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;CACzB;AAED,UAAU,KAAK;IACb,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;CACzB;AAUD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAEvD;AAgED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAQjD;AAED,+EAA+E;AAC/E,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,GAA2B,CAAC;AAEpD,eAAO,MAAM,QAAQ,GAAI,GAAG,GAAG,EAAE,IAAI,UAAU,KAAG,GAAoE,CAAC;AACvH,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,EAAE,IAAI,UAAU,KAAG,GAA0E,CAAC;AAClI,eAAO,MAAM,WAAW,GAAI,GAAG,GAAG,EAAE,GAAG,GAAG,KAAG,GAAiE,CAAC;AAE/G,iGAAiG;AACjG,wBAAsB,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAU/D;AAID;;;GAGG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;gBAEtB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;IAajC,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI5D,sEAAsE;IACtE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;CAU7D;AAID,MAAM,WAAW,KAAK;IACpB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE;IAqErH,2EAA2E;gBACzD,OAAO,CAAC,UAAU,CAAC;IASrC,+DAA+D;uBACtC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;EAmGvD"}