import { IncomingMessage } from 'node:http'; import http from 'node:http'; import { logger } from '../logger.ts'; export const isBun = typeof Bun !== 'undefined' && Bun?.version != null; export const isNode = typeof process !== 'undefined' && process?.versions != null && process.versions?.node != null; // @ts-ignore export const isDeno = typeof Deno !== 'undefined' && Deno?.version != null && Deno?.version?.deno != null; export const getUserFromRequest = (req: IncomingMessage) => { const url = new URL(req.url, `http://${req.headers.host}`); const pathname = url.pathname; const keys = pathname.split('/'); const [_, user, app] = keys; return { user, app, }; }; export const getDNS = (req: http.IncomingMessage) => { const hostName = req.headers?.host; const ip = req?.socket?.remoteAddress || ''; return { hostName, ip }; }; export const isLocalhost = (hostName: string) => { if(!hostName) { return false; } return hostName.includes('localhost') || hostName.includes('192.168'); }; export const isIpv4OrIpv6 = (hostName: string) => { const ipv4 = /^(\d{1,3}\.){3}\d{1,3}$/; const ipv6 = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/; return ipv4.test(hostName) || ipv6.test(hostName); }; export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));