@dxos/echo-pipeline 0.4.10-main.c32f430 → 0.4.10-main.c42bfdb

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 (36) hide show
  1. package/dist/lib/browser/{chunk-RTEEJ723.mjs → chunk-RA6MLCZM.mjs} +14 -27
  2. package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +50 -26
  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 +1 -1
  7. package/dist/lib/node/{chunk-7VZVCCNF.cjs → chunk-KGIYLJBT.cjs} +20 -33
  8. package/dist/lib/node/chunk-KGIYLJBT.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +72 -46
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +11 -11
  13. package/dist/types/src/automerge/automerge-doc-loader.d.ts +2 -0
  14. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
  15. package/dist/types/src/automerge/automerge-host.d.ts +2 -1
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/index.d.ts +1 -0
  18. package/dist/types/src/automerge/index.d.ts.map +1 -1
  19. package/dist/types/src/automerge/reference.d.ts +15 -0
  20. package/dist/types/src/automerge/reference.d.ts.map +1 -0
  21. package/dist/types/src/automerge/types.d.ts +2 -2
  22. package/dist/types/src/automerge/types.d.ts.map +1 -1
  23. package/dist/types/src/space/space.d.ts +4 -8
  24. package/dist/types/src/space/space.d.ts.map +1 -1
  25. package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
  26. package/package.json +30 -30
  27. package/src/automerge/automerge-doc-loader.ts +6 -0
  28. package/src/automerge/automerge-host.ts +15 -6
  29. package/src/automerge/index.ts +1 -0
  30. package/src/automerge/reference.ts +31 -0
  31. package/src/automerge/types.ts +2 -2
  32. package/src/db-host/data-service.ts +1 -1
  33. package/src/space/space.test.ts +7 -7
  34. package/src/space/space.ts +6 -21
  35. package/dist/lib/browser/chunk-RTEEJ723.mjs.map +0 -7
  36. package/dist/lib/node/chunk-7VZVCCNF.cjs.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"automerge-doc-loader.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-doc-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAmB,KAAK,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC/G,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpD,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtD,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7E;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,2BAA4B,YAAW,uBAAuB;IAevE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAfxB,OAAO,CAAC,mBAAmB,CAAoC;IAC/D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0C;IACjF;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAqB;IAEjE,SAAgB,sBAAsB,8BAAqC;gBAGxD,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI;IAGjB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjF,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAgBnC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB;IAW9C,qBAAqB,IAAI,SAAS,CAAC,QAAQ,CAAC;IAK5C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC;IAY9D,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM;IAIrE,qBAAqB,IAAI,MAAM,EAAE;IAOxC,OAAO,CAAC,kBAAkB;YAyBZ,cAAc;IAyB5B,OAAO,CAAC,oCAAoC;IAS5C,OAAO,CAAC,cAAc;YAOR,2BAA2B;CA2B1C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE;QACf,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;KAChC,CAAC;CACH"}
1
+ {"version":3,"file":"automerge-doc-loader.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-doc-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAmB,KAAK,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC/G,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpD,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEvC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtD,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7E;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,2BAA4B,YAAW,uBAAuB;IAevE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAfxB,OAAO,CAAC,mBAAmB,CAAoC;IAC/D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0C;IACjF;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAqB;IAEjE,SAAgB,sBAAsB,8BAAqC;gBAGxD,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI;IAG9B,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;IAIzB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjF,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAgBnC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB;IAW9C,qBAAqB,IAAI,SAAS,CAAC,QAAQ,CAAC;IAK5C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC;IAY9D,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM;IAIrE,qBAAqB,IAAI,MAAM,EAAE;IAOxC,OAAO,CAAC,kBAAkB;YAyBZ,cAAc;IAyB5B,OAAO,CAAC,oCAAoC;IAS5C,OAAO,CAAC,cAAc;YAOR,2BAA2B;CA2B1C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE;QACf,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;KAChC,CAAC;CACH"}
@@ -1,7 +1,7 @@
1
1
  import { Repo, type DocumentId } from '@dxos/automerge/automerge-repo';
2
2
  import { type Stream } from '@dxos/codec-protobuf';
3
3
  import { PublicKey } from '@dxos/keys';
