@upstash/workflow 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/astro.d.mts +2 -2
- package/astro.d.ts +2 -2
- package/astro.js +31 -5
- package/astro.mjs +1 -1
- package/{chunk-THS5AX2D.mjs → chunk-G24J5PCC.mjs} +31 -5
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +31 -5
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +31 -5
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +31 -5
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +31 -5
- package/hono.mjs +1 -1
- package/index.d.mts +2 -2
- package/index.d.ts +2 -2
- package/index.js +31 -5
- package/index.mjs +1 -1
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +31 -5
- package/nextjs.mjs +1 -1
- package/package.json +1 -1
- package/react-router.d.mts +2 -2
- package/react-router.d.ts +2 -2
- package/react-router.js +31 -5
- package/react-router.mjs +1 -1
- package/{serve-many-C6sa_DxN.d.mts → serve-many-D3D9uE4u.d.mts} +1 -1
- package/{serve-many-B-fe7bh7.d.ts → serve-many-kPOasiyb.d.ts} +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +31 -5
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +31 -5
- package/svelte.mjs +1 -1
- package/tanstack.d.mts +2 -2
- package/tanstack.d.ts +2 -2
- package/tanstack.js +31 -5
- package/tanstack.mjs +1 -1
- package/{types-B2S08hRU.d.ts → types-B_E1VAK6.d.mts} +9 -1
- package/{types-B2S08hRU.d.mts → types-B_E1VAK6.d.ts} +9 -1
package/README.md
CHANGED
|
@@ -108,6 +108,16 @@ const result = await client.getWaiters({
|
|
|
108
108
|
});
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
## Local Development
|
|
112
|
+
|
|
113
|
+
For local development, set `QSTASH_DEV=true` in your environment and the SDK will automatically download and run a local QStash dev server. No tokens or signing keys required: workflow endpoints will verify signatures against the dev server's keys automatically.
|
|
114
|
+
|
|
115
|
+
```bash .env
|
|
116
|
+
QSTASH_DEV=true
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
See [Local Development](https://upstash.com/docs/workflow/howto/local-development/development-server) for details.
|
|
120
|
+
|
|
111
121
|
## Telemetry
|
|
112
122
|
|
|
113
123
|
This sdk sends anonymous telemetry headers to help us improve your experience.
|
package/astro.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import { u as WorkflowContext, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { u as WorkflowContext, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
package/astro.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import { u as WorkflowContext, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { u as WorkflowContext, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-kPOasiyb.js';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
package/astro.js
CHANGED
|
@@ -192,6 +192,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
|
192
192
|
var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
|
|
193
193
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
194
194
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
195
|
+
var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
|
|
195
196
|
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
196
197
|
var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
|
|
197
198
|
var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
|
|
@@ -200,7 +201,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
200
201
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
201
202
|
var NO_CONCURRENCY = 1;
|
|
202
203
|
var DEFAULT_RETRIES = 3;
|
|
203
|
-
var VERSION = "v1.
|
|
204
|
+
var VERSION = "v1.2.1";
|
|
204
205
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
205
206
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
206
207
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -855,6 +856,9 @@ var recreateUserHeaders = (headers) => {
|
|
|
855
856
|
}
|
|
856
857
|
return filteredHeaders;
|
|
857
858
|
};
|
|
859
|
+
var isThirdPartyCallResult = (request) => {
|
|
860
|
+
return request.headers.get("Upstash-Workflow-Callback") !== null;
|
|
861
|
+
};
|
|
858
862
|
var handleThirdPartyCallResult = async ({
|
|
859
863
|
request,
|
|
860
864
|
requestPayload,
|
|
@@ -864,7 +868,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
864
868
|
middlewareManager
|
|
865
869
|
}) => {
|
|
866
870
|
try {
|
|
867
|
-
if (request
|
|
871
|
+
if (isThirdPartyCallResult(request)) {
|
|
868
872
|
let callbackPayload;
|
|
869
873
|
if (requestPayload) {
|
|
870
874
|
callbackPayload = requestPayload;
|
|
@@ -2707,6 +2711,13 @@ var WorkflowContext = class {
|
|
|
2707
2711
|
* ```
|
|
2708
2712
|
*/
|
|
2709
2713
|
label;
|
|
2714
|
+
/**
|
|
2715
|
+
* Number of times QStash has retried delivering the current request.
|
|
2716
|
+
*
|
|
2717
|
+
* Sourced from the `Upstash-Retried` header. `0` on the first delivery,
|
|
2718
|
+
* `1` on the first retry, `2` on the second, and so on.
|
|
2719
|
+
*/
|
|
2720
|
+
retried;
|
|
2710
2721
|
constructor({
|
|
2711
2722
|
qstashClient,
|
|
2712
2723
|
workflowRunId,
|
|
@@ -2719,6 +2730,7 @@ var WorkflowContext = class {
|
|
|
2719
2730
|
telemetry: telemetry2,
|
|
2720
2731
|
invokeCount,
|
|
2721
2732
|
label,
|
|
2733
|
+
retried,
|
|
2722
2734
|
middlewareManager
|
|
2723
2735
|
}) {
|
|
2724
2736
|
this.qstashClient = qstashClient;
|
|
@@ -2730,6 +2742,7 @@ var WorkflowContext = class {
|
|
|
2730
2742
|
this.requestPayload = initialPayload;
|
|
2731
2743
|
this.env = env ?? {};
|
|
2732
2744
|
this.label = label;
|
|
2745
|
+
this.retried = retried ?? 0;
|
|
2733
2746
|
const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
|
|
2734
2747
|
middlewareManagerInstance.assignContext(this);
|
|
2735
2748
|
this.executor = new AutoExecutor(
|
|
@@ -2993,7 +3006,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2993
3006
|
const disabledContext = new _DisabledWorkflowContext({
|
|
2994
3007
|
qstashClient: new import_qstash10.Client({
|
|
2995
3008
|
baseUrl: "disabled-client",
|
|
2996
|
-
token: "disabled-client"
|
|
3009
|
+
token: "disabled-client",
|
|
3010
|
+
devMode: false
|
|
2997
3011
|
}),
|
|
2998
3012
|
workflowRunId: context.workflowRunId,
|
|
2999
3013
|
workflowRunCreatedAt: context.workflowRunCreatedAt,
|
|
@@ -3002,7 +3016,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3002
3016
|
url: context.url,
|
|
3003
3017
|
initialPayload: context.requestPayload,
|
|
3004
3018
|
env: context.env,
|
|
3005
|
-
label: context.label
|
|
3019
|
+
label: context.label,
|
|
3020
|
+
retried: context.retried
|
|
3006
3021
|
});
|
|
3007
3022
|
try {
|
|
3008
3023
|
await routeFunction(disabledContext);
|
|
@@ -3218,6 +3233,7 @@ var handleFailure = async ({
|
|
|
3218
3233
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3219
3234
|
}
|
|
3220
3235
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
3236
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3221
3237
|
const workflowContext = new WorkflowContext({
|
|
3222
3238
|
qstashClient,
|
|
3223
3239
|
workflowRunId,
|
|
@@ -3229,6 +3245,7 @@ var handleFailure = async ({
|
|
|
3229
3245
|
telemetry: void 0,
|
|
3230
3246
|
// not going to make requests in authentication check
|
|
3231
3247
|
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
|
|
3248
|
+
retried,
|
|
3232
3249
|
workflowRunCreatedAt: workflowCreatedAt,
|
|
3233
3250
|
middlewareManager: void 0
|
|
3234
3251
|
});
|
|
@@ -3388,6 +3405,9 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3388
3405
|
if (receiverConfig === "set-to-undefined") {
|
|
3389
3406
|
return void 0;
|
|
3390
3407
|
}
|
|
3408
|
+
if (isQStashDevModeEnabled(environment)) {
|
|
3409
|
+
return new import_qstash11.Receiver({ devMode: true });
|
|
3410
|
+
}
|
|
3391
3411
|
const receiverEnv = readReceiverEnvironmentVariables(environment, region);
|
|
3392
3412
|
return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
|
|
3393
3413
|
currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
|
|
@@ -3397,6 +3417,10 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3397
3417
|
return receiverConfig;
|
|
3398
3418
|
}
|
|
3399
3419
|
};
|
|
3420
|
+
var isQStashDevModeEnabled = (env) => {
|
|
3421
|
+
const value = env.QSTASH_DEV;
|
|
3422
|
+
return value === "true" || value === "1";
|
|
3423
|
+
};
|
|
3400
3424
|
var getQStashHandlerOptions = (...params) => {
|
|
3401
3425
|
const handlers = getQStashHandlers(...params);
|
|
3402
3426
|
return {
|
|
@@ -3706,12 +3730,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3706
3730
|
);
|
|
3707
3731
|
}
|
|
3708
3732
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3733
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3709
3734
|
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3710
3735
|
const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
|
|
3711
3736
|
const workflowContext = new WorkflowContext({
|
|
3712
3737
|
qstashClient: regionalClient,
|
|
3713
3738
|
workflowRunId,
|
|
3714
|
-
initialPayload: initialPayloadParser(rawInitialPayload),
|
|
3739
|
+
initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
|
|
3715
3740
|
headers: recreateUserHeaders(request.headers),
|
|
3716
3741
|
steps,
|
|
3717
3742
|
url: workflowUrl,
|
|
@@ -3719,6 +3744,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3719
3744
|
telemetry: telemetry2,
|
|
3720
3745
|
invokeCount,
|
|
3721
3746
|
label,
|
|
3747
|
+
retried,
|
|
3722
3748
|
workflowRunCreatedAt: Number(workflowRunCreatedAt),
|
|
3723
3749
|
middlewareManager
|
|
3724
3750
|
});
|
package/astro.mjs
CHANGED
|
@@ -103,6 +103,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
|
103
103
|
var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
|
|
104
104
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
105
105
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
106
|
+
var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
|
|
106
107
|
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
107
108
|
var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
|
|
108
109
|
var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
|
|
@@ -111,7 +112,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
111
112
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
112
113
|
var NO_CONCURRENCY = 1;
|
|
113
114
|
var DEFAULT_RETRIES = 3;
|
|
114
|
-
var VERSION = "v1.
|
|
115
|
+
var VERSION = "v1.2.1";
|
|
115
116
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
116
117
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
117
118
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -967,6 +968,9 @@ var recreateUserHeaders = (headers) => {
|
|
|
967
968
|
}
|
|
968
969
|
return filteredHeaders;
|
|
969
970
|
};
|
|
971
|
+
var isThirdPartyCallResult = (request) => {
|
|
972
|
+
return request.headers.get("Upstash-Workflow-Callback") !== null;
|
|
973
|
+
};
|
|
970
974
|
var handleThirdPartyCallResult = async ({
|
|
971
975
|
request,
|
|
972
976
|
requestPayload,
|
|
@@ -976,7 +980,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
976
980
|
middlewareManager
|
|
977
981
|
}) => {
|
|
978
982
|
try {
|
|
979
|
-
if (request
|
|
983
|
+
if (isThirdPartyCallResult(request)) {
|
|
980
984
|
let callbackPayload;
|
|
981
985
|
if (requestPayload) {
|
|
982
986
|
callbackPayload = requestPayload;
|
|
@@ -2744,6 +2748,13 @@ var WorkflowContext = class {
|
|
|
2744
2748
|
* ```
|
|
2745
2749
|
*/
|
|
2746
2750
|
label;
|
|
2751
|
+
/**
|
|
2752
|
+
* Number of times QStash has retried delivering the current request.
|
|
2753
|
+
*
|
|
2754
|
+
* Sourced from the `Upstash-Retried` header. `0` on the first delivery,
|
|
2755
|
+
* `1` on the first retry, `2` on the second, and so on.
|
|
2756
|
+
*/
|
|
2757
|
+
retried;
|
|
2747
2758
|
constructor({
|
|
2748
2759
|
qstashClient,
|
|
2749
2760
|
workflowRunId,
|
|
@@ -2756,6 +2767,7 @@ var WorkflowContext = class {
|
|
|
2756
2767
|
telemetry,
|
|
2757
2768
|
invokeCount,
|
|
2758
2769
|
label,
|
|
2770
|
+
retried,
|
|
2759
2771
|
middlewareManager
|
|
2760
2772
|
}) {
|
|
2761
2773
|
this.qstashClient = qstashClient;
|
|
@@ -2767,6 +2779,7 @@ var WorkflowContext = class {
|
|
|
2767
2779
|
this.requestPayload = initialPayload;
|
|
2768
2780
|
this.env = env ?? {};
|
|
2769
2781
|
this.label = label;
|
|
2782
|
+
this.retried = retried ?? 0;
|
|
2770
2783
|
const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
|
|
2771
2784
|
middlewareManagerInstance.assignContext(this);
|
|
2772
2785
|
this.executor = new AutoExecutor(
|
|
@@ -3104,7 +3117,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3104
3117
|
const disabledContext = new _DisabledWorkflowContext({
|
|
3105
3118
|
qstashClient: new Client2({
|
|
3106
3119
|
baseUrl: "disabled-client",
|
|
3107
|
-
token: "disabled-client"
|
|
3120
|
+
token: "disabled-client",
|
|
3121
|
+
devMode: false
|
|
3108
3122
|
}),
|
|
3109
3123
|
workflowRunId: context.workflowRunId,
|
|
3110
3124
|
workflowRunCreatedAt: context.workflowRunCreatedAt,
|
|
@@ -3113,7 +3127,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3113
3127
|
url: context.url,
|
|
3114
3128
|
initialPayload: context.requestPayload,
|
|
3115
3129
|
env: context.env,
|
|
3116
|
-
label: context.label
|
|
3130
|
+
label: context.label,
|
|
3131
|
+
retried: context.retried
|
|
3117
3132
|
});
|
|
3118
3133
|
try {
|
|
3119
3134
|
await routeFunction(disabledContext);
|
|
@@ -3329,6 +3344,7 @@ var handleFailure = async ({
|
|
|
3329
3344
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3330
3345
|
}
|
|
3331
3346
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
3347
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3332
3348
|
const workflowContext = new WorkflowContext({
|
|
3333
3349
|
qstashClient,
|
|
3334
3350
|
workflowRunId,
|
|
@@ -3340,6 +3356,7 @@ var handleFailure = async ({
|
|
|
3340
3356
|
telemetry: void 0,
|
|
3341
3357
|
// not going to make requests in authentication check
|
|
3342
3358
|
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
|
|
3359
|
+
retried,
|
|
3343
3360
|
workflowRunCreatedAt: workflowCreatedAt,
|
|
3344
3361
|
middlewareManager: void 0
|
|
3345
3362
|
});
|
|
@@ -3499,6 +3516,9 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3499
3516
|
if (receiverConfig === "set-to-undefined") {
|
|
3500
3517
|
return void 0;
|
|
3501
3518
|
}
|
|
3519
|
+
if (isQStashDevModeEnabled(environment)) {
|
|
3520
|
+
return new Receiver({ devMode: true });
|
|
3521
|
+
}
|
|
3502
3522
|
const receiverEnv = readReceiverEnvironmentVariables(environment, region);
|
|
3503
3523
|
return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new Receiver({
|
|
3504
3524
|
currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
|
|
@@ -3508,6 +3528,10 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3508
3528
|
return receiverConfig;
|
|
3509
3529
|
}
|
|
3510
3530
|
};
|
|
3531
|
+
var isQStashDevModeEnabled = (env) => {
|
|
3532
|
+
const value = env.QSTASH_DEV;
|
|
3533
|
+
return value === "true" || value === "1";
|
|
3534
|
+
};
|
|
3511
3535
|
var getQStashHandlerOptions = (...params) => {
|
|
3512
3536
|
const handlers = getQStashHandlers(...params);
|
|
3513
3537
|
return {
|
|
@@ -3743,12 +3767,13 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3743
3767
|
);
|
|
3744
3768
|
}
|
|
3745
3769
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3770
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3746
3771
|
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3747
3772
|
const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
|
|
3748
3773
|
const workflowContext = new WorkflowContext({
|
|
3749
3774
|
qstashClient: regionalClient,
|
|
3750
3775
|
workflowRunId,
|
|
3751
|
-
initialPayload: initialPayloadParser(rawInitialPayload),
|
|
3776
|
+
initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
|
|
3752
3777
|
headers: recreateUserHeaders(request.headers),
|
|
3753
3778
|
steps,
|
|
3754
3779
|
url: workflowUrl,
|
|
@@ -3756,6 +3781,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3756
3781
|
telemetry,
|
|
3757
3782
|
invokeCount,
|
|
3758
3783
|
label,
|
|
3784
|
+
retried,
|
|
3759
3785
|
workflowRunCreatedAt: Number(workflowRunCreatedAt),
|
|
3760
3786
|
middlewareManager
|
|
3761
3787
|
});
|
package/cloudflare.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
package/cloudflare.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-kPOasiyb.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
package/cloudflare.js
CHANGED
|
@@ -35,6 +35,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
|
35
35
|
var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
|
|
36
36
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
37
37
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
38
|
+
var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
|
|
38
39
|
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
39
40
|
var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
|
|
40
41
|
var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
|
|
@@ -43,7 +44,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
43
44
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
44
45
|
var NO_CONCURRENCY = 1;
|
|
45
46
|
var DEFAULT_RETRIES = 3;
|
|
46
|
-
var VERSION = "v1.
|
|
47
|
+
var VERSION = "v1.2.1";
|
|
47
48
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
48
49
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
49
50
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -855,6 +856,9 @@ var recreateUserHeaders = (headers) => {
|
|
|
855
856
|
}
|
|
856
857
|
return filteredHeaders;
|
|
857
858
|
};
|
|
859
|
+
var isThirdPartyCallResult = (request) => {
|
|
860
|
+
return request.headers.get("Upstash-Workflow-Callback") !== null;
|
|
861
|
+
};
|
|
858
862
|
var handleThirdPartyCallResult = async ({
|
|
859
863
|
request,
|
|
860
864
|
requestPayload,
|
|
@@ -864,7 +868,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
864
868
|
middlewareManager
|
|
865
869
|
}) => {
|
|
866
870
|
try {
|
|
867
|
-
if (request
|
|
871
|
+
if (isThirdPartyCallResult(request)) {
|
|
868
872
|
let callbackPayload;
|
|
869
873
|
if (requestPayload) {
|
|
870
874
|
callbackPayload = requestPayload;
|
|
@@ -2707,6 +2711,13 @@ var WorkflowContext = class {
|
|
|
2707
2711
|
* ```
|
|
2708
2712
|
*/
|
|
2709
2713
|
label;
|
|
2714
|
+
/**
|
|
2715
|
+
* Number of times QStash has retried delivering the current request.
|
|
2716
|
+
*
|
|
2717
|
+
* Sourced from the `Upstash-Retried` header. `0` on the first delivery,
|
|
2718
|
+
* `1` on the first retry, `2` on the second, and so on.
|
|
2719
|
+
*/
|
|
2720
|
+
retried;
|
|
2710
2721
|
constructor({
|
|
2711
2722
|
qstashClient,
|
|
2712
2723
|
workflowRunId,
|
|
@@ -2719,6 +2730,7 @@ var WorkflowContext = class {
|
|
|
2719
2730
|
telemetry: telemetry2,
|
|
2720
2731
|
invokeCount,
|
|
2721
2732
|
label,
|
|
2733
|
+
retried,
|
|
2722
2734
|
middlewareManager
|
|
2723
2735
|
}) {
|
|
2724
2736
|
this.qstashClient = qstashClient;
|
|
@@ -2730,6 +2742,7 @@ var WorkflowContext = class {
|
|
|
2730
2742
|
this.requestPayload = initialPayload;
|
|
2731
2743
|
this.env = env ?? {};
|
|
2732
2744
|
this.label = label;
|
|
2745
|
+
this.retried = retried ?? 0;
|
|
2733
2746
|
const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
|
|
2734
2747
|
middlewareManagerInstance.assignContext(this);
|
|
2735
2748
|
this.executor = new AutoExecutor(
|
|
@@ -2993,7 +3006,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2993
3006
|
const disabledContext = new _DisabledWorkflowContext({
|
|
2994
3007
|
qstashClient: new import_qstash10.Client({
|
|
2995
3008
|
baseUrl: "disabled-client",
|
|
2996
|
-
token: "disabled-client"
|
|
3009
|
+
token: "disabled-client",
|
|
3010
|
+
devMode: false
|
|
2997
3011
|
}),
|
|
2998
3012
|
workflowRunId: context.workflowRunId,
|
|
2999
3013
|
workflowRunCreatedAt: context.workflowRunCreatedAt,
|
|
@@ -3002,7 +3016,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3002
3016
|
url: context.url,
|
|
3003
3017
|
initialPayload: context.requestPayload,
|
|
3004
3018
|
env: context.env,
|
|
3005
|
-
label: context.label
|
|
3019
|
+
label: context.label,
|
|
3020
|
+
retried: context.retried
|
|
3006
3021
|
});
|
|
3007
3022
|
try {
|
|
3008
3023
|
await routeFunction(disabledContext);
|
|
@@ -3218,6 +3233,7 @@ var handleFailure = async ({
|
|
|
3218
3233
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3219
3234
|
}
|
|
3220
3235
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
3236
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3221
3237
|
const workflowContext = new WorkflowContext({
|
|
3222
3238
|
qstashClient,
|
|
3223
3239
|
workflowRunId,
|
|
@@ -3229,6 +3245,7 @@ var handleFailure = async ({
|
|
|
3229
3245
|
telemetry: void 0,
|
|
3230
3246
|
// not going to make requests in authentication check
|
|
3231
3247
|
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
|
|
3248
|
+
retried,
|
|
3232
3249
|
workflowRunCreatedAt: workflowCreatedAt,
|
|
3233
3250
|
middlewareManager: void 0
|
|
3234
3251
|
});
|
|
@@ -3388,6 +3405,9 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3388
3405
|
if (receiverConfig === "set-to-undefined") {
|
|
3389
3406
|
return void 0;
|
|
3390
3407
|
}
|
|
3408
|
+
if (isQStashDevModeEnabled(environment)) {
|
|
3409
|
+
return new import_qstash11.Receiver({ devMode: true });
|
|
3410
|
+
}
|
|
3391
3411
|
const receiverEnv = readReceiverEnvironmentVariables(environment, region);
|
|
3392
3412
|
return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
|
|
3393
3413
|
currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
|
|
@@ -3397,6 +3417,10 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3397
3417
|
return receiverConfig;
|
|
3398
3418
|
}
|
|
3399
3419
|
};
|
|
3420
|
+
var isQStashDevModeEnabled = (env) => {
|
|
3421
|
+
const value = env.QSTASH_DEV;
|
|
3422
|
+
return value === "true" || value === "1";
|
|
3423
|
+
};
|
|
3400
3424
|
var getQStashHandlerOptions = (...params) => {
|
|
3401
3425
|
const handlers = getQStashHandlers(...params);
|
|
3402
3426
|
return {
|
|
@@ -3706,12 +3730,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3706
3730
|
);
|
|
3707
3731
|
}
|
|
3708
3732
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3733
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3709
3734
|
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3710
3735
|
const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
|
|
3711
3736
|
const workflowContext = new WorkflowContext({
|
|
3712
3737
|
qstashClient: regionalClient,
|
|
3713
3738
|
workflowRunId,
|
|
3714
|
-
initialPayload: initialPayloadParser(rawInitialPayload),
|
|
3739
|
+
initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
|
|
3715
3740
|
headers: recreateUserHeaders(request.headers),
|
|
3716
3741
|
steps,
|
|
3717
3742
|
url: workflowUrl,
|
|
@@ -3719,6 +3744,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3719
3744
|
telemetry: telemetry2,
|
|
3720
3745
|
invokeCount,
|
|
3721
3746
|
label,
|
|
3747
|
+
retried,
|
|
3722
3748
|
workflowRunCreatedAt: Number(workflowRunCreatedAt),
|
|
3723
3749
|
middlewareManager
|
|
3724
3750
|
});
|
package/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 { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
2
|
+
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.mjs';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-D3D9uE4u.mjs';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
|
package/express.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as express_serve_static_core from 'express-serve-static-core';
|
|
2
|
-
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-
|
|
2
|
+
import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B_E1VAK6.js';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-kPOasiyb.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
|
package/express.js
CHANGED
|
@@ -35,6 +35,7 @@ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
|
35
35
|
var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
|
|
36
36
|
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
37
37
|
var WORKFLOW_INVOKE_COUNT_HEADER = "Upstash-Workflow-Invoke-Count";
|
|
38
|
+
var WORKFLOW_RETRIED_HEADER = "Upstash-Retried";
|
|
38
39
|
var WORKFLOW_LABEL_HEADER = "Upstash-Label";
|
|
39
40
|
var WORKFLOW_UNKOWN_SDK_VERSION_HEADER = "Upstash-Workflow-Unknown-Sdk";
|
|
40
41
|
var WORKFLOW_UNKOWN_SDK_TRIGGER_HEADER = "upstash-workflow-trigger-by-sdk";
|
|
@@ -43,7 +44,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
|
43
44
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
44
45
|
var NO_CONCURRENCY = 1;
|
|
45
46
|
var DEFAULT_RETRIES = 3;
|
|
46
|
-
var VERSION = "v1.
|
|
47
|
+
var VERSION = "v1.2.1";
|
|
47
48
|
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
48
49
|
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
49
50
|
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
@@ -855,6 +856,9 @@ var recreateUserHeaders = (headers) => {
|
|
|
855
856
|
}
|
|
856
857
|
return filteredHeaders;
|
|
857
858
|
};
|
|
859
|
+
var isThirdPartyCallResult = (request) => {
|
|
860
|
+
return request.headers.get("Upstash-Workflow-Callback") !== null;
|
|
861
|
+
};
|
|
858
862
|
var handleThirdPartyCallResult = async ({
|
|
859
863
|
request,
|
|
860
864
|
requestPayload,
|
|
@@ -864,7 +868,7 @@ var handleThirdPartyCallResult = async ({
|
|
|
864
868
|
middlewareManager
|
|
865
869
|
}) => {
|
|
866
870
|
try {
|
|
867
|
-
if (request
|
|
871
|
+
if (isThirdPartyCallResult(request)) {
|
|
868
872
|
let callbackPayload;
|
|
869
873
|
if (requestPayload) {
|
|
870
874
|
callbackPayload = requestPayload;
|
|
@@ -2707,6 +2711,13 @@ var WorkflowContext = class {
|
|
|
2707
2711
|
* ```
|
|
2708
2712
|
*/
|
|
2709
2713
|
label;
|
|
2714
|
+
/**
|
|
2715
|
+
* Number of times QStash has retried delivering the current request.
|
|
2716
|
+
*
|
|
2717
|
+
* Sourced from the `Upstash-Retried` header. `0` on the first delivery,
|
|
2718
|
+
* `1` on the first retry, `2` on the second, and so on.
|
|
2719
|
+
*/
|
|
2720
|
+
retried;
|
|
2710
2721
|
constructor({
|
|
2711
2722
|
qstashClient,
|
|
2712
2723
|
workflowRunId,
|
|
@@ -2719,6 +2730,7 @@ var WorkflowContext = class {
|
|
|
2719
2730
|
telemetry: telemetry2,
|
|
2720
2731
|
invokeCount,
|
|
2721
2732
|
label,
|
|
2733
|
+
retried,
|
|
2722
2734
|
middlewareManager
|
|
2723
2735
|
}) {
|
|
2724
2736
|
this.qstashClient = qstashClient;
|
|
@@ -2730,6 +2742,7 @@ var WorkflowContext = class {
|
|
|
2730
2742
|
this.requestPayload = initialPayload;
|
|
2731
2743
|
this.env = env ?? {};
|
|
2732
2744
|
this.label = label;
|
|
2745
|
+
this.retried = retried ?? 0;
|
|
2733
2746
|
const middlewareManagerInstance = middlewareManager ?? new MiddlewareManager([]);
|
|
2734
2747
|
middlewareManagerInstance.assignContext(this);
|
|
2735
2748
|
this.executor = new AutoExecutor(
|
|
@@ -2993,7 +3006,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2993
3006
|
const disabledContext = new _DisabledWorkflowContext({
|
|
2994
3007
|
qstashClient: new import_qstash10.Client({
|
|
2995
3008
|
baseUrl: "disabled-client",
|
|
2996
|
-
token: "disabled-client"
|
|
3009
|
+
token: "disabled-client",
|
|
3010
|
+
devMode: false
|
|
2997
3011
|
}),
|
|
2998
3012
|
workflowRunId: context.workflowRunId,
|
|
2999
3013
|
workflowRunCreatedAt: context.workflowRunCreatedAt,
|
|
@@ -3002,7 +3016,8 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
3002
3016
|
url: context.url,
|
|
3003
3017
|
initialPayload: context.requestPayload,
|
|
3004
3018
|
env: context.env,
|
|
3005
|
-
label: context.label
|
|
3019
|
+
label: context.label,
|
|
3020
|
+
retried: context.retried
|
|
3006
3021
|
});
|
|
3007
3022
|
try {
|
|
3008
3023
|
await routeFunction(disabledContext);
|
|
@@ -3218,6 +3233,7 @@ var handleFailure = async ({
|
|
|
3218
3233
|
errorMessage = `Couldn't parse 'failResponse' in 'failureFunction', received: '${decodedBody}'`;
|
|
3219
3234
|
}
|
|
3220
3235
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
3236
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3221
3237
|
const workflowContext = new WorkflowContext({
|
|
3222
3238
|
qstashClient,
|
|
3223
3239
|
workflowRunId,
|
|
@@ -3229,6 +3245,7 @@ var handleFailure = async ({
|
|
|
3229
3245
|
telemetry: void 0,
|
|
3230
3246
|
// not going to make requests in authentication check
|
|
3231
3247
|
label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
|
|
3248
|
+
retried,
|
|
3232
3249
|
workflowRunCreatedAt: workflowCreatedAt,
|
|
3233
3250
|
middlewareManager: void 0
|
|
3234
3251
|
});
|
|
@@ -3388,6 +3405,9 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3388
3405
|
if (receiverConfig === "set-to-undefined") {
|
|
3389
3406
|
return void 0;
|
|
3390
3407
|
}
|
|
3408
|
+
if (isQStashDevModeEnabled(environment)) {
|
|
3409
|
+
return new import_qstash11.Receiver({ devMode: true });
|
|
3410
|
+
}
|
|
3391
3411
|
const receiverEnv = readReceiverEnvironmentVariables(environment, region);
|
|
3392
3412
|
return receiverEnv.QSTASH_CURRENT_SIGNING_KEY && receiverEnv.QSTASH_NEXT_SIGNING_KEY ? new import_qstash11.Receiver({
|
|
3393
3413
|
currentSigningKey: receiverEnv.QSTASH_CURRENT_SIGNING_KEY,
|
|
@@ -3397,6 +3417,10 @@ var getReceiver = (environment, receiverConfig, region) => {
|
|
|
3397
3417
|
return receiverConfig;
|
|
3398
3418
|
}
|
|
3399
3419
|
};
|
|
3420
|
+
var isQStashDevModeEnabled = (env) => {
|
|
3421
|
+
const value = env.QSTASH_DEV;
|
|
3422
|
+
return value === "true" || value === "1";
|
|
3423
|
+
};
|
|
3400
3424
|
var getQStashHandlerOptions = (...params) => {
|
|
3401
3425
|
const handlers = getQStashHandlers(...params);
|
|
3402
3426
|
return {
|
|
@@ -3706,12 +3730,13 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3706
3730
|
);
|
|
3707
3731
|
}
|
|
3708
3732
|
const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
|
|
3733
|
+
const retried = Number(request.headers.get(WORKFLOW_RETRIED_HEADER) ?? "0");
|
|
3709
3734
|
const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
|
|
3710
3735
|
const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
|
|
3711
3736
|
const workflowContext = new WorkflowContext({
|
|
3712
3737
|
qstashClient: regionalClient,
|
|
3713
3738
|
workflowRunId,
|
|
3714
|
-
initialPayload: initialPayloadParser(rawInitialPayload),
|
|
3739
|
+
initialPayload: isThirdPartyCallResult(request) ? JSON.parse(rawInitialPayload) : initialPayloadParser(rawInitialPayload),
|
|
3715
3740
|
headers: recreateUserHeaders(request.headers),
|
|
3716
3741
|
steps,
|
|
3717
3742
|
url: workflowUrl,
|
|
@@ -3719,6 +3744,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3719
3744
|
telemetry: telemetry2,
|
|
3720
3745
|
invokeCount,
|
|
3721
3746
|
label,
|
|
3747
|
+
retried,
|
|
3722
3748
|
workflowRunCreatedAt: Number(workflowRunCreatedAt),
|
|
3723
3749
|
middlewareManager
|
|
3724
3750
|
});
|