cojson 0.20.1 → 0.20.3

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 (47) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -7
  3. package/dist/GarbageCollector.d.ts +3 -3
  4. package/dist/GarbageCollector.d.ts.map +1 -1
  5. package/dist/GarbageCollector.js +4 -4
  6. package/dist/GarbageCollector.js.map +1 -1
  7. package/dist/coValueCore/coValueCore.d.ts +23 -3
  8. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  9. package/dist/coValueCore/coValueCore.js +116 -36
  10. package/dist/coValueCore/coValueCore.js.map +1 -1
  11. package/dist/localNode.d.ts +12 -0
  12. package/dist/localNode.d.ts.map +1 -1
  13. package/dist/localNode.js +51 -3
  14. package/dist/localNode.js.map +1 -1
  15. package/dist/permissions.d.ts.map +1 -1
  16. package/dist/permissions.js +5 -0
  17. package/dist/permissions.js.map +1 -1
  18. package/dist/sync.d.ts.map +1 -1
  19. package/dist/sync.js +13 -10
  20. package/dist/sync.js.map +1 -1
  21. package/dist/tests/coValueCore.loadFromStorage.test.js +87 -0
  22. package/dist/tests/coValueCore.loadFromStorage.test.js.map +1 -1
  23. package/dist/tests/group.parentGroupCache.test.js +2 -2
  24. package/dist/tests/group.parentGroupCache.test.js.map +1 -1
  25. package/dist/tests/knownState.lazyLoading.test.js +44 -0
  26. package/dist/tests/knownState.lazyLoading.test.js.map +1 -1
  27. package/dist/tests/permissions.test.js +83 -2
  28. package/dist/tests/permissions.test.js.map +1 -1
  29. package/dist/tests/sync.garbageCollection.test.js +87 -3
  30. package/dist/tests/sync.garbageCollection.test.js.map +1 -1
  31. package/dist/tests/sync.multipleServers.test.js +0 -62
  32. package/dist/tests/sync.multipleServers.test.js.map +1 -1
  33. package/dist/tests/sync.peerReconciliation.test.js +156 -0
  34. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  35. package/package.json +4 -4
  36. package/src/GarbageCollector.ts +4 -3
  37. package/src/coValueCore/coValueCore.ts +129 -39
  38. package/src/localNode.ts +65 -4
  39. package/src/permissions.ts +6 -0
  40. package/src/sync.ts +11 -9
  41. package/src/tests/coValueCore.loadFromStorage.test.ts +108 -0
  42. package/src/tests/group.parentGroupCache.test.ts +2 -2
  43. package/src/tests/knownState.lazyLoading.test.ts +52 -0
  44. package/src/tests/permissions.test.ts +118 -1
  45. package/src/tests/sync.garbageCollection.test.ts +115 -3
  46. package/src/tests/sync.multipleServers.test.ts +0 -65
  47. package/src/tests/sync.peerReconciliation.test.ts +199 -0
@@ -68,68 +68,6 @@ describe("multiple servers peers", () => {
68
68
  expect(map.get("count")).toEqual(4);
69
69
  expect(mapOnSession2.get("count")).toEqual(4);
70
70
  });
