cojson 0.18.29 → 0.18.31

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 (144) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/dist/PeerState.d.ts +23 -14
  4. package/dist/PeerState.d.ts.map +1 -1
  5. package/dist/PeerState.js +74 -23
  6. package/dist/PeerState.js.map +1 -1
  7. package/dist/SyncStateManager.d.ts +3 -3
  8. package/dist/SyncStateManager.d.ts.map +1 -1
  9. package/dist/SyncStateManager.js +18 -44
  10. package/dist/SyncStateManager.js.map +1 -1
  11. package/dist/coValueContentMessage.d.ts.map +1 -1
  12. package/dist/coValueContentMessage.js +2 -1
  13. package/dist/coValueContentMessage.js.map +1 -1
  14. package/dist/coValueCore/PeerKnownState.d.ts +21 -0
  15. package/dist/coValueCore/PeerKnownState.d.ts.map +1 -0
  16. package/dist/coValueCore/PeerKnownState.js +52 -0
  17. package/dist/coValueCore/PeerKnownState.js.map +1 -0
  18. package/dist/coValueCore/coValueCore.d.ts +39 -8
  19. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  20. package/dist/coValueCore/coValueCore.js +139 -40
  21. package/dist/coValueCore/coValueCore.js.map +1 -1
  22. package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts.map +1 -1
  23. package/dist/coValueCore/decryptTransactionChangesAndMeta.js +0 -5
  24. package/dist/coValueCore/decryptTransactionChangesAndMeta.js.map +1 -1
  25. package/dist/coValueCore/verifiedState.d.ts +0 -14
  26. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  27. package/dist/coValueCore/verifiedState.js +2 -32
  28. package/dist/coValueCore/verifiedState.js.map +1 -1
  29. package/dist/coValues/coList.d.ts +3 -4
  30. package/dist/coValues/coList.d.ts.map +1 -1
  31. package/dist/coValues/coList.js +4 -4
  32. package/dist/coValues/coList.js.map +1 -1
  33. package/dist/coValues/coMap.d.ts +3 -4
  34. package/dist/coValues/coMap.d.ts.map +1 -1
  35. package/dist/coValues/coMap.js +5 -4
  36. package/dist/coValues/coMap.js.map +1 -1
  37. package/dist/coValues/coStream.d.ts +3 -3
  38. package/dist/coValues/coStream.d.ts.map +1 -1
  39. package/dist/coValues/coStream.js +3 -4
  40. package/dist/coValues/coStream.js.map +1 -1
  41. package/dist/coValues/group.d.ts +3 -3
  42. package/dist/coValues/group.d.ts.map +1 -1
  43. package/dist/coValues/group.js +74 -52
  44. package/dist/coValues/group.js.map +1 -1
  45. package/dist/exports.d.ts +2 -2
  46. package/dist/exports.d.ts.map +1 -1
  47. package/dist/exports.js +2 -2
  48. package/dist/exports.js.map +1 -1
  49. package/dist/localNode.d.ts.map +1 -1
  50. package/dist/localNode.js +7 -5
  51. package/dist/localNode.js.map +1 -1
  52. package/dist/permissions.d.ts +5 -1
  53. package/dist/permissions.d.ts.map +1 -1
  54. package/dist/permissions.js +173 -109
  55. package/dist/permissions.js.map +1 -1
  56. package/dist/sync.d.ts.map +1 -1
  57. package/dist/sync.js +33 -44
  58. package/dist/sync.js.map +1 -1
  59. package/dist/tests/PeerKnownState.test.d.ts +2 -0
  60. package/dist/tests/PeerKnownState.test.d.ts.map +1 -0
  61. package/dist/tests/PeerKnownState.test.js +342 -0
  62. package/dist/tests/PeerKnownState.test.js.map +1 -0
  63. package/dist/tests/PeerState.test.js +17 -16
  64. package/dist/tests/PeerState.test.js.map +1 -1
  65. package/dist/tests/StorageApiAsync.test.js +12 -12
  66. package/dist/tests/StorageApiAsync.test.js.map +1 -1
  67. package/dist/tests/StorageApiSync.test.js +11 -11
  68. package/dist/tests/StorageApiSync.test.js.map +1 -1
  69. package/dist/tests/SyncStateManager.test.js +16 -21
  70. package/dist/tests/SyncStateManager.test.js.map +1 -1
  71. package/dist/tests/coValueCore.dependencies.test.js +59 -0
  72. package/dist/tests/coValueCore.dependencies.test.js.map +1 -1
  73. package/dist/tests/coValueCore.test.js +41 -21
  74. package/dist/tests/coValueCore.test.js.map +1 -1
  75. package/dist/tests/group.addMember.test.js +266 -219
  76. package/dist/tests/group.addMember.test.js.map +1 -1
  77. package/dist/tests/group.inheritance.test.js +12 -0
  78. package/dist/tests/group.inheritance.test.js.map +1 -1
  79. package/dist/tests/group.invite.test.js +77 -0
  80. package/dist/tests/group.invite.test.js.map +1 -1
  81. package/dist/tests/group.removeMember.test.js +65 -8
  82. package/dist/tests/group.removeMember.test.js.map +1 -1
  83. package/dist/tests/group.roleOf.test.js +14 -4
  84. package/dist/tests/group.roleOf.test.js.map +1 -1
  85. package/dist/tests/permissions.test.js +51 -202
  86. package/dist/tests/permissions.test.js.map +1 -1
  87. package/dist/tests/sync.content.test.js +2 -2
  88. package/dist/tests/sync.content.test.js.map +1 -1
  89. package/dist/tests/sync.invite.test.js +6 -6
  90. package/dist/tests/sync.load.test.js +22 -22
  91. package/dist/tests/sync.mesh.test.js +9 -9
  92. package/dist/tests/sync.storage.test.js +13 -7
  93. package/dist/tests/sync.storage.test.js.map +1 -1
  94. package/dist/tests/sync.storageAsync.test.js +3 -3
  95. package/dist/tests/sync.test.js +13 -33
  96. package/dist/tests/sync.test.js.map +1 -1
  97. package/dist/tests/sync.upload.test.js +2 -2
  98. package/package.json +3 -3
  99. package/src/PeerState.ts +86 -34
  100. package/src/SyncStateManager.ts +25 -60
  101. package/src/coValueContentMessage.ts +3 -1
  102. package/src/coValueCore/PeerKnownState.ts +74 -0
  103. package/src/coValueCore/coValueCore.ts +180 -49
  104. package/src/coValueCore/decryptTransactionChangesAndMeta.ts +0 -6
  105. package/src/coValueCore/verifiedState.ts +2 -37
  106. package/src/coValues/coList.ts +7 -7
  107. package/src/coValues/coMap.ts +9 -7
  108. package/src/coValues/coStream.ts +6 -5
  109. package/src/coValues/group.ts +99 -60
  110. package/src/exports.ts +2 -1
  111. package/src/localNode.ts +7 -5
  112. package/src/permissions.ts +204 -123
  113. package/src/sync.ts +37 -53
  114. package/src/tests/PeerKnownState.test.ts +426 -0
  115. package/src/tests/PeerState.test.ts +24 -24
  116. package/src/tests/StorageApiAsync.test.ts +12 -12
  117. package/src/tests/StorageApiSync.test.ts +11 -11
  118. package/src/tests/SyncStateManager.test.ts +23 -53
  119. package/src/tests/coValueCore.dependencies.test.ts +87 -0
  120. package/src/tests/coValueCore.test.ts +64 -22
  121. package/src/tests/group.addMember.test.ts +384 -345
  122. package/src/tests/group.inheritance.test.ts +33 -0
  123. package/src/tests/group.invite.test.ts +117 -0
  124. package/src/tests/group.removeMember.test.ts +96 -10
  125. package/src/tests/group.roleOf.test.ts +16 -4
  126. package/src/tests/permissions.test.ts +56 -295
  127. package/src/tests/sync.content.test.ts +2 -2
  128. package/src/tests/sync.invite.test.ts +6 -6
  129. package/src/tests/sync.load.test.ts +22 -22
  130. package/src/tests/sync.mesh.test.ts +9 -9
  131. package/src/tests/sync.storage.test.ts +13 -8
  132. package/src/tests/sync.storageAsync.test.ts +3 -3
  133. package/src/tests/sync.test.ts +21 -50
  134. package/src/tests/sync.upload.test.ts +2 -2
  135. package/dist/PeerKnownStates.d.ts +0 -19
  136. package/dist/PeerKnownStates.d.ts.map +0 -1
  137. package/dist/PeerKnownStates.js +0 -64
  138. package/dist/PeerKnownStates.js.map +0 -1
  139. package/dist/tests/PeerKnownStates.test.d.ts +0 -2
  140. package/dist/tests/PeerKnownStates.test.d.ts.map +0 -1
  141. package/dist/tests/PeerKnownStates.test.js +0 -77
  142. package/dist/tests/PeerKnownStates.test.js.map +0 -1
  143. package/src/PeerKnownStates.ts +0 -93
  144. package/src/tests/PeerKnownStates.test.ts +0 -99
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson@0.18.29 build /home/runner/_work/jazz/jazz/packages/cojson
2
+ > cojson@0.18.31 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,22 @@
1
1
  # cojson
