@upstash/workflow 0.2.17 → 0.2.18

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { g as WorkflowContext, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.mjs';
3
- import { s as serveManyBase } from './serve-many-DgDSOvQs.mjs';
2
+ import { g as WorkflowContext, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
3
+ import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/astro.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { g as WorkflowContext, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.js';
3
- import { s as serveManyBase } from './serve-many-B3DfoTFt.js';
2
+ import { g as WorkflowContext, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
3
+ import { s as serveManyBase } from './serve-many-BObe3pdI.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/astro.js CHANGED
@@ -86,12 +86,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
86
86
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
87
87
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
88
88
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
89
+ var WORKFLOW_LABEL_HEADER = "Upstash-Label";
89
90
  var WORKFLOW_PROTOCOL_VERSION = "1";
90
91
  var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
91
92
  var DEFAULT_CONTENT_TYPE = "application/json";
92
93
  var NO_CONCURRENCY = 1;
93
94
  var DEFAULT_RETRIES = 3;
94
- var VERSION = "v0.2.17";
95
+ var VERSION = "v0.2.18";
95
96
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
96
97
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
97
98
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -635,6 +636,9 @@ var triggerFirstInvocation = async (params) => {
635
636
  if (useJSONContent) {
636
637
  headers["content-type"] = "application/json";
637
638
  }
639
+ if (workflowContext.label) {
640
+ headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
641
+ }
638
642
  const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
639
643
  return {
640
644
  headers,
@@ -735,10 +739,11 @@ var recreateUserHeaders = (headers) => {
735
739
  const pairs = headers.entries();
736
740
  for (const [header, value] of pairs) {
737
741
  const headerLowerCase = header.toLowerCase();
738
- if (!headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
742
+ const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
739
743
  !headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
740
744
  headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
741
- headerLowerCase !== "render-proxy-ttl") {
745
+ headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
746
+ if (isUserHeader) {
742
747
  filteredHeaders.append(header, value);
743
748
  }
744
749
  }
@@ -2768,6 +2773,22 @@ var WorkflowContext = class {
2768
2773
  * and number of requests per second with the same key.
2769
2774
  */
2770
2775
  flowControl;
2776
+ /**
2777
+ * Label to apply to the workflow run.
2778
+ *
2779
+ * Can be used to filter the workflow run logs.
2780
+ *
2781
+ * Can be set by passing a `label` parameter when triggering the workflow
2782
+ * with `client.trigger`:
2783
+ *
2784
+ * ```ts
2785
+ * await client.trigger({
2786
+ * url: "https://workflow-endpoint.com",
2787
+ * label: "my-label"
2788
+ * });
2789
+ * ```
2790
+ */
2791
+ label;
2771
2792
  constructor({
2772
2793
  qstashClient,
2773
2794
  workflowRunId,
@@ -2782,7 +2803,8 @@ var WorkflowContext = class {
2782
2803
  retryDelay,
2783
2804
  telemetry: telemetry2,
2784
2805
  invokeCount,
2785
- flowControl
2806
+ flowControl,
2807
+ label
2786
2808
  }) {
2787
2809
  this.qstashClient = qstashClient;
2788
2810
  this.workflowRunId = workflowRunId;
@@ -2795,6 +2817,7 @@ var WorkflowContext = class {
2795
2817
  this.retries = retries ?? DEFAULT_RETRIES;
2796
2818
  this.retryDelay = retryDelay;
2797
2819
  this.flowControl = flowControl;
2820
+ this.label = label;
2798
2821
  this.executor = new AutoExecutor(this, this.steps, telemetry2, invokeCount, debug);
2799
2822
  }
2800
2823
  /**
@@ -3095,7 +3118,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3095
3118
  env: context.env,
3096
3119
  retries: context.retries,
3097
3120
  retryDelay: context.retryDelay,
3098
- flowControl: context.flowControl
3121
+ flowControl: context.flowControl,
3122
+ label: context.label
3099
3123
  });
3100
3124
  try {
3101
3125
  await routeFunction(disabledContext);
@@ -3272,11 +3296,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3272
3296
  if (!errorMessage) {
3273
3297
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3274
3298
  }
3299
+ const userHeaders = recreateUserHeaders(request.headers);
3275
3300
  const workflowContext = new WorkflowContext({
3276
3301
  qstashClient,
3277
3302
  workflowRunId,
3278
3303
  initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
3279
- headers: recreateUserHeaders(request.headers),
3304
+ headers: userHeaders,
3280
3305
  steps: [],
3281
3306
  url,
3282
3307
  failureUrl: url,
@@ -3285,8 +3310,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3285
3310
  retries,
3286
3311
  retryDelay,
3287
3312
  flowControl,
3288
- telemetry: void 0
3313
+ telemetry: void 0,
3289
3314
  // not going to make requests in authentication check
3315
+ label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
3290
3316
  });
3291
3317
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3292
3318
  routeFunction,
@@ -3495,6 +3521,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
3495
3521
  });
3496
3522
  }
3497
3523
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3524
+ const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3498
3525
  const workflowContext = new WorkflowContext({
3499
3526
  qstashClient,
3500
3527
  workflowRunId,
@@ -3509,7 +3536,8 @@ var serveBase = (routeFunction, telemetry2, options) => {
3509
3536
  retryDelay,
3510
3537
  telemetry: telemetry2,
3511
3538
  invokeCount,
3512
- flowControl
3539
+ flowControl,
3540
+ label
3513
3541
  });
3514
3542
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3515
3543
  routeFunction,
package/astro.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-RP7G4UD5.mjs";
5
+ } from "./chunk-EHL7SSJF.mjs";
6
6
 
7
7
  // platforms/astro.ts
8
8
  var telemetry = {
@@ -37,12 +37,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
37
37
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
38
38
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
39
39
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
40
+ var WORKFLOW_LABEL_HEADER = "Upstash-Label";
40
41
  var WORKFLOW_PROTOCOL_VERSION = "1";
41
42
  var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
42
43
  var DEFAULT_CONTENT_TYPE = "application/json";
43
44
  var NO_CONCURRENCY = 1;
44
45
  var DEFAULT_RETRIES = 3;
45
- var VERSION = "v0.2.17";
46
+ var VERSION = "v0.2.18";
46
47
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
47
48
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
48
49
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -852,6 +853,9 @@ var triggerFirstInvocation = async (params) => {
852
853
  if (useJSONContent) {
853
854
  headers["content-type"] = "application/json";
854
855
  }
856
+ if (workflowContext.label) {
857
+ headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
858
+ }
855
859
  const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
856
860
  return {
857
861
  headers,
@@ -952,10 +956,11 @@ var recreateUserHeaders = (headers) => {
952
956
  const pairs = headers.entries();
953
957
  for (const [header, value] of pairs) {
954
958
  const headerLowerCase = header.toLowerCase();
955
- if (!headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
959
+ const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
956
960
  !headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
957
961
  headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
958
- headerLowerCase !== "render-proxy-ttl") {
962
+ headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
963
+ if (isUserHeader) {
959
964
  filteredHeaders.append(header, value);
960
965
  }
961
966
  }
@@ -2812,6 +2817,22 @@ var WorkflowContext = class {
2812
2817
  * and number of requests per second with the same key.
2813
2818
  */
2814
2819
  flowControl;
2820
+ /**
2821
+ * Label to apply to the workflow run.
2822
+ *
2823
+ * Can be used to filter the workflow run logs.
2824
+ *
2825
+ * Can be set by passing a `label` parameter when triggering the workflow
2826
+ * with `client.trigger`:
2827
+ *
2828
+ * ```ts
2829
+ * await client.trigger({
2830
+ * url: "https://workflow-endpoint.com",
2831
+ * label: "my-label"
2832
+ * });
2833
+ * ```
2834
+ */
2835
+ label;
2815
2836
  constructor({
2816
2837
  qstashClient,
2817
2838
  workflowRunId,
@@ -2826,7 +2847,8 @@ var WorkflowContext = class {
2826
2847
  retryDelay,
2827
2848
  telemetry,
2828
2849
  invokeCount,
2829
- flowControl
2850
+ flowControl,
2851
+ label
2830
2852
  }) {
2831
2853
  this.qstashClient = qstashClient;
2832
2854
  this.workflowRunId = workflowRunId;
@@ -2839,6 +2861,7 @@ var WorkflowContext = class {
2839
2861
  this.retries = retries ?? DEFAULT_RETRIES;
2840
2862
  this.retryDelay = retryDelay;
2841
2863
  this.flowControl = flowControl;
2864
+ this.label = label;
2842
2865
  this.executor = new AutoExecutor(this, this.steps, telemetry, invokeCount, debug);
2843
2866
  }
2844
2867
  /**
@@ -3139,7 +3162,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3139
3162
  env: context.env,
3140
3163
  retries: context.retries,
3141
3164
  retryDelay: context.retryDelay,
3142
- flowControl: context.flowControl
3165
+ flowControl: context.flowControl,
3166
+ label: context.label
3143
3167
  });
3144
3168
  try {
3145
3169
  await routeFunction(disabledContext);
@@ -3316,11 +3340,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3316
3340
  if (!errorMessage) {
3317
3341
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3318
3342
  }
3343
+ const userHeaders = recreateUserHeaders(request.headers);
3319
3344
  const workflowContext = new WorkflowContext({
3320
3345
  qstashClient,
3321
3346
  workflowRunId,
3322
3347
  initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
3323
- headers: recreateUserHeaders(request.headers),
3348
+ headers: userHeaders,
3324
3349
  steps: [],
3325
3350
  url,
3326
3351
  failureUrl: url,
@@ -3329,8 +3354,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3329
3354
  retries,
3330
3355
  retryDelay,
3331
3356
  flowControl,
3332
- telemetry: void 0
3357
+ telemetry: void 0,
3333
3358
  // not going to make requests in authentication check
3359
+ label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
3334
3360
  });
3335
3361
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3336
3362
  routeFunction,
@@ -3539,6 +3565,7 @@ var serveBase = (routeFunction, telemetry, options) => {
3539
3565
  });
3540
3566
  }
3541
3567
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3568
+ const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3542
3569
  const workflowContext = new WorkflowContext({
3543
3570
  qstashClient,
3544
3571
  workflowRunId,
@@ -3553,7 +3580,8 @@ var serveBase = (routeFunction, telemetry, options) => {
3553
3580
  retryDelay,
3554
3581
  telemetry,
3555
3582
  invokeCount,
3556
- flowControl
3583
+ flowControl,
3584
+ label
3557
3585
  });
3558
3586
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3559
3587
  routeFunction,
@@ -3674,6 +3702,7 @@ export {
3674
3702
  __toESM,
3675
3703
  makeNotifyRequest,
3676
3704
  makeGetWaitersRequest,
3705
+ WORKFLOW_LABEL_HEADER,
3677
3706
  SDK_TELEMETRY,
3678
3707
  WorkflowError,
3679
3708
  WorkflowAbort,
package/cloudflare.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.mjs';
2
- import { s as serveManyBase } from './serve-many-DgDSOvQs.mjs';
1
+ import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
2
+ import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/cloudflare.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.js';
2
- import { s as serveManyBase } from './serve-many-B3DfoTFt.js';
1
+ import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
2
+ import { s as serveManyBase } from './serve-many-BObe3pdI.js';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/cloudflare.js CHANGED
@@ -33,12 +33,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
33
33
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
34
34
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
35
35
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
36
+ var WORKFLOW_LABEL_HEADER = "Upstash-Label";
36
37
  var WORKFLOW_PROTOCOL_VERSION = "1";
37
38
  var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
38
39
  var DEFAULT_CONTENT_TYPE = "application/json";
39
40
  var NO_CONCURRENCY = 1;
40
41
  var DEFAULT_RETRIES = 3;
41
- var VERSION = "v0.2.17";
42
+ var VERSION = "v0.2.18";
42
43
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
43
44
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
44
45
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -635,6 +636,9 @@ var triggerFirstInvocation = async (params) => {
635
636
  if (useJSONContent) {
636
637
  headers["content-type"] = "application/json";
637
638
  }
639
+ if (workflowContext.label) {
640
+ headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
641
+ }
638
642
  const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
639
643
  return {
640
644
  headers,
@@ -735,10 +739,11 @@ var recreateUserHeaders = (headers) => {
735
739
  const pairs = headers.entries();
736
740
  for (const [header, value] of pairs) {
737
741
  const headerLowerCase = header.toLowerCase();
738
- if (!headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
742
+ const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
739
743
  !headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
740
744
  headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
741
- headerLowerCase !== "render-proxy-ttl") {
745
+ headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
746
+ if (isUserHeader) {
742
747
  filteredHeaders.append(header, value);
743
748
  }
744
749
  }
@@ -2768,6 +2773,22 @@ var WorkflowContext = class {
2768
2773
  * and number of requests per second with the same key.
2769
2774
  */
2770
2775
  flowControl;
2776
+ /**
2777
+ * Label to apply to the workflow run.
2778
+ *
2779
+ * Can be used to filter the workflow run logs.
2780
+ *
2781
+ * Can be set by passing a `label` parameter when triggering the workflow
2782
+ * with `client.trigger`:
2783
+ *
2784
+ * ```ts
2785
+ * await client.trigger({
2786
+ * url: "https://workflow-endpoint.com",
2787
+ * label: "my-label"
2788
+ * });
2789
+ * ```
2790
+ */
2791
+ label;
2771
2792
  constructor({
2772
2793
  qstashClient,
2773
2794
  workflowRunId,
@@ -2782,7 +2803,8 @@ var WorkflowContext = class {
2782
2803
  retryDelay,
2783
2804
  telemetry: telemetry2,
2784
2805
  invokeCount,
2785
- flowControl
2806
+ flowControl,
2807
+ label
2786
2808
  }) {
2787
2809
  this.qstashClient = qstashClient;
2788
2810
  this.workflowRunId = workflowRunId;
@@ -2795,6 +2817,7 @@ var WorkflowContext = class {
2795
2817
  this.retries = retries ?? DEFAULT_RETRIES;
2796
2818
  this.retryDelay = retryDelay;
2797
2819
  this.flowControl = flowControl;
2820
+ this.label = label;
2798
2821
  this.executor = new AutoExecutor(this, this.steps, telemetry2, invokeCount, debug);
2799
2822
  }
2800
2823
  /**
@@ -3095,7 +3118,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3095
3118
  env: context.env,
3096
3119
  retries: context.retries,
3097
3120
  retryDelay: context.retryDelay,
3098
- flowControl: context.flowControl
3121
+ flowControl: context.flowControl,
3122
+ label: context.label
3099
3123
  });
3100
3124
  try {
3101
3125
  await routeFunction(disabledContext);
@@ -3272,11 +3296,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3272
3296
  if (!errorMessage) {
3273
3297
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
3274
3298
  }
3299
+ const userHeaders = recreateUserHeaders(request.headers);
3275
3300
  const workflowContext = new WorkflowContext({
3276
3301
  qstashClient,
3277
3302
  workflowRunId,
3278
3303
  initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
3279
- headers: recreateUserHeaders(request.headers),
3304
+ headers: userHeaders,
3280
3305
  steps: [],
3281
3306
  url,
3282
3307
  failureUrl: url,
@@ -3285,8 +3310,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
3285
3310
  retries,
3286
3311
  retryDelay,
3287
3312
  flowControl,
3288
- telemetry: void 0
3313
+ telemetry: void 0,
3289
3314
  // not going to make requests in authentication check
3315
+ label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
3290
3316
  });
3291
3317
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3292
3318
  routeFunction,
@@ -3495,6 +3521,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
3495
3521
  });
3496
3522
  }
3497
3523
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3524
+ const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3498
3525
  const workflowContext = new WorkflowContext({
3499
3526
  qstashClient,
3500
3527
  workflowRunId,
@@ -3509,7 +3536,8 @@ var serveBase = (routeFunction, telemetry2, options) => {
3509
3536
  retryDelay,
3510
3537
  telemetry: telemetry2,
3511
3538
  invokeCount,
3512
- flowControl
3539
+ flowControl,
3540
+ label
3513
3541
  });
3514
3542
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
3515
3543
  routeFunction,
package/cloudflare.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-RP7G4UD5.mjs";
5
+ } from "./chunk-EHL7SSJF.mjs";
6
6
 
7
7
  // platforms/cloudflare.ts
8
8
  var getArgs = (args) => {
package/express.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as express_serve_static_core from 'express-serve-static-core';
2
- import { R as RouteFunction, W as WorkflowServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.mjs';
2
+ import { R as RouteFunction, W as WorkflowServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
3
3
  import { Router } from 'express';
4
- import { s as serveManyBase } from './serve-many-DgDSOvQs.mjs';
4
+ import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/express.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as express_serve_static_core from 'express-serve-static-core';
2
- import { R as RouteFunction, W as WorkflowServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.js';
2
+ import { R as RouteFunction, W as WorkflowServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
3
3
  import { Router } from 'express';
4
- import { s as serveManyBase } from './serve-many-B3DfoTFt.js';
4
+ import { s as serveManyBase } from './serve-many-BObe3pdI.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/express.js CHANGED
@@ -23479,12 +23479,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
23479
23479
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
23480
23480
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
23481
23481
  var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
23482
+ var WORKFLOW_LABEL_HEADER = "Upstash-Label";
23482
23483
  var WORKFLOW_PROTOCOL_VERSION = "1";
23483
23484
  var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
23484
23485
  var DEFAULT_CONTENT_TYPE = "application/json";
23485
23486
  var NO_CONCURRENCY = 1;
23486
23487
  var DEFAULT_RETRIES = 3;
23487
- var VERSION = "v0.2.17";
23488
+ var VERSION = "v0.2.18";
23488
23489
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
23489
23490
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
23490
23491
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -24081,6 +24082,9 @@ var triggerFirstInvocation = async (params) => {
24081
24082
  if (useJSONContent) {
24082
24083
  headers["content-type"] = "application/json";
24083
24084
  }
24085
+ if (workflowContext.label) {
24086
+ headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
24087
+ }
24084
24088
  const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
24085
24089
  return {
24086
24090
  headers,
@@ -24181,10 +24185,11 @@ var recreateUserHeaders = (headers) => {
24181
24185
  const pairs = headers.entries();
24182
24186
  for (const [header, value] of pairs) {
24183
24187
  const headerLowerCase = header.toLowerCase();
24184
- if (!headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
24188
+ const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
24185
24189
  !headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
24186
24190
  headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
24187
- headerLowerCase !== "render-proxy-ttl") {
24191
+ headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
24192
+ if (isUserHeader) {
24188
24193
  filteredHeaders.append(header, value);
24189
24194
  }
24190
24195
  }
@@ -26214,6 +26219,22 @@ var WorkflowContext = class {
26214
26219
  * and number of requests per second with the same key.
26215
26220
  */
26216
26221
  flowControl;
26222
+ /**
26223
+ * Label to apply to the workflow run.
26224
+ *
26225
+ * Can be used to filter the workflow run logs.
26226
+ *
26227
+ * Can be set by passing a `label` parameter when triggering the workflow
26228
+ * with `client.trigger`:
26229
+ *
26230
+ * ```ts
26231
+ * await client.trigger({
26232
+ * url: "https://workflow-endpoint.com",
26233
+ * label: "my-label"
26234
+ * });
26235
+ * ```
26236
+ */
26237
+ label;
26217
26238
  constructor({
26218
26239
  qstashClient,
26219
26240
  workflowRunId,
@@ -26228,7 +26249,8 @@ var WorkflowContext = class {
26228
26249
  retryDelay,
26229
26250
  telemetry: telemetry2,
26230
26251
  invokeCount,
26231
- flowControl
26252
+ flowControl,
26253
+ label
26232
26254
  }) {
26233
26255
  this.qstashClient = qstashClient;
26234
26256
  this.workflowRunId = workflowRunId;
@@ -26241,6 +26263,7 @@ var WorkflowContext = class {
26241
26263
  this.retries = retries ?? DEFAULT_RETRIES;
26242
26264
  this.retryDelay = retryDelay;
26243
26265
  this.flowControl = flowControl;
26266
+ this.label = label;
26244
26267
  this.executor = new AutoExecutor(this, this.steps, telemetry2, invokeCount, debug);
26245
26268
  }
26246
26269
  /**
@@ -26541,7 +26564,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
26541
26564
  env: context.env,
26542
26565
  retries: context.retries,
26543
26566
  retryDelay: context.retryDelay,
26544
- flowControl: context.flowControl
26567
+ flowControl: context.flowControl,
26568
+ label: context.label
26545
26569
  });
26546
26570
  try {
26547
26571
  await routeFunction(disabledContext);
@@ -26718,11 +26742,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
26718
26742
  if (!errorMessage) {
26719
26743
  errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
26720
26744
  }
26745
+ const userHeaders = recreateUserHeaders(request.headers);
26721
26746
  const workflowContext = new WorkflowContext({
26722
26747
  qstashClient,
26723
26748
  workflowRunId,
26724
26749
  initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
26725
- headers: recreateUserHeaders(request.headers),
26750
+ headers: userHeaders,
26726
26751
  steps: [],
26727
26752
  url,
26728
26753
  failureUrl: url,
@@ -26731,8 +26756,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
26731
26756
  retries,
26732
26757
  retryDelay,
26733
26758
  flowControl,
26734
- telemetry: void 0
26759
+ telemetry: void 0,
26735
26760
  // not going to make requests in authentication check
26761
+ label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
26736
26762
  });
26737
26763
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
26738
26764
  routeFunction,
@@ -26941,6 +26967,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
26941
26967
  });
26942
26968
  }
26943
26969
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
26970
+ const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
26944
26971
  const workflowContext = new WorkflowContext({
26945
26972
  qstashClient,
26946
26973
  workflowRunId,
@@ -26955,7 +26982,8 @@ var serveBase = (routeFunction, telemetry2, options) => {
26955
26982
  retryDelay,
26956
26983
  telemetry: telemetry2,
26957
26984
  invokeCount,
26958
- flowControl
26985
+ flowControl,
26986
+ label
26959
26987
  });
26960
26988
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
26961
26989
  routeFunction,
package/express.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  __toESM,
6
6
  serveBase,
7
7
  serveManyBase
8
- } from "./chunk-RP7G4UD5.mjs";
8
+ } from "./chunk-EHL7SSJF.mjs";
9
9
 
10
10
  // node_modules/depd/index.js
11
11
  var require_depd = __commonJS({
package/h3.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.mjs';
3
- import { s as serveManyBase } from './serve-many-DgDSOvQs.mjs';
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';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/h3.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types--R_3XZXz.js';
3
- import { s as serveManyBase } from './serve-many-B3DfoTFt.js';
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';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';