@powerhousedao/reactor 4.1.0-dev.8 → 4.1.0-dev.80

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 (198) hide show
  1. package/dist/src/client/reactor-client.d.ts +103 -0
  2. package/dist/src/client/reactor-client.d.ts.map +1 -0
  3. package/dist/src/client/reactor-client.js +184 -0
  4. package/dist/src/client/reactor-client.js.map +1 -0
  5. package/dist/src/client/types.d.ts +213 -0
  6. package/dist/src/client/types.d.ts.map +1 -0
  7. package/dist/src/client/types.js +14 -0
  8. package/dist/src/client/types.js.map +1 -0
  9. package/dist/src/core/builder.d.ts +20 -0
  10. package/dist/src/core/builder.d.ts.map +1 -0
  11. package/dist/src/core/builder.js +47 -0
  12. package/dist/src/core/builder.js.map +1 -0
  13. package/dist/src/core/reactor.d.ts +92 -0
  14. package/dist/src/core/reactor.d.ts.map +1 -0
  15. package/dist/src/core/reactor.js +647 -0
  16. package/dist/src/core/reactor.js.map +1 -0
  17. package/dist/src/core/types.d.ts +121 -0
  18. package/dist/src/core/types.d.ts.map +1 -0
  19. package/dist/src/core/types.js +2 -0
  20. package/dist/src/core/types.js.map +1 -0
  21. package/dist/src/core/utils.d.ts +11 -0
  22. package/dist/src/core/utils.d.ts.map +1 -0
  23. package/dist/src/core/utils.js +31 -0
  24. package/dist/src/core/utils.js.map +1 -0
  25. package/dist/src/events/event-bus.d.ts +3 -3
  26. package/dist/src/events/event-bus.d.ts.map +1 -1
  27. package/dist/src/events/event-bus.js.map +1 -1
  28. package/dist/src/events/interfaces.d.ts +1 -1
  29. package/dist/src/events/interfaces.d.ts.map +1 -1
  30. package/dist/src/events/types.d.ts +15 -1
  31. package/dist/src/events/types.d.ts.map +1 -1
  32. package/dist/src/events/types.js +6 -0
  33. package/dist/src/events/types.js.map +1 -1
  34. package/dist/src/executor/interfaces.d.ts +31 -54
  35. package/dist/src/executor/interfaces.d.ts.map +1 -1
  36. package/dist/src/executor/simple-job-executor-manager.d.ts +30 -0
  37. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  38. package/dist/src/executor/simple-job-executor-manager.js +178 -0
  39. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  40. package/dist/src/executor/simple-job-executor.d.ts +60 -0
  41. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  42. package/dist/src/executor/simple-job-executor.js +537 -0
  43. package/dist/src/executor/simple-job-executor.js.map +1 -0
  44. package/dist/src/executor/types.d.ts +24 -8
  45. package/dist/src/executor/types.d.ts.map +1 -1
  46. package/dist/src/executor/types.js.map +1 -1
  47. package/dist/src/index.d.ts +26 -3
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +33 -2
  50. package/dist/src/index.js.map +1 -1
  51. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +15 -0
  52. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  53. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  54. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  55. package/dist/src/job-tracker/index.d.ts +3 -0
  56. package/dist/src/job-tracker/index.d.ts.map +1 -0
  57. package/dist/src/job-tracker/index.js +2 -0
  58. package/dist/src/job-tracker/index.js.map +1 -0
  59. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  60. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  61. package/dist/src/job-tracker/interfaces.js +2 -0
  62. package/dist/src/job-tracker/interfaces.js.map +1 -0
  63. package/dist/src/queue/interfaces.d.ts +45 -5
  64. package/dist/src/queue/interfaces.d.ts.map +1 -1
  65. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  66. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  67. package/dist/src/queue/job-execution-handle.js +62 -0
  68. package/dist/src/queue/job-execution-handle.js.map +1 -0
  69. package/dist/src/queue/queue.d.ts +54 -5
  70. package/dist/src/queue/queue.d.ts.map +1 -1
  71. package/dist/src/queue/queue.js +265 -36
  72. package/dist/src/queue/queue.js.map +1 -1
  73. package/dist/src/queue/types.d.ts +30 -5
  74. package/dist/src/queue/types.d.ts.map +1 -1
  75. package/dist/src/queue/types.js +12 -0
  76. package/dist/src/queue/types.js.map +1 -1
  77. package/dist/src/read-models/coordinator.d.ts +38 -0
  78. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  79. package/dist/src/read-models/coordinator.js +62 -0
  80. package/dist/src/read-models/coordinator.js.map +1 -0
  81. package/dist/src/read-models/document-view.d.ts +20 -0
  82. package/dist/src/read-models/document-view.d.ts.map +1 -0
  83. package/dist/src/read-models/document-view.js +363 -0
  84. package/dist/src/read-models/document-view.js.map +1 -0
  85. package/dist/src/read-models/interfaces.d.ts +29 -0
  86. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  87. package/dist/src/read-models/interfaces.js +2 -0
  88. package/dist/src/read-models/interfaces.js.map +1 -0
  89. package/dist/src/read-models/types.d.ts +46 -0
  90. package/dist/src/read-models/types.d.ts.map +1 -0
  91. package/dist/src/read-models/types.js +2 -0
  92. package/dist/src/read-models/types.js.map +1 -0
  93. package/dist/src/registry/implementation.d.ts +62 -0
  94. package/dist/src/registry/implementation.d.ts.map +1 -0
  95. package/dist/src/registry/implementation.js +96 -0
  96. package/dist/src/registry/implementation.js.map +1 -0
  97. package/dist/src/registry/index.d.ts +3 -0
  98. package/dist/src/registry/index.d.ts.map +1 -0
  99. package/dist/src/registry/index.js +2 -0
  100. package/dist/src/registry/index.js.map +1 -0
  101. package/dist/src/registry/interfaces.d.ts +39 -0
  102. package/dist/src/registry/interfaces.d.ts.map +1 -0
  103. package/dist/src/registry/interfaces.js +2 -0
  104. package/dist/src/registry/interfaces.js.map +1 -0
  105. package/dist/src/shared/awaiter.d.ts +32 -0
  106. package/dist/src/shared/awaiter.d.ts.map +1 -0
  107. package/dist/src/shared/awaiter.js +132 -0
  108. package/dist/src/shared/awaiter.js.map +1 -0
  109. package/dist/src/shared/errors.d.ts +9 -0
  110. package/dist/src/shared/errors.d.ts.map +1 -0
  111. package/dist/src/shared/errors.js +18 -0
  112. package/dist/src/shared/errors.js.map +1 -0
  113. package/dist/src/shared/factories.d.ts +16 -0
  114. package/dist/src/shared/factories.d.ts.map +1 -0
  115. package/dist/src/shared/factories.js +33 -0
  116. package/dist/src/shared/factories.js.map +1 -0
  117. package/dist/src/shared/types.d.ts +91 -19
  118. package/dist/src/shared/types.d.ts.map +1 -1
  119. package/dist/src/shared/types.js +35 -1
  120. package/dist/src/shared/types.js.map +1 -1
  121. package/dist/src/shared/utils.d.ts +3 -0
  122. package/dist/src/shared/utils.d.ts.map +1 -0
  123. package/dist/src/shared/utils.js +8 -0
  124. package/dist/src/shared/utils.js.map +1 -0
  125. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  126. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  127. package/dist/src/signer/passthrough-signer.js +6 -0
  128. package/dist/src/signer/passthrough-signer.js.map +1 -0
  129. package/dist/src/signer/types.d.ts +15 -0
  130. package/dist/src/signer/types.d.ts.map +1 -0
  131. package/dist/src/signer/types.js +2 -0
  132. package/dist/src/signer/types.js.map +1 -0
  133. package/dist/src/storage/interfaces.d.ts +108 -0
  134. package/dist/src/storage/interfaces.d.ts.map +1 -0
  135. package/dist/src/storage/interfaces.js +19 -0
  136. package/dist/src/storage/interfaces.js.map +1 -0
  137. package/dist/src/storage/kysely/store.d.ts +15 -0
  138. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  139. package/dist/src/storage/kysely/store.js +197 -0
  140. package/dist/src/storage/kysely/store.js.map +1 -0
  141. package/dist/src/storage/kysely/types.d.ts +26 -0
  142. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  143. package/dist/src/storage/kysely/types.js +2 -0
  144. package/dist/src/storage/kysely/types.js.map +1 -0
  145. package/dist/src/storage/txn.d.ts +15 -0
  146. package/dist/src/storage/txn.d.ts.map +1 -0
  147. package/dist/src/storage/txn.js +42 -0
  148. package/dist/src/storage/txn.js.map +1 -0
  149. package/dist/src/subs/default-error-handler.d.ts +13 -0
  150. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  151. package/dist/src/subs/default-error-handler.js +27 -0
  152. package/dist/src/subs/default-error-handler.js.map +1 -0
  153. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  154. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  155. package/dist/src/subs/react-subscription-manager.js +185 -0
  156. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  157. package/dist/src/subs/types.d.ts +64 -0
  158. package/dist/src/subs/types.d.ts.map +1 -0
  159. package/dist/src/subs/types.js +2 -0
  160. package/dist/src/subs/types.js.map +1 -0
  161. package/dist/src/utils/reshuffle.d.ts +30 -0
  162. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  163. package/dist/src/utils/reshuffle.js +47 -0
  164. package/dist/src/utils/reshuffle.js.map +1 -0
  165. package/package.json +15 -6
  166. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  167. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  168. package/dist/bench/end-to-end-flow.bench.js +0 -256
  169. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  170. package/dist/bench/event-bus.bench.d.ts +0 -2
  171. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  172. package/dist/bench/event-bus.bench.js +0 -238
  173. package/dist/bench/event-bus.bench.js.map +0 -1
  174. package/dist/bench/queue-only.bench.d.ts +0 -2
  175. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  176. package/dist/bench/queue-only.bench.js +0 -40
  177. package/dist/bench/queue-only.bench.js.map +0 -1
  178. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  179. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  180. package/dist/bench/reactor-throughput.bench.js +0 -137
  181. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  182. package/dist/src/executor/job-executor.d.ts +0 -62
  183. package/dist/src/executor/job-executor.d.ts.map +0 -1
  184. package/dist/src/executor/job-executor.js +0 -325
  185. package/dist/src/executor/job-executor.js.map +0 -1
  186. package/dist/test/event-bus.test.d.ts +0 -2
  187. package/dist/test/event-bus.test.d.ts.map +0 -1
  188. package/dist/test/event-bus.test.js +0 -532
  189. package/dist/test/event-bus.test.js.map +0 -1
  190. package/dist/test/job-executor.test.d.ts +0 -2
  191. package/dist/test/job-executor.test.d.ts.map +0 -1
  192. package/dist/test/job-executor.test.js +0 -581
  193. package/dist/test/job-executor.test.js.map +0 -1
  194. package/dist/test/queue.test.d.ts +0 -2
  195. package/dist/test/queue.test.d.ts.map +0 -1
  196. package/dist/test/queue.test.js +0 -396
  197. package/dist/test/queue.test.js.map +0 -1
  198. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,60 @@