2
2
 
3
+ ## 0.18.31
4
+
5
+ ### Patch Changes
6
+
7
+ - 7c2b7b8: Bugfix: diable the progressive child rotation
8
+ - cojson-core-wasm@0.18.31
9
+ - cojson-core-napi@0.18.31
10
+
11
+ ## 0.18.30
12
+
13
+ ### Patch Changes
14
+
15
+ - ad83da2: Optimize the parsing of large CoValues by switching to stages containers
16
+ - d08b7e2: feat: introduced new "manager" role who can invite and remove members, and being removed by admins.
17
+ - cojson-core-wasm@0.18.30
18
+ - cojson-core-napi@0.18.30
19
+
3
20
  ## 0.18.29
4
21
 
5
22
  ### Patch Changes
@@ -1,36 +1,45 @@
1
- import { PeerKnownStates, ReadonlyPeerKnownStates } from "./PeerKnownStates.js";
2
- import { RawCoID, SessionID } from "./ids.js";
1
+ import { PeerKnownState } from "./coValueCore/PeerKnownState.js";
2
+ import { RawCoID } from "./ids.js";
3
3
  import { CoValueKnownState } from "./knownState.js";
4
4
  import { Peer, SyncMessage } from "./sync.js";
5
5
  export declare class PeerState {
6
6
  private peer;
7
- constructor(peer: Peer, knownStates: ReadonlyPeerKnownStates | undefined);
8
7
  /**
9
8
  * Here we to collect all the known states that a given peer has told us about.
10
9
  *
11
10
  * This can be used to safely track the sync state of a coValue in a given peer.
12
11
  */
13
- readonly _knownStates: PeerKnownStates;
14
- get knownStates(): ReadonlyPeerKnownStates;
12
+ private readonly _knownStates;
13
+ constructor(peer: Peer, knownStates: Map<RawCoID, PeerKnownState> | undefined);
14
+ getKnownState(id: RawCoID): CoValueKnownState | undefined;
15
+ getOptimisticKnownState(id: RawCoID): CoValueKnownState | undefined;
16
+ isCoValueSubscribedToPeer(id: RawCoID): boolean;
15
17
  /**
16
- * This one collects the known states "optimistically".
17
- * We use it to keep track of the content we have sent to a given peer.
18
+ * Closes the current peer state and creates a new one from a given peer,
19
+ * keeping the same known states.
18
20
  *
19
- * The main difference with knownState is that this is updated when the content is sent to the peer without
20
- * waiting for any acknowledgement from the peer.
21
+ * This is used to create a new peer state when a peer reconnects.
21
22
  */
22
- readonly _optimisticKnownStates: PeerKnownStates;
23
- get optimisticKnownStates(): ReadonlyPeerKnownStates;
23
+ newPeerStateFrom(peer: Peer): PeerState;
24
24
  readonly toldKnownState: Set<RawCoID>;
25
25
  readonly loadRequestSent: Set<RawCoID>;
26
26
  trackLoadRequestSent(id: RawCoID): void;
27
27
  trackToldKnownState(id: RawCoID): void;
28
+ private getOrCreateKnownState;
28
29
  updateHeader(id: RawCoID, header: boolean): void;
29
30
  combineWith(id: RawCoID, value: CoValueKnownState): void;
30
31
  combineOptimisticWith(id: RawCoID, value: CoValueKnownState): void;
31
- updateSessionCounter(id: RawCoID, sessionId: SessionID, value: number): void;
32
- setKnownState(id: RawCoID, knownState: CoValueKnownState | "empty"): void;
33
- setOptimisticKnownState(id: RawCoID, knownState: CoValueKnownState | "empty"): void;
32
+ setKnownState(id: RawCoID, payload: CoValueKnownState | "empty"): void;
33
+ /**
34
+ * Emit a change event for a given coValue.
35
+ *
36
+ * This is used to notify subscribers that the known state of a coValue has changed,
37
+ * but the known state of the peer has not.
38
+ */
39
+ emitCoValueChange(id: RawCoID): void;
40
+ listeners: Set<(id: RawCoID, value: PeerKnownState) => void>;
41
+ private triggerUpdate;
42
+ subscribeToKnownStatesUpdates(listener: (id: RawCoID, value: PeerKnownState) => void): () => void;
34
43
  get id(): string;
35
44
  get role(): "client" | "server";
36
45
  get priority(): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"PeerState.d.ts","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,qBAAa,SAAS;IAElB,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,EAClB,WAAW,EAAE,uBAAuB,GAAG,SAAS;IAMlD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IAEvC,IAAI,WAAW,IAAI,uBAAuB,CAEzC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,EAAE,eAAe,CAAC;IAEjD,IAAI,qBAAqB,IAAI,uBAAuB,CAEnD;IAED,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,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAKzC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAKjD,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;IAI3D,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAKrE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO;IAKlE,uBAAuB,CACrB,EAAE,EAAE,OAAO,EACX,UAAU,EAAE,iBAAiB,GAAG,OAAO;IAKzC,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;CAgBjB"}
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,EAAa,MAAM,UAAU,CAAC;AAC9C,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,SAAS,WAAgB,OAAO,SAAS,cAAc,KAAK,IAAI,EAAI;IAEpE,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;CAgBjB"}
package/dist/PeerState.js CHANGED
@@ -1,20 +1,41 @@
1
- import { PeerKnownStates } from "./PeerKnownStates.js";
1
+ import { PeerKnownState } from "./coValueCore/PeerKnownState.js";
2
2
  import { logger } from "./logger.js";
