2025-09-05 14:59:21 +08:00

52 lines
1.6 KiB
JavaScript

import { parse } from "cookie-es";
import { splitCookiesString } from "h3";
export function getAzureParsedCookiesFromHeaders(headers) {
const setCookieHeader = headers["set-cookie"];
if (!setCookieHeader || typeof setCookieHeader === "number" || setCookieHeader.length === 0) {
return [];
}
const azureCookies = [];
for (const setCookieStr of splitCookiesString(setCookieHeader)) {
const setCookie = Object.entries(parse(setCookieStr));
if (setCookie.length === 0) {
continue;
}
const [[key, value], ..._setCookieOptions] = setCookie;
const setCookieOptions = Object.fromEntries(
_setCookieOptions.map(([k, v]) => [k.toLowerCase(), v])
);
const cookieObject = {
name: key,
value,
domain: setCookieOptions.domain,
path: setCookieOptions.path,
expires: parseNumberOrDate(setCookieOptions.expires),
sameSite: setCookieOptions.samesite,
maxAge: parseNumber(setCookieOptions["max-age"]),
secure: setCookieStr.includes("Secure") ? true : void 0,
httpOnly: setCookieStr.includes("HttpOnly") ? true : void 0
};
azureCookies.push(cookieObject);
}
return azureCookies;
}
function parseNumberOrDate(expires) {
const expiresAsNumber = parseNumber(expires);
if (expiresAsNumber !== void 0) {
return expiresAsNumber;
}
const expiresAsDate = new Date(expires);
if (!Number.isNaN(expiresAsDate.getTime())) {
return expiresAsDate;
}
}
function parseNumber(maxAge) {
if (!maxAge) {
return void 0;
}
const maxAgeAsNumber = Number(maxAge);
if (!Number.isNaN(maxAgeAsNumber)) {
return maxAgeAsNumber;
}
}