@workflow/core 4.0.1-beta.10 → 4.0.1-beta.12
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/define-hook.d.ts +3 -2
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +2 -1
- package/dist/define-hook.js.map +1 -1
- package/dist/runtime/resume-hook.d.ts +15 -10
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +65 -59
- package/dist/runtime/resume-hook.js.map +1 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +47 -44
- package/dist/runtime/start.js.map +1 -1
- package/dist/runtime/world.js +2 -2
- package/dist/runtime/world.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +32 -14
- package/dist/runtime.js.map +1 -1
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/serialization.d.ts +28 -0
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +15 -1
- package/dist/serialization.js.map +1 -1
- package/dist/source-map.d.ts +10 -0
- package/dist/source-map.d.ts.map +1 -0
- package/dist/source-map.js +56 -0
- package/dist/source-map.js.map +1 -0
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +15 -1
- package/dist/step.js.map +1 -1
- package/dist/telemetry/semantic-conventions.d.ts +8 -8
- package/dist/util.d.ts +5 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +10 -0
- package/dist/util.js.map +1 -1
- package/dist/vm/index.js +1 -1
- package/dist/vm/index.js.map +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +7 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +19 -17
package/dist/define-hook.d.ts
CHANGED
|
@@ -50,8 +50,9 @@ export declare function defineHook<TInput, TOutput = TInput>({ schema, }?: {
|
|
|
50
50
|
*
|
|
51
51
|
* @param token - The unique token identifying the hook
|
|
52
52
|
* @param payload - The payload to send; if a `schema` is configured it is validated/transformed before resuming
|
|
53
|
-
* @returns Promise resolving to the hook entity
|
|
53
|
+
* @returns Promise resolving to the hook entity
|
|
54
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
54
55
|
*/
|
|
55
|
-
resume(token: string, payload: TInput): Promise<HookEntity
|
|
56
|
+
resume(token: string, payload: TInput): Promise<HookEntity>;
|
|
56
57
|
};
|
|
57
58
|
//# sourceMappingURL=define-hook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,EACnD,MAAM,GACP,GAAE;IACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;IAEF;;;;;;;OAOG;sBACe,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IAM7C
|
|
1
|
+
{"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,EACnD,MAAM,GACP,GAAE;IACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;IAEF;;;;;;;OAOG;sBACe,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IAM7C;;;;;;;;OAQG;kBACiB,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;EAkBpE"}
|
package/dist/define-hook.js
CHANGED
|
@@ -49,7 +49,8 @@ export function defineHook({ schema, } = {}) {
|
|
|
49
49
|
*
|
|
50
50
|
* @param token - The unique token identifying the hook
|
|
51
51
|
* @param payload - The payload to send; if a `schema` is configured it is validated/transformed before resuming
|
|
52
|
-
* @returns Promise resolving to the hook entity
|
|
52
|
+
* @returns Promise resolving to the hook entity
|
|
53
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
53
54
|
*/
|
|
54
55
|
async resume(token, payload) {
|
|
55
56
|
if (!schema?.['~standard']) {
|
package/dist/define-hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-hook.js","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,UAAU,CAA2B,EACnD,MAAM,MAGJ,EAAE;IACJ,OAAO;QACL;;;;;;;WAOG;QACH,MAAM,CAAC,QAAsB;YAC3B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED
|
|
1
|
+
{"version":3,"file":"define-hook.js","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,UAAU,CAA2B,EACnD,MAAM,MAGJ,EAAE;IACJ,OAAO;QACL;;;;;;;WAOG;QACH,MAAM,CAAC,QAAsB;YAC3B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED;;;;;;;;WAQG;QACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAe;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,MAAM,GAAG,MAAM,MAAM,CAAC;YACxB,CAAC;YAED,sDAAsD;YACtD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,MAAM,UAAU,CAAU,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -15,7 +15,8 @@ export declare function getHookByToken(token: string): Promise<Hook>;
|
|
|
15
15
|
*
|
|
16
16
|
* @param token - The unique token identifying the hook
|
|
17
17
|
* @param payload - The data payload to send to the hook
|
|
18
|
-
* @returns Promise resolving to
|
|
18
|
+
* @returns Promise resolving to the hook
|
|
19
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
19
20
|
*
|
|
20
21
|
* @example
|
|
21
22
|
*
|
|
@@ -25,17 +26,17 @@ export declare function getHookByToken(token: string): Promise<Hook>;
|
|
|
25
26
|
*
|
|
26
27
|
* export async function POST(request: Request) {
|
|
27
28
|
* const { token, data } = await request.json();
|
|
28
|
-
* const result = await resumeHook(token, data);
|
|
29
29
|
*
|
|
30
|
-
*
|
|
30
|
+
* try {
|
|
31
|
+
* const hook = await resumeHook(token, data);
|
|
32
|
+
* return Response.json({ runId: hook.runId });
|
|
33
|
+
* } catch (error) {
|
|
31
34
|
* return new Response('Hook not found', { status: 404 });
|
|
32
35
|
* }
|
|
33
|
-
*
|
|
34
|
-
* return Response.json({ runId: result.runId });
|
|
35
36
|
* }
|
|
36
37
|
* ```
|
|
37
38
|
*/
|
|
38
|
-
export declare function resumeHook<T = any>(token: string, payload: T): Promise<Hook
|
|
39
|
+
export declare function resumeHook<T = any>(token: string, payload: T): Promise<Hook>;
|
|
39
40
|
/**
|
|
40
41
|
* Resumes a webhook by sending a {@link https://developer.mozilla.org/en-US/docs/Web/API/Request | Request}
|
|
41
42
|
* object to a hook identified by its token.
|
|
@@ -45,7 +46,8 @@ export declare function resumeHook<T = any>(token: string, payload: T): Promise<
|
|
|
45
46
|
*
|
|
46
47
|
* @param token - The unique token identifying the hook
|
|
47
48
|
* @param request - The request to send to the hook
|
|
48
|
-
* @returns Promise resolving to the response
|
|
49
|
+
* @returns Promise resolving to the response
|
|
50
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
49
51
|
*
|
|
50
52
|
* @example
|
|
51
53
|
*
|
|
@@ -61,9 +63,12 @@ export declare function resumeHook<T = any>(token: string, payload: T): Promise<
|
|
|
61
63
|
* return new Response('Missing token', { status: 400 });
|
|
62
64
|
* }
|
|
63
65
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
66
|
+
* try {
|
|
67
|
+
* const response = await resumeWebhook(token, request);
|
|
68
|
+
* return response;
|
|
69
|
+
* } catch (error) {
|
|
70
|
+
* return new Response('Webhook not found', { status: 404 });
|
|
71
|
+
* }
|
|
67
72
|
* }
|
|
68
73
|
* ```
|
|
69
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-hook.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"resume-hook.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAY5C;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CAkDnB"}
|
|
@@ -4,6 +4,7 @@ import { dehydrateStepReturnValue, hydrateStepArguments, } from '../serializatio
|
|
|
4
4
|
import { WEBHOOK_RESPONSE_WRITABLE } from '../symbols.js';
|
|
5
5
|
import * as Attribute from '../telemetry/semantic-conventions.js';
|
|
6
6
|
import { getSpanContextForTraceCarrier, trace } from '../telemetry.js';
|
|
7
|
+
import { waitedUntil } from '../util.js';
|
|
7
8
|
import { getWorld } from './world.js';
|
|
8
9
|
/**
|
|
9
10
|
* Get the hook by token to find the associated workflow run,
|
|
@@ -28,7 +29,8 @@ export async function getHookByToken(token) {
|
|
|
28
29
|
*
|
|
29
30
|
* @param token - The unique token identifying the hook
|
|
30
31
|
* @param payload - The data payload to send to the hook
|
|
31
|
-
* @returns Promise resolving to
|
|
32
|
+
* @returns Promise resolving to the hook
|
|
33
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
32
34
|
*
|
|
33
35
|
* @example
|
|
34
36
|
*
|
|
@@ -38,69 +40,69 @@ export async function getHookByToken(token) {
|
|
|
38
40
|
*
|
|
39
41
|
* export async function POST(request: Request) {
|
|
40
42
|
* const { token, data } = await request.json();
|
|
41
|
-
* const result = await resumeHook(token, data);
|
|
42
43
|
*
|
|
43
|
-
*
|
|
44
|
+
* try {
|
|
45
|
+
* const hook = await resumeHook(token, data);
|
|
46
|
+
* return Response.json({ runId: hook.runId });
|
|
47
|
+
* } catch (error) {
|
|
44
48
|
* return new Response('Hook not found', { status: 404 });
|
|
45
49
|
* }
|
|
46
|
-
*
|
|
47
|
-
* return Response.json({ runId: result.runId });
|
|
48
50
|
* }
|
|
49
51
|
* ```
|
|
50
52
|
*/
|
|
51
53
|
export async function resumeHook(token, payload) {
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
54
|
+
return await waitedUntil(() => {
|
|
55
|
+
return trace('HOOK.resume', async (span) => {
|
|
56
|
+
const world = getWorld();
|
|
57
|
+
try {
|
|
58
|
+
const hook = await getHookByToken(token);
|
|
59
|
+
span?.setAttributes({
|
|
60
|
+
...Attribute.HookToken(token),
|
|
61
|
+
...Attribute.HookId(hook.hookId),
|
|
62
|
+
...Attribute.WorkflowRunId(hook.runId),
|
|
63
|
+
});
|
|
64
|
+
// Dehydrate the payload for storage
|
|
65
|
+
const ops = [];
|
|
66
|
+
const dehydratedPayload = dehydrateStepReturnValue(payload, ops, globalThis);
|
|
67
|
+
waitUntil(Promise.all(ops));
|
|
68
|
+
// Create a hook_received event with the payload
|
|
69
|
+
await world.events.create(hook.runId, {
|
|
70
|
+
eventType: 'hook_received',
|
|
71
|
+
correlationId: hook.hookId,
|
|
72
|
+
eventData: {
|
|
73
|
+
payload: dehydratedPayload,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const workflowRun = await world.runs.get(hook.runId);
|
|
77
|
+
span?.setAttributes({
|
|
78
|
+
...Attribute.WorkflowName(workflowRun.workflowName),
|
|
79
|
+
});
|
|
80
|
+
const traceCarrier = workflowRun.executionContext?.traceCarrier;
|
|
81
|
+
if (traceCarrier) {
|
|
82
|
+
const context = await getSpanContextForTraceCarrier(traceCarrier);
|
|
83
|
+
if (context) {
|
|
84
|
+
span?.addLink?.({ context });
|
|
85
|
+
}
|
|
82
86
|
}
|
|
87
|
+
// Re-trigger the workflow against the deployment ID associated
|
|
88
|
+
// with the workflow run that the hook belongs to
|
|
89
|
+
await world.queue(`__wkf_workflow_${workflowRun.workflowName}`, {
|
|
90
|
+
runId: hook.runId,
|
|
91
|
+
// attach the trace carrier from the workflow run
|
|
92
|
+
traceCarrier: workflowRun.executionContext?.traceCarrier ?? undefined,
|
|
93
|
+
}, {
|
|
94
|
+
deploymentId: workflowRun.deploymentId,
|
|
95
|
+
});
|
|
96
|
+
return hook;
|
|
83
97
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
return hook;
|
|
94
|
-
}
|
|
95
|
-
catch (_err) {
|
|
96
|
-
// If hook not found, return null
|
|
97
|
-
span?.setAttributes({
|
|
98
|
-
...Attribute.HookToken(token),
|
|
99
|
-
...Attribute.HookFound(false),
|
|
100
|
-
});
|
|
101
|
-
// TODO: Check for specific error types
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
span?.setAttributes({
|
|
100
|
+
...Attribute.HookToken(token),
|
|
101
|
+
...Attribute.HookFound(false),
|
|
102
|
+
});
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
104
106
|
});
|
|
105
107
|
}
|
|
106
108
|
/**
|
|
@@ -112,7 +114,8 @@ export async function resumeHook(token, payload) {
|
|
|
112
114
|
*
|
|
113
115
|
* @param token - The unique token identifying the hook
|
|
114
116
|
* @param request - The request to send to the hook
|
|
115
|
-
* @returns Promise resolving to the response
|
|
117
|
+
* @returns Promise resolving to the response
|
|
118
|
+
* @throws Error if the hook is not found or if there's an error during the process
|
|
116
119
|
*
|
|
117
120
|
* @example
|
|
118
121
|
*
|
|
@@ -128,9 +131,12 @@ export async function resumeHook(token, payload) {
|
|
|
128
131
|
* return new Response('Missing token', { status: 400 });
|
|
129
132
|
* }
|
|
130
133
|
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
+
* try {
|
|
135
|
+
* const response = await resumeWebhook(token, request);
|
|
136
|
+
* return response;
|
|
137
|
+
* } catch (error) {
|
|
138
|
+
* return new Response('Webhook not found', { status: 404 });
|
|
139
|
+
* }
|
|
134
140
|
* }
|
|
135
141
|
* ```
|
|
136
142
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-hook.js","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,SAAS,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAe,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"resume-hook.js","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAQpC,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI,CAC/D,GAAG,IAAI,EAAE,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACpD,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC7D,IAAI,EAAE,KAAK,EACX,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,wBAAgB,KAAK,CAAC,OAAO,EAC3B,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC1D,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC"}
|
package/dist/runtime/start.js
CHANGED
|
@@ -4,54 +4,57 @@ import { Run } from '../runtime.js';
|
|
|
4
4
|
import { dehydrateWorkflowArguments } from '../serialization.js';
|
|
5
5
|
import * as Attribute from '../telemetry/semantic-conventions.js';
|
|
6
6
|
import { serializeTraceCarrier, trace } from '../telemetry.js';
|
|
7
|
+
import { waitedUntil } from '../util.js';
|
|
7
8
|
import { getWorld } from './world.js';
|
|
8
9
|
export async function start(workflow, argsOrOptions, options) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return trace(`WORKFLOW.start ${workflowName}`, async (span) => {
|
|
15
|
-
span?.setAttributes({
|
|
16
|
-
...Attribute.WorkflowName(workflowName),
|
|
17
|
-
...Attribute.WorkflowOperation('start'),
|
|
18
|
-
});
|
|
19
|
-
let args = [];
|
|
20
|
-
let opts = options ?? {};
|
|
21
|
-
if (Array.isArray(argsOrOptions)) {
|
|
22
|
-
args = argsOrOptions;
|
|
23
|
-
}
|
|
24
|
-
else if (typeof argsOrOptions === 'object') {
|
|
25
|
-
opts = argsOrOptions;
|
|
10
|
+
return await waitedUntil(() => {
|
|
11
|
+
// @ts-expect-error this field is added by our client transform
|
|
12
|
+
const workflowName = workflow.workflowId;
|
|
13
|
+
if (!workflowName) {
|
|
14
|
+
throw new WorkflowRuntimeError(`'start' received an invalid workflow function. Ensure the Workflow Development Kit is configured correctly and the function includes a 'use workflow' directive.`, { slug: 'start-invalid-workflow-function' });
|
|
26
15
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
16
|
+
return trace(`WORKFLOW.start ${workflowName}`, async (span) => {
|
|
17
|
+
span?.setAttributes({
|
|
18
|
+
...Attribute.WorkflowName(workflowName),
|
|
19
|
+
...Attribute.WorkflowOperation('start'),
|
|
20
|
+
});
|
|
21
|
+
let args = [];
|
|
22
|
+
let opts = options ?? {};
|
|
23
|
+
if (Array.isArray(argsOrOptions)) {
|
|
24
|
+
args = argsOrOptions;
|
|
25
|
+
}
|
|
26
|
+
else if (typeof argsOrOptions === 'object') {
|
|
27
|
+
opts = argsOrOptions;
|
|
28
|
+
}
|
|
29
|
+
span?.setAttributes({
|
|
30
|
+
...Attribute.WorkflowArgumentsCount(args.length),
|
|
31
|
+
});
|
|
32
|
+
const world = getWorld();
|
|
33
|
+
const deploymentId = opts.deploymentId ?? (await world.getDeploymentId());
|
|
34
|
+
const ops = [];
|
|
35
|
+
const workflowArguments = dehydrateWorkflowArguments(args, ops);
|
|
36
|
+
// Serialize current trace context to propagate across queue boundary
|
|
37
|
+
const traceCarrier = await serializeTraceCarrier();
|
|
38
|
+
const runResponse = await world.runs.create({
|
|
39
|
+
deploymentId: deploymentId,
|
|
40
|
+
workflowName: workflowName,
|
|
41
|
+
input: workflowArguments,
|
|
42
|
+
executionContext: { traceCarrier },
|
|
43
|
+
});
|
|
44
|
+
waitUntil(Promise.all(ops));
|
|
45
|
+
span?.setAttributes({
|
|
46
|
+
...Attribute.WorkflowRunId(runResponse.runId),
|
|
47
|
+
...Attribute.WorkflowRunStatus(runResponse.status),
|
|
48
|
+
...Attribute.DeploymentId(deploymentId),
|
|
49
|
+
});
|
|
50
|
+
await world.queue(`__wkf_workflow_${workflowName}`, {
|
|
51
|
+
runId: runResponse.runId,
|
|
52
|
+
traceCarrier,
|
|
53
|
+
}, {
|
|
54
|
+
deploymentId,
|
|
55
|
+
});
|
|
56
|
+
return new Run(runResponse.runId);
|
|
53
57
|
});
|
|
54
|
-
return new Run(runResponse.runId);
|
|
55
58
|
});
|
|
56
59
|
}
|
|
57
60
|
//# sourceMappingURL=start.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,SAAS,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4CtC,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAA6D,EAC7D,aAAoC,EACpC,OAAsB;IAEtB,+DAA+D;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/world.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
-
import
|
|
2
|
+
import { join } from 'node:path';
|
|
3
3
|
import { createEmbeddedWorld } from '@workflow/world-local';
|
|
4
4
|
import { createVercelWorld } from '@workflow/world-vercel';
|
|
5
|
-
const require = createRequire(
|
|
5
|
+
const require = createRequire(join(process.cwd(), 'index.js'));
|
|
6
6
|
let worldCache;
|
|
7
7
|
let stubbedWorldCache;
|
|
8
8
|
function defaultWorld() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;AAE/D,IAAI,UAA6B,CAAC;AAClC,IAAI,iBAAoC,CAAC;AAEzC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAU,EAAE;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,YAAY,EAAE,CAAC;IAExE,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,iBAAiB,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;YAC9C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;YAC7C,aAAa,EAAE;gBACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBAC5C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;gBAC9C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;aACzC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,mBAAmB,CAAC;YACzB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,EAAW,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,OAAO,EAAW,CAAC;IAChC,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,WAAW,EAAW,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,gCAAgC,WAAW,yFAAyF,CACrI,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAsC,EAAE;IACtE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,iBAAiB,GAAG,MAAM,CAAC;IAC3B,OAAO;QACL,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAU,EAAE;IAClC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,UAAU,GAAG,WAAW,EAAE,CAAC;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAwB,EAAQ,EAAE;IACzD,UAAU,GAAG,KAAK,CAAC;IACnB,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC,CAAC"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAgCzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM;IAKzB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAEvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAElC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAElC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAEzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAE3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC;IASpB;;;;OAIG;YACW,eAAe;CA2B9B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D;AA8BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,uCA+RtD;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,qCAuSxB,CAAC;AAIJ,wBAAgB,OAAO,SAAK"}
|
package/dist/runtime.js
CHANGED
|
@@ -3,10 +3,12 @@ import { FatalError, RetryableError, WorkflowAPIError, WorkflowRunCancelledError
|
|
|
3
3
|
import { getPort } from '@workflow/utils/get-port';
|
|
4
4
|
import { WorkflowSuspension } from './global.js';
|
|
5
5
|
import { runtimeLogger } from './logger.js';
|
|
6
|
+
import { parseWorkflowName } from './parse-name.js';
|
|
6
7
|
import { getStepFunction } from './private.js';
|
|
7
8
|
import { getWorld, getWorldHandlers } from './runtime/world.js';
|
|
8
9
|
import { StepInvokePayloadSchema, WorkflowInvokePayloadSchema, } from './schemas.js';
|
|
9
10
|
import { dehydrateStepArguments, dehydrateStepReturnValue, getExternalRevivers, hydrateStepArguments, hydrateWorkflowReturnValue, } from './serialization.js';
|
|
11
|
+
import { remapErrorStack } from './source-map.js';
|
|
10
12
|
// TODO: move step handler out to a separate file
|
|
11
13
|
import { contextStorage } from './step/context-storage.js';
|
|
12
14
|
import * as Attribute from './telemetry/semantic-conventions.js';
|
|
@@ -117,7 +119,7 @@ export class Run {
|
|
|
117
119
|
throw new WorkflowRunCancelledError(this.runId);
|
|
118
120
|
}
|
|
119
121
|
if (run.status === 'failed') {
|
|
120
|
-
throw new WorkflowRunFailedError(this.runId, run.error
|
|
122
|
+
throw new WorkflowRunFailedError(this.runId, run.error);
|
|
121
123
|
}
|
|
122
124
|
throw new WorkflowRunNotCompletedError(this.runId, run.status);
|
|
123
125
|
}
|
|
@@ -371,13 +373,22 @@ export function workflowEntrypoint(workflowCode) {
|
|
|
371
373
|
}
|
|
372
374
|
else {
|
|
373
375
|
const errorName = getErrorName(err);
|
|
374
|
-
const
|
|
376
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
377
|
+
let errorStack = getErrorStack(err);
|
|
378
|
+
// Remap error stack using source maps to show original source locations
|
|
379
|
+
if (errorStack) {
|
|
380
|
+
const parsedName = parseWorkflowName(workflowName);
|
|
381
|
+
const filename = parsedName?.path || workflowName;
|
|
382
|
+
errorStack = remapErrorStack(errorStack, filename, workflowCode);
|
|
383
|
+
}
|
|
375
384
|
console.error(`${errorName} while running "${runId}" workflow:\n\n${errorStack}`);
|
|
376
385
|
await world.runs.update(runId, {
|
|
377
386
|
status: 'failed',
|
|
378
|
-
error:
|
|
379
|
-
|
|
380
|
-
|
|
387
|
+
error: {
|
|
388
|
+
message: errorMessage,
|
|
389
|
+
stack: errorStack,
|
|
390
|
+
// TODO: include error codes when we define them
|
|
391
|
+
},
|
|
381
392
|
});
|
|
382
393
|
span?.setAttributes({
|
|
383
394
|
...Attribute.WorkflowRunStatus('failed'),
|
|
@@ -491,7 +502,7 @@ export const stepEntrypoint =
|
|
|
491
502
|
workflowRunId,
|
|
492
503
|
workflowStartedAt: new Date(+workflowStartedAt),
|
|
493
504
|
// TODO: there should be a getUrl method on the world interface itself. This
|
|
494
|
-
// solution only works for vercel +
|
|
505
|
+
// solution only works for vercel + local worlds.
|
|
495
506
|
url: process.env.VERCEL_URL
|
|
496
507
|
? `https://${process.env.VERCEL_URL}`
|
|
497
508
|
: `http://localhost:${port ?? 3000}`,
|
|
@@ -530,7 +541,8 @@ export const stepEntrypoint =
|
|
|
530
541
|
}
|
|
531
542
|
}
|
|
532
543
|
if (FatalError.is(err)) {
|
|
533
|
-
const
|
|
544
|
+
const errorStack = getErrorStack(err);
|
|
545
|
+
const stackLines = errorStack.split('\n').slice(0, 4);
|
|
534
546
|
console.error(`[Workflows] "${workflowRunId}" - Encountered \`FatalError\` while executing step "${stepName}":\n > ${stackLines.join('\n > ')}\n\nBubbling up error to parent workflow`);
|
|
535
547
|
// Fatal error - store the error in the event log and re-invoke the workflow
|
|
536
548
|
await world.events.create(workflowRunId, {
|
|
@@ -538,15 +550,17 @@ export const stepEntrypoint =
|
|
|
538
550
|
correlationId: stepId,
|
|
539
551
|
eventData: {
|
|
540
552
|
error: String(err),
|
|
541
|
-
stack:
|
|
553
|
+
stack: errorStack,
|
|
542
554
|
fatal: true,
|
|
543
555
|
},
|
|
544
556
|
});
|
|
545
557
|
await world.steps.update(workflowRunId, stepId, {
|
|
546
558
|
status: 'failed',
|
|
547
|
-
error:
|
|
548
|
-
|
|
549
|
-
|
|
559
|
+
error: {
|
|
560
|
+
message: err.message || String(err),
|
|
561
|
+
stack: errorStack,
|
|
562
|
+
// TODO: include error codes when we define them
|
|
563
|
+
},
|
|
550
564
|
});
|
|
551
565
|
span?.setAttributes({
|
|
552
566
|
...Attribute.StepStatus('failed'),
|
|
@@ -561,7 +575,8 @@ export const stepEntrypoint =
|
|
|
561
575
|
});
|
|
562
576
|
if (attempt >= maxRetries) {
|
|
563
577
|
// Max retries reached
|
|
564
|
-
const
|
|
578
|
+
const errorStack = getErrorStack(err);
|
|
579
|
+
const stackLines = errorStack.split('\n').slice(0, 4);
|
|
565
580
|
console.error(`[Workflows] "${workflowRunId}" - Encountered \`Error\` while executing step "${stepName}" (attempt ${attempt}):\n > ${stackLines.join('\n > ')}\n\n Max retries reached\n Bubbling error to parent workflow`);
|
|
566
581
|
const errorMessage = `Step "${stepName}" failed after max retries: ${String(err)}`;
|
|
567
582
|
await world.events.create(workflowRunId, {
|
|
@@ -569,13 +584,16 @@ export const stepEntrypoint =
|
|
|
569
584
|
correlationId: stepId,
|
|
570
585
|
eventData: {
|
|
571
586
|
error: errorMessage,
|
|
572
|
-
stack:
|
|
587
|
+
stack: errorStack,
|
|
573
588
|
fatal: true,
|
|
574
589
|
},
|
|
575
590
|
});
|
|
576
591
|
await world.steps.update(workflowRunId, stepId, {
|
|
577
592
|
status: 'failed',
|
|
578
|
-
error:
|
|
593
|
+
error: {
|
|
594
|
+
message: errorMessage,
|
|
595
|
+
stack: errorStack,
|
|
596
|
+
},
|
|
579
597
|
});
|
|
580
598
|
span?.setAttributes({
|
|
581
599
|
...Attribute.StepStatus('failed'),
|