@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/nextjs.js
CHANGED
|
@@ -89,12 +89,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
|
89
89
|
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
90
90
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
91
91
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
92
|
+
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
92
93
|
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
93
94
|
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
94
95
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
95
96
|
var NO_CONCURRENCY = 1;
|
|
96
97
|
var DEFAULT_RETRIES = 3;
|
|
97
|
-
var VERSION = "v0.2.
|
|
98
|
+
var VERSION = "v0.2.18";
|
|
98
99
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
99
100
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
100
101
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -638,6 +639,9 @@ var triggerFirstInvocation = async (params) => {
|
|
|
638
639
|
if (useJSONContent) {
|
|
639
640
|
headers["content-type"] = "application/json";
|
|
640
641
|
}
|
|
642
|
+
if (workflowContext.label) {
|
|
643
|
+
headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
|
|
644
|
+
}
|
|
641
645
|
const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
|
|
642
646
|
return {
|
|
643
647
|
headers,
|
|
@@ -738,10 +742,11 @@ var recreateUserHeaders = (headers) => {
|
|
|
738
742
|
const pairs = headers.entries();
|
|
739
743
|
for (const [header, value] of pairs) {
|
|
740
744
|
const headerLowerCase = header.toLowerCase();
|
|
741
|
-
|
|
745
|
+
const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
|
|
742
746
|
!headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
|
|
743
747
|
headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
|
|
744
|
-
headerLowerCase !== "render-proxy-ttl")
|
|
748
|
+
headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
|
|
749
|
+
if (isUserHeader) {
|
|
745
750
|
filteredHeaders.append(header, value);
|
|
746
751
|
}
|
|
747
752
|
}
|
|
@@ -2771,6 +2776,22 @@ var WorkflowContext = class {
|
|
|
2771
2776
|
* and number of requests per second with the same key.
|
|
2772
2777
|
*/
|
|
2773
2778
|
flowControl;
|
|
2779
|
+
/**
|
|
2780
|
+
* Label to apply to the workflow run.
|
|
2781
|
+
*
|
|
2782
|
+
* Can be used to filter the workflow run logs.
|
|
2783
|
+
*
|
|
2784
|
+
* Can be set by passing a `label` parameter when triggering the workflow
|
|
2785
|
+
* with `client.trigger`:
|
|
2786
|
+
*
|
|
2787
|
+
* ```ts
|
|
2788
|
+
* await client.trigger({
|
|
2789
|
+
* url: "https://workflow-endpoint.com",
|
|
2790
|
+
* label: "my-label"
|
|
2791
|
+
* });
|
|
2792
|
+
* ```
|
|
2793
|
+
*/
|
|
2794
|
+
label;
|
|
2774
2795
|
constructor({
|
|
2775
2796
|
qstashClient,
|
|
2776
2797
|
workflowRunId,
|
|
@@ -2785,7 +2806,8 @@ var WorkflowContext = class {
|
|
|
2785
2806
|
retryDelay,
|
|
2786
2807
|
telemetry,
|
|
2787
2808
|
invokeCount,
|
|
2788
|
-
flowControl
|
|
2809
|
+
flowControl,
|
|
2810
|
+
label
|
|
2789
2811
|
}) {
|
|
2790
2812
|
this.qstashClient = qstashClient;
|
|
2791
2813
|
this.workflowRunId = workflowRunId;
|
|
@@ -2798,6 +2820,7 @@ var WorkflowContext = class {
|
|
|
2798
2820
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
2799
2821
|
this.retryDelay = retryDelay;
|
|
2800
2822
|
this.flowControl = flowControl;
|
|
2823
|
+
this.label = label;
|
|
2801
2824
|
this.executor = new AutoExecutor(this, this.steps, telemetry, invokeCount, debug);
|
|
2802
2825
|
}
|
|
2803
2826
|
/**
|
|
@@ -3098,7 +3121,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3098
3121
|
env: context.env,
|
|
3099
3122
|
retries: context.retries,
|
|
3100
3123
|
retryDelay: context.retryDelay,
|
|
3101
|
-
flowControl: context.flowControl
|
|
3124
|
+
flowControl: context.flowControl,
|
|
3125
|
+
label: context.label
|
|
3102
3126
|
});
|
|
3103
3127
|
try {
|
|
3104
3128
|
await routeFunction(disabledContext);
|
|
@@ -3275,11 +3299,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3275
3299
|
if (!errorMessage) {
|
|
3276
3300
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3277
3301
|
}
|
|
3302
|
+
const userHeaders = recreateUserHeaders(request.headers);
|
|
3278
3303
|
const workflowContext = new WorkflowContext({
|
|
3279
3304
|
qstashClient,
|
|
3280
3305
|
workflowRunId,
|
|
3281
3306
|
initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
|
|
3282
|
-
headers:
|
|
3307
|
+
headers: userHeaders,
|
|
3283
3308
|
steps: [],
|
|
3284
3309
|
url,
|
|
3285
3310
|
failureUrl: url,
|
|
@@ -3288,8 +3313,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3288
3313
|
retries,
|
|
3289
3314
|
retryDelay,
|
|
3290
3315
|
flowControl,
|
|
3291
|
-
telemetry: void 0
|
|
3316
|
+
telemetry: void 0,
|
|
3292
3317
|
// not going to make requests in authentication check
|
|
3318
|
+
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
|
|
3293
3319
|
});
|
|
3294
3320
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
3295
3321
|
routeFunction,
|
|
@@ -3498,6 +3524,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3498
3524
|
});
|
|
3499
3525
|
}
|
|
3500
3526
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3527
|
+
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3501
3528
|
const workflowContext = new WorkflowContext({
|
|
3502
3529
|
qstashClient,
|
|
3503
3530
|
workflowRunId,
|
|
@@ -3512,7 +3539,8 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3512
3539
|
retryDelay,
|
|
3513
3540
|
telemetry,
|
|
3514
3541
|
invokeCount,
|
|
3515
|
-
flowControl
|
|
3542
|
+
flowControl,
|
|
3543
|
+
label
|
|
3516
3544
|
});
|
|
3517
3545
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
3518
3546
|
routeFunction,
|
package/nextjs.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@upstash/workflow","version":"v0.2.
|
|
1
|
+
{"name":"@upstash/workflow","version":"v0.2.18","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git+https://github.com/upstash/workflow-ts.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@ai-sdk/anthropic":"^1.1.15","@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@types/bun":"^1.1.10","@types/express":"^5.0.3","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^5.1.0","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.20","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@ai-sdk/openai":"^1.2.1","@upstash/qstash":"^2.8.2","ai":"^4.1.54","zod":"^3.24.1"},"directories":{"example":"examples"}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PublicServeOptions, R as RouteFunction, x as InvokableWorkflow } from './types
|
|
1
|
+
import { n as PublicServeOptions, R as RouteFunction, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
|
|
2
2
|
|
|
3
3
|
type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
|
|
4
4
|
declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PublicServeOptions, R as RouteFunction, x as InvokableWorkflow } from './types
|
|
1
|
+
import { n as PublicServeOptions, R as RouteFunction, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
|
|
2
2
|
|
|
3
3
|
type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
|
|
4
4
|
declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
|
package/solidjs.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIEvent } from '@solidjs/start/server';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions } from './types
|
|
2
|
+
import { R as RouteFunction, n as PublicServeOptions } from './types-B7_5AkKQ.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
package/solidjs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIEvent } from '@solidjs/start/server';
|
|
2
|
-
import { R as RouteFunction, n as PublicServeOptions } from './types
|
|
2
|
+
import { R as RouteFunction, n as PublicServeOptions } from './types-B7_5AkKQ.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'ai';
|
package/solidjs.js
CHANGED
|
@@ -84,12 +84,13 @@ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
|
84
84
|
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
85
85
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
86
86
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
87
|
+
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
87
88
|
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
88
89
|
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
89
90
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
90
91
|
var NO_CONCURRENCY = 1;
|
|
91
92
|
var DEFAULT_RETRIES = 3;
|
|
92
|
-
var VERSION = "v0.2.
|
|
93
|
+
var VERSION = "v0.2.18";
|
|
93
94
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
94
95
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
95
96
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -633,6 +634,9 @@ var triggerFirstInvocation = async (params) => {
|
|
|
633
634
|
if (useJSONContent) {
|
|
634
635
|
headers["content-type"] = "application/json";
|
|
635
636
|
}
|
|
637
|
+
if (workflowContext.label) {
|
|
638
|
+
headers[WORKFLOW_LABEL_HEADER] = workflowContext.label;
|
|
639
|
+
}
|
|
636
640
|
const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
|
|
637
641
|
return {
|
|
638
642
|
headers,
|
|
@@ -733,10 +737,11 @@ var recreateUserHeaders = (headers) => {
|
|
|
733
737
|
const pairs = headers.entries();
|
|
734
738
|
for (const [header, value] of pairs) {
|
|
735
739
|
const headerLowerCase = header.toLowerCase();
|
|
736
|
-
|
|
740
|
+
const isUserHeader = !headerLowerCase.startsWith("upstash-workflow-") && // https://vercel.com/docs/edge-network/headers/request-headers#x-vercel-id
|
|
737
741
|
!headerLowerCase.startsWith("x-vercel-") && !headerLowerCase.startsWith("x-forwarded-") && // https://blog.cloudflare.com/preventing-request-loops-using-cdn-loop/
|
|
738
742
|
headerLowerCase !== "cf-connecting-ip" && headerLowerCase !== "cdn-loop" && headerLowerCase !== "cf-ew-via" && headerLowerCase !== "cf-ray" && // For Render https://render.com
|
|
739
|
-
headerLowerCase !== "render-proxy-ttl")
|
|
743
|
+
headerLowerCase !== "render-proxy-ttl" || headerLowerCase === WORKFLOW_LABEL_HEADER.toLocaleLowerCase();
|
|
744
|
+
if (isUserHeader) {
|
|
740
745
|
filteredHeaders.append(header, value);
|
|
741
746
|
}
|
|
742
747
|
}
|
|
@@ -2699,6 +2704,22 @@ var WorkflowContext = class {
|
|
|
2699
2704
|
* and number of requests per second with the same key.
|
|
2700
2705
|
*/
|
|
2701
2706
|
flowControl;
|
|
2707
|
+
/**
|
|
2708
|
+
* Label to apply to the workflow run.
|
|
2709
|
+
*
|
|
2710
|
+
* Can be used to filter the workflow run logs.
|
|
2711
|
+
*
|
|
2712
|
+
* Can be set by passing a `label` parameter when triggering the workflow
|
|
2713
|
+
* with `client.trigger`:
|
|
2714
|
+
*
|
|
2715
|
+
* ```ts
|
|
2716
|
+
* await client.trigger({
|
|
2717
|
+
* url: "https://workflow-endpoint.com",
|
|
2718
|
+
* label: "my-label"
|
|
2719
|
+
* });
|
|
2720
|
+
* ```
|
|
2721
|
+
*/
|
|
2722
|
+
label;
|
|
2702
2723
|
constructor({
|
|
2703
2724
|
qstashClient,
|
|
2704
2725
|
workflowRunId,
|
|
@@ -2713,7 +2734,8 @@ var WorkflowContext = class {
|
|
|
2713
2734
|
retryDelay,
|
|
2714
2735
|
telemetry,
|
|
2715
2736
|
invokeCount,
|
|
2716
|
-
flowControl
|
|
2737
|
+
flowControl,
|
|
2738
|
+
label
|
|
2717
2739
|
}) {
|
|
2718
2740
|
this.qstashClient = qstashClient;
|
|
2719
2741
|
this.workflowRunId = workflowRunId;
|
|
@@ -2726,6 +2748,7 @@ var WorkflowContext = class {
|
|
|
2726
2748
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
2727
2749
|
this.retryDelay = retryDelay;
|
|
2728
2750
|
this.flowControl = flowControl;
|
|
2751
|
+
this.label = label;
|
|
2729
2752
|
this.executor = new AutoExecutor(this, this.steps, telemetry, invokeCount, debug);
|
|
2730
2753
|
}
|
|
2731
2754
|
/**
|
|
@@ -3026,7 +3049,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3026
3049
|
env: context.env,
|
|
3027
3050
|
retries: context.retries,
|
|
3028
3051
|
retryDelay: context.retryDelay,
|
|
3029
|
-
flowControl: context.flowControl
|
|
3052
|
+
flowControl: context.flowControl,
|
|
3053
|
+
label: context.label
|
|
3030
3054
|
});
|
|
3031
3055
|
try {
|
|
3032
3056
|
await routeFunction(disabledContext);
|
|
@@ -3203,11 +3227,12 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3203
3227
|
if (!errorMessage) {
|
|
3204
3228
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3205
3229
|
}
|
|
3230
|
+
const userHeaders = recreateUserHeaders(request.headers);
|
|
3206
3231
|
const workflowContext = new WorkflowContext({
|
|
3207
3232
|
qstashClient,
|
|
3208
3233
|
workflowRunId,
|
|
3209
3234
|
initialPayload: sourceBody ? initialPayloadParser(decodeBase64(sourceBody)) : void 0,
|
|
3210
|
-
headers:
|
|
3235
|
+
headers: userHeaders,
|
|
3211
3236
|
steps: [],
|
|
3212
3237
|
url,
|
|
3213
3238
|
failureUrl: url,
|
|
@@ -3216,8 +3241,9 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
3216
3241
|
retries,
|
|
3217
3242
|
retryDelay,
|
|
3218
3243
|
flowControl,
|
|
3219
|
-
telemetry: void 0
|
|
3244
|
+
telemetry: void 0,
|
|
3220
3245
|
// not going to make requests in authentication check
|
|
3246
|
+
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0
|
|
3221
3247
|
});
|
|
3222
3248
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
3223
3249
|
routeFunction,
|
|
@@ -3426,6 +3452,7 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3426
3452
|
});
|
|
3427
3453
|
}
|
|
3428
3454
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3455
|
+
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3429
3456
|
const workflowContext = new WorkflowContext({
|
|
3430
3457
|
qstashClient,
|
|
3431
3458
|
workflowRunId,
|
|
@@ -3440,7 +3467,8 @@ var serveBase = (routeFunction, telemetry, options) => {
|
|
|
3440
3467
|
retryDelay,
|
|
3441
3468
|
telemetry,
|
|
3442
3469
|
invokeCount,
|
|
3443
|
-
flowControl
|
|
3470
|
+
flowControl,
|
|
3471
|
+
label
|
|
3444
3472
|
});
|
|
3445
3473
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
3446
3474
|
routeFunction,
|
package/solidjs.mjs
CHANGED
package/svelte.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _sveltejs_kit from '@sveltejs/kit';
|
|
2
2
|
import { RequestHandler } from '@sveltejs/kit';
|
|
3
|
-
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
3
|
+
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.mjs';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-CEUYWQvV.mjs';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|
package/svelte.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _sveltejs_kit from '@sveltejs/kit';
|
|
2
2
|
import { RequestHandler } from '@sveltejs/kit';
|
|
3
|
-
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
3
|
+
import { R as RouteFunction, n as PublicServeOptions, x as InvokableWorkflow } from './types-B7_5AkKQ.js';
|
|
4
|
+
import { s as serveManyBase } from './serve-many-BObe3pdI.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'ai';
|
package/svelte.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/svelte.mjs
CHANGED
|
@@ -913,7 +913,23 @@ declare class WorkflowContext<TInitialPayload = unknown> {
|
|
|
913
913
|
* and number of requests per second with the same key.
|
|
914
914
|
*/
|
|
915
915
|
readonly flowControl?: FlowControl;
|
|
916
|
-
|
|
916
|
+
/**
|
|
917
|
+
* Label to apply to the workflow run.
|
|
918
|
+
*
|
|
919
|
+
* Can be used to filter the workflow run logs.
|
|
920
|
+
*
|
|
921
|
+
* Can be set by passing a `label` parameter when triggering the workflow
|
|
922
|
+
* with `client.trigger`:
|
|
923
|
+
*
|
|
924
|
+
* ```ts
|
|
925
|
+
* await client.trigger({
|
|
926
|
+
* url: "https://workflow-endpoint.com",
|
|
927
|
+
* label: "my-label"
|
|
928
|
+
* });
|
|
929
|
+
* ```
|
|
930
|
+
*/
|
|
931
|
+
readonly label?: string;
|
|
932
|
+
constructor({ qstashClient, workflowRunId, headers, steps, url, failureUrl, debug, initialPayload, env, retries, retryDelay, telemetry, invokeCount, flowControl, label, }: {
|
|
917
933
|
qstashClient: WorkflowClient;
|
|
918
934
|
workflowRunId: string;
|
|
919
935
|
headers: Headers;
|
|
@@ -928,6 +944,7 @@ declare class WorkflowContext<TInitialPayload = unknown> {
|
|
|
928
944
|
telemetry?: Telemetry;
|
|
929
945
|
invokeCount?: number;
|
|
930
946
|
flowControl?: FlowControl;
|
|
947
|
+
label?: string;
|
|
931
948
|
});
|
|
932
949
|
/**
|
|
933
950
|
* Executes a workflow step
|
|
@@ -913,7 +913,23 @@ declare class WorkflowContext<TInitialPayload = unknown> {
|
|
|
913
913
|
* and number of requests per second with the same key.
|
|
914
914
|
*/
|
|
915
915
|
readonly flowControl?: FlowControl;
|
|
916
|
-
|
|
916
|
+
/**
|
|
917
|
+
* Label to apply to the workflow run.
|
|
918
|
+
*
|
|
919
|
+
* Can be used to filter the workflow run logs.
|
|
920
|
+
*
|
|
921
|
+
* Can be set by passing a `label` parameter when triggering the workflow
|
|
922
|
+
* with `client.trigger`:
|
|
923
|
+
*
|
|
924
|
+
* ```ts
|
|
925
|
+
* await client.trigger({
|
|
926
|
+
* url: "https://workflow-endpoint.com",
|
|
927
|
+
* label: "my-label"
|
|
928
|
+
* });
|
|
929
|
+
* ```
|
|
930
|
+
*/
|
|
931
|
+
readonly label?: string;
|
|
932
|
+
constructor({ qstashClient, workflowRunId, headers, steps, url, failureUrl, debug, initialPayload, env, retries, retryDelay, telemetry, invokeCount, flowControl, label, }: {
|
|
917
933
|
qstashClient: WorkflowClient;
|
|
918
934
|
workflowRunId: string;
|
|
919
935
|
headers: Headers;
|
|
@@ -928,6 +944,7 @@ declare class WorkflowContext<TInitialPayload = unknown> {
|
|
|
928
944
|
telemetry?: Telemetry;
|
|
929
945
|
invokeCount?: number;
|
|
930
946
|
flowControl?: FlowControl;
|
|
947
|
+
label?: string;
|
|
931
948
|
});
|
|
932
949
|
/**
|
|
933
950
|
* Executes a workflow step
|