@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
2 lines (1 loc) • 955 B
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function l(e){const f=[];let r=0,i=0,n=e.length;for(;r<n&&(i=e.indexOf("for=",r),i!==-1);){i+=4;let t=e.charCodeAt(i);(t===34||t===91)&&i++;const s=i;for(;i<n&&(t=e.charCodeAt(i),!(t===59||t===44||t===34||t===93));)i++;if(f.push(e.slice(s,i)),r=e.indexOf(",",i),r===-1)break;r++}return f}function a(e){const f=e.headers;let r=null;const i=f.forwarded;if(i){const t=Array.isArray(i)?i[0]:i;r=l(t)}if(!r||r.length===0){const t=f["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=f["x-real-ip"];t&&(r=[(Array.isArray(t)?t[0]:t).trim()])}if(!r||r.length===0){const t=f["cf-connecting-ip"];t&&(r=[(Array.isArray(t)?t[0]:t).trim()])}let n=e.socket.remoteAddress??null;return n?(n.startsWith("::ffff:")&&(n=n.slice(7)),r?r.push(n):r=[n]):r||(r=[]),{ip:r.length>0?r[0]:null,ips:r}}exports.getClientIpInfo=a;