@upstash/workflow 0.2.19 → 0.2.21
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 +65 -16
- package/astro.mjs +2 -2
- package/{chunk-37XOXDLZ.mjs → chunk-NQDNC5P4.mjs} +64 -15
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +64 -15
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +64 -15
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +64 -15
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +64 -15
- package/hono.mjs +1 -1
- package/index.d.mts +9 -2
- package/index.d.ts +9 -2
- package/index.js +66 -16
- package/index.mjs +3 -2
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +64 -15
- 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 +64 -15
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +64 -15
- package/svelte.mjs +1 -1
- package/tanstack.d.mts +36 -0
- package/tanstack.d.ts +36 -0
- package/tanstack.js +3737 -0
- package/tanstack.mjs +48 -0
- 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/index.js
CHANGED
|
@@ -105,7 +105,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
105
105
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
106
106
|
var NO_CONCURRENCY = 1;
|
|
107
107
|
var DEFAULT_RETRIES = 3;
|
|
108
|
-
var VERSION = "v0.2.
|
|
108
|
+
var VERSION = "v0.2.21";
|
|
109
109
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
110
110
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
111
111
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -156,7 +156,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
156
156
|
var formatWorkflowError = (error) => {
|
|
157
157
|
return error instanceof Error ? {
|
|
158
158
|
error: error.name,
|
|
159
|
-
message: error.message
|
|
159
|
+
message: error.message,
|
|
160
|
+
stack: error.stack
|
|
160
161
|
} : {
|
|
161
162
|
error: "Error",
|
|
162
163
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -627,7 +628,15 @@ var triggerFirstInvocation = async (params) => {
|
|
|
627
628
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
628
629
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
629
630
|
const invocationBatch = firstInvocationParams.map(
|
|
630
|
-
({
|
|
631
|
+
({
|
|
632
|
+
workflowContext,
|
|
633
|
+
useJSONContent,
|
|
634
|
+
telemetry,
|
|
635
|
+
invokeCount,
|
|
636
|
+
delay,
|
|
637
|
+
notBefore,
|
|
638
|
+
keepTriggerConfig
|
|
639
|
+
}) => {
|
|
631
640
|
const { headers } = getHeaders({
|
|
632
641
|
initHeaderValue: "true",
|
|
633
642
|
workflowConfig: {
|
|
@@ -641,7 +650,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
641
650
|
useJSONContent: useJSONContent ?? false
|
|
642
651
|
},
|
|
643
652
|
invokeCount: invokeCount ?? 0,
|
|
644
|
-
userHeaders: workflowContext.headers
|
|
653
|
+
userHeaders: workflowContext.headers,
|
|
654
|
+
keepTriggerConfig
|
|
645
655
|
});
|
|
646
656
|
if (workflowContext.headers.get("content-type")) {
|
|
647
657
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -1147,9 +1157,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1147
1157
|
retryDelay;
|
|
1148
1158
|
timeout;
|
|
1149
1159
|
flowControl;
|
|
1160
|
+
stringifyBody;
|
|
1150
1161
|
stepType = "Call";
|
|
1151
1162
|
allowUndefinedOut = false;
|
|
1152
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1163
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1153
1164
|
super(stepName);
|
|
1154
1165
|
this.url = url;
|
|
1155
1166
|
this.method = method;
|
|
@@ -1159,6 +1170,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1159
1170
|
this.retryDelay = retryDelay;
|
|
1160
1171
|
this.timeout = timeout;
|
|
1161
1172
|
this.flowControl = flowControl;
|
|
1173
|
+
this.stringifyBody = stringifyBody;
|
|
1162
1174
|
}
|
|
1163
1175
|
getPlanStep(concurrent, targetStep) {
|
|
1164
1176
|
return {
|
|
@@ -1268,10 +1280,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1268
1280
|
};
|
|
1269
1281
|
}
|
|
1270
1282
|
async submitStep({ context, headers }) {
|
|
1283
|
+
let callBody;
|
|
1284
|
+
if (this.stringifyBody) {
|
|
1285
|
+
callBody = JSON.stringify(this.body);
|
|
1286
|
+
} else {
|
|
1287
|
+
if (typeof this.body === "string") {
|
|
1288
|
+
callBody = this.body;
|
|
1289
|
+
} else {
|
|
1290
|
+
throw new WorkflowError(
|
|
1291
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1292
|
+
);
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1271
1295
|
return await context.qstashClient.batch([
|
|
1272
1296
|
{
|
|
1273
1297
|
headers,
|
|
1274
|
-
body:
|
|
1298
|
+
body: callBody,
|
|
1275
1299
|
method: this.method,
|
|
1276
1300
|
url: this.url,
|
|
1277
1301
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1406,7 +1430,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1406
1430
|
workflowRunId,
|
|
1407
1431
|
retries,
|
|
1408
1432
|
retryDelay,
|
|
1409
|
-
flowControl
|
|
1433
|
+
flowControl,
|
|
1434
|
+
stringifyBody = true
|
|
1410
1435
|
}) {
|
|
1411
1436
|
super(stepName);
|
|
1412
1437
|
this.params = {
|
|
@@ -1416,7 +1441,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1416
1441
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1417
1442
|
retries,
|
|
1418
1443
|
retryDelay,
|
|
1419
|
-
flowControl
|
|
1444
|
+
flowControl,
|
|
1445
|
+
stringifyBody
|
|
1420
1446
|
};
|
|
1421
1447
|
const { workflowId } = workflow;
|
|
1422
1448
|
if (!workflowId) {
|
|
@@ -1469,8 +1495,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1469
1495
|
invokeCount
|
|
1470
1496
|
});
|
|
1471
1497
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1498
|
+
let invokeBody;
|
|
1499
|
+
if (this.params.stringifyBody) {
|
|
1500
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1501
|
+
} else {
|
|
1502
|
+
if (typeof this.params.body === "string") {
|
|
1503
|
+
invokeBody = this.params.body;
|
|
1504
|
+
} else {
|
|
1505
|
+
throw new WorkflowError(
|
|
1506
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1507
|
+
);
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1472
1510
|
const request = {
|
|
1473
|
-
body:
|
|
1511
|
+
body: invokeBody,
|
|
1474
1512
|
headers: Object.fromEntries(
|
|
1475
1513
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1476
1514
|
),
|
|
@@ -1550,12 +1588,14 @@ var WorkflowHeaders = class {
|
|
|
1550
1588
|
initHeaderValue;
|
|
1551
1589
|
stepInfo;
|
|
1552
1590
|
headers;
|
|
1591
|
+
keepTriggerConfig;
|
|
1553
1592
|
constructor({
|
|
1554
1593
|
userHeaders,
|
|
1555
1594
|
workflowConfig,
|
|
1556
1595
|
invokeCount,
|
|
1557
1596
|
initHeaderValue,
|
|
1558
|
-
stepInfo
|
|
1597
|
+
stepInfo,
|
|
1598
|
+
keepTriggerConfig
|
|
1559
1599
|
}) {
|
|
1560
1600
|
this.userHeaders = userHeaders;
|
|
1561
1601
|
this.workflowConfig = workflowConfig;
|
|
@@ -1567,6 +1607,7 @@ var WorkflowHeaders = class {
|
|
|
1567
1607
|
workflowHeaders: {},
|
|
1568
1608
|
failureHeaders: {}
|
|
1569
1609
|
};
|
|
1610
|
+
this.keepTriggerConfig = keepTriggerConfig;
|
|
1570
1611
|
}
|
|
1571
1612
|
getHeaders() {
|
|
1572
1613
|
this.addBaseHeaders();
|
|
@@ -1585,7 +1626,7 @@ var WorkflowHeaders = class {
|
|
|
1585
1626
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1586
1627
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1587
1628
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1588
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1629
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger" + (this.keepTriggerConfig ? ",WF_TriggerOnConfig" : ""),
|
|
1589
1630
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1590
1631
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1591
1632
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -2878,7 +2919,8 @@ var WorkflowContext = class {
|
|
|
2878
2919
|
settings.retries || 0,
|
|
2879
2920
|
settings.retryDelay,
|
|
2880
2921
|
settings.timeout,
|
|
2881
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2922
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2923
|
+
settings.stringifyBody ?? true
|
|
2882
2924
|
);
|
|
2883
2925
|
} else {
|
|
2884
2926
|
const {
|
|
@@ -2889,7 +2931,8 @@ var WorkflowContext = class {
|
|
|
2889
2931
|
retries = 0,
|
|
2890
2932
|
retryDelay,
|
|
2891
2933
|
timeout,
|
|
2892
|
-
flowControl
|
|
2934
|
+
flowControl,
|
|
2935
|
+
stringifyBody = true
|
|
2893
2936
|
} = settings;
|
|
2894
2937
|
callStep = new LazyCallStep(
|
|
2895
2938
|
stepName,
|
|
@@ -2900,7 +2943,8 @@ var WorkflowContext = class {
|
|
|
2900
2943
|
retries,
|
|
2901
2944
|
retryDelay,
|
|
2902
2945
|
timeout,
|
|
2903
|
-
flowControl
|
|
2946
|
+
flowControl,
|
|
2947
|
+
stringifyBody
|
|
2904
2948
|
);
|
|
2905
2949
|
}
|
|
2906
2950
|
return await this.addStep(callStep);
|
|
@@ -3264,11 +3308,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3264
3308
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3265
3309
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3266
3310
|
let errorMessage = "";
|
|
3311
|
+
let failStack = "";
|
|
3267
3312
|
try {
|
|
3268
3313
|
const errorPayload = JSON.parse(decodedBody);
|
|
3269
3314
|
if (errorPayload.message) {
|
|
3270
3315
|
errorMessage = errorPayload.message;
|
|
3271
3316
|
}
|
|
3317
|
+
if (errorPayload.stack) {
|
|
3318
|
+
failStack = errorPayload.stack;
|
|
3319
|
+
}
|
|
3272
3320
|
} catch {
|
|
3273
3321
|
}
|
|
3274
3322
|
if (!errorMessage) {
|
|
@@ -3306,7 +3354,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3306
3354
|
context: workflowContext,
|
|
3307
3355
|
failStatus: status,
|
|
3308
3356
|
failResponse: errorMessage,
|
|
3309
|
-
failHeaders: header
|
|
3357
|
+
failHeaders: header,
|
|
3358
|
+
failStack
|
|
3310
3359
|
});
|
|
3311
3360
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3312
3361
|
} catch (error) {
|
|
@@ -3880,7 +3929,8 @@ var Client4 = class {
|
|
|
3880
3929
|
workflowContext: context,
|
|
3881
3930
|
telemetry: { sdk: SDK_TELEMETRY },
|
|
3882
3931
|
delay: option.delay,
|
|
3883
|
-
notBefore: option.notBefore
|
|
3932
|
+
notBefore: option.notBefore,
|
|
3933
|
+
keepTriggerConfig: option.keepTriggerConfig
|
|
3884
3934
|
};
|
|
3885
3935
|
});
|
|
3886
3936
|
const result = await triggerFirstInvocation(invocations);
|
package/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
prepareFlowControl,
|
|
15
15
|
serve,
|
|
16
16
|
triggerFirstInvocation
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-NQDNC5P4.mjs";
|
|
18
18
|
|
|
19
19
|
// src/client/index.ts
|
|
20
20
|
import { Client as QStashClient } from "@upstash/qstash";
|
|
@@ -266,7 +266,8 @@ var Client = class {
|
|
|
266
266
|
workflowContext: context,
|
|
267
267
|
telemetry: { sdk: SDK_TELEMETRY },
|
|
268
268
|
delay: option.delay,
|
|
269
|
-
notBefore: option.notBefore
|
|
269
|
+
notBefore: option.notBefore,
|
|
270
|
+
keepTriggerConfig: option.keepTriggerConfig
|
|
270
271
|
};
|
|
271
272
|
});
|
|
272
273
|
const result = await triggerFirstInvocation(invocations);
|
package/nextjs.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { R as RouteFunction, 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/nextjs.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { R as RouteFunction, 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/nextjs.js
CHANGED
|
@@ -95,7 +95,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
95
95
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
96
96
|
var NO_CONCURRENCY = 1;
|
|
97
97
|
var DEFAULT_RETRIES = 3;
|
|
98
|
-
var VERSION = "v0.2.
|
|
98
|
+
var VERSION = "v0.2.21";
|
|
99
99
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
100
100
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
101
101
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -146,7 +146,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
146
146
|
var formatWorkflowError = (error) => {
|
|
147
147
|
return error instanceof Error ? {
|
|
148
148
|
error: error.name,
|
|
149
|
-
message: error.message
|
|
149
|
+
message: error.message,
|
|
150
|
+
stack: error.stack
|
|
150
151
|
} : {
|
|
151
152
|
error: "Error",
|
|
152
153
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -617,7 +618,15 @@ var triggerFirstInvocation = async (params) => {
|
|
|
617
618
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
618
619
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
619
620
|
const invocationBatch = firstInvocationParams.map(
|
|
620
|
-
({
|
|
621
|
+
({
|
|
622
|
+
workflowContext,
|
|
623
|
+
useJSONContent,
|
|
624
|
+
telemetry,
|
|
625
|
+
invokeCount,
|
|
626
|
+
delay,
|
|
627
|
+
notBefore,
|
|
628
|
+
keepTriggerConfig
|
|
629
|
+
}) => {
|
|
621
630
|
const { headers } = getHeaders({
|
|
622
631
|
initHeaderValue: "true",
|
|
623
632
|
workflowConfig: {
|
|
@@ -631,7 +640,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
631
640
|
useJSONContent: useJSONContent ?? false
|
|
632
641
|
},
|
|
633
642
|
invokeCount: invokeCount ?? 0,
|
|
634
|
-
userHeaders: workflowContext.headers
|
|
643
|
+
userHeaders: workflowContext.headers,
|
|
644
|
+
keepTriggerConfig
|
|
635
645
|
});
|
|
636
646
|
if (workflowContext.headers.get("content-type")) {
|
|
637
647
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -1137,9 +1147,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1137
1147
|
retryDelay;
|
|
1138
1148
|
timeout;
|
|
1139
1149
|
flowControl;
|
|
1150
|
+
stringifyBody;
|
|
1140
1151
|
stepType = "Call";
|
|
1141
1152
|
allowUndefinedOut = false;
|
|
1142
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1153
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1143
1154
|
super(stepName);
|
|
1144
1155
|
this.url = url;
|
|
1145
1156
|
this.method = method;
|
|
@@ -1149,6 +1160,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1149
1160
|
this.retryDelay = retryDelay;
|
|
1150
1161
|
this.timeout = timeout;
|
|
1151
1162
|
this.flowControl = flowControl;
|
|
1163
|
+
this.stringifyBody = stringifyBody;
|
|
1152
1164
|
}
|
|
1153
1165
|
getPlanStep(concurrent, targetStep) {
|
|
1154
1166
|
return {
|
|
@@ -1258,10 +1270,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1258
1270
|
};
|
|
1259
1271
|
}
|
|
1260
1272
|
async submitStep({ context, headers }) {
|
|
1273
|
+
let callBody;
|
|
1274
|
+
if (this.stringifyBody) {
|
|
1275
|
+
callBody = JSON.stringify(this.body);
|
|
1276
|
+
} else {
|
|
1277
|
+
if (typeof this.body === "string") {
|
|
1278
|
+
callBody = this.body;
|
|
1279
|
+
} else {
|
|
1280
|
+
throw new WorkflowError(
|
|
1281
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1282
|
+
);
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1261
1285
|
return await context.qstashClient.batch([
|
|
1262
1286
|
{
|
|
1263
1287
|
headers,
|
|
1264
|
-
body:
|
|
1288
|
+
body: callBody,
|
|
1265
1289
|
method: this.method,
|
|
1266
1290
|
url: this.url,
|
|
1267
1291
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1396,7 +1420,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1396
1420
|
workflowRunId,
|
|
1397
1421
|
retries,
|
|
1398
1422
|
retryDelay,
|
|
1399
|
-
flowControl
|
|
1423
|
+
flowControl,
|
|
1424
|
+
stringifyBody = true
|
|
1400
1425
|
}) {
|
|
1401
1426
|
super(stepName);
|
|
1402
1427
|
this.params = {
|
|
@@ -1406,7 +1431,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1406
1431
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1407
1432
|
retries,
|
|
1408
1433
|
retryDelay,
|
|
1409
|
-
flowControl
|
|
1434
|
+
flowControl,
|
|
1435
|
+
stringifyBody
|
|
1410
1436
|
};
|
|
1411
1437
|
const { workflowId } = workflow;
|
|
1412
1438
|
if (!workflowId) {
|
|
@@ -1459,8 +1485,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1459
1485
|
invokeCount
|
|
1460
1486
|
});
|
|
1461
1487
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1488
|
+
let invokeBody;
|
|
1489
|
+
if (this.params.stringifyBody) {
|
|
1490
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1491
|
+
} else {
|
|
1492
|
+
if (typeof this.params.body === "string") {
|
|
1493
|
+
invokeBody = this.params.body;
|
|
1494
|
+
} else {
|
|
1495
|
+
throw new WorkflowError(
|
|
1496
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1497
|
+
);
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1462
1500
|
const request = {
|
|
1463
|
-
body:
|
|
1501
|
+
body: invokeBody,
|
|
1464
1502
|
headers: Object.fromEntries(
|
|
1465
1503
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1466
1504
|
),
|
|
@@ -1540,12 +1578,14 @@ var WorkflowHeaders = class {
|
|
|
1540
1578
|
initHeaderValue;
|
|
1541
1579
|
stepInfo;
|
|
1542
1580
|
headers;
|
|
1581
|
+
keepTriggerConfig;
|
|
1543
1582
|
constructor({
|
|
1544
1583
|
userHeaders,
|
|
1545
1584
|
workflowConfig,
|
|
1546
1585
|
invokeCount,
|
|
1547
1586
|
initHeaderValue,
|
|
1548
|
-
stepInfo
|
|
1587
|
+
stepInfo,
|
|
1588
|
+
keepTriggerConfig
|
|
1549
1589
|
}) {
|
|
1550
1590
|
this.userHeaders = userHeaders;
|
|
1551
1591
|
this.workflowConfig = workflowConfig;
|
|
@@ -1557,6 +1597,7 @@ var WorkflowHeaders = class {
|
|
|
1557
1597
|
workflowHeaders: {},
|
|
1558
1598
|
failureHeaders: {}
|
|
1559
1599
|
};
|
|
1600
|
+
this.keepTriggerConfig = keepTriggerConfig;
|
|
1560
1601
|
}
|
|
1561
1602
|
getHeaders() {
|
|
1562
1603
|
this.addBaseHeaders();
|
|
@@ -1575,7 +1616,7 @@ var WorkflowHeaders = class {
|
|
|
1575
1616
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1576
1617
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1577
1618
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1578
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1619
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger" + (this.keepTriggerConfig ? ",WF_TriggerOnConfig" : ""),
|
|
1579
1620
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1580
1621
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1581
1622
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -2904,7 +2945,8 @@ var WorkflowContext = class {
|
|
|
2904
2945
|
settings.retries || 0,
|
|
2905
2946
|
settings.retryDelay,
|
|
2906
2947
|
settings.timeout,
|
|
2907
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2948
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2949
|
+
settings.stringifyBody ?? true
|
|
2908
2950
|
);
|
|
2909
2951
|
} else {
|
|
2910
2952
|
const {
|
|
@@ -2915,7 +2957,8 @@ var WorkflowContext = class {
|
|
|
2915
2957
|
retries = 0,
|
|
2916
2958
|
retryDelay,
|
|
2917
2959
|
timeout,
|
|
2918
|
-
flowControl
|
|
2960
|
+
flowControl,
|
|
2961
|
+
stringifyBody = true
|
|
2919
2962
|
} = settings;
|
|
2920
2963
|
callStep = new LazyCallStep(
|
|
2921
2964
|
stepName,
|
|
@@ -2926,7 +2969,8 @@ var WorkflowContext = class {
|
|
|
2926
2969
|
retries,
|
|
2927
2970
|
retryDelay,
|
|
2928
2971
|
timeout,
|
|
2929
|
-
flowControl
|
|
2972
|
+
flowControl,
|
|
2973
|
+
stringifyBody
|
|
2930
2974
|
);
|
|
2931
2975
|
}
|
|
2932
2976
|
return await this.addStep(callStep);
|
|
@@ -3290,11 +3334,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3290
3334
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3291
3335
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3292
3336
|
let errorMessage = "";
|
|
3337
|
+
let failStack = "";
|
|
3293
3338
|
try {
|
|
3294
3339
|
const errorPayload = JSON.parse(decodedBody);
|
|
3295
3340
|
if (errorPayload.message) {
|
|
3296
3341
|
errorMessage = errorPayload.message;
|
|
3297
3342
|
}
|
|
3343
|
+
if (errorPayload.stack) {
|
|
3344
|
+
failStack = errorPayload.stack;
|
|
3345
|
+
}
|
|
3298
3346
|
} catch {
|
|
3299
3347
|
}
|
|
3300
3348
|
if (!errorMessage) {
|
|
@@ -3332,7 +3380,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3332
3380
|
context: workflowContext,
|
|
3333
3381
|
failStatus: status,
|
|
3334
3382
|
failResponse: errorMessage,
|
|
3335
|
-
failHeaders: header
|
|
3383
|
+
failHeaders: header,
|
|
3384
|
+
failStack
|
|
3336
3385
|
});
|
|
3337
3386
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3338
3387
|
} catch (error) {
|
package/nextjs.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@upstash/workflow","version":"v0.2.
|
|
1
|
+
{"name":"@upstash/workflow","version":"v0.2.21","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"},"./tanstack":{"import":"./tanstack.mjs","require":"./tanstack.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git+https://github.com/upstash/workflow-ts.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@ai-sdk/anthropic":"^1.1.15","@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@tanstack/react-start":"^1.132.48","@types/bun":"^1.1.10","@types/express":"^5.0.3","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^5.1.0","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.20","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@ai-sdk/openai":"^1.2.1","@upstash/qstash":"^2.8.2","ai":"^4.1.54","zod":"^3.24.1"},"directories":{"example":"examples"}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PublicServeOptions, R as RouteFunction,
|
|
1
|
+
import { n as PublicServeOptions, R as RouteFunction, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
2
2
|
|
|
3
3
|
type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
|
|
4
4
|
declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PublicServeOptions, R as RouteFunction,
|
|
1
|
+
import { n as PublicServeOptions, R as RouteFunction, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
2
2
|
|
|
3
3
|
type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
|
|
4
4
|
declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
|
package/solidjs.d.mts
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-Q3dM0UlR.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
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-Q3dM0UlR.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|