@dxos/echo-pipeline 0.1.46 → 0.1.48-next.366bc83
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-YFIFTFHQ.mjs → chunk-JEULF2QN.mjs} +52 -45
- package/dist/lib/browser/chunk-JEULF2QN.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +2 -3
- package/dist/lib/browser/testing/index.mjs.map +2 -2
- package/dist/lib/node/index.cjs +51 -44
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +52 -46
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/dbhost/data-service-host.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +2 -1
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +6 -2
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/testing/database-test-rig.d.ts +2 -1
- package/dist/types/src/testing/database-test-rig.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/package.json +30 -30
- package/src/dbhost/data-service-host.ts +19 -14
- package/src/space/auth.ts +1 -1
- package/src/space/space-manager.ts +9 -1
- package/src/space/space-protocol.ts +12 -4
- package/src/space/space.test.ts +1 -1
- package/src/space/space.ts +1 -1
- package/src/testing/database-test-rig.ts +30 -7
- package/src/testing/test-agent-builder.ts +1 -1
- package/src/tests/database-unit.test.ts +58 -17
- package/dist/lib/browser/chunk-YFIFTFHQ.mjs.map +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-service-host.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/data-service-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAuB,WAAW,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"data-service-host.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/data-service-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAuB,WAAW,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGnG;;;GAGG;AAEH,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;gBAGiB,YAAY,EAAE,WAAW,EACzB,YAAY,EAAE,WAAW,EACzB,YAAY,CAAC,qCAAyB;IAGzD;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;IAwCxB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;CAoB7D"}
|
|
@@ -22,6 +22,7 @@ export type ConstructSpaceParams = {
|
|
|
22
22
|
swarmIdentity: SwarmIdentity;
|
|
23
23
|
memberKey: PublicKey;
|
|
24
24
|
onNetworkConnection: (session: Teleport) => void;
|
|
25
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
25
26
|
};
|
|
26
27
|
/**
|
|
27
28
|
* Manages a collection of ECHO (Data) Spaces.
|
|
@@ -38,6 +39,6 @@ export declare class SpaceManager {
|
|
|
38
39
|
get spaces(): ComplexMap<PublicKey, Space>;
|
|
39
40
|
open(): Promise<void>;
|
|
40
41
|
close(): Promise<void>;
|
|
41
|
-
constructSpace({ metadata, swarmIdentity, onNetworkConnection, memberKey }: ConstructSpaceParams): Promise<Space>;
|
|
42
|
+
constructSpace({ metadata, swarmIdentity, onNetworkConnection, onAuthFailure, memberKey, }: ConstructSpaceParams): Promise<Space>;
|
|
42
43
|
}
|
|
43
44
|
//# sourceMappingURL=space-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-manager.d.ts","sourceRoot":"","sources":["../../../../src/space/space-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAmB,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"space-manager.d.ts","sourceRoot":"","sources":["../../../../src/space/space-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAmB,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,qBACa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,kBAAkB;IAUzG,IAAI,MAAM,iCAET;IAGK,IAAI;IAGJ,KAAK;IAIL,cAAc,CAAC,EACnB,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,SAAS,GACV,EAAE,oBAAoB;CA+BxB"}
|
|
@@ -22,6 +22,7 @@ export type SpaceProtocolOptions = {
|
|
|
22
22
|
* Additional extensions can be added here.
|
|
23
23
|
*/
|
|
24
24
|
onSessionAuth?: (session: Teleport) => void;
|
|
25
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
25
26
|
};
|
|
26
27
|
/**
|
|
27
28
|
* Manages Teleport protocol stream creation and joining swarms with replication and presence extensions.
|
|
@@ -30,6 +31,7 @@ export declare class SpaceProtocol {
|
|
|
30
31
|
private readonly _networkManager;
|
|
31
32
|
private readonly _swarmIdentity;
|
|
32
33
|
private readonly _onSessionAuth?;
|
|
34
|
+
private readonly _onAuthFailure?;
|
|
33
35
|
private readonly _topic;
|
|
34
36
|
private readonly _feeds;
|
|
35
37
|
private readonly _sessions;
|
|
@@ -37,7 +39,7 @@ export declare class SpaceProtocol {
|
|
|
37
39
|
get sessions(): ReadonlyMap<PublicKey, SpaceProtocolSession>;
|
|
38
40
|
get feeds(): ReadonlySet<FeedWrapper<FeedMessage>>;
|
|
39
41
|
private get _ownPeerKey();
|
|
40
|
-
constructor({ topic, swarmIdentity, networkManager, onSessionAuth }: SpaceProtocolOptions);
|
|
42
|
+
constructor({ topic, swarmIdentity, networkManager, onSessionAuth, onAuthFailure }: SpaceProtocolOptions);
|
|
41
43
|
addFeed(feed: FeedWrapper<FeedMessage>): void;
|
|
42
44
|
start(): Promise<void>;
|
|
43
45
|
stop(): Promise<void>;
|
|
@@ -51,6 +53,7 @@ export type SpaceProtocolSessionParams = {
|
|
|
51
53
|
* Additional extensions can be added here.
|
|
52
54
|
*/
|
|
53
55
|
onSessionAuth?: (session: Teleport) => void;
|
|
56
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
54
57
|
};
|
|
55
58
|
export declare enum AuthStatus {
|
|
56
59
|
INITIAL = "INITIAL",
|
|
@@ -63,12 +66,13 @@ export declare enum AuthStatus {
|
|
|
63
66
|
export declare class SpaceProtocolSession implements WireProtocol {
|
|
64
67
|
private readonly _wireParams;
|
|
65
68
|
private readonly _onSessionAuth?;
|
|
69
|
+
private readonly _onAuthFailure?;
|
|
66
70
|
private readonly _swarmIdentity;
|
|
67
71
|
private readonly _teleport;
|
|
68
72
|
readonly replicator: ReplicatorExtension;
|
|
69
73
|
private _authStatus;
|
|
70
74
|
get authStatus(): AuthStatus;
|
|
71
|
-
constructor({ wireParams, swarmIdentity, onSessionAuth }: SpaceProtocolSessionParams);
|
|
75
|
+
constructor({ wireParams, swarmIdentity, onSessionAuth, onAuthFailure }: SpaceProtocolSessionParams);
|
|
72
76
|
get stream(): import("stream").Duplex;
|
|
73
77
|
initialize(): Promise<void>;
|
|
74
78
|
destroy(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-protocol.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.ts"],"names":[],"mappings":";AAKA,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,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,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;IAC/B;;;OAGG;IACH,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;IAG9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,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,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"space-protocol.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.ts"],"names":[],"mappings":";AAKA,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,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,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;IAC/B;;;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;IAG9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,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,EAAE,oBAAoB;IAUxG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAShC,KAAK;IA2BL,IAAI;IAQV,OAAO,CAAC,uBAAuB;CAiBhC;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B;;;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;IAE/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAGrC,SAAgB,UAAU,sBAA0D;IAEpF,OAAO,CAAC,WAAW,CAAsB;IAEzC,IACI,UAAU,eAEb;gBAGW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,0BAA0B;IASnG,IAAI,MAAM,4BAET;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -29,13 +29,14 @@ export declare class DatabaseTestPeer {
|
|
|
29
29
|
timeframe: Timeframe;
|
|
30
30
|
snapshot: SpaceSnapshot | undefined;
|
|
31
31
|
private readonly _onConfirm;
|
|
32
|
+
private readonly _writes;
|
|
32
33
|
constructor(rig: DatabaseTestBuilder);
|
|
33
34
|
open(): Promise<void>;
|
|
34
35
|
/**
|
|
35
36
|
* Confirm mutations written to the local feed.
|
|
36
37
|
* @param seq Sequence number of the mutation to confirm. If not specified, all mutations will be confirmed.
|
|
37
38
|
*/
|
|
38
|
-
confirm(seq?: number): void
|
|
39
|
+
confirm(seq?: number): Promise<void>;
|
|
39
40
|
/**
|
|
40
41
|
* Replicate the database to the specified timeframe.
|
|
41
42
|
* @param to Timeframe to replicate to. If not specified, the database will be replicated to the latest timeframe (based on all other peers).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-test-rig.d.ts","sourceRoot":"","sources":["../../../../src/testing/database-test-rig.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"database-test-rig.d.ts","sourceRoot":"","sources":["../../../../src/testing/database-test-rig.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,qBAAa,mBAAmB;IAC9B,SAAgB,KAAK,0CAA+D;IAE9E,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAM9C;AAQD,qBAAa,gBAAgB;aAiCC,GAAG,EAAE,mBAAmB;IAhCpD,SAAgB,YAAY,eAA4E;IAEjG,KAAK,EAAG,WAAW,CAAC;IACpB,KAAK,EAAG,aAAa,CAAC;IAEtB,IAAI,EAAG,YAAY,CAAC;IACpB,SAAS,EAAG,WAAW,CAAC;IAM/B,SAAgB,GAAG,YAAsB;IAElC,YAAY,EAAE,WAAW,EAAE,CAAM;IAExC;;OAEG;IACI,SAAS,SAAM;IAEtB;;OAEG;IACI,SAAS,YAAmB;IAE5B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAEvB,GAAG,EAAE,mBAAmB;IAE9C,IAAI;IAoCV;;;OAGG;IACG,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM;IAe1B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS;IAUxB;;OAEG;IACG,MAAM;IAOZ;;OAEG;IACH,YAAY,IAAI,aAAa;IAS7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,gBAAgB;CAmCzB"}
|
|
@@ -54,7 +54,7 @@ export declare class TestAgent {
|
|
|
54
54
|
getSpace(spaceKey: PublicKey): Space | undefined;
|
|
55
55
|
private _spaceManager?;
|
|
56
56
|
get spaceManager(): SpaceManager;
|
|
57
|
-
createSpace(identityKey?: PublicKey, spaceKey?: PublicKey, genesisKey?: PublicKey, dataKey?: PublicKey): Promise<Space>;
|
|
57
|
+
createSpace(identityKey?: PublicKey, spaceKey?: PublicKey, genesisKey?: PublicKey, dataKey?: PublicKey, saveMetadata?: boolean): Promise<Space>;
|
|
58
58
|
createSpaceProtocol(topic: PublicKey, gossip?: Gossip): SpaceProtocol;
|
|
59
59
|
createGossip(): Gossip;
|
|
60
60
|
createPresence(gossip?: Gossip): Presence;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-agent-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-agent-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAwD,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,EAAiB,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAA0C,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,4BAA4B,kBACvB,0BAA0B,KAAG,sBAKzC,CAAC;AAEP,eAAO,MAAM,+BAA+B,cAC9B,MAAM,KAAG,sBAKjB,CAAC;AAEP,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyB;gBAErD,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAE,uBAA4B;IAMvE,KAAK;IAIX,IAAI,MAAM,gBAET;IAED,QAAQ,CAAC,SAAS,EAAE,SAAS;IAIvB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;CAYvC;AAED;;GAEG;AACH,qBAAa,SAAS;IAoBlB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY;aACb,WAAW,EAAE,SAAS;aACtB,SAAS,EAAE,SAAS;IAtBtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAE5E,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAElD,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,IAAI,aAAa,kBAEhB;IAED,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,IAAI,aAAa,kBAEhB;IAEM,YAAY,eAAmD;gBAGnD,uBAAuB,EAAE,sBAAsB,EAC/C,YAAY,EAAE,eAAe,EAC9B,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,SAAS;IAOhC,KAAK;IAIX,IAAI,MAAM,YAET;IAED,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAI5B,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,IAAI,YAAY,iBAQf;IAEK,WAAW,CACf,WAAW,GAAE,SAA4B,EACzC,QAAQ,CAAC,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,SAAS,EACtB,OAAO,CAAC,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"test-agent-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-agent-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48-next.366bc83",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -21,34 +21,34 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"crc-32": "^1.2.2",
|
|
23
23
|
"debug": "^4.3.3",
|
|
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.
|
|
24
|
+
"@dxos/async": "0.1.48-next.366bc83",
|
|
25
|
+
"@dxos/codec-protobuf": "0.1.48-next.366bc83",
|
|
26
|
+
"@dxos/context": "0.1.48-next.366bc83",
|
|
27
|
+
"@dxos/credentials": "0.1.48-next.366bc83",
|
|
28
|
+
"@dxos/crypto": "0.1.48-next.366bc83",
|
|
29
|
+
"@dxos/debug": "0.1.48-next.366bc83",
|
|
30
|
+
"@dxos/document-model": "0.1.48-next.366bc83",
|
|
31
|
+
"@dxos/echo-db": "0.1.48-next.366bc83",
|
|
32
|
+
"@dxos/errors": "0.1.48-next.366bc83",
|
|
33
|
+
"@dxos/feed-store": "0.1.48-next.366bc83",
|
|
34
|
+
"@dxos/hypercore": "0.1.48-next.366bc83",
|
|
35
|
+
"@dxos/keyring": "0.1.48-next.366bc83",
|
|
36
|
+
"@dxos/keys": "0.1.48-next.366bc83",
|
|
37
|
+
"@dxos/log": "0.1.48-next.366bc83",
|
|
38
|
+
"@dxos/messaging": "0.1.48-next.366bc83",
|
|
39
|
+
"@dxos/model-factory": "0.1.48-next.366bc83",
|
|
40
|
+
"@dxos/network-manager": "0.1.48-next.366bc83",
|
|
41
|
+
"@dxos/node-std": "0.1.48-next.366bc83",
|
|
42
|
+
"@dxos/protocols": "0.1.48-next.366bc83",
|
|
43
|
+
"@dxos/random-access-storage": "0.1.48-next.366bc83",
|
|
44
|
+
"@dxos/rpc": "0.1.48-next.366bc83",
|
|
45
|
+
"@dxos/teleport": "0.1.48-next.366bc83",
|
|
46
|
+
"@dxos/teleport-extension-gossip": "0.1.48-next.366bc83",
|
|
47
|
+
"@dxos/teleport-extension-object-sync": "0.1.48-next.366bc83",
|
|
48
|
+
"@dxos/teleport-extension-replicator": "0.1.48-next.366bc83",
|
|
49
|
+
"@dxos/timeframe": "0.1.48-next.366bc83",
|
|
50
|
+
"@dxos/typings": "0.1.48-next.366bc83",
|
|
51
|
+
"@dxos/util": "0.1.48-next.366bc83"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/debug": "^4.1.7",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"hypercore-protocol": "^8.0.7",
|
|
57
57
|
"source-map-support": "^0.5.12",
|
|
58
58
|
"wait-for-expect": "^3.0.2",
|
|
59
|
-
"@dxos/text-model": "0.1.
|
|
59
|
+
"@dxos/text-model": "0.1.48-next.366bc83"
|
|
60
60
|
},
|
|
61
61
|
"publishConfig": {
|
|
62
62
|
"access": "public"
|
|
@@ -10,6 +10,7 @@ import { FeedWriter } from '@dxos/feed-store';
|
|
|
10
10
|
import { PublicKey } from '@dxos/keys';
|
|
11
11
|
import { log } from '@dxos/log';
|
|
12
12
|
import { DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
13
|
+
import { EchoObjectBatch } from '@dxos/protocols/proto/dxos/echo/object';
|
|
13
14
|
import { EchoEvent, MutationReceipt, WriteRequest } from '@dxos/protocols/proto/dxos/echo/service';
|
|
14
15
|
import { ComplexMap } from '@dxos/util';
|
|
15
16
|
|
|
@@ -46,6 +47,7 @@ export class DataServiceHost {
|
|
|
46
47
|
|
|
47
48
|
this._itemDemuxer.mutation.on(ctx, (message) => {
|
|
48
49
|
const { batch, meta } = message;
|
|
50
|
+
assert(!(meta as any).clientTag, 'Unexpected client tag in mutation message');
|
|
49
51
|
log('message', { batch, meta });
|
|
50
52
|
|
|
51
53
|
const clientTag = this._clientTagMap.get([message.meta.feedKey, message.meta.seq]);
|
|
@@ -53,12 +55,12 @@ export class DataServiceHost {
|
|
|
53
55
|
|
|
54
56
|
// Assign feed metadata
|
|
55
57
|
batch.objects?.forEach((object) => {
|
|
56
|
-
setMetadataOnObject(object, meta);
|
|
58
|
+
setMetadataOnObject(object, { ...meta });
|
|
57
59
|
});
|
|
58
60
|
|
|
59
61
|
// Assign client tag metadata
|
|
60
62
|
if (clientTag) {
|
|
61
|
-
tagMutationsInBatch(batch, clientTag);
|
|
63
|
+
tagMutationsInBatch(batch, clientTag, 0);
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
next({
|
|
@@ -77,18 +79,8 @@ export class DataServiceHost {
|
|
|
77
79
|
log('write', { clientTag: request.clientTag, objectCount: request.batch.objects?.length ?? 0 });
|
|
78
80
|
|
|
79
81
|
// Clear client metadata.
|
|
80
|
-
const message
|
|
81
|
-
|
|
82
|
-
objects: request.batch.objects?.map((object) => ({
|
|
83
|
-
...object,
|
|
84
|
-
mutations: object.mutations?.map((mutation) => ({
|
|
85
|
-
...mutation,
|
|
86
|
-
meta: undefined,
|
|
87
|
-
})),
|
|
88
|
-
meta: undefined,
|
|
89
|
-
})),
|
|
90
|
-
},
|
|
91
|
-
};
|
|
82
|
+
const message = createDataMessage(request.batch);
|
|
83
|
+
|
|
92
84
|
const receipt = await this._writeStream.write(message, {
|
|
93
85
|
afterWrite: async (receipt) => {
|
|
94
86
|
// Runs before the mutation is read from the pipeline.
|
|
@@ -102,3 +94,16 @@ export class DataServiceHost {
|
|
|
102
94
|
return receipt;
|
|
103
95
|
}
|
|
104
96
|
}
|
|
97
|
+
|
|
98
|
+
const createDataMessage = (batch: EchoObjectBatch) => ({
|
|
99
|
+
batch: {
|
|
100
|
+
objects: batch.objects?.map((object) => ({
|
|
101
|
+
...object,
|
|
102
|
+
mutations: object.mutations?.map((mutation) => ({
|
|
103
|
+
...mutation,
|
|
104
|
+
meta: undefined,
|
|
105
|
+
})),
|
|
106
|
+
meta: undefined,
|
|
107
|
+
})),
|
|
108
|
+
},
|
|
109
|
+
});
|
package/src/space/auth.ts
CHANGED
|
@@ -72,7 +72,7 @@ export class AuthExtension extends RpcExtension<Services, Services> {
|
|
|
72
72
|
assert(success, 'credential not verified');
|
|
73
73
|
runInContext(this._ctx, () => this._authParams.onAuthSuccess());
|
|
74
74
|
} catch (err) {
|
|
75
|
-
log
|
|
75
|
+
log('auth failed', err);
|
|
76
76
|
this.close();
|
|
77
77
|
this._authParams.onAuthFailure();
|
|
78
78
|
}
|
|
@@ -33,6 +33,7 @@ export type ConstructSpaceParams = {
|
|
|
33
33
|
swarmIdentity: SwarmIdentity;
|
|
34
34
|
memberKey: PublicKey;
|
|
35
35
|
onNetworkConnection: (session: Teleport) => void;
|
|
36
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
36
37
|
};
|
|
37
38
|
|
|
38
39
|
/**
|
|
@@ -70,7 +71,13 @@ export class SpaceManager {
|
|
|
70
71
|
await Promise.all([...this._spaces.values()].map((space) => space.close()));
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
async constructSpace({
|
|
74
|
+
async constructSpace({
|
|
75
|
+
metadata,
|
|
76
|
+
swarmIdentity,
|
|
77
|
+
onNetworkConnection,
|
|
78
|
+
onAuthFailure,
|
|
79
|
+
memberKey,
|
|
80
|
+
}: ConstructSpaceParams) {
|
|
74
81
|
log.trace('dxos.echo.space-manager.construct-space', trace.begin({ id: this._instanceId }));
|
|
75
82
|
log('constructing space...', { spaceKey: metadata.genesisFeedKey });
|
|
76
83
|
|
|
@@ -83,6 +90,7 @@ export class SpaceManager {
|
|
|
83
90
|
swarmIdentity,
|
|
84
91
|
networkManager: this._networkManager,
|
|
85
92
|
onSessionAuth: onNetworkConnection,
|
|
93
|
+
onAuthFailure,
|
|
86
94
|
});
|
|
87
95
|
const snapshotManager = new SnapshotManager(this._snapshotStore);
|
|
88
96
|
|
|
@@ -40,6 +40,7 @@ export type SpaceProtocolOptions = {
|
|
|
40
40
|
* Additional extensions can be added here.
|
|
41
41
|
*/
|
|
42
42
|
onSessionAuth?: (session: Teleport) => void;
|
|
43
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
43
44
|
};
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -49,6 +50,7 @@ export class SpaceProtocol {
|
|
|
49
50
|
private readonly _networkManager: NetworkManager;
|
|
50
51
|
private readonly _swarmIdentity: SwarmIdentity;
|
|
51
52
|
private readonly _onSessionAuth?: (session: Teleport) => void;
|
|
53
|
+
private readonly _onAuthFailure?: (session: Teleport) => void;
|
|
52
54
|
|
|
53
55
|
@logInfo
|
|
54
56
|
private readonly _topic: PublicKey;
|
|
@@ -71,10 +73,11 @@ export class SpaceProtocol {
|
|
|
71
73
|
return this._swarmIdentity.peerKey;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
|
-
constructor({ topic, swarmIdentity, networkManager, onSessionAuth }: SpaceProtocolOptions) {
|
|
76
|
+
constructor({ topic, swarmIdentity, networkManager, onSessionAuth, onAuthFailure }: SpaceProtocolOptions) {
|
|
75
77
|
this._networkManager = networkManager;
|
|
76
78
|
this._swarmIdentity = swarmIdentity;
|
|
77
79
|
this._onSessionAuth = onSessionAuth;
|
|
80
|
+
this._onAuthFailure = onAuthFailure;
|
|
78
81
|
|
|
79
82
|
this._topic = PublicKey.from(discoveryKey(sha256(topic.toHex())));
|
|
80
83
|
}
|
|
@@ -130,6 +133,7 @@ export class SpaceProtocol {
|
|
|
130
133
|
wireParams,
|
|
131
134
|
swarmIdentity: this._swarmIdentity,
|
|
132
135
|
onSessionAuth: this._onSessionAuth,
|
|
136
|
+
onAuthFailure: this._onAuthFailure,
|
|
133
137
|
});
|
|
134
138
|
this._sessions.set(wireParams.remotePeerId, session);
|
|
135
139
|
|
|
@@ -150,6 +154,8 @@ export type SpaceProtocolSessionParams = {
|
|
|
150
154
|
* Additional extensions can be added here.
|
|
151
155
|
*/
|
|
152
156
|
onSessionAuth?: (session: Teleport) => void;
|
|
157
|
+
|
|
158
|
+
onAuthFailure?: (session: Teleport) => void;
|
|
153
159
|
};
|
|
154
160
|
|
|
155
161
|
export enum AuthStatus {
|
|
@@ -167,6 +173,7 @@ export class SpaceProtocolSession implements WireProtocol {
|
|
|
167
173
|
private readonly _wireParams: WireProtocolParams;
|
|
168
174
|
|
|
169
175
|
private readonly _onSessionAuth?: (session: Teleport) => void;
|
|
176
|
+
private readonly _onAuthFailure?: (session: Teleport) => void;
|
|
170
177
|
private readonly _swarmIdentity: SwarmIdentity;
|
|
171
178
|
|
|
172
179
|
private readonly _teleport: Teleport;
|
|
@@ -182,10 +189,11 @@ export class SpaceProtocolSession implements WireProtocol {
|
|
|
182
189
|
}
|
|
183
190
|
|
|
184
191
|
// TODO(dmaretskyi): Allow to pass in extra extensions.
|
|
185
|
-
constructor({ wireParams, swarmIdentity, onSessionAuth }: SpaceProtocolSessionParams) {
|
|
192
|
+
constructor({ wireParams, swarmIdentity, onSessionAuth, onAuthFailure }: SpaceProtocolSessionParams) {
|
|
186
193
|
this._wireParams = wireParams;
|
|
187
194
|
this._swarmIdentity = swarmIdentity;
|
|
188
195
|
this._onSessionAuth = onSessionAuth;
|
|
196
|
+
this._onAuthFailure = onAuthFailure;
|
|
189
197
|
|
|
190
198
|
this._teleport = new Teleport(wireParams);
|
|
191
199
|
}
|
|
@@ -202,14 +210,14 @@ export class SpaceProtocolSession implements WireProtocol {
|
|
|
202
210
|
provider: this._swarmIdentity.credentialProvider,
|
|
203
211
|
verifier: this._swarmIdentity.credentialAuthenticator,
|
|
204
212
|
onAuthSuccess: () => {
|
|
205
|
-
this._authStatus = AuthStatus.SUCCESS;
|
|
206
213
|
log('Peer authenticated');
|
|
214
|
+
this._authStatus = AuthStatus.SUCCESS;
|
|
207
215
|
this._onSessionAuth?.(this._teleport);
|
|
208
216
|
// TODO(dmaretskyi): Configure replicator to upload.
|
|
209
217
|
},
|
|
210
218
|
onAuthFailure: () => {
|
|
211
|
-
log.warn('Auth failed');
|
|
212
219
|
this._authStatus = AuthStatus.FAILURE;
|
|
220
|
+
this._onAuthFailure?.(this._teleport);
|
|
213
221
|
},
|
|
214
222
|
}),
|
|
215
223
|
);
|
package/src/space/space.test.ts
CHANGED
|
@@ -70,7 +70,7 @@ describe('space/space', () => {
|
|
|
70
70
|
const [agent2, space2] = await run(async () => {
|
|
71
71
|
// NOTE: The genesisKey would be passed as part of the invitation.
|
|
72
72
|
const agent = await builder.createPeer();
|
|
73
|
-
const space = await agent.createSpace(agent.identityKey, space1.key, space1.genesisFeedKey);
|
|
73
|
+
const space = await agent.createSpace(agent.identityKey, space1.key, space1.genesisFeedKey, undefined, true);
|
|
74
74
|
|
|
75
75
|
await space.open();
|
|
76
76
|
expect(space.isOpen).toBeTruthy();
|
package/src/space/space.ts
CHANGED
|
@@ -242,7 +242,7 @@ export class Space {
|
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
async initializeDataPipeline() {
|
|
245
|
-
log
|
|
245
|
+
log('initializeDataPipeline');
|
|
246
246
|
assert(this._isOpen, 'Space must be open to initialize data pipeline.');
|
|
247
247
|
await this._dataPipeline.open();
|
|
248
248
|
await this._dataPipelineCredentialConsumer!.open();
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Event } from '@dxos/async';
|
|
5
|
+
import { Event, Trigger } from '@dxos/async';
|
|
6
6
|
import { DocumentModel } from '@dxos/document-model';
|
|
7
7
|
import { DatabaseProxy, ItemManager } from '@dxos/echo-db';
|
|
8
|
+
import { WriteOptions, WriteReceipt } from '@dxos/feed-store';
|
|
8
9
|
import { PublicKey } from '@dxos/keys';
|
|
9
10
|
import { ModelFactory } from '@dxos/model-factory';
|
|
10
11
|
import { FeedMessageBlock } from '@dxos/protocols';
|
|
@@ -29,6 +30,12 @@ export class DatabaseTestBuilder {
|
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
type WriteRequest = {
|
|
34
|
+
receipt: WriteReceipt;
|
|
35
|
+
options: WriteOptions;
|
|
36
|
+
trigger: Trigger;
|
|
37
|
+
};
|
|
38
|
+
|
|
32
39
|
export class DatabaseTestPeer {
|
|
33
40
|
public readonly modelFactory = new ModelFactory().registerModel(DocumentModel).registerModel(TextModel);
|
|
34
41
|
|
|
@@ -60,12 +67,14 @@ export class DatabaseTestPeer {
|
|
|
60
67
|
|
|
61
68
|
private readonly _onConfirm = new Event();
|
|
62
69
|
|
|
70
|
+
private readonly _writes = new Set<WriteRequest>();
|
|
71
|
+
|
|
63
72
|
constructor(public readonly rig: DatabaseTestBuilder) {}
|
|
64
73
|
|
|
65
74
|
async open() {
|
|
66
75
|
this.hostItems = new ItemManager(this.modelFactory);
|
|
67
76
|
this.host = new DatabaseHost({
|
|
68
|
-
write: async (message) => {
|
|
77
|
+
write: async (message, { afterWrite }: WriteOptions) => {
|
|
69
78
|
const seq =
|
|
70
79
|
this.feedMessages.push({
|
|
71
80
|
timeframe: this.timeframe,
|
|
@@ -74,11 +83,17 @@ export class DatabaseTestPeer {
|
|
|
74
83
|
},
|
|
75
84
|
}) - 1;
|
|
76
85
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
const request: WriteRequest = {
|
|
87
|
+
receipt: {
|
|
88
|
+
seq,
|
|
89
|
+
feedKey: this.key,
|
|
90
|
+
},
|
|
91
|
+
options: { afterWrite },
|
|
92
|
+
trigger: new Trigger(),
|
|
81
93
|
};
|
|
94
|
+
this._writes.add(request);
|
|
95
|
+
await request.trigger.wait();
|
|
96
|
+
return request.receipt;
|
|
82
97
|
},
|
|
83
98
|
});
|
|
84
99
|
|
|
@@ -96,10 +111,18 @@ export class DatabaseTestPeer {
|
|
|
96
111
|
* Confirm mutations written to the local feed.
|
|
97
112
|
* @param seq Sequence number of the mutation to confirm. If not specified, all mutations will be confirmed.
|
|
98
113
|
*/
|
|
99
|
-
confirm(seq?: number) {
|
|
114
|
+
async confirm(seq?: number) {
|
|
100
115
|
this.confirmed = seq ?? this.feedMessages.length - 1;
|
|
101
116
|
this._onConfirm.emit();
|
|
102
117
|
|
|
118
|
+
for (const request of [...this._writes]) {
|
|
119
|
+
if (this.confirmed >= request.receipt.seq) {
|
|
120
|
+
this._writes.delete(request);
|
|
121
|
+
await request.options.afterWrite?.(request.receipt);
|
|
122
|
+
request.trigger.wake();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
103
126
|
this._processMessages(Timeframe.merge(this.timeframe, new Timeframe([[this.key, this.confirmed]])));
|
|
104
127
|
}
|
|
105
128
|
|
|
@@ -146,8 +146,8 @@ export class TestAgent {
|
|
|
146
146
|
spaceKey?: PublicKey,
|
|
147
147
|
genesisKey?: PublicKey,
|
|
148
148
|
dataKey?: PublicKey,
|
|
149
|
+
saveMetadata = false,
|
|
149
150
|
): Promise<Space> {
|
|
150
|
-
let saveMetadata = false;
|
|
151
151
|
if (!spaceKey) {
|
|
152
152
|
saveMetadata = true;
|
|
153
153
|
spaceKey = await this.keyring.createKey();
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import expect from 'expect';
|
|
6
6
|
|
|
7
|
-
import { DocumentModel, MutationBuilder } from '@dxos/document-model';
|
|
8
|
-
import { createModelMutation, encodeModelMutation, genesisMutation } from '@dxos/echo-db';
|
|
7
|
+
import { DocumentModel, MutationBuilder, OrderedArray } from '@dxos/document-model';
|
|
8
|
+
import { Item, createModelMutation, encodeModelMutation, genesisMutation } from '@dxos/echo-db';
|
|
9
9
|
import { PublicKey } from '@dxos/keys';
|
|
10
10
|
import { describe, test } from '@dxos/test';
|
|
11
11
|
import { Timeframe } from '@dxos/timeframe';
|
|
@@ -23,7 +23,7 @@ describe('database (unit)', () => {
|
|
|
23
23
|
createModelMutation(id, encodeModelMutation(DocumentModel.meta, new MutationBuilder().set('test', 42).build())),
|
|
24
24
|
);
|
|
25
25
|
|
|
26
|
-
peer.confirm();
|
|
26
|
+
await peer.confirm();
|
|
27
27
|
expect(peer.confirmed).toEqual(1);
|
|
28
28
|
expect(peer.timeframe).toEqual(new Timeframe([[peer.key, 1]]));
|
|
29
29
|
|
|
@@ -47,7 +47,7 @@ describe('database (unit)', () => {
|
|
|
47
47
|
createModelMutation(id, encodeModelMutation(DocumentModel.meta, new MutationBuilder().set('test', 42).build())),
|
|
48
48
|
);
|
|
49
49
|
|
|
50
|
-
peer.confirm();
|
|
50
|
+
await peer.confirm();
|
|
51
51
|
expect(peer.confirmed).toEqual(1);
|
|
52
52
|
expect(peer.timeframe).toEqual(new Timeframe([[peer.key, 1]]));
|
|
53
53
|
peer.makeSnapshot();
|
|
@@ -72,7 +72,7 @@ describe('database (unit)', () => {
|
|
|
72
72
|
peer1.proxy.mutate(
|
|
73
73
|
createModelMutation(id, encodeModelMutation(DocumentModel.meta, new MutationBuilder().set('test', 42).build())),
|
|
74
74
|
);
|
|
75
|
-
peer1.confirm();
|
|
75
|
+
await peer1.confirm();
|
|
76
76
|
|
|
77
77
|
peer2.replicate(peer1.timeframe);
|
|
78
78
|
|
|
@@ -92,29 +92,70 @@ describe('database (unit)', () => {
|
|
|
92
92
|
createModelMutation(id, encodeModelMutation(DocumentModel.meta, new MutationBuilder().set('test', 42).build())),
|
|
93
93
|
);
|
|
94
94
|
|
|
95
|
-
peer1.confirm();
|
|
95
|
+
await peer1.confirm();
|
|
96
96
|
peer2.replicate(peer1.timeframe);
|
|
97
97
|
|
|
98
98
|
expect(peer2.items.getItem(id)).toBeUndefined();
|
|
99
99
|
|
|
100
100
|
peer1.proxy.commitBatch();
|
|
101
|
-
peer1.confirm();
|
|
101
|
+
await peer1.confirm();
|
|
102
102
|
peer2.replicate(peer1.timeframe);
|
|
103
103
|
|
|
104
104
|
// TODO(dmaretskyi): Helper functions to compare state.
|
|
105
105
|
expect(peer1.items.getItem(id)!.state).toEqual(peer1.items.getItem(id)!.state);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
test('flush', async () => {
|
|
109
|
+
const builder = new DatabaseTestBuilder();
|
|
110
|
+
const peer = await builder.createPeer();
|
|
111
|
+
|
|
112
|
+
const id = PublicKey.random().toHex();
|
|
113
|
+
peer.proxy.mutate(genesisMutation(id, DocumentModel.meta.type));
|
|
114
|
+
await peer.confirm();
|
|
115
|
+
await peer.proxy.flush();
|
|
116
|
+
}).timeout(100);
|
|
113
117
|
|
|
118
|
+
describe('DocumentModel', () => {
|
|
119
|
+
test('array assign and push', async () => {
|
|
120
|
+
const builder = new DatabaseTestBuilder();
|
|
121
|
+
const peer1 = await builder.createPeer();
|
|
114
122
|
const id = PublicKey.random().toHex();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
const { objectsUpdated } = peer1.proxy.mutate(genesisMutation(id, DocumentModel.meta.type));
|
|
124
|
+
const item = objectsUpdated[0] as Item<DocumentModel>;
|
|
125
|
+
const model = new DocumentModel(DocumentModel.meta, item.id, () => item.state);
|
|
126
|
+
|
|
127
|
+
peer1.proxy.mutate(
|
|
128
|
+
createModelMutation(
|
|
129
|
+
id,
|
|
130
|
+
encodeModelMutation(
|
|
131
|
+
DocumentModel.meta,
|
|
132
|
+
model
|
|
133
|
+
.builder()
|
|
134
|
+
.set('tags', OrderedArray.fromValues(['red']))
|
|
135
|
+
.build(),
|
|
136
|
+
),
|
|
137
|
+
),
|
|
138
|
+
);
|
|
139
|
+
await peer1.confirm();
|
|
140
|
+
expect(model.get('tags').toArray()).toHaveLength(1);
|
|
141
|
+
|
|
142
|
+
peer1.proxy.mutate(
|
|
143
|
+
createModelMutation(
|
|
144
|
+
id,
|
|
145
|
+
encodeModelMutation(DocumentModel.meta, model.builder().set('tags', OrderedArray.fromValues([])).build()),
|
|
146
|
+
),
|
|
147
|
+
);
|
|
148
|
+
await peer1.confirm();
|
|
149
|
+
expect(model.get('tags').toArray()).toHaveLength(0);
|
|
150
|
+
|
|
151
|
+
peer1.proxy.mutate(
|
|
152
|
+
createModelMutation(
|
|
153
|
+
id,
|
|
154
|
+
encodeModelMutation(DocumentModel.meta, model.builder().arrayPush('tags', ['green']).build()),
|
|
155
|
+
),
|
|
156
|
+
);
|
|
157
|
+
await peer1.confirm();
|
|
158
|
+
expect(model.get('tags').toArray()).toHaveLength(1);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
120
161
|
});
|