@expressots/adapter-express 3.0.0-beta.4.2 → 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.
Files changed (239) hide show
  1. package/README.md +39 -96
  2. package/lib/CHANGELOG.md +43 -0
  3. package/lib/README.md +39 -96
  4. package/lib/cjs/adapter-express/application-express.base.js +3 -1
  5. package/lib/cjs/adapter-express/application-express.js +1049 -85
  6. package/lib/cjs/adapter-express/express-utils/conditional-middleware.js +102 -0
  7. package/lib/cjs/adapter-express/express-utils/constants.js +17 -0
  8. package/lib/cjs/adapter-express/express-utils/content-negotiation-decorators.js +129 -0
  9. package/lib/cjs/adapter-express/express-utils/decorators.js +186 -49
  10. package/lib/cjs/adapter-express/express-utils/exception-filter-decorators.js +11 -0
  11. package/lib/cjs/adapter-express/express-utils/guard-context-factory.js +84 -0
  12. package/lib/cjs/adapter-express/express-utils/guard-middleware.js +115 -0
  13. package/lib/cjs/adapter-express/express-utils/guard-utils.js +18 -0
  14. package/lib/cjs/adapter-express/express-utils/http-context-store.js +15 -0
  15. package/lib/cjs/adapter-express/express-utils/http-status-middleware.js +37 -2
  16. package/lib/cjs/adapter-express/express-utils/index.js +67 -1
  17. package/lib/cjs/adapter-express/express-utils/interceptor-middleware.js +132 -0
  18. package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +810 -63
  19. package/lib/cjs/adapter-express/express-utils/lazy-module-middleware.js +241 -0
  20. package/lib/cjs/adapter-express/express-utils/middleware-composition.js +95 -0
  21. package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
  22. package/lib/cjs/adapter-express/express-utils/route-constraints.js +95 -0
  23. package/lib/cjs/adapter-express/express-utils/scope-extractor.interface.js +2 -0
  24. package/lib/cjs/adapter-express/express-utils/scope-extractor.js +66 -0
  25. package/lib/cjs/adapter-express/express-utils/setup-authorization.js +71 -0
  26. package/lib/cjs/adapter-express/express-utils/setup-event-system.js +113 -0
  27. package/lib/cjs/adapter-express/express-utils/setup-interceptors.js +103 -0
  28. package/lib/cjs/adapter-express/express-utils/setup-lazy-loading.js +228 -0
  29. package/lib/cjs/adapter-express/express-utils/utils.js +30 -12
  30. package/lib/cjs/adapter-express/express-utils/validation-decorators.js +205 -0
  31. package/lib/cjs/adapter-express/express-utils/validation-service.js +252 -0
  32. package/lib/cjs/adapter-express/index.js +7 -5
  33. package/lib/cjs/adapter-express/micro-api/application-express-micro-route.js +31 -1
  34. package/lib/cjs/adapter-express/micro-api/application-express-micro.js +11 -37
  35. package/lib/cjs/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  36. package/lib/cjs/adapter-express/micro-api/gateway/index.js +11 -0
  37. package/lib/cjs/adapter-express/micro-api/gateway/service-proxy.js +214 -0
  38. package/lib/cjs/adapter-express/micro-api/index.js +27 -3
  39. package/lib/cjs/adapter-express/micro-api/micro.js +217 -0
  40. package/lib/cjs/adapter-express/micro-api/queue/index.js +8 -0
  41. package/lib/cjs/adapter-express/micro-api/queue/queue.interface.js +2 -0
  42. package/lib/cjs/adapter-express/micro-api/queue/rabbitmq-consumer.js +255 -0
  43. package/lib/cjs/adapter-express/micro-api/serverless/aws-lambda.adapter.js +183 -0
  44. package/lib/cjs/adapter-express/micro-api/serverless/cloudflare.adapter.js +158 -0
  45. package/lib/cjs/adapter-express/micro-api/serverless/index.js +12 -0
  46. package/lib/cjs/adapter-express/micro-api/serverless/vercel.adapter.js +102 -0
  47. package/lib/cjs/adapter-express/micro-api/service-mesh/index.js +10 -0
  48. package/lib/cjs/adapter-express/micro-api/service-mesh/service-client.js +194 -0
  49. package/lib/cjs/adapter-express/micro-api/service-mesh/service-discovery.js +261 -0
  50. package/lib/cjs/adapter-express/middleware/index.js +21 -0
  51. package/lib/cjs/adapter-express/middleware/request-logging.middleware.js +244 -0
  52. package/lib/cjs/adapter-express/render/engine.js +15 -15
  53. package/lib/cjs/adapter-express/render/index.js +5 -0
  54. package/lib/cjs/adapter-express/studio/index.js +9 -0
  55. package/lib/cjs/adapter-express/studio/studio-integration.js +214 -0
  56. package/lib/cjs/index.js +1 -1
  57. package/lib/cjs/types/adapter-express/application-express.base.d.ts +20 -7
  58. package/lib/cjs/types/adapter-express/application-express.d.ts +273 -32
  59. package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +2 -2
  60. package/lib/cjs/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  61. package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +13 -0
  62. package/lib/cjs/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  63. package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +54 -6
  64. package/lib/cjs/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  65. package/lib/cjs/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  66. package/lib/cjs/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  67. package/lib/cjs/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  68. package/lib/cjs/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  69. package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +1 -1
  70. package/lib/cjs/types/adapter-express/express-utils/index.d.ts +30 -2
  71. package/lib/cjs/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  72. package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +42 -5
  73. package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +114 -2
  74. package/lib/cjs/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  75. package/lib/cjs/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  76. package/lib/cjs/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  77. package/lib/cjs/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
  78. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  79. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  80. package/lib/cjs/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  81. package/lib/cjs/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  82. package/lib/cjs/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  83. package/lib/cjs/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  84. package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +17 -2
  85. package/lib/cjs/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  86. package/lib/cjs/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  87. package/lib/cjs/types/adapter-express/index.d.ts +6 -4
  88. package/lib/cjs/types/adapter-express/micro-api/application-express-micro-route.d.ts +25 -14
  89. package/lib/cjs/types/adapter-express/micro-api/application-express-micro.d.ts +3 -10
  90. package/lib/cjs/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  91. package/lib/cjs/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  92. package/lib/cjs/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  93. package/lib/cjs/types/adapter-express/micro-api/index.d.ts +7 -1
  94. package/lib/cjs/types/adapter-express/micro-api/micro.d.ts +66 -0
  95. package/lib/cjs/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  96. package/lib/cjs/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  97. package/lib/cjs/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  98. package/lib/cjs/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  99. package/lib/cjs/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  100. package/lib/cjs/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  101. package/lib/cjs/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  102. package/lib/cjs/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  103. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  104. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  105. package/lib/cjs/types/adapter-express/middleware/index.d.ts +5 -0
  106. package/lib/cjs/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  107. package/lib/cjs/types/adapter-express/render/index.d.ts +1 -0
  108. package/lib/cjs/types/adapter-express/studio/index.d.ts +1 -0
  109. package/lib/cjs/types/adapter-express/studio/studio-integration.d.ts +92 -0
  110. package/lib/cjs/types/index.d.ts +1 -1
  111. package/lib/esm/adapter-express/application-express.base.js +24 -0
  112. package/lib/esm/adapter-express/application-express.js +1300 -0
  113. package/lib/esm/adapter-express/application-express.types.js +1 -0
  114. package/lib/esm/adapter-express/express-utils/base-middleware.js +19 -0
  115. package/lib/esm/adapter-express/express-utils/conditional-middleware.js +96 -0
  116. package/lib/esm/adapter-express/express-utils/constants.js +63 -0
  117. package/lib/esm/adapter-express/express-utils/content/httpContent.js +6 -0
  118. package/lib/esm/adapter-express/express-utils/content-negotiation-decorators.js +120 -0
  119. package/lib/esm/adapter-express/express-utils/decorators.js +575 -0
  120. package/lib/esm/adapter-express/express-utils/exception-filter-decorators.js +6 -0
  121. package/lib/esm/adapter-express/express-utils/guard-context-factory.js +83 -0
  122. package/lib/esm/adapter-express/express-utils/guard-middleware.js +115 -0
  123. package/lib/esm/adapter-express/express-utils/guard-utils.js +14 -0
  124. package/lib/esm/adapter-express/express-utils/http-context-store.js +10 -0
  125. package/lib/esm/adapter-express/express-utils/http-status-middleware.js +116 -0
  126. package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +29 -0
  127. package/lib/esm/adapter-express/express-utils/index.js +24 -0
  128. package/lib/esm/adapter-express/express-utils/interceptor-middleware.js +130 -0
  129. package/lib/esm/adapter-express/express-utils/interfaces.js +1 -0
  130. package/lib/esm/adapter-express/express-utils/inversify-express-server.js +1031 -0
  131. package/lib/esm/adapter-express/express-utils/lazy-module-middleware.js +236 -0
  132. package/lib/esm/adapter-express/express-utils/middleware-composition.js +89 -0
  133. package/lib/esm/adapter-express/express-utils/permission-preloader.middleware.js +45 -0
  134. package/lib/esm/adapter-express/express-utils/resolver-multer.js +30 -0
  135. package/lib/esm/adapter-express/express-utils/route-constraints.js +91 -0
  136. package/lib/esm/adapter-express/express-utils/scope-extractor.interface.js +1 -0
  137. package/lib/esm/adapter-express/express-utils/scope-extractor.js +63 -0
  138. package/lib/esm/adapter-express/express-utils/setup-authorization.js +68 -0
  139. package/lib/esm/adapter-express/express-utils/setup-event-system.js +110 -0
  140. package/lib/esm/adapter-express/express-utils/setup-interceptors.js +100 -0
  141. package/lib/esm/adapter-express/express-utils/setup-lazy-loading.js +225 -0
  142. package/lib/esm/adapter-express/express-utils/utils.js +68 -0
  143. package/lib/esm/adapter-express/express-utils/validation-decorators.js +199 -0
  144. package/lib/esm/adapter-express/express-utils/validation-service.js +251 -0
  145. package/lib/esm/adapter-express/index.js +7 -0
  146. package/lib/esm/adapter-express/micro-api/application-express-micro-container.js +48 -0
  147. package/lib/esm/adapter-express/micro-api/application-express-micro-route.js +128 -0
  148. package/lib/esm/adapter-express/micro-api/application-express-micro.js +161 -0
  149. package/lib/esm/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  150. package/lib/esm/adapter-express/micro-api/gateway/index.js +5 -0
  151. package/lib/esm/adapter-express/micro-api/gateway/service-proxy.js +210 -0
  152. package/lib/esm/adapter-express/micro-api/index.js +10 -0
  153. package/lib/esm/adapter-express/micro-api/micro.js +211 -0
  154. package/lib/esm/adapter-express/micro-api/queue/index.js +4 -0
  155. package/lib/esm/adapter-express/micro-api/queue/queue.interface.js +1 -0
  156. package/lib/esm/adapter-express/micro-api/queue/rabbitmq-consumer.js +229 -0
  157. package/lib/esm/adapter-express/micro-api/serverless/aws-lambda.adapter.js +180 -0
  158. package/lib/esm/adapter-express/micro-api/serverless/cloudflare.adapter.js +155 -0
  159. package/lib/esm/adapter-express/micro-api/serverless/index.js +6 -0
  160. package/lib/esm/adapter-express/micro-api/serverless/vercel.adapter.js +99 -0
  161. package/lib/esm/adapter-express/micro-api/service-mesh/index.js +5 -0
  162. package/lib/esm/adapter-express/micro-api/service-mesh/service-client.js +191 -0
  163. package/lib/esm/adapter-express/micro-api/service-mesh/service-discovery.js +259 -0
  164. package/lib/esm/adapter-express/middleware/index.js +5 -0
  165. package/lib/esm/adapter-express/middleware/request-logging.middleware.js +239 -0
  166. package/lib/esm/adapter-express/render/constants.js +37 -0
  167. package/lib/esm/adapter-express/render/engine.js +51 -0
  168. package/lib/esm/adapter-express/render/index.js +1 -0
  169. package/lib/esm/adapter-express/render/resolve-render.js +30 -0
  170. package/lib/esm/adapter-express/studio/index.js +1 -0
  171. package/lib/esm/adapter-express/studio/studio-integration.js +184 -0
  172. package/lib/esm/index.mjs +1 -0
  173. package/lib/esm/package.json +3 -0
  174. package/lib/esm/types/adapter-express/application-express.base.d.ts +77 -0
  175. package/lib/esm/types/adapter-express/application-express.d.ts +411 -0
  176. package/lib/esm/types/adapter-express/application-express.types.d.ts +23 -0
  177. package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +8 -0
  178. package/lib/esm/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  179. package/lib/esm/types/adapter-express/express-utils/constants.d.ts +57 -0
  180. package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +6 -0
  181. package/lib/esm/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  182. package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +257 -0
  183. package/lib/esm/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  184. package/lib/esm/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  185. package/lib/esm/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  186. package/lib/esm/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  187. package/lib/esm/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  188. package/lib/esm/types/adapter-express/express-utils/http-status-middleware.d.ts +26 -0
  189. package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +14 -0
  190. package/lib/esm/types/adapter-express/express-utils/index.d.ts +30 -0
  191. package/lib/esm/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  192. package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +115 -0
  193. package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +172 -0
  194. package/lib/esm/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  195. package/lib/esm/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  196. package/lib/esm/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  197. package/lib/esm/types/adapter-express/express-utils/resolver-multer.d.ts +7 -0
  198. package/lib/esm/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
  199. package/lib/esm/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  200. package/lib/esm/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  201. package/lib/esm/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  202. package/lib/esm/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  203. package/lib/esm/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  204. package/lib/esm/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  205. package/lib/esm/types/adapter-express/express-utils/utils.d.ts +24 -0
  206. package/lib/esm/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  207. package/lib/esm/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  208. package/lib/esm/types/adapter-express/index.d.ts +7 -0
  209. package/lib/esm/types/adapter-express/micro-api/application-express-micro-container.d.ts +47 -0
  210. package/lib/esm/types/adapter-express/micro-api/application-express-micro-route.d.ts +104 -0
  211. package/lib/esm/types/adapter-express/micro-api/application-express-micro.d.ts +72 -0
  212. package/lib/esm/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  213. package/lib/esm/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  214. package/lib/esm/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  215. package/lib/esm/types/adapter-express/micro-api/index.d.ts +7 -0
  216. package/lib/esm/types/adapter-express/micro-api/micro.d.ts +66 -0
  217. package/lib/esm/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  218. package/lib/esm/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  219. package/lib/esm/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  220. package/lib/esm/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  221. package/lib/esm/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  222. package/lib/esm/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  223. package/lib/esm/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  224. package/lib/esm/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  225. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  226. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  227. package/lib/esm/types/adapter-express/middleware/index.d.ts +5 -0
  228. package/lib/esm/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  229. package/lib/esm/types/adapter-express/render/constants.d.ts +26 -0
  230. package/lib/esm/types/adapter-express/render/engine.d.ts +20 -0
  231. package/lib/esm/types/adapter-express/render/index.d.ts +5 -0
  232. package/lib/esm/types/adapter-express/render/resolve-render.d.ts +7 -0
  233. package/lib/esm/types/adapter-express/studio/index.d.ts +1 -0
  234. package/lib/esm/types/adapter-express/studio/studio-integration.d.ts +92 -0
  235. package/lib/esm/types/index.d.ts +1 -0
  236. package/lib/package.json +156 -146
  237. package/package.json +156 -146
  238. package/lib/cjs/di/di.interfaces.js +0 -10
  239. 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,5 @@
1
+ /**
2
+ * @file middleware/index.ts
3
+ * @description Exports for ExpressoTS middleware
4
+ */
5
+ export * from "./request-logging.middleware.js";
@@ -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;
@@ -2,3 +2,4 @@ import { RenderEngine } from "@expressots/shared";
2
2
  export type EJS = RenderEngine.EjsOptions;
3
3
  export type HBS = RenderEngine.HandlebarsOptions;
4
4
  export type PUG = RenderEngine.PugOptions;
5
+ export { setEngineEjs, setEngineHandlebars, setEnginePug } from "./engine.js";
@@ -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 {};
@@ -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
+ }