@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 +2 -2
- package/astro.d.ts +2 -2
- package/astro.js +36 -8
- package/astro.mjs +1 -1
- package/{chunk-RP7G4UD5.mjs → chunk-EHL7SSJF.mjs} +37 -8
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +36 -8
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +36 -8
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +36 -8
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +36 -8
- package/hono.mjs +1 -1
- package/index.d.mts +19 -3
- package/index.d.ts +19 -3
- package/index.js +45 -10
- package/index.mjs +11 -3
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +36 -8
- package/nextjs.mjs +1 -1
- package/package.json +1 -1
- package/{serve-many-B3DfoTFt.d.ts → serve-many-BObe3pdI.d.ts} +1 -1
- package/{serve-many-DgDSOvQs.d.mts → serve-many-CEUYWQvV.d.mts} +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +36 -8
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +36 -8
- package/svelte.mjs +1 -1
- package/{types--R_3XZXz.d.ts → types-B7_5AkKQ.d.mts} +18 -1
- package/{types--R_3XZXz.d.mts → types-B7_5AkKQ.d.ts} +18 -1
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
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
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
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
|
@@ -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.
|
|
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
|
-
|
|
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:
|
|
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
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
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
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
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
|
|
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-
|
|
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
|
|
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-
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
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
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
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
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
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';
|