@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,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
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file request-logging.middleware.ts
|
|
3
|
+
* @description HTTP request/response logging middleware with context enrichment
|
|
4
|
+
* @module @expressots/adapter-express
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Request ID generation/extraction
|
|
8
|
+
* - Request/response timing
|
|
9
|
+
* - Slow request detection
|
|
10
|
+
* - Configurable verbosity levels
|
|
11
|
+
* - Body logging with redaction support
|
|
12
|
+
*/
|
|
13
|
+
import { Request, Response, NextFunction } from "express";
|
|
14
|
+
import { Logger } from "@expressots/core";
|
|
15
|
+
/**
|
|
16
|
+
* Verbosity levels for request logging.
|
|
17
|
+
* @public API
|
|
18
|
+
*/
|
|
19
|
+
export type RequestLogVerbosity = "minimal" | "normal" | "detailed" | "debug";
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for request logging middleware.
|
|
22
|
+
* @public API
|
|
23
|
+
*/
|
|
24
|
+
export interface RequestLoggingConfig {
|
|
25
|
+
/** Verbosity level for request logs */
|
|
26
|
+
verbosity: RequestLogVerbosity;
|
|
27
|
+
/** Log request body (with redaction) */
|
|
28
|
+
logBody: boolean;
|
|
29
|
+
/** Log request headers */
|
|
30
|
+
logHeaders: boolean;
|
|
31
|
+
/** Log response body */
|
|
32
|
+
logResponseBody: boolean;
|
|
33
|
+
/** Threshold for slow request warning (ms) */
|
|
34
|
+
slowRequestThreshold: number;
|
|
35
|
+
/** Patterns to skip logging (e.g., health checks) */
|
|
36
|
+
skipPatterns: Array<RegExp>;
|
|
37
|
+
/** Custom header name for request ID */
|
|
38
|
+
requestIdHeader: string;
|
|
39
|
+
/** Custom header name for correlation ID (for distributed tracing) */
|
|
40
|
+
correlationIdHeader: string;
|
|
41
|
+
/** Include user agent in logs */
|
|
42
|
+
logUserAgent: boolean;
|
|
43
|
+
/** Include IP address in logs */
|
|
44
|
+
logIp: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Default request logging configuration.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getDefaultRequestLoggingConfig(): RequestLoggingConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Create request logging middleware.
|
|
52
|
+
* @param logger - Logger instance to use
|
|
53
|
+
* @param config - Optional configuration
|
|
54
|
+
* @returns Express middleware function
|
|
55
|
+
* @public API
|
|
56
|
+
*/
|
|
57
|
+
export declare function createRequestLoggingMiddleware(logger: Logger, config?: Partial<RequestLoggingConfig>): (req: Request, res: Response, next: NextFunction) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Express middleware that assigns a request ID to each request.
|
|
60
|
+
* Simpler alternative to full request logging.
|
|
61
|
+
* @param headerName - Header name for request ID (default: x-request-id)
|
|
62
|
+
* @returns Express middleware
|
|
63
|
+
* @public API
|
|
64
|
+
*/
|
|
65
|
+
export declare function requestIdMiddleware(headerName?: string): (req: Request, res: Response, next: NextFunction) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { initializeStudio, stopStudio, isStudioEnabled, getStudioAgent, reportStudioRuntimeInfo, } from "./studio-integration.js";
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Studio Integration - Auto-detects and integrates ExpressoTS Studio Agent
|
|
3
|
+
*
|
|
4
|
+
* This module provides automatic integration with @expressots/studio-agent
|
|
5
|
+
* when it's installed in the project. It enables request recording, tracing,
|
|
6
|
+
* and real-time monitoring without requiring manual setup.
|
|
7
|
+
*/
|
|
8
|
+
import type { Application, RequestHandler } from "express";
|
|
9
|
+
interface StudioAgentInstance {
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
stop(): Promise<void>;
|
|
12
|
+
createMiddleware(): RequestHandler;
|
|
13
|
+
scanRoutes(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Optional — older agents may not implement this. Used to push the
|
|
16
|
+
* actual listening port + boot duration once the host server is up.
|
|
17
|
+
*/
|
|
18
|
+
updateRuntimeInfo?(patch: {
|
|
19
|
+
appPort?: number;
|
|
20
|
+
globalPrefix?: string;
|
|
21
|
+
startupMs?: number;
|
|
22
|
+
interceptorCount?: number;
|
|
23
|
+
providerCount?: number;
|
|
24
|
+
middlewareCount?: number;
|
|
25
|
+
runtimeItems?: StudioRuntimeItems;
|
|
26
|
+
}): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Itemised runtime view forwarded to the Studio Agent. Populated from
|
|
30
|
+
* DI metadata at boot — surfaces framework-registered items the agent's
|
|
31
|
+
* static file scanner can't see (e.g. built-in providers, interceptors
|
|
32
|
+
* registered via `@Interceptor()` on framework classes).
|
|
33
|
+
*
|
|
34
|
+
* Mirrors `RuntimeItems` in `@expressots/studio-agent` deliberately so
|
|
35
|
+
* the adapter doesn't need to import from the studio package (which is
|
|
36
|
+
* an optional peer dependency).
|
|
37
|
+
*/
|
|
38
|
+
export interface StudioRuntimeItems {
|
|
39
|
+
providers?: Array<{
|
|
40
|
+
name: string;
|
|
41
|
+
source?: string;
|
|
42
|
+
}>;
|
|
43
|
+
interceptors?: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
priority?: number;
|
|
46
|
+
source?: string;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
interface StudioIntegrationConfig {
|
|
50
|
+
enabled?: boolean;
|
|
51
|
+
port?: number;
|
|
52
|
+
dbPath?: string;
|
|
53
|
+
serviceName?: string;
|
|
54
|
+
/** Forwarded to the agent so the Status page can show the app URL. */
|
|
55
|
+
appPort?: number;
|
|
56
|
+
/** Global URL prefix of the host application. */
|
|
57
|
+
globalPrefix?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Initialize the Studio Agent if available
|
|
61
|
+
*/
|
|
62
|
+
export declare function initializeStudio(app: Application, config?: StudioIntegrationConfig, appContainer?: unknown): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Push runtime details to the agent that the host only knows after the
|
|
65
|
+
* HTTP server has started — most importantly the actual listening port
|
|
66
|
+
* and total boot time. No-ops when:
|
|
67
|
+
* - the agent isn't running, or
|
|
68
|
+
* - the installed agent is from an older preview without
|
|
69
|
+
* `updateRuntimeInfo()` (we feature-detect to stay forward-compatible).
|
|
70
|
+
*/
|
|
71
|
+
export declare function reportStudioRuntimeInfo(patch: {
|
|
72
|
+
appPort?: number;
|
|
73
|
+
globalPrefix?: string;
|
|
74
|
+
startupMs?: number;
|
|
75
|
+
interceptorCount?: number;
|
|
76
|
+
providerCount?: number;
|
|
77
|
+
middlewareCount?: number;
|
|
78
|
+
runtimeItems?: StudioRuntimeItems;
|
|
79
|
+
}): void;
|
|
80
|
+
/**
|
|
81
|
+
* Stop the Studio Agent
|
|
82
|
+
*/
|
|
83
|
+
export declare function stopStudio(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Check if Studio is enabled
|
|
86
|
+
*/
|
|
87
|
+
export declare function isStudioEnabled(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Get the Studio Agent instance
|
|
90
|
+
*/
|
|
91
|
+
export declare function getStudioAgent(): StudioAgentInstance | null;
|
|
92
|
+
export {};
|
package/lib/cjs/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./adapter-express";
|
|
1
|
+
export * from "./adapter-express/index.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract class ApplicationBase.
|
|
3
|
+
*
|
|
4
|
+
* ApplicationBase serves as the foundational structure for building
|
|
5
|
+
* server applications. It declares the lifecycle hooks that allow
|
|
6
|
+
* subclasses to configure services, handle post-server initialization,
|
|
7
|
+
* and perform cleanup when the server is shutting down. Extending
|
|
8
|
+
* classes are required to provide implementations for these methods
|
|
9
|
+
* to define specific behaviors for their particular use cases.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* class Application extends ApplicationBase {
|
|
13
|
+
* protected configureServices() { //... }
|
|
14
|
+
* protected postServerInitialization() { //... }
|
|
15
|
+
* protected serverShutdown(signal) {
|
|
16
|
+
* console.log(`Shutting down due to ${signal}`);
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* @export
|
|
21
|
+
* @abstract
|
|
22
|
+
*/
|
|
23
|
+
export class ApplicationBase {
|
|
24
|
+
}
|