@powerhousedao/reactor 5.1.0-dev.3 → 5.1.0-dev.31

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.
Files changed (168) hide show
  1. package/dist/src/cache/document-meta-cache-types.d.ts +114 -0
  2. package/dist/src/cache/document-meta-cache-types.d.ts.map +1 -0
  3. package/dist/src/cache/document-meta-cache-types.js +2 -0
  4. package/dist/src/cache/document-meta-cache-types.js.map +1 -0
  5. package/dist/src/cache/document-meta-cache.d.ts +30 -0
  6. package/dist/src/cache/document-meta-cache.d.ts.map +1 -0
  7. package/dist/src/cache/document-meta-cache.js +128 -0
  8. package/dist/src/cache/document-meta-cache.js.map +1 -0
  9. package/dist/src/cache/kysely-operation-index.d.ts +4 -2
  10. package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
  11. package/dist/src/cache/kysely-operation-index.js +54 -0
  12. package/dist/src/cache/kysely-operation-index.js.map +1 -1
  13. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
  14. package/dist/src/cache/kysely-write-cache.js +2 -1
  15. package/dist/src/cache/kysely-write-cache.js.map +1 -1
  16. package/dist/src/cache/operation-index-types.d.ts +3 -2
  17. package/dist/src/cache/operation-index-types.d.ts.map +1 -1
  18. package/dist/src/cache/operation-index-types.js.map +1 -1
  19. package/dist/src/client/reactor-client.d.ts +7 -8
  20. package/dist/src/client/reactor-client.d.ts.map +1 -1
  21. package/dist/src/client/reactor-client.js +48 -45
  22. package/dist/src/client/reactor-client.js.map +1 -1
  23. package/dist/src/client/types.d.ts +10 -10
  24. package/dist/src/client/types.d.ts.map +1 -1
  25. package/dist/src/core/reactor-builder.d.ts +15 -11
  26. package/dist/src/core/reactor-builder.d.ts.map +1 -1
  27. package/dist/src/core/reactor-builder.js +57 -19
  28. package/dist/src/core/reactor-builder.js.map +1 -1
  29. package/dist/src/core/{builder.d.ts → reactor-client-builder.d.ts} +12 -4
  30. package/dist/src/core/reactor-client-builder.d.ts.map +1 -0
  31. package/dist/src/core/{builder.js → reactor-client-builder.js} +44 -23
  32. package/dist/src/core/reactor-client-builder.js.map +1 -0
  33. package/dist/src/core/reactor.d.ts +12 -12
  34. package/dist/src/core/reactor.d.ts.map +1 -1
  35. package/dist/src/core/reactor.js +61 -36
  36. package/dist/src/core/reactor.js.map +1 -1
  37. package/dist/src/core/types.d.ts +49 -14
  38. package/dist/src/core/types.d.ts.map +1 -1
  39. package/dist/src/core/utils.d.ts +9 -1
  40. package/dist/src/core/utils.d.ts.map +1 -1
  41. package/dist/src/core/utils.js +30 -0
  42. package/dist/src/core/utils.js.map +1 -1
  43. package/dist/src/events/types.d.ts +1 -0
  44. package/dist/src/events/types.d.ts.map +1 -1
  45. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
  46. package/dist/src/executor/simple-job-executor-manager.js +1 -0
  47. package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
  48. package/dist/src/executor/simple-job-executor.d.ts +17 -2
  49. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  50. package/dist/src/executor/simple-job-executor.js +283 -192
  51. package/dist/src/executor/simple-job-executor.js.map +1 -1
  52. package/dist/src/executor/util.d.ts +14 -5
  53. package/dist/src/executor/util.d.ts.map +1 -1
  54. package/dist/src/executor/util.js +36 -9
  55. package/dist/src/executor/util.js.map +1 -1
  56. package/dist/src/index.d.ts +12 -5
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +9 -3
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/logging/console.d.ts +13 -0
  61. package/dist/src/logging/console.d.ts.map +1 -0
  62. package/dist/src/logging/console.js +77 -0
  63. package/dist/src/logging/console.js.map +1 -0
  64. package/dist/src/logging/types.d.ts +11 -0
  65. package/dist/src/logging/types.d.ts.map +1 -0
  66. package/dist/src/logging/types.js +2 -0
  67. package/dist/src/logging/types.js.map +1 -0
  68. package/dist/src/queue/types.d.ts +2 -0
  69. package/dist/src/queue/types.d.ts.map +1 -1
  70. package/dist/src/queue/types.js.map +1 -1
  71. package/dist/src/read-models/base-read-model.d.ts +60 -0
  72. package/dist/src/read-models/base-read-model.d.ts.map +1 -0
  73. package/dist/src/read-models/base-read-model.js +143 -0
  74. package/dist/src/read-models/base-read-model.js.map +1 -0
  75. package/dist/src/read-models/coordinator.d.ts +3 -1
  76. package/dist/src/read-models/coordinator.d.ts.map +1 -1
  77. package/dist/src/read-models/coordinator.js +8 -7
  78. package/dist/src/read-models/coordinator.js.map +1 -1
  79. package/dist/src/read-models/document-view.d.ts +6 -7
  80. package/dist/src/read-models/document-view.d.ts.map +1 -1
  81. package/dist/src/read-models/document-view.js +16 -81
  82. package/dist/src/read-models/document-view.js.map +1 -1
  83. package/dist/src/read-models/types.d.ts +2 -1
  84. package/dist/src/read-models/types.d.ts.map +1 -1
  85. package/dist/src/registry/implementation.d.ts +42 -34
  86. package/dist/src/registry/implementation.d.ts.map +1 -1
  87. package/dist/src/registry/implementation.js +168 -48
  88. package/dist/src/registry/implementation.js.map +1 -1
  89. package/dist/src/registry/interfaces.d.ts +69 -8
  90. package/dist/src/registry/interfaces.d.ts.map +1 -1
  91. package/dist/src/shared/errors.d.ts +24 -0
  92. package/dist/src/shared/errors.d.ts.map +1 -1
  93. package/dist/src/shared/errors.js +42 -0
  94. package/dist/src/shared/errors.js.map +1 -1
  95. package/dist/src/shared/types.d.ts +4 -0
  96. package/dist/src/shared/types.d.ts.map +1 -1
  97. package/dist/src/shared/types.js.map +1 -1
  98. package/dist/src/signer/passthrough-signer.d.ts +9 -3
  99. package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
  100. package/dist/src/signer/passthrough-signer.js +13 -0
  101. package/dist/src/signer/passthrough-signer.js.map +1 -1
  102. package/dist/src/signer/types.d.ts +12 -10
  103. package/dist/src/signer/types.d.ts.map +1 -1
  104. package/dist/src/storage/consistency-aware-legacy-storage.d.ts +33 -0
  105. package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +1 -0
  106. package/dist/src/storage/consistency-aware-legacy-storage.js +65 -0
  107. package/dist/src/storage/consistency-aware-legacy-storage.js.map +1 -0
  108. package/dist/src/storage/interfaces.d.ts +81 -0
  109. package/dist/src/storage/interfaces.d.ts.map +1 -1
  110. package/dist/src/storage/interfaces.js.map +1 -1
  111. package/dist/src/storage/kysely/store.d.ts.map +1 -1
  112. package/dist/src/storage/kysely/store.js +1 -0
  113. package/dist/src/storage/kysely/store.js.map +1 -1
  114. package/dist/src/storage/migrations/008_create_view_state_table.d.ts +1 -1
  115. package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -1
  116. package/dist/src/storage/migrations/008_create_view_state_table.js +2 -1
  117. package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -1
  118. package/dist/src/storage/migrations/run-migrations.js +3 -3
  119. package/dist/src/storage/migrations/run-migrations.js.map +1 -1
  120. package/dist/src/subs/subscription-notification-read-model.d.ts +16 -0
  121. package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -0
  122. package/dist/src/subs/subscription-notification-read-model.js +51 -0
  123. package/dist/src/subs/subscription-notification-read-model.js.map +1 -0
  124. package/dist/src/sync/channels/composite-channel-factory.d.ts +27 -0
  125. package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -0
  126. package/dist/src/sync/channels/composite-channel-factory.js +83 -0
  127. package/dist/src/sync/channels/composite-channel-factory.js.map +1 -0
  128. package/dist/src/sync/channels/gql-channel-factory.d.ts +2 -2
  129. package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -1
  130. package/dist/src/sync/channels/gql-channel-factory.js +3 -1
  131. package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
  132. package/dist/src/sync/channels/gql-channel.d.ts +21 -0
  133. package/dist/src/sync/channels/gql-channel.d.ts.map +1 -1
  134. package/dist/src/sync/channels/gql-channel.js +108 -13
  135. package/dist/src/sync/channels/gql-channel.js.map +1 -1
  136. package/dist/src/sync/channels/index.d.ts +2 -1
  137. package/dist/src/sync/channels/index.d.ts.map +1 -1
  138. package/dist/src/sync/channels/index.js +2 -1
  139. package/dist/src/sync/channels/index.js.map +1 -1
  140. package/dist/src/sync/channels/polling-channel.d.ts +39 -0
  141. package/dist/src/sync/channels/polling-channel.d.ts.map +1 -0
  142. package/dist/src/sync/channels/polling-channel.js +70 -0
  143. package/dist/src/sync/channels/polling-channel.js.map +1 -0
  144. package/dist/src/sync/channels/utils.d.ts +4 -2
  145. package/dist/src/sync/channels/utils.d.ts.map +1 -1
  146. package/dist/src/sync/channels/utils.js +52 -6
  147. package/dist/src/sync/channels/utils.js.map +1 -1
  148. package/dist/src/sync/errors.d.ts +1 -1
  149. package/dist/src/sync/errors.d.ts.map +1 -1
  150. package/dist/src/sync/errors.js +2 -2
  151. package/dist/src/sync/errors.js.map +1 -1
  152. package/dist/src/sync/index.d.ts +2 -2
  153. package/dist/src/sync/index.d.ts.map +1 -1
  154. package/dist/src/sync/index.js +2 -2
  155. package/dist/src/sync/index.js.map +1 -1
  156. package/dist/src/sync/interfaces.d.ts +16 -1
  157. package/dist/src/sync/interfaces.d.ts.map +1 -1
  158. package/dist/src/sync/sync-manager.d.ts +1 -0
  159. package/dist/src/sync/sync-manager.d.ts.map +1 -1
  160. package/dist/src/sync/sync-manager.js +52 -4
  161. package/dist/src/sync/sync-manager.js.map +1 -1
  162. package/package.json +4 -4
  163. package/dist/src/core/builder.d.ts.map +0 -1
  164. package/dist/src/core/builder.js.map +0 -1
  165. package/dist/src/sync/channels/internal-channel.d.ts +0 -57
  166. package/dist/src/sync/channels/internal-channel.d.ts.map +0 -1
  167. package/dist/src/sync/channels/internal-channel.js +0 -106
  168. 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
