cojson 0.8.37 → 0.8.39

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 (50) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/native/PeerState.js +11 -2
  3. package/dist/native/PeerState.js.map +1 -1
  4. package/dist/native/PriorityBasedMessageQueue.js +20 -11
  5. package/dist/native/PriorityBasedMessageQueue.js.map +1 -1
  6. package/dist/native/{SyncStateSubscriptionManager.js → SyncStateManager.js} +35 -24
  7. package/dist/native/SyncStateManager.js.map +1 -0
  8. package/dist/native/coValueCore.js +3 -0
  9. package/dist/native/coValueCore.js.map +1 -1
  10. package/dist/native/coValues/coMap.js +2 -3
  11. package/dist/native/coValues/coMap.js.map +1 -1
  12. package/dist/native/coValues/group.js +9 -3
  13. package/dist/native/coValues/group.js.map +1 -1
  14. package/dist/native/exports.js.map +1 -1
  15. package/dist/native/sync.js +34 -10
  16. package/dist/native/sync.js.map +1 -1
  17. package/dist/web/PeerState.js +11 -2
  18. package/dist/web/PeerState.js.map +1 -1
  19. package/dist/web/PriorityBasedMessageQueue.js +20 -11
  20. package/dist/web/PriorityBasedMessageQueue.js.map +1 -1
  21. package/dist/web/{SyncStateSubscriptionManager.js → SyncStateManager.js} +35 -24
  22. package/dist/web/SyncStateManager.js.map +1 -0
  23. package/dist/web/coValueCore.js +3 -0
  24. package/dist/web/coValueCore.js.map +1 -1
  25. package/dist/web/coValues/coMap.js +2 -3
  26. package/dist/web/coValues/coMap.js.map +1 -1
  27. package/dist/web/coValues/group.js +9 -3
  28. package/dist/web/coValues/group.js.map +1 -1
  29. package/dist/web/exports.js.map +1 -1
  30. package/dist/web/sync.js +34 -10
  31. package/dist/web/sync.js.map +1 -1
  32. package/package.json +5 -1
  33. package/src/PeerState.ts +12 -2
  34. package/src/PriorityBasedMessageQueue.ts +24 -12
  35. package/src/{SyncStateSubscriptionManager.ts → SyncStateManager.ts} +48 -35
  36. package/src/coValueCore.ts +6 -0
  37. package/src/coValues/coMap.ts +2 -3
  38. package/src/coValues/group.ts +11 -3
  39. package/src/exports.ts +2 -1
  40. package/src/sync.ts +57 -23
  41. package/src/tests/PeerState.test.ts +49 -0
  42. package/src/tests/PriorityBasedMessageQueue.test.ts +43 -4
  43. package/src/tests/{SyncStateSubscriptionManager.test.ts → SyncStateManager.test.ts} +109 -25
  44. package/src/tests/coMap.test.ts +4 -13
  45. package/src/tests/group.test.ts +6 -11
  46. package/src/tests/permissions.test.ts +45 -15
  47. package/src/tests/sync.test.ts +112 -71
  48. package/src/tests/testUtils.ts +128 -11
  49. package/dist/native/SyncStateSubscriptionManager.js.map +0 -1
  50. package/dist/web/SyncStateSubscriptionManager.js.map +0 -1
package/dist/web/sync.js CHANGED
@@ -1,5 +1,6 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import { PeerState } from "./PeerState.js";
2
- import { SyncStateSubscriptionManager } from "./SyncStateSubscriptionManager.js";
3
+ import { SyncStateManager } from "./SyncStateManager.js";
3
4
  import { CoValueCore } from "./coValueCore.js";