1
+ import type { IDocumentOperationStorage, IDocumentStorage } from "document-drive";
2
+ import type { IEventBus } from "../events/interfaces.js";
3
+ import type { Job } from "../queue/types.js";
4
+ import type { IDocumentModelRegistry } from "../registry/interfaces.js";
5
+ import type { IOperationStore } from "../storage/interfaces.js";
6
+ import type { IJobExecutor } from "./interfaces.js";
7
+ import type { JobResult } from "./types.js";
8
+ /**
9
+ * Simple job executor that processes a job by applying actions through document model reducers.
10
+ *
11
+ * @see docs/planning/Storage/IOperationStore.md for storage schema
12
+ * @see docs/planning/Operations/index.md for operation structure
13
+ * @see docs/planning/Jobs/reshuffle.md for skip mechanism details
14
+ */
15
+ export declare class SimpleJobExecutor implements IJobExecutor {
16
+ private registry;
17
+ private documentStorage;
18
+ private operationStorage;
19
+ private operationStore;
20
+ private eventBus;
21
+ constructor(registry: IDocumentModelRegistry, documentStorage: IDocumentStorage, operationStorage: IDocumentOperationStorage, operationStore: IOperationStore, eventBus: IEventBus);
22
+ /**
23
+ * Calculate the next operation index for a specific scope.
24
+ * Each scope maintains its own independent index sequence.
25
+ *
26
+ * Per-scope indexing means:
27
+ * - Each scope (document, global, local, etc.) has independent indexes
28
+ * - Indexes start at 0 for each scope
29
+ * - Different scopes can have operations with the same index value
30
+ *
31
+ * @param document - The document whose operations to inspect
32
+ * @param scope - The scope to calculate the next index for
33
+ * @returns The next available index in the specified scope
34
+ */
35
+ private getNextIndexForScope;
36
+ /**
37
+ * Execute a single job by applying all its actions through the appropriate reducers.
38
+ * Actions are processed sequentially in order.
39
+ */
40
+ executeJob(job: Job): Promise<JobResult>;
41
+ /**
42
+ * Execute a CREATE_DOCUMENT system action.
43
+ * This creates a new document in storage along with its initial operation.
44
+ * For a new document, the operation index is always 0.
45
+ */
46
+ private executeCreateDocumentAction;
47
+ /**
48
+ * Execute a DELETE_DOCUMENT system action.
49
+ * This deletes a document from legacy storage and writes the operation to IOperationStore.
50
+ * The operation index is determined from the document's current operation count.
51
+ */
52
+ private executeDeleteDocumentAction;
53
+ /**
54
+ * Execute an UPGRADE_DOCUMENT system action.
55
+ * This sets the document's initial state from the upgrade action.
56
+ * The operation index is determined from the document's current operation count.
57
+ */
58
+ private executeUpgradeDocumentAction;
59
+ }
60
+ //# sourceMappingURL=simple-job-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-job-executor.d.ts","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAElD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;gBAJR,QAAQ,EAAE,sBAAsB,EAChC,eAAe,EAAE,gBAAgB,EACjC,gBAAgB,EAAE,yBAAyB,EAC3C,cAAc,EAAE,eAAe,EAC/B,QAAQ,EAAE,SAAS;IAG7B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IAkM9C;;;;OAIG;YACW,2BAA2B;IA0JzC;;;;OAIG;YACW,2BAA2B;IAkJzC;;;;OAIG;YACW,4BAA4B;CAsJ3C"}
@@ -0,0 +1,537 @@
1
+ import { createPresignedHeader, defaultBaseState } from "document-model/core";
2
+ import { OperationEventTypes } from "../events/types.js";
3
+ import { DocumentDeletedError } from "../shared/errors.js";
4
+ /**
5
+ * Simple job executor that processes a job by applying actions through document model reducers.
6
+ *
7
+ * @see docs/planning/Storage/IOperationStore.md for storage schema
8
+ * @see docs/planning/Operations/index.md for operation structure
9
+ * @see docs/planning/Jobs/reshuffle.md for skip mechanism details
10
+ */
11
+ export class SimpleJobExecutor {
12
+ registry;
13
+ documentStorage;
14
+ operationStorage;
15
+ operationStore;
16
+ eventBus;
17
+ constructor(registry, documentStorage, operationStorage, operationStore, eventBus) {
18
+ this.registry = registry;
19
+ this.documentStorage = documentStorage;
20
+ this.operationStorage = operationStorage;
21
+ this.operationStore = operationStore;
22
+ this.eventBus = eventBus;
23
+ }
24
+ /**
25
+ * Calculate the next operation index for a specific scope.
26
+ * Each scope maintains its own independent index sequence.
27
+ *
28
+ * Per-scope indexing means:
29
+ * - Each scope (document, global, local, etc.) has independent indexes
30
+ * - Indexes start at 0 for each scope
31
+ * - Different scopes can have operations with the same index value
32
+ *
33
+ * @param document - The document whose operations to inspect
34
+ * @param scope - The scope to calculate the next index for
35
+ * @returns The next available index in the specified scope
36
+ */
37
+ getNextIndexForScope(document, scope) {
38
+ const scopeOps = document.operations[scope];
39
+ if (scopeOps.length === 0) {
40
+ return 0;
41
+ }
42
+ // Find the highest index in this scope
43
+ let maxIndex = -1;
44
+ for (const op of scopeOps) {
45
+ if (op.index > maxIndex) {
46
+ maxIndex = op.index;
47
+ }
48
+ }
49
+ return maxIndex + 1;
50
+ }
51
+ /**
52
+ * Execute a single job by applying all its actions through the appropriate reducers.
53
+ * Actions are processed sequentially in order.
54
+ */
55
+ async executeJob(job) {
56
+ const startTime = Date.now();
57
+ const generatedOperations = [];
58
+ const operationsWithContext = [];
59
+ // Process each action in the job sequentially
60
+ for (const action of job.actions) {
61
+ // Handle system actions specially (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
62
+ if (action.type === "CREATE_DOCUMENT") {
63
+ const result = await this.executeCreateDocumentAction(job, action, startTime);
64
+ if (!result.success) {
65
+ return result;
66
+ }
67
+ if (result.operations && result.operations.length > 0) {
68
+ generatedOperations.push(...result.operations);
69
+ }
70
+ if (result.operationsWithContext) {
71
+ operationsWithContext.push(...result.operationsWithContext);
72
+ }
73
+ continue;
74
+ }
75
+ if (action.type === "DELETE_DOCUMENT") {
76
+ const result = await this.executeDeleteDocumentAction(job, action, startTime);
77
+ if (!result.success) {
78
+ return result;
79
+ }
80
+ if (result.operations && result.operations.length > 0) {
81
+ generatedOperations.push(...result.operations);
82
+ }
83
+ if (result.operationsWithContext) {
84
+ operationsWithContext.push(...result.operationsWithContext);
85
+ }
86
+ continue;
87
+ }
88
+ if (action.type === "UPGRADE_DOCUMENT") {
89
+ const result = await this.executeUpgradeDocumentAction(job, action, startTime);
90
+ if (!result.success) {
91
+ return result;
92
+ }
93
+ if (result.operations && result.operations.length > 0) {
94
+ generatedOperations.push(...result.operations);
95
+ }
96
+ if (result.operationsWithContext) {
97
+ operationsWithContext.push(...result.operationsWithContext);
98
+ }
99
+ continue;
100
+ }
101
+ // For regular actions, load the document and apply through reducer
102
+ let document;
103
+ try {
104
+ document = await this.documentStorage.get(job.documentId);
105
+ }
106
+ catch (error) {
107
+ return {
108
+ job,
109
+ success: false,
110
+ error: error instanceof Error ? error : new Error(String(error)),
111
+ duration: Date.now() - startTime,
112
+ };
113
+ }
114
+ // Check if document is deleted
115
+ const documentState = document.state.document;
116
+ if (documentState.isDeleted) {
117
+ return {
118
+ job,
119
+ success: false,
120
+ error: new DocumentDeletedError(job.documentId, documentState.deletedAtUtcIso),
121
+ duration: Date.now() - startTime,
122
+ };
123
+ }
124
+ let module;
125
+ try {
126
+ module = this.registry.getModule(document.header.documentType);
127
+ }
128
+ catch (error) {
129
+ return {
130
+ job,
131
+ success: false,
132
+ error: error instanceof Error ? error : new Error(String(error)),
133
+ duration: Date.now() - startTime,
134
+ };
135
+ }
136
+ // Reducer assigns index based on document's current operation count
137
+ const updatedDocument = module.reducer(document, action);
138
+ const scope = job.scope;
139
+ const operations = updatedDocument.operations[scope];
140
+ if (operations.length === 0) {
141
+ throw new Error("No operation generated from action");
142
+ }
143
+ const newOperation = operations[operations.length - 1];
144
+ generatedOperations.push(newOperation);
145
+ // Write the operation to legacy storage
146
+ try {
147
+ await this.operationStorage.addDocumentOperations(job.documentId, [newOperation], updatedDocument);
148
+ }
149
+ catch (error) {
150
+ return {
151
+ job,
152
+ success: false,
153
+ error: error instanceof Error ? error : new Error(String(error)),
154
+ duration: Date.now() - startTime,
155
+ };
156
+ }
157
+ // save the whole state
158
+ newOperation.resultingState = JSON.stringify(updatedDocument.state);
159
+ // Write the operation to new IOperationStore (dual-writing)
160
+ try {
161
+ await this.operationStore.apply(job.documentId, document.header.documentType, scope, job.branch, newOperation.index, (txn) => {
162
+ txn.addOperations(newOperation);
163
+ });
164
+ }
165
+ catch (error) {
166
+ return {
167
+ job,
168
+ success: false,
169
+ error: new Error(`Failed to write operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
170
+ duration: Date.now() - startTime,
171
+ };
172
+ }
173
+ operationsWithContext.push({
174
+ operation: newOperation,
175
+ context: {
176
+ documentId: job.documentId,
177
+ scope,
178
+ branch: job.branch,
179
+ documentType: document.header.documentType,
180
+ },
181
+ });
182
+ }
183
+ // Emit event for read models with all operations - fire and forget, don't block
184
+ // Read model indexing happens asynchronously
185
+ if (operationsWithContext.length > 0) {
186
+ this.eventBus
187
+ .emit(OperationEventTypes.OPERATION_WRITTEN, {
188
+ operations: operationsWithContext,
189
+ })
190
+ .catch(() => {
191
+ // Swallow error - read models are eventually consistent
192
+ });
193
+ }
194
+ return {
195
+ job,
196
+ success: true,
197
+ operations: generatedOperations,
198
+ duration: Date.now() - startTime,
199
+ };
200
+ }
201
+ /**
202
+ * Execute a CREATE_DOCUMENT system action.
203
+ * This creates a new document in storage along with its initial operation.
204
+ * For a new document, the operation index is always 0.
205
+ */
206
+ async executeCreateDocumentAction(job, action, startTime) {
207
+ const input = action.input;
208
+ // Reconstruct the document from CreateDocumentActionInput
209
+ const header = createPresignedHeader();
210
+ header.id = input.documentId;
211
+ header.documentType = input.model;
212
+ // If signing info is present, populate the header signature fields
213
+ if (input.signing) {
214
+ header.createdAtUtcIso = input.signing.createdAtUtcIso;
215
+ header.lastModifiedAtUtcIso = input.signing.createdAtUtcIso;
216
+ header.sig = {
217
+ publicKey: input.signing.publicKey,
218
+ nonce: input.signing.nonce,
219
+ };
220
+ }
221
+ // Populate optional mutable header fields
222
+ if (input.slug !== undefined) {
223
+ header.slug = input.slug;
224
+ }
225
+ // Default slug to document ID if empty (matching legacy behavior)
226
+ if (!header.slug) {
227
+ header.slug = input.documentId;
228
+ }
229
+ if (input.name !== undefined) {
230
+ header.name = input.name;
231
+ }
232
+ if (input.branch !== undefined) {
233
+ header.branch = input.branch;
234
+ }
235
+ if (input.meta !== undefined) {
236
+ header.meta = input.meta;
237
+ }
238
+ // Construct the document with default base state (UPGRADE_DOCUMENT will set the full state)
239
+ const baseState = defaultBaseState();
240
+ const document = {
241
+ header,
242
+ operations: {},
243
+ state: baseState,
244
+ initialState: baseState,
245
+ clipboard: [],
246
+ };
247
+ // Legacy: Store the document in storage
248
+ try {
249
+ await this.documentStorage.create(document);
250
+ }
251
+ catch (error) {
252
+ return {
253
+ job,
254
+ success: false,
255
+ error: new Error(`Failed to create document in storage: ${error instanceof Error ? error.message : String(error)}`),
256
+ duration: Date.now() - startTime,
257
+ };
258
+ }
259
+ // Create the operation with index 0 (first operation for a new document)
260
+ const operation = {
261
+ index: 0,
262
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
263
+ hash: "", // Will be computed later
264
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
265
+ action: action,
266
+ };
267
+ // Legacy: Write the CREATE_DOCUMENT operation to legacy storage
268
+ try {
269
+ await this.operationStorage.addDocumentOperations(document.header.id, [operation], document);
270
+ }
271
+ catch (error) {
272
+ return {
273
+ job,
274
+ success: false,
275
+ error: new Error(`Failed to write CREATE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`),
276
+ duration: Date.now() - startTime,
277
+ };
278
+ }
279
+ // Populate resultingState with the document's state for read model indexing
280
+ // Include header and all scopes present in the document state (auth, document, etc.)
281
+ // but not global/local which aren't initialized by CREATE_DOCUMENT
282
+ const resultingState = {
283
+ header: document.header,
284
+ ...document.state,
285
+ };
286
+ operation.resultingState = JSON.stringify(resultingState);
287
+ // Write the operation to new IOperationStore (dual-writing)
288
+ try {
289
+ await this.operationStore.apply(document.header.id, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
290
+ txn.addOperations(operation);
291
+ });
292
+ }
293
+ catch (error) {
294
+ return {
295
+ job,
296
+ success: false,
297
+ error: new Error(`Failed to write CREATE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
298
+ duration: Date.now() - startTime,
299
+ };
300
+ }
301
+ return {
302
+ job,
303
+ success: true,
304
+ operations: [operation],
305
+ operationsWithContext: [
306
+ {
307
+ operation,
308
+ context: {
309
+ documentId: document.header.id,
310
+ scope: job.scope,
311
+ branch: job.branch,
312
+ documentType: document.header.documentType,
313
+ },
314
+ },
315
+ ],
316
+ duration: Date.now() - startTime,
317
+ };
318
+ }
319
+ /**
320
+ * Execute a DELETE_DOCUMENT system action.
321
+ * This deletes a document from legacy storage and writes the operation to IOperationStore.
322
+ * The operation index is determined from the document's current operation count.
323
+ */
324
+ async executeDeleteDocumentAction(job, action, startTime) {
325
+ const input = action.input;
326
+ if (!input.documentId) {
327
+ return {
328
+ job,
329
+ success: false,
330
+ error: new Error("DELETE_DOCUMENT action requires a documentId in input"),
331
+ duration: Date.now() - startTime,
332
+ };
333
+ }
334
+ const documentId = input.documentId;
335
+ let document;
336
+ try {
337
+ document = await this.documentStorage.get(documentId);
338
+ }
339
+ catch (error) {
340
+ return {
341
+ job,
342
+ success: false,
343
+ error: new Error(`Failed to fetch document before deletion: ${error instanceof Error ? error.message : String(error)}`),
344
+ duration: Date.now() - startTime,
345
+ };
346
+ }
347
+ // Check if document is already deleted
348
+ const documentState = document.state.document;
349
+ if (documentState.isDeleted) {
350
+ return {
351
+ job,
352
+ success: false,
353
+ error: new DocumentDeletedError(documentId, documentState.deletedAtUtcIso),
354
+ duration: Date.now() - startTime,
355
+ };
356
+ }
357
+ // Determine the next operation index for this scope only (per-scope indexing)
358
+ const nextIndex = this.getNextIndexForScope(document, job.scope);
359
+ // Create the DELETE_DOCUMENT operation
360
+ const operation = {
361
+ index: nextIndex,
362
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
363
+ hash: "", // Will be computed later
364
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
365
+ action: action,
366
+ };
367
+ try {
368
+ await this.documentStorage.delete(documentId);
369
+ }
370
+ catch (error) {
371
+ return {
372
+ job,
373
+ success: false,
374
+ error: new Error(`Failed to delete document from legacy storage: ${error instanceof Error ? error.message : String(error)}`),
375
+ duration: Date.now() - startTime,
376
+ };
377
+ }
378
+ // Mark the document as deleted in the state for read model indexing
379
+ const deletedAt = new Date().toISOString();
380
+ const updatedState = {
381
+ ...document.state,
382
+ document: {
383
+ ...document.state.document,
384
+ isDeleted: true,
385
+ deletedAtUtcIso: deletedAt,
386
+ },
387
+ };
388
+ // Populate resultingState with the deleted document state
389
+ // DELETE_DOCUMENT only affects header and document scopes
390
+ const resultingState = {
391
+ header: document.header,
392
+ document: updatedState.document,
393
+ };
394
+ operation.resultingState = JSON.stringify(resultingState);
395
+ // Write the DELETE_DOCUMENT operation to IOperationStore
396
+ try {
397
+ await this.operationStore.apply(documentId, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
398
+ txn.addOperations(operation);
399
+ });
400
+ }
401
+ catch (error) {
402
+ return {
403
+ job,
404
+ success: false,
405
+ error: new Error(`Failed to write DELETE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
406
+ duration: Date.now() - startTime,
407
+ };
408
+ }
409
+ return {
410
+ job,
411
+ success: true,
412
+ operations: [operation],
413
+ operationsWithContext: [
414
+ {
415
+ operation,
416
+ context: {
417
+ documentId,
418
+ scope: job.scope,
419
+ branch: job.branch,
420
+ documentType: document.header.documentType,
421
+ },
422
+ },
423
+ ],
424
+ duration: Date.now() - startTime,
425
+ };
426
+ }
427
+ /**
428
+ * Execute an UPGRADE_DOCUMENT system action.
429
+ * This sets the document's initial state from the upgrade action.
430
+ * The operation index is determined from the document's current operation count.
431
+ */
432
+ async executeUpgradeDocumentAction(job, action, startTime) {
433
+ const input = action.input;
434
+ if (!input.documentId) {
435
+ return {
436
+ job,
437
+ success: false,
438
+ error: new Error("UPGRADE_DOCUMENT action requires a documentId in input"),
439
+ duration: Date.now() - startTime,
440
+ };
441
+ }
442
+ const documentId = input.documentId;
443
+ // Load the document from storage
444
+ let document;
445
+ try {
446
+ document = await this.documentStorage.get(documentId);
447
+ }
448
+ catch (error) {
449
+ return {
450
+ job,
451
+ success: false,
452
+ error: new Error(`Failed to fetch document for upgrade: ${error instanceof Error ? error.message : String(error)}`),
453
+ duration: Date.now() - startTime,
454
+ };
455
+ }
456
+ // Check if document is deleted
457
+ const documentState = document.state.document;
458
+ if (documentState.isDeleted) {
459
+ return {
460
+ job,
461
+ success: false,
462
+ error: new DocumentDeletedError(documentId, documentState.deletedAtUtcIso),
463
+ duration: Date.now() - startTime,
464
+ };
465
+ }
466
+ // Determine the next operation index for this scope only (per-scope indexing)
467
+ const nextIndex = this.getNextIndexForScope(document, job.scope);
468
+ // Apply the initialState from the upgrade action
469
+ // The initialState from UPGRADE_DOCUMENT should be merged with the existing base state
470
+ // to preserve auth and document scopes while adding model-specific scopes (global, local, etc.)
471
+ if (input.initialState) {
472
+ document.state = {
473
+ ...document.state,
474
+ ...input.initialState,
475
+ };
476
+ document.initialState = document.state;
477
+ }
478
+ // Create the UPGRADE_DOCUMENT operation with calculated index
479
+ const operation = {
480
+ index: nextIndex,
481
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
482
+ hash: "", // Will be computed later
483
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
484
+ action: action,
485
+ };
486
+ // Write the updated document to legacy storage
487
+ try {
488
+ await this.operationStorage.addDocumentOperations(documentId, [operation], document);
489
+ }
490
+ catch (error) {
491
+ return {
492
+ job,
493
+ success: false,
494
+ error: new Error(`Failed to write UPGRADE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`),
495
+ duration: Date.now() - startTime,
496
+ };
497
+ }
498
+ // Populate resultingState with the full document state for read model indexing
499
+ const resultingState = {
500
+ header: document.header,
501
+ ...document.state,
502
+ };
503
+ operation.resultingState = JSON.stringify(resultingState);
504
+ // Write the operation to new IOperationStore (dual-writing)
505
+ try {
506
+ await this.operationStore.apply(documentId, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
507
+ txn.addOperations(operation);
508
+ });
509
+ }
510
+ catch (error) {
511
+ return {
512
+ job,
513
+ success: false,
514
+ error: new Error(`Failed to write UPGRADE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
515
+ duration: Date.now() - startTime,
516
+ };
517
+ }
518
+ return {
519
+ job,
520
+ success: true,
521
+ operations: [operation],
522
+ operationsWithContext: [
523
+ {
524
+ operation,
525
+ context: {
526
+ documentId,
527
+ scope: job.scope,
528
+ branch: job.branch,
529
+ documentType: document.header.documentType,
530
+ },
531
+ },
532
+ ],
533
+ duration: Date.now() - startTime,
534
+ };
535
+ }
536
+ }
537
+ //# sourceMappingURL=simple-job-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-job-executor.js","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"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"}