@lotiai/composer 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-config/index.d.ts +52 -0
- package/dist/build-config/index.d.ts.map +1 -0
- package/dist/build-config/index.js +66 -0
- package/dist/build-config/index.js.map +1 -0
- package/dist/build-config/loader.d.ts +80 -0
- package/dist/build-config/loader.d.ts.map +1 -0
- package/dist/build-config/loader.js +238 -0
- package/dist/build-config/loader.js.map +1 -0
- package/dist/build-config/schema.d.ts +101 -0
- package/dist/build-config/schema.d.ts.map +1 -0
- package/dist/build-config/schema.js +94 -0
- package/dist/build-config/schema.js.map +1 -0
- package/dist/cli/commands/dev-temporal.d.ts +15 -0
- package/dist/cli/commands/dev-temporal.d.ts.map +1 -0
- package/dist/cli/commands/dev-temporal.js +68 -0
- package/dist/cli/commands/dev-temporal.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +21 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +421 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/profiles.d.ts +15 -0
- package/dist/cli/commands/profiles.d.ts.map +1 -0
- package/dist/cli/commands/profiles.js +69 -0
- package/dist/cli/commands/profiles.js.map +1 -0
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +44 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/async/build/workflow-factory.d.ts +212 -0
- package/dist/internal/async/build/workflow-factory.d.ts.map +1 -0
- package/dist/internal/async/build/workflow-factory.js +533 -0
- package/dist/internal/async/build/workflow-factory.js.map +1 -0
- package/dist/internal/async/build-scripts/utils/common.d.ts +28 -0
- package/dist/internal/async/build-scripts/utils/common.d.ts.map +1 -0
- package/dist/internal/async/build-scripts/utils/common.js +50 -0
- package/dist/internal/async/build-scripts/utils/common.js.map +1 -0
- package/dist/internal/async/build-scripts/utils/import-module.d.ts +19 -0
- package/dist/internal/async/build-scripts/utils/import-module.d.ts.map +1 -0
- package/dist/internal/async/build-scripts/utils/import-module.js +80 -0
- package/dist/internal/async/build-scripts/utils/import-module.js.map +1 -0
- package/dist/internal/async/build-scripts/utils/type-guards.d.ts +123 -0
- package/dist/internal/async/build-scripts/utils/type-guards.d.ts.map +1 -0
- package/dist/internal/async/build-scripts/utils/type-guards.js +145 -0
- package/dist/internal/async/build-scripts/utils/type-guards.js.map +1 -0
- package/dist/internal/async/config/cleanup-policy.d.ts +50 -0
- package/dist/internal/async/config/cleanup-policy.d.ts.map +1 -0
- package/dist/internal/async/config/cleanup-policy.js +20 -0
- package/dist/internal/async/config/cleanup-policy.js.map +1 -0
- package/dist/internal/async/config/worker-profiles.d.ts +172 -0
- package/dist/internal/async/config/worker-profiles.d.ts.map +1 -0
- package/dist/internal/async/config/worker-profiles.js +275 -0
- package/dist/internal/async/config/worker-profiles.js.map +1 -0
- package/dist/internal/async/execute/temporal-client.d.ts +182 -0
- package/dist/internal/async/execute/temporal-client.d.ts.map +1 -0
- package/dist/internal/async/execute/temporal-client.js +190 -0
- package/dist/internal/async/execute/temporal-client.js.map +1 -0
- package/dist/internal/async/execute/workflow-execution.d.ts +98 -0
- package/dist/internal/async/execute/workflow-execution.d.ts.map +1 -0
- package/dist/internal/async/execute/workflow-execution.js +191 -0
- package/dist/internal/async/execute/workflow-execution.js.map +1 -0
- package/dist/internal/async/metrics/task-queue-metrics.d.ts +74 -0
- package/dist/internal/async/metrics/task-queue-metrics.d.ts.map +1 -0
- package/dist/internal/async/metrics/task-queue-metrics.js +155 -0
- package/dist/internal/async/metrics/task-queue-metrics.js.map +1 -0
- package/dist/internal/async/register/activity-worker.d.ts +123 -0
- package/dist/internal/async/register/activity-worker.d.ts.map +1 -0
- package/dist/internal/async/register/activity-worker.js +355 -0
- package/dist/internal/async/register/activity-worker.js.map +1 -0
- package/dist/internal/async/register/generate-workflow-source.d.ts +43 -0
- package/dist/internal/async/register/generate-workflow-source.d.ts.map +1 -0
- package/dist/internal/async/register/generate-workflow-source.js +193 -0
- package/dist/internal/async/register/generate-workflow-source.js.map +1 -0
- package/dist/internal/async/register/workflow-worker.d.ts +125 -0
- package/dist/internal/async/register/workflow-worker.d.ts.map +1 -0
- package/dist/internal/async/register/workflow-worker.js +215 -0
- package/dist/internal/async/register/workflow-worker.js.map +1 -0
- package/dist/internal/async/register-scripts/start-activity-worker.d.ts +70 -0
- package/dist/internal/async/register-scripts/start-activity-worker.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/start-activity-worker.js +75 -0
- package/dist/internal/async/register-scripts/start-activity-worker.js.map +1 -0
- package/dist/internal/async/register-scripts/start-all-workers.d.ts +81 -0
- package/dist/internal/async/register-scripts/start-all-workers.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/start-all-workers.js +84 -0
- package/dist/internal/async/register-scripts/start-all-workers.js.map +1 -0
- package/dist/internal/async/register-scripts/start-workflow-worker.d.ts +69 -0
- package/dist/internal/async/register-scripts/start-workflow-worker.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/start-workflow-worker.js +74 -0
- package/dist/internal/async/register-scripts/start-workflow-worker.js.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts +28 -0
- package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules-cli.js +124 -0
- package/dist/internal/async/register-scripts/sync-schedules-cli.js.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts +55 -0
- package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js +146 -0
- package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules.d.ts +68 -0
- package/dist/internal/async/register-scripts/sync-schedules.d.ts.map +1 -0
- package/dist/internal/async/register-scripts/sync-schedules.js +83 -0
- package/dist/internal/async/register-scripts/sync-schedules.js.map +1 -0
- package/dist/internal/async/schedule/constants.d.ts +10 -0
- package/dist/internal/async/schedule/constants.d.ts.map +1 -0
- package/dist/internal/async/schedule/constants.js +13 -0
- package/dist/internal/async/schedule/constants.js.map +1 -0
- package/dist/internal/async/schedule/define-schedule.d.ts +192 -0
- package/dist/internal/async/schedule/define-schedule.d.ts.map +1 -0
- package/dist/internal/async/schedule/define-schedule.js +79 -0
- package/dist/internal/async/schedule/define-schedule.js.map +1 -0
- package/dist/internal/async/schedule/index.d.ts +3 -0
- package/dist/internal/async/schedule/index.d.ts.map +1 -0
- package/dist/internal/async/schedule/index.js +9 -0
- package/dist/internal/async/schedule/index.js.map +1 -0
- package/dist/internal/async/schedule/schedule-definition-schema.d.ts +64 -0
- package/dist/internal/async/schedule/schedule-definition-schema.d.ts.map +1 -0
- package/dist/internal/async/schedule/schedule-definition-schema.js +77 -0
- package/dist/internal/async/schedule/schedule-definition-schema.js.map +1 -0
- package/dist/internal/async/schedule/sync-schedules.d.ts +71 -0
- package/dist/internal/async/schedule/sync-schedules.d.ts.map +1 -0
- package/dist/internal/async/schedule/sync-schedules.js +231 -0
- package/dist/internal/async/schedule/sync-schedules.js.map +1 -0
- package/dist/internal/async/utils/ensure-namespace.d.ts +16 -0
- package/dist/internal/async/utils/ensure-namespace.d.ts.map +1 -0
- package/dist/internal/async/utils/ensure-namespace.js +64 -0
- package/dist/internal/async/utils/ensure-namespace.js.map +1 -0
- package/dist/internal/async/utils/find-package-root.d.ts +9 -0
- package/dist/internal/async/utils/find-package-root.d.ts.map +1 -0
- package/dist/internal/async/utils/find-package-root.js +28 -0
- package/dist/internal/async/utils/find-package-root.js.map +1 -0
- package/dist/internal/async/utils/is-composer-error.d.ts +14 -0
- package/dist/internal/async/utils/is-composer-error.d.ts.map +1 -0
- package/dist/internal/async/utils/is-composer-error.js +17 -0
- package/dist/internal/async/utils/is-composer-error.js.map +1 -0
- package/dist/internal/context-provider.d.ts +316 -0
- package/dist/internal/context-provider.d.ts.map +1 -0
- package/dist/internal/context-provider.js +12 -0
- package/dist/internal/context-provider.js.map +1 -0
- package/dist/internal/create-composer.d.ts +57 -0
- package/dist/internal/create-composer.d.ts.map +1 -0
- package/dist/internal/create-composer.js +125 -0
- package/dist/internal/create-composer.js.map +1 -0
- package/dist/internal/dag-sync-fanout.d.ts +79 -0
- package/dist/internal/dag-sync-fanout.d.ts.map +1 -0
- package/dist/internal/dag-sync-fanout.js +59 -0
- package/dist/internal/dag-sync-fanout.js.map +1 -0
- package/dist/internal/dag-sync-step.d.ts +230 -0
- package/dist/internal/dag-sync-step.d.ts.map +1 -0
- package/dist/internal/dag-sync-step.js +159 -0
- package/dist/internal/dag-sync-step.js.map +1 -0
- package/dist/internal/dag-sync-workflow.d.ts +535 -0
- package/dist/internal/dag-sync-workflow.d.ts.map +1 -0
- package/dist/internal/dag-sync-workflow.js +843 -0
- package/dist/internal/dag-sync-workflow.js.map +1 -0
- package/dist/internal/defaults.d.ts +24 -0
- package/dist/internal/defaults.d.ts.map +1 -0
- package/dist/internal/defaults.js +102 -0
- package/dist/internal/defaults.js.map +1 -0
- package/dist/internal/errors.d.ts +109 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +212 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/index.d.ts +9 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +22 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/internal/observability.d.ts +63 -0
- package/dist/internal/observability.d.ts.map +1 -0
- package/dist/internal/observability.js +323 -0
- package/dist/internal/observability.js.map +1 -0
- package/dist/internal/types.d.ts +80 -0
- package/dist/internal/types.d.ts.map +1 -0
- package/dist/internal/types.js +9 -0
- package/dist/internal/types.js.map +1 -0
- package/dist/internal/workflow-planning.d.ts +107 -0
- package/dist/internal/workflow-planning.d.ts.map +1 -0
- package/dist/internal/workflow-planning.js +216 -0
- package/dist/internal/workflow-planning.js.map +1 -0
- package/dist/schedule-sync.d.ts +17 -0
- package/dist/schedule-sync.d.ts.map +1 -0
- package/dist/schedule-sync.js +22 -0
- package/dist/schedule-sync.js.map +1 -0
- package/dist/temporal-naming.d.ts +27 -0
- package/dist/temporal-naming.d.ts.map +1 -0
- package/dist/temporal-naming.js +33 -0
- package/dist/temporal-naming.js.map +1 -0
- package/package.json +29 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-worker.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/register/activity-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAmCnG;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ,GAAG,OAAO;IACtD;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB;;OAEG;IACH,mCAAmC,EAAE,MAAM,CAAC;IAE5C;;;OAGG;IACH,eAAe,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAEhD;;;;OAIG;IACH,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAErC;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AA8LD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,GAAG,OAAO,EAC5D,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,CAAC,CAiFD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,GAAG,OAAO,EACzD,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Temporal Activity Worker
|
|
4
|
+
*
|
|
5
|
+
* Registers and executes step business logic as Temporal activities.
|
|
6
|
+
* Accepts workflow definitions declaratively and extracts steps from them.
|
|
7
|
+
*
|
|
8
|
+
* ## Activity Worker Responsibilities:
|
|
9
|
+
* - Connect to Temporal Server
|
|
10
|
+
* - Extract step definitions from provided workflow objects
|
|
11
|
+
* - Create Temporal activities from steps
|
|
12
|
+
* - Create wrapper activities for error handlers and FanOut operations
|
|
13
|
+
* - Register activities with appropriate task queues (fast/standard/heavy)
|
|
14
|
+
* - Execute business logic directly (steps handle their own dependencies)
|
|
15
|
+
*
|
|
16
|
+
* ## What Activities CAN Do (unlike workflows):
|
|
17
|
+
* - Access Node.js APIs (fs, http, process, etc.)
|
|
18
|
+
* - Make database queries
|
|
19
|
+
* - Call external APIs
|
|
20
|
+
* - Use non-deterministic functions
|
|
21
|
+
* - Import and execute business logic
|
|
22
|
+
*
|
|
23
|
+
* ## Step Execution Model:
|
|
24
|
+
* Steps are pure business logic that receive only their declared inputs (bag fields).
|
|
25
|
+
* Steps obtain their own dependencies (e.g., IxDbConnection.getInstance()).
|
|
26
|
+
* The workflow engine handles all observability automatically.
|
|
27
|
+
*
|
|
28
|
+
* @module activity-worker
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.createActivityWorkers = createActivityWorkers;
|
|
32
|
+
exports.runActivityWorkers = runActivityWorkers;
|
|
33
|
+
const activity_1 = require("@temporalio/activity");
|
|
34
|
+
const common_1 = require("@temporalio/common");
|
|
35
|
+
const worker_1 = require("@temporalio/worker");
|
|
36
|
+
const defaults_1 = require("../../defaults");
|
|
37
|
+
const common_2 = require("../build-scripts/utils/common");
|
|
38
|
+
const type_guards_1 = require("../build-scripts/utils/type-guards");
|
|
39
|
+
const task_queue_metrics_1 = require("../metrics/task-queue-metrics");
|
|
40
|
+
const is_composer_error_1 = require("../utils/is-composer-error");
|
|
41
|
+
const generate_workflow_source_1 = require("./generate-workflow-source");
|
|
42
|
+
/**
|
|
43
|
+
* Converts a structured error (with code + parentCodes) to a Temporal ApplicationFailure,
|
|
44
|
+
* preserving the error code as the `type` field which survives serialization.
|
|
45
|
+
*
|
|
46
|
+
* The error code and parentCodes are also stored in the details for full reconstruction.
|
|
47
|
+
* We don't set `cause` to avoid message duplication - all info is in type/details.
|
|
48
|
+
* With `cause` set we get an exact duplicate of the error in the cause chain.
|
|
49
|
+
*
|
|
50
|
+
* Compatible with errors that carry a stable string code and a parentCodes array
|
|
51
|
+
* (the {code, parentCodes} convention used by typical error-class factories).
|
|
52
|
+
*/
|
|
53
|
+
function toCodedApplicationFailure(error) {
|
|
54
|
+
return activity_1.ApplicationFailure.create({
|
|
55
|
+
// No `cause` - avoids message duplication. All info preserved in type/details.
|
|
56
|
+
type: error.code, // This is preserved through Temporal serialization!
|
|
57
|
+
message: error.message,
|
|
58
|
+
details: [
|
|
59
|
+
{
|
|
60
|
+
code: error.code,
|
|
61
|
+
parentCodes: error.parentCodes,
|
|
62
|
+
data: error.data,
|
|
63
|
+
// Include stack trace in details since we're not using cause
|
|
64
|
+
stack: error.stack,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
nonRetryable: false,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates activity functions from workflow definitions.
|
|
72
|
+
*
|
|
73
|
+
* For step-based activities, each activity wraps the step's run function:
|
|
74
|
+
* 1. Gets workflowId from Temporal's activity context (for logging)
|
|
75
|
+
* 2. Creates context via beforeStep hook (if provider exists)
|
|
76
|
+
* 3. Executes the step with context and its declared input data
|
|
77
|
+
* 4. Cleans up via afterStep hook (if provider exists)
|
|
78
|
+
* 5. Returns the provided fields
|
|
79
|
+
*
|
|
80
|
+
* For workflows with error handlers, creates wrapper activities that delegate
|
|
81
|
+
* to the workflow's errorHandler function.
|
|
82
|
+
*
|
|
83
|
+
* For FanOut steps, creates mapInput and aggregateResults wrapper activities.
|
|
84
|
+
*/
|
|
85
|
+
function createActivitiesFromWorkflows(workflows, contextProvider, logger, metricsHandle) {
|
|
86
|
+
const activities = {};
|
|
87
|
+
const allWorkflows = (0, generate_workflow_source_1.collectAllWorkflows)(workflows);
|
|
88
|
+
const allSteps = [];
|
|
89
|
+
for (const workflow of allWorkflows) {
|
|
90
|
+
const flattenedSteps = (0, common_2.denamespaceSyntheticSteps)(workflow.steps);
|
|
91
|
+
for (const step of flattenedSteps) {
|
|
92
|
+
if (!(0, type_guards_1.isFanOut)(step)) {
|
|
93
|
+
allSteps.push(step);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
for (const step of allSteps) {
|
|
98
|
+
const activityName = step.name;
|
|
99
|
+
const stepName = step.name;
|
|
100
|
+
// Signature: (workflowInput, stepInput) to match workflow-factory.ts
|
|
101
|
+
activities[activityName] = async (_workflowInput, stepInput) => {
|
|
102
|
+
const input = stepInput;
|
|
103
|
+
// Get workflowId from Temporal's activity execution context for logging
|
|
104
|
+
const activityInfo = activity_1.Context.current().info;
|
|
105
|
+
const workflowId = activityInfo.workflowExecution?.workflowId ?? "unknown";
|
|
106
|
+
let ctx;
|
|
107
|
+
let stepError;
|
|
108
|
+
metricsHandle?.activityStarted();
|
|
109
|
+
try {
|
|
110
|
+
logger.info("Activity execution started", {
|
|
111
|
+
activityName,
|
|
112
|
+
stepName,
|
|
113
|
+
workflowId,
|
|
114
|
+
inputKeys: Object.keys(input),
|
|
115
|
+
});
|
|
116
|
+
if (contextProvider) {
|
|
117
|
+
ctx = await contextProvider.beforeStep(stepName);
|
|
118
|
+
}
|
|
119
|
+
const runtime = {
|
|
120
|
+
heartbeat: (details) => activity_1.Context.current().heartbeat(details),
|
|
121
|
+
getHeartbeatDetails: () => activity_1.Context.current().info.heartbeatDetails,
|
|
122
|
+
};
|
|
123
|
+
// Object.assign preserves context identity and prototype chain when ctx is
|
|
124
|
+
// a class instance, so afterStep receives the same object the step mutated.
|
|
125
|
+
// Falls back to spread when ctx is undefined (no context provider).
|
|
126
|
+
const stepCtx = ctx != null && typeof ctx === "object" ? Object.assign(ctx, runtime) : runtime;
|
|
127
|
+
const result = await step.run(stepCtx, input);
|
|
128
|
+
logger.info("Activity execution completed", {
|
|
129
|
+
activityName,
|
|
130
|
+
stepName,
|
|
131
|
+
workflowId,
|
|
132
|
+
resultKeys: Object.keys(result),
|
|
133
|
+
});
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
stepError = error instanceof Error ? error : new Error(String(error));
|
|
138
|
+
logger.error("Activity execution failed", {
|
|
139
|
+
activityName,
|
|
140
|
+
stepName,
|
|
141
|
+
workflowId,
|
|
142
|
+
error: stepError.message,
|
|
143
|
+
code: (0, is_composer_error_1.isComposerError)(error) ? error.code : undefined,
|
|
144
|
+
});
|
|
145
|
+
// Convert structured errors to ApplicationFailure to preserve the error code through serialization
|
|
146
|
+
if ((0, is_composer_error_1.isComposerError)(error)) {
|
|
147
|
+
throw toCodedApplicationFailure(error);
|
|
148
|
+
}
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
metricsHandle?.activityFinished();
|
|
153
|
+
// Call afterStep hook for cleanup if provider exists.
|
|
154
|
+
// Wrapped in try/catch to prevent cleanup errors (e.g., EM flush failures)
|
|
155
|
+
// from swallowing the original step error. The step's business logic error
|
|
156
|
+
// is more important to surface than infrastructure cleanup errors.
|
|
157
|
+
if (contextProvider && ctx !== undefined) {
|
|
158
|
+
try {
|
|
159
|
+
await contextProvider.afterStep(ctx, stepError);
|
|
160
|
+
}
|
|
161
|
+
catch (cleanupError) {
|
|
162
|
+
logger.error("afterStep cleanup failed", {
|
|
163
|
+
activityName,
|
|
164
|
+
stepName,
|
|
165
|
+
workflowId,
|
|
166
|
+
cleanupError: cleanupError instanceof Error ? cleanupError.message : String(cleanupError),
|
|
167
|
+
originalStepError: stepError?.message,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
for (const workflow of allWorkflows) {
|
|
175
|
+
if (workflow.errorHandler) {
|
|
176
|
+
const errorHandlerName = `${workflow.name}__errorHandler`;
|
|
177
|
+
const handler = workflow.errorHandler;
|
|
178
|
+
logger.debug("Registering error handler activity", { activityName: errorHandlerName });
|
|
179
|
+
activities[errorHandlerName] = async (_workflowInput, bag, errorInfo) => {
|
|
180
|
+
const typedBag = bag;
|
|
181
|
+
const typedErrorInfo = errorInfo;
|
|
182
|
+
const error = {
|
|
183
|
+
code: "WORKFLOW_BATCH_ERROR",
|
|
184
|
+
batchNumber: typedErrorInfo.batchNumber,
|
|
185
|
+
workflowId: typedErrorInfo.workflowId,
|
|
186
|
+
errors: typedErrorInfo.errors,
|
|
187
|
+
message: `Workflow batch ${typedErrorInfo.batchNumber} failed: ${typedErrorInfo.errors.length} step(s) failed`,
|
|
188
|
+
};
|
|
189
|
+
const result = await handler(undefined, typedBag, error);
|
|
190
|
+
if (result === undefined) {
|
|
191
|
+
return { handled: true, bag: typedBag };
|
|
192
|
+
}
|
|
193
|
+
const err = result;
|
|
194
|
+
return {
|
|
195
|
+
handled: false,
|
|
196
|
+
error: { message: err.message, code: err.code },
|
|
197
|
+
bag: typedBag,
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
for (const step of workflow.steps) {
|
|
202
|
+
if (!(0, type_guards_1.isFanOut)(step))
|
|
203
|
+
continue;
|
|
204
|
+
const fanOut = step.__fanOut;
|
|
205
|
+
const mapInputName = `${step.name}__mapInput`;
|
|
206
|
+
const aggName = `${step.name}__aggregateResults`;
|
|
207
|
+
logger.debug("Registering FanOut activities", {
|
|
208
|
+
mapInputName,
|
|
209
|
+
aggregateResultsName: aggName,
|
|
210
|
+
});
|
|
211
|
+
activities[mapInputName] = async (_workflowInput, bagSlice) => {
|
|
212
|
+
return fanOut.mapInput(bagSlice);
|
|
213
|
+
};
|
|
214
|
+
activities[aggName] = async (_workflowInput, results) => {
|
|
215
|
+
return fanOut.aggregateResults(results);
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return activities;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Creates Temporal Activity Workers with automatic connection management.
|
|
223
|
+
*
|
|
224
|
+
* Extracts steps from the provided workflow definitions, creates activity
|
|
225
|
+
* functions, and registers them with Temporal workers for the specified
|
|
226
|
+
* task queues.
|
|
227
|
+
*
|
|
228
|
+
* @param config - Worker configuration
|
|
229
|
+
* @returns Object containing workers array and the created connection
|
|
230
|
+
*/
|
|
231
|
+
async function createActivityWorkers(config) {
|
|
232
|
+
const logger = config.logger ?? defaults_1.defaultLogger;
|
|
233
|
+
const workflowCount = config.workflows.length;
|
|
234
|
+
logger.info("Creating Activity Workers", {
|
|
235
|
+
server: config.serverAddress,
|
|
236
|
+
namespace: config.namespace,
|
|
237
|
+
taskQueues: config.taskQueues,
|
|
238
|
+
workflowCount,
|
|
239
|
+
maxConcurrentActivityTaskExecutions: config.maxConcurrentActivityTaskExecutions,
|
|
240
|
+
hasContextProvider: !!config.contextProvider,
|
|
241
|
+
});
|
|
242
|
+
if (config.taskQueues.length === 0) {
|
|
243
|
+
throw new Error("No task queues configured - cannot create workers");
|
|
244
|
+
}
|
|
245
|
+
const connection = await worker_1.NativeConnection.connect({
|
|
246
|
+
address: config.serverAddress,
|
|
247
|
+
});
|
|
248
|
+
logger.info("Connected to Temporal Server", { address: config.serverAddress });
|
|
249
|
+
const metricsHandle = (0, task_queue_metrics_1.startTaskQueueMetrics)({
|
|
250
|
+
connection,
|
|
251
|
+
taskQueues: config.taskQueues,
|
|
252
|
+
temporalNamespace: config.namespace,
|
|
253
|
+
logger,
|
|
254
|
+
});
|
|
255
|
+
const activities = createActivitiesFromWorkflows(config.workflows, config.contextProvider, logger, metricsHandle);
|
|
256
|
+
const activityCount = Object.keys(activities).length;
|
|
257
|
+
logger.info("Activities created from workflows", { activityCount, workflowCount });
|
|
258
|
+
// Create workers for each task queue
|
|
259
|
+
// Each queue gets all activities registered (Temporal handles routing)
|
|
260
|
+
// TODO: Add OpenTelemetry interceptor for trace context propagation in activities
|
|
261
|
+
// Once @temporalio/interceptors-opentelemetry is installed, add:
|
|
262
|
+
// import { OpenTelemetryActivityInboundInterceptor } from "@temporalio/interceptors-opentelemetry/lib/worker";
|
|
263
|
+
// Then add to Worker.create options: interceptors: { activity: [(ctx) => ({ inbound: new OpenTelemetryActivityInboundInterceptor(ctx) })] }
|
|
264
|
+
const workers = await Promise.all(config.taskQueues.map(async (taskQueue) => {
|
|
265
|
+
const worker = await worker_1.Worker.create({
|
|
266
|
+
connection,
|
|
267
|
+
namespace: config.namespace,
|
|
268
|
+
taskQueue,
|
|
269
|
+
activities,
|
|
270
|
+
maxConcurrentActivityTaskExecutions: config.maxConcurrentActivityTaskExecutions,
|
|
271
|
+
// Enable Build ID versioning for safe rainbow deploys when a git hash is available.
|
|
272
|
+
// PINNED ensures workflows started on a specific version continue using that version.
|
|
273
|
+
...(config.buildId
|
|
274
|
+
? {
|
|
275
|
+
workerDeploymentOptions: {
|
|
276
|
+
useWorkerVersioning: true,
|
|
277
|
+
version: {
|
|
278
|
+
deploymentName: config.deploymentSeriesName,
|
|
279
|
+
buildId: config.buildId,
|
|
280
|
+
},
|
|
281
|
+
defaultVersioningBehavior: common_1.VersioningBehavior.PINNED,
|
|
282
|
+
},
|
|
283
|
+
}
|
|
284
|
+
: {}),
|
|
285
|
+
});
|
|
286
|
+
logger.info("Worker created for task queue", { taskQueue, namespace: config.namespace });
|
|
287
|
+
return worker;
|
|
288
|
+
}));
|
|
289
|
+
logger.info("Activity Workers ready", {
|
|
290
|
+
taskQueues: config.taskQueues,
|
|
291
|
+
activityCount,
|
|
292
|
+
workflowCount,
|
|
293
|
+
workerCount: workers.length,
|
|
294
|
+
});
|
|
295
|
+
return { workers, connection, metricsHandle };
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Starts Activity Workers and runs them until interrupted.
|
|
299
|
+
*
|
|
300
|
+
* Creates a Temporal connection, initializes workers with loaded step implementations,
|
|
301
|
+
* and handles graceful shutdown on SIGINT/SIGTERM. The connection is automatically
|
|
302
|
+
* managed and closed on shutdown.
|
|
303
|
+
*
|
|
304
|
+
* @param config - Worker configuration
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```typescript
|
|
308
|
+
* // Run activity workers (blocks until interrupted)
|
|
309
|
+
* await runActivityWorkers({
|
|
310
|
+
* serverAddress: "localhost:7233",
|
|
311
|
+
* namespace: "default",
|
|
312
|
+
* taskQueues: ["workflow-tasks"],
|
|
313
|
+
* maxConcurrentActivityTaskExecutions: 10,
|
|
314
|
+
* workflows: [myWorkflow],
|
|
315
|
+
* });
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
async function runActivityWorkers(config) {
|
|
319
|
+
const logger = config.logger ?? defaults_1.defaultLogger;
|
|
320
|
+
// Create workers (connection is created internally)
|
|
321
|
+
const { workers, connection, metricsHandle } = await createActivityWorkers(config);
|
|
322
|
+
// Setup graceful shutdown for all workers
|
|
323
|
+
let isShuttingDown = false;
|
|
324
|
+
const shutdown = async () => {
|
|
325
|
+
if (isShuttingDown)
|
|
326
|
+
return; // Prevent duplicate shutdown
|
|
327
|
+
isShuttingDown = true;
|
|
328
|
+
metricsHandle?.stop();
|
|
329
|
+
logger.info("Shutting down Activity Workers", { workerCount: workers.length });
|
|
330
|
+
await Promise.all(workers.map((worker) => worker.shutdown()));
|
|
331
|
+
await connection.close();
|
|
332
|
+
logger.info("Activity Workers shutdown complete");
|
|
333
|
+
// TODO: process.exit(0) here makes this function non-composable when multiple
|
|
334
|
+
// worker types run in the same process (e.g., startAllWorkers). Consider
|
|
335
|
+
// returning cleanly and letting the caller control process exit. Look for:
|
|
336
|
+
// the Promise.all in startAllWorkers resolving naturally after shutdown,
|
|
337
|
+
// rather than racing on process.exit(0). Not urgent since production
|
|
338
|
+
// always uses separate containers and local dev handles this via Temporal
|
|
339
|
+
// server-side task retries.
|
|
340
|
+
process.exit(0);
|
|
341
|
+
};
|
|
342
|
+
process.on("SIGINT", () => void shutdown());
|
|
343
|
+
process.on("SIGTERM", () => void shutdown());
|
|
344
|
+
// Run all workers in parallel
|
|
345
|
+
try {
|
|
346
|
+
await Promise.all(workers.map((worker) => worker.run()));
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
logger.error("Activity Workers error", {
|
|
350
|
+
error: error instanceof Error ? error.message : String(error),
|
|
351
|
+
});
|
|
352
|
+
throw error;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=activity-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-worker.js","sourceRoot":"","sources":["../../../../src/internal/async/register/activity-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Workflow Plan Generation
|
|
3
|
+
*
|
|
4
|
+
* Generates workflow plans from provided workflow definitions and writes
|
|
5
|
+
* a temporary CJS file that Temporal's Webpack can bundle for the deterministic
|
|
6
|
+
* sandbox.
|
|
7
|
+
*
|
|
8
|
+
* The generated file imports `createWorkflowFunction` from the framework's
|
|
9
|
+
* `workflow-factory.js` using an absolute path (resolved at runtime), ensuring
|
|
10
|
+
* it works in both local development and Docker containers.
|
|
11
|
+
*
|
|
12
|
+
* @module generate-workflow-source
|
|
13
|
+
*/
|
|
14
|
+
import { type Workflow } from "../../dag-sync-workflow";
|
|
15
|
+
import type { WorkflowPlan } from "../build/workflow-factory";
|
|
16
|
+
/**
|
|
17
|
+
* Generates a serializable WorkflowPlan from a workflow definition.
|
|
18
|
+
*
|
|
19
|
+
* This is the runtime equivalent of the build-time plan generation in
|
|
20
|
+
* bundle-generators.ts, but without git-hash versioning (activity names
|
|
21
|
+
* and workflow names are always unversioned).
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateWorkflowPlan(workflow: Workflow<any, any, any, any, any>): WorkflowPlan;
|
|
24
|
+
/**
|
|
25
|
+
* Writes a temporary CJS workflow source file that Temporal's Webpack can bundle.
|
|
26
|
+
*
|
|
27
|
+
* The generated file:
|
|
28
|
+
* 1. Requires `createWorkflowFunction` from the framework's workflow-factory.js
|
|
29
|
+
* 2. Defines serialized WorkflowPlan objects for each workflow
|
|
30
|
+
* 3. Exports workflow functions created by calling createWorkflowFunction(plan)
|
|
31
|
+
*
|
|
32
|
+
* Written to os.tmpdir() since it's a runtime artifact, not a build output.
|
|
33
|
+
*
|
|
34
|
+
* @param workflows - Workflow definitions to generate plans for
|
|
35
|
+
* @returns Absolute path to the generated file
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Recursively collects all workflows reachable from the provided roots,
|
|
39
|
+
* including child workflows referenced by fanOut steps.
|
|
40
|
+
*/
|
|
41
|
+
export declare function collectAllWorkflows(roots: Workflow<any, any, any, any, any>[]): Workflow<any, any, any, any, any>[];
|
|
42
|
+
export declare function writeWorkflowSourceFile(workflows: Workflow<any, any, any, any, any>[]): Promise<string>;
|
|
43
|
+
//# sourceMappingURL=generate-workflow-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-workflow-source.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/register/generate-workflow-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA4BlF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAsG9F;AAcD;;;;;;;;;;;;GAYG;AACH;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GACzC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAwBrC;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Runtime Workflow Plan Generation
|
|
4
|
+
*
|
|
5
|
+
* Generates workflow plans from provided workflow definitions and writes
|
|
6
|
+
* a temporary CJS file that Temporal's Webpack can bundle for the deterministic
|
|
7
|
+
* sandbox.
|
|
8
|
+
*
|
|
9
|
+
* The generated file imports `createWorkflowFunction` from the framework's
|
|
10
|
+
* `workflow-factory.js` using an absolute path (resolved at runtime), ensuring
|
|
11
|
+
* it works in both local development and Docker containers.
|
|
12
|
+
*
|
|
13
|
+
* @module generate-workflow-source
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.generateWorkflowPlan = generateWorkflowPlan;
|
|
17
|
+
exports.collectAllWorkflows = collectAllWorkflows;
|
|
18
|
+
exports.writeWorkflowSourceFile = writeWorkflowSourceFile;
|
|
19
|
+
const node_fs_1 = require("node:fs");
|
|
20
|
+
const promises_1 = require("node:fs/promises");
|
|
21
|
+
const node_os_1 = require("node:os");
|
|
22
|
+
const node_path_1 = require("node:path");
|
|
23
|
+
const dag_sync_workflow_1 = require("../../dag-sync-workflow");
|
|
24
|
+
const workflow_planning_1 = require("../../workflow-planning");
|
|
25
|
+
const common_1 = require("../build-scripts/utils/common");
|
|
26
|
+
const type_guards_1 = require("../build-scripts/utils/type-guards");
|
|
27
|
+
const worker_profiles_1 = require("../config/worker-profiles");
|
|
28
|
+
function buildActivityConfig(step) {
|
|
29
|
+
const typed = step;
|
|
30
|
+
if (!typed.asyncStartToCloseTimeout && !typed.asyncHeartbeatTimeout && !typed.asyncRetry) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...(typed.asyncStartToCloseTimeout && {
|
|
35
|
+
startToCloseTimeout: typed.asyncStartToCloseTimeout,
|
|
36
|
+
}),
|
|
37
|
+
...(typed.asyncHeartbeatTimeout && { heartbeatTimeout: typed.asyncHeartbeatTimeout }),
|
|
38
|
+
...(typed.asyncRetry && { retry: typed.asyncRetry }),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Generates a serializable WorkflowPlan from a workflow definition.
|
|
43
|
+
*
|
|
44
|
+
* This is the runtime equivalent of the build-time plan generation in
|
|
45
|
+
* bundle-generators.ts, but without git-hash versioning (activity names
|
|
46
|
+
* and workflow names are always unversioned).
|
|
47
|
+
*/
|
|
48
|
+
function generateWorkflowPlan(workflow) {
|
|
49
|
+
const initialFields = new Set((workflow.requiredInitial ?? [])
|
|
50
|
+
.concat(Object.keys(workflow.configuredValues || {}))
|
|
51
|
+
.map(String));
|
|
52
|
+
const flattenedSteps = (0, common_1.denamespaceSyntheticSteps)(workflow.steps);
|
|
53
|
+
const planResult = (0, workflow_planning_1.planWorkflowBatches)([...flattenedSteps], initialFields);
|
|
54
|
+
const plan = {
|
|
55
|
+
name: workflow.name,
|
|
56
|
+
batches: planResult.batches.map((batch) => {
|
|
57
|
+
const steps = [];
|
|
58
|
+
const fanOuts = [];
|
|
59
|
+
for (const step of batch) {
|
|
60
|
+
const rawProfile = step.workerProfile ??
|
|
61
|
+
worker_profiles_1.DEFAULT_WORKER_PROFILE;
|
|
62
|
+
if (!(0, worker_profiles_1.isValidWorkerProfile)(rawProfile)) {
|
|
63
|
+
throw new Error(`Step "${step.name}" in workflow "${workflow.name}": invalid workerProfile "${rawProfile}"`);
|
|
64
|
+
}
|
|
65
|
+
const workerProfile = rawProfile;
|
|
66
|
+
const activityConfig = buildActivityConfig(step);
|
|
67
|
+
if ((0, type_guards_1.isFanOut)(step)) {
|
|
68
|
+
fanOuts.push({
|
|
69
|
+
name: step.name,
|
|
70
|
+
childWorkflowName: step.__fanOut.childWorkflow.name,
|
|
71
|
+
mapInputActivityName: `${step.name}__mapInput`,
|
|
72
|
+
aggregateResultsActivityName: `${step.name}__aggregateResults`,
|
|
73
|
+
needs: [...step.needs].map(String),
|
|
74
|
+
provides: [...step.provides].map(String),
|
|
75
|
+
concurrency: Number.isFinite(step.__fanOut.concurrency)
|
|
76
|
+
? step.__fanOut.concurrency
|
|
77
|
+
: null,
|
|
78
|
+
taskQueue: (0, worker_profiles_1.getTaskQueueForProfile)(workerProfile),
|
|
79
|
+
...(activityConfig && { activityConfig }),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
steps.push({
|
|
84
|
+
name: step.name,
|
|
85
|
+
activityName: step.name,
|
|
86
|
+
needs: [...step.needs].map(String),
|
|
87
|
+
provides: [...step.provides].map(String),
|
|
88
|
+
taskQueue: (0, worker_profiles_1.getTaskQueueForProfile)(workerProfile),
|
|
89
|
+
...(activityConfig && { activityConfig }),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { steps, ...(fanOuts.length > 0 ? { fanOuts } : {}) };
|
|
94
|
+
}),
|
|
95
|
+
};
|
|
96
|
+
if (workflow.errorHandler) {
|
|
97
|
+
plan.errorHandlerActivityName = `${workflow.name}__errorHandler`;
|
|
98
|
+
plan.errorHandlerTaskQueue = "standard-tasks";
|
|
99
|
+
}
|
|
100
|
+
if (workflow.checkpoints && workflow.checkpoints.length > 0) {
|
|
101
|
+
const stepToBatchIndex = new Map();
|
|
102
|
+
plan.batches.forEach((batch, batchIndex) => {
|
|
103
|
+
for (const step of batch.steps) {
|
|
104
|
+
stepToBatchIndex.set(step.name, batchIndex);
|
|
105
|
+
}
|
|
106
|
+
for (const fanOut of batch.fanOuts ?? []) {
|
|
107
|
+
stepToBatchIndex.set(fanOut.name, batchIndex);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
plan.checkpoints = workflow.checkpoints.map((checkpoint) => {
|
|
111
|
+
const batchIndex = stepToBatchIndex.get(checkpoint.afterStep);
|
|
112
|
+
if (batchIndex === undefined) {
|
|
113
|
+
throw new Error(`Checkpoint "${checkpoint.name}" references step "${checkpoint.afterStep}" ` +
|
|
114
|
+
`which was not found in the workflow plan. ` +
|
|
115
|
+
`Available steps: [${Array.from(stepToBatchIndex.keys()).join(", ")}]`);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
name: checkpoint.name,
|
|
119
|
+
afterBatch: batchIndex,
|
|
120
|
+
timeout: checkpoint.timeout ?? dag_sync_workflow_1.DEFAULT_CHECKPOINT_TIMEOUT_MS,
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return plan;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resolves the absolute path to the framework's workflow-factory.js file.
|
|
128
|
+
*
|
|
129
|
+
* Uses require.resolve to find @lotiai/composer's main entry and navigates
|
|
130
|
+
* to the internal workflow-factory module. Works in both pnpm workspace
|
|
131
|
+
* (local dev) and Docker container environments.
|
|
132
|
+
*/
|
|
133
|
+
function resolveWorkflowFactoryPath() {
|
|
134
|
+
const composerMain = require.resolve("@lotiai/composer");
|
|
135
|
+
return (0, node_path_1.join)((0, node_path_1.dirname)(composerMain), "internal", "async", "build", "workflow-factory.js");
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Writes a temporary CJS workflow source file that Temporal's Webpack can bundle.
|
|
139
|
+
*
|
|
140
|
+
* The generated file:
|
|
141
|
+
* 1. Requires `createWorkflowFunction` from the framework's workflow-factory.js
|
|
142
|
+
* 2. Defines serialized WorkflowPlan objects for each workflow
|
|
143
|
+
* 3. Exports workflow functions created by calling createWorkflowFunction(plan)
|
|
144
|
+
*
|
|
145
|
+
* Written to os.tmpdir() since it's a runtime artifact, not a build output.
|
|
146
|
+
*
|
|
147
|
+
* @param workflows - Workflow definitions to generate plans for
|
|
148
|
+
* @returns Absolute path to the generated file
|
|
149
|
+
*/
|
|
150
|
+
/**
|
|
151
|
+
* Recursively collects all workflows reachable from the provided roots,
|
|
152
|
+
* including child workflows referenced by fanOut steps.
|
|
153
|
+
*/
|
|
154
|
+
function collectAllWorkflows(roots) {
|
|
155
|
+
const seen = new Map();
|
|
156
|
+
const queue = [...roots];
|
|
157
|
+
while (queue.length > 0) {
|
|
158
|
+
const wf = queue.pop();
|
|
159
|
+
if (seen.has(wf.name)) {
|
|
160
|
+
if (seen.get(wf.name) !== wf) {
|
|
161
|
+
throw new Error(`Workflow name collision: "${wf.name}" is defined by multiple distinct workflow objects`);
|
|
162
|
+
}
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
seen.set(wf.name, wf);
|
|
166
|
+
for (const step of wf.steps) {
|
|
167
|
+
if ((0, type_guards_1.isFanOut)(step)) {
|
|
168
|
+
queue.push(step.__fanOut.childWorkflow);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return Array.from(seen.values());
|
|
173
|
+
}
|
|
174
|
+
async function writeWorkflowSourceFile(workflows) {
|
|
175
|
+
const factoryPath = resolveWorkflowFactoryPath().replaceAll("\\", "/");
|
|
176
|
+
// realpathSync resolves OS-level symlinks (e.g. macOS /tmp -> /private/tmp).
|
|
177
|
+
// Temporal's bundler writes an entrypoint to memfs using this path, but webpack
|
|
178
|
+
// resolves symlinks when reading, causing a mismatch if the path contains symlinks.
|
|
179
|
+
const outputPath = (0, node_path_1.resolve)((0, node_fs_1.realpathSync)((0, node_os_1.tmpdir)()), "__workflow-source.js");
|
|
180
|
+
const allWorkflows = collectAllWorkflows(workflows);
|
|
181
|
+
let code = `"use strict";\n`;
|
|
182
|
+
code += `// AUTO-GENERATED at runtime - DO NOT EDIT\n`;
|
|
183
|
+
code += `const { createWorkflowFunction } = require("${factoryPath}");\n\n`;
|
|
184
|
+
for (const workflow of allWorkflows) {
|
|
185
|
+
const plan = generateWorkflowPlan(workflow);
|
|
186
|
+
const safeName = workflow.name.replace(/-/g, "_").replace(/\./g, "_");
|
|
187
|
+
code += `const ${safeName}Plan = ${JSON.stringify(plan)};\n`;
|
|
188
|
+
code += `exports["${workflow.name}"] = createWorkflowFunction(${safeName}Plan);\n\n`;
|
|
189
|
+
}
|
|
190
|
+
await (0, promises_1.writeFile)(outputPath, code, "utf-8");
|
|
191
|
+
return outputPath;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=generate-workflow-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-workflow-source.js","sourceRoot":"","sources":["../../../../src/internal/async/register/generate-workflow-source.ts"],"names":[],"mappings":"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"}
|