@upstash/workflow 1.2.0 → 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-V5ZUHMAF.mjs → chunk-G24J5PCC.mjs} +93 -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 +201 -128
  24. package/index.d.ts +201 -128
  25. package/index.js +212 -160
  26. package/index.mjs +124 -156
  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/express.js CHANGED
@@ -35,6 +35,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
35
35
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
36
36
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
37
37
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
38
+ var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
38
39
  var WORKFLOW_LABEL_HEADER = "Upstash-Label";
39
40
  var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
40
41
  var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
@@ -43,7 +44,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
43
44
  var DEFAULT_CONTENT_TYPE = "application/json";
44
45
  var NO_CONCURRENCY = 1;
45
46
  var DEFAULT_RETRIES = 3;
46
- var VERSION = "v1.0.0";
47
+ var VERSION = "v1.2.1";
47
48
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
48
49
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
49
50
  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/express.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-V5ZUHMAF.mjs";
5
+ } from "./chunk-G24J5PCC.mjs";
6
6
 
7
7
  // platforms/express.ts
8
8
  import {
package/h3.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B2S08hRU.mjs';
3
- import { s as serveManyBase } from './serve-many-C6sa_DxN.mjs';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
3
+ import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
 
package/h3.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B2S08hRU.js';
3
- import { s as serveManyBase } from './serve-many-B-fe7bh7.js';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
3
+ import { s as serveManyBase } from './serve-many-kPOasiyb.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
 
package/h3.js CHANGED
@@ -501,6 +501,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
501
501
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
502
502
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
503
503
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
504
+ var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
504
505
  var WORKFLOW_LABEL_HEADER = "Upstash-Label";
505
506
  var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
506
507
  var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
@@ -509,7 +510,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
509
510
  var DEFAULT_CONTENT_TYPE = "application/json";
510
511
  var NO_CONCURRENCY = 1;
511
512
  var DEFAULT_RETRIES = 3;
512
- var VERSION = "v1.0.0";
513
+ var VERSION = "v1.2.1";
513
514
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
514
515
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
515
516
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -1164,6 +1165,9 @@ var recreateUserHeaders = (headers) => {
1164
1165
  }
1165
1166
  return filteredHeaders;
1166
1167
  };