71
- expect(SyncMessagesLog.getMessages({
72
- Group: group.core,
73
- Map: map.core,
74
- })).toMatchInlineSnapshot(`
75
- [
76
- "client -> server1 | LOAD Map sessions: empty",
77
- "client -> server2 | LOAD Map sessions: empty",
78
- "client -> server1 | CONTENT Group header: true new: After: 0 New: 3",
79
- "client -> server2 | CONTENT Group header: true new: After: 0 New: 3",
80
- "client -> server1 | CONTENT Map header: true new: After: 0 New: 1",
81
- "client -> server2 | CONTENT Map header: true new: After: 0 New: 1",
82
- "server1 -> client | KNOWN Map sessions: empty",
83
- "server2 -> client | KNOWN Map sessions: empty",
84
- "server1 -> client | KNOWN Group sessions: header/3",
85
- "server2 -> client | KNOWN Group sessions: header/3",
86
- "server1 -> client | KNOWN Map sessions: header/1",
87
- "server1 -> client | CONTENT Group header: true new: After: 0 New: 3",
88
- "server1 -> client | CONTENT Map header: true new: After: 0 New: 1",
89
- "server2 -> client | KNOWN Map sessions: header/1",
90
- "server2 -> client | CONTENT Group header: true new: After: 0 New: 3",
91
- "server2 -> client | CONTENT Map header: true new: After: 0 New: 1",
92
- "client -> server1 | KNOWN Group sessions: header/3",
93
- "client -> server2 | LOAD Group sessions: header/3",
94
- "client -> server1 | KNOWN Map sessions: header/1",
95
- "client -> server2 | CONTENT Map header: true new: After: 0 New: 1",
96
- "client -> server1 | CONTENT Map header: false new: After: 0 New: 1",
97
- "client -> server2 | CONTENT Map header: false new: After: 0 New: 1",
98
- "client -> server1 | CONTENT Map header: false new: After: 1 New: 1",
99
- "client -> server2 | CONTENT Map header: false new: After: 1 New: 1",
100
- "client -> server2 | KNOWN Group sessions: header/3",
101
- "client -> server2 | CONTENT Group header: false new: After: 0 New: 3",
102
- "client -> server2 | KNOWN Map sessions: header/2",
103
- "server2 -> client | KNOWN Map sessions: header/1",
104
- "server1 -> client | KNOWN Map sessions: header/2",
105
- "server1 -> client | CONTENT Map header: false new: After: 0 New: 1",
106
- "server2 -> client | KNOWN Map sessions: header/2",
107
- "server2 -> client | CONTENT Map header: false new: After: 0 New: 1",
108
- "server1 -> client | KNOWN Map sessions: header/3",
109
- "server1 -> client | CONTENT Map header: false new: After: 1 New: 1",
110
- "server2 -> client | KNOWN Map sessions: header/3",
111
- "server2 -> client | CONTENT Map header: false new: After: 1 New: 1",
112
- "server2 -> client | KNOWN Group sessions: header/3",
113
- "client -> server1 | KNOWN Map sessions: header/3",
114
- "client -> server2 | CONTENT Map header: false new: After: 0 New: 1",
115
- "client -> server2 | KNOWN Map sessions: header/3",
116
- "client -> server1 | KNOWN Map sessions: header/3",
117
- "client -> server2 | CONTENT Map header: false new: After: 1 New: 1",
118
- "client -> server2 | KNOWN Map sessions: header/3",
119
- "server2 -> client | KNOWN Map sessions: header/3",
120
- "server2 -> client | KNOWN Map sessions: header/3",
121
- "client -> server1 | CONTENT Map header: false new: After: 1 New: 1",
122
- "client -> server2 | CONTENT Map header: false new: After: 1 New: 1",
123
- "server1 -> client | KNOWN Map sessions: header/4",
124
- "server1 -> client | CONTENT Map header: false new: After: 1 New: 1",
125
- "server2 -> client | KNOWN Map sessions: header/4",
126
- "server2 -> client | CONTENT Map header: false new: After: 1 New: 1",
127
- "client -> server1 | KNOWN Map sessions: header/4",
128
- "client -> server2 | CONTENT Map header: false new: After: 1 New: 1",
129
- "client -> server2 | KNOWN Map sessions: header/4",
130
- "server2 -> client | KNOWN Map sessions: header/4",
131
- ]
132
- `);
133
71
  const mapOnServer1 = server1.node.getCoValue(map.id);
134
72
  const mapOnServer2 = server2.node.getCoValue(map.id);
135
73
  expect(mapOnServer1.knownState()).toEqual(map.core.knownState());
