cojson 0.20.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +21 -0
  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/PeerState.d.ts +6 -1
  8. package/dist/PeerState.d.ts.map +1 -1
  9. package/dist/PeerState.js +18 -3
  10. package/dist/PeerState.js.map +1 -1
  11. package/dist/coValueCore/coValueCore.d.ts +26 -5
  12. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  13. package/dist/coValueCore/coValueCore.js +115 -50
  14. package/dist/coValueCore/coValueCore.js.map +1 -1
  15. package/dist/coValues/coList.d.ts +1 -0
  16. package/dist/coValues/coList.d.ts.map +1 -1
  17. package/dist/coValues/coList.js +3 -0
  18. package/dist/coValues/coList.js.map +1 -1
  19. package/dist/config.d.ts +2 -2
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +4 -4
  22. package/dist/config.js.map +1 -1
  23. package/dist/exports.d.ts +3 -3
  24. package/dist/exports.d.ts.map +1 -1
  25. package/dist/exports.js +2 -2
  26. package/dist/exports.js.map +1 -1
  27. package/dist/localNode.d.ts +12 -0
  28. package/dist/localNode.d.ts.map +1 -1
  29. package/dist/localNode.js +51 -3
  30. package/dist/localNode.js.map +1 -1
  31. package/dist/queue/LinkedList.d.ts +9 -3
  32. package/dist/queue/LinkedList.d.ts.map +1 -1
  33. package/dist/queue/LinkedList.js +30 -1
  34. package/dist/queue/LinkedList.js.map +1 -1
  35. package/dist/queue/OutgoingLoadQueue.d.ts +95 -0
  36. package/dist/queue/OutgoingLoadQueue.d.ts.map +1 -0
  37. package/dist/queue/OutgoingLoadQueue.js +240 -0
  38. package/dist/queue/OutgoingLoadQueue.js.map +1 -0
  39. package/dist/sync.d.ts.map +1 -1
  40. package/dist/sync.js +34 -41
  41. package/dist/sync.js.map +1 -1
  42. package/dist/tests/LinkedList.test.js +90 -0
  43. package/dist/tests/LinkedList.test.js.map +1 -1
  44. package/dist/tests/OutgoingLoadQueue.test.d.ts +2 -0
  45. package/dist/tests/OutgoingLoadQueue.test.d.ts.map +1 -0
  46. package/dist/tests/OutgoingLoadQueue.test.js +814 -0
  47. package/dist/tests/OutgoingLoadQueue.test.js.map +1 -0
  48. package/dist/tests/coValueCore.loadFromStorage.test.js +87 -0
  49. package/dist/tests/coValueCore.loadFromStorage.test.js.map +1 -1
  50. package/dist/tests/knownState.lazyLoading.test.js +44 -0
  51. package/dist/tests/knownState.lazyLoading.test.js.map +1 -1
  52. package/dist/tests/sync.concurrentLoad.test.d.ts +2 -0
  53. package/dist/tests/sync.concurrentLoad.test.d.ts.map +1 -0
  54. package/dist/tests/sync.concurrentLoad.test.js +481 -0
  55. package/dist/tests/sync.concurrentLoad.test.js.map +1 -0
  56. package/dist/tests/sync.garbageCollection.test.js +87 -3
  57. package/dist/tests/sync.garbageCollection.test.js.map +1 -1
  58. package/dist/tests/sync.multipleServers.test.js +0 -62
  59. package/dist/tests/sync.multipleServers.test.js.map +1 -1
  60. package/dist/tests/sync.peerReconciliation.test.js +156 -0
  61. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  62. package/dist/tests/sync.storage.test.js +1 -1
  63. package/dist/tests/testStorage.d.ts.map +1 -1
  64. package/dist/tests/testStorage.js +3 -1
  65. package/dist/tests/testStorage.js.map +1 -1
  66. package/dist/tests/testUtils.d.ts +1 -0
  67. package/dist/tests/testUtils.d.ts.map +1 -1
  68. package/dist/tests/testUtils.js +2 -1
  69. package/dist/tests/testUtils.js.map +1 -1
  70. package/package.json +4 -4
  71. package/src/GarbageCollector.ts +4 -3
  72. package/src/PeerState.ts +26 -3
  73. package/src/coValueCore/coValueCore.ts +129 -53
  74. package/src/coValues/coList.ts +4 -0
  75. package/src/config.ts +4 -4
  76. package/src/exports.ts +2 -2
  77. package/src/localNode.ts +65 -4
  78. package/src/queue/LinkedList.ts +34 -4
  79. package/src/queue/OutgoingLoadQueue.ts +307 -0
  80. package/src/sync.ts +37 -43
  81. package/src/tests/LinkedList.test.ts +111 -0
  82. package/src/tests/OutgoingLoadQueue.test.ts +1129 -0
  83. package/src/tests/coValueCore.loadFromStorage.test.ts +108 -0
  84. package/src/tests/knownState.lazyLoading.test.ts +52 -0
  85. package/src/tests/sync.concurrentLoad.test.ts +650 -0
  86. package/src/tests/sync.garbageCollection.test.ts +115 -3
  87. package/src/tests/sync.multipleServers.test.ts +0 -65
  88. package/src/tests/sync.peerReconciliation.test.ts +199 -0
  89. package/src/tests/sync.storage.test.ts +1 -1
  90. package/src/tests/testStorage.ts +3 -1
  91. package/src/tests/testUtils.ts +3 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson@0.20.0 build /home/runner/_work/jazz/jazz/packages/cojson
