UNPKG

better-auth

Version:

The most comprehensive authentication framework for TypeScript.

1 lines 2.01 kB
{"version":3,"file":"get-request-ip.mjs","names":[],"sources":["../../src/utils/get-request-ip.ts"],"sourcesContent":["import type { BetterAuthOptions } from \"@better-auth/core\";\nimport { isDevelopment, isTest } from \"@better-auth/core/env\";\nimport * as z from \"zod\";\n\n// Localhost IP used for test and development environments\nconst LOCALHOST_IP = \"127.0.0.1\";\n\nexport function getIp(\n\treq: Request | Headers,\n\toptions: BetterAuthOptions,\n): string | null {\n\tif (options.advanced?.ipAddress?.disableIpTracking) {\n\t\treturn null;\n\t}\n\n\tconst headers = \"headers\" in req ? req.headers : req;\n\n\tconst defaultHeaders = [\"x-forwarded-for\"];\n\n\tconst ipHeaders =\n\t\toptions.advanced?.ipAddress?.ipAddressHeaders || defaultHeaders;\n\n\tfor (const key of ipHeaders) {\n\t\tconst value = \"get\" in headers ? headers.get(key) : headers[key];\n\t\tif (typeof value === \"string\") {\n\t\t\tconst ip = value.split(\",\")[0]!.trim();\n\t\t\tif (isValidIP(ip)) {\n\t\t\t\treturn ip;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fallback to localhost IP in development/test environments when no IP found in headers\n\tif (isTest() || isDevelopment()) {\n\t\treturn LOCALHOST_IP;\n\t}\n\n\treturn null;\n}\n\nfunction isValidIP(ip: string): boolean {\n\tconst ipv4 = z.ipv4().safeParse(ip);\n\n\tif (ipv4.success) {\n\t\treturn true;\n\t}\n\n\tconst ipv6 = z.ipv6().safeParse(ip);\n\tif (ipv6.success) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n"],"mappings":";;;;AAKA,MAAM,eAAe;AAErB,SAAgB,MACf,KACA,SACgB;AAChB,KAAI,QAAQ,UAAU,WAAW,kBAChC,QAAO;CAGR,MAAM,UAAU,aAAa,MAAM,IAAI,UAAU;CAIjD,MAAM,YACL,QAAQ,UAAU,WAAW,oBAHP,CAAC,kBAAkB;AAK1C,MAAK,MAAM,OAAO,WAAW;EAC5B,MAAM,QAAQ,SAAS,UAAU,QAAQ,IAAI,IAAI,GAAG,QAAQ;AAC5D,MAAI,OAAO,UAAU,UAAU;GAC9B,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,GAAI,MAAM;AACtC,OAAI,UAAU,GAAG,CAChB,QAAO;;;AAMV,KAAI,QAAQ,IAAI,eAAe,CAC9B,QAAO;AAGR,QAAO;;AAGR,SAAS,UAAU,IAAqB;AAGvC,KAFa,EAAE,MAAM,CAAC,UAAU,GAAG,CAE1B,QACR,QAAO;AAIR,KADa,EAAE,MAAM,CAAC,UAAU,GAAG,CAC1B,QACR,QAAO;AAGR,QAAO"}