@expressots/adapter-express 3.0.0 → 4.0.0-preview.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 +39 -96
- package/lib/CHANGELOG.md +31 -5
- package/lib/README.md +39 -96
- package/lib/cjs/adapter-express/application-express.base.js +3 -1
- package/lib/cjs/adapter-express/application-express.js +1049 -85
- package/lib/cjs/adapter-express/express-utils/conditional-middleware.js +102 -0
- package/lib/cjs/adapter-express/express-utils/constants.js +17 -0
- package/lib/cjs/adapter-express/express-utils/content-negotiation-decorators.js +129 -0
- package/lib/cjs/adapter-express/express-utils/decorators.js +186 -49
- package/lib/cjs/adapter-express/express-utils/exception-filter-decorators.js +11 -0
- package/lib/cjs/adapter-express/express-utils/guard-context-factory.js +84 -0
- package/lib/cjs/adapter-express/express-utils/guard-middleware.js +115 -0
- package/lib/cjs/adapter-express/express-utils/guard-utils.js +18 -0
- package/lib/cjs/adapter-express/express-utils/http-context-store.js +15 -0
- package/lib/cjs/adapter-express/express-utils/http-status-middleware.js +37 -2
- package/lib/cjs/adapter-express/express-utils/index.js +67 -1
- package/lib/cjs/adapter-express/express-utils/interceptor-middleware.js +132 -0
- package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +810 -63
- package/lib/cjs/adapter-express/express-utils/lazy-module-middleware.js +241 -0
- package/lib/cjs/adapter-express/express-utils/middleware-composition.js +95 -0
- package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
- package/lib/cjs/adapter-express/express-utils/route-constraints.js +95 -0
- package/lib/cjs/adapter-express/express-utils/scope-extractor.interface.js +2 -0
- package/lib/cjs/adapter-express/express-utils/scope-extractor.js +66 -0
- package/lib/cjs/adapter-express/express-utils/setup-authorization.js +71 -0
- package/lib/cjs/adapter-express/express-utils/setup-event-system.js +113 -0
- package/lib/cjs/adapter-express/express-utils/setup-interceptors.js +103 -0
- package/lib/cjs/adapter-express/express-utils/setup-lazy-loading.js +228 -0
- package/lib/cjs/adapter-express/express-utils/utils.js +30 -12
- package/lib/cjs/adapter-express/express-utils/validation-decorators.js +205 -0
- package/lib/cjs/adapter-express/express-utils/validation-service.js +252 -0
- package/lib/cjs/adapter-express/index.js +7 -5
- package/lib/cjs/adapter-express/micro-api/application-express-micro-route.js +31 -1
- package/lib/cjs/adapter-express/micro-api/application-express-micro.js +11 -37
- package/lib/cjs/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
- package/lib/cjs/adapter-express/micro-api/gateway/index.js +11 -0
- package/lib/cjs/adapter-express/micro-api/gateway/service-proxy.js +214 -0
- package/lib/cjs/adapter-express/micro-api/index.js +27 -3
- package/lib/cjs/adapter-express/micro-api/micro.js +217 -0
- package/lib/cjs/adapter-express/micro-api/queue/index.js +8 -0
- package/lib/cjs/adapter-express/micro-api/queue/queue.interface.js +2 -0
- package/lib/cjs/adapter-express/micro-api/queue/rabbitmq-consumer.js +255 -0
- package/lib/cjs/adapter-express/micro-api/serverless/aws-lambda.adapter.js +183 -0
- package/lib/cjs/adapter-express/micro-api/serverless/cloudflare.adapter.js +158 -0
- package/lib/cjs/adapter-express/micro-api/serverless/index.js +12 -0
- package/lib/cjs/adapter-express/micro-api/serverless/vercel.adapter.js +102 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/index.js +10 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/service-client.js +194 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/service-discovery.js +261 -0
- package/lib/cjs/adapter-express/middleware/index.js +21 -0
- package/lib/cjs/adapter-express/middleware/request-logging.middleware.js +244 -0
- package/lib/cjs/adapter-express/render/engine.js +15 -15
- package/lib/cjs/adapter-express/render/index.js +5 -0
- package/lib/cjs/adapter-express/studio/index.js +9 -0
- package/lib/cjs/adapter-express/studio/studio-integration.js +214 -0
- package/lib/cjs/index.js +1 -1
- package/lib/cjs/types/adapter-express/application-express.base.d.ts +20 -7
- package/lib/cjs/types/adapter-express/application-express.d.ts +273 -32
- package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +2 -2
- package/lib/cjs/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
- package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +13 -0
- package/lib/cjs/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
- package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +54 -6
- package/lib/cjs/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
- package/lib/cjs/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
- package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +1 -1
- package/lib/cjs/types/adapter-express/express-utils/index.d.ts +30 -2
- package/lib/cjs/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
- package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +42 -5
- package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +114 -2
- package/lib/cjs/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
- package/lib/cjs/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
- package/lib/cjs/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
- package/lib/cjs/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
- package/lib/cjs/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
- package/lib/cjs/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
- package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +17 -2
- package/lib/cjs/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
- package/lib/cjs/types/adapter-express/express-utils/validation-service.d.ts +88 -0
- package/lib/cjs/types/adapter-express/index.d.ts +6 -4
- package/lib/cjs/types/adapter-express/micro-api/application-express-micro-route.d.ts +25 -14
- package/lib/cjs/types/adapter-express/micro-api/application-express-micro.d.ts +3 -10
- package/lib/cjs/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
- package/lib/cjs/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
- package/lib/cjs/types/adapter-express/micro-api/index.d.ts +7 -1
- package/lib/cjs/types/adapter-express/micro-api/micro.d.ts +66 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
- package/lib/cjs/types/adapter-express/middleware/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
- package/lib/cjs/types/adapter-express/render/index.d.ts +1 -0
- package/lib/cjs/types/adapter-express/studio/index.d.ts +1 -0
- package/lib/cjs/types/adapter-express/studio/studio-integration.d.ts +92 -0
- package/lib/cjs/types/index.d.ts +1 -1
- package/lib/esm/adapter-express/application-express.base.js +24 -0
- package/lib/esm/adapter-express/application-express.js +1300 -0
- package/lib/esm/adapter-express/application-express.types.js +1 -0
- package/lib/esm/adapter-express/express-utils/base-middleware.js +19 -0
- package/lib/esm/adapter-express/express-utils/conditional-middleware.js +96 -0
- package/lib/esm/adapter-express/express-utils/constants.js +63 -0
- package/lib/esm/adapter-express/express-utils/content/httpContent.js +6 -0
- package/lib/esm/adapter-express/express-utils/content-negotiation-decorators.js +120 -0
- package/lib/esm/adapter-express/express-utils/decorators.js +575 -0
- package/lib/esm/adapter-express/express-utils/exception-filter-decorators.js +6 -0
- package/lib/esm/adapter-express/express-utils/guard-context-factory.js +83 -0
- package/lib/esm/adapter-express/express-utils/guard-middleware.js +115 -0
- package/lib/esm/adapter-express/express-utils/guard-utils.js +14 -0
- package/lib/esm/adapter-express/express-utils/http-context-store.js +10 -0
- package/lib/esm/adapter-express/express-utils/http-status-middleware.js +116 -0
- package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +29 -0
- package/lib/esm/adapter-express/express-utils/index.js +24 -0
- package/lib/esm/adapter-express/express-utils/interceptor-middleware.js +130 -0
- package/lib/esm/adapter-express/express-utils/interfaces.js +1 -0
- package/lib/esm/adapter-express/express-utils/inversify-express-server.js +1031 -0
- package/lib/esm/adapter-express/express-utils/lazy-module-middleware.js +236 -0
- package/lib/esm/adapter-express/express-utils/middleware-composition.js +89 -0
- package/lib/esm/adapter-express/express-utils/permission-preloader.middleware.js +45 -0
- package/lib/esm/adapter-express/express-utils/resolver-multer.js +30 -0
- package/lib/esm/adapter-express/express-utils/route-constraints.js +91 -0
- package/lib/esm/adapter-express/express-utils/scope-extractor.interface.js +1 -0
- package/lib/esm/adapter-express/express-utils/scope-extractor.js +63 -0
- package/lib/esm/adapter-express/express-utils/setup-authorization.js +68 -0
- package/lib/esm/adapter-express/express-utils/setup-event-system.js +110 -0
- package/lib/esm/adapter-express/express-utils/setup-interceptors.js +100 -0
- package/lib/esm/adapter-express/express-utils/setup-lazy-loading.js +225 -0
- package/lib/esm/adapter-express/express-utils/utils.js +68 -0
- package/lib/esm/adapter-express/express-utils/validation-decorators.js +199 -0
- package/lib/esm/adapter-express/express-utils/validation-service.js +251 -0
- package/lib/esm/adapter-express/index.js +7 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro-container.js +48 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro-route.js +128 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro.js +161 -0
- package/lib/esm/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
- package/lib/esm/adapter-express/micro-api/gateway/index.js +5 -0
- package/lib/esm/adapter-express/micro-api/gateway/service-proxy.js +210 -0
- package/lib/esm/adapter-express/micro-api/index.js +10 -0
- package/lib/esm/adapter-express/micro-api/micro.js +211 -0
- package/lib/esm/adapter-express/micro-api/queue/index.js +4 -0
- package/lib/esm/adapter-express/micro-api/queue/queue.interface.js +1 -0
- package/lib/esm/adapter-express/micro-api/queue/rabbitmq-consumer.js +229 -0
- package/lib/esm/adapter-express/micro-api/serverless/aws-lambda.adapter.js +180 -0
- package/lib/esm/adapter-express/micro-api/serverless/cloudflare.adapter.js +155 -0
- package/lib/esm/adapter-express/micro-api/serverless/index.js +6 -0
- package/lib/esm/adapter-express/micro-api/serverless/vercel.adapter.js +99 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/index.js +5 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/service-client.js +191 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/service-discovery.js +259 -0
- package/lib/esm/adapter-express/middleware/index.js +5 -0
- package/lib/esm/adapter-express/middleware/request-logging.middleware.js +239 -0
- package/lib/esm/adapter-express/render/constants.js +37 -0
- package/lib/esm/adapter-express/render/engine.js +51 -0
- package/lib/esm/adapter-express/render/index.js +1 -0
- package/lib/esm/adapter-express/render/resolve-render.js +30 -0
- package/lib/esm/adapter-express/studio/index.js +1 -0
- package/lib/esm/adapter-express/studio/studio-integration.js +184 -0
- package/lib/esm/index.mjs +1 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/types/adapter-express/application-express.base.d.ts +77 -0
- package/lib/esm/types/adapter-express/application-express.d.ts +411 -0
- package/lib/esm/types/adapter-express/application-express.types.d.ts +23 -0
- package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +8 -0
- package/lib/esm/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
- package/lib/esm/types/adapter-express/express-utils/constants.d.ts +57 -0
- package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +6 -0
- package/lib/esm/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
- package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +257 -0
- package/lib/esm/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
- package/lib/esm/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
- package/lib/esm/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
- package/lib/esm/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
- package/lib/esm/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
- package/lib/esm/types/adapter-express/express-utils/http-status-middleware.d.ts +26 -0
- package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +14 -0
- package/lib/esm/types/adapter-express/express-utils/index.d.ts +30 -0
- package/lib/esm/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
- package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +115 -0
- package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +172 -0
- package/lib/esm/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
- package/lib/esm/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
- package/lib/esm/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
- package/lib/esm/types/adapter-express/express-utils/resolver-multer.d.ts +7 -0
- package/lib/esm/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
- package/lib/esm/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
- package/lib/esm/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
- package/lib/esm/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
- package/lib/esm/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
- package/lib/esm/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
- package/lib/esm/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
- package/lib/esm/types/adapter-express/express-utils/utils.d.ts +24 -0
- package/lib/esm/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
- package/lib/esm/types/adapter-express/express-utils/validation-service.d.ts +88 -0
- package/lib/esm/types/adapter-express/index.d.ts +7 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro-container.d.ts +47 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro-route.d.ts +104 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro.d.ts +72 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
- package/lib/esm/types/adapter-express/micro-api/index.d.ts +7 -0
- package/lib/esm/types/adapter-express/micro-api/micro.d.ts +66 -0
- package/lib/esm/types/adapter-express/micro-api/queue/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
- package/lib/esm/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
- package/lib/esm/types/adapter-express/middleware/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
- package/lib/esm/types/adapter-express/render/constants.d.ts +26 -0
- package/lib/esm/types/adapter-express/render/engine.d.ts +20 -0
- package/lib/esm/types/adapter-express/render/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/render/resolve-render.d.ts +7 -0
- package/lib/esm/types/adapter-express/studio/index.d.ts +1 -0
- package/lib/esm/types/adapter-express/studio/studio-integration.d.ts +92 -0
- package/lib/esm/types/index.d.ts +1 -0
- package/lib/package.json +156 -146
- package/package.json +156 -146
- package/lib/cjs/di/di.interfaces.js +0 -10
- package/lib/cjs/types/di/di.interfaces.d.ts +0 -289
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { interfaces } from "@expressots/core";
|
|
2
|
+
/**
|
|
3
|
+
* Inversion of Control Container interface
|
|
4
|
+
* @public API
|
|
5
|
+
*/
|
|
6
|
+
export interface IIOC {
|
|
7
|
+
addSingleton<T>(concrete: interfaces.Newable<T>): void;
|
|
8
|
+
addTransient<T>(concrete: interfaces.Newable<T>): void;
|
|
9
|
+
addScoped<T>(concrete: interfaces.Newable<T>): void;
|
|
10
|
+
get<I>(identifier: interfaces.ServiceIdentifier<I>): I;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Inversion of Control Container
|
|
14
|
+
* @public API
|
|
15
|
+
*/
|
|
16
|
+
export declare class IOC {
|
|
17
|
+
private container;
|
|
18
|
+
constructor(containerOptions?: interfaces.ContainerOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Add a singleton to the container
|
|
21
|
+
* @param identifierOrConcrete - The identifier or concrete class
|
|
22
|
+
* @param concrete - The concrete class if identifier is provided
|
|
23
|
+
* @public API
|
|
24
|
+
*/
|
|
25
|
+
addSingleton<T>(concrete: interfaces.Newable<T>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Add a transient to the container
|
|
28
|
+
* @param identifierOrConcrete - The identifier or concrete class
|
|
29
|
+
* @param concrete - The concrete class if identifier is provided
|
|
30
|
+
* @public API
|
|
31
|
+
*/
|
|
32
|
+
addTransient<T>(concrete: interfaces.Newable<T>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Add a scoped to the container
|
|
35
|
+
* @param identifierOrConcrete - The identifier or concrete class
|
|
36
|
+
* @param concrete - The concrete class if identifier is provided
|
|
37
|
+
* @public API
|
|
38
|
+
*/
|
|
39
|
+
addScoped<T>(concrete: interfaces.Newable<T>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get an instance from the container
|
|
42
|
+
* @param identifier - The identifier for the instance
|
|
43
|
+
* @returns The resolved instance
|
|
44
|
+
* @public API
|
|
45
|
+
*/
|
|
46
|
+
get(identifier: interfaces.ServiceIdentifier): any;
|
|
47
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { Middleware } from "../express-utils/interfaces.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handler function that can return a value to be sent as response
|
|
5
|
+
*/
|
|
6
|
+
type MicroRouteHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => unknown | Promise<unknown>;
|
|
7
|
+
type RouteDefinition = {
|
|
8
|
+
method: "get" | "post" | "put" | "patch" | "delete";
|
|
9
|
+
path: string;
|
|
10
|
+
handler: MicroRouteHandler;
|
|
11
|
+
middleware: Array<Middleware>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Route manager for Express Micro API adapter
|
|
15
|
+
* @public API
|
|
16
|
+
*/
|
|
17
|
+
export interface IRoute {
|
|
18
|
+
define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
19
|
+
get(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
20
|
+
post(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
21
|
+
put(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
22
|
+
delete(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
23
|
+
patch(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
24
|
+
}
|
|
25
|
+
export declare class Route implements IRoute {
|
|
26
|
+
private logger;
|
|
27
|
+
private routes;
|
|
28
|
+
private app;
|
|
29
|
+
private globalPrefix;
|
|
30
|
+
constructor(app: express.Application);
|
|
31
|
+
/**
|
|
32
|
+
* Set the global route prefix
|
|
33
|
+
* @param prefix
|
|
34
|
+
* @public API
|
|
35
|
+
*/
|
|
36
|
+
setGlobalRoutePrefix(prefix: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Define a route
|
|
39
|
+
* @param method - HTTP method
|
|
40
|
+
* @param path - Route path
|
|
41
|
+
* @param handler - Route handler
|
|
42
|
+
* @param middleware - Route middleware
|
|
43
|
+
* @public API
|
|
44
|
+
*/
|
|
45
|
+
define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Define a GET route
|
|
48
|
+
* @param path - Route path
|
|
49
|
+
* @param handler - Route handler
|
|
50
|
+
* @param middleware - Route middleware
|
|
51
|
+
* @public API
|
|
52
|
+
*/
|
|
53
|
+
get(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
54
|
+
/**
|
|
55
|
+
* Define a POST route
|
|
56
|
+
* @param path - Route path
|
|
57
|
+
* @param handler - Route handler
|
|
58
|
+
* @param middleware - Route middleware
|
|
59
|
+
* @public API
|
|
60
|
+
*/
|
|
61
|
+
post(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
62
|
+
/**
|
|
63
|
+
* Define a PUT route
|
|
64
|
+
* @param path - Route path
|
|
65
|
+
* @param handler - Route handler
|
|
66
|
+
* @param middleware - Route middleware
|
|
67
|
+
* @public API
|
|
68
|
+
*/
|
|
69
|
+
put(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
70
|
+
/**
|
|
71
|
+
* Define a DELETE route
|
|
72
|
+
* @param path - Route path
|
|
73
|
+
* @param handler - Route handler
|
|
74
|
+
* @param middleware - Route middleware
|
|
75
|
+
* @public API
|
|
76
|
+
*/
|
|
77
|
+
delete(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
78
|
+
/**
|
|
79
|
+
* Define a PATCH route
|
|
80
|
+
* @param path - Route path
|
|
81
|
+
* @param handler - Route handler
|
|
82
|
+
* @param middleware - Route middleware
|
|
83
|
+
* @public API
|
|
84
|
+
*/
|
|
85
|
+
patch(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
|
|
86
|
+
/**
|
|
87
|
+
* Wrap a handler to automatically send return values as response
|
|
88
|
+
* @param handler - The original handler
|
|
89
|
+
* @returns Wrapped Express request handler
|
|
90
|
+
* @private
|
|
91
|
+
*/
|
|
92
|
+
private wrapHandler;
|
|
93
|
+
/**
|
|
94
|
+
* Apply the routes to the Express application
|
|
95
|
+
*/
|
|
96
|
+
applyRoutes(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Get the routes
|
|
99
|
+
* @returns Array of route definitions
|
|
100
|
+
* @public API
|
|
101
|
+
*/
|
|
102
|
+
get Routes(): Array<RouteDefinition>;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { IMiddleware, interfaces } from "@expressots/core";
|
|
2
|
+
import { IConsoleMessage } from "@expressots/shared";
|
|
3
|
+
import { Server } from "http";
|
|
4
|
+
import { IIOC } from "./application-express-micro-container.js";
|
|
5
|
+
import { IRoute } from "./application-express-micro-route.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Express Micro API adapter
|
|
8
|
+
* @public API
|
|
9
|
+
*/
|
|
10
|
+
export type MicroAPIConfig = {
|
|
11
|
+
containerOptions: interfaces.ContainerOptions;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Interface for the Create Method of Express Micro API adapter
|
|
15
|
+
*/
|
|
16
|
+
export interface ICreateMicroAPI {
|
|
17
|
+
/**
|
|
18
|
+
* Set the global route prefix
|
|
19
|
+
* @param prefix - The global route prefix
|
|
20
|
+
* @public API
|
|
21
|
+
*/
|
|
22
|
+
setGlobalRoutePrefix(prefix: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Get the Container instance
|
|
25
|
+
* @returns IIOC - The container instance interface
|
|
26
|
+
* @public API
|
|
27
|
+
*/
|
|
28
|
+
get Container(): IIOC;
|
|
29
|
+
/**
|
|
30
|
+
* Get the Express HTTP Server instance
|
|
31
|
+
* @returns express.Application
|
|
32
|
+
* @public API
|
|
33
|
+
*/
|
|
34
|
+
getHttpServer(): Server;
|
|
35
|
+
/**
|
|
36
|
+
* Build the Web Server Micro API
|
|
37
|
+
* @returns IWebServerMicroAPI
|
|
38
|
+
* @public API
|
|
39
|
+
*/
|
|
40
|
+
build(): IWebServerMicroAPI;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Interface for the Build Method of the Web Server Micro API adapter
|
|
44
|
+
*/
|
|
45
|
+
export interface IWebServerMicroAPI {
|
|
46
|
+
/**
|
|
47
|
+
* Get the Middleware instance
|
|
48
|
+
* @returns IMiddleware
|
|
49
|
+
* @public API
|
|
50
|
+
*/
|
|
51
|
+
get Middleware(): IMiddleware;
|
|
52
|
+
/**
|
|
53
|
+
* Get the Route instance
|
|
54
|
+
* @returns IRoute
|
|
55
|
+
* @public API
|
|
56
|
+
*/
|
|
57
|
+
get Route(): IRoute;
|
|
58
|
+
/**
|
|
59
|
+
* Listen for incoming requests
|
|
60
|
+
* @param port - The port to listen on
|
|
61
|
+
* @param appInfo - Information about the application
|
|
62
|
+
* @public API
|
|
63
|
+
*/
|
|
64
|
+
listen(port: number | string, appInfo?: IConsoleMessage): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a new instance of the Express Micro API adapter
|
|
68
|
+
* @param config - Configuration options
|
|
69
|
+
* @returns ICreateMicroAPI
|
|
70
|
+
* @public API
|
|
71
|
+
*/
|
|
72
|
+
export declare function createMicroAPI(config?: MicroAPIConfig): ICreateMicroAPI;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker States
|
|
3
|
+
*/
|
|
4
|
+
export type CircuitState = "CLOSED" | "OPEN" | "HALF_OPEN";
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for CircuitBreaker
|
|
7
|
+
*/
|
|
8
|
+
export interface CircuitBreakerConfig {
|
|
9
|
+
/** Number of failures before opening the circuit (default: 5) */
|
|
10
|
+
failureThreshold?: number;
|
|
11
|
+
/** Number of successes in half-open state to close circuit (default: 2) */
|
|
12
|
+
successThreshold?: number;
|
|
13
|
+
/** Time in ms before attempting to close an open circuit (default: 60000) */
|
|
14
|
+
timeout?: number;
|
|
15
|
+
/** Monitoring period in ms for failure counting (default: 10000) */
|
|
16
|
+
monitoringPeriod?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Circuit Breaker Statistics
|
|
20
|
+
*/
|
|
21
|
+
export interface CircuitBreakerStats {
|
|
22
|
+
state: CircuitState;
|
|
23
|
+
failures: number;
|
|
24
|
+
successes: number;
|
|
25
|
+
totalCalls: number;
|
|
26
|
+
lastFailure?: Date;
|
|
27
|
+
lastSuccess?: Date;
|
|
28
|
+
openedAt?: Date;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* CircuitBreaker - Protect against cascading failures in distributed systems.
|
|
32
|
+
*
|
|
33
|
+
* States:
|
|
34
|
+
* - CLOSED: Normal operation, requests pass through
|
|
35
|
+
* - OPEN: Requests fail immediately without calling the service
|
|
36
|
+
* - HALF_OPEN: Limited requests pass through to test if service recovered
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const circuitBreaker = new CircuitBreaker({
|
|
41
|
+
* failureThreshold: 5,
|
|
42
|
+
* timeout: 60000,
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* app.Route.get("/external-api", async (req, res) => {
|
|
46
|
+
* try {
|
|
47
|
+
* const result = await circuitBreaker.execute(async () => {
|
|
48
|
+
* return await fetch("https://external-api.com/data");
|
|
49
|
+
* });
|
|
50
|
+
* res.json(await result.json());
|
|
51
|
+
* } catch (error) {
|
|
52
|
+
* if (error.message === "Circuit breaker is OPEN") {
|
|
53
|
+
* res.status(503).json({ error: "Service temporarily unavailable" });
|
|
54
|
+
* } else {
|
|
55
|
+
* res.status(500).json({ error: error.message });
|
|
56
|
+
* }
|
|
57
|
+
* }
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class CircuitBreaker {
|
|
62
|
+
private state;
|
|
63
|
+
private failures;
|
|
64
|
+
private successes;
|
|
65
|
+
private totalSuccesses;
|
|
66
|
+
private totalCalls;
|
|
67
|
+
private lastFailure?;
|
|
68
|
+
private lastSuccess?;
|
|
69
|
+
private openedAt?;
|
|
70
|
+
private recentFailures;
|
|
71
|
+
private config;
|
|
72
|
+
constructor(config?: CircuitBreakerConfig);
|
|
73
|
+
/**
|
|
74
|
+
* Execute a function with circuit breaker protection
|
|
75
|
+
* @param fn - Function to execute
|
|
76
|
+
* @throws Error if circuit is open
|
|
77
|
+
*/
|
|
78
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
79
|
+
/**
|
|
80
|
+
* Get current circuit state
|
|
81
|
+
*/
|
|
82
|
+
getState(): CircuitState;
|
|
83
|
+
/**
|
|
84
|
+
* Get circuit breaker statistics
|
|
85
|
+
*/
|
|
86
|
+
getStats(): CircuitBreakerStats;
|
|
87
|
+
/**
|
|
88
|
+
* Manually reset the circuit breaker
|
|
89
|
+
*/
|
|
90
|
+
reset(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Manually open the circuit
|
|
93
|
+
*/
|
|
94
|
+
open(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Handle successful call
|
|
97
|
+
*/
|
|
98
|
+
private onSuccess;
|
|
99
|
+
/**
|
|
100
|
+
* Handle failed call
|
|
101
|
+
*/
|
|
102
|
+
private onFailure;
|
|
103
|
+
/**
|
|
104
|
+
* Check if timeout has passed and we should try to reset
|
|
105
|
+
*/
|
|
106
|
+
private shouldAttemptReset;
|
|
107
|
+
/**
|
|
108
|
+
* Remove failures outside the monitoring period
|
|
109
|
+
*/
|
|
110
|
+
private cleanupRecentFailures;
|
|
111
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Gateway Utilities for ExpressoTS Micro Template
|
|
3
|
+
*/
|
|
4
|
+
export { CircuitBreaker, type CircuitBreakerConfig, type CircuitBreakerStats, type CircuitState, } from "./circuit-breaker.js";
|
|
5
|
+
export { ServiceProxy, createProxy, type ServiceProxyConfig } from "./service-proxy.js";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from "express";
|
|
2
|
+
import { CircuitBreaker, CircuitBreakerConfig } from "./circuit-breaker.js";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for ServiceProxy
|
|
5
|
+
*/
|
|
6
|
+
export interface ServiceProxyConfig {
|
|
7
|
+
/** Target service URL */
|
|
8
|
+
target: string;
|
|
9
|
+
/** Request timeout in ms (default: 30000) */
|
|
10
|
+
timeout?: number;
|
|
11
|
+
/** Number of retries on failure (default: 0) */
|
|
12
|
+
retries?: number;
|
|
13
|
+
/** Additional headers to add to proxied requests */
|
|
14
|
+
headers?: Record<string, string>;
|
|
15
|
+
/** Path rewrite function */
|
|
16
|
+
pathRewrite?: (path: string) => string;
|
|
17
|
+
/** Enable circuit breaker (default: false) */
|
|
18
|
+
circuitBreaker?: boolean | CircuitBreakerConfig;
|
|
19
|
+
/** Log requests (default: false) */
|
|
20
|
+
debug?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* ServiceProxy - Proxy requests to other microservices.
|
|
24
|
+
*
|
|
25
|
+
* Features:
|
|
26
|
+
* - Automatic request forwarding
|
|
27
|
+
* - Path rewriting
|
|
28
|
+
* - Custom headers
|
|
29
|
+
* - Request timeout
|
|
30
|
+
* - Retry support
|
|
31
|
+
* - Optional circuit breaker integration
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Proxy to user service
|
|
36
|
+
* const userProxy = createProxy({
|
|
37
|
+
* target: "http://user-service:3001",
|
|
38
|
+
* pathRewrite: (path) => path.replace("/api/users", ""),
|
|
39
|
+
* timeout: 5000,
|
|
40
|
+
* retries: 3,
|
|
41
|
+
* circuitBreaker: true,
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* app.Route.get("/api/users/*", userProxy.handler());
|
|
45
|
+
* app.Route.post("/api/users/*", userProxy.handler());
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare class ServiceProxy {
|
|
49
|
+
private config;
|
|
50
|
+
constructor(config: ServiceProxyConfig);
|
|
51
|
+
/**
|
|
52
|
+
* Create an Express handler for proxying requests
|
|
53
|
+
*/
|
|
54
|
+
handler(): (req: Request, res: Response, next: NextFunction) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Proxy a request to the target service
|
|
57
|
+
*/
|
|
58
|
+
private proxyRequest;
|
|
59
|
+
/**
|
|
60
|
+
* Execute request with retry logic
|
|
61
|
+
*/
|
|
62
|
+
private executeWithRetry;
|
|
63
|
+
/**
|
|
64
|
+
* Execute a single request
|
|
65
|
+
*/
|
|
66
|
+
private executeRequest;
|
|
67
|
+
/**
|
|
68
|
+
* Extract relevant headers from incoming request
|
|
69
|
+
*/
|
|
70
|
+
private extractHeaders;
|
|
71
|
+
/**
|
|
72
|
+
* Delay helper
|
|
73
|
+
*/
|
|
74
|
+
private delay;
|
|
75
|
+
/**
|
|
76
|
+
* Get circuit breaker stats (if enabled)
|
|
77
|
+
*/
|
|
78
|
+
getCircuitBreakerStats(): ReturnType<CircuitBreaker["getStats"]> | undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a new service proxy
|
|
82
|
+
*/
|
|
83
|
+
export declare function createProxy(config: ServiceProxyConfig): ServiceProxy;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { micro, type MicroApp, type MicroConfig } from "./micro.js";
|
|
2
|
+
export * from "./gateway/index.js";
|
|
3
|
+
export * from "./service-mesh/index.js";
|
|
4
|
+
export * from "./serverless/index.js";
|
|
5
|
+
export * from "./queue/index.js";
|
|
6
|
+
/** @deprecated Use micro() instead */
|
|
7
|
+
export { createMicroAPI, MicroAPIConfig } from "./application-express-micro.js";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { IConsoleMessage } from "@expressots/shared";
|
|
2
|
+
import express from "express";
|
|
3
|
+
import { Server } from "http";
|
|
4
|
+
/**
|
|
5
|
+
* Minimal configuration for micro API
|
|
6
|
+
* @public API
|
|
7
|
+
*/
|
|
8
|
+
export interface MicroConfig {
|
|
9
|
+
/** Disable automatic JSON parsing (default: true) */
|
|
10
|
+
autoParseJson?: boolean;
|
|
11
|
+
/** Global route prefix (e.g., "/api") */
|
|
12
|
+
globalPrefix?: string;
|
|
13
|
+
/** Show startup banner (default: true) */
|
|
14
|
+
showBanner?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Route handler that can return a value or use res directly
|
|
18
|
+
*/
|
|
19
|
+
type RouteHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => unknown | Promise<unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* Middleware type (Express-compatible)
|
|
22
|
+
*/
|
|
23
|
+
type Middleware = express.RequestHandler | express.ErrorRequestHandler;
|
|
24
|
+
/**
|
|
25
|
+
* Pure simplicity micro API interface
|
|
26
|
+
* @public API
|
|
27
|
+
*/
|
|
28
|
+
export interface MicroApp {
|
|
29
|
+
/** Register a GET route */
|
|
30
|
+
get(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
|
|
31
|
+
/** Register a POST route */
|
|
32
|
+
post(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
|
|
33
|
+
/** Register a PUT route */
|
|
34
|
+
put(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
|
|
35
|
+
/** Register a PATCH route */
|
|
36
|
+
patch(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
|
|
37
|
+
/** Register a DELETE route */
|
|
38
|
+
delete(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
|
|
39
|
+
/** Add global middleware */
|
|
40
|
+
use(...middleware: Array<Middleware>): this;
|
|
41
|
+
use(path: string, ...middleware: Array<Middleware>): this;
|
|
42
|
+
/** Set custom error handler */
|
|
43
|
+
setErrorHandler(handler: express.ErrorRequestHandler): this;
|
|
44
|
+
/** Start listening for requests */
|
|
45
|
+
listen(port: number | string, appInfo?: IConsoleMessage): Promise<void>;
|
|
46
|
+
/** Get the underlying HTTP server (available after listen) */
|
|
47
|
+
getHttpServer(): Server;
|
|
48
|
+
/** Get the Express app instance (for advanced use) */
|
|
49
|
+
getApp(): express.Application;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a new micro API instance
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const app = micro();
|
|
57
|
+
* app.get("/", () => "Hello World");
|
|
58
|
+
* app.listen(3000);
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @param config - Optional configuration
|
|
62
|
+
* @returns MicroApp instance
|
|
63
|
+
* @public API
|
|
64
|
+
*/
|
|
65
|
+
export declare function micro(config?: MicroConfig): MicroApp;
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue Integration for ExpressoTS Micro Template
|
|
3
|
+
*/
|
|
4
|
+
export { type QueueMessage, type MessageHandler, type QueueConsumerConfig, type IQueueConsumer, type QueueStats, } from "./queue.interface.js";
|
|
5
|
+
export { RabbitMQConsumer, type RabbitMQConfig } from "./rabbitmq-consumer.js";
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message format for queue consumers
|
|
3
|
+
*/
|
|
4
|
+
export interface QueueMessage<T = unknown> {
|
|
5
|
+
/** Unique message ID */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Message body */
|
|
8
|
+
body: T;
|
|
9
|
+
/** Message headers/attributes */
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
/** Timestamp when message was published */
|
|
12
|
+
timestamp: Date;
|
|
13
|
+
/** Number of times message has been received */
|
|
14
|
+
receiveCount?: number;
|
|
15
|
+
/** Original raw message */
|
|
16
|
+
raw?: unknown;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handler function for processing queue messages
|
|
20
|
+
*/
|
|
21
|
+
export type MessageHandler<T = unknown> = (message: QueueMessage<T>) => Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Base configuration for queue consumers
|
|
24
|
+
*/
|
|
25
|
+
export interface QueueConsumerConfig {
|
|
26
|
+
/** Queue/topic name */
|
|
27
|
+
queue: string;
|
|
28
|
+
/** Connection URL */
|
|
29
|
+
url?: string;
|
|
30
|
+
/** Number of concurrent message handlers (default: 1) */
|
|
31
|
+
concurrency?: number;
|
|
32
|
+
/** Auto-acknowledge messages (default: true) */
|
|
33
|
+
autoAck?: boolean;
|
|
34
|
+
/** Enable debug logging (default: false) */
|
|
35
|
+
debug?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Queue consumer interface
|
|
39
|
+
*/
|
|
40
|
+
export interface IQueueConsumer<T = unknown> {
|
|
41
|
+
/** Start consuming messages */
|
|
42
|
+
consume(handler: MessageHandler<T>): Promise<void>;
|
|
43
|
+
/** Publish a message to the queue */
|
|
44
|
+
publish(message: T): Promise<void>;
|
|
45
|
+
/** Stop consuming and close connection */
|
|
46
|
+
close(): Promise<void>;
|
|
47
|
+
/** Get consumer stats */
|
|
48
|
+
getStats(): QueueStats;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Queue statistics
|
|
52
|
+
*/
|
|
53
|
+
export interface QueueStats {
|
|
54
|
+
messagesReceived: number;
|
|
55
|
+
messagesProcessed: number;
|
|
56
|
+
messagesFailed: number;
|
|
57
|
+
messagesPublished: number;
|
|
58
|
+
isConnected: boolean;
|
|
59
|
+
lastMessageAt?: Date;
|
|
60
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { IQueueConsumer, MessageHandler, QueueConsumerConfig, QueueStats } from "./queue.interface.js";
|
|
2
|
+
/**
|
|
3
|
+
* RabbitMQ-specific configuration
|
|
4
|
+
*/
|
|
5
|
+
export interface RabbitMQConfig extends QueueConsumerConfig {
|
|
6
|
+
/** RabbitMQ connection URL */
|
|
7
|
+
url: string;
|
|
8
|
+
/** Exchange name (optional) */
|
|
9
|
+
exchange?: string;
|
|
10
|
+
/** Exchange type (default: "direct") */
|
|
11
|
+
exchangeType?: "direct" | "topic" | "fanout" | "headers";
|
|
12
|
+
/** Routing key for publishing */
|
|
13
|
+
routingKey?: string;
|
|
14
|
+
/** Prefetch count (default: 1) */
|
|
15
|
+
prefetch?: number;
|
|
16
|
+
/** Enable durable queue (default: true) */
|
|
17
|
+
durable?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* RabbitMQ Consumer - Message queue consumer for RabbitMQ.
|
|
21
|
+
*
|
|
22
|
+
* Features:
|
|
23
|
+
* - Message consumption with handlers
|
|
24
|
+
* - Message publishing
|
|
25
|
+
* - Exchange support
|
|
26
|
+
* - Automatic reconnection
|
|
27
|
+
* - Prefetch control
|
|
28
|
+
* - Dead letter queue support
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const orderQueue = new RabbitMQConsumer({
|
|
33
|
+
* url: process.env.RABBITMQ_URL,
|
|
34
|
+
* queue: "orders",
|
|
35
|
+
* prefetch: 10,
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Start consuming
|
|
39
|
+
* await orderQueue.consume(async (message) => {
|
|
40
|
+
* const order = message.body;
|
|
41
|
+
* console.log("Processing order:", order.id);
|
|
42
|
+
* await processOrder(order);
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* // Publish from HTTP endpoint
|
|
46
|
+
* app.Route.post("/orders", async (req, res) => {
|
|
47
|
+
* await orderQueue.publish(req.body);
|
|
48
|
+
* res.status(202).json({ message: "Order queued" });
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Graceful shutdown
|
|
52
|
+
* process.on("SIGTERM", async () => {
|
|
53
|
+
* await orderQueue.close();
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* Note: This implementation requires the 'amqplib' package.
|
|
58
|
+
* Install with: npm install amqplib @types/amqplib
|
|
59
|
+
*/
|
|
60
|
+
export declare class RabbitMQConsumer<T = unknown> implements IQueueConsumer<T> {
|
|
61
|
+
private connection;
|
|
62
|
+
private channel;
|
|
63
|
+
private config;
|
|
64
|
+
private stats;
|
|
65
|
+
constructor(config: RabbitMQConfig);
|
|
66
|
+
/**
|
|
67
|
+
* Connect to RabbitMQ
|
|
68
|
+
*/
|
|
69
|
+
private connect;
|
|
70
|
+
/**
|
|
71
|
+
* Start consuming messages
|
|
72
|
+
*/
|
|
73
|
+
consume(handler: MessageHandler<T>): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Publish a message to the queue
|
|
76
|
+
*/
|
|
77
|
+
publish(message: T): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Close the connection
|
|
80
|
+
*/
|
|
81
|
+
close(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Get consumer statistics
|
|
84
|
+
*/
|
|
85
|
+
getStats(): QueueStats;
|
|
86
|
+
}
|