UNPKG

@sigiljs/sigil

Version:

TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating

45 lines (44 loc) 1.22 kB
function l(e) { const n = []; let r = 0, i = 0, f = e.length; for (; r < f && (i = e.indexOf("for=", r), i !== -1); ) { i += 4; let t = e.charCodeAt(i); (t === 34 || t === 91) && i++; const s = i; for (; i < f && (t = e.charCodeAt(i), !(t === 59 || t === 44 || t === 34 || t === 93)); ) i++; if (n.push(e.slice(s, i)), r = e.indexOf(",", i), r === -1) break; r++; } return n; } function a(e) { const n = e.headers; let r = null; const i = n.forwarded; if (i) { const t = Array.isArray(i) ? i[0] : i; r = l(t); } if (!r || r.length === 0) { const t = n["x-forwarded-for"]; t && (r = (Array.isArray(t) ? t[0] : t).split(",").map((o) => o.trim()).filter(Boolean)); } if (!r || r.length === 0) { const t = n["x-real-ip"]; t && (r = [(Array.isArray(t) ? t[0] : t).trim()]); } if (!r || r.length === 0) { const t = n["cf-connecting-ip"]; t && (r = [(Array.isArray(t) ? t[0] : t).trim()]); } let f = e.socket.remoteAddress ?? null; return f ? (f.startsWith("::ffff:") && (f = f.slice(7)), r ? r.push(f) : r = [f]) : r || (r = []), { ip: r.length > 0 ? r[0] : null, ips: r }; } export { a as getClientIpInfo };