@dxos/echo-pipeline 0.1.50 → 0.1.51-main.04cd027
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-CSFWTLPD.mjs → chunk-KTQITKUX.mjs} +191 -60
- package/dist/lib/browser/chunk-KTQITKUX.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 +4 -3
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +197 -66
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +207 -75
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/dbhost/snapshot-manager.d.ts +2 -1
- package/dist/types/src/dbhost/snapshot-manager.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +2 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts +1 -0
- package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/types/src/space/control-pipeline.d.ts +9 -1
- package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/data-pipeline.d.ts +10 -0
- package/dist/types/src/space/data-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +2 -2
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/package.json +30 -30
- package/src/dbhost/snapshot-manager.ts +4 -3
- package/src/metadata/metadata-store.ts +12 -1
- package/src/pipeline/pipeline.ts +24 -0
- package/src/space/control-pipeline.test.ts +4 -0
- package/src/space/control-pipeline.ts +36 -1
- package/src/space/data-pipeline.ts +62 -8
- package/src/space/space-manager.ts +1 -1
- package/src/space/space.test.ts +2 -5
- package/src/space/space.ts +11 -7
- package/src/testing/test-agent-builder.ts +4 -1
- package/src/testing/util.ts +1 -1
- package/dist/lib/browser/chunk-CSFWTLPD.mjs.map +0 -7
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Context } from '@dxos/context';
|
|
1
2
|
import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
|
|
2
3
|
import { ObjectSync } from '@dxos/teleport-extension-object-sync';
|
|
3
4
|
import { SnapshotStore } from './snapshot-store';
|
|
@@ -11,7 +12,7 @@ export declare class SnapshotManager {
|
|
|
11
12
|
get objectSync(): ObjectSync;
|
|
12
13
|
open(): Promise<void>;
|
|
13
14
|
close(): Promise<void>;
|
|
14
|
-
load(id: string): Promise<SpaceSnapshot>;
|
|
15
|
+
load(ctx: Context, id: string): Promise<SpaceSnapshot>;
|
|
15
16
|
store(snapshot: SpaceSnapshot): Promise<string>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=snapshot-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-manager.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/snapshot-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-manager.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/snapshot-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAqB,MAAM,eAAe,CAAC;AAI3D,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,qBACa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAItB,cAAc,EAAE,aAAa;IAsBhD,IAAI,UAAU,eAEb;IAEK,IAAI;IAIJ,KAAK;IAKL,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUtD,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;CAItD"}
|
|
@@ -32,7 +32,8 @@ export declare class MetadataStore {
|
|
|
32
32
|
getIdentityRecord(): IdentityRecord | undefined;
|
|
33
33
|
setIdentityRecord(record: IdentityRecord): Promise<void>;
|
|
34
34
|
addSpace(record: SpaceMetadata): Promise<void>;
|
|
35
|
-
|
|
35
|
+
setSpaceDataLatestTimeframe(spaceKey: PublicKey, timeframe: Timeframe): Promise<void>;
|
|
36
|
+
setSpaceControlLatestTimeframe(spaceKey: PublicKey, timeframe: Timeframe): Promise<void>;
|
|
36
37
|
setCache(spaceKey: PublicKey, cache: SpaceCache): Promise<void>;
|
|
37
38
|
setWritableFeedKeys(spaceKey: PublicKey, controlFeedKey: PublicKey, dataFeedKey: PublicKey): Promise<void>;
|
|
38
39
|
}
|
|
@@ -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;AAE5C,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;
|
|
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;AAE5C,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"}
|
|
@@ -37,6 +37,7 @@ export declare class PipelineState {
|
|
|
37
37
|
* NOTE: This might never be reached if the mutation dependencies
|
|
38
38
|
*/
|
|
39
39
|
get endTimeframe(): Timeframe;
|
|
40
|
+
get startTimeframe(): Timeframe;
|
|
40
41
|
get timeframe(): Timeframe;
|
|
41
42
|
get pendingTimeframe(): Timeframe;
|
|
42
43
|
get targetTimeframe(): Timeframe;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAgC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAmB,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,OAAO,EAAyC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1F,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,13 @@ import { PublicKey } from '@dxos/keys';
|
|
|
4
4
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
5
5
|
import { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
6
6
|
import { AsyncCallback, Callback } from '@dxos/util';
|
|
7
|
+
import { MetadataStore } from '../metadata';
|
|
7
8
|
import { PipelineAccessor } from '../pipeline';
|
|
8
9
|
export type ControlPipelineParams = {
|
|
9
10
|
spaceKey: PublicKey;
|
|
10
11
|
genesisFeed: FeedWrapper<FeedMessage>;
|
|
11
12
|
feedProvider: (feedKey: PublicKey) => Promise<FeedWrapper<FeedMessage>>;
|
|
13
|
+
metadataStore: MetadataStore;
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
16
|
* Processes HALO credentials, which include genesis and invitations.
|
|
@@ -16,14 +18,20 @@ export type ControlPipelineParams = {
|
|
|
16
18
|
export declare class ControlPipeline {
|
|
17
19
|
private readonly _pipeline;
|
|
18
20
|
private readonly _spaceStateMachine;
|
|
21
|
+
private readonly _spaceKey;
|
|
22
|
+
private readonly _metadata;
|
|
23
|
+
private _targetTimeframe?;
|
|
24
|
+
private _lastTimeframeSaveTime;
|
|
19
25
|
readonly onFeedAdmitted: Callback<AsyncCallback<FeedInfo>>;
|
|
20
26
|
readonly onMemberAdmitted: Callback<AsyncCallback<MemberInfo>>;
|
|
21
27
|
readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
|
|
22
|
-
constructor({ spaceKey, genesisFeed, feedProvider }: ControlPipelineParams);
|
|
28
|
+
constructor({ spaceKey, genesisFeed, feedProvider, metadataStore }: ControlPipelineParams);
|
|
23
29
|
get spaceState(): SpaceState;
|
|
24
30
|
get pipeline(): PipelineAccessor;
|
|
25
31
|
setWriteFeed(feed: FeedWrapper<FeedMessage>): void;
|
|
26
32
|
start(): Promise<void>;
|
|
33
|
+
private _noteTargetStateIfNeeded;
|
|
27
34
|
stop(): Promise<void>;
|
|
35
|
+
private _saveTargetTimeframe;
|
|
28
36
|
}
|
|
29
37
|
//# sourceMappingURL=control-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/control-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,UAAU,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"control-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/control-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAEvF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAY,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAIF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAEvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAY;IACrC,OAAO,CAAC,sBAAsB,CAAsB;IAEpD,SAAgB,cAAc,oCAA2C;IACzE,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,SAAgB,qBAAqB,EAAE,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;gBAE/D,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,qBAAqB;IA4BzF,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IAED,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAIrC,KAAK;YA4BG,wBAAwB;IAUhC,IAAI;YAOI,oBAAoB;CASnC"}
|
|
@@ -41,8 +41,17 @@ export declare class DataPipeline {
|
|
|
41
41
|
constructor(_params: DataPipelineParams);
|
|
42
42
|
itemManager: ItemManager;
|
|
43
43
|
databaseHost?: DatabaseHost;
|
|
44
|
+
/**
|
|
45
|
+
* Current epoch. Might be still processing.
|
|
46
|
+
*/
|
|
44
47
|
currentEpoch?: SpecificCredential<Epoch>;
|
|
48
|
+
/**
|
|
49
|
+
* Epoch currently applied.
|
|
50
|
+
*/
|
|
51
|
+
appliedEpoch?: SpecificCredential<Epoch>;
|
|
52
|
+
private _lastProcessedEpoch;
|
|
45
53
|
onNewEpoch: Event<Credential>;
|
|
54
|
+
private _epochCtx?;
|
|
46
55
|
get isOpen(): boolean;
|
|
47
56
|
get pipeline(): Pipeline | undefined;
|
|
48
57
|
get pipelineState(): import("../pipeline/pipeline").PipelineState | undefined;
|
|
@@ -55,6 +64,7 @@ export declare class DataPipeline {
|
|
|
55
64
|
private _saveTargetTimeframe;
|
|
56
65
|
private _saveCache;
|
|
57
66
|
private _noteTargetStateIfNeeded;
|
|
67
|
+
private _processEpochInSeparateTask;
|
|
58
68
|
private _processEpoch;
|
|
59
69
|
waitUntilTimeframe(timeframe: Timeframe): Promise<void>;
|
|
60
70
|
createEpoch(): Promise<Epoch>;
|
|
@@ -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;
|
|
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;YAyBG,gBAAgB;IA6C9B,OAAO,CAAC,eAAe;YAST,oBAAoB;YAMpB,UAAU;YAqBV,wBAAwB;YAiBxB,2BAA2B;YA6B3B,aAAa;IAoBrB,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAqB7B,sBAAsB;CAG7B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Event } from '@dxos/async';
|
|
2
2
|
import { FeedInfo } from '@dxos/credentials';
|
|
3
|
-
import { FeedWrapper } from '@dxos/feed-store';
|
|
3
|
+
import { FeedOptions, FeedWrapper } from '@dxos/feed-store';
|
|
4
4
|
import { PublicKey } from '@dxos/keys';
|
|
5
5
|
import { ModelFactory } from '@dxos/model-factory';
|
|
6
6
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
@@ -12,7 +12,7 @@ import { MetadataStore } from '../metadata';
|
|
|
12
12
|
import { PipelineAccessor } from '../pipeline';
|
|
13
13
|
import { DataPipeline } from './data-pipeline';
|
|
14
14
|
import { SpaceProtocol } from './space-protocol';
|
|
15
|
-
type FeedProvider = (feedKey: PublicKey) => Promise<FeedWrapper<FeedMessage>>;
|
|
15
|
+
type FeedProvider = (feedKey: PublicKey, opts?: FeedOptions) => Promise<FeedWrapper<FeedMessage>>;
|
|
16
16
|
export type SpaceParams = {
|
|
17
17
|
spaceKey: PublicKey;
|
|
18
18
|
protocol: SpaceProtocol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAkC,MAAM,aAAa,CAAC;AACpE,OAAO,EAAsB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,EACnB,YAAY,UAAQ,GACnB,OAAO,CAAC,KAAK,CAAC;
|
|
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.51-main.04cd027",
|
|
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/
|
|
45
|
-
"@dxos/
|
|
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.51-main.04cd027",
|
|
25
|
+
"@dxos/codec-protobuf": "0.1.51-main.04cd027",
|
|
26
|
+
"@dxos/context": "0.1.51-main.04cd027",
|
|
27
|
+
"@dxos/credentials": "0.1.51-main.04cd027",
|
|
28
|
+
"@dxos/crypto": "0.1.51-main.04cd027",
|
|
29
|
+
"@dxos/debug": "0.1.51-main.04cd027",
|
|
30
|
+
"@dxos/document-model": "0.1.51-main.04cd027",
|
|
31
|
+
"@dxos/echo-db": "0.1.51-main.04cd027",
|
|
32
|
+
"@dxos/errors": "0.1.51-main.04cd027",
|
|
33
|
+
"@dxos/feed-store": "0.1.51-main.04cd027",
|
|
34
|
+
"@dxos/hypercore": "0.1.51-main.04cd027",
|
|
35
|
+
"@dxos/keyring": "0.1.51-main.04cd027",
|
|
36
|
+
"@dxos/keys": "0.1.51-main.04cd027",
|
|
37
|
+
"@dxos/log": "0.1.51-main.04cd027",
|
|
38
|
+
"@dxos/messaging": "0.1.51-main.04cd027",
|
|
39
|
+
"@dxos/model-factory": "0.1.51-main.04cd027",
|
|
40
|
+
"@dxos/network-manager": "0.1.51-main.04cd027",
|
|
41
|
+
"@dxos/node-std": "0.1.51-main.04cd027",
|
|
42
|
+
"@dxos/protocols": "0.1.51-main.04cd027",
|
|
43
|
+
"@dxos/random-access-storage": "0.1.51-main.04cd027",
|
|
44
|
+
"@dxos/rpc": "0.1.51-main.04cd027",
|
|
45
|
+
"@dxos/teleport": "0.1.51-main.04cd027",
|
|
46
|
+
"@dxos/teleport-extension-gossip": "0.1.51-main.04cd027",
|
|
47
|
+
"@dxos/teleport-extension-object-sync": "0.1.51-main.04cd027",
|
|
48
|
+
"@dxos/teleport-extension-replicator": "0.1.51-main.04cd027",
|
|
49
|
+
"@dxos/timeframe": "0.1.51-main.04cd027",
|
|
50
|
+
"@dxos/typings": "0.1.51-main.04cd027",
|
|
51
|
+
"@dxos/util": "0.1.51-main.04cd027"
|
|
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.51-main.04cd027"
|
|
60
60
|
},
|
|
61
61
|
"publishConfig": {
|
|
62
62
|
"access": "public"
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { trackLeaks } from '@dxos/async';
|
|
6
6
|
import { Any } from '@dxos/codec-protobuf';
|
|
7
|
+
import { Context, cancelWithContext } from '@dxos/context';
|
|
7
8
|
import { timed } from '@dxos/debug';
|
|
8
9
|
import { log } from '@dxos/log';
|
|
9
10
|
import { schema } from '@dxos/protocols';
|
|
@@ -57,13 +58,13 @@ export class SnapshotManager {
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
@timed(10_000)
|
|
60
|
-
async load(id: string): Promise<SpaceSnapshot> {
|
|
61
|
-
const local = await this._snapshotStore.loadSnapshot(id);
|
|
61
|
+
async load(ctx: Context, id: string): Promise<SpaceSnapshot> {
|
|
62
|
+
const local = await cancelWithContext(ctx, this._snapshotStore.loadSnapshot(id));
|
|
62
63
|
if (local) {
|
|
63
64
|
return local;
|
|
64
65
|
}
|
|
65
66
|
|
|
66
|
-
const remote = await this._objectSync.download(id);
|
|
67
|
+
const remote = await cancelWithContext(ctx, this._objectSync.download(ctx, id));
|
|
67
68
|
return schema.getCodecForType('dxos.echo.snapshot.SpaceSnapshot').decode((remote.payload as Any).value);
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -119,6 +119,11 @@ export class MetadataStore {
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
_getSpace(spaceKey: PublicKey): SpaceMetadata {
|
|
122
|
+
if (this._metadata.identity?.haloSpace.key.equals(spaceKey)) {
|
|
123
|
+
// Check if the space is the identity space.
|
|
124
|
+
return this._metadata.identity.haloSpace;
|
|
125
|
+
}
|
|
126
|
+
|
|
122
127
|
const space = this.spaces.find((space) => space.key === spaceKey);
|
|
123
128
|
assert(space, 'Space not found');
|
|
124
129
|
return space;
|
|
@@ -154,11 +159,16 @@ export class MetadataStore {
|
|
|
154
159
|
await this._save();
|
|
155
160
|
}
|
|
156
161
|
|
|
157
|
-
async
|
|
162
|
+
async setSpaceDataLatestTimeframe(spaceKey: PublicKey, timeframe: Timeframe) {
|
|
158
163
|
this._getSpace(spaceKey).dataTimeframe = timeframe;
|
|
159
164
|
await this._save();
|
|
160
165
|
}
|
|
161
166
|
|
|
167
|
+
async setSpaceControlLatestTimeframe(spaceKey: PublicKey, timeframe: Timeframe) {
|
|
168
|
+
this._getSpace(spaceKey).controlTimeframe = timeframe;
|
|
169
|
+
await this._save();
|
|
170
|
+
}
|
|
171
|
+
|
|
162
172
|
async setCache(spaceKey: PublicKey, cache: SpaceCache) {
|
|
163
173
|
this._getSpace(spaceKey).cache = cache;
|
|
164
174
|
await this._save();
|
|
@@ -171,4 +181,5 @@ export class MetadataStore {
|
|
|
171
181
|
await this._save();
|
|
172
182
|
}
|
|
173
183
|
}
|
|
184
|
+
|
|
174
185
|
const fromBytesInt32 = (buf: Buffer) => buf.readInt32LE(0);
|
package/src/pipeline/pipeline.ts
CHANGED
|
@@ -41,6 +41,11 @@ export class PipelineState {
|
|
|
41
41
|
|
|
42
42
|
public readonly stalled = new Event();
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
_startTimeframe: Timeframe = new Timeframe();
|
|
48
|
+
|
|
44
49
|
/**
|
|
45
50
|
* Target timeframe we are waiting to reach.
|
|
46
51
|
*/
|
|
@@ -70,6 +75,10 @@ export class PipelineState {
|
|
|
70
75
|
);
|
|
71
76
|
}
|
|
72
77
|
|
|
78
|
+
get startTimeframe() {
|
|
79
|
+
return this._startTimeframe;
|
|
80
|
+
}
|
|
81
|
+
|
|
73
82
|
get timeframe() {
|
|
74
83
|
return this._timeframeClock.timeframe;
|
|
75
84
|
}
|
|
@@ -275,8 +284,23 @@ export class Pipeline implements PipelineAccessor {
|
|
|
275
284
|
async setCursor(timeframe: Timeframe) {
|
|
276
285
|
assert(!this._isStarted || this._isPaused, 'Invalid state.');
|
|
277
286
|
|
|
287
|
+
this._state._startTimeframe = timeframe;
|
|
278
288
|
this._timeframeClock.setTimeframe(timeframe);
|
|
279
289
|
|
|
290
|
+
// Cancel downloads of mutations before the cursor.
|
|
291
|
+
for (const [key, seq] of timeframe.frames()) {
|
|
292
|
+
const feed = this._feeds.get(key);
|
|
293
|
+
if (!feed) {
|
|
294
|
+
throw new Error('Feed not found');
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
feed.undownload({ callback: () => log('Undownloaded') });
|
|
298
|
+
|
|
299
|
+
feed.download({ start: seq + 1, linear: true }).catch((err: Error) => {
|
|
300
|
+
log('failed to download feed', { err });
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
|
|
280
304
|
if (this._feedSetIterator) {
|
|
281
305
|
await this._feedSetIterator.close();
|
|
282
306
|
await this._initIterator();
|
|
@@ -16,6 +16,7 @@ import { describe, test, afterTest } from '@dxos/test';
|
|
|
16
16
|
import { Timeframe } from '@dxos/timeframe';
|
|
17
17
|
|
|
18
18
|
import { valueEncoding } from '../common';
|
|
19
|
+
import { MetadataStore } from '../metadata';
|
|
19
20
|
import { ControlPipeline } from './control-pipeline';
|
|
20
21
|
|
|
21
22
|
describe('space/control-pipeline', () => {
|
|
@@ -42,10 +43,13 @@ describe('space/control-pipeline', () => {
|
|
|
42
43
|
|
|
43
44
|
// TODO(dmaretskyi): Separate test for cold start after genesis.
|
|
44
45
|
const genesisFeed = await createFeed();
|
|
46
|
+
const metadata = new MetadataStore(createStorage({ type: StorageType.RAM }).createDirectory());
|
|
47
|
+
await metadata.addSpace({ key: spaceKey, genesisFeedKey: genesisFeed.key, controlFeedKey: genesisFeed.key });
|
|
45
48
|
const controlPipeline = new ControlPipeline({
|
|
46
49
|
spaceKey,
|
|
47
50
|
genesisFeed,
|
|
48
51
|
feedProvider: (key) => feedStore.openFeed(key),
|
|
52
|
+
metadataStore: metadata,
|
|
49
53
|
});
|
|
50
54
|
|
|
51
55
|
const admittedFeeds: PublicKey[] = [];
|
|
@@ -8,16 +8,21 @@ import { PublicKey } from '@dxos/keys';
|
|
|
8
8
|
import { log } from '@dxos/log';
|
|
9
9
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
10
10
|
import { AdmittedFeed, Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
11
|
+
import { Timeframe } from '@dxos/timeframe';
|
|
11
12
|
import { AsyncCallback, Callback } from '@dxos/util';
|
|
12
13
|
|
|
14
|
+
import { MetadataStore } from '../metadata';
|
|
13
15
|
import { Pipeline, PipelineAccessor } from '../pipeline';
|
|
14
16
|
|
|
15
17
|
export type ControlPipelineParams = {
|
|
16
18
|
spaceKey: PublicKey;
|
|
17
19
|
genesisFeed: FeedWrapper<FeedMessage>;
|
|
18
20
|
feedProvider: (feedKey: PublicKey) => Promise<FeedWrapper<FeedMessage>>;
|
|
21
|
+
metadataStore: MetadataStore;
|
|
19
22
|
};
|
|
20
23
|
|
|
24
|
+
const TIMEFRAME_SAVE_DEBOUNCE_INTERVAL = 500;
|
|
25
|
+
|
|
21
26
|
/**
|
|
22
27
|
* Processes HALO credentials, which include genesis and invitations.
|
|
23
28
|
*/
|
|
@@ -25,11 +30,18 @@ export class ControlPipeline {
|
|
|
25
30
|
private readonly _pipeline: Pipeline;
|
|
26
31
|
private readonly _spaceStateMachine: SpaceStateMachine;
|
|
27
32
|
|
|
33
|
+
private readonly _spaceKey: PublicKey;
|
|
34
|
+
private readonly _metadata: MetadataStore;
|
|
35
|
+
private _targetTimeframe?: Timeframe;
|
|
36
|
+
private _lastTimeframeSaveTime: number = Date.now();
|
|
37
|
+
|
|
28
38
|
public readonly onFeedAdmitted = new Callback<AsyncCallback<FeedInfo>>();
|
|
29
39
|
public readonly onMemberAdmitted: Callback<AsyncCallback<MemberInfo>>;
|
|
30
40
|
public readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
|
|
31
41
|
|
|
32
|
-
constructor({ spaceKey, genesisFeed, feedProvider }: ControlPipelineParams) {
|
|
42
|
+
constructor({ spaceKey, genesisFeed, feedProvider, metadataStore }: ControlPipelineParams) {
|
|
43
|
+
this._spaceKey = spaceKey;
|
|
44
|
+
this._metadata = metadataStore;
|
|
33
45
|
this._pipeline = new Pipeline();
|
|
34
46
|
void this._pipeline.addFeed(genesisFeed); // TODO(burdon): Require async open/close?
|
|
35
47
|
|
|
@@ -81,6 +93,8 @@ export class ControlPipeline {
|
|
|
81
93
|
);
|
|
82
94
|
if (!result) {
|
|
83
95
|
log.warn('processing failed', { msg });
|
|
96
|
+
} else {
|
|
97
|
+
await this._noteTargetStateIfNeeded(this._pipeline.state.pendingTimeframe);
|
|
84
98
|
}
|
|
85
99
|
}
|
|
86
100
|
} catch (err: any) {
|
|
@@ -93,9 +107,30 @@ export class ControlPipeline {
|
|
|
93
107
|
log('started');
|
|
94
108
|
}
|
|
95
109
|
|
|
110
|
+
private async _noteTargetStateIfNeeded(timeframe: Timeframe) {
|
|
111
|
+
// TODO(dmaretskyi): Replace this with a proper debounce/throttle.
|
|
112
|
+
|
|
113
|
+
if (Date.now() - this._lastTimeframeSaveTime > TIMEFRAME_SAVE_DEBOUNCE_INTERVAL) {
|
|
114
|
+
this._lastTimeframeSaveTime = Date.now();
|
|
115
|
+
|
|
116
|
+
await this._saveTargetTimeframe(timeframe);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
96
120
|
async stop() {
|
|
97
121
|
log('stopping...');
|
|
98
122
|
await this._pipeline.stop();
|
|
123
|
+
await this._saveTargetTimeframe(this._pipeline.state.timeframe);
|
|
99
124
|
log('stopped');
|
|
100
125
|
}
|
|
126
|
+
|
|
127
|
+
private async _saveTargetTimeframe(timeframe: Timeframe) {
|
|
128
|
+
try {
|
|
129
|
+
const newTimeframe = Timeframe.merge(this._targetTimeframe ?? new Timeframe(), timeframe);
|
|
130
|
+
await this._metadata.setSpaceControlLatestTimeframe(this._spaceKey, newTimeframe);
|
|
131
|
+
this._targetTimeframe = newTimeframe;
|
|
132
|
+
} catch (err: any) {
|
|
133
|
+
log(err);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
101
136
|
}
|
|
@@ -8,10 +8,12 @@ import { Event, scheduleTask, synchronized, trackLeaks } from '@dxos/async';
|
|
|
8
8
|
import { Context } from '@dxos/context';
|
|
9
9
|
import { CredentialProcessor, FeedInfo, SpecificCredential, checkCredentialType } from '@dxos/credentials';
|
|
10
10
|
import { getStateMachineFromItem, ItemManager } from '@dxos/echo-db';
|
|
11
|
+
import { CancelledError } from '@dxos/errors';
|
|
11
12
|
import { FeedWriter } from '@dxos/feed-store';
|
|
12
13
|
import { PublicKey } from '@dxos/keys';
|
|
13
14
|
import { log } from '@dxos/log';
|
|
14
15
|
import { ModelFactory } from '@dxos/model-factory';
|
|
16
|
+
import { DataPipelineProcessed } from '@dxos/protocols';
|
|
15
17
|
import { DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
16
18
|
import { SpaceCache } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
17
19
|
import { ObjectSnapshot } from '@dxos/protocols/proto/dxos/echo/model/document';
|
|
@@ -79,8 +81,19 @@ export class DataPipeline {
|
|
|
79
81
|
public itemManager!: ItemManager;
|
|
80
82
|
public databaseHost?: DatabaseHost;
|
|
81
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Current epoch. Might be still processing.
|
|
86
|
+
*/
|
|
82
87
|
public currentEpoch?: SpecificCredential<Epoch>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Epoch currently applied.
|
|
91
|
+
*/
|
|
92
|
+
public appliedEpoch?: SpecificCredential<Epoch>;
|
|
93
|
+
|
|
94
|
+
private _lastProcessedEpoch = -1;
|
|
83
95
|
public onNewEpoch = new Event<Credential>();
|
|
96
|
+
private _epochCtx?: Context;
|
|
84
97
|
|
|
85
98
|
get isOpen() {
|
|
86
99
|
return this._isOpen;
|
|
@@ -106,11 +119,11 @@ export class DataPipeline {
|
|
|
106
119
|
return;
|
|
107
120
|
}
|
|
108
121
|
|
|
109
|
-
log('new epoch', { credential });
|
|
110
|
-
await this._processEpoch(credential.subject.assertion);
|
|
111
|
-
|
|
112
122
|
this.currentEpoch = credential;
|
|
113
|
-
this.
|
|
123
|
+
if (this._isOpen) {
|
|
124
|
+
// process epoch
|
|
125
|
+
await this._processEpochInSeparateTask(credential);
|
|
126
|
+
}
|
|
114
127
|
},
|
|
115
128
|
};
|
|
116
129
|
}
|
|
@@ -180,6 +193,12 @@ export class DataPipeline {
|
|
|
180
193
|
}
|
|
181
194
|
|
|
182
195
|
private async _consumePipeline() {
|
|
196
|
+
if (this.currentEpoch) {
|
|
197
|
+
const waitForOneEpoch = this.onNewEpoch.waitForCount(1);
|
|
198
|
+
await this._processEpochInSeparateTask(this.currentEpoch);
|
|
199
|
+
await waitForOneEpoch;
|
|
200
|
+
}
|
|
201
|
+
|
|
183
202
|
assert(this._pipeline, 'Pipeline is not initialized.');
|
|
184
203
|
for await (const msg of this._pipeline.consume()) {
|
|
185
204
|
const { feedKey, seq, data } = msg;
|
|
@@ -203,6 +222,12 @@ export class DataPipeline {
|
|
|
203
222
|
},
|
|
204
223
|
});
|
|
205
224
|
|
|
225
|
+
log.trace('dxos.echo.data-pipeline.processed', {
|
|
226
|
+
feedKey: feedKey.toHex(),
|
|
227
|
+
seq,
|
|
228
|
+
spaceKey: this._params.spaceKey.toHex(),
|
|
229
|
+
} satisfies DataPipelineProcessed);
|
|
230
|
+
|
|
206
231
|
// Timeframe clock is not updated yet
|
|
207
232
|
await this._noteTargetStateIfNeeded(this._pipeline.state.pendingTimeframe);
|
|
208
233
|
}
|
|
@@ -223,7 +248,7 @@ export class DataPipeline {
|
|
|
223
248
|
|
|
224
249
|
private async _saveTargetTimeframe(timeframe: Timeframe) {
|
|
225
250
|
const newTimeframe = Timeframe.merge(this._targetTimeframe ?? new Timeframe(), timeframe);
|
|
226
|
-
await this._params.metadataStore.
|
|
251
|
+
await this._params.metadataStore.setSpaceDataLatestTimeframe(this._params.spaceKey, newTimeframe);
|
|
227
252
|
this._targetTimeframe = newTimeframe;
|
|
228
253
|
}
|
|
229
254
|
|
|
@@ -265,14 +290,43 @@ export class DataPipeline {
|
|
|
265
290
|
}
|
|
266
291
|
}
|
|
267
292
|
|
|
293
|
+
private async _processEpochInSeparateTask(epoch: SpecificCredential<Epoch>) {
|
|
294
|
+
if (epoch.subject.assertion.number <= this._lastProcessedEpoch) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
await this._epochCtx?.dispose();
|
|
298
|
+
const ctx = new Context({
|
|
299
|
+
onError: (err) => {
|
|
300
|
+
if (err instanceof CancelledError) {
|
|
301
|
+
log('Epoch processing cancelled.');
|
|
302
|
+
} else {
|
|
303
|
+
log.catch(err);
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
this._epochCtx = ctx;
|
|
308
|
+
scheduleTask(ctx, async () => {
|
|
309
|
+
if (!this._isOpen) {
|
|
310
|
+
// Space closed before we got to process the epoch.
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
log('process epoch', { epoch });
|
|
314
|
+
await this._processEpoch(ctx, epoch.subject.assertion);
|
|
315
|
+
|
|
316
|
+
this.appliedEpoch = epoch;
|
|
317
|
+
this.onNewEpoch.emit(epoch);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
268
321
|
@synchronized
|
|
269
|
-
private async _processEpoch(epoch: Epoch) {
|
|
270
|
-
assert(this._isOpen
|
|
322
|
+
private async _processEpoch(ctx: Context, epoch: Epoch) {
|
|
323
|
+
assert(this._isOpen, 'Space is closed.');
|
|
271
324
|
assert(this._pipeline);
|
|
325
|
+
this._lastProcessedEpoch = epoch.number;
|
|
272
326
|
|
|
273
327
|
log('Processing epoch', { epoch });
|
|
274
328
|
if (epoch.snapshotCid) {
|
|
275
|
-
const snapshot = await this._params.snapshotManager.load(epoch.snapshotCid);
|
|
329
|
+
const snapshot = await this._params.snapshotManager.load(ctx, epoch.snapshotCid);
|
|
276
330
|
|
|
277
331
|
// TODO(dmaretskyi): Clearing old items + events.
|
|
278
332
|
this.databaseHost!._itemDemuxer.restoreFromSnapshot(snapshot.database);
|
|
@@ -98,7 +98,7 @@ export class SpaceManager {
|
|
|
98
98
|
spaceKey,
|
|
99
99
|
protocol,
|
|
100
100
|
genesisFeed,
|
|
101
|
-
feedProvider: (feedKey) => this._feedStore.openFeed(feedKey),
|
|
101
|
+
feedProvider: (feedKey, opts) => this._feedStore.openFeed(feedKey, opts),
|
|
102
102
|
modelFactory: this._modelFactory,
|
|
103
103
|
metadataStore: this._metadataStore,
|
|
104
104
|
snapshotManager,
|