@@ -1 +1 @@
1
- {"version":3,"file":"sync.multipleServers.test.js","sourceRoot":"","sources":["../../src/tests/sync.multipleServers.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.multipleServers.test.js","sourceRoot":"","sources":["../../src/tests/sync.multipleServers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,OAAO,GACR,MAAM,aAAa,CAAC;AAGrB,6EAA6E;AAC7E,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC;AAEvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;AACzC,IAAI,OAAyC,CAAC;AAC9C,IAAI,OAAyC,CAAC;AAE9C,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,eAAe,CAAC,KAAK,EAAE,CAAC;IACxB,OAAO,GAAG,aAAa,EAAE,CAAC;IAC1B,OAAO,GAAG,aAAa,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,MAAwC;IAC9D,MAAM,CAAC,mBAAmB,CAAC;QACzB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,OAAO,CAAC,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,CAAC,mBAAmB,CAAC;QACzB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,OAAO,CAAC,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;KAWvB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAC1C,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEzB,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAE1C,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAEhC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAExD,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAE1C,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9C,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE5C,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;KAmBvB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;YAC1B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,yEAAyE;QACzE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE3C,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAE7C,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;KAiBvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAElC,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,UAAU,EAAE,UAAU,CAAC,IAAI;YAC3B,QAAQ,EAAE,KAAK,CAAC,IAAI;SACrB,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;KAmBvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEnC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAElC,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,QAAQ,CAAC,IAAI;SACnB,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;KAmBvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEnC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAElC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAElC,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,QAAQ,CAAC,IAAI;SACnB,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;KAuBvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,cAAc,CAAC,OAAO,CAAC,CAAC;QAExB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAC/C,OAAO,CAAC,IAAI,EACZ,QAAQ,CAAC,EAAE,CACZ,CAAC;QAEF,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CACjD,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,CACJ,eAAe,CAAC,WAAW,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,EAAE,QAAQ,CAAC,IAAI;SACnB,CAAC,CACH,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0DvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { assert, beforeEach, describe, expect, test } from "vitest";
2
2
  import { expectMap } from "../coValue";
3
+ import { setGarbageCollectorMaxAge } from "../config";
3
4
  import { SyncMessagesLog, TEST_NODE_CONFIG, setupTestAccount, setupTestNode, waitFor, } from "./testUtils";
4
5
  // We want to simulate a real world communication that happens asynchronously
5
6
  TEST_NODE_CONFIG.withAsyncPeers = true;
@@ -7,6 +8,8 @@ let jazzCloud;
7
8
  beforeEach(async () => {
8
9
  SyncMessagesLog.clear();
9
10
  jazzCloud = setupTestNode({ isSyncServer: true });
11
+ // Set GC max age to -1 so items are collected immediately when needed
12
+ setGarbageCollectorMaxAge(-1);
10
13
  });
11
14
  describe("peer reconciliation", () => {
12
15
  test("handle new peer connections", async () => {
@@ -240,4 +243,157 @@ describe("peer reconciliation", () => {
240
243
  expect(expectMap(mapOnSyncServer.getCurrentContent()).get("hello")).toEqual("updated");
241
244
  });
242
245
  });
246
+ describe("peer reconciliation with garbageCollected CoValues", () => {
247
+ test("sends cached known state for garbageCollected CoValues during reconciliation", async () => {
248
+ const client = setupTestNode();
249
+ client.addStorage({ ourName: "client" });
250
+ client.node.enableGarbageCollector();
251
+ const group = client.node.createGroup();
252
+ const map = group.createMap();
253
+ map.set("hello", "world", "trusting");
254
+ // Sync to server first
255
+ client.connectToSyncServer();
256
+ await client.node.syncManager.waitForAllCoValuesSync();
257
+ // Capture the known state before GC
258
+ const mapKnownState = map.core.knownState();
259
+ const groupKnownState = group.core.knownState();
260
+ // Disconnect first to avoid server reloading CoValues after GC
261
+ client.disconnect();
262
+ // Run GC to unmount the CoValues (creates garbageCollected shells)
263
+ // GC works because there are no persistent server peers (disconnected)
264
+ client.node.garbageCollector?.collect();
265
+ client.node.garbageCollector?.collect(); // Second pass for dependencies
266
+ // Verify CoValues are now garbageCollected
267
+ const gcMap = client.node.getCoValue(map.id);
268
+ const gcGroup = client.node.getCoValue(group.id);
269
+ expect(gcMap.loadingState).toBe("garbageCollected");
270
+ expect(gcGroup.loadingState).toBe("garbageCollected");
271
+ // Verify knownState() returns the cached state (not empty)
272
+ expect(gcMap.knownState()).toEqual(mapKnownState);
273
+ expect(gcGroup.knownState()).toEqual(groupKnownState);
274
+ // Reconnect to trigger peer reconciliation
275
+ SyncMessagesLog.clear();
276
+ client.connectToSyncServer();
277
+ // Wait for messages to be exchanged
278
+ await new Promise((resolve) => setTimeout(resolve, 100));
279
+ // LOAD is sent with cached known state (no storage lookup needed)
280
+ expect(SyncMessagesLog.getMessages({
281
+ Group: gcGroup,
282
+ Map: gcMap,
283
+ })).toMatchInlineSnapshot(`
284
+ [
285
+ "client -> server | LOAD Group sessions: header/3",
286
+ "client -> server | LOAD Map sessions: header/1",
287
+ "server -> client | KNOWN Group sessions: header/3",
288
+ "server -> client | KNOWN Map sessions: header/1",
289
+ ]
290
+ `);
291
+ });
292
+ test("garbageCollected CoValues restore subscription with minimal data transfer", async () => {
293
+ // Setup: both client and server have the same data
294
+ const client = setupTestNode();
295
+ client.addStorage({ ourName: "client" });
296
+ client.node.enableGarbageCollector();
297
+ const group = client.node.createGroup();
298
+ const map = group.createMap();
299
+ map.set("hello", "world", "trusting");
300
+ // Sync to server
301
+ client.connectToSyncServer();
302
+ await client.node.syncManager.waitForAllCoValuesSync();
303
+ // Verify server has the data
304
+ const serverMap = jazzCloud.node.getCoValue(map.id);
305
+ expect(serverMap.isAvailable()).toBe(true);
306
+ // Capture known states before GC
307
+ const clientMapKnownState = map.core.knownState();
308
+ const clientGroupKnownState = group.core.knownState();
309
+ // Disconnect before GC to avoid server reloading CoValues
310
+ client.disconnect();
311
+ // Run GC
312
+ client.node.garbageCollector?.collect();
313
+ client.node.garbageCollector?.collect();
314
+ const gcMap = client.node.getCoValue(map.id);
315
+ const gcGroup = client.node.getCoValue(group.id);
316
+ // Verify garbageCollected state
317
+ expect(gcMap.loadingState).toBe("garbageCollected");
318
+ expect(gcGroup.loadingState).toBe("garbageCollected");
319
+ // Reconnect to trigger peer reconciliation
320
+ SyncMessagesLog.clear();
321
+ client.connectToSyncServer();
322
+ // Wait for messages to be exchanged
323
+ await new Promise((resolve) => setTimeout(resolve, 100));
324
+ // LOAD is sent with cached known state
325
+ // Server responds with KNOWN since client and server have the same data
326
+ expect(SyncMessagesLog.getMessages({
327
+ Group: gcGroup,
328
+ Map: gcMap,
329
+ })).toMatchInlineSnapshot(`
330
+ [
331
+ "client -> server | LOAD Group sessions: header/3",
332
+ "client -> server | LOAD Map sessions: header/1",
333
+ "server -> client | KNOWN Group sessions: header/3",
334
+ "server -> client | KNOWN Map sessions: header/1",
335
+ ]
336
+ `);
337
+ });
338
+ test("unknown CoValues return empty knownState during reconciliation", async () => {
339
+ const client = setupTestNode();
340
+ // Create a CoValue on another node that we'll hear about but not load
341
+ const otherClient = setupTestNode();
342
+ const group = otherClient.node.createGroup();
343
+ const map = group.createMap();
344
+ map.set("hello", "world", "trusting");
345
+ // Sync other client to server
346
+ otherClient.connectToSyncServer();
347
+ await otherClient.node.syncManager.waitForAllCoValuesSync();
348
+ // Now client connects - it will hear about the CoValue IDs but not load them
349
+ // Create a reference to the CoValue without loading it
350
+ const unknownCoValue = client.node.getCoValue(map.id);
351
+ // Verify it's in unknown state
352
+ expect(unknownCoValue.loadingState).toBe("unknown");
353
+ // Verify knownState() returns empty state for unknown CoValues
354
+ const knownState = unknownCoValue.knownState();
355
+ expect(knownState.header).toBe(false);
356
+ expect(knownState.sessions).toEqual({});
357
+ });
358
+ test("unknown CoValues are skipped during peer reconciliation (no LOAD sent)", async () => {
359
+ const client = setupTestNode();
360
+ // Create a CoValue on another node
361
+ const otherClient = setupTestNode();
362
+ const group = otherClient.node.createGroup();
363
+ const map = group.createMap();
364
+ map.set("hello", "world", "trusting");
365
+ // Sync other client to server so the server knows about the CoValue
366
+ otherClient.connectToSyncServer();
367
+ await otherClient.node.syncManager.waitForAllCoValuesSync();
368
+ // Client creates its own group (so we have something to compare against)
369
+ const clientGroup = client.node.createGroup();
370
+ const clientMap = clientGroup.createMap();
371
+ clientMap.set("foo", "bar", "trusting");
372
+ // Create a reference to the other client's CoValue WITHOUT loading it
373
+ // This simulates "hearing about" a CoValue ID (e.g., from a reference)
374
+ const unknownCoValue = client.node.getCoValue(map.id);
375
+ expect(unknownCoValue.loadingState).toBe("unknown");
376
+ // Connect client to server - this triggers peer reconciliation
377
+ SyncMessagesLog.clear();
378
+ client.connectToSyncServer();
379
+ await client.node.syncManager.waitForAllCoValuesSync();
380
+ // Verify: LOAD sent for client's own CoValues, but NOT for the unknown CoValue
381
+ expect(SyncMessagesLog.getMessages({
382
+ ClientGroup: clientGroup.core,
383
+ ClientMap: clientMap.core,
384
+ UnknownMap: unknownCoValue,
385
+ })).toMatchInlineSnapshot(`
386
+ [
387
+ "client -> server | LOAD ClientGroup sessions: header/3",
388
+ "client -> server | LOAD ClientMap sessions: header/1",
389
+ "client -> server | CONTENT ClientGroup header: true new: After: 0 New: 3",
390
+ "client -> server | CONTENT ClientMap header: true new: After: 0 New: 1",
391
+ "server -> client | KNOWN ClientGroup sessions: empty",
392
+ "server -> client | KNOWN ClientMap sessions: empty",
393
+ "server -> client | KNOWN ClientGroup sessions: header/3",
394
+ "server -> client | KNOWN ClientMap sessions: header/1",
395
+ ]
396
+ `);
397
+ });
398
+ });
243
399
  //# sourceMappingURL=sync.peerReconciliation.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.peerReconciliation.test.js","sourceRoot":"","sources":["../../src/tests/sync.peerReconciliation.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.peerReconciliation.test.js","sourceRoot":"","sources":["../../src/tests/sync.peerReconciliation.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "type": "module",
31
31
  "license": "MIT",
32
- "version": "0.20.1",
32
+ "version": "0.20.3",
33
33
  "devDependencies": {
34
34
  "@opentelemetry/sdk-metrics": "^2.0.0",
35
35
  "libsql": "^0.5.13",
@@ -42,9 +42,9 @@
42
42
  "@opentelemetry/api": "^1.9.0",
43
43
  "@scure/base": "1.2.1",
44
44
  "unicode-segmenter": "^0.12.0",
45
- "cojson-core-wasm": "0.20.1",
46
- "cojson-core-napi": "0.20.1",
47
- "cojson-core-rn": "0.20.1"
45
+ "cojson-core-wasm": "0.20.3",
46
+ "cojson-core-napi": "0.20.3",
47
+ "cojson-core-rn": "0.20.3"
48
48
  },
49
49
  "gitHead": "33c27053293b4801b968c61d5c4c989f93a67d13",
50
50
  "scripts": {
@@ -1,6 +1,7 @@
1
1
  import { CoValueCore } from "./coValueCore/coValueCore.js";
2
2
  import { GARBAGE_COLLECTOR_CONFIG } from "./config.js";
3
3
  import { RawCoID } from "./ids.js";
4
+ import type { LocalNode } from "./localNode.js";
4
5
 
5
6
  /**
6
7
  * TTL-based garbage collector for removing unused CoValues from memory.
@@ -8,7 +9,7 @@ import { RawCoID } from "./ids.js";
8
9
  export class GarbageCollector {
9
10
  private readonly interval: ReturnType<typeof setInterval>;
10
11
 
11
- constructor(private readonly coValues: Map<RawCoID, CoValueCore>) {
12
+ constructor(private readonly node: LocalNode) {
12
13
  this.interval = setInterval(() => {
13
14
  this.collect();
14
15
  }, GARBAGE_COLLECTOR_CONFIG.INTERVAL);
@@ -26,7 +27,7 @@ export class GarbageCollector {
26
27
 
27
28
  collect() {
28
29
  const currentTime = this.getCurrentTime();
29
- for (const coValue of this.coValues.values()) {
30
+ for (const coValue of this.node.allCoValues()) {
30
31
  const { verified } = coValue;
31
32
 
32
33
  if (!verified?.lastAccessed) {
@@ -36,7 +37,7 @@ export class GarbageCollector {
36
37
  const timeSinceLastAccessed = currentTime - verified.lastAccessed;
37
38
 
38
39
  if (timeSinceLastAccessed > GARBAGE_COLLECTOR_CONFIG.MAX_AGE) {
39
- coValue.unmount();
40
+ this.node.internalUnmountCoValue(coValue.id);
40
41
  }
41
42
  }
42
43
  }
@@ -282,6 +282,15 @@ export class CoValueCore {
282
282
  }
283
283
  >();
284
284
 
285
+ // Tracks why we have lastKnownState (separate from loadingStatuses)
286
+ // - "garbageCollected": was in memory, got GC'd
287
+ // - "onlyKnownState": checked storage, found knownState, but didn't load full content
288
+ #lastKnownStateSource?: "garbageCollected" | "onlyKnownState";
289
+
290
+ // Cache the knownState when transitioning to garbageCollected/onlyKnownState
291
+ // Used during peer reconciliation to send accurate LOAD requests
292
+ #lastKnownState?: CoValueKnownState;
293
+
285
294
  // cached state and listeners
286
295
  private _cachedContent?: RawCoValue;
287
296
  readonly listeners: Set<(core: CoValueCore, unsub: () => void) => void> =
@@ -308,14 +317,26 @@ export class CoValueCore {
308
317
  get loadingState() {
309
318
  if (this.verified) {
310
319
  return "available";
311
- } else if (this.loadingStatuses.size === 0) {
312
- return "unknown";
313
320
  }
314
321
 
322
+ // Check for pending peers FIRST - loading takes priority over other states
315
323
  for (const peer of this.loadingStatuses.values()) {
316
324
  if (peer.type === "pending") {
317
325
  return "loading";
318
- } else if (peer.type === "unknown") {
326
+ }
327
+ }
328
+
329
+ // Check for lastKnownStateSource (garbageCollected or onlyKnownState)
330
+ if (this.#lastKnownStateSource) {
331
+ return this.#lastKnownStateSource;
332
+ }
333
+
334
+ if (this.loadingStatuses.size === 0) {
335
+ return "unknown";
336
+ }
337
+
338
+ for (const peer of this.loadingStatuses.values()) {
339
+ if (peer.type === "unknown") {
319
340
  return "unknown";
320
341
  }
321
342
  }
@@ -429,32 +450,22 @@ export class CoValueCore {
429
450
  }
430
451
 
431
452
  /**
432
- * Removes the CoValue from memory.
453
+ * Removes the CoValue content from memory but keeps a shell with cached knownState.
454
+ * This enables accurate LOAD requests during peer reconciliation.
433
455
  *
434
456
  * @returns true if the coValue was successfully unmounted, false otherwise
435
457
  */
436
458
  unmount(): boolean {
437
- if (this.listeners.size > 0) {
438
- // The coValue is still in use
439
- return false;
440
- }
441
-
442
- for (const dependant of this.dependant) {
443
- if (this.node.hasCoValue(dependant)) {
444
- // Another in-memory coValue depends on this coValue
445
- return false;
446
- }
447
- }
448
-
449
- if (!this.node.syncManager.isSyncedToServerPeers(this.id)) {
450
- return false;
451
- }
459
+ return this.node.internalUnmountCoValue(this.id);
460
+ }
452
461
 
462
+ /**
463
+ * Decrements the counter for the current loading state.
464
+ * Used during unmount to properly track state transitions.
465
+ * @internal
466
+ */
467
+ decrementLoadingStateCounter() {
453
468
  this.counter.add(-1, { state: this.loadingState });
454
-
455
- this.node.internalDeleteCoValue(this.id);
456
-
457
- return true;
458
469
  }
459
470
 
460
471
  markNotFoundInPeer(peerId: PeerID) {
@@ -470,6 +481,35 @@ export class CoValueCore {
470
481
  this.scheduleNotifyUpdate();
471
482
  }
472
483
 
484
+ /**
485
+ * Clean up cached state when CoValue becomes available.
486
+ * Called after the CoValue transitions from garbageCollected/onlyKnownState to available.
487
+ */
488
+ private cleanupLastKnownState() {
489
+ // Clear both fields - in-memory verified state is now authoritative
490
+ this.#lastKnownStateSource = undefined;
491
+ this.#lastKnownState = undefined;
492
+ }
493
+
494
+ /**
495
+ * Initialize this CoValueCore as a garbageCollected shell.
496
+ * Called when creating a replacement CoValueCore after unmounting.
497
+ */
498
+ setGarbageCollectedState(knownState: CoValueKnownState) {
499
+ // Only set garbageCollected state if storage is active
500
+ // Without storage, we can't reload the CoValue anyway
501
+ if (!this.node.storage) {
502
+ return;
503
+ }
504
+
505
+ // Transition counter from 'unknown' (set by constructor) to 'garbageCollected'
506
+ // previousState will be 'unknown', newState will be 'garbageCollected'
507
+ const previousState = this.loadingState;
508
+ this.#lastKnownStateSource = "garbageCollected";
509
+ this.#lastKnownState = knownState;
510
+ this.updateCounter(previousState);
511
+ }
512
+
473
513
  missingDependencies = new Set<RawCoID>();
474
514
 
475
515
  isCircularDependency(dependency: CoValueCore) {
@@ -576,6 +616,10 @@ export class CoValueCore {
576
616
  header,
577
617
  new SessionMap(this.id, this.node.crypto, streamingKnownState),
578
618
  );
619
+ // Clean up if transitioning from garbageCollected/onlyKnownState
620
+ if (this.isAvailable()) {
621
+ this.cleanupLastKnownState();
622
+ }
579
623
 
580
624
  return true;
581
625
  }
@@ -606,10 +650,11 @@ export class CoValueCore {
606
650
  * Used to correctly manage the content & subscriptions during the content streaming process
607
651
  */
608
652
  knownStateWithStreaming(): CoValueKnownState {
609
- return (
610
- this.verified?.immutableKnownStateWithStreaming() ??
611
- emptyKnownState(this.id)
612
- );
653
+ if (this.verified) {
654
+ return this.verified.immutableKnownStateWithStreaming();
655
+ }
656
+
657
+ return this.knownState();
613
658
  }
614
659
 
615
660
  /**
@@ -618,9 +663,22 @@ export class CoValueCore {
618
663
  * The return value identity is going to be stable as long as the CoValue is not modified.
619
664
  *
620
665
  * On change the knownState is invalidated and a new object is returned.
666
+ *
667
+ * For garbageCollected/onlyKnownState CoValues, returns the cached knownState.
621
668
  */
622
669
  knownState(): CoValueKnownState {
623
- return this.verified?.immutableKnownState() ?? emptyKnownState(this.id);
670
+ // 1. If we have verified content in memory, use that (authoritative)
671
+ if (this.verified) {
672
+ return this.verified.immutableKnownState();
673
+ }
674
+
675
+ // 2. If we have last known state (GC'd or onlyKnownState), use that
676
+ if (this.#lastKnownState) {
677
+ return this.#lastKnownState;
678
+ }
679
+
680
+ // 3. Fallback to empty state (truly unknown CoValue)
681
+ return emptyKnownState(this.id);
624
682
  }
625
683
 
626
684
  /**
@@ -1756,7 +1814,7 @@ export class CoValueCore {
1756
1814
  );
1757
1815
  }
1758
1816
 
1759
- if (this.verified.header.ruleset.type === "group") {
1817
+ if (this.isGroupOrAccount()) {
1760
1818
  return expectGroup(this.getCurrentContent()).getCurrentReadKey();
1761
1819
  } else if (this.verified.header.ruleset.type === "ownedByGroup") {
1762
1820
  return this.node
@@ -1784,16 +1842,26 @@ export class CoValueCore {
1784
1842
  );
1785
1843
  }
1786
1844
 
1787
- // Getting the readKey from accounts
1788
- if (this.verified.header.ruleset.type === "group") {
1845
+ if (this.isGroup()) {
1846
+ // is group
1789
1847
  const content = expectGroup(
1790
- // load the account without private transactions, because we are here
1791
- // to be able to decrypt those
1848
+ // Private transactions are not considered valid in groups, so we don't need to pass
1849
+ // ignorePrivateTransactions: true to safely load the content
1850
+ this.getCurrentContent(),
1851
+ );
1852
+
1853
+ return content.getReadKey(keyID);
1854
+ } else if (this.isGroupOrAccount()) {
1855
+ // is account
1856
+ const content = expectGroup(
1857
+ // Old accounts might have private transactions, because we were encrypting the root id in the past
1858
+ // So we need to load the account without private transactions, because we can't decrypt them without the read key
1792
1859
  this.getCurrentContent({ ignorePrivateTransactions: true }),
1793
1860
  );
1794
1861
 
1795
1862
  return content.getReadKey(keyID);
1796
1863
  } else if (this.verified.header.ruleset.type === "ownedByGroup") {
1864
+ // is a CoValue owned by a group
1797
1865
  return expectGroup(
1798
1866
  this.node
1799
1867
  .expectCoValueLoaded(this.verified.header.ruleset.group)
@@ -1891,7 +1959,16 @@ export class CoValueCore {
1891
1959
  return;
1892
1960
  }
1893
1961
 
1894
- if (currentState !== "unknown") {
1962
+ // Check if we need to load from storage:
1963
+ // - If storage state is not unknown (already tried), AND
1964
+ // - Overall state is not garbageCollected/onlyKnownState (which need full content)
1965
+ // Then return early
1966
+ const overallState = this.loadingState;
1967
+ if (
1968
+ currentState !== "unknown" &&
1969
+ overallState !== "garbageCollected" &&
1970
+ overallState !== "onlyKnownState"
1971
+ ) {
1895
1972
  done?.(currentState === "available");
1896
1973
  return;
1897
1974
  }
@@ -1916,7 +1993,8 @@ export class CoValueCore {
1916
1993
  * Lazily load only the knownState from storage without loading full transaction data.
1917
1994
  * This is useful for checking if a peer needs new content before committing to a full load.
1918
1995
  *
1919
- * Caching and deduplication are handled at the storage layer.
1996
+ * If found in storage, marks the CoValue as onlyKnownState and caches the knownState.
1997
+ * This enables accurate LOAD requests during peer reconciliation.
1920
1998
  *
1921
1999
  * @param done - Callback with the storage knownState, or undefined if not found in storage
1922
2000
  */
@@ -1928,14 +2006,26 @@ export class CoValueCore {
1928
2006
  return;
1929
2007
  }
1930
2008
 
1931
- // If already available in memory, return the current knownState
1932
- if (this.isAvailable()) {
1933
- done(this.knownState());
2009
+ // If we already have knowledge about this CoValue (in memory or cached), return it
2010
+ // knownState() returns verified state, lastKnownState, or empty state
2011
+ const knownState = this.knownState();
2012
+ if (knownState.header) {
2013
+ done(knownState);
1934
2014
  return;
1935
2015
  }
1936
2016
 
1937
2017
  // Delegate to storage - caching is handled at storage level
1938
- this.node.storage.loadKnownState(this.id, done);
2018
+ this.node.storage.loadKnownState(this.id, (knownState) => {
2019
+ // The coValue could become available in the meantime.
2020
+ if (knownState && !this.isAvailable()) {
2021
+ // Cache the knownState and mark as onlyKnownState
2022
+ const previousState = this.loadingState;
2023
+ this.#lastKnownStateSource = "onlyKnownState";
2024
+ this.#lastKnownState = knownState;
2025
+ this.updateCounter(previousState);
2026
+ }
2027
+ done(knownState);
2028
+ });
1939
2029
  }
1940
2030
 
1941
2031
  loadFromPeers(peers: PeerState[], mode?: LoadMode) {