@mastra/temporal 0.5.0 → 0.6.0-alpha.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.
- package/dist/index.cjs +209 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +210 -83
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/run.d.ts +52 -3
- package/dist/run.d.ts.map +1 -1
- package/dist/temporal-workflow-runtime.mjs +265 -47
- package/dist/transforms/activities.d.ts.map +1 -1
- package/dist/transforms/temporal-workflow-runtime.d.mts +23 -109
- package/dist/transforms/temporal-workflow-runtime.d.mts.map +1 -1
- package/dist/worker.cjs +78 -7
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.js +79 -8
- package/dist/worker.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_utils = require("./utils-BVE1AkTt.cjs");
|
|
3
3
|
let _mastra_core_workflows = require("@mastra/core/workflows");
|
|
4
|
+
let timers_promises = require("timers/promises");
|
|
4
5
|
let _mastra_core_di = require("@mastra/core/di");
|
|
6
|
+
let _mastra_core_error = require("@mastra/core/error");
|
|
5
7
|
let _temporalio_client = require("@temporalio/client");
|
|
6
8
|
// src/run.ts
|
|
7
|
-
function
|
|
8
|
-
if (!
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
return records;
|
|
9
|
+
function toFailureDetails(error) {
|
|
10
|
+
if (!(error instanceof _temporalio_client.WorkflowFailedError) || !(error.cause instanceof _temporalio_client.ApplicationFailure)) return;
|
|
11
|
+
const details = error.cause.details?.[0];
|
|
12
|
+
return details?.error && details.steps ? details : void 0;
|
|
13
|
+
}
|
|
14
|
+
function toError(error) {
|
|
15
|
+
return (0, _mastra_core_error.getErrorFromUnknown)(error, { serializeStack: false });
|
|
16
16
|
}
|
|
17
|
+
var TemporalWorkflowStatusUnknownError = class extends Error {
|
|
18
|
+
constructor(runId, cause, afterResumeSignal = false) {
|
|
19
|
+
super(afterResumeSignal ? `Unable to determine Temporal workflow status for run "${runId}" after sending a resume signal. The signal may have been delivered; do not retry resume() blindly.` : `Unable to determine Temporal workflow status for run "${runId}".`, { cause });
|
|
20
|
+
this.name = "TemporalWorkflowStatusUnknownError";
|
|
21
|
+
}
|
|
22
|
+
};
|
|
17
23
|
var TemporalRun = class extends _mastra_core_workflows.Run {
|
|
18
24
|
client;
|
|
19
25
|
taskQueue;
|
|
@@ -23,60 +29,82 @@ var TemporalRun = class extends _mastra_core_workflows.Run {
|
|
|
23
29
|
this.taskQueue = temporalParams.taskQueue;
|
|
24
30
|
}
|
|
25
31
|
async start(args = {}) {
|
|
26
|
-
const
|
|
32
|
+
const input = await this._validateInput(args.inputData);
|
|
33
|
+
const initialState = await this._validateInitialState(args.initialState);
|
|
34
|
+
await this._validateRequestContext(args.requestContext);
|
|
35
|
+
const requestContext = args.requestContext ?? new _mastra_core_di.RequestContext();
|
|
36
|
+
await this.invokeStartCallback(input, initialState, requestContext);
|
|
27
37
|
let handle;
|
|
28
38
|
try {
|
|
29
|
-
handle = await this.
|
|
30
|
-
taskQueue: this.taskQueue,
|
|
31
|
-
workflowId: this.runId,
|
|
32
|
-
args: [{
|
|
33
|
-
inputData: input,
|
|
34
|
-
initialState,
|
|
35
|
-
requestContext: Object.fromEntries(requestContext.entries()),
|
|
36
|
-
runId: this.runId,
|
|
37
|
-
resourceId: this.resourceId,
|
|
38
|
-
outputOptions: args.outputOptions,
|
|
39
|
-
tracingOptions: args.tracingOptions,
|
|
40
|
-
perStep: args.perStep,
|
|
41
|
-
recordStepMeta: true,
|
|
42
|
-
validateInputs: this.validateInputs
|
|
43
|
-
}]
|
|
44
|
-
});
|
|
39
|
+
handle = await this.dispatch(args, input, initialState, requestContext);
|
|
45
40
|
} catch (error) {
|
|
46
|
-
|
|
41
|
+
const result = this.failedResult(input, initialState, error);
|
|
42
|
+
if (!(error instanceof _temporalio_client.WorkflowExecutionAlreadyStartedError)) await this.invokeLifecycleCallbacks(result, requestContext);
|
|
43
|
+
return result;
|
|
47
44
|
}
|
|
48
|
-
|
|
49
|
-
await this.#invokeFinishCallbacks(result, input, requestContext);
|
|
50
|
-
return result;
|
|
45
|
+
return this.awaitResultOrSuspended(handle, input, initialState, requestContext);
|
|
51
46
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
47
|
+
dispatch(args, input, initialState, requestContext) {
|
|
48
|
+
return this.client.workflow.start(require_utils.toWorkflowType(this.workflowId), {
|
|
49
|
+
taskQueue: this.taskQueue,
|
|
50
|
+
workflowId: this.runId,
|
|
51
|
+
args: [{
|
|
52
|
+
inputData: input,
|
|
53
|
+
initialState,
|
|
54
|
+
requestContext: Object.fromEntries(requestContext.entries()),
|
|
55
|
+
runId: this.runId,
|
|
56
|
+
resourceId: this.resourceId,
|
|
57
|
+
outputOptions: args.outputOptions,
|
|
58
|
+
tracingOptions: args.tracingOptions,
|
|
59
|
+
perStep: args.perStep,
|
|
60
|
+
validateInputs: this.validateInputs
|
|
61
|
+
}]
|
|
64
62
|
});
|
|
65
|
-
return {
|
|
66
|
-
input,
|
|
67
|
-
initialState,
|
|
68
|
-
requestContext
|
|
69
|
-
};
|
|
70
63
|
}
|
|
71
|
-
async
|
|
64
|
+
async awaitResult(handle, input, initialState, requestContext) {
|
|
65
|
+
const result = await this.resolveResult(handle, input, initialState);
|
|
66
|
+
await this.invokeLifecycleCallbacks(result, requestContext);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
async queryStatus(handle, afterResumeSignal = false) {
|
|
70
|
+
if (typeof handle.query !== "function") return;
|
|
72
71
|
try {
|
|
73
|
-
|
|
72
|
+
return await handle.query("mastra.status");
|
|
73
|
+
} catch (error) {
|
|
74
|
+
throw new TemporalWorkflowStatusUnknownError(this.runId, error, afterResumeSignal);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async awaitResultOrSuspended(handle, input, initialState, requestContext, previousSuspension, afterResumeSignal = false) {
|
|
78
|
+
const terminal = this.resolveResult(handle, input, initialState);
|
|
79
|
+
while (true) {
|
|
80
|
+
const result = await Promise.race([terminal.then((result) => ({
|
|
81
|
+
type: "terminal",
|
|
82
|
+
result
|
|
83
|
+
})), (0, timers_promises.setTimeout)(100).then(() => ({ type: "poll" }))]);
|
|
84
|
+
if (result.type === "terminal") {
|
|
85
|
+
await this.invokeLifecycleCallbacks(result.result, requestContext);
|
|
86
|
+
return result.result;
|
|
87
|
+
}
|
|
88
|
+
const status = await this.queryStatus(handle, afterResumeSignal);
|
|
89
|
+
if (isSuspendedWorkflowResult(status)) {
|
|
90
|
+
const previousStep = previousSuspension ? status.steps[previousSuspension.stepId] : void 0;
|
|
91
|
+
if (previousSuspension !== void 0 && isSuspendedStepResult(previousStep) && previousStep.suspendedAt === previousSuspension.suspendedAt) continue;
|
|
92
|
+
const suspended = {
|
|
93
|
+
...status,
|
|
94
|
+
steps: toStepResults(status.input, status.steps)
|
|
95
|
+
};
|
|
96
|
+
await this.invokeLifecycleCallbacks(suspended, requestContext);
|
|
97
|
+
return suspended;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async resolveResult(handle, input, initialState) {
|
|
102
|
+
try {
|
|
103
|
+
const output = await handle.result();
|
|
74
104
|
return {
|
|
75
|
-
|
|
76
|
-
input,
|
|
77
|
-
|
|
78
|
-
state: initialState,
|
|
79
|
-
steps: toStepResults(input, result)
|
|
105
|
+
...output,
|
|
106
|
+
...input !== void 0 && { input },
|
|
107
|
+
steps: toStepResults(input !== void 0 ? input : output.input, output.steps)
|
|
80
108
|
};
|
|
81
109
|
} catch (error) {
|
|
82
110
|
if (error instanceof _temporalio_client.WorkflowFailedError && error.cause instanceof _temporalio_client.CancelledFailure) return {
|
|
@@ -85,32 +113,70 @@ var TemporalRun = class extends _mastra_core_workflows.Run {
|
|
|
85
113
|
state: initialState,
|
|
86
114
|
steps: {}
|
|
87
115
|
};
|
|
88
|
-
|
|
116
|
+
const failure = toFailureDetails(error);
|
|
117
|
+
if (failure) {
|
|
118
|
+
const steps = toStepResults(input, failure.steps);
|
|
119
|
+
return failure.tripwire ? {
|
|
120
|
+
status: "tripwire",
|
|
121
|
+
input,
|
|
122
|
+
tripwire: failure.tripwire,
|
|
123
|
+
state: initialState,
|
|
124
|
+
steps
|
|
125
|
+
} : {
|
|
126
|
+
status: "failed",
|
|
127
|
+
input,
|
|
128
|
+
error: toError(failure.error),
|
|
129
|
+
state: initialState,
|
|
130
|
+
steps
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return this.failedResult(input, initialState, error);
|
|
89
134
|
}
|
|
90
135
|
}
|
|
91
|
-
|
|
136
|
+
failedResult(input, initialState, error) {
|
|
92
137
|
return {
|
|
93
138
|
status: "failed",
|
|
94
139
|
input,
|
|
95
140
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
96
141
|
state: initialState,
|
|
97
|
-
steps: {}
|
|
142
|
+
steps: toStepResults(input, {})
|
|
98
143
|
};
|
|
99
144
|
}
|
|
100
|
-
|
|
145
|
+
invokeStartCallback(input, initialState, requestContext) {
|
|
146
|
+
return this.executionEngine.invokeStartCallback({
|
|
147
|
+
runId: this.runId,
|
|
148
|
+
workflowId: this.workflowId,
|
|
149
|
+
resourceId: this.resourceId,
|
|
150
|
+
getInitData: () => input,
|
|
151
|
+
requestContext,
|
|
152
|
+
state: initialState ?? {}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
invokeLifecycleCallbacks(result, requestContext) {
|
|
101
156
|
return this.executionEngine.invokeLifecycleCallbacks({
|
|
102
157
|
status: result.status,
|
|
103
158
|
result: result.status === "success" ? result.result : void 0,
|
|
104
159
|
error: result.status === "failed" ? result.error : void 0,
|
|
160
|
+
tripwire: result.status === "tripwire" ? result.tripwire : void 0,
|
|
105
161
|
steps: result.steps,
|
|
106
162
|
runId: this.runId,
|
|
107
163
|
workflowId: this.workflowId,
|
|
108
164
|
resourceId: this.resourceId,
|
|
109
|
-
input,
|
|
165
|
+
input: result.input,
|
|
110
166
|
requestContext,
|
|
111
167
|
state: result.state ?? {}
|
|
112
168
|
});
|
|
113
169
|
}
|
|
170
|
+
async resumePayload(params) {
|
|
171
|
+
const step = Array.isArray(params.step) ? params.step.at(-1) : params.step;
|
|
172
|
+
const stepId = typeof step === "string" ? step : step?.id;
|
|
173
|
+
const resumeData = await this._validateResumeData(params.resumeData, stepId ? this.workflowSteps[stepId] : void 0);
|
|
174
|
+
return {
|
|
175
|
+
...stepId !== void 0 && { step: stepId },
|
|
176
|
+
...params.label !== void 0 && { label: params.label },
|
|
177
|
+
resumeData
|
|
178
|
+
};
|
|
179
|
+
}
|
|
114
180
|
async cancel() {
|
|
115
181
|
await this.client.workflow.getHandle(this.runId).cancel();
|
|
116
182
|
await super.cancel();
|
|
@@ -127,11 +193,24 @@ var TemporalRun = class extends _mastra_core_workflows.Run {
|
|
|
127
193
|
resumeStream(..._args) {
|
|
128
194
|
return this.unsupported("resumeStream");
|
|
129
195
|
}
|
|
130
|
-
resume(
|
|
131
|
-
|
|
196
|
+
async resume(params) {
|
|
197
|
+
await this._validateRequestContext(params.requestContext);
|
|
198
|
+
const requestContext = params.requestContext ?? new _mastra_core_di.RequestContext();
|
|
199
|
+
const handle = this.client.workflow.getHandle(this.runId);
|
|
200
|
+
const payload = await this.resumePayload(params);
|
|
201
|
+
const status = await this.queryStatus(handle);
|
|
202
|
+
const stepId = isSuspendedWorkflowResult(status) ? payload.step ?? (payload.label ? status.resumeLabels?.[payload.label]?.stepId : void 0) ?? (status.suspended?.length === 1 && status.suspended[0]?.length === 1 ? status.suspended[0][0] : void 0) : void 0;
|
|
203
|
+
const previousStep = stepId && isSuspendedWorkflowResult(status) ? status.steps[stepId] : void 0;
|
|
204
|
+
const previousSuspension = stepId && isSuspendedStepResult(previousStep) ? {
|
|
205
|
+
stepId,
|
|
206
|
+
suspendedAt: previousStep.suspendedAt
|
|
207
|
+
} : void 0;
|
|
208
|
+
await handle.signal("mastra.resume", payload);
|
|
209
|
+
return this.awaitResultOrSuspended(handle, void 0, void 0, requestContext, previousSuspension, true);
|
|
132
210
|
}
|
|
133
|
-
resumeAsync(
|
|
134
|
-
|
|
211
|
+
async resumeAsync(params) {
|
|
212
|
+
await this.client.workflow.getHandle(this.runId).signal("mastra.resume", await this.resumePayload(params));
|
|
213
|
+
return { runId: this.runId };
|
|
135
214
|
}
|
|
136
215
|
restart(..._args) {
|
|
137
216
|
return this.unsupported("restart");
|
|
@@ -143,29 +222,77 @@ var TemporalRun = class extends _mastra_core_workflows.Run {
|
|
|
143
222
|
return this.unsupported("timeTravelStream");
|
|
144
223
|
}
|
|
145
224
|
async startAsync(args = {}) {
|
|
146
|
-
const
|
|
225
|
+
const input = await this._validateInput(args.inputData);
|
|
226
|
+
const initialState = await this._validateInitialState(args.initialState);
|
|
227
|
+
await this._validateRequestContext(args.requestContext);
|
|
228
|
+
const requestContext = args.requestContext ?? new _mastra_core_di.RequestContext();
|
|
229
|
+
await this.invokeStartCallback(input, initialState, requestContext);
|
|
230
|
+
let handle;
|
|
231
|
+
try {
|
|
232
|
+
handle = await this.dispatch(args, input, initialState, requestContext);
|
|
233
|
+
} catch (error) {
|
|
234
|
+
if (!(error instanceof _temporalio_client.WorkflowExecutionAlreadyStartedError)) await this.invokeLifecycleCallbacks(this.failedResult(input, initialState, error), requestContext);
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
147
237
|
const { onFinish, onError } = this.executionEngine.options;
|
|
148
|
-
|
|
149
|
-
const handle = await this.client.workflow.start(require_utils.toWorkflowType(this.workflowId), {
|
|
150
|
-
taskQueue: this.taskQueue,
|
|
151
|
-
workflowId: this.runId,
|
|
152
|
-
args: [{
|
|
153
|
-
inputData: input,
|
|
154
|
-
initialState,
|
|
155
|
-
requestContext: Object.fromEntries(requestContext.entries()),
|
|
156
|
-
runId: this.runId,
|
|
157
|
-
resourceId: this.resourceId,
|
|
158
|
-
outputOptions: args.outputOptions,
|
|
159
|
-
tracingOptions: args.tracingOptions,
|
|
160
|
-
perStep: args.perStep,
|
|
161
|
-
...hasFinishCallbacks && { recordStepMeta: true },
|
|
162
|
-
validateInputs: this.validateInputs
|
|
163
|
-
}]
|
|
164
|
-
});
|
|
165
|
-
if (hasFinishCallbacks) this.#settle(handle, input, initialState).then((result) => this.#invokeFinishCallbacks(result, input, requestContext));
|
|
238
|
+
if (onFinish || onError) this.awaitResult(handle, input, initialState, requestContext);
|
|
166
239
|
return { runId: this.runId };
|
|
167
240
|
}
|
|
168
241
|
};
|
|
242
|
+
function isSuspendedWorkflowResult(value) {
|
|
243
|
+
return typeof value === "object" && value !== null && value.status === "suspended" && typeof value.steps === "object" && value.steps !== null;
|
|
244
|
+
}
|
|
245
|
+
function isSuspendedStepResult(value) {
|
|
246
|
+
return typeof value === "object" && value !== null && value.status === "suspended";
|
|
247
|
+
}
|
|
248
|
+
function normalizeStepResult(value) {
|
|
249
|
+
if (typeof value !== "object" || value === null) return {
|
|
250
|
+
status: "success",
|
|
251
|
+
output: value,
|
|
252
|
+
startedAt: 0,
|
|
253
|
+
endedAt: 0
|
|
254
|
+
};
|
|
255
|
+
const record = value;
|
|
256
|
+
if (record.__temporalStepResult === true && record.status === "failed") return {
|
|
257
|
+
status: "failed",
|
|
258
|
+
payload: record.payload,
|
|
259
|
+
error: toError(record.error),
|
|
260
|
+
...record.tripwire !== void 0 && { tripwire: record.tripwire },
|
|
261
|
+
startedAt: record.startedAt,
|
|
262
|
+
endedAt: record.endedAt
|
|
263
|
+
};
|
|
264
|
+
if (record.__temporalStepResult === true && record.status === "suspended" && typeof record.suspendedAt === "number") return {
|
|
265
|
+
status: "suspended",
|
|
266
|
+
payload: record.payload,
|
|
267
|
+
suspendPayload: record.suspendPayload,
|
|
268
|
+
suspendedAt: record.suspendedAt
|
|
269
|
+
};
|
|
270
|
+
if (record.__temporalStepResult === true && record.status === "success" && typeof record.startedAt === "number" && typeof record.endedAt === "number") return {
|
|
271
|
+
status: "success",
|
|
272
|
+
payload: record.payload,
|
|
273
|
+
output: record.output,
|
|
274
|
+
...record.suspendPayload !== void 0 && { suspendPayload: record.suspendPayload },
|
|
275
|
+
...record.resumeData !== void 0 && { resumeData: record.resumeData },
|
|
276
|
+
startedAt: record.startedAt,
|
|
277
|
+
endedAt: record.endedAt
|
|
278
|
+
};
|
|
279
|
+
return {
|
|
280
|
+
status: "success",
|
|
281
|
+
output: value,
|
|
282
|
+
startedAt: 0,
|
|
283
|
+
endedAt: 0
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function toStepResults(input, steps) {
|
|
287
|
+
return {
|
|
288
|
+
input,
|
|
289
|
+
...normalizeStepResults(steps)
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function normalizeStepResults(steps) {
|
|
293
|
+
if (!steps || typeof steps !== "object") return {};
|
|
294
|
+
return Object.fromEntries(Object.entries(steps).map(([id, value]) => [id, normalizeStepResult(value)]));
|
|
295
|
+
}
|
|
169
296
|
// src/workflow.ts
|
|
170
297
|
var TemporalWorkflow = class extends _mastra_core_workflows.Workflow {
|
|
171
298
|
temporalClient;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["Run","toWorkflowType","RequestContext","WorkflowFailedError","CancelledFailure","Workflow"],"sources":["../src/run.ts","../src/workflow.ts"],"sourcesContent":["import { RequestContext } from '@mastra/core/di';\nimport { Run } from '@mastra/core/workflows';\nimport type { Step, StepResult, WorkflowResult, WorkflowRunStartOptions } from '@mastra/core/workflows';\nimport { CancelledFailure, WorkflowFailedError } from '@temporalio/client';\nimport type { Client, WorkflowHandle } from '@temporalio/client';\nimport type { WorkflowExecutionResult } from './transforms/temporal-workflow-runtime';\nimport type { TemporalEngineType } from './types';\nimport { toWorkflowType } from './utils';\n\n// Builds Mastra step records from the Temporal result. Iterates `stepMeta` rather than `steps`\n// because a step that returned undefined has no key in `steps` once serialized. A result without\n// `stepMeta` came from a Worker that predates it, so `steps` stays empty instead of guessing times.\nfunction toStepResults(input: unknown, { steps, stepMeta }: WorkflowExecutionResult): Record<string, unknown> {\n if (!stepMeta) {\n return {};\n }\n\n const records: Record<string, unknown> = { input };\n for (const [stepId, times] of Object.entries(stepMeta)) {\n records[stepId] = { status: 'success', output: steps[stepId], ...times };\n }\n return records;\n}\n\ntype TemporalRunStartArgs<TState, TInput, TRequestContext> = {\n inputData?: TInput;\n initialState?: TState;\n requestContext?: RequestContext<TRequestContext>;\n} & WorkflowRunStartOptions;\n\nexport class TemporalRun<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> extends Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext> {\n private readonly client: Client;\n private readonly taskQueue: string;\n\n constructor(\n params: ConstructorParameters<typeof Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>>[0],\n temporalParams: {\n client: Client;\n taskQueue: string;\n },\n ) {\n super(params);\n\n this.client = temporalParams.client;\n this.taskQueue = temporalParams.taskQueue;\n }\n\n async start(args: TemporalRunStartArgs<TState, TInput, TRequestContext> = {}) {\n const { input, initialState, requestContext } = await this.#prepareStart(args);\n\n let handle: WorkflowHandle;\n try {\n handle = await this.client.workflow.start(toWorkflowType(this.workflowId), {\n taskQueue: this.taskQueue,\n workflowId: this.runId,\n args: [\n {\n inputData: input,\n initialState,\n requestContext: Object.fromEntries(requestContext.entries()),\n runId: this.runId,\n resourceId: this.resourceId,\n outputOptions: args.outputOptions,\n tracingOptions: args.tracingOptions,\n perStep: args.perStep,\n recordStepMeta: true,\n validateInputs: this.validateInputs,\n },\n ],\n });\n } catch (error) {\n // Temporal did not start this run, for example because its id is already in use, so the\n // finish callbacks have no outcome to report.\n return this.#failedResult(error, input, initialState);\n }\n\n const result = await this.#settle(handle, input, initialState);\n await this.#invokeFinishCallbacks(result, input, requestContext);\n return result;\n }\n\n // Lifecycle hooks are closures that cannot run in the Temporal workflow sandbox, so they run\n // in the process that starts the run. onStart can change the state and request context, so\n // the caller sends both to Temporal only after it runs.\n async #prepareStart(args: TemporalRunStartArgs<TState, TInput, TRequestContext>) {\n const input = await this._validateInput(args.inputData);\n const initialState = (await this._validateInitialState(args.initialState)) ?? ({} as TState);\n await this._validateRequestContext(args.requestContext as RequestContext<unknown> | undefined);\n\n const requestContext = (args.requestContext ?? new RequestContext()) as RequestContext;\n await this.executionEngine.invokeStartCallback({\n runId: this.runId,\n workflowId: this.workflowId,\n resourceId: this.resourceId,\n getInitData: () => input,\n requestContext,\n state: initialState as Record<string, any>,\n });\n\n return { input, initialState, requestContext };\n }\n\n async #settle(\n handle: WorkflowHandle,\n input: TInput | undefined,\n initialState: TState | undefined,\n ): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n try {\n const result = (await handle.result()) as WorkflowExecutionResult;\n\n return {\n status: 'success',\n input: input as TInput,\n result: result.result as TOutput,\n state: initialState,\n steps: toStepResults(input, result),\n } as WorkflowResult<TState, TInput, TOutput, TSteps>;\n } catch (error) {\n // Core reports a canceled run as `canceled` and does not call onError for it.\n if (error instanceof WorkflowFailedError && error.cause instanceof CancelledFailure) {\n return { status: 'canceled', input, state: initialState, steps: {} } as unknown as WorkflowResult<\n TState,\n TInput,\n TOutput,\n TSteps\n >;\n }\n\n return this.#failedResult(error, input, initialState);\n }\n }\n\n #failedResult(error: unknown, input: TInput | undefined, initialState: TState | undefined) {\n return {\n status: 'failed',\n input: input as TInput,\n error: error instanceof Error ? error : new Error(String(error)),\n state: initialState,\n steps: {},\n } as WorkflowResult<TState, TInput, TOutput, TSteps>;\n }\n\n #invokeFinishCallbacks(\n result: WorkflowResult<TState, TInput, TOutput, TSteps>,\n input: TInput | undefined,\n requestContext: RequestContext,\n ) {\n return this.executionEngine.invokeLifecycleCallbacks({\n status: result.status,\n result: result.status === 'success' ? result.result : undefined,\n error: result.status === 'failed' ? result.error : undefined,\n steps: result.steps as Record<string, StepResult<any, any, any, any>>,\n runId: this.runId,\n workflowId: this.workflowId,\n resourceId: this.resourceId,\n input,\n requestContext,\n state: (result.state ?? {}) as Record<string, any>,\n });\n }\n\n async cancel() {\n await this.client.workflow.getHandle(this.runId).cancel();\n await super.cancel();\n }\n\n private unsupported(method: string): never {\n throw new Error(`@mastra/temporal does not support ${method}() yet. Use start() or startAsync() instead.`);\n }\n\n override stream(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['stream']>\n ): never {\n return this.unsupported('stream');\n }\n\n override streamLegacy(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['streamLegacy']>\n ): never {\n return this.unsupported('streamLegacy');\n }\n\n override resumeStream(..._args: unknown[]): never {\n return this.unsupported('resumeStream');\n }\n\n override resume(..._args: unknown[]): never {\n return this.unsupported('resume');\n }\n\n override resumeAsync(..._args: unknown[]): never {\n return this.unsupported('resumeAsync');\n }\n\n override restart(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['restart']>\n ): never {\n return this.unsupported('restart');\n }\n\n override timeTravel(..._args: unknown[]): never {\n return this.unsupported('timeTravel');\n }\n\n override timeTravelStream(..._args: unknown[]): never {\n return this.unsupported('timeTravelStream');\n }\n\n async startAsync(args: TemporalRunStartArgs<TState, TInput, TRequestContext> = {}) {\n const { input, initialState, requestContext } = await this.#prepareStart(args);\n const { onFinish, onError } = this.executionEngine.options;\n const hasFinishCallbacks = Boolean(onFinish || onError);\n\n const handle = await this.client.workflow.start(toWorkflowType(this.workflowId), {\n taskQueue: this.taskQueue,\n workflowId: this.runId,\n args: [\n {\n inputData: input,\n initialState,\n requestContext: Object.fromEntries(requestContext.entries()),\n runId: this.runId,\n resourceId: this.resourceId,\n outputOptions: args.outputOptions,\n tracingOptions: args.tracingOptions,\n perStep: args.perStep,\n ...(hasFinishCallbacks && { recordStepMeta: true }),\n validateInputs: this.validateInputs,\n },\n ],\n });\n\n // Best-effort, as with core startAsync(): the callbacks are lost if this process exits\n // before the workflow finishes (#24587).\n if (hasFinishCallbacks) {\n void this.#settle(handle, input, initialState).then(result =>\n this.#invokeFinishCallbacks(result, input, requestContext),\n );\n }\n\n return { runId: this.runId };\n }\n}\n","import { Workflow, createStep } from '@mastra/core/workflows';\nimport type { Step, WorkflowConfig } from '@mastra/core/workflows';\nimport type { Client } from '@temporalio/client';\nimport type { ActivityOptions } from '@temporalio/workflow';\nimport { TemporalRun } from './run';\nimport type { TemporalEngineType } from './types';\n\nexport type TemporalWorkflowParams = {\n client: Client;\n taskQueue: string;\n startToCloseTimeout?: string;\n retry?: ActivityOptions['retry'];\n};\n\nexport class TemporalWorkflow<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TWorkflowId extends string = string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TPrevSchema = TInput,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> extends Workflow<TemporalEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TPrevSchema, TRequestContext> {\n private readonly temporalClient: Client;\n readonly taskQueue: string;\n readonly startToCloseTimeout: string;\n\n constructor(\n params: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n temporalParams: TemporalWorkflowParams,\n ) {\n super(params);\n\n this.engineType = 'temporal';\n this.temporalClient = temporalParams.client;\n this.taskQueue = temporalParams.taskQueue;\n this.startToCloseTimeout = temporalParams.startToCloseTimeout ?? '1 minute';\n }\n\n async createRun(options?: { runId?: string; resourceId?: string; disableScorers?: boolean }) {\n const runId = options?.runId ?? crypto.randomUUID();\n const run = new TemporalRun<TSteps, TState, TInput, TOutput, TRequestContext>(\n {\n workflowId: this.id,\n runId,\n resourceId: options?.resourceId,\n stateSchema: this.stateSchema,\n inputSchema: this.inputSchema,\n requestContextSchema: this.requestContextSchema,\n executionEngine: this.executionEngine,\n executionGraph: this.executionGraph,\n mastra: this.mastra,\n retryConfig: this.retryConfig,\n serializedStepGraph: this.serializedStepGraph,\n disableScorers: options?.disableScorers,\n tracingPolicy: this.options.tracingPolicy,\n workflowSteps: this.steps,\n validateInputs: this.options.validateInputs,\n workflowEngineType: this.engineType,\n cleanup: undefined,\n },\n {\n client: this.temporalClient,\n taskQueue: this.taskQueue,\n },\n );\n\n this.runs.set(runId, run);\n return run;\n }\n}\n\nexport function createWorkflow<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TWorkflowId extends string = string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TRequestContext extends Record<string, any> | unknown = unknown,\n>(\n config: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n temporal: TemporalWorkflowParams,\n) {\n return new TemporalWorkflow<TSteps, TWorkflowId, TState, TInput, TOutput, TInput, TRequestContext>(config, temporal);\n}\n\nexport function init(temporalParams: TemporalWorkflowParams) {\n return {\n createWorkflow: <\n TWorkflowId extends string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TSteps extends Step[] = Step[],\n TRequestContext extends Record<string, any> | unknown = unknown,\n >(\n config: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n ) => createWorkflow<TSteps, TWorkflowId, TState, TInput, TOutput, TRequestContext>(config, temporalParams),\n createStep,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["WorkflowFailedError","ApplicationFailure","getErrorFromUnknown","Run","RequestContext","WorkflowExecutionAlreadyStartedError","toWorkflowType","delay","CancelledFailure","Workflow"],"sources":["../src/run.ts","../src/workflow.ts"],"sourcesContent":["import { setTimeout as delay } from 'node:timers/promises';\nimport { RequestContext } from '@mastra/core/di';\nimport { getErrorFromUnknown } from '@mastra/core/error';\nimport { Run } from '@mastra/core/workflows';\nimport type { Step, WorkflowResult, WorkflowRunStartOptions } from '@mastra/core/workflows';\nimport {\n ApplicationFailure,\n CancelledFailure,\n WorkflowExecutionAlreadyStartedError,\n WorkflowFailedError,\n} from '@temporalio/client';\nimport type { Client, WorkflowHandle } from '@temporalio/client';\nimport type { WorkflowFailureDetails } from './transforms/temporal-workflow-runtime';\nimport type { TemporalEngineType } from './types';\nimport { toWorkflowType } from './utils';\n\n// Runs failed by a Worker that predates these details return undefined.\nfunction toFailureDetails(error: unknown): WorkflowFailureDetails | undefined {\n if (!(error instanceof WorkflowFailedError) || !(error.cause instanceof ApplicationFailure)) {\n return undefined;\n }\n\n const details = error.cause.details?.[0] as Partial<WorkflowFailureDetails> | undefined;\n return details?.error && details.steps ? (details as WorkflowFailureDetails) : undefined;\n}\n\nfunction toError(error: WorkflowFailureDetails['error']): Error {\n return getErrorFromUnknown(error, { serializeStack: false });\n}\n\ntype TemporalRunStartArgs<TState, TInput, TRequestContext> = {\n inputData?: TInput;\n initialState?: TState;\n requestContext?: RequestContext<TRequestContext>;\n} & WorkflowRunStartOptions;\n\nexport class TemporalWorkflowStatusUnknownError extends Error {\n constructor(runId: string, cause: unknown, afterResumeSignal = false) {\n super(\n afterResumeSignal\n ? `Unable to determine Temporal workflow status for run \"${runId}\" after sending a resume signal. The signal may have been delivered; do not retry resume() blindly.`\n : `Unable to determine Temporal workflow status for run \"${runId}\".`,\n { cause },\n );\n this.name = 'TemporalWorkflowStatusUnknownError';\n }\n}\n\nexport class TemporalRun<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> extends Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext> {\n private readonly client: Client;\n private readonly taskQueue: string;\n\n constructor(\n params: ConstructorParameters<typeof Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>>[0],\n temporalParams: {\n client: Client;\n taskQueue: string;\n },\n ) {\n super(params);\n\n this.client = temporalParams.client;\n this.taskQueue = temporalParams.taskQueue;\n }\n\n async start(args: TemporalRunStartArgs<TState, TInput, TRequestContext> = {}) {\n const input = await this._validateInput(args.inputData);\n const initialState = await this._validateInitialState(args.initialState);\n await this._validateRequestContext(args.requestContext as RequestContext<unknown> | undefined);\n const requestContext = (args.requestContext ?? new RequestContext()) as RequestContext;\n await this.invokeStartCallback(input, initialState, requestContext);\n\n let handle: WorkflowHandle;\n try {\n handle = await this.dispatch(args, input, initialState, requestContext);\n } catch (error) {\n const result = this.failedResult(input, initialState, error);\n if (!(error instanceof WorkflowExecutionAlreadyStartedError)) {\n await this.invokeLifecycleCallbacks(result, requestContext);\n }\n return result;\n }\n\n return this.awaitResultOrSuspended(handle, input, initialState, requestContext);\n }\n\n private dispatch(\n args: TemporalRunStartArgs<TState, TInput, TRequestContext>,\n input: unknown,\n initialState: unknown,\n requestContext: RequestContext,\n ): Promise<WorkflowHandle> {\n return this.client.workflow.start(toWorkflowType(this.workflowId), {\n taskQueue: this.taskQueue,\n workflowId: this.runId,\n args: [\n {\n inputData: input,\n initialState,\n requestContext: Object.fromEntries(requestContext.entries()),\n runId: this.runId,\n resourceId: this.resourceId,\n outputOptions: args.outputOptions,\n tracingOptions: args.tracingOptions,\n perStep: args.perStep,\n validateInputs: this.validateInputs,\n },\n ],\n });\n }\n\n private async awaitResult(\n handle: WorkflowHandle,\n input: unknown,\n initialState: unknown,\n requestContext: RequestContext,\n ): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const result = await this.resolveResult(handle, input, initialState);\n await this.invokeLifecycleCallbacks(result, requestContext);\n return result;\n }\n\n private async queryStatus(handle: WorkflowHandle, afterResumeSignal = false): Promise<unknown> {\n if (typeof handle.query !== 'function') {\n return undefined;\n }\n\n try {\n return await handle.query('mastra.status');\n } catch (error) {\n throw new TemporalWorkflowStatusUnknownError(this.runId, error, afterResumeSignal);\n }\n }\n\n private async awaitResultOrSuspended(\n handle: WorkflowHandle,\n input: unknown,\n initialState: unknown,\n requestContext: RequestContext,\n previousSuspension?: { stepId: string; suspendedAt?: number },\n afterResumeSignal = false,\n ): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const terminal = this.resolveResult(handle, input, initialState);\n\n while (true) {\n const result = await Promise.race([\n terminal.then(result => ({ type: 'terminal' as const, result })),\n delay(100).then(() => ({ type: 'poll' as const })),\n ]);\n\n if (result.type === 'terminal') {\n await this.invokeLifecycleCallbacks(result.result, requestContext);\n return result.result;\n }\n\n const status = await this.queryStatus(handle, afterResumeSignal);\n if (isSuspendedWorkflowResult(status)) {\n const previousStep = previousSuspension ? status.steps[previousSuspension.stepId] : undefined;\n const isPreviousSuspension =\n previousSuspension !== undefined &&\n isSuspendedStepResult(previousStep) &&\n previousStep.suspendedAt === previousSuspension.suspendedAt;\n if (isPreviousSuspension) {\n continue;\n }\n\n const suspended = {\n ...status,\n steps: toStepResults(status.input, status.steps),\n } as WorkflowResult<TState, TInput, TOutput, TSteps>;\n await this.invokeLifecycleCallbacks(suspended, requestContext);\n return suspended;\n }\n }\n }\n\n private async resolveResult(handle: WorkflowHandle, input: unknown, initialState: unknown) {\n try {\n // The generated Temporal workflow returns the execution result ({ status, result, state, steps }).\n const output = (await handle.result()) as WorkflowResult<TState, TInput, TOutput, TSteps>;\n return {\n ...output,\n ...(input !== undefined && { input: input as TInput }),\n steps: toStepResults(input !== undefined ? input : output.input, output.steps),\n } as WorkflowResult<TState, TInput, TOutput, TSteps>;\n } catch (error) {\n if (error instanceof WorkflowFailedError && error.cause instanceof CancelledFailure) {\n return {\n status: 'canceled',\n input: input as TInput,\n state: initialState,\n steps: {},\n } as unknown as WorkflowResult<TState, TInput, TOutput, TSteps>;\n }\n\n const failure = toFailureDetails(error);\n\n if (failure) {\n const steps = toStepResults(input, failure.steps);\n return (\n failure.tripwire\n ? { status: 'tripwire', input, tripwire: failure.tripwire, state: initialState, steps }\n : { status: 'failed', input, error: toError(failure.error), state: initialState, steps }\n ) as WorkflowResult<TState, TInput, TOutput, TSteps>;\n }\n\n return this.failedResult(input, initialState, error);\n }\n }\n\n private failedResult(input: unknown, initialState: unknown, error: unknown) {\n return {\n status: 'failed',\n input: input as TInput,\n error: error instanceof Error ? error : new Error(String(error)),\n state: initialState,\n steps: toStepResults(input, {}),\n } as WorkflowResult<TState, TInput, TOutput, TSteps>;\n }\n\n // Lifecycle hooks are closures that cannot run inside the deterministic Temporal workflow\n // sandbox, so they run here in the process that started the run, using core hook semantics.\n private invokeStartCallback(input: unknown, initialState: unknown, requestContext: RequestContext) {\n return this.executionEngine.invokeStartCallback({\n runId: this.runId,\n workflowId: this.workflowId,\n resourceId: this.resourceId,\n getInitData: () => input,\n requestContext,\n state: (initialState ?? {}) as Record<string, any>,\n });\n }\n\n private invokeLifecycleCallbacks(\n result: WorkflowResult<TState, TInput, TOutput, TSteps>,\n requestContext: RequestContext,\n ) {\n return this.executionEngine.invokeLifecycleCallbacks({\n status: result.status,\n result: result.status === 'success' ? result.result : undefined,\n error: result.status === 'failed' ? result.error : undefined,\n tripwire: result.status === 'tripwire' ? result.tripwire : undefined,\n steps: result.steps,\n runId: this.runId,\n workflowId: this.workflowId,\n resourceId: this.resourceId,\n input: result.input,\n requestContext,\n state: (result.state ?? {}) as Record<string, any>,\n });\n }\n\n private async resumePayload(params: {\n step?:\n | Step<string, any, any, any, any, any, TemporalEngineType, any>\n | Step<string, any, any, any, any, any, TemporalEngineType, any>[]\n | string\n | string[];\n label?: string;\n resumeData?: unknown;\n }) {\n const step = Array.isArray(params.step) ? params.step.at(-1) : params.step;\n const stepId = typeof step === 'string' ? step : step?.id;\n const resumeData = await this._validateResumeData(\n params.resumeData,\n stepId ? this.workflowSteps[stepId] : undefined,\n );\n\n return {\n ...(stepId !== undefined && { step: stepId }),\n ...(params.label !== undefined && { label: params.label }),\n resumeData,\n };\n }\n\n async cancel() {\n await this.client.workflow.getHandle(this.runId).cancel();\n await super.cancel();\n }\n\n private unsupported(method: string): never {\n throw new Error(`@mastra/temporal does not support ${method}() yet. Use start() or startAsync() instead.`);\n }\n\n override stream(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['stream']>\n ): never {\n return this.unsupported('stream');\n }\n\n override streamLegacy(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['streamLegacy']>\n ): never {\n return this.unsupported('streamLegacy');\n }\n\n override resumeStream(..._args: unknown[]): never {\n return this.unsupported('resumeStream');\n }\n\n override async resume<TResume>(params: {\n resumeData?: TResume;\n step?:\n | Step<string, any, any, any, TResume, any, TemporalEngineType, any>\n | [\n ...Step<string, any, any, any, any, any, TemporalEngineType, any>[],\n Step<string, any, any, any, TResume, any, TemporalEngineType, any>,\n ]\n | string\n | string[];\n label?: string;\n requestContext?: RequestContext<TRequestContext>;\n retryCount?: number;\n tracingOptions?: any;\n outputWriter?: any;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n forEachIndex?: number;\n perStep?: boolean;\n actor?: any;\n }) {\n await this._validateRequestContext(params.requestContext as RequestContext<unknown> | undefined);\n const requestContext = (params.requestContext ?? new RequestContext()) as RequestContext;\n const handle = this.client.workflow.getHandle(this.runId);\n const payload = await this.resumePayload(params);\n const status = await this.queryStatus(handle);\n const stepId = isSuspendedWorkflowResult(status)\n ? (payload.step ??\n (payload.label ? status.resumeLabels?.[payload.label]?.stepId : undefined) ??\n (status.suspended?.length === 1 && status.suspended[0]?.length === 1 ? status.suspended[0][0] : undefined))\n : undefined;\n const previousStep = stepId && isSuspendedWorkflowResult(status) ? status.steps[stepId] : undefined;\n const previousSuspension =\n stepId && isSuspendedStepResult(previousStep) ? { stepId, suspendedAt: previousStep.suspendedAt } : undefined;\n await handle.signal('mastra.resume', payload);\n return this.awaitResultOrSuspended(handle, undefined, undefined, requestContext, previousSuspension, true);\n }\n\n override async resumeAsync<TResume>(params: {\n resumeData?: TResume;\n step?:\n | Step<string, any, any, any, TResume, any, TemporalEngineType, any>\n | [\n ...Step<string, any, any, any, any, any, TemporalEngineType, any>[],\n Step<string, any, any, any, TResume, any, TemporalEngineType, any>,\n ]\n | string\n | string[];\n label?: string;\n requestContext?: RequestContext<TRequestContext>;\n retryCount?: number;\n tracingOptions?: any;\n outputWriter?: any;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n forEachIndex?: number;\n perStep?: boolean;\n actor?: any;\n }) {\n const handle = this.client.workflow.getHandle(this.runId);\n await handle.signal('mastra.resume', await this.resumePayload(params));\n return { runId: this.runId };\n }\n\n override restart(\n ..._args: Parameters<Run<TemporalEngineType, TSteps, TState, TInput, TOutput, TRequestContext>['restart']>\n ): never {\n return this.unsupported('restart');\n }\n\n override timeTravel(..._args: unknown[]): never {\n return this.unsupported('timeTravel');\n }\n\n override timeTravelStream(..._args: unknown[]): never {\n return this.unsupported('timeTravelStream');\n }\n\n async startAsync(args: TemporalRunStartArgs<TState, TInput, TRequestContext> = {}) {\n const input = await this._validateInput(args.inputData);\n const initialState = await this._validateInitialState(args.initialState);\n await this._validateRequestContext(args.requestContext as RequestContext<unknown> | undefined);\n const requestContext = (args.requestContext ?? new RequestContext()) as RequestContext;\n await this.invokeStartCallback(input, initialState, requestContext);\n\n let handle: WorkflowHandle;\n try {\n handle = await this.dispatch(args, input, initialState, requestContext);\n } catch (error) {\n if (!(error instanceof WorkflowExecutionAlreadyStartedError)) {\n await this.invokeLifecycleCallbacks(this.failedResult(input, initialState, error), requestContext);\n }\n throw error;\n }\n\n const { onFinish, onError } = this.executionEngine.options;\n if (onFinish || onError) {\n // Like core startAsync(), terminal hooks fire in the background from this process.\n // They are best-effort: if this process exits before the run ends, they do not fire.\n void this.awaitResult(handle, input, initialState, requestContext);\n }\n\n return { runId: this.runId };\n }\n}\n\nfunction isSuspendedWorkflowResult(value: unknown): value is {\n status: 'suspended';\n input?: unknown;\n steps: Record<string, unknown>;\n suspended?: string[][];\n resumeLabels?: Record<string, { stepId: string }>;\n} {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { status?: unknown }).status === 'suspended' &&\n typeof (value as { steps?: unknown }).steps === 'object' &&\n (value as { steps?: unknown }).steps !== null\n );\n}\n\nfunction isSuspendedStepResult(value: unknown): value is { status: 'suspended'; suspendedAt?: number } {\n return typeof value === 'object' && value !== null && (value as { status?: unknown }).status === 'suspended';\n}\n\n// Failed step records arrive in the failure details of a failed run, not in handle.result().\nfunction normalizeStepResult(value: unknown): unknown {\n if (typeof value !== 'object' || value === null) {\n return { status: 'success', output: value, startedAt: 0, endedAt: 0 };\n }\n\n const record = value as Record<string, unknown>;\n if (record.__temporalStepResult === true && record.status === 'failed') {\n return {\n status: 'failed',\n payload: record.payload,\n error: toError(record.error as WorkflowFailureDetails['error']),\n ...(record.tripwire !== undefined && { tripwire: record.tripwire }),\n startedAt: record.startedAt,\n endedAt: record.endedAt,\n };\n }\n\n if (record.__temporalStepResult === true && record.status === 'suspended' && typeof record.suspendedAt === 'number') {\n return {\n status: 'suspended',\n payload: record.payload,\n suspendPayload: record.suspendPayload,\n suspendedAt: record.suspendedAt,\n };\n }\n\n if (\n record.__temporalStepResult === true &&\n record.status === 'success' &&\n typeof record.startedAt === 'number' &&\n typeof record.endedAt === 'number'\n ) {\n return {\n status: 'success',\n payload: record.payload,\n output: record.output,\n ...(record.suspendPayload !== undefined && { suspendPayload: record.suspendPayload }),\n ...(record.resumeData !== undefined && { resumeData: record.resumeData }),\n startedAt: record.startedAt,\n endedAt: record.endedAt,\n };\n }\n\n return { status: 'success', output: value, startedAt: 0, endedAt: 0 };\n}\n\n// Like a local run, the step records start with the workflow input under `input`.\nfunction toStepResults<T>(input: unknown, steps: T): T {\n return { input, ...normalizeStepResults(steps) } as T;\n}\n\n// Workers built before step results used the core StepResult shape return raw step outputs.\nfunction normalizeStepResults<T>(steps: T): T {\n if (!steps || typeof steps !== 'object') {\n return {} as T;\n }\n return Object.fromEntries(Object.entries(steps).map(([id, value]) => [id, normalizeStepResult(value)])) as T;\n}\n","import { Workflow, createStep } from '@mastra/core/workflows';\nimport type { Step, WorkflowConfig } from '@mastra/core/workflows';\nimport type { Client } from '@temporalio/client';\nimport type { ActivityOptions } from '@temporalio/workflow';\nimport { TemporalRun } from './run';\nimport type { TemporalEngineType } from './types';\n\nexport type TemporalWorkflowParams = {\n client: Client;\n taskQueue: string;\n startToCloseTimeout?: string;\n retry?: ActivityOptions['retry'];\n};\n\nexport class TemporalWorkflow<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TWorkflowId extends string = string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TPrevSchema = TInput,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> extends Workflow<TemporalEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TPrevSchema, TRequestContext> {\n private readonly temporalClient: Client;\n readonly taskQueue: string;\n readonly startToCloseTimeout: string;\n\n constructor(\n params: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n temporalParams: TemporalWorkflowParams,\n ) {\n super(params);\n\n this.engineType = 'temporal';\n this.temporalClient = temporalParams.client;\n this.taskQueue = temporalParams.taskQueue;\n this.startToCloseTimeout = temporalParams.startToCloseTimeout ?? '1 minute';\n }\n\n async createRun(options?: { runId?: string; resourceId?: string; disableScorers?: boolean }) {\n const runId = options?.runId ?? crypto.randomUUID();\n const run = new TemporalRun<TSteps, TState, TInput, TOutput, TRequestContext>(\n {\n workflowId: this.id,\n runId,\n resourceId: options?.resourceId,\n stateSchema: this.stateSchema,\n inputSchema: this.inputSchema,\n requestContextSchema: this.requestContextSchema,\n executionEngine: this.executionEngine,\n executionGraph: this.executionGraph,\n mastra: this.mastra,\n retryConfig: this.retryConfig,\n serializedStepGraph: this.serializedStepGraph,\n disableScorers: options?.disableScorers,\n tracingPolicy: this.options.tracingPolicy,\n workflowSteps: this.steps,\n validateInputs: this.options.validateInputs,\n workflowEngineType: this.engineType,\n cleanup: undefined,\n },\n {\n client: this.temporalClient,\n taskQueue: this.taskQueue,\n },\n );\n\n this.runs.set(runId, run);\n return run;\n }\n}\n\nexport function createWorkflow<\n TSteps extends Step<string, any, any, any, any, any, TemporalEngineType, any>[] = Step<\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n TemporalEngineType\n >[],\n TWorkflowId extends string = string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TRequestContext extends Record<string, any> | unknown = unknown,\n>(\n config: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n temporal: TemporalWorkflowParams,\n) {\n return new TemporalWorkflow<TSteps, TWorkflowId, TState, TInput, TOutput, TInput, TRequestContext>(config, temporal);\n}\n\nexport function init(temporalParams: TemporalWorkflowParams) {\n return {\n createWorkflow: <\n TWorkflowId extends string,\n TState = unknown,\n TInput = unknown,\n TOutput = unknown,\n TSteps extends Step[] = Step[],\n TRequestContext extends Record<string, any> | unknown = unknown,\n >(\n config: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps, TRequestContext>,\n ) => createWorkflow<TSteps, TWorkflowId, TState, TInput, TOutput, TRequestContext>(config, temporalParams),\n createStep,\n };\n}\n"],"mappings":"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"}
|