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