@hazeljs/core 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +522 -0
- package/dist/__tests__/container.test.d.ts +2 -0
- package/dist/__tests__/container.test.d.ts.map +1 -0
- package/dist/__tests__/container.test.js +454 -0
- package/dist/__tests__/decorators.test.d.ts +2 -0
- package/dist/__tests__/decorators.test.d.ts.map +1 -0
- package/dist/__tests__/decorators.test.js +693 -0
- package/dist/__tests__/errors/http.error.test.d.ts +2 -0
- package/dist/__tests__/errors/http.error.test.d.ts.map +1 -0
- package/dist/__tests__/errors/http.error.test.js +117 -0
- package/dist/__tests__/filters/exception-filter.test.d.ts +2 -0
- package/dist/__tests__/filters/exception-filter.test.d.ts.map +1 -0
- package/dist/__tests__/filters/exception-filter.test.js +135 -0
- package/dist/__tests__/filters/http-exception.filter.test.d.ts +2 -0
- package/dist/__tests__/filters/http-exception.filter.test.d.ts.map +1 -0
- package/dist/__tests__/filters/http-exception.filter.test.js +119 -0
- package/dist/__tests__/hazel-app.test.d.ts +2 -0
- package/dist/__tests__/hazel-app.test.d.ts.map +1 -0
- package/dist/__tests__/hazel-app.test.js +682 -0
- package/dist/__tests__/hazel-module.test.d.ts +2 -0
- package/dist/__tests__/hazel-module.test.d.ts.map +1 -0
- package/dist/__tests__/hazel-module.test.js +408 -0
- package/dist/__tests__/hazel-response.test.d.ts +2 -0
- package/dist/__tests__/hazel-response.test.d.ts.map +1 -0
- package/dist/__tests__/hazel-response.test.js +138 -0
- package/dist/__tests__/health.test.d.ts +2 -0
- package/dist/__tests__/health.test.d.ts.map +1 -0
- package/dist/__tests__/health.test.js +147 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +239 -0
- package/dist/__tests__/interceptors/interceptor.test.d.ts +2 -0
- package/dist/__tests__/interceptors/interceptor.test.d.ts.map +1 -0
- package/dist/__tests__/interceptors/interceptor.test.js +166 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +141 -0
- package/dist/__tests__/middleware/cors.test.d.ts +2 -0
- package/dist/__tests__/middleware/cors.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/cors.test.js +129 -0
- package/dist/__tests__/middleware/csrf.test.d.ts +2 -0
- package/dist/__tests__/middleware/csrf.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/csrf.test.js +247 -0
- package/dist/__tests__/middleware/global-middleware.test.d.ts +2 -0
- package/dist/__tests__/middleware/global-middleware.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/global-middleware.test.js +259 -0
- package/dist/__tests__/middleware/rate-limit.test.d.ts +2 -0
- package/dist/__tests__/middleware/rate-limit.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/rate-limit.test.js +264 -0
- package/dist/__tests__/middleware/security-headers.test.d.ts +2 -0
- package/dist/__tests__/middleware/security-headers.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/security-headers.test.js +229 -0
- package/dist/__tests__/middleware/timeout.test.d.ts +2 -0
- package/dist/__tests__/middleware/timeout.test.d.ts.map +1 -0
- package/dist/__tests__/middleware/timeout.test.js +132 -0
- package/dist/__tests__/middleware.test.d.ts +2 -0
- package/dist/__tests__/middleware.test.d.ts.map +1 -0
- package/dist/__tests__/middleware.test.js +180 -0
- package/dist/__tests__/pipes/pipe.test.d.ts +2 -0
- package/dist/__tests__/pipes/pipe.test.d.ts.map +1 -0
- package/dist/__tests__/pipes/pipe.test.js +245 -0
- package/dist/__tests__/pipes/validation.pipe.test.d.ts +2 -0
- package/dist/__tests__/pipes/validation.pipe.test.d.ts.map +1 -0
- package/dist/__tests__/pipes/validation.pipe.test.js +297 -0
- package/dist/__tests__/request-parser.test.d.ts +2 -0
- package/dist/__tests__/request-parser.test.d.ts.map +1 -0
- package/dist/__tests__/request-parser.test.js +182 -0
- package/dist/__tests__/router.test.d.ts +2 -0
- package/dist/__tests__/router.test.d.ts.map +1 -0
- package/dist/__tests__/router.test.js +680 -0
- package/dist/__tests__/routing/route-matcher.test.d.ts +2 -0
- package/dist/__tests__/routing/route-matcher.test.d.ts.map +1 -0
- package/dist/__tests__/routing/route-matcher.test.js +219 -0
- package/dist/__tests__/routing/version.decorator.test.d.ts +2 -0
- package/dist/__tests__/routing/version.decorator.test.d.ts.map +1 -0
- package/dist/__tests__/routing/version.decorator.test.js +298 -0
- package/dist/__tests__/service.test.d.ts +2 -0
- package/dist/__tests__/service.test.d.ts.map +1 -0
- package/dist/__tests__/service.test.js +121 -0
- package/dist/__tests__/shutdown.test.d.ts +2 -0
- package/dist/__tests__/shutdown.test.d.ts.map +1 -0
- package/dist/__tests__/shutdown.test.js +250 -0
- package/dist/__tests__/testing/testing.module.test.d.ts +2 -0
- package/dist/__tests__/testing/testing.module.test.d.ts.map +1 -0
- package/dist/__tests__/testing/testing.module.test.js +370 -0
- package/dist/__tests__/upload/file-upload.test.d.ts +2 -0
- package/dist/__tests__/upload/file-upload.test.d.ts.map +1 -0
- package/dist/__tests__/upload/file-upload.test.js +498 -0
- package/dist/__tests__/utils/sanitize.test.d.ts +2 -0
- package/dist/__tests__/utils/sanitize.test.d.ts.map +1 -0
- package/dist/__tests__/utils/sanitize.test.js +291 -0
- package/dist/__tests__/validator.test.d.ts +2 -0
- package/dist/__tests__/validator.test.d.ts.map +1 -0
- package/dist/__tests__/validator.test.js +300 -0
- package/dist/container.d.ts +80 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +271 -0
- package/dist/decorators.d.ts +92 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +343 -0
- package/dist/errors/http.error.d.ts +31 -0
- package/dist/errors/http.error.d.ts.map +1 -0
- package/dist/errors/http.error.js +62 -0
- package/dist/filters/exception-filter.d.ts +39 -0
- package/dist/filters/exception-filter.d.ts.map +1 -0
- package/dist/filters/exception-filter.js +38 -0
- package/dist/filters/http-exception.filter.d.ts +9 -0
- package/dist/filters/http-exception.filter.d.ts.map +1 -0
- package/dist/filters/http-exception.filter.js +42 -0
- package/dist/hazel-app.d.ts +78 -0
- package/dist/hazel-app.d.ts.map +1 -0
- package/dist/hazel-app.js +453 -0
- package/dist/hazel-module.d.ts +20 -0
- package/dist/hazel-module.d.ts.map +1 -0
- package/dist/hazel-module.js +109 -0
- package/dist/hazel-response.d.ts +20 -0
- package/dist/hazel-response.d.ts.map +1 -0
- package/dist/hazel-response.js +68 -0
- package/dist/health.d.ts +73 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +174 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/interceptors/interceptor.d.ts +22 -0
- package/dist/interceptors/interceptor.d.ts.map +1 -0
- package/dist/interceptors/interceptor.js +46 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +238 -0
- package/dist/middleware/cors.middleware.d.ts +44 -0
- package/dist/middleware/cors.middleware.d.ts.map +1 -0
- package/dist/middleware/cors.middleware.js +118 -0
- package/dist/middleware/csrf.middleware.d.ts +82 -0
- package/dist/middleware/csrf.middleware.d.ts.map +1 -0
- package/dist/middleware/csrf.middleware.js +183 -0
- package/dist/middleware/global-middleware.d.ts +111 -0
- package/dist/middleware/global-middleware.d.ts.map +1 -0
- package/dist/middleware/global-middleware.js +179 -0
- package/dist/middleware/rate-limit.middleware.d.ts +73 -0
- package/dist/middleware/rate-limit.middleware.d.ts.map +1 -0
- package/dist/middleware/rate-limit.middleware.js +124 -0
- package/dist/middleware/security-headers.middleware.d.ts +76 -0
- package/dist/middleware/security-headers.middleware.d.ts.map +1 -0
- package/dist/middleware/security-headers.middleware.js +123 -0
- package/dist/middleware/timeout.middleware.d.ts +25 -0
- package/dist/middleware/timeout.middleware.d.ts.map +1 -0
- package/dist/middleware/timeout.middleware.js +74 -0
- package/dist/middleware.d.ts +13 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +47 -0
- package/dist/pipes/pipe.d.ts +50 -0
- package/dist/pipes/pipe.d.ts.map +1 -0
- package/dist/pipes/pipe.js +96 -0
- package/dist/pipes/validation.pipe.d.ts +6 -0
- package/dist/pipes/validation.pipe.d.ts.map +1 -0
- package/dist/pipes/validation.pipe.js +61 -0
- package/dist/request-context.d.ts +17 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +2 -0
- package/dist/request-parser.d.ts +7 -0
- package/dist/request-parser.d.ts.map +1 -0
- package/dist/request-parser.js +60 -0
- package/dist/router.d.ts +33 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +426 -0
- package/dist/routing/route-matcher.d.ts +39 -0
- package/dist/routing/route-matcher.d.ts.map +1 -0
- package/dist/routing/route-matcher.js +93 -0
- package/dist/routing/version.decorator.d.ts +36 -0
- package/dist/routing/version.decorator.d.ts.map +1 -0
- package/dist/routing/version.decorator.js +89 -0
- package/dist/service.d.ts +9 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +39 -0
- package/dist/shutdown.d.ts +32 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +109 -0
- package/dist/testing/testing.module.d.ts +83 -0
- package/dist/testing/testing.module.d.ts.map +1 -0
- package/dist/testing/testing.module.js +164 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/upload/file-upload.d.ts +75 -0
- package/dist/upload/file-upload.d.ts.map +1 -0
- package/dist/upload/file-upload.js +261 -0
- package/dist/utils/sanitize.d.ts +45 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +165 -0
- package/dist/validator.d.ts +7 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +119 -0
- package/package.json +65 -0
package/dist/health.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Check System
|
|
3
|
+
* Provides /health and /readiness endpoints for monitoring
|
|
4
|
+
*/
|
|
5
|
+
export interface HealthCheck {
|
|
6
|
+
name: string;
|
|
7
|
+
check: () => Promise<HealthCheckResult>;
|
|
8
|
+
critical?: boolean;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface HealthCheckResult {
|
|
12
|
+
status: 'healthy' | 'unhealthy' | 'degraded';
|
|
13
|
+
message?: string;
|
|
14
|
+
details?: Record<string, unknown>;
|
|
15
|
+
responseTime?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface HealthStatus {
|
|
18
|
+
status: 'healthy' | 'unhealthy' | 'degraded';
|
|
19
|
+
timestamp: string;
|
|
20
|
+
uptime: number;
|
|
21
|
+
checks: Record<string, HealthCheckResult>;
|
|
22
|
+
version?: string;
|
|
23
|
+
environment?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class HealthCheckManager {
|
|
26
|
+
private checks;
|
|
27
|
+
private startTime;
|
|
28
|
+
/**
|
|
29
|
+
* Register a health check
|
|
30
|
+
*/
|
|
31
|
+
registerCheck(check: HealthCheck): void;
|
|
32
|
+
/**
|
|
33
|
+
* Run all health checks
|
|
34
|
+
*/
|
|
35
|
+
runChecks(): Promise<HealthStatus>;
|
|
36
|
+
/**
|
|
37
|
+
* Get liveness status (is the service running?)
|
|
38
|
+
*/
|
|
39
|
+
getLiveness(): Promise<{
|
|
40
|
+
status: 'alive';
|
|
41
|
+
timestamp: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Get readiness status (is the service ready to accept traffic?)
|
|
45
|
+
*/
|
|
46
|
+
getReadiness(): Promise<HealthStatus>;
|
|
47
|
+
/**
|
|
48
|
+
* Get startup status (has the service completed startup?)
|
|
49
|
+
*/
|
|
50
|
+
getStartup(): Promise<{
|
|
51
|
+
status: 'started';
|
|
52
|
+
uptime: number;
|
|
53
|
+
timestamp: string;
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Built-in health checks
|
|
58
|
+
*/
|
|
59
|
+
export declare class BuiltInHealthChecks {
|
|
60
|
+
/**
|
|
61
|
+
* Memory usage check
|
|
62
|
+
*/
|
|
63
|
+
static memoryCheck(thresholdMB?: number): HealthCheck;
|
|
64
|
+
/**
|
|
65
|
+
* Event loop lag check
|
|
66
|
+
*/
|
|
67
|
+
static eventLoopCheck(thresholdMs?: number): HealthCheck;
|
|
68
|
+
/**
|
|
69
|
+
* Disk space check (if applicable)
|
|
70
|
+
*/
|
|
71
|
+
static diskSpaceCheck(): HealthCheck;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAAsB;IAEvC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAKvC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAqDxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAOpE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAI3C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAOtF;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,WAAW,SAAM,GAAG,WAAW;IA+BlD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,WAAW,SAAM,GAAG,WAAW;IAyBrD;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,WAAW;CAcrC"}
|
package/dist/health.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Health Check System
|
|
4
|
+
* Provides /health and /readiness endpoints for monitoring
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.BuiltInHealthChecks = exports.HealthCheckManager = void 0;
|
|
11
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
12
|
+
class HealthCheckManager {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.checks = new Map();
|
|
15
|
+
this.startTime = Date.now();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Register a health check
|
|
19
|
+
*/
|
|
20
|
+
registerCheck(check) {
|
|
21
|
+
this.checks.set(check.name, check);
|
|
22
|
+
logger_1.default.info(`Registered health check: ${check.name}`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run all health checks
|
|
26
|
+
*/
|
|
27
|
+
async runChecks() {
|
|
28
|
+
const results = {};
|
|
29
|
+
let overallStatus = 'healthy';
|
|
30
|
+
for (const [name, check] of this.checks) {
|
|
31
|
+
try {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
// Run check with timeout
|
|
34
|
+
const result = await Promise.race([
|
|
35
|
+
check.check(),
|
|
36
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Health check ${name} timeout`)), check.timeout || 5000)),
|
|
37
|
+
]);
|
|
38
|
+
result.responseTime = Date.now() - startTime;
|
|
39
|
+
results[name] = result;
|
|
40
|
+
// Update overall status
|
|
41
|
+
if (result.status === 'unhealthy' && check.critical) {
|
|
42
|
+
overallStatus = 'unhealthy';
|
|
43
|
+
}
|
|
44
|
+
else if (result.status === 'degraded' && overallStatus === 'healthy') {
|
|
45
|
+
overallStatus = 'degraded';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const errorResult = {
|
|
50
|
+
status: 'unhealthy',
|
|
51
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
52
|
+
};
|
|
53
|
+
results[name] = errorResult;
|
|
54
|
+
if (check.critical) {
|
|
55
|
+
overallStatus = 'unhealthy';
|
|
56
|
+
}
|
|
57
|
+
logger_1.default.error(`Health check failed: ${name}`, error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
status: overallStatus,
|
|
62
|
+
timestamp: new Date().toISOString(),
|
|
63
|
+
uptime: Date.now() - this.startTime,
|
|
64
|
+
checks: results,
|
|
65
|
+
version: process.env.APP_VERSION,
|
|
66
|
+
environment: process.env.NODE_ENV,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get liveness status (is the service running?)
|
|
71
|
+
*/
|
|
72
|
+
async getLiveness() {
|
|
73
|
+
return {
|
|
74
|
+
status: 'alive',
|
|
75
|
+
timestamp: new Date().toISOString(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get readiness status (is the service ready to accept traffic?)
|
|
80
|
+
*/
|
|
81
|
+
async getReadiness() {
|
|
82
|
+
return this.runChecks();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get startup status (has the service completed startup?)
|
|
86
|
+
*/
|
|
87
|
+
async getStartup() {
|
|
88
|
+
return {
|
|
89
|
+
status: 'started',
|
|
90
|
+
uptime: Date.now() - this.startTime,
|
|
91
|
+
timestamp: new Date().toISOString(),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.HealthCheckManager = HealthCheckManager;
|
|
96
|
+
/**
|
|
97
|
+
* Built-in health checks
|
|
98
|
+
*/
|
|
99
|
+
class BuiltInHealthChecks {
|
|
100
|
+
/**
|
|
101
|
+
* Memory usage check
|
|
102
|
+
*/
|
|
103
|
+
static memoryCheck(thresholdMB = 500) {
|
|
104
|
+
return {
|
|
105
|
+
name: 'memory',
|
|
106
|
+
check: async () => {
|
|
107
|
+
const memUsage = process.memoryUsage();
|
|
108
|
+
const heapUsedMB = memUsage.heapUsed / 1024 / 1024;
|
|
109
|
+
if (heapUsedMB > thresholdMB) {
|
|
110
|
+
return {
|
|
111
|
+
status: 'degraded',
|
|
112
|
+
message: `High memory usage: ${heapUsedMB.toFixed(2)}MB`,
|
|
113
|
+
details: {
|
|
114
|
+
heapUsed: `${heapUsedMB.toFixed(2)}MB`,
|
|
115
|
+
heapTotal: `${(memUsage.heapTotal / 1024 / 1024).toFixed(2)}MB`,
|
|
116
|
+
rss: `${(memUsage.rss / 1024 / 1024).toFixed(2)}MB`,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
status: 'healthy',
|
|
122
|
+
details: {
|
|
123
|
+
heapUsed: `${heapUsedMB.toFixed(2)}MB`,
|
|
124
|
+
heapTotal: `${(memUsage.heapTotal / 1024 / 1024).toFixed(2)}MB`,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
critical: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Event loop lag check
|
|
133
|
+
*/
|
|
134
|
+
static eventLoopCheck(thresholdMs = 100) {
|
|
135
|
+
return {
|
|
136
|
+
name: 'eventLoop',
|
|
137
|
+
check: async () => {
|
|
138
|
+
const start = Date.now();
|
|
139
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
140
|
+
const lag = Date.now() - start;
|
|
141
|
+
if (lag > thresholdMs) {
|
|
142
|
+
return {
|
|
143
|
+
status: 'degraded',
|
|
144
|
+
message: `High event loop lag: ${lag}ms`,
|
|
145
|
+
details: { lag: `${lag}ms` },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
status: 'healthy',
|
|
150
|
+
details: { lag: `${lag}ms` },
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
critical: false,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Disk space check (if applicable)
|
|
158
|
+
*/
|
|
159
|
+
static diskSpaceCheck() {
|
|
160
|
+
return {
|
|
161
|
+
name: 'diskSpace',
|
|
162
|
+
check: async () => {
|
|
163
|
+
// This is a placeholder - actual implementation would check disk space
|
|
164
|
+
// using a library like 'check-disk-space'
|
|
165
|
+
return {
|
|
166
|
+
status: 'healthy',
|
|
167
|
+
message: 'Disk space check not implemented',
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
critical: false,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.BuiltInHealthChecks = BuiltInHealthChecks;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazelJS Core Framework
|
|
3
|
+
* A modern, modular Node.js framework with TypeScript support
|
|
4
|
+
*/
|
|
5
|
+
import 'reflect-metadata';
|
|
6
|
+
export { HazelApp } from './hazel-app';
|
|
7
|
+
export { HazelModule, Module, HazelModuleInstance, getModuleMetadata } from './hazel-module';
|
|
8
|
+
export type { ModuleOptions } from './hazel-module';
|
|
9
|
+
export { ShutdownManager } from './shutdown';
|
|
10
|
+
export type { ShutdownHandler } from './shutdown';
|
|
11
|
+
export { HealthCheckManager, BuiltInHealthChecks } from './health';
|
|
12
|
+
export type { HealthCheck, HealthCheckResult, HealthStatus } from './health';
|
|
13
|
+
export { TimeoutMiddleware } from './middleware/timeout.middleware';
|
|
14
|
+
export type { TimeoutOptions } from './middleware/timeout.middleware';
|
|
15
|
+
export { Controller, Injectable, Service, Get, Post, Put, Delete, Patch, Body, Param, Query, Req, Res, Headers, HttpCode, Header, Redirect, Inject, UsePipes, UseInterceptors, UseGuards, type ControllerMetadata, type RouteMetadata, type ControllerOptions, type RouteOptions, type ServiceOptions, type InjectableOptions, type RepositoryOptions, type OnModuleInit, type OnModuleDestroy, type ExecutionContext, type CanActivate, } from './decorators';
|
|
16
|
+
export { Container, Scope, type InjectionToken, type Provider } from './container';
|
|
17
|
+
export type { Type, Request, Response, RequestContext, ValidationSchema } from './types';
|
|
18
|
+
export { HttpError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, InternalServerError, HttpException, BadRequestException, UnauthorizedException, ForbiddenException, NotFoundException, ConflictException, InternalServerErrorException, } from './errors/http.error';
|
|
19
|
+
export { PipeTransform, ValidationError, ParseIntPipe, type PipeMetadata } from './pipes/pipe';
|
|
20
|
+
export { ValidationPipe } from './pipes/validation.pipe';
|
|
21
|
+
export { Interceptor, type InterceptorMetadata } from './interceptors/interceptor';
|
|
22
|
+
export { type ExceptionFilter, type ArgumentsHost, ArgumentsHostImpl, Catch, getFilterExceptions, } from './filters/exception-filter';
|
|
23
|
+
export { HttpExceptionFilter } from './filters/http-exception.filter';
|
|
24
|
+
export { Test, TestingModule, TestingModuleBuilder, type TestingModuleMetadata, } from './testing/testing.module';
|
|
25
|
+
export { RouteMatcher, type RouteMatch } from './routing/route-matcher';
|
|
26
|
+
export { Version, VersioningType, type VersioningOptions, getVersionMetadata, matchVersion, extractVersion, } from './routing/version.decorator';
|
|
27
|
+
export { GlobalMiddlewareManager, CorsMiddleware, LoggerMiddleware, type MiddlewareFunction, type MiddlewareClass, type MiddlewareConsumer, type MiddlewareConfigProxy, type RouteInfo, type NextFunction, type CorsOptions, } from './middleware/global-middleware';
|
|
28
|
+
export { Middleware, type MiddlewareHandler } from './middleware';
|
|
29
|
+
export { SecurityHeadersMiddleware, type SecurityHeadersOptions, } from './middleware/security-headers.middleware';
|
|
30
|
+
export { RateLimitMiddleware, type RateLimitOptions, } from './middleware/rate-limit.middleware';
|
|
31
|
+
export { CsrfMiddleware, type CsrfOptions, } from './middleware/csrf.middleware';
|
|
32
|
+
export { FileUploadInterceptor, UploadedFileDecorator as UploadedFile, UploadedFilesDecorator as UploadedFiles, type UploadedFile as UploadedFileType, type FileUploadOptions, } from './upload/file-upload';
|
|
33
|
+
export { default as logger } from './logger';
|
|
34
|
+
export { default } from './logger';
|
|
35
|
+
export { Validator } from './validator';
|
|
36
|
+
export { Router } from './router';
|
|
37
|
+
export { RequestParser } from './request-parser';
|
|
38
|
+
export { RequestContext as RequestContextClass } from './request-context';
|
|
39
|
+
export { HazelResponse } from './hazel-response';
|
|
40
|
+
export { sanitizeHtml, sanitizeString, sanitizeUrl, sanitizeEmail, sanitizeSql, sanitizeObject, escapeHtml, } from './utils/sanitize';
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HazelJS Core Framework
|
|
4
|
+
* A modern, modular Node.js framework with TypeScript support
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ArgumentsHostImpl = exports.ValidationPipe = exports.ParseIntPipe = exports.ValidationError = exports.InternalServerErrorException = exports.ConflictException = exports.NotFoundException = exports.ForbiddenException = exports.UnauthorizedException = exports.BadRequestException = exports.HttpException = exports.InternalServerError = exports.ConflictError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.HttpError = exports.Scope = exports.Container = exports.UseGuards = exports.UseInterceptors = exports.UsePipes = exports.Inject = exports.Redirect = exports.Header = exports.HttpCode = exports.Headers = exports.Res = exports.Req = exports.Query = exports.Param = exports.Body = exports.Patch = exports.Delete = exports.Put = exports.Post = exports.Get = exports.Service = exports.Injectable = exports.Controller = exports.TimeoutMiddleware = exports.BuiltInHealthChecks = exports.HealthCheckManager = exports.ShutdownManager = exports.getModuleMetadata = exports.HazelModuleInstance = exports.Module = exports.HazelModule = exports.HazelApp = void 0;
|
|
11
|
+
exports.escapeHtml = exports.sanitizeObject = exports.sanitizeSql = exports.sanitizeEmail = exports.sanitizeUrl = exports.sanitizeString = exports.sanitizeHtml = exports.RequestParser = exports.Router = exports.Validator = exports.default = exports.logger = exports.UploadedFiles = exports.UploadedFile = exports.FileUploadInterceptor = exports.CsrfMiddleware = exports.RateLimitMiddleware = exports.SecurityHeadersMiddleware = exports.LoggerMiddleware = exports.CorsMiddleware = exports.GlobalMiddlewareManager = exports.extractVersion = exports.matchVersion = exports.getVersionMetadata = exports.VersioningType = exports.Version = exports.RouteMatcher = exports.TestingModuleBuilder = exports.TestingModule = exports.Test = exports.HttpExceptionFilter = exports.getFilterExceptions = exports.Catch = void 0;
|
|
12
|
+
// Import reflect-metadata to enable decorator metadata
|
|
13
|
+
// Users don't need to import this manually
|
|
14
|
+
require("reflect-metadata");
|
|
15
|
+
// Core exports
|
|
16
|
+
var hazel_app_1 = require("./hazel-app");
|
|
17
|
+
Object.defineProperty(exports, "HazelApp", { enumerable: true, get: function () { return hazel_app_1.HazelApp; } });
|
|
18
|
+
var hazel_module_1 = require("./hazel-module");
|
|
19
|
+
Object.defineProperty(exports, "HazelModule", { enumerable: true, get: function () { return hazel_module_1.HazelModule; } });
|
|
20
|
+
Object.defineProperty(exports, "Module", { enumerable: true, get: function () { return hazel_module_1.Module; } });
|
|
21
|
+
Object.defineProperty(exports, "HazelModuleInstance", { enumerable: true, get: function () { return hazel_module_1.HazelModuleInstance; } });
|
|
22
|
+
Object.defineProperty(exports, "getModuleMetadata", { enumerable: true, get: function () { return hazel_module_1.getModuleMetadata; } });
|
|
23
|
+
// Shutdown & Health
|
|
24
|
+
var shutdown_1 = require("./shutdown");
|
|
25
|
+
Object.defineProperty(exports, "ShutdownManager", { enumerable: true, get: function () { return shutdown_1.ShutdownManager; } });
|
|
26
|
+
var health_1 = require("./health");
|
|
27
|
+
Object.defineProperty(exports, "HealthCheckManager", { enumerable: true, get: function () { return health_1.HealthCheckManager; } });
|
|
28
|
+
Object.defineProperty(exports, "BuiltInHealthChecks", { enumerable: true, get: function () { return health_1.BuiltInHealthChecks; } });
|
|
29
|
+
// Timeout Middleware (new)
|
|
30
|
+
var timeout_middleware_1 = require("./middleware/timeout.middleware");
|
|
31
|
+
Object.defineProperty(exports, "TimeoutMiddleware", { enumerable: true, get: function () { return timeout_middleware_1.TimeoutMiddleware; } });
|
|
32
|
+
// Decorators
|
|
33
|
+
var decorators_1 = require("./decorators");
|
|
34
|
+
Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return decorators_1.Controller; } });
|
|
35
|
+
Object.defineProperty(exports, "Injectable", { enumerable: true, get: function () { return decorators_1.Injectable; } });
|
|
36
|
+
Object.defineProperty(exports, "Service", { enumerable: true, get: function () { return decorators_1.Service; } });
|
|
37
|
+
Object.defineProperty(exports, "Get", { enumerable: true, get: function () { return decorators_1.Get; } });
|
|
38
|
+
Object.defineProperty(exports, "Post", { enumerable: true, get: function () { return decorators_1.Post; } });
|
|
39
|
+
Object.defineProperty(exports, "Put", { enumerable: true, get: function () { return decorators_1.Put; } });
|
|
40
|
+
Object.defineProperty(exports, "Delete", { enumerable: true, get: function () { return decorators_1.Delete; } });
|
|
41
|
+
Object.defineProperty(exports, "Patch", { enumerable: true, get: function () { return decorators_1.Patch; } });
|
|
42
|
+
Object.defineProperty(exports, "Body", { enumerable: true, get: function () { return decorators_1.Body; } });
|
|
43
|
+
Object.defineProperty(exports, "Param", { enumerable: true, get: function () { return decorators_1.Param; } });
|
|
44
|
+
Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return decorators_1.Query; } });
|
|
45
|
+
Object.defineProperty(exports, "Req", { enumerable: true, get: function () { return decorators_1.Req; } });
|
|
46
|
+
Object.defineProperty(exports, "Res", { enumerable: true, get: function () { return decorators_1.Res; } });
|
|
47
|
+
Object.defineProperty(exports, "Headers", { enumerable: true, get: function () { return decorators_1.Headers; } });
|
|
48
|
+
Object.defineProperty(exports, "HttpCode", { enumerable: true, get: function () { return decorators_1.HttpCode; } });
|
|
49
|
+
Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return decorators_1.Header; } });
|
|
50
|
+
Object.defineProperty(exports, "Redirect", { enumerable: true, get: function () { return decorators_1.Redirect; } });
|
|
51
|
+
Object.defineProperty(exports, "Inject", { enumerable: true, get: function () { return decorators_1.Inject; } });
|
|
52
|
+
Object.defineProperty(exports, "UsePipes", { enumerable: true, get: function () { return decorators_1.UsePipes; } });
|
|
53
|
+
Object.defineProperty(exports, "UseInterceptors", { enumerable: true, get: function () { return decorators_1.UseInterceptors; } });
|
|
54
|
+
Object.defineProperty(exports, "UseGuards", { enumerable: true, get: function () { return decorators_1.UseGuards; } });
|
|
55
|
+
// Container & DI
|
|
56
|
+
var container_1 = require("./container");
|
|
57
|
+
Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return container_1.Container; } });
|
|
58
|
+
Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return container_1.Scope; } });
|
|
59
|
+
// Errors
|
|
60
|
+
var http_error_1 = require("./errors/http.error");
|
|
61
|
+
Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return http_error_1.HttpError; } });
|
|
62
|
+
Object.defineProperty(exports, "BadRequestError", { enumerable: true, get: function () { return http_error_1.BadRequestError; } });
|
|
63
|
+
Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return http_error_1.UnauthorizedError; } });
|
|
64
|
+
Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return http_error_1.ForbiddenError; } });
|
|
65
|
+
Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return http_error_1.NotFoundError; } });
|
|
66
|
+
Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return http_error_1.ConflictError; } });
|
|
67
|
+
Object.defineProperty(exports, "InternalServerError", { enumerable: true, get: function () { return http_error_1.InternalServerError; } });
|
|
68
|
+
Object.defineProperty(exports, "HttpException", { enumerable: true, get: function () { return http_error_1.HttpException; } });
|
|
69
|
+
Object.defineProperty(exports, "BadRequestException", { enumerable: true, get: function () { return http_error_1.BadRequestException; } });
|
|
70
|
+
Object.defineProperty(exports, "UnauthorizedException", { enumerable: true, get: function () { return http_error_1.UnauthorizedException; } });
|
|
71
|
+
Object.defineProperty(exports, "ForbiddenException", { enumerable: true, get: function () { return http_error_1.ForbiddenException; } });
|
|
72
|
+
Object.defineProperty(exports, "NotFoundException", { enumerable: true, get: function () { return http_error_1.NotFoundException; } });
|
|
73
|
+
Object.defineProperty(exports, "ConflictException", { enumerable: true, get: function () { return http_error_1.ConflictException; } });
|
|
74
|
+
Object.defineProperty(exports, "InternalServerErrorException", { enumerable: true, get: function () { return http_error_1.InternalServerErrorException; } });
|
|
75
|
+
// Pipes
|
|
76
|
+
var pipe_1 = require("./pipes/pipe");
|
|
77
|
+
Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return pipe_1.ValidationError; } });
|
|
78
|
+
Object.defineProperty(exports, "ParseIntPipe", { enumerable: true, get: function () { return pipe_1.ParseIntPipe; } });
|
|
79
|
+
var validation_pipe_1 = require("./pipes/validation.pipe");
|
|
80
|
+
Object.defineProperty(exports, "ValidationPipe", { enumerable: true, get: function () { return validation_pipe_1.ValidationPipe; } });
|
|
81
|
+
// Filters
|
|
82
|
+
var exception_filter_1 = require("./filters/exception-filter");
|
|
83
|
+
Object.defineProperty(exports, "ArgumentsHostImpl", { enumerable: true, get: function () { return exception_filter_1.ArgumentsHostImpl; } });
|
|
84
|
+
Object.defineProperty(exports, "Catch", { enumerable: true, get: function () { return exception_filter_1.Catch; } });
|
|
85
|
+
Object.defineProperty(exports, "getFilterExceptions", { enumerable: true, get: function () { return exception_filter_1.getFilterExceptions; } });
|
|
86
|
+
var http_exception_filter_1 = require("./filters/http-exception.filter");
|
|
87
|
+
Object.defineProperty(exports, "HttpExceptionFilter", { enumerable: true, get: function () { return http_exception_filter_1.HttpExceptionFilter; } });
|
|
88
|
+
// Testing
|
|
89
|
+
var testing_module_1 = require("./testing/testing.module");
|
|
90
|
+
Object.defineProperty(exports, "Test", { enumerable: true, get: function () { return testing_module_1.Test; } });
|
|
91
|
+
Object.defineProperty(exports, "TestingModule", { enumerable: true, get: function () { return testing_module_1.TestingModule; } });
|
|
92
|
+
Object.defineProperty(exports, "TestingModuleBuilder", { enumerable: true, get: function () { return testing_module_1.TestingModuleBuilder; } });
|
|
93
|
+
// Routing
|
|
94
|
+
var route_matcher_1 = require("./routing/route-matcher");
|
|
95
|
+
Object.defineProperty(exports, "RouteMatcher", { enumerable: true, get: function () { return route_matcher_1.RouteMatcher; } });
|
|
96
|
+
var version_decorator_1 = require("./routing/version.decorator");
|
|
97
|
+
Object.defineProperty(exports, "Version", { enumerable: true, get: function () { return version_decorator_1.Version; } });
|
|
98
|
+
Object.defineProperty(exports, "VersioningType", { enumerable: true, get: function () { return version_decorator_1.VersioningType; } });
|
|
99
|
+
Object.defineProperty(exports, "getVersionMetadata", { enumerable: true, get: function () { return version_decorator_1.getVersionMetadata; } });
|
|
100
|
+
Object.defineProperty(exports, "matchVersion", { enumerable: true, get: function () { return version_decorator_1.matchVersion; } });
|
|
101
|
+
Object.defineProperty(exports, "extractVersion", { enumerable: true, get: function () { return version_decorator_1.extractVersion; } });
|
|
102
|
+
// Middleware
|
|
103
|
+
var global_middleware_1 = require("./middleware/global-middleware");
|
|
104
|
+
Object.defineProperty(exports, "GlobalMiddlewareManager", { enumerable: true, get: function () { return global_middleware_1.GlobalMiddlewareManager; } });
|
|
105
|
+
Object.defineProperty(exports, "CorsMiddleware", { enumerable: true, get: function () { return global_middleware_1.CorsMiddleware; } });
|
|
106
|
+
Object.defineProperty(exports, "LoggerMiddleware", { enumerable: true, get: function () { return global_middleware_1.LoggerMiddleware; } });
|
|
107
|
+
var security_headers_middleware_1 = require("./middleware/security-headers.middleware");
|
|
108
|
+
Object.defineProperty(exports, "SecurityHeadersMiddleware", { enumerable: true, get: function () { return security_headers_middleware_1.SecurityHeadersMiddleware; } });
|
|
109
|
+
var rate_limit_middleware_1 = require("./middleware/rate-limit.middleware");
|
|
110
|
+
Object.defineProperty(exports, "RateLimitMiddleware", { enumerable: true, get: function () { return rate_limit_middleware_1.RateLimitMiddleware; } });
|
|
111
|
+
var csrf_middleware_1 = require("./middleware/csrf.middleware");
|
|
112
|
+
Object.defineProperty(exports, "CsrfMiddleware", { enumerable: true, get: function () { return csrf_middleware_1.CsrfMiddleware; } });
|
|
113
|
+
// File Upload
|
|
114
|
+
var file_upload_1 = require("./upload/file-upload");
|
|
115
|
+
Object.defineProperty(exports, "FileUploadInterceptor", { enumerable: true, get: function () { return file_upload_1.FileUploadInterceptor; } });
|
|
116
|
+
Object.defineProperty(exports, "UploadedFile", { enumerable: true, get: function () { return file_upload_1.UploadedFileDecorator; } });
|
|
117
|
+
Object.defineProperty(exports, "UploadedFiles", { enumerable: true, get: function () { return file_upload_1.UploadedFilesDecorator; } });
|
|
118
|
+
// Logger
|
|
119
|
+
var logger_1 = require("./logger");
|
|
120
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return __importDefault(logger_1).default; } });
|
|
121
|
+
var logger_2 = require("./logger");
|
|
122
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(logger_2).default; } });
|
|
123
|
+
// Validator
|
|
124
|
+
var validator_1 = require("./validator");
|
|
125
|
+
Object.defineProperty(exports, "Validator", { enumerable: true, get: function () { return validator_1.Validator; } });
|
|
126
|
+
// Router
|
|
127
|
+
var router_1 = require("./router");
|
|
128
|
+
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_1.Router; } });
|
|
129
|
+
// Request utilities
|
|
130
|
+
var request_parser_1 = require("./request-parser");
|
|
131
|
+
Object.defineProperty(exports, "RequestParser", { enumerable: true, get: function () { return request_parser_1.RequestParser; } });
|
|
132
|
+
// Security utilities
|
|
133
|
+
var sanitize_1 = require("./utils/sanitize");
|
|
134
|
+
Object.defineProperty(exports, "sanitizeHtml", { enumerable: true, get: function () { return sanitize_1.sanitizeHtml; } });
|
|
135
|
+
Object.defineProperty(exports, "sanitizeString", { enumerable: true, get: function () { return sanitize_1.sanitizeString; } });
|
|
136
|
+
Object.defineProperty(exports, "sanitizeUrl", { enumerable: true, get: function () { return sanitize_1.sanitizeUrl; } });
|
|
137
|
+
Object.defineProperty(exports, "sanitizeEmail", { enumerable: true, get: function () { return sanitize_1.sanitizeEmail; } });
|
|
138
|
+
Object.defineProperty(exports, "sanitizeSql", { enumerable: true, get: function () { return sanitize_1.sanitizeSql; } });
|
|
139
|
+
Object.defineProperty(exports, "sanitizeObject", { enumerable: true, get: function () { return sanitize_1.sanitizeObject; } });
|
|
140
|
+
Object.defineProperty(exports, "escapeHtml", { enumerable: true, get: function () { return sanitize_1.escapeHtml; } });
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RequestContext } from '../request-context';
|
|
2
|
+
export interface Interceptor {
|
|
3
|
+
intercept(context: RequestContext, next: () => Promise<unknown>): Promise<unknown>;
|
|
4
|
+
}
|
|
5
|
+
export interface InterceptorMetadata {
|
|
6
|
+
type: Type<Interceptor>;
|
|
7
|
+
options?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface CacheOptions {
|
|
10
|
+
ttl?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class LoggingInterceptor implements Interceptor {
|
|
13
|
+
intercept(context: RequestContext, next: () => Promise<unknown>): Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
export declare class CacheInterceptor implements Interceptor {
|
|
16
|
+
private static cache;
|
|
17
|
+
private readonly ttl;
|
|
18
|
+
constructor(options?: CacheOptions);
|
|
19
|
+
intercept(context: RequestContext, next: () => Promise<unknown>): Promise<unknown>;
|
|
20
|
+
}
|
|
21
|
+
export type Type<T = unknown> = new (...args: unknown[]) => T;
|
|
22
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,kBAAmB,YAAW,WAAW;IAC9C,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBzF;AAED,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAA2D;IAC/E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,OAAO,CAAC,EAAE,YAAY;IAI5B,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBzF;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CacheInterceptor = exports.LoggingInterceptor = void 0;
|
|
7
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
8
|
+
class LoggingInterceptor {
|
|
9
|
+
async intercept(context, next) {
|
|
10
|
+
const startTime = Date.now();
|
|
11
|
+
logger_1.default.info(`[${context.method}] ${context.url}`);
|
|
12
|
+
try {
|
|
13
|
+
const result = await next();
|
|
14
|
+
const duration = Date.now() - startTime;
|
|
15
|
+
logger_1.default.info(`[${context.method}] ${context.url} - ${duration}ms`);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const duration = Date.now() - startTime;
|
|
20
|
+
const err = error;
|
|
21
|
+
logger_1.default.error(`[${context.method}] ${context.url} - ${err.message} (${duration}ms)`);
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.LoggingInterceptor = LoggingInterceptor;
|
|
27
|
+
class CacheInterceptor {
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.ttl = options?.ttl || 60000;
|
|
30
|
+
}
|
|
31
|
+
async intercept(context, next) {
|
|
32
|
+
if (context.method !== 'GET') {
|
|
33
|
+
return next();
|
|
34
|
+
}
|
|
35
|
+
const cacheKey = `${context.method}:${context.url}`;
|
|
36
|
+
const cached = CacheInterceptor.cache.get(cacheKey);
|
|
37
|
+
if (cached && Date.now() - cached.timestamp < this.ttl) {
|
|
38
|
+
return cached.data;
|
|
39
|
+
}
|
|
40
|
+
const result = await next();
|
|
41
|
+
CacheInterceptor.cache.set(cacheKey, { data: result, timestamp: Date.now() });
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.CacheInterceptor = CacheInterceptor;
|
|
46
|
+
CacheInterceptor.cache = new Map();
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
export declare const requestLogger: (req: IncomingMessage, res: ServerResponse, next: () => void) => void;
|
|
4
|
+
declare const enhancedLogger: winston.Logger & {
|
|
5
|
+
isDebugEnabled: () => boolean;
|
|
6
|
+
};
|
|
7
|
+
export default enhancedLogger;
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAuOvD,eAAO,MAAM,aAAa,GACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,MAAM,IAAI,KACf,IAuBF,CAAC;AAQF,QAAA,MAAM,cAAc;0BALO,OAAO;CAOhC,CAAC;AAGH,eAAe,cAAc,CAAC"}
|