@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/h3.js
CHANGED
|
@@ -404,7 +404,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
404
404
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
405
405
|
var NO_CONCURRENCY = 1;
|
|
406
406
|
var DEFAULT_RETRIES = 3;
|
|
407
|
-
var VERSION = "v0.2.
|
|
407
|
+
var VERSION = "v0.2.21";
|
|
408
408
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
409
409
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
410
410
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -455,7 +455,8 @@ var WorkflowNonRetryableError = class extends WorkflowAbort {
|
|
|
455
455
|
var formatWorkflowError = (error) => {
|
|
456
456
|
return error instanceof Error ? {
|
|
457
457
|
error: error.name,
|
|
458
|
-
message: error.message
|
|
458
|
+
message: error.message,
|
|
459
|
+
stack: error.stack
|
|
459
460
|
} : {
|
|
460
461
|
error: "Error",
|
|
461
462
|
message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
|
|
@@ -926,7 +927,15 @@ var triggerFirstInvocation = async (params) => {
|
|
|
926
927
|
const firstInvocationParams = Array.isArray(params) ? params : [params];
|
|
927
928
|
const workflowContextClient = firstInvocationParams[0].workflowContext.qstashClient;
|
|
928
929
|
const invocationBatch = firstInvocationParams.map(
|
|
929
|
-
({
|
|
930
|
+
({
|
|
931
|
+
workflowContext,
|
|
932
|
+
useJSONContent,
|
|
933
|
+
telemetry: telemetry2,
|
|
934
|
+
invokeCount,
|
|
935
|
+
delay,
|
|
936
|
+
notBefore,
|
|
937
|
+
keepTriggerConfig
|
|
938
|
+
}) => {
|
|
930
939
|
const { headers } = getHeaders({
|
|
931
940
|
initHeaderValue: "true",
|
|
932
941
|
workflowConfig: {
|
|
@@ -940,7 +949,8 @@ var triggerFirstInvocation = async (params) => {
|
|
|
940
949
|
useJSONContent: useJSONContent ?? false
|
|
941
950
|
},
|
|
942
951
|
invokeCount: invokeCount ?? 0,
|
|
943
|
-
userHeaders: workflowContext.headers
|
|
952
|
+
userHeaders: workflowContext.headers,
|
|
953
|
+
keepTriggerConfig
|
|
944
954
|
});
|
|
945
955
|
if (workflowContext.headers.get("content-type")) {
|
|
946
956
|
headers["content-type"] = workflowContext.headers.get("content-type");
|
|
@@ -1446,9 +1456,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1446
1456
|
retryDelay;
|
|
1447
1457
|
timeout;
|
|
1448
1458
|
flowControl;
|
|
1459
|
+
stringifyBody;
|
|
1449
1460
|
stepType = "Call";
|
|
1450
1461
|
allowUndefinedOut = false;
|
|
1451
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1462
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1452
1463
|
super(stepName);
|
|
1453
1464
|
this.url = url;
|
|
1454
1465
|
this.method = method;
|
|
@@ -1458,6 +1469,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1458
1469
|
this.retryDelay = retryDelay;
|
|
1459
1470
|
this.timeout = timeout;
|
|
1460
1471
|
this.flowControl = flowControl;
|
|
1472
|
+
this.stringifyBody = stringifyBody;
|
|
1461
1473
|
}
|
|
1462
1474
|
getPlanStep(concurrent, targetStep) {
|
|
1463
1475
|
return {
|
|
@@ -1567,10 +1579,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1567
1579
|
};
|
|
1568
1580
|
}
|
|
1569
1581
|
async submitStep({ context, headers }) {
|
|
1582
|
+
let callBody;
|
|
1583
|
+
if (this.stringifyBody) {
|
|
1584
|
+
callBody = JSON.stringify(this.body);
|
|
1585
|
+
} else {
|
|
1586
|
+
if (typeof this.body === "string") {
|
|
1587
|
+
callBody = this.body;
|
|
1588
|
+
} else {
|
|
1589
|
+
throw new WorkflowError(
|
|
1590
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1591
|
+
);
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1570
1594
|
return await context.qstashClient.batch([
|
|
1571
1595
|
{
|
|
1572
1596
|
headers,
|
|
1573
|
-
body:
|
|
1597
|
+
body: callBody,
|
|
1574
1598
|
method: this.method,
|
|
1575
1599
|
url: this.url,
|
|
1576
1600
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1705,7 +1729,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1705
1729
|
workflowRunId,
|
|
1706
1730
|
retries,
|
|
1707
1731
|
retryDelay,
|
|
1708
|
-
flowControl
|
|
1732
|
+
flowControl,
|
|
1733
|
+
stringifyBody = true
|
|
1709
1734
|
}) {
|
|
1710
1735
|
super(stepName);
|
|
1711
1736
|
this.params = {
|
|
@@ -1715,7 +1740,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1715
1740
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1716
1741
|
retries,
|
|
1717
1742
|
retryDelay,
|
|
1718
|
-
flowControl
|
|
1743
|
+
flowControl,
|
|
1744
|
+
stringifyBody
|
|
1719
1745
|
};
|
|
1720
1746
|
const { workflowId } = workflow;
|
|
1721
1747
|
if (!workflowId) {
|
|
@@ -1768,8 +1794,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1768
1794
|
invokeCount
|
|
1769
1795
|
});
|
|
1770
1796
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1797
|
+
let invokeBody;
|
|
1798
|
+
if (this.params.stringifyBody) {
|
|
1799
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1800
|
+
} else {
|
|
1801
|
+
if (typeof this.params.body === "string") {
|
|
1802
|
+
invokeBody = this.params.body;
|
|
1803
|
+
} else {
|
|
1804
|
+
throw new WorkflowError(
|
|
1805
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1806
|
+
);
|
|
1807
|
+
}
|
|
1808
|
+
}
|
|
1771
1809
|
const request = {
|
|
1772
|
-
body:
|
|
1810
|
+
body: invokeBody,
|
|
1773
1811
|
headers: Object.fromEntries(
|
|
1774
1812
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1775
1813
|
),
|
|
@@ -1849,12 +1887,14 @@ var WorkflowHeaders = class {
|
|
|
1849
1887
|
initHeaderValue;
|
|
1850
1888
|
stepInfo;
|
|
1851
1889
|
headers;
|
|
1890
|
+
keepTriggerConfig;
|
|
1852
1891
|
constructor({
|
|
1853
1892
|
userHeaders,
|
|
1854
1893
|
workflowConfig,
|
|
1855
1894
|
invokeCount,
|
|
1856
1895
|
initHeaderValue,
|
|
1857
|
-
stepInfo
|
|
1896
|
+
stepInfo,
|
|
1897
|
+
keepTriggerConfig
|
|
1858
1898
|
}) {
|
|
1859
1899
|
this.userHeaders = userHeaders;
|
|
1860
1900
|
this.workflowConfig = workflowConfig;
|
|
@@ -1866,6 +1906,7 @@ var WorkflowHeaders = class {
|
|
|
1866
1906
|
workflowHeaders: {},
|
|
1867
1907
|
failureHeaders: {}
|
|
1868
1908
|
};
|
|
1909
|
+
this.keepTriggerConfig = keepTriggerConfig;
|
|
1869
1910
|
}
|
|
1870
1911
|
getHeaders() {
|
|
1871
1912
|
this.addBaseHeaders();
|
|
@@ -1884,7 +1925,7 @@ var WorkflowHeaders = class {
|
|
|
1884
1925
|
[WORKFLOW_INIT_HEADER]: this.initHeaderValue,
|
|
1885
1926
|
[WORKFLOW_ID_HEADER]: this.workflowConfig.workflowRunId,
|
|
1886
1927
|
[WORKFLOW_URL_HEADER]: this.workflowConfig.workflowUrl,
|
|
1887
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger",
|
|
1928
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody,WF_DetectTrigger" + (this.keepTriggerConfig ? ",WF_TriggerOnConfig" : ""),
|
|
1888
1929
|
[WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
|
|
1889
1930
|
...this.workflowConfig.telemetry ? getTelemetryHeaders(this.workflowConfig.telemetry) : {},
|
|
1890
1931
|
...this.workflowConfig.telemetry && this.stepInfo?.lazyStep instanceof LazyCallStep && this.stepInfo.lazyStep.headers[AGENT_NAME_HEADER] ? { [TELEMETRY_HEADER_AGENT]: "true" } : {}
|
|
@@ -3213,7 +3254,8 @@ var WorkflowContext = class {
|
|
|
3213
3254
|
settings.retries || 0,
|
|
3214
3255
|
settings.retryDelay,
|
|
3215
3256
|
settings.timeout,
|
|
3216
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
3257
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
3258
|
+
settings.stringifyBody ?? true
|
|
3217
3259
|
);
|
|
3218
3260
|
} else {
|
|
3219
3261
|
const {
|
|
@@ -3224,7 +3266,8 @@ var WorkflowContext = class {
|
|
|
3224
3266
|
retries = 0,
|
|
3225
3267
|
retryDelay,
|
|
3226
3268
|
timeout,
|
|
3227
|
-
flowControl
|
|
3269
|
+
flowControl,
|
|
3270
|
+
stringifyBody = true
|
|
3228
3271
|
} = settings;
|
|
3229
3272
|
callStep = new LazyCallStep(
|
|
3230
3273
|
stepName,
|
|
@@ -3235,7 +3278,8 @@ var WorkflowContext = class {
|
|
|
3235
3278
|
retries,
|
|
3236
3279
|
retryDelay,
|
|
3237
3280
|
timeout,
|
|
3238
|
-
flowControl
|
|
3281
|
+
flowControl,
|
|
3282
|
+
stringifyBody
|
|
3239
3283
|
);
|
|
3240
3284
|
}
|
|
3241
3285
|
return await this.addStep(callStep);
|
|
@@ -3599,11 +3643,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3599
3643
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3600
3644
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3601
3645
|
let errorMessage = "";
|
|
3646
|
+
let failStack = "";
|
|
3602
3647
|
try {
|
|
3603
3648
|
const errorPayload = JSON.parse(decodedBody);
|
|
3604
3649
|
if (errorPayload.message) {
|
|
3605
3650
|
errorMessage = errorPayload.message;
|
|
3606
3651
|
}
|
|
3652
|
+
if (errorPayload.stack) {
|
|
3653
|
+
failStack = errorPayload.stack;
|
|
3654
|
+
}
|
|
3607
3655
|
} catch {
|
|
3608
3656
|
}
|
|
3609
3657
|
if (!errorMessage) {
|
|
@@ -3641,7 +3689,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3641
3689
|
context: workflowContext,
|
|
3642
3690
|
failStatus: status,
|
|
3643
3691
|
failResponse: errorMessage,
|
|
3644
|
-
failHeaders: header
|
|
3692
|
+
failHeaders: header,
|
|
3693
|
+
failStack
|
|
3645
3694
|
});
|
|
3646
3695
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3647
3696
|
} catch (error) {
|
package/h3.mjs
CHANGED
package/hono.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
2
|
+
import { R as RouteFunction, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.mjs';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
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/hono.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions,
|
|
2
|
+
import { R as RouteFunction, n as PublicServeOptions, y as InvokableWorkflow } from './types-Q3dM0UlR.js';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
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';
|
package/hono.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/hono.mjs
CHANGED
package/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, S as StepType, a as RawStep, N as NotifyResponse, b as Waiter } from './types-
|
|
2
|
-
export { A as AsyncStepFunction, C as CallResponse,
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, S as StepType, a as RawStep, N as NotifyResponse, b as Waiter } from './types-Q3dM0UlR.mjs';
|
|
2
|
+
export { A as AsyncStepFunction, C as CallResponse, w as CallSettings, D as DetailedFinishCondition, t as Duration, o as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, y as InvokableWorkflow, x as InvokeStepResponse, I as InvokeWorkflowRequest, L as LazyInvokeStepParams, z as LogLevel, s as NotifyStepResponse, P as ParallelCallState, n as PublicServeOptions, p as RequiredExceptFields, k as Step, m as StepFunction, j as StepTypes, v as StringifyBody, l as SyncStepFunction, u as WaitEventOptions, q as WaitRequest, r as WaitStepResponse, d as WorkflowAbort, h as WorkflowClient, g as WorkflowContext, c as WorkflowError, G as WorkflowLogger, B as WorkflowLoggerOptions, e as WorkflowNonRetryableError, i as WorkflowReceiver, f as WorkflowTool } from './types-Q3dM0UlR.mjs';
|
|
3
3
|
import { FlowControl, PublishRequest, HTTPMethods, State, Client as Client$1 } from '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
|
@@ -432,6 +432,13 @@ type TriggerOptions = {
|
|
|
432
432
|
* Can be used to filter the workflow run logs.
|
|
433
433
|
*/
|
|
434
434
|
label?: string;
|
|
435
|
+
/**
|
|
436
|
+
* Whether to apply the configuration (flow control,
|
|
437
|
+
* retries, failure url, retry delay) passed in trigger
|
|
438
|
+
*
|
|
439
|
+
* @default false
|
|
440
|
+
*/
|
|
441
|
+
keepTriggerConfig?: boolean;
|
|
435
442
|
} & ({
|
|
436
443
|
/**
|
|
437
444
|
* URL to call if the first request to the workflow endpoint fails
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, S as StepType, a as RawStep, N as NotifyResponse, b as Waiter } from './types-
|
|
2
|
-
export { A as AsyncStepFunction, C as CallResponse,
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, S as StepType, a as RawStep, N as NotifyResponse, b as Waiter } from './types-Q3dM0UlR.js';
|
|
2
|
+
export { A as AsyncStepFunction, C as CallResponse, w as CallSettings, D as DetailedFinishCondition, t as Duration, o as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, y as InvokableWorkflow, x as InvokeStepResponse, I as InvokeWorkflowRequest, L as LazyInvokeStepParams, z as LogLevel, s as NotifyStepResponse, P as ParallelCallState, n as PublicServeOptions, p as RequiredExceptFields, k as Step, m as StepFunction, j as StepTypes, v as StringifyBody, l as SyncStepFunction, u as WaitEventOptions, q as WaitRequest, r as WaitStepResponse, d as WorkflowAbort, h as WorkflowClient, g as WorkflowContext, c as WorkflowError, G as WorkflowLogger, B as WorkflowLoggerOptions, e as WorkflowNonRetryableError, i as WorkflowReceiver, f as WorkflowTool } from './types-Q3dM0UlR.js';
|
|
3
3
|
import { FlowControl, PublishRequest, HTTPMethods, State, Client as Client$1 } from '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
|
@@ -432,6 +432,13 @@ type TriggerOptions = {
|
|
|
432
432
|
* Can be used to filter the workflow run logs.
|
|
433
433
|
*/
|
|
434
434
|
label?: string;
|
|
435
|
+
/**
|
|
436
|
+
* Whether to apply the configuration (flow control,
|
|
437
|
+
* retries, failure url, retry delay) passed in trigger
|
|
438
|
+
*
|
|
439
|
+
* @default false
|
|
440
|
+
*/
|
|
441
|
+
keepTriggerConfig?: boolean;
|
|
435
442
|
} & ({
|
|
436
443
|
/**
|
|
437
444
|
* URL to call if the first request to the workflow endpoint fails
|