@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.
- package/dist/lib/browser/{chunk-RTEEJ723.mjs → chunk-RA6MLCZM.mjs} +14 -27
- package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +50 -26
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-7VZVCCNF.cjs → chunk-KGIYLJBT.cjs} +20 -33
- package/dist/lib/node/chunk-KGIYLJBT.cjs.map +7 -0
- package/dist/lib/node/index.cjs +72 -46
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +11 -11
- package/dist/types/src/automerge/automerge-doc-loader.d.ts +2 -0
- package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
- package/dist/types/src/automerge/automerge-host.d.ts +2 -1
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/index.d.ts +1 -0
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/reference.d.ts +15 -0
- package/dist/types/src/automerge/reference.d.ts.map +1 -0
- package/dist/types/src/automerge/types.d.ts +2 -2
- package/dist/types/src/automerge/types.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +4 -8
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
- package/package.json +30 -30
- package/src/automerge/automerge-doc-loader.ts +6 -0
- package/src/automerge/automerge-host.ts +15 -6
- package/src/automerge/index.ts +1 -0
- package/src/automerge/reference.ts +31 -0
- package/src/automerge/types.ts +2 -2
- package/src/db-host/data-service.ts +1 -1
- package/src/space/space.test.ts +7 -7
- package/src/space/space.ts +6 -21
- package/dist/lib/browser/chunk-RTEEJ723.mjs.map +0 -7
- 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;
|
|
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,
|
|
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"}
|
|
@@ -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
|
|
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?:
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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<
|
|
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<
|
|
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.
|
|
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/
|
|
40
|
-
"@dxos/codec-protobuf": "0.4.10-main.
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/debug": "0.4.10-main.
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/echo-db": "0.4.10-main.
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/network-manager": "0.4.10-main.
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/
|
|
58
|
-
"@dxos/
|
|
59
|
-
"@dxos/teleport": "0.4.10-main.
|
|
60
|
-
"@dxos/teleport-extension-automerge-replicator": "0.4.10-main.
|
|
61
|
-
"@dxos/teleport-extension-gossip": "0.4.10-main.
|
|
62
|
-
"@dxos/teleport-extension-
|
|
63
|
-
"@dxos/teleport-extension-
|
|
64
|
-
"@dxos/timeframe": "0.4.10-main.
|
|
65
|
-
"@dxos/tracing": "0.4.10-main.
|
|
66
|
-
"@dxos/typings": "0.4.10-main.
|
|
67
|
-
"@dxos/util": "0.4.10-main.
|
|
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 {
|
|
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()
|
|
201
|
-
mapValues(handle.docSync()
|
|
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
|
}
|
package/src/automerge/index.ts
CHANGED
|
@@ -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;
|
package/src/automerge/types.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// Copyright 2023 DXOS.org
|
|
7
7
|
//
|
|
8
8
|
|
|
9
|
-
import { type
|
|
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?:
|
|
82
|
+
type?: EncodedReferenceObject;
|
|
83
83
|
};
|
package/src/space/space.test.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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);
|
package/src/space/space.ts
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
}
|