@upstash/workflow 1.2.1 → 1.3.0

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.
Files changed (51) hide show
  1. package/README.md +10 -0
  2. package/astro.d.mts +2 -2
  3. package/astro.d.ts +2 -2
  4. package/astro.js +31 -5
  5. package/astro.mjs +1 -1
  6. package/{chunk-THS5AX2D.mjs → chunk-G24J5PCC.mjs} +31 -5
  7. package/cloudflare.d.mts +2 -2
  8. package/cloudflare.d.ts +2 -2
  9. package/cloudflare.js +31 -5
  10. package/cloudflare.mjs +1 -1
  11. package/express.d.mts +2 -2
  12. package/express.d.ts +2 -2
  13. package/express.js +31 -5
  14. package/express.mjs +1 -1
  15. package/h3.d.mts +2 -2
  16. package/h3.d.ts +2 -2
  17. package/h3.js +31 -5
  18. package/h3.mjs +1 -1
  19. package/hono.d.mts +2 -2
  20. package/hono.d.ts +2 -2
  21. package/hono.js +31 -5
  22. package/hono.mjs +1 -1
  23. package/index.d.mts +2 -2
  24. package/index.d.ts +2 -2
  25. package/index.js +31 -5
  26. package/index.mjs +1 -1
  27. package/nextjs.d.mts +2 -2
  28. package/nextjs.d.ts +2 -2
  29. package/nextjs.js +31 -5
  30. package/nextjs.mjs +1 -1
  31. package/package.json +1 -1
  32. package/react-router.d.mts +2 -2
  33. package/react-router.d.ts +2 -2
  34. package/react-router.js +31 -5
  35. package/react-router.mjs +1 -1
  36. package/{serve-many-C6sa_DxN.d.mts → serve-many-D3D9uE4u.d.mts} +1 -1
  37. package/{serve-many-B-fe7bh7.d.ts → serve-many-kPOasiyb.d.ts} +1 -1
  38. package/solidjs.d.mts +1 -1
  39. package/solidjs.d.ts +1 -1
  40. package/solidjs.js +31 -5
  41. package/solidjs.mjs +1 -1
  42. package/svelte.d.mts +2 -2
  43. package/svelte.d.ts +2 -2
  44. package/svelte.js +31 -5
  45. package/svelte.mjs +1 -1
  46. package/tanstack.d.mts +2 -2
  47. package/tanstack.d.ts +2 -2
  48. package/tanstack.js +31 -5
  49. package/tanstack.mjs +1 -1
  50. package/{types-B2S08hRU.d.ts → types-B_E1VAK6.d.mts} +9 -1
  51. package/{types-B2S08hRU.d.mts → types-B_E1VAK6.d.ts} +9 -1
package/svelte.js CHANGED
@@ -192,6 +192,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
192
192
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
193
193
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
194
194
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
195
+ var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
195
196
  var WORKFLOW_LABEL_HEADER = "Upstash-Label";
196
197
  var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
197
198
  var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
@@ -200,7 +201,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
200
201
  var DEFAULT_CONTENT_TYPE = "application/json";
201
202
  var NO_CONCURRENCY = 1;
202
203
  var DEFAULT_RETRIES = 3;
203
- var VERSION = "v1.0.0";
204
+ var VERSION = "v1.2.1";
204
205
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
205
206
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
206
207
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -855,6 +856,9 @@ var recreateUserHeaders = (headers) => {
855
856
  }
856
857
  return filteredHeaders;
857
858
  };
