@scpxl/nodejs-framework 1.0.22 → 1.0.24

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 (278) hide show
  1. package/README.md +199 -9
  2. package/dist/api-requester/api-requester.d.ts +32 -0
  3. package/dist/api-requester/api-requester.d.ts.map +1 -0
  4. package/dist/api-requester/index.d.ts +3 -0
  5. package/dist/api-requester/index.d.ts.map +1 -0
  6. package/dist/application/base-application.d.ts +106 -0
  7. package/dist/application/base-application.d.ts.map +1 -0
  8. package/dist/application/base-application.interface.d.ts +162 -0
  9. package/dist/application/base-application.interface.d.ts.map +1 -0
  10. package/dist/application/base-application.js +3 -0
  11. package/dist/application/base-application.js.map +2 -2
  12. package/dist/application/command-application.d.ts +18 -0
  13. package/dist/application/command-application.d.ts.map +1 -0
  14. package/dist/application/command-application.interface.d.ts +26 -0
  15. package/dist/application/command-application.interface.d.ts.map +1 -0
  16. package/dist/application/index.d.ts +5 -0
  17. package/dist/application/index.d.ts.map +1 -0
  18. package/dist/application/web-application.d.ts +43 -0
  19. package/dist/application/web-application.d.ts.map +1 -0
  20. package/dist/application/web-application.interface.d.ts +21 -0
  21. package/dist/application/web-application.interface.d.ts.map +1 -0
  22. package/dist/application/web-application.js +1 -0
  23. package/dist/application/web-application.js.map +2 -2
  24. package/dist/auth/index.d.ts +2 -0
  25. package/dist/auth/index.d.ts.map +1 -0
  26. package/dist/auth/jwt.d.ts +25 -0
  27. package/dist/auth/jwt.d.ts.map +1 -0
  28. package/dist/cache/index.d.ts +2 -0
  29. package/dist/cache/index.d.ts.map +1 -0
  30. package/dist/cache/manager.d.ts +107 -0
  31. package/dist/cache/manager.d.ts.map +1 -0
  32. package/dist/cli/index.d.ts +2 -0
  33. package/dist/cli/index.d.ts.map +1 -0
  34. package/dist/cli/index.js +5655 -0
  35. package/dist/cli/index.js.map +7 -0
  36. package/dist/cluster/cluster-manager.d.ts +15 -0
  37. package/dist/cluster/cluster-manager.d.ts.map +1 -0
  38. package/dist/cluster/cluster-manager.interface.d.ts +23 -0
  39. package/dist/cluster/cluster-manager.interface.d.ts.map +1 -0
  40. package/dist/cluster/index.d.ts +2 -0
  41. package/dist/cluster/index.d.ts.map +1 -0
  42. package/dist/command/command-manager.d.ts +19 -0
  43. package/dist/command/command-manager.d.ts.map +1 -0
  44. package/dist/command/command.d.ts +27 -0
  45. package/dist/command/command.d.ts.map +1 -0
  46. package/dist/command/command.interface.d.ts +11 -0
  47. package/dist/command/command.interface.d.ts.map +1 -0
  48. package/dist/command/index.d.ts +3 -0
  49. package/dist/command/index.d.ts.map +1 -0
  50. package/dist/config/env.d.ts +11 -0
  51. package/dist/config/env.d.ts.map +1 -0
  52. package/dist/config/index.d.ts +3 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/schema.d.ts +432 -0
  55. package/dist/config/schema.d.ts.map +1 -0
  56. package/dist/database/dynamic-entity-form-decorators.d.ts +31 -0
  57. package/dist/database/dynamic-entity-form-decorators.d.ts.map +1 -0
  58. package/dist/database/dynamic-entity.d.ts +15 -0
  59. package/dist/database/dynamic-entity.d.ts.map +1 -0
  60. package/dist/database/index.d.ts +5 -0
  61. package/dist/database/index.d.ts.map +1 -0
  62. package/dist/database/instance.d.ts +36 -0
  63. package/dist/database/instance.d.ts.map +1 -0
  64. package/dist/database/instance.interface.d.ts +5 -0
  65. package/dist/database/instance.interface.d.ts.map +1 -0
  66. package/dist/database/manager.d.ts +27 -0
  67. package/dist/database/manager.d.ts.map +1 -0
  68. package/dist/database/manager.interface.d.ts +18 -0
  69. package/dist/database/manager.interface.d.ts.map +1 -0
  70. package/dist/error/error-reporter.d.ts +96 -0
  71. package/dist/error/error-reporter.d.ts.map +1 -0
  72. package/dist/error/error.interface.d.ts +126 -0
  73. package/dist/error/error.interface.d.ts.map +1 -0
  74. package/dist/error/framework-errors.d.ts +113 -0
  75. package/dist/error/framework-errors.d.ts.map +1 -0
  76. package/dist/error/index.d.ts +6 -0
  77. package/dist/error/index.d.ts.map +1 -0
  78. package/dist/event/controller/base.d.ts +23 -0
  79. package/dist/event/controller/base.d.ts.map +1 -0
  80. package/dist/event/controller/base.interface.d.ts +11 -0
  81. package/dist/event/controller/base.interface.d.ts.map +1 -0
  82. package/dist/event/index.d.ts +5 -0
  83. package/dist/event/index.d.ts.map +1 -0
  84. package/dist/event/manager.d.ts +21 -0
  85. package/dist/event/manager.d.ts.map +1 -0
  86. package/dist/event/manager.interface.d.ts +137 -0
  87. package/dist/event/manager.interface.d.ts.map +1 -0
  88. package/dist/index.d.ts +22 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/lifecycle/exit.d.ts +11 -0
  91. package/dist/lifecycle/exit.d.ts.map +1 -0
  92. package/dist/lifecycle/index.d.ts +7 -0
  93. package/dist/lifecycle/index.d.ts.map +1 -0
  94. package/dist/lifecycle/lifecycle-manager.d.ts +66 -0
  95. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
  96. package/dist/lifecycle/lifecycle-manager.js +6 -11
  97. package/dist/lifecycle/lifecycle-manager.js.map +2 -2
  98. package/dist/lifecycle/shutdown-controller.d.ts +15 -0
  99. package/dist/lifecycle/shutdown-controller.d.ts.map +1 -0
  100. package/dist/lifecycle/types.d.ts +28 -0
  101. package/dist/lifecycle/types.d.ts.map +1 -0
  102. package/dist/logger/index.d.ts +2 -0
  103. package/dist/logger/index.d.ts.map +1 -0
  104. package/dist/logger/logger.d.ts +59 -0
  105. package/dist/logger/logger.d.ts.map +1 -0
  106. package/dist/logger/logger.interface.d.ts +2 -0
  107. package/dist/logger/logger.interface.d.ts.map +1 -0
  108. package/dist/logger/logger.js +8 -1
  109. package/dist/logger/logger.js.map +2 -2
  110. package/dist/performance/cache-performance.d.ts +64 -0
  111. package/dist/performance/cache-performance.d.ts.map +1 -0
  112. package/dist/performance/database-performance.d.ts +40 -0
  113. package/dist/performance/database-performance.d.ts.map +1 -0
  114. package/dist/performance/index.d.ts +8 -0
  115. package/dist/performance/index.d.ts.map +1 -0
  116. package/dist/performance/performance-monitor.d.ts +68 -0
  117. package/dist/performance/performance-monitor.d.ts.map +1 -0
  118. package/dist/performance/performance-monitor.plugin.d.ts +24 -0
  119. package/dist/performance/performance-monitor.plugin.d.ts.map +1 -0
  120. package/dist/performance/queue-performance.d.ts +46 -0
  121. package/dist/performance/queue-performance.d.ts.map +1 -0
  122. package/dist/performance/webserver-performance.d.ts +69 -0
  123. package/dist/performance/webserver-performance.d.ts.map +1 -0
  124. package/dist/performance/websocket-performance.d.ts +44 -0
  125. package/dist/performance/websocket-performance.d.ts.map +1 -0
  126. package/dist/queue/index.d.ts +6 -0
  127. package/dist/queue/index.d.ts.map +1 -0
  128. package/dist/queue/index.interface.d.ts +10 -0
  129. package/dist/queue/index.interface.d.ts.map +1 -0
  130. package/dist/queue/job.interface.d.ts +43 -0
  131. package/dist/queue/job.interface.d.ts.map +1 -0
  132. package/dist/queue/manager.d.ts +44 -0
  133. package/dist/queue/manager.d.ts.map +1 -0
  134. package/dist/queue/manager.interface.d.ts +18 -0
  135. package/dist/queue/manager.interface.d.ts.map +1 -0
  136. package/dist/queue/processor/base.d.ts +29 -0
  137. package/dist/queue/processor/base.d.ts.map +1 -0
  138. package/dist/queue/processor/processor.interface.d.ts +16 -0
  139. package/dist/queue/processor/processor.interface.d.ts.map +1 -0
  140. package/dist/queue/worker.d.ts +14 -0
  141. package/dist/queue/worker.d.ts.map +1 -0
  142. package/dist/queue/worker.interface.d.ts +13 -0
  143. package/dist/queue/worker.interface.d.ts.map +1 -0
  144. package/dist/redis/index.d.ts +3 -0
  145. package/dist/redis/index.d.ts.map +1 -0
  146. package/dist/redis/instance.d.ts +32 -0
  147. package/dist/redis/instance.d.ts.map +1 -0
  148. package/dist/redis/instance.interface.d.ts +9 -0
  149. package/dist/redis/instance.interface.d.ts.map +1 -0
  150. package/dist/redis/manager.d.ts +15 -0
  151. package/dist/redis/manager.d.ts.map +1 -0
  152. package/dist/redis/manager.interface.d.ts +8 -0
  153. package/dist/redis/manager.interface.d.ts.map +1 -0
  154. package/dist/redis/manager.js +13 -14
  155. package/dist/redis/manager.js.map +2 -2
  156. package/dist/request-context/index.d.ts +3 -0
  157. package/dist/request-context/index.d.ts.map +1 -0
  158. package/dist/request-context/request-context.d.ts +108 -0
  159. package/dist/request-context/request-context.d.ts.map +1 -0
  160. package/dist/request-context/request-context.interface.d.ts +46 -0
  161. package/dist/request-context/request-context.interface.d.ts.map +1 -0
  162. package/dist/services/aws/index.d.ts +2 -0
  163. package/dist/services/aws/index.d.ts.map +1 -0
  164. package/dist/services/aws/s3.d.ts +54 -0
  165. package/dist/services/aws/s3.d.ts.map +1 -0
  166. package/dist/services/aws/s3.interface.d.ts +14 -0
  167. package/dist/services/aws/s3.interface.d.ts.map +1 -0
  168. package/dist/services/index.d.ts +2 -0
  169. package/dist/services/index.d.ts.map +1 -0
  170. package/dist/util/file.d.ts +58 -0
  171. package/dist/util/file.d.ts.map +1 -0
  172. package/dist/util/helper.d.ts +51 -0
  173. package/dist/util/helper.d.ts.map +1 -0
  174. package/dist/util/helper.js +72 -10
  175. package/dist/util/helper.js.map +2 -2
  176. package/dist/util/image.d.ts +12 -0
  177. package/dist/util/image.d.ts.map +1 -0
  178. package/dist/util/index.d.ts +11 -0
  179. package/dist/util/index.d.ts.map +1 -0
  180. package/dist/util/loader.d.ts +21 -0
  181. package/dist/util/loader.d.ts.map +1 -0
  182. package/dist/util/loader.js +5 -2
  183. package/dist/util/loader.js.map +2 -2
  184. package/dist/util/num.d.ts +13 -0
  185. package/dist/util/num.d.ts.map +1 -0
  186. package/dist/util/os.d.ts +6 -0
  187. package/dist/util/os.d.ts.map +1 -0
  188. package/dist/util/str.d.ts +39 -0
  189. package/dist/util/str.d.ts.map +1 -0
  190. package/dist/util/time.d.ts +19 -0
  191. package/dist/util/time.d.ts.map +1 -0
  192. package/dist/util/time.interface.d.ts +12 -0
  193. package/dist/util/time.interface.d.ts.map +1 -0
  194. package/dist/util/timing.d.ts +36 -0
  195. package/dist/util/timing.d.ts.map +1 -0
  196. package/dist/util/timing.interface.d.ts +47 -0
  197. package/dist/util/timing.interface.d.ts.map +1 -0
  198. package/dist/util/url.d.ts +7 -0
  199. package/dist/util/url.d.ts.map +1 -0
  200. package/dist/webserver/controller/auth-middleware.d.ts +21 -0
  201. package/dist/webserver/controller/auth-middleware.d.ts.map +1 -0
  202. package/dist/webserver/controller/base.d.ts +41 -0
  203. package/dist/webserver/controller/base.d.ts.map +1 -0
  204. package/dist/webserver/controller/base.interface.d.ts +50 -0
  205. package/dist/webserver/controller/base.interface.d.ts.map +1 -0
  206. package/dist/webserver/controller/entity.d.ts +94 -0
  207. package/dist/webserver/controller/entity.d.ts.map +1 -0
  208. package/dist/webserver/controller/example-auth.d.ts +12 -0
  209. package/dist/webserver/controller/example-auth.d.ts.map +1 -0
  210. package/dist/webserver/controller/health.d.ts +15 -0
  211. package/dist/webserver/controller/health.d.ts.map +1 -0
  212. package/dist/webserver/define-action.d.ts +26 -0
  213. package/dist/webserver/define-action.d.ts.map +1 -0
  214. package/dist/webserver/define-action.js +16 -0
  215. package/dist/webserver/define-action.js.map +7 -0
  216. package/dist/webserver/define-route.d.ts +53 -0
  217. package/dist/webserver/define-route.d.ts.map +1 -0
  218. package/dist/webserver/define-route.js +11 -6
  219. package/dist/webserver/define-route.js.map +2 -2
  220. package/dist/webserver/index.d.ts +14 -0
  221. package/dist/webserver/index.d.ts.map +1 -0
  222. package/dist/webserver/index.js +2 -0
  223. package/dist/webserver/index.js.map +2 -2
  224. package/dist/webserver/util.d.ts +10 -0
  225. package/dist/webserver/util.d.ts.map +1 -0
  226. package/dist/webserver/util.js +5 -2
  227. package/dist/webserver/util.js.map +2 -2
  228. package/dist/webserver/webserver.d.ts +93 -0
  229. package/dist/webserver/webserver.d.ts.map +1 -0
  230. package/dist/webserver/webserver.interface.d.ts +181 -0
  231. package/dist/webserver/webserver.interface.d.ts.map +1 -0
  232. package/dist/webserver/webserver.interface.js.map +1 -1
  233. package/dist/webserver/webserver.js +28 -31
  234. package/dist/webserver/webserver.js.map +2 -2
  235. package/dist/websocket/controller/client/base.d.ts +12 -0
  236. package/dist/websocket/controller/client/base.d.ts.map +1 -0
  237. package/dist/websocket/controller/client/base.interface.d.ts +12 -0
  238. package/dist/websocket/controller/client/base.interface.d.ts.map +1 -0
  239. package/dist/websocket/controller/server/base.d.ts +13 -0
  240. package/dist/websocket/controller/server/base.d.ts.map +1 -0
  241. package/dist/websocket/controller/server/base.interface.d.ts +13 -0
  242. package/dist/websocket/controller/server/base.interface.d.ts.map +1 -0
  243. package/dist/websocket/controllers/client/system.d.ts +6 -0
  244. package/dist/websocket/controllers/client/system.d.ts.map +1 -0
  245. package/dist/websocket/controllers/server/system.d.ts +7 -0
  246. package/dist/websocket/controllers/server/system.d.ts.map +1 -0
  247. package/dist/websocket/index.d.ts +7 -0
  248. package/dist/websocket/index.d.ts.map +1 -0
  249. package/dist/websocket/routes/client/system.d.ts +3 -0
  250. package/dist/websocket/routes/client/system.d.ts.map +1 -0
  251. package/dist/websocket/routes/server/system.d.ts +3 -0
  252. package/dist/websocket/routes/server/system.d.ts.map +1 -0
  253. package/dist/websocket/utils.d.ts +9 -0
  254. package/dist/websocket/utils.d.ts.map +1 -0
  255. package/dist/websocket/websocket-base.d.ts +19 -0
  256. package/dist/websocket/websocket-base.d.ts.map +1 -0
  257. package/dist/websocket/websocket-client-manager.d.ts +53 -0
  258. package/dist/websocket/websocket-client-manager.d.ts.map +1 -0
  259. package/dist/websocket/websocket-client-manager.interface.d.ts +8 -0
  260. package/dist/websocket/websocket-client-manager.interface.d.ts.map +1 -0
  261. package/dist/websocket/websocket-client.d.ts +35 -0
  262. package/dist/websocket/websocket-client.d.ts.map +1 -0
  263. package/dist/websocket/websocket-client.interface.d.ts +14 -0
  264. package/dist/websocket/websocket-client.interface.d.ts.map +1 -0
  265. package/dist/websocket/websocket-room-manager.d.ts +32 -0
  266. package/dist/websocket/websocket-room-manager.d.ts.map +1 -0
  267. package/dist/websocket/websocket-server.d.ts +92 -0
  268. package/dist/websocket/websocket-server.d.ts.map +1 -0
  269. package/dist/websocket/websocket-server.interface.d.ts +16 -0
  270. package/dist/websocket/websocket-server.interface.d.ts.map +1 -0
  271. package/dist/websocket/websocket-server.js +33 -9
  272. package/dist/websocket/websocket-server.js.map +2 -2
  273. package/dist/websocket/websocket-service.d.ts +44 -0
  274. package/dist/websocket/websocket-service.d.ts.map +1 -0
  275. package/dist/websocket/websocket.interface.d.ts +124 -0
  276. package/dist/websocket/websocket.interface.d.ts.map +1 -0
  277. package/package.json +13 -13
  278. package/pxl.js +0 -4
