@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,6 @@
1
+ /**
2
+ * Re-export exception filter decorators from core for backward compatibility
3
+ * These decorators are now part of @expressots/core to avoid circular dependencies
4
+ * @public API
5
+ */
6
+ export { Catch, UseFilters } from "@expressots/core";
@@ -0,0 +1,17 @@
1
+ import "reflect-metadata";
2
+ import { Request, Response } from "express";
3
+ import { interfaces } from "@expressots/core";
4
+ import type { GuardContext } from "@expressots/core";
5
+ import type { IScopeExtractor } from "./scope-extractor.interface.js";
6
+ /**
7
+ * Factory for creating GuardContext from Express request/response
8
+ */
9
+ export declare class GuardContextFactory {
10
+ private container;
11
+ private scopeExtractor;
12
+ constructor(container: interfaces.Container, scopeExtractor: IScopeExtractor);
13
+ /**
14
+ * Create GuardContext from Express request/response
15
+ */
16
+ create(req: Request, res: Response): Promise<GuardContext>;
17
+ }
@@ -0,0 +1,22 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { Container } from "@expressots/core";
3
+ import { GuardExecutor } from "@expressots/core";
4
+ import { GuardContextFactory } from "./guard-context-factory.js";
5
+ /**
6
+ * Express middleware that executes guards before route handler
7
+ */
8
+ export declare class GuardMiddleware {
9
+ private executor;
10
+ private contextFactory;
11
+ private container;
12
+ constructor(executor: GuardExecutor, contextFactory: GuardContextFactory, container: Container);
13
+ /**
14
+ * Express middleware function
15
+ */
16
+ execute: (req: Request, res: Response, next: NextFunction) => Promise<void>;
17
+ /**
18
+ * Extract guards from request metadata
19
+ * @private
20
+ */
21
+ private extractGuards;
22
+ }
@@ -0,0 +1,11 @@
1
+ import "reflect-metadata";
2
+ import type { GuardClass, IGuard } from "@expressots/core";
3
+ import type { NewableFunction } from "./interfaces.js";
4
+ /**
5
+ * Extract guards from controller metadata
6
+ */
7
+ export declare function getControllerGuards(constructor: NewableFunction): Array<GuardClass | IGuard>;
8
+ /**
9
+ * Extract guards from method metadata
10
+ */
11
+ export declare function getMethodGuards(constructor: NewableFunction, methodName: string | symbol): Array<GuardClass | IGuard>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Per-request HttpContext storage.
3
+ *
4
+ * Replaces the previous `Reflect.defineMetadata(METADATA_KEY.httpContext, ctx, req)`
5
+ * call in `InversifyExpressServer.build()`, which paid the cost of
6
+ * `reflect-metadata` map allocation and key lookup on every single request.
7
+ *
8
+ * A `WeakMap<Request, HttpContext>` is functionally identical (lookup keyed
9
+ * by request reference, GC'd when the request goes out of scope) and is
10
+ * substantially cheaper on the hot path because it bypasses
11
+ * `reflect-metadata`'s string-keyed metadata store.
12
+ *
13
+ * Both `InversifyExpressServer` and `GuardContextFactory` use this module
14
+ * so they observe the same per-request value.
15
+ */
16
+ import type { Request } from "express";
17
+ import type { HttpContext } from "./interfaces.js";
18
+ export declare function setHttpContext(req: Request, ctx: HttpContext): void;
19
+ export declare function getHttpContext(req: Request): HttpContext | undefined;
20
+ export declare function hasHttpContext(req: Request): boolean;
@@ -1,5 +1,5 @@
1
1
  import type { OutgoingHttpHeaders } from "node:http";
2
- import { HttpContent } from "./content/httpContent";
2
+ import { HttpContent } from "./content/httpContent.js";
3
3
  export declare class HttpResponseMessage {
4
4
  private _content;
5
5
  private _headers;
@@ -1,2 +1,30 @@
1
- export * from "./decorators";
2
- export { Controller } from "./interfaces";
1
+ export * from "./decorators.js";
2
+ export { Accept, Consumes, Produces, CsvOptions, XmlOptions, YamlOptions, StreamResponse, } from "./content-negotiation-decorators.js";
3
+ export { Controller } from "./interfaces.js";
4
+ export { Patterns, pattern } from "./route-constraints.js";
5
+ export { when, unless, isConditionalMiddleware } from "./conditional-middleware.js";
6
+ export type { ConditionalMiddlewareConfig, MiddlewareCondition } from "./conditional-middleware.js";
7
+ export { combine, sequence, isComposedMiddleware } from "./middleware-composition.js";
8
+ export type { ComposedMiddlewareConfig } from "./middleware-composition.js";
9
+ export { Catch, UseFilters } from "./exception-filter-decorators.js";
10
+ export { getControllerGuards, getMethodGuards } from "./guard-utils.js";
11
+ export { GuardContextFactory } from "./guard-context-factory.js";
12
+ export { GuardMiddleware } from "./guard-middleware.js";
13
+ export { InterceptorMiddleware, createInterceptorMiddleware } from "./interceptor-middleware.js";
14
+ export { ScopeExtractor } from "./scope-extractor.js";
15
+ export type { IScopeExtractor } from "./scope-extractor.interface.js";
16
+ export { PermissionPreloaderMiddleware } from "./permission-preloader.middleware.js";
17
+ export { TYPE } from "./constants.js";
18
+ export type { AuthProvider, Principal } from "./interfaces.js";
19
+ export { setupAuthorizationForExpress } from "./setup-authorization.js";
20
+ export { setupEventSystemForExpress } from "./setup-event-system.js";
21
+ export type { EventSystemOptions, EventSystemSetupResult } from "./setup-event-system.js";
22
+ export { setupInterceptorsForExpress } from "./setup-interceptors.js";
23
+ export type { InterceptorSystemOptions, InterceptorSystemSetupResult, BuiltInInterceptor, InterceptorClass, } from "./setup-interceptors.js";
24
+ export { setupLazyLoadingForExpress } from "./setup-lazy-loading.js";
25
+ export type { LazyLoadingOptions, LazyLoadingSetupResult, LazyLoadingExpressOptions, LazyLoadingExpressResult, LazyRouteMapping, } from "./setup-lazy-loading.js";
26
+ export { createLazyModuleMiddleware, createRouteMappings } from "./lazy-module-middleware.js";
27
+ export { validatedBody, validatedQuery, validatedParam, validatedHeaders, Validate, getValidationMetadata, hasValidationMetadata, } from "./validation-decorators.js";
28
+ export type { ValidationSchemaMetadata, SchemaType, ValidatedDecoratorOptions, } from "./validation-decorators.js";
29
+ export { ValidationService } from "./validation-service.js";
30
+ export { getHttpContext, hasHttpContext } from "./http-context-store.js";
@@ -0,0 +1,40 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { Container, interfaces, InterceptorExecutor } from "@expressots/core";
3
+ import "reflect-metadata";
4
+ /**
5
+ * Express middleware that executes interceptors around route handler
6
+ *
7
+ * @layer internal
8
+ * @audience framework-developers
9
+ *
10
+ * @summary Quick Start
11
+ * InterceptorMiddleware integrates the interceptor system with Express.
12
+ * It wraps the route handler with interceptors defined via @UseInterceptors().
13
+ *
14
+ * @internal
15
+ */
16
+ export declare class InterceptorMiddleware {
17
+ private executor;
18
+ private container;
19
+ constructor(executor: InterceptorExecutor, container: Container);
20
+ /**
21
+ * Create middleware for a specific controller and method
22
+ * @param controllerClass - Controller class
23
+ * @param methodName - Method name
24
+ * @param handler - Original route handler
25
+ */
26
+ createMiddleware(controllerClass: NewableFunction, methodName: string | symbol, handler: (req: Request, res: Response, next: NextFunction) => Promise<unknown>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
27
+ /**
28
+ * Extract interceptors from controller and method metadata
29
+ * @private
30
+ */
31
+ private extractInterceptors;
32
+ }
33
+ /**
34
+ * Factory function to create interceptor middleware
35
+ * @param container - DI container
36
+ * @param controllerClass - Controller class
37
+ * @param methodName - Method name
38
+ * @param handler - Original handler
39
+ */
40
+ export declare function createInterceptorMiddleware(container: interfaces.Container | Container, controllerClass: NewableFunction, methodName: string | symbol, handler: (req: Request, res: Response, next: NextFunction) => Promise<unknown>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -1,7 +1,11 @@
1
1
  import type { Application, NextFunction, Request, RequestHandler, Response } from "express";
2
- import { interfaces as inversifyInterfaces } from "../../di/di.interfaces";
3
- import { HTTP_VERBS_ENUM, PARAMETER_TYPE } from "./constants";
4
- import { HttpResponseMessage } from "./httpResponseMessage";
2
+ import { interfaces as inversifyInterfaces } from "@expressots/core";
3
+ import { HTTP_VERBS_ENUM, PARAMETER_TYPE } from "./constants.js";
4
+ import { HttpResponseMessage } from "./httpResponseMessage.js";
5
+ /**
6
+ * Type for a constructor function (class)
7
+ */
8
+ export type NewableFunction = abstract new (...args: Array<any>) => any;
5
9
  type Prototype<T> = {
6
10
  [P in keyof T]: T[P] extends NewableFunction ? T[P] : T[P] | undefined;
7
11
  } & {
@@ -15,7 +19,38 @@ export type DecoratorTarget<T = unknown> = ConstructorFunction<T> | Prototype<T>
15
19
  export interface IExpressoMiddleware {
16
20
  use(req: Request, res: Response, next: NextFunction): Promise<void> | void;
17
21
  }
18
- export type Middleware = string | symbol | RequestHandler | IExpressoMiddleware;
22
+ /**
23
+ * Conditional middleware configuration type.
24
+ * Import from conditional-middleware.ts for the full ConditionalMiddlewareConfig interface.
25
+ */
26
+ export interface ConditionalMiddlewareConfig {
27
+ condition: (req: Request) => boolean | Promise<boolean>;
28
+ middleware: Middleware;
29
+ skipOnFalse?: boolean;
30
+ }
31
+ /**
32
+ * Composed middleware configuration type.
33
+ * Import from middleware-composition.ts for the full ComposedMiddlewareConfig interface.
34
+ */
35
+ export interface ComposedMiddlewareConfig {
36
+ middleware: Array<Middleware>;
37
+ type: "combine" | "sequence";
38
+ }
39
+ /**
40
+ * Middleware class constructor type.
41
+ * Supports classes that extend ExpressoMiddleware or implement IExpressoMiddleware.
42
+ * Accepts both concrete and abstract class constructors.
43
+ * Phase 2: Supports class references without 'new' keyword.
44
+ */
45
+ export type MiddlewareClass = (new (...args: Array<unknown>) => IExpressoMiddleware) | (abstract new (...args: Array<unknown>) => IExpressoMiddleware);
46
+ /**
47
+ * Union type for all supported middleware types.
48
+ * Phase 2: Includes class constructors (class references) for cleaner API.
49
+ * Note: Uses 'any' for class constructors to support typeof class types (e.g., typeof AdminMiddleware).
50
+ */
51
+ export type Middleware = string | symbol | RequestHandler | IExpressoMiddleware | ConditionalMiddlewareConfig | MiddlewareClass | {
52
+ prototype: IExpressoMiddleware;
53
+ } | any;
19
54
  export type ControllerHandler = (...params: Array<unknown>) => unknown;
20
55
  export type BaseController = Record<string, ControllerHandler>;
21
56
  export interface Controller {
@@ -24,10 +59,12 @@ export interface ControllerMetadata {
24
59
  middleware: Array<Middleware>;
25
60
  path: string;
26
61
  target: DecoratorTarget;
62
+ version?: string | number;
27
63
  }
28
64
  export interface ControllerMethodMetadata extends ControllerMetadata {
29
65
  key: string;
30
66
  method: keyof typeof HTTP_VERBS_ENUM;
67
+ version?: string | number;
31
68
  }
32
69
  export interface ControllerParameterMetadata {
33
70
  [methodName: string]: Array<ParameterMetadata>;
@@ -39,7 +76,7 @@ export interface ParameterMetadata {
39
76
  type: PARAMETER_TYPE;
40
77
  }
41
78
  export type ExtractedParameters = Array<ParameterMetadata> | [Request, Response, NextFunction] | Array<unknown>;
42
- export type HandlerDecorator = (target: DecoratorTarget, key: string, value: unknown) => void;
79
+ export type HandlerDecorator = (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
43
80
  export type ConfigFunction = (app: Application) => void;
44
81
  export interface RoutingConfig {
45
82
  rootPath: string;
@@ -1,6 +1,7 @@
1
1
  import express, { Application, Router } from "express";
2
- import { interfaces } from "../../di/di.interfaces";
3
- import type { AuthProvider, ConfigFunction, RoutingConfig } from "./interfaces";
2
+ import { interfaces, ContentNegotiationService } from "@expressots/core";
3
+ import type { AuthProvider, ConfigFunction, RoutingConfig } from "./interfaces.js";
4
+ import { ValidationService } from "./validation-service.js";
4
5
  export declare class InversifyExpressServer {
5
6
  private _router;
6
7
  private _container;
@@ -10,6 +11,8 @@ export declare class InversifyExpressServer {
10
11
  private _routingConfig;
11
12
  private _AuthProvider;
12
13
  private _forceControllers;
14
+ private _contentNegotiationService?;
15
+ private _validationService?;
13
16
  /**
14
17
  * Wrapper for the express server.
15
18
  *
@@ -45,13 +48,122 @@ export declare class InversifyExpressServer {
45
48
  * Applies all routes and configuration to the server, returning the express application.
46
49
  */
47
50
  build(): express.Application;
51
+ /**
52
+ * Install a catch-all 404 handler that runs after every registered route.
53
+ *
54
+ * When the user has the suggestions feature enabled (default in development),
55
+ * this consults the route registry, computes "Did you mean ...?" suggestions
56
+ * via `getErrorHints` from `@expressots/core`, logs them through the framework
57
+ * Logger, and returns a structured RFC-7807-style JSON 404 instead of the
58
+ * default Express HTML.
59
+ *
60
+ * Users who want the legacy Express HTML 404 can opt out by configuring the
61
+ * Logger with `suggestions.enabled = false` (this also disables the JSON
62
+ * envelope so they can install their own 404 handler in the error-config fn).
63
+ *
64
+ * @private
65
+ */
66
+ private registerNotFoundHandler;
67
+ /**
68
+ * Resolve the user-configured suggestions config, falling back to the
69
+ * env-aware default when the Logger is not bound or has no overrides.
70
+ *
71
+ * @private
72
+ */
73
+ private resolveSuggestionsConfig;
74
+ /**
75
+ * Resolve the framework Logger from DI when available.
76
+ *
77
+ * @private
78
+ */
79
+ private resolveLogger;
48
80
  private registerControllers;
81
+ /**
82
+ * Initialize the interceptor system by binding required components
83
+ * @private
84
+ */
85
+ private initializeInterceptorSystem;
86
+ /**
87
+ * Check if the interceptor system is properly initialized
88
+ * @private
89
+ */
90
+ private isInterceptorSystemReady;
91
+ /**
92
+ * Extract interceptors from controller and method metadata
93
+ * @private
94
+ */
95
+ private extractInterceptors;
96
+ /**
97
+ * Wrap a handler with interceptor middleware
98
+ * @private
99
+ */
100
+ private wrapWithInterceptors;
101
+ /**
102
+ * Checks if a middleware item is a class constructor (not an instance).
103
+ * Handles classes that extend ExpressoMiddleware (which has abstract use method).
104
+ * Note: Abstract methods don't exist at runtime, so we check for concrete implementations.
105
+ */
106
+ private isMiddlewareClass;
49
107
  private isExpressoMiddleware;
50
108
  private resolveMiddleware;
109
+ /**
110
+ * Creates a lazy middleware handler for class constructors.
111
+ * Supports both container-bound middleware (via @provide()) and direct instantiation.
112
+ *
113
+ * Performance: Instances are created per-request to support request-scoped state.
114
+ * For better performance with stateless middleware, use container-bound middleware
115
+ * with proper scoping (singleton/request scope) via @provide().
116
+ *
117
+ * Note: If container resolution fails (e.g., base class missing @injectable()),
118
+ * falls back to direct instantiation for backward compatibility.
119
+ */
120
+ private createLazyMiddlewareHandler;
121
+ /**
122
+ * Creates a request handler for conditional middleware.
123
+ * Evaluates the condition and executes the wrapped middleware if condition is true.
124
+ */
125
+ private createConditionalMiddlewareHandler;
126
+ /**
127
+ * Creates a request handler for composed middleware (Phase 3: Middleware Composition).
128
+ * Executes all middleware in the composition sequentially.
129
+ * Both 'combine' and 'sequence' types behave the same way - they execute middleware
130
+ * sequentially and propagate errors normally (Express handles errors via next(error)).
131
+ *
132
+ * @param config - ComposedMiddlewareConfig containing the middleware array and type
133
+ * @returns Express RequestHandler
134
+ */
135
+ private createComposedMiddlewareHandler;
136
+ /**
137
+ * Executes a chain of middleware handlers sequentially.
138
+ * Each middleware calls next() to proceed to the next one.
139
+ * Handles both synchronous and asynchronous middleware.
140
+ */
141
+ private executeMiddlewareChain;
51
142
  private copyHeadersTo;
52
143
  private handleHttpResponseMessage;
53
144
  private handlerFactory;
145
+ private executeRouteHandler;
54
146
  private _getHttpContext;
147
+ /**
148
+ * Sets the content negotiation service instance.
149
+ * @param service - Content negotiation service instance
150
+ */
151
+ setContentNegotiationService(service: ContentNegotiationService): void;
152
+ /**
153
+ * Gets the content negotiation service if available.
154
+ * @returns Content negotiation service or undefined
155
+ */
156
+ private getContentNegotiationService;
157
+ /**
158
+ * Sets the validation service instance.
159
+ * @param service - Validation service instance
160
+ */
161
+ setValidationService(service: ValidationService): void;
162
+ /**
163
+ * Gets the validation service if available.
164
+ * @returns Validation service or undefined
165
+ */
166
+ private getValidationService;
55
167
  private _createHttpContext;
56
168
  private _getCurrentUser;
57
169
  private extractParameters;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Lazy Module Auto-Load Middleware
3
+ *
4
+ * Automatically loads lazy modules when their routes are accessed.
5
+ * This provides seamless lazy loading without 404 errors.
6
+ *
7
+ * @module adapter-express
8
+ */
9
+ import { RequestHandler, Router, Express } from "express";
10
+ import { LazyModuleLoader, ILazyModule } from "@expressots/core";
11
+ /**
12
+ * Route prefix mapping for lazy modules.
13
+ * Maps route prefixes to module names for auto-loading.
14
+ */
15
+ export interface LazyRouteMapping {
16
+ /** Route prefix (e.g., "/admin", "/reports") */
17
+ prefix: string;
18
+ /** Module name to load when this prefix is accessed */
19
+ moduleName: string;
20
+ /** Whether the module is currently loaded */
21
+ loaded: boolean;
22
+ }
23
+ /**
24
+ * Configuration for the lazy module middleware.
25
+ */
26
+ export interface LazyModuleMiddlewareConfig {
27
+ /** Route mappings */
28
+ routes: Array<LazyRouteMapping>;
29
+ /** The lazy module loader instance */
30
+ loader: LazyModuleLoader;
31
+ /** Global route prefix (e.g., "/api") */
32
+ globalPrefix?: string;
33
+ /** Callback when a module starts loading */
34
+ onLoadStart?: (moduleName: string, path: string) => void;
35
+ /** Callback when a module finishes loading */
36
+ onLoadComplete?: (moduleName: string, loadTimeMs: number) => void;
37
+ /** Callback when module loading fails */
38
+ onLoadError?: (moduleName: string, error: Error) => void;
39
+ /**
40
+ * Express app or router for dynamic route registration.
41
+ * When provided, routes are registered dynamically after module load,
42
+ * eliminating the need for 307 redirects.
43
+ */
44
+ expressApp?: Express | Router;
45
+ /**
46
+ * Callback to register lazy module routes after loading.
47
+ * When provided, this is called to register the module's routes dynamically.
48
+ * If not provided and expressApp is set, default registration is attempted.
49
+ */
50
+ onRegisterRoutes?: (moduleName: string, router: Router) => void;
51
+ }
52
+ /**
53
+ * Create middleware that auto-loads lazy modules when their routes are accessed.
54
+ *
55
+ * @layer public
56
+ * @audience application-developers
57
+ * @concept lazy-loading
58
+ *
59
+ * UNIQUE: Seamless lazy loading - no 404s! Modules load automatically
60
+ * when their routes are accessed for the first time.
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const middleware = createLazyModuleMiddleware({
65
+ * routes: [
66
+ * { prefix: "/admin", moduleName: "AdminModule", loaded: false },
67
+ * { prefix: "/reports", moduleName: "ReportsModule", loaded: false }
68
+ * ],
69
+ * loader: lazyModuleLoader,
70
+ * globalPrefix: "/api"
71
+ * });
72
+ *
73
+ * app.use(middleware);
74
+ * ```
75
+ *
76
+ * @param config - Middleware configuration
77
+ * @returns Express middleware function
78
+ *
79
+ * @public API
80
+ */
81
+ export declare function createLazyModuleMiddleware(config: LazyModuleMiddlewareConfig): RequestHandler;
82
+ /**
83
+ * Extract route prefixes from a lazy module.
84
+ *
85
+ * Uses auto-detected routes from CreateLazyModule (which analyzes @controller decorators),
86
+ * falls back to prefetchOn config, and finally infers from module name.
87
+ *
88
+ * @param lazyModule - The lazy module to analyze
89
+ * @returns Detected route prefixes
90
+ *
91
+ * @public API
92
+ */
93
+ export declare function extractRoutePrefixes(lazyModule: ILazyModule): Array<string>;
94
+ /**
95
+ * Create route mappings from lazy modules.
96
+ *
97
+ * Route detection priority:
98
+ * 1. Manual routePrefixMap (if provided)
99
+ * 2. Auto-detected from @controller() decorators (via CreateLazyModule)
100
+ * 3. prefetchOn config
101
+ * 4. Inferred from module name
102
+ *
103
+ * @param lazyModules - Array of lazy modules
104
+ * @param routePrefixMap - Optional manual prefix mappings { moduleName: prefix }
105
+ * @returns Array of route mappings
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * // Zero-config: routes auto-detected from controllers!
110
+ * const mappings = createRouteMappings([AdminModule, ReportsModule]);
111
+ * // Automatically maps @controller("/admin") -> /admin
112
+ *
113
+ * // Or with manual overrides
114
+ * const mappings = createRouteMappings(
115
+ * [AdminModule, ReportsModule],
116
+ * { "AdminModule": "/admin-panel" } // Override auto-detection
117
+ * );
118
+ * ```
119
+ *
120
+ * @public API
121
+ */
122
+ export declare function createRouteMappings(lazyModules: Array<ILazyModule>, routePrefixMap?: Record<string, string>): Array<LazyRouteMapping>;
@@ -0,0 +1,85 @@
1
+ import type { Middleware } from "./interfaces.js";
2
+ /**
3
+ * Configuration object for composed middleware.
4
+ * Represents a group of middleware that should be executed together.
5
+ */
6
+ export interface ComposedMiddlewareConfig {
7
+ /**
8
+ * Array of middleware to execute.
9
+ * Can be any valid ExpressoTS middleware type (function, class instance, class reference, or container-bound).
10
+ */
11
+ middleware: Array<Middleware>;
12
+ /**
13
+ * Composition type: 'combine' or 'sequence'.
14
+ * - 'combine': All middleware execute sequentially, errors propagate normally
15
+ * - 'sequence': Middleware execute sequentially, execution stops on error
16
+ */
17
+ type: "combine" | "sequence";
18
+ /**
19
+ * Symbol to identify composed middleware configuration objects.
20
+ * Used internally for type checking.
21
+ */
22
+ [COMPOSED_MIDDLEWARE_SYMBOL]: true;
23
+ }
24
+ /**
25
+ * Symbol to identify composed middleware configuration objects.
26
+ * Used internally for type checking.
27
+ */
28
+ export declare const COMPOSED_MIDDLEWARE_SYMBOL: unique symbol;
29
+ /**
30
+ * Type guard to check if an object is a ComposedMiddlewareConfig.
31
+ */
32
+ export declare function isComposedMiddleware(item: unknown): item is ComposedMiddlewareConfig;
33
+ /**
34
+ * Combines multiple middleware into a single middleware that executes all of them sequentially.
35
+ * All middleware will execute in order. If any middleware calls `next(error)`, the error
36
+ * is propagated to Express's error handling system.
37
+ *
38
+ * @param middleware - Array of middleware to combine
39
+ * @returns ComposedMiddlewareConfig object
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Combine multiple middleware into a reusable group
44
+ * @Get("/api", combine(AuthMiddleware, LoggingMiddleware, RateLimitMiddleware))
45
+ * async apiHandler() {}
46
+ * ```
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Combine with conditional middleware (Phase 3)
51
+ * @Get("/admin",
52
+ * when(req => req.method === "POST", combine(BodyParser, ValidationMiddleware)),
53
+ * combine(AuthMiddleware, LoggingMiddleware)
54
+ * )
55
+ * async adminHandler() {}
56
+ * ```
57
+ */
58
+ export declare function combine(...middleware: Array<Middleware>): ComposedMiddlewareConfig;
59
+ /**
60
+ * Sequences multiple middleware that execute one after another.
61
+ * Similar to `combine()`, but semantically indicates sequential execution
62
+ * where each middleware depends on the previous one completing successfully.
63
+ * If any middleware calls `next(error)`, execution stops and the error is propagated.
64
+ *
65
+ * @param middleware - Array of middleware to sequence
66
+ * @returns ComposedMiddlewareConfig object
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * // Sequence middleware where each depends on the previous
71
+ * @Get("/api", sequence(ValidateMiddleware, TransformMiddleware, ProcessMiddleware))
72
+ * async apiHandler() {}
73
+ * ```
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // Sequence with conditional middleware
78
+ * @Get("/data",
79
+ * when(req => req.method === "POST", sequence(BodyParser, ValidateMiddleware)),
80
+ * sequence(AuthMiddleware, ProcessMiddleware)
81
+ * )
82
+ * async dataHandler() {}
83
+ * ```
84
+ */
85
+ export declare function sequence(...middleware: Array<Middleware>): ComposedMiddlewareConfig;
@@ -0,0 +1,10 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { BaseMiddleware } from "./base-middleware.js";
3
+ /**
4
+ * Middleware that preloads permissions for authenticated users
5
+ * Caches permissions in request-scoped SecurityContext
6
+ */
7
+ export declare class PermissionPreloaderMiddleware extends BaseMiddleware {
8
+ private securityContext?;
9
+ handler(req: Request, res: Response, next: NextFunction): Promise<void>;
10
+ }