@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
JavaScript
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
};