@dxos/echo-pipeline 0.6.2 → 0.6.3-main.0308ae2

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 (66) hide show
  1. package/dist/lib/browser/{chunk-UJQ5VS5V.mjs → chunk-6MJEONOX.mjs} +2569 -1066
  2. package/dist/lib/browser/chunk-6MJEONOX.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +12 -1049
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +224 -2
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node/{chunk-RH6TDRML.cjs → chunk-PT5LWMPA.cjs} +3185 -1710
  9. package/dist/lib/node/chunk-PT5LWMPA.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +37 -1056
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +238 -13
  14. package/dist/lib/node/testing/index.cjs.map +4 -4
  15. package/dist/types/src/automerge/automerge-host.d.ts +29 -2
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/collection-synchronizer.d.ts +61 -0
  18. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -0
  19. package/dist/types/src/automerge/collection-synchronizer.test.d.ts +2 -0
  20. package/dist/types/src/automerge/collection-synchronizer.test.d.ts.map +1 -0
  21. package/dist/types/src/automerge/echo-network-adapter.d.ts +9 -2
  22. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  23. package/dist/types/src/automerge/echo-replicator.d.ts +7 -0
  24. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  25. package/dist/types/src/automerge/heads-store.d.ts +1 -1
  26. package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
  27. package/dist/types/src/automerge/index.d.ts +2 -0
  28. package/dist/types/src/automerge/index.d.ts.map +1 -1
  29. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +3 -1
  30. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  31. package/dist/types/src/automerge/mesh-echo-replicator.d.ts +2 -2
  32. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  33. package/dist/types/src/automerge/network-protocol.d.ts +31 -0
  34. package/dist/types/src/automerge/network-protocol.d.ts.map +1 -0
  35. package/dist/types/src/automerge/space-collection.d.ts +4 -0
  36. package/dist/types/src/automerge/space-collection.d.ts.map +1 -0
  37. package/dist/types/src/db-host/data-service.d.ts +2 -1
  38. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  39. package/dist/types/src/db-host/documents-synchronizer.d.ts +1 -1
  40. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  41. package/dist/types/src/testing/index.d.ts +1 -0
  42. package/dist/types/src/testing/index.d.ts.map +1 -1
  43. package/dist/types/src/testing/test-replicator.d.ts +46 -0
  44. package/dist/types/src/testing/test-replicator.d.ts.map +1 -0
  45. package/package.json +33 -33
  46. package/src/automerge/automerge-host.test.ts +76 -14
  47. package/src/automerge/automerge-host.ts +219 -32
  48. package/src/automerge/automerge-repo.test.ts +2 -1
  49. package/src/automerge/collection-synchronizer.test.ts +91 -0
  50. package/src/automerge/collection-synchronizer.ts +204 -0
  51. package/src/automerge/echo-network-adapter.test.ts +5 -1
  52. package/src/automerge/echo-network-adapter.ts +69 -4
  53. package/src/automerge/echo-replicator.ts +9 -0
  54. package/src/automerge/heads-store.ts +6 -9
  55. package/src/automerge/index.ts +2 -0
  56. package/src/automerge/mesh-echo-replicator-connection.ts +6 -1
  57. package/src/automerge/mesh-echo-replicator.ts +28 -7
  58. package/src/automerge/network-protocol.ts +45 -0
  59. package/src/automerge/space-collection.ts +14 -0
  60. package/src/db-host/data-service.ts +26 -12
  61. package/src/db-host/documents-synchronizer.ts +17 -5
  62. package/src/metadata/metadata-store.ts +1 -1
  63. package/src/testing/index.ts +1 -0
  64. package/src/testing/test-replicator.ts +194 -0
  65. package/dist/lib/browser/chunk-UJQ5VS5V.mjs.map +0 -7
  66. package/dist/lib/node/chunk-RH6TDRML.cjs.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9G,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,KAAK,cAAc,EAA6B,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/G,MAAM,MAAM,wBAAwB,GAAG;IACrC,6BAA6B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;CAClF,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IASxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEf,OAAO,EAAE,wBAAwB;IAIrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAMtE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAc5B,UAAU,IAAI,IAAI;IAKrB,IAAI;IAaJ,KAAK;IAaL,aAAa;IAKb,aAAa,CAAC,UAAU,EAAE,cAAc;IAgBxC,gBAAgB,CAAC,UAAU,EAAE,cAAc;IAO3C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,OAAO,CAAC,iBAAiB;IA8BzB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,kBAAkB;CAM3B;AASD,eAAO,MAAM,sBAAsB,QAAO,YAI/B,CAAC;AAEZ,eAAO,MAAM,kBAAkB,aAAc,YAAY,KAAG,OACC,CAAC"}
