@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/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.18";
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: JSON.stringify(this.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: JSON.stringify(this.params.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
@@ -14,7 +14,7 @@ import {
14
14
  prepareFlowControl,
15
15
  serve,
16
16
  triggerFirstInvocation
17
- } from "./chunk-37XOXDLZ.mjs";
17
+ } from "./chunk-LZGX3WMF.mjs";
18
18
 
19
19
  // src/client/index.ts
20
20
  import { Client as QStashClient } from "@upstash/qstash";
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, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
3
- import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
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, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
3
- import { s as serveManyBase } from './serve-many-BObe3pdI.js';
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.18";
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: JSON.stringify(this.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: JSON.stringify(this.params.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
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-37XOXDLZ.mjs";
5
+ } from "./chunk-LZGX3WMF.mjs";
6
6
 
7
7
  // platforms/nextjs.ts
8
8
  var appTelemetry = {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v0.2.19","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
+ {"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, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
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, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
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-B7_5AkKQ.mjs';
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-B7_5AkKQ.js';
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.18";
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: JSON.stringify(this.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: JSON.stringify(this.params.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
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase
4
- } from "./chunk-37XOXDLZ.mjs";
4
+ } from "./chunk-LZGX3WMF.mjs";
5
5
 
6
6
  // platforms/solidjs.ts
7
7
  var serve = (routeFunction, options) => {
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, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
4
- import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
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, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
4
- import { s as serveManyBase } from './serve-many-BObe3pdI.js';
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';