azurajs 2.1.2 → 2.2.0
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/README.md +244 -7
- package/dist/LoggingMiddleware-BQKJUBqT.d.ts +6 -0
- package/dist/LoggingMiddleware-CYNvypha.d.cts +6 -0
- package/dist/Server-Ba-EFdi2.d.ts +53 -0
- package/dist/Server-CY3k1FIL.d.cts +53 -0
- package/dist/common.type-BoV71o_C.d.ts +11 -0
- package/dist/common.type-Ct06XeYQ.d.cts +11 -0
- package/dist/config.cjs +89 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +51 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/cookies.cjs +32 -0
- package/dist/cookies.cjs.map +1 -0
- package/dist/cookies.d.cts +8 -0
- package/dist/cookies.d.ts +8 -0
- package/dist/cookies.js +29 -0
- package/dist/cookies.js.map +1 -0
- package/dist/cors.cjs +29 -0
- package/dist/cors.cjs.map +1 -0
- package/dist/cors.d.cts +14 -0
- package/dist/cors.d.ts +14 -0
- package/dist/cors.js +27 -0
- package/dist/cors.js.map +1 -0
- package/dist/decorators.cjs +141 -0
- package/dist/decorators.cjs.map +1 -0
- package/dist/decorators.d.cts +29 -0
- package/dist/decorators.d.ts +29 -0
- package/dist/decorators.js +122 -0
- package/dist/decorators.js.map +1 -0
- package/dist/http-error.cjs +14 -0
- package/dist/http-error.cjs.map +1 -0
- package/dist/http-error.d.cts +7 -0
- package/dist/http-error.d.ts +7 -0
- package/dist/http-error.js +12 -0
- package/dist/http-error.js.map +1 -0
- package/dist/index.cjs +910 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +899 -0
- package/dist/index.js.map +1 -0
- package/dist/infra.cjs +811 -0
- package/dist/infra.cjs.map +1 -0
- package/dist/infra.d.cts +8 -0
- package/dist/infra.d.ts +8 -0
- package/dist/infra.js +800 -0
- package/dist/infra.js.map +1 -0
- package/dist/logger.cjs +26 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +8 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.js +24 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware.cjs +117 -0
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.cts +10 -0
- package/dist/middleware.d.ts +10 -0
- package/dist/middleware.js +114 -0
- package/dist/middleware.js.map +1 -0
- package/dist/plugins.cjs +52 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.d.cts +6 -0
- package/dist/plugins.d.ts +6 -0
- package/dist/plugins.js +49 -0
- package/dist/plugins.js.map +1 -0
- package/dist/rate-limit.cjs +27 -0
- package/dist/rate-limit.cjs.map +1 -0
- package/dist/rate-limit.d.cts +8 -0
- package/dist/rate-limit.d.ts +8 -0
- package/dist/rate-limit.js +25 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/request.type-CJ-EGGcM.d.cts +22 -0
- package/dist/request.type-CJ-EGGcM.d.ts +22 -0
- package/dist/response.type-d6e6eU9D.d.cts +33 -0
- package/dist/response.type-d6e6eU9D.d.ts +33 -0
- package/dist/router.cjs +111 -0
- package/dist/router.cjs.map +1 -0
- package/dist/router.d.cts +27 -0
- package/dist/router.d.ts +27 -0
- package/dist/router.js +109 -0
- package/dist/router.js.map +1 -0
- package/dist/routes.type-VPROfhnL.d.cts +14 -0
- package/dist/routes.type-VPROfhnL.d.ts +14 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +6 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.cjs +149 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +10 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +141 -0
- package/dist/utils.js.map +1 -0
- package/dist/validations.type-D4ZhF5g6.d.cts +6 -0
- package/dist/validations.type-D4ZhF5g6.d.ts +6 -0
- package/dist/validators.cjs +69 -0
- package/dist/validators.cjs.map +1 -0
- package/dist/validators.d.cts +11 -0
- package/dist/validators.d.ts +11 -0
- package/dist/validators.js +65 -0
- package/dist/validators.js.map +1 -0
- package/package.json +85 -66
- package/src/index.ts +1 -3
- package/src/infra/Router.ts +53 -3
- package/src/infra/Server.ts +37 -10
- package/src/infra/index.ts +1 -1
- package/src/shared/config/ConfigModule.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/config/ConfigModule.ts","../src/infra/utils/HttpError.ts","../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/cookies/ParserCookie.ts","../src/infra/utils/RequestHandler.ts","../src/infra/utils/route/Node.ts","../src/infra/Router.ts","../src/infra/utils/GetIp.ts","../src/shared/plugins/CORSPlugin.ts","../src/shared/plugins/RateLimitPlugin.ts","../src/middleware/LoggingMiddleware.ts","../src/infra/Server.ts"],"names":["path","cluster","os"],"mappings":"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","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Config Files Extensions Supported\n * ex: azura.config.*extension\n */\n\ntype SupportedConfigFile = \".ts\" | \".json\" | \".yaml\" | \".yml\";\n\nexport type ConfigTypes = {\n environment?: \"development\" | \"production\";\n debug?: boolean;\n server?: {\n port?: number;\n cluster?: boolean;\n ipHost?: boolean;\n https?: boolean;\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 * Recivied error if config file not found or invalid format\n * @param configFiles\n */\n\n initSync(): void {\n const cdw = process.cwd();\n const configFiles = [\n \"azura.config.ts\",\n \"azura.config.json\",\n \"azura.config.yaml\",\n \"azura.config.yml\",\n ];\n\n let loaded = false;\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 const raw = readFileSync(filePath, \"utf8\");\n\n try {\n let parsed: ConfigTypes;\n switch (extension) {\n case \".ts\":\n const mod = require(filePath);\n parsed = mod.default || mod;\n break;\n case \".json\":\n parsed = JSON.parse(raw);\n break;\n case \".yaml\":\n case \".yml\":\n parsed = require(\"js-yaml\").load(raw);\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\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\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","const RESET = \"\\x1b[0m\";\nconst COLORS = {\n info: \"\\x1b[36m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n};\n\nconst LEVEL_LABELS = {\n info: \"INFO\",\n warn: \"WARN\",\n error: \"ERROR\",\n};\n\nexport function logger(level: keyof typeof COLORS, msg: string) {\n const color = COLORS[level];\n const levelLabel = LEVEL_LABELS[level];\n\n const prefix = `${color}[Azura:${levelLabel}]${RESET}`;\n\n (level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log)(\n `${prefix} ${msg}`\n );\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 { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\n\nexport function adaptRequestHandler(mw: any) {\n if (typeof mw !== \"function\") return mw;\n return async (ctx: {\n request: RequestServer;\n response: ResponseServer;\n next: (err?: any) => Promise<void>;\n }) => {\n try {\n if (mw.length === 3) {\n await new Promise<void>((resolve, reject) => {\n try {\n const maybe = mw(ctx.request, ctx.response, (err?: any) => {\n if (err) reject(err);\n else resolve();\n });\n if (maybe && typeof (maybe as Promise<any>).then === \"function\") {\n (maybe as Promise<any>).then(() => resolve()).catch(reject);\n }\n } catch (e) {\n reject(e);\n }\n });\n } else {\n await mw(ctx);\n }\n } catch (err) {\n throw err;\n }\n };\n}\n","import type { RequestServer } from \"../../../types/http/request.type\";\nimport type { ResponseServer } from \"../../../types/http/response.type\";\n\nexport type Handler = (ctx: {\n req: RequestServer;\n res: ResponseServer;\n next?: (err?: any) => void;\n}) => Promise<void> | void;\n\nexport class Node {\n children = new Map<string, Node>();\n handlers = new Map<string, Handler[]>();\n paramName?: string;\n isParam?: boolean;\n}\n","import { HttpError } from \"./utils/HttpError\";\nimport { Node, type Handler } from \"./utils/route/Node\";\n\ninterface MatchResult {\n handlers: Handler[];\n params: Record<string, string>;\n}\n\nexport class Router {\n private root = new Node();\n private debug: boolean;\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n add(method: string, path: string, ...handlers: Handler[]) {\n const segments = path.split(\"/\").filter(Boolean);\n let node = this.root;\n\n for (const seg of segments) {\n let child: Node;\n\n if (seg.startsWith(\":\")) {\n child = new Node();\n child.isParam = true;\n child.paramName = seg.slice(1);\n } else {\n child = node.children.get(seg) ?? new Node();\n }\n\n node.children.set(seg.startsWith(\":\") ? \":\" : seg, child);\n node = child;\n }\n\n node.handlers.set(method.toUpperCase(), handlers);\n }\n\n find(method: string, path: string): MatchResult {\n const cleanPath = path.split(\"?\")[0];\n const segments = cleanPath?.split(\"/\").filter(Boolean) ?? [];\n let node = this.root;\n const params: Record<string, string> = {};\n\n if (this.debug && segments?.length === 0 && node.handlers.size === 0) {\n console.error(\"[Router:DEBUG] Root node has no handlers\");\n console.error(\"[Router:DEBUG] Available methods at root:\", Array.from(node.handlers.keys()));\n }\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n if (!seg) continue;\n\n let child = node.children.get(seg);\n\n if (child) {\n node = child;\n } else {\n child = node.children.get(\":\");\n if (child) {\n node = child;\n if (node.paramName) {\n params[node.paramName] = seg;\n }\n } else {\n // Debug melhorado - só mostra se debug estiver ativo\n if (this.debug) {\n console.error(`[Router:DEBUG] Route not found for ${method} ${cleanPath}`);\n console.error(`[Router:DEBUG] Failed at segment: \"${seg}\"`);\n console.error(`[Router:DEBUG] Available children:`, Array.from(node.children.keys()));\n }\n throw new HttpError(404, \"Route not found\");\n }\n }\n }\n\n const handlers = node.handlers.get(method.toUpperCase()) as Handler[];\n if (!handlers) {\n if (this.debug) {\n console.error(\n `[Router:DEBUG] No handlers for method ${method.toUpperCase()} at path ${cleanPath}`\n );\n console.error(\n `[Router:DEBUG] Available methods at this path:`,\n Array.from(node.handlers.keys())\n );\n console.error(`[Router:DEBUG] Segments matched:`, segments);\n }\n throw new HttpError(404, \"Route not found\");\n }\n return { handlers, 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, path: string) => {\n if (node.handlers.size > 0) {\n for (const method of node.handlers.keys()) {\n routes.push({ method, path: path || \"/\" });\n }\n }\n\n for (const [segment, child] of node.children) {\n const newPath =\n path + \"/\" + (segment === \":\" && child.paramName ? `:${child.paramName}` : segment);\n traverse(child, newPath);\n }\n };\n\n traverse(this.root, \"\");\n return routes;\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 const networkInterfaces = os.networkInterfaces();\n Object.values(networkInterfaces).forEach((ifaceList) => {\n ifaceList?.forEach((iface) => {\n if (iface.family === \"IPv4\" && !iface.internal) {\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n logger(\"info\", `[${who}] accessible at http://${iface.address}:${port}`);\n }\n });\n });\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 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 from \"node:cluster\";\nimport os from \"node:os\";\n\nimport { ConfigModule } from \"../shared/config/ConfigModule\";\nimport { getOpenPort } from \"./utils/GetOpenPort\";\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 { adaptRequestHandler } from \"./utils/RequestHandler\";\nimport { Router } from \"./Router\";\nimport type { RequestHandler } from \"../types/common.type\";\nimport { getIP } from \"./utils/GetIp\";\nimport type { Handler } from \"./utils/route/Node\";\nimport { cors } from \"../shared/plugins/CORSPlugin\";\nimport { rateLimit } from \"../shared/plugins/RateLimitPlugin\";\n\nexport { createLoggingMiddleware } from \"../middleware/LoggingMiddleware\";\n\nexport class AzuraClient {\n private opts: ReturnType<ConfigModule[\"getAll\"]>;\n\n private server?: http.Server;\n private port: number = 3000;\n private initPromise: Promise<void>;\n\n public router: Router;\n private middlewares: RequestHandler[] = [];\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:\");\n console.error(\" \", error.message);\n process.exit(1);\n }\n this.opts = config.getAll();\n this.router = new Router(this.opts.debug || false);\n this.initPromise = this.init();\n this.setupDefaultRoutes();\n }\n\n /**\n * Configura rotas padrão para evitar erros 404 comuns\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 for (let i = 0; i < os.cpus().length; 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\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\n logger(\"info\", \"Rate Limit plugin enabled\");\n }\n\n this.server = http.createServer();\n this.server.on(\"request\", this.handle.bind(this));\n }\n\n public use(mw: RequestHandler) {\n this.middlewares.push(mw);\n }\n\n public addRoute(method: string, path: string, ...handlers: RequestHandler[]) {\n const adapted = handlers.map(adaptRequestHandler);\n this.router.add(method, path, ...(adapted as unknown as Handler[]));\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\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. Please choose a different port.`);\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 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 return this.server;\n }\n\n /**\n * Fetch handler compatible with Web API (Bun, Deno, Cloudflare Workers, etc.)\n * @example\n * ```typescript\n * const app = new AzuraClient();\n * app.get('/', (req, res) => res.text('Hello World!'));\n *\n * // Use with Bun\n * Bun.serve({\n * port: 3000,\n * fetch: app.fetch.bind(app),\n * });\n *\n * // Use with Deno\n * Deno.serve({ port: 3000 }, app.fetch.bind(app));\n * ```\n */\n public async fetch(request: Request): Promise<Response> {\n await this.initPromise;\n\n const url = new URL(request.url);\n const urlPath = url.pathname;\n\n const safeQuery: Record<string, string> = {};\n if (url.search) {\n const rawQuery = parseQS(url.search.slice(1));\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string);\n }\n }\n\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n const cookies = parseCookiesHeader(cookieHeader);\n\n let body: any = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(request.method.toUpperCase())) {\n const contentType = request.headers.get(\"content-type\") || \"\";\n try {\n if (contentType.includes(\"application/json\")) {\n body = await request.json();\n } else if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n const text = await request.text();\n const parsed = parseQS(text || \"\");\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 body = b;\n } else {\n body = await request.text();\n }\n } catch {\n body = {};\n }\n }\n\n const protocol = url.protocol.slice(0, -1) as \"http\" | \"https\";\n\n const headersObj: Record<string, string | string[]> = {};\n request.headers.forEach((value, key) => {\n headersObj[key] = value;\n });\n\n const rawReq: Partial<RequestServer> = {\n method: request.method,\n url: url.pathname + url.search,\n originalUrl: url.pathname + url.search,\n path: urlPath || \"/\",\n protocol,\n secure: url.protocol === \"https:\",\n hostname: url.hostname,\n subdomains: url.hostname ? url.hostname.split(\".\").slice(0, -2) : [],\n query: safeQuery,\n cookies,\n params: {},\n body,\n headers: headersObj as any,\n get: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n header: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n ip: request.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || \"\",\n ips: request.headers.get(\"x-forwarded-for\")?.split(/\\s*,\\s*/) || [],\n };\n\n let statusCode = 200;\n const responseHeaders = new Headers();\n let responseBody: any = null;\n\n const rawRes: Partial<ResponseServer> = {\n statusCode,\n status: (code: number) => {\n statusCode = code;\n return rawRes as ResponseServer;\n },\n set: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n header: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n get: (field: string) => responseHeaders.get(field) || undefined,\n type: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n contentType: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n location: (u: string) => {\n responseHeaders.set(\"Location\", u);\n return rawRes as ResponseServer;\n },\n redirect: ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n statusCode = a;\n responseHeaders.set(\"Location\", b!);\n } else {\n statusCode = 302;\n responseHeaders.set(\"Location\", a);\n }\n return rawRes as ResponseServer;\n }) as ResponseServer[\"redirect\"],\n cookie: (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = responseHeaders.get(\"Set-Cookie\");\n if (prev) {\n responseHeaders.append(\"Set-Cookie\", s);\n } else {\n responseHeaders.set(\"Set-Cookie\", s);\n }\n return rawRes as ResponseServer;\n },\n clearCookie: (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie!(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n },\n send: (b: any) => {\n if (b === undefined || b === null) {\n responseBody = \"\";\n } else if (typeof b === \"object\") {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n } else {\n responseBody = String(b);\n }\n return rawRes as ResponseServer;\n },\n json: (b: any) => {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n return rawRes as ResponseServer;\n },\n };\n\n const errorHandler = (err: any) => {\n statusCode = err instanceof HttpError ? err.status : 500;\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(\n err instanceof HttpError\n ? err.payload ?? { error: err.message || \"Internal Server Error\" }\n : { error: err?.message || \"Internal Server Error\" }\n );\n };\n\n try {\n const { handlers, params } = this.router.find(request.method, urlPath || \"/\");\n rawReq.params = params || {};\n\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\n ];\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 try {\n await fn({\n request: rawReq as RequestServer,\n response: rawRes as ResponseServer,\n req: rawReq as RequestServer,\n res: rawRes as ResponseServer,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n\n await next();\n } catch (err) {\n errorHandler(err);\n }\n\n return new Response(responseBody, {\n status: statusCode,\n headers: responseHeaders,\n });\n }\n\n private async handle(rawReq: RequestServer, rawRes: ResponseServer) {\n rawReq.originalUrl = rawReq.url || \"\";\n rawReq.protocol = this.opts.server?.https ? \"https\" : \"http\";\n rawReq.secure = rawReq.protocol === \"https\";\n rawReq.hostname = String(rawReq.headers[\"host\"] || \"\").split(\":\")[0] || \"\";\n rawReq.subdomains = rawReq.hostname ? rawReq.hostname.split(\".\").slice(0, -2) : [];\n const ipsRaw = rawReq.headers[\"x-forwarded-for\"];\n rawReq.ips = typeof ipsRaw === \"string\" ? ipsRaw.split(/\\s*,\\s*/) : [];\n rawReq.get = rawReq.header = (name: string) => {\n const v = rawReq.headers[name.toLowerCase()];\n if (Array.isArray(v)) return v[0];\n return typeof v === \"string\" ? v : undefined;\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\") {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n } else {\n rawRes.end(String(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 const [urlPath, qs] = (rawReq.url || \"\").split(\"?\");\n rawReq.path = urlPath || \"/\";\n const rawQuery = parseQS(qs || \"\");\n const safeQuery: Record<string, string> = {};\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.query = safeQuery;\n\n rawReq.cookies = parseCookiesHeader((rawReq.headers[\"cookie\"] as string) || \"\");\n rawReq.params = {};\n\n const ipRaw = rawReq.headers[\"x-forwarded-for\"] || rawReq.socket.remoteAddress || \"\";\n const ipStr = Array.isArray(ipRaw) ? ipRaw[0] : ipRaw;\n rawReq.ip = String(ipStr).split(\",\")[0]?.trim() || \"\";\n\n rawReq.body = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes((rawReq.method || \"\").toUpperCase())) {\n await new Promise<void>((resolve) => {\n let buf = \"\";\n rawReq.on(\"data\", (chunk: Buffer | string) => {\n buf += chunk;\n });\n rawReq.on(\"end\", () => {\n try {\n const ct = String(rawReq.headers[\"content-type\"] || \"\");\n if (ct.includes(\"application/json\")) {\n rawReq.body = JSON.parse(buf || \"{}\");\n } else {\n const parsed = parseQS(buf || \"\");\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 }\n } catch {\n rawReq.body = {};\n }\n resolve();\n });\n rawReq.on(\"error\", (err: Error) => {\n logger(\"error\", \"Body parse error: \" + err.message);\n resolve();\n });\n });\n }\n\n const errorHandler = (err: any) => {\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 try {\n const { handlers, params } = this.router.find(rawReq.method || \"GET\", rawReq.path);\n rawReq.params = params || {};\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\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 try {\n await fn({\n request: rawReq,\n response: rawRes,\n req: rawReq,\n res: rawRes,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await next();\n } catch (err) {\n errorHandler(err);\n }\n }\n}\n"]}
|