@upstash/workflow 0.2.19 → 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 +48 -11
- package/astro.mjs +1 -1
- package/{chunk-37XOXDLZ.mjs → chunk-LZGX3WMF.mjs} +48 -11
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +48 -11
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +48 -11
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +48 -11
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +48 -11
- package/hono.mjs +1 -1
- package/index.d.mts +2 -2
- package/index.d.ts +2 -2
- package/index.js +48 -11
- package/index.mjs +1 -1
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +48 -11
- 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 +48 -11
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +48 -11
- 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/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.20";
|
|
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)}'`
|
|
@@ -1147,9 +1148,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1147
1148
|
retryDelay;
|
|
1148
1149
|
timeout;
|
|
1149
1150
|
flowControl;
|
|
1151
|
+
stringifyBody;
|
|
1150
1152
|
stepType = "Call";
|
|
1151
1153
|
allowUndefinedOut = false;
|
|
1152
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1154
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1153
1155
|
super(stepName);
|
|
1154
1156
|
this.url = url;
|
|
1155
1157
|
this.method = method;
|
|
@@ -1159,6 +1161,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1159
1161
|
this.retryDelay = retryDelay;
|
|
1160
1162
|
this.timeout = timeout;
|
|
1161
1163
|
this.flowControl = flowControl;
|
|
1164
|
+
this.stringifyBody = stringifyBody;
|
|
1162
1165
|
}
|
|
1163
1166
|
getPlanStep(concurrent, targetStep) {
|
|
1164
1167
|
return {
|
|
@@ -1268,10 +1271,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1268
1271
|
};
|
|
1269
1272
|
}
|
|
1270
1273
|
async submitStep({ context, headers }) {
|
|
1274
|
+
let callBody;
|
|
1275
|
+
if (this.stringifyBody) {
|
|
1276
|
+
callBody = JSON.stringify(this.body);
|
|
1277
|
+
} else {
|
|
1278
|
+
if (typeof this.body === "string") {
|
|
1279
|
+
callBody = this.body;
|
|
1280
|
+
} else {
|
|
1281
|
+
throw new WorkflowError(
|
|
1282
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1283
|
+
);
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1271
1286
|
return await context.qstashClient.batch([
|
|
1272
1287
|
{
|
|
1273
1288
|
headers,
|
|
1274
|
-
body:
|
|
1289
|
+
body: callBody,
|
|
1275
1290
|
method: this.method,
|
|
1276
1291
|
url: this.url,
|
|
1277
1292
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1406,7 +1421,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1406
1421
|
workflowRunId,
|
|
1407
1422
|
retries,
|
|
1408
1423
|
retryDelay,
|
|
1409
|
-
flowControl
|
|
1424
|
+
flowControl,
|
|
1425
|
+
stringifyBody = true
|
|
1410
1426
|
}) {
|
|
1411
1427
|
super(stepName);
|
|
1412
1428
|
this.params = {
|
|
@@ -1416,7 +1432,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1416
1432
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1417
1433
|
retries,
|
|
1418
1434
|
retryDelay,
|
|
1419
|
-
flowControl
|
|
1435
|
+
flowControl,
|
|
1436
|
+
stringifyBody
|
|
1420
1437
|
};
|
|
1421
1438
|
const { workflowId } = workflow;
|
|
1422
1439
|
if (!workflowId) {
|
|
@@ -1469,8 +1486,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1469
1486
|
invokeCount
|
|
1470
1487
|
});
|
|
1471
1488
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1489
|
+
let invokeBody;
|
|
1490
|
+
if (this.params.stringifyBody) {
|
|
1491
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1492
|
+
} else {
|
|
1493
|
+
if (typeof this.params.body === "string") {
|
|
1494
|
+
invokeBody = this.params.body;
|
|
1495
|
+
} else {
|
|
1496
|
+
throw new WorkflowError(
|
|
1497
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1498
|
+
);
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1472
1501
|
const request = {
|
|
1473
|
-
body:
|
|
1502
|
+
body: invokeBody,
|
|
1474
1503
|
headers: Object.fromEntries(
|
|
1475
1504
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1476
1505
|
),
|
|
@@ -2878,7 +2907,8 @@ var WorkflowContext = class {
|
|
|
2878
2907
|
settings.retries || 0,
|
|
2879
2908
|
settings.retryDelay,
|
|
2880
2909
|
settings.timeout,
|
|
2881
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2910
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2911
|
+
settings.stringifyBody ?? true
|
|
2882
2912
|
);
|
|
2883
2913
|
} else {
|
|
2884
2914
|
const {
|
|
@@ -2889,7 +2919,8 @@ var WorkflowContext = class {
|
|
|
2889
2919
|
retries = 0,
|
|
2890
2920
|
retryDelay,
|
|
2891
2921
|
timeout,
|
|
2892
|
-
flowControl
|
|
2922
|
+
flowControl,
|
|
2923
|
+
stringifyBody = true
|
|
2893
2924
|
} = settings;
|
|
2894
2925
|
callStep = new LazyCallStep(
|
|
2895
2926
|
stepName,
|
|
@@ -2900,7 +2931,8 @@ var WorkflowContext = class {
|
|
|
2900
2931
|
retries,
|
|
2901
2932
|
retryDelay,
|
|
2902
2933
|
timeout,
|
|
2903
|
-
flowControl
|
|
2934
|
+
flowControl,
|
|
2935
|
+
stringifyBody
|
|
2904
2936
|
);
|
|
2905
2937
|
}
|
|
2906
2938
|
return await this.addStep(callStep);
|
|
@@ -3264,11 +3296,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3264
3296
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3265
3297
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3266
3298
|
let errorMessage = "";
|
|
3299
|
+
let failStack = "";
|
|
3267
3300
|
try {
|
|
3268
3301
|
const errorPayload = JSON.parse(decodedBody);
|
|
3269
3302
|
if (errorPayload.message) {
|
|
3270
3303
|
errorMessage = errorPayload.message;
|
|
3271
3304
|
}
|
|
3305
|
+
if (errorPayload.stack) {
|
|
3306
|
+
failStack = errorPayload.stack;
|
|
3307
|
+
}
|
|
3272
3308
|
} catch {
|
|
3273
3309
|
}
|
|
3274
3310
|
if (!errorMessage) {
|
|
@@ -3306,7 +3342,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3306
3342
|
context: workflowContext,
|
|
3307
3343
|
failStatus: status,
|
|
3308
3344
|
failResponse: errorMessage,
|
|
3309
|
-
failHeaders: header
|
|
3345
|
+
failHeaders: header,
|
|
3346
|
+
failStack
|
|
3310
3347
|
});
|
|
3311
3348
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3312
3349
|
} catch (error) {
|
package/index.mjs
CHANGED
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.20";
|
|
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)}'`
|
|
@@ -1137,9 +1138,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1137
1138
|
retryDelay;
|
|
1138
1139
|
timeout;
|
|
1139
1140
|
flowControl;
|
|
1141
|
+
stringifyBody;
|
|
1140
1142
|
stepType = "Call";
|
|
1141
1143
|
allowUndefinedOut = false;
|
|
1142
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1144
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1143
1145
|
super(stepName);
|
|
1144
1146
|
this.url = url;
|
|
1145
1147
|
this.method = method;
|
|
@@ -1149,6 +1151,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1149
1151
|
this.retryDelay = retryDelay;
|
|
1150
1152
|
this.timeout = timeout;
|
|
1151
1153
|
this.flowControl = flowControl;
|
|
1154
|
+
this.stringifyBody = stringifyBody;
|
|
1152
1155
|
}
|
|
1153
1156
|
getPlanStep(concurrent, targetStep) {
|
|
1154
1157
|
return {
|
|
@@ -1258,10 +1261,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1258
1261
|
};
|
|
1259
1262
|
}
|
|
1260
1263
|
async submitStep({ context, headers }) {
|
|
1264
|
+
let callBody;
|
|
1265
|
+
if (this.stringifyBody) {
|
|
1266
|
+
callBody = JSON.stringify(this.body);
|
|
1267
|
+
} else {
|
|
1268
|
+
if (typeof this.body === "string") {
|
|
1269
|
+
callBody = this.body;
|
|
1270
|
+
} else {
|
|
1271
|
+
throw new WorkflowError(
|
|
1272
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1273
|
+
);
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1261
1276
|
return await context.qstashClient.batch([
|
|
1262
1277
|
{
|
|
1263
1278
|
headers,
|
|
1264
|
-
body:
|
|
1279
|
+
body: callBody,
|
|
1265
1280
|
method: this.method,
|
|
1266
1281
|
url: this.url,
|
|
1267
1282
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1396,7 +1411,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1396
1411
|
workflowRunId,
|
|
1397
1412
|
retries,
|
|
1398
1413
|
retryDelay,
|
|
1399
|
-
flowControl
|
|
1414
|
+
flowControl,
|
|
1415
|
+
stringifyBody = true
|
|
1400
1416
|
}) {
|
|
1401
1417
|
super(stepName);
|
|
1402
1418
|
this.params = {
|
|
@@ -1406,7 +1422,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1406
1422
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1407
1423
|
retries,
|
|
1408
1424
|
retryDelay,
|
|
1409
|
-
flowControl
|
|
1425
|
+
flowControl,
|
|
1426
|
+
stringifyBody
|
|
1410
1427
|
};
|
|
1411
1428
|
const { workflowId } = workflow;
|
|
1412
1429
|
if (!workflowId) {
|
|
@@ -1459,8 +1476,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1459
1476
|
invokeCount
|
|
1460
1477
|
});
|
|
1461
1478
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1479
|
+
let invokeBody;
|
|
1480
|
+
if (this.params.stringifyBody) {
|
|
1481
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1482
|
+
} else {
|
|
1483
|
+
if (typeof this.params.body === "string") {
|
|
1484
|
+
invokeBody = this.params.body;
|
|
1485
|
+
} else {
|
|
1486
|
+
throw new WorkflowError(
|
|
1487
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1488
|
+
);
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1462
1491
|
const request = {
|
|
1463
|
-
body:
|
|
1492
|
+
body: invokeBody,
|
|
1464
1493
|
headers: Object.fromEntries(
|
|
1465
1494
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1466
1495
|
),
|
|
@@ -2904,7 +2933,8 @@ var WorkflowContext = class {
|
|
|
2904
2933
|
settings.retries || 0,
|
|
2905
2934
|
settings.retryDelay,
|
|
2906
2935
|
settings.timeout,
|
|
2907
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2936
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2937
|
+
settings.stringifyBody ?? true
|
|
2908
2938
|
);
|
|
2909
2939
|
} else {
|
|
2910
2940
|
const {
|
|
@@ -2915,7 +2945,8 @@ var WorkflowContext = class {
|
|
|
2915
2945
|
retries = 0,
|
|
2916
2946
|
retryDelay,
|
|
2917
2947
|
timeout,
|
|
2918
|
-
flowControl
|
|
2948
|
+
flowControl,
|
|
2949
|
+
stringifyBody = true
|
|
2919
2950
|
} = settings;
|
|
2920
2951
|
callStep = new LazyCallStep(
|
|
2921
2952
|
stepName,
|
|
@@ -2926,7 +2957,8 @@ var WorkflowContext = class {
|
|
|
2926
2957
|
retries,
|
|
2927
2958
|
retryDelay,
|
|
2928
2959
|
timeout,
|
|
2929
|
-
flowControl
|
|
2960
|
+
flowControl,
|
|
2961
|
+
stringifyBody
|
|
2930
2962
|
);
|
|
2931
2963
|
}
|
|
2932
2964
|
return await this.addStep(callStep);
|
|
@@ -3290,11 +3322,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3290
3322
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3291
3323
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3292
3324
|
let errorMessage = "";
|
|
3325
|
+
let failStack = "";
|
|
3293
3326
|
try {
|
|
3294
3327
|
const errorPayload = JSON.parse(decodedBody);
|
|
3295
3328
|
if (errorPayload.message) {
|
|
3296
3329
|
errorMessage = errorPayload.message;
|
|
3297
3330
|
}
|
|
3331
|
+
if (errorPayload.stack) {
|
|
3332
|
+
failStack = errorPayload.stack;
|
|
3333
|
+
}
|
|
3298
3334
|
} catch {
|
|
3299
3335
|
}
|
|
3300
3336
|
if (!errorMessage) {
|
|
@@ -3332,7 +3368,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3332
3368
|
context: workflowContext,
|
|
3333
3369
|
failStatus: status,
|
|
3334
3370
|
failResponse: errorMessage,
|
|
3335
|
-
failHeaders: header
|
|
3371
|
+
failHeaders: header,
|
|
3372
|
+
failStack
|
|
3336
3373
|
});
|
|
3337
3374
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3338
3375
|
} 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.20","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"}},"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","@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';
|
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.20";
|
|
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)}'`
|
|
@@ -1132,9 +1133,10 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1132
1133
|
retryDelay;
|
|
1133
1134
|
timeout;
|
|
1134
1135
|
flowControl;
|
|
1136
|
+
stringifyBody;
|
|
1135
1137
|
stepType = "Call";
|
|
1136
1138
|
allowUndefinedOut = false;
|
|
1137
|
-
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl) {
|
|
1139
|
+
constructor(stepName, url, method, body, headers, retries, retryDelay, timeout, flowControl, stringifyBody) {
|
|
1138
1140
|
super(stepName);
|
|
1139
1141
|
this.url = url;
|
|
1140
1142
|
this.method = method;
|
|
@@ -1144,6 +1146,7 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1144
1146
|
this.retryDelay = retryDelay;
|
|
1145
1147
|
this.timeout = timeout;
|
|
1146
1148
|
this.flowControl = flowControl;
|
|
1149
|
+
this.stringifyBody = stringifyBody;
|
|
1147
1150
|
}
|
|
1148
1151
|
getPlanStep(concurrent, targetStep) {
|
|
1149
1152
|
return {
|
|
@@ -1253,10 +1256,22 @@ var LazyCallStep = class _LazyCallStep extends BaseLazyStep {
|
|
|
1253
1256
|
};
|
|
1254
1257
|
}
|
|
1255
1258
|
async submitStep({ context, headers }) {
|
|
1259
|
+
let callBody;
|
|
1260
|
+
if (this.stringifyBody) {
|
|
1261
|
+
callBody = JSON.stringify(this.body);
|
|
1262
|
+
} else {
|
|
1263
|
+
if (typeof this.body === "string") {
|
|
1264
|
+
callBody = this.body;
|
|
1265
|
+
} else {
|
|
1266
|
+
throw new WorkflowError(
|
|
1267
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your call step."
|
|
1268
|
+
);
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1256
1271
|
return await context.qstashClient.batch([
|
|
1257
1272
|
{
|
|
1258
1273
|
headers,
|
|
1259
|
-
body:
|
|
1274
|
+
body: callBody,
|
|
1260
1275
|
method: this.method,
|
|
1261
1276
|
url: this.url,
|
|
1262
1277
|
retries: DEFAULT_RETRIES === this.retries ? void 0 : this.retries,
|
|
@@ -1391,7 +1406,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1391
1406
|
workflowRunId,
|
|
1392
1407
|
retries,
|
|
1393
1408
|
retryDelay,
|
|
1394
|
-
flowControl
|
|
1409
|
+
flowControl,
|
|
1410
|
+
stringifyBody = true
|
|
1395
1411
|
}) {
|
|
1396
1412
|
super(stepName);
|
|
1397
1413
|
this.params = {
|
|
@@ -1401,7 +1417,8 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1401
1417
|
workflowRunId: getWorkflowRunId(workflowRunId),
|
|
1402
1418
|
retries,
|
|
1403
1419
|
retryDelay,
|
|
1404
|
-
flowControl
|
|
1420
|
+
flowControl,
|
|
1421
|
+
stringifyBody
|
|
1405
1422
|
};
|
|
1406
1423
|
const { workflowId } = workflow;
|
|
1407
1424
|
if (!workflowId) {
|
|
@@ -1454,8 +1471,20 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1454
1471
|
invokeCount
|
|
1455
1472
|
});
|
|
1456
1473
|
invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
|
|
1474
|
+
let invokeBody;
|
|
1475
|
+
if (this.params.stringifyBody) {
|
|
1476
|
+
invokeBody = JSON.stringify(this.params.body);
|
|
1477
|
+
} else {
|
|
1478
|
+
if (typeof this.params.body === "string") {
|
|
1479
|
+
invokeBody = this.params.body;
|
|
1480
|
+
} else {
|
|
1481
|
+
throw new WorkflowError(
|
|
1482
|
+
"When stringifyBody is false, body must be a string. Please check the body type of your invoke step."
|
|
1483
|
+
);
|
|
1484
|
+
}
|
|
1485
|
+
}
|
|
1457
1486
|
const request = {
|
|
1458
|
-
body:
|
|
1487
|
+
body: invokeBody,
|
|
1459
1488
|
headers: Object.fromEntries(
|
|
1460
1489
|
Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
|
|
1461
1490
|
),
|
|
@@ -2832,7 +2861,8 @@ var WorkflowContext = class {
|
|
|
2832
2861
|
settings.retries || 0,
|
|
2833
2862
|
settings.retryDelay,
|
|
2834
2863
|
settings.timeout,
|
|
2835
|
-
settings.flowControl ?? settings.workflow.options.flowControl
|
|
2864
|
+
settings.flowControl ?? settings.workflow.options.flowControl,
|
|
2865
|
+
settings.stringifyBody ?? true
|
|
2836
2866
|
);
|
|
2837
2867
|
} else {
|
|
2838
2868
|
const {
|
|
@@ -2843,7 +2873,8 @@ var WorkflowContext = class {
|
|
|
2843
2873
|
retries = 0,
|
|
2844
2874
|
retryDelay,
|
|
2845
2875
|
timeout,
|
|
2846
|
-
flowControl
|
|
2876
|
+
flowControl,
|
|
2877
|
+
stringifyBody = true
|
|
2847
2878
|
} = settings;
|
|
2848
2879
|
callStep = new LazyCallStep(
|
|
2849
2880
|
stepName,
|
|
@@ -2854,7 +2885,8 @@ var WorkflowContext = class {
|
|
|
2854
2885
|
retries,
|
|
2855
2886
|
retryDelay,
|
|
2856
2887
|
timeout,
|
|
2857
|
-
flowControl
|
|
2888
|
+
flowControl,
|
|
2889
|
+
stringifyBody
|
|
2858
2890
|
);
|
|
2859
2891
|
}
|
|
2860
2892
|
return await this.addStep(callStep);
|
|
@@ -3218,11 +3250,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3218
3250
|
const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
|
|
3219
3251
|
const decodedBody = body ? decodeBase64(body) : "{}";
|
|
3220
3252
|
let errorMessage = "";
|
|
3253
|
+
let failStack = "";
|
|
3221
3254
|
try {
|
|
3222
3255
|
const errorPayload = JSON.parse(decodedBody);
|
|
3223
3256
|
if (errorPayload.message) {
|
|
3224
3257
|
errorMessage = errorPayload.message;
|
|
3225
3258
|
}
|
|
3259
|
+
if (errorPayload.stack) {
|
|
3260
|
+
failStack = errorPayload.stack;
|
|
3261
|
+
}
|
|
3226
3262
|
} catch {
|
|
3227
3263
|
}
|
|
3228
3264
|
if (!errorMessage) {
|
|
@@ -3260,7 +3296,8 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3260
3296
|
context: workflowContext,
|
|
3261
3297
|
failStatus: status,
|
|
3262
3298
|
failResponse: errorMessage,
|
|
3263
|
-
failHeaders: header
|
|
3299
|
+
failHeaders: header,
|
|
3300
|
+
failStack
|
|
3264
3301
|
});
|
|
3265
3302
|
return ok({ result: "is-failure-callback", response: failureResponse });
|
|
3266
3303
|
} 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';
|