import {NextRequest} from "next/server"; function decodeB64Json(b64: string) { try { const s = b64.replace(/-/g, "+").replace(/_/g, "/"); const pad = s.length % 4 === 2 ? "==" : s.length % 4 === 3 ? "=" : ""; const json = Buffer.from(s + pad, "base64").toString("utf8"); return JSON.parse(json); } catch { return null; } } export function resolveTenantFromRequest(req: NextRequest): string { const ui = req.cookies.get("user_info")?.value; if (ui) { try { const parsed = JSON.parse(Buffer.from(ui, "base64").toString("utf8")); if (parsed?.tenantKey && typeof parsed.tenantKey === "string") return parsed.tenantKey; } catch { } } const access = req.cookies.get("access_token")?.value; if (access && access.split(".").length >= 2) { const payloadB64 = access.split(".")[1]; const payload = decodeB64Json(payloadB64); const tk = payload?.tenant_key ?? payload?.tenantKey; if (typeof tk === "string" && tk) return tk; } const host = req.headers.get("host") ?? ""; const parts = host.split("."); if (parts.length >= 3) return parts[0]; if (process.env.DEFAULT_TENANT_KEY) return process.env.DEFAULT_TENANT_KEY; return "default"; }