Files
windmill/functions/api/[[path]].ts
Diego Imbert 4f2f7356c0 Fullstack CI Preview (#7665)
* update cf worker hostname

* set remote_url cookie from param

* ephemeral backends v1

* nit

* Run queue server

* ntis

* timeout

* better db process management

* commit hash and worktree

* nit use map

* nit

* err handling

* Revert "err handling"

This reverts commit 19de00c0c0.

* nits

* auto cleanup

* Ephemeral backend command action

* remove checkout

* checkout ee repo

* nits

* process.env.GIT_EE_DEPLOY_KEY_FILE

* resumeURLs logic

* nit

* use windmill flow for ephemeral backend action

* fixes

* new token

* worktree pools

* Delete GH secret on cleanup

* linux deploy

* nit

* nit

* unhandled promises

* nit

* fix docker bridge IP on linux

* pass cf_frontend_url to wmill flow

* git fetch

* release worktree when binary started

* send error

* logger

* logging

* logging 2

* delete log files periodically

* redirect to raw app with logs

* CORS

* MANAGER_AUTH_TOKEN

* Check organization membership

* nit

* bwrap

* nit

* return timeoutAt in resumeUrl

* nit

* Change password

* nit remove https
2026-02-05 17:26:51 +00:00

54 lines
1.7 KiB
TypeScript

//this is purely for cloudflare pages redirection purposes
export async function onRequest(context) {
// Contents of context object
const {
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data, // arbitrary space for passing data between middlewares
} = context;
try {
const url = new URL(request.url);
// Check for remote_url cookie
const cookies = request.headers.get("cookie") || "";
const remoteUrlMatch = cookies.match(/remote_url=([^;]+)/);
const targetHostname = remoteUrlMatch
? decodeURIComponent(remoteUrlMatch[1])
: "app.windmill.dev";
url.hostname = targetHostname;
const res = await fetch(url.toString(), {
method: request.method,
body: request.body,
headers: request.headers,
redirect: "manual",
});
const newResponse = new Response(res.body, res);
// Extract domain from target hostname for cookie domain replacement
const targetDomain = targetHostname.split(".").slice(-2).join(".");
newResponse.headers.set(
"set-cookie",
"token" +
(newResponse.headers
.get("set-cookie")
?.replace(`Domain=${targetDomain};`, "")
?.split("token")
?.pop() ?? "")
);
newResponse.headers.set("Cross-Origin-Resource-Policy", "cross-origin");
newResponse.headers.set("Cross-Origin-Opener-Policy", "same-origin");
newResponse.headers.set("Cross-Origin-Embedder-Policy", "require-corp");
return newResponse;
} catch (e) {
return new Response(e.message, { status: 500 });
}
}