@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/solidjs.js
CHANGED
|
@@ -90,7 +90,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
90
90
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
91
91
|
var NO_CONCURRENCY = 1;
|
|
92
92
|
var DEFAULT_RETRIES = 3;
|
|
93
|
-
var VERSION = "v0.2.
|
|
93
|
+
var VERSION = "v0.2.21";
|
|
94
94
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
95
95
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
96
96
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -141,7 +141,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
141
141
|
var formatWorkflowError = (error) => {
|
|
142
142
|
return error instanceof Error ? {
|
|
143
143
|
error: error.name,
|
|
144
|
-
message: error.message
|
|
144
|
+
message: error.message,
|
|
145
|
+
stack: error.stack
|
|
145
146
|
} : {
|
|
146
147
|
error: "Error",
|
|
147
148
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -612,7 +613,15 @@ var triggerFirstInvocation = async (params) => {
|
|
|
612
613
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
613
614
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
614
615
|
const invocationBatch = firstInvocationParams.map(
|
|
615
|
-
({
|
|
616
|
+
({
|
|
617
|
+
workflowContext,
|
|
618
|
+
useJSONContent,
|
|
619
|
+
telemetry,
|
|
620
|
+
invokeCount,
|
|
621
|
+
delay,
|
|
622
|
+
notBefore,
|
|
623
|
+
keepTriggerConfig
|
|
624
|
+
}) => {
|
|
616
625
|
const { headers } = getHeaders({
|
|
617
626
|
initHeaderValue: "true",
|
|
618
627
|
workflowConfig: {
|
|
@@ -626,7 +635,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
626
635
|
useJSONContent: useJSONContent ?? false
|
|
627
636
|
},
|
|
628
637
|
invokeCount: invokeCount ?? 0,
|
|
629
|
-
userHeaders: workflowContext.headers
|
|
638
|
+
userHeaders: workflowContext.headers,
|
|
639
|
+
keepTriggerConfig
|
|
630
640
|
});
|
|
631
641
|
if (workflowContext.headers.get("content-type")) {
|
|
632
642
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -1132,9 +1142,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1132
1142
|
retryDelay;
|
|
1133
1143
|
timeout;
|
|
1134
1144
|
flowControl;
|
|
1145
|
+
stringifyBody;
|
|
1135
1146
|
stepType = "Call";
|
|
1136
1147
|
allowUndefinedOut = false;
|
|
1137
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1148
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1138
1149
|
super(stepName);
|
|
1139
1150
|
this.url = url;
|
|
1140
1151
|
this.method = method;
|
|
@@ -1144,6 +1155,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1144
1155
|
this.retryDelay = retryDelay;
|
|
1145
1156
|
this.timeout = timeout;
|
|
1146
1157
|
this.flowControl = flowControl;
|
|
1158
|
+
this.stringifyBody = stringifyBody;
|
|
1147
1159
|
}
|
|
1148
1160
|
getPlanStep(concurrent, targetStep) {
|
|
1149
1161
|
return {
|
|
@@ -1253,10 +1265,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1253
1265
|
};
|
|
1254
1266
|
}
|
|
1255
1267
|
async submitStep({ context, headers }) {
|
|
1268
|
+
let callBody;
|
|
1269
|
+
if (this.stringifyBody) {
|
|
1270
|
+
callBody = JSON.stringify(this.body);
|
|
1271
|
+
} else {
|
|
1272
|
+
if (typeof this.body === "string") {
|
|
1273
|
+
callBody = this.body;
|
|
1274
|
+
} else {
|
|
1275
|
+
throw new WorkflowError(
|
|
1276
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1277
|
+
);
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1256
1280
|
return await context.qstashClient.batch([
|
|
1257
1281
|
{
|
|
1258
1282
|
headers,
|
|
1259
|
-
body:
|
|
1283
|
+
body: callBody,
|
|
1260
1284
|
method: this.method,
|
|
1261
1285
|
url: this.url,
|
|
1262
1286
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1391,7 +1415,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1391
1415
|
workflowRunId,
|
|
1392
1416
|
retries,
|
|
1393
1417
|
retryDelay,
|
|
1394
|
-
flowControl
|
|
1418
|
+
flowControl,
|
|
1419
|
+
stringifyBody = true
|
|
1395
1420
|
}) {
|
|
1396
1421
|
super(stepName);
|
|
1397
1422
|
this.params = {
|
|
@@ -1401,7 +1426,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1401
1426
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1402
1427
|
retries,
|
|
1403
1428
|
retryDelay,
|
|
1404
|
-
flowControl
|
|
1429
|
+
flowControl,
|
|
1430
|
+
stringifyBody
|
|
1405
1431
|
};
|
|
1406
1432
|
const { workflowId } = workflow;
|
|
1407
1433
|
if (!workflowId) {
|
|
@@ -1454,8 +1480,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1454
1480
|
invokeCount
|
|
1455
1481
|
});
|
|
1456
1482
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1483
|
+
let invokeBody;
|
|
1484
|
+
if (this.params.stringifyBody) {
|
|
1485
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1486
|
+
} else {
|
|
1487
|
+
if (typeof this.params.body === "string") {
|
|
1488
|
+
invokeBody = this.params.body;
|
|
1489
|
+
} else {
|
|
1490
|
+
throw new WorkflowError(
|
|
1491
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1492
|
+
);
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1457
1495
|
const request = {
|
|
1458
|
-
body:
|
|
1496
|
+
body: invokeBody,
|
|
1459
1497
|
headers: Object.fromEntries(
|
|
1460
1498
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1461
1499
|
),
|
|
@@ -1535,12 +1573,14 @@ var WorkflowHeaders = class {
|
|
|
1535
1573
|
initHeaderValue;
|
|
1536
1574
|
stepInfo;
|
|
1537
1575
|
headers;
|
|
1576
|
+
keepTriggerConfig;
|
|
1538
1577
|
constructor({
|
|
1539
1578
|
userHeaders,
|
|
1540
1579
|
workflowConfig,
|
|
1541
1580
|
invokeCount,
|
|
1542
1581
|
initHeaderValue,
|
|
1543
|
-
stepInfo
|
|
1582
|
+
stepInfo,
|
|
1583
|
+
keepTriggerConfig
|
|
1544
1584
|
}) {
|
|
1545
1585
|
this.userHeaders = userHeaders;
|
|
1546
1586
|
this.workflowConfig = workflowConfig;
|
|
@@ -1552,6 +1592,7 @@ var WorkflowHeaders = class {
|
|
|
1552
1592
|
workflowHeaders: {},
|
|
1553
1593
|
failureHeaders: {}
|
|
1554
1594
|
};
|
|
1595
|
+
this.keepTriggerConfig = keepTriggerConfig;
|
|
1555
1596
|
}
|
|
1556
1597
|
getHeaders() {
|
|
1557
1598
|
this.addBaseHeaders();
|
|
@@ -1570,7 +1611,7 @@ var WorkflowHeaders = class {
|
|
|
1570
1611
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1571
1612
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1572
1613
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1573
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1614
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger" + (this.keepTriggerConfig ? ",WF_TriggerOnConfig" : ""),
|
|
1574
1615
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1575
1616
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1576
1617
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -2832,7 +2873,8 @@ var WorkflowContext = class {
|
|
|
2832
2873
|
settings.retries || 0,
|
|
2833
2874
|
settings.retryDelay,
|
|
2834
2875
|
settings.timeout,
|
|
2835
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2876
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2877
|
+
settings.stringifyBody ?? true
|
|
2836
2878
|
);
|
|
2837
2879
|
} else {
|
|
2838
2880
|
const {
|
|
@@ -2843,7 +2885,8 @@ var WorkflowContext = class {
|
|
|
2843
2885
|
retries = 0,
|
|
2844
2886
|
retryDelay,
|
|
2845
2887
|
timeout,
|
|
2846
|
-
flowControl
|
|
2888
|
+
flowControl,
|
|
2889
|
+
stringifyBody = true
|
|
2847
2890
|
} = settings;
|
|
2848
2891
|
callStep = new LazyCallStep(
|
|
2849
2892
|
stepName,
|
|
@@ -2854,7 +2897,8 @@ var WorkflowContext = class {
|
|
|
2854
2897
|
retries,
|
|
2855
2898
|
retryDelay,
|
|
2856
2899
|
timeout,
|
|
2857
|
-
flowControl
|
|
2900
|
+
flowControl,
|
|
2901
|
+
stringifyBody
|
|
2858
2902
|
);
|
|
2859
2903
|
}
|
|
2860
2904
|
return await this.addStep(callStep);
|
|
@@ -3218,11 +3262,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3218
3262
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3219
3263
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3220
3264
|
let errorMessage = "";
|
|
3265
|
+
let failStack = "";
|
|
3221
3266
|
try {
|
|
3222
3267
|
const errorPayload = JSON.parse(decodedBody);
|
|
3223
3268
|
if (errorPayload.message) {
|
|
3224
3269
|
errorMessage = errorPayload.message;
|
|
3225
3270
|
}
|
|
3271
|
+
if (errorPayload.stack) {
|
|
3272
|
+
failStack = errorPayload.stack;
|
|
3273
|
+
}
|
|
3226
3274
|
} catch {
|
|
3227
3275
|
}
|
|
3228
3276
|
if (!errorMessage) {
|
|
@@ -3260,7 +3308,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3260
3308
|
context: workflowContext,
|
|
3261
3309
|
failStatus: status,
|
|
3262
3310
|
failResponse: errorMessage,
|
|
3263
|
-
failHeaders: header
|
|
3311
|
+
failHeaders: header,
|
|
3312
|
+
failStack
|
|
3264
3313
|
});
|
|
3265
3314
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3266
3315
|
} catch (error) {
|
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, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-BNusWYgt.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, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-CXqQP3RI.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|
package/svelte.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.21";
|
|
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,15 @@ 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
|
-
({
|
|
618
|
+
({
|
|
619
|
+
workflowContext,
|
|
620
|
+
useJSONContent,
|
|
621
|
+
telemetry: telemetry2,
|
|
622
|
+
invokeCount,
|
|
623
|
+
delay,
|
|
624
|
+
notBefore,
|
|
625
|
+
keepTriggerConfig
|
|
626
|
+
}) => {
|
|
618
627
|
const { headers } = getHeaders({
|
|
619
628
|
initHeaderValue: "true",
|
|
620
629
|
workflowConfig: {
|
|
@@ -628,7 +637,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
628
637
|
useJSONContent: useJSONContent ?? false
|
|
629
638
|
},
|
|
630
639
|
invokeCount: invokeCount ?? 0,
|
|
631
|
-
userHeaders: workflowContext.headers
|
|
640
|
+
userHeaders: workflowContext.headers,
|
|
641
|
+
keepTriggerConfig
|
|
632
642
|
});
|
|
633
643
|
if (workflowContext.headers.get("content-type")) {
|
|
634
644
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -1134,9 +1144,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1134
1144
|
retryDelay;
|
|
1135
1145
|
timeout;
|
|
1136
1146
|
flowControl;
|
|
1147
|
+
stringifyBody;
|
|
1137
1148
|
stepType = "Call";
|
|
1138
1149
|
allowUndefinedOut = false;
|
|
1139
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1150
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1140
1151
|
super(stepName);
|
|
1141
1152
|
this.url = url;
|
|
1142
1153
|
this.method = method;
|
|
@@ -1146,6 +1157,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1146
1157
|
this.retryDelay = retryDelay;
|
|
1147
1158
|
this.timeout = timeout;
|
|
1148
1159
|
this.flowControl = flowControl;
|
|
1160
|
+
this.stringifyBody = stringifyBody;
|
|
1149
1161
|
}
|
|
1150
1162
|
getPlanStep(concurrent, targetStep) {
|
|
1151
1163
|
return {
|
|
@@ -1255,10 +1267,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1255
1267
|
};
|
|
1256
1268
|
}
|
|
1257
1269
|
async submitStep({ context, headers }) {
|
|
1270
|
+
let callBody;
|
|
1271
|
+
if (this.stringifyBody) {
|
|
1272
|
+
callBody = JSON.stringify(this.body);
|
|
1273
|
+
} else {
|
|
1274
|
+
if (typeof this.body === "string") {
|
|
1275
|
+
callBody = this.body;
|
|
1276
|
+
} else {
|
|
1277
|
+
throw new WorkflowError(
|
|
1278
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1279
|
+
);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1258
1282
|
return await context.qstashClient.batch([
|
|
1259
1283
|
{
|
|
1260
1284
|
headers,
|
|
1261
|
-
body:
|
|
1285
|
+
body: callBody,
|
|
1262
1286
|
method: this.method,
|
|
1263
1287
|
url: this.url,
|
|
1264
1288
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1393,7 +1417,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1393
1417
|
workflowRunId,
|
|
1394
1418
|
retries,
|
|
1395
1419
|
retryDelay,
|
|
1396
|
-
flowControl
|
|
1420
|
+
flowControl,
|
|
1421
|
+
stringifyBody = true
|
|
1397
1422
|
}) {
|
|
1398
1423
|
super(stepName);
|
|
1399
1424
|
this.params = {
|
|
@@ -1403,7 +1428,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1403
1428
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1404
1429
|
retries,
|
|
1405
1430
|
retryDelay,
|
|
1406
|
-
flowControl
|
|
1431
|
+
flowControl,
|
|
1432
|
+
stringifyBody
|
|
1407
1433
|
};
|
|
1408
1434
|
const { workflowId } = workflow;
|
|
1409
1435
|
if (!workflowId) {
|
|
@@ -1456,8 +1482,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1456
1482
|
invokeCount
|
|
1457
1483
|
});
|
|
1458
1484
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1485
|
+
let invokeBody;
|
|
1486
|
+
if (this.params.stringifyBody) {
|
|
1487
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1488
|
+
} else {
|
|
1489
|
+
if (typeof this.params.body === "string") {
|
|
1490
|
+
invokeBody = this.params.body;
|
|
1491
|
+
} else {
|
|
1492
|
+
throw new WorkflowError(
|
|
1493
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1494
|
+
);
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1459
1497
|
const request = {
|
|
1460
|
-
body:
|
|
1498
|
+
body: invokeBody,
|
|
1461
1499
|
headers: Object.fromEntries(
|
|
1462
1500
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1463
1501
|
),
|
|
@@ -1537,12 +1575,14 @@ var WorkflowHeaders = class {
|
|
|
1537
1575
|
initHeaderValue;
|
|
1538
1576
|
stepInfo;
|
|
1539
1577
|
headers;
|
|
1578
|
+
keepTriggerConfig;
|
|
1540
1579
|
constructor({
|
|
1541
1580
|
userHeaders,
|
|
1542
1581
|
workflowConfig,
|
|
1543
1582
|
invokeCount,
|
|
1544
1583
|
initHeaderValue,
|
|
1545
|
-
stepInfo
|
|
1584
|
+
stepInfo,
|
|
1585
|
+
keepTriggerConfig
|
|
1546
1586
|
}) {
|
|
1547
1587
|
this.userHeaders = userHeaders;
|
|
1548
1588
|
this.workflowConfig = workflowConfig;
|
|
@@ -1554,6 +1594,7 @@ var WorkflowHeaders = class {
|
|
|
1554
1594
|
workflowHeaders: {},
|
|
1555
1595
|
failureHeaders: {}
|
|
1556
1596
|
};
|
|
1597
|
+
this.keepTriggerConfig = keepTriggerConfig;
|
|
1557
1598
|
}
|
|
1558
1599
|
getHeaders() {
|
|
1559
1600
|
this.addBaseHeaders();
|
|
@@ -1572,7 +1613,7 @@ var WorkflowHeaders = class {
|
|
|
1572
1613
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1573
1614
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1574
1615
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1575
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1616
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger" + (this.keepTriggerConfig ? ",WF_TriggerOnConfig" : ""),
|
|
1576
1617
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1577
1618
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1578
1619
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -2901,7 +2942,8 @@ var WorkflowContext = class {
|
|
|
2901
2942
|
settings.retries || 0,
|
|
2902
2943
|
settings.retryDelay,
|
|
2903
2944
|
settings.timeout,
|
|
2904
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2945
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2946
|
+
settings.stringifyBody ?? true
|
|
2905
2947
|
);
|
|
2906
2948
|
} else {
|
|
2907
2949
|
const {
|
|
@@ -2912,7 +2954,8 @@ var WorkflowContext = class {
|
|
|
2912
2954
|
retries = 0,
|
|
2913
2955
|
retryDelay,
|
|
2914
2956
|
timeout,
|
|
2915
|
-
flowControl
|
|
2957
|
+
flowControl,
|
|
2958
|
+
stringifyBody = true
|
|
2916
2959
|
} = settings;
|
|
2917
2960
|
callStep = new LazyCallStep(
|
|
2918
2961
|
stepName,
|
|
@@ -2923,7 +2966,8 @@ var WorkflowContext = class {
|
|
|
2923
2966
|
retries,
|
|
2924
2967
|
retryDelay,
|
|
2925
2968
|
timeout,
|
|
2926
|
-
flowControl
|
|
2969
|
+
flowControl,
|
|
2970
|
+
stringifyBody
|
|
2927
2971
|
);
|
|
2928
2972
|
}
|
|
2929
2973
|
return await this.addStep(callStep);
|
|
@@ -3287,11 +3331,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3287
3331
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3288
3332
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3289
3333
|
let errorMessage = "";
|
|
3334
|
+
let failStack = "";
|
|
3290
3335
|
try {
|
|
3291
3336
|
const errorPayload = JSON.parse(decodedBody);
|
|
3292
3337
|
if (errorPayload.message) {
|
|
3293
3338
|
errorMessage = errorPayload.message;
|
|
3294
3339
|
}
|
|
3340
|
+
if (errorPayload.stack) {
|
|
3341
|
+
failStack = errorPayload.stack;
|
|
3342
|
+
}
|
|
3295
3343
|
} catch {
|
|
3296
3344
|
}
|
|
3297
3345
|
if (!errorMessage) {
|
|
@@ -3329,7 +3377,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3329
3377
|
context: workflowContext,
|
|
3330
3378
|
failStatus: status,
|
|
3331
3379
|
failResponse: errorMessage,
|
|
3332
|
-
failHeaders: header
|
|
3380
|
+
failHeaders: header,
|
|
3381
|
+
failStack
|
|
3333
3382
|
});
|
|
3334
3383
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3335
3384
|
} catch (error) {
|
package/svelte.mjs
CHANGED
package/tanstack.d.mts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
import '@upstash/qstash';
|
|
4
|
+
import 'zod';
|
|
5
|
+
import 'ai';
|
|
6
|
+
import '@ai-sdk/openai';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Serve method to serve a Upstash Workflow in a TanStack Start project
|
|
10
|
+
*
|
|
11
|
+
* This wrapper allows you to access both the workflow context and TanStack route context
|
|
12
|
+
*
|
|
13
|
+
* @param routeFunction workflow function that receives both workflow context and TanStack route context
|
|
14
|
+
* @param options workflow options (same as Next.js serve options)
|
|
15
|
+
* @returns handler object with POST method compatible with TanStack Start
|
|
16
|
+
*/
|
|
17
|
+
declare function serve<TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>): {
|
|
18
|
+
POST: (tanstackContext: {
|
|
19
|
+
request: Request;
|
|
20
|
+
}) => Promise<Response>;
|
|
21
|
+
};
|
|
22
|
+
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Serve multiple workflows from a single endpoint using dynamic routing in TanStack Start
|
|
25
|
+
*
|
|
26
|
+
* @param workflows object containing workflow definitions
|
|
27
|
+
* @param options serve options
|
|
28
|
+
* @returns handler object with POST method
|
|
29
|
+
*/
|
|
30
|
+
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"], options?: Parameters<typeof serveManyBase>[0]["options"]) => {
|
|
31
|
+
POST: (tanstackContext: {
|
|
32
|
+
request: Request;
|
|
33
|
+
}) => Promise<any>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { createWorkflow, serve, serveMany };
|
package/tanstack.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
import '@upstash/qstash';
|
|
4
|
+
import 'zod';
|
|
5
|
+
import 'ai';
|
|
6
|
+
import '@ai-sdk/openai';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Serve method to serve a Upstash Workflow in a TanStack Start project
|
|
10
|
+
*
|
|
11
|
+
* This wrapper allows you to access both the workflow context and TanStack route context
|
|
12
|
+
*
|
|
13
|
+
* @param routeFunction workflow function that receives both workflow context and TanStack route context
|
|
14
|
+
* @param options workflow options (same as Next.js serve options)
|
|
15
|
+
* @returns handler object with POST method compatible with TanStack Start
|
|
16
|
+
*/
|
|
17
|
+
declare function serve<TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>): {
|
|
18
|
+
POST: (tanstackContext: {
|
|
19
|
+
request: Request;
|
|
20
|
+
}) => Promise<Response>;
|
|
21
|
+
};
|
|
22
|
+
declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Serve multiple workflows from a single endpoint using dynamic routing in TanStack Start
|
|
25
|
+
*
|
|
26
|
+
* @param workflows object containing workflow definitions
|
|
27
|
+
* @param options serve options
|
|
28
|
+
* @returns handler object with POST method
|
|
29
|
+
*/
|
|
30
|
+
declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"], options?: Parameters<typeof serveManyBase>[0]["options"]) => {
|
|
31
|
+
POST: (tanstackContext: {
|
|
32
|
+
request: Request;
|
|
33
|
+
}) => Promise<any>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { createWorkflow, serve, serveMany };
|