@upstash/workflow 0.2.8-rc-invoke → 0.2.8
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/astro.d.mts +3 -8
- package/astro.d.ts +3 -8
- package/astro.js +75 -239
- package/astro.mjs +7 -33
- package/{chunk-IWAW7GIG.mjs → chunk-BPUSHNSD.mjs} +171 -195
- package/cloudflare.d.mts +4 -9
- package/cloudflare.d.ts +4 -9
- package/cloudflare.js +81 -242
- package/cloudflare.mjs +13 -36
- package/express.d.mts +3 -7
- package/express.d.ts +3 -7
- package/express.js +78 -249
- package/express.mjs +10 -41
- package/h3.d.mts +7 -9
- package/h3.d.ts +7 -9
- package/h3.js +88 -250
- package/h3.mjs +20 -44
- package/hono.d.mts +4 -10
- package/hono.d.ts +4 -10
- package/hono.js +83 -241
- package/hono.mjs +15 -35
- package/index.d.mts +267 -18
- package/index.d.ts +267 -18
- package/index.js +133 -102
- package/index.mjs +56 -1
- package/nextjs.d.mts +5 -14
- package/nextjs.d.ts +5 -14
- package/nextjs.js +62 -250
- package/nextjs.mjs +16 -64
- package/package.json +1 -1
- package/solidjs.d.mts +3 -3
- package/solidjs.d.ts +3 -3
- package/solidjs.js +56 -108
- package/solidjs.mjs +10 -7
- package/svelte.d.mts +4 -12
- package/svelte.d.ts +4 -12
- package/svelte.js +81 -241
- package/svelte.mjs +13 -35
- package/{types-C7Y7WUQd.d.mts → types-B62AnIU3.d.mts} +59 -33
- package/{types-C7Y7WUQd.d.ts → types-B62AnIU3.d.ts} +59 -33
- package/chunk-LCZMBGEM.mjs +0 -95
- package/serve-many-BlBvXfBS.d.mts +0 -10
- package/serve-many-Dw-UUnH6.d.ts +0 -10
package/astro.d.mts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import {
|
|
3
|
-
import { s as serveManyBase } from './serve-many-BlBvXfBS.mjs';
|
|
2
|
+
import { e as WorkflowContext, k as PublicServeOptions } from './types-B62AnIU3.mjs';
|
|
4
3
|
import '@upstash/qstash';
|
|
5
4
|
import 'zod';
|
|
6
5
|
import 'ai';
|
|
7
6
|
import '@ai-sdk/openai';
|
|
8
7
|
|
|
9
|
-
declare function serve<TInitialPayload = unknown
|
|
8
|
+
declare function serve<TInitialPayload = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<void>, options?: PublicServeOptions<TInitialPayload>): {
|
|
10
9
|
POST: APIRoute;
|
|
11
10
|
};
|
|
12
|
-
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
|
|
13
|
-
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
|
|
14
|
-
POST: (context: APIContext<Record<string, any>, Record<string, string | undefined>>) => Promise<any>;
|
|
15
|
-
};
|
|
16
11
|
|
|
17
|
-
export {
|
|
12
|
+
export { serve };
|
package/astro.d.ts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import {
|
|
3
|
-
import { s as serveManyBase } from './serve-many-Dw-UUnH6.js';
|
|
2
|
+
import { e as WorkflowContext, k as PublicServeOptions } from './types-B62AnIU3.js';
|
|
4
3
|
import '@upstash/qstash';
|
|
5
4
|
import 'zod';
|
|
6
5
|
import 'ai';
|
|
7
6
|
import '@ai-sdk/openai';
|
|
8
7
|
|
|
9
|
-
declare function serve<TInitialPayload = unknown
|
|
8
|
+
declare function serve<TInitialPayload = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<void>, options?: PublicServeOptions<TInitialPayload>): {
|
|
10
9
|
POST: APIRoute;
|
|
11
10
|
};
|
|
12
|
-
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
|
|
13
|
-
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
|
|
14
|
-
POST: (context: APIContext<Record<string, any>, Record<string, string | undefined>>) => Promise<any>;
|
|
15
|
-
};
|
|
16
11
|
|
|
17
|
-
export {
|
|
12
|
+
export { serve };
|
package/astro.js
CHANGED
|
@@ -20,9 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// platforms/astro.ts
|
|
21
21
|
var astro_exports = {};
|
|
22
22
|
__export(astro_exports, {
|
|
23
|
-
|
|
24
|
-
serve: () => serve,
|
|
25
|
-
serveMany: () => serveMany
|
|
23
|
+
serve: () => serve
|
|
26
24
|
});
|
|
27
25
|
module.exports = __toCommonJS(astro_exports);
|
|
28
26
|
|
|
@@ -90,7 +88,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
90
88
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
91
89
|
var NO_CONCURRENCY = 1;
|
|
92
90
|
var DEFAULT_RETRIES = 3;
|
|
93
|
-
var VERSION = "v0.2.
|
|
91
|
+
var VERSION = "v0.2.3";
|
|
94
92
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
95
93
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
96
94
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -137,31 +135,6 @@ var formatWorkflowError = (error) => {
|
|
|
137
135
|
};
|
|
138
136
|
};
|
|
139
137
|
|
|
140
|
-
// src/utils.ts
|
|
141
|
-
var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
|
|
142
|
-
var NANOID_LENGTH = 21;
|
|
143
|
-
function getRandomInt() {
|
|
144
|
-
return Math.floor(Math.random() * NANOID_CHARS.length);
|
|
145
|
-
}
|
|
146
|
-
function nanoid() {
|
|
147
|
-
return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
|
|
148
|
-
}
|
|
149
|
-
function getWorkflowRunId(id) {
|
|
150
|
-
return `wfr_${id ?? nanoid()}`;
|
|
151
|
-
}
|
|
152
|
-
function decodeBase64(base64) {
|
|
153
|
-
try {
|
|
154
|
-
const binString = atob(base64);
|
|
155
|
-
const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
156
|
-
return new TextDecoder().decode(intArray);
|
|
157
|
-
} catch (error) {
|
|
158
|
-
console.warn(
|
|
159
|
-
`Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
|
|
160
|
-
);
|
|
161
|
-
return atob(base64);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
138
|
// src/context/steps.ts
|
|
166
139
|
var BaseLazyStep = class {
|
|
167
140
|
stepName;
|
|
@@ -342,41 +315,6 @@ var LazyNotifyStep = class extends LazyFunctionStep {
|
|
|
342
315
|
});
|
|
343
316
|
}
|
|
344
317
|
};
|
|
345
|
-
var LazyInvokeStep = class extends BaseLazyStep {
|
|
346
|
-
stepType = "Invoke";
|
|
347
|
-
params;
|
|
348
|
-
constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
|
|
349
|
-
super(stepName);
|
|
350
|
-
this.params = {
|
|
351
|
-
workflow,
|
|
352
|
-
body,
|
|
353
|
-
headers,
|
|
354
|
-
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
355
|
-
retries
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
getPlanStep(concurrent, targetStep) {
|
|
359
|
-
return {
|
|
360
|
-
stepId: 0,
|
|
361
|
-
stepName: this.stepName,
|
|
362
|
-
stepType: this.stepType,
|
|
363
|
-
concurrent,
|
|
364
|
-
targetStep
|
|
365
|
-
};
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* won't be used as it's the server who will add the result step
|
|
369
|
-
* in Invoke step.
|
|
370
|
-
*/
|
|
371
|
-
getResultStep(concurrent, stepId) {
|
|
372
|
-
return Promise.resolve({
|
|
373
|
-
stepId,
|
|
374
|
-
stepName: this.stepName,
|
|
375
|
-
stepType: this.stepType,
|
|
376
|
-
concurrent
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
318
|
|
|
381
319
|
// node_modules/neverthrow/dist/index.es.js
|
|
382
320
|
var defaultErrorConfig = {
|
|
@@ -801,8 +739,7 @@ var StepTypes = [
|
|
|
801
739
|
"SleepUntil",
|
|
802
740
|
"Call",
|
|
803
741
|
"Wait",
|
|
804
|
-
"Notify"
|
|
805
|
-
"Invoke"
|
|
742
|
+
"Notify"
|
|
806
743
|
];
|
|
807
744
|
|
|
808
745
|
// src/workflow-requests.ts
|
|
@@ -810,7 +747,7 @@ var import_qstash3 = require("@upstash/qstash");
|
|
|
810
747
|
var triggerFirstInvocation = async ({
|
|
811
748
|
workflowContext,
|
|
812
749
|
useJSONContent,
|
|
813
|
-
telemetry
|
|
750
|
+
telemetry,
|
|
814
751
|
debug
|
|
815
752
|
}) => {
|
|
816
753
|
const { headers } = getHeaders({
|
|
@@ -820,7 +757,7 @@ var triggerFirstInvocation = async ({
|
|
|
820
757
|
userHeaders: workflowContext.headers,
|
|
821
758
|
failureUrl: workflowContext.failureUrl,
|
|
822
759
|
retries: workflowContext.retries,
|
|
823
|
-
telemetry
|
|
760
|
+
telemetry
|
|
824
761
|
});
|
|
825
762
|
if (workflowContext.headers.get("content-type")) {
|
|
826
763
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -866,8 +803,8 @@ var triggerRouteFunction = async ({
|
|
|
866
803
|
debug
|
|
867
804
|
}) => {
|
|
868
805
|
try {
|
|
869
|
-
|
|
870
|
-
await onCleanup(
|
|
806
|
+
await onStep();
|
|
807
|
+
await onCleanup();
|
|
871
808
|
return ok("workflow-finished");
|
|
872
809
|
} catch (error) {
|
|
873
810
|
const error_ = error;
|
|
@@ -888,15 +825,14 @@ var triggerRouteFunction = async ({
|
|
|
888
825
|
}
|
|
889
826
|
}
|
|
890
827
|
};
|
|
891
|
-
var triggerWorkflowDelete = async (workflowContext,
|
|
828
|
+
var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
|
|
892
829
|
await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
|
|
893
830
|
deletedWorkflowRunId: workflowContext.workflowRunId
|
|
894
831
|
});
|
|
895
832
|
await workflowContext.qstashClient.http.request({
|
|
896
833
|
path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
|
|
897
834
|
method: "DELETE",
|
|
898
|
-
parseResponseAsJson: false
|
|
899
|
-
body: JSON.stringify(result)
|
|
835
|
+
parseResponseAsJson: false
|
|
900
836
|
});
|
|
901
837
|
await debug?.log(
|
|
902
838
|
"SUBMIT",
|
|
@@ -925,7 +861,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
925
861
|
workflowUrl,
|
|
926
862
|
failureUrl,
|
|
927
863
|
retries,
|
|
928
|
-
telemetry
|
|
864
|
+
telemetry,
|
|
929
865
|
debug
|
|
930
866
|
}) => {
|
|
931
867
|
try {
|
|
@@ -993,7 +929,7 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
993
929
|
userHeaders,
|
|
994
930
|
failureUrl,
|
|
995
931
|
retries,
|
|
996
|
-
telemetry
|
|
932
|
+
telemetry
|
|
997
933
|
});
|
|
998
934
|
const callResponse = {
|
|
999
935
|
status: callbackMessage.status,
|
|
@@ -1032,11 +968,11 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
1032
968
|
);
|
|
1033
969
|
}
|
|
1034
970
|
};
|
|
1035
|
-
var getTelemetryHeaders = (
|
|
971
|
+
var getTelemetryHeaders = (telemetry) => {
|
|
1036
972
|
return {
|
|
1037
|
-
[TELEMETRY_HEADER_SDK]:
|
|
1038
|
-
[TELEMETRY_HEADER_FRAMEWORK]:
|
|
1039
|
-
[TELEMETRY_HEADER_RUNTIME]:
|
|
973
|
+
[TELEMETRY_HEADER_SDK]: telemetry.sdk,
|
|
974
|
+
[TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
|
|
975
|
+
[TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
|
|
1040
976
|
};
|
|
1041
977
|
};
|
|
1042
978
|
var getHeaders = ({
|
|
@@ -1049,17 +985,14 @@ var getHeaders = ({
|
|
|
1049
985
|
step,
|
|
1050
986
|
callRetries,
|
|
1051
987
|
callTimeout,
|
|
1052
|
-
telemetry
|
|
988
|
+
telemetry
|
|
1053
989
|
}) => {
|
|
1054
|
-
const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
|
|
1055
990
|
const baseHeaders = {
|
|
1056
991
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
1057
992
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
1058
993
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
1059
994
|
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
|
|
1060
|
-
|
|
1061
|
-
"content-type": contentType,
|
|
1062
|
-
...telemetry2 ? getTelemetryHeaders(telemetry2) : {}
|
|
995
|
+
...telemetry ? getTelemetryHeaders(telemetry) : {}
|
|
1063
996
|
};
|
|
1064
997
|
if (!step?.callUrl) {
|
|
1065
998
|
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
@@ -1069,13 +1002,18 @@ var getHeaders = ({
|
|
|
1069
1002
|
}
|
|
1070
1003
|
if (failureUrl) {
|
|
1071
1004
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
1005
|
+
baseHeaders[`Upstash-Failure-Callback-Forward-Upstash-Workflow-Failure-Callback`] = "true";
|
|
1006
|
+
baseHeaders["Upstash-Failure-Callback-Workflow-Runid"] = workflowRunId;
|
|
1007
|
+
baseHeaders["Upstash-Failure-Callback-Workflow-Init"] = "false";
|
|
1008
|
+
baseHeaders["Upstash-Failure-Callback-Workflow-Url"] = workflowUrl;
|
|
1009
|
+
baseHeaders["Upstash-Failure-Callback-Workflow-Calltype"] = "failureCall";
|
|
1010
|
+
if (retries !== void 0) {
|
|
1011
|
+
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
1012
|
+
}
|
|
1072
1013
|
if (!step?.callUrl) {
|
|
1073
1014
|
baseHeaders["Upstash-Failure-Callback"] = failureUrl;
|
|
1074
1015
|
}
|
|
1075
1016
|
}
|
|
1076
|
-
if (step?.stepType === "Invoke") {
|
|
1077
|
-
baseHeaders["upstash-workflow-invoke"] = "true";
|
|
1078
|
-
}
|
|
1079
1017
|
if (step?.callUrl) {
|
|
1080
1018
|
baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
|
|
1081
1019
|
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
|
|
@@ -1097,6 +1035,7 @@ var getHeaders = ({
|
|
|
1097
1035
|
baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
|
|
1098
1036
|
}
|
|
1099
1037
|
}
|
|
1038
|
+
const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
|
|
1100
1039
|
if (step?.callHeaders) {
|
|
1101
1040
|
const forwardedHeaders = Object.fromEntries(
|
|
1102
1041
|
Object.entries(step.callHeaders).map(([header, value]) => [
|
|
@@ -1136,8 +1075,8 @@ var getHeaders = ({
|
|
|
1136
1075
|
Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
|
|
1137
1076
|
),
|
|
1138
1077
|
// to include telemetry headers:
|
|
1139
|
-
...
|
|
1140
|
-
Object.entries(getTelemetryHeaders(
|
|
1078
|
+
...telemetry ? Object.fromEntries(
|
|
1079
|
+
Object.entries(getTelemetryHeaders(telemetry)).map(([header, value]) => [
|
|
1141
1080
|
header,
|
|
1142
1081
|
[value]
|
|
1143
1082
|
])
|
|
@@ -1146,7 +1085,8 @@ var getHeaders = ({
|
|
|
1146
1085
|
"Upstash-Workflow-Runid": [workflowRunId],
|
|
1147
1086
|
[WORKFLOW_INIT_HEADER]: ["false"],
|
|
1148
1087
|
[WORKFLOW_URL_HEADER]: [workflowUrl],
|
|
1149
|
-
"Upstash-Workflow-CallType": ["step"]
|
|
1088
|
+
"Upstash-Workflow-CallType": ["step"],
|
|
1089
|
+
"Content-Type": [contentType]
|
|
1150
1090
|
}
|
|
1151
1091
|
};
|
|
1152
1092
|
}
|
|
@@ -1192,10 +1132,10 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1192
1132
|
stepCount = 0;
|
|
1193
1133
|
planStepCount = 0;
|
|
1194
1134
|
executingStep = false;
|
|
1195
|
-
constructor(context, steps,
|
|
1135
|
+
constructor(context, steps, telemetry, debug) {
|
|
1196
1136
|
this.context = context;
|
|
1197
1137
|
this.steps = steps;
|
|
1198
|
-
this.telemetry =
|
|
1138
|
+
this.telemetry = telemetry;
|
|
1199
1139
|
this.debug = debug;
|
|
1200
1140
|
this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
|
|
1201
1141
|
}
|
|
@@ -1441,23 +1381,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1441
1381
|
method: "POST",
|
|
1442
1382
|
parseResponseAsJson: false
|
|
1443
1383
|
});
|
|
1444
|
-
throw new WorkflowAbort(
|
|
1445
|
-
}
|
|
1446
|
-
if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
|
|
1447
|
-
const invokeStep = steps[0];
|
|
1448
|
-
const lazyInvokeStep = lazySteps[0];
|
|
1449
|
-
await lazyInvokeStep.params.workflow.callback(
|
|
1450
|
-
{
|
|
1451
|
-
body: lazyInvokeStep.params.body,
|
|
1452
|
-
headers: lazyInvokeStep.params.headers,
|
|
1453
|
-
workflowRunId: lazyInvokeStep.params.workflowRunId,
|
|
1454
|
-
workflow: lazyInvokeStep.params.workflow,
|
|
1455
|
-
retries: lazyInvokeStep.params.retries
|
|
1456
|
-
},
|
|
1457
|
-
invokeStep,
|
|
1458
|
-
this.context
|
|
1459
|
-
);
|
|
1460
|
-
throw new WorkflowAbort(invokeStep.stepName, invokeStep);
|
|
1384
|
+
throw new WorkflowAbort(steps[0].stepName, steps[0]);
|
|
1461
1385
|
}
|
|
1462
1386
|
const result = await this.context.qstashClient.batchJSON(
|
|
1463
1387
|
steps.map((singleStep, index) => {
|
|
@@ -1776,9 +1700,10 @@ var wrapTools = ({
|
|
|
1776
1700
|
return Object.fromEntries(
|
|
1777
1701
|
Object.entries(tools).map((toolInfo) => {
|
|
1778
1702
|
const [toolName, tool3] = toolInfo;
|
|
1703
|
+
const executeAsStep = "executeAsStep" in tool3 ? tool3.executeAsStep : true;
|
|
1779
1704
|
const aiSDKTool = convertToAISDKTool(tool3);
|
|
1780
1705
|
const execute = aiSDKTool.execute;
|
|
1781
|
-
if (execute) {
|
|
1706
|
+
if (execute && executeAsStep) {
|
|
1782
1707
|
const wrappedExecute = (...params) => {
|
|
1783
1708
|
return context.run(`Run tool ${toolName}`, () => execute(...params));
|
|
1784
1709
|
};
|
|
@@ -2143,7 +2068,7 @@ var WorkflowContext = class {
|
|
|
2143
2068
|
initialPayload,
|
|
2144
2069
|
env,
|
|
2145
2070
|
retries,
|
|
2146
|
-
telemetry
|
|
2071
|
+
telemetry
|
|
2147
2072
|
}) {
|
|
2148
2073
|
this.qstashClient = qstashClient;
|
|
2149
2074
|
this.workflowRunId = workflowRunId;
|
|
@@ -2154,7 +2079,7 @@ var WorkflowContext = class {
|
|
|
2154
2079
|
this.requestPayload = initialPayload;
|
|
2155
2080
|
this.env = env ?? {};
|
|
2156
2081
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
2157
|
-
this.executor = new AutoExecutor(this, this.steps,
|
|
2082
|
+
this.executor = new AutoExecutor(this, this.steps, telemetry, debug);
|
|
2158
2083
|
}
|
|
2159
2084
|
/**
|
|
2160
2085
|
* Executes a workflow step
|
|
@@ -2374,13 +2299,6 @@ var WorkflowContext = class {
|
|
|
2374
2299
|
return result;
|
|
2375
2300
|
}
|
|
2376
2301
|
}
|
|
2377
|
-
async invoke(stepName, settings) {
|
|
2378
|
-
const result = await this.addStep(new LazyInvokeStep(stepName, settings));
|
|
2379
|
-
return {
|
|
2380
|
-
...result,
|
|
2381
|
-
body: result.body ? JSON.parse(result.body) : void 0
|
|
2382
|
-
};
|
|
2383
|
-
}
|
|
2384
2302
|
/**
|
|
2385
2303
|
* Cancel the current workflow run
|
|
2386
2304
|
*
|
|
@@ -2458,6 +2376,31 @@ var WorkflowLogger = class _WorkflowLogger {
|
|
|
2458
2376
|
}
|
|
2459
2377
|
};
|
|
2460
2378
|
|
|
2379
|
+
// src/utils.ts
|
|
2380
|
+
var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
|
|
2381
|
+
var NANOID_LENGTH = 21;
|
|
2382
|
+
function getRandomInt() {
|
|
2383
|
+
return Math.floor(Math.random() * NANOID_CHARS.length);
|
|
2384
|
+
}
|
|
2385
|
+
function nanoid() {
|
|
2386
|
+
return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
|
|
2387
|
+
}
|
|
2388
|
+
function getWorkflowRunId(id) {
|
|
2389
|
+
return `wfr_${id ?? nanoid()}`;
|
|
2390
|
+
}
|
|
2391
|
+
function decodeBase64(base64) {
|
|
2392
|
+
try {
|
|
2393
|
+
const binString = atob(base64);
|
|
2394
|
+
const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
2395
|
+
return new TextDecoder().decode(intArray);
|
|
2396
|
+
} catch (error) {
|
|
2397
|
+
console.warn(
|
|
2398
|
+
`Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
|
|
2399
|
+
);
|
|
2400
|
+
return atob(base64);
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2461
2404
|
// src/serve/authorization.ts
|
|
2462
2405
|
var import_qstash8 = require("@upstash/qstash");
|
|
2463
2406
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
@@ -2795,7 +2738,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
|
|
|
2795
2738
|
var AUTH_FAIL_MESSAGE = `Failed to authenticate Workflow request. If this is unexpected, see the caveat https://upstash.com/docs/workflow/basics/caveats#avoid-non-deterministic-code-outside-context-run`;
|
|
2796
2739
|
|
|
2797
2740
|
// src/serve/index.ts
|
|
2798
|
-
var serveBase = (routeFunction,
|
|
2741
|
+
var serveBase = (routeFunction, telemetry, options) => {
|
|
2799
2742
|
const {
|
|
2800
2743
|
qstashClient,
|
|
2801
2744
|
onStepFinish,
|
|
@@ -2811,7 +2754,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
|
|
|
2811
2754
|
useJSONContent,
|
|
2812
2755
|
disableTelemetry
|
|
2813
2756
|
} = processOptions(options);
|
|
2814
|
-
|
|
2757
|
+
telemetry = disableTelemetry ? void 0 : telemetry;
|
|
2815
2758
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
2816
2759
|
const handler = async (request) => {
|
|
2817
2760
|
await debug?.log("INFO", "ENDPOINT_START");
|
|
@@ -2869,7 +2812,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
|
|
|
2869
2812
|
debug,
|
|
2870
2813
|
env,
|
|
2871
2814
|
retries,
|
|
2872
|
-
telemetry
|
|
2815
|
+
telemetry
|
|
2873
2816
|
});
|
|
2874
2817
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
2875
2818
|
routeFunction,
|
|
@@ -2892,7 +2835,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
|
|
|
2892
2835
|
workflowUrl,
|
|
2893
2836
|
failureUrl: workflowFailureUrl,
|
|
2894
2837
|
retries,
|
|
2895
|
-
telemetry
|
|
2838
|
+
telemetry,
|
|
2896
2839
|
debug
|
|
2897
2840
|
});
|
|
2898
2841
|
if (callReturnCheck.isErr()) {
|
|
@@ -2901,10 +2844,10 @@ var serveBase = (routeFunction, telemetry2, options) => {
|
|
|
2901
2844
|
});
|
|
2902
2845
|
throw callReturnCheck.error;
|
|
2903
2846
|
} else if (callReturnCheck.value === "continue-workflow") {
|
|
2904
|
-
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry
|
|
2847
|
+
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
|
|
2905
2848
|
onStep: async () => routeFunction(workflowContext),
|
|
2906
|
-
onCleanup: async (
|
|
2907
|
-
await triggerWorkflowDelete(workflowContext,
|
|
2849
|
+
onCleanup: async () => {
|
|
2850
|
+
await triggerWorkflowDelete(workflowContext, debug);
|
|
2908
2851
|
},
|
|
2909
2852
|
onCancel: async () => {
|
|
2910
2853
|
await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
|
|
@@ -2936,130 +2879,23 @@ var serveBase = (routeFunction, telemetry2, options) => {
|
|
|
2936
2879
|
return { handler: safeHandler };
|
|
2937
2880
|
};
|
|
2938
2881
|
|
|
2939
|
-
// src/serve/serve-many.ts
|
|
2940
|
-
var serveManyBase = ({
|
|
2941
|
-
workflows,
|
|
2942
|
-
getWorkflowId
|
|
2943
|
-
}) => {
|
|
2944
|
-
const workflowIds = [];
|
|
2945
|
-
const workflowMap = Object.fromEntries(
|
|
2946
|
-
Object.entries(workflows).map((workflow) => {
|
|
2947
|
-
const workflowId = workflow[0];
|
|
2948
|
-
if (workflowIds.includes(workflowId)) {
|
|
2949
|
-
throw new WorkflowError(
|
|
2950
|
-
`Duplicate workflow name found: '${workflowId}'. Please set different workflow names in serveMany.`
|
|
2951
|
-
);
|
|
2952
|
-
}
|
|
2953
|
-
if (workflowId.includes("/")) {
|
|
2954
|
-
throw new WorkflowError(
|
|
2955
|
-
`Invalid workflow name found: '${workflowId}'. Workflow name cannot contain '/'.`
|
|
2956
|
-
);
|
|
2957
|
-
}
|
|
2958
|
-
workflowIds.push(workflowId);
|
|
2959
|
-
workflow[1].workflowId = workflowId;
|
|
2960
|
-
return [workflowId, workflow[1].handler];
|
|
2961
|
-
})
|
|
2962
|
-
);
|
|
2963
|
-
return {
|
|
2964
|
-
handler: async (...params) => {
|
|
2965
|
-
const pickedWorkflowId = getWorkflowId(...params);
|
|
2966
|
-
if (!pickedWorkflowId) {
|
|
2967
|
-
throw new WorkflowError(`Unexpected request in serveMany. workflowId not set. Please update the URL of your request.`);
|
|
2968
|
-
}
|
|
2969
|
-
const workflow = workflowMap[pickedWorkflowId];
|
|
2970
|
-
if (!workflow) {
|
|
2971
|
-
throw new WorkflowError(`No workflows in serveMany found for '${pickedWorkflowId}'. Please update the URL of your request.`);
|
|
2972
|
-
}
|
|
2973
|
-
return await workflow(...params);
|
|
2974
|
-
}
|
|
2975
|
-
};
|
|
2976
|
-
};
|
|
2977
|
-
var createInvokeCallback = (telemetry2) => {
|
|
2978
|
-
const invokeCallback = async (settings, invokeStep, context) => {
|
|
2979
|
-
const { body, workflow, headers = {}, workflowRunId = getWorkflowRunId(), retries } = settings;
|
|
2980
|
-
const { workflowId } = workflow;
|
|
2981
|
-
if (!workflowId) {
|
|
2982
|
-
throw new WorkflowError("You can only invoke workflow which has a workflowId");
|
|
2983
|
-
}
|
|
2984
|
-
const { headers: invokerHeaders } = getHeaders({
|
|
2985
|
-
initHeaderValue: "false",
|
|
2986
|
-
workflowRunId: context.workflowRunId,
|
|
2987
|
-
workflowUrl: context.url,
|
|
2988
|
-
userHeaders: context.headers,
|
|
2989
|
-
failureUrl: context.failureUrl,
|
|
2990
|
-
retries: context.retries,
|
|
2991
|
-
telemetry: telemetry2
|
|
2992
|
-
});
|
|
2993
|
-
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
2994
|
-
const newUrl = context.url.replace(/[^/]+$/, workflowId);
|
|
2995
|
-
const { headers: triggerHeaders } = getHeaders({
|
|
2996
|
-
initHeaderValue: "true",
|
|
2997
|
-
workflowRunId,
|
|
2998
|
-
workflowUrl: newUrl,
|
|
2999
|
-
userHeaders: new Headers(headers),
|
|
3000
|
-
retries,
|
|
3001
|
-
telemetry: telemetry2
|
|
3002
|
-
});
|
|
3003
|
-
triggerHeaders["Upstash-Workflow-Invoke"] = "true";
|
|
3004
|
-
const request = {
|
|
3005
|
-
body: JSON.stringify(body),
|
|
3006
|
-
headers: Object.fromEntries(
|
|
3007
|
-
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
3008
|
-
),
|
|
3009
|
-
workflowRunId,
|
|
3010
|
-
workflowUrl: context.url,
|
|
3011
|
-
step: invokeStep
|
|
3012
|
-
};
|
|
3013
|
-
await context.qstashClient.publish({
|
|
3014
|
-
headers: triggerHeaders,
|
|
3015
|
-
method: "POST",
|
|
3016
|
-
body: JSON.stringify(request),
|
|
3017
|
-
url: newUrl
|
|
3018
|
-
});
|
|
3019
|
-
return void 0;
|
|
3020
|
-
};
|
|
3021
|
-
return invokeCallback;
|
|
3022
|
-
};
|
|
3023
|
-
|
|
3024
2882
|
// platforms/astro.ts
|
|
3025
|
-
var telemetry = {
|
|
3026
|
-
sdk: SDK_TELEMETRY,
|
|
3027
|
-
framework: "astro",
|
|
3028
|
-
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
3029
|
-
};
|
|
3030
2883
|
function serve(routeFunction, options) {
|
|
3031
2884
|
const POST = (apiContext) => {
|
|
3032
2885
|
const { handler } = serveBase(
|
|
3033
2886
|
(workflowContext) => routeFunction(workflowContext, apiContext),
|
|
3034
|
-
|
|
2887
|
+
{
|
|
2888
|
+
sdk: SDK_TELEMETRY,
|
|
2889
|
+
framework: "astro",
|
|
2890
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
2891
|
+
},
|
|
3035
2892
|
options
|
|
3036
2893
|
);
|
|
3037
2894
|
return handler(apiContext.request);
|
|
3038
2895
|
};
|
|
3039
2896
|
return { POST };
|
|
3040
2897
|
}
|
|
3041
|
-
var createWorkflow = (...params) => {
|
|
3042
|
-
const { POST: handler } = serve(...params);
|
|
3043
|
-
return {
|
|
3044
|
-
callback: createInvokeCallback(telemetry),
|
|
3045
|
-
handler,
|
|
3046
|
-
workflowId: void 0
|
|
3047
|
-
};
|
|
3048
|
-
};
|
|
3049
|
-
var serveMany = (workflows) => {
|
|
3050
|
-
return {
|
|
3051
|
-
POST: serveManyBase({
|
|
3052
|
-
workflows,
|
|
3053
|
-
getWorkflowId(...params) {
|
|
3054
|
-
const components = params[0].request.url.split("/");
|
|
3055
|
-
return components[components.length - 1];
|
|
3056
|
-
}
|
|
3057
|
-
}).handler
|
|
3058
|
-
};
|
|
3059
|
-
};
|
|
3060
2898
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3061
2899
|
0 && (module.exports = {
|
|
3062
|
-
|
|
3063
|
-
serve,
|
|
3064
|
-
serveMany
|
|
2900
|
+
serve
|
|
3065
2901
|
});
|
package/astro.mjs
CHANGED
|
@@ -1,50 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createInvokeCallback,
|
|
3
|
-
serveManyBase
|
|
4
|
-
} from "./chunk-LCZMBGEM.mjs";
|
|
5
1
|
import {
|
|
6
2
|
SDK_TELEMETRY,
|
|
7
3
|
serveBase
|
|
8
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BPUSHNSD.mjs";
|
|
9
5
|
|
|
10
6
|
// platforms/astro.ts
|
|
11
|
-
var telemetry = {
|
|
12
|
-
sdk: SDK_TELEMETRY,
|
|
13
|
-
framework: "astro",
|
|
14
|
-
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
15
|
-
};
|
|
16
7
|
function serve(routeFunction, options) {
|
|
17
8
|
const POST = (apiContext) => {
|
|
18
9
|
const { handler } = serveBase(
|
|
19
10
|
(workflowContext) => routeFunction(workflowContext, apiContext),
|
|
20
|
-
|
|
11
|
+
{
|
|
12
|
+
sdk: SDK_TELEMETRY,
|
|
13
|
+
framework: "astro",
|
|
14
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
15
|
+
},
|
|
21
16
|
options
|
|
22
17
|
);
|
|
23
18
|
return handler(apiContext.request);
|
|
24
19
|
};
|
|
25
20
|
return { POST };
|
|
26
21
|
}
|
|
27
|
-
var createWorkflow = (...params) => {
|
|
28
|
-
const { POST: handler } = serve(...params);
|
|
29
|
-
return {
|
|
30
|
-
callback: createInvokeCallback(telemetry),
|
|
31
|
-
handler,
|
|
32
|
-
workflowId: void 0
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
var serveMany = (workflows) => {
|
|
36
|
-
return {
|
|
37
|
-
POST: serveManyBase({
|
|
38
|
-
workflows,
|
|
39
|
-
getWorkflowId(...params) {
|
|
40
|
-
const components = params[0].request.url.split("/");
|
|
41
|
-
return components[components.length - 1];
|
|
42
|
-
}
|
|
43
|
-
}).handler
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
22
|
export {
|
|
47
|
-
|
|
48
|
-
serve,
|
|
49
|
-
serveMany
|
|
23
|
+
serve
|
|
50
24
|
};
|