azurajs 2.7.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js.map +1 -1
- package/dist/cors.cjs +27 -8
- package/dist/cors.cjs.map +1 -1
- package/dist/cors.d.cts +3 -2
- package/dist/cors.d.ts +3 -2
- package/dist/cors.js +27 -8
- package/dist/cors.js.map +1 -1
- package/dist/index.cjs +38 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +38 -11
- package/dist/index.js.map +1 -1
- package/dist/infra.cjs +38 -11
- package/dist/infra.cjs.map +1 -1
- package/dist/infra.js +38 -11
- package/dist/infra.js.map +1 -1
- package/dist/plugins.cjs +27 -8
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +27 -8
- package/dist/plugins.js.map +1 -1
- package/package.json +1 -1
- package/src/infra/Server.ts +14 -4
- package/src/shared/config/ConfigModule.ts +2 -1
- package/src/shared/plugins/CORSPlugin.ts +33 -8
- package/src/types/plugins/cors.type.ts +1 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/config/ConfigModule.ts","../src/infra/utils/HttpError.ts","../src/types/utils/colors.type.ts","../src/types/utils/icons.type.ts","../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/cookies/ParserCookie.ts","../src/infra/utils/route/Node.ts","../src/infra/utils/Compose.ts","../src/infra/Router.ts","../src/infra/utils/GetIp.ts","../src/infra/utils/IpResolver.ts","../src/shared/plugins/CORSPlugin.ts","../src/shared/plugins/RateLimitPlugin.ts","../src/shared/plugins/ProxyPlugin.ts","../src/middleware/LoggingMiddleware.ts","../src/infra/Server.ts"],"names":["path","existsSync","require","createRequire","readFileSync","os","cluster","timeout","https","http","resolve","chain","idx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\n\n/**\n * Config Files Extensions Supported\n * ex: azura.config.*extension\n */\ntype SupportedConfigFile = \".js\" | \".ts\" | \".json\" | \".yaml\" | \".yml\";\n\nexport type ConfigTypes = {\n name?: string;\n environment?: \"development\" | \"production\";\n debug?: boolean;\n server?: {\n port?: number;\n cluster?: boolean;\n clusterInstances?: number;\n ipHost?: boolean;\n https?: boolean;\n /**\n * Configure trust proxy behavior for IP resolution\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n };\n plugins?: {\n rateLimit?: {\n enabled: boolean;\n limit: number;\n timeframe: number;\n };\n cors?: {\n enabled: boolean;\n origins: string | string[];\n methods: string | string[];\n allowedHeaders: string | string[];\n };\n };\n logging?: {\n enabled?: boolean;\n showDetails?: boolean;\n };\n};\n\nexport class ConfigModule {\n private config: ConfigTypes = {};\n\n /**\n * Load config files first (azura.config.*)\n * Received error if config file not found or invalid format\n */\n initSync(): void {\n const cdw = process.cwd();\n const configFiles = [\n \"azura.config.ts\",\n \"azura.config.js\",\n \"azura.config.json\",\n \"azura.config.yaml\",\n \"azura.config.yml\",\n ];\n\n let loaded = false;\n\n for (const fileName of configFiles) {\n const filePath = path.join(cdw, fileName);\n if (!existsSync(filePath)) continue;\n\n const extension = path.extname(fileName) as SupportedConfigFile;\n\n try {\n let parsed: ConfigTypes;\n\n switch (extension) {\n case \".ts\":\n case \".js\":\n // Usa createRequire para manter compatibilidade com ESM\n const require = createRequire(import.meta.url);\n const mod = require(filePath);\n parsed = mod.default || mod;\n break;\n case \".json\":\n const raw = readFileSync(filePath, \"utf8\");\n parsed = JSON.parse(raw);\n break;\n case \".yaml\":\n case \".yml\":\n const yamlRaw = readFileSync(filePath, \"utf8\");\n const requireYaml = createRequire(import.meta.url);\n const jsYaml = requireYaml(\"js-yaml\");\n parsed = jsYaml.load(yamlRaw) as ConfigTypes;\n break;\n default:\n throw new Error(`Invalid config file extension: ${extension}`);\n }\n\n this.config = { ...this.config, ...parsed };\n loaded = true;\n break;\n } catch (error: Error | any) {\n throw new Error(`Error loading config file: ${filePath}\\n${error.message}`);\n }\n }\n\n if (!loaded) {\n throw new Error(\"Nothing config file found in the current directory.\");\n }\n }\n\n /**\n * Get all configs from loaded config file\n * @returns ConfigTypes\n */\n getAll(): ConfigTypes {\n return this.config;\n }\n\n /**\n * Return a specific config from loaded config file\n *\n * @template T\n * @param {T} key - key of the config to retrieve\n * @returns {ConfigTypes[T]}\n */\n get<T extends keyof ConfigTypes>(key: T): ConfigTypes[T] {\n return this.config[key];\n }\n}","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","/**\n * ANSI escape codes for text styling\n * These codes control text formatting in terminal output\n */\nexport const RESET = \"\\x1b[0m\"; // Reset all styles\nexport const BOLD = \"\\x1b[1m\"; // Bold/bright text\nexport const DIM = \"\\x1b[2m\"; // Dim/faded text\n\n/**\n * Predefined ANSI foreground colors\n * Includes standard and bright color variants\n */\nexport const ANSI_COLORS = {\n black: \"\\x1b[30m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\n\n/**\n * ANSI background color codes\n * Used for highlighting text with colored backgrounds\n */\nexport const BG_COLORS = {\n bgBlack: \"\\x1b[40m\",\n bgRed: \"\\x1b[41m\",\n bgGreen: \"\\x1b[42m\",\n bgYellow: \"\\x1b[43m\",\n bgBlue: \"\\x1b[44m\",\n bgMagenta: \"\\x1b[45m\",\n bgCyan: \"\\x1b[46m\",\n bgWhite: \"\\x1b[47m\",\n};\n\n/**\n * Default color mapping for each log level\n * Provides semantic color coding for different message types\n */\nexport const DEFAULT_COLORS = {\n debug: ANSI_COLORS.gray,\n info: ANSI_COLORS.cyan,\n success: ANSI_COLORS.brightGreen,\n warn: ANSI_COLORS.yellow,\n error: ANSI_COLORS.red,\n fatal: ANSI_COLORS.brightRed,\n trace: ANSI_COLORS.magenta,\n log: ANSI_COLORS.white,\n};\n","/**\n * Default emoji icons for each log level\n * Provides visual indicators to quickly identify message severity\n */\nexport const DEFAULT_ICONS = {\n debug: \"🐛\",\n info: \"ℹ️\",\n success: \"✅\",\n warn: \"⚠️\",\n error: \"❌\",\n fatal: \"💀\",\n trace: \"🔍\",\n log: \"📝\",\n arrow: \"➡️\",\n};\n","import type { LoggerConfig } from \"../types/logger.types\";\nimport {\n ANSI_COLORS,\n BG_COLORS,\n BOLD,\n DEFAULT_COLORS,\n DIM,\n RESET,\n} from \"../types/utils/colors.type\";\nimport { DEFAULT_ICONS } from \"../types/utils/icons.type\";\n\n/**\n * Global logger configuration\n * These settings apply to all logger calls unless overridden by instance-specific options\n */\nlet globalConfig: LoggerConfig = {\n showTimestamp: false,\n showIcon: true,\n timestampFormat: \"time\",\n prefix: \"Azura\",\n uppercase: true,\n bold: false,\n dim: false,\n};\n\n/**\n * Configure the logger globally\n * Updates default settings that apply to all subsequent log calls\n * @param config - Logger configuration options\n * @example\n * configureLogger({\n * showTimestamp: true,\n * timestampFormat: 'datetime',\n * bold: true,\n * prefix: 'MyApp'\n * });\n */\nexport function configureLogger(config: LoggerConfig): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * Convert hexadecimal color code to ANSI escape sequence\n * @param hex - Hexadecimal color string (e.g., '#ff5733')\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example hexToAnsi('#00ff00') // Returns ANSI code for green\n */\nfunction hexToAnsi(hex: string): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Convert RGB color values to ANSI escape sequence\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example rgbToAnsi(255, 0, 128) // Returns ANSI code for custom pink\n */\nfunction rgbToAnsi(r: number, g: number, b: number): string {\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Resolve color string to ANSI escape sequence\n * Supports hex (#rrggbb), rgb (rgb(r,g,b)), and predefined color names\n * @param color - Color specification string\n * @returns ANSI escape sequence for the specified color\n * @example\n * getColorCode('#ff0000') // Hex color\n * getColorCode('rgb(255,0,0)') // RGB color\n * getColorCode('brightRed') // Predefined color\n */\nfunction getColorCode(color: string): string {\n if (color.startsWith(\"#\")) {\n return hexToAnsi(color);\n }\n if (color.startsWith(\"rgb(\")) {\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n return rgbToAnsi(Number(match[1]), Number(match[2]), Number(match[3]));\n }\n }\n return (ANSI_COLORS as any)[color] || color;\n}\n\n/**\n * Format current timestamp according to specified format\n * @param format - Timestamp format: 'time' (HH:MM:SS), 'datetime' (locale string), or 'iso' (ISO 8601)\n * @returns Formatted timestamp string\n * @example\n * formatTimestamp('time') // '14:23:45'\n * formatTimestamp('datetime') // '1/11/2026, 2:23:45 PM'\n * formatTimestamp('iso') // '2026-01-11T14:23:45.123Z'\n */\nfunction formatTimestamp(format: \"time\" | \"datetime\" | \"iso\"): string {\n const now = new Date();\n switch (format) {\n case \"time\":\n return now.toLocaleTimeString();\n case \"datetime\":\n return now.toLocaleString();\n case \"iso\":\n return now.toISOString();\n default:\n return now.toLocaleTimeString();\n }\n}\n\n/**\n * Main logger function - outputs formatted log messages to console\n * Supports multiple log levels, custom colors, icons, timestamps, and styling options\n * @param level - Log level (debug, info, success, warn, error, fatal, trace, log)\n * @param msg - Message to log\n * @param options - Optional configuration to override global settings for this log call\n * @example\n * logger('info', 'Server started on port 3000');\n * logger('error', 'Connection failed', { showTimestamp: true });\n * logger('success', 'Task completed', { colors: { success: '#00ff00' } });\n */\nexport function logger(\n level: keyof typeof DEFAULT_COLORS,\n msg: string,\n options?: LoggerConfig\n): void {\n const config = { ...globalConfig, ...options };\n\n const colors = { ...DEFAULT_COLORS, ...config.colors };\n const icons = { ...DEFAULT_ICONS, ...config.icons };\n\n const color = getColorCode(colors[level] || ANSI_COLORS.white);\n const icon = config.showIcon !== false ? icons[level] || \"\" : \"\";\n const levelLabel = config.uppercase ? level.toUpperCase() : level;\n\n let style = color;\n if (config.bold) style += BOLD;\n if (config.dim) style += DIM;\n if (config.backgroundColor) {\n style += getColorCode(config.backgroundColor);\n }\n\n const parts: string[] = [];\n\n // Add timestamp if enabled\n if (config.showTimestamp) {\n const timestamp = formatTimestamp(config.timestampFormat || \"time\");\n parts.push(`${DIM}${timestamp}${RESET}`);\n }\n\n // Add icon\n if (icon) {\n parts.push(icon);\n }\n\n // Add prefix and level\n const prefix = config.prefix\n ? `${style}[${config.prefix}:${levelLabel}]${RESET}`\n : `${style}[${levelLabel}]${RESET}`;\n parts.push(prefix);\n\n // Add message\n parts.push(msg);\n\n const output = parts.join(\" \");\n\n // Use appropriate console method\n const consoleMethod =\n level === \"error\" || level === \"fatal\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"debug\" || level === \"trace\"\n ? console.debug\n : console.log;\n\n consoleMethod(output);\n}\n\n/**\n * Convenience methods for each log level\n * Provides a cleaner API for common logging operations\n * @example\n * log.info('Server started');\n * log.error('Connection failed');\n * log.success('Task completed successfully');\n */\nexport const log = {\n debug: (msg: string, options?: LoggerConfig) => logger(\"debug\", msg, options),\n info: (msg: string, options?: LoggerConfig) => logger(\"info\", msg, options),\n success: (msg: string, options?: LoggerConfig) => logger(\"success\", msg, options),\n warn: (msg: string, options?: LoggerConfig) => logger(\"warn\", msg, options),\n error: (msg: string, options?: LoggerConfig) => logger(\"error\", msg, options),\n fatal: (msg: string, options?: LoggerConfig) => logger(\"fatal\", msg, options),\n trace: (msg: string, options?: LoggerConfig) => logger(\"trace\", msg, options),\n log: (msg: string, options?: LoggerConfig) => logger(\"log\", msg, options),\n};\n\n/**\n * Color utility functions and constants for advanced customization\n * Provides direct access to color conversion functions and ANSI codes\n * @example\n * colors.hex('#ff5733') // Convert hex to ANSI\n * colors.rgb(255, 87, 51) // Convert RGB to ANSI\n * colors.ansi.brightGreen // Access predefined colors\n * colors.bg.bgRed // Access background colors\n */\nexport const colors = {\n hex: hexToAnsi,\n rgb: rgbToAnsi,\n ansi: ANSI_COLORS,\n bg: BG_COLORS,\n reset: RESET,\n bold: BOLD,\n dim: DIM,\n};\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { InternalHandler } from \"../../../types/common.type\";\n\nexport class Node {\n children: Record<string, Node> = Object.create(null);\n paramNode: Node | null = null;\n handlers: Record<string, InternalHandler> = Object.create(null);\n paramName: string = \"\";\n}","import type { InternalHandler } from \"../../types/common.type\";\n\n\nexport function composeHandlers(handlers: ReadonlyArray<InternalHandler>): InternalHandler {\n return function composed(ctx) {\n let index = -1;\n\n function dispatch(i: number): Promise<void> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n const fn = handlers[i];\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(\n fn({\n req: ctx.req,\n res: ctx.res,\n next: () => dispatch(i + 1),\n }),\n );\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n return dispatch(0);\n };\n}\n","import type { RequestHandler } from \"../types\";\nimport type { InternalHandler } from \"../types/common.type\";\nimport { Node } from \"./utils/route/Node\";\nimport { composeHandlers } from \"./utils/Compose\";\n\ninterface MatchResult {\n handler: InternalHandler;\n params: Record<string, string>;\n}\n\nfunction adaptRouterHandler(handler: RequestHandler): InternalHandler {\n return async (ctx) => {\n if (typeof handler !== \"function\") return;\n if (handler.length > 1) {\n return (handler as any)(ctx.req, ctx.res, ctx.next);\n } else {\n return (handler as any)(ctx);\n }\n };\n}\n\nexport class Router {\n private root = new Node();\n private staticRoutes = new Map<string, Record<string, InternalHandler>>();\n private debug: boolean;\n private middlewares: InternalHandler[] = [];\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n private insert(method: string, path: string, handler: InternalHandler): void {\n const upperMethod = method.toUpperCase();\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Inserting compiled handler for ${upperMethod} ${path}`);\n }\n\n // Otimização: Se não tem parâmetros, adiciona ao mapa estático para acesso O(1)\n if (!path.includes(\":\")) {\n let methodMap = this.staticRoutes.get(path);\n if (!methodMap) {\n methodMap = Object.create(null) as Record<string, InternalHandler>;\n this.staticRoutes.set(path, methodMap);\n }\n methodMap[upperMethod] = handler;\n\n // IMPORTANTE: Não damos 'return' aqui.\n // Precisamos continuar para inserir na árvore também,\n // senão o listRoutes() não consegue encontrar essa rota para clonar em sub-routers.\n }\n\n let node = this.root;\n let start = 0;\n const len = path.length;\n for (let i = 0; i <= len; i++) {\n const ch = path.charCodeAt(i);\n if (ch === 47 || i === len) {\n const segment = path.substring(start, i);\n start = i + 1;\n if (!segment) continue;\n\n if (segment.startsWith(\":\")) {\n if (!node.paramNode) {\n node.paramNode = new Node();\n node.paramNode.paramName = segment.slice(1);\n }\n node = node.paramNode;\n } else {\n if (!node.children[segment]) {\n node.children[segment] = new Node();\n }\n node = node.children[segment];\n }\n }\n }\n node.handlers[upperMethod] = handler;\n }\n\n public add(method: string, path: string, handler: InternalHandler): void {\n const composed =\n this.middlewares.length > 0 ? composeHandlers([...this.middlewares, handler]) : handler;\n\n this.insert(method, path, composed);\n }\n\n public find(method: string, path: string): MatchResult | null {\n const upperMethod = method.toUpperCase();\n const qIdx = path.indexOf(\"?\");\n const cleanPath = qIdx === -1 ? path : path.substring(0, qIdx);\n\n // 1. Tenta otimização estática primeiro (O(1))\n const staticEntry = this.staticRoutes.get(cleanPath);\n if (staticEntry && staticEntry[upperMethod]) {\n return { handler: staticEntry[upperMethod], params: Object.create(null) };\n }\n\n // 2. Se falhar, busca na árvore (Radix Tree)\n let node = this.root;\n const params: Record<string, string> = Object.create(null);\n\n let start = 0;\n if (cleanPath.length > 0 && cleanPath.charCodeAt(0) === 47) start = 1;\n\n const len = cleanPath.length;\n for (let i = start; i <= len; i++) {\n const ch = cleanPath.charCodeAt(i);\n if (ch === 47 || i === len) {\n const segment = cleanPath.substring(start, i);\n start = i + 1;\n if (!segment) continue;\n\n const nextNode = node.children[segment];\n if (nextNode) {\n node = nextNode;\n } else if (node.paramNode) {\n node = node.paramNode;\n params[node.paramName] = segment;\n } else {\n return null;\n }\n }\n }\n\n const handler = node.handlers[upperMethod];\n if (!handler) return null;\n\n return { handler, params };\n }\n\n public listRoutes(): Array<{ method: string; path: string }> {\n const routes: Array<{ method: string; path: string }> = [];\n\n const traverse = (node: Node, currentPath: string) => {\n const methods = Object.keys(node.handlers);\n for (const method of methods) {\n routes.push({ method, path: currentPath || \"/\" });\n }\n\n for (const key in node.children) {\n const childNode = node.children[key];\n if (childNode) {\n traverse(childNode, currentPath + \"/\" + key);\n }\n }\n\n if (node.paramNode) {\n traverse(node.paramNode, currentPath + \"/:\" + node.paramNode.paramName);\n }\n };\n\n traverse(this.root, \"\");\n return routes;\n }\n\n public use(prefix: string, mw: RequestHandler): void;\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, routerOrMw?: Router | RequestHandler): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(adaptRouterHandler(prefixOrMw));\n } else if (typeof prefixOrMw === \"string\" && routerOrMw instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = routerOrMw.listRoutes();\n\n for (const r of routes) {\n // Encontra o handler original no router filho\n const found = routerOrMw.find(r.method, r.path);\n if (!found) continue;\n\n const fullPath = prefix + (r.path === \"/\" ? \"\" : r.path);\n\n // Aplica os middlewares DESTE router (pai) sobre o handler que já veio do filho\n const finalHandler =\n this.middlewares.length > 0\n ? composeHandlers([...this.middlewares, found.handler])\n : found.handler;\n\n this.insert(r.method, fullPath, finalHandler);\n }\n } else if (typeof prefixOrMw === \"string\" && typeof routerOrMw === \"function\") {\n const prefix = prefixOrMw;\n const mw = adaptRouterHandler(routerOrMw as RequestHandler);\n\n const wrapper: InternalHandler = async (ctx) => {\n if (ctx.req.path && ctx.req.path.startsWith(prefix)) {\n return mw(ctx);\n }\n return ctx.next ? ctx.next() : Promise.resolve();\n };\n\n this.middlewares.push(wrapper);\n }\n }\n\n public get(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"GET\", path, composeHandlers(internalHandlers));\n }\n\n public post(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"POST\", path, composeHandlers(internalHandlers));\n }\n\n public put(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"PUT\", path, composeHandlers(internalHandlers));\n }\n\n public delete(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"DELETE\", path, composeHandlers(internalHandlers));\n }\n\n public patch(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"PATCH\", path, composeHandlers(internalHandlers));\n }\n\n public all(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n const composed = composeHandlers(internalHandlers);\n const methods = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"];\n for (const method of methods) {\n this.add(method, path, composed);\n }\n }\n}\n","import os from \"node:os\";\nimport cluster from \"node:cluster\";\nimport { logger } from \"../../utils/Logger\";\n\nexport function getIP(port: number) {\n try {\n const networkInterfaces = os.networkInterfaces();\n\n if (!networkInterfaces || Object.keys(networkInterfaces).length === 0) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n return;\n }\n\n let foundIP = false;\n Object.values(networkInterfaces).forEach((ifaceList) => {\n if (!ifaceList) return;\n\n ifaceList.forEach((iface) => {\n const isIPv4 =\n (iface.family as string | number) === \"IPv4\" || (iface.family as string | number) === 4;\n if (isIPv4 && !iface.internal && iface.address) {\n foundIP = true;\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n logger(\"info\", `[${who}] accessible at http://${iface.address}:${port}`);\n }\n });\n });\n\n if (!foundIP) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n } catch (error) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n}\n","import type { IncomingMessage } from \"node:http\";\n\n/**\n * IP resolution configuration interface\n * Similar to Express's 'trust proxy' setting\n */\nexport interface IpResolverConfig {\n /**\n * Enable trust proxy mode to read X-Forwarded-* headers\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n}\n\n/**\n * Check if an IP address is in a CIDR range\n */\nfunction isInCidrRange(ip: string, cidr: string): boolean {\n if (!cidr.includes(\"/\")) {\n return ip === cidr;\n }\n\n const [range, bits] = cidr.split(\"/\");\n\n // Guard against invalid CIDR format\n if (!range || !bits) {\n return false;\n }\n\n const mask = ~(2 ** (32 - parseInt(bits)) - 1);\n\n const ipNum = ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n const rangeNum = range.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n\n return (ipNum & mask) === (rangeNum & mask);\n}\n\n/**\n * Check if IP should be trusted based on trust proxy configuration\n */\nfunction shouldTrustProxy(ip: string, trustProxy: boolean | number | string | string[]): boolean {\n if (trustProxy === true) return true;\n if (trustProxy === false) return false;\n\n if (typeof trustProxy === \"string\") {\n return isInCidrRange(ip, trustProxy);\n }\n\n if (Array.isArray(trustProxy)) {\n return trustProxy.some((range) => isInCidrRange(ip, range));\n }\n\n return false;\n}\n\n/**\n * Resolve client IP address from request\n * Handles proxies, load balancers, and direct connections\n *\n * @param req - HTTP request object\n * @param config - IP resolver configuration\n * @returns Object containing primary IP and array of all IPs\n *\n * @example\n * ```typescript\n * // Don't trust proxies (default)\n * const { ip, ips } = resolveIp(req);\n *\n * // Trust all proxies\n * const { ip, ips } = resolveIp(req, { trustProxy: true });\n *\n * // Trust specific proxy\n * const { ip, ips } = resolveIp(req, { trustProxy: '10.0.0.1' });\n *\n * // Trust CIDR range\n * const { ip, ips } = resolveIp(req, { trustProxy: ['10.0.0.0/8', '172.16.0.0/12'] });\n *\n * // Trust first N hops\n * const { ip, ips } = resolveIp(req, { trustProxy: 2 });\n *\n * // Use custom header\n * const { ip, ips } = resolveIp(req, {\n * trustProxy: true,\n * ipHeader: 'cf-connecting-ip'\n * });\n * ```\n */\nexport function resolveIp(\n req: IncomingMessage,\n config: IpResolverConfig = {}\n): { ip: string; ips: string[] } {\n const { trustProxy = false, ipHeader = \"x-forwarded-for\" } = config;\n\n // Get socket IP as fallback\n // Clean up IPv6 localhost and IPv4-mapped addresses\n let socketIp = req.socket?.remoteAddress || \"\";\n if (socketIp === \"::1\" || socketIp === \"::ffff:127.0.0.1\") {\n socketIp = \"127.0.0.1\";\n } else if (socketIp.startsWith(\"::ffff:\")) {\n socketIp = socketIp.substring(7);\n }\n\n // If not trusting proxy, return socket IP only\n if (trustProxy === false) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Try to get forwarded IPs from headers\n const forwardedHeader = req.headers[ipHeader.toLowerCase()];\n const forwardedFor = Array.isArray(forwardedHeader) ? forwardedHeader[0] : forwardedHeader;\n\n if (!forwardedFor) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Parse all IPs from the header\n const allIps = forwardedFor\n .split(\",\")\n .map((ip) => ip.trim())\n .filter(Boolean);\n\n // Add socket IP to the chain\n if (socketIp) {\n allIps.push(socketIp);\n }\n\n // If trusting all proxies, return first IP\n if (trustProxy === true) {\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is a number, trust that many hops\n if (typeof trustProxy === \"number\") {\n const hopCount = Math.max(0, trustProxy);\n const trustedIndex = Math.max(0, allIps.length - hopCount - 1);\n return {\n ip: allIps[trustedIndex] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is IP/CIDR, validate chain\n const trustedIps: string[] = [];\n for (let i = allIps.length - 1; i >= 0; i--) {\n const currentIp = allIps[i];\n\n if (!currentIp) {\n continue;\n }\n\n if (shouldTrustProxy(currentIp, trustProxy)) {\n continue;\n }\n\n // Found first untrusted IP (client IP)\n return {\n ip: currentIp,\n ips: allIps,\n };\n }\n\n // All IPs were trusted, return first one\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n}\n\n/**\n * Common proxy IP ranges for convenience\n */\nexport const COMMON_PROXY_RANGES = {\n /** Private network ranges (RFC 1918) */\n PRIVATE: [\"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n\n /** Loopback addresses */\n LOOPBACK: [\"127.0.0.0/8\", \"::1/128\"],\n\n /** Link-local addresses */\n LINK_LOCAL: [\"169.254.0.0/16\", \"fe80::/10\"],\n\n /** Cloudflare IP ranges (example - should be updated regularly) */\n CLOUDFLARE: [\n \"173.245.48.0/20\",\n \"103.21.244.0/22\",\n \"103.22.200.0/22\",\n \"103.31.4.0/22\",\n \"141.101.64.0/18\",\n \"108.162.192.0/18\",\n \"190.93.240.0/20\",\n ],\n\n /** AWS ELB IP ranges (example - should be updated regularly) */\n AWS_ELB: [\"52.94.76.0/22\", \"35.180.0.0/16\"],\n};\n","import type { HttpContext } from \"../../types/common.type\";\nimport type { CorsOptions } from \"../../types/plugins/cors.type\";\n\nexport function cors(opts: CorsOptions) {\n const { origin, methods, allowedHeaders } = opts;\n\n return (ctx: HttpContext, next: () => Promise<void>) => {\n ctx.response.setHeader(\n \"Access-Control-Allow-Origin\",\n Array.isArray(origin) ? origin.join(\",\") : origin,\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Methods\",\n Array.isArray(methods) ? methods.join(\",\") : methods,\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Headers\",\n Array.isArray(allowedHeaders) ? allowedHeaders.join(\",\") : allowedHeaders,\n );\n\n if (ctx.request.method === \"OPTIONS\") {\n ctx.response.writeHead(204);\n return ctx.response.end();\n }\n\n return next();\n };\n}\n","import type { HttpContext } from \"../../types/common.type\";\n\ninterface Entry {\n count: number;\n ts: number;\n}\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(limit: number, ttl: number) {\n return async (ctx: HttpContext, next: () => Promise<void>) => {\n const ip = ctx.request.socket.remoteAddress;\n const now = Date.now();\n const entry = store.get(ip!) ?? { count: 0, ts: now };\n\n if (now - entry.ts > ttl) {\n entry.count = 1;\n entry.ts = now;\n } else {\n entry.count++;\n }\n\n store.set(ip!, entry);\n\n if (entry.count > limit) {\n ctx.response.status(429).send(\"Too many requests\");\n return;\n }\n\n await next();\n };\n}\n","import http from \"node:http\";\nimport https from \"node:https\";\nimport type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\nimport { logger } from \"../../utils/Logger\";\nimport type { ProxyOptions } from \"../../types/plugins/proxy.type\";\n\nexport function createProxyMiddleware(options: ProxyOptions) {\n const {\n target,\n pathRewrite = {},\n headers = {},\n timeout = 30000,\n followRedirects = false,\n preserveHost = false,\n logLevel = \"info\",\n onProxyReq,\n onProxyRes,\n onError,\n } = options;\n\n return async (req: RequestServer, res: ResponseServer, next?: Function) => {\n try {\n // Parse target URL\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === \"https:\";\n const client = isHttps ? https : http;\n\n // Construir o path\n let path = req.path || \"/\";\n\n // Aplicar path rewrites\n for (const [pattern, replacement] of Object.entries(pathRewrite)) {\n const regex = new RegExp(pattern);\n path = path.replace(regex, replacement);\n }\n\n // Adicionar query string\n if (req.url && req.url.includes(\"?\")) {\n const queryString = req.url.split(\"?\")[1];\n path += `?${queryString}`;\n }\n\n if (logLevel !== \"none\") {\n logger(\n logLevel === \"debug\" ? \"info\" : \"info\",\n `[Proxy] ${req.method} ${req.url} → ${target}${path}`\n );\n }\n\n // Configurar headers\n const proxyHeaders: http.OutgoingHttpHeaders = {\n ...req.headers,\n ...headers,\n };\n\n // Remover headers problemáticos\n delete proxyHeaders[\"host\"];\n delete proxyHeaders[\"connection\"];\n delete proxyHeaders[\"transfer-encoding\"];\n\n if (preserveHost && req.headers.host) {\n proxyHeaders[\"host\"] = req.headers.host;\n } else {\n proxyHeaders[\"host\"] = targetUrl.host;\n }\n\n // Adicionar headers de forwarding\n if (req.ip) {\n proxyHeaders[\"x-forwarded-for\"] = req.ip;\n }\n proxyHeaders[\"x-forwarded-proto\"] = req.protocol || \"http\";\n proxyHeaders[\"x-forwarded-host\"] = req.headers.host || \"\";\n\n // Criar requisição proxy\n const proxyReqOptions: http.RequestOptions = {\n hostname: targetUrl.hostname,\n port: targetUrl.port || (isHttps ? 443 : 80),\n path,\n method: req.method,\n headers: proxyHeaders,\n timeout,\n };\n\n const proxyReq = client.request(proxyReqOptions, (proxyRes) => {\n // Callback customizado\n if (onProxyRes) {\n onProxyRes(proxyRes, req, res);\n }\n\n // Copiar status code\n res.statusCode = proxyRes.statusCode || 200;\n\n // Copiar headers (exceto alguns problemáticos)\n if (proxyRes.headers) {\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (key.toLowerCase() !== \"transfer-encoding\" && value) {\n res.setHeader(key, value);\n }\n }\n }\n\n // Fazer pipe da resposta diretamente\n proxyRes.pipe(res as any);\n });\n\n // Callback customizado antes de enviar\n if (onProxyReq) {\n onProxyReq(proxyReq, req);\n }\n\n // Lidar com erros\n proxyReq.on(\"error\", (err) => {\n if (onError) {\n onError(err, req, res);\n } else {\n logger(\"error\", `[Proxy] Error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 502;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Bad Gateway\",\n message: \"Failed to connect to upstream server\",\n }));\n }\n }\n });\n\n proxyReq.on(\"timeout\", () => {\n proxyReq.destroy();\n if (!res.headersSent) {\n res.statusCode = 504;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Gateway Timeout\",\n message: \"Upstream server took too long to respond\",\n }));\n }\n });\n\n // Enviar body se existir\n if (req.body && [\"POST\", \"PUT\", \"PATCH\"].includes(req.method || \"\")) {\n const bodyStr = typeof req.body === \"string\" ? req.body : JSON.stringify(req.body);\n proxyReq.write(bodyStr);\n }\n\n proxyReq.end();\n } catch (err: any) {\n logger(\"error\", `[Proxy] Setup error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Internal Server Error\",\n message: \"Failed to setup proxy\",\n }));\n }\n }\n };\n}\n\n/**\n * Middleware de proxy simples - apenas passa o target\n */\nexport function proxyPlugin(target: string, options: Partial<ProxyOptions> = {}) {\n return createProxyMiddleware({ target, ...options });\n}\n","import type { RequestServer } from \"../types/http/request.type\";\nimport type { ResponseServer } from \"../types/http/response.type\";\nimport type { ConfigTypes } from \"../shared/config/ConfigModule\";\nimport type { RequestHandler } from \"../types/common.type\";\n\nexport function createLoggingMiddleware(config: ConfigTypes): RequestHandler {\n const isEnabled = config.logging?.enabled ?? true;\n const showDetails = config.logging?.showDetails ?? true;\n const env = config.environment || \"development\";\n\n const reset = \"\\x1b[0m\";\n const bold = \"\\x1b[1m\";\n const dim = \"\\x1b[2m\";\n const colors: Record<string, string> = {\n GET: \"\\x1b[36m\",\n POST: \"\\x1b[32m\",\n PUT: \"\\x1b[33m\",\n DELETE: \"\\x1b[31m\",\n PATCH: \"\\x1b[35m\",\n DEFAULT: \"\\x1b[37m\",\n };\n\n const fn = async (...args: any[]) => {\n let req: RequestServer | undefined;\n let res: ResponseServer | undefined;\n let next: ((err?: any) => Promise<void> | void) | undefined;\n\n if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n const ctx = args[0];\n req = (ctx.request || ctx.req) as RequestServer | undefined;\n res = (ctx.response || ctx.res) as ResponseServer | undefined;\n next = ctx.next;\n } else {\n req = args[0] as RequestServer | undefined;\n res = args[1] as ResponseServer | undefined;\n next = args[2] as typeof next;\n }\n\n if (!req || !res) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n if (!isEnabled) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n const start = Date.now();\n const methodRaw = String(req.method || \"GET\").toUpperCase();\n const methodPad = methodRaw.padEnd(6, \" \");\n const methodColor = colors[methodRaw] || colors.DEFAULT;\n const url = String((req as any).originalUrl || req.url || \"/\");\n const ip = String((req as any).ip || \"\").replace(\"::ffff:\", \"\");\n const time = new Date().toLocaleTimeString(\"pt-BR\", { hour12: false });\n\n try {\n if (env === \"development\") {\n const header = `${dim}·${reset} ${bold}${time}${reset} ${methodColor}${methodPad}${reset} ${bold}${url}${reset}`;\n console.log(header);\n if (showDetails) {\n try {\n if (req.query && Object.keys(req.query).length > 0) {\n console.log(`${dim} › query:${reset} ${JSON.stringify(req.query)}`);\n }\n } catch {}\n try {\n const params = (req as any).params;\n if (params && Object.keys(params).length > 0) {\n console.log(`${dim} › params:${reset} ${JSON.stringify(params)}`);\n }\n } catch {}\n try {\n if (req.body && Object.keys(req.body).length > 0) {\n console.log(`${dim} › body:${reset} ${JSON.stringify(req.body)}`);\n }\n } catch {}\n }\n } else {\n console.log(\n `${dim}·${reset} ${time} ${methodColor}${methodPad}${reset} ${url} ${dim}• IP:${ip}${reset}`\n );\n }\n } catch {}\n\n try {\n if (typeof (res as any).on === \"function\") {\n (res as any).on(\"finish\", () => {\n const duration = Date.now() - start;\n const statusCode = Number((res as any).statusCode || 0);\n const statusColor =\n statusCode >= 500 ? \"\\x1b[31m\" : statusCode >= 400 ? \"\\x1b[33m\" : \"\\x1b[32m\";\n const statusText = `${statusColor}${statusCode}${reset}`;\n const durationText = `${dim}(${duration}ms)${reset}`;\n const ipShort = ip || \"-\";\n const line = `${dim}→${reset} ${statusText} ${durationText} ${dim}• IP:${ipShort}${reset}`;\n console.log(line);\n });\n }\n } catch {}\n\n if (typeof next === \"function\") {\n await next();\n }\n };\n\n return fn as unknown as RequestHandler;\n}\n","import http from \"node:http\";\nimport cluster, { worker } from \"node:cluster\";\nimport os from \"node:os\";\n\nimport { ConfigModule } from \"../shared/config/ConfigModule\";\nimport type { RequestServer } from \"../types/http/request.type\";\nimport type { CookieOptions, ResponseServer } from \"../types/http/response.type\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { logger } from \"../utils/Logger\";\nimport { parseQS } from \"../utils/Parser\";\nimport { serializeCookie } from \"../utils/cookies/SerializeCookie\";\nimport { parseCookiesHeader } from \"../utils/cookies/ParserCookie\";\nimport { Router } from \"./Router\";\nimport type { InternalHandler, RequestHandler } from \"../types/common.type\";\nimport { getIP } from \"./utils/GetIp\";\nimport { resolveIp } from \"./utils/IpResolver\";\nimport { cors } from \"../shared/plugins/CORSPlugin\";\nimport { rateLimit } from \"../shared/plugins/RateLimitPlugin\";\nimport type { ProxyOptions } from \"../types\";\nimport { proxyPlugin } from \"../shared/plugins\";\nimport { composeHandlers } from \"./utils/Compose\";\n\nexport { createLoggingMiddleware } from \"../middleware/LoggingMiddleware\";\nexport { proxyPlugin, createProxyMiddleware } from \"../shared/plugins/ProxyPlugin\";\n\nfunction adaptRequestHandler(handler: RequestHandler): InternalHandler {\n return async (ctx) => {\n if (typeof handler !== \"function\") return;\n if (handler.length > 1) {\n return (handler as any)(ctx.req, ctx.res, ctx.next);\n } else {\n return (handler as any)(ctx);\n }\n };\n}\n\nexport class AzuraClient {\n private opts: ReturnType<ConfigModule[\"getAll\"]>;\n private server?: http.Server;\n private port: number = 3000;\n private initPromise: Promise<void>;\n private router: Router;\n private middlewares: RequestHandler[] = [];\n private proxies: Array<{ path: string; handler: RequestHandler }> = [];\n private isShuttingDown: boolean = false;\n\n constructor() {\n const config = new ConfigModule();\n try {\n config.initSync();\n } catch (error: any) {\n console.error(\"[Azura] ❌ Falha ao carregar configuração:\", error.message);\n process.exit(1);\n }\n this.opts = config.getAll();\n this.router = new Router(this.opts.debug);\n this.initPromise = this.init();\n this.setupDefaultRoutes();\n }\n\n private setupDefaultRoutes() {\n this.router.add(\n \"GET\",\n \"/favicon.ico\",\n adaptRequestHandler((ctx: any) => {\n ctx.res.status(204).send();\n }) as any,\n );\n }\n\n public getConfig() {\n return this.opts;\n }\n\n private async init() {\n this.port = this.opts.server?.port || 3000;\n\n if (this.opts.server?.cluster && cluster.isPrimary) {\n const cpuCount = os.cpus().length;\n const desired = this.opts.server.clusterInstances ?? 2;\n\n const workers = desired > cpuCount ? 2 : Math.max(1, desired);\n\n for (let i = 0; i < workers; i++) cluster.fork();\n cluster.on(\"exit\", () => cluster.fork());\n return;\n }\n\n if (this.opts.plugins?.cors?.enabled) {\n cors({\n origin: this.opts.plugins.cors.origins,\n methods: this.opts.plugins.cors.methods,\n allowedHeaders: this.opts.plugins.cors.allowedHeaders,\n });\n logger(\"info\", \"CORS plugin enabled\");\n }\n\n if (this.opts.plugins?.rateLimit?.enabled) {\n rateLimit(this.opts.plugins.rateLimit.limit, this.opts.plugins.rateLimit.timeframe);\n logger(\"info\", \"Rate Limit plugin enabled\");\n }\n\n // Create server WITHOUT handler to allow upgrade events to work properly\n this.server = http.createServer();\n \n // Add request handler manually\n this.server.on('request', (req, res) => {\n this.handle(req as any, res as any);\n });\n }\n\n public use(prefix: string, mw: RequestHandler): void;\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, routerOrMw?: Router | RequestHandler): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && routerOrMw instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = routerOrMw.listRoutes();\n for (const r of routes) {\n const found = routerOrMw.find(r.method, r.path);\n if (!found) continue;\n const fullPath = prefix + (r.path === \"/\" ? \"\" : r.path);\n\n this.router.add(r.method, fullPath, found.handler);\n }\n } else if (typeof prefixOrMw === \"string\" && typeof routerOrMw === \"function\") {\n const prefix = prefixOrMw;\n const mw = routerOrMw as RequestHandler;\n\n const wrapper: RequestHandler = (req, res, next) => {\n if (req.path && req.path.startsWith(prefix)) {\n if (mw.length > 1) {\n return (mw as any)(req, res, next);\n } else {\n return (mw as any)({ req, res, next, request: req, response: res });\n }\n }\n return next ? next() : Promise.resolve();\n };\n this.middlewares.push(wrapper);\n }\n }\n\n public addRoute(method: string, path: string, ...handlers: RequestHandler[]): void {\n const adapted: InternalHandler[] = handlers.map((h) => adaptRequestHandler(h));\n const composed = composeHandlers(adapted);\n this.router.add(method, path, composed);\n }\n\n public get = (p: string, ...h: RequestHandler[]) => this.addRoute(\"GET\", p, ...h);\n public post = (p: string, ...h: RequestHandler[]) => this.addRoute(\"POST\", p, ...h);\n public put = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PUT\", p, ...h);\n public delete = (p: string, ...h: RequestHandler[]) => this.addRoute(\"DELETE\", p, ...h);\n public patch = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PATCH\", p, ...h);\n public all = (p: string, ...h: RequestHandler[]) => {\n const methods = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"];\n for (const method of methods) {\n this.addRoute(method, p, ...h);\n }\n };\n\n public proxy(path: string, target: string, options: Partial<ProxyOptions> = {}) {\n this.proxies.push({ path, handler: proxyPlugin(target, options) as RequestHandler });\n }\n\n public getRoutes() {\n return this.router.listRoutes();\n }\n\n public async listen(port = this.port) {\n await this.initPromise;\n\n if (!this.server) {\n logger(\"error\", \"Server not initialized\");\n return;\n }\n\n this.server.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n logger(\"error\", `❌ Port ${port} is already in use.`);\n } else {\n logger(\"error\", \"Server failed to start: \" + (error?.message || String(error)));\n }\n process.exit(1);\n });\n\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n this.server.listen(port, () => {\n logger(\"info\", `[${who}] listening on http://localhost:${port}`);\n if (this.opts.server?.ipHost) getIP(port);\n\n if (this.opts.logging?.enabled) {\n const routes = this.getRoutes();\n if (routes.length > 0) {\n logger(\"info\", `\\n📋 Registered routes (${routes.length}):`);\n routes.forEach((r) => {\n logger(\"info\", ` ${r.method.padEnd(7)} ${r.path}`);\n });\n }\n }\n });\n\n return this.server;\n }\n\n public async shutdown(timeout: number = 10000): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n\n logger(\"info\", \"Starting graceful shutdown...\");\n\n return new Promise((resolve) => {\n const forceShutdown = setTimeout(() => {\n logger(\"warn\", \"Forcing shutdown after timeout\");\n process.exit(1);\n }, timeout);\n\n if (this.server) {\n this.server.close(() => {\n clearTimeout(forceShutdown);\n logger(\"info\", \"Server closed successfully\");\n resolve();\n });\n } else {\n clearTimeout(forceShutdown);\n resolve();\n }\n });\n }\n\n public async fetch(request: Request): Promise<Response> {\n await this.initPromise;\n const url = new URL(request.url);\n const qs = url.search.slice(1);\n\n const rawReq: any = {\n method: request.method,\n url: url.pathname + url.search,\n originalUrl: url.pathname + url.search,\n path: url.pathname || \"/\",\n protocol: url.protocol.slice(0, -1),\n secure: url.protocol === \"https:\",\n headers: {},\n params: {},\n };\n\n request.headers.forEach((v, k) => (rawReq.headers[k] = v));\n\n let _query: any;\n Object.defineProperty(rawReq, \"query\", {\n get: () => (_query ? _query : (_query = parseQS(qs))),\n });\n\n let _cookies: any;\n Object.defineProperty(rawReq, \"cookies\", {\n get: () =>\n _cookies ? _cookies : (_cookies = parseCookiesHeader(request.headers.get(\"cookie\") || \"\")),\n });\n\n const trust = this.opts.server;\n let _ip: any;\n Object.defineProperty(rawReq, \"ip\", {\n get: () => {\n if (_ip) return _ip;\n const res = resolveIp(rawReq, { trustProxy: trust?.trustProxy, ipHeader: trust?.ipHeader });\n rawReq.ips = res.ips;\n return (_ip = res.ip);\n },\n });\n\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(request.method.toUpperCase())) {\n try {\n const ct = request.headers.get(\"content-type\") || \"\";\n if (ct.includes(\"application/json\")) {\n rawReq.body = await request.json();\n } else if (ct.includes(\"application/x-www-form-urlencoded\")) {\n const t = await request.text();\n const p = parseQS(t);\n const b: any = {};\n for (const k in p) {\n const v = p[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n } else {\n rawReq.body = await request.text();\n }\n } catch {\n rawReq.body = {};\n }\n } else {\n rawReq.body = {};\n }\n\n let statusCode = 200;\n const headers = new Headers();\n let body: any = null;\n\n const rawRes: any = {\n statusCode,\n status: (c: number) => {\n statusCode = c;\n return rawRes;\n },\n set: (k: string, v: string) => {\n headers.set(k, v);\n return rawRes;\n },\n header: (k: string, v: string) => {\n headers.set(k, v);\n return rawRes;\n },\n get: (k: string) => headers.get(k),\n type: (v: string) => {\n headers.set(\"Content-Type\", v);\n return rawRes;\n },\n contentType: (v: string) => {\n headers.set(\"Content-Type\", v);\n return rawRes;\n },\n send: (b: any) => {\n if (typeof b === \"object\") {\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify(b);\n } else {\n body = String(b || \"\");\n }\n return rawRes;\n },\n json: (b: any) => {\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify(b);\n return rawRes;\n },\n };\n\n try {\n const match = this.router.find(rawReq.method, rawReq.path);\n if (!match) return new Response(\"Not Found\", { status: 404 });\n\n rawReq.params = match.params || {};\n\n const chain = [...this.middlewares.map(adaptRequestHandler), match.handler];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) throw err;\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n await fn({ req: rawReq, res: rawRes, next });\n };\n\n await next();\n } catch (err: any) {\n statusCode = err instanceof HttpError ? err.status : 500;\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify({ error: err.message || \"Internal Server Error\" });\n }\n\n return new Response(body, { status: statusCode, headers });\n }\n\n private async handle(rawReq: RequestServer, rawRes: ResponseServer) {\n const urlStr = rawReq.url || \"/\";\n const qIndex = urlStr.indexOf(\"?\");\n const path = qIndex === -1 ? urlStr : urlStr.substring(0, qIndex);\n\n rawReq.path = path;\n rawReq.originalUrl = urlStr;\n rawReq.protocol = this.opts.server?.https ? \"https\" : \"http\";\n rawReq.secure = rawReq.protocol === \"https\";\n\n let _query: any = null;\n Object.defineProperty(rawReq, \"query\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_query !== null) return _query;\n if (qIndex === -1) return (_query = {});\n return (_query = parseQS(urlStr.substring(qIndex + 1)));\n },\n });\n\n let _cookies: any = null;\n Object.defineProperty(rawReq, \"cookies\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_cookies !== null) return _cookies;\n return (_cookies = parseCookiesHeader((rawReq.headers[\"cookie\"] as string) || \"\"));\n },\n });\n\n let _ip: string | undefined;\n const trustProxy = this.opts.server?.trustProxy;\n const ipHeader = this.opts.server?.ipHeader;\n Object.defineProperty(rawReq, \"ip\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_ip !== undefined) return _ip;\n const res = resolveIp(rawReq, { trustProxy, ipHeader });\n rawReq.ips = res.ips;\n return (_ip = res.ip);\n },\n });\n\n rawReq.get = rawReq.header = (name: string) => {\n const v = rawReq.headers[name.toLowerCase()];\n if (Array.isArray(v)) return v[0];\n return v;\n };\n\n rawRes.status = (code: number) => {\n rawRes.statusCode = code;\n return rawRes;\n };\n\n rawRes.set = rawRes.header = (field: string, value: string | number | string[]) => {\n rawRes.setHeader(field, value);\n return rawRes;\n };\n\n rawRes.get = (field: string) => {\n const v = rawRes.getHeader(field);\n if (Array.isArray(v)) return v[0];\n return typeof v === \"number\" ? String(v) : (v as string | undefined);\n };\n\n rawRes.type = rawRes.contentType = (t: string) => {\n rawRes.setHeader(\"Content-Type\", t);\n return rawRes;\n };\n\n rawRes.location = (u: string) => {\n rawRes.setHeader(\"Location\", u);\n return rawRes;\n };\n\n rawRes.redirect = ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n rawRes.statusCode = a;\n rawRes.setHeader(\"Location\", b!);\n } else {\n rawRes.statusCode = 302;\n rawRes.setHeader(\"Location\", a);\n }\n rawRes.end();\n return rawRes;\n }) as ResponseServer[\"redirect\"];\n\n rawRes.cookie = (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = rawRes.getHeader(\"Set-Cookie\");\n if (prev) {\n const list = Array.isArray(prev) ? prev.concat(s) : [String(prev), s];\n rawRes.setHeader(\"Set-Cookie\", list);\n } else {\n rawRes.setHeader(\"Set-Cookie\", s);\n }\n return rawRes;\n };\n\n rawRes.clearCookie = (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n };\n\n rawRes.send = (b: any) => {\n if (b === undefined || b === null) {\n rawRes.end();\n return rawRes;\n }\n if (typeof b === \"object\" && !Buffer.isBuffer(b)) {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n } else {\n rawRes.end(b);\n }\n return rawRes;\n };\n\n rawRes.json = (b: any) => {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n return rawRes;\n };\n\n rawReq.body = {};\n const method = rawReq.method || \"GET\";\n\n if (method === \"POST\" || method === \"PUT\" || method === \"PATCH\") {\n const chunks: Buffer[] = [];\n try {\n await new Promise<void>((resolve, reject) => {\n rawReq.on(\"data\", (chunk) => chunks.push(chunk));\n rawReq.on(\"end\", () => {\n if (chunks.length === 0) return resolve();\n const buffer = Buffer.concat(chunks);\n const ct = rawReq.headers[\"content-type\"] || \"\";\n try {\n if (ct.includes(\"application/json\")) {\n rawReq.body = JSON.parse(buffer.toString());\n } else if (ct.includes(\"application/x-www-form-urlencoded\")) {\n const parsed = parseQS(buffer.toString());\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n } else {\n rawReq.body = buffer.toString();\n }\n } catch {\n rawReq.body = {};\n }\n resolve();\n });\n rawReq.on(\"error\", (err) => {\n reject(err);\n });\n });\n } catch (err: any) {\n logger(\"error\", \"Body parse error: \" + err.message);\n }\n }\n\n const errorHandler = (err: any) => {\n if (!rawRes.writableEnded) {\n logger(\"error\", err?.message || String(err));\n rawRes\n .status(err instanceof HttpError ? err.status : 500)\n .json(\n err instanceof HttpError\n ? (err.payload ?? { error: err.message || \"Internal Server Error\" })\n : { error: err?.message || \"Internal Server Error\" },\n );\n }\n };\n\n try {\n const proxies = this.proxies;\n const pLen = proxies.length;\n if (pLen > 0) {\n for (let i = 0; i < pLen; i++) {\n const proxy = proxies[i];\n if (proxy && path.startsWith(proxy.path)) {\n const chain = this.middlewares.map(adaptRequestHandler);\n let idx = 0;\n const middlewareNext = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({ req: rawReq, res: rawRes, next: middlewareNext });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await middlewareNext();\n\n if (!rawRes.writableEnded) {\n const handler = adaptRequestHandler(proxy.handler);\n await handler({ req: rawReq, res: rawRes, next: middlewareNext });\n }\n return;\n }\n }\n }\n\n const match = this.router.find(method, path);\n if (!match) {\n throw new HttpError(404, \"Not Found\");\n }\n\n rawReq.params = match.params || {};\n\n const chain = [...this.middlewares.map(adaptRequestHandler), match.handler];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({ req: rawReq, res: rawRes, next });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await next();\n } catch (err) {\n errorHandler(err);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/config/ConfigModule.ts","../src/infra/utils/HttpError.ts","../src/types/utils/colors.type.ts","../src/types/utils/icons.type.ts","../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/cookies/ParserCookie.ts","../src/infra/utils/route/Node.ts","../src/infra/utils/Compose.ts","../src/infra/Router.ts","../src/infra/utils/GetIp.ts","../src/infra/utils/IpResolver.ts","../src/shared/plugins/CORSPlugin.ts","../src/shared/plugins/RateLimitPlugin.ts","../src/shared/plugins/ProxyPlugin.ts","../src/middleware/LoggingMiddleware.ts","../src/infra/Server.ts"],"names":["path","existsSync","require","createRequire","readFileSync","os","cluster","timeout","https","http","resolve","chain","idx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\n\n/**\n * Config Files Extensions Supported\n * ex: azura.config.*extension\n */\ntype SupportedConfigFile = \".js\" | \".ts\" | \".json\" | \".yaml\" | \".yml\";\n\nexport type ConfigTypes = {\n name?: string;\n environment?: \"development\" | \"production\";\n debug?: boolean;\n server?: {\n port?: number;\n cluster?: boolean;\n clusterInstances?: number;\n ipHost?: boolean;\n https?: boolean;\n /**\n * Configure trust proxy behavior for IP resolution\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n };\n plugins?: {\n rateLimit?: {\n enabled: boolean;\n limit: number;\n timeframe: number;\n };\n cors?: {\n enabled: boolean;\n origins: string | string[];\n methods: string | string[];\n allowedHeaders: string | string[];\n credentials: boolean;\n };\n };\n logging?: {\n enabled?: boolean;\n showDetails?: boolean;\n };\n};\n\nexport class ConfigModule {\n private config: ConfigTypes = {};\n\n /**\n * Load config files first (azura.config.*)\n * Received error if config file not found or invalid format\n */\n initSync(): void {\n const cdw = process.cwd();\n const configFiles = [\n \"azura.config.ts\",\n \"azura.config.js\",\n \"azura.config.json\",\n \"azura.config.yaml\",\n \"azura.config.yml\",\n ];\n\n let loaded = false;\n\n for (const fileName of configFiles) {\n const filePath = path.join(cdw, fileName);\n if (!existsSync(filePath)) continue;\n\n const extension = path.extname(fileName) as SupportedConfigFile;\n\n try {\n let parsed: ConfigTypes;\n\n switch (extension) {\n case \".ts\":\n case \".js\":\n // Usa createRequire para manter compatibilidade com ESM\n const require = createRequire(import.meta.url);\n const mod = require(filePath);\n parsed = mod.default || mod;\n break;\n case \".json\":\n const raw = readFileSync(filePath, \"utf8\");\n parsed = JSON.parse(raw);\n break;\n case \".yaml\":\n case \".yml\":\n const yamlRaw = readFileSync(filePath, \"utf8\");\n const requireYaml = createRequire(import.meta.url);\n const jsYaml = requireYaml(\"js-yaml\");\n parsed = jsYaml.load(yamlRaw) as ConfigTypes;\n break;\n default:\n throw new Error(`Invalid config file extension: ${extension}`);\n }\n\n this.config = { ...this.config, ...parsed };\n loaded = true;\n break;\n } catch (error: Error | any) {\n throw new Error(`Error loading config file: ${filePath}\\n${error.message}`);\n }\n }\n\n if (!loaded) {\n throw new Error(\"Nothing config file found in the current directory.\");\n }\n }\n\n /**\n * Get all configs from loaded config file\n * @returns ConfigTypes\n */\n getAll(): ConfigTypes {\n return this.config;\n }\n\n /**\n * Return a specific config from loaded config file\n *\n * @template T\n * @param {T} key - key of the config to retrieve\n * @returns {ConfigTypes[T]}\n */\n get<T extends keyof ConfigTypes>(key: T): ConfigTypes[T] {\n return this.config[key];\n }\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","/**\n * ANSI escape codes for text styling\n * These codes control text formatting in terminal output\n */\nexport const RESET = \"\\x1b[0m\"; // Reset all styles\nexport const BOLD = \"\\x1b[1m\"; // Bold/bright text\nexport const DIM = \"\\x1b[2m\"; // Dim/faded text\n\n/**\n * Predefined ANSI foreground colors\n * Includes standard and bright color variants\n */\nexport const ANSI_COLORS = {\n black: \"\\x1b[30m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\n\n/**\n * ANSI background color codes\n * Used for highlighting text with colored backgrounds\n */\nexport const BG_COLORS = {\n bgBlack: \"\\x1b[40m\",\n bgRed: \"\\x1b[41m\",\n bgGreen: \"\\x1b[42m\",\n bgYellow: \"\\x1b[43m\",\n bgBlue: \"\\x1b[44m\",\n bgMagenta: \"\\x1b[45m\",\n bgCyan: \"\\x1b[46m\",\n bgWhite: \"\\x1b[47m\",\n};\n\n/**\n * Default color mapping for each log level\n * Provides semantic color coding for different message types\n */\nexport const DEFAULT_COLORS = {\n debug: ANSI_COLORS.gray,\n info: ANSI_COLORS.cyan,\n success: ANSI_COLORS.brightGreen,\n warn: ANSI_COLORS.yellow,\n error: ANSI_COLORS.red,\n fatal: ANSI_COLORS.brightRed,\n trace: ANSI_COLORS.magenta,\n log: ANSI_COLORS.white,\n};\n","/**\n * Default emoji icons for each log level\n * Provides visual indicators to quickly identify message severity\n */\nexport const DEFAULT_ICONS = {\n debug: \"🐛\",\n info: \"ℹ️\",\n success: \"✅\",\n warn: \"⚠️\",\n error: \"❌\",\n fatal: \"💀\",\n trace: \"🔍\",\n log: \"📝\",\n arrow: \"➡️\",\n};\n","import type { LoggerConfig } from \"../types/logger.types\";\nimport {\n ANSI_COLORS,\n BG_COLORS,\n BOLD,\n DEFAULT_COLORS,\n DIM,\n RESET,\n} from \"../types/utils/colors.type\";\nimport { DEFAULT_ICONS } from \"../types/utils/icons.type\";\n\n/**\n * Global logger configuration\n * These settings apply to all logger calls unless overridden by instance-specific options\n */\nlet globalConfig: LoggerConfig = {\n showTimestamp: false,\n showIcon: true,\n timestampFormat: \"time\",\n prefix: \"Azura\",\n uppercase: true,\n bold: false,\n dim: false,\n};\n\n/**\n * Configure the logger globally\n * Updates default settings that apply to all subsequent log calls\n * @param config - Logger configuration options\n * @example\n * configureLogger({\n * showTimestamp: true,\n * timestampFormat: 'datetime',\n * bold: true,\n * prefix: 'MyApp'\n * });\n */\nexport function configureLogger(config: LoggerConfig): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * Convert hexadecimal color code to ANSI escape sequence\n * @param hex - Hexadecimal color string (e.g., '#ff5733')\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example hexToAnsi('#00ff00') // Returns ANSI code for green\n */\nfunction hexToAnsi(hex: string): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Convert RGB color values to ANSI escape sequence\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example rgbToAnsi(255, 0, 128) // Returns ANSI code for custom pink\n */\nfunction rgbToAnsi(r: number, g: number, b: number): string {\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Resolve color string to ANSI escape sequence\n * Supports hex (#rrggbb), rgb (rgb(r,g,b)), and predefined color names\n * @param color - Color specification string\n * @returns ANSI escape sequence for the specified color\n * @example\n * getColorCode('#ff0000') // Hex color\n * getColorCode('rgb(255,0,0)') // RGB color\n * getColorCode('brightRed') // Predefined color\n */\nfunction getColorCode(color: string): string {\n if (color.startsWith(\"#\")) {\n return hexToAnsi(color);\n }\n if (color.startsWith(\"rgb(\")) {\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n return rgbToAnsi(Number(match[1]), Number(match[2]), Number(match[3]));\n }\n }\n return (ANSI_COLORS as any)[color] || color;\n}\n\n/**\n * Format current timestamp according to specified format\n * @param format - Timestamp format: 'time' (HH:MM:SS), 'datetime' (locale string), or 'iso' (ISO 8601)\n * @returns Formatted timestamp string\n * @example\n * formatTimestamp('time') // '14:23:45'\n * formatTimestamp('datetime') // '1/11/2026, 2:23:45 PM'\n * formatTimestamp('iso') // '2026-01-11T14:23:45.123Z'\n */\nfunction formatTimestamp(format: \"time\" | \"datetime\" | \"iso\"): string {\n const now = new Date();\n switch (format) {\n case \"time\":\n return now.toLocaleTimeString();\n case \"datetime\":\n return now.toLocaleString();\n case \"iso\":\n return now.toISOString();\n default:\n return now.toLocaleTimeString();\n }\n}\n\n/**\n * Main logger function - outputs formatted log messages to console\n * Supports multiple log levels, custom colors, icons, timestamps, and styling options\n * @param level - Log level (debug, info, success, warn, error, fatal, trace, log)\n * @param msg - Message to log\n * @param options - Optional configuration to override global settings for this log call\n * @example\n * logger('info', 'Server started on port 3000');\n * logger('error', 'Connection failed', { showTimestamp: true });\n * logger('success', 'Task completed', { colors: { success: '#00ff00' } });\n */\nexport function logger(\n level: keyof typeof DEFAULT_COLORS,\n msg: string,\n options?: LoggerConfig\n): void {\n const config = { ...globalConfig, ...options };\n\n const colors = { ...DEFAULT_COLORS, ...config.colors };\n const icons = { ...DEFAULT_ICONS, ...config.icons };\n\n const color = getColorCode(colors[level] || ANSI_COLORS.white);\n const icon = config.showIcon !== false ? icons[level] || \"\" : \"\";\n const levelLabel = config.uppercase ? level.toUpperCase() : level;\n\n let style = color;\n if (config.bold) style += BOLD;\n if (config.dim) style += DIM;\n if (config.backgroundColor) {\n style += getColorCode(config.backgroundColor);\n }\n\n const parts: string[] = [];\n\n // Add timestamp if enabled\n if (config.showTimestamp) {\n const timestamp = formatTimestamp(config.timestampFormat || \"time\");\n parts.push(`${DIM}${timestamp}${RESET}`);\n }\n\n // Add icon\n if (icon) {\n parts.push(icon);\n }\n\n // Add prefix and level\n const prefix = config.prefix\n ? `${style}[${config.prefix}:${levelLabel}]${RESET}`\n : `${style}[${levelLabel}]${RESET}`;\n parts.push(prefix);\n\n // Add message\n parts.push(msg);\n\n const output = parts.join(\" \");\n\n // Use appropriate console method\n const consoleMethod =\n level === \"error\" || level === \"fatal\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"debug\" || level === \"trace\"\n ? console.debug\n : console.log;\n\n consoleMethod(output);\n}\n\n/**\n * Convenience methods for each log level\n * Provides a cleaner API for common logging operations\n * @example\n * log.info('Server started');\n * log.error('Connection failed');\n * log.success('Task completed successfully');\n */\nexport const log = {\n debug: (msg: string, options?: LoggerConfig) => logger(\"debug\", msg, options),\n info: (msg: string, options?: LoggerConfig) => logger(\"info\", msg, options),\n success: (msg: string, options?: LoggerConfig) => logger(\"success\", msg, options),\n warn: (msg: string, options?: LoggerConfig) => logger(\"warn\", msg, options),\n error: (msg: string, options?: LoggerConfig) => logger(\"error\", msg, options),\n fatal: (msg: string, options?: LoggerConfig) => logger(\"fatal\", msg, options),\n trace: (msg: string, options?: LoggerConfig) => logger(\"trace\", msg, options),\n log: (msg: string, options?: LoggerConfig) => logger(\"log\", msg, options),\n};\n\n/**\n * Color utility functions and constants for advanced customization\n * Provides direct access to color conversion functions and ANSI codes\n * @example\n * colors.hex('#ff5733') // Convert hex to ANSI\n * colors.rgb(255, 87, 51) // Convert RGB to ANSI\n * colors.ansi.brightGreen // Access predefined colors\n * colors.bg.bgRed // Access background colors\n */\nexport const colors = {\n hex: hexToAnsi,\n rgb: rgbToAnsi,\n ansi: ANSI_COLORS,\n bg: BG_COLORS,\n reset: RESET,\n bold: BOLD,\n dim: DIM,\n};\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { InternalHandler } from \"../../../types/common.type\";\n\nexport class Node {\n children: Record<string, Node> = Object.create(null);\n paramNode: Node | null = null;\n handlers: Record<string, InternalHandler> = Object.create(null);\n paramName: string = \"\";\n}","import type { InternalHandler } from \"../../types/common.type\";\n\n\nexport function composeHandlers(handlers: ReadonlyArray<InternalHandler>): InternalHandler {\n return function composed(ctx) {\n let index = -1;\n\n function dispatch(i: number): Promise<void> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n const fn = handlers[i];\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(\n fn({\n req: ctx.req,\n res: ctx.res,\n next: () => dispatch(i + 1),\n }),\n );\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n return dispatch(0);\n };\n}\n","import type { RequestHandler } from \"../types\";\nimport type { InternalHandler } from \"../types/common.type\";\nimport { Node } from \"./utils/route/Node\";\nimport { composeHandlers } from \"./utils/Compose\";\n\ninterface MatchResult {\n handler: InternalHandler;\n params: Record<string, string>;\n}\n\nfunction adaptRouterHandler(handler: RequestHandler): InternalHandler {\n return async (ctx) => {\n if (typeof handler !== \"function\") return;\n if (handler.length > 1) {\n return (handler as any)(ctx.req, ctx.res, ctx.next);\n } else {\n return (handler as any)(ctx);\n }\n };\n}\n\nexport class Router {\n private root = new Node();\n private staticRoutes = new Map<string, Record<string, InternalHandler>>();\n private debug: boolean;\n private middlewares: InternalHandler[] = [];\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n private insert(method: string, path: string, handler: InternalHandler): void {\n const upperMethod = method.toUpperCase();\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Inserting compiled handler for ${upperMethod} ${path}`);\n }\n\n // Otimização: Se não tem parâmetros, adiciona ao mapa estático para acesso O(1)\n if (!path.includes(\":\")) {\n let methodMap = this.staticRoutes.get(path);\n if (!methodMap) {\n methodMap = Object.create(null) as Record<string, InternalHandler>;\n this.staticRoutes.set(path, methodMap);\n }\n methodMap[upperMethod] = handler;\n\n // IMPORTANTE: Não damos 'return' aqui.\n // Precisamos continuar para inserir na árvore também,\n // senão o listRoutes() não consegue encontrar essa rota para clonar em sub-routers.\n }\n\n let node = this.root;\n let start = 0;\n const len = path.length;\n for (let i = 0; i <= len; i++) {\n const ch = path.charCodeAt(i);\n if (ch === 47 || i === len) {\n const segment = path.substring(start, i);\n start = i + 1;\n if (!segment) continue;\n\n if (segment.startsWith(\":\")) {\n if (!node.paramNode) {\n node.paramNode = new Node();\n node.paramNode.paramName = segment.slice(1);\n }\n node = node.paramNode;\n } else {\n if (!node.children[segment]) {\n node.children[segment] = new Node();\n }\n node = node.children[segment];\n }\n }\n }\n node.handlers[upperMethod] = handler;\n }\n\n public add(method: string, path: string, handler: InternalHandler): void {\n const composed =\n this.middlewares.length > 0 ? composeHandlers([...this.middlewares, handler]) : handler;\n\n this.insert(method, path, composed);\n }\n\n public find(method: string, path: string): MatchResult | null {\n const upperMethod = method.toUpperCase();\n const qIdx = path.indexOf(\"?\");\n const cleanPath = qIdx === -1 ? path : path.substring(0, qIdx);\n\n // 1. Tenta otimização estática primeiro (O(1))\n const staticEntry = this.staticRoutes.get(cleanPath);\n if (staticEntry && staticEntry[upperMethod]) {\n return { handler: staticEntry[upperMethod], params: Object.create(null) };\n }\n\n // 2. Se falhar, busca na árvore (Radix Tree)\n let node = this.root;\n const params: Record<string, string> = Object.create(null);\n\n let start = 0;\n if (cleanPath.length > 0 && cleanPath.charCodeAt(0) === 47) start = 1;\n\n const len = cleanPath.length;\n for (let i = start; i <= len; i++) {\n const ch = cleanPath.charCodeAt(i);\n if (ch === 47 || i === len) {\n const segment = cleanPath.substring(start, i);\n start = i + 1;\n if (!segment) continue;\n\n const nextNode = node.children[segment];\n if (nextNode) {\n node = nextNode;\n } else if (node.paramNode) {\n node = node.paramNode;\n params[node.paramName] = segment;\n } else {\n return null;\n }\n }\n }\n\n const handler = node.handlers[upperMethod];\n if (!handler) return null;\n\n return { handler, params };\n }\n\n public listRoutes(): Array<{ method: string; path: string }> {\n const routes: Array<{ method: string; path: string }> = [];\n\n const traverse = (node: Node, currentPath: string) => {\n const methods = Object.keys(node.handlers);\n for (const method of methods) {\n routes.push({ method, path: currentPath || \"/\" });\n }\n\n for (const key in node.children) {\n const childNode = node.children[key];\n if (childNode) {\n traverse(childNode, currentPath + \"/\" + key);\n }\n }\n\n if (node.paramNode) {\n traverse(node.paramNode, currentPath + \"/:\" + node.paramNode.paramName);\n }\n };\n\n traverse(this.root, \"\");\n return routes;\n }\n\n public use(prefix: string, mw: RequestHandler): void;\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, routerOrMw?: Router | RequestHandler): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(adaptRouterHandler(prefixOrMw));\n } else if (typeof prefixOrMw === \"string\" && routerOrMw instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = routerOrMw.listRoutes();\n\n for (const r of routes) {\n // Encontra o handler original no router filho\n const found = routerOrMw.find(r.method, r.path);\n if (!found) continue;\n\n const fullPath = prefix + (r.path === \"/\" ? \"\" : r.path);\n\n // Aplica os middlewares DESTE router (pai) sobre o handler que já veio do filho\n const finalHandler =\n this.middlewares.length > 0\n ? composeHandlers([...this.middlewares, found.handler])\n : found.handler;\n\n this.insert(r.method, fullPath, finalHandler);\n }\n } else if (typeof prefixOrMw === \"string\" && typeof routerOrMw === \"function\") {\n const prefix = prefixOrMw;\n const mw = adaptRouterHandler(routerOrMw as RequestHandler);\n\n const wrapper: InternalHandler = async (ctx) => {\n if (ctx.req.path && ctx.req.path.startsWith(prefix)) {\n return mw(ctx);\n }\n return ctx.next ? ctx.next() : Promise.resolve();\n };\n\n this.middlewares.push(wrapper);\n }\n }\n\n public get(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"GET\", path, composeHandlers(internalHandlers));\n }\n\n public post(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"POST\", path, composeHandlers(internalHandlers));\n }\n\n public put(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"PUT\", path, composeHandlers(internalHandlers));\n }\n\n public delete(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"DELETE\", path, composeHandlers(internalHandlers));\n }\n\n public patch(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n this.add(\"PATCH\", path, composeHandlers(internalHandlers));\n }\n\n public all(path: string, ...handlers: RequestHandler[]): void {\n const internalHandlers = handlers.map(adaptRouterHandler);\n const composed = composeHandlers(internalHandlers);\n const methods = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"];\n for (const method of methods) {\n this.add(method, path, composed);\n }\n }\n}\n","import os from \"node:os\";\nimport cluster from \"node:cluster\";\nimport { logger } from \"../../utils/Logger\";\n\nexport function getIP(port: number) {\n try {\n const networkInterfaces = os.networkInterfaces();\n\n if (!networkInterfaces || Object.keys(networkInterfaces).length === 0) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n return;\n }\n\n let foundIP = false;\n Object.values(networkInterfaces).forEach((ifaceList) => {\n if (!ifaceList) return;\n\n ifaceList.forEach((iface) => {\n const isIPv4 =\n (iface.family as string | number) === \"IPv4\" || (iface.family as string | number) === 4;\n if (isIPv4 && !iface.internal && iface.address) {\n foundIP = true;\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n logger(\"info\", `[${who}] accessible at http://${iface.address}:${port}`);\n }\n });\n });\n\n if (!foundIP) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n } catch (error) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n}\n","import type { IncomingMessage } from \"node:http\";\n\n/**\n * IP resolution configuration interface\n * Similar to Express's 'trust proxy' setting\n */\nexport interface IpResolverConfig {\n /**\n * Enable trust proxy mode to read X-Forwarded-* headers\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n}\n\n/**\n * Check if an IP address is in a CIDR range\n */\nfunction isInCidrRange(ip: string, cidr: string): boolean {\n if (!cidr.includes(\"/\")) {\n return ip === cidr;\n }\n\n const [range, bits] = cidr.split(\"/\");\n\n // Guard against invalid CIDR format\n if (!range || !bits) {\n return false;\n }\n\n const mask = ~(2 ** (32 - parseInt(bits)) - 1);\n\n const ipNum = ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n const rangeNum = range.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n\n return (ipNum & mask) === (rangeNum & mask);\n}\n\n/**\n * Check if IP should be trusted based on trust proxy configuration\n */\nfunction shouldTrustProxy(ip: string, trustProxy: boolean | number | string | string[]): boolean {\n if (trustProxy === true) return true;\n if (trustProxy === false) return false;\n\n if (typeof trustProxy === \"string\") {\n return isInCidrRange(ip, trustProxy);\n }\n\n if (Array.isArray(trustProxy)) {\n return trustProxy.some((range) => isInCidrRange(ip, range));\n }\n\n return false;\n}\n\n/**\n * Resolve client IP address from request\n * Handles proxies, load balancers, and direct connections\n *\n * @param req - HTTP request object\n * @param config - IP resolver configuration\n * @returns Object containing primary IP and array of all IPs\n *\n * @example\n * ```typescript\n * // Don't trust proxies (default)\n * const { ip, ips } = resolveIp(req);\n *\n * // Trust all proxies\n * const { ip, ips } = resolveIp(req, { trustProxy: true });\n *\n * // Trust specific proxy\n * const { ip, ips } = resolveIp(req, { trustProxy: '10.0.0.1' });\n *\n * // Trust CIDR range\n * const { ip, ips } = resolveIp(req, { trustProxy: ['10.0.0.0/8', '172.16.0.0/12'] });\n *\n * // Trust first N hops\n * const { ip, ips } = resolveIp(req, { trustProxy: 2 });\n *\n * // Use custom header\n * const { ip, ips } = resolveIp(req, {\n * trustProxy: true,\n * ipHeader: 'cf-connecting-ip'\n * });\n * ```\n */\nexport function resolveIp(\n req: IncomingMessage,\n config: IpResolverConfig = {}\n): { ip: string; ips: string[] } {\n const { trustProxy = false, ipHeader = \"x-forwarded-for\" } = config;\n\n // Get socket IP as fallback\n // Clean up IPv6 localhost and IPv4-mapped addresses\n let socketIp = req.socket?.remoteAddress || \"\";\n if (socketIp === \"::1\" || socketIp === \"::ffff:127.0.0.1\") {\n socketIp = \"127.0.0.1\";\n } else if (socketIp.startsWith(\"::ffff:\")) {\n socketIp = socketIp.substring(7);\n }\n\n // If not trusting proxy, return socket IP only\n if (trustProxy === false) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Try to get forwarded IPs from headers\n const forwardedHeader = req.headers[ipHeader.toLowerCase()];\n const forwardedFor = Array.isArray(forwardedHeader) ? forwardedHeader[0] : forwardedHeader;\n\n if (!forwardedFor) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Parse all IPs from the header\n const allIps = forwardedFor\n .split(\",\")\n .map((ip) => ip.trim())\n .filter(Boolean);\n\n // Add socket IP to the chain\n if (socketIp) {\n allIps.push(socketIp);\n }\n\n // If trusting all proxies, return first IP\n if (trustProxy === true) {\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is a number, trust that many hops\n if (typeof trustProxy === \"number\") {\n const hopCount = Math.max(0, trustProxy);\n const trustedIndex = Math.max(0, allIps.length - hopCount - 1);\n return {\n ip: allIps[trustedIndex] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is IP/CIDR, validate chain\n const trustedIps: string[] = [];\n for (let i = allIps.length - 1; i >= 0; i--) {\n const currentIp = allIps[i];\n\n if (!currentIp) {\n continue;\n }\n\n if (shouldTrustProxy(currentIp, trustProxy)) {\n continue;\n }\n\n // Found first untrusted IP (client IP)\n return {\n ip: currentIp,\n ips: allIps,\n };\n }\n\n // All IPs were trusted, return first one\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n}\n\n/**\n * Common proxy IP ranges for convenience\n */\nexport const COMMON_PROXY_RANGES = {\n /** Private network ranges (RFC 1918) */\n PRIVATE: [\"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n\n /** Loopback addresses */\n LOOPBACK: [\"127.0.0.0/8\", \"::1/128\"],\n\n /** Link-local addresses */\n LINK_LOCAL: [\"169.254.0.0/16\", \"fe80::/10\"],\n\n /** Cloudflare IP ranges (example - should be updated regularly) */\n CLOUDFLARE: [\n \"173.245.48.0/20\",\n \"103.21.244.0/22\",\n \"103.22.200.0/22\",\n \"103.31.4.0/22\",\n \"141.101.64.0/18\",\n \"108.162.192.0/18\",\n \"190.93.240.0/20\",\n ],\n\n /** AWS ELB IP ranges (example - should be updated regularly) */\n AWS_ELB: [\"52.94.76.0/22\", \"35.180.0.0/16\"],\n};\n","import type { HttpContext } from \"../../types/common.type\";\nimport type { CorsOptions } from \"../../types/plugins/cors.type\";\n\nexport function cors(opts: CorsOptions) {\n const allowedOrigin = opts.origin ?? \"*\";\n const methods = opts.methods ?? \"GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS\";\n const allowedHeaders =\n opts.allowedHeaders ?? \"Content-Type,Authorization,Cookie,X-Requested-With,Accept\";\n const credentials = opts.credentials === true;\n\n return async (ctx: HttpContext, next: () => Promise<void>) => {\n const requestOrigin = ctx.request.headers[\"origin\"] as string;\n\n if (allowedOrigin === \"*\") {\n if (credentials && requestOrigin) {\n ctx.response.setHeader(\"Access-Control-Allow-Origin\", requestOrigin);\n } else {\n ctx.response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n }\n } else if (Array.isArray(allowedOrigin)) {\n if (requestOrigin && allowedOrigin.includes(requestOrigin)) {\n ctx.response.setHeader(\"Access-Control-Allow-Origin\", requestOrigin);\n }\n } else if (allowedOrigin) {\n ctx.response.setHeader(\"Access-Control-Allow-Origin\", allowedOrigin as string);\n }\n\n if (credentials) {\n ctx.response.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n ctx.response.setHeader(\n \"Access-Control-Allow-Methods\",\n Array.isArray(methods) ? methods.join(\",\") : methods,\n );\n\n ctx.response.setHeader(\n \"Access-Control-Allow-Headers\",\n Array.isArray(allowedHeaders) ? allowedHeaders.join(\",\") : allowedHeaders,\n );\n\n ctx.response.setHeader(\"Vary\", \"Origin\");\n\n if (ctx.request.method === \"OPTIONS\") {\n ctx.response.statusCode = 204;\n ctx.response.setHeader(\"Content-Length\", \"0\");\n ctx.response.end();\n return;\n }\n\n return next();\n };\n}\n","import type { HttpContext } from \"../../types/common.type\";\n\ninterface Entry {\n count: number;\n ts: number;\n}\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(limit: number, ttl: number) {\n return async (ctx: HttpContext, next: () => Promise<void>) => {\n const ip = ctx.request.socket.remoteAddress;\n const now = Date.now();\n const entry = store.get(ip!) ?? { count: 0, ts: now };\n\n if (now - entry.ts > ttl) {\n entry.count = 1;\n entry.ts = now;\n } else {\n entry.count++;\n }\n\n store.set(ip!, entry);\n\n if (entry.count > limit) {\n ctx.response.status(429).send(\"Too many requests\");\n return;\n }\n\n await next();\n };\n}\n","import http from \"node:http\";\nimport https from \"node:https\";\nimport type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\nimport { logger } from \"../../utils/Logger\";\nimport type { ProxyOptions } from \"../../types/plugins/proxy.type\";\n\nexport function createProxyMiddleware(options: ProxyOptions) {\n const {\n target,\n pathRewrite = {},\n headers = {},\n timeout = 30000,\n followRedirects = false,\n preserveHost = false,\n logLevel = \"info\",\n onProxyReq,\n onProxyRes,\n onError,\n } = options;\n\n return async (req: RequestServer, res: ResponseServer, next?: Function) => {\n try {\n // Parse target URL\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === \"https:\";\n const client = isHttps ? https : http;\n\n // Construir o path\n let path = req.path || \"/\";\n\n // Aplicar path rewrites\n for (const [pattern, replacement] of Object.entries(pathRewrite)) {\n const regex = new RegExp(pattern);\n path = path.replace(regex, replacement);\n }\n\n // Adicionar query string\n if (req.url && req.url.includes(\"?\")) {\n const queryString = req.url.split(\"?\")[1];\n path += `?${queryString}`;\n }\n\n if (logLevel !== \"none\") {\n logger(\n logLevel === \"debug\" ? \"info\" : \"info\",\n `[Proxy] ${req.method} ${req.url} → ${target}${path}`\n );\n }\n\n // Configurar headers\n const proxyHeaders: http.OutgoingHttpHeaders = {\n ...req.headers,\n ...headers,\n };\n\n // Remover headers problemáticos\n delete proxyHeaders[\"host\"];\n delete proxyHeaders[\"connection\"];\n delete proxyHeaders[\"transfer-encoding\"];\n\n if (preserveHost && req.headers.host) {\n proxyHeaders[\"host\"] = req.headers.host;\n } else {\n proxyHeaders[\"host\"] = targetUrl.host;\n }\n\n // Adicionar headers de forwarding\n if (req.ip) {\n proxyHeaders[\"x-forwarded-for\"] = req.ip;\n }\n proxyHeaders[\"x-forwarded-proto\"] = req.protocol || \"http\";\n proxyHeaders[\"x-forwarded-host\"] = req.headers.host || \"\";\n\n // Criar requisição proxy\n const proxyReqOptions: http.RequestOptions = {\n hostname: targetUrl.hostname,\n port: targetUrl.port || (isHttps ? 443 : 80),\n path,\n method: req.method,\n headers: proxyHeaders,\n timeout,\n };\n\n const proxyReq = client.request(proxyReqOptions, (proxyRes) => {\n // Callback customizado\n if (onProxyRes) {\n onProxyRes(proxyRes, req, res);\n }\n\n // Copiar status code\n res.statusCode = proxyRes.statusCode || 200;\n\n // Copiar headers (exceto alguns problemáticos)\n if (proxyRes.headers) {\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (key.toLowerCase() !== \"transfer-encoding\" && value) {\n res.setHeader(key, value);\n }\n }\n }\n\n // Fazer pipe da resposta diretamente\n proxyRes.pipe(res as any);\n });\n\n // Callback customizado antes de enviar\n if (onProxyReq) {\n onProxyReq(proxyReq, req);\n }\n\n // Lidar com erros\n proxyReq.on(\"error\", (err) => {\n if (onError) {\n onError(err, req, res);\n } else {\n logger(\"error\", `[Proxy] Error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 502;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Bad Gateway\",\n message: \"Failed to connect to upstream server\",\n }));\n }\n }\n });\n\n proxyReq.on(\"timeout\", () => {\n proxyReq.destroy();\n if (!res.headersSent) {\n res.statusCode = 504;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Gateway Timeout\",\n message: \"Upstream server took too long to respond\",\n }));\n }\n });\n\n // Enviar body se existir\n if (req.body && [\"POST\", \"PUT\", \"PATCH\"].includes(req.method || \"\")) {\n const bodyStr = typeof req.body === \"string\" ? req.body : JSON.stringify(req.body);\n proxyReq.write(bodyStr);\n }\n\n proxyReq.end();\n } catch (err: any) {\n logger(\"error\", `[Proxy] Setup error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Internal Server Error\",\n message: \"Failed to setup proxy\",\n }));\n }\n }\n };\n}\n\n/**\n * Middleware de proxy simples - apenas passa o target\n */\nexport function proxyPlugin(target: string, options: Partial<ProxyOptions> = {}) {\n return createProxyMiddleware({ target, ...options });\n}\n","import type { RequestServer } from \"../types/http/request.type\";\nimport type { ResponseServer } from \"../types/http/response.type\";\nimport type { ConfigTypes } from \"../shared/config/ConfigModule\";\nimport type { RequestHandler } from \"../types/common.type\";\n\nexport function createLoggingMiddleware(config: ConfigTypes): RequestHandler {\n const isEnabled = config.logging?.enabled ?? true;\n const showDetails = config.logging?.showDetails ?? true;\n const env = config.environment || \"development\";\n\n const reset = \"\\x1b[0m\";\n const bold = \"\\x1b[1m\";\n const dim = \"\\x1b[2m\";\n const colors: Record<string, string> = {\n GET: \"\\x1b[36m\",\n POST: \"\\x1b[32m\",\n PUT: \"\\x1b[33m\",\n DELETE: \"\\x1b[31m\",\n PATCH: \"\\x1b[35m\",\n DEFAULT: \"\\x1b[37m\",\n };\n\n const fn = async (...args: any[]) => {\n let req: RequestServer | undefined;\n let res: ResponseServer | undefined;\n let next: ((err?: any) => Promise<void> | void) | undefined;\n\n if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n const ctx = args[0];\n req = (ctx.request || ctx.req) as RequestServer | undefined;\n res = (ctx.response || ctx.res) as ResponseServer | undefined;\n next = ctx.next;\n } else {\n req = args[0] as RequestServer | undefined;\n res = args[1] as ResponseServer | undefined;\n next = args[2] as typeof next;\n }\n\n if (!req || !res) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n if (!isEnabled) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n const start = Date.now();\n const methodRaw = String(req.method || \"GET\").toUpperCase();\n const methodPad = methodRaw.padEnd(6, \" \");\n const methodColor = colors[methodRaw] || colors.DEFAULT;\n const url = String((req as any).originalUrl || req.url || \"/\");\n const ip = String((req as any).ip || \"\").replace(\"::ffff:\", \"\");\n const time = new Date().toLocaleTimeString(\"pt-BR\", { hour12: false });\n\n try {\n if (env === \"development\") {\n const header = `${dim}·${reset} ${bold}${time}${reset} ${methodColor}${methodPad}${reset} ${bold}${url}${reset}`;\n console.log(header);\n if (showDetails) {\n try {\n if (req.query && Object.keys(req.query).length > 0) {\n console.log(`${dim} › query:${reset} ${JSON.stringify(req.query)}`);\n }\n } catch {}\n try {\n const params = (req as any).params;\n if (params && Object.keys(params).length > 0) {\n console.log(`${dim} › params:${reset} ${JSON.stringify(params)}`);\n }\n } catch {}\n try {\n if (req.body && Object.keys(req.body).length > 0) {\n console.log(`${dim} › body:${reset} ${JSON.stringify(req.body)}`);\n }\n } catch {}\n }\n } else {\n console.log(\n `${dim}·${reset} ${time} ${methodColor}${methodPad}${reset} ${url} ${dim}• IP:${ip}${reset}`\n );\n }\n } catch {}\n\n try {\n if (typeof (res as any).on === \"function\") {\n (res as any).on(\"finish\", () => {\n const duration = Date.now() - start;\n const statusCode = Number((res as any).statusCode || 0);\n const statusColor =\n statusCode >= 500 ? \"\\x1b[31m\" : statusCode >= 400 ? \"\\x1b[33m\" : \"\\x1b[32m\";\n const statusText = `${statusColor}${statusCode}${reset}`;\n const durationText = `${dim}(${duration}ms)${reset}`;\n const ipShort = ip || \"-\";\n const line = `${dim}→${reset} ${statusText} ${durationText} ${dim}• IP:${ipShort}${reset}`;\n console.log(line);\n });\n }\n } catch {}\n\n if (typeof next === \"function\") {\n await next();\n }\n };\n\n return fn as unknown as RequestHandler;\n}\n","import http from \"node:http\";\nimport cluster, { worker } from \"node:cluster\";\nimport os from \"node:os\";\n\nimport { ConfigModule } from \"../shared/config/ConfigModule\";\nimport type { RequestServer } from \"../types/http/request.type\";\nimport type { CookieOptions, ResponseServer } from \"../types/http/response.type\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { logger } from \"../utils/Logger\";\nimport { parseQS } from \"../utils/Parser\";\nimport { serializeCookie } from \"../utils/cookies/SerializeCookie\";\nimport { parseCookiesHeader } from \"../utils/cookies/ParserCookie\";\nimport { Router } from \"./Router\";\nimport type { InternalHandler, RequestHandler } from \"../types/common.type\";\nimport { getIP } from \"./utils/GetIp\";\nimport { resolveIp } from \"./utils/IpResolver\";\nimport { cors } from \"../shared/plugins/CORSPlugin\";\nimport { rateLimit } from \"../shared/plugins/RateLimitPlugin\";\nimport type { ProxyOptions } from \"../types\";\nimport { proxyPlugin } from \"../shared/plugins\";\nimport { composeHandlers } from \"./utils/Compose\";\n\nexport { createLoggingMiddleware } from \"../middleware/LoggingMiddleware\";\nexport { proxyPlugin, createProxyMiddleware } from \"../shared/plugins/ProxyPlugin\";\n\nfunction adaptRequestHandler(handler: RequestHandler): InternalHandler {\n return async (ctx) => {\n if (typeof handler !== \"function\") return;\n if (handler.length > 1) {\n return (handler as any)(ctx.req, ctx.res, ctx.next);\n } else {\n return (handler as any)(ctx);\n }\n };\n}\n\nexport class AzuraClient {\n private opts: ReturnType<ConfigModule[\"getAll\"]>;\n private server?: http.Server;\n private port: number = 3000;\n private initPromise: Promise<void>;\n private router: Router;\n private middlewares: RequestHandler[] = [];\n private proxies: Array<{ path: string; handler: RequestHandler }> = [];\n private isShuttingDown: boolean = false;\n\n constructor() {\n const config = new ConfigModule();\n try {\n config.initSync();\n } catch (error: any) {\n console.error(\"[Azura] ❌ Falha ao carregar configuração:\", error.message);\n process.exit(1);\n }\n this.opts = config.getAll();\n this.router = new Router(this.opts.debug);\n this.initPromise = this.init();\n this.setupDefaultRoutes();\n }\n\n private setupDefaultRoutes() {\n this.router.add(\n \"GET\",\n \"/favicon.ico\",\n adaptRequestHandler((ctx: any) => {\n ctx.res.status(204).send();\n }) as any,\n );\n }\n\n public getConfig() {\n return this.opts;\n }\n\n private async init() {\n this.port = this.opts.server?.port || 3000;\n\n if (this.opts.server?.cluster && cluster.isPrimary) {\n const cpuCount = os.cpus().length;\n const desired = this.opts.server.clusterInstances ?? 2;\n\n const workers = desired > cpuCount ? 2 : Math.max(1, desired);\n\n for (let i = 0; i < workers; i++) cluster.fork();\n cluster.on(\"exit\", () => cluster.fork());\n return;\n }\n\n if (this.opts.plugins?.cors?.enabled) {\n const corsPlugin = cors({\n origin: this.opts.plugins.cors.origins,\n methods: this.opts.plugins.cors.methods,\n allowedHeaders: this.opts.plugins.cors.allowedHeaders,\n credentials: this.opts.plugins.cors.credentials,\n });\n\n this.middlewares.unshift((ctx: any) => corsPlugin(ctx, ctx.next));\n logger(\"info\", \"CORS plugin enabled\");\n }\n\n if (this.opts.plugins?.rateLimit?.enabled) {\n const rateLimitPlugin = rateLimit(\n this.opts.plugins.rateLimit.limit,\n this.opts.plugins.rateLimit.timeframe,\n );\n\n if (typeof rateLimitPlugin === \"function\") {\n this.middlewares.unshift((ctx: any) => rateLimitPlugin(ctx, ctx.next));\n }\n logger(\"info\", \"Rate Limit plugin enabled\");\n }\n\n // Create server WITHOUT handler to allow upgrade events to work properly\n this.server = http.createServer();\n\n // Add request handler manually\n this.server.on(\"request\", (req, res) => {\n this.handle(req as any, res as any);\n });\n }\n\n public use(prefix: string, mw: RequestHandler): void;\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, routerOrMw?: Router | RequestHandler): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && routerOrMw instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = routerOrMw.listRoutes();\n for (const r of routes) {\n const found = routerOrMw.find(r.method, r.path);\n if (!found) continue;\n const fullPath = prefix + (r.path === \"/\" ? \"\" : r.path);\n\n this.router.add(r.method, fullPath, found.handler);\n }\n } else if (typeof prefixOrMw === \"string\" && typeof routerOrMw === \"function\") {\n const prefix = prefixOrMw;\n const mw = routerOrMw as RequestHandler;\n\n const wrapper: RequestHandler = (req, res, next) => {\n if (req.path && req.path.startsWith(prefix)) {\n if (mw.length > 1) {\n return (mw as any)(req, res, next);\n } else {\n return (mw as any)({ req, res, next, request: req, response: res });\n }\n }\n return next ? next() : Promise.resolve();\n };\n this.middlewares.push(wrapper);\n }\n }\n\n public addRoute(method: string, path: string, ...handlers: RequestHandler[]): void {\n const adapted: InternalHandler[] = handlers.map((h) => adaptRequestHandler(h));\n const composed = composeHandlers(adapted);\n this.router.add(method, path, composed);\n }\n\n public get = (p: string, ...h: RequestHandler[]) => this.addRoute(\"GET\", p, ...h);\n public post = (p: string, ...h: RequestHandler[]) => this.addRoute(\"POST\", p, ...h);\n public put = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PUT\", p, ...h);\n public delete = (p: string, ...h: RequestHandler[]) => this.addRoute(\"DELETE\", p, ...h);\n public patch = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PATCH\", p, ...h);\n public all = (p: string, ...h: RequestHandler[]) => {\n const methods = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"];\n for (const method of methods) {\n this.addRoute(method, p, ...h);\n }\n };\n\n public proxy(path: string, target: string, options: Partial<ProxyOptions> = {}) {\n this.proxies.push({ path, handler: proxyPlugin(target, options) as RequestHandler });\n }\n\n public getRoutes() {\n return this.router.listRoutes();\n }\n\n public async listen(port = this.port) {\n await this.initPromise;\n\n if (!this.server) {\n logger(\"error\", \"Server not initialized\");\n return;\n }\n\n this.server.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n logger(\"error\", `❌ Port ${port} is already in use.`);\n } else {\n logger(\"error\", \"Server failed to start: \" + (error?.message || String(error)));\n }\n process.exit(1);\n });\n\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n this.server.listen(port, () => {\n logger(\"info\", `[${who}] listening on http://localhost:${port}`);\n if (this.opts.server?.ipHost) getIP(port);\n\n if (this.opts.logging?.enabled) {\n const routes = this.getRoutes();\n if (routes.length > 0) {\n logger(\"info\", `\\n📋 Registered routes (${routes.length}):`);\n routes.forEach((r) => {\n logger(\"info\", ` ${r.method.padEnd(7)} ${r.path}`);\n });\n }\n }\n });\n\n return this.server;\n }\n\n public async shutdown(timeout: number = 10000): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n\n logger(\"info\", \"Starting graceful shutdown...\");\n\n return new Promise((resolve) => {\n const forceShutdown = setTimeout(() => {\n logger(\"warn\", \"Forcing shutdown after timeout\");\n process.exit(1);\n }, timeout);\n\n if (this.server) {\n this.server.close(() => {\n clearTimeout(forceShutdown);\n logger(\"info\", \"Server closed successfully\");\n resolve();\n });\n } else {\n clearTimeout(forceShutdown);\n resolve();\n }\n });\n }\n\n public async fetch(request: Request): Promise<Response> {\n await this.initPromise;\n const url = new URL(request.url);\n const qs = url.search.slice(1);\n\n const rawReq: any = {\n method: request.method,\n url: url.pathname + url.search,\n originalUrl: url.pathname + url.search,\n path: url.pathname || \"/\",\n protocol: url.protocol.slice(0, -1),\n secure: url.protocol === \"https:\",\n headers: {},\n params: {},\n };\n\n request.headers.forEach((v, k) => (rawReq.headers[k] = v));\n\n let _query: any;\n Object.defineProperty(rawReq, \"query\", {\n get: () => (_query ? _query : (_query = parseQS(qs))),\n });\n\n let _cookies: any;\n Object.defineProperty(rawReq, \"cookies\", {\n get: () =>\n _cookies ? _cookies : (_cookies = parseCookiesHeader(request.headers.get(\"cookie\") || \"\")),\n });\n\n const trust = this.opts.server;\n let _ip: any;\n Object.defineProperty(rawReq, \"ip\", {\n get: () => {\n if (_ip) return _ip;\n const res = resolveIp(rawReq, { trustProxy: trust?.trustProxy, ipHeader: trust?.ipHeader });\n rawReq.ips = res.ips;\n return (_ip = res.ip);\n },\n });\n\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(request.method.toUpperCase())) {\n try {\n const ct = request.headers.get(\"content-type\") || \"\";\n if (ct.includes(\"application/json\")) {\n rawReq.body = await request.json();\n } else if (ct.includes(\"application/x-www-form-urlencoded\")) {\n const t = await request.text();\n const p = parseQS(t);\n const b: any = {};\n for (const k in p) {\n const v = p[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n } else {\n rawReq.body = await request.text();\n }\n } catch {\n rawReq.body = {};\n }\n } else {\n rawReq.body = {};\n }\n\n let statusCode = 200;\n const headers = new Headers();\n let body: any = null;\n\n const rawRes: any = {\n statusCode,\n status: (c: number) => {\n statusCode = c;\n return rawRes;\n },\n set: (k: string, v: string) => {\n headers.set(k, v);\n return rawRes;\n },\n header: (k: string, v: string) => {\n headers.set(k, v);\n return rawRes;\n },\n get: (k: string) => headers.get(k),\n type: (v: string) => {\n headers.set(\"Content-Type\", v);\n return rawRes;\n },\n contentType: (v: string) => {\n headers.set(\"Content-Type\", v);\n return rawRes;\n },\n send: (b: any) => {\n if (typeof b === \"object\") {\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify(b);\n } else {\n body = String(b || \"\");\n }\n return rawRes;\n },\n json: (b: any) => {\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify(b);\n return rawRes;\n },\n };\n\n try {\n const match = this.router.find(rawReq.method, rawReq.path);\n if (!match) return new Response(\"Not Found\", { status: 404 });\n\n rawReq.params = match.params || {};\n\n const chain = [...this.middlewares.map(adaptRequestHandler), match.handler];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) throw err;\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n await fn({ req: rawReq, res: rawRes, next });\n };\n\n await next();\n } catch (err: any) {\n statusCode = err instanceof HttpError ? err.status : 500;\n headers.set(\"Content-Type\", \"application/json\");\n body = JSON.stringify({ error: err.message || \"Internal Server Error\" });\n }\n\n return new Response(body, { status: statusCode, headers });\n }\n\n private async handle(rawReq: RequestServer, rawRes: ResponseServer) {\n const urlStr = rawReq.url || \"/\";\n const qIndex = urlStr.indexOf(\"?\");\n const path = qIndex === -1 ? urlStr : urlStr.substring(0, qIndex);\n\n rawReq.path = path;\n rawReq.originalUrl = urlStr;\n rawReq.protocol = this.opts.server?.https ? \"https\" : \"http\";\n rawReq.secure = rawReq.protocol === \"https\";\n\n let _query: any = null;\n Object.defineProperty(rawReq, \"query\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_query !== null) return _query;\n if (qIndex === -1) return (_query = {});\n return (_query = parseQS(urlStr.substring(qIndex + 1)));\n },\n });\n\n let _cookies: any = null;\n Object.defineProperty(rawReq, \"cookies\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_cookies !== null) return _cookies;\n return (_cookies = parseCookiesHeader((rawReq.headers[\"cookie\"] as string) || \"\"));\n },\n });\n\n let _ip: string | undefined;\n const trustProxy = this.opts.server?.trustProxy;\n const ipHeader = this.opts.server?.ipHeader;\n Object.defineProperty(rawReq, \"ip\", {\n configurable: true,\n enumerable: true,\n get: () => {\n if (_ip !== undefined) return _ip;\n const res = resolveIp(rawReq, { trustProxy, ipHeader });\n rawReq.ips = res.ips;\n return (_ip = res.ip);\n },\n });\n\n rawReq.get = rawReq.header = (name: string) => {\n const v = rawReq.headers[name.toLowerCase()];\n if (Array.isArray(v)) return v[0];\n return v;\n };\n\n rawRes.status = (code: number) => {\n rawRes.statusCode = code;\n return rawRes;\n };\n\n rawRes.set = rawRes.header = (field: string, value: string | number | string[]) => {\n rawRes.setHeader(field, value);\n return rawRes;\n };\n\n rawRes.get = (field: string) => {\n const v = rawRes.getHeader(field);\n if (Array.isArray(v)) return v[0];\n return typeof v === \"number\" ? String(v) : (v as string | undefined);\n };\n\n rawRes.type = rawRes.contentType = (t: string) => {\n rawRes.setHeader(\"Content-Type\", t);\n return rawRes;\n };\n\n rawRes.location = (u: string) => {\n rawRes.setHeader(\"Location\", u);\n return rawRes;\n };\n\n rawRes.redirect = ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n rawRes.statusCode = a;\n rawRes.setHeader(\"Location\", b!);\n } else {\n rawRes.statusCode = 302;\n rawRes.setHeader(\"Location\", a);\n }\n rawRes.end();\n return rawRes;\n }) as ResponseServer[\"redirect\"];\n\n rawRes.cookie = (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = rawRes.getHeader(\"Set-Cookie\");\n if (prev) {\n const list = Array.isArray(prev) ? prev.concat(s) : [String(prev), s];\n rawRes.setHeader(\"Set-Cookie\", list);\n } else {\n rawRes.setHeader(\"Set-Cookie\", s);\n }\n return rawRes;\n };\n\n rawRes.clearCookie = (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n };\n\n rawRes.send = (b: any) => {\n if (b === undefined || b === null) {\n rawRes.end();\n return rawRes;\n }\n if (typeof b === \"object\" && !Buffer.isBuffer(b)) {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n } else {\n rawRes.end(b);\n }\n return rawRes;\n };\n\n rawRes.json = (b: any) => {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n return rawRes;\n };\n\n rawReq.body = {};\n const method = rawReq.method || \"GET\";\n\n if (method === \"POST\" || method === \"PUT\" || method === \"PATCH\") {\n const chunks: Buffer[] = [];\n try {\n await new Promise<void>((resolve, reject) => {\n rawReq.on(\"data\", (chunk) => chunks.push(chunk));\n rawReq.on(\"end\", () => {\n if (chunks.length === 0) return resolve();\n const buffer = Buffer.concat(chunks);\n const ct = rawReq.headers[\"content-type\"] || \"\";\n try {\n if (ct.includes(\"application/json\")) {\n rawReq.body = JSON.parse(buffer.toString());\n } else if (ct.includes(\"application/x-www-form-urlencoded\")) {\n const parsed = parseQS(buffer.toString());\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n } else {\n rawReq.body = buffer.toString();\n }\n } catch {\n rawReq.body = {};\n }\n resolve();\n });\n rawReq.on(\"error\", (err) => {\n reject(err);\n });\n });\n } catch (err: any) {\n logger(\"error\", \"Body parse error: \" + err.message);\n }\n }\n\n const errorHandler = (err: any) => {\n if (!rawRes.writableEnded) {\n logger(\"error\", err?.message || String(err));\n rawRes\n .status(err instanceof HttpError ? err.status : 500)\n .json(\n err instanceof HttpError\n ? (err.payload ?? { error: err.message || \"Internal Server Error\" })\n : { error: err?.message || \"Internal Server Error\" },\n );\n }\n };\n\n try {\n const proxies = this.proxies;\n const pLen = proxies.length;\n if (pLen > 0) {\n for (let i = 0; i < pLen; i++) {\n const proxy = proxies[i];\n if (proxy && path.startsWith(proxy.path)) {\n const chain = this.middlewares.map(adaptRequestHandler);\n let idx = 0;\n const middlewareNext = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({ req: rawReq, res: rawRes, next: middlewareNext });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await middlewareNext();\n\n if (!rawRes.writableEnded) {\n const handler = adaptRequestHandler(proxy.handler);\n await handler({ req: rawReq, res: rawRes, next: middlewareNext });\n }\n return;\n }\n }\n }\n\n const match = this.router.find(method, path);\n if (!match) {\n throw new HttpError(404, \"Not Found\");\n }\n\n rawReq.params = match.params || {};\n\n const chain = [...this.middlewares.map(adaptRequestHandler), match.handler];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({ req: rawReq, res: rawRes, next });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await next();\n } catch (err) {\n errorHandler(err);\n }\n }\n}\n"]}
|