UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio

87 lines (86 loc) 2.29 kB
/** * HeaderScrubber — strips headers that could reveal the presence of a proxy. * * Removes forwarding headers (x-forwarded-for, via, x-real-ip, etc.) and any * custom proxy-fingerprint headers, while preserving legitimate request * headers like content-type and authorization. */ /** Exact-match headers to strip (all lower-cased). */ const STRIP_HEADERS_EXACT = new Set([ "x-forwarded-for", "x-forwarded-host", "x-forwarded-port", "x-forwarded-server", "x-forwarded-proto", "x-real-ip", "x-client-ip", "true-client-ip", "cf-connecting-ip", "fastly-client-ip", "x-cluster-client-ip", "forwarded", "via", "sec-ch-ua", "sec-fetch-dest", "sec-fetch-mode", "sec-fetch-site", "priority", "referer", "accept-encoding", "x-title", "content-length", "connection", "transfer-encoding", "keep-alive", "te", "trailer", "upgrade", "host", ]); /** Prefix-match patterns to strip (all lower-cased). */ const STRIP_HEADERS_PREFIX = [ "sec-ch-ua-", "x-stainless-", "x-forwarded-", "proxy-", ]; /** Check whether a lower-cased header name should be stripped. */ function shouldStrip(lower, extraSet) { if (STRIP_HEADERS_EXACT.has(lower)) { return true; } if (extraSet.has(lower)) { return true; } for (const prefix of STRIP_HEADERS_PREFIX) { if (lower.startsWith(prefix)) { return true; } } return false; } export function createHeaderScrubber(options = {}) { const extraSet = new Set((options.extraHeaders ?? []).map((h) => h.toLowerCase())); return { name: "header-scrubber", order: 10, enabled: true, async transformRequest(ctx) { const cleaned = {}; for (const [key, value] of Object.entries(ctx.request.headers)) { const lower = key.toLowerCase(); if (shouldStrip(lower, extraSet)) { continue; // strip } cleaned[key] = value; } return { ...ctx, request: { ...ctx.request, headers: cleaned, }, }; }, }; }