azurajs 3.0.1 → 3.0.2

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.
Files changed (106) hide show
  1. package/dist/config/index.js +128 -6
  2. package/dist/config/index.js.map +1 -1
  3. package/dist/config/index.mjs +130 -1
  4. package/dist/config/index.mjs.map +1 -1
  5. package/dist/core/index.js +1100 -11
  6. package/dist/core/index.js.map +1 -1
  7. package/dist/core/index.mjs +1102 -3
  8. package/dist/core/index.mjs.map +1 -1
  9. package/dist/decorators/index.js +117 -87
  10. package/dist/decorators/index.js.map +1 -1
  11. package/dist/decorators/index.mjs +98 -1
  12. package/dist/decorators/index.mjs.map +1 -1
  13. package/dist/index.js +2592 -236
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +2537 -9
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/middleware/index.js +16 -7
  18. package/dist/middleware/index.js.map +1 -1
  19. package/dist/middleware/index.mjs +17 -1
  20. package/dist/middleware/index.mjs.map +1 -1
  21. package/dist/plugins/index.js +1056 -73
  22. package/dist/plugins/index.js.map +1 -1
  23. package/dist/plugins/index.mjs +1042 -1
  24. package/dist/plugins/index.mjs.map +1 -1
  25. package/dist/types/index.js +49 -12
  26. package/dist/types/index.js.map +1 -1
  27. package/dist/types/index.mjs +49 -2
  28. package/dist/types/index.mjs.map +1 -1
  29. package/dist/utils/index.js +551 -50
  30. package/dist/utils/index.js.map +1 -1
  31. package/dist/utils/index.mjs +541 -3
  32. package/dist/utils/index.mjs.map +1 -1
  33. package/package.json +35 -17
  34. package/{dist/chunk-DR254CWJ.mjs → src/config/ConfigModule.ts} +169 -132
  35. package/src/config/index.ts +1 -0
  36. package/src/core/index.ts +2 -0
  37. package/src/core/router.ts +284 -0
  38. package/{dist/chunk-EYAHUNC7.mjs → src/core/server.ts} +590 -699
  39. package/src/decorators/Route.ts +110 -0
  40. package/src/decorators/index.ts +23 -0
  41. package/src/index.ts +12 -0
  42. package/src/middleware/LoggingMiddleware.ts +20 -0
  43. package/src/middleware/index.ts +1 -0
  44. package/src/plugins/CORSPlugin.ts +56 -0
  45. package/src/plugins/CircuitBreakerPlugin.ts +84 -0
  46. package/src/plugins/CompressionPlugin.ts +80 -0
  47. package/src/plugins/ETagPlugin.ts +31 -0
  48. package/src/plugins/HealthCheckPlugin.ts +57 -0
  49. package/src/plugins/HelmetPlugin.ts +89 -0
  50. package/src/plugins/JWTPlugin.ts +132 -0
  51. package/src/plugins/MultipartPlugin.ts +168 -0
  52. package/src/plugins/ProxyPlugin.ts +89 -0
  53. package/src/plugins/RateLimitPlugin.ts +96 -0
  54. package/src/plugins/RequestIdPlugin.ts +21 -0
  55. package/src/plugins/SSEPlugin.ts +114 -0
  56. package/src/plugins/SessionPlugin.ts +98 -0
  57. package/src/plugins/StaticPlugin.ts +152 -0
  58. package/src/plugins/TimeoutPlugin.ts +33 -0
  59. package/src/plugins/index.ts +18 -0
  60. package/src/types/common.type.ts +82 -0
  61. package/src/types/config.type.ts +57 -0
  62. package/{dist/chunk-OWUGAI5V.mjs → src/types/http/status.ts} +49 -51
  63. package/src/types/index.ts +55 -0
  64. package/src/types/plugins/plugin.type.ts +170 -0
  65. package/src/types/reflect.d.ts +14 -0
  66. package/src/types/routes.type.ts +70 -0
  67. package/src/utils/HttpError.ts +62 -0
  68. package/src/utils/IpResolver.ts +30 -0
  69. package/src/utils/Logger.ts +144 -0
  70. package/src/utils/Parser.ts +182 -0
  71. package/src/utils/cookies/CookieManager.ts +48 -0
  72. package/src/utils/index.ts +9 -0
  73. package/{dist/chunk-UWIFSGSQ.mjs → src/utils/validators/DTOValidator.ts} +145 -141
  74. package/src/utils/validators/SchemaValidator.ts +45 -0
  75. package/dist/chunk-3UFAWS2V.js +0 -392
  76. package/dist/chunk-3UFAWS2V.js.map +0 -1
  77. package/dist/chunk-4LSFAAZW.js +0 -4
  78. package/dist/chunk-4LSFAAZW.js.map +0 -1
  79. package/dist/chunk-7NSRIVZM.js +0 -54
  80. package/dist/chunk-7NSRIVZM.js.map +0 -1
  81. package/dist/chunk-AOG6NYAM.js +0 -144
  82. package/dist/chunk-AOG6NYAM.js.map +0 -1
  83. package/dist/chunk-DR254CWJ.mjs.map +0 -1
  84. package/dist/chunk-EYAHUNC7.mjs.map +0 -1
  85. package/dist/chunk-HHDQPIJN.mjs +0 -19
  86. package/dist/chunk-HHDQPIJN.mjs.map +0 -1
  87. package/dist/chunk-HHZNAGGI.js +0 -702
  88. package/dist/chunk-HHZNAGGI.js.map +0 -1
  89. package/dist/chunk-KJM5XCAY.js +0 -21
  90. package/dist/chunk-KJM5XCAY.js.map +0 -1
  91. package/dist/chunk-NLSZKAPA.mjs +0 -1044
  92. package/dist/chunk-NLSZKAPA.mjs.map +0 -1
  93. package/dist/chunk-OWUGAI5V.mjs.map +0 -1
  94. package/dist/chunk-POPNQEOK.js +0 -1063
  95. package/dist/chunk-POPNQEOK.js.map +0 -1
  96. package/dist/chunk-QPRW4YU4.js +0 -134
  97. package/dist/chunk-QPRW4YU4.js.map +0 -1
  98. package/dist/chunk-REJDZUZ5.mjs +0 -382
  99. package/dist/chunk-REJDZUZ5.mjs.map +0 -1
  100. package/dist/chunk-TC6N6TJZ.mjs +0 -100
  101. package/dist/chunk-TC6N6TJZ.mjs.map +0 -1
  102. package/dist/chunk-TEUXKMXP.js +0 -122
  103. package/dist/chunk-TEUXKMXP.js.map +0 -1
  104. package/dist/chunk-UWIFSGSQ.mjs.map +0 -1
  105. package/dist/chunk-YPBKY4KY.mjs +0 -3
  106. package/dist/chunk-YPBKY4KY.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/CORSPlugin.ts","../src/plugins/RateLimitPlugin.ts","../src/plugins/HelmetPlugin.ts","../src/plugins/JWTPlugin.ts","../src/plugins/SessionPlugin.ts","../src/plugins/CompressionPlugin.ts","../src/plugins/StaticPlugin.ts","../src/plugins/ETagPlugin.ts","../src/plugins/RequestIdPlugin.ts","../src/plugins/TimeoutPlugin.ts","../src/plugins/HealthCheckPlugin.ts","../src/plugins/CircuitBreakerPlugin.ts","../src/plugins/SSEPlugin.ts","../src/plugins/ProxyPlugin.ts","../src/plugins/MultipartPlugin.ts"],"names":["httpsRequest","httpRequest","existsSync","randomBytes","join","resolve"],"mappings":"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","file":"chunk-NLSZKAPA.mjs","sourcesContent":["import type { CORSOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nconst DEFAULT_METHODS = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"HEAD\", \"OPTIONS\"];\r\nconst DEFAULT_HEADERS = [\"Content-Type\", \"Authorization\", \"Accept\", \"X-Requested-With\"];\r\n\r\nexport function CORSPlugin(options: CORSOptions = {}): PluginHandler {\r\n const {\r\n origins = \"*\",\r\n methods = DEFAULT_METHODS,\r\n allowedHeaders = DEFAULT_HEADERS,\r\n exposedHeaders = [],\r\n credentials = false,\r\n maxAge = 86400,\r\n preflightContinue = false,\r\n } = options;\r\n\r\n const methodsStr = methods.join(\", \");\r\n const headersStr = allowedHeaders.join(\", \");\r\n const exposedStr = exposedHeaders.length > 0 ? exposedHeaders.join(\", \") : \"\";\r\n\r\n const isAllowedOrigin = (origin: string): string | false => {\r\n if (origins === \"*\") return credentials ? origin : \"*\";\r\n if (typeof origins === \"function\") return origins(origin) ? origin : false;\r\n if (typeof origins === \"string\") return origin === origins ? origin : false;\r\n if (Array.isArray(origins)) return origins.includes(origin) ? origin : false;\r\n return false;\r\n };\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n const origin = req.headers.origin ?? \"\";\r\n\r\n const allowedOrigin = isAllowedOrigin(origin);\r\n\r\n if (allowedOrigin) {\r\n res.setHeader(\"Access-Control-Allow-Origin\", allowedOrigin);\r\n if (credentials) res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\r\n if (exposedStr) res.setHeader(\"Access-Control-Expose-Headers\", exposedStr);\r\n if (allowedOrigin !== \"*\") res.setHeader(\"Vary\", \"Origin\");\r\n }\r\n\r\n if (req.method === \"OPTIONS\") {\r\n res.setHeader(\"Access-Control-Allow-Methods\", methodsStr);\r\n res.setHeader(\"Access-Control-Allow-Headers\", headersStr);\r\n res.setHeader(\"Access-Control-Max-Age\", String(maxAge));\r\n\r\n if (!preflightContinue) {\r\n res.statusCode = 204;\r\n res.end();\r\n return;\r\n }\r\n }\r\n\r\n next();\r\n };\r\n}\r\n","import type { RateLimitOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\nimport type { AzuraRequest } from \"../types/common.type.js\";\r\n\r\ninterface SlidingWindowEntry {\r\n count: number;\r\n resetTime: number;\r\n}\r\n\r\nclass MemoryStore {\r\n private store = new Map<string, SlidingWindowEntry>();\r\n private cleanupInterval: ReturnType<typeof setInterval>;\r\n\r\n constructor(windowMs: number) {\r\n this.cleanupInterval = setInterval(() => {\r\n const now = Date.now();\r\n for (const [key, entry] of this.store) {\r\n if (now >= entry.resetTime) this.store.delete(key);\r\n }\r\n }, windowMs);\r\n if (this.cleanupInterval.unref) this.cleanupInterval.unref();\r\n }\r\n\r\n increment(key: string, windowMs: number): { totalHits: number; resetTime: Date } {\r\n const now = Date.now();\r\n const entry = this.store.get(key);\r\n\r\n if (!entry || now >= entry.resetTime) {\r\n const resetTime = now + windowMs;\r\n this.store.set(key, { count: 1, resetTime });\r\n return { totalHits: 1, resetTime: new Date(resetTime) };\r\n }\r\n\r\n entry.count++;\r\n return { totalHits: entry.count, resetTime: new Date(entry.resetTime) };\r\n }\r\n\r\n decrement(key: string): void {\r\n const entry = this.store.get(key);\r\n if (entry && entry.count > 0) entry.count--;\r\n }\r\n\r\n resetKey(key: string): void {\r\n this.store.delete(key);\r\n }\r\n\r\n destroy(): void {\r\n clearInterval(this.cleanupInterval);\r\n this.store.clear();\r\n }\r\n}\r\n\r\nexport function RateLimitPlugin(options: RateLimitOptions = {}): PluginHandler {\r\n const {\r\n windowMs = 60_000,\r\n max = 100,\r\n message = { error: { statusCode: 429, message: \"Too many requests, please try again later\" } },\r\n statusCode = 429,\r\n keyGenerator = (req: AzuraRequest) => req.ip,\r\n skipSuccessfulRequests = false,\r\n skipFailedRequests = false,\r\n } = options;\r\n\r\n const memStore = new MemoryStore(windowMs);\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n const key = keyGenerator(req);\r\n const { totalHits, resetTime } = memStore.increment(key, windowMs);\r\n\r\n res.setHeader(\"X-RateLimit-Limit\", String(max));\r\n res.setHeader(\"X-RateLimit-Remaining\", String(Math.max(0, max - totalHits)));\r\n res.setHeader(\"X-RateLimit-Reset\", String(Math.ceil(resetTime.getTime() / 1000)));\r\n\r\n if (totalHits > max) {\r\n res.setHeader(\"Retry-After\", String(Math.ceil(windowMs / 1000)));\r\n res.statusCode = statusCode;\r\n const body = typeof message === \"string\" ? message : JSON.stringify(message);\r\n res.setHeader(\"Content-Type\", typeof message === \"string\" ? \"text/plain\" : \"application/json\");\r\n res.end(body);\r\n return;\r\n }\r\n\r\n const origEnd = res.end;\r\n res.end = function (...args: any[]) {\r\n if (skipSuccessfulRequests && res.statusCode < 400) {\r\n memStore.decrement(key);\r\n }\r\n if (skipFailedRequests && res.statusCode >= 400) {\r\n memStore.decrement(key);\r\n }\r\n return (origEnd as any).apply(this, args);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import type { HelmetOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function HelmetPlugin(options: HelmetOptions = {}): PluginHandler {\r\n const headers: [string, string][] = [];\r\n\r\n if (options.noSniff !== false) {\r\n headers.push([\"X-Content-Type-Options\", \"nosniff\"]);\r\n }\r\n\r\n if (options.xssFilter !== false) {\r\n headers.push([\"X-XSS-Protection\", \"0\"]);\r\n }\r\n\r\n if (options.ieNoOpen !== false) {\r\n headers.push([\"X-Download-Options\", \"noopen\"]);\r\n }\r\n\r\n const frameguard = options.frameguard ?? true;\r\n if (frameguard !== false) {\r\n const action = typeof frameguard === \"object\" ? frameguard.action : \"sameorigin\";\r\n headers.push([\"X-Frame-Options\", action.toUpperCase()]);\r\n }\r\n\r\n if (options.dnsPrefetchControl !== false) {\r\n const allow = typeof options.dnsPrefetchControl === \"object\"\r\n ? options.dnsPrefetchControl.allow\r\n : false;\r\n headers.push([\"X-DNS-Prefetch-Control\", allow ? \"on\" : \"off\"]);\r\n }\r\n\r\n const hsts = options.hsts ?? true;\r\n if (hsts !== false) {\r\n const maxAge = typeof hsts === \"object\" ? hsts.maxAge : 15552000;\r\n const includeSubDomains = typeof hsts === \"object\" ? hsts.includeSubDomains !== false : true;\r\n const preload = typeof hsts === \"object\" ? hsts.preload : false;\r\n let value = `max-age=${maxAge}`;\r\n if (includeSubDomains) value += \"; includeSubDomains\";\r\n if (preload) value += \"; preload\";\r\n headers.push([\"Strict-Transport-Security\", value]);\r\n }\r\n\r\n if (options.crossOriginEmbedderPolicy !== false) {\r\n headers.push([\"Cross-Origin-Embedder-Policy\", \"require-corp\"]);\r\n }\r\n\r\n if (options.crossOriginOpenerPolicy !== false) {\r\n const policy = typeof options.crossOriginOpenerPolicy === \"object\"\r\n ? options.crossOriginOpenerPolicy.policy\r\n : \"same-origin\";\r\n headers.push([\"Cross-Origin-Opener-Policy\", policy]);\r\n }\r\n\r\n if (options.crossOriginResourcePolicy !== false) {\r\n const policy = typeof options.crossOriginResourcePolicy === \"object\"\r\n ? options.crossOriginResourcePolicy.policy\r\n : \"same-origin\";\r\n headers.push([\"Cross-Origin-Resource-Policy\", policy]);\r\n }\r\n\r\n const referrer = options.referrerPolicy ?? true;\r\n if (referrer !== false) {\r\n const policy = typeof referrer === \"object\"\r\n ? (Array.isArray(referrer.policy) ? referrer.policy.join(\", \") : referrer.policy)\r\n : \"no-referrer\";\r\n headers.push([\"Referrer-Policy\", policy]);\r\n }\r\n\r\n if (options.contentSecurityPolicy !== false && options.contentSecurityPolicy) {\r\n const csp = options.contentSecurityPolicy;\r\n const directives = Object.entries(csp)\r\n .map(([key, values]) => `${key} ${values.join(\" \")}`)\r\n .join(\"; \");\r\n headers.push([\"Content-Security-Policy\", directives]);\r\n }\r\n\r\n if (options.permissionsPolicy) {\r\n const pp = Object.entries(options.permissionsPolicy)\r\n .map(([key, values]) => `${key}=(${values.join(\" \")})`)\r\n .join(\", \");\r\n headers.push([\"Permissions-Policy\", pp]);\r\n }\r\n\r\n return (ctx, next) => {\r\n for (const [name, value] of headers) {\r\n ctx.res.setHeader(name, value);\r\n }\r\n next();\r\n };\r\n}\r\n","import { createHmac } from \"node:crypto\";\r\nimport type { JWTOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\nimport type { AzuraRequest } from \"../types/common.type.js\";\r\n\r\nfunction base64urlEncode(data: string | Buffer): string {\r\n const buf = typeof data === \"string\" ? Buffer.from(data) : data;\r\n return buf.toString(\"base64url\");\r\n}\r\n\r\nfunction base64urlDecode(str: string): string {\r\n return Buffer.from(str, \"base64url\").toString(\"utf-8\");\r\n}\r\n\r\nconst ALGO_MAP: Record<string, string> = {\r\n HS256: \"sha256\",\r\n HS384: \"sha384\",\r\n HS512: \"sha512\",\r\n};\r\n\r\nexport interface JWTPayload {\r\n [key: string]: any;\r\n iat?: number;\r\n exp?: number;\r\n iss?: string;\r\n aud?: string;\r\n sub?: string;\r\n}\r\n\r\nexport function signJWT(payload: JWTPayload, secret: string, options: { algorithm?: string; expiresIn?: string | number } = {}): string {\r\n const algorithm = options.algorithm ?? \"HS256\";\r\n const header = base64urlEncode(JSON.stringify({ alg: algorithm, typ: \"JWT\" }));\r\n\r\n const now = Math.floor(Date.now() / 1000);\r\n const body: JWTPayload = { ...payload, iat: now };\r\n\r\n if (options.expiresIn) {\r\n body.exp = now + parseExpiration(options.expiresIn);\r\n }\r\n\r\n const encodedPayload = base64urlEncode(JSON.stringify(body));\r\n const signature = createHmac(ALGO_MAP[algorithm] ?? \"sha256\", secret)\r\n .update(`${header}.${encodedPayload}`)\r\n .digest(\"base64url\");\r\n\r\n return `${header}.${encodedPayload}.${signature}`;\r\n}\r\n\r\nexport function verifyJWT(token: string, secret: string, options: { algorithm?: string } = {}): JWTPayload {\r\n const parts = token.split(\".\");\r\n if (parts.length !== 3) throw new Error(\"Invalid token format\");\r\n\r\n const [header, payload, signature] = parts;\r\n const algorithm = options.algorithm ?? \"HS256\";\r\n\r\n const expectedSig = createHmac(ALGO_MAP[algorithm] ?? \"sha256\", secret)\r\n .update(`${header}.${payload}`)\r\n .digest(\"base64url\");\r\n\r\n if (signature !== expectedSig) throw new Error(\"Invalid token signature\");\r\n\r\n const decoded = JSON.parse(base64urlDecode(payload)) as JWTPayload;\r\n\r\n if (decoded.exp && decoded.exp < Math.floor(Date.now() / 1000)) {\r\n throw new Error(\"Token expired\");\r\n }\r\n\r\n return decoded;\r\n}\r\n\r\nfunction parseExpiration(exp: string | number): number {\r\n if (typeof exp === \"number\") return exp;\r\n const match = exp.match(/^(\\d+)(s|m|h|d)$/);\r\n if (!match) return 3600;\r\n const val = parseInt(match[1], 10);\r\n switch (match[2]) {\r\n case \"s\": return val;\r\n case \"m\": return val * 60;\r\n case \"h\": return val * 3600;\r\n case \"d\": return val * 86400;\r\n default: return 3600;\r\n }\r\n}\r\n\r\nfunction extractToken(req: AzuraRequest): string | null {\r\n const auth = req.headers.authorization;\r\n if (auth?.startsWith(\"Bearer \")) return auth.slice(7);\r\n return (req.query.token as string) ?? req.cookies?.token ?? null;\r\n}\r\n\r\nexport function JWTPlugin(options: JWTOptions): PluginHandler {\r\n const {\r\n secret,\r\n algorithm = \"HS256\",\r\n paths = [],\r\n exclude = [],\r\n getToken,\r\n } = options;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n const path = req.pathname;\r\n\r\n if (exclude.some((p) => path.startsWith(p))) {\r\n next();\r\n return;\r\n }\r\n\r\n if (paths.length > 0 && !paths.some((p) => path.startsWith(p))) {\r\n next();\r\n return;\r\n }\r\n\r\n const token = getToken ? getToken(req) : extractToken(req);\r\n\r\n if (!token) {\r\n res.statusCode = 401;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 401, message: \"No token provided\" } }));\r\n return;\r\n }\r\n\r\n try {\r\n const payload = verifyJWT(token, secret, { algorithm });\r\n req.user = payload;\r\n next();\r\n } catch (err: any) {\r\n res.statusCode = 401;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 401, message: err.message ?? \"Invalid token\" } }));\r\n }\r\n };\r\n}\r\n","import { randomBytes } from \"node:crypto\";\r\nimport type { SessionOptions, PluginHandler, SessionStore } from \"../types/plugins/plugin.type.js\";\r\n\r\nclass MemorySessionStore implements SessionStore {\r\n private sessions = new Map<string, { data: Record<string, any>; expires: number }>();\r\n private cleanupTimer: ReturnType<typeof setInterval>;\r\n\r\n constructor() {\r\n this.cleanupTimer = setInterval(() => {\r\n const now = Date.now();\r\n for (const [id, session] of this.sessions) {\r\n if (now >= session.expires) this.sessions.delete(id);\r\n }\r\n }, 60_000);\r\n if (this.cleanupTimer.unref) this.cleanupTimer.unref();\r\n }\r\n\r\n async get(id: string): Promise<Record<string, any> | null> {\r\n const session = this.sessions.get(id);\r\n if (!session) return null;\r\n if (Date.now() >= session.expires) {\r\n this.sessions.delete(id);\r\n return null;\r\n }\r\n return session.data;\r\n }\r\n\r\n async set(id: string, data: Record<string, any>, maxAge: number): Promise<void> {\r\n this.sessions.set(id, { data, expires: Date.now() + maxAge });\r\n }\r\n\r\n async destroy(id: string): Promise<void> {\r\n this.sessions.delete(id);\r\n }\r\n\r\n async touch(id: string, maxAge: number): Promise<void> {\r\n const session = this.sessions.get(id);\r\n if (session) session.expires = Date.now() + maxAge;\r\n }\r\n}\r\n\r\nfunction generateSessionId(): string {\r\n return randomBytes(24).toString(\"hex\");\r\n}\r\n\r\nexport function SessionPlugin(options: SessionOptions): PluginHandler {\r\n const {\r\n secret: _secret,\r\n name = \"azura.sid\",\r\n maxAge = 86400_000,\r\n secure = false,\r\n httpOnly = true,\r\n sameSite = \"Lax\",\r\n store = new MemorySessionStore(),\r\n } = options;\r\n\r\n return async (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n let sessionId = req.cookies[name];\r\n let sessionData: Record<string, any> | null = null;\r\n\r\n if (sessionId) {\r\n sessionData = await store.get(sessionId);\r\n }\r\n\r\n if (!sessionData) {\r\n sessionId = generateSessionId();\r\n sessionData = {};\r\n }\r\n\r\n req.session = sessionData;\r\n\r\n const originalEnd = res.end;\r\n (res as any).end = async function (...args: any[]) {\r\n await store.set(sessionId!, req.session ?? {}, maxAge);\r\n\r\n const cookieParts = [\r\n `${name}=${sessionId}`,\r\n `Path=/`,\r\n `Max-Age=${Math.floor(maxAge / 1000)}`,\r\n `SameSite=${sameSite}`,\r\n ];\r\n if (httpOnly) cookieParts.push(\"HttpOnly\");\r\n if (secure) cookieParts.push(\"Secure\");\r\n\r\n const existing = res.getHeader(\"Set-Cookie\");\r\n const cookies = existing\r\n ? [...(Array.isArray(existing) ? existing : [String(existing)]), cookieParts.join(\"; \")]\r\n : [cookieParts.join(\"; \")];\r\n res.setHeader(\"Set-Cookie\", cookies);\r\n\r\n return (originalEnd as any).apply(this, args);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import { createGzip, createDeflate, type Gzip, type Deflate } from \"node:zlib\";\r\nimport type { CompressionOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nconst COMPRESSIBLE_TYPES = /^text\\/|application\\/json|application\\/javascript|application\\/xml|image\\/svg\\+xml/;\r\n\r\nexport function CompressionPlugin(options: CompressionOptions = {}): PluginHandler {\r\n const {\r\n threshold = 1024,\r\n level = 6,\r\n algorithms = [\"gzip\", \"deflate\"],\r\n filter,\r\n } = options;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n if (filter && !filter(req as any, res as any)) {\r\n next();\r\n return;\r\n }\r\n\r\n const acceptEncoding = req.headers[\"accept-encoding\"] ?? \"\";\r\n let encoding: string | null = null;\r\n\r\n for (const algo of algorithms) {\r\n if (typeof acceptEncoding === \"string\" && acceptEncoding.includes(algo)) {\r\n encoding = algo;\r\n break;\r\n }\r\n }\r\n\r\n if (!encoding) {\r\n next();\r\n return;\r\n }\r\n\r\n const originalEnd = res.end;\r\n const originalWrite = res.write;\r\n\r\n (res as any).end = function (chunk?: any, encodingArg?: any, callback?: any) {\r\n if (!chunk || (typeof chunk !== \"string\" && !Buffer.isBuffer(chunk))) {\r\n return (originalEnd as any).call(this, chunk, encodingArg, callback);\r\n }\r\n\r\n const buf = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\r\n\r\n if (buf.length < threshold) {\r\n return (originalEnd as any).call(this, chunk, encodingArg, callback);\r\n }\r\n\r\n const contentType = String(res.getHeader(\"Content-Type\") ?? \"\");\r\n if (!COMPRESSIBLE_TYPES.test(contentType)) {\r\n return (originalEnd as any).call(this, chunk, encodingArg, callback);\r\n }\r\n\r\n res.removeHeader(\"Content-Length\");\r\n res.setHeader(\"Content-Encoding\", encoding!);\r\n res.setHeader(\"Vary\", \"Accept-Encoding\");\r\n\r\n let stream: Gzip | Deflate;\r\n if (encoding === \"gzip\") {\r\n stream = createGzip({ level });\r\n } else {\r\n stream = createDeflate({ level });\r\n }\r\n\r\n const chunks: Buffer[] = [];\r\n stream.on(\"data\", (c: Buffer) => chunks.push(c));\r\n stream.on(\"end\", () => {\r\n const compressed = Buffer.concat(chunks);\r\n res.setHeader(\"Content-Length\", compressed.length);\r\n (originalEnd as any).call(res, compressed);\r\n });\r\n\r\n stream.end(buf);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import { createReadStream, statSync, existsSync } from \"node:fs\";\r\nimport { join, extname, resolve } from \"node:path\";\r\nimport type { StaticOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nconst MIME_TYPES: Record<string, string> = {\r\n \".html\": \"text/html; charset=utf-8\",\r\n \".htm\": \"text/html; charset=utf-8\",\r\n \".css\": \"text/css; charset=utf-8\",\r\n \".js\": \"application/javascript; charset=utf-8\",\r\n \".mjs\": \"application/javascript; charset=utf-8\",\r\n \".json\": \"application/json; charset=utf-8\",\r\n \".xml\": \"application/xml; charset=utf-8\",\r\n \".txt\": \"text/plain; charset=utf-8\",\r\n \".csv\": \"text/csv; charset=utf-8\",\r\n \".png\": \"image/png\",\r\n \".jpg\": \"image/jpeg\",\r\n \".jpeg\": \"image/jpeg\",\r\n \".gif\": \"image/gif\",\r\n \".svg\": \"image/svg+xml\",\r\n \".ico\": \"image/x-icon\",\r\n \".webp\": \"image/webp\",\r\n \".avif\": \"image/avif\",\r\n \".woff\": \"font/woff\",\r\n \".woff2\": \"font/woff2\",\r\n \".ttf\": \"font/ttf\",\r\n \".otf\": \"font/otf\",\r\n \".eot\": \"application/vnd.ms-fontobject\",\r\n \".mp4\": \"video/mp4\",\r\n \".webm\": \"video/webm\",\r\n \".mp3\": \"audio/mpeg\",\r\n \".ogg\": \"audio/ogg\",\r\n \".wav\": \"audio/wav\",\r\n \".pdf\": \"application/pdf\",\r\n \".zip\": \"application/zip\",\r\n \".gz\": \"application/gzip\",\r\n \".wasm\": \"application/wasm\",\r\n \".map\": \"application/json\",\r\n};\r\n\r\nexport function StaticPlugin(options: StaticOptions): PluginHandler {\r\n const {\r\n root,\r\n prefix = \"/\",\r\n index = [\"index.html\"],\r\n dotfiles = \"ignore\",\r\n maxAge = 0,\r\n etag = true,\r\n lastModified = true,\r\n fallthrough = true,\r\n immutable = false,\r\n } = options;\r\n\r\n const resolvedRoot = resolve(root);\r\n const indexFiles = Array.isArray(index) ? index : [index];\r\n const normalizedPrefix = prefix.endsWith(\"/\") ? prefix.slice(0, -1) : prefix;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\r\n next();\r\n return;\r\n }\r\n\r\n const path = req.pathname;\r\n if (!path.startsWith(normalizedPrefix)) {\r\n next();\r\n return;\r\n }\r\n\r\n const relativePath = path.slice(normalizedPrefix.length) || \"/\";\r\n\r\n if (relativePath.includes(\"..\")) {\r\n next();\r\n return;\r\n }\r\n\r\n if (dotfiles !== \"allow\" && relativePath.split(\"/\").some((s) => s.startsWith(\".\"))) {\r\n if (dotfiles === \"deny\") {\r\n res.statusCode = 403;\r\n res.end(\"Forbidden\");\r\n return;\r\n }\r\n next();\r\n return;\r\n }\r\n\r\n let filePath = join(resolvedRoot, relativePath);\r\n\r\n if (!existsSync(filePath)) {\r\n if (fallthrough) { next(); return; }\r\n res.statusCode = 404;\r\n res.end(\"Not Found\");\r\n return;\r\n }\r\n\r\n let stat = statSync(filePath);\r\n\r\n if (stat.isDirectory()) {\r\n let found = false;\r\n for (const idx of indexFiles) {\r\n const candidate = join(filePath, idx);\r\n if (existsSync(candidate)) {\r\n filePath = candidate;\r\n stat = statSync(filePath);\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n if (fallthrough) { next(); return; }\r\n res.statusCode = 404;\r\n res.end(\"Not Found\");\r\n return;\r\n }\r\n }\r\n\r\n const ext = extname(filePath).toLowerCase();\r\n const contentType = MIME_TYPES[ext] ?? \"application/octet-stream\";\r\n\r\n res.setHeader(\"Content-Type\", contentType);\r\n res.setHeader(\"Content-Length\", stat.size);\r\n\r\n if (lastModified) {\r\n res.setHeader(\"Last-Modified\", stat.mtime.toUTCString());\r\n }\r\n\r\n if (etag) {\r\n const etagValue = `W/\"${stat.size.toString(16)}-${stat.mtime.getTime().toString(16)}\"`;\r\n res.setHeader(\"ETag\", etagValue);\r\n\r\n const ifNoneMatch = req.headers[\"if-none-match\"];\r\n if (ifNoneMatch === etagValue) {\r\n res.statusCode = 304;\r\n res.end();\r\n return;\r\n }\r\n }\r\n\r\n let cacheControl = `public, max-age=${maxAge}`;\r\n if (immutable) cacheControl += \", immutable\";\r\n res.setHeader(\"Cache-Control\", cacheControl);\r\n\r\n if (req.method === \"HEAD\") {\r\n res.end();\r\n return;\r\n }\r\n\r\n const stream = createReadStream(filePath);\r\n stream.pipe(res);\r\n };\r\n}\r\n","import { createHash } from \"node:crypto\";\r\nimport type { ETagOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function ETagPlugin(options: ETagOptions = {}): PluginHandler {\r\n const { weak = true } = options;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n const originalEnd = res.end;\r\n (res as any).end = function (chunk?: any, encoding?: any, callback?: any) {\r\n if (chunk && (typeof chunk === \"string\" || Buffer.isBuffer(chunk)) && res.statusCode === 200) {\r\n const buf = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\r\n const hash = createHash(\"md5\").update(buf).digest(\"hex\").slice(0, 16);\r\n const etag = weak ? `W/\"${hash}\"` : `\"${hash}\"`;\r\n\r\n res.setHeader(\"ETag\", etag);\r\n\r\n const ifNoneMatch = req.headers[\"if-none-match\"];\r\n if (ifNoneMatch === etag) {\r\n res.statusCode = 304;\r\n return (originalEnd as any).call(this);\r\n }\r\n }\r\n\r\n return (originalEnd as any).call(this, chunk, encoding, callback);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import { randomUUID } from \"node:crypto\";\r\nimport type { RequestIdOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function RequestIdPlugin(options: RequestIdOptions = {}): PluginHandler {\r\n const {\r\n header = \"X-Request-Id\",\r\n generator = randomUUID,\r\n } = options;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n const existingId = req.headers[header.toLowerCase()] as string | undefined;\r\n const requestId = existingId ?? generator();\r\n\r\n req.requestId = requestId;\r\n res.setHeader(header, requestId);\r\n\r\n next();\r\n };\r\n}\r\n","import type { TimeoutOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function TimeoutPlugin(options: TimeoutOptions): PluginHandler {\r\n const {\r\n timeout,\r\n message = { error: { statusCode: 408, message: \"Request Timeout\" } },\r\n statusCode = 408,\r\n } = options;\r\n\r\n return (ctx, next) => {\r\n const { res } = ctx;\r\n let timedOut = false;\r\n\r\n const timer = setTimeout(() => {\r\n timedOut = true;\r\n if (!res.headersSent) {\r\n res.statusCode = statusCode;\r\n res.setHeader(\"Content-Type\", typeof message === \"string\" ? \"text/plain\" : \"application/json\");\r\n res.end(typeof message === \"string\" ? message : JSON.stringify(message));\r\n }\r\n }, timeout);\r\n\r\n const originalEnd = res.end;\r\n (res as any).end = function (...args: any[]) {\r\n clearTimeout(timer);\r\n if (!timedOut) {\r\n return (originalEnd as any).apply(this, args);\r\n }\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import type { HealthCheckOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function HealthCheckPlugin(options: HealthCheckOptions = {}): PluginHandler {\r\n const {\r\n path = \"/health\",\r\n checks = {},\r\n timeout: checkTimeout = 5000,\r\n } = options;\r\n\r\n return async (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n if (req.pathname !== path) {\r\n next();\r\n return;\r\n }\r\n\r\n const results: Record<string, { status: string; duration: number }> = {};\r\n let allHealthy = true;\r\n\r\n for (const [name, check] of Object.entries(checks)) {\r\n const start = Date.now();\r\n try {\r\n const result = await Promise.race([\r\n Promise.resolve(check()),\r\n new Promise<boolean>((_, reject) =>\r\n setTimeout(() => reject(new Error(\"timeout\")), checkTimeout),\r\n ),\r\n ]);\r\n results[name] = {\r\n status: result ? \"healthy\" : \"unhealthy\",\r\n duration: Date.now() - start,\r\n };\r\n if (!result) allHealthy = false;\r\n } catch {\r\n results[name] = {\r\n status: \"unhealthy\",\r\n duration: Date.now() - start,\r\n };\r\n allHealthy = false;\r\n }\r\n }\r\n\r\n const body = JSON.stringify({\r\n status: allHealthy ? \"healthy\" : \"unhealthy\",\r\n timestamp: new Date().toISOString(),\r\n uptime: process.uptime(),\r\n memory: process.memoryUsage(),\r\n checks: results,\r\n });\r\n\r\n res.statusCode = allHealthy ? 200 : 503;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.setHeader(\"Cache-Control\", \"no-cache, no-store\");\r\n res.end(body);\r\n };\r\n}\r\n","import type { CircuitBreakerOptions, CircuitBreakerState, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function CircuitBreakerPlugin(options: CircuitBreakerOptions = {}): PluginHandler {\r\n const {\r\n threshold = 5,\r\n timeout: breakerTimeout = 30_000,\r\n resetTimeout = 60_000,\r\n halfOpenRequests = 1,\r\n monitor,\r\n } = options;\r\n\r\n let state: CircuitBreakerState = \"CLOSED\";\r\n let failures = 0;\r\n let successes = 0;\r\n let lastFailureTime = 0;\r\n let halfOpenCount = 0;\r\n\r\n const transition = (newState: CircuitBreakerState) => {\r\n if (state !== newState) {\r\n state = newState;\r\n monitor?.(state);\r\n }\r\n };\r\n\r\n return (ctx, next) => {\r\n const { res } = ctx;\r\n\r\n if (state === \"OPEN\") {\r\n if (Date.now() - lastFailureTime >= resetTimeout) {\r\n transition(\"HALF_OPEN\");\r\n halfOpenCount = 0;\r\n } else {\r\n res.statusCode = 503;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.setHeader(\"Retry-After\", String(Math.ceil(resetTimeout / 1000)));\r\n res.end(\r\n JSON.stringify({\r\n error: { statusCode: 503, message: \"Service temporarily unavailable (circuit open)\" },\r\n }),\r\n );\r\n return;\r\n }\r\n }\r\n\r\n if (state === \"HALF_OPEN\" && halfOpenCount >= halfOpenRequests) {\r\n res.statusCode = 503;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(\r\n JSON.stringify({\r\n error: { statusCode: 503, message: \"Service temporarily unavailable (circuit half-open)\" },\r\n }),\r\n );\r\n return;\r\n }\r\n\r\n if (state === \"HALF_OPEN\") halfOpenCount++;\r\n\r\n const originalEnd = res.end;\r\n (res as any).end = function (...args: any[]) {\r\n if (res.statusCode >= 500) {\r\n failures++;\r\n lastFailureTime = Date.now();\r\n if (state === \"HALF_OPEN\" || failures >= threshold) {\r\n transition(\"OPEN\");\r\n }\r\n } else {\r\n if (state === \"HALF_OPEN\") {\r\n successes++;\r\n if (successes >= halfOpenRequests) {\r\n failures = 0;\r\n successes = 0;\r\n transition(\"CLOSED\");\r\n }\r\n } else {\r\n failures = Math.max(0, failures - 1);\r\n }\r\n }\r\n\r\n return (originalEnd as any).apply(this, args);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n","import type { SSEOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\nimport type { AzuraResponse } from \"../types/common.type.js\";\r\n\r\nexport interface SSEClient {\r\n id: string;\r\n res: AzuraResponse;\r\n send(event: string, data: any, id?: string): void;\r\n close(): void;\r\n}\r\n\r\nexport class SSEManager {\r\n private clients = new Map<string, SSEClient>();\r\n private clientCounter = 0;\r\n\r\n addClient(res: AzuraResponse): SSEClient {\r\n const id = `sse-${++this.clientCounter}-${Date.now()}`;\r\n\r\n res.setHeader(\"Content-Type\", \"text/event-stream\");\r\n res.setHeader(\"Cache-Control\", \"no-cache\");\r\n res.setHeader(\"Connection\", \"keep-alive\");\r\n res.setHeader(\"X-Accel-Buffering\", \"no\");\r\n res.statusCode = 200;\r\n res.flushHeaders();\r\n\r\n const client: SSEClient = {\r\n id,\r\n res,\r\n send(event: string, data: any, eventId?: string) {\r\n const serialized = typeof data === \"string\" ? data : JSON.stringify(data);\r\n let message = \"\";\r\n if (eventId) message += `id: ${eventId}\\n`;\r\n message += `event: ${event}\\n`;\r\n message += `data: ${serialized}\\n\\n`;\r\n res.write(message);\r\n },\r\n close() {\r\n res.end();\r\n },\r\n };\r\n\r\n this.clients.set(id, client);\r\n\r\n res.on(\"close\", () => {\r\n this.clients.delete(id);\r\n });\r\n\r\n return client;\r\n }\r\n\r\n broadcast(event: string, data: any, id?: string): void {\r\n for (const client of this.clients.values()) {\r\n client.send(event, data, id);\r\n }\r\n }\r\n\r\n getClient(id: string): SSEClient | undefined {\r\n return this.clients.get(id);\r\n }\r\n\r\n getClientCount(): number {\r\n return this.clients.size;\r\n }\r\n\r\n closeAll(): void {\r\n for (const client of this.clients.values()) {\r\n client.close();\r\n }\r\n this.clients.clear();\r\n }\r\n}\r\n\r\nexport function SSEPlugin(options: SSEOptions): PluginHandler {\r\n const {\r\n path,\r\n heartbeatInterval = 30_000,\r\n retry = 3000,\r\n maxClients = 1000,\r\n } = options;\r\n\r\n const manager = new SSEManager();\r\n\r\n let heartbeat: ReturnType<typeof setInterval> | null = null;\r\n if (heartbeatInterval > 0) {\r\n heartbeat = setInterval(() => {\r\n manager.broadcast(\"heartbeat\", { time: Date.now() });\r\n }, heartbeatInterval);\r\n if (heartbeat.unref) heartbeat.unref();\r\n }\r\n\r\n const plugin: PluginHandler & { manager: SSEManager } = Object.assign(\r\n (ctx: any, next: any) => {\r\n const { req, res } = ctx;\r\n\r\n if (req.pathname !== path || req.method !== \"GET\") {\r\n next();\r\n return;\r\n }\r\n\r\n if (manager.getClientCount() >= maxClients) {\r\n res.statusCode = 503;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 503, message: \"Too many SSE connections\" } }));\r\n return;\r\n }\r\n\r\n const client = manager.addClient(res as any);\r\n res.write(`retry: ${retry}\\n\\n`);\r\n client.send(\"connected\", { clientId: client.id });\r\n },\r\n { manager },\r\n );\r\n\r\n return plugin;\r\n}\r\n","import { request as httpRequest } from \"node:http\";\r\nimport { request as httpsRequest } from \"node:https\";\r\nimport { URL } from \"node:url\";\r\nimport type { ProxyOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport function ProxyPlugin(options: ProxyOptions): PluginHandler {\r\n const {\r\n target,\r\n pathRewrite = {},\r\n changeOrigin = true,\r\n timeout = 30_000,\r\n headers: extraHeaders = {},\r\n onProxyReq,\r\n onProxyRes,\r\n } = options;\r\n\r\n const targetUrl = new URL(target);\r\n const isHttps = targetUrl.protocol === \"https:\";\r\n const requestFn = isHttps ? httpsRequest : httpRequest;\r\n\r\n return (ctx, next) => {\r\n const { req, res } = ctx;\r\n\r\n let targetPath = req.pathname;\r\n for (const [from, to] of Object.entries(pathRewrite)) {\r\n targetPath = targetPath.replace(new RegExp(from), to);\r\n }\r\n\r\n const search = req.url?.includes(\"?\") ? req.url.slice(req.url.indexOf(\"?\")) : \"\";\r\n const fullPath = targetPath + search;\r\n\r\n const proxyHeaders: Record<string, string> = {};\r\n for (const [key, val] of Object.entries(req.headers)) {\r\n if (val) proxyHeaders[key] = Array.isArray(val) ? val.join(\", \") : val;\r\n }\r\n\r\n if (changeOrigin) {\r\n proxyHeaders.host = targetUrl.host;\r\n }\r\n\r\n Object.assign(proxyHeaders, extraHeaders);\r\n\r\n const proxyReq = requestFn(\r\n {\r\n hostname: targetUrl.hostname,\r\n port: targetUrl.port || (isHttps ? 443 : 80),\r\n path: fullPath,\r\n method: req.method,\r\n headers: proxyHeaders,\r\n timeout,\r\n },\r\n (proxyRes) => {\r\n onProxyRes?.(proxyRes, res as any);\r\n\r\n res.statusCode = proxyRes.statusCode ?? 502;\r\n for (const [key, val] of Object.entries(proxyRes.headers)) {\r\n if (val) res.setHeader(key, val);\r\n }\r\n\r\n proxyRes.pipe(res);\r\n },\r\n );\r\n\r\n proxyReq.on(\"error\", (err) => {\r\n if (!res.headersSent) {\r\n res.statusCode = 502;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 502, message: \"Bad Gateway\", details: err.message } }));\r\n }\r\n });\r\n\r\n proxyReq.on(\"timeout\", () => {\r\n proxyReq.destroy();\r\n if (!res.headersSent) {\r\n res.statusCode = 504;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 504, message: \"Gateway Timeout\" } }));\r\n }\r\n });\r\n\r\n onProxyReq?.(proxyReq, req as any);\r\n\r\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\r\n req.pipe(proxyReq);\r\n } else {\r\n proxyReq.end();\r\n }\r\n };\r\n}\r\n","import { randomBytes } from \"node:crypto\";\r\nimport { writeFileSync, mkdirSync, existsSync } from \"node:fs\";\r\nimport { join } from \"node:path\";\r\nimport type { MultipartOptions, PluginHandler } from \"../types/plugins/plugin.type.js\";\r\n\r\nexport interface UploadedFile {\r\n fieldname: string;\r\n filename: string;\r\n mimetype: string;\r\n size: number;\r\n buffer: Buffer;\r\n path?: string;\r\n}\r\n\r\nexport function MultipartPlugin(options: MultipartOptions = {}): PluginHandler {\r\n const {\r\n maxFileSize = 10 * 1024 * 1024,\r\n maxFiles = 10,\r\n maxFieldSize = 1024 * 1024,\r\n maxFields = 50,\r\n allowedMimeTypes,\r\n uploadDir,\r\n } = options;\r\n\r\n if (uploadDir && !existsSync(uploadDir)) {\r\n mkdirSync(uploadDir, { recursive: true });\r\n }\r\n\r\n return async (ctx, next) => {\r\n const { req } = ctx;\r\n const contentType = req.headers[\"content-type\"] ?? \"\";\r\n\r\n if (!contentType.startsWith(\"multipart/form-data\")) {\r\n next();\r\n return;\r\n }\r\n\r\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\r\n if (!boundaryMatch) {\r\n next();\r\n return;\r\n }\r\n\r\n const boundary = boundaryMatch[1];\r\n\r\n try {\r\n const { fields, files } = await parseMultipart(req as any, boundary, {\r\n maxFileSize,\r\n maxFiles,\r\n maxFieldSize,\r\n maxFields,\r\n allowedMimeTypes,\r\n });\r\n\r\n if (uploadDir) {\r\n for (const file of files) {\r\n const ext = file.filename.includes(\".\")\r\n ? file.filename.slice(file.filename.lastIndexOf(\".\"))\r\n : \"\";\r\n const savedName = `${randomBytes(16).toString(\"hex\")}${ext}`;\r\n const savePath = join(uploadDir, savedName);\r\n writeFileSync(savePath, file.buffer);\r\n file.path = savePath;\r\n }\r\n }\r\n\r\n (req as any).files = files;\r\n (req as any).body = { ...((req as any).body ?? {}), ...fields };\r\n\r\n next();\r\n } catch (err: any) {\r\n const { res } = ctx;\r\n res.statusCode = 400;\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.end(JSON.stringify({ error: { statusCode: 400, message: err.message } }));\r\n }\r\n };\r\n}\r\n\r\ninterface ParseOptions {\r\n maxFileSize: number;\r\n maxFiles: number;\r\n maxFieldSize: number;\r\n maxFields: number;\r\n allowedMimeTypes?: string[];\r\n}\r\n\r\nasync function parseMultipart(\r\n req: NodeJS.ReadableStream,\r\n boundary: string,\r\n opts: ParseOptions,\r\n): Promise<{ fields: Record<string, string>; files: UploadedFile[] }> {\r\n const raw = await collectBody(req);\r\n const delimiter = Buffer.from(`--${boundary}`);\r\n const endDelimiter = Buffer.from(`--${boundary}--`);\r\n\r\n const fields: Record<string, string> = {};\r\n const files: UploadedFile[] = [];\r\n let fieldCount = 0;\r\n\r\n let start = bufferIndexOf(raw, delimiter, 0);\r\n if (start === -1) return { fields, files };\r\n start += delimiter.length + 2; // skip delimiter + CRLF\r\n\r\n while (start < raw.length) {\r\n const end = bufferIndexOf(raw, delimiter, start);\r\n if (end === -1) break;\r\n\r\n const part = raw.subarray(start, end - 2); // -2 for trailing CRLF before delimiter\r\n const headerEnd = bufferIndexOf(part, Buffer.from(\"\\r\\n\\r\\n\"), 0);\r\n if (headerEnd === -1) { start = end + delimiter.length + 2; continue; }\r\n\r\n const headerStr = part.subarray(0, headerEnd).toString(\"utf-8\");\r\n const body = part.subarray(headerEnd + 4);\r\n\r\n const nameMatch = headerStr.match(/name=\"([^\"]+)\"/);\r\n const filenameMatch = headerStr.match(/filename=\"([^\"]*)\"/);\r\n const typeMatch = headerStr.match(/Content-Type:\\s*(.+)/i);\r\n\r\n if (filenameMatch && nameMatch) {\r\n if (files.length >= opts.maxFiles) throw new Error(\"Too many files\");\r\n if (body.length > opts.maxFileSize) throw new Error(`File ${filenameMatch[1]} exceeds max size`);\r\n\r\n const mimetype = typeMatch?.[1]?.trim() ?? \"application/octet-stream\";\r\n if (opts.allowedMimeTypes && !opts.allowedMimeTypes.includes(mimetype)) {\r\n throw new Error(`File type ${mimetype} not allowed`);\r\n }\r\n\r\n files.push({\r\n fieldname: nameMatch[1],\r\n filename: filenameMatch[1],\r\n mimetype,\r\n size: body.length,\r\n buffer: Buffer.from(body),\r\n });\r\n } else if (nameMatch) {\r\n if (++fieldCount > opts.maxFields) throw new Error(\"Too many fields\");\r\n if (body.length > opts.maxFieldSize) throw new Error(`Field ${nameMatch[1]} exceeds max size`);\r\n fields[nameMatch[1]] = body.toString(\"utf-8\");\r\n }\r\n\r\n start = end + delimiter.length;\r\n if (bufferIndexOf(raw, endDelimiter, end) === end) break;\r\n start += 2;\r\n }\r\n\r\n return { fields, files };\r\n}\r\n\r\nfunction collectBody(stream: NodeJS.ReadableStream): Promise<Buffer> {\r\n return new Promise((resolve, reject) => {\r\n const chunks: Buffer[] = [];\r\n stream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\r\n stream.on(\"end\", () => resolve(Buffer.concat(chunks)));\r\n stream.on(\"error\", reject);\r\n });\r\n}\r\n\r\nfunction bufferIndexOf(buf: Buffer, search: Buffer, offset: number): number {\r\n for (let i = offset; i <= buf.length - search.length; i++) {\r\n let found = true;\r\n for (let j = 0; j < search.length; j++) {\r\n if (buf[i + j] !== search[j]) { found = false; break; }\r\n }\r\n if (found) return i;\r\n }\r\n return -1;\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/http/status.ts"],"names":[],"mappings":";AAAO,IAAM,UAAA,GAAa;AAAA,EACxB,EAAA,EAAI,GAAA;AAAA,EACJ,OAAA,EAAS,GAAA;AAAA,EACT,QAAA,EAAU,GAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,iBAAA,EAAmB,GAAA;AAAA,EACnB,KAAA,EAAO,GAAA;AAAA,EACP,YAAA,EAAc,GAAA;AAAA,EACd,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,GAAA;AAAA,EACd,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,kBAAA,EAAoB,GAAA;AAAA,EACpB,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,GAAA;AAAA,EACN,oBAAA,EAAsB,GAAA;AAAA,EACtB,iBAAA,EAAmB,GAAA;AAAA,EACnB,qBAAA,EAAuB,GAAA;AAAA,EACvB,eAAA,EAAiB,GAAA;AAAA,EACjB,WAAA,EAAa,GAAA;AAAA,EACb,mBAAA,EAAqB,GAAA;AAAA,EACrB,eAAA,EAAiB;AACnB;AAIO,IAAM,cAAA,GAAyC;AAAA,EACpD,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,mBAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,cAAA;AAAA,EACL,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,cAAA;AAAA,EACL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK,oBAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,sBAAA;AAAA,EACL,GAAA,EAAK,mBAAA;AAAA,EACL,GAAA,EAAK,uBAAA;AAAA,EACL,GAAA,EAAK,iBAAA;AAAA,EACL,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,qBAAA;AAAA,EACL,GAAA,EAAK;AACP","file":"chunk-OWUGAI5V.mjs","sourcesContent":["export const HttpStatus = {\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NO_CONTENT: 204,\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n NOT_MODIFIED: 304,\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n UNPROCESSABLE_ENTITY: 422,\r\n TOO_MANY_REQUESTS: 429,\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n} as const;\r\n\r\nexport type HttpStatusCode = (typeof HttpStatus)[keyof typeof HttpStatus];\r\n\r\nexport const HttpStatusText: Record<number, string> = {\r\n 200: \"OK\",\r\n 201: \"Created\",\r\n 202: \"Accepted\",\r\n 204: \"No Content\",\r\n 301: \"Moved Permanently\",\r\n 302: \"Found\",\r\n 304: \"Not Modified\",\r\n 400: \"Bad Request\",\r\n 401: \"Unauthorized\",\r\n 403: \"Forbidden\",\r\n 404: \"Not Found\",\r\n 405: \"Method Not Allowed\",\r\n 409: \"Conflict\",\r\n 410: \"Gone\",\r\n 422: \"Unprocessable Entity\",\r\n 429: \"Too Many Requests\",\r\n 500: \"Internal Server Error\",\r\n 501: \"Not Implemented\",\r\n 502: \"Bad Gateway\",\r\n 503: \"Service Unavailable\",\r\n 504: \"Gateway Timeout\",\r\n};\r\n"]}