37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
/**
|
|
* chatCore executor client-header normalizer (Quality Gate v2 / Fase 9 — chatCore god-file
|
|
* decomposition, #3501).
|
|
*
|
|
* Pure helper extracted from chatCore: normalizes a Headers instance or a plain header object into a
|
|
* lowercased-tolerant Record<string,string>, and backfills the client User-Agent (both casings) when
|
|
* one is supplied and not already present. Returns null when nothing was collected. Side-effect-free;
|
|
* behaviour is byte-identical to the previous module-level function.
|
|
*/
|
|
|
|
export function buildExecutorClientHeaders(
|
|
headers: Headers | Record<string, unknown> | null | undefined,
|
|
userAgent?: string | null
|
|
) {
|
|
const normalized: Record<string, string> = {};
|
|
|
|
if (headers instanceof Headers) {
|
|
headers.forEach((value, key) => {
|
|
normalized[key] = value;
|
|
});
|
|
} else if (headers && typeof headers === "object") {
|
|
for (const [key, value] of Object.entries(headers)) {
|
|
if (typeof value === "string") {
|
|
normalized[key] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
const normalizedUserAgent = typeof userAgent === "string" ? userAgent.trim() : "";
|
|
if (normalizedUserAgent && !normalized["user-agent"] && !normalized["User-Agent"]) {
|
|
normalized["user-agent"] = normalizedUserAgent;
|
|
normalized["User-Agent"] = normalizedUserAgent;
|
|
}
|
|
|
|
return Object.keys(normalized).length > 0 ? normalized : null;
|
|
}
|