azurajs 2.6.1 → 2.7.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/dist/{Server-Cj6lmEwq.d.ts → Server-Cj9kTGJi.d.ts} +3 -0
- package/dist/{Server-C18BIlwK.d.cts → Server-DOpvJd3m.d.cts} +3 -0
- 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.map +1 -1
- package/dist/cors.js.map +1 -1
- package/dist/decorators.d.cts +1 -1
- package/dist/decorators.d.ts +1 -1
- package/dist/index.cjs +52 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +52 -8
- package/dist/index.js.map +1 -1
- package/dist/infra.cjs +52 -8
- package/dist/infra.cjs.map +1 -1
- package/dist/infra.d.cts +1 -1
- package/dist/infra.d.ts +1 -1
- package/dist/infra.js +52 -8
- package/dist/infra.js.map +1 -1
- package/dist/plugins.cjs +1122 -2
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.d.cts +189 -2
- package/dist/plugins.d.ts +189 -2
- package/dist/plugins.js +1105 -3
- package/dist/plugins.js.map +1 -1
- package/dist/router.cjs +8 -0
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts +1 -0
- package/dist/router.d.ts +1 -0
- package/dist/router.js +8 -0
- package/dist/router.js.map +1 -1
- package/dist/swagger.d.cts +1 -1
- package/dist/swagger.d.ts +1 -1
- package/package.json +1 -1
- package/src/infra/Router.ts +9 -0
- package/src/infra/Server.ts +46 -4
- package/src/shared/config/ConfigModule.ts +1 -0
- package/src/shared/plugins/BodyLimitPlugin.ts +33 -0
- package/src/shared/plugins/CORSPlugin.ts +3 -3
- package/src/shared/plugins/CSRFPlugin.ts +89 -0
- package/src/shared/plugins/CircuitBreakerPlugin.ts +86 -0
- package/src/shared/plugins/CompressionPlugin.ts +213 -0
- package/src/shared/plugins/ETagPlugin.ts +76 -0
- package/src/shared/plugins/HealthCheckPlugin.ts +38 -0
- package/src/shared/plugins/HelmetPlugin.ts +99 -0
- package/src/shared/plugins/JWTPlugin.ts +170 -0
- package/src/shared/plugins/MultipartPlugin.ts +146 -0
- package/src/shared/plugins/RequestIdPlugin.ts +26 -0
- package/src/shared/plugins/SSEPlugin.ts +237 -0
- package/src/shared/plugins/SessionPlugin.ts +133 -0
- package/src/shared/plugins/StaticPlugin.ts +169 -0
- package/src/shared/plugins/TimeoutPlugin.ts +34 -0
- package/src/shared/plugins/index.ts +15 -1
|
@@ -12,6 +12,7 @@ declare class AzuraClient {
|
|
|
12
12
|
private router;
|
|
13
13
|
private middlewares;
|
|
14
14
|
private proxies;
|
|
15
|
+
private isShuttingDown;
|
|
15
16
|
constructor();
|
|
16
17
|
private setupDefaultRoutes;
|
|
17
18
|
getConfig(): ConfigTypes;
|
|
@@ -25,12 +26,14 @@ declare class AzuraClient {
|
|
|
25
26
|
put: (p: string, ...h: RequestHandler[]) => void;
|
|
26
27
|
delete: (p: string, ...h: RequestHandler[]) => void;
|
|
27
28
|
patch: (p: string, ...h: RequestHandler[]) => void;
|
|
29
|
+
all: (p: string, ...h: RequestHandler[]) => void;
|
|
28
30
|
proxy(path: string, target: string, options?: Partial<ProxyOptions>): void;
|
|
29
31
|
getRoutes(): {
|
|
30
32
|
method: string;
|
|
31
33
|
path: string;
|
|
32
34
|
}[];
|
|
33
35
|
listen(port?: number): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | undefined>;
|
|
36
|
+
shutdown(timeout?: number): Promise<void>;
|
|
34
37
|
fetch(request: Request): Promise<Response>;
|
|
35
38
|
private handle;
|
|
36
39
|
}
|
|
@@ -12,6 +12,7 @@ declare class AzuraClient {
|
|
|
12
12
|
private router;
|
|
13
13
|
private middlewares;
|
|
14
14
|
private proxies;
|
|
15
|
+
private isShuttingDown;
|
|
15
16
|
constructor();
|
|
16
17
|
private setupDefaultRoutes;
|
|
17
18
|
getConfig(): ConfigTypes;
|
|
@@ -25,12 +26,14 @@ declare class AzuraClient {
|
|
|
25
26
|
put: (p: string, ...h: RequestHandler[]) => void;
|
|
26
27
|
delete: (p: string, ...h: RequestHandler[]) => void;
|
|
27
28
|
patch: (p: string, ...h: RequestHandler[]) => void;
|
|
29
|
+
all: (p: string, ...h: RequestHandler[]) => void;
|
|
28
30
|
proxy(path: string, target: string, options?: Partial<ProxyOptions>): void;
|
|
29
31
|
getRoutes(): {
|
|
30
32
|
method: string;
|
|
31
33
|
path: string;
|
|
32
34
|
}[];
|
|
33
35
|
listen(port?: number): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | undefined>;
|
|
36
|
+
shutdown(timeout?: number): Promise<void>;
|
|
34
37
|
fetch(request: Request): Promise<Response>;
|
|
35
38
|
private handle;
|
|
36
39
|
}
|
package/dist/config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/config/ConfigModule.ts"],"names":["path","existsSync","require","createRequire","readFileSync"],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/shared/config/ConfigModule.ts"],"names":["path","existsSync","require","createRequire","readFileSync"],"mappings":";;;;;;;;;;;;;AAuDO,IAAM,eAAN,MAAmB;AAAA,EAAnB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,SAAsB,EAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B,QAAA,GAAiB;AACf,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,MAAA,MAAM,QAAA,GAAWA,qBAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACxC,MAAA,IAAI,CAACC,aAAA,CAAW,QAAQ,CAAA,EAAG;AAE3B,MAAA,MAAM,SAAA,GAAYD,qBAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAEvC,MAAA,IAAI;AACF,QAAA,IAAI,MAAA;AAEJ,QAAA,QAAQ,SAAA;AAAW,UACjB,KAAK,KAAA;AAAA,UACL,KAAK,KAAA;AAEH,YAAA,MAAME,QAAAA,GAAUC,sBAAA,CAAc,4PAAe,CAAA;AAC7C,YAAA,MAAM,GAAA,GAAMD,SAAQ,QAAQ,CAAA;AAC5B,YAAA,MAAA,GAAS,IAAI,OAAA,IAAW,GAAA;AACxB,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,MAAM,GAAA,GAAME,eAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AACzC,YAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AACvB,YAAA;AAAA,UACF,KAAK,OAAA;AAAA,UACL,KAAK,MAAA;AACH,YAAA,MAAM,OAAA,GAAUA,eAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAC7C,YAAA,MAAM,WAAA,GAAcD,sBAAA,CAAc,4PAAe,CAAA;AACjD,YAAA,MAAM,MAAA,GAAS,YAAY,SAAS,CAAA;AACpC,YAAA,MAAA,GAAS,MAAA,CAAO,KAAK,OAAO,CAAA;AAC5B,YAAA;AAAA,UACF;AACE,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,SAAS,CAAA,CAAE,CAAA;AAAA;AAGjE,QAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAC1C,QAAA,MAAA,GAAS,IAAA;AACT,QAAA;AAAA,MACF,SAAS,KAAA,EAAoB;AAC3B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ;AAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC5E;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAiC,GAAA,EAAwB;AACvD,IAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EACxB;AACF","file":"config.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}"]}
|
package/dist/config.d.cts
CHANGED
package/dist/config.d.ts
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/config/ConfigModule.ts"],"names":["require"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/shared/config/ConfigModule.ts"],"names":["require"],"mappings":";;;;;;AAuDO,IAAM,eAAN,MAAmB;AAAA,EAAnB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,SAAsB,EAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B,QAAA,GAAiB;AACf,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACxC,MAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AAE3B,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAEvC,MAAA,IAAI;AACF,QAAA,IAAI,MAAA;AAEJ,QAAA,QAAQ,SAAA;AAAW,UACjB,KAAK,KAAA;AAAA,UACL,KAAK,KAAA;AAEH,YAAA,MAAMA,QAAAA,GAAU,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC7C,YAAA,MAAM,GAAA,GAAMA,SAAQ,QAAQ,CAAA;AAC5B,YAAA,MAAA,GAAS,IAAI,OAAA,IAAW,GAAA;AACxB,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,MAAM,GAAA,GAAM,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AACzC,YAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AACvB,YAAA;AAAA,UACF,KAAK,OAAA;AAAA,UACL,KAAK,MAAA;AACH,YAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAC7C,YAAA,MAAM,WAAA,GAAc,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACjD,YAAA,MAAM,MAAA,GAAS,YAAY,SAAS,CAAA;AACpC,YAAA,MAAA,GAAS,MAAA,CAAO,KAAK,OAAO,CAAA;AAC5B,YAAA;AAAA,UACF;AACE,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,SAAS,CAAA,CAAE,CAAA;AAAA;AAGjE,QAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAC1C,QAAA,MAAA,GAAS,IAAA;AACT,QAAA;AAAA,MACF,SAAS,KAAA,EAAoB;AAC3B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ;AAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC5E;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAiC,GAAA,EAAwB;AACvD,IAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EACxB;AACF","file":"config.js","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}"]}
|
package/dist/cors.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/plugins/CORSPlugin.ts"],"names":[],"mappings":";;;AAGO,SAAS,KAAK,IAAA,EAAmB;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA;AAE5C,EAAA,OAAO,CAAC,KAAkB,IAAA,KAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,6BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC/C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,cAAc,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7D;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,GAAA,CAAI,QAAA,CAAS,UAAU,GAAG,CAAA;AAC1B,MAAA,OAAO,GAAA,CAAI,SAAS,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF","file":"cors.cjs","sourcesContent":["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
|
|
1
|
+
{"version":3,"sources":["../src/shared/plugins/CORSPlugin.ts"],"names":[],"mappings":";;;AAGO,SAAS,KAAK,IAAA,EAAmB;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA;AAE5C,EAAA,OAAO,CAAC,KAAkB,IAAA,KAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,6BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC/C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,cAAc,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7D;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,GAAA,CAAI,QAAA,CAAS,UAAU,GAAG,CAAA;AAC1B,MAAA,OAAO,GAAA,CAAI,SAAS,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF","file":"cors.cjs","sourcesContent":["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"]}
|
package/dist/cors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/plugins/CORSPlugin.ts"],"names":[],"mappings":";AAGO,SAAS,KAAK,IAAA,EAAmB;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA;AAE5C,EAAA,OAAO,CAAC,KAAkB,IAAA,KAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,6BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC/C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,cAAc,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7D;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,GAAA,CAAI,QAAA,CAAS,UAAU,GAAG,CAAA;AAC1B,MAAA,OAAO,GAAA,CAAI,SAAS,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF","file":"cors.js","sourcesContent":["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
|
|
1
|
+
{"version":3,"sources":["../src/shared/plugins/CORSPlugin.ts"],"names":[],"mappings":";AAGO,SAAS,KAAK,IAAA,EAAmB;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA;AAE5C,EAAA,OAAO,CAAC,KAAkB,IAAA,KAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,6BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC/C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,cAAc,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7D;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,GAAA,CAAI,QAAA,CAAS,UAAU,GAAG,CAAA;AAC1B,MAAA,OAAO,GAAA,CAAI,SAAS,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF","file":"cors.js","sourcesContent":["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"]}
|
package/dist/decorators.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AzuraClient } from './Server-
|
|
1
|
+
import { A as AzuraClient } from './Server-DOpvJd3m.cjs';
|
|
2
2
|
export { P as ParamDefinition, a as ParamSource, R as RouteDefinition } from './swagger.type-CaloYHca.cjs';
|
|
3
3
|
export { c as ApiBody, e as ApiDeprecated, A as ApiDoc, b as ApiParameter, a as ApiResponse, f as ApiSecurity, d as ApiTags, g as getSwaggerMetadata } from './Swagger-BilOFt7r.cjs';
|
|
4
4
|
import './config.cjs';
|
package/dist/decorators.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AzuraClient } from './Server-
|
|
1
|
+
import { A as AzuraClient } from './Server-Cj9kTGJi.js';
|
|
2
2
|
export { P as ParamDefinition, a as ParamSource, R as RouteDefinition } from './swagger.type-CaloYHca.js';
|
|
3
3
|
export { c as ApiBody, e as ApiDeprecated, A as ApiDoc, b as ApiParameter, a as ApiResponse, f as ApiSecurity, d as ApiTags, g as getSwaggerMetadata } from './Swagger-BZPLQf5u.js';
|
|
4
4
|
import './config.js';
|
package/dist/index.cjs
CHANGED
|
@@ -8,6 +8,9 @@ require('url');
|
|
|
8
8
|
var path = require('path');
|
|
9
9
|
var module$1 = require('module');
|
|
10
10
|
var https = require('https');
|
|
11
|
+
require('zlib');
|
|
12
|
+
require('fs/promises');
|
|
13
|
+
require('crypto');
|
|
11
14
|
|
|
12
15
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
13
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -474,6 +477,14 @@ var Router = class _Router {
|
|
|
474
477
|
const internalHandlers = handlers.map(adaptRouterHandler);
|
|
475
478
|
this.add("PATCH", path2, composeHandlers(internalHandlers));
|
|
476
479
|
}
|
|
480
|
+
all(path2, ...handlers) {
|
|
481
|
+
const internalHandlers = handlers.map(adaptRouterHandler);
|
|
482
|
+
const composed = composeHandlers(internalHandlers);
|
|
483
|
+
const methods = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
|
|
484
|
+
for (const method of methods) {
|
|
485
|
+
this.add(method, path2, composed);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
477
488
|
};
|
|
478
489
|
function getIP(port) {
|
|
479
490
|
try {
|
|
@@ -656,7 +667,7 @@ function createProxyMiddleware(options) {
|
|
|
656
667
|
target,
|
|
657
668
|
pathRewrite = {},
|
|
658
669
|
headers = {},
|
|
659
|
-
timeout = 3e4,
|
|
670
|
+
timeout: timeout2 = 3e4,
|
|
660
671
|
followRedirects = false,
|
|
661
672
|
preserveHost = false,
|
|
662
673
|
logLevel = "info",
|
|
@@ -707,7 +718,7 @@ function createProxyMiddleware(options) {
|
|
|
707
718
|
path: path2,
|
|
708
719
|
method: req.method,
|
|
709
720
|
headers: proxyHeaders,
|
|
710
|
-
timeout
|
|
721
|
+
timeout: timeout2
|
|
711
722
|
};
|
|
712
723
|
const proxyReq = client.request(proxyReqOptions, (proxyRes) => {
|
|
713
724
|
if (onProxyRes) {
|
|
@@ -889,11 +900,18 @@ var AzuraClient = class {
|
|
|
889
900
|
this.port = 3e3;
|
|
890
901
|
this.middlewares = [];
|
|
891
902
|
this.proxies = [];
|
|
903
|
+
this.isShuttingDown = false;
|
|
892
904
|
this.get = (p, ...h) => this.addRoute("GET", p, ...h);
|
|
893
905
|
this.post = (p, ...h) => this.addRoute("POST", p, ...h);
|
|
894
906
|
this.put = (p, ...h) => this.addRoute("PUT", p, ...h);
|
|
895
907
|
this.delete = (p, ...h) => this.addRoute("DELETE", p, ...h);
|
|
896
908
|
this.patch = (p, ...h) => this.addRoute("PATCH", p, ...h);
|
|
909
|
+
this.all = (p, ...h) => {
|
|
910
|
+
const methods = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
|
|
911
|
+
for (const method of methods) {
|
|
912
|
+
this.addRoute(method, p, ...h);
|
|
913
|
+
}
|
|
914
|
+
};
|
|
897
915
|
const config = new ConfigModule();
|
|
898
916
|
try {
|
|
899
917
|
config.initSync();
|
|
@@ -921,8 +939,10 @@ var AzuraClient = class {
|
|
|
921
939
|
async init() {
|
|
922
940
|
this.port = this.opts.server?.port || 3e3;
|
|
923
941
|
if (this.opts.server?.cluster && cluster2__default.default.isPrimary) {
|
|
924
|
-
const
|
|
925
|
-
|
|
942
|
+
const cpuCount = os__default.default.cpus().length;
|
|
943
|
+
const desired = this.opts.server.clusterInstances ?? 2;
|
|
944
|
+
const workers = desired > cpuCount ? 2 : Math.max(1, desired);
|
|
945
|
+
for (let i = 0; i < workers; i++) cluster2__default.default.fork();
|
|
926
946
|
cluster2__default.default.on("exit", () => cluster2__default.default.fork());
|
|
927
947
|
return;
|
|
928
948
|
}
|
|
@@ -938,7 +958,10 @@ var AzuraClient = class {
|
|
|
938
958
|
rateLimit(this.opts.plugins.rateLimit.limit, this.opts.plugins.rateLimit.timeframe);
|
|
939
959
|
logger("info", "Rate Limit plugin enabled");
|
|
940
960
|
}
|
|
941
|
-
this.server = http__default.default.createServer(
|
|
961
|
+
this.server = http__default.default.createServer();
|
|
962
|
+
this.server.on("request", (req, res) => {
|
|
963
|
+
this.handle(req, res);
|
|
964
|
+
});
|
|
942
965
|
}
|
|
943
966
|
use(prefixOrMw, routerOrMw) {
|
|
944
967
|
if (typeof prefixOrMw === "function") {
|
|
@@ -1010,6 +1033,27 @@ var AzuraClient = class {
|
|
|
1010
1033
|
});
|
|
1011
1034
|
return this.server;
|
|
1012
1035
|
}
|
|
1036
|
+
async shutdown(timeout2 = 1e4) {
|
|
1037
|
+
if (this.isShuttingDown) return;
|
|
1038
|
+
this.isShuttingDown = true;
|
|
1039
|
+
logger("info", "Starting graceful shutdown...");
|
|
1040
|
+
return new Promise((resolve2) => {
|
|
1041
|
+
const forceShutdown = setTimeout(() => {
|
|
1042
|
+
logger("warn", "Forcing shutdown after timeout");
|
|
1043
|
+
process.exit(1);
|
|
1044
|
+
}, timeout2);
|
|
1045
|
+
if (this.server) {
|
|
1046
|
+
this.server.close(() => {
|
|
1047
|
+
clearTimeout(forceShutdown);
|
|
1048
|
+
logger("info", "Server closed successfully");
|
|
1049
|
+
resolve2();
|
|
1050
|
+
});
|
|
1051
|
+
} else {
|
|
1052
|
+
clearTimeout(forceShutdown);
|
|
1053
|
+
resolve2();
|
|
1054
|
+
}
|
|
1055
|
+
});
|
|
1056
|
+
}
|
|
1013
1057
|
async fetch(request) {
|
|
1014
1058
|
await this.initPromise;
|
|
1015
1059
|
const url = new URL(request.url);
|
|
@@ -1242,10 +1286,10 @@ var AzuraClient = class {
|
|
|
1242
1286
|
if (method === "POST" || method === "PUT" || method === "PATCH") {
|
|
1243
1287
|
const chunks = [];
|
|
1244
1288
|
try {
|
|
1245
|
-
await new Promise((
|
|
1289
|
+
await new Promise((resolve2, reject) => {
|
|
1246
1290
|
rawReq.on("data", (chunk) => chunks.push(chunk));
|
|
1247
1291
|
rawReq.on("end", () => {
|
|
1248
|
-
if (chunks.length === 0) return
|
|
1292
|
+
if (chunks.length === 0) return resolve2();
|
|
1249
1293
|
const buffer = Buffer.concat(chunks);
|
|
1250
1294
|
const ct = rawReq.headers["content-type"] || "";
|
|
1251
1295
|
try {
|
|
@@ -1265,7 +1309,7 @@ var AzuraClient = class {
|
|
|
1265
1309
|
} catch {
|
|
1266
1310
|
rawReq.body = {};
|
|
1267
1311
|
}
|
|
1268
|
-
|
|
1312
|
+
resolve2();
|
|
1269
1313
|
});
|
|
1270
1314
|
rawReq.on("error", (err) => {
|
|
1271
1315
|
reject(err);
|