Files
OmniRoute/open-sse/utils/geminiCookies.ts
Rafa Martins 2617841449 fix: accept Gemini Web cookie exports (#11554)
Merged via /merge-batch (lote 2026-08-26, v3.8.51). O branch original tinha divergido de um ponto bem antigo de `main` (phantom-diff — dezenas de commits já mergeados no meio); extraí os 2 commits de valor real (aceitar cookies completos/PSID/JSON exportado do Gemini Web) e reapliquei sobre o tip atual de `release/v3.8.51` (o commit adicional de 'restore endpoint page JSX' já estava coberto pelo tip, então não era necessário). Validado: 125/125 testes de `provider-validation-specialty.test.ts` passando. Obrigado pela contribuição.
2026-08-26 08:13:22 -03:00

27 lines
1008 B
TypeScript

type CookieRecord = Record<string, unknown>;
function cookiePairsFromJson(raw: string): string[] {
if (!raw.startsWith("{")) return [];
try {
const parsed = JSON.parse(raw) as CookieRecord;
const cookies =
parsed.cookies && typeof parsed.cookies === "object" && !Array.isArray(parsed.cookies)
? (parsed.cookies as CookieRecord)
: parsed;
return Object.entries(cookies)
.filter(([, value]) => typeof value === "string" && value.trim().length > 0)
.map(([name, value]) => `${name}=${String(value).trim()}`);
} catch {
return [];
}
}
/** Normalize a pasted Gemini cookie header, bare PSID, or browser-export JSON. */
export function normalizeGeminiCookieInput(raw: string, cookieName = "__Secure-1PSID"): string {
const trimmed = raw.trim();
if (!trimmed) return "";
const jsonPairs = cookiePairsFromJson(trimmed);
if (jsonPairs.length > 0) return jsonPairs.join("; ");
return trimmed.includes("=") ? trimmed : `${cookieName}=${trimmed}`;
}