@expressots/core 2.2.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/CHANGELOG.md +43 -0
- package/lib/cjs/application/app-container.js +10 -2
- package/lib/cjs/application/application-factory.js +33 -44
- package/lib/cjs/console/console.js +26 -39
- package/lib/cjs/controller/base-controller.js +2 -13
- package/lib/cjs/error/app-error.js +11 -0
- package/lib/cjs/error/report.js +4 -1
- package/lib/cjs/error/status-code.js +8 -2
- package/lib/cjs/middleware/index.js +25 -1
- package/lib/cjs/middleware/middleware-resolver.js +15 -12
- package/lib/cjs/middleware/middleware-service.js +33 -11
- package/lib/cjs/provider/dto-validator/dto-validator.provider.js +3 -12
- package/lib/cjs/provider/environment/env-validator.provider.js +2 -2
- package/lib/cjs/provider/logger/logger-service.js +1 -0
- package/lib/cjs/provider/provider-service.js +2 -0
- package/lib/cjs/types/application/app-container.d.ts +0 -1
- package/lib/cjs/types/application/application-factory.d.ts +0 -1
- package/lib/cjs/types/application/index.d.ts +0 -1
- package/lib/cjs/types/common/color-service.provider.d.ts +0 -1
- package/lib/cjs/types/common/index.d.ts +0 -1
- package/lib/cjs/types/common/package-resolver.provider.d.ts +0 -1
- package/lib/cjs/types/common/project-config.provider.d.ts +0 -1
- package/lib/cjs/types/console/console.d.ts +0 -1
- package/lib/cjs/types/console/index.d.ts +0 -1
- package/lib/cjs/types/container-module/container-module.d.ts +0 -1
- package/lib/cjs/types/container-module/index.d.ts +0 -1
- package/lib/cjs/types/controller/base-controller.d.ts +2 -3
- package/lib/cjs/types/controller/index.d.ts +0 -1
- package/lib/cjs/types/decorator/index.d.ts +0 -1
- package/lib/cjs/types/decorator/scope-binding.d.ts +0 -1
- package/lib/cjs/types/error/app-error.d.ts +0 -1
- package/lib/cjs/types/error/error-handler-middleware.d.ts +0 -1
- package/lib/cjs/types/error/index.d.ts +0 -1
- package/lib/cjs/types/error/report.d.ts +0 -1
- package/lib/cjs/types/error/status-code.d.ts +0 -1
- package/lib/cjs/types/index.d.ts +0 -1
- package/lib/cjs/types/middleware/index.d.ts +2 -1
- package/lib/cjs/types/middleware/interfaces/body-parser.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/compression.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-parser.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/cors.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/express-rate-limit.interface.d.ts +292 -0
- package/lib/cjs/types/middleware/interfaces/morgan.interface.d.ts +40 -0
- package/lib/cjs/types/middleware/interfaces/serve-favicon.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/interfaces/serve-static.interface.d.ts +0 -1
- package/lib/cjs/types/middleware/middleware-resolver.d.ts +0 -1
- package/lib/cjs/types/middleware/middleware-service.d.ts +24 -1
- package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts +0 -1
- package/lib/cjs/types/provider/environment/env-validator.provider.d.ts +0 -1
- package/lib/cjs/types/provider/index.d.ts +0 -1
- package/lib/cjs/types/provider/logger/logger-service.d.ts +0 -1
- package/lib/cjs/types/provider/provider-service.d.ts +0 -1
- package/lib/cjs/types/render/handlebars.interface.d.ts +0 -1
- package/lib/cjs/types/render/index.d.ts +0 -1
- package/lib/cjs/types/render/render.type.d.ts +0 -1
- package/lib/package.json +6 -7
- package/package.json +6 -7
- package/lib/cjs/types/application/app-container.d.ts.map +0 -1
- package/lib/cjs/types/application/application-factory.d.ts.map +0 -1
- package/lib/cjs/types/application/index.d.ts.map +0 -1
- package/lib/cjs/types/common/color-service.provider.d.ts.map +0 -1
- package/lib/cjs/types/common/index.d.ts.map +0 -1
- package/lib/cjs/types/common/package-resolver.provider.d.ts.map +0 -1
- package/lib/cjs/types/common/project-config.provider.d.ts.map +0 -1
- package/lib/cjs/types/console/console.d.ts.map +0 -1
- package/lib/cjs/types/console/index.d.ts.map +0 -1
- package/lib/cjs/types/container-module/container-module.d.ts.map +0 -1
- package/lib/cjs/types/container-module/index.d.ts.map +0 -1
- package/lib/cjs/types/controller/base-controller.d.ts.map +0 -1
- package/lib/cjs/types/controller/index.d.ts.map +0 -1
- package/lib/cjs/types/decorator/index.d.ts.map +0 -1
- package/lib/cjs/types/decorator/scope-binding.d.ts.map +0 -1
- package/lib/cjs/types/error/app-error.d.ts.map +0 -1
- package/lib/cjs/types/error/error-handler-middleware.d.ts.map +0 -1
- package/lib/cjs/types/error/index.d.ts.map +0 -1
- package/lib/cjs/types/error/report.d.ts.map +0 -1
- package/lib/cjs/types/error/status-code.d.ts.map +0 -1
- package/lib/cjs/types/index.d.ts.map +0 -1
- package/lib/cjs/types/middleware/index.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/body-parser.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/compression.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-parser.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/cors.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/serve-favicon.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/interfaces/serve-static.interface.d.ts.map +0 -1
- package/lib/cjs/types/middleware/middleware-resolver.d.ts.map +0 -1
- package/lib/cjs/types/middleware/middleware-service.d.ts.map +0 -1
- package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts.map +0 -1
- package/lib/cjs/types/provider/environment/env-validator.provider.d.ts.map +0 -1
- package/lib/cjs/types/provider/index.d.ts.map +0 -1
- package/lib/cjs/types/provider/logger/logger-service.d.ts.map +0 -1
- package/lib/cjs/types/provider/provider-service.d.ts.map +0 -1
- package/lib/cjs/types/render/handlebars.interface.d.ts.map +0 -1
- package/lib/cjs/types/render/index.d.ts.map +0 -1
- package/lib/cjs/types/render/render.type.d.ts.map +0 -1
- package/lib/esm/application/app-container.js +0 -82
- package/lib/esm/application/application-factory.js +0 -72
- package/lib/esm/application/index.js +0 -7
- package/lib/esm/common/color-service.provider.js +0 -46
- package/lib/esm/common/package-resolver.provider.js +0 -35
- package/lib/esm/console/console.js +0 -61
- package/lib/esm/console/index.js +0 -5
- package/lib/esm/container-module/container-module.js +0 -111
- package/lib/esm/container-module/index.js +0 -6
- package/lib/esm/controller/base-controller.js +0 -75
- package/lib/esm/controller/index.js +0 -5
- package/lib/esm/decorator/index.js +0 -17
- package/lib/esm/decorator/scope-binding.js +0 -44
- package/lib/esm/error/app-error.js +0 -37
- package/lib/esm/error/error-handler-middleware.js +0 -28
- package/lib/esm/error/index.js +0 -9
- package/lib/esm/error/report.js +0 -57
- package/lib/esm/error/status-code.js +0 -89
- package/lib/esm/index.mjs +0 -26
- package/lib/esm/middleware/index.js +0 -5
- package/lib/esm/middleware/interfaces/body-parser.interface.js +0 -2
- package/lib/esm/middleware/interfaces/compression.interface.js +0 -2
- package/lib/esm/middleware/interfaces/cookie-parser.interface.js +0 -2
- package/lib/esm/middleware/interfaces/cookie-session/cookie-session.interface.js +0 -2
- package/lib/esm/middleware/interfaces/cookie-session/keygrip.interface.js +0 -2
- package/lib/esm/middleware/interfaces/cors.interface.js +0 -2
- package/lib/esm/middleware/interfaces/serve-favicon.interface.js +0 -2
- package/lib/esm/middleware/interfaces/serve-static.interface.js +0 -2
- package/lib/esm/middleware/middleware-resolver.js +0 -68
- package/lib/esm/middleware/middleware-service.js +0 -242
- package/lib/esm/provider/dto-validator/dto-validator.provider.js +0 -53
- package/lib/esm/provider/environment/env-validator.provider.js +0 -96
- package/lib/esm/provider/index.js +0 -11
- package/lib/esm/provider/logger/logger-service.js +0 -115
- package/lib/esm/provider/provider-service.js +0 -38
- package/lib/esm/render/handlebars.interface.js +0 -2
- package/lib/esm/render/index.js +0 -2
- package/lib/esm/render/render.type.js +0 -2
- package/lib/esm/types/application/app-container.d.ts +0 -126
- package/lib/esm/types/application/app-container.d.ts.map +0 -1
- package/lib/esm/types/application/application-factory.d.ts +0 -34
- package/lib/esm/types/application/application-factory.d.ts.map +0 -1
- package/lib/esm/types/application/index.d.ts +0 -3
- package/lib/esm/types/application/index.d.ts.map +0 -1
- package/lib/esm/types/common/color-service.provider.d.ts +0 -30
- package/lib/esm/types/common/color-service.provider.d.ts.map +0 -1
- package/lib/esm/types/common/index.d.ts +0 -2
- package/lib/esm/types/common/index.d.ts.map +0 -1
- package/lib/esm/types/common/package-resolver.provider.d.ts +0 -9
- package/lib/esm/types/common/package-resolver.provider.d.ts.map +0 -1
- package/lib/esm/types/common/project-config.provider.d.ts +0 -48
- package/lib/esm/types/common/project-config.provider.d.ts.map +0 -1
- package/lib/esm/types/console/console.d.ts +0 -28
- package/lib/esm/types/console/console.d.ts.map +0 -1
- package/lib/esm/types/console/index.d.ts +0 -2
- package/lib/esm/types/console/index.d.ts.map +0 -1
- package/lib/esm/types/container-module/container-module.d.ts +0 -29
- package/lib/esm/types/container-module/container-module.d.ts.map +0 -1
- package/lib/esm/types/container-module/index.d.ts +0 -2
- package/lib/esm/types/container-module/index.d.ts.map +0 -1
- package/lib/esm/types/controller/base-controller.d.ts +0 -49
- package/lib/esm/types/controller/base-controller.d.ts.map +0 -1
- package/lib/esm/types/controller/index.d.ts +0 -2
- package/lib/esm/types/controller/index.d.ts.map +0 -1
- package/lib/esm/types/decorator/index.d.ts +0 -2
- package/lib/esm/types/decorator/index.d.ts.map +0 -1
- package/lib/esm/types/decorator/scope-binding.d.ts +0 -34
- package/lib/esm/types/decorator/scope-binding.d.ts.map +0 -1
- package/lib/esm/types/error/app-error.d.ts +0 -30
- package/lib/esm/types/error/app-error.d.ts.map +0 -1
- package/lib/esm/types/error/error-handler-middleware.d.ts +0 -12
- package/lib/esm/types/error/error-handler-middleware.d.ts.map +0 -1
- package/lib/esm/types/error/index.d.ts +0 -4
- package/lib/esm/types/error/index.d.ts.map +0 -1
- package/lib/esm/types/error/report.d.ts +0 -26
- package/lib/esm/types/error/report.d.ts.map +0 -1
- package/lib/esm/types/error/status-code.d.ts +0 -137
- package/lib/esm/types/error/status-code.d.ts.map +0 -1
- package/lib/esm/types/index.d.ts +0 -11
- package/lib/esm/types/index.d.ts.map +0 -1
- package/lib/esm/types/middleware/index.d.ts +0 -9
- package/lib/esm/types/middleware/index.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/body-parser.interface.d.ts +0 -34
- package/lib/esm/types/middleware/interfaces/body-parser.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/compression.interface.d.ts +0 -99
- package/lib/esm/types/middleware/interfaces/compression.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/cookie-parser.interface.d.ts +0 -10
- package/lib/esm/types/middleware/interfaces/cookie-parser.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts +0 -58
- package/lib/esm/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts +0 -28
- package/lib/esm/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/cors.interface.d.ts +0 -58
- package/lib/esm/types/middleware/interfaces/cors.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/serve-favicon.interface.d.ts +0 -12
- package/lib/esm/types/middleware/interfaces/serve-favicon.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/interfaces/serve-static.interface.d.ts +0 -71
- package/lib/esm/types/middleware/interfaces/serve-static.interface.d.ts.map +0 -1
- package/lib/esm/types/middleware/middleware-resolver.d.ts +0 -12
- package/lib/esm/types/middleware/middleware-resolver.d.ts.map +0 -1
- package/lib/esm/types/middleware/middleware-service.d.ts +0 -222
- package/lib/esm/types/middleware/middleware-service.d.ts.map +0 -1
- package/lib/esm/types/provider/dto-validator/dto-validator.provider.d.ts +0 -12
- package/lib/esm/types/provider/dto-validator/dto-validator.provider.d.ts.map +0 -1
- package/lib/esm/types/provider/environment/env-validator.provider.d.ts +0 -31
- package/lib/esm/types/provider/environment/env-validator.provider.d.ts.map +0 -1
- package/lib/esm/types/provider/index.d.ts +0 -5
- package/lib/esm/types/provider/index.d.ts.map +0 -1
- package/lib/esm/types/provider/logger/logger-service.d.ts +0 -50
- package/lib/esm/types/provider/logger/logger-service.d.ts.map +0 -1
- package/lib/esm/types/provider/provider-service.d.ts +0 -31
- package/lib/esm/types/provider/provider-service.d.ts.map +0 -1
- package/lib/esm/types/render/handlebars.interface.d.ts +0 -47
- package/lib/esm/types/render/handlebars.interface.d.ts.map +0 -1
- package/lib/esm/types/render/index.d.ts +0 -3
- package/lib/esm/types/render/index.d.ts.map +0 -1
- package/lib/esm/types/render/render.type.d.ts +0 -13
- package/lib/esm/types/render/render.type.d.ts.map +0 -1
- /package/lib/{esm/common/index.js → cjs/middleware/interfaces/express-rate-limit.interface.js} +0 -0
- /package/lib/{esm/common/project-config.provider.js → cjs/middleware/interfaces/morgan.interface.js} +0 -0
|
@@ -31,7 +31,7 @@ declare abstract class BaseController implements Controller {
|
|
|
31
31
|
* @param {Object} [options={}] - An optional object containing data to be passed to the template.
|
|
32
32
|
*
|
|
33
33
|
*/
|
|
34
|
-
protected callUseRender(res: Response, template: string, options?:
|
|
34
|
+
protected callUseRender(res: Response, template: string, options?: object): void;
|
|
35
35
|
/**
|
|
36
36
|
* Asynchronously renders a template with the given options using the Express `Response` object's render method.
|
|
37
37
|
*
|
|
@@ -43,7 +43,6 @@ declare abstract class BaseController implements Controller {
|
|
|
43
43
|
* @param {Object} [options={}] - An optional object containing data to be passed to the template.
|
|
44
44
|
*
|
|
45
45
|
*/
|
|
46
|
-
protected callUseRenderAsync(res: Response, template: string, options?:
|
|
46
|
+
protected callUseRenderAsync(res: Response, template: string, options?: object): Promise<string>;
|
|
47
47
|
}
|
|
48
48
|
export { BaseController };
|
|
49
|
-
//# sourceMappingURL=base-controller.d.ts.map
|
package/lib/cjs/types/index.d.ts
CHANGED
|
@@ -6,4 +6,5 @@ export { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session
|
|
|
6
6
|
export { Keygrip } from "./interfaces/cookie-session/keygrip.interface";
|
|
7
7
|
export { CookieParserOptions } from "./interfaces/cookie-parser.interface";
|
|
8
8
|
export { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
|
|
9
|
-
|
|
9
|
+
export { RateLimitOptions } from "./interfaces/express-rate-limit.interface";
|
|
10
|
+
export * as IMorgan from "./interfaces/morgan.interface";
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Method (in the form of middleware) to generate/retrieve a value based on the
|
|
4
|
+
* incoming request.
|
|
5
|
+
*
|
|
6
|
+
* @param request {Request} - The Express request object.
|
|
7
|
+
* @param response {Response} - The Express response object.
|
|
8
|
+
*
|
|
9
|
+
* @returns {T} - The value needed.
|
|
10
|
+
*/
|
|
11
|
+
type ValueDeterminingMiddleware<T> = (request: Request, response: Response) => T | Promise<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Express request handler that sends back a response when a client is
|
|
14
|
+
* rate-limited.
|
|
15
|
+
* @param request {Request} - The Express request object.
|
|
16
|
+
* @param response {Response} - The Express response object.
|
|
17
|
+
* @param next {NextFunction} - The Express `next` function, can be called to skip responding.
|
|
18
|
+
* @param optionsUsed {Options} - The options used to set up the middleware.
|
|
19
|
+
*/
|
|
20
|
+
type RateLimitExceededEventHandler = (request: Request, response: Response, next: NextFunction, optionsUsed: RateLimitOptions) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Data returned from the `Store` when a client's hit counter is incremented.
|
|
23
|
+
*
|
|
24
|
+
* @property totalHits {number} - The number of hits for that client so far.
|
|
25
|
+
* @property resetTime {Date | undefined} - The time when the counter resets.
|
|
26
|
+
*/
|
|
27
|
+
type ClientRateLimitInfo = {
|
|
28
|
+
totalHits: number;
|
|
29
|
+
resetTime: Date | undefined;
|
|
30
|
+
};
|
|
31
|
+
type IncrementResponse = ClientRateLimitInfo;
|
|
32
|
+
/**
|
|
33
|
+
* An interface that all hit counter stores must implement.
|
|
34
|
+
*/
|
|
35
|
+
interface Store {
|
|
36
|
+
/**
|
|
37
|
+
* Method that initializes the store, and has access to the options passed to
|
|
38
|
+
* the middleware too.
|
|
39
|
+
*
|
|
40
|
+
* @param options {Options} - The options used to setup the middleware.
|
|
41
|
+
*/
|
|
42
|
+
init?: (options: RateLimitOptions) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Method to fetch a client's hit count and reset time.
|
|
45
|
+
*
|
|
46
|
+
* @param key {string} - The identifier for a client.
|
|
47
|
+
*
|
|
48
|
+
* @returns {ClientRateLimitInfo} - The number of hits and reset time for that client.
|
|
49
|
+
*/
|
|
50
|
+
get?: (key: string) => Promise<ClientRateLimitInfo | undefined> | ClientRateLimitInfo | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Method to increment a client's hit counter.
|
|
53
|
+
*
|
|
54
|
+
* @param key {string} - The identifier for a client.
|
|
55
|
+
*
|
|
56
|
+
* @returns {IncrementResponse | undefined} - The number of hits and reset time for that client.
|
|
57
|
+
*/
|
|
58
|
+
increment: (key: string) => Promise<IncrementResponse> | IncrementResponse;
|
|
59
|
+
/**
|
|
60
|
+
* Method to decrement a client's hit counter.
|
|
61
|
+
*
|
|
62
|
+
* @param key {string} - The identifier for a client.
|
|
63
|
+
*/
|
|
64
|
+
decrement: (key: string) => Promise<void> | void;
|
|
65
|
+
/**
|
|
66
|
+
* Method to reset a client's hit counter.
|
|
67
|
+
*
|
|
68
|
+
* @param key {string} - The identifier for a client.
|
|
69
|
+
*/
|
|
70
|
+
resetKey: (key: string) => Promise<void> | void;
|
|
71
|
+
/**
|
|
72
|
+
* Method to reset everyone's hit counter.
|
|
73
|
+
*/
|
|
74
|
+
resetAll?: () => Promise<void> | void;
|
|
75
|
+
/**
|
|
76
|
+
* Method to shutdown the store, stop timers, and release all resources.
|
|
77
|
+
*/
|
|
78
|
+
shutdown?: () => Promise<void> | void;
|
|
79
|
+
/**
|
|
80
|
+
* Flag to indicate that keys incremented in one instance of this store can
|
|
81
|
+
* not affect other instances. Typically false if a database is used, true for
|
|
82
|
+
* MemoryStore.
|
|
83
|
+
*
|
|
84
|
+
* Used to help detect double-counting misconfigurations.
|
|
85
|
+
*/
|
|
86
|
+
localKeys?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Optional value that the store prepends to keys
|
|
89
|
+
*
|
|
90
|
+
* Used by the double-count check to avoid false-positives when a key is counted twice, but with different prefixes
|
|
91
|
+
*/
|
|
92
|
+
prefix?: string;
|
|
93
|
+
}
|
|
94
|
+
interface Validations {
|
|
95
|
+
enabled: {
|
|
96
|
+
[key: string]: boolean;
|
|
97
|
+
};
|
|
98
|
+
disable(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Checks whether the IP address is valid, and that it does not have a port
|
|
101
|
+
* number in it.
|
|
102
|
+
*
|
|
103
|
+
* See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_invalid_ip_address.
|
|
104
|
+
*
|
|
105
|
+
* @param ip {string | undefined} - The IP address provided by Express as request.ip.
|
|
106
|
+
*
|
|
107
|
+
* @returns {void}
|
|
108
|
+
*/
|
|
109
|
+
ip(ip: string | undefined): void;
|
|
110
|
+
/**
|
|
111
|
+
* Makes sure the trust proxy setting is not set to `true`.
|
|
112
|
+
*
|
|
113
|
+
* See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_permissive_trust_proxy.
|
|
114
|
+
*
|
|
115
|
+
* @param request {Request} - The Express request object.
|
|
116
|
+
*
|
|
117
|
+
* @returns {void}
|
|
118
|
+
*/
|
|
119
|
+
trustProxy(request: Request): void;
|
|
120
|
+
/**
|
|
121
|
+
* Makes sure the trust proxy setting is set in case the `X-Forwarded-For`
|
|
122
|
+
* header is present.
|
|
123
|
+
*
|
|
124
|
+
* See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_unset_trust_proxy.
|
|
125
|
+
*
|
|
126
|
+
* @param request {Request} - The Express request object.
|
|
127
|
+
*
|
|
128
|
+
* @returns {void}
|
|
129
|
+
*/
|
|
130
|
+
xForwardedForHeader(request: Request): void;
|
|
131
|
+
/**
|
|
132
|
+
* Ensures totalHits value from store is a positive integer.
|
|
133
|
+
*
|
|
134
|
+
* @param hits {any} - The `totalHits` returned by the store.
|
|
135
|
+
*/
|
|
136
|
+
positiveHits(hits: any): void;
|
|
137
|
+
/**
|
|
138
|
+
* Ensures a given key is incremented only once per request.
|
|
139
|
+
*
|
|
140
|
+
* @param request {Request} - The Express request object.
|
|
141
|
+
* @param store {Store} - The store class.
|
|
142
|
+
* @param key {string} - The key used to store the client's hit count.
|
|
143
|
+
*
|
|
144
|
+
* @returns {void}
|
|
145
|
+
*/
|
|
146
|
+
singleCount(request: Request, store: Store, key: string): void;
|
|
147
|
+
/**
|
|
148
|
+
* Warns the user that the behaviour for `max: 0` / `limit: 0` is changing in the next
|
|
149
|
+
* major release.
|
|
150
|
+
*
|
|
151
|
+
* @param limit {number} - The maximum number of hits per client.
|
|
152
|
+
*
|
|
153
|
+
* @returns {void}
|
|
154
|
+
*/
|
|
155
|
+
limit(limit: number): void;
|
|
156
|
+
/**
|
|
157
|
+
* Warns the user that the `draft_polli_ratelimit_headers` option is deprecated
|
|
158
|
+
* and will be removed in the next major release.
|
|
159
|
+
*
|
|
160
|
+
* @param draft_polli_ratelimit_headers {any | undefined} - The now-deprecated setting that was used to enable standard headers.
|
|
161
|
+
*
|
|
162
|
+
* @returns {void}
|
|
163
|
+
*/
|
|
164
|
+
draftPolliHeaders(draft_polli_ratelimit_headers?: any): void;
|
|
165
|
+
/**
|
|
166
|
+
* Warns the user that the `onLimitReached` option is deprecated and will be removed in the next
|
|
167
|
+
* major release.
|
|
168
|
+
*
|
|
169
|
+
* @param onLimitReached {any | undefined} - The maximum number of hits per client.
|
|
170
|
+
*
|
|
171
|
+
* @returns {void}
|
|
172
|
+
*/
|
|
173
|
+
onLimitReached(onLimitReached?: any): void;
|
|
174
|
+
/**
|
|
175
|
+
* Warns the user when the selected headers option requires a reset time but
|
|
176
|
+
* the store does not provide one.
|
|
177
|
+
*
|
|
178
|
+
* @param resetTime {Date | undefined} - The timestamp when the client's hit count will be reset.
|
|
179
|
+
*
|
|
180
|
+
* @returns {void}
|
|
181
|
+
*/
|
|
182
|
+
headersResetTime(resetTime?: Date): void;
|
|
183
|
+
/**
|
|
184
|
+
* Checks the options.validate setting to ensure that only recognized validations are enabled or disabled.
|
|
185
|
+
*
|
|
186
|
+
* If any unrecognized values are found, an error is logged that includes the list of supported vaidations.
|
|
187
|
+
*/
|
|
188
|
+
validationsConfig(): void;
|
|
189
|
+
}
|
|
190
|
+
type DraftHeadersVersion = "draft-6" | "draft-7";
|
|
191
|
+
interface RateLimitOptions {
|
|
192
|
+
/**
|
|
193
|
+
* How long we should remember the requests.
|
|
194
|
+
*
|
|
195
|
+
* Defaults to `60000` ms (= 1 minute).
|
|
196
|
+
*/
|
|
197
|
+
windowMs?: number;
|
|
198
|
+
/**
|
|
199
|
+
* The maximum number of connections to allow during the `window` before
|
|
200
|
+
* rate limiting the client.
|
|
201
|
+
*
|
|
202
|
+
* Can be the limit itself as a number or express middleware that parses
|
|
203
|
+
* the request and then figures out the limit.
|
|
204
|
+
*
|
|
205
|
+
* Defaults to `5`.
|
|
206
|
+
*/
|
|
207
|
+
limit?: number | ValueDeterminingMiddleware<number>;
|
|
208
|
+
/**
|
|
209
|
+
* The response body to send back when a client is rate limited.
|
|
210
|
+
*
|
|
211
|
+
* Defaults to `'Too many requests, please try again later.'`
|
|
212
|
+
*/
|
|
213
|
+
message?: any | ValueDeterminingMiddleware<any>;
|
|
214
|
+
/**
|
|
215
|
+
* The HTTP status code to send back when a client is rate limited.
|
|
216
|
+
*
|
|
217
|
+
* Defaults to `HTTP 429 Too Many Requests` (RFC 6585).
|
|
218
|
+
*/
|
|
219
|
+
statusCode?: number;
|
|
220
|
+
/**
|
|
221
|
+
* Whether to send `X-RateLimit-*` headers with the rate limit and the number
|
|
222
|
+
* of requests.
|
|
223
|
+
*
|
|
224
|
+
* Defaults to `true` (for backward compatibility).
|
|
225
|
+
*/
|
|
226
|
+
legacyHeaders?: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Whether to enable support for the standardized rate limit headers (`RateLimit-*`).
|
|
229
|
+
*
|
|
230
|
+
* Defaults to `false` (for backward compatibility, but its use is recommended).
|
|
231
|
+
*/
|
|
232
|
+
standardHeaders?: false | DraftHeadersVersion;
|
|
233
|
+
/**
|
|
234
|
+
* The name of the property on the request object to store the rate limit info.
|
|
235
|
+
*
|
|
236
|
+
* Defaults to `rateLimit`.
|
|
237
|
+
*/
|
|
238
|
+
requestPropertyName?: string;
|
|
239
|
+
/**
|
|
240
|
+
* If `true`, the library will (by default) skip all requests that have a 4XX
|
|
241
|
+
* or 5XX status.
|
|
242
|
+
*
|
|
243
|
+
* Defaults to `false`.
|
|
244
|
+
*/
|
|
245
|
+
skipFailedRequests?: boolean;
|
|
246
|
+
/**
|
|
247
|
+
* If `true`, the library will (by default) skip all requests that have a
|
|
248
|
+
* status code less than 400.
|
|
249
|
+
*
|
|
250
|
+
* Defaults to `false`.
|
|
251
|
+
*/
|
|
252
|
+
skipSuccessfulRequests?: boolean;
|
|
253
|
+
/**
|
|
254
|
+
* Method to generate custom identifiers for clients.
|
|
255
|
+
*
|
|
256
|
+
* By default, the client's IP address is used.
|
|
257
|
+
*/
|
|
258
|
+
keyGenerator?: ValueDeterminingMiddleware<string>;
|
|
259
|
+
/**
|
|
260
|
+
* Express request handler that sends back a response when a client is
|
|
261
|
+
* rate-limited.
|
|
262
|
+
*
|
|
263
|
+
* By default, sends back the `statusCode` and `message` set via the options.
|
|
264
|
+
*/
|
|
265
|
+
handler?: RateLimitExceededEventHandler;
|
|
266
|
+
/**
|
|
267
|
+
* Method (in the form of middleware) to determine whether or not this request
|
|
268
|
+
* counts towards a client's quota.
|
|
269
|
+
*
|
|
270
|
+
* By default, skips no requests.
|
|
271
|
+
*/
|
|
272
|
+
skip?: ValueDeterminingMiddleware<boolean>;
|
|
273
|
+
/**
|
|
274
|
+
* Method to determine whether or not the request counts as 'succesful'. Used
|
|
275
|
+
* when either `skipSuccessfulRequests` or `skipFailedRequests` is set to true.
|
|
276
|
+
*
|
|
277
|
+
* By default, requests with a response status code less than 400 are considered
|
|
278
|
+
* successful.
|
|
279
|
+
*/
|
|
280
|
+
requestWasSuccessful?: ValueDeterminingMiddleware<boolean>;
|
|
281
|
+
/**
|
|
282
|
+
* The `Store` to use to store the hit count for each client.
|
|
283
|
+
*
|
|
284
|
+
* By default, the built-in `MemoryStore` will be used.
|
|
285
|
+
*/
|
|
286
|
+
store?: Store;
|
|
287
|
+
/**
|
|
288
|
+
* The list of validation checks that should run.
|
|
289
|
+
*/
|
|
290
|
+
validations?: Validations;
|
|
291
|
+
}
|
|
292
|
+
export { RateLimitOptions };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import http from "http";
|
|
3
|
+
export interface StreamOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Output stream for writing log lines.
|
|
6
|
+
*/
|
|
7
|
+
write(str: string): void;
|
|
8
|
+
}
|
|
9
|
+
/***
|
|
10
|
+
* Morgan accepts these properties in the options object.
|
|
11
|
+
*/
|
|
12
|
+
export interface OptionsMorgan {
|
|
13
|
+
/***
|
|
14
|
+
* Buffer duration before writing logs to the stream, defaults to false.
|
|
15
|
+
* When set to true, defaults to 1000 ms.
|
|
16
|
+
* @deprecated
|
|
17
|
+
*/
|
|
18
|
+
buffer?: boolean | undefined;
|
|
19
|
+
/***
|
|
20
|
+
* Write log line on request instead of response. This means that a
|
|
21
|
+
* requests will be logged even if the server crashes, but data from the
|
|
22
|
+
* response cannot be logged (like the response code).
|
|
23
|
+
*/
|
|
24
|
+
immediate?: boolean | undefined;
|
|
25
|
+
/***
|
|
26
|
+
* Function to determine if logging is skipped, defaults to false. This
|
|
27
|
+
* function will be called as skip(req, res).
|
|
28
|
+
*/
|
|
29
|
+
skip?(req: http.IncomingMessage, res: http.ServerResponse): boolean;
|
|
30
|
+
/***
|
|
31
|
+
* Output stream for writing log lines, defaults to process.stdout.
|
|
32
|
+
* @param str
|
|
33
|
+
*/
|
|
34
|
+
stream?: StreamOptions | undefined;
|
|
35
|
+
}
|
|
36
|
+
export type FormatFn = (tokens: TokenIndexer, req: http.IncomingMessage, res: http.ServerResponse) => string;
|
|
37
|
+
export type TokenCallbackFn = (req: http.IncomingMessage, res: http.ServerResponse, arg?: string | number) => string | number;
|
|
38
|
+
export interface TokenIndexer {
|
|
39
|
+
[tokenName: string]: TokenCallbackFn;
|
|
40
|
+
}
|
|
@@ -7,6 +7,8 @@ import { CookieParserOptions } from "./interfaces/cookie-parser.interface";
|
|
|
7
7
|
import { ServeStaticOptions } from "./interfaces/serve-static.interface";
|
|
8
8
|
import { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session.interface";
|
|
9
9
|
import { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
|
|
10
|
+
import { FormatFn, OptionsMorgan } from "./interfaces/morgan.interface";
|
|
11
|
+
import { RateLimitOptions } from "./interfaces/express-rate-limit.interface";
|
|
10
12
|
/**
|
|
11
13
|
* ExpressHandler Type
|
|
12
14
|
*
|
|
@@ -52,6 +54,13 @@ interface MiddlewarePipeline {
|
|
|
52
54
|
* Provides methods to be added automatically in the application without the need to import packages.
|
|
53
55
|
*/
|
|
54
56
|
interface IMiddleware {
|
|
57
|
+
/**
|
|
58
|
+
* Adds a Rate Limit middleware to the middleware collection.
|
|
59
|
+
* The rate limiter is responsible for adding dynamic rate limit and request throttling to the application.
|
|
60
|
+
*
|
|
61
|
+
* @param options - Optional configuration options for the JSON body parser.
|
|
62
|
+
*/
|
|
63
|
+
addRateLimiter(options?: RateLimitOptions): void;
|
|
55
64
|
/**
|
|
56
65
|
* Adds a Body Parser middleware to the middleware collection.
|
|
57
66
|
* The body parser is responsible for parsing the incoming request bodies in a middleware.
|
|
@@ -84,6 +93,13 @@ interface IMiddleware {
|
|
|
84
93
|
* @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
|
|
85
94
|
*/
|
|
86
95
|
addCookieSession(options: CookieSessionOptions): void;
|
|
96
|
+
/**
|
|
97
|
+
* Adds Morgan middleware to log HTTP requests.
|
|
98
|
+
*
|
|
99
|
+
* @param format - The log format. Can be a string or a function.
|
|
100
|
+
* @param options - Optional configuration options for Morgan. Defines the behavior of the logger like the output stream, buffer duration, etc.
|
|
101
|
+
*/
|
|
102
|
+
addMorgan(format: string | FormatFn, options?: OptionsMorgan): void;
|
|
87
103
|
/**
|
|
88
104
|
* Adds a middleware to serve the favicon to the middleware collection.
|
|
89
105
|
* The favicon is the icon that is displayed in the browser tab for the application.
|
|
@@ -145,6 +161,7 @@ declare class Middleware implements IMiddleware {
|
|
|
145
161
|
* @returns A boolean value indicating whether the middleware exists or not.
|
|
146
162
|
*/
|
|
147
163
|
private middlewareExists;
|
|
164
|
+
addRateLimiter(options?: RateLimitOptions): void;
|
|
148
165
|
/**
|
|
149
166
|
* Adds a Body Parser middleware to the middleware collection using the given options.
|
|
150
167
|
*
|
|
@@ -163,6 +180,13 @@ declare class Middleware implements IMiddleware {
|
|
|
163
180
|
* @param options - Optional configuration options for Compression. Allows fine-tuning the compression behavior, such as setting the compression level, threshold, and filter functions to determine which requests should be compressed.
|
|
164
181
|
*/
|
|
165
182
|
addCompression(options?: CompressionOptions): void;
|
|
183
|
+
/**
|
|
184
|
+
* Adds Morgan middleware to log HTTP requests.
|
|
185
|
+
*
|
|
186
|
+
* @param format - The log format. Can be a string or a function.
|
|
187
|
+
* @param options - Optional configuration options for Morgan. Defines the behavior of the logger like the output stream, buffer duration, etc.
|
|
188
|
+
*/
|
|
189
|
+
addMorgan(format: string | FormatFn, options?: OptionsMorgan | undefined): void;
|
|
166
190
|
/**
|
|
167
191
|
* Adds Cookie Parser middleware to parse the cookie header and populate req.cookies with an object keyed by the cookie names.
|
|
168
192
|
*
|
|
@@ -219,4 +243,3 @@ declare class Middleware implements IMiddleware {
|
|
|
219
243
|
getErrorHandler(): ExpressHandler;
|
|
220
244
|
}
|
|
221
245
|
export { Middleware, IMiddleware };
|
|
222
|
-
//# sourceMappingURL=middleware-service.d.ts.map
|
|
@@ -2,4 +2,3 @@ export { Provider, IProvider } from "./provider-service";
|
|
|
2
2
|
export { Logger } from "./logger/logger-service";
|
|
3
3
|
export { EnvValidatorProvider as Env } from "./environment/env-validator.provider";
|
|
4
4
|
export { ValidateDTO } from "./dto-validator/dto-validator.provider";
|
|
5
|
-
//# sourceMappingURL=index.d.ts.map
|
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expressots/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Expressots - modern, fast, lightweight nodejs web framework (@core)",
|
|
5
5
|
"author": "Richard Zampieri",
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
@@ -54,12 +54,13 @@
|
|
|
54
54
|
"clean": "node scripts/rm.js lib",
|
|
55
55
|
"copy": "node scripts/copy.js package.json README.md CHANGELOG.md lib",
|
|
56
56
|
"rename:esm": "node scripts/mv.js lib/esm/index.js lib/esm/index.mjs",
|
|
57
|
-
"build": "npm run clean && npm run build:esm && npm run build:cjs && npm run copy",
|
|
57
|
+
"build:full": "npm run clean && npm run build:esm && npm run build:cjs && npm run copy",
|
|
58
|
+
"build": "npm run clean && npm run build:cjs && npm run copy",
|
|
58
59
|
"build:esm": "tsc -p tsconfig.esm.json && npm run rename:esm",
|
|
59
60
|
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
60
61
|
"release": "release-it",
|
|
61
62
|
"coverage": "vitest run --coverage",
|
|
62
|
-
"test": "vitest run",
|
|
63
|
+
"test": "vitest run --reporter default",
|
|
63
64
|
"test:watch": "vitest",
|
|
64
65
|
"format": "prettier --write \"packages/**/*.ts\" --cache",
|
|
65
66
|
"lint": "eslint \"packages/**/*.ts\"",
|
|
@@ -79,6 +80,7 @@
|
|
|
79
80
|
"@types/node": "^20.4.9",
|
|
80
81
|
"@typescript-eslint/eslint-plugin": "^6.6.0",
|
|
81
82
|
"@typescript-eslint/parser": "^6.6.0",
|
|
83
|
+
"@vitest/coverage-v8": "^0.34.6",
|
|
82
84
|
"eslint": "^8.48.0",
|
|
83
85
|
"eslint-config-prettier": "^9.0.0",
|
|
84
86
|
"husky": "^8.0.3",
|
|
@@ -87,10 +89,7 @@
|
|
|
87
89
|
"ts-jest": "^29.0.5",
|
|
88
90
|
"typescript": "^5.0.3",
|
|
89
91
|
"vite": "4.4.9",
|
|
90
|
-
"vitest": "0.34.
|
|
91
|
-
},
|
|
92
|
-
"peerDependencies": {
|
|
93
|
-
"@expressots/adapter-express": "latest"
|
|
92
|
+
"vitest": "0.34.5"
|
|
94
93
|
},
|
|
95
94
|
"release-it": {
|
|
96
95
|
"git": {
|