@@ -0,0 +1,41 @@
1
+ import { StatusCodes } from 'http-status-codes';
2
+ import type { FastifyReply, FastifyRequest } from 'fastify';
3
+ import type { DatabaseInstance } from '../../database/index.js';
4
+ import type { RedisInstance } from '../../redis/index.js';
5
+ import type { QueueManager } from '../../queue/index.js';
6
+ import type { ApiError, ApiResponse, WebServerBaseControllerConstructorParams } from './base.interface.js';
7
+ import type { ApplicationConfig } from '../../application/base-application.interface.js';
8
+ import type EventManager from '../../event/manager.js';
9
+ import type { WebServerOptions } from '../webserver.interface.js';
10
+ import type { LifecycleManager } from '../../lifecycle/lifecycle-manager.js';
11
+ export interface AuthenticatedUser<TPayload = Record<string, unknown>> {
12
+ userId: number;
13
+ payload: TPayload;
14
+ }
15
+ export default abstract class BaseController<TQueueManager extends QueueManager = QueueManager, TRedisInstance extends RedisInstance = RedisInstance, TEventManager extends EventManager = EventManager, TDatabaseInstance extends DatabaseInstance = DatabaseInstance> {
16
+ protected workerId: number | undefined;
17
+ protected applicationConfig: ApplicationConfig;
18
+ protected webServerOptions: WebServerOptions;
19
+ protected redisInstance: TRedisInstance;
20
+ protected queueManager: TQueueManager;
21
+ protected eventManager: TEventManager;
22
+ protected databaseInstance: TDatabaseInstance;
23
+ protected lifecycleManager: LifecycleManager;
24
+ constructor({ applicationConfig, webServerOptions, redisInstance, queueManager, eventManager, databaseInstance, lifecycleManager, }: WebServerBaseControllerConstructorParams<TQueueManager, TRedisInstance, TEventManager, TDatabaseInstance>);
25
+ protected sendSuccessResponse<T = unknown>({ reply, data, statusCode, meta, }: {
26
+ reply: FastifyReply;
27
+ data: T;
28
+ statusCode?: StatusCodes;
29
+ meta?: ApiResponse<T>['meta'];
30
+ }): void;
31
+ protected sendNotFoundResponse(reply: FastifyReply, message?: string): void;
32
+ protected sendErrorResponse({ reply, error, statusCode, errorType, }: {
33
+ reply: FastifyReply;
34
+ error: unknown;
35
+ statusCode?: StatusCodes;
36
+ errorType?: ApiError['type'];
37
+ }): void;
38
+ private getErrorType;
39
+ protected authenticateRequest(request: FastifyRequest, reply: FastifyReply): Promise<AuthenticatedUser | null>;
40
+ }
41
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE,MAAM,qBAAqB,CAAC;AAE3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,cAAc,CAC1C,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,cAAc,SAAS,aAAa,GAAG,aAAa,EACpD,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,iBAAiB,SAAS,gBAAgB,GAAG,gBAAgB;IAE7D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC/C,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC;IACxC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;IACtC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;IACtC,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAC9C,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;gBAEjC,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,EAAE,wCAAwC,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,CAAC;IAa5G,SAAS,CAAC,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,EACzC,KAAK,EACL,IAAI,EACJ,UAA2B,EAC3B,IAAI,GACL,EAAE;QACD,KAAK,EAAE,YAAY,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC;QACR,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;KAC/B;IAYD,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,MAA6B;IAW1F,SAAS,CAAC,iBAAiB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,UAAoC,EACpC,SAAS,GACV,EAAE;QACD,KAAK,EAAE,YAAY,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;IA6CD,OAAO,CAAC,YAAY;cAoBJ,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAwErH"}
@@ -0,0 +1,50 @@
1
+ import type { FastifyRequest } from 'fastify';
2
+ import type { ApplicationConfig } from '../../application/base-application.interface.js';
3
+ import type { DatabaseInstance } from '../../database/index.js';
4
+ import type EventManager from '../../event/manager.js';
5
+ import type { QueueManager } from '../../queue/index.js';
6
+ import type { RedisInstance } from '../../redis/index.js';
7
+ import type { RouteHandler, RouteHandlerContext, RouteSchemaDefinition, WebServerOptions } from '../webserver.interface.js';
8
+ import type WebServerBaseController from './base.js';
9
+ import type { LifecycleManager } from '../../lifecycle/lifecycle-manager.js';
10
+ export interface WebServerBaseControllerConstructorParams<TQueueManager extends QueueManager = QueueManager, TRedisInstance extends RedisInstance = RedisInstance, TEventManager extends EventManager = EventManager, TDatabaseInstance extends DatabaseInstance = DatabaseInstance> {
11
+ applicationConfig: ApplicationConfig;
12
+ webServerOptions: WebServerOptions;
13
+ redisInstance: TRedisInstance;
14
+ queueManager: TQueueManager;
15
+ eventManager: TEventManager;
16
+ databaseInstance: TDatabaseInstance;
17
+ lifecycleManager: LifecycleManager;
18
+ }
19
+ export type WebServerBaseControllerType<TQueueManager extends QueueManager = QueueManager, TRedisInstance extends RedisInstance = RedisInstance, TEventManager extends EventManager = EventManager, TDatabaseInstance extends DatabaseInstance = DatabaseInstance> = new (params: WebServerBaseControllerConstructorParams<TQueueManager, TRedisInstance, TEventManager, TDatabaseInstance>) => WebServerBaseController<TQueueManager, TRedisInstance, TEventManager, TDatabaseInstance>;
20
+ export type ControllerAction<Schema extends RouteSchemaDefinition | undefined = undefined> = RouteHandler<Schema>;
21
+ export type ControllerRequest<Schema extends RouteSchemaDefinition | undefined = undefined> = FastifyRequest<RouteHandlerContext<Schema>>;
22
+ export interface ApiResponse<T = unknown> {
23
+ data?: T;
24
+ meta?: {
25
+ pagination?: {
26
+ page: number;
27
+ limit: number;
28
+ total: number;
29
+ totalPages: number;
30
+ };
31
+ timestamp: string;
32
+ requestId: string;
33
+ };
34
+ error?: ApiError;
35
+ }
36
+ export interface ApiError {
37
+ message: string;
38
+ code?: string;
39
+ type: 'validation' | 'authentication' | 'authorization' | 'not_found' | 'server_error' | 'client_error';
40
+ details?: Record<string, unknown>;
41
+ timestamp: string;
42
+ requestId: string;
43
+ }
44
+ export interface PaginationParams {
45
+ page?: number;
46
+ limit?: number;
47
+ sortBy?: string;
48
+ sortOrder?: 'asc' | 'desc';
49
+ }
50
+ //# sourceMappingURL=base.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.interface.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/base.interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import 'reflect-metadata';
2
+ import type { EntityManager } from '@mikro-orm/core';
3
+ import type { FastifyReply, FastifyRequest } from 'fastify';
4
+ import BaseController from './base.js';
5
+ import type { DynamicEntity } from '../../database/dynamic-entity.js';
6
+ import type { WebServerBaseControllerConstructorParams } from './base.interface.js';
7
+ export default abstract class EntityController extends BaseController {
8
+ protected abstract entityName: string;
9
+ protected entityManager: EntityManager;
10
+ private static entityCache;
11
+ constructor(props: WebServerBaseControllerConstructorParams);
12
+ protected getEntity: () => Promise<typeof DynamicEntity | undefined>;
13
+ private getEntityProperties;
14
+ options: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
15
+ metadata: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
16
+ protected preGetMany(_: {
17
+ entityManager: EntityManager;
18
+ request: FastifyRequest;
19
+ reply: FastifyReply;
20
+ }): Promise<void>;
21
+ protected postGetMany(_: {
22
+ entityManager: EntityManager;
23
+ request: FastifyRequest;
24
+ reply: FastifyReply;
25
+ data: {
26
+ items: any[];
27
+ total: number;
28
+ page: number;
29
+ totalPages: number;
30
+ limit: number;
31
+ };
32
+ }): Promise<void>;
33
+ getMany: (request: FastifyRequest<{
34
+ Querystring: {
35
+ page: string;
36
+ limit: string;
37
+ filters: string;
38
+ sort: string;
39
+ "sort-order": string;
40
+ search: string;
41
+ [key: string]: any;
42
+ };
43
+ }>, reply: FastifyReply) => Promise<void>;
44
+ protected preGetOne(_: {
45
+ entityManager: EntityManager;
46
+ request: FastifyRequest;
47
+ reply: FastifyReply;
48
+ }): Promise<void>;
49
+ protected postGetOne(_: {
50
+ entityManager: EntityManager;
51
+ request: FastifyRequest;
52
+ reply: FastifyReply;
53
+ item: any;
54
+ }): Promise<void>;
55
+ getOne: (request: FastifyRequest<{
56
+ Params: {
57
+ id: number;
58
+ };
59
+ Querystring: {
60
+ populate: string;
61
+ };
62
+ }>, reply: FastifyReply) => Promise<void>;
63
+ protected preCreateOne: ({ request, reply, }: {
64
+ request: FastifyRequest;
65
+ reply: FastifyReply;
66
+ }) => {
67
+ request: FastifyRequest;
68
+ reply: FastifyReply;
69
+ };
70
+ protected postCreateOne(_: {
71
+ entityManager: EntityManager;
72
+ request: FastifyRequest;
73
+ reply: FastifyReply;
74
+ item: any;
75
+ }): Promise<void>;
76
+ createOne: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
77
+ protected postUpdateOne(_: {
78
+ entityManager: EntityManager;
79
+ request: FastifyRequest;
80
+ reply: FastifyReply;
81
+ item: any;
82
+ }): Promise<void>;
83
+ updateOne: (request: FastifyRequest<{
84
+ Params: {
85
+ id: number;
86
+ };
87
+ }>, reply: FastifyReply) => Promise<void>;
88
+ deleteOne: (request: FastifyRequest<{
89
+ Params: {
90
+ id: number;
91
+ };
92
+ }>, reply: FastifyReply) => Promise<void>;
93
+ }
94
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import WebServerBaseController from './base.js';
3
+ /**
4
+ * Example controller demonstrating simplified authentication
5
+ */
6
+ export default class ExampleAuthController extends WebServerBaseController {
7
+ getUserTickers: import("./auth-middleware.js").RouteHandler;
8
+ getUserOrders: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
9
+ getUserProfile: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
10
+ private withAuthentication;
11
+ }
12
+ //# sourceMappingURL=example-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-auth.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/example-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,uBAAmD,MAAM,WAAW,CAAC;AAG5E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,uBAAuB;IAEjE,cAAc,8CAWmB;IAGjC,aAAa,GAAU,SAAS,cAAc,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAexF;IAGK,cAAc,GAAU,SAAS,cAAc,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAWzF;YAGY,kBAAkB;CAcjC"}
@@ -0,0 +1,15 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import BaseController from './base.js';
3
+ export default class HealthController extends BaseController {
4
+ /**
5
+ * Liveness probe: process is up and not in stopping phase.
6
+ */
7
+ live: (_: FastifyRequest, reply: FastifyReply) => Promise<void>;
8
+ /**
9
+ * Readiness probe: service dependencies are available & lifecycle is RUNNING with aggregated readiness.
10
+ */
11
+ ready: (_: FastifyRequest, reply: FastifyReply) => Promise<void>;
12
+ private checkDatabaseConnection;
13
+ private checkRedisConnection;
14
+ }
15
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,cAAc,MAAM,WAAW,CAAC;AAGvC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D;;OAEG;IACI,IAAI,GAAU,GAAG,cAAc,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAQzE;IAEF;;OAEG;IACI,KAAK,GAAU,GAAG,cAAc,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CA6B1E;YAEY,uBAAuB;YAQvB,oBAAoB;CAOnC"}
@@ -0,0 +1,26 @@
1
+ import type { RouteSchemaDefinition } from './webserver.interface.js';
2
+ import type { ControllerAction } from './controller/base.interface.js';
3
+ /**
4
+ * Define a typed controller action with schema inference.
5
+ * This helper provides TypeScript type inference for controller methods based on Zod schemas.
6
+ *
7
+ * @example
8
+ * const helloSchema = {
9
+ * body: z.object({ name: z.string() }),
10
+ * response: { 200: z.object({ message: z.string() }) }
11
+ * } satisfies RouteSchemaDefinition;
12
+ *
13
+ * class MyController extends WebServerBaseController {
14
+ * hello = defineAction(helloSchema, async (request, reply) => {
15
+ * // request.body is typed as { name: string }
16
+ * return reply.send({ message: `Hello ${request.body.name}` });
17
+ * });
18
+ * }
19
+ */
20
+ export declare function defineAction<Schema extends RouteSchemaDefinition<any, any, any, any, any>>(schema: Schema, handler: ControllerAction<Schema>): ControllerAction<Schema>;
21
+ /**
22
+ * Define a controller action without a schema.
23
+ * Useful for actions that don't need validation or type inference.
24
+ */
25
+ export declare function defineAction<Schema extends undefined = undefined>(handler: ControllerAction<Schema>): ControllerAction<Schema>;
26
+ //# sourceMappingURL=define-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-action.d.ts","sourceRoot":"","sources":["../../src/webserver/define-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACxF,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAChC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE5B;;;GAGG;AAEH,wBAAgB,YAAY,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS,EAC/D,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAChC,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ function defineAction(schemaOrHandler, handler) {
4
+ if (typeof schemaOrHandler === "function") {
5
+ return schemaOrHandler;
6
+ }
7
+ if (!handler) {
8
+ throw new Error("Handler is required when schema is provided");
9
+ }
10
+ return handler;
11
+ }
12
+ __name(defineAction, "defineAction");
13
+ export {
14
+ defineAction
15
+ };
16
+ //# sourceMappingURL=define-action.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/webserver/define-action.ts"],
4
+ "sourcesContent": ["import type { RouteSchemaDefinition } from './webserver.interface.js';\nimport type { ControllerAction } from './controller/base.interface.js';\n\n/**\n * Define a typed controller action with schema inference.\n * This helper provides TypeScript type inference for controller methods based on Zod schemas.\n *\n * @example\n * const helloSchema = {\n * body: z.object({ name: z.string() }),\n * response: { 200: z.object({ message: z.string() }) }\n * } satisfies RouteSchemaDefinition;\n *\n * class MyController extends WebServerBaseController {\n * hello = defineAction(helloSchema, async (request, reply) => {\n * // request.body is typed as { name: string }\n * return reply.send({ message: `Hello ${request.body.name}` });\n * });\n * }\n */\nexport function defineAction<Schema extends RouteSchemaDefinition<any, any, any, any, any>>(\n schema: Schema,\n handler: ControllerAction<Schema>,\n): ControllerAction<Schema>;\n\n/**\n * Define a controller action without a schema.\n * Useful for actions that don't need validation or type inference.\n */\n// eslint-disable-next-line no-redeclare\nexport function defineAction<Schema extends undefined = undefined>(\n handler: ControllerAction<Schema>,\n): ControllerAction<Schema>;\n\n// eslint-disable-next-line no-redeclare\nexport function defineAction<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined>(\n schemaOrHandler: Schema | ControllerAction<Schema>,\n handler?: ControllerAction<Schema>,\n): ControllerAction<Schema> {\n if (typeof schemaOrHandler === 'function') {\n // No schema provided, just return the handler\n return schemaOrHandler;\n }\n\n // Schema provided, return the handler\n // Note: The schema is attached for documentation/IDE purposes only\n // Actual validation happens at the route level\n if (!handler) {\n throw new Error('Handler is required when schema is provided');\n }\n\n return handler;\n}\n"],
5
+ "mappings": ";;AAmCO,SAAS,aACd,iBACA,SAC0B;AAC1B,MAAI,OAAO,oBAAoB,YAAY;AAEzC,WAAO;AAAA,EACT;AAKA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAEA,SAAO;AACT;AAjBgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,53 @@
1
+ import type { HTTPMethods } from 'fastify';
2
+ import { type RouteSchemaDefinition, type WebServerRoute } from './webserver.interface.js';
3
+ import type { ControllerAction, WebServerBaseControllerType } from './controller/base.interface.js';
4
+ export interface DefineRouteConfig<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined, Handler extends ControllerAction<Schema>> {
5
+ method: HTTPMethods | HTTPMethods[];
6
+ path: string;
7
+ schema?: Schema;
8
+ handler: Handler;
9
+ }
10
+ export interface DefineRouteWithControllerConfig<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined = undefined> {
11
+ method: HTTPMethods | HTTPMethods[];
12
+ path: string;
13
+ schema?: Schema;
14
+ controller: WebServerBaseControllerType;
15
+ action: string;
16
+ }
17
+ /**
18
+ * Define a route with an inline handler function.
19
+ * Provides full type inference for request parameters based on the schema.
20
+ *
21
+ * @example
22
+ * const helloSchema = {
23
+ * body: z.object({ name: z.string() }),
24
+ * response: { 200: z.object({ message: z.string() }) }
25
+ * } satisfies RouteSchemaDefinition;
26
+ *
27
+ * defineRoute({
28
+ * method: 'POST',
29
+ * path: '/hello',
30
+ * schema: helloSchema,
31
+ * handler: async (request, reply) => {
32
+ * // request.body is typed as { name: string }
33
+ * return reply.send({ message: `Hello ${request.body.name}` });
34
+ * }
35
+ * });
36
+ */
37
+ export declare function defineRoute<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined, Handler extends ControllerAction<Schema>>(config: DefineRouteConfig<Schema, Handler>): WebServerRoute;
38
+ /**
39
+ * Define a route with a controller and action method.
40
+ * Note: Type inference for controller actions is limited. Consider using inline handlers for full type safety.
41
+ *
42
+ * @example
43
+ * defineRoute({
44
+ * method: 'POST',
45
+ * path: '/hello',
46
+ * controller: HelloController,
47
+ * action: 'create',
48
+ * schema: helloSchema
49
+ * });
50
+ */
51
+ export declare function defineRoute<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined = undefined>(config: DefineRouteWithControllerConfig<Schema>): WebServerRoute;
52
+ export type DefineRoute = typeof defineRoute;
53
+ //# sourceMappingURL=define-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-route.d.ts","sourceRoot":"","sources":["../../src/webserver/define-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAEpG,MAAM,WAAW,iBAAiB,CAChC,MAAM,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EACzE,OAAO,SAAS,gBAAgB,CAAC,MAAM,CAAC;IAExC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,+BAA+B,CAC9C,MAAM,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS;IAErF,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,2BAA2B,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,MAAM,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EACzE,OAAO,SAAS,gBAAgB,CAAC,MAAM,CAAC,EACxC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAAC;AAE9D;;;;;;;;;;;;GAYG;AAEH,wBAAgB,WAAW,CAAC,MAAM,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,EAC/G,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC,GAC9C,cAAc,CAAC;AA2BlB,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC"}
@@ -3,15 +3,20 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
  import {
4
4
  WebServerRouteType
5
5
  } from "./webserver.interface.js";