- withSigner(signer) {
40
- this.signer = signer;
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
- reactor = await this.reactorBuilder.build();
57
- const builderEventBus = this.reactorBuilder.events;
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
- eventBus = builderEventBus;
66
- documentIndexer = builderDocumentIndexer;
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
- if (!this.signer) {
77
- this.signer = new PassthroughSigner();
78
- }
79
- if (!this.subscriptionManager) {
80
- this.subscriptionManager = new ReactorSubscriptionManager(new DefaultSubscriptionErrorHandler());
81
- }
82
- if (!this.jobAwaiter) {
83
- this.jobAwaiter = new JobAwaiter(eventBus, (jobId, signal) => reactor.getJobStatus(jobId, signal));
84
- }
85
- return new ReactorClient(reactor, this.signer, this.subscriptionManager, this.jobAwaiter, documentIndexer);
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, IDocumentStorage } from "document-drive";
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 { BatchMutationRequest, BatchMutationResult, IReactor, ReactorFeatures } from "./types.js";
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: IDocumentStorage, queue: IQueue, jobTracker: IJobTracker, readModelCoordinator: IReadModelCoordinator, features: ReactorFeatures, documentView: IDocumentView, documentIndexer: IDocumentIndexer, operationStore: IOperationStore);
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
- mutate(docId: string, branch: string, actions: Action[], signal?: AbortSignal): Promise<JobInfo>;
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
- mutateBatch(request: BatchMutationRequest, signal?: AbortSignal): Promise<BatchMutationResult>;
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[], _view?: ViewFilter, signal?: AbortSignal): Promise<JobInfo>;
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[], _view?: ViewFilter, signal?: AbortSignal): Promise<JobInfo>;
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":"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"}
1
+ {"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../../src/core/reactor.ts"],"names":[],"mappings":"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"}
@@ -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: "0.0.0",
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: "0.0.0",
331
- toVersion: "0.0.0", // Same version since we're just setting initial state
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: [createAction, upgradeAction],
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
- const action = {
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 mutate(docId, branch, actions, signal) {
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 mutateBatch(request, signal) {
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, _view, signal) {
611
+ async addChildren(parentId, documentIds, branch = "main", signer, signal) {
593
612
  if (signal?.aborted) {
594
613
  throw new AbortError();
595
614
  }
596
- const actions = documentIds.map((childId) => ({
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
- const branch = _view?.branch || "main";
608
- return await this.mutate(parentId, branch, actions, signal);
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, _view, signal) {
635
+ async removeChildren(parentId, documentIds, branch = "main", signer, signal) {
614
636
  if (signal?.aborted) {
615
637
  throw new AbortError();
616
638
  }
617
- const actions = documentIds.map((childId) => ({
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
- const branch = _view?.branch || "main";
629
- return await this.mutate(parentId, branch, actions, signal);
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 }, undefined, signal)
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 }, undefined, signal)
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 }, undefined, signal)
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 }, undefined, signal)
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 }, undefined, signal)
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, undefined, signal);
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 }, undefined, signal)
995
+ ? async () => this.findByType(type, view, { cursor: result.nextCursor, limit }, consistencyToken, signal)
971
996
  : undefined,
972
997
  };
973
998
  }