@lotiai/composer 0.2.0 → 0.2.1

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 (189) hide show
  1. package/dist/build-config/index.d.ts +52 -0
  2. package/dist/build-config/index.d.ts.map +1 -0
  3. package/dist/build-config/index.js +66 -0
  4. package/dist/build-config/index.js.map +1 -0
  5. package/dist/build-config/loader.d.ts +80 -0
  6. package/dist/build-config/loader.d.ts.map +1 -0
  7. package/dist/build-config/loader.js +238 -0
  8. package/dist/build-config/loader.js.map +1 -0
  9. package/dist/build-config/schema.d.ts +101 -0
  10. package/dist/build-config/schema.d.ts.map +1 -0
  11. package/dist/build-config/schema.js +94 -0
  12. package/dist/build-config/schema.js.map +1 -0
  13. package/dist/cli/commands/dev-temporal.d.ts +15 -0
  14. package/dist/cli/commands/dev-temporal.d.ts.map +1 -0
  15. package/dist/cli/commands/dev-temporal.js +68 -0
  16. package/dist/cli/commands/dev-temporal.js.map +1 -0
  17. package/dist/cli/commands/dev.d.ts +21 -0
  18. package/dist/cli/commands/dev.d.ts.map +1 -0
  19. package/dist/cli/commands/dev.js +421 -0
  20. package/dist/cli/commands/dev.js.map +1 -0
  21. package/dist/cli/commands/profiles.d.ts +15 -0
  22. package/dist/cli/commands/profiles.d.ts.map +1 -0
  23. package/dist/cli/commands/profiles.js +69 -0
  24. package/dist/cli/commands/profiles.js.map +1 -0
  25. package/dist/cli/index.d.ts +21 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +44 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +57 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal/async/build/workflow-factory.d.ts +212 -0
  34. package/dist/internal/async/build/workflow-factory.d.ts.map +1 -0
  35. package/dist/internal/async/build/workflow-factory.js +533 -0
  36. package/dist/internal/async/build/workflow-factory.js.map +1 -0
  37. package/dist/internal/async/build-scripts/utils/common.d.ts +28 -0
  38. package/dist/internal/async/build-scripts/utils/common.d.ts.map +1 -0
  39. package/dist/internal/async/build-scripts/utils/common.js +50 -0
  40. package/dist/internal/async/build-scripts/utils/common.js.map +1 -0
  41. package/dist/internal/async/build-scripts/utils/import-module.d.ts +19 -0
  42. package/dist/internal/async/build-scripts/utils/import-module.d.ts.map +1 -0
  43. package/dist/internal/async/build-scripts/utils/import-module.js +80 -0
  44. package/dist/internal/async/build-scripts/utils/import-module.js.map +1 -0
  45. package/dist/internal/async/build-scripts/utils/type-guards.d.ts +123 -0
  46. package/dist/internal/async/build-scripts/utils/type-guards.d.ts.map +1 -0
  47. package/dist/internal/async/build-scripts/utils/type-guards.js +145 -0
  48. package/dist/internal/async/build-scripts/utils/type-guards.js.map +1 -0
  49. package/dist/internal/async/config/cleanup-policy.d.ts +50 -0
  50. package/dist/internal/async/config/cleanup-policy.d.ts.map +1 -0
  51. package/dist/internal/async/config/cleanup-policy.js +20 -0
  52. package/dist/internal/async/config/cleanup-policy.js.map +1 -0
  53. package/dist/internal/async/config/worker-profiles.d.ts +172 -0
  54. package/dist/internal/async/config/worker-profiles.d.ts.map +1 -0
  55. package/dist/internal/async/config/worker-profiles.js +275 -0
  56. package/dist/internal/async/config/worker-profiles.js.map +1 -0
  57. package/dist/internal/async/execute/temporal-client.d.ts +182 -0
  58. package/dist/internal/async/execute/temporal-client.d.ts.map +1 -0
  59. package/dist/internal/async/execute/temporal-client.js +190 -0
  60. package/dist/internal/async/execute/temporal-client.js.map +1 -0
  61. package/dist/internal/async/execute/workflow-execution.d.ts +98 -0
  62. package/dist/internal/async/execute/workflow-execution.d.ts.map +1 -0
  63. package/dist/internal/async/execute/workflow-execution.js +191 -0
  64. package/dist/internal/async/execute/workflow-execution.js.map +1 -0
  65. package/dist/internal/async/metrics/task-queue-metrics.d.ts +74 -0
  66. package/dist/internal/async/metrics/task-queue-metrics.d.ts.map +1 -0
  67. package/dist/internal/async/metrics/task-queue-metrics.js +155 -0
  68. package/dist/internal/async/metrics/task-queue-metrics.js.map +1 -0
  69. package/dist/internal/async/register/activity-worker.d.ts +123 -0
  70. package/dist/internal/async/register/activity-worker.d.ts.map +1 -0
  71. package/dist/internal/async/register/activity-worker.js +355 -0
  72. package/dist/internal/async/register/activity-worker.js.map +1 -0
  73. package/dist/internal/async/register/generate-workflow-source.d.ts +43 -0
  74. package/dist/internal/async/register/generate-workflow-source.d.ts.map +1 -0
  75. package/dist/internal/async/register/generate-workflow-source.js +193 -0
  76. package/dist/internal/async/register/generate-workflow-source.js.map +1 -0
  77. package/dist/internal/async/register/workflow-worker.d.ts +125 -0
  78. package/dist/internal/async/register/workflow-worker.d.ts.map +1 -0
  79. package/dist/internal/async/register/workflow-worker.js +215 -0
  80. package/dist/internal/async/register/workflow-worker.js.map +1 -0
  81. package/dist/internal/async/register-scripts/start-activity-worker.d.ts +70 -0
  82. package/dist/internal/async/register-scripts/start-activity-worker.d.ts.map +1 -0
  83. package/dist/internal/async/register-scripts/start-activity-worker.js +75 -0
  84. package/dist/internal/async/register-scripts/start-activity-worker.js.map +1 -0
  85. package/dist/internal/async/register-scripts/start-all-workers.d.ts +81 -0
  86. package/dist/internal/async/register-scripts/start-all-workers.d.ts.map +1 -0
  87. package/dist/internal/async/register-scripts/start-all-workers.js +84 -0
  88. package/dist/internal/async/register-scripts/start-all-workers.js.map +1 -0
  89. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts +69 -0
  90. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts.map +1 -0
  91. package/dist/internal/async/register-scripts/start-workflow-worker.js +74 -0
  92. package/dist/internal/async/register-scripts/start-workflow-worker.js.map +1 -0
  93. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts +28 -0
  94. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts.map +1 -0
  95. package/dist/internal/async/register-scripts/sync-schedules-cli.js +124 -0
  96. package/dist/internal/async/register-scripts/sync-schedules-cli.js.map +1 -0
  97. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts +55 -0
  98. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts.map +1 -0
  99. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js +146 -0
  100. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js.map +1 -0
  101. package/dist/internal/async/register-scripts/sync-schedules.d.ts +68 -0
  102. package/dist/internal/async/register-scripts/sync-schedules.d.ts.map +1 -0
  103. package/dist/internal/async/register-scripts/sync-schedules.js +83 -0
  104. package/dist/internal/async/register-scripts/sync-schedules.js.map +1 -0
  105. package/dist/internal/async/schedule/constants.d.ts +10 -0
  106. package/dist/internal/async/schedule/constants.d.ts.map +1 -0
  107. package/dist/internal/async/schedule/constants.js +13 -0
  108. package/dist/internal/async/schedule/constants.js.map +1 -0
  109. package/dist/internal/async/schedule/define-schedule.d.ts +192 -0
  110. package/dist/internal/async/schedule/define-schedule.d.ts.map +1 -0
  111. package/dist/internal/async/schedule/define-schedule.js +79 -0
  112. package/dist/internal/async/schedule/define-schedule.js.map +1 -0
  113. package/dist/internal/async/schedule/index.d.ts +3 -0
  114. package/dist/internal/async/schedule/index.d.ts.map +1 -0
  115. package/dist/internal/async/schedule/index.js +9 -0
  116. package/dist/internal/async/schedule/index.js.map +1 -0
  117. package/dist/internal/async/schedule/schedule-definition-schema.d.ts +64 -0
  118. package/dist/internal/async/schedule/schedule-definition-schema.d.ts.map +1 -0
  119. package/dist/internal/async/schedule/schedule-definition-schema.js +77 -0
  120. package/dist/internal/async/schedule/schedule-definition-schema.js.map +1 -0
  121. package/dist/internal/async/schedule/sync-schedules.d.ts +71 -0
  122. package/dist/internal/async/schedule/sync-schedules.d.ts.map +1 -0
  123. package/dist/internal/async/schedule/sync-schedules.js +231 -0
  124. package/dist/internal/async/schedule/sync-schedules.js.map +1 -0
  125. package/dist/internal/async/utils/ensure-namespace.d.ts +16 -0
  126. package/dist/internal/async/utils/ensure-namespace.d.ts.map +1 -0
  127. package/dist/internal/async/utils/ensure-namespace.js +64 -0
  128. package/dist/internal/async/utils/ensure-namespace.js.map +1 -0
  129. package/dist/internal/async/utils/find-package-root.d.ts +9 -0
  130. package/dist/internal/async/utils/find-package-root.d.ts.map +1 -0
  131. package/dist/internal/async/utils/find-package-root.js +28 -0
  132. package/dist/internal/async/utils/find-package-root.js.map +1 -0
  133. package/dist/internal/async/utils/is-composer-error.d.ts +14 -0
  134. package/dist/internal/async/utils/is-composer-error.d.ts.map +1 -0
  135. package/dist/internal/async/utils/is-composer-error.js +17 -0
  136. package/dist/internal/async/utils/is-composer-error.js.map +1 -0
  137. package/dist/internal/context-provider.d.ts +316 -0
  138. package/dist/internal/context-provider.d.ts.map +1 -0
  139. package/dist/internal/context-provider.js +12 -0
  140. package/dist/internal/context-provider.js.map +1 -0
  141. package/dist/internal/create-composer.d.ts +57 -0
  142. package/dist/internal/create-composer.d.ts.map +1 -0
  143. package/dist/internal/create-composer.js +125 -0
  144. package/dist/internal/create-composer.js.map +1 -0
  145. package/dist/internal/dag-sync-fanout.d.ts +79 -0
  146. package/dist/internal/dag-sync-fanout.d.ts.map +1 -0
  147. package/dist/internal/dag-sync-fanout.js +59 -0
  148. package/dist/internal/dag-sync-fanout.js.map +1 -0
  149. package/dist/internal/dag-sync-step.d.ts +230 -0
  150. package/dist/internal/dag-sync-step.d.ts.map +1 -0
  151. package/dist/internal/dag-sync-step.js +159 -0
  152. package/dist/internal/dag-sync-step.js.map +1 -0
  153. package/dist/internal/dag-sync-workflow.d.ts +535 -0
  154. package/dist/internal/dag-sync-workflow.d.ts.map +1 -0
  155. package/dist/internal/dag-sync-workflow.js +843 -0
  156. package/dist/internal/dag-sync-workflow.js.map +1 -0
  157. package/dist/internal/defaults.d.ts +24 -0
  158. package/dist/internal/defaults.d.ts.map +1 -0
  159. package/dist/internal/defaults.js +102 -0
  160. package/dist/internal/defaults.js.map +1 -0
  161. package/dist/internal/errors.d.ts +109 -0
  162. package/dist/internal/errors.d.ts.map +1 -0
  163. package/dist/internal/errors.js +212 -0
  164. package/dist/internal/errors.js.map +1 -0
  165. package/dist/internal/index.d.ts +9 -0
  166. package/dist/internal/index.d.ts.map +1 -0
  167. package/dist/internal/index.js +22 -0
  168. package/dist/internal/index.js.map +1 -0
  169. package/dist/internal/observability.d.ts +63 -0
  170. package/dist/internal/observability.d.ts.map +1 -0
  171. package/dist/internal/observability.js +323 -0
  172. package/dist/internal/observability.js.map +1 -0
  173. package/dist/internal/types.d.ts +80 -0
  174. package/dist/internal/types.d.ts.map +1 -0
  175. package/dist/internal/types.js +9 -0
  176. package/dist/internal/types.js.map +1 -0
  177. package/dist/internal/workflow-planning.d.ts +107 -0
  178. package/dist/internal/workflow-planning.d.ts.map +1 -0
  179. package/dist/internal/workflow-planning.js +216 -0
  180. package/dist/internal/workflow-planning.js.map +1 -0
  181. package/dist/schedule-sync.d.ts +17 -0
  182. package/dist/schedule-sync.d.ts.map +1 -0
  183. package/dist/schedule-sync.js +22 -0
  184. package/dist/schedule-sync.js.map +1 -0
  185. package/dist/temporal-naming.d.ts +27 -0
  186. package/dist/temporal-naming.d.ts.map +1 -0
  187. package/dist/temporal-naming.js +33 -0
  188. package/dist/temporal-naming.js.map +1 -0
  189. package/package.json +16 -17
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ /**
3
+ * Async Workflow Factory - Creates Temporal workflow functions from pre-computed plans.
4
+ *
5
+ * This factory ONLY uses @temporalio/workflow APIs to ensure deterministic execution.
6
+ * It is bundled by Temporal's workflow bundler and runs in an isolated sandbox.
7
+ * It CANNOT import Node.js APIs or external dependencies (no fs, no network,
8
+ * no logging libraries) -- only @temporalio/workflow primitives.
9
+ *
10
+ * ## Factory Pattern:
11
+ * - Input: WorkflowPlan (build-time generated, contains batches + activity mappings)
12
+ * - Output: Temporal workflow function (deterministic orchestration logic)
13
+ * - Result: Worker registers these functions, Temporal invokes them at runtime
14
+ *
15
+ * All business logic runs in activities, not in the workflow itself.
16
+ * The workflow only orchestrates: batch sequencing, parallel step execution, data flow.
17
+ *
18
+ * @module workflow-factory
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.awaitCheckpointUpdate = void 0;
55
+ exports.createWorkflowFunction = createWorkflowFunction;
56
+ const wf = __importStar(require("@temporalio/workflow"));
57
+ /**
58
+ * LotiError formats messages as "CODE: message" - extract code from message if not available elsewhere.
59
+ */
60
+ function extractCodeFromMessage(message) {
61
+ if (!message)
62
+ return undefined;
63
+ const colonIndex = message.indexOf(": ");
64
+ if (colonIndex > 0 && colonIndex < 50) {
65
+ return message.substring(0, colonIndex);
66
+ }
67
+ return undefined;
68
+ }
69
+ /**
70
+ * Extract LotiError metadata from ApplicationFailure.details[0].
71
+ * We store { code, parentCodes, data } there when converting LotiErrors.
72
+ */
73
+ function extractLotiDetails(err) {
74
+ if (!err?.details || !Array.isArray(err.details) || err.details.length === 0) {
75
+ return undefined;
76
+ }
77
+ const detail = err.details[0];
78
+ if (detail && typeof detail === "object" && "code" in detail) {
79
+ return detail;
80
+ }
81
+ return undefined;
82
+ }
83
+ /**
84
+ * Recursively build the cause chain from a Temporal error.
85
+ * ApplicationFailure stores error code in `type` field.
86
+ */
87
+ function buildCauseChain(err, depth) {
88
+ if (!err?.cause || depth >= 5)
89
+ return undefined;
90
+ const cause = err.cause;
91
+ const message = cause.message ?? String(cause);
92
+ const lotiDetails = extractLotiDetails(cause);
93
+ const code = cause.code ?? cause.type ?? lotiDetails?.code ?? extractCodeFromMessage(message);
94
+ return {
95
+ message,
96
+ code,
97
+ parentCodes: lotiDetails?.parentCodes,
98
+ type: cause.name,
99
+ cause: buildCauseChain(cause, depth + 1),
100
+ };
101
+ }
102
+ /**
103
+ * Build StepFailureInfo from a Temporal activity error.
104
+ * Extracts LotiError code/parentCodes from the ApplicationFailure wrapper.
105
+ */
106
+ function buildStepFailureInfo(stepName, rawError) {
107
+ const error = rawError;
108
+ // ActivityFailure wraps our ApplicationFailure in cause
109
+ const causeError = error?.cause;
110
+ const lotiDetails = extractLotiDetails(causeError) ?? extractLotiDetails(error);
111
+ const code = error?.code ??
112
+ causeError?.type ??
113
+ lotiDetails?.code ??
114
+ extractCodeFromMessage(causeError?.message ?? error?.message);
115
+ return {
116
+ stepName,
117
+ message: causeError?.message ?? error?.message ?? String(rawError),
118
+ code,
119
+ parentCodes: lotiDetails?.parentCodes,
120
+ type: error?.name ?? "Error",
121
+ cause: buildCauseChain(error, 0),
122
+ };
123
+ }
124
+ /**
125
+ * Temporal Update definition for awaiting checkpoints.
126
+ * Clients call this to wait for a checkpoint and receive the partial bag state.
127
+ *
128
+ * The update handler blocks until the requested checkpoint is reached,
129
+ * then returns a snapshot of the bag at that point.
130
+ *
131
+ * Import this for type-safe executeUpdate calls from client code.
132
+ */
133
+ exports.awaitCheckpointUpdate = wf.defineUpdate("awaitCheckpoint");
134
+ /**
135
+ * Factory function that creates a Temporal workflow function from a pre-computed plan.
136
+ *
137
+ * This factory creates deterministic orchestration logic using only Temporal workflow APIs.
138
+ * All actual business logic runs in activities - the workflow only coordinates execution.
139
+ *
140
+ * The workflow returns { bag, error? } instead of throwing, matching the sync runtime.
141
+ *
142
+ * @param plan - The workflow execution plan (generated at build time)
143
+ * @returns A Temporal workflow function ready for worker registration
144
+ */
145
+ function createWorkflowFunction(plan) {
146
+ return async function temporalWorkflow(input) {
147
+ const workflowId = wf.workflowInfo().workflowId;
148
+ wf.log.info("Starting workflow execution", {
149
+ workflowId: wf.workflowInfo().workflowId,
150
+ workflowName: plan.name,
151
+ initialDataKeys: Object.keys(input.initialData),
152
+ });
153
+ // Initialize bag with initial data
154
+ const bag = { ...input.initialData };
155
+ // Track which checkpoints have been reached
156
+ const reachedCheckpoints = new Set();
157
+ // Set up checkpoint update handler if workflow has checkpoints defined
158
+ // The handler blocks until the requested checkpoint is reached, then returns the bag state
159
+ if (plan.checkpoints && plan.checkpoints.length > 0) {
160
+ wf.setHandler(exports.awaitCheckpointUpdate, async ({ checkpointName }) => {
161
+ // Validate the checkpoint exists in this workflow's plan
162
+ const checkpoint = plan.checkpoints?.find((c) => c.name === checkpointName);
163
+ if (!checkpoint) {
164
+ const validNames = plan.checkpoints?.map((c) => c.name).join(", ") ?? "none";
165
+ throw new Error(`Unknown checkpoint "${checkpointName}" for workflow "${plan.name}". ` +
166
+ `Valid checkpoints: [${validNames}]`);
167
+ }
168
+ wf.log.debug("Awaiting checkpoint", {
169
+ workflowId,
170
+ checkpointName,
171
+ alreadyReached: reachedCheckpoints.has(checkpointName),
172
+ });
173
+ // Wait until this checkpoint is reached (or already has been)
174
+ await wf.condition(() => reachedCheckpoints.has(checkpointName));
175
+ wf.log.debug("Checkpoint reached, returning bag snapshot", {
176
+ workflowId,
177
+ checkpointName,
178
+ bagKeys: Object.keys(bag),
179
+ });
180
+ // Return a snapshot of the bag at this checkpoint
181
+ return { ...bag };
182
+ });
183
+ }
184
+ // Execute batches sequentially
185
+ for (let batchIndex = 0; batchIndex < plan.batches.length; batchIndex++) {
186
+ const batch = plan.batches[batchIndex];
187
+ const batchNumber = batchIndex + 1;
188
+ wf.log.debug(`Executing batch ${batchNumber}/${plan.batches.length}`, {
189
+ batchSteps: batch.steps.map((s) => s.name),
190
+ });
191
+ // Create activity proxies once per unique (taskQueue + activityConfig) combination.
192
+ // proxyActivities applies timeout/retry config to all activities on a proxy,
193
+ // so steps with different configs need separate proxies.
194
+ const activityProxiesByKey = new Map();
195
+ const getProxyKey = (taskQueue, config) => {
196
+ if (!config)
197
+ return taskQueue;
198
+ return `${taskQueue}|${JSON.stringify(config)}`;
199
+ };
200
+ const ensureActivityProxy = (taskQueue, config) => {
201
+ const key = getProxyKey(taskQueue, config);
202
+ if (!activityProxiesByKey.has(key)) {
203
+ const activities = wf.proxyActivities({
204
+ taskQueue,
205
+ startToCloseTimeout: config?.startToCloseTimeout ?? "5 minutes",
206
+ heartbeatTimeout: config?.heartbeatTimeout,
207
+ retry: {
208
+ maximumAttempts: config?.retry?.maximumAttempts ?? 3,
209
+ backoffCoefficient: config?.retry?.backoffCoefficient ?? 2,
210
+ initialInterval: config?.retry?.initialInterval ?? "1s",
211
+ maximumInterval: config?.retry?.maximumInterval ?? "60s",
212
+ },
213
+ });
214
+ activityProxiesByKey.set(key, activities);
215
+ }
216
+ };
217
+ for (const step of batch.steps) {
218
+ ensureActivityProxy(step.taskQueue, step.activityConfig);
219
+ }
220
+ for (const fanOut of batch.fanOuts ?? []) {
221
+ ensureActivityProxy(fanOut.taskQueue, fanOut.activityConfig);
222
+ }
223
+ const allPromises = [];
224
+ const allNames = [];
225
+ // Step promises
226
+ for (const step of batch.steps) {
227
+ allNames.push(step.name);
228
+ allPromises.push((async () => {
229
+ const stepInput = {};
230
+ for (const neededField of step.needs) {
231
+ stepInput[neededField] = bag[neededField];
232
+ }
233
+ wf.log.debug(`Executing step activity`, {
234
+ stepName: step.name,
235
+ activityName: step.activityName,
236
+ taskQueue: step.taskQueue,
237
+ needs: step.needs,
238
+ provides: step.provides,
239
+ });
240
+ const proxyKey = getProxyKey(step.taskQueue, step.activityConfig);
241
+ const activities = activityProxiesByKey.get(proxyKey);
242
+ const activityFn = activities[step.activityName];
243
+ if (!activityFn) {
244
+ throw new Error(`Activity not found: ${step.activityName}`);
245
+ }
246
+ const stepOutput = await activityFn(input, stepInput);
247
+ wf.log.debug(`Step completed`, {
248
+ stepName: step.name,
249
+ outputKeys: Object.keys(stepOutput),
250
+ });
251
+ return { stepName: step.name, output: stepOutput };
252
+ })());
253
+ }
254
+ // FanOut promises
255
+ for (const fanOut of batch.fanOuts ?? []) {
256
+ allNames.push(fanOut.name);
257
+ allPromises.push((async () => {
258
+ const output = await executeFanOutInWorkflow(fanOut, bag, input, workflowId, activityProxiesByKey, getProxyKey);
259
+ return { stepName: fanOut.name, output };
260
+ })());
261
+ }
262
+ // Execute all in parallel using allSettled
263
+ const settledResults = await Promise.allSettled(allPromises);
264
+ // Separate fulfilled and rejected results
265
+ const fulfilled = [];
266
+ const rejected = [];
267
+ for (let i = 0; i < settledResults.length; i++) {
268
+ const result = settledResults[i];
269
+ if (result.status === "fulfilled") {
270
+ fulfilled.push(result.value);
271
+ }
272
+ else {
273
+ rejected.push({ stepName: allNames[i], error: result.reason });
274
+ }
275
+ }
276
+ // First, merge successful step outputs into the bag
277
+ // This ensures the bag has all available data even if some steps failed
278
+ for (const { output } of fulfilled) {
279
+ Object.assign(bag, output);
280
+ }
281
+ // Mark any checkpoints that trigger after this batch completes
282
+ // This happens regardless of whether some steps in the batch failed,
283
+ // allowing clients to receive partial results if they requested a checkpoint
284
+ for (const checkpoint of plan.checkpoints ?? []) {
285
+ if (checkpoint.afterBatch === batchIndex) {
286
+ wf.log.debug("Marking checkpoint as reached", {
287
+ workflowId,
288
+ checkpointName: checkpoint.name,
289
+ batchIndex,
290
+ batchNumber,
291
+ });
292
+ reachedCheckpoints.add(checkpoint.name);
293
+ }
294
+ }
295
+ // If any steps failed, handle the batch error
296
+ if (rejected.length > 0) {
297
+ const failedStepNames = rejected.map((r) => r.stepName).join(", ");
298
+ wf.log.error("Batch execution failed", {
299
+ workflowId,
300
+ batchNumber,
301
+ failedSteps: failedStepNames,
302
+ successfulSteps: fulfilled.map((f) => f.stepName),
303
+ errorCount: rejected.length,
304
+ });
305
+ // Build error info for the error handler
306
+ const batchErrorInfo = {
307
+ batchNumber,
308
+ workflowId,
309
+ errors: rejected.map((r) => buildStepFailureInfo(r.stepName, r.error)),
310
+ };
311
+ // Log the batch error for observability
312
+ // Structured logging backends (OTEL, etc.) will serialize this correctly
313
+ // Terminal may show [Object] for nested objects - that's a display limitation
314
+ wf.log.warn("Workflow batch failed", {
315
+ workflowId: wf.workflowInfo().workflowId,
316
+ batchNumber,
317
+ failedSteps: failedStepNames,
318
+ errors: batchErrorInfo.errors,
319
+ });
320
+ // Call error handler activity if configured
321
+ // The error handler activity returns Error | undefined:
322
+ // - undefined = error was handled, no error to propagate
323
+ // - Error = error to propagate (possibly transformed)
324
+ let resultError = {
325
+ message: `Batch ${batchNumber} failed: ${rejected.length} step(s) failed [${failedStepNames}]`,
326
+ code: "WORKFLOW_BATCH_ERROR",
327
+ type: "WorkflowBatchError",
328
+ batchNumber,
329
+ errors: batchErrorInfo.errors,
330
+ };
331
+ if (plan.errorHandlerActivityName) {
332
+ // Default to standard-tasks (same queue as other activities)
333
+ const errorHandlerQueue = plan.errorHandlerTaskQueue ?? "standard-tasks";
334
+ const errorHandlerActivities = wf.proxyActivities({
335
+ taskQueue: errorHandlerQueue,
336
+ startToCloseTimeout: "1 minute",
337
+ retry: {
338
+ maximumAttempts: 1, // Don't retry error handler
339
+ },
340
+ });
341
+ const errorHandlerFn = errorHandlerActivities[plan.errorHandlerActivityName];
342
+ if (errorHandlerFn) {
343
+ try {
344
+ wf.log.info("Invoking error handler activity", {
345
+ workflowId,
346
+ activityName: plan.errorHandlerActivityName,
347
+ batchNumber,
348
+ });
349
+ const handlerResult = await errorHandlerFn(input, bag, batchErrorInfo);
350
+ if (handlerResult.bag) {
351
+ Object.assign(bag, handlerResult.bag);
352
+ }
353
+ wf.log.info("Error handler activity completed", {
354
+ workflowId,
355
+ activityName: plan.errorHandlerActivityName,
356
+ handled: handlerResult.handled,
357
+ });
358
+ if (handlerResult.handled) {
359
+ // Error was fully handled - no error to propagate
360
+ resultError = undefined;
361
+ }
362
+ else if (handlerResult.error) {
363
+ // Error was transformed
364
+ resultError = {
365
+ message: handlerResult.error.message,
366
+ code: handlerResult.error.code,
367
+ type: "TransformedError",
368
+ batchNumber,
369
+ };
370
+ }
371
+ // If neither, keep the original batch error
372
+ }
373
+ catch (handlerError) {
374
+ wf.log.error("Error handler activity failed", {
375
+ workflowId,
376
+ activityName: plan.errorHandlerActivityName,
377
+ error: handlerError instanceof Error ? handlerError.message : String(handlerError),
378
+ });
379
+ // Handler crashed - wrap both errors
380
+ resultError = {
381
+ message: `Error handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)} (original: ${failedStepNames})`,
382
+ code: "WORKFLOW_ERROR_HANDLER_FAILURE",
383
+ type: "WorkflowErrorHandlerFailure",
384
+ batchNumber,
385
+ errors: batchErrorInfo.errors,
386
+ };
387
+ }
388
+ }
389
+ }
390
+ if (resultError) {
391
+ // Unhandled error: throw ApplicationFailure to mark workflow as Failed.
392
+ // Include bag in details so callers can extract partial workflow state.
393
+ throw wf.ApplicationFailure.create({
394
+ message: resultError.message,
395
+ type: resultError.type ?? "WorkflowError",
396
+ nonRetryable: true,
397
+ details: [{ bag, error: resultError }],
398
+ });
399
+ }
400
+ // Error was handled - continue processing remaining batches
401
+ }
402
+ }
403
+ wf.log.info("Workflow execution completed successfully", {
404
+ workflowId,
405
+ outputKeys: Object.keys(bag),
406
+ });
407
+ return { bag, error: undefined };
408
+ };
409
+ }
410
+ /**
411
+ * Executes a FanOut entry within a Temporal workflow using child workflows.
412
+ *
413
+ * 1. Calls mapInput activity to produce child workflow inputs from the bag
414
+ * 2. Spawns min(concurrency, N) async lanes that start child workflows
415
+ * via wf.executeChild with deterministic IDs ({parentId}/{fanOutName}/{index})
416
+ * 3. Collects all results (allSettled semantics via try/catch per child)
417
+ * 4. If all succeed, calls aggregateResults activity to merge results
418
+ * 5. If any fail, throws an error describing which children failed
419
+ */
420
+ async function executeFanOutInWorkflow(fanOut, bag, input, parentWorkflowId, activityProxiesByKey, getProxyKeyFn) {
421
+ const proxyKey = getProxyKeyFn(fanOut.taskQueue, fanOut.activityConfig);
422
+ const activities = activityProxiesByKey.get(proxyKey);
423
+ // Build bag slice with only the fields mapInput needs
424
+ const bagSlice = {};
425
+ for (const field of fanOut.needs) {
426
+ bagSlice[field] = bag[field];
427
+ }
428
+ wf.log.info("FanOut: calling mapInput", {
429
+ fanOutName: fanOut.name,
430
+ childWorkflow: fanOut.childWorkflowName,
431
+ needs: fanOut.needs,
432
+ });
433
+ // Call mapInput activity to produce child workflow inputs
434
+ const mapInputFn = activities[fanOut.mapInputActivityName];
435
+ if (!mapInputFn) {
436
+ throw new Error(`Activity not found: ${fanOut.mapInputActivityName}`);
437
+ }
438
+ const childInputs = await mapInputFn(input, bagSlice);
439
+ // Handle empty input array
440
+ if (childInputs.length === 0) {
441
+ wf.log.info("FanOut: empty input array, calling aggregateResults with []", {
442
+ fanOutName: fanOut.name,
443
+ });
444
+ const aggFn = activities[fanOut.aggregateResultsActivityName];
445
+ if (!aggFn) {
446
+ throw new Error(`Activity not found: ${fanOut.aggregateResultsActivityName}`);
447
+ }
448
+ return await aggFn(input, []);
449
+ }
450
+ wf.log.info("FanOut: starting child workflows", {
451
+ fanOutName: fanOut.name,
452
+ childCount: childInputs.length,
453
+ concurrency: fanOut.concurrency,
454
+ childWorkflow: fanOut.childWorkflowName,
455
+ });
456
+ // Lane-based child workflow execution
457
+ // concurrency may be null after JSON round-trip (Infinity -> null via JSON.stringify)
458
+ const effectiveConcurrency = fanOut.concurrency ?? childInputs.length;
459
+ const laneCount = Math.min(effectiveConcurrency, childInputs.length);
460
+ const childResults = new Array(childInputs.length);
461
+ let nextIndex = 0;
462
+ const lane = async () => {
463
+ while (true) {
464
+ const index = nextIndex++;
465
+ if (index >= childInputs.length)
466
+ break;
467
+ const childWorkflowId = `${parentWorkflowId}/${fanOut.name}/${index}`;
468
+ try {
469
+ const childResult = (await wf.executeChild(fanOut.childWorkflowName, {
470
+ workflowId: childWorkflowId,
471
+ args: [{ initialData: childInputs[index] }],
472
+ }));
473
+ childResults[index] = { bag: childResult.bag };
474
+ }
475
+ catch (err) {
476
+ // Child workflows throw ApplicationFailure for unhandled errors.
477
+ // Extract the structured error from ChildWorkflowFailure -> ApplicationFailure.
478
+ let errorDetail = err;
479
+ if (err instanceof wf.ChildWorkflowFailure && err.cause instanceof wf.ApplicationFailure) {
480
+ const detail = err.cause.details?.[0];
481
+ if (detail?.error) {
482
+ errorDetail = detail.error;
483
+ }
484
+ }
485
+ childResults[index] = { error: errorDetail };
486
+ }
487
+ }
488
+ };
489
+ await Promise.all(Array.from({ length: laneCount }, () => lane()));
490
+ // Separate successes from failures
491
+ const successBags = [];
492
+ const failures = [];
493
+ for (let i = 0; i < childResults.length; i++) {
494
+ const result = childResults[i];
495
+ if ("error" in result) {
496
+ failures.push({ index: i, error: result.error });
497
+ }
498
+ else {
499
+ successBags.push(result.bag);
500
+ }
501
+ }
502
+ if (failures.length > 0) {
503
+ const failureDetails = failures
504
+ .map((f) => {
505
+ const err = f.error;
506
+ const msg = err instanceof Error
507
+ ? err.message
508
+ : typeof err === "object" && err !== null && typeof err.message === "string"
509
+ ? err.message
510
+ : String(err);
511
+ return `child ${f.index}: ${msg}`;
512
+ })
513
+ .join("; ");
514
+ wf.log.error("FanOut: child workflow failures", {
515
+ fanOutName: fanOut.name,
516
+ failedCount: failures.length,
517
+ totalCount: childInputs.length,
518
+ failures: failureDetails,
519
+ });
520
+ throw new Error(`FanOut "${fanOut.name}": ${failures.length} of ${childInputs.length} child workflow(s) failed [${failureDetails}]`);
521
+ }
522
+ wf.log.info("FanOut: all children completed, calling aggregateResults", {
523
+ fanOutName: fanOut.name,
524
+ successCount: successBags.length,
525
+ });
526
+ // Call aggregateResults activity
527
+ const aggFn = activities[fanOut.aggregateResultsActivityName];
528
+ if (!aggFn) {
529
+ throw new Error(`Activity not found: ${fanOut.aggregateResultsActivityName}`);
530
+ }
531
+ return await aggFn(input, successBags);
532
+ }
533
+ //# sourceMappingURL=workflow-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-factory.js","sourceRoot":"","sources":["../../../../src/internal/async/build/workflow-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Common Utilities for Build Scripts
3
+ *
4
+ * Shared utility functions used across the async build system.
5
+ */
6
+ import type { Step } from "../../../dag-sync-step";
7
+ /**
8
+ * Restores real step names from synthetic namespaced names.
9
+ *
10
+ * The sync runtime's workflow() function flattens composed workflows and creates
11
+ * synthetic steps with:
12
+ * - Namespaced names like "childWorkflow.stepName" or "parent.child.stepName"
13
+ * - A 'workflowPath' property indicating they came from a composed workflow
14
+ *
15
+ * For async/Temporal, we need to map these back to their real step names
16
+ * so we can look them up in the step manifest.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Input (from sync runtime, already flattened):
21
+ * [stepA, { name: "child.step1", workflowPath: ["child"], ... }]
22
+ *
23
+ * // Output (real step names restored):
24
+ * [stepA, { name: "step1", _syntheticName: "child.step1", ... }]
25
+ * ```
26
+ */
27
+ export declare function denamespaceSyntheticSteps(steps: readonly Step<any, any, any>[]): Step<any, any, any>[];
28
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../src/internal/async/build-scripts/utils/common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GACpC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAsBvB"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Common Utilities for Build Scripts
4
+ *
5
+ * Shared utility functions used across the async build system.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.denamespaceSyntheticSteps = denamespaceSyntheticSteps;
9
+ /**
10
+ * Restores real step names from synthetic namespaced names.
11
+ *
12
+ * The sync runtime's workflow() function flattens composed workflows and creates
13
+ * synthetic steps with:
14
+ * - Namespaced names like "childWorkflow.stepName" or "parent.child.stepName"
15
+ * - A 'workflowPath' property indicating they came from a composed workflow
16
+ *
17
+ * For async/Temporal, we need to map these back to their real step names
18
+ * so we can look them up in the step manifest.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * // Input (from sync runtime, already flattened):
23
+ * [stepA, { name: "child.step1", workflowPath: ["child"], ... }]
24
+ *
25
+ * // Output (real step names restored):
26
+ * [stepA, { name: "step1", _syntheticName: "child.step1", ... }]
27
+ * ```
28
+ */
29
+ function denamespaceSyntheticSteps(steps) {
30
+ return steps.map((step) => {
31
+ // If this step has a workflowPath, it's a synthetic step from a composed workflow
32
+ if (step.workflowPath && step.workflowPath.length > 0) {
33
+ // Extract the real step name from the namespaced name
34
+ // e.g., "subjectIdentification.subjectIdentificationMerge" -> "subjectIdentificationMerge"
35
+ // e.g., "parent.child.stepName" -> "stepName"
36
+ const parts = step.name.split(".");
37
+ const realName = parts[parts.length - 1];
38
+ // Return a new step object with the real name, preserving needs/provides
39
+ return {
40
+ ...step,
41
+ name: realName,
42
+ // Keep the synthetic name for debugging
43
+ _syntheticName: step.name,
44
+ _workflowPath: step.workflowPath,
45
+ };
46
+ }
47
+ return step;
48
+ });
49
+ }
50
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/internal/async/build-scripts/utils/common.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAwBH,8DAwBC;AA5CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,yBAAyB,CACvC,KAAqC;IAErC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QAC7B,kFAAkF;QAClF,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,sDAAsD;YACtD,2FAA2F;YAC3F,8CAA8C;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEzC,yEAAyE;YACzE,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,QAAQ;gBACd,wCAAwC;gBACxC,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,aAAa,EAAE,IAAI,CAAC,YAAY;aACjC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}