@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 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 toStepResults(input, { steps, stepMeta }) {
8
- if (!stepMeta) return {};
9
- const records = { input };
10
- for (const [stepId, times] of Object.entries(stepMeta)) records[stepId] = {
11
- status: "success",
12
- output: steps[stepId],
13
- ...times
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 { input, initialState, requestContext } = await this.#prepareStart(args);
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.client.workflow.start(require_utils.toWorkflowType(this.workflowId), {
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
- return this.#failedResult(error, input, initialState);
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
- const result = await this.#settle(handle, input, initialState);
49
- await this.#invokeFinishCallbacks(result, input, requestContext);
50
- return result;
45
+ return this.awaitResultOrSuspended(handle, input, initialState, requestContext);
51
46
  }
52
- async #prepareStart(args) {
53
- const input = await this._validateInput(args.inputData);
54
- const initialState = await this._validateInitialState(args.initialState) ?? {};
55
- await this._validateRequestContext(args.requestContext);
56
- const requestContext = args.requestContext ?? new _mastra_core_di.RequestContext();
57
- await this.executionEngine.invokeStartCallback({
58
- runId: this.runId,
59
- workflowId: this.workflowId,
60
- resourceId: this.resourceId,
61
- getInitData: () => input,
62
- requestContext,
63
- state: initialState
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 #settle(handle, input, initialState) {
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
- const result = await handle.result();
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
- status: "success",
76
- input,
77
- result: result.result,
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
- return this.#failedResult(error, input, initialState);
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
- #failedResult(error, input, initialState) {
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
- #invokeFinishCallbacks(result, input, requestContext) {
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(..._args) {
131
- return this.unsupported("resume");
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(..._args) {
134
- return this.unsupported("resumeAsync");
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 { input, initialState, requestContext } = await this.#prepareStart(args);
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
- const hasFinishCallbacks = Boolean(onFinish || onError);
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;
@@ -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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"}