6
- function defineRoute({ method, path, schema, handler }) {
6
+ function defineRoute(config) {
7
7
  const route = {
8
8
  type: WebServerRouteType.Default,
9
- method,
10
- path,
11
- handler
9
+ method: config.method,
10
+ path: config.path
12
11
  };
13
- if (schema) {
14
- route.schema = schema;
12
+ if ("handler" in config) {
13
+ route.handler = config.handler;
14
+ } else if ("controller" in config && "action" in config) {
15
+ route.controller = config.controller;
16
+ route.action = config.action;
17
+ }
18
+ if (config.schema) {
19
+ route.schema = config.schema;
15
20
  }
16
21
  return route;
17
22
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/webserver/define-route.ts"],
4
- "sourcesContent": ["import type { HTTPMethods } from 'fastify';\nimport {\n type AnyRouteSchemaDefinition,\n type RouteSchemaDefinition,\n type WebServerRoute,\n WebServerRouteType,\n} from './webserver.interface.js';\nimport type { ControllerAction } from './controller/base.interface.js';\n\nexport interface DefineRouteConfig<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined,\n Handler extends ControllerAction<Schema>,\n> {\n method: HTTPMethods | HTTPMethods[];\n path: string;\n schema?: Schema;\n handler: Handler;\n}\n\nexport function defineRoute<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined,\n Handler extends ControllerAction<Schema>,\n>({ method, path, schema, handler }: DefineRouteConfig<Schema, Handler>): WebServerRoute {\n const route: WebServerRoute = {\n type: WebServerRouteType.Default,\n method,\n path,\n handler: handler as ControllerAction<any>,\n };\n\n if (schema) {\n route.schema = schema as AnyRouteSchemaDefinition;\n }\n\n return route;\n}\n\nexport type DefineRoute = typeof defineRoute;\n"],
5
- "mappings": ";;AACA;AAAA,EAIE;AAAA,OACK;AAaA,SAAS,YAGd,EAAE,QAAQ,MAAM,QAAQ,QAAQ,GAAuD;AACvF,QAAM,QAAwB;AAAA,IAC5B,MAAM,mBAAmB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,QAAQ;AACV,UAAM,SAAS;AAAA,EACjB;AAEA,SAAO;AACT;AAhBgB;",
4
+ "sourcesContent": ["import type { HTTPMethods } from 'fastify';\nimport {\n type AnyRouteSchemaDefinition,\n type RouteSchemaDefinition,\n type WebServerRoute,\n WebServerRouteType,\n} from './webserver.interface.js';\nimport type { ControllerAction, WebServerBaseControllerType } from './controller/base.interface.js';\n\nexport interface DefineRouteConfig<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined,\n Handler extends ControllerAction<Schema>,\n> {\n method: HTTPMethods | HTTPMethods[];\n path: string;\n schema?: Schema;\n handler: Handler;\n}\n\nexport interface DefineRouteWithControllerConfig<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined = undefined,\n> {\n method: HTTPMethods | HTTPMethods[];\n path: string;\n schema?: Schema;\n controller: WebServerBaseControllerType;\n action: string;\n}\n\n/**\n * Define a route with an inline handler function.\n * Provides full type inference for request parameters based on the schema.\n *\n * @example\n * const helloSchema = {\n * body: z.object({ name: z.string() }),\n * response: { 200: z.object({ message: z.string() }) }\n * } satisfies RouteSchemaDefinition;\n *\n * defineRoute({\n * method: 'POST',\n * path: '/hello',\n * schema: helloSchema,\n * handler: async (request, reply) => {\n * // request.body is typed as { name: string }\n * return reply.send({ message: `Hello ${request.body.name}` });\n * }\n * });\n */\nexport function defineRoute<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined,\n Handler extends ControllerAction<Schema>,\n>(config: DefineRouteConfig<Schema, Handler>): WebServerRoute;\n\n/**\n * Define a route with a controller and action method.\n * Note: Type inference for controller actions is limited. Consider using inline handlers for full type safety.\n *\n * @example\n * defineRoute({\n * method: 'POST',\n * path: '/hello',\n * controller: HelloController,\n * action: 'create',\n * schema: helloSchema\n * });\n */\n// eslint-disable-next-line no-redeclare\nexport function defineRoute<Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined = undefined>(\n config: DefineRouteWithControllerConfig<Schema>,\n): WebServerRoute;\n\n// eslint-disable-next-line no-redeclare\nexport function defineRoute<\n Schema extends RouteSchemaDefinition<any, any, any, any, any> | undefined,\n Handler extends ControllerAction<Schema>,\n>(config: DefineRouteConfig<Schema, Handler> | DefineRouteWithControllerConfig<Schema>): WebServerRoute {\n const route: WebServerRoute = {\n type: WebServerRouteType.Default,\n method: config.method,\n path: config.path,\n };\n\n if ('handler' in config) {\n route.handler = config.handler as ControllerAction<any>;\n } else if ('controller' in config && 'action' in config) {\n route.controller = config.controller;\n route.action = config.action;\n }\n\n if (config.schema) {\n route.schema = config.schema as AnyRouteSchemaDefinition;\n }\n\n return route;\n}\n\nexport type DefineRoute = typeof defineRoute;\n"],
5
+ "mappings": ";;AACA;AAAA,EAIE;AAAA,OACK;AAmEA,SAAS,YAGd,QAAsG;AACtG,QAAM,QAAwB;AAAA,IAC5B,MAAM,mBAAmB;AAAA,IACzB,QAAQ,OAAO;AAAA,IACf,MAAM,OAAO;AAAA,EACf;AAEA,MAAI,aAAa,QAAQ;AACvB,UAAM,UAAU,OAAO;AAAA,EACzB,WAAW,gBAAgB,UAAU,YAAY,QAAQ;AACvD,UAAM,aAAa,OAAO;AAC1B,UAAM,SAAS,OAAO;AAAA,EACxB;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,SAAS,OAAO;AAAA,EACxB;AAEA,SAAO;AACT;AAtBgB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,14 @@
1
+ export { default as WebServer } from './webserver.js';
2
+ export type { RouteHandler as TypedRouteHandler, RouteHandlerContext, RouteSchemaDefinition, WebServerConstructorParams, WebServerOptions, WebServerRoute, } from './webserver.interface.js';
3
+ export { WebServerRouteType } from './webserver.interface.js';
4
+ export { default as WebServerBaseController } from './controller/base.js';
5
+ export type { ControllerAction, ControllerRequest, WebServerBaseControllerConstructorParams, } from './controller/base.interface.js';
6
+ export { default as WebServerHealthController } from './controller/health.js';
7
+ export { default as WebServerEntityController } from './controller/entity.js';
8
+ export { default as ExampleAuthController } from './controller/example-auth.js';
9
+ export { default as RouteUtil } from './util.js';
10
+ export type { AuthenticatedUser, AuthenticatedRequest, AuthenticatedRouteHandler, RouteHandler, } from './controller/auth-middleware.js';
11
+ export { withAuth } from './controller/auth-middleware.js';
12
+ export { defineRoute } from './define-route.js';
13
+ export { defineAction } from './define-action.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webserver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EACV,YAAY,IAAI,iBAAiB,EACjC,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,wCAAwC,GACzC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,GACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -7,6 +7,7 @@ import { default as default6 } from "./controller/example-auth.js";
7
7
  import { default as default7 } from "./util.js";
8
8
  import { withAuth } from "./controller/auth-middleware.js";
9
9
  import { defineRoute } from "./define-route.js";
10
+ import { defineAction } from "./define-action.js";
10
11
  export {
11
12
  default6 as ExampleAuthController,
12
13
  default7 as RouteUtil,
@@ -15,6 +16,7 @@ export {
15
16
  default5 as WebServerEntityController,
16
17
  default4 as WebServerHealthController,
17
18
  WebServerRouteType,
19
+ defineAction,
18
20
  defineRoute,
19
21
  withAuth
20
22
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/webserver/index.ts"],
4
- "sourcesContent": ["export { default as WebServer } from './webserver.js';\nexport type {\n RouteHandler as TypedRouteHandler,\n RouteHandlerContext,\n RouteSchemaDefinition,\n WebServerConstructorParams,\n WebServerOptions,\n WebServerRoute,\n} from './webserver.interface.js';\nexport { WebServerRouteType } from './webserver.interface.js';\nexport { default as WebServerBaseController } from './controller/base.js';\nexport type {\n ControllerAction,\n ControllerRequest,\n WebServerBaseControllerConstructorParams,\n} from './controller/base.interface.js';\nexport { default as WebServerHealthController } from './controller/health.js';\nexport { default as WebServerEntityController } from './controller/entity.js';\nexport { default as ExampleAuthController } from './controller/example-auth.js';\nexport { default as RouteUtil } from './util.js';\nexport type {\n AuthenticatedUser,\n AuthenticatedRequest,\n AuthenticatedRouteHandler,\n RouteHandler,\n} from './controller/auth-middleware.js';\nexport { withAuth } from './controller/auth-middleware.js';\nexport { defineRoute } from './define-route.js';\n"],
5
- "mappings": "AAAA,SAAoB,WAAXA,gBAA4B;AASrC,SAAS,0BAA0B;AACnC,SAAoB,WAAXA,gBAA0C;AAMnD,SAAoB,WAAXA,gBAA4C;AACrD,SAAoB,WAAXA,gBAA4C;AACrD,SAAoB,WAAXA,gBAAwC;AACjD,SAAoB,WAAXA,gBAA4B;AAOrC,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;",
4
+ "sourcesContent": ["export { default as WebServer } from './webserver.js';\nexport type {\n RouteHandler as TypedRouteHandler,\n RouteHandlerContext,\n RouteSchemaDefinition,\n WebServerConstructorParams,\n WebServerOptions,\n WebServerRoute,\n} from './webserver.interface.js';\nexport { WebServerRouteType } from './webserver.interface.js';\nexport { default as WebServerBaseController } from './controller/base.js';\nexport type {\n ControllerAction,\n ControllerRequest,\n WebServerBaseControllerConstructorParams,\n} from './controller/base.interface.js';\nexport { default as WebServerHealthController } from './controller/health.js';\nexport { default as WebServerEntityController } from './controller/entity.js';\nexport { default as ExampleAuthController } from './controller/example-auth.js';\nexport { default as RouteUtil } from './util.js';\nexport type {\n AuthenticatedUser,\n AuthenticatedRequest,\n AuthenticatedRouteHandler,\n RouteHandler,\n} from './controller/auth-middleware.js';\nexport { withAuth } from './controller/auth-middleware.js';\nexport { defineRoute } from './define-route.js';\nexport { defineAction } from './define-action.js';\n"],
5
+ "mappings": "AAAA,SAAoB,WAAXA,gBAA4B;AASrC,SAAS,0BAA0B;AACnC,SAAoB,WAAXA,gBAA0C;AAMnD,SAAoB,WAAXA,gBAA4C;AACrD,SAAoB,WAAXA,gBAA4C;AACrD,SAAoB,WAAXA,gBAAwC;AACjD,SAAoB,WAAXA,gBAA4B;AAOrC,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;",
6
6
  "names": ["default"]
7
7
  }
@@ -0,0 +1,10 @@
1
+ import type { EntityRouteDefinition } from './webserver.interface.js';
2
+ declare function getEntityRouteDefinitions({ basePath, entityValidationSchema, }: {
3
+ basePath: string;
4
+ entityValidationSchema: any;
5
+ }): EntityRouteDefinition[];
6
+ declare const _default: {
7
+ getEntityRouteDefinitions: typeof getEntityRouteDefinitions;
8
+ };
9
+ export default _default;
10
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/webserver/util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,0BAA0B,CAAC;AAE7F,iBAAS,yBAAyB,CAAC,EACjC,QAAQ,EACR,sBAAsB,GACvB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,GAAG,CAAC;CAC7B,GAAG,qBAAqB,EAAE,CAkE1B;;;;AAED,wBAGE"}
@@ -37,12 +37,15 @@ function getEntityRouteDefinitions({
37
37
  action: "createOne",
38
38
  validationSchema: entityValidationSchema
39
39
  });
40
+ const updateOneValidationSchemas = [idValidationSchema];
41
+ if (entityValidationSchema) {
42
+ updateOneValidationSchemas.push(entityValidationSchema);
43
+ }
40
44
  routeDefinitions.push({
41
45
  path: `${basePath}/:id`,
42
46
  method: "PUT",
43
47
  action: "updateOne",
44
- validationSchema: entityValidationSchema
45
- // TODO: Need to merge with idValidationSchema
48
+ validationSchema: updateOneValidationSchemas
46
49
  });
47
50
  routeDefinitions.push({
48
51
  path: `${basePath}/:id`,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/webserver/util.ts"],
4
- "sourcesContent": ["import type { HTTPMethods } from 'fastify';\nimport type { EntityRouteDefinition, RouteValidationSchema } from './webserver.interface.js';\n\nfunction getEntityRouteDefinitions({\n basePath,\n entityValidationSchema,\n}: {\n basePath: string;\n entityValidationSchema: any;\n}): EntityRouteDefinition[] {\n const routeDefinitions: EntityRouteDefinition[] = [];\n\n const idValidationSchema: RouteValidationSchema = {\n type: 'params',\n schema: {\n properties: {\n id: { type: 'integer' },\n },\n required: ['id'],\n type: 'object',\n },\n };\n\n // Options\n routeDefinitions.push({\n path: `${basePath}/options`,\n method: 'GET' as HTTPMethods,\n action: 'options',\n });\n\n // Get many\n routeDefinitions.push({\n path: `${basePath}`,\n method: 'GET' as HTTPMethods,\n action: 'getMany',\n });\n\n // Get one\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'GET' as HTTPMethods,\n action: 'getOne',\n validationSchema: idValidationSchema,\n });\n\n // Create one\n routeDefinitions.push({\n path: `${basePath}`,\n method: 'POST' as HTTPMethods,\n action: 'createOne',\n validationSchema: entityValidationSchema,\n });\n\n // Update one\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'PUT' as HTTPMethods,\n action: 'updateOne',\n validationSchema: entityValidationSchema, // TODO: Need to merge with idValidationSchema\n });\n\n // Delete one\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'DELETE' as HTTPMethods,\n action: 'deleteOne',\n validationSchema: idValidationSchema,\n });\n\n return routeDefinitions;\n}\n\nexport default {\n // getEntityRoutes,\n getEntityRouteDefinitions,\n};\n"],
5
- "mappings": ";;AAGA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AACF,GAG4B;AAC1B,QAAM,mBAA4C,CAAC;AAEnD,QAAM,qBAA4C;AAAA,IAChD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,YAAY;AAAA,QACV,IAAI,EAAE,MAAM,UAAU;AAAA,MACxB;AAAA,MACA,UAAU,CAAC,IAAI;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AAGA,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA;AAAA,EACpB,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAED,SAAO;AACT;AAnES;AAqET,IAAO,eAAQ;AAAA;AAAA,EAEb;AACF;",
4
+ "sourcesContent": ["import type { HTTPMethods } from 'fastify';\nimport type { EntityRouteDefinition, RouteValidationSchema } from './webserver.interface.js';\n\nfunction getEntityRouteDefinitions({\n basePath,\n entityValidationSchema,\n}: {\n basePath: string;\n entityValidationSchema: any;\n}): EntityRouteDefinition[] {\n const routeDefinitions: EntityRouteDefinition[] = [];\n\n const idValidationSchema: RouteValidationSchema = {\n type: 'params',\n schema: {\n properties: {\n id: { type: 'integer' },\n },\n required: ['id'],\n type: 'object',\n },\n };\n\n // Options\n routeDefinitions.push({\n path: `${basePath}/options`,\n method: 'GET' as HTTPMethods,\n action: 'options',\n });\n\n // Get many\n routeDefinitions.push({\n path: `${basePath}`,\n method: 'GET' as HTTPMethods,\n action: 'getMany',\n });\n\n // Get one\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'GET' as HTTPMethods,\n action: 'getOne',\n validationSchema: idValidationSchema,\n });\n\n // Create one\n routeDefinitions.push({\n path: `${basePath}`,\n method: 'POST' as HTTPMethods,\n action: 'createOne',\n validationSchema: entityValidationSchema,\n });\n\n // Update one - merge params and body validation\n const updateOneValidationSchemas: RouteValidationSchema[] = [idValidationSchema];\n if (entityValidationSchema) {\n updateOneValidationSchemas.push(entityValidationSchema);\n }\n\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'PUT' as HTTPMethods,\n action: 'updateOne',\n validationSchema: updateOneValidationSchemas,\n });\n\n // Delete one\n routeDefinitions.push({\n path: `${basePath}/:id`,\n method: 'DELETE' as HTTPMethods,\n action: 'deleteOne',\n validationSchema: idValidationSchema,\n });\n\n return routeDefinitions;\n}\n\nexport default {\n // getEntityRoutes,\n getEntityRouteDefinitions,\n};\n"],
5
+ "mappings": ";;AAGA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AACF,GAG4B;AAC1B,QAAM,mBAA4C,CAAC;AAEnD,QAAM,qBAA4C;AAAA,IAChD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,YAAY;AAAA,QACV,IAAI,EAAE,MAAM,UAAU;AAAA,MACxB;AAAA,MACA,UAAU,CAAC,IAAI;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AAGA,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAGD,QAAM,6BAAsD,CAAC,kBAAkB;AAC/E,MAAI,wBAAwB;AAC1B,+BAA2B,KAAK,sBAAsB;AAAA,EACxD;AAEA,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAGD,mBAAiB,KAAK;AAAA,IACpB,MAAM,GAAG,QAAQ;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB,CAAC;AAED,SAAO;AACT;AAxES;AA0ET,IAAO,eAAQ;AAAA;AAAA,EAEb;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,93 @@
1
+ import { type FastifyInstance, type HTTPMethods } from 'fastify';
2
+ import { type AnyRouteSchemaDefinition, type WebServerConstructorParams } from './webserver.interface.js';
3
+ import type { ControllerAction } from './controller/base.interface.js';
4
+ import type { LifecycleManager } from '../lifecycle/lifecycle-manager.js';
5
+ import { type ZodTypeProvider } from 'fastify-type-provider-zod';
6
+ declare module 'fastify' {
7
+ interface FastifyRequest {
8
+ startTime?: number;
9
+ requestId?: string;
10
+ }
11
+ }
12
+ declare class WebServer {
13
+ private logger;
14
+ private applicationConfig;
15
+ private options;
16
+ private routes;
17
+ private redisInstance;
18
+ private queueManager;
19
+ private eventManager;
20
+ private databaseInstance;
21
+ fastifyServer: FastifyInstance<any, any, any, any, ZodTypeProvider>;
22
+ private lifecycleManager;
23
+ private _isReady;
24
+ constructor(params: WebServerConstructorParams & {
25
+ lifecycleManager: LifecycleManager;
26
+ });
27
+ /**
28
+ * Load web server.
29
+ */
30
+ load(): Promise<void>;
31
+ /**
32
+ * Configure security features (Helmet, Rate Limiting)
33
+ */
34
+ private configureSecurity;
35
+ /**
36
+ * Configure hooks.
37
+ */
38
+ private configureHooks;
39
+ private onListen;
40
+ private onRequest;
41
+ private onResponse;
42
+ private onError;
43
+ private onClose;
44
+ private configureCORS;
45
+ private configureMultipartUploads;
46
+ /**
47
+ * Configure routes.
48
+ */
49
+ private configureRoutes;
50
+ private loadRoutesFromDirectory;
51
+ private normalizeRouteExport;
52
+ private isValidRoute;
53
+ defineRoute({ controllerInstance, controllerName, routeMethod, routePath, routeAction, routeSchema, handlerOverride, legacyValidation, }: {
54
+ controllerInstance: any;
55
+ controllerName: string;
56
+ routeMethod: HTTPMethods | HTTPMethods[];
57
+ routePath: string;
58
+ routeAction?: string;
59
+ routeSchema?: AnyRouteSchemaDefinition;
60
+ handlerOverride?: ControllerAction<any>;
61
+ legacyValidation?: {
62
+ type: 'body' | 'query' | 'params';
63
+ schema: {
64
+ [key: string]: any;
65
+ };
66
+ } | Array<{
67
+ type: 'body' | 'query' | 'params';
68
+ schema: {
69
+ [key: string]: any;
70
+ };
71
+ }>;
72
+ }): Promise<void>;
73
+ /**
74
+ * Start web server.
75
+ */
76
+ start(): Promise<void>;
77
+ /**
78
+ * Stop web server.
79
+ */
80
+ stop(): Promise<void>;
81
+ private buildFastifySchema;
82
+ private buildLegacySchema;
83
+ /**
84
+ * Check if web server is ready to accept traffic.
85
+ */
86
+ isReady(): boolean;
87
+ /**
88
+ * Log web server message
89
+ */
90
+ log(message: string, meta?: Record<string, unknown>): void;
91
+ }
92
+ export default WebServer;
93
+ //# sourceMappingURL=webserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webserver.d.ts","sourceRoot":"","sources":["../../src/webserver/webserver.ts"],"names":[],"mappings":"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"}