1168
+ var isThirdPartyCallResult = (request) => {
1169
+ return request.headers.get("Upstash-Workflow-Callback") !== null;
1170
+ };
1167
1171
  var handleThirdPartyCallResult = async ({
1168
1172
  request,
1169
1173
  requestPayload,
@@ -1173,7 +1177,7 @@ var handleThirdPartyCallResult = async ({
1173
1177
  middlewareManager
1174
1178
  }) => {
1175
1179
  try {
1176
- if (request.headers.get("Upstash-Workflow-Callback")) {
1180
+ if (isThirdPartyCallResult(request)) {
1177
1181
  let callbackPayload;
1178
1182
  if (requestPayload) {
1179
1183
  callbackPayload = requestPayload;
@@ -3016,6 +3020,13 @@ var WorkflowContext = class {
3016
3020
  * ```
3017
3021
  */
3018
3022
  label;
3023
+ /**
3024
+ * Number of times QStash has retried delivering the current request.
3025
+ *
3026
+ * Sourced from the `Upstash-Retried` header. `0` on the first delivery,
3027
+ * `1` on the first retry, `2` on the second, and so on.
3028
+ */
3029
+ retried;
3019
3030
  constructor({
3020
3031
  qstashClient,
3021
3032
  workflowRunId,
@@ -3028,6 +3039,7 @@ var WorkflowContext = class {
3028
3039
  telemetry: telemetry2,
3029
3040
  invokeCount,
3030
3041
  label,
3042
+ retried,
3031
3043
  middlewareManager
3032
3044
  }) {
3033
3045
  this.qstashClient = qstashClient;
@@ -3039,6 +3051,7 @@ var WorkflowContext = class {
3039
3051
  this.requestPayload = initialPayload;
3040
3052
  this.env = env ?? {};
3041
3053
  this.label = label;
3054
+ this.retried = retried ?? 0;
3042
3055
  const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
3043
3056
  middlewareManagerInstance.assignContext(this);
3044
3057
  this.executor = new AutoExecutor(
@@ -3302,7 +3315,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3302
3315
  const disabledContext = new _DisabledWorkflowContext({
3303
3316
  qstashClient: new import_qstash10.Client({
3304
3317
  baseUrl: "disabled-client",
3305
- token: "disabled-client"
3318
+ token: "disabled-client",
3319
+ devMode: false
3306
3320
  }),
3307
3321
  workflowRunId: context.workflowRunId,
3308
3322
  workflowRunCreatedAt: context.workflowRunCreatedAt,
@@ -3311,7 +3325,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3311
3325
  url: context.url,
3312
3326
  initialPayload: context.requestPayload,
3313
3327
  env: context.env,
3314
- label: context.label
3328
+ label: context.label,
3329
+ retried: context.retried
3315
3330
  });
3316
3331
  try {
3317
3332
  await routeFunction(disabledContext);
@@ -3527,6 +3542,7 @@ var handleFailure = async ({
3527
3542
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3528
3543
  }
3529
3544
  const userHeaders = recreateUserHeaders(request.headers);
3545
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
3530
3546
  const workflowContext = new WorkflowContext({
3531
3547
  qstashClient,
3532
3548
  workflowRunId,
@@ -3538,6 +3554,7 @@ var handleFailure = async ({
3538
3554
  telemetry: void 0,
3539
3555
  // not going to make requests in authentication check
3540
3556
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3557
+ retried,
3541
3558
  workflowRunCreatedAt: workflowCreatedAt,
3542
3559
  middlewareManager: void 0
3543
3560
  });
@@ -3697,6 +3714,9 @@ var getReceiver = (environment, receiverConfig, region) => {
3697
3714
  if (receiverConfig === "set-to-undefined") {
3698
3715
  return void 0;
3699
3716
  }
3717
+ if (isQStashDevModeEnabled(environment)) {
3718
+ return new import_qstash11.Receiver({ devMode: true });
3719
+ }
3700
3720
  const receiverEnv = readReceiverEnvironmentVariables(environment, region);
3701
3721
  return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
3702
3722
  currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
@@ -3706,6 +3726,10 @@ var getReceiver = (environment, receiverConfig, region) => {
3706
3726
  return receiverConfig;
3707
3727
  }
3708
3728
  };
3729
+ var isQStashDevModeEnabled = (env) => {
3730
+ const value = env.QSTASH_DEV;
3731
+ return value === "true" || value === "1";
3732
+ };
3709
3733
  var getQStashHandlerOptions = (...params) => {
3710
3734
  const handlers = getQStashHandlers(...params);
3711
3735
  return {
@@ -4015,12 +4039,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
4015
4039
  );
4016
4040
  }
4017
4041
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
4042
+ const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
4018
4043
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
4019
4044
  const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
4020
4045
  const workflowContext = new WorkflowContext({
4021
4046
  qstashClient: regionalClient,
4022
4047
  workflowRunId,
4023
- initialPayload: initialPayloadParser(rawInitialPayload),
4048
+ initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
4024
4049
  headers: recreateUserHeaders(request.headers),
4025
4050
  steps,
4026
4051
  url: workflowUrl,
@@ -4028,6 +4053,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
4028
4053
  telemetry: telemetry2,
4029
4054
  invokeCount,
4030
4055
  label,
4056
+ retried,
4031
4057
  workflowRunCreatedAt: Number(workflowRunCreatedAt),
4032
4058
  middlewareManager
4033
4059
  });
package/h3.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-V5ZUHMAF.mjs";
5
+ } from "./chunk-G24J5PCC.mjs";
6
6
 
7
7
  // node_modules/defu/dist/defu.mjs
8
8
  function isPlainObject(value) {
package/hono.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B2S08hRU.mjs';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-C6sa_DxN.mjs';
4
+ import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
 
package/hono.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B2S08hRU.js';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-B-fe7bh7.js';
4
+ import { s as serveManyBase } from './serve-many-kPOasiyb.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
 
package/hono.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/hono.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-V5ZUHMAF.mjs";
5
+ } from "./chunk-G24J5PCC.mjs";
6
6
 
7
7
  // platforms/hono.ts
8
8
  var telemetry = {