@upstash/workflow 0.2.15 → 0.2.17
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 +2 -2
- package/astro.d.ts +2 -2
- package/astro.js +178 -36
- package/astro.mjs +1 -1
- package/{chunk-AC5CQCN3.mjs → chunk-RP7G4UD5.mjs} +178 -36
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +178 -36
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +7060 -7193
- package/express.mjs +6706 -6981
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +178 -36
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +178 -36
- package/hono.mjs +1 -1
- package/index.d.mts +115 -11
- package/index.d.ts +115 -11
- package/index.js +186 -35
- package/index.mjs +17 -2
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +181 -36
- package/nextjs.mjs +4 -1
- package/package.json +1 -1
- package/{serve-many-AaKSQyi7.d.ts → serve-many-B3DfoTFt.d.ts} +1 -1
- package/{serve-many-AFwJPR3S.d.mts → serve-many-DgDSOvQs.d.mts} +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +170 -34
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +178 -36
- package/svelte.mjs +1 -1
- package/{types-Dd-3bPoU.d.ts → types--R_3XZXz.d.mts} +101 -14
- package/{types-Dd-3bPoU.d.mts → types--R_3XZXz.d.ts} +101 -14
package/solidjs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIEvent } from '@solidjs/start/server';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions } from './types
|
|
2
|
+
import { R as RouteFunction, n as PublicServeOptions } from './types--R_3XZXz.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
package/solidjs.js
CHANGED
|
@@ -89,7 +89,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
89
89
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
90
90
|
var NO_CONCURRENCY = 1;
|
|
91
91
|
var DEFAULT_RETRIES = 3;
|
|
92
|
-
var VERSION = "v0.2.
|
|
92
|
+
var VERSION = "v0.2.17";
|
|
93
93
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
94
94
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
95
95
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -619,6 +619,7 @@ var triggerFirstInvocation = async (params) => {
|
|
|
619
619
|
workflowUrl: workflowContext.url,
|
|
620
620
|
failureUrl: workflowContext.failureUrl,
|
|
621
621
|
retries: workflowContext.retries,
|
|
622
|
+
retryDelay: workflowContext.retryDelay,
|
|
622
623
|
telemetry,
|
|
623
624
|
flowControl: workflowContext.flowControl,
|
|
624
625
|
useJSONContent: useJSONContent ?? false
|
|
@@ -748,6 +749,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
748
749
|
workflowUrl,
|
|
749
750
|
failureUrl,
|
|
750
751
|
retries,
|
|
752
|
+
retryDelay,
|
|
751
753
|
telemetry,
|
|
752
754
|
flowControl,
|
|
753
755
|
debug
|
|
@@ -818,6 +820,7 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
818
820
|
workflowUrl,
|
|
819
821
|
failureUrl,
|
|
820
822
|
retries,
|
|
823
|
+
retryDelay,
|
|
821
824
|
telemetry,
|
|
822
825
|
flowControl
|
|
823
826
|
},
|
|
@@ -968,7 +971,8 @@ var BaseLazyStep = class _BaseLazyStep {
|
|
|
968
971
|
workflowRunId: context.workflowRunId,
|
|
969
972
|
workflowUrl: context.url,
|
|
970
973
|
failureUrl: context.failureUrl,
|
|
971
|
-
retries: context.retries,
|
|
974
|
+
retries: DEFAULT_RETRIES === context.retries ? void 0 : context.retries,
|
|
975
|
+
retryDelay: context.retryDelay,
|
|
972
976
|
useJSONContent: false,
|
|
973
977
|
telemetry,
|
|
974
978
|
flowControl: context.flowControl
|
|
@@ -987,6 +991,9 @@ var BaseLazyStep = class _BaseLazyStep {
|
|
|
987
991
|
body,
|
|
988
992
|
headers,
|
|
989
993
|
method: "POST",
|
|
994
|
+
retries: DEFAULT_RETRIES === context.retries ? void 0 : context.retries,
|
|
995
|
+
retryDelay: context.retryDelay,
|
|
996
|
+
flowControl: context.flowControl,
|
|
990
997
|
url: context.url
|
|
991
998
|
}
|
|
992
999
|
]);
|
|
@@ -1057,6 +1064,9 @@ var LazySleepStep = class extends BaseLazyStep {
|
|
|
1057
1064
|
headers,
|
|
1058
1065
|
method: "POST",
|
|
1059
1066
|
url: context.url,
|
|
1067
|
+
retries: DEFAULT_RETRIES === context.retries ? void 0 : context.retries,
|
|
1068
|
+
retryDelay: context.retryDelay,
|
|
1069
|
+
flowControl: context.flowControl,
|
|
1060
1070
|
delay: isParallel ? void 0 : this.sleep
|
|
1061
1071
|
}
|
|
1062
1072
|
]);
|
|
@@ -1099,6 +1109,9 @@ var LazySleepUntilStep = class extends BaseLazyStep {
|
|
|
1099
1109
|
headers,
|
|
1100
1110
|
method: "POST",
|
|
1101
1111
|
url: context.url,
|
|
1112
|
+
retries: DEFAULT_RETRIES === context.retries ? void 0 : context.retries,
|
|
1113
|
+
retryDelay: context.retryDelay,
|
|
1114
|
+
flowControl: context.flowControl,
|
|
1102
1115
|
notBefore: isParallel ? void 0 : this.sleepUntil
|
|
1103
1116
|
}
|
|
1104
1117
|
]);
|
|
@@ -1110,17 +1123,19 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1110
1123
|
body;
|
|
1111
1124
|
headers;
|
|
1112
1125
|
retries;
|
|
1126
|
+
retryDelay;
|
|
1113
1127
|
timeout;
|
|
1114
1128
|
flowControl;
|
|
1115
1129
|
stepType = "Call";
|
|
1116
1130
|
allowUndefinedOut = false;
|
|
1117
|
-
constructor(stepName, url, method, body, headers, retries, timeout, flowControl) {
|
|
1131
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1118
1132
|
super(stepName);
|
|
1119
1133
|
this.url = url;
|
|
1120
1134
|
this.method = method;
|
|
1121
1135
|
this.body = body;
|
|
1122
1136
|
this.headers = headers;
|
|
1123
1137
|
this.retries = retries;
|
|
1138
|
+
this.retryDelay = retryDelay;
|
|
1124
1139
|
this.timeout = timeout;
|
|
1125
1140
|
this.flowControl = flowControl;
|
|
1126
1141
|
}
|
|
@@ -1195,6 +1210,9 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1195
1210
|
getHeaders({ context, telemetry, invokeCount, step }) {
|
|
1196
1211
|
const { headers, contentType } = super.getHeaders({ context, telemetry, invokeCount, step });
|
|
1197
1212
|
headers["Upstash-Retries"] = this.retries.toString();
|
|
1213
|
+
if (this.retryDelay) {
|
|
1214
|
+
headers["Upstash-Retry-Delay"] = this.retryDelay;
|
|
1215
|
+
}
|
|
1198
1216
|
headers[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
|
|
1199
1217
|
if (this.flowControl) {
|
|
1200
1218
|
const { flowControlKey, flowControlValue } = prepareFlowControl(this.flowControl);
|
|
@@ -1216,7 +1234,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1216
1234
|
"Upstash-Callback-Workflow-CallType": "fromCallback",
|
|
1217
1235
|
"Upstash-Callback-Workflow-Init": "false",
|
|
1218
1236
|
"Upstash-Callback-Workflow-Url": context.url,
|
|
1219
|
-
"Upstash-Callback-Feature-Set": "LazyFetch,InitialBody",
|
|
1237
|
+
"Upstash-Callback-Feature-Set": "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1220
1238
|
"Upstash-Callback-Forward-Upstash-Workflow-Callback": "true",
|
|
1221
1239
|
"Upstash-Callback-Forward-Upstash-Workflow-StepId": step.stepId.toString(),
|
|
1222
1240
|
"Upstash-Callback-Forward-Upstash-Workflow-StepName": this.stepName,
|
|
@@ -1234,7 +1252,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1234
1252
|
headers,
|
|
1235
1253
|
body: JSON.stringify(this.body),
|
|
1236
1254
|
method: this.method,
|
|
1237
|
-
url: this.url
|
|
1255
|
+
url: this.url,
|
|
1256
|
+
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
1257
|
+
retryDelay: this.retryDelay,
|
|
1258
|
+
flowControl: this.flowControl
|
|
1238
1259
|
}
|
|
1239
1260
|
]);
|
|
1240
1261
|
}
|
|
@@ -1363,6 +1384,7 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1363
1384
|
headers = {},
|
|
1364
1385
|
workflowRunId,
|
|
1365
1386
|
retries,
|
|
1387
|
+
retryDelay,
|
|
1366
1388
|
flowControl
|
|
1367
1389
|
}) {
|
|
1368
1390
|
super(stepName);
|
|
@@ -1372,6 +1394,7 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1372
1394
|
headers,
|
|
1373
1395
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1374
1396
|
retries,
|
|
1397
|
+
retryDelay,
|
|
1375
1398
|
flowControl
|
|
1376
1399
|
};
|
|
1377
1400
|
const { workflowId } = workflow;
|
|
@@ -1416,6 +1439,7 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1416
1439
|
workflowUrl: context.url,
|
|
1417
1440
|
failureUrl: context.failureUrl,
|
|
1418
1441
|
retries: context.retries,
|
|
1442
|
+
retryDelay: context.retryDelay,
|
|
1419
1443
|
telemetry,
|
|
1420
1444
|
flowControl: context.flowControl,
|
|
1421
1445
|
useJSONContent: false
|
|
@@ -1441,11 +1465,13 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1441
1465
|
headers = {},
|
|
1442
1466
|
workflowRunId = getWorkflowRunId(),
|
|
1443
1467
|
retries,
|
|
1468
|
+
retryDelay,
|
|
1444
1469
|
flowControl
|
|
1445
1470
|
} = this.params;
|
|
1446
1471
|
const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
|
|
1447
1472
|
const {
|
|
1448
1473
|
retries: workflowRetries,
|
|
1474
|
+
retryDelay: workflowRetryDelay,
|
|
1449
1475
|
failureFunction,
|
|
1450
1476
|
failureUrl,
|
|
1451
1477
|
useJSONContent,
|
|
@@ -1457,6 +1483,7 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1457
1483
|
workflowRunId,
|
|
1458
1484
|
workflowUrl: newUrl,
|
|
1459
1485
|
retries: retries ?? workflowRetries,
|
|
1486
|
+
retryDelay: retryDelay ?? workflowRetryDelay,
|
|
1460
1487
|
telemetry,
|
|
1461
1488
|
failureUrl: failureFunction ? newUrl : failureUrl,
|
|
1462
1489
|
flowControl: flowControl ?? workflowFlowControl,
|
|
@@ -1523,6 +1550,7 @@ var WorkflowHeaders = class {
|
|
|
1523
1550
|
getHeaders() {
|
|
1524
1551
|
this.addBaseHeaders();
|
|
1525
1552
|
this.addRetries();
|
|
1553
|
+
this.addRetryDelay();
|
|
1526
1554
|
this.addFlowControl();
|
|
1527
1555
|
this.addUserHeaders();
|
|
1528
1556
|
this.addInvokeCount();
|
|
@@ -1536,7 +1564,7 @@ var WorkflowHeaders = class {
|
|
|
1536
1564
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1537
1565
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1538
1566
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1539
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
|
|
1567
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1540
1568
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1541
1569
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1542
1570
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -1568,6 +1596,16 @@ var WorkflowHeaders = class {
|
|
|
1568
1596
|
this.headers.failureHeaders["Retries"] = retries;
|
|
1569
1597
|
}
|
|
1570
1598
|
}
|
|
1599
|
+
addRetryDelay() {
|
|
1600
|
+
if (this.workflowConfig.retryDelay === void 0 || this.workflowConfig.retryDelay === "") {
|
|
1601
|
+
return;
|
|
1602
|
+
}
|
|
1603
|
+
const retryDelay = this.workflowConfig.retryDelay.toString();
|
|
1604
|
+
this.headers.workflowHeaders["Retry-Delay"] = retryDelay;
|
|
1605
|
+
if (this.workflowConfig.failureUrl) {
|
|
1606
|
+
this.headers.failureHeaders["Retry-Delay"] = retryDelay;
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1571
1609
|
addFlowControl() {
|
|
1572
1610
|
if (!this.workflowConfig.flowControl) {
|
|
1573
1611
|
return;
|
|
@@ -1602,10 +1640,13 @@ var WorkflowHeaders = class {
|
|
|
1602
1640
|
this.headers.failureHeaders["Workflow-Init"] = "false";
|
|
1603
1641
|
this.headers.failureHeaders["Workflow-Url"] = this.workflowConfig.workflowUrl;
|
|
1604
1642
|
this.headers.failureHeaders["Workflow-Calltype"] = "failureCall";
|
|
1605
|
-
this.headers.failureHeaders["Feature-Set"] = "LazyFetch,InitialBody";
|
|
1643
|
+
this.headers.failureHeaders["Feature-Set"] = "LazyFetch,InitialBody,WF_DetectTrigger";
|
|
1606
1644
|
if (this.workflowConfig.retries !== void 0 && this.workflowConfig.retries !== DEFAULT_RETRIES) {
|
|
1607
1645
|
this.headers.failureHeaders["Retries"] = this.workflowConfig.retries.toString();
|
|
1608
1646
|
}
|
|
1647
|
+
if (this.workflowConfig.retryDelay !== void 0 && this.workflowConfig.retryDelay !== "") {
|
|
1648
|
+
this.headers.failureHeaders["Retry-Delay"] = this.workflowConfig.retryDelay.toString();
|
|
1649
|
+
}
|
|
1609
1650
|
}
|
|
1610
1651
|
addContentType() {
|
|
1611
1652
|
if (this.workflowConfig.useJSONContent) {
|
|
@@ -1687,6 +1728,7 @@ var submitParallelSteps = async ({
|
|
|
1687
1728
|
workflowUrl: context.url,
|
|
1688
1729
|
failureUrl: context.failureUrl,
|
|
1689
1730
|
retries: context.retries,
|
|
1731
|
+
retryDelay: context.retryDelay,
|
|
1690
1732
|
flowControl: context.flowControl,
|
|
1691
1733
|
telemetry
|
|
1692
1734
|
},
|
|
@@ -2107,7 +2149,7 @@ var BaseWorkflowApi = class {
|
|
|
2107
2149
|
*/
|
|
2108
2150
|
async callApi(stepName, settings) {
|
|
2109
2151
|
const { url, appendHeaders, method } = getProviderInfo(settings.api);
|
|
2110
|
-
const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings;
|
|
2152
|
+
const { method: userMethod, body, headers = {}, retries = 0, retryDelay, timeout } = settings;
|
|
2111
2153
|
return await this.context.call(stepName, {
|
|
2112
2154
|
url,
|
|
2113
2155
|
method: userMethod ?? method,
|
|
@@ -2117,6 +2159,7 @@ var BaseWorkflowApi = class {
|
|
|
2117
2159
|
...headers
|
|
2118
2160
|
},
|
|
2119
2161
|
retries,
|
|
2162
|
+
retryDelay,
|
|
2120
2163
|
timeout
|
|
2121
2164
|
});
|
|
2122
2165
|
}
|
|
@@ -2206,6 +2249,7 @@ var fetchWithContextCall = async (context, agentCallParams, ...params) => {
|
|
|
2206
2249
|
body,
|
|
2207
2250
|
timeout: agentCallParams?.timeout,
|
|
2208
2251
|
retries: agentCallParams?.retries,
|
|
2252
|
+
retryDelay: agentCallParams?.retryDelay,
|
|
2209
2253
|
flowControl: agentCallParams?.flowControl
|
|
2210
2254
|
});
|
|
2211
2255
|
const responseHeaders = new Headers(
|
|
@@ -2619,6 +2663,37 @@ var WorkflowContext = class {
|
|
|
2619
2663
|
* Number of retries
|
|
2620
2664
|
*/
|
|
2621
2665
|
retries;
|
|
2666
|
+
/**
|
|
2667
|
+
* Delay between retries.
|
|
2668
|
+
*
|
|
2669
|
+
* By default, the `retryDelay` is exponential backoff.
|
|
2670
|
+
* More details can be found in: https://upstash.com/docs/qstash/features/retry.
|
|
2671
|
+
*
|
|
2672
|
+
* The `retryDelay` option allows you to customize the delay (in milliseconds) between retry attempts when message delivery fails.
|
|
2673
|
+
*
|
|
2674
|
+
* You can use mathematical expressions and the following built-in functions to calculate the delay dynamically.
|
|
2675
|
+
* The special variable `retried` represents the current retry attempt count (starting from 0).
|
|
2676
|
+
*
|
|
2677
|
+
* Supported functions:
|
|
2678
|
+
* - `pow`
|
|
2679
|
+
* - `sqrt`
|
|
2680
|
+
* - `abs`
|
|
2681
|
+
* - `exp`
|
|
2682
|
+
* - `floor`
|
|
2683
|
+
* - `ceil`
|
|
2684
|
+
* - `round`
|
|
2685
|
+
* - `min`
|
|
2686
|
+
* - `max`
|
|
2687
|
+
*
|
|
2688
|
+
* Examples of valid `retryDelay` values:
|
|
2689
|
+
* ```ts
|
|
2690
|
+
* 1000 // 1 second
|
|
2691
|
+
* 1000 * (1 + retried) // 1 second multiplied by the current retry attempt
|
|
2692
|
+
* pow(2, retried) // 2 to the power of the current retry attempt
|
|
2693
|
+
* max(10, pow(2, retried)) // The greater of 10 or 2^retried
|
|
2694
|
+
* ```
|
|
2695
|
+
*/
|
|
2696
|
+
retryDelay;
|
|
2622
2697
|
/**
|
|
2623
2698
|
* Settings for controlling the number of active requests
|
|
2624
2699
|
* and number of requests per second with the same key.
|
|
@@ -2635,6 +2710,7 @@ var WorkflowContext = class {
|
|
|
2635
2710
|
initialPayload,
|
|
2636
2711
|
env,
|
|
2637
2712
|
retries,
|
|
2713
|
+
retryDelay,
|
|
2638
2714
|
telemetry,
|
|
2639
2715
|
invokeCount,
|
|
2640
2716
|
flowControl
|
|
@@ -2648,6 +2724,7 @@ var WorkflowContext = class {
|
|
|
2648
2724
|
this.requestPayload = initialPayload;
|
|
2649
2725
|
this.env = env ?? {};
|
|
2650
2726
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
2727
|
+
this.retryDelay = retryDelay;
|
|
2651
2728
|
this.flowControl = flowControl;
|
|
2652
2729
|
this.executor = new AutoExecutor(this, this.steps, telemetry, invokeCount, debug);
|
|
2653
2730
|
}
|
|
@@ -2729,6 +2806,7 @@ var WorkflowContext = class {
|
|
|
2729
2806
|
settings.body,
|
|
2730
2807
|
settings.headers || {},
|
|
2731
2808
|
settings.retries || 0,
|
|
2809
|
+
settings.retryDelay,
|
|
2732
2810
|
settings.timeout,
|
|
2733
2811
|
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2734
2812
|
);
|
|
@@ -2739,6 +2817,7 @@ var WorkflowContext = class {
|
|
|
2739
2817
|
body,
|
|
2740
2818
|
headers = {},
|
|
2741
2819
|
retries = 0,
|
|
2820
|
+
retryDelay,
|
|
2742
2821
|
timeout,
|
|
2743
2822
|
flowControl
|
|
2744
2823
|
} = settings;
|
|
@@ -2749,6 +2828,7 @@ var WorkflowContext = class {
|
|
|
2749
2828
|
body,
|
|
2750
2829
|
headers,
|
|
2751
2830
|
retries,
|
|
2831
|
+
retryDelay,
|
|
2752
2832
|
timeout,
|
|
2753
2833
|
flowControl
|
|
2754
2834
|
);
|
|
@@ -2759,7 +2839,7 @@ var WorkflowContext = class {
|
|
|
2759
2839
|
* Pauses workflow execution until a specific event occurs or a timeout is reached.
|
|
2760
2840
|
*
|
|
2761
2841
|
*```ts
|
|
2762
|
-
* const result = await workflow.waitForEvent("payment-confirmed", {
|
|
2842
|
+
* const result = await workflow.waitForEvent("payment-confirmed", "payment.confirmed", {
|
|
2763
2843
|
* timeout: "5m"
|
|
2764
2844
|
* });
|
|
2765
2845
|
*```
|
|
@@ -2785,7 +2865,7 @@ var WorkflowContext = class {
|
|
|
2785
2865
|
* @param stepName
|
|
2786
2866
|
* @param eventId - Unique identifier for the event to wait for
|
|
2787
2867
|
* @param options - Configuration options.
|
|
2788
|
-
* @returns `{ timeout: boolean, eventData:
|
|
2868
|
+
* @returns `{ timeout: boolean, eventData: TEventData }`.
|
|
2789
2869
|
* The `timeout` property specifies if the workflow has timed out. The `eventData`
|
|
2790
2870
|
* is the data passed when notifying this workflow of an event.
|
|
2791
2871
|
*/
|
|
@@ -2945,6 +3025,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2945
3025
|
initialPayload: context.requestPayload,
|
|
2946
3026
|
env: context.env,
|
|
2947
3027
|
retries: context.retries,
|
|
3028
|
+
retryDelay: context.retryDelay,
|
|
2948
3029
|
flowControl: context.flowControl
|
|
2949
3030
|
});
|
|
2950
3031
|
try {
|
|
@@ -2953,6 +3034,9 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2953
3034
|
if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
|
|
2954
3035
|
return ok("step-found");
|
|
2955
3036
|
}
|
|
3037
|
+
console.warn(
|
|
3038
|
+
"Upstash Workflow: Received an error while authorizing request. Please avoid throwing errors before the first step of your workflow."
|
|
3039
|
+
);
|
|
2956
3040
|
return err(error);
|
|
2957
3041
|
}
|
|
2958
3042
|
return ok("run-ended");
|
|
@@ -3094,9 +3178,9 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
|
|
|
3094
3178
|
};
|
|
3095
3179
|
}
|
|
3096
3180
|
};
|
|
3097
|
-
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, env, retries, flowControl, debug) => {
|
|
3181
|
+
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, env, retries, retryDelay, flowControl, debug) => {
|
|
3098
3182
|
if (request.headers.get(WORKFLOW_FAILURE_HEADER) !== "true") {
|
|
3099
|
-
return ok("not-failure-callback");
|
|
3183
|
+
return ok({ result: "not-failure-callback" });
|
|
3100
3184
|
}
|
|
3101
3185
|
if (!failureFunction) {
|
|
3102
3186
|
return err(
|
|
@@ -3108,7 +3192,17 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3108
3192
|
try {
|
|
3109
3193
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3110
3194
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3111
|
-
|
|
3195
|
+
let errorMessage = "";
|
|
3196
|
+
try {
|
|
3197
|
+
const errorPayload = JSON.parse(decodedBody);
|
|
3198
|
+
if (errorPayload.message) {
|
|
3199
|
+
errorMessage = errorPayload.message;
|
|
3200
|
+
}
|
|
3201
|
+
} catch {
|
|
3202
|
+
}
|
|
3203
|
+
if (!errorMessage) {
|
|
3204
|
+
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3205
|
+
}
|
|
3112
3206
|
const workflowContext = new WorkflowContext({
|
|
3113
3207
|
qstashClient,
|
|
3114
3208
|
workflowRunId,
|
|
@@ -3120,6 +3214,7 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3120
3214
|
debug,
|
|
3121
3215
|
env,
|
|
3122
3216
|
retries,
|
|
3217
|
+
retryDelay,
|
|
3123
3218
|
flowControl,
|
|
3124
3219
|
telemetry: void 0
|
|
3125
3220
|
// not going to make requests in authentication check
|
|
@@ -3134,16 +3229,16 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3134
3229
|
} else if (authCheck.value === "run-ended") {
|
|
3135
3230
|
return err(new WorkflowError("Not authorized to run the failure function."));
|
|
3136
3231
|
}
|
|
3137
|
-
await failureFunction({
|
|
3232
|
+
const failureResponse = await failureFunction({
|
|
3138
3233
|
context: workflowContext,
|
|
3139
3234
|
failStatus: status,
|
|
3140
|
-
failResponse:
|
|
3235
|
+
failResponse: errorMessage,
|
|
3141
3236
|
failHeaders: header
|
|
3142
3237
|
});
|
|
3238
|
+
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3143
3239
|
} catch (error) {
|
|
3144
3240
|
return err(error);
|
|
3145
3241
|
}
|
|
3146
|
-
return ok("is-failure-callback");
|
|
3147
3242
|
};
|
|
3148
3243
|
|
|
3149
3244
|
// src/serve/options.ts
|
|
@@ -3159,8 +3254,8 @@ var processOptions = (options) => {
|
|
|
3159
3254
|
baseUrl: environment.QSTASH_URL,
|
|
3160
3255
|
token: environment.QSTASH_TOKEN
|
|
3161
3256
|
}),
|
|
3162
|
-
onStepFinish: (workflowRunId,
|
|
3163
|
-
if (
|
|
3257
|
+
onStepFinish: (workflowRunId, _finishCondition, detailedFinishCondition) => {
|
|
3258
|
+
if (detailedFinishCondition?.condition === "auth-fail") {
|
|
3164
3259
|
console.error(AUTH_FAIL_MESSAGE);
|
|
3165
3260
|
return new Response(
|
|
3166
3261
|
JSON.stringify({
|
|
@@ -3168,19 +3263,33 @@ var processOptions = (options) => {
|
|
|
3168
3263
|
workflowRunId
|
|
3169
3264
|
}),
|
|
3170
3265
|
{
|
|
3171
|
-
status: 400
|
|
3266
|
+
status: 400,
|
|
3267
|
+
headers: {
|
|
3268
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3269
|
+
}
|
|
3172
3270
|
}
|
|
3173
3271
|
);
|
|
3174
|
-
} else if (
|
|
3175
|
-
return new Response(JSON.stringify(formatWorkflowError(
|
|
3272
|
+
} else if (detailedFinishCondition?.condition === "non-retryable-error") {
|
|
3273
|
+
return new Response(JSON.stringify(formatWorkflowError(detailedFinishCondition.result)), {
|
|
3176
3274
|
headers: {
|
|
3177
|
-
"Upstash-NonRetryable-Error": "true"
|
|
3275
|
+
"Upstash-NonRetryable-Error": "true",
|
|
3276
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3178
3277
|
},
|
|
3179
3278
|
status: 489
|
|
3180
3279
|
});
|
|
3280
|
+
} else if (detailedFinishCondition?.condition === "failure-callback") {
|
|
3281
|
+
return new Response(detailedFinishCondition.result ?? void 0, {
|
|
3282
|
+
status: 200,
|
|
3283
|
+
headers: {
|
|
3284
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3285
|
+
}
|
|
3286
|
+
});
|
|
3181
3287
|
}
|
|
3182
3288
|
return new Response(JSON.stringify({ workflowRunId }), {
|
|
3183
|
-
status: 200
|
|
3289
|
+
status: 200,
|
|
3290
|
+
headers: {
|
|
3291
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3292
|
+
}
|
|
3184
3293
|
});
|
|
3185
3294
|
},
|
|
3186
3295
|
initialPayloadParser: (initialRequest) => {
|
|
@@ -3254,6 +3363,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3254
3363
|
baseUrl,
|
|
3255
3364
|
env,
|
|
3256
3365
|
retries,
|
|
3366
|
+
retryDelay,
|
|
3257
3367
|
useJSONContent,
|
|
3258
3368
|
disableTelemetry,
|
|
3259
3369
|
flowControl,
|
|
@@ -3284,10 +3394,14 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3284
3394
|
debug
|
|
3285
3395
|
);
|
|
3286
3396
|
if (workflowRunEnded) {
|
|
3287
|
-
return onStepFinish(workflowRunId, "workflow-already-ended"
|
|
3397
|
+
return onStepFinish(workflowRunId, "workflow-already-ended", {
|
|
3398
|
+
condition: "workflow-already-ended"
|
|
3399
|
+
});
|
|
3288
3400
|
}
|
|
3289
3401
|
if (isLastDuplicate) {
|
|
3290
|
-
return onStepFinish(workflowRunId, "duplicate-step"
|
|
3402
|
+
return onStepFinish(workflowRunId, "duplicate-step", {
|
|
3403
|
+
condition: "duplicate-step"
|
|
3404
|
+
});
|
|
3291
3405
|
}
|
|
3292
3406
|
const failureCheck = await handleFailure(
|
|
3293
3407
|
request,
|
|
@@ -3298,14 +3412,18 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3298
3412
|
failureFunction,
|
|
3299
3413
|
env,
|
|
3300
3414
|
retries,
|
|
3415
|
+
retryDelay,
|
|
3301
3416
|
flowControl,
|
|
3302
3417
|
debug
|
|
3303
3418
|
);
|
|
3304
3419
|
if (failureCheck.isErr()) {
|
|
3305
3420
|
throw failureCheck.error;
|
|
3306
|
-
} else if (failureCheck.value === "is-failure-callback") {
|
|
3421
|
+
} else if (failureCheck.value.result === "is-failure-callback") {
|
|
3307
3422
|
await debug?.log("WARN", "RESPONSE_DEFAULT", "failureFunction executed");
|
|
3308
|
-
return onStepFinish(workflowRunId, "failure-callback"
|
|
3423
|
+
return onStepFinish(workflowRunId, "failure-callback", {
|
|
3424
|
+
condition: "failure-callback",
|
|
3425
|
+
result: failureCheck.value.response
|
|
3426
|
+
});
|
|
3309
3427
|
}
|
|
3310
3428
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3311
3429
|
const workflowContext = new WorkflowContext({
|
|
@@ -3319,6 +3437,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3319
3437
|
debug,
|
|
3320
3438
|
env,
|
|
3321
3439
|
retries,
|
|
3440
|
+
retryDelay,
|
|
3322
3441
|
telemetry,
|
|
3323
3442
|
invokeCount,
|
|
3324
3443
|
flowControl
|
|
@@ -3334,7 +3453,8 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3334
3453
|
await debug?.log("ERROR", "ERROR", { error: AUTH_FAIL_MESSAGE });
|
|
3335
3454
|
return onStepFinish(
|
|
3336
3455
|
isFirstInvocation ? "no-workflow-id" : workflowContext.workflowRunId,
|
|
3337
|
-
"auth-fail"
|
|
3456
|
+
"auth-fail",
|
|
3457
|
+
{ condition: "auth-fail" }
|
|
3338
3458
|
);
|
|
3339
3459
|
}
|
|
3340
3460
|
const callReturnCheck = await handleThirdPartyCallResult({
|
|
@@ -3344,6 +3464,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3344
3464
|
workflowUrl,
|
|
3345
3465
|
failureUrl: workflowFailureUrl,
|
|
3346
3466
|
retries,
|
|
3467
|
+
retryDelay,
|
|
3347
3468
|
flowControl,
|
|
3348
3469
|
telemetry,
|
|
3349
3470
|
debug
|
|
@@ -3371,19 +3492,28 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3371
3492
|
debug
|
|
3372
3493
|
});
|
|
3373
3494
|
if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
|
|
3374
|
-
return onStepFinish(workflowRunId, result.value
|
|
3495
|
+
return onStepFinish(workflowRunId, result.value, {
|
|
3496
|
+
condition: "non-retryable-error",
|
|
3497
|
+
result: result.value
|
|
3498
|
+
});
|
|
3375
3499
|
}
|
|
3376
3500
|
if (result.isErr()) {
|
|
3377
3501
|
await debug?.log("ERROR", "ERROR", { error: result.error.message });
|
|
3378
3502
|
throw result.error;
|
|
3379
3503
|
}
|
|
3380
3504
|
await debug?.log("INFO", "RESPONSE_WORKFLOW");
|
|
3381
|
-
return onStepFinish(workflowContext.workflowRunId, "success"
|
|
3505
|
+
return onStepFinish(workflowContext.workflowRunId, "success", {
|
|
3506
|
+
condition: "success"
|
|
3507
|
+
});
|
|
3382
3508
|
} else if (callReturnCheck.value === "workflow-ended") {
|
|
3383
|
-
return onStepFinish(workflowContext.workflowRunId, "workflow-already-ended"
|
|
3509
|
+
return onStepFinish(workflowContext.workflowRunId, "workflow-already-ended", {
|
|
3510
|
+
condition: "workflow-already-ended"
|
|
3511
|
+
});
|
|
3384
3512
|
}
|
|
3385
3513
|
await debug?.log("INFO", "RESPONSE_DEFAULT");
|
|
3386
|
-
return onStepFinish("no-workflow-id", "fromCallback"
|
|
3514
|
+
return onStepFinish("no-workflow-id", "fromCallback", {
|
|
3515
|
+
condition: "fromCallback"
|
|
3516
|
+
});
|
|
3387
3517
|
};
|
|
3388
3518
|
const safeHandler = async (request) => {
|
|
3389
3519
|
try {
|
|
@@ -3398,11 +3528,17 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3398
3528
|
Original error: '${formattedError.message}'`;
|
|
3399
3529
|
console.error(errorMessage);
|
|
3400
3530
|
return new Response(errorMessage, {
|
|
3401
|
-
status: 500
|
|
3531
|
+
status: 500,
|
|
3532
|
+
headers: {
|
|
3533
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3534
|
+
}
|
|
3402
3535
|
});
|
|
3403
3536
|
}
|
|
3404
3537
|
return new Response(JSON.stringify(formattedError), {
|
|
3405
|
-
status: 500
|
|
3538
|
+
status: 500,
|
|
3539
|
+
headers: {
|
|
3540
|
+
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION
|
|
3541
|
+
}
|
|
3406
3542
|
});
|
|
3407
3543
|
}
|
|
3408
3544
|
};
|
package/solidjs.mjs
CHANGED
package/svelte.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _sveltejs_kit from '@sveltejs/kit';
|
|
2
2
|
import { RequestHandler } from '@sveltejs/kit';
|
|
3
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
3
|
+
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.mjs';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-DgDSOvQs.mjs';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|
package/svelte.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _sveltejs_kit from '@sveltejs/kit';
|
|
2
2
|
import { RequestHandler } from '@sveltejs/kit';
|
|
3
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
3
|
+
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.js';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-B3DfoTFt.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|