eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.38 kB
JavaScript
import{z}from"#compiled/zod/index.js";import{BlockList,isIP}from"node:net";const httpServerUrlSchema=z.url({protocol:/^https?$/}),reservedRanges=new BlockList;reservedRanges.addSubnet(`0.0.0.0`,8,`ipv4`),reservedRanges.addSubnet(`10.0.0.0`,8,`ipv4`),reservedRanges.addSubnet(`100.64.0.0`,10,`ipv4`),reservedRanges.addSubnet(`169.254.0.0`,16,`ipv4`),reservedRanges.addSubnet(`172.16.0.0`,12,`ipv4`),reservedRanges.addSubnet(`192.0.0.0`,24,`ipv4`),reservedRanges.addSubnet(`192.0.2.0`,24,`ipv4`),reservedRanges.addSubnet(`192.88.99.0`,24,`ipv4`),reservedRanges.addSubnet(`192.168.0.0`,16,`ipv4`),reservedRanges.addSubnet(`198.18.0.0`,15,`ipv4`),reservedRanges.addSubnet(`198.51.100.0`,24,`ipv4`),reservedRanges.addSubnet(`203.0.113.0`,24,`ipv4`),reservedRanges.addSubnet(`224.0.0.0`,4,`ipv4`),reservedRanges.addSubnet(`240.0.0.0`,4,`ipv4`),reservedRanges.addAddress(`::`,`ipv6`),reservedRanges.addSubnet(`::`,96,`ipv6`),reservedRanges.addSubnet(`64:ff9b::`,96,`ipv6`),reservedRanges.addSubnet(`64:ff9b:1::`,48,`ipv6`),reservedRanges.addSubnet(`100::`,64,`ipv6`),reservedRanges.addSubnet(`2001::`,23,`ipv6`),reservedRanges.addSubnet(`2001:db8::`,32,`ipv6`),reservedRanges.addSubnet(`2002::`,16,`ipv6`),reservedRanges.addSubnet(`fc00::`,7,`ipv6`),reservedRanges.addSubnet(`fe80::`,10,`ipv6`),reservedRanges.addSubnet(`ff00::`,8,`ipv6`);const loopbackRanges=new BlockList;loopbackRanges.addSubnet(`127.0.0.0`,8,`ipv4`),loopbackRanges.addAddress(`::1`,`ipv6`);function normalizeAddress(e){let t=e.trim().replace(/^\[(.*)\]$/u,`$1`),n=t.indexOf(`%`),r=n===-1?t:t.slice(0,n);if(r.toLowerCase().startsWith(`::ffff:`)){let e=r.slice(7);if(isIP(e)===4)return e}return r}function isLoopbackHostname(e){let t=normalizeAddress(e).toLowerCase().replace(/\.$/u,``);if(t===`localhost`||t.endsWith(`.localhost`))return!0;let n=isIP(t);return n!==0&&loopbackRanges.check(t,n===4?`ipv4`:`ipv6`)}function isLoopbackServerUrl(e){let t=httpServerUrlSchema.safeParse(e);return t.success&&isLoopbackHostname(new URL(t.data).hostname)}function isReservedIpAddress(e){let t=normalizeAddress(e);if(isLoopbackHostname(t))return!1;let n=isIP(t);return n!==0&&reservedRanges.check(t,n===4?`ipv4`:`ipv6`)}function isPrivateOrReservedIpAddress(e){return isLoopbackHostname(e)||isReservedIpAddress(e)}export{httpServerUrlSchema,isLoopbackHostname,isLoopbackServerUrl,isPrivateOrReservedIpAddress,isReservedIpAddress};