@upstash/workflow 0.2.7 → 0.2.8-rc-invoke
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 +8 -3
- package/astro.d.ts +8 -3
- package/astro.js +238 -65
- package/astro.mjs +33 -7
- package/{chunk-U6XFLG7W.mjs → chunk-IWAW7GIG.mjs} +103 -38
- package/chunk-LCZMBGEM.mjs +95 -0
- package/cloudflare.d.mts +9 -4
- package/cloudflare.d.ts +9 -4
- package/cloudflare.js +241 -71
- package/cloudflare.mjs +36 -13
- package/express.d.mts +7 -3
- package/express.d.ts +7 -3
- package/express.js +248 -68
- package/express.mjs +41 -10
- package/h3.d.mts +9 -7
- package/h3.d.ts +9 -7
- package/h3.js +249 -78
- package/h3.mjs +44 -20
- package/hono.d.mts +10 -4
- package/hono.d.ts +10 -4
- package/hono.js +240 -73
- package/hono.mjs +35 -15
- package/index.d.mts +17 -4
- package/index.d.ts +17 -4
- package/index.js +102 -38
- package/index.mjs +2 -2
- package/nextjs.d.mts +14 -5
- package/nextjs.d.ts +14 -5
- package/nextjs.js +249 -52
- package/nextjs.mjs +64 -16
- package/package.json +1 -1
- package/serve-many-BlBvXfBS.d.mts +10 -0
- package/serve-many-Dw-UUnH6.d.ts +10 -0
- package/solidjs.d.mts +3 -3
- package/solidjs.d.ts +3 -3
- package/solidjs.js +107 -46
- package/solidjs.mjs +7 -10
- package/svelte.d.mts +12 -4
- package/svelte.d.ts +12 -4
- package/svelte.js +240 -71
- package/svelte.mjs +35 -13
- package/{types-Cuqlx2Cr.d.mts → types-C7Y7WUQd.d.mts} +31 -3
- package/{types-Cuqlx2Cr.d.ts → types-C7Y7WUQd.d.ts} +31 -3
package/express.js
CHANGED
|
@@ -23692,7 +23692,9 @@ var require_express2 = __commonJS({
|
|
|
23692
23692
|
// platforms/express.ts
|
|
23693
23693
|
var express_exports = {};
|
|
23694
23694
|
__export(express_exports, {
|
|
23695
|
-
|
|
23695
|
+
createWorkflow: () => createWorkflow,
|
|
23696
|
+
serve: () => serve,
|
|
23697
|
+
serveMany: () => serveMany
|
|
23696
23698
|
});
|
|
23697
23699
|
module.exports = __toCommonJS(express_exports);
|
|
23698
23700
|
|
|
@@ -23707,7 +23709,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
23707
23709
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
23708
23710
|
var NO_CONCURRENCY = 1;
|
|
23709
23711
|
var DEFAULT_RETRIES = 3;
|
|
23710
|
-
var VERSION = "v0.2.
|
|
23712
|
+
var VERSION = "v0.2.7";
|
|
23711
23713
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
23712
23714
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
23713
23715
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -23807,6 +23809,31 @@ var formatWorkflowError = (error) => {
|
|
|
23807
23809
|
};
|
|
23808
23810
|
};
|
|
23809
23811
|
|
|
23812
|
+
// src/utils.ts
|
|
23813
|
+
var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
|
|
23814
|
+
var NANOID_LENGTH = 21;
|
|
23815
|
+
function getRandomInt() {
|
|
23816
|
+
return Math.floor(Math.random() * NANOID_CHARS.length);
|
|
23817
|
+
}
|
|
23818
|
+
function nanoid() {
|
|
23819
|
+
return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
|
|
23820
|
+
}
|
|
23821
|
+
function getWorkflowRunId(id) {
|
|
23822
|
+
return `wfr_${id ?? nanoid()}`;
|
|
23823
|
+
}
|
|
23824
|
+
function decodeBase64(base64) {
|
|
23825
|
+
try {
|
|
23826
|
+
const binString = atob(base64);
|
|
23827
|
+
const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
23828
|
+
return new TextDecoder().decode(intArray);
|
|
23829
|
+
} catch (error) {
|
|
23830
|
+
console.warn(
|
|
23831
|
+
`Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
|
|
23832
|
+
);
|
|
23833
|
+
return atob(base64);
|
|
23834
|
+
}
|
|
23835
|
+
}
|
|
23836
|
+
|
|
23810
23837
|
// src/context/steps.ts
|
|
23811
23838
|
var BaseLazyStep = class {
|
|
23812
23839
|
stepName;
|
|
@@ -23987,6 +24014,41 @@ var LazyNotifyStep = class extends LazyFunctionStep {
|
|
|
23987
24014
|
});
|
|
23988
24015
|
}
|
|
23989
24016
|
};
|
|
24017
|
+
var LazyInvokeStep = class extends BaseLazyStep {
|
|
24018
|
+
stepType = "Invoke";
|
|
24019
|
+
params;
|
|
24020
|
+
constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
|
|
24021
|
+
super(stepName);
|
|
24022
|
+
this.params = {
|
|
24023
|
+
workflow,
|
|
24024
|
+
body,
|
|
24025
|
+
headers,
|
|
24026
|
+
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
24027
|
+
retries
|
|
24028
|
+
};
|
|
24029
|
+
}
|
|
24030
|
+
getPlanStep(concurrent, targetStep) {
|
|
24031
|
+
return {
|
|
24032
|
+
stepId: 0,
|
|
24033
|
+
stepName: this.stepName,
|
|
24034
|
+
stepType: this.stepType,
|
|
24035
|
+
concurrent,
|
|
24036
|
+
targetStep
|
|
24037
|
+
};
|
|
24038
|
+
}
|
|
24039
|
+
/**
|
|
24040
|
+
* won't be used as it's the server who will add the result step
|
|
24041
|
+
* in Invoke step.
|
|
24042
|
+
*/
|
|
24043
|
+
getResultStep(concurrent, stepId) {
|
|
24044
|
+
return Promise.resolve({
|
|
24045
|
+
stepId,
|
|
24046
|
+
stepName: this.stepName,
|
|
24047
|
+
stepType: this.stepType,
|
|
24048
|
+
concurrent
|
|
24049
|
+
});
|
|
24050
|
+
}
|
|
24051
|
+
};
|
|
23990
24052
|
|
|
23991
24053
|
// node_modules/neverthrow/dist/index.es.js
|
|
23992
24054
|
var defaultErrorConfig = {
|
|
@@ -24411,7 +24473,8 @@ var StepTypes = [
|
|
|
24411
24473
|
"SleepUntil",
|
|
24412
24474
|
"Call",
|
|
24413
24475
|
"Wait",
|
|
24414
|
-
"Notify"
|
|
24476
|
+
"Notify",
|
|
24477
|
+
"Invoke"
|
|
24415
24478
|
];
|
|
24416
24479
|
|
|
24417
24480
|
// src/workflow-requests.ts
|
|
@@ -24419,7 +24482,7 @@ var import_qstash3 = require("@upstash/qstash");
|
|
|
24419
24482
|
var triggerFirstInvocation = async ({
|
|
24420
24483
|
workflowContext,
|
|
24421
24484
|
useJSONContent,
|
|
24422
|
-
telemetry,
|
|
24485
|
+
telemetry: telemetry2,
|
|
24423
24486
|
debug
|
|
24424
24487
|
}) => {
|
|
24425
24488
|
const { headers } = getHeaders({
|
|
@@ -24429,7 +24492,7 @@ var triggerFirstInvocation = async ({
|
|
|
24429
24492
|
userHeaders: workflowContext.headers,
|
|
24430
24493
|
failureUrl: workflowContext.failureUrl,
|
|
24431
24494
|
retries: workflowContext.retries,
|
|
24432
|
-
telemetry
|
|
24495
|
+
telemetry: telemetry2
|
|
24433
24496
|
});
|
|
24434
24497
|
if (workflowContext.headers.get("content-type")) {
|
|
24435
24498
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -24475,8 +24538,8 @@ var triggerRouteFunction = async ({
|
|
|
24475
24538
|
debug
|
|
24476
24539
|
}) => {
|
|
24477
24540
|
try {
|
|
24478
|
-
await onStep();
|
|
24479
|
-
await onCleanup();
|
|
24541
|
+
const result = await onStep();
|
|
24542
|
+
await onCleanup(result);
|
|
24480
24543
|
return ok("workflow-finished");
|
|
24481
24544
|
} catch (error) {
|
|
24482
24545
|
const error_ = error;
|
|
@@ -24497,14 +24560,15 @@ var triggerRouteFunction = async ({
|
|
|
24497
24560
|
}
|
|
24498
24561
|
}
|
|
24499
24562
|
};
|
|
24500
|
-
var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
|
|
24563
|
+
var triggerWorkflowDelete = async (workflowContext, result, debug, cancel = false) => {
|
|
24501
24564
|
await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
|
|
24502
24565
|
deletedWorkflowRunId: workflowContext.workflowRunId
|
|
24503
24566
|
});
|
|
24504
24567
|
await workflowContext.qstashClient.http.request({
|
|
24505
24568
|
path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
|
|
24506
24569
|
method: "DELETE",
|
|
24507
|
-
parseResponseAsJson: false
|
|
24570
|
+
parseResponseAsJson: false,
|
|
24571
|
+
body: JSON.stringify(result)
|
|
24508
24572
|
});
|
|
24509
24573
|
await debug?.log(
|
|
24510
24574
|
"SUBMIT",
|
|
@@ -24533,7 +24597,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
24533
24597
|
workflowUrl,
|
|
24534
24598
|
failureUrl,
|
|
24535
24599
|
retries,
|
|
24536
|
-
telemetry,
|
|
24600
|
+
telemetry: telemetry2,
|
|
24537
24601
|
debug
|
|
24538
24602
|
}) => {
|
|
24539
24603
|
try {
|
|
@@ -24601,7 +24665,7 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
24601
24665
|
userHeaders,
|
|
24602
24666
|
failureUrl,
|
|
24603
24667
|
retries,
|
|
24604
|
-
telemetry
|
|
24668
|
+
telemetry: telemetry2
|
|
24605
24669
|
});
|
|
24606
24670
|
const callResponse = {
|
|
24607
24671
|
status: callbackMessage.status,
|
|
@@ -24640,11 +24704,11 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
24640
24704
|
);
|
|
24641
24705
|
}
|
|
24642
24706
|
};
|
|
24643
|
-
var getTelemetryHeaders = (
|
|
24707
|
+
var getTelemetryHeaders = (telemetry2) => {
|
|
24644
24708
|
return {
|
|
24645
|
-
[TELEMETRY_HEADER_SDK]:
|
|
24646
|
-
[TELEMETRY_HEADER_FRAMEWORK]:
|
|
24647
|
-
[TELEMETRY_HEADER_RUNTIME]:
|
|
24709
|
+
[TELEMETRY_HEADER_SDK]: telemetry2.sdk,
|
|
24710
|
+
[TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
|
|
24711
|
+
[TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
|
|
24648
24712
|
};
|
|
24649
24713
|
};
|
|
24650
24714
|
var getHeaders = ({
|
|
@@ -24657,14 +24721,17 @@ var getHeaders = ({
|
|
|
24657
24721
|
step,
|
|
24658
24722
|
callRetries,
|
|
24659
24723
|
callTimeout,
|
|
24660
|
-
telemetry
|
|
24724
|
+
telemetry: telemetry2
|
|
24661
24725
|
}) => {
|
|
24726
|
+
const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
|
|
24662
24727
|
const baseHeaders = {
|
|
24663
24728
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
24664
24729
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
24665
24730
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
24666
24731
|
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
|
|
24667
|
-
|
|
24732
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
24733
|
+
"content-type": contentType,
|
|
24734
|
+
...telemetry2 ? getTelemetryHeaders(telemetry2) : {}
|
|
24668
24735
|
};
|
|
24669
24736
|
if (!step?.callUrl) {
|
|
24670
24737
|
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
@@ -24678,6 +24745,9 @@ var getHeaders = ({
|
|
|
24678
24745
|
baseHeaders["Upstash-Failure-Callback"] = failureUrl;
|
|
24679
24746
|
}
|
|
24680
24747
|
}
|
|
24748
|
+
if (step?.stepType === "Invoke") {
|
|
24749
|
+
baseHeaders["upstash-workflow-invoke"] = "true";
|
|
24750
|
+
}
|
|
24681
24751
|
if (step?.callUrl) {
|
|
24682
24752
|
baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
|
|
24683
24753
|
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
|
|
@@ -24699,7 +24769,6 @@ var getHeaders = ({
|
|
|
24699
24769
|
baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
|
|
24700
24770
|
}
|
|
24701
24771
|
}
|
|
24702
|
-
const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
|
|
24703
24772
|
if (step?.callHeaders) {
|
|
24704
24773
|
const forwardedHeaders = Object.fromEntries(
|
|
24705
24774
|
Object.entries(step.callHeaders).map(([header, value]) => [
|
|
@@ -24739,8 +24808,8 @@ var getHeaders = ({
|
|
|
24739
24808
|
Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
|
|
24740
24809
|
),
|
|
24741
24810
|
// to include telemetry headers:
|
|
24742
|
-
...
|
|
24743
|
-
Object.entries(getTelemetryHeaders(
|
|
24811
|
+
...telemetry2 ? Object.fromEntries(
|
|
24812
|
+
Object.entries(getTelemetryHeaders(telemetry2)).map(([header, value]) => [
|
|
24744
24813
|
header,
|
|
24745
24814
|
[value]
|
|
24746
24815
|
])
|
|
@@ -24749,8 +24818,7 @@ var getHeaders = ({
|
|
|
24749
24818
|
"Upstash-Workflow-Runid": [workflowRunId],
|
|
24750
24819
|
[WORKFLOW_INIT_HEADER]: ["false"],
|
|
24751
24820
|
[WORKFLOW_URL_HEADER]: [workflowUrl],
|
|
24752
|
-
"Upstash-Workflow-CallType": ["step"]
|
|
24753
|
-
"Content-Type": [contentType]
|
|
24821
|
+
"Upstash-Workflow-CallType": ["step"]
|
|
24754
24822
|
}
|
|
24755
24823
|
};
|
|
24756
24824
|
}
|
|
@@ -24796,10 +24864,10 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
24796
24864
|
stepCount = 0;
|
|
24797
24865
|
planStepCount = 0;
|
|
24798
24866
|
executingStep = false;
|
|
24799
|
-
constructor(context, steps,
|
|
24867
|
+
constructor(context, steps, telemetry2, debug) {
|
|
24800
24868
|
this.context = context;
|
|
24801
24869
|
this.steps = steps;
|
|
24802
|
-
this.telemetry =
|
|
24870
|
+
this.telemetry = telemetry2;
|
|
24803
24871
|
this.debug = debug;
|
|
24804
24872
|
this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
|
|
24805
24873
|
}
|
|
@@ -25045,7 +25113,23 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
25045
25113
|
method: "POST",
|
|
25046
25114
|
parseResponseAsJson: false
|
|
25047
25115
|
});
|
|
25048
|
-
throw new WorkflowAbort(
|
|
25116
|
+
throw new WorkflowAbort(waitStep.stepName, waitStep);
|
|
25117
|
+
}
|
|
25118
|
+
if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
|
|
25119
|
+
const invokeStep = steps[0];
|
|
25120
|
+
const lazyInvokeStep = lazySteps[0];
|
|
25121
|
+
await lazyInvokeStep.params.workflow.callback(
|
|
25122
|
+
{
|
|
25123
|
+
body: lazyInvokeStep.params.body,
|
|
25124
|
+
headers: lazyInvokeStep.params.headers,
|
|
25125
|
+
workflowRunId: lazyInvokeStep.params.workflowRunId,
|
|
25126
|
+
workflow: lazyInvokeStep.params.workflow,
|
|
25127
|
+
retries: lazyInvokeStep.params.retries
|
|
25128
|
+
},
|
|
25129
|
+
invokeStep,
|
|
25130
|
+
this.context
|
|
25131
|
+
);
|
|
25132
|
+
throw new WorkflowAbort(invokeStep.stepName, invokeStep);
|
|
25049
25133
|
}
|
|
25050
25134
|
const result = await this.context.qstashClient.batchJSON(
|
|
25051
25135
|
steps.map((singleStep, index) => {
|
|
@@ -25731,7 +25815,7 @@ var WorkflowContext = class {
|
|
|
25731
25815
|
initialPayload,
|
|
25732
25816
|
env,
|
|
25733
25817
|
retries,
|
|
25734
|
-
telemetry
|
|
25818
|
+
telemetry: telemetry2
|
|
25735
25819
|
}) {
|
|
25736
25820
|
this.qstashClient = qstashClient;
|
|
25737
25821
|
this.workflowRunId = workflowRunId;
|
|
@@ -25742,7 +25826,7 @@ var WorkflowContext = class {
|
|
|
25742
25826
|
this.requestPayload = initialPayload;
|
|
25743
25827
|
this.env = env ?? {};
|
|
25744
25828
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
25745
|
-
this.executor = new AutoExecutor(this, this.steps,
|
|
25829
|
+
this.executor = new AutoExecutor(this, this.steps, telemetry2, debug);
|
|
25746
25830
|
}
|
|
25747
25831
|
/**
|
|
25748
25832
|
* Executes a workflow step
|
|
@@ -25962,6 +26046,13 @@ var WorkflowContext = class {
|
|
|
25962
26046
|
return result;
|
|
25963
26047
|
}
|
|
25964
26048
|
}
|
|
26049
|
+
async invoke(stepName, settings) {
|
|
26050
|
+
const result = await this.addStep(new LazyInvokeStep(stepName, settings));
|
|
26051
|
+
return {
|
|
26052
|
+
...result,
|
|
26053
|
+
body: result.body ? JSON.parse(result.body) : void 0
|
|
26054
|
+
};
|
|
26055
|
+
}
|
|
25965
26056
|
/**
|
|
25966
26057
|
* Cancel the current workflow run
|
|
25967
26058
|
*
|
|
@@ -26039,31 +26130,6 @@ var WorkflowLogger = class _WorkflowLogger {
|
|
|
26039
26130
|
}
|
|
26040
26131
|
};
|
|
26041
26132
|
|
|
26042
|
-
// src/utils.ts
|
|
26043
|
-
var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
|
|
26044
|
-
var NANOID_LENGTH = 21;
|
|
26045
|
-
function getRandomInt() {
|
|
26046
|
-
return Math.floor(Math.random() * NANOID_CHARS.length);
|
|
26047
|
-
}
|
|
26048
|
-
function nanoid() {
|
|
26049
|
-
return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
|
|
26050
|
-
}
|
|
26051
|
-
function getWorkflowRunId(id) {
|
|
26052
|
-
return `wfr_${id ?? nanoid()}`;
|
|
26053
|
-
}
|
|
26054
|
-
function decodeBase64(base64) {
|
|
26055
|
-
try {
|
|
26056
|
-
const binString = atob(base64);
|
|
26057
|
-
const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
26058
|
-
return new TextDecoder().decode(intArray);
|
|
26059
|
-
} catch (error) {
|
|
26060
|
-
console.warn(
|
|
26061
|
-
`Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
|
|
26062
|
-
);
|
|
26063
|
-
return atob(base64);
|
|
26064
|
-
}
|
|
26065
|
-
}
|
|
26066
|
-
|
|
26067
26133
|
// src/serve/authorization.ts
|
|
26068
26134
|
var import_qstash8 = require("@upstash/qstash");
|
|
26069
26135
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
@@ -26401,7 +26467,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
|
|
|
26401
26467
|
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`;
|
|
26402
26468
|
|
|
26403
26469
|
// src/serve/index.ts
|
|
26404
|
-
var serveBase = (routeFunction,
|
|
26470
|
+
var serveBase = (routeFunction, telemetry2, options) => {
|
|
26405
26471
|
const {
|
|
26406
26472
|
qstashClient,
|
|
26407
26473
|
onStepFinish,
|
|
@@ -26417,7 +26483,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
26417
26483
|
useJSONContent,
|
|
26418
26484
|
disableTelemetry
|
|
26419
26485
|
} = processOptions(options);
|
|
26420
|
-
|
|
26486
|
+
telemetry2 = disableTelemetry ? void 0 : telemetry2;
|
|
26421
26487
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
26422
26488
|
const handler = async (request) => {
|
|
26423
26489
|
await debug?.log("INFO", "ENDPOINT_START");
|
|
@@ -26475,7 +26541,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
26475
26541
|
debug,
|
|
26476
26542
|
env,
|
|
26477
26543
|
retries,
|
|
26478
|
-
telemetry
|
|
26544
|
+
telemetry: telemetry2
|
|
26479
26545
|
});
|
|
26480
26546
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
26481
26547
|
routeFunction,
|
|
@@ -26498,7 +26564,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
26498
26564
|
workflowUrl,
|
|
26499
26565
|
failureUrl: workflowFailureUrl,
|
|
26500
26566
|
retries,
|
|
26501
|
-
telemetry,
|
|
26567
|
+
telemetry: telemetry2,
|
|
26502
26568
|
debug
|
|
26503
26569
|
});
|
|
26504
26570
|
if (callReturnCheck.isErr()) {
|
|
@@ -26507,10 +26573,10 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
26507
26573
|
});
|
|
26508
26574
|
throw callReturnCheck.error;
|
|
26509
26575
|
} else if (callReturnCheck.value === "continue-workflow") {
|
|
26510
|
-
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
|
|
26576
|
+
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry: telemetry2, debug }) : await triggerRouteFunction({
|
|
26511
26577
|
onStep: async () => routeFunction(workflowContext),
|
|
26512
|
-
onCleanup: async () => {
|
|
26513
|
-
await triggerWorkflowDelete(workflowContext, debug);
|
|
26578
|
+
onCleanup: async (result2) => {
|
|
26579
|
+
await triggerWorkflowDelete(workflowContext, result2, debug);
|
|
26514
26580
|
},
|
|
26515
26581
|
onCancel: async () => {
|
|
26516
26582
|
await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
|
|
@@ -26544,12 +26610,104 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
26544
26610
|
|
|
26545
26611
|
// platforms/express.ts
|
|
26546
26612
|
var import_express = __toESM(require_express2());
|
|
26613
|
+
|
|
26614
|
+
// src/serve/serve-many.ts
|
|
26615
|
+
var serveManyBase = ({
|
|
26616
|
+
workflows,
|
|
26617
|
+
getWorkflowId
|
|
26618
|
+
}) => {
|
|
26619
|
+
const workflowIds = [];
|
|
26620
|
+
const workflowMap = Object.fromEntries(
|
|
26621
|
+
Object.entries(workflows).map((workflow) => {
|
|
26622
|
+
const workflowId = workflow[0];
|
|
26623
|
+
if (workflowIds.includes(workflowId)) {
|
|
26624
|
+
throw new WorkflowError(
|
|
26625
|
+
`Duplicate workflow name found: '${workflowId}'. Please set different workflow names in serveMany.`
|
|
26626
|
+
);
|
|
26627
|
+
}
|
|
26628
|
+
if (workflowId.includes("/")) {
|
|
26629
|
+
throw new WorkflowError(
|
|
26630
|
+
`Invalid workflow name found: '${workflowId}'. Workflow name cannot contain '/'.`
|
|
26631
|
+
);
|
|
26632
|
+
}
|
|
26633
|
+
workflowIds.push(workflowId);
|
|
26634
|
+
workflow[1].workflowId = workflowId;
|
|
26635
|
+
return [workflowId, workflow[1].handler];
|
|
26636
|
+
})
|
|
26637
|
+
);
|
|
26638
|
+
return {
|
|
26639
|
+
handler: async (...params) => {
|
|
26640
|
+
const pickedWorkflowId = getWorkflowId(...params);
|
|
26641
|
+
if (!pickedWorkflowId) {
|
|
26642
|
+
throw new WorkflowError(`Unexpected request in serveMany. workflowId not set. Please update the URL of your request.`);
|
|
26643
|
+
}
|
|
26644
|
+
const workflow = workflowMap[pickedWorkflowId];
|
|
26645
|
+
if (!workflow) {
|
|
26646
|
+
throw new WorkflowError(`No workflows in serveMany found for '${pickedWorkflowId}'. Please update the URL of your request.`);
|
|
26647
|
+
}
|
|
26648
|
+
return await workflow(...params);
|
|
26649
|
+
}
|
|
26650
|
+
};
|
|
26651
|
+
};
|
|
26652
|
+
var createInvokeCallback = (telemetry2) => {
|
|
26653
|
+
const invokeCallback = async (settings, invokeStep, context) => {
|
|
26654
|
+
const { body, workflow, headers = {}, workflowRunId = getWorkflowRunId(), retries } = settings;
|
|
26655
|
+
const { workflowId } = workflow;
|
|
26656
|
+
if (!workflowId) {
|
|
26657
|
+
throw new WorkflowError("You can only invoke workflow which has a workflowId");
|
|
26658
|
+
}
|
|
26659
|
+
const { headers: invokerHeaders } = getHeaders({
|
|
26660
|
+
initHeaderValue: "false",
|
|
26661
|
+
workflowRunId: context.workflowRunId,
|
|
26662
|
+
workflowUrl: context.url,
|
|
26663
|
+
userHeaders: context.headers,
|
|
26664
|
+
failureUrl: context.failureUrl,
|
|
26665
|
+
retries: context.retries,
|
|
26666
|
+
telemetry: telemetry2
|
|
26667
|
+
});
|
|
26668
|
+
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
26669
|
+
const newUrl = context.url.replace(/[^/]+$/, workflowId);
|
|
26670
|
+
const { headers: triggerHeaders } = getHeaders({
|
|
26671
|
+
initHeaderValue: "true",
|
|
26672
|
+
workflowRunId,
|
|
26673
|
+
workflowUrl: newUrl,
|
|
26674
|
+
userHeaders: new Headers(headers),
|
|
26675
|
+
retries,
|
|
26676
|
+
telemetry: telemetry2
|
|
26677
|
+
});
|
|
26678
|
+
triggerHeaders["Upstash-Workflow-Invoke"] = "true";
|
|
26679
|
+
const request = {
|
|
26680
|
+
body: JSON.stringify(body),
|
|
26681
|
+
headers: Object.fromEntries(
|
|
26682
|
+
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
26683
|
+
),
|
|
26684
|
+
workflowRunId,
|
|
26685
|
+
workflowUrl: context.url,
|
|
26686
|
+
step: invokeStep
|
|
26687
|
+
};
|
|
26688
|
+
await context.qstashClient.publish({
|
|
26689
|
+
headers: triggerHeaders,
|
|
26690
|
+
method: "POST",
|
|
26691
|
+
body: JSON.stringify(request),
|
|
26692
|
+
url: newUrl
|
|
26693
|
+
});
|
|
26694
|
+
return void 0;
|
|
26695
|
+
};
|
|
26696
|
+
return invokeCallback;
|
|
26697
|
+
};
|
|
26698
|
+
|
|
26699
|
+
// platforms/express.ts
|
|
26547
26700
|
var isEmptyRequest = (req) => {
|
|
26548
26701
|
return req.headers["content-type"] === "application/json" && req.headers["content-length"] === "0";
|
|
26549
26702
|
};
|
|
26550
|
-
|
|
26551
|
-
|
|
26552
|
-
|
|
26703
|
+
var telemetry = {
|
|
26704
|
+
sdk: SDK_TELEMETRY,
|
|
26705
|
+
framework: "express",
|
|
26706
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
26707
|
+
};
|
|
26708
|
+
function createExpressHandler(params) {
|
|
26709
|
+
const [routeFunction, options] = params;
|
|
26710
|
+
return async (request_, res) => {
|
|
26553
26711
|
if (request_.method.toUpperCase() !== "POST") {
|
|
26554
26712
|
res.status(405).json("Only POST requests are allowed in workflows");
|
|
26555
26713
|
return;
|
|
@@ -26574,11 +26732,7 @@ function serve(routeFunction, options) {
|
|
|
26574
26732
|
});
|
|
26575
26733
|
const { handler: serveHandler } = serveBase(
|
|
26576
26734
|
routeFunction,
|
|
26577
|
-
|
|
26578
|
-
sdk: SDK_TELEMETRY,
|
|
26579
|
-
framework: "express",
|
|
26580
|
-
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
26581
|
-
},
|
|
26735
|
+
telemetry,
|
|
26582
26736
|
{
|
|
26583
26737
|
...options,
|
|
26584
26738
|
useJSONContent: true
|
|
@@ -26587,12 +26741,38 @@ function serve(routeFunction, options) {
|
|
|
26587
26741
|
const response = await serveHandler(webRequest);
|
|
26588
26742
|
res.status(response.status).json(await response.json());
|
|
26589
26743
|
};
|
|
26744
|
+
}
|
|
26745
|
+
function serve(routeFunction, options) {
|
|
26746
|
+
const router = (0, import_express.Router)();
|
|
26747
|
+
const handler = createExpressHandler([routeFunction, options]);
|
|
26590
26748
|
router.all("*", handler);
|
|
26591
26749
|
return router;
|
|
26592
26750
|
}
|
|
26751
|
+
var createWorkflow = (...params) => {
|
|
26752
|
+
const handler = createExpressHandler(params);
|
|
26753
|
+
return {
|
|
26754
|
+
callback: createInvokeCallback(telemetry),
|
|
26755
|
+
handler,
|
|
26756
|
+
workflowId: void 0
|
|
26757
|
+
};
|
|
26758
|
+
};
|
|
26759
|
+
var serveMany = (workflows) => {
|
|
26760
|
+
const router = (0, import_express.Router)();
|
|
26761
|
+
const { handler } = serveManyBase({
|
|
26762
|
+
workflows,
|
|
26763
|
+
getWorkflowId(...params) {
|
|
26764
|
+
const components = params[0].url.split("/");
|
|
26765
|
+
return components[components.length - 1];
|
|
26766
|
+
}
|
|
26767
|
+
});
|
|
26768
|
+
router.all("*", handler);
|
|
26769
|
+
return router;
|
|
26770
|
+
};
|
|
26593
26771
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26594
26772
|
0 && (module.exports = {
|
|
26595
|
-
|
|
26773
|
+
createWorkflow,
|
|
26774
|
+
serve,
|
|
26775
|
+
serveMany
|
|
26596
26776
|
});
|
|
26597
26777
|
/*! Bundled license information:
|
|
26598
26778
|
|
package/express.mjs
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createInvokeCallback,
|
|
3
|
+
serveManyBase
|
|
4
|
+
} from "./chunk-LCZMBGEM.mjs";
|
|
1
5
|
import {
|
|
2
6
|
SDK_TELEMETRY,
|
|
3
7
|
__commonJS,
|
|
4
8
|
__require,
|
|
5
9
|
__toESM,
|
|
6
10
|
serveBase
|
|
7
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-IWAW7GIG.mjs";
|
|
8
12
|
|
|
9
13
|
// node_modules/depd/index.js
|
|
10
14
|
var require_depd = __commonJS({
|
|
@@ -23670,9 +23674,14 @@ var import_express = __toESM(require_express2());
|
|
|
23670
23674
|
var isEmptyRequest = (req) => {
|
|
23671
23675
|
return req.headers["content-type"] === "application/json" && req.headers["content-length"] === "0";
|
|
23672
23676
|
};
|
|
23673
|
-
|
|
23674
|
-
|
|
23675
|
-
|
|
23677
|
+
var telemetry = {
|
|
23678
|
+
sdk: SDK_TELEMETRY,
|
|
23679
|
+
framework: "express",
|
|
23680
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
23681
|
+
};
|
|
23682
|
+
function createExpressHandler(params) {
|
|
23683
|
+
const [routeFunction, options] = params;
|
|
23684
|
+
return async (request_, res) => {
|
|
23676
23685
|
if (request_.method.toUpperCase() !== "POST") {
|
|
23677
23686
|
res.status(405).json("Only POST requests are allowed in workflows");
|
|
23678
23687
|
return;
|
|
@@ -23697,11 +23706,7 @@ function serve(routeFunction, options) {
|
|
|
23697
23706
|
});
|
|
23698
23707
|
const { handler: serveHandler } = serveBase(
|
|
23699
23708
|
routeFunction,
|
|
23700
|
-
|
|
23701
|
-
sdk: SDK_TELEMETRY,
|
|
23702
|
-
framework: "express",
|
|
23703
|
-
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
23704
|
-
},
|
|
23709
|
+
telemetry,
|
|
23705
23710
|
{
|
|
23706
23711
|
...options,
|
|
23707
23712
|
useJSONContent: true
|
|
@@ -23710,11 +23715,37 @@ function serve(routeFunction, options) {
|
|
|
23710
23715
|
const response = await serveHandler(webRequest);
|
|
23711
23716
|
res.status(response.status).json(await response.json());
|
|
23712
23717
|
};
|
|
23718
|
+
}
|
|
23719
|
+
function serve(routeFunction, options) {
|
|
23720
|
+
const router = (0, import_express.Router)();
|
|
23721
|
+
const handler = createExpressHandler([routeFunction, options]);
|
|
23713
23722
|
router.all("*", handler);
|
|
23714
23723
|
return router;
|
|
23715
23724
|
}
|
|
23725
|
+
var createWorkflow = (...params) => {
|
|
23726
|
+
const handler = createExpressHandler(params);
|
|
23727
|
+
return {
|
|
23728
|
+
callback: createInvokeCallback(telemetry),
|
|
23729
|
+
handler,
|
|
23730
|
+
workflowId: void 0
|
|
23731
|
+
};
|
|
23732
|
+
};
|
|
23733
|
+
var serveMany = (workflows) => {
|
|
23734
|
+
const router = (0, import_express.Router)();
|
|
23735
|
+
const { handler } = serveManyBase({
|
|
23736
|
+
workflows,
|
|
23737
|
+
getWorkflowId(...params) {
|
|
23738
|
+
const components = params[0].url.split("/");
|
|
23739
|
+
return components[components.length - 1];
|
|
23740
|
+
}
|
|
23741
|
+
});
|
|
23742
|
+
router.all("*", handler);
|
|
23743
|
+
return router;
|
|
23744
|
+
};
|
|
23716
23745
|
export {
|
|
23717
|
-
|
|
23746
|
+
createWorkflow,
|
|
23747
|
+
serve,
|
|
23748
|
+
serveMany
|
|
23718
23749
|
};
|
|
23719
23750
|
/*! Bundled license information:
|
|
23720
23751
|
|
package/h3.d.mts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.mjs';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-BlBvXfBS.mjs';
|
|
3
4
|
import '@upstash/qstash';
|
|
4
5
|
import 'zod';
|
|
5
6
|
import 'ai';
|
|
6
7
|
import '@ai-sdk/openai';
|
|
7
8
|
|
|
8
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
9
|
-
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
10
|
+
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response>>;
|
|
11
|
+
};
|
|
12
|
+
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["handler"]>>;
|
|
13
|
+
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
|
|
14
|
+
handler: (event: h3.H3Event<h3.EventHandlerRequest>) => Promise<any>;
|
|
13
15
|
};
|
|
14
16
|
|
|
15
|
-
export { serve };
|
|
17
|
+
export { createWorkflow, serve, serveMany };
|
package/h3.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.js';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-Dw-UUnH6.js';
|
|
3
4
|
import '@upstash/qstash';
|
|
4
5
|
import 'zod';
|
|
5
6
|
import 'ai';
|
|
6
7
|
import '@ai-sdk/openai';
|
|
7
8
|
|
|
8
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
9
|
-
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
10
|
+
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response>>;
|
|
11
|
+
};
|
|
12
|
+
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["handler"]>>;
|
|
13
|
+
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
|
|
14
|
+
handler: (event: h3.H3Event<h3.EventHandlerRequest>) => Promise<any>;
|
|
13
15
|
};
|
|
14
16
|
|
|
15
|
-
export { serve };
|
|
17
|
+
export { createWorkflow, serve, serveMany };
|