@powerhousedao/reactor 5.1.0-dev.3 → 5.1.0-dev.30
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/src/cache/document-meta-cache-types.d.ts +114 -0
- package/dist/src/cache/document-meta-cache-types.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache-types.js +2 -0
- package/dist/src/cache/document-meta-cache-types.js.map +1 -0
- package/dist/src/cache/document-meta-cache.d.ts +30 -0
- package/dist/src/cache/document-meta-cache.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache.js +128 -0
- package/dist/src/cache/document-meta-cache.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +4 -2
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.js +54 -0
- package/dist/src/cache/kysely-operation-index.js.map +1 -1
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +2 -1
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +3 -2
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.js.map +1 -1
- package/dist/src/client/reactor-client.d.ts +7 -8
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +48 -45
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +10 -10
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +15 -11
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.js +57 -19
- package/dist/src/core/reactor-builder.js.map +1 -1
- package/dist/src/core/{builder.d.ts → reactor-client-builder.d.ts} +12 -4
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -0
- package/dist/src/core/{builder.js → reactor-client-builder.js} +44 -23
- package/dist/src/core/reactor-client-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +12 -12
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +61 -36
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +49 -14
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +9 -1
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +30 -0
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +1 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +1 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +17 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +283 -192
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/util.d.ts +14 -5
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +36 -9
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +12 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/console.d.ts +13 -0
- package/dist/src/logging/console.d.ts.map +1 -0
- package/dist/src/logging/console.js +77 -0
- package/dist/src/logging/console.js.map +1 -0
- package/dist/src/logging/types.d.ts +11 -0
- package/dist/src/logging/types.d.ts.map +1 -0
- package/dist/src/logging/types.js +2 -0
- package/dist/src/logging/types.js.map +1 -0
- package/dist/src/queue/types.d.ts +2 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +60 -0
- package/dist/src/read-models/base-read-model.d.ts.map +1 -0
- package/dist/src/read-models/base-read-model.js +143 -0
- package/dist/src/read-models/base-read-model.js.map +1 -0
- package/dist/src/read-models/coordinator.d.ts +3 -1
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +8 -7
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +6 -7
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +16 -81
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/types.d.ts +2 -1
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/registry/implementation.d.ts +42 -34
- package/dist/src/registry/implementation.d.ts.map +1 -1
- package/dist/src/registry/implementation.js +168 -48
- package/dist/src/registry/implementation.js.map +1 -1
- package/dist/src/registry/interfaces.d.ts +69 -8
- package/dist/src/registry/interfaces.d.ts.map +1 -1
- package/dist/src/shared/errors.d.ts +24 -0
- package/dist/src/shared/errors.d.ts.map +1 -1
- package/dist/src/shared/errors.js +42 -0
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/types.d.ts +4 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +9 -3
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
- package/dist/src/signer/passthrough-signer.js +13 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -1
- package/dist/src/signer/types.d.ts +12 -10
- package/dist/src/signer/types.d.ts.map +1 -1
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts +33 -0
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +1 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js +65 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +81 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js +1 -0
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js +2 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -1
- package/dist/src/storage/migrations/run-migrations.js +3 -3
- package/dist/src/storage/migrations/run-migrations.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +16 -0
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -0
- package/dist/src/subs/subscription-notification-read-model.js +51 -0
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts +27 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.js +83 -0
- package/dist/src/sync/channels/composite-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-channel-factory.d.ts +2 -2
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel-factory.js +3 -1
- package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
- package/dist/src/sync/channels/gql-channel.d.ts +21 -0
- package/dist/src/sync/channels/gql-channel.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel.js +108 -13
- package/dist/src/sync/channels/gql-channel.js.map +1 -1
- package/dist/src/sync/channels/index.d.ts +2 -1
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +2 -1
- package/dist/src/sync/channels/index.js.map +1 -1
- package/dist/src/sync/channels/polling-channel.d.ts +39 -0
- package/dist/src/sync/channels/polling-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/polling-channel.js +70 -0
- package/dist/src/sync/channels/polling-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +4 -2
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +52 -6
- package/dist/src/sync/channels/utils.js.map +1 -1
- package/dist/src/sync/errors.d.ts +1 -1
- package/dist/src/sync/errors.d.ts.map +1 -1
- package/dist/src/sync/errors.js +2 -2
- package/dist/src/sync/errors.js.map +1 -1
- package/dist/src/sync/index.d.ts +2 -2
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +2 -2
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/interfaces.d.ts +16 -1
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +1 -0
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +52 -4
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/package.json +4 -4
- package/dist/src/core/builder.d.ts.map +0 -1
- package/dist/src/core/builder.js.map +0 -1
- package/dist/src/sync/channels/internal-channel.d.ts +0 -57
- package/dist/src/sync/channels/internal-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/internal-channel.js +0 -106
- package/dist/src/sync/channels/internal-channel.js.map +0 -1
|
@@ -12,6 +12,7 @@ export class ReactorClientBuilder {
|
|
|
12
12
|
eventBus;
|
|
13
13
|
documentIndexer;
|
|
14
14
|
signer;
|
|
15
|
+
signatureVerifier;
|
|
15
16
|
subscriptionManager;
|
|
16
17
|
jobAwaiter;
|
|
17
18
|
/**
|
|
@@ -36,8 +37,19 @@ export class ReactorClientBuilder {
|
|
|
36
37
|
this.documentIndexer = documentIndexer;
|
|
37
38
|
return this;
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Sets the signer configuration for signing and verifying actions.
|
|
42
|
+
*
|
|
43
|
+
* @param config - Either an ISigner for signing only, or a SignerConfig for both signing and verification
|
|
44
|
+
*/
|
|
45
|
+
withSigner(config) {
|
|
46
|
+
if ("signer" in config) {
|
|
47
|
+
this.signer = config.signer;
|
|
48
|
+
this.signatureVerifier = config.verifier;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.signer = config;
|
|
52
|
+
}
|
|
41
53
|
return this;
|
|
42
54
|
}
|
|
43
55
|
withSubscriptionManager(subscriptionManager) {
|
|
@@ -49,40 +61,49 @@ export class ReactorClientBuilder {
|
|
|
49
61
|
return this;
|
|
50
62
|
}
|
|
51
63
|
async build() {
|
|
64
|
+
const module = await this.buildModule();
|
|
65
|
+
return module.client;
|
|
66
|
+
}
|
|
67
|
+
async buildModule() {
|
|
52
68
|
let reactor;
|
|
53
69
|
let eventBus;
|
|
54
70
|
let documentIndexer;
|
|
71
|
+
let reactorModule;
|
|
55
72
|
if (this.reactorBuilder) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const builderDocumentIndexer = this.reactorBuilder.documentIndexer;
|
|
59
|
-
if (!builderEventBus) {
|
|
60
|
-
throw new Error("Event bus is required in ReactorBuilder");
|
|
61
|
-
}
|
|
62
|
-
if (!builderDocumentIndexer) {
|
|
63
|
-
throw new Error("DocumentIndexer must be initialized by ReactorBuilder");
|
|
73
|
+
if (this.signatureVerifier) {
|
|
74
|
+
this.reactorBuilder.withSignatureVerifier(this.signatureVerifier);
|
|
64
75
|
}
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
reactorModule = await this.reactorBuilder.buildModule();
|
|
77
|
+
reactor = reactorModule.reactor;
|
|
78
|
+
eventBus = reactorModule.eventBus;
|
|
79
|
+
documentIndexer = reactorModule.documentIndexer;
|
|
67
80
|
}
|
|
68
81
|
else if (this.reactor && this.eventBus && this.documentIndexer) {
|
|
69
82
|
reactor = this.reactor;
|
|
70
83
|
eventBus = this.eventBus;
|
|
71
84
|
documentIndexer = this.documentIndexer;
|
|
85
|
+
reactorModule = undefined;
|
|
72
86
|
}
|
|
73
87
|
else {
|
|
74
88
|
throw new Error("Either ReactorBuilder or (Reactor + EventBus + DocumentIndexer) is required");
|
|
75
89
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
const signer = this.signer ?? new PassthroughSigner();
|
|
91
|
+
const subscriptionManager = this.subscriptionManager ??
|
|
92
|
+
reactorModule?.subscriptionManager ??
|
|
93
|
+
new ReactorSubscriptionManager(new DefaultSubscriptionErrorHandler());
|
|
94
|
+
const jobAwaiter = this.jobAwaiter ??
|
|
95
|
+
new JobAwaiter(eventBus, (jobId, signal) => reactor.getJobStatus(jobId, signal));
|
|
96
|
+
const client = new ReactorClient(reactor, signer, subscriptionManager, jobAwaiter, documentIndexer);
|
|
97
|
+
return {
|
|
98
|
+
client,
|
|
99
|
+
reactor,
|
|
100
|
+
eventBus,
|
|
101
|
+
documentIndexer,
|
|
102
|
+
signer,
|
|
103
|
+
subscriptionManager,
|
|
104
|
+
jobAwaiter,
|
|
105
|
+
reactorModule,
|
|
106
|
+
};
|
|
86
107
|
}
|
|
87
108
|
}
|
|
88
|
-
//# sourceMappingURL=builder.js.map
|
|
109
|
+
//# sourceMappingURL=reactor-client-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor-client-builder.js","sourceRoot":"","sources":["../../../src/core/reactor-client-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { BaseDocumentDriveServer
|
|
2
|
-
import type { Action, DocumentModelModule, Operation, PHDocument } from "document-model";
|
|
1
|
+
import type { BaseDocumentDriveServer } from "document-drive";
|
|
2
|
+
import type { Action, DocumentModelModule, ISigner, Operation, PHDocument } from "document-model";
|
|
3
3
|
import type { IJobTracker } from "../job-tracker/interfaces.js";
|
|
4
4
|
import type { IQueue } from "../queue/interfaces.js";
|
|
5
5
|
import type { IReadModelCoordinator } from "../read-models/interfaces.js";
|
|
6
6
|
import type { ConsistencyToken, JobInfo, PagedResults, PagingOptions, SearchFilter, ShutdownStatus, ViewFilter } from "../shared/types.js";
|
|
7
|
-
import type { IDocumentIndexer, IDocumentView, IOperationStore } from "../storage/interfaces.js";
|
|
8
|
-
import type {
|
|
7
|
+
import type { IConsistencyAwareStorage, IDocumentIndexer, IDocumentView, IOperationStore } from "../storage/interfaces.js";
|
|
8
|
+
import type { BatchExecutionRequest, BatchExecutionResult, IReactor, ReactorFeatures } from "./types.js";
|
|
9
9
|
/**
|
|
10
10
|
* This class implements the IReactor interface and serves as the main entry point
|
|
11
11
|
* for the new Reactor architecture.
|
|
@@ -22,7 +22,7 @@ export declare class Reactor implements IReactor {
|
|
|
22
22
|
private documentView;
|
|
23
23
|
private _documentIndexer;
|
|
24
24
|
private operationStore;
|
|
25
|
-
constructor(driveServer: BaseDocumentDriveServer, documentStorage:
|
|
25
|
+
constructor(driveServer: BaseDocumentDriveServer, documentStorage: IConsistencyAwareStorage, queue: IQueue, jobTracker: IJobTracker, readModelCoordinator: IReadModelCoordinator, features: ReactorFeatures, documentView: IDocumentView, documentIndexer: IDocumentIndexer, operationStore: IOperationStore);
|
|
26
26
|
/**
|
|
27
27
|
* Signals that the reactor should shutdown.
|
|
28
28
|
*/
|
|
@@ -63,33 +63,33 @@ export declare class Reactor implements IReactor {
|
|
|
63
63
|
/**
|
|
64
64
|
* Creates a document
|
|
65
65
|
*/
|
|
66
|
-
create(document: PHDocument, signal?: AbortSignal): Promise<JobInfo>;
|
|
66
|
+
create(document: PHDocument, signer?: ISigner, signal?: AbortSignal, meta?: Record<string, unknown>): Promise<JobInfo>;
|
|
67
67
|
/**
|
|
68
68
|
* Deletes a document
|
|
69
69
|
*/
|
|
70
|
-
deleteDocument(id: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
70
|
+
deleteDocument(id: string, signer?: ISigner, signal?: AbortSignal, meta?: Record<string, unknown>): Promise<JobInfo>;
|
|
71
71
|
/**
|
|
72
72
|
* Applies a list of actions to a document
|
|
73
73
|
*/
|
|
74
|
-
|
|
74
|
+
execute(docId: string, branch: string, actions: Action[], signal?: AbortSignal, meta?: Record<string, unknown>): Promise<JobInfo>;
|
|
75
75
|
/**
|
|
76
76
|
* Imports pre-existing operations that were produced by another reactor.
|
|
77
77
|
* This function may cause a reshuffle, which will generate additional
|
|
78
78
|
* operations.
|
|
79
79
|
*/
|
|
80
|
-
load(docId: string, branch: string, operations: Operation[], signal?: AbortSignal): Promise<JobInfo>;
|
|
80
|
+
load(docId: string, branch: string, operations: Operation[], signal?: AbortSignal, meta?: Record<string, unknown>): Promise<JobInfo>;
|
|
81
81
|
/**
|
|
82
82
|
* Applies multiple mutations across documents with dependency management
|
|
83
83
|
*/
|
|
84
|
-
|
|
84
|
+
executeBatch(request: BatchExecutionRequest, signal?: AbortSignal, meta?: Record<string, unknown>): Promise<BatchExecutionResult>;
|
|
85
85
|
/**
|
|
86
86
|
* Adds multiple documents as children to another
|
|
87
87
|
*/
|
|
88
|
-
addChildren(parentId: string, documentIds: string[],
|
|
88
|
+
addChildren(parentId: string, documentIds: string[], branch?: string, signer?: ISigner, signal?: AbortSignal): Promise<JobInfo>;
|
|
89
89
|
/**
|
|
90
90
|
* Removes multiple documents as children from another
|
|
91
91
|
*/
|
|
92
|
-
removeChildren(parentId: string, documentIds: string[],
|
|
92
|
+
removeChildren(parentId: string, documentIds: string[], branch?: string, signer?: ISigner, signal?: AbortSignal): Promise<JobInfo>;
|
|
93
93
|
/**
|
|
94
94
|
* Retrieves the status of a job
|
|
95
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../../src/core/reactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../../src/core/reactor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/reactor.js
CHANGED
|
@@ -3,7 +3,7 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
3
3
|
import { createMutableShutdownStatus } from "../shared/factories.js";
|
|
4
4
|
import { JobStatus } from "../shared/types.js";
|
|
5
5
|
import { matchesScope } from "../shared/utils.js";
|
|
6
|
-
import { filterByType, getSharedScope, toErrorInfo, topologicalSort, validateActionScopes, validateBatchRequest, } from "./utils.js";
|
|
6
|
+
import { filterByType, getSharedScope, signAction, signActions, toErrorInfo, topologicalSort, validateActionScopes, validateBatchRequest, } from "./utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* This class implements the IReactor interface and serves as the main entry point
|
|
9
9
|
* for the new Reactor architecture.
|
|
@@ -81,11 +81,11 @@ export class Reactor {
|
|
|
81
81
|
*/
|
|
82
82
|
async get(id, view, consistencyToken, signal) {
|
|
83
83
|
if (this.features.legacyStorageEnabled) {
|
|
84
|
-
const document = await this.documentStorage.get(id);
|
|
84
|
+
const document = await this.documentStorage.get(id, consistencyToken, signal);
|
|
85
85
|
if (signal?.aborted) {
|
|
86
86
|
throw new AbortError();
|
|
87
87
|
}
|
|
88
|
-
const childIds = await this.documentStorage.getChildren(id);
|
|
88
|
+
const childIds = await this.documentStorage.getChildren(id, consistencyToken, signal);
|
|
89
89
|
if (signal?.aborted) {
|
|
90
90
|
throw new AbortError();
|
|
91
91
|
}
|
|
@@ -122,7 +122,7 @@ export class Reactor {
|
|
|
122
122
|
if (this.features.legacyStorageEnabled) {
|
|
123
123
|
let ids;
|
|
124
124
|
try {
|
|
125
|
-
ids = await this.documentStorage.resolveIds([slug], signal);
|
|
125
|
+
ids = await this.documentStorage.resolveIds([slug], consistencyToken, signal);
|
|
126
126
|
}
|
|
127
127
|
catch (error) {
|
|
128
128
|
if (error instanceof Error && error.message.includes("not found")) {
|
|
@@ -153,7 +153,7 @@ export class Reactor {
|
|
|
153
153
|
}
|
|
154
154
|
catch {
|
|
155
155
|
try {
|
|
156
|
-
const ids = await this.documentStorage.resolveIds([identifier], signal);
|
|
156
|
+
const ids = await this.documentStorage.resolveIds([identifier], consistencyToken, signal);
|
|
157
157
|
if (ids.length === 0 || !ids[0]) {
|
|
158
158
|
throw new Error(`Document not found: ${identifier}`);
|
|
159
159
|
}
|
|
@@ -186,7 +186,7 @@ export class Reactor {
|
|
|
186
186
|
async getOperations(documentId, view, paging, consistencyToken, signal) {
|
|
187
187
|
if (this.features.legacyStorageEnabled) {
|
|
188
188
|
// Use storage directly to get the document
|
|
189
|
-
const document = await this.documentStorage.get(documentId);
|
|
189
|
+
const document = await this.documentStorage.get(documentId, consistencyToken, signal);
|
|
190
190
|
if (signal?.aborted) {
|
|
191
191
|
throw new AbortError();
|
|
192
192
|
}
|
|
@@ -293,7 +293,7 @@ export class Reactor {
|
|
|
293
293
|
/**
|
|
294
294
|
* Creates a document
|
|
295
295
|
*/
|
|
296
|
-
async create(document, signal) {
|
|
296
|
+
async create(document, signer, signal, meta) {
|
|
297
297
|
const createdAtUtcIso = new Date().toISOString();
|
|
298
298
|
if (signal?.aborted) {
|
|
299
299
|
throw new AbortError();
|
|
@@ -301,7 +301,7 @@ export class Reactor {
|
|
|
301
301
|
// Create a CREATE_DOCUMENT action with proper CreateDocumentActionInput
|
|
302
302
|
const input = {
|
|
303
303
|
model: document.header.documentType,
|
|
304
|
-
version:
|
|
304
|
+
version: 0,
|
|
305
305
|
documentId: document.header.id,
|
|
306
306
|
};
|
|
307
307
|
// Add signing info
|
|
@@ -327,8 +327,8 @@ export class Reactor {
|
|
|
327
327
|
// Create an UPGRADE_DOCUMENT action to set the initial state
|
|
328
328
|
const upgradeInput = {
|
|
329
329
|
model: document.header.documentType,
|
|
330
|
-
fromVersion:
|
|
331
|
-
toVersion:
|
|
330
|
+
fromVersion: 0,
|
|
331
|
+
toVersion: 1,
|
|
332
332
|
documentId: document.header.id,
|
|
333
333
|
initialState: document.state,
|
|
334
334
|
};
|
|
@@ -339,6 +339,11 @@ export class Reactor {
|
|
|
339
339
|
timestampUtcMs: new Date().toISOString(),
|
|
340
340
|
input: upgradeInput,
|
|
341
341
|
};
|
|
342
|
+
// Sign actions if signer is provided
|
|
343
|
+
let actions = [createAction, upgradeAction];
|
|
344
|
+
if (signer) {
|
|
345
|
+
actions = await signActions(actions, signer, signal);
|
|
346
|
+
}
|
|
342
347
|
// Create a single job with both CREATE_DOCUMENT and UPGRADE_DOCUMENT actions
|
|
343
348
|
const job = {
|
|
344
349
|
id: uuidv4(),
|
|
@@ -346,12 +351,13 @@ export class Reactor {
|
|
|
346
351
|
documentId: document.header.id,
|
|
347
352
|
scope: "document",
|
|
348
353
|
branch: "main",
|
|
349
|
-
actions
|
|
354
|
+
actions,
|
|
350
355
|
operations: [],
|
|
351
356
|
createdAt: new Date().toISOString(),
|
|
352
357
|
queueHint: [],
|
|
353
358
|
maxRetries: 3,
|
|
354
359
|
errorHistory: [],
|
|
360
|
+
meta,
|
|
355
361
|
};
|
|
356
362
|
// Create job info and register with tracker
|
|
357
363
|
const jobInfo = {
|
|
@@ -363,6 +369,7 @@ export class Reactor {
|
|
|
363
369
|
createdAtUtcIso,
|
|
364
370
|
coordinates: [],
|
|
365
371
|
},
|
|
372
|
+
meta,
|
|
366
373
|
};
|
|
367
374
|
this.jobTracker.registerJob(jobInfo);
|
|
368
375
|
// Enqueue the job
|
|
@@ -372,7 +379,7 @@ export class Reactor {
|
|
|
372
379
|
/**
|
|
373
380
|
* Deletes a document
|
|
374
381
|
*/
|
|
375
|
-
async deleteDocument(id, signal) {
|
|
382
|
+
async deleteDocument(id, signer, signal, meta) {
|
|
376
383
|
const createdAtUtcIso = new Date().toISOString();
|
|
377
384
|
if (signal?.aborted) {
|
|
378
385
|
throw new AbortError();
|
|
@@ -380,13 +387,17 @@ export class Reactor {
|
|
|
380
387
|
const deleteInput = {
|
|
381
388
|
documentId: id,
|
|
382
389
|
};
|
|
383
|
-
|
|
390
|
+
let action = {
|
|
384
391
|
id: `${id}-delete`,
|
|
385
392
|
type: "DELETE_DOCUMENT",
|
|
386
393
|
scope: "document",
|
|
387
394
|
timestampUtcMs: new Date().toISOString(),
|
|
388
395
|
input: deleteInput,
|
|
389
396
|
};
|
|
397
|
+
// Sign action if signer is provided
|
|
398
|
+
if (signer) {
|
|
399
|
+
action = await signAction(action, signer, signal);
|
|
400
|
+
}
|
|
390
401
|
const job = {
|
|
391
402
|
id: uuidv4(),
|
|
392
403
|
kind: "mutation",
|
|
@@ -399,6 +410,7 @@ export class Reactor {
|
|
|
399
410
|
queueHint: [],
|
|
400
411
|
maxRetries: 3,
|
|
401
412
|
errorHistory: [],
|
|
413
|
+
meta,
|
|
402
414
|
};
|
|
403
415
|
const jobInfo = {
|
|
404
416
|
id: job.id,
|
|
@@ -409,6 +421,7 @@ export class Reactor {
|
|
|
409
421
|
createdAtUtcIso,
|
|
410
422
|
coordinates: [],
|
|
411
423
|
},
|
|
424
|
+
meta,
|
|
412
425
|
};
|
|
413
426
|
this.jobTracker.registerJob(jobInfo);
|
|
414
427
|
await this.queue.enqueue(job);
|
|
@@ -417,7 +430,7 @@ export class Reactor {
|
|
|
417
430
|
/**
|
|
418
431
|
* Applies a list of actions to a document
|
|
419
432
|
*/
|
|
420
|
-
async
|
|
433
|
+
async execute(docId, branch, actions, signal, meta) {
|
|
421
434
|
if (signal?.aborted) {
|
|
422
435
|
throw new AbortError();
|
|
423
436
|
}
|
|
@@ -437,6 +450,7 @@ export class Reactor {
|
|
|
437
450
|
queueHint: [],
|
|
438
451
|
maxRetries: 3,
|
|
439
452
|
errorHistory: [],
|
|
453
|
+
meta,
|
|
440
454
|
};
|
|
441
455
|
// Create job info and register with tracker
|
|
442
456
|
const jobInfo = {
|
|
@@ -448,6 +462,7 @@ export class Reactor {
|
|
|
448
462
|
createdAtUtcIso,
|
|
449
463
|
coordinates: [],
|
|
450
464
|
},
|
|
465
|
+
meta,
|
|
451
466
|
};
|
|
452
467
|
this.jobTracker.registerJob(jobInfo);
|
|
453
468
|
// Enqueue the job
|
|
@@ -462,7 +477,7 @@ export class Reactor {
|
|
|
462
477
|
* This function may cause a reshuffle, which will generate additional
|
|
463
478
|
* operations.
|
|
464
479
|
*/
|
|
465
|
-
async load(docId, branch, operations, signal) {
|
|
480
|
+
async load(docId, branch, operations, signal, meta) {
|
|
466
481
|
if (signal?.aborted) {
|
|
467
482
|
throw new AbortError();
|
|
468
483
|
}
|
|
@@ -489,6 +504,7 @@ export class Reactor {
|
|
|
489
504
|
queueHint: [],
|
|
490
505
|
maxRetries: 3,
|
|
491
506
|
errorHistory: [],
|
|
507
|
+
meta,
|
|
492
508
|
};
|
|
493
509
|
const jobInfo = {
|
|
494
510
|
id: job.id,
|
|
@@ -499,6 +515,7 @@ export class Reactor {
|
|
|
499
515
|
createdAtUtcIso,
|
|
500
516
|
coordinates: [],
|
|
501
517
|
},
|
|
518
|
+
meta,
|
|
502
519
|
};
|
|
503
520
|
this.jobTracker.registerJob(jobInfo);
|
|
504
521
|
await this.queue.enqueue(job);
|
|
@@ -510,7 +527,7 @@ export class Reactor {
|
|
|
510
527
|
/**
|
|
511
528
|
* Applies multiple mutations across documents with dependency management
|
|
512
529
|
*/
|
|
513
|
-
async
|
|
530
|
+
async executeBatch(request, signal, meta) {
|
|
514
531
|
if (signal?.aborted) {
|
|
515
532
|
throw new AbortError();
|
|
516
533
|
}
|
|
@@ -535,6 +552,7 @@ export class Reactor {
|
|
|
535
552
|
createdAtUtcIso,
|
|
536
553
|
coordinates: [],
|
|
537
554
|
},
|
|
555
|
+
meta,
|
|
538
556
|
};
|
|
539
557
|
this.jobTracker.registerJob(jobInfo);
|
|
540
558
|
jobInfos.set(jobPlan.key, jobInfo);
|
|
@@ -561,6 +579,7 @@ export class Reactor {
|
|
|
561
579
|
queueHint,
|
|
562
580
|
maxRetries: 3,
|
|
563
581
|
errorHistory: [],
|
|
582
|
+
meta,
|
|
564
583
|
};
|
|
565
584
|
await this.queue.enqueue(job);
|
|
566
585
|
enqueuedKeys.push(key);
|
|
@@ -589,11 +608,11 @@ export class Reactor {
|
|
|
589
608
|
/**
|
|
590
609
|
* Adds multiple documents as children to another
|
|
591
610
|
*/
|
|
592
|
-
async addChildren(parentId, documentIds,
|
|
611
|
+
async addChildren(parentId, documentIds, branch = "main", signer, signal) {
|
|
593
612
|
if (signal?.aborted) {
|
|
594
613
|
throw new AbortError();
|
|
595
614
|
}
|
|
596
|
-
|
|
615
|
+
let actions = documentIds.map((childId) => ({
|
|
597
616
|
id: uuidv4(),
|
|
598
617
|
type: "ADD_RELATIONSHIP",
|
|
599
618
|
scope: "document",
|
|
@@ -604,17 +623,20 @@ export class Reactor {
|
|
|
604
623
|
relationshipType: "child",
|
|
605
624
|
},
|
|
606
625
|
}));
|
|
607
|
-
|
|
608
|
-
|
|
626
|
+
// Sign actions if signer is provided
|
|
627
|
+
if (signer) {
|
|
628
|
+
actions = await signActions(actions, signer, signal);
|
|
629
|
+
}
|
|
630
|
+
return await this.execute(parentId, branch, actions, signal);
|
|
609
631
|
}
|
|
610
632
|
/**
|
|
611
633
|
* Removes multiple documents as children from another
|
|
612
634
|
*/
|
|
613
|
-
async removeChildren(parentId, documentIds,
|
|
635
|
+
async removeChildren(parentId, documentIds, branch = "main", signer, signal) {
|
|
614
636
|
if (signal?.aborted) {
|
|
615
637
|
throw new AbortError();
|
|
616
638
|
}
|
|
617
|
-
|
|
639
|
+
let actions = documentIds.map((childId) => ({
|
|
618
640
|
id: uuidv4(),
|
|
619
641
|
type: "REMOVE_RELATIONSHIP",
|
|
620
642
|
scope: "document",
|
|
@@ -625,8 +647,11 @@ export class Reactor {
|
|
|
625
647
|
relationshipType: "child",
|
|
626
648
|
},
|
|
627
649
|
}));
|
|
628
|
-
|
|
629
|
-
|
|
650
|
+
// Sign actions if signer is provided
|
|
651
|
+
if (signer) {
|
|
652
|
+
actions = await signActions(actions, signer, signal);
|
|
653
|
+
}
|
|
654
|
+
return await this.execute(parentId, branch, actions, signal);
|
|
630
655
|
}
|
|
631
656
|
/**
|
|
632
657
|
* Retrieves the status of a job
|
|
@@ -670,7 +695,7 @@ export class Reactor {
|
|
|
670
695
|
}
|
|
671
696
|
let document;
|
|
672
697
|
try {
|
|
673
|
-
document = await this.documentStorage.get(id);
|
|
698
|
+
document = await this.documentStorage.get(id, consistencyToken, signal);
|
|
674
699
|
}
|
|
675
700
|
catch {
|
|
676
701
|
// Skip documents that don't exist or can't be accessed
|
|
@@ -701,7 +726,7 @@ export class Reactor {
|
|
|
701
726
|
options: paging || { cursor: "0", limit: documents.length },
|
|
702
727
|
nextCursor,
|
|
703
728
|
next: hasMore
|
|
704
|
-
? () => this.findByIds(ids, view, { cursor: nextCursor, limit },
|
|
729
|
+
? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
705
730
|
: undefined,
|
|
706
731
|
};
|
|
707
732
|
}
|
|
@@ -736,7 +761,7 @@ export class Reactor {
|
|
|
736
761
|
options: paging || { cursor: "0", limit: documents.length },
|
|
737
762
|
nextCursor,
|
|
738
763
|
next: hasMore
|
|
739
|
-
? () => this.findByIds(ids, view, { cursor: nextCursor, limit },
|
|
764
|
+
? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
740
765
|
: undefined,
|
|
741
766
|
};
|
|
742
767
|
}
|
|
@@ -753,7 +778,7 @@ export class Reactor {
|
|
|
753
778
|
// Use storage to resolve slugs to IDs
|
|
754
779
|
let ids;
|
|
755
780
|
try {
|
|
756
|
-
ids = await this.documentStorage.resolveIds(slugs, signal);
|
|
781
|
+
ids = await this.documentStorage.resolveIds(slugs, consistencyToken, signal);
|
|
757
782
|
}
|
|
758
783
|
catch {
|
|
759
784
|
// If slug resolution fails, return empty results
|
|
@@ -767,7 +792,7 @@ export class Reactor {
|
|
|
767
792
|
}
|
|
768
793
|
let document;
|
|
769
794
|
try {
|
|
770
|
-
document = await this.documentStorage.get(id);
|
|
795
|
+
document = await this.documentStorage.get(id, consistencyToken, signal);
|
|
771
796
|
}
|
|
772
797
|
catch {
|
|
773
798
|
// Skip documents that don't exist or can't be accessed
|
|
@@ -798,7 +823,7 @@ export class Reactor {
|
|
|
798
823
|
options: paging || { cursor: "0", limit: documents.length },
|
|
799
824
|
nextCursor,
|
|
800
825
|
next: hasMore
|
|
801
|
-
? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit },
|
|
826
|
+
? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
802
827
|
: undefined,
|
|
803
828
|
};
|
|
804
829
|
}
|
|
@@ -844,7 +869,7 @@ export class Reactor {
|
|
|
844
869
|
options: paging || { cursor: "0", limit: documents.length },
|
|
845
870
|
nextCursor,
|
|
846
871
|
next: hasMore
|
|
847
|
-
? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit },
|
|
872
|
+
? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
848
873
|
: undefined,
|
|
849
874
|
};
|
|
850
875
|
}
|
|
@@ -917,7 +942,7 @@ export class Reactor {
|
|
|
917
942
|
const cursor = paging?.cursor;
|
|
918
943
|
const limit = paging?.limit || 100;
|
|
919
944
|
// Get document IDs of the specified type
|
|
920
|
-
const { documents: documentIds, nextCursor } = await this.documentStorage.findByType(type, limit, cursor);
|
|
945
|
+
const { documents: documentIds, nextCursor } = await this.documentStorage.findByType(type, limit, cursor, consistencyToken, signal);
|
|
921
946
|
if (signal?.aborted) {
|
|
922
947
|
throw new AbortError();
|
|
923
948
|
}
|
|
@@ -928,7 +953,7 @@ export class Reactor {
|
|
|
928
953
|
}
|
|
929
954
|
let document;
|
|
930
955
|
try {
|
|
931
|
-
document = await this.documentStorage.get(documentId);
|
|
956
|
+
document = await this.documentStorage.get(documentId, consistencyToken, signal);
|
|
932
957
|
}
|
|
933
958
|
catch {
|
|
934
959
|
// Skip documents that can't be retrieved
|
|
@@ -951,12 +976,12 @@ export class Reactor {
|
|
|
951
976
|
options: paging || { cursor: cursor || "0", limit },
|
|
952
977
|
nextCursor,
|
|
953
978
|
next: nextCursor
|
|
954
|
-
? async () => this.findByType(type, view, { cursor: nextCursor, limit },
|
|
979
|
+
? async () => this.findByType(type, view, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
955
980
|
: undefined,
|
|
956
981
|
};
|
|
957
982
|
}
|
|
958
983
|
else {
|
|
959
|
-
const result = await this.documentView.findByType(type, view, paging,
|
|
984
|
+
const result = await this.documentView.findByType(type, view, paging, consistencyToken, signal);
|
|
960
985
|
if (signal?.aborted) {
|
|
961
986
|
throw new AbortError();
|
|
962
987
|
}
|
|
@@ -967,7 +992,7 @@ export class Reactor {
|
|
|
967
992
|
options: paging || { cursor: cursor || "0", limit },
|
|
968
993
|
nextCursor: result.nextCursor,
|
|
969
994
|
next: result.nextCursor
|
|
970
|
-
? async () => this.findByType(type, view, { cursor: result.nextCursor, limit },
|
|
995
|
+
? async () => this.findByType(type, view, { cursor: result.nextCursor, limit }, consistencyToken, signal)
|
|
971
996
|
: undefined,
|
|
972
997
|
};
|
|
973
998
|
}
|