4
- import { type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';
4
+ import { type FlushRequest, type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';
5
5
  import { type Directory } from '@dxos/random-access-storage';
6
6
  import { type AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';
7
7
  export type { DocumentId };
@@ -34,6 +34,7 @@ export declare class AutomergeHost {
34
34
  private _automergeDocs;
35
35
  private _automergePeers;
36
36
  close(): Promise<void>;
37
+ flush({ documentIds }: FlushRequest): Promise<void>;
37
38
  syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse>;
38
39
  sendSyncMessage(request: SyncRepoRequest): Promise<void>;
39
40
  getHostInfo(): Promise<HostInfo>;
@@ -1 +1 @@
1
- {"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,IAAI,EAEJ,KAAK,UAAU,EAIhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACrH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AASzF,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,qBACa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IAGnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoE;IAEvG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkB;IAEtC,cAAc,cAAqB;gBAE9B,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,mBAAmB;IAkFxD,IAAI,IAAI,IAAI,IAAI,CAEf;YAEa,WAAW;IAOzB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,eAAe;IAIjB,KAAK;IAUX,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAI5D,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQtC,eAAe,IAAI,mBAAmB;IAItC,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAI1D;AAoBD,eAAO,MAAM,kBAAkB,QAAS,GAAG,KAAG,MAAM,GAAG,IAQtD,CAAC"}
1
+ {"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,IAAI,EAEJ,KAAK,UAAU,EAIhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AASzF,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,qBACa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IAGnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoE;IAEvG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkB;IAEtC,cAAc,cAAqB;gBAE9B,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,mBAAmB;IAmFxD,IAAI,IAAI,IAAI,IAAI,CAEf;YAEa,WAAW;IAOzB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,eAAe;IAIjB,KAAK;IAUL,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAI5D,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQtC,eAAe,IAAI,mBAAmB;IAItC,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAI1D;AAoBD,eAAO,MAAM,kBAAkB,QAAS,GAAG,KAAG,MAAM,GAAG,IAQtD,CAAC"}
@@ -4,4 +4,5 @@ export * from './automerge-doc-loader';
4
4
  export * from './local-host-network-adapter';
5
5
  export * from './mesh-network-adapter';
6
6
  export * from './types';
7
+ export * from './reference';
7
8
  //# 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,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Reference } from '@dxos/echo-db';
2
+ export declare const REFERENCE_TYPE_TAG = "dxos.echo.model.document.Reference";
3
+ /**
4
+ * Reference as it is stored in Automerge document.
5
+ */
6
+ export type EncodedReferenceObject = {
7
+ '@type': typeof REFERENCE_TYPE_TAG;
8
+ itemId: string | null;
9
+ protocol: string | null;
10
+ host: string | null;
11
+ };
12
+ export declare const encodeReference: (reference: Reference) => EncodedReferenceObject;
13
+ export declare const decodeReference: (value: any) => Reference;
14
+ export declare const isEncodedReferenceObject: (value: any) => value is EncodedReferenceObject;
15
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../../src/automerge/reference.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,kBAAkB,CAAC;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,eAAe,cAAe,SAAS,KAAG,sBAMrD,CAAC;AAEH,eAAO,MAAM,eAAe,UAAW,GAAG,cACyC,CAAC;AAEpF,eAAO,MAAM,wBAAwB,UAAW,GAAG,oCACmC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type Reference } from '@dxos/echo-db';
1
+ import { type EncodedReferenceObject } from './reference';
2
2
  export type SpaceState = {
3
3
  rootUrl?: string;
4
4
  };
@@ -62,6 +62,6 @@ export type ObjectSystem = {
62
62
  /**
63
63
  * Object reference ('protobuf' protocol) type.
64
64
  */
65
- type?: Reference;
65
+ type?: EncodedReferenceObject;
66
66
  };
67
67
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/automerge/types.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;KAChC,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/automerge/types.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;KAChC,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,sBAAsB,CAAC;CAC/B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Event } from '@dxos/async';
2
- import { type Context } from '@dxos/context';
2
+ import { Resource, type Context } from '@dxos/context';
3
3
  import { type FeedInfo } from '@dxos/credentials';
4
4
  import { type FeedOptions, type FeedWrapper } from '@dxos/feed-store';
5
5
  import { type PublicKey } from '@dxos/keys';
@@ -28,7 +28,7 @@ export type CreatePipelineParams = {
28
28
  /**
29
29
  * Spaces are globally addressable databases with access control.
30
30
  */
31
- export declare class Space {
31
+ export declare class Space extends Resource {
32
32
  private readonly _addFeedMutex;
33
33
  readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
34
34
  readonly stateUpdate: Event<void>;
@@ -38,7 +38,6 @@ export declare class Space {
38
38
  private readonly _feedProvider;
39
39
  private readonly _controlPipeline;
40
40
  private readonly _snapshotManager;
41
- private _isOpen;
42
41
  private _controlFeed?;
43
42
  private _dataFeed?;
44
43
  constructor(params: SpaceParams);
@@ -59,11 +58,8 @@ export declare class Space {
59
58
  * Use for diagnostics.
60
59
  */
61
60
  getControlFeeds(): FeedInfo[];
62
- /**
63
- * Use for diagnostics.
64
- */
65
- open(ctx: Context): Promise<void>;
66
- close(): Promise<void>;
61
+ protected _open(ctx: Context): Promise<void>;
62
+ protected _close(): Promise<void>;
67
63
  }
68
64
  export {};
69
65
  //# sourceMappingURL=space.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAmC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IAGrB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,CAAC;CAElB,CAAC;AAEF;;GAEG;AAEH,qBAEa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,SAAgB,qBAAqB,sCAA6C;IAClF,SAAgB,WAAW,cAAe;IAC1C,SACgB,QAAQ,EAAE,aAAa,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAC,CAA2B;gBAEjC,MAAM,EAAE,WAAW;IAqC/B,IAEI,GAAG,cAEN;IAED,IAAI,MAAM,YAET;IAED,IAAI,cAAc,IAAI,SAAS,CAE9B;IAED,IAAI,cAAc,0BAEjB;IAED,IAAI,WAAW,0BAEd;IAED,IAAI,UAAU,2CAEb;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,gBAAgB,CAEtC;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAEK,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAO7C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAMhD;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAI7B;;OAEG;IAMG,IAAI,CAAC,GAAG,EAAE,OAAO;IAejB,KAAK;CAaZ"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAmC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAkB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IAGrB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,CAAC;CAElB,CAAC;AAEF;;GAEG;AAEH,qBAEa,KAAM,SAAQ,QAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,SAAgB,qBAAqB,sCAA6C;IAClF,SAAgB,WAAW,cAAe;IAC1C,SACgB,QAAQ,EAAE,aAAa,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAC,CAA2B;gBAEjC,MAAM,EAAE,WAAW;IAsC/B,IAEI,GAAG,cAEN;IAED,IAAI,MAAM,YAET;IAED,IAAI,cAAc,IAAI,SAAS,CAE9B;IAED,IAAI,cAAc,0BAEjB;IAED,IAAI,WAAW,0BAEd;IAED,IAAI,UAAU,2CAEb;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,gBAAgB,CAEtC;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAEK,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAO7C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAMhD;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;cAKJ,KAAK,CAAC,GAAG,EAAE,OAAO;cAWlB,MAAM;CAShC"}
@@ -26,7 +26,7 @@ export declare class TestAgentBuilder {
26
26
  private readonly _storage;
27
27
  private readonly _networkManagerProvider;
28
28
  constructor({ storage, networkManagerProvider }?: TestAgentBuilderOptions);
29
- close(): Promise<void[][]>;
29
+ close(): Promise<Space[][]>;
30
30
  get agents(): TestAgent[];
31
31
  getAgent(deviceKey: PublicKey): TestAgent | undefined;
32
32
  createPeer(): Promise<TestAgent>;
@@ -50,7 +50,7 @@ export declare class TestAgent {
50
50
  private _blobStore?;
51
51
  get blobStore(): BlobStore;
52
52
  constructor(_networkManagerProvider: NetworkManagerProvider, _feedBuilder: TestFeedBuilder, identityKey: PublicKey, deviceKey: PublicKey);
53
- close(): Promise<void[]>;
53
+ close(): Promise<Space[]>;
54
54
  get spaces(): Space[];
55
55
  getSpace(spaceKey: PublicKey): Space | undefined;
56
56
  private _spaceManager?;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.4.10-main.c32f430",
3
+ "version": "0.4.10-main.c42bfdb",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -36,35 +36,35 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "crc-32": "^1.2.2",
39
- "@dxos/async": "0.4.10-main.c32f430",
40
- "@dxos/codec-protobuf": "0.4.10-main.c32f430",
41
- "@dxos/context": "0.4.10-main.c32f430",
42
- "@dxos/automerge": "0.4.10-main.c32f430",
43
- "@dxos/crypto": "0.4.10-main.c32f430",
44
- "@dxos/debug": "0.4.10-main.c32f430",
45
- "@dxos/feed-store": "0.4.10-main.c32f430",
46
- "@dxos/echo-db": "0.4.10-main.c32f430",
47
- "@dxos/hypercore": "0.4.10-main.c32f430",
48
- "@dxos/invariant": "0.4.10-main.c32f430",
49
- "@dxos/credentials": "0.4.10-main.c32f430",
50
- "@dxos/keyring": "0.4.10-main.c32f430",
51
- "@dxos/keys": "0.4.10-main.c32f430",
52
- "@dxos/log": "0.4.10-main.c32f430",
53
- "@dxos/messaging": "0.4.10-main.c32f430",
54
- "@dxos/network-manager": "0.4.10-main.c32f430",
55
- "@dxos/node-std": "0.4.10-main.c32f430",
56
- "@dxos/protocols": "0.4.10-main.c32f430",
57
- "@dxos/random-access-storage": "0.4.10-main.c32f430",
58
- "@dxos/rpc": "0.4.10-main.c32f430",
59
- "@dxos/teleport": "0.4.10-main.c32f430",
60
- "@dxos/teleport-extension-automerge-replicator": "0.4.10-main.c32f430",
61
- "@dxos/teleport-extension-gossip": "0.4.10-main.c32f430",
62
- "@dxos/teleport-extension-replicator": "0.4.10-main.c32f430",
63
- "@dxos/teleport-extension-object-sync": "0.4.10-main.c32f430",
64
- "@dxos/timeframe": "0.4.10-main.c32f430",
65
- "@dxos/tracing": "0.4.10-main.c32f430",
66
- "@dxos/typings": "0.4.10-main.c32f430",
67
- "@dxos/util": "0.4.10-main.c32f430"
39
+ "@dxos/automerge": "0.4.10-main.c42bfdb",
40
+ "@dxos/codec-protobuf": "0.4.10-main.c42bfdb",
41
+ "@dxos/async": "0.4.10-main.c42bfdb",
42
+ "@dxos/crypto": "0.4.10-main.c42bfdb",
43
+ "@dxos/credentials": "0.4.10-main.c42bfdb",
44
+ "@dxos/debug": "0.4.10-main.c42bfdb",
45
+ "@dxos/context": "0.4.10-main.c42bfdb",
46
+ "@dxos/echo-db": "0.4.10-main.c42bfdb",
47
+ "@dxos/invariant": "0.4.10-main.c42bfdb",
48
+ "@dxos/feed-store": "0.4.10-main.c42bfdb",
49
+ "@dxos/hypercore": "0.4.10-main.c42bfdb",
50
+ "@dxos/keys": "0.4.10-main.c42bfdb",
51
+ "@dxos/messaging": "0.4.10-main.c42bfdb",
52
+ "@dxos/keyring": "0.4.10-main.c42bfdb",
53
+ "@dxos/log": "0.4.10-main.c42bfdb",
54
+ "@dxos/network-manager": "0.4.10-main.c42bfdb",
55
+ "@dxos/protocols": "0.4.10-main.c42bfdb",
56
+ "@dxos/node-std": "0.4.10-main.c42bfdb",
57
+ "@dxos/rpc": "0.4.10-main.c42bfdb",
58
+ "@dxos/random-access-storage": "0.4.10-main.c42bfdb",
59
+ "@dxos/teleport": "0.4.10-main.c42bfdb",
60
+ "@dxos/teleport-extension-automerge-replicator": "0.4.10-main.c42bfdb",
61
+ "@dxos/teleport-extension-gossip": "0.4.10-main.c42bfdb",
62
+ "@dxos/teleport-extension-object-sync": "0.4.10-main.c42bfdb",
63
+ "@dxos/teleport-extension-replicator": "0.4.10-main.c42bfdb",
64
+ "@dxos/timeframe": "0.4.10-main.c42bfdb",
65
+ "@dxos/tracing": "0.4.10-main.c42bfdb",
66
+ "@dxos/typings": "0.4.10-main.c42bfdb",
67
+ "@dxos/util": "0.4.10-main.c42bfdb"
68
68
  },
69
69
  "devDependencies": {
70
70
  "fast-check": "^3.15.1",
@@ -17,6 +17,8 @@ type SpaceDocumentLinks = SpaceDoc['links'];
17
17
  export interface AutomergeDocumentLoader {
18
18
  onObjectDocumentLoaded: Event<ObjectDocumentLoaded>;
19
19
 
20
+ getAllHandles(): DocHandle<SpaceDoc>[];
21
+
20
22
  loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void>;
21
23
  loadObjectDocument(objectId: string): void;
22
24
  getSpaceRootDocHandle(): DocHandle<SpaceDoc>;
@@ -52,6 +54,10 @@ export class AutomergeDocumentLoaderImpl implements AutomergeDocumentLoader {
52
54
  private readonly _repo: Repo,
53
55
  ) {}
54
56
 
57
+ getAllHandles(): DocHandle<SpaceDoc>[] {
58
+ return [...new Set(this._objectDocumentHandles.values())];
59
+ }
60
+
55
61
  public async loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void> {
56
62
  if (this._spaceRootDocHandle != null) {
57
63
  return;
@@ -17,7 +17,12 @@ import { Context } from '@dxos/context';
17
17
  import { PublicKey } from '@dxos/keys';
18
18
  import { log } from '@dxos/log';
19
19
  import { idCodec } from '@dxos/protocols';
20
- import { type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';
20
+ import {
21
+ type FlushRequest,
22
+ type HostInfo,
23
+ type SyncRepoRequest,
24
+ type SyncRepoResponse,
25
+ } from '@dxos/protocols/proto/dxos/echo/service';
21
26
  import { StorageType, type Directory } from '@dxos/random-access-storage';
22
27
  import { type AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';
23
28
  import { trace } from '@dxos/tracing';
@@ -138,6 +143,7 @@ export class AutomergeHost {
138
143
  this._repo.on('document', listener);
139
144
  this._ctx.onDispose(() => {
140
145
  this._repo.off('document', listener);
146
+ Object.values(this._repo.handles).forEach((handle) => handle.off('change'));
141
147
  });
142
148
  }
143
149
  }
@@ -156,9 +162,6 @@ export class AutomergeHost {
156
162
  private _onDocument(handle: DocHandle<any>) {
157
163
  const listener = (event: DocHandleChangePayload<any>) => this._onUpdate(event);
158
164
  handle.on('change', listener);
159
- this._ctx.onDispose(() => {
160
- handle.off('change', listener);
161
- });
162
165
  }
163
166
 
164
167
  private _onUpdate(event: DocHandleChangePayload<any>) {
@@ -197,8 +200,8 @@ export class AutomergeHost {
197
200
  hasDoc: !!handle.docSync(),
198
201
  heads: handle.docSync() ? automerge.getHeads(handle.docSync()) : null,
199
202
  data:
200
- handle.docSync()?.doc &&
201
- mapValues(handle.docSync()?.doc, (value, key) => {
203
+ handle.docSync() &&
204
+ mapValues(handle.docSync(), (value, key) => {
202
205
  try {
203
206
  switch (key) {
204
207
  case 'access':
@@ -231,6 +234,12 @@ export class AutomergeHost {
231
234
  // Methods for client-services.
232
235
  //
233
236
 
237
+ async flush({ documentIds }: FlushRequest): Promise<void> {
238
+ // Note: Wait for all requested documents to be loaded/synced from thin-client.
239
+ await Promise.all(documentIds?.map((id) => this._repo.find(id as DocumentId).whenReady()) ?? []);
240
+ await this._repo.flush(documentIds as DocumentId[]);
241
+ }
242
+
234
243
  syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse> {
235
244
  return this._clientNetwork.syncRepo(request);
236
245
  }
@@ -8,3 +8,4 @@ export * from './automerge-doc-loader';
8
8
  export * from './local-host-network-adapter';
9
9
  export * from './mesh-network-adapter';
10
10
  export * from './types';
11
+ export * from './reference';
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { Reference } from '@dxos/echo-db';
6
+
7
+ export const REFERENCE_TYPE_TAG = 'dxos.echo.model.document.Reference';
8
+
9
+ /**
10
+ * Reference as it is stored in Automerge document.
11
+ */
12
+ export type EncodedReferenceObject = {
13
+ '@type': typeof REFERENCE_TYPE_TAG;
14
+ itemId: string | null;
15
+ protocol: string | null;
16
+ host: string | null;
17
+ };
18
+
19
+ export const encodeReference = (reference: Reference): EncodedReferenceObject => ({
20
+ '@type': REFERENCE_TYPE_TAG,
21
+ // NOTE: Automerge do not support undefined values, so we need to use null instead.
22
+ itemId: reference.itemId ?? null,
23
+ protocol: reference.protocol ?? null,
24
+ host: reference.host ?? null,
25
+ });
26
+
27
+ export const decodeReference = (value: any) =>
28
+ new Reference(value.itemId, value.protocol ?? undefined, value.host ?? undefined);
29
+
30
+ export const isEncodedReferenceObject = (value: any): value is EncodedReferenceObject =>
31
+ typeof value === 'object' && value !== null && value['@type'] === REFERENCE_TYPE_TAG;
@@ -6,7 +6,7 @@
6
6
  // Copyright 2023 DXOS.org
7
7
  //
8
8
 
9
- import { type Reference } from '@dxos/echo-db';
9
+ import { type EncodedReferenceObject } from './reference';
10
10
 
11
11
  export type SpaceState = {
12
12
  // Url of the root automerge document.
@@ -79,5 +79,5 @@ export type ObjectSystem = {
79
79
  /**
80
80
  * Object reference ('protobuf' protocol) type.
81
81
  */
82
- type?: Reference;
82
+ type?: EncodedReferenceObject;
83
83
  };
@@ -33,7 +33,7 @@ export class DataServiceImpl implements DataService {
33
33
  }
34
34
 
35
35
  async flush(request: FlushRequest): Promise<void> {
36
- // TODO(dmaretskyi): Implement with automerge.
36
+ await this._automergeHost.flush(request);
37
37
  }
38
38
 
39
39
  // Automerge specific.
@@ -20,7 +20,7 @@ describe('space/space', () => {
20
20
  const agent = await builder.createPeer();
21
21
  const space = await agent.createSpace();
22
22
 
23
- await space.open(new Context());
23
+ await space.open(Context.default());
24
24
  expect(space.isOpen).toBeTruthy();
25
25
  afterTest(() => space.close());
26
26
 
@@ -43,7 +43,7 @@ describe('space/space', () => {
43
43
  const agent = await builder.createPeer();
44
44
  const space = await agent.createSpace(agent.identityKey);
45
45
 
46
- await space.open(new Context());
46
+ await space.open(Context.default());
47
47
  expect(space.isOpen).toBeTruthy();
48
48
  afterTest(() => space.close());
49
49
 
@@ -62,7 +62,7 @@ describe('space/space', () => {
62
62
  const agent = await builder.createPeer();
63
63
  const space = await agent.createSpace(agent.identityKey, space1.key, space1.genesisFeedKey, undefined, true);
64
64
 
65
- await space.open(new Context());
65
+ await space.open(Context.default());
66
66
  expect(space.isOpen).toBeTruthy();
67
67
  afterTest(() => space.close());
68
68
 
@@ -114,7 +114,7 @@ describe('space/space', () => {
114
114
  const agent = await builder.createPeer();
115
115
  const space1 = await agent.createSpace();
116
116
 
117
- await space1.open(new Context());
117
+ await space1.open(Context.default());
118
118
  expect(space1.isOpen).toBeTruthy();
119
119
  afterTest(() => space1.close());
120
120
 
@@ -128,7 +128,7 @@ describe('space/space', () => {
128
128
  // Re-open.
129
129
  const space2 = await agent.createSpace(agent.identityKey, space1.key, space1.genesisFeedKey, space1.dataFeedKey);
130
130
 
131
- await space2.open(new Context());
131
+ await space2.open(Context.default());
132
132
  await space2.controlPipeline.state!.waitUntilTimeframe(space2.controlPipeline.state!.endTimeframe);
133
133
  });
134
134
 
@@ -139,7 +139,7 @@ describe('space/space', () => {
139
139
  const space = await agent.createSpace();
140
140
 
141
141
  {
142
- await space.open(new Context());
142
+ await space.open(Context.default());
143
143
  afterTest(() => space.close());
144
144
  expect(space.isOpen).toBeTruthy();
145
145
 
@@ -153,7 +153,7 @@ describe('space/space', () => {
153
153
 
154
154
  // Re-open.
155
155
  {
156
- await space.open(new Context());
156
+ await space.open(Context.default());
157
157
  expect(space.isOpen).toBeTruthy();
158
158
 
159
159
  await space.controlPipeline.state!.waitUntilTimeframe(space.controlPipeline.state!.endTimeframe);
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { Event, Mutex, synchronized, trackLeaks } from '@dxos/async';
6
- import { type Context } from '@dxos/context';
6
+ import { Resource, type Context, LifecycleState } from '@dxos/context';
7
7
  import { type FeedInfo } from '@dxos/credentials';
8
8
  import { type FeedOptions, type FeedWrapper } from '@dxos/feed-store';
9
9
  import { invariant } from '@dxos/invariant';
@@ -48,7 +48,7 @@ export type CreatePipelineParams = {
48
48
  // TODO(dmaretskyi): Extract database stuff.
49
49
  @trackLeaks('open', 'close')
50
50
  @trace.resource()
51
- export class Space {
51
+ export class Space extends Resource {
52
52
  private readonly _addFeedMutex = new Mutex();
53
53
 
54
54
  public readonly onCredentialProcessed = new Callback<AsyncCallback<Credential>>();
@@ -64,11 +64,11 @@ export class Space {
64
64
 
65
65
  private readonly _snapshotManager: SnapshotManager;
66
66
 
67
- private _isOpen = false;
68
67
  private _controlFeed?: FeedWrapper<FeedMessage>;
69
68
  private _dataFeed?: FeedWrapper<FeedMessage>;
70
69
 
71
70
  constructor(params: SpaceParams) {
71
+ super();
72
72
  invariant(params.spaceKey && params.feedProvider);
73
73
  this._key = params.spaceKey;
74
74
  this._genesisFeedKey = params.genesisFeed.key;
@@ -112,7 +112,7 @@ export class Space {
112
112
  }
113
113
 
114
114
  get isOpen() {
115
- return this._isOpen;
115
+ return this._lifecycleState === LifecycleState.OPEN;
116
116
  }
117
117
 
118
118
  get genesisFeedKey(): PublicKey {
@@ -162,40 +162,25 @@ export class Space {
162
162
  return Array.from(this._controlPipeline.spaceState.feeds.values());
163
163
  }
164
164
 
165
- /**
166
- * Use for diagnostics.
167
- */
168
- // getDataFeeds(): FeedInfo[] {
169
- // return this._dataPipeline?.getFeeds();
170
- // }
171
- @synchronized
172
165
  @trace.span()
173
- async open(ctx: Context) {
166
+ protected override async _open(ctx: Context) {
174
167
  log('opening...');
175
- if (this._isOpen) {
176
- return;
177
- }
178
168
 
179
169
  // Order is important.
180
170
  await this._controlPipeline.start();
181
171
  await this.protocol.start();
182
172
 
183
- this._isOpen = true;
184
173
  log('opened');
185
174
  }
186
175
 
187
176
  @synchronized
188
- async close() {
177
+ protected override async _close() {
189
178
  log('closing...', { key: this._key });
190
- if (!this._isOpen) {
191
- return;
192
- }
193
179
 
194
180
  // Closes in reverse order to open.
195
181
  await this.protocol.stop();
196
182
  await this._controlPipeline.stop();
197
183
 
198
- this._isOpen = false;
199
184
  log('closed');
200
185
  }
201
186
  }