1
+ {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9G,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,MAAM,wBAAwB,GAAG;IACrC,6BAA6B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACjF,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,yBAAyB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3F,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IASxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEf,OAAO,EAAE,wBAAwB;IAIrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAMtE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAc5B,UAAU,IAAI,IAAI;IAKrB,IAAI;IAaJ,KAAK;IAaL,aAAa;IAKb,aAAa,CAAC,UAAU,EAAE,cAAc;IAgBxC,gBAAgB,CAAC,UAAU,EAAE,cAAc;IAO3C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO;IASjF,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUlE,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAYjF,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IAU9D,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,UAAU;IAUlB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,kBAAkB;CAM3B;AASD,eAAO,MAAM,sBAAsB,QAAO,YAI/B,CAAC;AAEZ,eAAO,MAAM,kBAAkB,aAAc,YAAY,KAAG,OACC,CAAC"}
@@ -38,8 +38,15 @@ export interface ReplicatorConnection {
38
38
  * The remote peer can still request the document by its id bypassing this check.
39
39
  */
40
40
  shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean>;
41
+ /**
42
+ * @returns true if the collection should be synced to this peer.
43
+ */
44
+ shouldSyncCollection(params: ShouldSyncCollectionParams): boolean;
41
45
  }
42
46
  export type ShouldAdvertiseParams = {
43
47
  documentId: string;
44
48
  };
49
+ export type ShouldSyncCollectionParams = {
50
+ collectionId: string;
51
+ };
45
52
  //# sourceMappingURL=echo-replicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE7E,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzD,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3D,4BAA4B,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE7E,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzD,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3D,4BAA4B,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC;CACnE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC"}
@@ -8,6 +8,6 @@ export declare class HeadsStore {
8
8
  private readonly _db;
9
9
  constructor({ db }: HeadsStoreParams);
10
10
  setHeads(documentId: DocumentId, heads: Heads, batch: BatchLevel): void;
11
- getHeads(documentId: DocumentId): Promise<Heads | undefined>;
11
+ getHeads(documentIds: DocumentId[]): Promise<Array<Heads | undefined>>;
12
12
  }
13
13
  //# sourceMappingURL=heads-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"heads-store.d.ts","sourceRoot":"","sources":["../../../../src/automerge/heads-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,EAAE,EAAE,EAAE,EAAE,gBAAgB;IAIpC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;IAQ1D,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;CAUnE"}
1
+ {"version":3,"file":"heads-store.d.ts","sourceRoot":"","sources":["../../../../src/automerge/heads-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,EAAE,EAAE,EAAE,EAAE,gBAAgB;IAIpC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;IAS1D,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;CAM7E"}
@@ -2,4 +2,6 @@ export * from './automerge-host';
2
2
  export * from './leveldb-storage-adapter';
3
3
  export * from './mesh-echo-replicator';
4
4
  export * from './echo-replicator';
5
+ export { diffCollectionState } from './collection-synchronizer';
6
+ export * from './space-collection';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,oBAAoB,CAAC"}
@@ -2,12 +2,13 @@ import { type Message } from '@dxos/automerge/automerge-repo';
2
2
  import { Resource } from '@dxos/context';
3
3
  import { type PublicKey } from '@dxos/keys';
4
4
  import { AutomergeReplicator, type AutomergeReplicatorFactory } from '@dxos/teleport-extension-automerge-replicator';
5
- import type { ReplicatorConnection, ShouldAdvertiseParams } from './echo-replicator';
5
+ import type { ReplicatorConnection, ShouldAdvertiseParams, ShouldSyncCollectionParams } from './echo-replicator';
6
6
  export type MeshReplicatorConnectionParams = {
7
7
  ownPeerId: string;
8
8
  onRemoteConnected: () => void;
9
9
  onRemoteDisconnected: () => void;
10
10
  shouldAdvertise: (params: ShouldAdvertiseParams) => Promise<boolean>;
11
+ shouldSyncCollection: (params: ShouldSyncCollectionParams) => boolean;
11
12
  replicatorFactory?: AutomergeReplicatorFactory;
12
13
  };
13
14
  export declare class MeshReplicatorConnection extends Resource implements ReplicatorConnection {
@@ -22,6 +23,7 @@ export declare class MeshReplicatorConnection extends Resource implements Replic
22
23
  private _disconnectIfEnabled;
23
24
  get peerId(): string;
24
25
  shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean>;
26
+ shouldSyncCollection(params: ShouldSyncCollectionParams): boolean;
25
27
  /**
26
28
  * Start exchanging messages with the remote peer.
27
29
  * Call after the remote peer has connected.
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-echo-replicator-connection.d.ts","sourceRoot":"","sources":["../../../../src/automerge/mesh-echo-replicator-connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAErH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAIrF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;CAChD,CAAC;AAEF,qBAAa,wBAAyB,SAAQ,QAAS,YAAW,oBAAoB;IAUxE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT7B,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEhD,SAAgB,mBAAmB,EAAE,mBAAmB,CAAC;IAEzD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAEE,OAAO,EAAE,8BAA8B;IAkEpE,OAAO,CAAC,oBAAoB;IAM5B,IAAI,MAAM,IAAI,MAAM,CAGnB;IAEK,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE;;;OAGG;IACH,MAAM;IAKN;;OAEG;IACH,OAAO;CAGR"}
1
+ {"version":3,"file":"mesh-echo-replicator-connection.d.ts","sourceRoot":"","sources":["../../../../src/automerge/mesh-echo-replicator-connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAErH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAIjH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,oBAAoB,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,OAAO,CAAC;IACtE,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;CAChD,CAAC;AAEF,qBAAa,wBAAyB,SAAQ,QAAS,YAAW,oBAAoB;IAUxE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT7B,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEhD,SAAgB,mBAAmB,EAAE,mBAAmB,CAAC;IAEzD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAEE,OAAO,EAAE,8BAA8B;IAkEpE,OAAO,CAAC,oBAAoB;IAM5B,IAAI,MAAM,IAAI,MAAM,CAGnB;IAEK,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO;IAIjE;;;OAGG;IACH,MAAM;IAKN;;OAEG;IACH,OAAO;CAGR"}
@@ -11,13 +11,13 @@ export declare class MeshEchoReplicator implements EchoReplicator {
11
11
  */
12
12
  private readonly _connectionsPerPeer;
13
13
  /**
14
- * spaceKey -> deviceKey[]
14
+ * spaceId -> deviceKey[]
15
15
  */
16
16
  private readonly _authorizedDevices;
17
17
  private _context;
18
18
  connect(context: EchoReplicatorContext): Promise<void>;
19
19
  disconnect(): Promise<void>;
20
20
  createExtension(extensionFactory?: AutomergeReplicatorFactory): AutomergeReplicator;
21
- authorizeDevice(spaceKey: PublicKey, deviceKey: PublicKey): void;
21
+ authorizeDevice(spaceKey: PublicKey, deviceKey: PublicKey): Promise<void>;
22
22
  }
23
23
  //# sourceMappingURL=mesh-echo-replicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/mesh-echo-replicator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAChC,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAA8B,MAAM,mBAAmB,CAAC;AAKhH;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IAEnF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoE;IAEvG,OAAO,CAAC,QAAQ,CAAsC;IAEhD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,UAAU;IAahB,eAAe,CAAC,gBAAgB,CAAC,EAAE,0BAA0B,GAAG,mBAAmB;IAqEnF,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAW1D"}
1
+ {"version":3,"file":"mesh-echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/mesh-echo-replicator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAErD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAChC,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAA8B,MAAM,mBAAmB,CAAC;AAOhH;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IAEnF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6C;IAEhF,OAAO,CAAC,QAAQ,CAAsC;IAEhD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,UAAU;IAahB,eAAe,CAAC,gBAAgB,CAAC,EAAE,0BAA0B,GAAG,mBAAmB;IAuF7E,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAYhE"}
@@ -0,0 +1,31 @@
1
+ import type { Message, PeerId } from '@dxos/automerge/automerge-repo';
2
+ export declare const MESSAGE_TYPE_COLLECTION_QUERY = "collection-query";
3
+ export type CollectionQueryMessage = {
4
+ type: typeof MESSAGE_TYPE_COLLECTION_QUERY;
5
+ senderId: PeerId;
6
+ targetId: PeerId;
7
+ collectionId: string;
8
+ /**
9
+ * Identifier of the current state.
10
+ * Remote peer will skip sending the state if it has the same tag.
11
+ */
12
+ stateTag?: string;
13
+ };
14
+ export declare const isCollectionQueryMessage: (message: Message) => message is CollectionQueryMessage;
15
+ export declare const MESSAGE_TYPE_COLLECTION_STATE = "collection-state";
16
+ export type CollectionStateMessage = {
17
+ type: typeof MESSAGE_TYPE_COLLECTION_STATE;
18
+ senderId: PeerId;
19
+ targetId: PeerId;
20
+ collectionId: string;
21
+ /**
22
+ * State representation is implementation-defined.
23
+ */
24
+ state?: unknown;
25
+ /**
26
+ * Identifier of the current state.
27
+ */
28
+ stateTag?: string;
29
+ };
30
+ export declare const isCollectionStateMessage: (message: Message) => message is CollectionStateMessage;
31
+ //# sourceMappingURL=network-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-protocol.d.ts","sourceRoot":"","sources":["../../../../src/automerge/network-protocol.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAEtE,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,6BAA6B,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAAa,OAAO,sCACT,CAAC;AAEjD,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,6BAA6B,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAAa,OAAO,sCACT,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { SpaceId } from '@dxos/keys';
2
+ export declare const deriveCollectionIdFromSpaceId: (spaceId: SpaceId) => string;
3
+ export declare const getSpaceIdFromCollectionId: (collectionId: string) => SpaceId;
4
+ //# sourceMappingURL=space-collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-collection.d.ts","sourceRoot":"","sources":["../../../../src/automerge/space-collection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,eAAO,MAAM,6BAA6B,YAAa,OAAO,KAAG,MAA4B,CAAC;AAE9F,eAAO,MAAM,0BAA0B,iBAAkB,MAAM,KAAG,OAIjE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type RequestOptions, Stream } from '@dxos/codec-protobuf';
2
- import { type DataService, type FlushRequest, type SubscribeRequest, type BatchedDocumentUpdates, type UpdateSubscriptionRequest, type GetDocumentHeadsRequest, type GetDocumentHeadsResponse, type ReIndexHeadsRequest, type WaitUntilHeadsReplicatedRequest, type UpdateRequest } from '@dxos/protocols/proto/dxos/echo/service';
2
+ import { type DataService, type FlushRequest, type SubscribeRequest, type BatchedDocumentUpdates, type UpdateSubscriptionRequest, type GetDocumentHeadsRequest, type GetDocumentHeadsResponse, type ReIndexHeadsRequest, type WaitUntilHeadsReplicatedRequest, type UpdateRequest, type GetSpaceSyncStateRequest, type SpaceSyncState } from '@dxos/protocols/proto/dxos/echo/service';
3
3
  import { type AutomergeHost } from '../automerge';
4
4
  export type DataServiceParams = {
5
5
  automergeHost: AutomergeHost;
@@ -25,5 +25,6 @@ export declare class DataServiceImpl implements DataService {
25
25
  waitUntilHeadsReplicated(request: WaitUntilHeadsReplicatedRequest, options?: RequestOptions | undefined): Promise<void>;
26
26
  reIndexHeads(request: ReIndexHeadsRequest, options?: RequestOptions): Promise<void>;
27
27
  updateIndexes(): Promise<void>;
28
+ getSpaceSyncState(request: GetSpaceSyncStateRequest, options?: RequestOptions | undefined): Promise<SpaceSyncState>;
28
29
  }
29
30
  //# sourceMappingURL=data-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-service.d.ts","sourceRoot":"","sources":["../../../../src/db-host/data-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,aAAa,EACnB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AAEH,qBAAa,eAAgB,YAAW,WAAW;IACjD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAE3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;gBAEzC,MAAM,EAAE,iBAAiB;IAKrC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAiB9D,kBAAkB,CAAC,OAAO,EAAE,yBAAyB;IAYrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiBrF,wBAAwB,CAC5B,OAAO,EAAE,+BAA+B,EACxC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC;IAIV,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,aAAa;CAGpB"}
1
+ {"version":3,"file":"data-service.d.ts","sourceRoot":"","sources":["../../../../src/db-host/data-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACpB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AAEH,qBAAa,eAAgB,YAAW,WAAW;IACjD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAE3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;gBAEzC,MAAM,EAAE,iBAAiB;IAKrC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAiB9D,kBAAkB,CAAC,OAAO,EAAE,yBAAyB;IAYrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAarF,wBAAwB,CAC5B,OAAO,EAAE,+BAA+B,EACxC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC;IAIV,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,aAAa;IAIb,iBAAiB,CACrB,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,GACnC,OAAO,CAAC,cAAc,CAAC;CAY3B"}
@@ -28,7 +28,7 @@ export declare class DocumentsSynchronizer extends Resource {
28
28
  */
29
29
  private _sendUpdatesJob?;
30
30
  constructor(_params: DocumentsSynchronizerParams);
31
- addDocuments(documentIds: DocumentId[]): Promise<void>;
31
+ addDocuments(documentIds: DocumentId[], retryCounter?: number): void;
32
32
  removeDocuments(documentIds: DocumentId[]): void;
33
33
  protected _open(): Promise<void>;
34
34
  protected _close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"documents-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/db-host/documents-synchronizer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAI3G,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAarC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD;;OAEG;IACH,OAAO,CAAC,eAAe,CAAC,CAA8B;gBAEzB,OAAO,EAAE,2BAA2B;IAI3D,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE;IAU5C,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE;cAQhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAMtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhD,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE;IAYhC,OAAO,CAAC,UAAU;IAWlB,oBAAoB,CAAC,SAAS,EAAE,YAAY;YAS9B,oBAAoB;IAqBlC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,cAAc;CAYvB"}
1
+ {"version":3,"file":"documents-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/db-host/documents-synchronizer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAI3G,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAarC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD;;OAEG;IACH,OAAO,CAAC,eAAe,CAAC,CAA8B;gBAEzB,OAAO,EAAE,2BAA2B;IAIjE,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,YAAY,SAAI;IAsBxD,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE;cAQhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAMtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhD,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE;IAYhC,OAAO,CAAC,UAAU;IAWlB,oBAAoB,CAAC,SAAS,EAAE,YAAY;YAS9B,oBAAoB;IAqBlC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,cAAc;CAYvB"}
@@ -2,4 +2,5 @@ export * from './change-metadata';
2
2
  export * from './test-agent-builder';
3
3
  export * from './test-feed-builder';
4
4
  export * from './test-network-adapter';
5
+ export * from './test-replicator';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { type Message } from '@dxos/automerge/automerge-repo';
2
+ import { type Context, Resource } from '@dxos/context';
3
+ import { type AutomergeReplicatorFactory } from '@dxos/teleport-extension-automerge-replicator';
4
+ import type { EchoReplicator, EchoReplicatorContext, ReplicatorConnection, ShouldAdvertiseParams, ShouldSyncCollectionParams } from '../automerge';
5
+ export type TestReplicatorNetworkOptions = {
6
+ latency?: number;
7
+ };
8
+ export declare class TestReplicationNetwork extends Resource {
9
+ private readonly _replicators;
10
+ private readonly _latency?;
11
+ constructor(options?: TestReplicatorNetworkOptions);
12
+ protected _close(ctx: Context): Promise<void>;
13
+ createReplicator(): Promise<TestReplicator>;
14
+ private _connectReplicator;
15
+ private _disconnectReplicator;
16
+ private _createConnectionPair;
17
+ }
18
+ type TestReplicatorParams = {
19
+ onConnect: () => Promise<void>;
20
+ onDisconnect: () => Promise<void>;
21
+ };
22
+ export declare class TestReplicator implements EchoReplicator {
23
+ private readonly _params;
24
+ constructor(_params: TestReplicatorParams);
25
+ connected: boolean;
26
+ context: EchoReplicatorContext | undefined;
27
+ connections: Set<TestReplicatorConnection>;
28
+ connect(context: EchoReplicatorContext): Promise<void>;
29
+ disconnect(): Promise<void>;
30
+ addConnection(connection: TestReplicatorConnection): Promise<void>;
31
+ removeConnection(connection: TestReplicatorConnection): Promise<void>;
32
+ }
33
+ export declare class TestReplicatorConnection implements ReplicatorConnection {
34
+ readonly peerId: string;
35
+ readonly readable: ReadableStream<Message>;
36
+ readonly writable: WritableStream<Message>;
37
+ otherSide: TestReplicatorConnection | undefined;
38
+ owningReplicator: TestReplicator | undefined;
39
+ constructor(peerId: string, readable: ReadableStream<Message>, writable: WritableStream<Message>);
40
+ shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean>;
41
+ shouldSyncCollection(params: ShouldSyncCollectionParams): boolean;
42
+ }
43
+ export declare const testAutomergeReplicatorFactory: AutomergeReplicatorFactory;
44
+ export declare const brokenAutomergeReplicatorFactory: AutomergeReplicatorFactory;
45
+ export {};
46
+ //# sourceMappingURL=test-replicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-replicator.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-replicator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,KAAK,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAErH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,QAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAqB;gBAEnC,OAAO,GAAE,4BAAiC;cAK7B,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;YAgBnC,kBAAkB;YAelB,qBAAqB;IAOnC,OAAO,CAAC,qBAAqB;CAoC9B;AAED,KAAK,oBAAoB,GAAG;IAC1B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AAEF,qBAAa,cAAe,YAAW,cAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAEnD,SAAS,UAAS;IAClB,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAa;IACvD,WAAW,gCAAuC;IAEnD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,aAAa,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE,gBAAgB,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5E;AAED,qBAAa,wBAAyB,YAAW,oBAAoB;aAKjD,MAAM,EAAE,MAAM;aACd,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC;aACjC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC;IAN5C,SAAS,EAAE,wBAAwB,GAAG,SAAS,CAAa;IAC5D,gBAAgB,EAAE,cAAc,GAAG,SAAS,CAAa;gBAG9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,EACjC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC;IAG7C,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO;CAGlE;AAED,eAAO,MAAM,8BAA8B,EAAE,0BAY5C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,0BAK9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.6.2",
3
+ "version": "0.6.3-main.0308ae2",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -39,38 +39,38 @@
39
39
  "crc-32": "^1.2.2",
40
40
  "level": "^8.0.1",
41
41
  "level-transcoder": "^1.0.1",
42
- "@dxos/async": "0.6.2",
43
- "@dxos/codec-protobuf": "0.6.2",
44
- "@dxos/crypto": "0.6.2",
45
- "@dxos/credentials": "0.6.2",
46
- "@dxos/context": "0.6.2",
47
- "@dxos/debug": "0.6.2",
48
- "@dxos/echo-schema": "0.6.2",
49
- "@dxos/feed-store": "0.6.2",
50
- "@dxos/hypercore": "0.6.2",
51
- "@dxos/indexing": "0.6.2",
52
- "@dxos/echo-protocol": "0.6.2",
53
- "@dxos/invariant": "0.6.2",
54
- "@dxos/automerge": "0.6.2",
55
- "@dxos/keyring": "0.6.2",
56
- "@dxos/keys": "0.6.2",
57
- "@dxos/kv-store": "0.6.2",
58
- "@dxos/log": "0.6.2",
59
- "@dxos/messaging": "0.6.2",
60
- "@dxos/network-manager": "0.6.2",
61
- "@dxos/node-std": "0.6.2",
62
- "@dxos/protocols": "0.6.2",
63
- "@dxos/rpc": "0.6.2",
64
- "@dxos/random-access-storage": "0.6.2",
65
- "@dxos/teleport": "0.6.2",
66
- "@dxos/teleport-extension-gossip": "0.6.2",
67
- "@dxos/teleport-extension-automerge-replicator": "0.6.2",
68
- "@dxos/teleport-extension-object-sync": "0.6.2",
69
- "@dxos/teleport-extension-replicator": "0.6.2",
70
- "@dxos/tracing": "0.6.2",
71
- "@dxos/timeframe": "0.6.2",
72
- "@dxos/typings": "0.6.2",
73
- "@dxos/util": "0.6.2"
42
+ "@dxos/codec-protobuf": "0.6.3-main.0308ae2",
43
+ "@dxos/automerge": "0.6.3-main.0308ae2",
44
+ "@dxos/context": "0.6.3-main.0308ae2",
45
+ "@dxos/credentials": "0.6.3-main.0308ae2",
46
+ "@dxos/debug": "0.6.3-main.0308ae2",
47
+ "@dxos/crypto": "0.6.3-main.0308ae2",
48
+ "@dxos/echo-protocol": "0.6.3-main.0308ae2",
49
+ "@dxos/feed-store": "0.6.3-main.0308ae2",
50
+ "@dxos/echo-schema": "0.6.3-main.0308ae2",
51
+ "@dxos/async": "0.6.3-main.0308ae2",
52
+ "@dxos/indexing": "0.6.3-main.0308ae2",
53
+ "@dxos/hypercore": "0.6.3-main.0308ae2",
54
+ "@dxos/keyring": "0.6.3-main.0308ae2",
55
+ "@dxos/invariant": "0.6.3-main.0308ae2",
56
+ "@dxos/keys": "0.6.3-main.0308ae2",
57
+ "@dxos/kv-store": "0.6.3-main.0308ae2",
58
+ "@dxos/messaging": "0.6.3-main.0308ae2",
59
+ "@dxos/node-std": "0.6.3-main.0308ae2",
60
+ "@dxos/log": "0.6.3-main.0308ae2",
61
+ "@dxos/protocols": "0.6.3-main.0308ae2",
62
+ "@dxos/random-access-storage": "0.6.3-main.0308ae2",
63
+ "@dxos/network-manager": "0.6.3-main.0308ae2",
64
+ "@dxos/rpc": "0.6.3-main.0308ae2",
65
+ "@dxos/teleport-extension-automerge-replicator": "0.6.3-main.0308ae2",
66
+ "@dxos/teleport": "0.6.3-main.0308ae2",
67
+ "@dxos/teleport-extension-gossip": "0.6.3-main.0308ae2",
68
+ "@dxos/teleport-extension-object-sync": "0.6.3-main.0308ae2",
69
+ "@dxos/teleport-extension-replicator": "0.6.3-main.0308ae2",
70
+ "@dxos/timeframe": "0.6.3-main.0308ae2",
71
+ "@dxos/typings": "0.6.3-main.0308ae2",
72
+ "@dxos/tracing": "0.6.3-main.0308ae2",
73
+ "@dxos/util": "0.6.3-main.0308ae2"
74
74
  },
75
75
  "devDependencies": {
76
76
  "fast-check": "^3.19.0",
@@ -3,21 +3,22 @@
3
3
  //
4
4
 
5
5
  import expect from 'expect';
6
+ import waitForExpect from 'wait-for-expect';
6
7
 
7
8
  import { getHeads } from '@dxos/automerge/automerge';
9
+ import type { DocumentId, Heads } from '@dxos/automerge/automerge-repo';
8
10
  import { IndexMetadataStore } from '@dxos/indexing';
9
11
  import type { LevelDB } from '@dxos/kv-store';
10
12
  import { createTestLevel } from '@dxos/kv-store/testing';
11
- import { afterTest, describe, test } from '@dxos/test';
13
+ import { afterTest, describe, openAndClose, test } from '@dxos/test';
14
+ import { range } from '@dxos/util';
12
15
 
13
16
  import { AutomergeHost } from './automerge-host';
17
+ import { TestReplicationNetwork } from '../testing';
14
18
 
15
19
  describe('AutomergeHost', () => {
16
20
  test('can create documents', async () => {
17
- const level = createTestLevel();
18
- await level.open();
19
- afterTest(() => level.close());
20
-
21
+ const level = await createLevel();
21
22
  const host = await setupAutomergeHost({ level });
22
23
  const handle = host.repo.create();
23
24
  handle.change((doc: any) => {
@@ -28,9 +29,7 @@ describe('AutomergeHost', () => {
28
29
  });
29
30
 
30
31
  test('changes are preserved in storage', async () => {
31
- const level = createTestLevel();
32
- await level.open();
33
- afterTest(() => level.close());
32
+ const level = await createLevel();
34
33
 
35
34
  const host = await setupAutomergeHost({ level });
36
35
  const handle = host.repo.create();
@@ -49,24 +48,87 @@ describe('AutomergeHost', () => {
49
48
  await host2.repo.flush();
50
49
  });
51
50
 
52
- test('query document heads', async () => {
53
- const level = createTestLevel();
54
- await level.open();
55
- afterTest(() => level.close());
51
+ test('query single document heads', async () => {
52
+ const level = await createLevel();
56
53
 
57
54
  const host = await setupAutomergeHost({ level });
58
55
  const handle = host.createDoc({ text: 'Hello world' });
59
56
  const expectedHeads = getHeads(handle.docSync());
60
57
  await host.flush();
61
58
 
62
- expect(await host.getHeads(handle.documentId)).toEqual(expectedHeads);
59
+ expect(await host.getHeads([handle.documentId])).toEqual([expectedHeads]);
60
+
61
+ // Simulate a restart.
62
+ {
63
+ const host = await setupAutomergeHost({ level });
64
+ expect(await host.getHeads([handle.documentId])).toEqual([expectedHeads]);
65
+ }
66
+ });
67
+
68
+ test('query multiple document heads', async () => {
69
+ const level = await createLevel();
70
+
71
+ const host = await setupAutomergeHost({ level });
72
+ const handles = range(2, () => host.createDoc({ text: 'Hello world' }));
73
+ const expectedHeads: (Heads | undefined)[] = handles.map((handle) => getHeads(handle.docSync()));
74
+ await host.flush();
75
+
76
+ const ids = handles.map((handle) => handle.documentId);
77
+ ids.splice(1, 0, 'non-existent-id' as DocumentId);
78
+ expectedHeads.splice(1, 0, undefined);
79
+
80
+ expect(await host.getHeads(ids)).toEqual(expectedHeads);
63
81
 
64
82
  // Simulate a restart.
65
83
  {
66
84
  const host = await setupAutomergeHost({ level });
67
- expect(await host.getHeads(handle.documentId)).toEqual(expectedHeads);
85
+ expect(await host.getHeads(ids)).toEqual(expectedHeads);
68
86
  }
69
87
  });
88
+
89
+ test('collection synchronization', async () => {
90
+ const NUM_DOCUMENTS = 10;
91
+
92
+ const level1 = await createLevel();
93
+ const host1 = await setupAutomergeHost({ level: level1 });
94
+
95
+ const level2 = await createLevel();
96
+ const documentIds: DocumentId[] = [];
97
+ {
98
+ const host2 = await setupAutomergeHost({ level: level2 });
99
+ for (const i of range(NUM_DOCUMENTS)) {
100
+ const handle = host2.createDoc({ docIndex: i });
101
+ documentIds.push(handle.documentId);
102
+ }
103
+ await host2.flush();
104
+ await host2.close();
105
+ }
106
+
107
+ const host2 = await setupAutomergeHost({ level: level2 });
108
+
109
+ const collectionId = 'test-collection';
110
+ await host1.updateLocalCollectionState(collectionId, documentIds);
111
+ await host2.updateLocalCollectionState(collectionId, documentIds);
112
+
113
+ await using network = await new TestReplicationNetwork().open();
114
+ await host1.addReplicator(await network.createReplicator());
115
+ await host2.addReplicator(await network.createReplicator());
116
+
117
+ await waitForExpect(async () => {
118
+ for (const documentId of documentIds) {
119
+ expect(await host1.getHeads([documentId])).toEqual(await host2.getHeads([documentId]));
120
+ }
121
+ });
122
+
123
+ await host1.close();
124
+ await host2.close();
125
+ });
126
+
127
+ const createLevel = async () => {
128
+ const level = createTestLevel();
129
+ await openAndClose(level);
130
+ return level;
131
+ };
70
132
  });
71
133
 
72
134
  const setupAutomergeHost = async ({ level }: { level: LevelDB }) => {