fiberx-backend-toolkit 0.0.10 → 0.0.12

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.
@@ -80,14 +80,14 @@ declare class SecureHeadersMiddleWare {
80
80
  constructor(options?: SecureHeadersOptions);
81
81
  private getDefaultContentSecurityPolicy;
82
82
  private getContentSecurityPolicyString;
83
- middleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
83
+ middleWare(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
84
84
  }
85
85
 
86
86
  declare class RequestLoggerMiddleWare {
87
87
  private name;
88
88
  private logger;
89
89
  constructor();
90
- middleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
90
+ middleWare(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
91
91
  }
92
92
 
93
93
  declare class ResponseFormatterMiddleWare {
@@ -99,8 +99,9 @@ declare class ResponseFormatterMiddleWare {
99
99
  private readonly default_info_message;
100
100
  private readonly default_not_found_message;
101
101
  constructor(options?: ResponseFormatterOptions);
102
- handleGeneralError: (error: unknown, req: Request, res: Response, _next: NextFunction) => Response;
103
- responseFormatterMiddleWare(req: Request, res: Response, next: NextFunction): void;
102
+ handle404ErrorMiddleWare(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
103
+ handleGeneralErrorMiddleWare(error: unknown, req: Request, res: Response, _next: NextFunction): Promise<void | Response>;
104
+ middleWare(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
104
105
  }
105
106
 
106
107
  export { CookieManagerMiddleWare, CorsMiddleWare, HTTPSEnforcementMiddleWare, RateLimiterMiddleWare, RequestLoggerMiddleWare, ResponseFormatterMiddleWare, SecureHeadersMiddleWare };
@@ -313,7 +313,7 @@ var SecureHeadersMiddleWare = class {
313
313
  getContentSecurityPolicyString(policy) {
314
314
  return Object.entries(policy).map(([key, value]) => `${key} ${value.join(" ")}`).join("; ");
315
315
  }
316
- async middleware(req, res, next) {
316
+ async middleWare(req, res, next) {
317
317
  if (!this.enabled) {
318
318
  return next();
319
319
  }
@@ -345,7 +345,7 @@ var SecureHeadersMiddleWare = class {
345
345
  };
346
346
  __decorateClass([
347
347
  safe_execute_util_default.safeExecuteThrow("secure_headers_middle_ware")
348
- ], SecureHeadersMiddleWare.prototype, "middleware", 1);
348
+ ], SecureHeadersMiddleWare.prototype, "middleWare", 1);
349
349
  var secure_headers_middle_ware_default = SecureHeadersMiddleWare;
350
350
 
351
351
  // src/middle_ware/request_logger_middle_ware.ts
@@ -355,7 +355,7 @@ var RequestLoggerMiddleWare = class {
355
355
  constructor() {
356
356
  safe_execute_util_default.setNamedInstance(this.name, this);
357
357
  }
358
- async middleware(req, res, next) {
358
+ async middleWare(req, res, next) {
359
359
  const origin = req.headers.origin || (req.headers.referer ? new URL(req.headers.referer).origin : "unknown");
360
360
  const device_id = req.headers["x-device-id"] || "unknown";
361
361
  const device_name = req.headers["x-device-name"] || "unknown";
@@ -372,7 +372,7 @@ var RequestLoggerMiddleWare = class {
372
372
  };
373
373
  __decorateClass([
374
374
  safe_execute_util_default.safeExecuteThrow("request_logger_middle_ware")
375
- ], RequestLoggerMiddleWare.prototype, "middleware", 1);
375
+ ], RequestLoggerMiddleWare.prototype, "middleWare", 1);
376
376
  var request_logger_middle_ware_default = RequestLoggerMiddleWare;
377
377
 
378
378
  // src/middle_ware/response_formatter_middle_ware.ts
@@ -392,10 +392,10 @@ var ResponseFormatterMiddleWare = class {
392
392
  this.default_not_found_message = options.default_not_found_message ?? "invalid_request_resource_not_found";
393
393
  safe_execute_util_default.setNamedInstance(this.name, this);
394
394
  }
395
- // -------------------------
396
- // Express error middleware
397
- // -------------------------
398
- handleGeneralError = (error, req, res, _next) => {
395
+ async handle404ErrorMiddleWare(req, res, next) {
396
+ return res.status(404).json({ status: "error", msg: this.default_not_found_message });
397
+ }
398
+ async handleGeneralErrorMiddleWare(error, req, res, _next) {
399
399
  const is_development = input_validator_util_default.isDevelopment();
400
400
  const error_message = error instanceof Error ? error.message : String(error);
401
401
  const error_stack = error instanceof Error ? { stack: error.stack } : void 0;
@@ -404,8 +404,8 @@ var ResponseFormatterMiddleWare = class {
404
404
  res.locals.error = is_development ? error : {};
405
405
  this.logger.error(`[${this.name}] Unhandled error for request ${request_id} Message ${error_message}`, { error_stack, error });
406
406
  return res.status(500).json({ status: "error", code: 500, msg: this.default_error_message });
407
- };
408
- responseFormatterMiddleWare(req, res, next) {
407
+ }
408
+ async middleWare(req, res, next) {
409
409
  res.errResponse = (code = 500, msg = this.default_error_message, data = []) => {
410
410
  return res.status(code).json({ status: "error", msg, data });
411
411
  };
@@ -423,7 +423,13 @@ var ResponseFormatterMiddleWare = class {
423
423
  };
424
424
  __decorateClass([
425
425
  safe_execute_util_default.safeExecuteThrow("response_formatter_middle_ware")
426
- ], ResponseFormatterMiddleWare.prototype, "responseFormatterMiddleWare", 1);
426
+ ], ResponseFormatterMiddleWare.prototype, "handle404ErrorMiddleWare", 1);
427
+ __decorateClass([
428
+ safe_execute_util_default.safeExecuteThrow("response_formatter_middle_ware")
429
+ ], ResponseFormatterMiddleWare.prototype, "handleGeneralErrorMiddleWare", 1);
430
+ __decorateClass([
431
+ safe_execute_util_default.safeExecuteThrow("response_formatter_middle_ware")
432
+ ], ResponseFormatterMiddleWare.prototype, "middleWare", 1);
427
433
  var response_formatter_middle_ware_default = ResponseFormatterMiddleWare;
428
434
  export {
429
435
  cookie_manager_middle_ware_default as CookieManagerMiddleWare,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middle_ware/cookie_manager_middle_ware.ts","../../src/middle_ware/cors_middle_ware.ts","../../src/middle_ware/rate_limiter_middle_ware.ts","../../src/middle_ware/https_enforcement_middle_ware.ts","../../src/middle_ware/secure_headers_middle_ware.ts","../../src/middle_ware/request_logger_middle_ware.ts","../../src/middle_ware/response_formatter_middle_ware.ts"],"sourcesContent":["import crypto from \"crypto\";\nimport {\n Request,\n Response,\n NextFunction,\n CookieOptions\n} from \"express\";\n\nimport {\n InputValidatorUtil,\n LoggerUtil,\n SafeExecuteUtil\n} from \"@/utils\";\n\nimport { CookieManagerOptions } from \"@/types/middle_ware_type\";\n\nimport { REQUEST_ID_COOKIE_MAX_AGE } from \"@/config/constants\";\n\nclass CookieManagerMiddleWare {\n private name = \"cookie_manager_middle_ware\";\n private logger = new LoggerUtil(this.name);\n private readonly default_cookie_options: CookieOptions = this.getDefaultCookieOptions();\n private request_id_max_age: number;\n private request_id_generator: () => string\n\n constructor(options: CookieManagerOptions = {}) {\n this.request_id_max_age = options?.request_id_max_age || REQUEST_ID_COOKIE_MAX_AGE;\n this.request_id_generator = options?.request_id_generator || crypto.randomUUID;\n \n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to get default cookie options\n private getDefaultCookieOptions (): CookieOptions {\n return {\n httpOnly: true,\n sameSite: \"strict\",\n path: \"/\",\n secure: InputValidatorUtil.isProduction(),\n };\n }\n\n /** Get cookie value safely */\n public get(req: Request, name: string): string | undefined {\n return req.cookies?.[name];\n }\n\n /** Set cookie with enforced defaults */\n public set(\n res: Response,\n name: string,\n value: string,\n options: { max_age?: number; } = {}\n ): void {\n const cookie_options = { ...this.default_cookie_options, maxAge: options.max_age, }\n res.cookie( name, value, cookie_options );\n }\n\n /** Clear cookie */\n public clear(res: Response, name: string): void {\n res.clearCookie(name, this.default_cookie_options);\n }\n\n /** Middleware */\n @SafeExecuteUtil.safeExecuteThrow(\"cookie_manager_middle_ware\")\n public async middleWare(\n req: Request, \n res: Response, \n next: NextFunction\n ): Promise<void | Response> {\n // Attach helpers\n req.getCookie = (name: string) => this.get(req, name);\n req.setCookie = (name, value, options = {}) => this.set(res, name, value, options);\n req.clearCookie = (name) => this.clear(res, name);\n\n // Request ID handling\n let request_id = req.getCookie(\"request_id\");\n\n if (!request_id) {\n request_id = this.request_id_generator();\n\n this.set( res, \"request_id\", request_id, { max_age: this.request_id_max_age } );\n\n res.setHeader(\"X-Request-Id\", request_id);\n\n this.logger.info(`Generated request_id: ${request_id}`);\n }\n\n this.logger.info(`[REQ:${request_id}] ${req.method} ${req.originalUrl}`);\n\n req.request_id = request_id;\n\n return next();\n }\n}\n\nexport default CookieManagerMiddleWare;\n","import { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport { \n CORS_ALLOWED_METHODS,\n CORS_ALLOWED_HEADERS,\n CORS_MAX_AGE_IN_SECONDS,\n CORS_MAX_AGE_IN_MICRO_SECONDS\n} from \"@/config/constants\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InMemoryCache\n} from \"@/utils\"\n\nimport { \n CorsOptions, \n CorsOriginResolver \n} from \"@/types/middle_ware_type\";\n\n\nclass CorsMiddleWare {\n private name = \"cors_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private origin_cache: InMemoryCache = new InMemoryCache<boolean>();\n private origins: string[];\n private methods: string[];\n private headers: string[];\n private credentials: boolean;\n private max_age: number;\n private allow_null_origin: boolean\n private origin_resolver: CorsOriginResolver | null;\n\n constructor(options: CorsOptions = {}) {\n this.origins = options.origins || [];\n this.methods = options.methods ?? CORS_ALLOWED_METHODS;\n this.headers = options.headers ?? CORS_ALLOWED_HEADERS;\n this.credentials = options.credentials ?? true;\n this.max_age = options.max_age ?? CORS_MAX_AGE_IN_SECONDS\n this.allow_null_origin = options.allow_null_origin ?? false,\n this.origin_resolver = options?.origin_resolver || null;\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method for Origin resolution logic\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", [])\n private async resolveAllowedOrigins(): Promise<string[]> {\n if(Array.isArray(this.origins) && this.origins.length) {\n return this.origins\n }\n else if (this.origin_resolver && typeof this.origin_resolver === \"function\") {\n const result = await this.origin_resolver();\n return Array.isArray(result) ? result : [];\n\n }\n \n return [];\n }\n\n // Method to validate origin\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", false)\n private async isValidOrigin(origin: string): Promise<boolean> {\n if (!origin) { return this.allow_null_origin; }\n\n // Cached\n if (this.origin_cache.has(origin)) { return true; }\n\n // Function validator\n else if (this.origin_resolver && typeof this.origin_resolver === \"function\") {\n const result = await this.origin_resolver(origin);\n\n if (typeof result === \"boolean\") {\n if (result) { \n this.origin_cache.set(origin, true, CORS_MAX_AGE_IN_MICRO_SECONDS); \n }\n return result;\n }\n }\n\n // List validator\n const allowed = await this.resolveAllowedOrigins();\n const is_valid = allowed.includes(origin);\n\n if (is_valid) { \n this.origin_cache.set(origin, true, CORS_MAX_AGE_IN_MICRO_SECONDS); \n }\n\n return is_valid;\n }\n\n // -------------------------\n // Origin detection\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", \"unknown\")\n public async getRequestOrigin(req: Request): Promise<string> {\n const { headers, protocol } = req;\n\n if(headers?.origin) { return headers?.origin }\n\n else if(headers?.referer) { return new URL(headers.referer).origin }\n\n return `${protocol}://${req?.get('host')}` ;\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"cors_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const origin = await this.getRequestOrigin(req);\n const is_allowed = await this.isValidOrigin(origin);\n\n res.setHeader(\"Vary\", \"Origin\");\n\n if (!is_allowed) {\n this.logger.error(`Blocked CORS request from origin: ${origin}`);\n return res.status(403).json({ status: \"error\", code: 403, msg: \"cors_blocked\" });\n }\n\n res.setHeader(\"Access-Control-Allow-Origin\", origin);\n res.setHeader(\"Access-Control-Allow-Methods\", this.methods.join(\",\"));\n res.setHeader(\"Access-Control-Allow-Headers\", this.headers.join(\",\"));\n\n if (this.credentials) {\n res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (this.max_age) {\n res.setHeader( \"Access-Control-Max-Age\", this.max_age.toString());\n }\n\n if (req.method === \"OPTIONS\") {\n return res.sendStatus(204);\n }\n\n return next();\n };\n}\n\nexport default CorsMiddleWare;\n","import { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InMemoryCache\n} from \"@/utils\"\n\nimport { \n RateLimitRecord,\n RateLimiterOptions\n} from \"@/types/middle_ware_type\";\n\nimport { \n REQUEST_RATE_LIMITTER_OPTIONS \n} from \"@/config/constants\";\n\n\n\nclass RateLimiterMiddleWare {\n public readonly name = \"rate_limiter_middle_ware\";\n\n private window_ms: number;\n private max_requests: number;\n private message: string;\n private cache: InMemoryCache<RateLimitRecord>;\n private logger: LoggerUtil;\n private key_generator: Function;\n\n constructor(options: RateLimiterOptions = {}) {\n this.window_ms = options?.window_ms ?? REQUEST_RATE_LIMITTER_OPTIONS.window_ms;\n this.max_requests = options?.max_requests ?? REQUEST_RATE_LIMITTER_OPTIONS.max_requests;\n this.message = options.message ?? REQUEST_RATE_LIMITTER_OPTIONS.message;\n this.key_generator = options?.key_generator || this.generateRequestIdentitfier\n\n this.cache = new InMemoryCache<RateLimitRecord>();\n this.logger = new LoggerUtil(this.name);\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to help generate request key\n private generateRequestIdentitfier (req: Request): string {\n return req?.request_id || req?.clientIp || req?.ip || \"unknown\";\n }\n\n // Method to reset seconds counter\n private getResetSeconds(expires_at: number): number {\n return Math.max(Math.ceil((expires_at - Date.now()) / 1000), 0);\n }\n\n @SafeExecuteUtil.safeExecuteThrow(\"rate_limiter_middle_ware\")\n public async middleWare(\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const key = this.key_generator(req);\n const now = Date.now();\n\n let record = this.cache.get(key);\n\n if (!record) {\n record = {\n count: 1,\n expires_at: now + this.window_ms,\n };\n\n this.cache.set(key, record, this.window_ms);\n } \n else {\n record.count++;\n this.cache.update(key, record);\n }\n\n const remaining = Math.max(this.max_requests - record.count, 0);\n const reset_seconds = this.getResetSeconds(record.expires_at);\n\n // RFC-ish headers\n res.setHeader(\"X-RateLimit-Limit\", this.max_requests);\n res.setHeader(\"X-RateLimit-Remaining\", remaining);\n res.setHeader(\"X-RateLimit-Reset\", reset_seconds);\n\n if (record.count > this.max_requests) {\n this.logger.alert(`⚠️ Rate limit exceeded for key: ${key} (retry in ${reset_seconds}s)`);\n\n res.setHeader(\"Retry-After\", reset_seconds);\n\n return res.status(429).json({\n status: \"error\",\n code: 429,\n msg: \"rate_limit_exceeded\",\n data: {\n message: this.message,\n retry_after: `${reset_seconds}s`,\n },\n });\n }\n\n return next();\n };\n\n}\n\nexport default RateLimiterMiddleWare;\n\n\n\n\n","\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InputValidatorUtil,\n} from \"@/utils\"\n\nimport { ForceHTTPSOptions } from \"@/types/middle_ware_type\";\n\nclass HTTPSEnforcementMiddleWare {\n private name = \"https_enforcement_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private readonly enabled?: boolean;\n private readonly redirect_status?: number;\n private readonly trust_proxy?: boolean;\n\n constructor(options: ForceHTTPSOptions = {}) {\n this.enabled = options.enabled ?? !InputValidatorUtil.isDevelopment();\n this.redirect_status = options?.redirect_status ?? 301;\n this.trust_proxy = options.trust_proxy ?? true\n\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"https_enforcement_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n if (!this.enabled) { return next(); }\n\n const is_secure = req.secure || (this.trust_proxy && req.headers[\"x-forwarded-proto\"] === \"https\");\n\n if (is_secure) { return next(); }\n\n const host = req.headers.host;\n const url = req.originalUrl;\n const redirect_status = this.redirect_status || 301;\n\n this.logger.alert(`Redirecting HTTP → HTTPS: ${url}`);\n\n return res.redirect(redirect_status, `https://${host}${url}`);\n }\n \n\n}\n\nexport default HTTPSEnforcementMiddleWare","\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InputValidatorUtil,\n} from \"@/utils\"\n\nimport { SecureHeadersOptions } from \"@/types/middle_ware_type\";\n\nclass SecureHeadersMiddleWare {\n private name = \"secure_headers_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private readonly enabled?: boolean;\n private readonly HSTS_enabled?: boolean;\n private readonly HSTS_max_age?: number;\n private readonly frame_options: \"DENY\" | \"SAMEORIGIN\";\n private readonly xss_protection?: boolean;\n private readonly content_type_options?: boolean;\n private readonly referrer_policy: string;\n private readonly content_security_policy: Record<string, string[]>;\n private readonly HSTS_Extras: string;\n private readonly cors_policy: string;\n private readonly cors_opener_policy: string;\n\n constructor(options: SecureHeadersOptions = {}) {\n this.enabled = options.enabled ?? true;\n this.HSTS_enabled = options?.HSTS_enabled ?? InputValidatorUtil.isProduction();\n this.HSTS_max_age = options?.HSTS_max_age ?? 63072000;\n this.frame_options = options?.frame_options ?? \"SAMEORIGIN\";\n this.xss_protection = options?.xss_protection ?? true;\n this.content_type_options = options?.content_type_options ?? true;\n this.referrer_policy = options?.referrer_policy ?? \"no-referrer-when-downgrade\";\n this.content_security_policy = options?.content_security_policy ?? this.getDefaultContentSecurityPolicy(),\n this.HSTS_Extras = options?.HSTS_Extras ?? \"includeSubDomains; preload;\";\n this.cors_policy = options?.cors_policy ?? \"same-origin\";\n this.cors_opener_policy = options?.cors_opener_policy ?? \"same-origin\";\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to get default content security policy\n private getDefaultContentSecurityPolicy (): Record<string, string[]> {\n return {\n \"default-src\": [\"'self'\"],\n \"object-src\": [\"'none'\"],\n \"script-src\": [\"'self'\"],\n \"style-src\": [\"'self'\", \"https://fonts.googleapis.com\"],\n \"font-src\": [\"'self'\", \"https://fonts.gstatic.com\"],\n \"img-src\": [\"'self'\"],\n \"connect-src\": [\"'self'\"],\n \"base-uri\": [\"'self'\"],\n \"frame-ancestors\": [\"'self'\"],\n };\n }\n\n // Method to convert content security policy object to string\n private getContentSecurityPolicyString(\n policy: Record<string, string[]>\n ): string {\n return Object.entries(policy)\n .map(([key, value]) => `${key} ${value.join(\" \")}`)\n .join(\"; \");\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"secure_headers_middle_ware\")\n public async middleware (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n if (!this.enabled) { return next(); }\n\n // Prevent XSS\n if (this.xss_protection) {\n res.setHeader(\"X-XSS-Protection\", \"1; mode=block\");\n }\n else {\n res.setHeader(\"X-XSS-Protection\", \"0\");\n }\n\n // Prevent MIME-type sniffing\n if (this.content_type_options) {\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n }\n\n // Disable framing (clickjacking protection)\n res.setHeader(\"X-Frame-Options\", this.frame_options);\n res.setHeader(\"Referrer-Policy\", this.referrer_policy);\n\n if(this.cors_policy) {\n res.setHeader(\"Cross-Origin-Resource-Policy\", this.cors_policy);\n }\n\n if(this.cors_opener_policy) {\n res.setHeader(\"Cross-Origin-Opener-Policy\", this.cors_opener_policy);\n }\n\n // Content Security Policy\n if (this.content_security_policy) {\n const content_security_policy_string = this.getContentSecurityPolicyString(this.content_security_policy);\n res.setHeader(\"Content-Security-Policy\", content_security_policy_string);\n }\n\n if (this.HSTS_enabled) {\n res.setHeader(\"Strict-Transport-Security\", `max-age=${this.HSTS_max_age}; ${this.HSTS_Extras}`);\n }\n\n return next();\n }\n \n}\n\nexport default SecureHeadersMiddleWare","\n\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n} from \"@/utils\"\n\n\nclass RequestLoggerMiddleWare {\n private name = \"request_logger_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n\n\n constructor() {\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"request_logger_middle_ware\")\n public async middleware (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const origin = req.headers.origin || (req.headers.referer ? new URL(req.headers.referer).origin : \"unknown\");\n const device_id = req.headers[\"x-device-id\"] || \"unknown\";\n const device_name = req.headers[\"x-device-name\"] || \"unknown\";\n const user_agent = req.headers[\"user-agent\"] || \"unknown\";\n const request_id = req.cookies?.request_id ?? null;\n const ip = req.clientIp || req.ip || \"unknown\";\n\n this.logger.info(`[${this.name}] ${req.method} ${req.originalUrl}`);\n this.logger.info(`[${this.name}] Origin: ${origin}, Host: ${req.get(\"host\")}`);\n this.logger.info(`[${this.name}] Device ID: ${device_id}, Device Name: ${device_name}`);\n this.logger.info(`[${this.name}] Request ID: ${request_id}, IP: ${ip}`);\n this.logger.info(`[${this.name}] User-Agent: ${user_agent}`);\n\n return next();\n }\n \n\n}\n\nexport default RequestLoggerMiddleWare","import { Request, Response, NextFunction } from \"express\";\nimport { SafeExecuteUtil, LoggerUtil, InputValidatorUtil } from \"@/utils\";\nimport { EnvConfigInterface } from \"@/types/util_type\";\nimport { ResponseFormatterOptions } from \"@/types/middle_ware_type\";\n\nclass ResponseFormatterMiddleWare {\n private readonly name = \"response_formatter_middle_ware\";\n private readonly logger: LoggerUtil = new LoggerUtil(this.name);;\n\n private readonly include_request_id: boolean;\n private readonly default_success_message: string;\n private readonly default_error_message: string;\n private readonly default_info_message: string;\n private readonly default_not_found_message: string;\n\n constructor(options: ResponseFormatterOptions = {}) {\n this.include_request_id = options.include_request_id ?? true;\n this.default_success_message = options.default_success_message ?? \"operation_successful\";\n this.default_error_message = options.default_error_message ?? \"server_error\";\n this.default_info_message = options.default_info_message ?? \"operation_information\";\n this.default_not_found_message = options.default_not_found_message ?? \"invalid_request_resource_not_found\";\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // -------------------------\n // Express error middleware\n // -------------------------\n public handleGeneralError = (\n error: unknown,\n req: Request,\n res: Response,\n _next: NextFunction\n ): Response => {\n const is_development = InputValidatorUtil.isDevelopment();\n const error_message = error instanceof Error ? error.message : String(error);\n const error_stack = error instanceof Error ? { stack: error.stack } : undefined;\n const request_id = req.request_id\n\n res.locals.message = error_message;\n res.locals.error = is_development ? error : {};\n\n this.logger.error(`[${this.name}] Unhandled error for request ${request_id} Message ${error_message}`, { error_stack, error });\n\n return res.status(500).json({ status: \"error\", code: 500, msg: this.default_error_message });\n };\n\n // -------------------------\n // Middleware\n // -------------------------\n @SafeExecuteUtil.safeExecuteThrow(\"response_formatter_middle_ware\")\n public responseFormatterMiddleWare(\n req: Request,\n res: Response,\n next: NextFunction\n ): void {\n\n // Generic error response\n res.errResponse = (code = 500, msg = this.default_error_message, data: any = []) => {\n return res.status(code).json({ status: \"error\", msg, data });\n };\n\n // Generic success response\n res.successResponse = (code = 200, msg = this.default_success_message, data: any = []) => {\n return res.status(code).json({ status: \"success\", msg, data });\n };\n\n // Informational response\n res.infoResponse = (code = 200, msg = this.default_info_message, data: any = []) => {\n return res.status(code).json({ status: \"info\", msg, data });\n };\n\n // 404 handler\n res.handle404Error = () => {\n return res.status(404).json({ status: \"error\", msg: this.default_not_found_message });\n };\n\n next();\n }\n\n}\n\nexport default ResponseFormatterMiddleWare;\n\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/middle_ware/cookie_manager_middle_ware.ts","../../src/middle_ware/cors_middle_ware.ts","../../src/middle_ware/rate_limiter_middle_ware.ts","../../src/middle_ware/https_enforcement_middle_ware.ts","../../src/middle_ware/secure_headers_middle_ware.ts","../../src/middle_ware/request_logger_middle_ware.ts","../../src/middle_ware/response_formatter_middle_ware.ts"],"sourcesContent":["import crypto from \"crypto\";\nimport {\n Request,\n Response,\n NextFunction,\n CookieOptions\n} from \"express\";\n\nimport {\n InputValidatorUtil,\n LoggerUtil,\n SafeExecuteUtil\n} from \"@/utils\";\n\nimport { CookieManagerOptions } from \"@/types/middle_ware_type\";\n\nimport { REQUEST_ID_COOKIE_MAX_AGE } from \"@/config/constants\";\n\nclass CookieManagerMiddleWare {\n private name = \"cookie_manager_middle_ware\";\n private logger = new LoggerUtil(this.name);\n private readonly default_cookie_options: CookieOptions = this.getDefaultCookieOptions();\n private request_id_max_age: number;\n private request_id_generator: () => string\n\n constructor(options: CookieManagerOptions = {}) {\n this.request_id_max_age = options?.request_id_max_age || REQUEST_ID_COOKIE_MAX_AGE;\n this.request_id_generator = options?.request_id_generator || crypto.randomUUID;\n \n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to get default cookie options\n private getDefaultCookieOptions (): CookieOptions {\n return {\n httpOnly: true,\n sameSite: \"strict\",\n path: \"/\",\n secure: InputValidatorUtil.isProduction(),\n };\n }\n\n /** Get cookie value safely */\n public get(req: Request, name: string): string | undefined {\n return req.cookies?.[name];\n }\n\n /** Set cookie with enforced defaults */\n public set(\n res: Response,\n name: string,\n value: string,\n options: { max_age?: number; } = {}\n ): void {\n const cookie_options = { ...this.default_cookie_options, maxAge: options.max_age, }\n res.cookie( name, value, cookie_options );\n }\n\n /** Clear cookie */\n public clear(res: Response, name: string): void {\n res.clearCookie(name, this.default_cookie_options);\n }\n\n /** Middleware */\n @SafeExecuteUtil.safeExecuteThrow(\"cookie_manager_middle_ware\")\n public async middleWare(\n req: Request, \n res: Response, \n next: NextFunction\n ): Promise<void | Response> {\n // Attach helpers\n req.getCookie = (name: string) => this.get(req, name);\n req.setCookie = (name, value, options = {}) => this.set(res, name, value, options);\n req.clearCookie = (name) => this.clear(res, name);\n\n // Request ID handling\n let request_id = req.getCookie(\"request_id\");\n\n if (!request_id) {\n request_id = this.request_id_generator();\n\n this.set( res, \"request_id\", request_id, { max_age: this.request_id_max_age } );\n\n res.setHeader(\"X-Request-Id\", request_id);\n\n this.logger.info(`Generated request_id: ${request_id}`);\n }\n\n this.logger.info(`[REQ:${request_id}] ${req.method} ${req.originalUrl}`);\n\n req.request_id = request_id;\n\n return next();\n }\n}\n\nexport default CookieManagerMiddleWare;\n","import { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport { \n CORS_ALLOWED_METHODS,\n CORS_ALLOWED_HEADERS,\n CORS_MAX_AGE_IN_SECONDS,\n CORS_MAX_AGE_IN_MICRO_SECONDS\n} from \"@/config/constants\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InMemoryCache\n} from \"@/utils\"\n\nimport { \n CorsOptions, \n CorsOriginResolver \n} from \"@/types/middle_ware_type\";\n\n\nclass CorsMiddleWare {\n private name = \"cors_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private origin_cache: InMemoryCache = new InMemoryCache<boolean>();\n private origins: string[];\n private methods: string[];\n private headers: string[];\n private credentials: boolean;\n private max_age: number;\n private allow_null_origin: boolean\n private origin_resolver: CorsOriginResolver | null;\n\n constructor(options: CorsOptions = {}) {\n this.origins = options.origins || [];\n this.methods = options.methods ?? CORS_ALLOWED_METHODS;\n this.headers = options.headers ?? CORS_ALLOWED_HEADERS;\n this.credentials = options.credentials ?? true;\n this.max_age = options.max_age ?? CORS_MAX_AGE_IN_SECONDS\n this.allow_null_origin = options.allow_null_origin ?? false,\n this.origin_resolver = options?.origin_resolver || null;\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method for Origin resolution logic\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", [])\n private async resolveAllowedOrigins(): Promise<string[]> {\n if(Array.isArray(this.origins) && this.origins.length) {\n return this.origins\n }\n else if (this.origin_resolver && typeof this.origin_resolver === \"function\") {\n const result = await this.origin_resolver();\n return Array.isArray(result) ? result : [];\n\n }\n \n return [];\n }\n\n // Method to validate origin\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", false)\n private async isValidOrigin(origin: string): Promise<boolean> {\n if (!origin) { return this.allow_null_origin; }\n\n // Cached\n if (this.origin_cache.has(origin)) { return true; }\n\n // Function validator\n else if (this.origin_resolver && typeof this.origin_resolver === \"function\") {\n const result = await this.origin_resolver(origin);\n\n if (typeof result === \"boolean\") {\n if (result) { \n this.origin_cache.set(origin, true, CORS_MAX_AGE_IN_MICRO_SECONDS); \n }\n return result;\n }\n }\n\n // List validator\n const allowed = await this.resolveAllowedOrigins();\n const is_valid = allowed.includes(origin);\n\n if (is_valid) { \n this.origin_cache.set(origin, true, CORS_MAX_AGE_IN_MICRO_SECONDS); \n }\n\n return is_valid;\n }\n\n // -------------------------\n // Origin detection\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteReturn(\"cors_middle_ware\", \"unknown\")\n public async getRequestOrigin(req: Request): Promise<string> {\n const { headers, protocol } = req;\n\n if(headers?.origin) { return headers?.origin }\n\n else if(headers?.referer) { return new URL(headers.referer).origin }\n\n return `${protocol}://${req?.get('host')}` ;\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"cors_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const origin = await this.getRequestOrigin(req);\n const is_allowed = await this.isValidOrigin(origin);\n\n res.setHeader(\"Vary\", \"Origin\");\n\n if (!is_allowed) {\n this.logger.error(`Blocked CORS request from origin: ${origin}`);\n return res.status(403).json({ status: \"error\", code: 403, msg: \"cors_blocked\" });\n }\n\n res.setHeader(\"Access-Control-Allow-Origin\", origin);\n res.setHeader(\"Access-Control-Allow-Methods\", this.methods.join(\",\"));\n res.setHeader(\"Access-Control-Allow-Headers\", this.headers.join(\",\"));\n\n if (this.credentials) {\n res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (this.max_age) {\n res.setHeader( \"Access-Control-Max-Age\", this.max_age.toString());\n }\n\n if (req.method === \"OPTIONS\") {\n return res.sendStatus(204);\n }\n\n return next();\n };\n}\n\nexport default CorsMiddleWare;\n","import { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InMemoryCache\n} from \"@/utils\"\n\nimport { \n RateLimitRecord,\n RateLimiterOptions\n} from \"@/types/middle_ware_type\";\n\nimport { \n REQUEST_RATE_LIMITTER_OPTIONS \n} from \"@/config/constants\";\n\n\n\nclass RateLimiterMiddleWare {\n public readonly name = \"rate_limiter_middle_ware\";\n\n private window_ms: number;\n private max_requests: number;\n private message: string;\n private cache: InMemoryCache<RateLimitRecord>;\n private logger: LoggerUtil;\n private key_generator: Function;\n\n constructor(options: RateLimiterOptions = {}) {\n this.window_ms = options?.window_ms ?? REQUEST_RATE_LIMITTER_OPTIONS.window_ms;\n this.max_requests = options?.max_requests ?? REQUEST_RATE_LIMITTER_OPTIONS.max_requests;\n this.message = options.message ?? REQUEST_RATE_LIMITTER_OPTIONS.message;\n this.key_generator = options?.key_generator || this.generateRequestIdentitfier\n\n this.cache = new InMemoryCache<RateLimitRecord>();\n this.logger = new LoggerUtil(this.name);\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to help generate request key\n private generateRequestIdentitfier (req: Request): string {\n return req?.request_id || req?.clientIp || req?.ip || \"unknown\";\n }\n\n // Method to reset seconds counter\n private getResetSeconds(expires_at: number): number {\n return Math.max(Math.ceil((expires_at - Date.now()) / 1000), 0);\n }\n\n @SafeExecuteUtil.safeExecuteThrow(\"rate_limiter_middle_ware\")\n public async middleWare(\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const key = this.key_generator(req);\n const now = Date.now();\n\n let record = this.cache.get(key);\n\n if (!record) {\n record = {\n count: 1,\n expires_at: now + this.window_ms,\n };\n\n this.cache.set(key, record, this.window_ms);\n } \n else {\n record.count++;\n this.cache.update(key, record);\n }\n\n const remaining = Math.max(this.max_requests - record.count, 0);\n const reset_seconds = this.getResetSeconds(record.expires_at);\n\n // RFC-ish headers\n res.setHeader(\"X-RateLimit-Limit\", this.max_requests);\n res.setHeader(\"X-RateLimit-Remaining\", remaining);\n res.setHeader(\"X-RateLimit-Reset\", reset_seconds);\n\n if (record.count > this.max_requests) {\n this.logger.alert(`⚠️ Rate limit exceeded for key: ${key} (retry in ${reset_seconds}s)`);\n\n res.setHeader(\"Retry-After\", reset_seconds);\n\n return res.status(429).json({\n status: \"error\",\n code: 429,\n msg: \"rate_limit_exceeded\",\n data: {\n message: this.message,\n retry_after: `${reset_seconds}s`,\n },\n });\n }\n\n return next();\n };\n\n}\n\nexport default RateLimiterMiddleWare;\n\n\n\n\n","\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InputValidatorUtil,\n} from \"@/utils\"\n\nimport { ForceHTTPSOptions } from \"@/types/middle_ware_type\";\n\nclass HTTPSEnforcementMiddleWare {\n private name = \"https_enforcement_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private readonly enabled?: boolean;\n private readonly redirect_status?: number;\n private readonly trust_proxy?: boolean;\n\n constructor(options: ForceHTTPSOptions = {}) {\n this.enabled = options.enabled ?? !InputValidatorUtil.isDevelopment();\n this.redirect_status = options?.redirect_status ?? 301;\n this.trust_proxy = options.trust_proxy ?? true\n\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"https_enforcement_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n if (!this.enabled) { return next(); }\n\n const is_secure = req.secure || (this.trust_proxy && req.headers[\"x-forwarded-proto\"] === \"https\");\n\n if (is_secure) { return next(); }\n\n const host = req.headers.host;\n const url = req.originalUrl;\n const redirect_status = this.redirect_status || 301;\n\n this.logger.alert(`Redirecting HTTP → HTTPS: ${url}`);\n\n return res.redirect(redirect_status, `https://${host}${url}`);\n }\n \n\n}\n\nexport default HTTPSEnforcementMiddleWare","\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n InputValidatorUtil,\n} from \"@/utils\"\n\nimport { SecureHeadersOptions } from \"@/types/middle_ware_type\";\n\nclass SecureHeadersMiddleWare {\n private name = \"secure_headers_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n private readonly enabled?: boolean;\n private readonly HSTS_enabled?: boolean;\n private readonly HSTS_max_age?: number;\n private readonly frame_options: \"DENY\" | \"SAMEORIGIN\";\n private readonly xss_protection?: boolean;\n private readonly content_type_options?: boolean;\n private readonly referrer_policy: string;\n private readonly content_security_policy: Record<string, string[]>;\n private readonly HSTS_Extras: string;\n private readonly cors_policy: string;\n private readonly cors_opener_policy: string;\n\n constructor(options: SecureHeadersOptions = {}) {\n this.enabled = options.enabled ?? true;\n this.HSTS_enabled = options?.HSTS_enabled ?? InputValidatorUtil.isProduction();\n this.HSTS_max_age = options?.HSTS_max_age ?? 63072000;\n this.frame_options = options?.frame_options ?? \"SAMEORIGIN\";\n this.xss_protection = options?.xss_protection ?? true;\n this.content_type_options = options?.content_type_options ?? true;\n this.referrer_policy = options?.referrer_policy ?? \"no-referrer-when-downgrade\";\n this.content_security_policy = options?.content_security_policy ?? this.getDefaultContentSecurityPolicy(),\n this.HSTS_Extras = options?.HSTS_Extras ?? \"includeSubDomains; preload;\";\n this.cors_policy = options?.cors_policy ?? \"same-origin\";\n this.cors_opener_policy = options?.cors_opener_policy ?? \"same-origin\";\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to get default content security policy\n private getDefaultContentSecurityPolicy (): Record<string, string[]> {\n return {\n \"default-src\": [\"'self'\"],\n \"object-src\": [\"'none'\"],\n \"script-src\": [\"'self'\"],\n \"style-src\": [\"'self'\", \"https://fonts.googleapis.com\"],\n \"font-src\": [\"'self'\", \"https://fonts.gstatic.com\"],\n \"img-src\": [\"'self'\"],\n \"connect-src\": [\"'self'\"],\n \"base-uri\": [\"'self'\"],\n \"frame-ancestors\": [\"'self'\"],\n };\n }\n\n // Method to convert content security policy object to string\n private getContentSecurityPolicyString(\n policy: Record<string, string[]>\n ): string {\n return Object.entries(policy)\n .map(([key, value]) => `${key} ${value.join(\" \")}`)\n .join(\"; \");\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"secure_headers_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n if (!this.enabled) { return next(); }\n\n // Prevent XSS\n if (this.xss_protection) {\n res.setHeader(\"X-XSS-Protection\", \"1; mode=block\");\n }\n else {\n res.setHeader(\"X-XSS-Protection\", \"0\");\n }\n\n // Prevent MIME-type sniffing\n if (this.content_type_options) {\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n }\n\n // Disable framing (clickjacking protection)\n res.setHeader(\"X-Frame-Options\", this.frame_options);\n res.setHeader(\"Referrer-Policy\", this.referrer_policy);\n\n if(this.cors_policy) {\n res.setHeader(\"Cross-Origin-Resource-Policy\", this.cors_policy);\n }\n\n if(this.cors_opener_policy) {\n res.setHeader(\"Cross-Origin-Opener-Policy\", this.cors_opener_policy);\n }\n\n // Content Security Policy\n if (this.content_security_policy) {\n const content_security_policy_string = this.getContentSecurityPolicyString(this.content_security_policy);\n res.setHeader(\"Content-Security-Policy\", content_security_policy_string);\n }\n\n if (this.HSTS_enabled) {\n res.setHeader(\"Strict-Transport-Security\", `max-age=${this.HSTS_max_age}; ${this.HSTS_Extras}`);\n }\n\n return next();\n }\n \n}\n\nexport default SecureHeadersMiddleWare","\n\nimport { \n Request, \n Response, \n NextFunction \n} from \"express\";\n\nimport {\n SafeExecuteUtil,\n LoggerUtil,\n} from \"@/utils\"\n\n\nclass RequestLoggerMiddleWare {\n private name = \"request_logger_middle_ware\";\n private logger: LoggerUtil = new LoggerUtil(this.name);\n\n\n constructor() {\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // -------------------------\n // Middleware\n // -------------------------\n\n @SafeExecuteUtil.safeExecuteThrow(\"request_logger_middle_ware\")\n public async middleWare (\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n const origin = req.headers.origin || (req.headers.referer ? new URL(req.headers.referer).origin : \"unknown\");\n const device_id = req.headers[\"x-device-id\"] || \"unknown\";\n const device_name = req.headers[\"x-device-name\"] || \"unknown\";\n const user_agent = req.headers[\"user-agent\"] || \"unknown\";\n const request_id = req.cookies?.request_id ?? null;\n const ip = req.clientIp || req.ip || \"unknown\";\n\n this.logger.info(`[${this.name}] ${req.method} ${req.originalUrl}`);\n this.logger.info(`[${this.name}] Origin: ${origin}, Host: ${req.get(\"host\")}`);\n this.logger.info(`[${this.name}] Device ID: ${device_id}, Device Name: ${device_name}`);\n this.logger.info(`[${this.name}] Request ID: ${request_id}, IP: ${ip}`);\n this.logger.info(`[${this.name}] User-Agent: ${user_agent}`);\n\n return next();\n }\n \n\n}\n\nexport default RequestLoggerMiddleWare","import { Request, Response, NextFunction } from \"express\";\nimport { SafeExecuteUtil, LoggerUtil, InputValidatorUtil } from \"@/utils\";\nimport { EnvConfigInterface } from \"@/types/util_type\";\nimport { ResponseFormatterOptions } from \"@/types/middle_ware_type\";\n\nclass ResponseFormatterMiddleWare {\n private readonly name = \"response_formatter_middle_ware\";\n private readonly logger: LoggerUtil = new LoggerUtil(this.name);;\n\n private readonly include_request_id: boolean;\n private readonly default_success_message: string;\n private readonly default_error_message: string;\n private readonly default_info_message: string;\n private readonly default_not_found_message: string;\n\n constructor(options: ResponseFormatterOptions = {}) {\n this.include_request_id = options.include_request_id ?? true;\n this.default_success_message = options.default_success_message ?? \"operation_successful\";\n this.default_error_message = options.default_error_message ?? \"server_error\";\n this.default_info_message = options.default_info_message ?? \"operation_information\";\n this.default_not_found_message = options.default_not_found_message ?? \"invalid_request_resource_not_found\";\n\n SafeExecuteUtil.setNamedInstance(this.name, this);\n }\n\n // Method to handle 404 error\n @SafeExecuteUtil.safeExecuteThrow(\"response_formatter_middle_ware\")\n public async handle404ErrorMiddleWare (\n req: Request, \n res: Response, \n next: NextFunction\n ): Promise<void | Response> {\n return res.status(404).json({ status: \"error\", msg: this.default_not_found_message });\n }\n\n // -------------------------\n // Express error middleware\n // -------------------------\n @SafeExecuteUtil.safeExecuteThrow(\"response_formatter_middle_ware\")\n public async handleGeneralErrorMiddleWare (\n error: unknown,\n req: Request,\n res: Response,\n _next: NextFunction\n ): Promise<void | Response> {\n const is_development = InputValidatorUtil.isDevelopment();\n const error_message = error instanceof Error ? error.message : String(error);\n const error_stack = error instanceof Error ? { stack: error.stack } : undefined;\n const request_id = req.request_id\n\n res.locals.message = error_message;\n res.locals.error = is_development ? error : {};\n\n this.logger.error(`[${this.name}] Unhandled error for request ${request_id} Message ${error_message}`, { error_stack, error });\n\n return res.status(500).json({ status: \"error\", code: 500, msg: this.default_error_message });\n };\n\n // -------------------------\n // Middleware\n // -------------------------\n @SafeExecuteUtil.safeExecuteThrow(\"response_formatter_middle_ware\")\n public async middleWare(\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void | Response> {\n\n // Generic error response\n res.errResponse = (code = 500, msg = this.default_error_message, data: any = []) => {\n return res.status(code).json({ status: \"error\", msg, data });\n };\n\n // Generic success response\n res.successResponse = (code = 200, msg = this.default_success_message, data: any = []) => {\n return res.status(code).json({ status: \"success\", msg, data });\n };\n\n // Informational response\n res.infoResponse = (code = 200, msg = this.default_info_message, data: any = []) => {\n return res.status(code).json({ status: \"info\", msg, data });\n };\n\n // 404 handler\n res.handle404Error = () => {\n return res.status(404).json({ status: \"error\", msg: this.default_not_found_message });\n };\n\n next();\n }\n\n}\n\nexport default ResponseFormatterMiddleWare;\n\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fiberx-backend-toolkit",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "A TypeScript backend toolkit providing shared domain logic, infrastructure helpers, and utilities for FiberX server-side applications and services.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",