@dxos/echo-pipeline 0.1.52 → 0.1.53-main.00be1a9
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-AXGWKSM3.mjs → chunk-SCMKAWNW.mjs} +386 -366
- package/dist/lib/browser/chunk-SCMKAWNW.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +2 -2
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +2 -2
- package/dist/lib/browser/testing/index.mjs.map +1 -1
- package/dist/lib/node/index.cjs +452 -432
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +436 -416
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/dbhost/snapshot-store.d.ts +3 -0
- package/dist/types/src/dbhost/snapshot-store.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/message-selector.d.ts.map +1 -1
- package/dist/types/src/space/data-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +3 -0
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/package.json +31 -32
- package/src/common/feeds.ts +3 -3
- package/src/dbhost/data-service-host.ts +3 -3
- package/src/dbhost/data-service.ts +4 -4
- package/src/dbhost/snapshot-store.ts +3 -0
- package/src/metadata/metadata-store.ts +6 -5
- package/src/pipeline/message-selector.ts +3 -5
- package/src/pipeline/pipeline.ts +11 -11
- package/src/space/auth.ts +3 -3
- package/src/space/data-pipeline.ts +11 -10
- package/src/space/space-protocol.browser.test.ts +2 -2
- package/src/space/space-protocol.test.ts +2 -2
- package/src/space/space-protocol.ts +10 -4
- package/src/space/space.ts +5 -5
- package/dist/lib/browser/chunk-AXGWKSM3.mjs.map +0 -7
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { StoredSnapshotInfo } from '@dxos/protocols/proto/dxos/devtools/host';
|
|
2
2
|
import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
|
|
3
3
|
import { Directory } from '@dxos/random-access-storage';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
4
7
|
export declare class SnapshotStore {
|
|
5
8
|
private readonly _directory;
|
|
6
9
|
constructor(_directory: Directory);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-store.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/snapshot-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,qBAAa,aAAa;IAGtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS;IAGlC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAetD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAe7D,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAarD"}
|
|
1
|
+
{"version":3,"file":"snapshot-store.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/snapshot-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD;;GAEG;AACH,qBAAa,aAAa;IAGtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS;IAGlC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAetD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAe7D,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAarD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACnH,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACnH,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,SAAS,CAAC;CACxB;AASD,qBAAa,aAAa;IAMtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,SAAS,CAAqC;IACtD,SAAgB,MAAM,sBAA6B;gBAIhC,UAAU,EAAE,SAAS;IAGxC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,EAAE,CAE5B;IAED;;OAEG;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCb,KAAK;IA8BnB,SAAS,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa;IAW7C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,iBAAiB,IAAI,cAAc,GAAG,SAAS;IAIzC,iBAAiB,CAAC,MAAM,EAAE,cAAc;IAOxC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAU9B,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAKrE,8BAA8B,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAKxE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAK/C,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CAMjG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-selector.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/message-selector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"message-selector.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/message-selector.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,mBAAoB,cAAc,KAAG,kBAAkB,WAAW,CAiBnG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAA0C,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAA2B,WAAW,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;OAEG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC;AAiBF;;;;GAIG;AACH,qBACa,YAAY;IAWX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAVpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,qBAAqB,CAAK;gBAEL,OAAO,EAAE,kBAAkB;IAEjD,WAAW,EAAG,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAEnC;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhD;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhD,OAAO,CAAC,mBAAmB,CAAM;IAC1B,UAAU,oBAA2B;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAU;IAE5B,IAAI,MAAM,YAET;IAED,IAAI,QAAQ,yBAEX;IAED,IAAI,aAAa,6DAEhB;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAKvC,yBAAyB,IAAI,mBAAmB;IAiB1C,IAAI;IAsCJ,KAAK;YAwBG,gBAAgB;IA6C9B,OAAO,CAAC,eAAe;YAST,oBAAoB;YAMpB,UAAU;
|
|
1
|
+
{"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAA0C,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAA2B,WAAW,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;OAEG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC;AAiBF;;;;GAIG;AACH,qBACa,YAAY;IAWX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAVpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,qBAAqB,CAAK;gBAEL,OAAO,EAAE,kBAAkB;IAEjD,WAAW,EAAG,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAEnC;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhD;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhD,OAAO,CAAC,mBAAmB,CAAM;IAC1B,UAAU,oBAA2B;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAU;IAE5B,IAAI,MAAM,YAET;IAED,IAAI,QAAQ,yBAEX;IAED,IAAI,aAAa,6DAEhB;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAKvC,yBAAyB,IAAI,mBAAmB;IAiB1C,IAAI;IAsCJ,KAAK;YAwBG,gBAAgB;IA6C9B,OAAO,CAAC,eAAe;YAST,oBAAoB;YAMpB,UAAU;YAsBV,wBAAwB;YAiBxB,2BAA2B;YA6B3B,aAAa;IAoBrB,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAqB7B,sBAAsB;CAG7B"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { Event } from '@dxos/async';
|
|
2
3
|
import { FeedWrapper } from '@dxos/feed-store';
|
|
3
4
|
import { PublicKey } from '@dxos/keys';
|
|
4
5
|
import { NetworkManager, WireProtocol, WireProtocolParams } from '@dxos/network-manager';
|
|
6
|
+
import { ConnectionInfo } from '@dxos/protocols/proto/dxos/devtools/swarm';
|
|
5
7
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
6
8
|
import { Teleport } from '@dxos/teleport';
|
|
7
9
|
import { BlobStore, BlobSync } from '@dxos/teleport-extension-object-sync';
|
|
@@ -77,6 +79,7 @@ export declare class SpaceProtocolSession implements WireProtocol {
|
|
|
77
79
|
readonly replicator: ReplicatorExtension;
|
|
78
80
|
private _authStatus;
|
|
79
81
|
get authStatus(): AuthStatus;
|
|
82
|
+
get stats(): Event<ConnectionInfo.StreamStats[]>;
|
|
80
83
|
constructor({ wireParams, swarmIdentity, onSessionAuth, onAuthFailure, blobSync }: SpaceProtocolSessionParams);
|
|
81
84
|
get stream(): import("stream").Duplex;
|
|
82
85
|
initialize(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-protocol.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"space-protocol.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAEL,cAAc,EAEd,YAAY,EACZ,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAiB,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEnE,eAAO,MAAM,kBAAkB,EAAE,YAA+D,CAAC;AACjG,eAAO,MAAM,kBAAkB,EAAE,YAAwE,CAAC;AAG1G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,SAAS,CAAC;IACnB,kBAAkB,EAAE,YAAY,CAAC;IACjC,uBAAuB,EAAE,YAAY,CAAC;CACvC;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAE/B,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAE9D,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAGnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmE;IAE7F,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,IAAI,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAE3D;IAED,IAAI,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAEjD;IAGD,OAAO,KAAK,WAAW,GAEtB;gBAEW,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,oBAAoB;IAWnH,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAShC,KAAK;IA6BL,IAAI;IAUV,OAAO,CAAC,uBAAuB;CAkBhC;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAE7B,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAE5C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAGD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IAEvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAGrC,SAAgB,UAAU,sBAA0D;IAEpF,OAAO,CAAC,WAAW,CAAsB;IAEzC,IACI,UAAU,eAEb;IAED,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAE/C;gBAGW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,0BAA0B;IAU7G,IAAI,MAAM,4BAET;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.53-main.00be1a9",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -20,43 +20,42 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"crc-32": "^1.2.2",
|
|
23
|
-
"
|
|
24
|
-
"@dxos/async": "0.1.
|
|
25
|
-
"@dxos/codec-protobuf": "0.1.
|
|
26
|
-
"@dxos/context": "0.1.
|
|
27
|
-
"@dxos/credentials": "0.1.
|
|
28
|
-
"@dxos/crypto": "0.1.
|
|
29
|
-
"@dxos/debug": "0.1.
|
|
30
|
-
"@dxos/document-model": "0.1.
|
|
31
|
-
"@dxos/echo-db": "0.1.
|
|
32
|
-
"@dxos/errors": "0.1.
|
|
33
|
-
"@dxos/feed-store": "0.1.
|
|
34
|
-
"@dxos/hypercore": "0.1.
|
|
35
|
-
"@dxos/keyring": "0.1.
|
|
36
|
-
"@dxos/keys": "0.1.
|
|
37
|
-
"@dxos/log": "0.1.
|
|
38
|
-
"@dxos/messaging": "0.1.
|
|
39
|
-
"@dxos/model-factory": "0.1.
|
|
40
|
-
"@dxos/network-manager": "0.1.
|
|
41
|
-
"@dxos/node-std": "0.1.
|
|
42
|
-
"@dxos/protocols": "0.1.
|
|
43
|
-
"@dxos/random-access-storage": "0.1.
|
|
44
|
-
"@dxos/rpc": "0.1.
|
|
45
|
-
"@dxos/teleport": "0.1.
|
|
46
|
-
"@dxos/teleport-extension-gossip": "0.1.
|
|
47
|
-
"@dxos/teleport-extension-object-sync": "0.1.
|
|
48
|
-
"@dxos/teleport-extension-replicator": "0.1.
|
|
49
|
-
"@dxos/timeframe": "0.1.
|
|
50
|
-
"@dxos/typings": "0.1.
|
|
51
|
-
"@dxos/util": "0.1.
|
|
23
|
+
"tiny-invariant": "^1.3.1",
|
|
24
|
+
"@dxos/async": "0.1.53-main.00be1a9",
|
|
25
|
+
"@dxos/codec-protobuf": "0.1.53-main.00be1a9",
|
|
26
|
+
"@dxos/context": "0.1.53-main.00be1a9",
|
|
27
|
+
"@dxos/credentials": "0.1.53-main.00be1a9",
|
|
28
|
+
"@dxos/crypto": "0.1.53-main.00be1a9",
|
|
29
|
+
"@dxos/debug": "0.1.53-main.00be1a9",
|
|
30
|
+
"@dxos/document-model": "0.1.53-main.00be1a9",
|
|
31
|
+
"@dxos/echo-db": "0.1.53-main.00be1a9",
|
|
32
|
+
"@dxos/errors": "0.1.53-main.00be1a9",
|
|
33
|
+
"@dxos/feed-store": "0.1.53-main.00be1a9",
|
|
34
|
+
"@dxos/hypercore": "0.1.53-main.00be1a9",
|
|
35
|
+
"@dxos/keyring": "0.1.53-main.00be1a9",
|
|
36
|
+
"@dxos/keys": "0.1.53-main.00be1a9",
|
|
37
|
+
"@dxos/log": "0.1.53-main.00be1a9",
|
|
38
|
+
"@dxos/messaging": "0.1.53-main.00be1a9",
|
|
39
|
+
"@dxos/model-factory": "0.1.53-main.00be1a9",
|
|
40
|
+
"@dxos/network-manager": "0.1.53-main.00be1a9",
|
|
41
|
+
"@dxos/node-std": "0.1.53-main.00be1a9",
|
|
42
|
+
"@dxos/protocols": "0.1.53-main.00be1a9",
|
|
43
|
+
"@dxos/random-access-storage": "0.1.53-main.00be1a9",
|
|
44
|
+
"@dxos/rpc": "0.1.53-main.00be1a9",
|
|
45
|
+
"@dxos/teleport": "0.1.53-main.00be1a9",
|
|
46
|
+
"@dxos/teleport-extension-gossip": "0.1.53-main.00be1a9",
|
|
47
|
+
"@dxos/teleport-extension-object-sync": "0.1.53-main.00be1a9",
|
|
48
|
+
"@dxos/teleport-extension-replicator": "0.1.53-main.00be1a9",
|
|
49
|
+
"@dxos/timeframe": "0.1.53-main.00be1a9",
|
|
50
|
+
"@dxos/typings": "0.1.53-main.00be1a9",
|
|
51
|
+
"@dxos/util": "0.1.53-main.00be1a9"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/debug": "^4.1.7",
|
|
55
54
|
"fast-check": "~3.3.0",
|
|
56
55
|
"hypercore-protocol": "^8.0.7",
|
|
57
56
|
"source-map-support": "^0.5.12",
|
|
58
57
|
"wait-for-expect": "^3.0.2",
|
|
59
|
-
"@dxos/text-model": "0.1.
|
|
58
|
+
"@dxos/text-model": "0.1.53-main.00be1a9"
|
|
60
59
|
},
|
|
61
60
|
"publishConfig": {
|
|
62
61
|
"access": "public"
|
package/src/common/feeds.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { FeedWriter } from '@dxos/feed-store';
|
|
8
8
|
import { MaybePromise } from '@dxos/util';
|
|
@@ -14,8 +14,8 @@ export const createMappedFeedWriter = <Source extends {}, Target extends {}>(
|
|
|
14
14
|
mapper: (arg: Source) => MaybePromise<Target>,
|
|
15
15
|
writer: FeedWriter<Target>,
|
|
16
16
|
): FeedWriter<Source> => {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
invariant(mapper);
|
|
18
|
+
invariant(writer);
|
|
19
19
|
|
|
20
20
|
return {
|
|
21
21
|
write: async (data: Source, options) => await writer.write(await mapper(data), options),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2021 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { Stream } from '@dxos/codec-protobuf';
|
|
8
8
|
import { tagMutationsInBatch, ItemDemuxer, ItemManager, setMetadataOnObject } from '@dxos/echo-db';
|
|
@@ -47,7 +47,7 @@ export class DataServiceHost {
|
|
|
47
47
|
|
|
48
48
|
this._itemDemuxer.mutation.on(ctx, (message) => {
|
|
49
49
|
const { batch, meta } = message;
|
|
50
|
-
|
|
50
|
+
invariant(!(meta as any).clientTag, 'Unexpected client tag in mutation message');
|
|
51
51
|
log('message', { batch, meta });
|
|
52
52
|
|
|
53
53
|
const clientTag = this._clientTagMap.get([message.meta.feedKey, message.meta.seq]);
|
|
@@ -74,7 +74,7 @@ export class DataServiceHost {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
async write(request: WriteRequest): Promise<MutationReceipt> {
|
|
77
|
-
|
|
77
|
+
invariant(this._writeStream, 'Cannot write mutations in readonly mode');
|
|
78
78
|
|
|
79
79
|
log('write', { clientTag: request.clientTag, objectCount: request.batch.objects?.length ?? 0 });
|
|
80
80
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2021 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { Stream } from '@dxos/codec-protobuf';
|
|
8
8
|
import { raise } from '@dxos/debug';
|
|
@@ -50,15 +50,15 @@ export class DataServiceImpl implements DataService {
|
|
|
50
50
|
constructor(private readonly _subscriptions: DataServiceSubscriptions) {}
|
|
51
51
|
|
|
52
52
|
subscribe(request: SubscribeRequest): Stream<EchoEvent> {
|
|
53
|
-
|
|
53
|
+
invariant(request.spaceKey);
|
|
54
54
|
const host =
|
|
55
55
|
this._subscriptions.getDataService(request.spaceKey) ?? raise(new Error(`space not found: ${request.spaceKey}`));
|
|
56
56
|
return host.subscribe();
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
write(request: WriteRequest): Promise<MutationReceipt> {
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
invariant(request.spaceKey);
|
|
61
|
+
invariant(request.batch);
|
|
62
62
|
const host =
|
|
63
63
|
this._subscriptions.getDataService(request.spaceKey) ?? raise(new Error(`space not found: ${request.spaceKey}`));
|
|
64
64
|
return host.write(request);
|
|
@@ -8,6 +8,9 @@ import { StoredSnapshotInfo } from '@dxos/protocols/proto/dxos/devtools/host';
|
|
|
8
8
|
import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
|
|
9
9
|
import { Directory } from '@dxos/random-access-storage';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated
|
|
13
|
+
*/
|
|
11
14
|
export class SnapshotStore {
|
|
12
15
|
// prettier-ignore
|
|
13
16
|
constructor(
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import CRC32 from 'crc-32';
|
|
6
|
-
import
|
|
6
|
+
import invariant from 'tiny-invariant';
|
|
7
7
|
|
|
8
8
|
import { synchronized, Event } from '@dxos/async';
|
|
9
9
|
import { DataCorruptionError } from '@dxos/errors';
|
|
@@ -13,6 +13,7 @@ import { STORAGE_VERSION, schema } from '@dxos/protocols';
|
|
|
13
13
|
import { EchoMetadata, SpaceMetadata, IdentityRecord, SpaceCache } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
14
14
|
import { Directory } from '@dxos/random-access-storage';
|
|
15
15
|
import { Timeframe } from '@dxos/timeframe';
|
|
16
|
+
import { arrayToBuffer } from '@dxos/util';
|
|
16
17
|
|
|
17
18
|
export interface AddSpaceOptions {
|
|
18
19
|
key: PublicKey;
|
|
@@ -100,7 +101,7 @@ export class MetadataStore {
|
|
|
100
101
|
const file = this._directory.getOrCreateFile('EchoMetadata');
|
|
101
102
|
|
|
102
103
|
try {
|
|
103
|
-
const encoded =
|
|
104
|
+
const encoded = arrayToBuffer(schema.getCodecForType('dxos.echo.metadata.EchoMetadata').encode(data));
|
|
104
105
|
const checksum = CRC32.buf(encoded);
|
|
105
106
|
|
|
106
107
|
const result = Buffer.alloc(8 + encoded.length);
|
|
@@ -125,7 +126,7 @@ export class MetadataStore {
|
|
|
125
126
|
}
|
|
126
127
|
|
|
127
128
|
const space = this.spaces.find((space) => space.key === spaceKey);
|
|
128
|
-
|
|
129
|
+
invariant(space, 'Space not found');
|
|
129
130
|
return space;
|
|
130
131
|
}
|
|
131
132
|
|
|
@@ -143,14 +144,14 @@ export class MetadataStore {
|
|
|
143
144
|
}
|
|
144
145
|
|
|
145
146
|
async setIdentityRecord(record: IdentityRecord) {
|
|
146
|
-
|
|
147
|
+
invariant(!this._metadata.identity, 'Cannot overwrite existing identity in metadata');
|
|
147
148
|
|
|
148
149
|
this._metadata.identity = record;
|
|
149
150
|
await this._save();
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
async addSpace(record: SpaceMetadata) {
|
|
153
|
-
|
|
154
|
+
invariant(
|
|
154
155
|
!(this._metadata.spaces ?? []).find((space) => space.key === record.key),
|
|
155
156
|
'Cannot overwrite existing space in metadata',
|
|
156
157
|
);
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
// Copyright 2020 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import assert from 'node:assert';
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
7
6
|
|
|
8
7
|
import { FeedBlock, FeedBlockSelector } from '@dxos/feed-store';
|
|
8
|
+
import { log } from '@dxos/log';
|
|
9
9
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
10
10
|
|
|
11
11
|
import { TimeframeClock } from './timeframe-clock';
|
|
12
12
|
|
|
13
|
-
const log = debug('dxos:echo-db:message-selector');
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* The MessageSelector makes sure that we read in a trusted order.
|
|
17
15
|
* The first message we wish to process is the SpaceGenesis, which will admit a Feed.
|
|
@@ -25,7 +23,7 @@ export const createMessageSelector = (timeframeClock: TimeframeClock): FeedBlock
|
|
|
25
23
|
const {
|
|
26
24
|
data: { timeframe },
|
|
27
25
|
} = messages[i];
|
|
28
|
-
|
|
26
|
+
invariant(timeframe);
|
|
29
27
|
|
|
30
28
|
if (!timeframeClock.hasGaps(timeframe)) {
|
|
31
29
|
return i;
|
package/src/pipeline/pipeline.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { Event, sleep, synchronized, Trigger } from '@dxos/async';
|
|
8
8
|
import { Context, rejectOnDispose } from '@dxos/context';
|
|
@@ -224,7 +224,7 @@ export class Pipeline implements PipelineAccessor {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
get writer(): FeedWriter<FeedMessage.Payload> {
|
|
227
|
-
|
|
227
|
+
invariant(this._writer, 'Writer not set.');
|
|
228
228
|
return this._writer;
|
|
229
229
|
}
|
|
230
230
|
|
|
@@ -247,8 +247,8 @@ export class Pipeline implements PipelineAccessor {
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
setWriteFeed(feed: FeedWrapper<FeedMessage>) {
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
invariant(!this._writer, 'Writer already set.');
|
|
251
|
+
invariant(feed.properties.writable, 'Feed must be writable.');
|
|
252
252
|
|
|
253
253
|
this._writer = createMappedFeedWriter<FeedMessage.Payload, FeedMessage>(
|
|
254
254
|
(payload: FeedMessage.Payload) => ({
|
|
@@ -283,7 +283,7 @@ export class Pipeline implements PipelineAccessor {
|
|
|
283
283
|
*/
|
|
284
284
|
@synchronized
|
|
285
285
|
async setCursor(timeframe: Timeframe) {
|
|
286
|
-
|
|
286
|
+
invariant(!this._isStarted || this._isPaused, 'Invalid state.');
|
|
287
287
|
|
|
288
288
|
this._state._startTimeframe = timeframe;
|
|
289
289
|
this._timeframeClock.setTimeframe(timeframe);
|
|
@@ -305,7 +305,7 @@ export class Pipeline implements PipelineAccessor {
|
|
|
305
305
|
*/
|
|
306
306
|
@synchronized
|
|
307
307
|
async pause() {
|
|
308
|
-
|
|
308
|
+
invariant(this._isStarted, 'Pipeline is not open.');
|
|
309
309
|
if (this._isPaused) {
|
|
310
310
|
return;
|
|
311
311
|
}
|
|
@@ -317,8 +317,8 @@ export class Pipeline implements PipelineAccessor {
|
|
|
317
317
|
|
|
318
318
|
@synchronized
|
|
319
319
|
async unpause() {
|
|
320
|
-
|
|
321
|
-
|
|
320
|
+
invariant(this._isStarted, 'Pipeline is not open.');
|
|
321
|
+
invariant(this._isPaused, 'Pipeline is not paused.');
|
|
322
322
|
|
|
323
323
|
this._pauseTrigger.wake();
|
|
324
324
|
this._isPaused = false;
|
|
@@ -329,10 +329,10 @@ export class Pipeline implements PipelineAccessor {
|
|
|
329
329
|
* Updates the timeframe clock after the message has bee processed.
|
|
330
330
|
*/
|
|
331
331
|
async *consume(): AsyncIterable<FeedMessageBlock> {
|
|
332
|
-
|
|
332
|
+
invariant(!this._isOpen, 'Pipeline is already being consumed.');
|
|
333
333
|
this._isOpen = true;
|
|
334
334
|
|
|
335
|
-
|
|
335
|
+
invariant(this._feedSetIterator, 'Iterator not initialized.');
|
|
336
336
|
let lastFeedSetIterator = this._feedSetIterator;
|
|
337
337
|
let iterable = lastFeedSetIterator[Symbol.asyncIterator]();
|
|
338
338
|
|
|
@@ -341,7 +341,7 @@ export class Pipeline implements PipelineAccessor {
|
|
|
341
341
|
|
|
342
342
|
// Iterator might have been changed while we were waiting for the processing to complete.
|
|
343
343
|
if (lastFeedSetIterator !== this._feedSetIterator) {
|
|
344
|
-
|
|
344
|
+
invariant(this._feedSetIterator, 'Iterator not initialized.');
|
|
345
345
|
lastFeedSetIterator = this._feedSetIterator;
|
|
346
346
|
iterable = lastFeedSetIterator[Symbol.asyncIterator]();
|
|
347
347
|
}
|
package/src/space/auth.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2019 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { runInContext, scheduleTask } from '@dxos/async';
|
|
8
8
|
import { Context } from '@dxos/context';
|
|
@@ -67,9 +67,9 @@ export class AuthExtension extends RpcExtension<Services, Services> {
|
|
|
67
67
|
try {
|
|
68
68
|
const challenge = randomBytes(32);
|
|
69
69
|
const { credential } = await this.rpc.AuthService.authenticate({ challenge });
|
|
70
|
-
|
|
70
|
+
invariant(credential?.length > 0, 'invalid credential');
|
|
71
71
|
const success = await this._authParams.verifier(challenge, credential);
|
|
72
|
-
|
|
72
|
+
invariant(success, 'credential not verified');
|
|
73
73
|
runInContext(this._ctx, () => this._authParams.onAuthSuccess());
|
|
74
74
|
} catch (err) {
|
|
75
75
|
log('auth failed', err);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { Event, scheduleTask, synchronized, trackLeaks } from '@dxos/async';
|
|
8
8
|
import { Context } from '@dxos/context';
|
|
@@ -146,8 +146,8 @@ export class DataPipeline {
|
|
|
146
146
|
// Create database backend.
|
|
147
147
|
const feedWriter: FeedWriter<DataMessage> = {
|
|
148
148
|
write: (data, options) => {
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
invariant(this._pipeline, 'Pipeline is not initialized.');
|
|
150
|
+
invariant(this.currentEpoch, 'Epoch is not initialized.');
|
|
151
151
|
return this._pipeline.writer.write({ data }, options);
|
|
152
152
|
},
|
|
153
153
|
};
|
|
@@ -198,7 +198,7 @@ export class DataPipeline {
|
|
|
198
198
|
await waitForOneEpoch;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
invariant(this._pipeline, 'Pipeline is not initialized.');
|
|
202
202
|
for await (const msg of this._pipeline.consume()) {
|
|
203
203
|
const { feedKey, seq, data } = msg;
|
|
204
204
|
log('processing message', { feedKey, seq });
|
|
@@ -237,7 +237,7 @@ export class DataPipeline {
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
private _createSnapshot(): SpaceSnapshot {
|
|
240
|
-
|
|
240
|
+
invariant(this.databaseHost, 'Database backend is not initialized.');
|
|
241
241
|
return {
|
|
242
242
|
spaceKey: this._params.spaceKey.asUint8Array(),
|
|
243
243
|
timeframe: this._pipeline!.state.timeframe,
|
|
@@ -259,6 +259,7 @@ export class DataPipeline {
|
|
|
259
259
|
const propertiesItem = this.itemManager.items.find(
|
|
260
260
|
(item) =>
|
|
261
261
|
item.modelMeta?.type === 'dxos:model/document' &&
|
|
262
|
+
// TODO(burdon): Document?
|
|
262
263
|
(getStateMachineFromItem(item)?.snapshot() as ObjectSnapshot).type === 'dxos.sdk.client.Properties',
|
|
263
264
|
);
|
|
264
265
|
if (propertiesItem) {
|
|
@@ -319,8 +320,8 @@ export class DataPipeline {
|
|
|
319
320
|
|
|
320
321
|
@synchronized
|
|
321
322
|
private async _processEpoch(ctx: Context, epoch: Epoch) {
|
|
322
|
-
|
|
323
|
-
|
|
323
|
+
invariant(this._isOpen, 'Space is closed.');
|
|
324
|
+
invariant(this._pipeline);
|
|
324
325
|
this._lastProcessedEpoch = epoch.number;
|
|
325
326
|
|
|
326
327
|
log('Processing epoch', { epoch });
|
|
@@ -339,14 +340,14 @@ export class DataPipeline {
|
|
|
339
340
|
}
|
|
340
341
|
|
|
341
342
|
async waitUntilTimeframe(timeframe: Timeframe) {
|
|
342
|
-
|
|
343
|
+
invariant(this._pipeline, 'Pipeline is not initialized.');
|
|
343
344
|
await this._pipeline.state.waitUntilTimeframe(timeframe);
|
|
344
345
|
}
|
|
345
346
|
|
|
346
347
|
@synchronized
|
|
347
348
|
async createEpoch(): Promise<Epoch> {
|
|
348
|
-
|
|
349
|
-
|
|
349
|
+
invariant(this._pipeline);
|
|
350
|
+
invariant(this.currentEpoch);
|
|
350
351
|
|
|
351
352
|
await this._pipeline.pause();
|
|
352
353
|
|
|
@@ -43,8 +43,8 @@ describe('space/space-protocol', () => {
|
|
|
43
43
|
afterTest(() => protocol2.stop());
|
|
44
44
|
|
|
45
45
|
await waitForExpect(() => {
|
|
46
|
-
expect(presence1.getPeersOnline().
|
|
47
|
-
expect(presence2.getPeersOnline().
|
|
46
|
+
expect(presence1.getPeersOnline().some(({ identityKey }) => identityKey.equals(peer2.identityKey))).toBeTruthy();
|
|
47
|
+
expect(presence2.getPeersOnline().some(({ identityKey }) => identityKey.equals(peer1.identityKey))).toBeTruthy();
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
50
|
|
|
@@ -39,8 +39,8 @@ describe('space/space-protocol', () => {
|
|
|
39
39
|
afterTest(() => protocol2.stop());
|
|
40
40
|
|
|
41
41
|
await waitForExpect(() => {
|
|
42
|
-
expect(presence1.getPeersOnline().
|
|
43
|
-
expect(presence2.getPeersOnline().
|
|
42
|
+
expect(presence1.getPeersOnline().some(({ identityKey }) => identityKey.equals(peer2.identityKey))).toBeTruthy();
|
|
43
|
+
expect(presence2.getPeersOnline().some(({ identityKey }) => identityKey.equals(peer1.identityKey))).toBeTruthy();
|
|
44
44
|
}, 1_000);
|
|
45
45
|
});
|
|
46
46
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Event } from '@dxos/async';
|
|
6
|
+
import { discoveryKey, subtleCrypto } from '@dxos/crypto';
|
|
6
7
|
import { FeedWrapper } from '@dxos/feed-store';
|
|
7
8
|
import { PublicKey } from '@dxos/keys';
|
|
8
9
|
import { log, logInfo } from '@dxos/log';
|
|
@@ -14,6 +15,7 @@ import {
|
|
|
14
15
|
WireProtocolParams,
|
|
15
16
|
WireProtocolProvider,
|
|
16
17
|
} from '@dxos/network-manager';
|
|
18
|
+
import { ConnectionInfo } from '@dxos/protocols/proto/dxos/devtools/swarm';
|
|
17
19
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
18
20
|
import { Teleport } from '@dxos/teleport';
|
|
19
21
|
import { BlobStore, BlobSync } from '@dxos/teleport-extension-object-sync';
|
|
@@ -59,7 +61,7 @@ export class SpaceProtocol {
|
|
|
59
61
|
public readonly blobSync: BlobSync;
|
|
60
62
|
|
|
61
63
|
@logInfo
|
|
62
|
-
private readonly _topic: PublicKey
|
|
64
|
+
private readonly _topic: Promise<PublicKey>;
|
|
63
65
|
|
|
64
66
|
private readonly _feeds = new Set<FeedWrapper<FeedMessage>>();
|
|
65
67
|
private readonly _sessions = new ComplexMap<PublicKey, SpaceProtocolSession>(PublicKey.hash);
|
|
@@ -86,7 +88,7 @@ export class SpaceProtocol {
|
|
|
86
88
|
this._onAuthFailure = onAuthFailure;
|
|
87
89
|
this.blobSync = new BlobSync({ blobStore });
|
|
88
90
|
|
|
89
|
-
this._topic =
|
|
91
|
+
this._topic = subtleCrypto.digest('SHA-256', topic.asBuffer()).then(discoveryKey).then(PublicKey.from);
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
// TODO(burdon): Create abstraction for Space (e.g., add keys and have provider).
|
|
@@ -120,7 +122,7 @@ export class SpaceProtocol {
|
|
|
120
122
|
this._connection = await this._networkManager.joinSwarm({
|
|
121
123
|
protocolProvider: this._createProtocolProvider(credentials),
|
|
122
124
|
peerId: this._swarmIdentity.peerKey,
|
|
123
|
-
topic: this._topic,
|
|
125
|
+
topic: await this._topic,
|
|
124
126
|
topology: new MMSTTopology(topologyConfig),
|
|
125
127
|
label: `Protocol swarm: ${this._topic}`,
|
|
126
128
|
});
|
|
@@ -204,6 +206,10 @@ export class SpaceProtocolSession implements WireProtocol {
|
|
|
204
206
|
return this._authStatus;
|
|
205
207
|
}
|
|
206
208
|
|
|
209
|
+
get stats(): Event<ConnectionInfo.StreamStats[]> {
|
|
210
|
+
return this._teleport.stats;
|
|
211
|
+
}
|
|
212
|
+
|
|
207
213
|
// TODO(dmaretskyi): Allow to pass in extra extensions.
|
|
208
214
|
constructor({ wireParams, swarmIdentity, onSessionAuth, onAuthFailure, blobSync }: SpaceProtocolSessionParams) {
|
|
209
215
|
this._wireParams = wireParams;
|
package/src/space/space.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import invariant from 'tiny-invariant';
|
|
6
6
|
|
|
7
7
|
import { Event, synchronized, trackLeaks, Lock } from '@dxos/async';
|
|
8
8
|
import { CredentialConsumer, FeedInfo } from '@dxos/credentials';
|
|
@@ -71,7 +71,7 @@ export class Space {
|
|
|
71
71
|
private _dataFeed?: FeedWrapper<FeedMessage>;
|
|
72
72
|
|
|
73
73
|
constructor(params: SpaceParams) {
|
|
74
|
-
|
|
74
|
+
invariant(params.spaceKey && params.feedProvider);
|
|
75
75
|
this._key = params.spaceKey;
|
|
76
76
|
this._genesisFeedKey = params.genesisFeed.key;
|
|
77
77
|
this._feedProvider = params.feedProvider;
|
|
@@ -181,14 +181,14 @@ export class Space {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
setControlFeed(feed: FeedWrapper<FeedMessage>) {
|
|
184
|
-
|
|
184
|
+
invariant(!this._controlFeed, 'Control feed already set.');
|
|
185
185
|
this._controlFeed = feed;
|
|
186
186
|
this._controlPipeline.setWriteFeed(feed);
|
|
187
187
|
return this;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
setDataFeed(feed: FeedWrapper<FeedMessage>) {
|
|
191
|
-
|
|
191
|
+
invariant(!this._dataFeed, 'Data feed already set.');
|
|
192
192
|
this._dataFeed = feed;
|
|
193
193
|
this._dataPipeline.pipeline?.setWriteFeed(feed);
|
|
194
194
|
return this;
|
|
@@ -250,7 +250,7 @@ export class Space {
|
|
|
250
250
|
@synchronized
|
|
251
251
|
async initializeDataPipeline() {
|
|
252
252
|
log('initializeDataPipeline');
|
|
253
|
-
|
|
253
|
+
invariant(this._isOpen, 'Space must be open to initialize data pipeline.');
|
|
254
254
|
await this._dataPipeline.open();
|
|
255
255
|
}
|
|
256
256
|
}
|