2
+ > cojson@0.20.2 build /home/runner/_work/jazz/jazz/packages/cojson
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # cojson
2
2
 
3
+ ## 0.20.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 251a89e: Optimized peer reconciliation to prevent unnecessary data transfer on reconnect.
8
+ - cojson-core-wasm@0.20.2
9
+ - cojson-core-rn@0.20.2
10
+ - cojson-core-napi@0.20.2
11
+
12
+ ## 0.20.1
13
+
14
+ ### Patch Changes
15
+
16
+ - 03195eb: Added client-side load request throttling to improve the loading experience when loading a lot of data concurrently.
17
+
18
+ When a client requests more than 1k CoValues concurrently, load requests are now queued locally and sent as capacity becomes available.
19
+
20
+ - cojson-core-wasm@0.20.1
21
+ - cojson-core-rn@0.20.1
22
+ - cojson-core-napi@0.20.1
23
+
3
24
  ## 0.20.0
4
25
 
5
26
  ### Minor Changes
@@ -1,12 +1,12 @@
1
1
  import { CoValueCore } from "./coValueCore/coValueCore.js";
2
- import { RawCoID } from "./ids.js";
2
+ import type { LocalNode } from "./localNode.js";
3
3
  /**
4
4
  * TTL-based garbage collector for removing unused CoValues from memory.
5
5
  */