859
+ var isThirdPartyCallResult = (request) => {
860
+ return request.headers.get("Upstash-Workflow-Callback") !== null;
861
+ };
858
862
  var handleThirdPartyCallResult = async ({
859
863
  request,
860
864
  requestPayload,
@@ -864,7 +868,7 @@ var handleThirdPartyCallResult = async ({
864
868
  middlewareManager
865
869
  }) => {
866
870
  try {
867
- if (request.headers.get("Upstash-Workflow-Callback")) {
871
+ if (isThirdPartyCallResult(request)) {
868
872
  let callbackPayload;
869
873
  if (requestPayload) {
870
874
  callbackPayload = requestPayload;
@@ -2707,6 +2711,13 @@ var WorkflowContext = class {
2707
2711
  * ```
2708
2712
  */
2709
2713
  label;
2714
+ /**
2715
+ * Number of times QStash has retried delivering the current request.
2716
+ *
2717
+ * Sourced from the `Upstash-Retried` header. `0` on the first delivery,
2718
+ * `1` on the first retry, `2` on the second, and so on.
2719
+ */
2720
+ retried;
2710
2721
  constructor({
2711
2722
  qstashClient,
2712
2723
  workflowRunId,
@@ -2719,6 +2730,7 @@ var WorkflowContext = class {
2719
2730
  telemetry: telemetry2,
2720
2731
  invokeCount,
2721
2732
  label,
2733
+ retried,
2722
2734
  middlewareManager
2723
2735
  }) {
2724
2736
  this.qstashClient = qstashClient;
@@ -2730,6 +2742,7 @@ var WorkflowContext = class {
2730
2742
  this.requestPayload = initialPayload;
2731
2743
  this.env = env ?? {};
2732
2744
  this.label = label;
2745
+ this.retried = retried ?? 0;
2733
2746
  const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
2734
2747
  middlewareManagerInstance.assignContext(this);
2735
2748
  this.executor = new AutoExecutor(
@@ -2993,7 +3006,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2993
3006
  const disabledContext = new _DisabledWorkflowContext({
2994
3007
  qstashClient: new import_qstash10.Client({
2995
3008
  baseUrl: "disabled-client",
2996
- token: "disabled-client"
3009
+ token: "disabled-client",
3010
+ devMode: false
2997
3011
  }),
2998
3012
  workflowRunId: context.workflowRunId,
2999
3013
  workflowRunCreatedAt: context.workflowRunCreatedAt,
@@ -3002,7 +3016,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3002
3016
  url: context.url,
3003
3017
  initialPayload: context.requestPayload,
3004
3018
  env: context.env,
3005
- label: context.label
3019
+ label: context.label,
3020
+ retried: context.retried
3006
3021
  });
3007
3022
  try {
3008
3023
  await routeFunction(disabledContext);
@@ -3218,6 +3233,7 @@ var handleFailure = async ({
3218
3233
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3219
3234
  }
3220
3235
  const userHeaders = recreateUserHeaders(request.headers);
3236
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
3221
3237
  const workflowContext = new WorkflowContext({
3222
3238
  qstashClient,
3223
3239
  workflowRunId,
@@ -3229,6 +3245,7 @@ var handleFailure = async ({
3229
3245
  telemetry: void 0,
3230
3246
  // not going to make requests in authentication check
3231
3247
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3248
+ retried,
3232
3249
  workflowRunCreatedAt: workflowCreatedAt,
3233
3250
  middlewareManager: void 0
3234
3251
  });
@@ -3388,6 +3405,9 @@ var getReceiver = (environment, receiverConfig, region) => {
3388
3405
  if (receiverConfig === "set-to-undefined") {
3389
3406
  return void 0;
3390
3407
  }
3408
+ if (isQStashDevModeEnabled(environment)) {
3409
+ return new import_qstash11.Receiver({ devMode: true });
3410
+ }
3391
3411
  const receiverEnv = readReceiverEnvironmentVariables(environment, region);
3392
3412
  return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
3393
3413
  currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
@@ -3397,6 +3417,10 @@ var getReceiver = (environment, receiverConfig, region) => {
3397
3417
  return receiverConfig;
3398
3418
  }
3399
3419
  };
3420
+ var isQStashDevModeEnabled = (env) => {
3421
+ const value = env.QSTASH_DEV;
3422
+ return value === "true" || value === "1";
3423
+ };
3400
3424
  var getQStashHandlerOptions = (...params) => {
3401
3425
  const handlers = getQStashHandlers(...params);
3402
3426
  return {
@@ -3706,12 +3730,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3706
3730
  );
3707
3731
  }
3708
3732
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3733
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
3709
3734
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3710
3735
  const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3711
3736
  const workflowContext = new WorkflowContext({
3712
3737
  qstashClient: regionalClient,
3713
3738
  workflowRunId,
3714
- initialPayload: initialPayloadParser(rawInitialPayload),
3739
+ initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
3715
3740
  headers: recreateUserHeaders(request.headers),
3716
3741
  steps,
3717
3742
  url: workflowUrl,
@@ -3719,6 +3744,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3719
3744
  telemetry: telemetry2,
3720
3745
  invokeCount,
3721
3746
  label,
3747
+ retried,
3722
3748
  workflowRunCreatedAt: Number(workflowRunCreatedAt),
3723
3749
  middlewareManager
3724
3750
  });
package/svelte.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-THS5AX2D.mjs";
5
+ } from "./chunk-G24J5PCC.mjs";
6
6
 
7
7
  // platforms/svelte.ts
8
8
  var telemetry = {
package/tanstack.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { c as RouteFunction, d as WorkflowServeOptions, E as ExclusiveValidationOptions, I as InvokableWorkflow } from './types-B2S08hRU.mjs';
2
- import { s as serveManyBase } from './serve-many-C6sa_DxN.mjs';
1
+ import { c as RouteFunction, d as WorkflowServeOptions, E as ExclusiveValidationOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
2
+ import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
 
package/tanstack.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { c as RouteFunction, d as WorkflowServeOptions, E as ExclusiveValidationOptions, I as InvokableWorkflow } from './types-B2S08hRU.js';
2
- import { s as serveManyBase } from './serve-many-B-fe7bh7.js';
1
+ import { c as RouteFunction, d as WorkflowServeOptions, E as ExclusiveValidationOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
2
+ import { s as serveManyBase } from './serve-many-kPOasiyb.js';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
 
package/tanstack.js CHANGED
@@ -192,6 +192,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
192
192
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
193
193
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
194
194
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
195
+ var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
195
196
  var WORKFLOW_LABEL_HEADER = "Upstash-Label";
196
197
  var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
197
198
  var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
@@ -200,7 +201,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
200
201
  var DEFAULT_CONTENT_TYPE = "application/json";
201
202
  var NO_CONCURRENCY = 1;
202
203
  var DEFAULT_RETRIES = 3;
203
- var VERSION = "v1.0.0";
204
+ var VERSION = "v1.2.1";
204
205
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
205
206
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
206
207
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -855,6 +856,9 @@ var recreateUserHeaders = (headers) => {
855
856
  }
856
857
  return filteredHeaders;
857
858
  };
859
+ var isThirdPartyCallResult = (request) => {
860
+ return request.headers.get("Upstash-Workflow-Callback") !== null;
861
+ };
858
862
  var handleThirdPartyCallResult = async ({
859
863
  request,
860
864
  requestPayload,
@@ -864,7 +868,7 @@ var handleThirdPartyCallResult = async ({
864
868
  middlewareManager
865
869
  }) => {
866
870
  try {
867
- if (request.headers.get("Upstash-Workflow-Callback")) {
871
+ if (isThirdPartyCallResult(request)) {
868
872
  let callbackPayload;
869
873
  if (requestPayload) {
870
874
  callbackPayload = requestPayload;
@@ -2707,6 +2711,13 @@ var WorkflowContext = class {
2707
2711
  * ```
2708
2712
  */
2709
2713
  label;
2714
+ /**
2715
+ * Number of times QStash has retried delivering the current request.
2716
+ *
2717
+ * Sourced from the `Upstash-Retried` header. `0` on the first delivery,
2718
+ * `1` on the first retry, `2` on the second, and so on.
2719
+ */
2720
+ retried;
2710
2721
  constructor({
2711
2722
  qstashClient,
2712
2723
  workflowRunId,
@@ -2719,6 +2730,7 @@ var WorkflowContext = class {
2719
2730
  telemetry: telemetry2,
2720
2731
  invokeCount,
2721
2732
  label,
2733
+ retried,
2722
2734
  middlewareManager
2723
2735
  }) {
2724
2736
  this.qstashClient = qstashClient;
@@ -2730,6 +2742,7 @@ var WorkflowContext = class {
2730
2742
  this.requestPayload = initialPayload;
2731
2743
  this.env = env ?? {};
2732
2744
  this.label = label;
2745
+ this.retried = retried ?? 0;
2733
2746
  const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
2734
2747
  middlewareManagerInstance.assignContext(this);
2735
2748
  this.executor = new AutoExecutor(
@@ -2993,7 +3006,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2993
3006
  const disabledContext = new _DisabledWorkflowContext({
2994
3007
  qstashClient: new import_qstash10.Client({
2995
3008
  baseUrl: "disabled-client",
2996
- token: "disabled-client"
3009
+ token: "disabled-client",
3010
+ devMode: false
2997
3011
  }),
2998
3012
  workflowRunId: context.workflowRunId,
2999
3013
  workflowRunCreatedAt: context.workflowRunCreatedAt,
@@ -3002,7 +3016,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3002
3016
  url: context.url,
3003
3017
  initialPayload: context.requestPayload,
3004
3018
  env: context.env,
3005
- label: context.label
3019
+ label: context.label,
3020
+ retried: context.retried
3006
3021
  });
3007
3022
  try {
3008
3023
  await routeFunction(disabledContext);
@@ -3218,6 +3233,7 @@ var handleFailure = async ({
3218
3233
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3219
3234
  }
3220
3235
  const userHeaders = recreateUserHeaders(request.headers);
3236
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
3221
3237
  const workflowContext = new WorkflowContext({
3222
3238
  qstashClient,
3223
3239
  workflowRunId,
@@ -3229,6 +3245,7 @@ var handleFailure = async ({
3229
3245
  telemetry: void 0,
3230
3246
  // not going to make requests in authentication check
3231
3247
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3248
+ retried,
3232
3249
  workflowRunCreatedAt: workflowCreatedAt,
3233
3250
  middlewareManager: void 0
3234
3251
  });
@@ -3388,6 +3405,9 @@ var getReceiver = (environment, receiverConfig, region) => {
3388
3405
  if (receiverConfig === "set-to-undefined") {
3389
3406
  return void 0;
3390
3407
  }
3408
+ if (isQStashDevModeEnabled(environment)) {
3409
+ return new import_qstash11.Receiver({ devMode: true });
3410
+ }
3391
3411
  const receiverEnv = readReceiverEnvironmentVariables(environment, region);
3392
3412
  return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
3393
3413
  currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
@@ -3397,6 +3417,10 @@ var getReceiver = (environment, receiverConfig, region) => {
3397
3417
  return receiverConfig;
3398
3418
  }
3399
3419
  };
3420
+ var isQStashDevModeEnabled = (env) => {
3421
+ const value = env.QSTASH_DEV;
3422
+ return value === "true" || value === "1";
3423
+ };
3400
3424
  var getQStashHandlerOptions = (...params) => {
3401
3425
  const handlers = getQStashHandlers(...params);
3402
3426
  return {
@@ -3706,12 +3730,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3706
3730
  );
3707
3731
  }
3708
3732
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3733
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
3709
3734
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3710
3735
  const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3711
3736
  const workflowContext = new WorkflowContext({
3712
3737
  qstashClient: regionalClient,
3713
3738
  workflowRunId,
3714
- initialPayload: initialPayloadParser(rawInitialPayload),
3739
+ initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
3715
3740
  headers: recreateUserHeaders(request.headers),
3716
3741
  steps,
3717
3742
  url: workflowUrl,
@@ -3719,6 +3744,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3719
3744
  telemetry: telemetry2,
3720
3745
  invokeCount,
3721
3746
  label,
3747
+ retried,
3722
3748
  workflowRunCreatedAt: Number(workflowRunCreatedAt),
3723
3749
  middlewareManager
3724
3750
  });
package/tanstack.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-THS5AX2D.mjs";
5
+ } from "./chunk-G24J5PCC.mjs";
6
6
 
7
7
  // platforms/tanstack.ts
8
8
  var telemetry = {
@@ -700,7 +700,14 @@ declare class WorkflowContext<TInitialPayload = unknown> {
700
700
  * ```
701
701
  */
702
702
  readonly label?: string;
703
- constructor({ qstashClient, workflowRunId, workflowRunCreatedAt, headers, steps, url, initialPayload, env, telemetry, invokeCount, label, middlewareManager, }: {
703
+ /**
704
+ * Number of times QStash has retried delivering the current request.
705
+ *
706
+ * Sourced from the `Upstash-Retried` header. `0` on the first delivery,
707
+ * `1` on the first retry, `2` on the second, and so on.
708
+ */
709
+ readonly retried: number;
710
+ constructor({ qstashClient, workflowRunId, workflowRunCreatedAt, headers, steps, url, initialPayload, env, telemetry, invokeCount, label, retried, middlewareManager, }: {
704
711
  qstashClient: WorkflowClient;
705
712
  workflowRunId: string;
706
713
  workflowRunCreatedAt: number;
@@ -712,6 +719,7 @@ declare class WorkflowContext<TInitialPayload = unknown> {
712
719
  telemetry?: Telemetry;
713
720
  invokeCount?: number;
714
721
  label?: string;
722
+ retried?: number;
715
723
  middlewareManager?: MiddlewareManager<TInitialPayload>;
716
724
  });
717
725
  /**
@@ -700,7 +700,14 @@ declare class WorkflowContext<TInitialPayload = unknown> {
700
700
  * ```
701
701
  */
702
702
  readonly label?: string;
703
- constructor({ qstashClient, workflowRunId, workflowRunCreatedAt, headers, steps, url, initialPayload, env, telemetry, invokeCount, label, middlewareManager, }: {
703
+ /**
704
+ * Number of times QStash has retried delivering the current request.
705
+ *
706
+ * Sourced from the `Upstash-Retried` header. `0` on the first delivery,
707
+ * `1` on the first retry, `2` on the second, and so on.
708
+ */
709
+ readonly retried: number;
710
+ constructor({ qstashClient, workflowRunId, workflowRunCreatedAt, headers, steps, url, initialPayload, env, telemetry, invokeCount, label, retried, middlewareManager, }: {
704
711
  qstashClient: WorkflowClient;
705
712
  workflowRunId: string;
706
713
  workflowRunCreatedAt: number;
@@ -712,6 +719,7 @@ declare class WorkflowContext<TInitialPayload = unknown> {
712
719
  telemetry?: Telemetry;
713
720
  invokeCount?: number;
714
721
  label?: string;
722
+ retried?: number;
715
723
  middlewareManager?: MiddlewareManager<TInitialPayload>;
716
724
  });
717
725
  /**