@copilotkit/runtime
Version:
<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />
72 lines (70 loc) • 2.48 kB
JavaScript
require("reflect-metadata");
//#region src/v2/runtime/core/fetch-cors.ts
const DEFAULT_METHODS = [
"GET",
"HEAD",
"PUT",
"POST",
"DELETE",
"PATCH",
"OPTIONS"
];
const DEFAULT_HEADERS = ["*"];
function resolveOrigin(config, requestOrigin) {
const { origin } = config;
if (!origin) return "*";
if (typeof origin === "string") return origin;
if (Array.isArray(origin)) {
if (!requestOrigin) return null;
return origin.includes(requestOrigin) ? requestOrigin : null;
}
if (typeof origin === "function") return requestOrigin ? origin(requestOrigin) : null;
return "*";
}
function setCorsHeaders(headers, config, requestOrigin) {
let allowedOrigin = resolveOrigin(config, requestOrigin);
if (!allowedOrigin) return;
if (config.credentials && allowedOrigin === "*") if (requestOrigin) allowedOrigin = requestOrigin;
else return;
headers.set("Access-Control-Allow-Origin", allowedOrigin);
if (config.credentials) headers.set("Access-Control-Allow-Credentials", "true");
if (config.exposeHeaders?.length) headers.set("Access-Control-Expose-Headers", config.exposeHeaders.join(", "));
if (allowedOrigin !== "*") headers.append("Vary", "Origin");
}
/**
* Handle CORS preflight (OPTIONS) requests.
* Returns a 204 Response if it's a preflight, or null if not.
*/
function handleCors(request, config) {
if (request.method !== "OPTIONS") return null;
const requestOrigin = request.headers.get("origin");
const headers = new Headers();
setCorsHeaders(headers, config, requestOrigin);
const methods = config.allowMethods ?? DEFAULT_METHODS;
headers.set("Access-Control-Allow-Methods", methods.join(", "));
const allowHeaders = config.allowHeaders ?? DEFAULT_HEADERS;
headers.set("Access-Control-Allow-Headers", allowHeaders.join(", "));
if (config.maxAge != null) headers.set("Access-Control-Max-Age", String(config.maxAge));
headers.append("Vary", "Access-Control-Request-Headers");
headers.append("Vary", "Access-Control-Request-Method");
return new Response(null, {
status: 204,
headers
});
}
/**
* Add CORS headers to an existing response.
*/
function addCorsHeaders(response, config, requestOrigin) {
const headers = new Headers(response.headers);
setCorsHeaders(headers, config, requestOrigin);
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers
});
}
//#endregion
exports.addCorsHeaders = addCorsHeaders;
exports.handleCors = handleCors;
//# sourceMappingURL=fetch-cors.cjs.map