6
6
  export declare class GarbageCollector {
7
- private readonly coValues;
7
+ private readonly node;
8
8
  private readonly interval;
9
- constructor(coValues: Map<RawCoID, CoValueCore>);
9
+ constructor(node: LocalNode);
10
10
  getCurrentTime(): number;
11
11
  trackCoValueAccess({ verified }: CoValueCore): void;
12
12
  collect(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GarbageCollector.d.ts","sourceRoot":"","sources":["../src/GarbageCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC;;GAEG;AACH,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAE7B,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;IAMhE,cAAc;IAId,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;IAM5C,OAAO;IAiBP,IAAI;CAGL"}
1
+ {"version":3,"file":"GarbageCollector.d.ts","sourceRoot":"","sources":["../src/GarbageCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAE7B,IAAI,EAAE,SAAS;IAM5C,cAAc;IAId,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;IAM5C,OAAO;IAiBP,IAAI;CAGL"}
@@ -3,8 +3,8 @@ import { GARBAGE_COLLECTOR_CONFIG } from "./config.js";
3
3
  * TTL-based garbage collector for removing unused CoValues from memory.
4
4
  */
5
5
  export class GarbageCollector {
6
- constructor(coValues) {
7
- this.coValues = coValues;
6
+ constructor(node) {
7
+ this.node = node;
8
8
  this.interval = setInterval(() => {
9
9
  this.collect();
10
10
  }, GARBAGE_COLLECTOR_CONFIG.INTERVAL);
@@ -19,14 +19,14 @@ export class GarbageCollector {
19
19
  }
20
20
  collect() {
21
21
  const currentTime = this.getCurrentTime();
22
- for (const coValue of this.coValues.values()) {
22
+ for (const coValue of this.node.allCoValues()) {
23
23
  const { verified } = coValue;
24
24
  if (!verified?.lastAccessed) {
25
25
  continue;
26
26
  }
27
27
  const timeSinceLastAccessed = currentTime - verified.lastAccessed;
28
28
  if (timeSinceLastAccessed > GARBAGE_COLLECTOR_CONFIG.MAX_AGE) {
29
- coValue.unmount();
29
+ this.node.internalUnmountCoValue(coValue.id);
30
30
  }
31
31
  }
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GarbageCollector.js","sourceRoot":"","sources":["../src/GarbageCollector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAG3B,YAA6B,QAAmC;QAAnC,aAAQ,GAAR,QAAQ,CAA2B;QAC9D,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,cAAc;QACZ,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,kBAAkB,CAAC,EAAE,QAAQ,EAAe;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAE7B,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;YAElE,IAAI,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,EAAE,CAAC;gBAC7D,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI;QACF,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"GarbageCollector.js","sourceRoot":"","sources":["../src/GarbageCollector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAIvD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAG3B,YAA6B,IAAe;QAAf,SAAI,GAAJ,IAAI,CAAW;QAC1C,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,cAAc;QACZ,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,kBAAkB,CAAC,EAAE,QAAQ,EAAe;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAE7B,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;YAElE,IAAI,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI;QACF,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -1,6 +1,8 @@
1
1
  import { PeerKnownState } from "./coValueCore/PeerKnownState.js";
2
+ import { CoValueCore } from "./exports.js";
2
3
  import { RawCoID } from "./ids.js";
3
4
  import { CoValueKnownState } from "./knownState.js";
5
+ import { type LoadMode } from "./queue/OutgoingLoadQueue.js";
4
6
  import { Peer, SyncMessage } from "./sync.js";
5
7
  export declare class PeerState {
6
8
  private peer;
@@ -23,7 +25,10 @@ export declare class PeerState {
23
25
  newPeerStateFrom(peer: Peer): PeerState;
24
26
  readonly toldKnownState: Set<RawCoID>;
25
27
  readonly loadRequestSent: Set<RawCoID>;
26
- trackLoadRequestSent(id: RawCoID): void;
28
+ private loadQueue;
29
+ sendLoadRequest(coValue: CoValueCore, mode?: LoadMode): void;
30
+ trackLoadRequestUpdate(coValue: CoValueCore): void;
31
+ trackLoadRequestComplete(coValue: CoValueCore): void;
27
32
  trackToldKnownState(id: RawCoID): void;
28
33
  private getOrCreateKnownState;
29
34
  updateHeader(id: RawCoID, header: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"PeerState.d.ts","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,qBAAa,SAAS;IASlB,OAAO,CAAC,IAAI;IARd;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAGlD,IAAI,EAAE,IAAI,EAClB,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,SAAS;IAKvD,aAAa,CAAC,EAAE,EAAE,OAAO;IAIzB,uBAAuB,CAAC,EAAE,EAAE,OAAO;IAInC,yBAAyB,CAAC,EAAE,EAAE,OAAO;IAIrC;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAe3B,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IAClD,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IAEnD,oBAAoB,CAAC,EAAE,EAAE,OAAO;IAKhC,mBAAmB,CAAC,EAAE,EAAE,OAAO;IAI/B,OAAO,CAAC,qBAAqB;IAW7B,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAMzC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAMjD,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAM3D,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAM/D;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,EAAE,OAAO;IAS7B,OAAO,CAAC,SAAS,CAA2D;IAE5E,OAAO,CAAC,aAAa;IAMrB,6BAA6B,CAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI;IASxD,IAAI,EAAE,WAEL;IAED,IAAI,IAAI,wBAEP;IAED,IAAI,QAAQ,uBAEX;IAEM,MAAM,UAAS;IAEtB,IAAI,QAAQ,4CAEX;IAED,IAAI,UAAU,wBAEb;IAED,mBAAmB,CAAC,GAAG,EAAE,WAAW;IAIpC,cAAc,YAAiB,IAAI,EAAI;IAEvC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI;IAarC,SAAS;IAQT,gBAAgB,IAAI,IAAI;CAgBzB"}
1
+ {"version":3,"file":"PeerState.d.ts","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,KAAK,QAAQ,EAAqB,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,qBAAa,SAAS;IASlB,OAAO,CAAC,IAAI;IARd;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAGlD,IAAI,EAAE,IAAI,EAClB,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,SAAS;IAMvD,aAAa,CAAC,EAAE,EAAE,OAAO;IAIzB,uBAAuB,CAAC,EAAE,EAAE,OAAO;IAInC,yBAAyB,CAAC,EAAE,EAAE,OAAO;IAIrC;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAe3B,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IAClD,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IACnD,OAAO,CAAC,SAAS,CAAoB;IAErC,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI;IAe5D,sBAAsB,CAAC,OAAO,EAAE,WAAW;IAI3C,wBAAwB,CAAC,OAAO,EAAE,WAAW;IAI7C,mBAAmB,CAAC,EAAE,EAAE,OAAO;IAI/B,OAAO,CAAC,qBAAqB;IAW7B,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAMzC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAMjD,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAM3D,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAM/D;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,EAAE,OAAO;IAS7B,OAAO,CAAC,SAAS,CAA2D;IAE5E,OAAO,CAAC,aAAa;IAMrB,6BAA6B,CAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI;IASxD,IAAI,EAAE,WAEL;IAED,IAAI,IAAI,wBAEP;IAED,IAAI,QAAQ,uBAEX;IAEM,MAAM,UAAS;IAEtB,IAAI,QAAQ,4CAEX;IAED,IAAI,UAAU,wBAEb;IAED,mBAAmB,CAAC,GAAG,EAAE,WAAW;IAIpC,cAAc,YAAiB,IAAI,EAAI;IAEvC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI;IAarC,SAAS;IAQT,gBAAgB,IAAI,IAAI;CAiBzB"}
package/dist/PeerState.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { PeerKnownState } from "./coValueCore/PeerKnownState.js";
2
2
  import { logger } from "./logger.js";
3
+ import { OutgoingLoadQueue } from "./queue/OutgoingLoadQueue.js";
3
4
  export class PeerState {
4
5
  constructor(peer, knownStates) {
5
6
  this.peer = peer;
@@ -9,6 +10,7 @@ export class PeerState {
9
10
  this.closed = false;
10
11
  this.closeListeners = new Set();
11
12
  this._knownStates = knownStates ?? new Map();
13
+ this.loadQueue = new OutgoingLoadQueue(peer.id);
12
14
  }
13
15
  getKnownState(id) {
14
16
  return this._knownStates.get(id)?.value();
@@ -37,9 +39,21 @@ export class PeerState {
37
39
  }
38
40
  return new PeerState(peer, knownStates);
39
41
  }
40
- trackLoadRequestSent(id) {
41
- this.toldKnownState.add(id);
42
- this.loadRequestSent.add(id);
42
+ sendLoadRequest(coValue, mode) {
43
+ this.toldKnownState.add(coValue.id);
44
+ this.loadRequestSent.add(coValue.id);
45
+ this.loadQueue.enqueue(coValue, () => {
46
+ this.pushOutgoingMessage({
47
+ action: "load",
48
+ ...coValue.knownStateWithStreaming(),
49
+ });
50
+ }, mode);
51
+ }
52
+ trackLoadRequestUpdate(coValue) {
53
+ this.loadQueue.trackUpdate(coValue);
54
+ }
55
+ trackLoadRequestComplete(coValue) {
56
+ this.loadQueue.trackComplete(coValue);
43
57
  }
44
58
  trackToldKnownState(id) {
45
59
  this.toldKnownState.add(id);
@@ -139,6 +153,7 @@ export class PeerState {
139
153
  peerRole: this.role,
140
154
  });
141
155
  this.closed = true;
156
+ this.loadQueue.clear();
142
157
  this.peer.outgoing.push("Disconnected");
143
158
  this.peer.outgoing.close();
144
159
  this.peer.incoming.close();
@@ -1 +1 @@
1
- {"version":3,"file":"PeerState.js","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PeerState.js","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { PeerState } from "../PeerState.js";
2
2
  import type { RawCoValue } from "../coValue.js";
3
+ import type { LoadMode } from "../queue/OutgoingLoadQueue.js";
3
4
  import { type ControlledAccountOrAgent } from "../coValues/account.js";
4
5
  import type { RawGroup } from "../coValues/group.js";
5
6
  import { CryptoProvider, Hash, KeyID, KeySecret, Signature, SignerID } from "../crypto/crypto.js";
@@ -77,7 +78,7 @@ export declare class CoValueCore {
77
78
  readonly listeners: Set<(core: CoValueCore, unsub: () => void) => void>;
78
79
  private counter;
79
80
  constructor(id: RawCoID, node: LocalNode);
80
- get loadingState(): "available" | "unknown" | "loading" | "unavailable";
81
+ get loadingState(): "available" | "loading" | "garbageCollected" | "onlyKnownState" | "unknown" | "unavailable";
81
82
  hasMissingDependencies(): boolean;
82
83
  isAvailable(): this is AvailableCoValueCore;
83
84
  isCompletelyDownloaded(): boolean;
@@ -102,13 +103,30 @@ export declare class CoValueCore {
102
103
  getLoadingStateForPeer(peerId: PeerID): "available" | "unknown" | "unavailable" | "pending" | "errored";
103
104
  private updateCounter;
104
105
  /**
105
- * Removes the CoValue from memory.
106
+ * Removes the CoValue content from memory but keeps a shell with cached knownState.
107
+ * This enables accurate LOAD requests during peer reconciliation.
106
108
  *
107
109
  * @returns true if the coValue was successfully unmounted, false otherwise
108
110
  */
109
111
  unmount(): boolean;
112
+ /**
113
+ * Decrements the counter for the current loading state.
114
+ * Used during unmount to properly track state transitions.
115
+ * @internal
116
+ */
117
+ decrementLoadingStateCounter(): void;
110
118
  markNotFoundInPeer(peerId: PeerID): void;
111
119
  markFoundInPeer(peerId: PeerID, previousState: string): void;
120
+ /**
121
+ * Clean up cached state when CoValue becomes available.
122
+ * Called after the CoValue transitions from garbageCollected/onlyKnownState to available.
123
+ */
124
+ private cleanupLastKnownState;
125
+ /**
126
+ * Initialize this CoValueCore as a garbageCollected shell.
127
+ * Called when creating a replacement CoValueCore after unmounting.
128
+ */
129
+ setGarbageCollectedState(knownState: CoValueKnownState): void;
112
130
  missingDependencies: Set<`co_z${string}`>;
113
131
  isCircularDependency(dependency: CoValueCore): boolean;
114
132
  newContentQueue: {
@@ -136,6 +154,8 @@ export declare class CoValueCore {
136
154
  * The return value identity is going to be stable as long as the CoValue is not modified.
137
155
  *
138
156
  * On change the knownState is invalidated and a new object is returned.
157
+ *
158
+ * For garbageCollected/onlyKnownState CoValues, returns the cached knownState.
139
159
  */
140
160
  knownState(): CoValueKnownState;
141
161
  /**
@@ -317,18 +337,19 @@ export declare class CoValueCore {
317
337
  waitForSync(options?: {
318
338
  timeout?: number;
319
339
  }): Promise<unknown[]>;
320
- load(peers: PeerState[]): void;
340
+ load(peers: PeerState[], mode?: LoadMode): void;
321
341
  loadFromStorage(done?: (found: boolean) => void): void;
322
342
  /**
323
343
  * Lazily load only the knownState from storage without loading full transaction data.
324
344
  * This is useful for checking if a peer needs new content before committing to a full load.
325
345
  *
326
- * Caching and deduplication are handled at the storage layer.
346
+ * If found in storage, marks the CoValue as onlyKnownState and caches the knownState.
347
+ * This enables accurate LOAD requests during peer reconciliation.
327
348
  *
328
349
  * @param done - Callback with the storage knownState, or undefined if not found in storage
329
350
  */
330
351
  getKnownStateFromStorage(done: (knownState: CoValueKnownState | undefined) => void): void;
331
- loadFromPeers(peers: PeerState[]): void;
352
+ loadFromPeers(peers: PeerState[], mode?: LoadMode): void;
332
353
  private internalLoadFromPeer;
333
354
  }
334
355
  export type InvalidHashError = {
@@ -1 +1 @@
1
- {"version":3,"file":"coValueCore.d.ts","sourceRoot":"","sources":["../../src/coValueCore/coValueCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coValueCore.d.ts","sourceRoot":"","sources":["../../src/coValueCore/coValueCore.ts"],"names":[],"mappings":"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"}
@@ -9,9 +9,8 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
10
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
11
  };
12
- var _CoValueCore_instances, _CoValueCore_isDeleteTransaction, _CoValueCore_markAsDeleted, _CoValueCore_getDeleteMarker, _CoValueCore_canAuthorDeleteCoValueAtTime, _CoValueCore_isNotificationScheduled, _CoValueCore_batchedUpdates, _CoValueCore_isNotifyUpdatePaused;
12
+ var _CoValueCore_instances, _CoValueCore_lastKnownStateSource, _CoValueCore_lastKnownState, _CoValueCore_isDeleteTransaction, _CoValueCore_markAsDeleted, _CoValueCore_getDeleteMarker, _CoValueCore_canAuthorDeleteCoValueAtTime, _CoValueCore_isNotificationScheduled, _CoValueCore_batchedUpdates, _CoValueCore_isNotifyUpdatePaused;
13
13
  import { ValueType, metrics } from "@opentelemetry/api";
14
- import { CO_VALUE_LOADING_CONFIG } from "../config.js";
15
14
  import { coreToCoValue } from "../coreToCoValue.js";
16
15
  import { isDeleteSessionID, } from "../ids.js";
17
16
  import { logger } from "../logger.js";
@@ -156,6 +155,13 @@ export class CoValueCore {
156
155
  // Whether the coValue is deleted
157
156
  this.isDeleted = false;
158
157
  this.loadingStatuses = new Map();
158
+ // Tracks why we have lastKnownState (separate from loadingStatuses)
159
+ // - "garbageCollected": was in memory, got GC'd
160
+ // - "onlyKnownState": checked storage, found knownState, but didn't load full content
161
+ _CoValueCore_lastKnownStateSource.set(this, void 0);
162
+ // Cache the knownState when transitioning to garbageCollected/onlyKnownState
163
+ // Used during peer reconciliation to send accurate LOAD requests
164
+ _CoValueCore_lastKnownState.set(this, void 0);
159
165
  this.listeners = new Set();
160
166
  this.missingDependencies = new Set();
161
167
  this.newContentQueue = [];
@@ -224,14 +230,21 @@ export class CoValueCore {
224
230
  if (this.verified) {
225
231
  return "available";
226
232
  }
227
- else if (this.loadingStatuses.size === 0) {
228
- return "unknown";
229
- }
233
+ // Check for pending peers FIRST - loading takes priority over other states
230
234
  for (const peer of this.loadingStatuses.values()) {
231
235
  if (peer.type === "pending") {
232
236
  return "loading";
233
237
  }
234
- else if (peer.type === "unknown") {
238
+ }
239
+ // Check for lastKnownStateSource (garbageCollected or onlyKnownState)
240
+ if (__classPrivateFieldGet(this, _CoValueCore_lastKnownStateSource, "f")) {
241
+ return __classPrivateFieldGet(this, _CoValueCore_lastKnownStateSource, "f");
242
+ }
243
+ if (this.loadingStatuses.size === 0) {
244
+ return "unknown";
245
+ }
246
+ for (const peer of this.loadingStatuses.values()) {
247
+ if (peer.type === "unknown") {
235
248
  return "unknown";
236
249
  }
237
250
  }
@@ -315,27 +328,21 @@ export class CoValueCore {
315
328
  }
316
329
  }
317
330
  /**
318
- * Removes the CoValue from memory.
331
+ * Removes the CoValue content from memory but keeps a shell with cached knownState.
332
+ * This enables accurate LOAD requests during peer reconciliation.
319
333
  *
320
334
  * @returns true if the coValue was successfully unmounted, false otherwise
321
335
  */
322
336
  unmount() {
323
- if (this.listeners.size > 0) {
324
- // The coValue is still in use
325
- return false;
326
- }
327
- for (const dependant of this.dependant) {
328
- if (this.node.hasCoValue(dependant)) {
329
- // Another in-memory coValue depends on this coValue
330
- return false;
331
- }
332
- }
333
- if (!this.node.syncManager.isSyncedToServerPeers(this.id)) {
334
- return false;
335
- }
337
+ return this.node.internalUnmountCoValue(this.id);
338
+ }
339
+ /**
340
+ * Decrements the counter for the current loading state.
341
+ * Used during unmount to properly track state transitions.
342
+ * @internal
343
+ */
344
+ decrementLoadingStateCounter() {
336
345
  this.counter.add(-1, { state: this.loadingState });
337
- this.node.internalDeleteCoValue(this.id);
338
- return true;
339
346
  }
340
347
  markNotFoundInPeer(peerId) {
341
348
  const previousState = this.loadingState;
@@ -348,6 +355,32 @@ export class CoValueCore {
348
355
  this.updateCounter(previousState);
349
356
  this.scheduleNotifyUpdate();
350
357
  }
358
+ /**
359
+ * Clean up cached state when CoValue becomes available.
360
+ * Called after the CoValue transitions from garbageCollected/onlyKnownState to available.
361
+ */
362
+ cleanupLastKnownState() {
363
+ // Clear both fields - in-memory verified state is now authoritative
364
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownStateSource, undefined, "f");
365
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownState, undefined, "f");
366
+ }
367
+ /**
368
+ * Initialize this CoValueCore as a garbageCollected shell.
369
+ * Called when creating a replacement CoValueCore after unmounting.
370
+ */
371
+ setGarbageCollectedState(knownState) {
372
+ // Only set garbageCollected state if storage is active
373
+ // Without storage, we can't reload the CoValue anyway
374
+ if (!this.node.storage) {
375
+ return;
376
+ }
377
+ // Transition counter from 'unknown' (set by constructor) to 'garbageCollected'
378
+ // previousState will be 'unknown', newState will be 'garbageCollected'
379
+ const previousState = this.loadingState;
380
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownStateSource, "garbageCollected", "f");
381
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownState, knownState, "f");
382
+ this.updateCounter(previousState);
383
+ }
351
384
  isCircularDependency(dependency) {
352
385
  if (dependency.id === this.id) {
353
386
  return true;
@@ -416,6 +449,10 @@ export class CoValueCore {
416
449
  throw new Error("CoValueCore: provideHeader called on coValue with verified sessions present!");
417
450
  }
418
451
  this._verified = new VerifiedState(this.id, this.node.crypto, header, new SessionMap(this.id, this.node.crypto, streamingKnownState));
452
+ // Clean up if transitioning from garbageCollected/onlyKnownState
453
+ if (this.isAvailable()) {
454
+ this.cleanupLastKnownState();
455
+ }
419
456
  return true;
420
457
  }
421
458
  markErrored(peerId, error) {
@@ -441,8 +478,10 @@ export class CoValueCore {
441
478
  * Used to correctly manage the content & subscriptions during the content streaming process
442
479
  */
443
480
  knownStateWithStreaming() {
444
- return (this.verified?.immutableKnownStateWithStreaming() ??
445
- emptyKnownState(this.id));
481
+ if (this.verified) {
482
+ return this.verified.immutableKnownStateWithStreaming();
483
+ }
484
+ return this.knownState();
446
485
  }
447
486
  /**
448
487
  * Returns the known state of the CoValue
@@ -450,9 +489,20 @@ export class CoValueCore {
450
489
  * The return value identity is going to be stable as long as the CoValue is not modified.
451
490
  *
452
491
  * On change the knownState is invalidated and a new object is returned.
492
+ *
493
+ * For garbageCollected/onlyKnownState CoValues, returns the cached knownState.
453
494
  */
454
495
  knownState() {
455
- return this.verified?.immutableKnownState() ?? emptyKnownState(this.id);
496
+ // 1. If we have verified content in memory, use that (authoritative)
497
+ if (this.verified) {
498
+ return this.verified.immutableKnownState();
499
+ }
500
+ // 2. If we have last known state (GC'd or onlyKnownState), use that
501
+ if (__classPrivateFieldGet(this, _CoValueCore_lastKnownState, "f")) {
502
+ return __classPrivateFieldGet(this, _CoValueCore_lastKnownState, "f");
503
+ }
504
+ // 3. Fallback to empty state (truly unknown CoValue)
505
+ return emptyKnownState(this.id);
456
506
  }
457
507
  /**
458
508
  * Returns a known state message to signal to the peer that the coValue doesn't need to be synced anymore
@@ -1152,11 +1202,11 @@ export class CoValueCore {
1152
1202
  waitForSync(options) {
1153
1203
  return this.node.syncManager.waitForSync(this.id, options?.timeout);
1154
1204
  }
1155
- load(peers) {
1205
+ load(peers, mode) {
1156
1206
  this.loadFromStorage((found) => {
1157
1207
  // When found the load is triggered by handleNewContent
1158
1208
  if (!found) {
1159
- this.loadFromPeers(peers);
1209
+ this.loadFromPeers(peers, mode);
1160
1210
  }
1161
1211
  });
1162
1212
  }
@@ -1187,7 +1237,14 @@ export class CoValueCore {
1187
1237
  });
1188
1238
  return;
1189
1239
  }
1190
- if (currentState !== "unknown") {
1240
+ // Check if we need to load from storage:
1241
+ // - If storage state is not unknown (already tried), AND
1242
+ // - Overall state is not garbageCollected/onlyKnownState (which need full content)
1243
+ // Then return early
1244
+ const overallState = this.loadingState;
1245
+ if (currentState !== "unknown" &&
1246
+ overallState !== "garbageCollected" &&
1247
+ overallState !== "onlyKnownState") {
1191
1248
  done?.(currentState === "available");
1192
1249
  return;
1193
1250
  }
@@ -1205,7 +1262,8 @@ export class CoValueCore {
1205
1262
  * Lazily load only the knownState from storage without loading full transaction data.
1206
1263
  * This is useful for checking if a peer needs new content before committing to a full load.
1207
1264
  *
1208
- * Caching and deduplication are handled at the storage layer.
1265
+ * If found in storage, marks the CoValue as onlyKnownState and caches the knownState.
1266
+ * This enables accurate LOAD requests during peer reconciliation.
1209
1267
  *
1210
1268
  * @param done - Callback with the storage knownState, or undefined if not found in storage
1211
1269
  */
@@ -1214,15 +1272,27 @@ export class CoValueCore {
1214
1272
  done(undefined);
1215
1273
  return;
1216
1274
  }
1217
- // If already available in memory, return the current knownState
1218
- if (this.isAvailable()) {
1219
- done(this.knownState());
1275
+ // If we already have knowledge about this CoValue (in memory or cached), return it
1276
+ // knownState() returns verified state, lastKnownState, or empty state
1277
+ const knownState = this.knownState();
1278
+ if (knownState.header) {
1279
+ done(knownState);
1220
1280
  return;
1221
1281
  }
1222
1282
  // Delegate to storage - caching is handled at storage level
1223
- this.node.storage.loadKnownState(this.id, done);
1283
+ this.node.storage.loadKnownState(this.id, (knownState) => {
1284
+ // The coValue could become available in the meantime.
1285
+ if (knownState && !this.isAvailable()) {
1286
+ // Cache the knownState and mark as onlyKnownState
1287
+ const previousState = this.loadingState;
1288
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownStateSource, "onlyKnownState", "f");
1289
+ __classPrivateFieldSet(this, _CoValueCore_lastKnownState, knownState, "f");
1290
+ this.updateCounter(previousState);
1291
+ }
1292
+ done(knownState);
1293
+ });
1224
1294
  }
1225
- loadFromPeers(peers) {
1295
+ loadFromPeers(peers, mode) {
1226
1296
  if (peers.length === 0) {
1227
1297
  return;
1228
1298
  }
@@ -1230,26 +1300,15 @@ export class CoValueCore {
1230
1300
  const currentState = this.getLoadingStateForPeer(peer.id);
1231
1301
  if (currentState === "unknown" || currentState === "unavailable") {
1232
1302
  this.markPending(peer.id);
1233
- this.internalLoadFromPeer(peer);
1303
+ this.internalLoadFromPeer(peer, mode);
1234
1304
  }
1235
1305
  }
1236
1306
  }
1237
- internalLoadFromPeer(peer) {
1307
+ internalLoadFromPeer(peer, mode) {
1238
1308
  if (peer.closed && !peer.persistent) {
1239
1309
  this.markNotFoundInPeer(peer.id);
1240
1310
  return;
1241
1311
  }
1242
- /**
1243
- * On reconnection persistent peers will automatically fire the load request
1244
- * as part of the reconnection process.
1245
- */
1246
- if (!peer.closed) {
1247
- peer.pushOutgoingMessage({
1248
- action: "load",
1249
- ...this.knownState(),
1250
- });
1251
- peer.trackLoadRequestSent(this.id);
1252
- }
1253
1312
  const markNotFound = () => {
1254
1313
  if (this.getLoadingStateForPeer(peer.id) === "pending") {
1255
1314
  logger.warn("Timeout waiting for peer to load coValue", {
@@ -1259,10 +1318,17 @@ export class CoValueCore {
1259
1318
  this.markNotFoundInPeer(peer.id);
1260
1319
  }
1261
1320
  };
1262
- const timeout = setTimeout(markNotFound, CO_VALUE_LOADING_CONFIG.TIMEOUT);
1321
+ // Close listener for non-persistent peers
1263
1322
  const removeCloseListener = peer.persistent
1264
1323
  ? undefined
1265
1324
  : peer.addCloseListener(markNotFound);
1325
+ /**
1326
+ * On reconnection persistent peers will automatically fire the load request
1327
+ * as part of the reconnection process.
1328
+ */
1329
+ if (!peer.closed) {
1330
+ peer.sendLoadRequest(this, mode);
1331
+ }
1266
1332
  this.subscribe((state, unsubscribe) => {
1267
1333
  const peerState = state.getLoadingStateForPeer(peer.id);
1268
1334
  if (state.isAvailable() || // might have become available from another peer e.g. through handleNewContent
@@ -1271,12 +1337,11 @@ export class CoValueCore {
1271
1337
  peerState === "unavailable") {
1272
1338
  unsubscribe();
1273
1339
  removeCloseListener?.();
1274
- clearTimeout(timeout);
1275
1340
  }
1276
1341
  }, true);
1277
1342
  }
1278
1343
  }
1279
- _CoValueCore_isNotificationScheduled = new WeakMap(), _CoValueCore_batchedUpdates = new WeakMap(), _CoValueCore_isNotifyUpdatePaused = new WeakMap(), _CoValueCore_instances = new WeakSet(), _CoValueCore_isDeleteTransaction = function _CoValueCore_isDeleteTransaction(sessionID, newTransactions, skipVerify) {
1344
+ _CoValueCore_lastKnownStateSource = new WeakMap(), _CoValueCore_lastKnownState = new WeakMap(), _CoValueCore_isNotificationScheduled = new WeakMap(), _CoValueCore_batchedUpdates = new WeakMap(), _CoValueCore_isNotifyUpdatePaused = new WeakMap(), _CoValueCore_instances = new WeakSet(), _CoValueCore_isDeleteTransaction = function _CoValueCore_isDeleteTransaction(sessionID, newTransactions, skipVerify) {
1280
1345
  if (!this.verified) {
1281
1346
  return {
1282
1347
  value: false,