@upstash/workflow 0.2.18 → 0.2.20
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 +52 -14
- package/astro.mjs +1 -1
- package/{chunk-EHL7SSJF.mjs → chunk-LZGX3WMF.mjs} +52 -14
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +52 -14
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +52 -14
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +52 -14
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +52 -14
- package/hono.mjs +1 -1
- package/index.d.mts +12 -2
- package/index.d.ts +12 -2
- package/index.js +54 -15
- package/index.mjs +3 -2
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +52 -14
- package/nextjs.mjs +1 -1
- package/package.json +1 -1
- package/{serve-many-CEUYWQvV.d.mts → serve-many-BNusWYgt.d.mts} +1 -1
- package/{serve-many-BObe3pdI.d.ts → serve-many-CXqQP3RI.d.ts} +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +52 -14
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +52 -14
- package/svelte.mjs +1 -1
- package/{types-B7_5AkKQ.d.ts → types-Q3dM0UlR.d.mts} +21 -2
- package/{types-B7_5AkKQ.d.mts → types-Q3dM0UlR.d.ts} +21 -2
package/astro.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import { g as WorkflowContext, n as PublicServeOptions,
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { g as WorkflowContext, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-BNusWYgt.mjs';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import 'ai';
|
package/astro.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import { g as WorkflowContext, n as PublicServeOptions,
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { g as WorkflowContext, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-CXqQP3RI.js';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import 'ai';
|
package/astro.js
CHANGED
|
@@ -92,7 +92,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
92
92
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
93
93
|
var NO_CONCURRENCY = 1;
|
|
94
94
|
var DEFAULT_RETRIES = 3;
|
|
95
|
-
var VERSION = "v0.2.
|
|
95
|
+
var VERSION = "v0.2.20";
|
|
96
96
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
97
97
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
98
98
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -143,7 +143,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
143
143
|
var formatWorkflowError = (error) => {
|
|
144
144
|
return error instanceof Error ? {
|
|
145
145
|
error: error.name,
|
|
146
|
-
message: error.message
|
|
146
|
+
message: error.message,
|
|
147
|
+
stack: error.stack
|
|
147
148
|
} : {
|
|
148
149
|
error: "Error",
|
|
149
150
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -614,7 +615,7 @@ var triggerFirstInvocation = async (params) => {
|
|
|
614
615
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
615
616
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
616
617
|
const invocationBatch = firstInvocationParams.map(
|
|
617
|
-
({ workflowContext, useJSONContent, telemetry: telemetry2, invokeCount, delay }) => {
|
|
618
|
+
({ workflowContext, useJSONContent, telemetry: telemetry2, invokeCount, delay, notBefore }) => {
|
|
618
619
|
const { headers } = getHeaders({
|
|
619
620
|
initHeaderValue: "true",
|
|
620
621
|
workflowConfig: {
|
|
@@ -645,7 +646,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
645
646
|
method: "POST",
|
|
646
647
|
body,
|
|
647
648
|
url: workflowContext.url,
|
|
648
|
-
delay
|
|
649
|
+
delay,
|
|
650
|
+
notBefore
|
|
649
651
|
};
|
|
650
652
|
}
|
|
651
653
|
);
|
|
@@ -1133,9 +1135,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1133
1135
|
retryDelay;
|
|
1134
1136
|
timeout;
|
|
1135
1137
|
flowControl;
|
|
1138
|
+
stringifyBody;
|
|
1136
1139
|
stepType = "Call";
|
|
1137
1140
|
allowUndefinedOut = false;
|
|
1138
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1141
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1139
1142
|
super(stepName);
|
|
1140
1143
|
this.url = url;
|
|
1141
1144
|
this.method = method;
|
|
@@ -1145,6 +1148,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1145
1148
|
this.retryDelay = retryDelay;
|
|
1146
1149
|
this.timeout = timeout;
|
|
1147
1150
|
this.flowControl = flowControl;
|
|
1151
|
+
this.stringifyBody = stringifyBody;
|
|
1148
1152
|
}
|
|
1149
1153
|
getPlanStep(concurrent, targetStep) {
|
|
1150
1154
|
return {
|
|
@@ -1254,10 +1258,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1254
1258
|
};
|
|
1255
1259
|
}
|
|
1256
1260
|
async submitStep({ context, headers }) {
|
|
1261
|
+
let callBody;
|
|
1262
|
+
if (this.stringifyBody) {
|
|
1263
|
+
callBody = JSON.stringify(this.body);
|
|
1264
|
+
} else {
|
|
1265
|
+
if (typeof this.body === "string") {
|
|
1266
|
+
callBody = this.body;
|
|
1267
|
+
} else {
|
|
1268
|
+
throw new WorkflowError(
|
|
1269
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1270
|
+
);
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1257
1273
|
return await context.qstashClient.batch([
|
|
1258
1274
|
{
|
|
1259
1275
|
headers,
|
|
1260
|
-
body:
|
|
1276
|
+
body: callBody,
|
|
1261
1277
|
method: this.method,
|
|
1262
1278
|
url: this.url,
|
|
1263
1279
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1392,7 +1408,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1392
1408
|
workflowRunId,
|
|
1393
1409
|
retries,
|
|
1394
1410
|
retryDelay,
|
|
1395
|
-
flowControl
|
|
1411
|
+
flowControl,
|
|
1412
|
+
stringifyBody = true
|
|
1396
1413
|
}) {
|
|
1397
1414
|
super(stepName);
|
|
1398
1415
|
this.params = {
|
|
@@ -1402,7 +1419,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1402
1419
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1403
1420
|
retries,
|
|
1404
1421
|
retryDelay,
|
|
1405
|
-
flowControl
|
|
1422
|
+
flowControl,
|
|
1423
|
+
stringifyBody
|
|
1406
1424
|
};
|
|
1407
1425
|
const { workflowId } = workflow;
|
|
1408
1426
|
if (!workflowId) {
|
|
@@ -1455,8 +1473,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1455
1473
|
invokeCount
|
|
1456
1474
|
});
|
|
1457
1475
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1476
|
+
let invokeBody;
|
|
1477
|
+
if (this.params.stringifyBody) {
|
|
1478
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1479
|
+
} else {
|
|
1480
|
+
if (typeof this.params.body === "string") {
|
|
1481
|
+
invokeBody = this.params.body;
|
|
1482
|
+
} else {
|
|
1483
|
+
throw new WorkflowError(
|
|
1484
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1485
|
+
);
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1458
1488
|
const request = {
|
|
1459
|
-
body:
|
|
1489
|
+
body: invokeBody,
|
|
1460
1490
|
headers: Object.fromEntries(
|
|
1461
1491
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1462
1492
|
),
|
|
@@ -2900,7 +2930,8 @@ var WorkflowContext = class {
|
|
|
2900
2930
|
settings.retries || 0,
|
|
2901
2931
|
settings.retryDelay,
|
|
2902
2932
|
settings.timeout,
|
|
2903
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2933
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2934
|
+
settings.stringifyBody ?? true
|
|
2904
2935
|
);
|
|
2905
2936
|
} else {
|
|
2906
2937
|
const {
|
|
@@ -2911,7 +2942,8 @@ var WorkflowContext = class {
|
|
|
2911
2942
|
retries = 0,
|
|
2912
2943
|
retryDelay,
|
|
2913
2944
|
timeout,
|
|
2914
|
-
flowControl
|
|
2945
|
+
flowControl,
|
|
2946
|
+
stringifyBody = true
|
|
2915
2947
|
} = settings;
|
|
2916
2948
|
callStep = new LazyCallStep(
|
|
2917
2949
|
stepName,
|
|
@@ -2922,7 +2954,8 @@ var WorkflowContext = class {
|
|
|
2922
2954
|
retries,
|
|
2923
2955
|
retryDelay,
|
|
2924
2956
|
timeout,
|
|
2925
|
-
flowControl
|
|
2957
|
+
flowControl,
|
|
2958
|
+
stringifyBody
|
|
2926
2959
|
);
|
|
2927
2960
|
}
|
|
2928
2961
|
return await this.addStep(callStep);
|
|
@@ -3286,11 +3319,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3286
3319
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3287
3320
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3288
3321
|
let errorMessage = "";
|
|
3322
|
+
let failStack = "";
|
|
3289
3323
|
try {
|
|
3290
3324
|
const errorPayload = JSON.parse(decodedBody);
|
|
3291
3325
|
if (errorPayload.message) {
|
|
3292
3326
|
errorMessage = errorPayload.message;
|
|
3293
3327
|
}
|
|
3328
|
+
if (errorPayload.stack) {
|
|
3329
|
+
failStack = errorPayload.stack;
|
|
3330
|
+
}
|
|
3294
3331
|
} catch {
|
|
3295
3332
|
}
|
|
3296
3333
|
if (!errorMessage) {
|
|
@@ -3328,7 +3365,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3328
3365
|
context: workflowContext,
|
|
3329
3366
|
failStatus: status,
|
|
3330
3367
|
failResponse: errorMessage,
|
|
3331
|
-
failHeaders: header
|
|
3368
|
+
failHeaders: header,
|
|
3369
|
+
failStack
|
|
3332
3370
|
});
|
|
3333
3371
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3334
3372
|
} catch (error) {
|
|
@@ -3345,7 +3383,7 @@ var processOptions = (options) => {
|
|
|
3345
3383
|
environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
|
|
3346
3384
|
);
|
|
3347
3385
|
return {
|
|
3348
|
-
qstashClient: new import_qstash11.Client({
|
|
3386
|
+
qstashClient: options?.qstashClient ?? new import_qstash11.Client({
|
|
3349
3387
|
baseUrl: environment.QSTASH_URL,
|
|
3350
3388
|
token: environment.QSTASH_TOKEN
|
|
3351
3389
|
}),
|
package/astro.mjs
CHANGED
|
@@ -43,7 +43,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
43
43
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
44
44
|
var NO_CONCURRENCY = 1;
|
|
45
45
|
var DEFAULT_RETRIES = 3;
|
|
46
|
-
var VERSION = "v0.2.
|
|
46
|
+
var VERSION = "v0.2.20";
|
|
47
47
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
48
48
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
49
49
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -94,7 +94,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
94
94
|
var formatWorkflowError = (error) => {
|
|
95
95
|
return error instanceof Error ? {
|
|
96
96
|
error: error.name,
|
|
97
|
-
message: error.message
|
|
97
|
+
message: error.message,
|
|
98
|
+
stack: error.stack
|
|
98
99
|
} : {
|
|
99
100
|
error: "Error",
|
|
100
101
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -831,7 +832,7 @@ var triggerFirstInvocation = async (params) => {
|
|
|
831
832
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
832
833
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
833
834
|
const invocationBatch = firstInvocationParams.map(
|
|
834
|
-
({ workflowContext, useJSONContent, telemetry, invokeCount, delay }) => {
|
|
835
|
+
({ workflowContext, useJSONContent, telemetry, invokeCount, delay, notBefore }) => {
|
|
835
836
|
const { headers } = getHeaders({
|
|
836
837
|
initHeaderValue: "true",
|
|
837
838
|
workflowConfig: {
|
|
@@ -862,7 +863,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
862
863
|
method: "POST",
|
|
863
864
|
body,
|
|
864
865
|
url: workflowContext.url,
|
|
865
|
-
delay
|
|
866
|
+
delay,
|
|
867
|
+
notBefore
|
|
866
868
|
};
|
|
867
869
|
}
|
|
868
870
|
);
|
|
@@ -1350,9 +1352,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1350
1352
|
retryDelay;
|
|
1351
1353
|
timeout;
|
|
1352
1354
|
flowControl;
|
|
1355
|
+
stringifyBody;
|
|
1353
1356
|
stepType = "Call";
|
|
1354
1357
|
allowUndefinedOut = false;
|
|
1355
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1358
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1356
1359
|
super(stepName);
|
|
1357
1360
|
this.url = url;
|
|
1358
1361
|
this.method = method;
|
|
@@ -1362,6 +1365,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1362
1365
|
this.retryDelay = retryDelay;
|
|
1363
1366
|
this.timeout = timeout;
|
|
1364
1367
|
this.flowControl = flowControl;
|
|
1368
|
+
this.stringifyBody = stringifyBody;
|
|
1365
1369
|
}
|
|
1366
1370
|
getPlanStep(concurrent, targetStep) {
|
|
1367
1371
|
return {
|
|
@@ -1471,10 +1475,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1471
1475
|
};
|
|
1472
1476
|
}
|
|
1473
1477
|
async submitStep({ context, headers }) {
|
|
1478
|
+
let callBody;
|
|
1479
|
+
if (this.stringifyBody) {
|
|
1480
|
+
callBody = JSON.stringify(this.body);
|
|
1481
|
+
} else {
|
|
1482
|
+
if (typeof this.body === "string") {
|
|
1483
|
+
callBody = this.body;
|
|
1484
|
+
} else {
|
|
1485
|
+
throw new WorkflowError(
|
|
1486
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1487
|
+
);
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1474
1490
|
return await context.qstashClient.batch([
|
|
1475
1491
|
{
|
|
1476
1492
|
headers,
|
|
1477
|
-
body:
|
|
1493
|
+
body: callBody,
|
|
1478
1494
|
method: this.method,
|
|
1479
1495
|
url: this.url,
|
|
1480
1496
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1609,7 +1625,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1609
1625
|
workflowRunId,
|
|
1610
1626
|
retries,
|
|
1611
1627
|
retryDelay,
|
|
1612
|
-
flowControl
|
|
1628
|
+
flowControl,
|
|
1629
|
+
stringifyBody = true
|
|
1613
1630
|
}) {
|
|
1614
1631
|
super(stepName);
|
|
1615
1632
|
this.params = {
|
|
@@ -1619,7 +1636,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1619
1636
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1620
1637
|
retries,
|
|
1621
1638
|
retryDelay,
|
|
1622
|
-
flowControl
|
|
1639
|
+
flowControl,
|
|
1640
|
+
stringifyBody
|
|
1623
1641
|
};
|
|
1624
1642
|
const { workflowId } = workflow;
|
|
1625
1643
|
if (!workflowId) {
|
|
@@ -1672,8 +1690,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1672
1690
|
invokeCount
|
|
1673
1691
|
});
|
|
1674
1692
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1693
|
+
let invokeBody;
|
|
1694
|
+
if (this.params.stringifyBody) {
|
|
1695
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1696
|
+
} else {
|
|
1697
|
+
if (typeof this.params.body === "string") {
|
|
1698
|
+
invokeBody = this.params.body;
|
|
1699
|
+
} else {
|
|
1700
|
+
throw new WorkflowError(
|
|
1701
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1702
|
+
);
|
|
1703
|
+
}
|
|
1704
|
+
}
|
|
1675
1705
|
const request = {
|
|
1676
|
-
body:
|
|
1706
|
+
body: invokeBody,
|
|
1677
1707
|
headers: Object.fromEntries(
|
|
1678
1708
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1679
1709
|
),
|
|
@@ -2944,7 +2974,8 @@ var WorkflowContext = class {
|
|
|
2944
2974
|
settings.retries || 0,
|
|
2945
2975
|
settings.retryDelay,
|
|
2946
2976
|
settings.timeout,
|
|
2947
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2977
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2978
|
+
settings.stringifyBody ?? true
|
|
2948
2979
|
);
|
|
2949
2980
|
} else {
|
|
2950
2981
|
const {
|
|
@@ -2955,7 +2986,8 @@ var WorkflowContext = class {
|
|
|
2955
2986
|
retries = 0,
|
|
2956
2987
|
retryDelay,
|
|
2957
2988
|
timeout,
|
|
2958
|
-
flowControl
|
|
2989
|
+
flowControl,
|
|
2990
|
+
stringifyBody = true
|
|
2959
2991
|
} = settings;
|
|
2960
2992
|
callStep = new LazyCallStep(
|
|
2961
2993
|
stepName,
|
|
@@ -2966,7 +2998,8 @@ var WorkflowContext = class {
|
|
|
2966
2998
|
retries,
|
|
2967
2999
|
retryDelay,
|
|
2968
3000
|
timeout,
|
|
2969
|
-
flowControl
|
|
3001
|
+
flowControl,
|
|
3002
|
+
stringifyBody
|
|
2970
3003
|
);
|
|
2971
3004
|
}
|
|
2972
3005
|
return await this.addStep(callStep);
|
|
@@ -3330,11 +3363,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3330
3363
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3331
3364
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3332
3365
|
let errorMessage = "";
|
|
3366
|
+
let failStack = "";
|
|
3333
3367
|
try {
|
|
3334
3368
|
const errorPayload = JSON.parse(decodedBody);
|
|
3335
3369
|
if (errorPayload.message) {
|
|
3336
3370
|
errorMessage = errorPayload.message;
|
|
3337
3371
|
}
|
|
3372
|
+
if (errorPayload.stack) {
|
|
3373
|
+
failStack = errorPayload.stack;
|
|
3374
|
+
}
|
|
3338
3375
|
} catch {
|
|
3339
3376
|
}
|
|
3340
3377
|
if (!errorMessage) {
|
|
@@ -3372,7 +3409,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3372
3409
|
context: workflowContext,
|
|
3373
3410
|
failStatus: status,
|
|
3374
3411
|
failResponse: errorMessage,
|
|
3375
|
-
failHeaders: header
|
|
3412
|
+
failHeaders: header,
|
|
3413
|
+
failStack
|
|
3376
3414
|
});
|
|
3377
3415
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3378
3416
|
} catch (error) {
|
|
@@ -3389,7 +3427,7 @@ var processOptions = (options) => {
|
|
|
3389
3427
|
environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
|
|
3390
3428
|
);
|
|
3391
3429
|
return {
|
|
3392
|
-
qstashClient: new Client3({
|
|
3430
|
+
qstashClient: options?.qstashClient ?? new Client3({
|
|
3393
3431
|
baseUrl: environment.QSTASH_URL,
|
|
3394
3432
|
token: environment.QSTASH_TOKEN
|
|
3395
3433
|
}),
|
package/cloudflare.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { R as RouteFunction, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-BNusWYgt.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
package/cloudflare.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { R as RouteFunction, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-CXqQP3RI.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
package/cloudflare.js
CHANGED
|
@@ -39,7 +39,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
39
39
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
40
40
|
var NO_CONCURRENCY = 1;
|
|
41
41
|
var DEFAULT_RETRIES = 3;
|
|
42
|
-
var VERSION = "v0.2.
|
|
42
|
+
var VERSION = "v0.2.20";
|
|
43
43
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
44
44
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
45
45
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -143,7 +143,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
143
143
|
var formatWorkflowError = (error) => {
|
|
144
144
|
return error instanceof Error ? {
|
|
145
145
|
error: error.name,
|
|
146
|
-
message: error.message
|
|
146
|
+
message: error.message,
|
|
147
|
+
stack: error.stack
|
|
147
148
|
} : {
|
|
148
149
|
error: "Error",
|
|
149
150
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -614,7 +615,7 @@ var triggerFirstInvocation = async (params) => {
|
|
|
614
615
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
615
616
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
616
617
|
const invocationBatch = firstInvocationParams.map(
|
|
617
|
-
({ workflowContext, useJSONContent, telemetry: telemetry2, invokeCount, delay }) => {
|
|
618
|
+
({ workflowContext, useJSONContent, telemetry: telemetry2, invokeCount, delay, notBefore }) => {
|
|
618
619
|
const { headers } = getHeaders({
|
|
619
620
|
initHeaderValue: "true",
|
|
620
621
|
workflowConfig: {
|
|
@@ -645,7 +646,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
645
646
|
method: "POST",
|
|
646
647
|
body,
|
|
647
648
|
url: workflowContext.url,
|
|
648
|
-
delay
|
|
649
|
+
delay,
|
|
650
|
+
notBefore
|
|
649
651
|
};
|
|
650
652
|
}
|
|
651
653
|
);
|
|
@@ -1133,9 +1135,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1133
1135
|
retryDelay;
|
|
1134
1136
|
timeout;
|
|
1135
1137
|
flowControl;
|
|
1138
|
+
stringifyBody;
|
|
1136
1139
|
stepType = "Call";
|
|
1137
1140
|
allowUndefinedOut = false;
|
|
1138
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1141
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1139
1142
|
super(stepName);
|
|
1140
1143
|
this.url = url;
|
|
1141
1144
|
this.method = method;
|
|
@@ -1145,6 +1148,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1145
1148
|
this.retryDelay = retryDelay;
|
|
1146
1149
|
this.timeout = timeout;
|
|
1147
1150
|
this.flowControl = flowControl;
|
|
1151
|
+
this.stringifyBody = stringifyBody;
|
|
1148
1152
|
}
|
|
1149
1153
|
getPlanStep(concurrent, targetStep) {
|
|
1150
1154
|
return {
|
|
@@ -1254,10 +1258,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1254
1258
|
};
|
|
1255
1259
|
}
|
|
1256
1260
|
async submitStep({ context, headers }) {
|
|
1261
|
+
let callBody;
|
|
1262
|
+
if (this.stringifyBody) {
|
|
1263
|
+
callBody = JSON.stringify(this.body);
|
|
1264
|
+
} else {
|
|
1265
|
+
if (typeof this.body === "string") {
|
|
1266
|
+
callBody = this.body;
|
|
1267
|
+
} else {
|
|
1268
|
+
throw new WorkflowError(
|
|
1269
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1270
|
+
);
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1257
1273
|
return await context.qstashClient.batch([
|
|
1258
1274
|
{
|
|
1259
1275
|
headers,
|
|
1260
|
-
body:
|
|
1276
|
+
body: callBody,
|
|
1261
1277
|
method: this.method,
|
|
1262
1278
|
url: this.url,
|
|
1263
1279
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1392,7 +1408,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1392
1408
|
workflowRunId,
|
|
1393
1409
|
retries,
|
|
1394
1410
|
retryDelay,
|
|
1395
|
-
flowControl
|
|
1411
|
+
flowControl,
|
|
1412
|
+
stringifyBody = true
|
|
1396
1413
|
}) {
|
|
1397
1414
|
super(stepName);
|
|
1398
1415
|
this.params = {
|
|
@@ -1402,7 +1419,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1402
1419
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1403
1420
|
retries,
|
|
1404
1421
|
retryDelay,
|
|
1405
|
-
flowControl
|
|
1422
|
+
flowControl,
|
|
1423
|
+
stringifyBody
|
|
1406
1424
|
};
|
|
1407
1425
|
const { workflowId } = workflow;
|
|
1408
1426
|
if (!workflowId) {
|
|
@@ -1455,8 +1473,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1455
1473
|
invokeCount
|
|
1456
1474
|
});
|
|
1457
1475
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1476
|
+
let invokeBody;
|
|
1477
|
+
if (this.params.stringifyBody) {
|
|
1478
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1479
|
+
} else {
|
|
1480
|
+
if (typeof this.params.body === "string") {
|
|
1481
|
+
invokeBody = this.params.body;
|
|
1482
|
+
} else {
|
|
1483
|
+
throw new WorkflowError(
|
|
1484
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1485
|
+
);
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1458
1488
|
const request = {
|
|
1459
|
-
body:
|
|
1489
|
+
body: invokeBody,
|
|
1460
1490
|
headers: Object.fromEntries(
|
|
1461
1491
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1462
1492
|
),
|
|
@@ -2900,7 +2930,8 @@ var WorkflowContext = class {
|
|
|
2900
2930
|
settings.retries || 0,
|
|
2901
2931
|
settings.retryDelay,
|
|
2902
2932
|
settings.timeout,
|
|
2903
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2933
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2934
|
+
settings.stringifyBody ?? true
|
|
2904
2935
|
);
|
|
2905
2936
|
} else {
|
|
2906
2937
|
const {
|
|
@@ -2911,7 +2942,8 @@ var WorkflowContext = class {
|
|
|
2911
2942
|
retries = 0,
|
|
2912
2943
|
retryDelay,
|
|
2913
2944
|
timeout,
|
|
2914
|
-
flowControl
|
|
2945
|
+
flowControl,
|
|
2946
|
+
stringifyBody = true
|
|
2915
2947
|
} = settings;
|
|
2916
2948
|
callStep = new LazyCallStep(
|
|
2917
2949
|
stepName,
|
|
@@ -2922,7 +2954,8 @@ var WorkflowContext = class {
|
|
|
2922
2954
|
retries,
|
|
2923
2955
|
retryDelay,
|
|
2924
2956
|
timeout,
|
|
2925
|
-
flowControl
|
|
2957
|
+
flowControl,
|
|
2958
|
+
stringifyBody
|
|
2926
2959
|
);
|
|
2927
2960
|
}
|
|
2928
2961
|
return await this.addStep(callStep);
|
|
@@ -3286,11 +3319,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3286
3319
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3287
3320
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3288
3321
|
let errorMessage = "";
|
|
3322
|
+
let failStack = "";
|
|
3289
3323
|
try {
|
|
3290
3324
|
const errorPayload = JSON.parse(decodedBody);
|
|
3291
3325
|
if (errorPayload.message) {
|
|
3292
3326
|
errorMessage = errorPayload.message;
|
|
3293
3327
|
}
|
|
3328
|
+
if (errorPayload.stack) {
|
|
3329
|
+
failStack = errorPayload.stack;
|
|
3330
|
+
}
|
|
3294
3331
|
} catch {
|
|
3295
3332
|
}
|
|
3296
3333
|
if (!errorMessage) {
|
|
@@ -3328,7 +3365,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3328
3365
|
context: workflowContext,
|
|
3329
3366
|
failStatus: status,
|
|
3330
3367
|
failResponse: errorMessage,
|
|
3331
|
-
failHeaders: header
|
|
3368
|
+
failHeaders: header,
|
|
3369
|
+
failStack
|
|
3332
3370
|
});
|
|
3333
3371
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3334
3372
|
} catch (error) {
|
|
@@ -3345,7 +3383,7 @@ var processOptions = (options) => {
|
|
|
3345
3383
|
environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
|
|
3346
3384
|
);
|
|
3347
3385
|
return {
|
|
3348
|
-
qstashClient: new import_qstash11.Client({
|
|
3386
|
+
qstashClient: options?.qstashClient ?? new import_qstash11.Client({
|
|
3349
3387
|
baseUrl: environment.QSTASH_URL,
|
|
3350
3388
|
token: environment.QSTASH_TOKEN
|
|
3351
3389
|
}),
|
package/cloudflare.mjs
CHANGED
package/express.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as express_serve_static_core from 'express-serve-static-core';
|
|
2
|
-
import { R as RouteFunction, W as WorkflowServeOptions,
|
|
2
|
+
import { R as RouteFunction, W as WorkflowServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-BNusWYgt.mjs';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|
package/express.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as express_serve_static_core from 'express-serve-static-core';
|
|
2
|
-
import { R as RouteFunction, W as WorkflowServeOptions,
|
|
2
|
+
import { R as RouteFunction, W as WorkflowServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-CXqQP3RI.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|