@expressots/adapter-express 3.0.0 → 4.0.0-preview.3
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/LICENSE.md +21 -21
- package/README.md +61 -118
- package/lib/CHANGELOG.md +36 -5
- package/lib/README.md +61 -118
- package/lib/cjs/adapter-express/application-express.base.js +3 -1
- package/lib/cjs/adapter-express/application-express.js +1405 -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 +225 -59
- 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 +827 -64
- 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/path-pattern-compat.js +129 -0
- package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
- package/lib/cjs/adapter-express/express-utils/route-constraints.js +104 -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 +8 -38
- 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 +272 -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 +10 -0
- package/lib/cjs/adapter-express/studio/studio-integration.js +267 -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 +316 -33
- 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/path-pattern-compat.d.ts +66 -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 +98 -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 +83 -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 +170 -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 +1656 -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 +604 -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 +1047 -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/path-pattern-compat.js +125 -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 +100 -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 +157 -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 +266 -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 +236 -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 +453 -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/path-pattern-compat.d.ts +66 -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 +98 -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 +83 -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 +170 -0
- package/lib/esm/types/index.d.ts +1 -0
- package/lib/package.json +170 -146
- package/package.json +170 -146
- package/lib/cjs/di/di.interfaces.js +0 -10
- package/lib/cjs/types/di/di.interfaces.d.ts +0 -289
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Lambda Adapter for ExpressoTS Micro API
|
|
3
|
+
*
|
|
4
|
+
* Converts Lambda events to Express requests and responses.
|
|
5
|
+
*/
|
|
6
|
+
import { Application } from "express";
|
|
7
|
+
/**
|
|
8
|
+
* AWS Lambda Event (simplified)
|
|
9
|
+
*/
|
|
10
|
+
export interface LambdaEvent {
|
|
11
|
+
httpMethod: string;
|
|
12
|
+
path: string;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
queryStringParameters?: Record<string, string>;
|
|
15
|
+
body?: string;
|
|
16
|
+
isBase64Encoded?: boolean;
|
|
17
|
+
requestContext?: {
|
|
18
|
+
requestId?: string;
|
|
19
|
+
stage?: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* AWS Lambda Context
|
|
24
|
+
*/
|
|
25
|
+
export interface LambdaContext {
|
|
26
|
+
awsRequestId: string;
|
|
27
|
+
functionName: string;
|
|
28
|
+
functionVersion: string;
|
|
29
|
+
invokedFunctionArn: string;
|
|
30
|
+
memoryLimitInMB: string;
|
|
31
|
+
logGroupName: string;
|
|
32
|
+
logStreamName: string;
|
|
33
|
+
getRemainingTimeInMillis(): number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* AWS Lambda Response
|
|
37
|
+
*/
|
|
38
|
+
export interface LambdaResponse {
|
|
39
|
+
statusCode: number;
|
|
40
|
+
headers: Record<string, string>;
|
|
41
|
+
body: string;
|
|
42
|
+
isBase64Encoded: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* AWS Lambda Handler Type
|
|
46
|
+
*/
|
|
47
|
+
export type LambdaHandler = (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* AWS Lambda Adapter Configuration
|
|
50
|
+
*/
|
|
51
|
+
export interface LambdaAdapterConfig {
|
|
52
|
+
/** Binary content types (will be base64 encoded) */
|
|
53
|
+
binaryContentTypes?: Array<string>;
|
|
54
|
+
/** Enable debug logging */
|
|
55
|
+
debug?: boolean;
|
|
56
|
+
/** Request timeout in ms (default: 30000) */
|
|
57
|
+
timeout?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an AWS Lambda handler from an Express app
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* import { createMicroAPI, awsLambdaAdapter } from "@expressots/adapter-express";
|
|
65
|
+
*
|
|
66
|
+
* const microAPI = createMicroAPI();
|
|
67
|
+
* const app = microAPI.build();
|
|
68
|
+
*
|
|
69
|
+
* app.Middleware.parse();
|
|
70
|
+
* app.Route.get("/", (req, res) => res.json({ message: "Hello Lambda!" }));
|
|
71
|
+
*
|
|
72
|
+
* export const handler = awsLambdaAdapter(app);
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function awsLambdaAdapter(app: {
|
|
76
|
+
getExpressApp?: () => Application;
|
|
77
|
+
} | Application, config?: LambdaAdapterConfig): LambdaHandler;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare Workers Adapter for ExpressoTS Micro API
|
|
3
|
+
*
|
|
4
|
+
* Converts Cloudflare Workers requests to Express format.
|
|
5
|
+
* Note: This adapter requires a Cloudflare Workers-compatible Express implementation
|
|
6
|
+
* or uses a fetch-based approach.
|
|
7
|
+
*/
|
|
8
|
+
import { Application } from "express";
|
|
9
|
+
/**
|
|
10
|
+
* Cloudflare Workers Environment bindings
|
|
11
|
+
*/
|
|
12
|
+
export interface CloudflareEnv {
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Cloudflare Workers Execution Context
|
|
17
|
+
*/
|
|
18
|
+
export interface CloudflareContext {
|
|
19
|
+
waitUntil(promise: Promise<unknown>): void;
|
|
20
|
+
passThroughOnException(): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Cloudflare Workers Handler Type
|
|
24
|
+
*/
|
|
25
|
+
export type CloudflareHandler = {
|
|
26
|
+
fetch(request: globalThis.Request, env: CloudflareEnv, ctx: CloudflareContext): Promise<globalThis.Response>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Cloudflare Adapter Configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface CloudflareAdapterConfig {
|
|
32
|
+
/** Enable debug logging */
|
|
33
|
+
debug?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a Cloudflare Workers handler from an Express app
|
|
37
|
+
*
|
|
38
|
+
* Note: Full Express compatibility in Cloudflare Workers requires
|
|
39
|
+
* additional setup. This adapter provides a basic implementation.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // src/worker.ts
|
|
44
|
+
* import { createMicroAPI, cloudflareAdapter } from "@expressots/adapter-express";
|
|
45
|
+
*
|
|
46
|
+
* const microAPI = createMicroAPI();
|
|
47
|
+
* const app = microAPI.build();
|
|
48
|
+
*
|
|
49
|
+
* app.Middleware.parse();
|
|
50
|
+
* app.Route.get("/", (req, res) => res.json({ message: "Hello Workers!" }));
|
|
51
|
+
*
|
|
52
|
+
* export default cloudflareAdapter(app);
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* wrangler.toml:
|
|
56
|
+
* ```toml
|
|
57
|
+
* name = "my-worker"
|
|
58
|
+
* main = "src/worker.ts"
|
|
59
|
+
* compatibility_date = "2024-01-01"
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function cloudflareAdapter(app: {
|
|
63
|
+
getExpressApp?: () => Application;
|
|
64
|
+
} | Application, config?: CloudflareAdapterConfig): CloudflareHandler;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Adapters for ExpressoTS Micro Template
|
|
3
|
+
*/
|
|
4
|
+
export { awsLambdaAdapter, type LambdaEvent, type LambdaContext, type LambdaResponse, type LambdaHandler, type LambdaAdapterConfig, } from "./aws-lambda.adapter.js";
|
|
5
|
+
export { vercelAdapter, type VercelRequest, type VercelResponse, type VercelHandler, type VercelAdapterConfig, } from "./vercel.adapter.js";
|
|
6
|
+
export { cloudflareAdapter, type CloudflareEnv, type CloudflareContext, type CloudflareHandler, type CloudflareAdapterConfig, } from "./cloudflare.adapter.js";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Adapter for ExpressoTS Micro API
|
|
3
|
+
*
|
|
4
|
+
* Converts Vercel serverless function requests to Express format.
|
|
5
|
+
*/
|
|
6
|
+
import { Application, Request, Response } from "express";
|
|
7
|
+
/**
|
|
8
|
+
* Vercel Request type - extends Express Request with Vercel-specific properties
|
|
9
|
+
*/
|
|
10
|
+
export interface VercelRequest extends Request {
|
|
11
|
+
query: Record<string, string | Array<string>>;
|
|
12
|
+
cookies: Record<string, string>;
|
|
13
|
+
body: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Vercel Response type - use Express Response directly to avoid type conflicts
|
|
17
|
+
*/
|
|
18
|
+
export type VercelResponse = Response;
|
|
19
|
+
/**
|
|
20
|
+
* Vercel Handler Type
|
|
21
|
+
*/
|
|
22
|
+
export type VercelHandler = (req: VercelRequest, res: VercelResponse) => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Vercel Adapter Configuration
|
|
25
|
+
*/
|
|
26
|
+
export interface VercelAdapterConfig {
|
|
27
|
+
/** Enable debug logging */
|
|
28
|
+
debug?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a Vercel serverless handler from an Express app
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // api/index.ts
|
|
36
|
+
* import { createMicroAPI, vercelAdapter } from "@expressots/adapter-express";
|
|
37
|
+
*
|
|
38
|
+
* const microAPI = createMicroAPI();
|
|
39
|
+
* const app = microAPI.build();
|
|
40
|
+
*
|
|
41
|
+
* app.Middleware.parse();
|
|
42
|
+
* app.Route.get("/api", (req, res) => res.json({ message: "Hello Vercel!" }));
|
|
43
|
+
*
|
|
44
|
+
* export default vercelAdapter(app);
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* vercel.json:
|
|
48
|
+
* ```json
|
|
49
|
+
* {
|
|
50
|
+
* "rewrites": [{ "source": "/api/(.*)", "destination": "/api" }]
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function vercelAdapter(app: {
|
|
55
|
+
getExpressApp?: () => Application;
|
|
56
|
+
} | Application, config?: VercelAdapterConfig): VercelHandler;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Mesh Utilities for ExpressoTS Micro Template
|
|
3
|
+
*/
|
|
4
|
+
export { ServiceClient, type ServiceClientConfig, type ServiceCallOptions, } from "./service-client.js";
|
|
5
|
+
export { ServiceDiscovery, type ServiceDiscoveryConfig, type ServiceInstance, } from "./service-discovery.js";
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { CircuitBreaker, CircuitBreakerConfig } from "../gateway/circuit-breaker.js";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for ServiceClient
|
|
4
|
+
*/
|
|
5
|
+
export interface ServiceClientConfig {
|
|
6
|
+
/** Service name for logging/metrics */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Base URL of the service */
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
/** Request timeout in ms (default: 5000) */
|
|
11
|
+
timeout?: number;
|
|
12
|
+
/** Number of retries on failure (default: 3) */
|
|
13
|
+
retries?: number;
|
|
14
|
+
/** Enable circuit breaker (default: true) */
|
|
15
|
+
circuitBreaker?: boolean | CircuitBreakerConfig;
|
|
16
|
+
/** Default headers to send with all requests */
|
|
17
|
+
headers?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Options for individual service calls
|
|
21
|
+
*/
|
|
22
|
+
export interface ServiceCallOptions {
|
|
23
|
+
/** HTTP method (default: "GET") */
|
|
24
|
+
method?: string;
|
|
25
|
+
/** Request headers */
|
|
26
|
+
headers?: Record<string, string>;
|
|
27
|
+
/** Request body (will be JSON stringified) */
|
|
28
|
+
body?: unknown;
|
|
29
|
+
/** Query parameters */
|
|
30
|
+
params?: Record<string, string>;
|
|
31
|
+
/** Override timeout for this request */
|
|
32
|
+
timeout?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* ServiceClient - HTTP client for service-to-service communication.
|
|
36
|
+
*
|
|
37
|
+
* Features:
|
|
38
|
+
* - Automatic retries with exponential backoff
|
|
39
|
+
* - Circuit breaker integration
|
|
40
|
+
* - Request timeout
|
|
41
|
+
* - JSON request/response handling
|
|
42
|
+
* - Trace context propagation
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const userService = new ServiceClient({
|
|
47
|
+
* name: "user-service",
|
|
48
|
+
* baseUrl: "http://user-service:3001",
|
|
49
|
+
* timeout: 5000,
|
|
50
|
+
* retries: 3,
|
|
51
|
+
* circuitBreaker: true,
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* // GET request
|
|
55
|
+
* const user = await userService.call<User>("/users/123");
|
|
56
|
+
*
|
|
57
|
+
* // POST request
|
|
58
|
+
* const newUser = await userService.call<User>("/users", {
|
|
59
|
+
* method: "POST",
|
|
60
|
+
* body: { name: "John", email: "john@example.com" },
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // With query parameters
|
|
64
|
+
* const users = await userService.call<User[]>("/users", {
|
|
65
|
+
* params: { page: "1", limit: "10" },
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare class ServiceClient {
|
|
70
|
+
private config;
|
|
71
|
+
private stats;
|
|
72
|
+
constructor(config: ServiceClientConfig);
|
|
73
|
+
/**
|
|
74
|
+
* Make a request to the service
|
|
75
|
+
* @param path - Request path
|
|
76
|
+
* @param options - Request options
|
|
77
|
+
*/
|
|
78
|
+
call<T>(path: string, options?: ServiceCallOptions): Promise<T>;
|
|
79
|
+
/**
|
|
80
|
+
* GET request helper
|
|
81
|
+
*/
|
|
82
|
+
get<T>(path: string, options?: Omit<ServiceCallOptions, "method" | "body">): Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* POST request helper
|
|
85
|
+
*/
|
|
86
|
+
post<T>(path: string, body?: unknown, options?: Omit<ServiceCallOptions, "method" | "body">): Promise<T>;
|
|
87
|
+
/**
|
|
88
|
+
* PUT request helper
|
|
89
|
+
*/
|
|
90
|
+
put<T>(path: string, body?: unknown, options?: Omit<ServiceCallOptions, "method" | "body">): Promise<T>;
|
|
91
|
+
/**
|
|
92
|
+
* PATCH request helper
|
|
93
|
+
*/
|
|
94
|
+
patch<T>(path: string, body?: unknown, options?: Omit<ServiceCallOptions, "method" | "body">): Promise<T>;
|
|
95
|
+
/**
|
|
96
|
+
* DELETE request helper
|
|
97
|
+
*/
|
|
98
|
+
delete<T>(path: string, options?: Omit<ServiceCallOptions, "method" | "body">): Promise<T>;
|
|
99
|
+
/**
|
|
100
|
+
* Get service stats
|
|
101
|
+
*/
|
|
102
|
+
getStats(): {
|
|
103
|
+
name: string;
|
|
104
|
+
baseUrl: string;
|
|
105
|
+
totalRequests: number;
|
|
106
|
+
successfulRequests: number;
|
|
107
|
+
failedRequests: number;
|
|
108
|
+
circuitBreaker?: ReturnType<CircuitBreaker["getStats"]>;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Execute request with retry logic
|
|
112
|
+
*/
|
|
113
|
+
private executeWithRetry;
|
|
114
|
+
/**
|
|
115
|
+
* Execute a single request
|
|
116
|
+
*/
|
|
117
|
+
private executeRequest;
|
|
118
|
+
/**
|
|
119
|
+
* Delay helper
|
|
120
|
+
*/
|
|
121
|
+
private delay;
|
|
122
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service instance information
|
|
3
|
+
*/
|
|
4
|
+
export interface ServiceInstance {
|
|
5
|
+
/** Unique instance ID */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Service name */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Host address */
|
|
10
|
+
host: string;
|
|
11
|
+
/** Port number */
|
|
12
|
+
port: number;
|
|
13
|
+
/** Service metadata */
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
/** Health status */
|
|
16
|
+
health: "healthy" | "unhealthy";
|
|
17
|
+
/** Last health check timestamp */
|
|
18
|
+
lastCheck: Date;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for ServiceDiscovery
|
|
22
|
+
*/
|
|
23
|
+
export interface ServiceDiscoveryConfig {
|
|
24
|
+
/** Discovery type: "consul", "etcd", or "static" */
|
|
25
|
+
type: "consul" | "etcd" | "static";
|
|
26
|
+
/** Discovery service endpoint (for consul/etcd) */
|
|
27
|
+
endpoint?: string;
|
|
28
|
+
/** Refresh interval in ms (default: 30000) */
|
|
29
|
+
refreshInterval?: number;
|
|
30
|
+
/** Enable debug logging (default: false) */
|
|
31
|
+
debug?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* ServiceDiscovery - Service discovery for microservices.
|
|
35
|
+
*
|
|
36
|
+
* Features:
|
|
37
|
+
* - Static service registration
|
|
38
|
+
* - Consul integration
|
|
39
|
+
* - etcd integration
|
|
40
|
+
* - Automatic service refresh
|
|
41
|
+
* - Round-robin load balancing
|
|
42
|
+
* - Health-based filtering
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Static service discovery
|
|
47
|
+
* const discovery = new ServiceDiscovery({ type: "static" });
|
|
48
|
+
*
|
|
49
|
+
* discovery.registerService({
|
|
50
|
+
* id: "user-service-1",
|
|
51
|
+
* name: "user-service",
|
|
52
|
+
* host: "user-service",
|
|
53
|
+
* port: 3001,
|
|
54
|
+
* health: "healthy",
|
|
55
|
+
* lastCheck: new Date(),
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* // Get a healthy instance
|
|
59
|
+
* const instance = discovery.getService("user-service");
|
|
60
|
+
* const client = new ServiceClient({
|
|
61
|
+
* name: "user-service",
|
|
62
|
+
* baseUrl: `http://${instance.host}:${instance.port}`,
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* // Or with Consul
|
|
66
|
+
* const discovery = new ServiceDiscovery({
|
|
67
|
+
* type: "consul",
|
|
68
|
+
* endpoint: "http://consul:8500",
|
|
69
|
+
* });
|
|
70
|
+
* await discovery.initialize();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare class ServiceDiscovery {
|
|
74
|
+
private services;
|
|
75
|
+
private roundRobinIndex;
|
|
76
|
+
private refreshTimer?;
|
|
77
|
+
private config;
|
|
78
|
+
constructor(config: ServiceDiscoveryConfig);
|
|
79
|
+
/**
|
|
80
|
+
* Initialize the service discovery
|
|
81
|
+
* For consul/etcd, this starts the refresh loop
|
|
82
|
+
*/
|
|
83
|
+
initialize(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Register a service instance (for static mode)
|
|
86
|
+
* @param service - Service instance to register
|
|
87
|
+
*/
|
|
88
|
+
registerService(service: ServiceInstance): void;
|
|
89
|
+
/**
|
|
90
|
+
* Deregister a service instance
|
|
91
|
+
* @param serviceName - Service name
|
|
92
|
+
* @param instanceId - Instance ID to remove
|
|
93
|
+
*/
|
|
94
|
+
deregisterService(serviceName: string, instanceId: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get a healthy instance of a service (round-robin)
|
|
97
|
+
* @param name - Service name
|
|
98
|
+
* @returns A healthy service instance or null
|
|
99
|
+
*/
|
|
100
|
+
getService(name: string): ServiceInstance | null;
|
|
101
|
+
/**
|
|
102
|
+
* Get all instances of a service
|
|
103
|
+
* @param name - Service name
|
|
104
|
+
* @param healthyOnly - Only return healthy instances (default: true)
|
|
105
|
+
*/
|
|
106
|
+
getServiceInstances(name: string, healthyOnly?: boolean): Array<ServiceInstance>;
|
|
107
|
+
/**
|
|
108
|
+
* Get all registered services
|
|
109
|
+
*/
|
|
110
|
+
getAllServices(): Map<string, Array<ServiceInstance>>;
|
|
111
|
+
/**
|
|
112
|
+
* List all registered service names
|
|
113
|
+
*/
|
|
114
|
+
listServices(): Array<string>;
|
|
115
|
+
/**
|
|
116
|
+
* Update health status of a service instance
|
|
117
|
+
* @param serviceName - Service name
|
|
118
|
+
* @param instanceId - Instance ID
|
|
119
|
+
* @param health - New health status
|
|
120
|
+
*/
|
|
121
|
+
updateHealth(serviceName: string, instanceId: string, health: "healthy" | "unhealthy"): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Get service statistics
|
|
124
|
+
*/
|
|
125
|
+
getStats(): Record<string, {
|
|
126
|
+
total: number;
|
|
127
|
+
healthy: number;
|
|
128
|
+
unhealthy: number;
|
|
129
|
+
}>;
|
|
130
|
+
/**
|
|
131
|
+
* Stop the service discovery
|
|
132
|
+
*/
|
|
133
|
+
stop(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Refresh service list from discovery backend
|
|
136
|
+
*/
|
|
137
|
+
private refresh;
|
|
138
|
+
/**
|
|
139
|
+
* Refresh from Consul
|
|
140
|
+
*/
|
|
141
|
+
private refreshFromConsul;
|
|
142
|
+
/**
|
|
143
|
+
* Get instances from Consul for a specific service
|
|
144
|
+
*/
|
|
145
|
+
private getConsulInstances;
|
|
146
|
+
/**
|
|
147
|
+
* Refresh from etcd
|
|
148
|
+
*/
|
|
149
|
+
private refreshFromEtcd;
|
|
150
|
+
}
|