4
5
  export function emptyKnownState(id) {
5
6
  return {
@@ -29,8 +30,13 @@ export class SyncManager {
29
30
  constructor(local) {
30
31
  this.peers = {};
31
32
  this.requestedSyncs = {};
33
+ this.peersCounter = metrics.getMeter("cojson").createUpDownCounter("jazz.peers", {
34
+ description: "Amount of connected peers",
35
+ valueType: ValueType.INT,
36
+ unit: "peer",
37
+ });
32
38
  this.local = local;
33
- this.syncStateSubscriptionManager = new SyncStateSubscriptionManager(this);
39
+ this.syncState = new SyncStateManager(this);
34
40
  }
35
41
  peersInPriorityOrder() {
36
42
  return Object.values(this.peers).sort((a, b) => {
@@ -159,8 +165,9 @@ export class SyncManager {
159
165
  if (prevPeer && !prevPeer.closed) {
160
166
  prevPeer.gracefulShutdown();
161
167
  }
168
+ this.peersCounter.add(1, { role: peer.role });
162
169
  const unsubscribeFromKnownStatesUpdates = peerState.knownStates.subscribe((id) => {
163
- this.syncStateSubscriptionManager.triggerUpdate(peer.id, id);
170
+ this.syncState.triggerUpdate(peer.id, id);
164
171
  });
165
172
  if (peerState.isServerOrStoragePeer()) {
166
173
  const initialSync = async () => {
@@ -217,6 +224,7 @@ export class SyncManager {
217
224
  const state = this.peers[peer.id];
218
225
  state?.gracefulShutdown();
219
226
  unsubscribeFromKnownStatesUpdates();
227
+ this.peersCounter.add(-1, { role: peer.role });
220
228
  if (peer.deletePeerStateOnClose) {
221
229
  delete this.peers[peer.id];
222
230
  }
@@ -485,23 +493,39 @@ export class SyncManager {
485
493
  }
486
494
  }
487
495
  for (const peer of this.getPeers()) {
488
- this.syncStateSubscriptionManager.triggerUpdate(peer.id, coValue.id);
496
+ this.syncState.triggerUpdate(peer.id, coValue.id);
489
497
  }
490
498
  }
491
- async waitForUploadIntoPeer(peerId, id) {
492
- const isAlreadyUploaded = this.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(peerId, id);
493
- if (isAlreadyUploaded) {
499
+ async waitForSyncWithPeer(peerId, id, timeout) {
500
+ const { syncState } = this;
501
+ const currentSyncState = syncState.getCurrentSyncState(peerId, id);
502
+ const isTheConditionAlreadyMet = currentSyncState.uploaded;
503
+ if (isTheConditionAlreadyMet) {
494
504
  return true;
495
505
  }
496
- return new Promise((resolve) => {
497
- const unsubscribe = this.syncStateSubscriptionManager.subscribeToPeerUpdates(peerId, (knownState, syncState) => {
498
- if (syncState.isUploaded && knownState.id === id) {
506
+ return new Promise((resolve, reject) => {
507
+ const unsubscribe = this.syncState.subscribeToPeerUpdates(peerId, (knownState, syncState) => {
508
+ if (syncState.uploaded && knownState.id === id) {
499
509
  resolve(true);
500
510
  unsubscribe?.();
511
+ clearTimeout(timeoutId);
501
512
  }
502
513
  });
514
+ const timeoutId = setTimeout(() => {
515
+ reject(new Error(`Timeout waiting for sync on ${peerId}/${id}`));
516
+ unsubscribe?.();
517
+ }, timeout);
503
518
  });
504
519
  }
520
+ async waitForSync(id, timeout = 30000) {
521
+ const peers = this.getPeers();
522
+ return Promise.all(peers.map((peer) => this.waitForSyncWithPeer(peer.id, id, timeout)));
523
+ }
524
+ async waitForAllCoValuesSync(timeout = 60000) {
525
+ const coValues = this.local.coValuesStore.getValues();
526
+ const validCoValues = Array.from(coValues).filter((coValue) => coValue.state.type === "available" || coValue.state.type === "loading");
527
+ return Promise.all(validCoValues.map((coValue) => this.waitForSync(coValue.id, timeout)));
528
+ }
505
529
  gracefulShutdown() {
506
530
  for (const peer of Object.values(this.peers)) {
507
531
  peer.gracefulShutdown();
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -19,8 +19,9 @@
19
19
  },
20
20
  "type": "module",
21
21
  "license": "MIT",
22
- "version": "0.8.37",
22
+ "version": "0.8.39",
23
23
  "devDependencies": {
24
+ "@opentelemetry/sdk-metrics": "^1.29.0",
24
25
  "@types/jest": "^29.5.3",
25
26
  "typescript": "^5.3.3",
26
27
  "vitest": "1.5.3"
@@ -35,6 +36,9 @@
35
36
  "neverthrow": "^7.0.1",
36
37
  "queueueue": "^4.1.2"
37
38
  },
39
+ "peerDependencies": {
40
+ "@opentelemetry/api": "^1.0.0"
41
+ },
38
42
  "gitHead": "33c27053293b4801b968c61d5c4c989f93a67d13",
39
43
  "scripts": {
40
44
  "dev": "tsc --watch --sourceMap --outDir dist/web -p tsconfig.web.json",
package/src/PeerState.ts CHANGED
@@ -14,7 +14,14 @@ export class PeerState {
14
14
  knownStates: PeerKnownStates | undefined,
15
15
  ) {
16
16
  this.optimisticKnownStates = knownStates?.clone() ?? new PeerKnownStates();
17
- this.knownStates = knownStates?.clone() ?? new PeerKnownStates();
17
+
18
+ // We assume that exchanges with storage peers are always successful
19
+ // hence we don't need to differentiate between knownStates and optimisticKnownStates
20
+ if (peer.role === "storage") {
21
+ this.knownStates = this.optimisticKnownStates;
22
+ } else {
23
+ this.knownStates = knownStates?.clone() ?? new PeerKnownStates();
24
+ }
18
25
  }
19
26
 
20
27
  /**
@@ -36,7 +43,10 @@ export class PeerState {
36
43
 
37
44
  dispatchToKnownStates(action: PeerKnownStateActions) {
38
45
  this.knownStates.dispatch(action);
39
- this.optimisticKnownStates.dispatch(action);
46
+
47
+ if (this.role !== "storage") {
48
+ this.optimisticKnownStates.dispatch(action);
49
+ }
40
50
  }
41
51
 
42
52
  readonly erroredCoValues: Map<RawCoID, TryAddTransactionsError> = new Map();
@@ -1,5 +1,6 @@
1
- import { CoValuePriority } from "./priority.js";
2
- import { SyncMessage } from "./sync.js";
1
+ import { ValueType, metrics } from "@opentelemetry/api";
2
+ import type { CoValuePriority } from "./priority.js";
3
+ import type { SyncMessage } from "./sync.js";
3
4
 
4
5
  function promiseWithResolvers<R>() {
5
6
  let resolve = (_: R) => {};
@@ -36,6 +37,13 @@ type QueueTuple = Tuple<QueueEntry[], 8>;
36
37
 
37
38
  export class PriorityBasedMessageQueue {
38
39
  private queues: QueueTuple = [[], [], [], [], [], [], [], []];
40
+ queueSizeCounter = metrics
41
+ .getMeter("cojson")
42
+ .createUpDownCounter("jazz.messagequeue.size", {
43
+ description: "Size of the message queue",
44
+ valueType: ValueType.INT,
45
+ unit: "entry",
46
+ });
39
47
 
40
48
  private getQueue(priority: CoValuePriority) {
41
49
  return this.queues[priority];
@@ -47,24 +55,28 @@ export class PriorityBasedMessageQueue {
47
55
  const { promise, resolve, reject } = promiseWithResolvers<void>();
48
56
  const entry: QueueEntry = { msg, promise, resolve, reject };
49
57
 
50
- if ("priority" in msg) {
51
- const queue = this.getQueue(msg.priority);
58
+ const priority = "priority" in msg ? msg.priority : this.defaultPriority;
52
59
 
53
- queue?.push(entry);
54
- } else {
55
- this.getQueue(this.defaultPriority).push(entry);
56
- }
60
+ this.getQueue(priority).push(entry);
61
+
62
+ this.queueSizeCounter.add(1, {
63
+ priority,
64
+ });
57
65
 
58
66
  return promise;
59
67
  }
60
68
 
61
69
  public pull() {
62
- const activeQueue = this.queues.find((queue) => queue.length > 0);
70
+ const priority = this.queues.findIndex((queue) => queue.length > 0);
63
71
 
64
- if (!activeQueue) {
65
- return undefined;
72
+ if (priority === -1) {
73
+ return;
66
74
  }
67
75
 
68
- return activeQueue.shift();
76
+ this.queueSizeCounter.add(-1, {
77
+ priority,
78
+ });
79
+
80
+ return this.queues[priority]?.shift();
69
81
  }
70
82
  }
@@ -6,22 +6,22 @@ import {
6
6
  emptyKnownState,
7
7
  } from "./sync.js";
8
8
 
9
- export type SyncStateGetter = {
10
- isUploaded: boolean;
9
+ export type SyncState = {
10
+ uploaded: boolean;
11
11
  };
12
12
 
13
13
  export type GlobalSyncStateListenerCallback = (
14
14
  peerId: PeerID,
15
15
  knownState: CoValueKnownState,
16
- sync: SyncStateGetter,
16
+ sync: SyncState,
17
17
  ) => void;
18
18
 
19
19
  export type PeerSyncStateListenerCallback = (
20
20
  knownState: CoValueKnownState,
21
- sync: SyncStateGetter,
21
+ sync: SyncState,
22
22
  ) => void;
23
23
 
24
- export class SyncStateSubscriptionManager {
24
+ export class SyncStateManager {
25
25
  constructor(private syncManager: SyncManager) {}
26
26
 
27
27
  private listeners = new Set<GlobalSyncStateListenerCallback>();
@@ -55,6 +55,24 @@ export class SyncStateSubscriptionManager {
55
55
  };
56
56
  }
57
57
 
58
+ getCurrentSyncState(peerId: PeerID, id: RawCoID) {
59
+ // Build a lazy sync state object to process the isUploaded info
60
+ // only when requested
61
+ const syncState = {} as SyncState;
62
+
63
+ const getIsUploaded = () =>
64
+ this.getIsCoValueFullyUploadedIntoPeer(peerId, id);
65
+
66
+ Object.defineProperties(syncState, {
67
+ uploaded: {
68
+ enumerable: true,
69
+ get: getIsUploaded,
70
+ },
71
+ });
72
+
73
+ return syncState;
74
+ }
75
+
58
76
  triggerUpdate(peerId: PeerID, id: RawCoID) {
59
77
  const peer = this.syncManager.peers[peerId];
60
78
 
@@ -70,20 +88,7 @@ export class SyncStateSubscriptionManager {
70
88
  }
71
89
 
72
90
  const knownState = peer.knownStates.get(id) ?? emptyKnownState(id);
73
-
74
- // Build a lazy sync state object to process the isUploaded info
75
- // only when requested
76
- const syncState = {} as SyncStateGetter;
77
-
78
- const getIsUploaded = simpleMemoize(() =>
79
- this.getIsCoValueFullyUploadedIntoPeer(peerId, id),
80
- );
81
- Object.defineProperties(syncState, {
82
- isUploaded: {
83
- enumerable: true,
84
- get: getIsUploaded,
85
- },
86
- });
91
+ const syncState = this.getCurrentSyncState(peerId, id);
87
92
 
88
93
  for (const listener of this.listeners) {
89
94
  listener(peerId, knownState, syncState);
@@ -96,33 +101,46 @@ export class SyncStateSubscriptionManager {
96
101
  }
97
102
  }
98
103
 
99
- getIsCoValueFullyUploadedIntoPeer(peerId: PeerID, id: RawCoID) {
104
+ private getKnownStateSessions(peerId: PeerID, id: RawCoID) {
100
105
  const peer = this.syncManager.peers[peerId];
101
- const entry = this.syncManager.local.coValuesStore.get(id);
102
106
 
103
107
  if (!peer) {
104
- return false;
108
+ return undefined;
105
109
  }
106
110
 
111
+ const peerSessions = peer.knownStates.get(id)?.sessions;
112
+
113
+ if (!peerSessions) {
114
+ return undefined;
115
+ }
116
+
117
+ const entry = this.syncManager.local.coValuesStore.get(id);
118
+
107
119
  if (entry.state.type !== "available") {
108
- return false;
120
+ return undefined;
109
121
  }
110
122
 
111
123
  const coValue = entry.state.coValue;
112
- const knownState = peer.knownStates.get(id);
124
+ const coValueSessions = coValue.knownState().sessions;
125
+
126
+ return {
127
+ peer: peerSessions,
128
+ coValue: coValueSessions,
129
+ };
130
+ }
131
+
132
+ private getIsCoValueFullyUploadedIntoPeer(peerId: PeerID, id: RawCoID) {
133
+ const sessions = this.getKnownStateSessions(peerId, id);
113
134
 
114
- if (!knownState) {
135
+ if (!sessions) {
115
136
  return false;
116
137
  }
117
138
 
118
- return getIsUploadCompleted(
119
- coValue.knownState().sessions,
120
- knownState.sessions,
121
- );
139
+ return getIsUploaded(sessions.coValue, sessions.peer);
122
140
  }
123
141
  }
124
142
 
125
- function getIsUploadCompleted(
143
+ function getIsUploaded(
126
144
  from: Record<string, number>,
127
145
  to: Record<string, number>,
128
146
  ) {
@@ -134,8 +152,3 @@ function getIsUploadCompleted(
134
152
 
135
153
  return true;
136
154
  }
137
-
138
- function simpleMemoize<T>(fn: () => T): () => T {
139
- let value: T | undefined;
140
- return () => value ?? (value = fn());
141
- }
@@ -1043,6 +1043,12 @@ export class CoValueCore {
1043
1043
  ]
1044
1044
  : [];
1045
1045
  }
1046
+
1047
+ waitForSync(options?: {
1048
+ timeout?: number;
1049
+ }) {
1050
+ return this.node.syncManager.waitForSync(this.id, options?.timeout);
1051
+ }
1046
1052
  }
1047
1053
 
1048
1054
  function getNextKnownSignatureIdx(
@@ -126,15 +126,14 @@ export class RawCoMapView<
126
126
  keyof Shape & string,
127
127
  Shape[keyof Shape & string]
128
128
  >;
129
- let entry = latest[change.key];
129
+ const entry = latest[change.key];
130
130
  if (!entry) {
131
- entry = {
131
+ latest[change.key] = {
132
132
  txID,
133
133
  madeAt,
134
134
  changeIdx,
135
135
  change,
136
136
  };
137
- latest[change.key] = entry;
138
137
  } else if (madeAt >= entry.madeAt) {
139
138
  entry.txID = txID;
140
139
  entry.madeAt = madeAt;
@@ -81,6 +81,7 @@ export class RawGroup<
81
81
  accountID: RawAccountID | AgentID | typeof EVERYONE,
82
82
  ): { role: Role; via: CoID<RawGroup> | undefined } | undefined {
83
83
  const roleHere = this.get(accountID);
84
+
84
85
  if (roleHere === "revoked") {
85
86
  return undefined;
86
87
  }
@@ -92,7 +93,7 @@ export class RawGroup<
92
93
  }
93
94
  | undefined = roleHere && { role: roleHere, via: undefined };
94
95
 
95
- const parentGroups = this.getParentGroups();
96
+ const parentGroups = this.getParentGroups(this.options?.atTime);
96
97
 
97
98
  for (const parentGroup of parentGroups) {
98
99
  const roleInParent = parentGroup.roleOfInternal(accountID);
@@ -109,7 +110,7 @@ export class RawGroup<
109
110
  return roleInfo;
110
111
  }
111
112
 
112
- getParentGroups() {
113
+ getParentGroups(atTime?: number) {
113
114
  const groups: RawGroup[] = [];
114
115
 
115
116
  for (const key of this.keys()) {
@@ -118,7 +119,14 @@ export class RawGroup<
118
119
  getParentGroupId(key),
119
120
  "Expected parent group to be loaded",
120
121
  );
121
- groups.push(expectGroup(parent.getCurrentContent()));
122
+
123
+ const parentGroup = expectGroup(parent.getCurrentContent());
124
+
125
+ if (atTime) {
126
+ groups.push(parentGroup.atTime(atTime));
127
+ } else {
128
+ groups.push(parentGroup);
129
+ }
122
130
  }
123
131
  }
124
132
 
package/src/exports.ts CHANGED
@@ -50,7 +50,7 @@ import type {
50
50
  } from "./coValues/coStream.js";
51
51
  import type { InviteSecret } from "./coValues/group.js";
52
52
  import type { AgentSecret } from "./crypto/crypto.js";
53
- import type { AgentID, SessionID } from "./ids.js";
53
+ import type { AgentID, RawCoID, SessionID } from "./ids.js";
54
54
  import type { JsonValue } from "./jsonValue.js";
55
55
  import type * as Media from "./media.js";
56
56
  import type {
@@ -104,6 +104,7 @@ export {
104
104
  RawCoStream,
105
105
  RawBinaryCoStream,
106
106
  RawCoValue,
107
+ RawCoID,
107
108
  CoID,
108
109
  AnyRawCoValue,
109
110
  RawAccount,
package/src/sync.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import { PeerState } from "./PeerState.js";
2
- import { SyncStateSubscriptionManager } from "./SyncStateSubscriptionManager.js";
3
+ import { SyncStateManager } from "./SyncStateManager.js";
3
4
  import { CoValueHeader, Transaction } from "./coValueCore.js";
4
5
  import { CoValueCore } from "./coValueCore.js";
5
6
  import { Signature } from "./crypto/crypto.js";
@@ -115,12 +116,18 @@ export class SyncManager {
115
116
  | undefined;
116
117
  } = {};
117
118
 
119
+ peersCounter = metrics.getMeter("cojson").createUpDownCounter("jazz.peers", {
120
+ description: "Amount of connected peers",
121
+ valueType: ValueType.INT,
122
+ unit: "peer",
123
+ });
124
+
118
125
  constructor(local: LocalNode) {
119
126
  this.local = local;
120
- this.syncStateSubscriptionManager = new SyncStateSubscriptionManager(this);
127
+ this.syncState = new SyncStateManager(this);
121
128
  }
122
129
 
123
- syncStateSubscriptionManager: SyncStateSubscriptionManager;
130
+ syncState: SyncStateManager;
124
131
 
125
132
  peersInPriorityOrder(): PeerState[] {
126
133
  return Object.values(this.peers).sort((a, b) => {
@@ -296,9 +303,11 @@ export class SyncManager {
296
303
  prevPeer.gracefulShutdown();
297
304
  }
298
305
 
306
+ this.peersCounter.add(1, { role: peer.role });
307
+
299
308
  const unsubscribeFromKnownStatesUpdates = peerState.knownStates.subscribe(
300
309
  (id) => {
301
- this.syncStateSubscriptionManager.triggerUpdate(peer.id, id);
310
+ this.syncState.triggerUpdate(peer.id, id);
302
311
  },
303
312
  );
304
313
 
@@ -367,6 +376,7 @@ export class SyncManager {
367
376
  const state = this.peers[peer.id];
368
377
  state?.gracefulShutdown();
369
378
  unsubscribeFromKnownStatesUpdates();
379
+ this.peersCounter.add(-1, { role: peer.role });
370
380
 
371
381
  if (peer.deletePeerStateOnClose) {
372
382
  delete this.peers[peer.id];
@@ -708,35 +718,59 @@ export class SyncManager {
708
718
  }
709
719
 
710
720
  for (const peer of this.getPeers()) {
711
- this.syncStateSubscriptionManager.triggerUpdate(peer.id, coValue.id);
721
+ this.syncState.triggerUpdate(peer.id, coValue.id);
712
722
  }
713
723
  }
714
724
 
715
- async waitForUploadIntoPeer(peerId: PeerID, id: RawCoID) {
716
- const isAlreadyUploaded =
717
- this.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
718
- peerId,
719
- id,
720
- );
725
+ async waitForSyncWithPeer(peerId: PeerID, id: RawCoID, timeout: number) {
726
+ const { syncState } = this;
727
+ const currentSyncState = syncState.getCurrentSyncState(peerId, id);
721
728
 
722
- if (isAlreadyUploaded) {
729
+ const isTheConditionAlreadyMet = currentSyncState.uploaded;
730
+
731
+ if (isTheConditionAlreadyMet) {
723
732
  return true;
724
733
  }
725
734
 
726
- return new Promise((resolve) => {
727
- const unsubscribe =
728
- this.syncStateSubscriptionManager.subscribeToPeerUpdates(
729
- peerId,
730
- (knownState, syncState) => {
731
- if (syncState.isUploaded && knownState.id === id) {
732
- resolve(true);
733
- unsubscribe?.();
734
- }
735
- },
736
- );
735
+ return new Promise((resolve, reject) => {
736
+ const unsubscribe = this.syncState.subscribeToPeerUpdates(
737
+ peerId,
738
+ (knownState, syncState) => {
739
+ if (syncState.uploaded && knownState.id === id) {
740
+ resolve(true);
741
+ unsubscribe?.();
742
+ clearTimeout(timeoutId);
743
+ }
744
+ },
745
+ );
746
+
747
+ const timeoutId = setTimeout(() => {
748
+ reject(new Error(`Timeout waiting for sync on ${peerId}/${id}`));
749
+ unsubscribe?.();
750
+ }, timeout);
737
751
  });
738
752
  }
739
753
 
754
+ async waitForSync(id: RawCoID, timeout = 30_000) {
755
+ const peers = this.getPeers();
756
+
757
+ return Promise.all(
758
+ peers.map((peer) => this.waitForSyncWithPeer(peer.id, id, timeout)),
759
+ );
760
+ }
761
+
762
+ async waitForAllCoValuesSync(timeout = 60_000) {
763
+ const coValues = this.local.coValuesStore.getValues();
764
+ const validCoValues = Array.from(coValues).filter(
765
+ (coValue) =>
766
+ coValue.state.type === "available" || coValue.state.type === "loading",
767
+ );
768
+
769
+ return Promise.all(
770
+ validCoValues.map((coValue) => this.waitForSync(coValue.id, timeout)),
771
+ );
772
+ }
773
+
740
774
  gracefulShutdown() {
741
775
  for (const peer of Object.values(this.peers)) {
742
776
  peer.gracefulShutdown();