3
3
  export class PeerState {
4
4
  constructor(peer, knownStates) {
5
5
  this.peer = peer;
6
6
  this.toldKnownState = new Set();
7
7
  this.loadRequestSent = new Set();
8
+ this.listeners = new Set();
8
9
  this.closed = false;
9
10
  this.closeListeners = new Set();
10
- this._knownStates = knownStates?.clone() ?? new PeerKnownStates();
11
- this._optimisticKnownStates = knownStates?.clone() ?? new PeerKnownStates();
12
- }
13
- get knownStates() {
14
- return this._knownStates;
15
- }
16
- get optimisticKnownStates() {
17
- return this._optimisticKnownStates;
11
+ this._knownStates = knownStates ?? new Map();
12
+ }
13
+ getKnownState(id) {
14
+ return this._knownStates.get(id)?.value();
15
+ }
16
+ getOptimisticKnownState(id) {
17
+ return this._knownStates.get(id)?.optimisticValue();
18
+ }
19
+ isCoValueSubscribedToPeer(id) {
20
+ return this._knownStates.has(id);
21
+ }
22
+ /**
23
+ * Closes the current peer state and creates a new one from a given peer,
24
+ * keeping the same known states.
25
+ *
26
+ * This is used to create a new peer state when a peer reconnects.
27
+ */
28
+ newPeerStateFrom(peer) {
29
+ if (!this.closed) {
30
+ this.gracefulShutdown();
31
+ }
32
+ const knownStates = new Map();
33
+ // On reconnect, we reset all the optimistic known states
34
+ // because we can't know if those syncs were successful or not
35
+ for (const knownState of this._knownStates.values()) {
36
+ knownStates.set(knownState.id, knownState.cloneWithoutOptimistic());
37
+ }
38
+ return new PeerState(peer, knownStates);
18
39
  }
19
40
  trackLoadRequestSent(id) {
20
41
  this.toldKnownState.add(id);
@@ -23,27 +44,57 @@ export class PeerState {
23
44
  trackToldKnownState(id) {
24
45
  this.toldKnownState.add(id);
25
46
  }
47
+ getOrCreateKnownState(id) {
48
+ let knownState = this._knownStates.get(id);
49
+ if (!knownState) {
50
+ knownState = new PeerKnownState(id, this.peer.id);
51
+ this._knownStates.set(id, knownState);
52
+ }
53
+ return knownState;
54
+ }
26
55
  updateHeader(id, header) {
27
- this._knownStates.updateHeader(id, header);
28
- this._optimisticKnownStates.updateHeader(id, header);
56
+ const knownState = this.getOrCreateKnownState(id);
57
+ knownState.updateHeader(header);
58
+ this.triggerUpdate(id, knownState);
29
59
  }
30
60
  combineWith(id, value) {
31
- this._knownStates.combineWith(id, value);
32
- this._optimisticKnownStates.combineWith(id, value);
61
+ const knownState = this.getOrCreateKnownState(id);
62
+ knownState.combineWith(value);
63
+ this.triggerUpdate(id, knownState);
33
64
  }
34
65
  combineOptimisticWith(id, value) {
35
- this._optimisticKnownStates.combineWith(id, value);
36
- }
37
- updateSessionCounter(id, sessionId, value) {
38
- this._knownStates.updateSessionCounter(id, sessionId, value);
39
- this._optimisticKnownStates.updateSessionCounter(id, sessionId, value);
66
+ const knownState = this.getOrCreateKnownState(id);
67
+ knownState.combineOptimisticWith(value);
68
+ this.triggerUpdate(id, knownState);
69
+ }
70
+ setKnownState(id, payload) {
71
+ const knownState = this.getOrCreateKnownState(id);
72
+ knownState.set(payload);
73
+ this.triggerUpdate(id, knownState);
74
+ }
75
+ /**
76
+ * Emit a change event for a given coValue.
77
+ *
78
+ * This is used to notify subscribers that the known state of a coValue has changed,
79
+ * but the known state of the peer has not.
80
+ */
81
+ emitCoValueChange(id) {
82
+ if (this.peer.role === "client" && !this.isCoValueSubscribedToPeer(id)) {
83
+ return;
84
+ }
85
+ const knownState = this.getOrCreateKnownState(id);
86
+ this.triggerUpdate(id, knownState);
40
87
  }
41
- setKnownState(id, knownState) {
42
- this._knownStates.set(id, knownState);
43
- this._optimisticKnownStates.set(id, knownState);
88
+ triggerUpdate(id, value) {
89
+ for (const listener of this.listeners) {
90
+ listener(id, value);
91
+ }
44
92
  }
45
- setOptimisticKnownState(id, knownState) {
46
- this._optimisticKnownStates.set(id, knownState);
93
+ subscribeToKnownStatesUpdates(listener) {
94
+ this.listeners.add(listener);
95
+ return () => {
96
+ this.listeners.delete(listener);
97
+ };
47
98
  }
48
99
  get id() {
49
100
  return this.peer.id;
@@ -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 { RawCoID } from "./ids.js";
2
2
  import { CoValueKnownState } from "./knownState.js";
3
+ import { PeerState } from "./PeerState.js";
3
4
  import { PeerID, SyncManager } from "./sync.js";
4
5
  export type SyncState = {
5
6
  uploaded: boolean;
@@ -13,9 +14,8 @@ export declare class SyncStateManager {
13
14
  private listenersByPeers;
14
15
  subscribeToUpdates(listener: GlobalSyncStateListenerCallback): () => void;
15
16
  subscribeToPeerUpdates(peerId: PeerID, listener: PeerSyncStateListenerCallback): () => void;
16
- getCurrentSyncState(peerId: PeerID, id: RawCoID): SyncState;
17
- triggerUpdate(peerId: PeerID, id: RawCoID): void;
18
- private getKnownStateSessions;
17
+ triggerUpdate(peerId: PeerID, id: RawCoID, knownState: CoValueKnownState): void;
18
+ isSynced(peer: PeerState, id: RawCoID): boolean;
19
19
  private getIsCoValueFullyUploadedIntoPeer;
20
20
  }
21
21
  //# sourceMappingURL=SyncStateManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyncStateManager.d.ts","sourceRoot":"","sources":["../src/SyncStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,iBAAiB,EAGlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,CAC5C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;AAEV,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;AAEV,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,gBAAgB,CAGpB;IAEJ,kBAAkB,CAAC,QAAQ,EAAE,+BAA+B;IAQ5D,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,6BAA6B;IAezC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO;IAkB/C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO;IA4BzC,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,iCAAiC;CAS1C"}
1
+ {"version":3,"file":"SyncStateManager.d.ts","sourceRoot":"","sources":["../src/SyncStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAA4B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,CAC5C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;AAEV,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;AAEV,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,gBAAgB,CAGpB;IAEJ,kBAAkB,CAAC,QAAQ,EAAE,+BAA+B;IAQ5D,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,6BAA6B;IAezC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB;IAuBxE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO;IAQrC,OAAO,CAAC,iCAAiC;CAmB1C"}
@@ -1,4 +1,4 @@
1
- import { emptyKnownState, areLocalSessionsUploaded, } from "./knownState.js";
1
+ import { areLocalSessionsUploaded } from "./knownState.js";
2
2
  export class SyncStateManager {
3
3
  constructor(syncManager) {
4
4
  this.syncManager = syncManager;
@@ -21,31 +21,15 @@ export class SyncStateManager {
21
21
  listeners.delete(listener);
22
22
  };
23
23
  }
24
- getCurrentSyncState(peerId, id) {
25
- // Build a lazy sync state object to process the isUploaded info
26
- // only when requested
27
- const syncState = {};
28
- const getIsUploaded = () => this.getIsCoValueFullyUploadedIntoPeer(peerId, id);
29
- Object.defineProperties(syncState, {
30
- uploaded: {
31
- enumerable: true,
32
- get: getIsUploaded,
33
- },
34
- });
35
- return syncState;
36
- }
37
- triggerUpdate(peerId, id) {
38
- const peer = this.syncManager.peers[peerId];
39
- if (!peer) {
40
- return;
41
- }
42
- const peerListeners = this.listenersByPeers.get(peer.id);
24
+ triggerUpdate(peerId, id, knownState) {
25
+ const peerListeners = this.listenersByPeers.get(peerId);
43
26
  // If we don't have any active listeners do nothing
44
27
  if (!peerListeners?.size && !this.listeners.size) {
45
28
  return;
46
29
  }
47
- const knownState = peer.knownStates.get(id) ?? emptyKnownState(id);
48
- const syncState = this.getCurrentSyncState(peerId, id);
30
+ const syncState = {
31
+ uploaded: this.getIsCoValueFullyUploadedIntoPeer(knownState, id),
32
+ };
49
33
  for (const listener of this.listeners) {
50
34
  listener(peerId, knownState, syncState);
51
35
  }
@@ -55,31 +39,21 @@ export class SyncStateManager {
55
39
  listener(knownState, syncState);
56
40
  }
57
41
  }
58
- getKnownStateSessions(peerId, id) {
59
- const peer = this.syncManager.peers[peerId];
60
- if (!peer) {
61
- return undefined;
62
- }
63
- const peerSessions = peer.knownStates.get(id)?.sessions;
64
- if (!peerSessions) {
65
- return undefined;
66
- }
67
- const entry = this.syncManager.local.getCoValue(id);
68
- if (!entry.isAvailable()) {
69
- return undefined;
70
- }
71
- const coValueSessions = entry.knownState().sessions;
72
- return {
73
- peer: peerSessions,
74
- coValue: coValueSessions,
75
- };
42
+ isSynced(peer, id) {
43
+ const peerKnownState = peer.getKnownState(id);
44
+ if (!peerKnownState)
45
+ return false;
46
+ return this.getIsCoValueFullyUploadedIntoPeer(peerKnownState, id);
76
47
  }
77
- getIsCoValueFullyUploadedIntoPeer(peerId, id) {
78
- const sessions = this.getKnownStateSessions(peerId, id);
79
- if (!sessions) {
48
+ getIsCoValueFullyUploadedIntoPeer(peerKnownState, id) {
49
+ const entry = this.syncManager.local.getCoValue(id);
50
+ if (!entry.hasVerifiedContent()) {
80
51
  return false;
81
52
  }
82
- return areLocalSessionsUploaded(sessions.coValue, sessions.peer);
53
+ // Accessing verified knownState to skip the immutability
54
+ // applied on CoValueCore
55
+ const knownState = entry.verified.knownState();
56
+ return areLocalSessionsUploaded(knownState.sessions, peerKnownState.sessions);
83
57
  }
84
58
  }
85
59
  //# sourceMappingURL=SyncStateManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyncStateManager.js","sourceRoot":"","sources":["../src/SyncStateManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SyncStateManager.js","sourceRoot":"","sources":["../src/SyncStateManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAmB9E,MAAM,OAAO,gBAAgB;IAC3B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAEpC,cAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;QACvD,qBAAgB,GAAG,IAAI,GAAG,EAG/B,CAAC;IAN2C,CAAC;IAQhD,kBAAkB,CAAC,QAAyC;QAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB,CACpB,MAAc,EACd,QAAuC;QAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEjE,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,EAAW,EAAE,UAA6B;QACtE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExD,mDAAmD;QACnD,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG;YAChB,QAAQ,EAAE,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,EAAE,CAAC;SACjE,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAe,EAAE,EAAW;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QAElC,OAAO,IAAI,CAAC,iCAAiC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAEO,iCAAiC,CACvC,cAAiC,EACjC,EAAW;QAEX,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yDAAyD;QACzD,yBAAyB;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE/C,OAAO,wBAAwB,CAC7B,UAAU,CAAC,QAAQ,EACnB,cAAc,CAAC,QAAQ,CACxB,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"coValueContentMessage.d.ts","sourceRoot":"","sources":["../src/coValueContentMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,aAAa,EACrB,aAAa,UAAO,GACnB,iBAAiB,CAQnB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,QAcd;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,UAI1D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,WASzB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAUrE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,+CAU/D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,UAS3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,YAKxD"}
1
+ {"version":3,"file":"coValueContentMessage.d.ts","sourceRoot":"","sources":["../src/coValueContentMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,aAAa,EACrB,aAAa,UAAO,GACnB,iBAAiB,CAQnB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,QAcd;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,UAI1D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,WASzB;AAID,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAUrE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,+CAU/D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,UAS3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,YAKxD"}
@@ -35,8 +35,9 @@ export function exceedsRecommendedSize(baseSize, transactionSize) {
35
35
  }
36
36
  return (baseSize + transactionSize > TRANSACTION_CONFIG.MAX_RECOMMENDED_TX_SIZE);
37
37
  }
38
+ const cachedTextEncoder = new TextEncoder();
38
39
  export function validateTxSizeLimitInBytes(changes) {
39
- const serializedSize = new TextEncoder().encode(JSON.stringify(changes)).length;
40
+ const serializedSize = cachedTextEncoder.encode(JSON.stringify(changes)).length;
40
41
  if (serializedSize > TRANSACTION_CONFIG.MAX_TX_SIZE_BYTES) {
41
42
  throw new Error(`Transaction is too large to be synced: ${serializedSize} > ${TRANSACTION_CONFIG.MAX_TX_SIZE_BYTES} bytes. ` +
42
43
  `Consider breaking your transaction into smaller chunks.`);
@@ -1 +1 @@
1
- {"version":3,"file":"coValueContentMessage.js","sourceRoot":"","sources":["../src/coValueContentMessage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coValueContentMessage.js","sourceRoot":"","sources":["../src/coValueContentMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { RawCoID } from "../ids.js";
2
+ import { CoValueKnownState } from "../knownState.js";
3
+ import { PeerID } from "../sync.js";
4
+ export declare class PeerKnownState {
5
+ readonly id: RawCoID;
6
+ readonly peerId: PeerID;
7
+ private knownState;
8
+ private optimisticKnownState?;
9
+ constructor(id: RawCoID, peerId: PeerID);
10
+ cloneWithoutOptimistic(): PeerKnownState;
11
+ updateHeader(header: boolean): void;
12
+ combineWith(value: CoValueKnownState): void;
13
+ combineOptimisticWith(value: CoValueKnownState): void;
14
+ /**
15
+ * Aligns the CoValue known state with the defined payload
16
+ */
17
+ set(payload: CoValueKnownState | "empty"): void;
18
+ value(): CoValueKnownState;
19
+ optimisticValue(): CoValueKnownState;
20
+ }
21
+ //# sourceMappingURL=PeerKnownState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerKnownState.d.ts","sourceRoot":"","sources":["../../src/coValueCore/PeerKnownState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAGL,iBAAiB,EAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,qBAAa,cAAc;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,oBAAoB,CAAC,CAAoB;gBAErC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAMvC,sBAAsB;IAMtB,YAAY,CAAC,MAAM,EAAE,OAAO;IAQ5B,WAAW,CAAC,KAAK,EAAE,iBAAiB;IAQpC,qBAAqB,CAAC,KAAK,EAAE,iBAAiB;IAQ9C;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAYxC,KAAK;IAIL,eAAe;CAGhB"}
@@ -0,0 +1,52 @@
1
+ import { cloneKnownState, combineKnownStates, emptyKnownState, } from "../knownState.js";
2
+ export class PeerKnownState {
3
+ constructor(id, peerId) {
4
+ this.id = id;
5
+ this.peerId = peerId;
6
+ this.knownState = emptyKnownState(id);
7
+ }
8
+ cloneWithoutOptimistic() {
9
+ const clone = new PeerKnownState(this.id, this.peerId);
10
+ clone.set(this.knownState);
11
+ return clone;
12
+ }
13
+ updateHeader(header) {
14
+ this.knownState.header = header;
15
+ if (this.optimisticKnownState) {
16
+ this.optimisticKnownState.header = header;
17
+ }
18
+ }
19
+ combineWith(value) {
20
+ combineKnownStates(this.knownState, value);
21
+ if (this.optimisticKnownState) {
22
+ combineKnownStates(this.optimisticKnownState, value);
23
+ }
24
+ }
25
+ combineOptimisticWith(value) {
26
+ if (!this.optimisticKnownState) {
27
+ this.optimisticKnownState = cloneKnownState(this.knownState);
28
+ }
29
+ combineKnownStates(this.optimisticKnownState, value);
30
+ }
31
+ /**
32
+ * Aligns the CoValue known state with the defined payload
33
+ */
34
+ set(payload) {
35
+ if (payload === "empty") {
36
+ this.knownState.header = false;
37
+ this.knownState.sessions = {};
38
+ }
39
+ else {
40
+ this.knownState.header = payload.header;
41
+ this.knownState.sessions = { ...payload.sessions };
42
+ }
43
+ this.optimisticKnownState = undefined;
44
+ }
45
+ value() {
46
+ return this.knownState;
47
+ }
48
+ optimisticValue() {
49
+ return this.optimisticKnownState ?? this.knownState;
50
+ }
51
+ }
52
+ //# sourceMappingURL=PeerKnownState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerKnownState.js","sourceRoot":"","sources":["../../src/coValueCore/PeerKnownState.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,kBAAkB,EAElB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,OAAO,cAAc;IAMzB,YAAY,EAAW,EAAE,MAAc;QACrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,sBAAsB;QACpB,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAEhC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAwB;QAClC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,KAAwB;QAC5C,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAoC;QACtC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,UAAU,CAAC;IACtD,CAAC;CACF"}
@@ -14,6 +14,7 @@ import { type RawAccountID } from "../coValues/account.js";
14
14
  import { CoValueKnownState, KnownStateSessions } from "../knownState.js";
15
15
  export declare function idforHeader(header: CoValueHeader, crypto: CryptoProvider): RawCoID;
16
16
  export declare class VerifiedTransaction {
17
+ dispatchTransaction: (transaction: VerifiedTransaction) => void;
17
18
  author: RawAccountID | AgentID;
18
19
  currentTxID: TransactionID;
19
20
  sourceTxID: TransactionID | undefined;
@@ -22,21 +23,21 @@ export declare class VerifiedTransaction {
22
23
  sourceTxMadeAt: number | undefined;
23
24
  changes: JsonValue[] | undefined;
24
25
  meta: JsonObject | undefined;
25
- isValid: boolean;
26
26
  isValidated: boolean;
27
- isDecrypted: boolean;
28
- hasMetaBeenParsed: boolean;
27
+ isValid: boolean;
29
28
  previous: VerifiedTransaction | undefined;
30
29
  constructor(sessionID: SessionID, txIndex: number, tx: Transaction, branchId: RawCoID | undefined, parsingCache: {
31
30
  changes: JsonValue[];
32
31
  meta: JsonObject | undefined;
33
- } | undefined, previous: VerifiedTransaction | undefined);
32
+ } | undefined, previous: VerifiedTransaction | undefined, dispatchTransaction: (transaction: VerifiedTransaction) => void);
34
33
  get txID(): TransactionID;
35
34
  get madeAt(): number;
36
35
  isValidTransactionWithChanges(): this is {
37
36
  changes: JsonValue[];
38
37
  isValid: true;
39
38
  };
39
+ markValid(): void;
40
+ markInvalid(): void;
40
41
  }
41
42
  export type DecryptedTransaction = Omit<VerifiedTransaction, "changes"> & {
42
43
  changes: JsonValue[];
@@ -67,16 +68,23 @@ export declare class CoValueCore {
67
68
  readonly listeners: Set<(core: CoValueCore, unsub: () => void) => void>;
68
69
  private counter;
69
70
  constructor(id: RawCoID, node: LocalNode);
70
- get loadingState(): "unavailable" | "available" | "unknown" | "loading";
71
+ get loadingState(): "available" | "unknown" | "loading" | "unavailable";
71
72
  hasMissingDependencies(): boolean;
72
73
  isAvailable(): this is AvailableCoValueCore;
74
+ /**
75
+ * True if the coValue is completely downloaded:
76
+ * - the current coValue is available and not streaming
77
+ * - the group is available and not streaming
78
+ * - TODO: all the parent groups are available and not streaming
79
+ */
80
+ isCompletelyDownloaded(): this is AvailableCoValueCore;
73
81
  hasVerifiedContent(): this is AvailableCoValueCore;
74
82
  isErroredInPeer(peerId: PeerID): boolean;
75
83
  waitFor(callback: (value: CoValueCore) => boolean): Promise<CoValueCore>;
76
84
  waitForAvailableOrUnavailable(): Promise<CoValueCore>;
77
85
  waitForAvailable(): Promise<CoValueCore>;
78
86
  waitForFullStreaming(): Promise<CoValueCore>;
79
- getLoadingStateForPeer(peerId: PeerID): "unavailable" | "available" | "unknown" | "pending" | "errored";
87
+ getLoadingStateForPeer(peerId: PeerID): "available" | "unknown" | "unavailable" | "pending" | "errored";
80
88
  private updateCounter;
81
89
  unmount(garbageCollectGroups?: boolean): boolean;
82
90
  markNotFoundInPeer(peerId: PeerID): void;
@@ -99,12 +107,27 @@ export declare class CoValueCore {
99
107
  groupInvalidationSubscription?: () => void;
100
108
  subscribeToGroupInvalidation(): void;
101
109
  contentInClonedNodeWithDifferentAccount(account: ControlledAccountOrAgent): Promise<RawCoValue>;
110
+ private _cachedKnownStateWithStreaming?;
111
+ /**
112
+ * Returns the known state considering the known state of the streaming source
113
+ *
114
+ * Used to correctly manage the content & subscriptions during the content streaming process
115
+ */
102
116
  knownStateWithStreaming(): CoValueKnownState;
117
+ private _cachedKnownState?;
118
+ /**
119
+ * Returns the known state of the CoValue
120
+ *
121
+ * The return value identity is going to be stable as long as the CoValue is not modified.
122
+ *
123
+ * On change the knownState is invalidated and a new object is returned.
124
+ */
103
125
  knownState(): CoValueKnownState;
104
126
  get meta(): JsonValue;
105
127
  nextTransactionID(): TransactionID;
106
128
  addDependenciesFromContentMessage(newContent: NewContentMessage): void;
107
129
  tryAddTransactions(sessionID: SessionID, newTransactions: Transaction[], newSignature: Signature, skipVerify?: boolean): Result<true, TryAddTransactionsError>;
130
+ private resetKnownStateCache;
108
131
  private processNewTransactions;
109
132
  private scheduleNotifyUpdate;
110
133
  pauseNotifyUpdate(): void;
@@ -123,6 +146,10 @@ export declare class CoValueCore {
123
146
  latestTxMadeAt: number;
124
147
  resetParsedTransactions(): void;
125
148
  verifiedTransactions: VerifiedTransaction[];
149
+ toValidateTransactions: VerifiedTransaction[];
150
+ toDecryptTransactions: VerifiedTransaction[];
151
+ toParseMetaTransactions: VerifiedTransaction[];
152
+ toProcessTransactions: VerifiedTransaction[];
126
153
  private verifiedTransactionsKnownSessions;
127
154
  private lastVerifiedTransactionBySessionID;
128
155
  private parsingCache;
@@ -136,6 +163,7 @@ export declare class CoValueCore {
136
163
  * @internal
137
164
  * */
138
165
  loadVerifiedTransactionsFromLogs(): void;
166
+ dispatchTransaction: (transaction: VerifiedTransaction) => void;
139
167
  /**
140
168
  * Iterates over the verifiedTransactions and marks them as valid or invalid, based on the group membership of the authors of the transactions .
141
169
  */
@@ -158,11 +186,14 @@ export declare class CoValueCore {
158
186
  ignorePrivateTransactions: boolean;
159
187
  from?: CoValueKnownState["sessions"];
160
188
  to?: CoValueKnownState["sessions"];
161
- knownTransactions?: Set<Transaction>;
189
+ knownTransactions?: Record<RawCoID, number>;
162
190
  skipBranchSource?: boolean;
163
191
  }): DecryptedTransaction[];
164
192
  dependencies: Set<RawCoID>;
165
193
  private addDependency;
194
+ dependant: Set<RawCoID>;
195
+ private addDependant;
196
+ isGroup(): boolean;
166
197
  createBranch(name: string, ownerId?: RawCoID): CoValueCore;
167
198
  mergeBranch(): CoValueCore;
168
199
  getBranch(name: string, ownerId?: RawCoID): CoValueCore;
@@ -173,7 +204,7 @@ export declare class CoValueCore {
173
204
  getMergeCommits(): MergeCommit[];
174
205
  getValidSortedTransactions(options?: {
175
206
  ignorePrivateTransactions: boolean;
176
- knownTransactions?: Set<Transaction>;
207
+ knownTransactions?: Record<RawCoID, number>;
177
208
  }): DecryptedTransaction[];
178
209
  compareTransactions(a: Pick<VerifiedTransaction, "madeAt" | "txID">, b: Pick<VerifiedTransaction, "madeAt" | "txID">): number;
179
210
  getCurrentReadKey(): {