MCPcopy Create free account
hub / github.com/BrasilAPI/BrasilAPI / extractIPFromRequest

Function extractIPFromRequest

lib/parseRequest.js:40–77  ·  view source on GitHub ↗
(request)

Source from the content-addressed store, hash-verified

38
39// https://github.com/filipedeschamps/tabnews.com.br/blob/53482fa8d15c273e9dcda80242eaba4d9f37c9a9/models/ip.js#L4
40export function extractIPFromRequest(request) {
41 if (isRequestFromCloudflare(request)) {
42 // Vercel via Cloudflare
43 return request instanceof Request
44 ? request.headers.get('cf-connecting-ip') // edge runtime
45 : request.headers['cf-connecting-ip']; // node runtime
46 }
47 let realIp;
48
49 if (request instanceof Request) {
50 // edge runtime
51 realIp = isServerlessRuntime
52 ? request.headers.get('x-vercel-proxied-for')?.split(', ').at(-1) // Vercel
53 : request.headers.get('x-forwarded-for')?.split(', ').at(-1); // remote development
54 } else {
55 // node runtime
56 realIp = isServerlessRuntime
57 ? request.headers['x-vercel-proxied-for']?.split(', ').at(-1) // Vercel
58 : request.headers['x-forwarded-for']?.split(', ').at(-1); // remote development
59 }
60
61 if (!realIp) {
62 // local development
63 realIp = request.socket?.remoteAddress || '127.0.0.1';
64
65 // Localhost loopback in IPv6
66 if (realIp === '::1') {
67 realIp = '127.0.0.1';
68 }
69
70 // IPv4-mapped IPv6 addresses
71 if (realIp.substr(0, 7) === '::ffff:') {
72 realIp = realIp.substr(7);
73 }
74 }
75
76 return realIp;
77}

Callers 1

loggerFunction · 0.90

Calls 1

isRequestFromCloudflareFunction · 0.85

Tested by

no test coverage detected