@upstash/workflow 1.1.0 → 1.2.0-demo-rc.1
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 +60 -17
- package/astro.mjs +1 -1
- package/{chunk-C5HFGF7Q.mjs → chunk-NZCQPOPR.mjs} +254 -17
- package/cloudflare.d.mts +2 -2
- package/cloudflare.d.ts +2 -2
- package/cloudflare.js +60 -17
- package/cloudflare.mjs +1 -1
- package/express.d.mts +2 -2
- package/express.d.ts +2 -2
- package/express.js +60 -17
- package/express.mjs +1 -1
- package/h3.d.mts +2 -2
- package/h3.d.ts +2 -2
- package/h3.js +60 -17
- package/h3.mjs +1 -1
- package/hono.d.mts +2 -2
- package/hono.d.ts +2 -2
- package/hono.js +256 -18
- package/hono.mjs +7 -2
- package/index.d.mts +10 -3
- package/index.d.ts +10 -3
- package/index.js +284 -18
- package/index.mjs +37 -2
- package/nextjs.d.mts +2 -2
- package/nextjs.d.ts +2 -2
- package/nextjs.js +254 -17
- package/nextjs.mjs +5 -1
- package/package.json +1 -1
- package/{serve-many-qnfynN1x.d.ts → serve-many-Bi8XaOyq.d.ts} +1 -1
- package/{serve-many-DhB8-zPD.d.mts → serve-many-CppVPJrh.d.mts} +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +60 -17
- package/solidjs.mjs +1 -1
- package/svelte.d.mts +2 -2
- package/svelte.d.ts +2 -2
- package/svelte.js +60 -17
- package/svelte.mjs +1 -1
- package/tanstack.d.mts +2 -2
- package/tanstack.d.ts +2 -2
- package/tanstack.js +60 -17
- package/tanstack.mjs +1 -1
- package/{types-pEje3VEB.d.ts → types-CUwgrpCM.d.mts} +1 -0
- package/{types-pEje3VEB.d.mts → types-CUwgrpCM.d.ts} +1 -0
package/astro.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIContext, APIRoute } from 'astro';
|
|
2
|
-
import { j as WorkflowContext, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { j as WorkflowContext, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.mjs';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-CppVPJrh.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 { j as WorkflowContext, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-
|
|
3
|
-
import { s as serveManyBase } from './serve-many-
|
|
2
|
+
import { j as WorkflowContext, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.js';
|
|
3
|
+
import { s as serveManyBase } from './serve-many-Bi8XaOyq.js';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
package/astro.js
CHANGED
|
@@ -1522,7 +1522,15 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1522
1522
|
return JSON.stringify(request);
|
|
1523
1523
|
}
|
|
1524
1524
|
getHeaders({ context, telemetry: telemetry2, invokeCount }) {
|
|
1525
|
-
const {
|
|
1525
|
+
const {
|
|
1526
|
+
workflow,
|
|
1527
|
+
headers = {},
|
|
1528
|
+
workflowRunId,
|
|
1529
|
+
retries,
|
|
1530
|
+
retryDelay,
|
|
1531
|
+
flowControl,
|
|
1532
|
+
label
|
|
1533
|
+
} = this.params;
|
|
1526
1534
|
const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
|
|
1527
1535
|
const { headers: triggerHeaders, contentType } = getHeaders({
|
|
1528
1536
|
initHeaderValue: "true",
|
|
@@ -1540,6 +1548,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1540
1548
|
userHeaders: new Headers(headers)
|
|
1541
1549
|
});
|
|
1542
1550
|
triggerHeaders["Upstash-Workflow-Invoke"] = "true";
|
|
1551
|
+
if (label) {
|
|
1552
|
+
triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
|
|
1553
|
+
triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
|
|
1554
|
+
}
|
|
1543
1555
|
return { headers: triggerHeaders, contentType };
|
|
1544
1556
|
}
|
|
1545
1557
|
async submitStep({ context, body, headers }) {
|
|
@@ -2918,6 +2930,21 @@ var WorkflowContext = class {
|
|
|
2918
2930
|
}
|
|
2919
2931
|
};
|
|
2920
2932
|
|
|
2933
|
+
// src/dev-server.ts
|
|
2934
|
+
var import_path = require("path");
|
|
2935
|
+
var DEV_QSTASH_TOKEN = "eyJVc2VySUQiOiJkZWZhdWx0VXNlciIsIlBhc3N3b3JkIjoiZGVmYXVsdFBhc3N3b3JkIn0=";
|
|
2936
|
+
var DEV_QSTASH_CURRENT_SIGNING_KEY = "sig_7kYjw48mhY7kAjqNGcy6cr29RJ6r";
|
|
2937
|
+
var DEV_QSTASH_NEXT_SIGNING_KEY = "sig_5ZB6DVzB1wjE8S6rZ7eenA8Pdnhs";
|
|
2938
|
+
function getDevCredentials(port) {
|
|
2939
|
+
return {
|
|
2940
|
+
QSTASH_URL: `http://localhost:${port}`,
|
|
2941
|
+
QSTASH_TOKEN: DEV_QSTASH_TOKEN,
|
|
2942
|
+
QSTASH_CURRENT_SIGNING_KEY: DEV_QSTASH_CURRENT_SIGNING_KEY,
|
|
2943
|
+
QSTASH_NEXT_SIGNING_KEY: DEV_QSTASH_NEXT_SIGNING_KEY
|
|
2944
|
+
};
|
|
2945
|
+
}
|
|
2946
|
+
var CACHE_DIR = (0, import_path.join)("node_modules", ".cache", "upstash");
|
|
2947
|
+
|
|
2921
2948
|
// src/serve/authorization.ts
|
|
2922
2949
|
var import_qstash9 = require("@upstash/qstash");
|
|
2923
2950
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
@@ -3571,19 +3598,33 @@ var AUTH_FAIL_MESSAGE = `Failed to authenticate Workflow request. If this is une
|
|
|
3571
3598
|
|
|
3572
3599
|
// src/serve/index.ts
|
|
3573
3600
|
var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
3574
|
-
const {
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
const
|
|
3601
|
+
const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
|
|
3602
|
+
const devMode = environment.WORKFLOW_DEV === "true";
|
|
3603
|
+
if (devMode) {
|
|
3604
|
+
const port = Number(environment.WORKFLOW_DEV_PORT) || 8080;
|
|
3605
|
+
const creds = getDevCredentials(port);
|
|
3606
|
+
for (const [k, v] of Object.entries(creds)) {
|
|
3607
|
+
if (!environment[k]) {
|
|
3608
|
+
environment[k] = v;
|
|
3609
|
+
}
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
const resolvedOptions = processOptions(
|
|
3613
|
+
options,
|
|
3614
|
+
internalOptions
|
|
3615
|
+
);
|
|
3586
3616
|
const handler = async (request, middlewareManager) => {
|
|
3617
|
+
const {
|
|
3618
|
+
initialPayloadParser,
|
|
3619
|
+
url,
|
|
3620
|
+
failureFunction,
|
|
3621
|
+
baseUrl,
|
|
3622
|
+
env,
|
|
3623
|
+
disableTelemetry: optDisableTelemetry,
|
|
3624
|
+
internal
|
|
3625
|
+
} = resolvedOptions;
|
|
3626
|
+
const currentTelemetry = optDisableTelemetry ? void 0 : telemetry2;
|
|
3627
|
+
const { generateResponse: responseGenerator, useJSONContent } = internal;
|
|
3587
3628
|
await middlewareManager.dispatchDebug("onInfo", {
|
|
3588
3629
|
info: `Received request for workflow execution.`
|
|
3589
3630
|
});
|
|
@@ -3671,7 +3712,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3671
3712
|
steps,
|
|
3672
3713
|
url: workflowUrl,
|
|
3673
3714
|
env,
|
|
3674
|
-
telemetry:
|
|
3715
|
+
telemetry: currentTelemetry,
|
|
3675
3716
|
invokeCount,
|
|
3676
3717
|
label,
|
|
3677
3718
|
middlewareManager
|
|
@@ -3697,7 +3738,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3697
3738
|
requestPayload: rawInitialPayload,
|
|
3698
3739
|
client: regionalClient,
|
|
3699
3740
|
workflowUrl,
|
|
3700
|
-
telemetry:
|
|
3741
|
+
telemetry: currentTelemetry,
|
|
3701
3742
|
middlewareManager
|
|
3702
3743
|
});
|
|
3703
3744
|
if (callReturnCheck.isErr()) {
|
|
@@ -3706,7 +3747,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3706
3747
|
const result = isFirstInvocation ? await triggerFirstInvocation({
|
|
3707
3748
|
workflowContext,
|
|
3708
3749
|
useJSONContent,
|
|
3709
|
-
telemetry:
|
|
3750
|
+
telemetry: currentTelemetry,
|
|
3710
3751
|
invokeCount,
|
|
3711
3752
|
middlewareManager,
|
|
3712
3753
|
unknownSdk
|
|
@@ -3774,7 +3815,9 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3774
3815
|
);
|
|
3775
3816
|
};
|
|
3776
3817
|
const safeHandler = async (request) => {
|
|
3777
|
-
const middlewareManager = new MiddlewareManager(
|
|
3818
|
+
const middlewareManager = new MiddlewareManager(
|
|
3819
|
+
resolvedOptions.middlewares
|
|
3820
|
+
);
|
|
3778
3821
|
try {
|
|
3779
3822
|
return await handler(request, middlewareManager);
|
|
3780
3823
|
} catch (error) {
|
package/astro.mjs
CHANGED
|
@@ -1574,7 +1574,15 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1574
1574
|
return JSON.stringify(request);
|
|
1575
1575
|
}
|
|
1576
1576
|
getHeaders({ context, telemetry, invokeCount }) {
|
|
1577
|
-
const {
|
|
1577
|
+
const {
|
|
1578
|
+
workflow,
|
|
1579
|
+
headers = {},
|
|
1580
|
+
workflowRunId,
|
|
1581
|
+
retries,
|
|
1582
|
+
retryDelay,
|
|
1583
|
+
flowControl,
|
|
1584
|
+
label
|
|
1585
|
+
} = this.params;
|
|
1578
1586
|
const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
|
|
1579
1587
|
const { headers: triggerHeaders, contentType } = getHeaders({
|
|
1580
1588
|
initHeaderValue: "true",
|
|
@@ -1592,6 +1600,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1592
1600
|
userHeaders: new Headers(headers)
|
|
1593
1601
|
});
|
|
1594
1602
|
triggerHeaders["Upstash-Workflow-Invoke"] = "true";
|
|
1603
|
+
if (label) {
|
|
1604
|
+
triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
|
|
1605
|
+
triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
|
|
1606
|
+
}
|
|
1595
1607
|
return { headers: triggerHeaders, contentType };
|
|
1596
1608
|
}
|
|
1597
1609
|
async submitStep({ context, body, headers }) {
|
|
@@ -2895,6 +2907,212 @@ var WorkflowContext = class {
|
|
|
2895
2907
|
}
|
|
2896
2908
|
};
|
|
2897
2909
|
|
|
2910
|
+
// src/dev-server.ts
|
|
2911
|
+
import { execSync, spawn } from "child_process";
|
|
2912
|
+
import { createWriteStream, existsSync, mkdirSync, chmodSync } from "fs";
|
|
2913
|
+
import { get as httpsGetRaw } from "https";
|
|
2914
|
+
import { get as httpGetRaw } from "http";
|
|
2915
|
+
import { join } from "path";
|
|
2916
|
+
import { tmpdir } from "os";
|
|
2917
|
+
var DEV_QSTASH_TOKEN = "eyJVc2VySUQiOiJkZWZhdWx0VXNlciIsIlBhc3N3b3JkIjoiZGVmYXVsdFBhc3N3b3JkIn0=";
|
|
2918
|
+
var DEV_QSTASH_CURRENT_SIGNING_KEY = "sig_7kYjw48mhY7kAjqNGcy6cr29RJ6r";
|
|
2919
|
+
var DEV_QSTASH_NEXT_SIGNING_KEY = "sig_5ZB6DVzB1wjE8S6rZ7eenA8Pdnhs";
|
|
2920
|
+
function getDevCredentials(port) {
|
|
2921
|
+
return {
|
|
2922
|
+
QSTASH_URL: `http://localhost:${port}`,
|
|
2923
|
+
QSTASH_TOKEN: DEV_QSTASH_TOKEN,
|
|
2924
|
+
QSTASH_CURRENT_SIGNING_KEY: DEV_QSTASH_CURRENT_SIGNING_KEY,
|
|
2925
|
+
QSTASH_NEXT_SIGNING_KEY: DEV_QSTASH_NEXT_SIGNING_KEY
|
|
2926
|
+
};
|
|
2927
|
+
}
|
|
2928
|
+
var CACHE_DIR = join("node_modules", ".cache", "upstash");
|
|
2929
|
+
function getPlatformArch() {
|
|
2930
|
+
const platform = process.platform === "darwin" ? "darwin" : "linux";
|
|
2931
|
+
const arch = process.arch === "arm64" ? "arm64" : "amd64";
|
|
2932
|
+
return { platform, arch };
|
|
2933
|
+
}
|
|
2934
|
+
function httpsGet(url) {
|
|
2935
|
+
return new Promise((resolve, reject) => {
|
|
2936
|
+
const request = (currentUrl) => {
|
|
2937
|
+
httpsGetRaw(currentUrl, { headers: { "User-Agent": "upstash-workflow" } }, (res) => {
|
|
2938
|
+
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
2939
|
+
request(res.headers.location);
|
|
2940
|
+
return;
|
|
2941
|
+
}
|
|
2942
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
2943
|
+
reject(new Error(`HTTP ${res.statusCode} fetching ${currentUrl}`));
|
|
2944
|
+
return;
|
|
2945
|
+
}
|
|
2946
|
+
const chunks = [];
|
|
2947
|
+
res.on("data", (chunk) => chunks.push(chunk));
|
|
2948
|
+
res.on("end", () => resolve(Buffer.concat(chunks)));
|
|
2949
|
+
res.on("error", reject);
|
|
2950
|
+
}).on("error", reject);
|
|
2951
|
+
};
|
|
2952
|
+
request(url);
|
|
2953
|
+
});
|
|
2954
|
+
}
|
|
2955
|
+
function downloadToFile(url, dest) {
|
|
2956
|
+
return new Promise((resolve, reject) => {
|
|
2957
|
+
const request = (currentUrl) => {
|
|
2958
|
+
httpsGetRaw(currentUrl, { headers: { "User-Agent": "upstash-workflow" } }, (res) => {
|
|
2959
|
+
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
2960
|
+
request(res.headers.location);
|
|
2961
|
+
return;
|
|
2962
|
+
}
|
|
2963
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
2964
|
+
reject(new Error(`HTTP ${res.statusCode} downloading ${currentUrl}`));
|
|
2965
|
+
return;
|
|
2966
|
+
}
|
|
2967
|
+
const file = createWriteStream(dest);
|
|
2968
|
+
res.pipe(file);
|
|
2969
|
+
file.on("finish", () => {
|
|
2970
|
+
file.close(() => resolve());
|
|
2971
|
+
});
|
|
2972
|
+
file.on("error", reject);
|
|
2973
|
+
}).on("error", reject);
|
|
2974
|
+
};
|
|
2975
|
+
request(url);
|
|
2976
|
+
});
|
|
2977
|
+
}
|
|
2978
|
+
async function resolveLatestVersion() {
|
|
2979
|
+
const data = await httpsGet("https://api.github.com/repos/upstash/qstash-cli/releases/latest");
|
|
2980
|
+
const json = JSON.parse(data.toString());
|
|
2981
|
+
return json.tag_name;
|
|
2982
|
+
}
|
|
2983
|
+
async function ensureBinary() {
|
|
2984
|
+
const version = await resolveLatestVersion();
|
|
2985
|
+
const cacheDir = join(CACHE_DIR, `qstash-server-${version}`);
|
|
2986
|
+
const binaryPath = join(cacheDir, "qstash");
|
|
2987
|
+
if (existsSync(binaryPath)) {
|
|
2988
|
+
return binaryPath;
|
|
2989
|
+
}
|
|
2990
|
+
const { platform, arch } = getPlatformArch();
|
|
2991
|
+
const downloadUrl = `https://artifacts.upstash.com/qstash/versions/${version}/qstash-server_${version}_${platform}_${arch}.tar.gz`;
|
|
2992
|
+
console.log(`[workflow-dev] Downloading QStash server...`);
|
|
2993
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
2994
|
+
const tempFile = join(tmpdir(), `qstash-server-${version}-${Date.now()}.tar.gz`);
|
|
2995
|
+
await downloadToFile(downloadUrl, tempFile);
|
|
2996
|
+
execSync(`tar -xzf "${tempFile}" -C "${cacheDir}"`);
|
|
2997
|
+
chmodSync(binaryPath, 493);
|
|
2998
|
+
return binaryPath;
|
|
2999
|
+
}
|
|
3000
|
+
function startServer(binaryPath, port) {
|
|
3001
|
+
return new Promise((resolve, reject) => {
|
|
3002
|
+
const child = spawn(binaryPath, ["dev", "-port", String(port)], {
|
|
3003
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
3004
|
+
});
|
|
3005
|
+
let resolved = false;
|
|
3006
|
+
const cleanup = () => {
|
|
3007
|
+
if (!child.killed) {
|
|
3008
|
+
child.kill("SIGTERM");
|
|
3009
|
+
}
|
|
3010
|
+
};
|
|
3011
|
+
process.on("exit", cleanup);
|
|
3012
|
+
process.on("SIGINT", () => {
|
|
3013
|
+
cleanup();
|
|
3014
|
+
process.exit(0);
|
|
3015
|
+
});
|
|
3016
|
+
process.on("SIGTERM", () => {
|
|
3017
|
+
cleanup();
|
|
3018
|
+
process.exit(0);
|
|
3019
|
+
});
|
|
3020
|
+
let stdoutBuffer = "";
|
|
3021
|
+
child.stdout.on("data", (data) => {
|
|
3022
|
+
const text = data.toString();
|
|
3023
|
+
stdoutBuffer += text;
|
|
3024
|
+
const lines = stdoutBuffer.split("\n");
|
|
3025
|
+
stdoutBuffer = lines.pop() ?? "";
|
|
3026
|
+
for (const line of lines) {
|
|
3027
|
+
if (line.match(/runn+ing at/) && !resolved) {
|
|
3028
|
+
resolved = true;
|
|
3029
|
+
const creds = getDevCredentials(port);
|
|
3030
|
+
console.log(`[workflow-dev] QStash server running at ${creds.QSTASH_URL}`);
|
|
3031
|
+
console.log(
|
|
3032
|
+
`[workflow-dev] View logs at \x1B[1;32mhttps://console.upstash.com/workflow/local-mode-user/logs\x1B[0m`
|
|
3033
|
+
);
|
|
3034
|
+
resolve(cleanup);
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
});
|
|
3038
|
+
child.stderr.on("data", (data) => {
|
|
3039
|
+
const text = data.toString();
|
|
3040
|
+
if (!resolved) {
|
|
3041
|
+
process.stderr.write(`[workflow-dev] ${text}`);
|
|
3042
|
+
}
|
|
3043
|
+
});
|
|
3044
|
+
child.on("error", (err2) => {
|
|
3045
|
+
if (!resolved) {
|
|
3046
|
+
reject(new Error(`[workflow-dev] Failed to start QStash server: ${err2.message}`));
|
|
3047
|
+
}
|
|
3048
|
+
});
|
|
3049
|
+
child.on("exit", (code) => {
|
|
3050
|
+
if (!resolved) {
|
|
3051
|
+
reject(
|
|
3052
|
+
new Error(`[workflow-dev] QStash server exited with code ${code} before becoming ready`)
|
|
3053
|
+
);
|
|
3054
|
+
}
|
|
3055
|
+
});
|
|
3056
|
+
setTimeout(() => {
|
|
3057
|
+
if (!resolved) {
|
|
3058
|
+
cleanup();
|
|
3059
|
+
reject(new Error("[workflow-dev] QStash server did not become ready within 30 seconds"));
|
|
3060
|
+
}
|
|
3061
|
+
}, 3e4);
|
|
3062
|
+
});
|
|
3063
|
+
}
|
|
3064
|
+
function isDevServerRunning(port) {
|
|
3065
|
+
return new Promise((resolve) => {
|
|
3066
|
+
const req = httpGetRaw(
|
|
3067
|
+
`http://127.0.0.1:${port}/v2/keys`,
|
|
3068
|
+
{
|
|
3069
|
+
headers: { Authorization: `Bearer ${DEV_QSTASH_TOKEN}` },
|
|
3070
|
+
timeout: 2e3
|
|
3071
|
+
},
|
|
3072
|
+
(res) => {
|
|
3073
|
+
if (res.statusCode !== 200) {
|
|
3074
|
+
resolve(false);
|
|
3075
|
+
return;
|
|
3076
|
+
}
|
|
3077
|
+
const chunks = [];
|
|
3078
|
+
res.on("data", (chunk) => chunks.push(chunk));
|
|
3079
|
+
res.on("end", () => {
|
|
3080
|
+
try {
|
|
3081
|
+
const body = JSON.parse(Buffer.concat(chunks).toString());
|
|
3082
|
+
resolve(
|
|
3083
|
+
body.current === DEV_QSTASH_CURRENT_SIGNING_KEY && body.next === DEV_QSTASH_NEXT_SIGNING_KEY
|
|
3084
|
+
);
|
|
3085
|
+
} catch {
|
|
3086
|
+
resolve(false);
|
|
3087
|
+
}
|
|
3088
|
+
});
|
|
3089
|
+
res.on("error", () => resolve(false));
|
|
3090
|
+
}
|
|
3091
|
+
);
|
|
3092
|
+
req.on("error", () => resolve(false));
|
|
3093
|
+
req.on("timeout", () => {
|
|
3094
|
+
req.destroy();
|
|
3095
|
+
resolve(false);
|
|
3096
|
+
});
|
|
3097
|
+
});
|
|
3098
|
+
}
|
|
3099
|
+
var serverPromise = null;
|
|
3100
|
+
var serverCleanup = null;
|
|
3101
|
+
function ensureDevServer(environment) {
|
|
3102
|
+
if (!serverPromise) {
|
|
3103
|
+
const port = Number(environment.WORKFLOW_DEV_PORT) || 8080;
|
|
3104
|
+
serverPromise = isDevServerRunning(port).then((alreadyRunning) => {
|
|
3105
|
+
if (alreadyRunning) {
|
|
3106
|
+
return;
|
|
3107
|
+
}
|
|
3108
|
+
return ensureBinary().then((binaryPath) => startServer(binaryPath, port)).then((cleanup) => {
|
|
3109
|
+
serverCleanup = cleanup;
|
|
3110
|
+
});
|
|
3111
|
+
});
|
|
3112
|
+
}
|
|
3113
|
+
return serverPromise;
|
|
3114
|
+
}
|
|
3115
|
+
|
|
2898
3116
|
// src/middleware/middleware.ts
|
|
2899
3117
|
var WorkflowMiddleware = class {
|
|
2900
3118
|
name;
|
|
@@ -3548,19 +3766,33 @@ var AUTH_FAIL_MESSAGE = `Failed to authenticate Workflow request. If this is une
|
|
|
3548
3766
|
|
|
3549
3767
|
// src/serve/index.ts
|
|
3550
3768
|
var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
3551
|
-
const {
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
const
|
|
3769
|
+
const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
|
|
3770
|
+
const devMode = environment.WORKFLOW_DEV === "true";
|
|
3771
|
+
if (devMode) {
|
|
3772
|
+
const port = Number(environment.WORKFLOW_DEV_PORT) || 8080;
|
|
3773
|
+
const creds = getDevCredentials(port);
|
|
3774
|
+
for (const [k, v] of Object.entries(creds)) {
|
|
3775
|
+
if (!environment[k]) {
|
|
3776
|
+
environment[k] = v;
|
|
3777
|
+
}
|
|
3778
|
+
}
|
|
3779
|
+
}
|
|
3780
|
+
const resolvedOptions = processOptions(
|
|
3781
|
+
options,
|
|
3782
|
+
internalOptions
|
|
3783
|
+
);
|
|
3563
3784
|
const handler = async (request, middlewareManager) => {
|
|
3785
|
+
const {
|
|
3786
|
+
initialPayloadParser,
|
|
3787
|
+
url,
|
|
3788
|
+
failureFunction,
|
|
3789
|
+
baseUrl,
|
|
3790
|
+
env,
|
|
3791
|
+
disableTelemetry: optDisableTelemetry,
|
|
3792
|
+
internal
|
|
3793
|
+
} = resolvedOptions;
|
|
3794
|
+
const currentTelemetry = optDisableTelemetry ? void 0 : telemetry;
|
|
3795
|
+
const { generateResponse: responseGenerator, useJSONContent } = internal;
|
|
3564
3796
|
await middlewareManager.dispatchDebug("onInfo", {
|
|
3565
3797
|
info: `Received request for workflow execution.`
|
|
3566
3798
|
});
|
|
@@ -3648,7 +3880,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3648
3880
|
steps,
|
|
3649
3881
|
url: workflowUrl,
|
|
3650
3882
|
env,
|
|
3651
|
-
telemetry,
|
|
3883
|
+
telemetry: currentTelemetry,
|
|
3652
3884
|
invokeCount,
|
|
3653
3885
|
label,
|
|
3654
3886
|
middlewareManager
|
|
@@ -3674,7 +3906,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3674
3906
|
requestPayload: rawInitialPayload,
|
|
3675
3907
|
client: regionalClient,
|
|
3676
3908
|
workflowUrl,
|
|
3677
|
-
telemetry,
|
|
3909
|
+
telemetry: currentTelemetry,
|
|
3678
3910
|
middlewareManager
|
|
3679
3911
|
});
|
|
3680
3912
|
if (callReturnCheck.isErr()) {
|
|
@@ -3683,7 +3915,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3683
3915
|
const result = isFirstInvocation ? await triggerFirstInvocation({
|
|
3684
3916
|
workflowContext,
|
|
3685
3917
|
useJSONContent,
|
|
3686
|
-
telemetry,
|
|
3918
|
+
telemetry: currentTelemetry,
|
|
3687
3919
|
invokeCount,
|
|
3688
3920
|
middlewareManager,
|
|
3689
3921
|
unknownSdk
|
|
@@ -3751,7 +3983,9 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
|
|
|
3751
3983
|
);
|
|
3752
3984
|
};
|
|
3753
3985
|
const safeHandler = async (request) => {
|
|
3754
|
-
const middlewareManager = new MiddlewareManager(
|
|
3986
|
+
const middlewareManager = new MiddlewareManager(
|
|
3987
|
+
resolvedOptions.middlewares
|
|
3988
|
+
);
|
|
3755
3989
|
try {
|
|
3756
3990
|
return await handler(request, middlewareManager);
|
|
3757
3991
|
} catch (error) {
|
|
@@ -3795,6 +4029,9 @@ export {
|
|
|
3795
4029
|
prepareFlowControl,
|
|
3796
4030
|
serveManyBase,
|
|
3797
4031
|
WorkflowContext,
|
|
4032
|
+
DEV_QSTASH_TOKEN,
|
|
4033
|
+
getDevCredentials,
|
|
4034
|
+
ensureDevServer,
|
|
3798
4035
|
WorkflowMiddleware,
|
|
3799
4036
|
loggingMiddleware,
|
|
3800
4037
|
serveBase,
|
package/cloudflare.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.mjs';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-CppVPJrh.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, x as InvokableWorkflow } from './types-
|
|
2
|
-
import { s as serveManyBase } from './serve-many-
|
|
1
|
+
import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.js';
|
|
2
|
+
import { s as serveManyBase } from './serve-many-Bi8XaOyq.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
package/cloudflare.js
CHANGED
|
@@ -1522,7 +1522,15 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1522
1522
|
return JSON.stringify(request);
|
|
1523
1523
|
}
|
|
1524
1524
|
getHeaders({ context, telemetry: telemetry2, invokeCount }) {
|
|
1525
|
-
const {
|
|
1525
|
+
const {
|
|
1526
|
+
workflow,
|
|
1527
|
+
headers = {},
|
|
1528
|
+
workflowRunId,
|
|
1529
|
+
retries,
|
|
1530
|
+
retryDelay,
|
|
1531
|
+
flowControl,
|
|
1532
|
+
label
|
|
1533
|
+
} = this.params;
|
|
1526
1534
|
const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
|
|
1527
1535
|
const { headers: triggerHeaders, contentType } = getHeaders({
|
|
1528
1536
|
initHeaderValue: "true",
|
|
@@ -1540,6 +1548,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
|
|
|
1540
1548
|
userHeaders: new Headers(headers)
|
|
1541
1549
|
});
|
|
1542
1550
|
triggerHeaders["Upstash-Workflow-Invoke"] = "true";
|
|
1551
|
+
if (label) {
|
|
1552
|
+
triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
|
|
1553
|
+
triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
|
|
1554
|
+
}
|
|
1543
1555
|
return { headers: triggerHeaders, contentType };
|
|
1544
1556
|
}
|
|
1545
1557
|
async submitStep({ context, body, headers }) {
|
|
@@ -2918,6 +2930,21 @@ var WorkflowContext = class {
|
|
|
2918
2930
|
}
|
|
2919
2931
|
};
|
|
2920
2932
|
|
|
2933
|
+
// src/dev-server.ts
|
|
2934
|
+
var import_path = require("path");
|
|
2935
|
+
var DEV_QSTASH_TOKEN = "eyJVc2VySUQiOiJkZWZhdWx0VXNlciIsIlBhc3N3b3JkIjoiZGVmYXVsdFBhc3N3b3JkIn0=";
|
|
2936
|
+
var DEV_QSTASH_CURRENT_SIGNING_KEY = "sig_7kYjw48mhY7kAjqNGcy6cr29RJ6r";
|
|
2937
|
+
var DEV_QSTASH_NEXT_SIGNING_KEY = "sig_5ZB6DVzB1wjE8S6rZ7eenA8Pdnhs";
|
|
2938
|
+
function getDevCredentials(port) {
|
|
2939
|
+
return {
|
|
2940
|
+
QSTASH_URL: `http://localhost:${port}`,
|
|
2941
|
+
QSTASH_TOKEN: DEV_QSTASH_TOKEN,
|
|
2942
|
+
QSTASH_CURRENT_SIGNING_KEY: DEV_QSTASH_CURRENT_SIGNING_KEY,
|
|
2943
|
+
QSTASH_NEXT_SIGNING_KEY: DEV_QSTASH_NEXT_SIGNING_KEY
|
|
2944
|
+
};
|
|
2945
|
+
}
|
|
2946
|
+
var CACHE_DIR = (0, import_path.join)("node_modules", ".cache", "upstash");
|
|
2947
|
+
|
|
2921
2948
|
// src/serve/authorization.ts
|
|
2922
2949
|
var import_qstash9 = require("@upstash/qstash");
|
|
2923
2950
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
@@ -3571,19 +3598,33 @@ var AUTH_FAIL_MESSAGE = `Failed to authenticate Workflow request. If this is une
|
|
|
3571
3598
|
|
|
3572
3599
|
// src/serve/index.ts
|
|
3573
3600
|
var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
3574
|
-
const {
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
const
|
|
3601
|
+
const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
|
|
3602
|
+
const devMode = environment.WORKFLOW_DEV === "true";
|
|
3603
|
+
if (devMode) {
|
|
3604
|
+
const port = Number(environment.WORKFLOW_DEV_PORT) || 8080;
|
|
3605
|
+
const creds = getDevCredentials(port);
|
|
3606
|
+
for (const [k, v] of Object.entries(creds)) {
|
|
3607
|
+
if (!environment[k]) {
|
|
3608
|
+
environment[k] = v;
|
|
3609
|
+
}
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
const resolvedOptions = processOptions(
|
|
3613
|
+
options,
|
|
3614
|
+
internalOptions
|
|
3615
|
+
);
|
|
3586
3616
|
const handler = async (request, middlewareManager) => {
|
|
3617
|
+
const {
|
|
3618
|
+
initialPayloadParser,
|
|
3619
|
+
url,
|
|
3620
|
+
failureFunction,
|
|
3621
|
+
baseUrl,
|
|
3622
|
+
env,
|
|
3623
|
+
disableTelemetry: optDisableTelemetry,
|
|
3624
|
+
internal
|
|
3625
|
+
} = resolvedOptions;
|
|
3626
|
+
const currentTelemetry = optDisableTelemetry ? void 0 : telemetry2;
|
|
3627
|
+
const { generateResponse: responseGenerator, useJSONContent } = internal;
|
|
3587
3628
|
await middlewareManager.dispatchDebug("onInfo", {
|
|
3588
3629
|
info: `Received request for workflow execution.`
|
|
3589
3630
|
});
|
|
@@ -3671,7 +3712,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3671
3712
|
steps,
|
|
3672
3713
|
url: workflowUrl,
|
|
3673
3714
|
env,
|
|
3674
|
-
telemetry:
|
|
3715
|
+
telemetry: currentTelemetry,
|
|
3675
3716
|
invokeCount,
|
|
3676
3717
|
label,
|
|
3677
3718
|
middlewareManager
|
|
@@ -3697,7 +3738,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3697
3738
|
requestPayload: rawInitialPayload,
|
|
3698
3739
|
client: regionalClient,
|
|
3699
3740
|
workflowUrl,
|
|
3700
|
-
telemetry:
|
|
3741
|
+
telemetry: currentTelemetry,
|
|
3701
3742
|
middlewareManager
|
|
3702
3743
|
});
|
|
3703
3744
|
if (callReturnCheck.isErr()) {
|
|
@@ -3706,7 +3747,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3706
3747
|
const result = isFirstInvocation ? await triggerFirstInvocation({
|
|
3707
3748
|
workflowContext,
|
|
3708
3749
|
useJSONContent,
|
|
3709
|
-
telemetry:
|
|
3750
|
+
telemetry: currentTelemetry,
|
|
3710
3751
|
invokeCount,
|
|
3711
3752
|
middlewareManager,
|
|
3712
3753
|
unknownSdk
|
|
@@ -3774,7 +3815,9 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
|
|
|
3774
3815
|
);
|
|
3775
3816
|
};
|
|
3776
3817
|
const safeHandler = async (request) => {
|
|
3777
|
-
const middlewareManager = new MiddlewareManager(
|
|
3818
|
+
const middlewareManager = new MiddlewareManager(
|
|
3819
|
+
resolvedOptions.middlewares
|
|
3820
|
+
);
|
|
3778
3821
|
try {
|
|
3779
3822
|
return await handler(request, middlewareManager);
|
|
3780
3823
|
} catch (error) {
|
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, x as InvokableWorkflow } from './types-
|
|
2
|
+
import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.mjs';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-CppVPJrh.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, x as InvokableWorkflow } from './types-
|
|
2
|
+
import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-CUwgrpCM.js';
|
|
3
3
|
import { Router } from 'express';
|
|
4
|
-
import { s as serveManyBase } from './serve-many-
|
|
4
|
+
import { s as serveManyBase } from './serve-many-Bi8XaOyq.js';
|
|
5
5
|
import '@upstash/qstash';
|
|
6
6
|
import 'zod';
|
|
7
7
|
|