@cinnabun/core 0.0.1 → 0.0.2

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 (260) hide show
  1. package/dist/__tests__/autowired.test.d.ts +1 -0
  2. package/dist/__tests__/autowired.test.js +109 -0
  3. package/dist/__tests__/autowired.test.js.map +1 -0
  4. package/dist/__tests__/cinnabun-application.test.d.ts +1 -0
  5. package/dist/__tests__/cinnabun-application.test.js +96 -0
  6. package/dist/__tests__/cinnabun-application.test.js.map +1 -0
  7. package/dist/__tests__/cinnabun-factory.test.d.ts +1 -0
  8. package/dist/__tests__/cinnabun-factory.test.js +269 -0
  9. package/dist/__tests__/cinnabun-factory.test.js.map +1 -0
  10. package/dist/__tests__/circular-dependency.test.d.ts +1 -0
  11. package/dist/__tests__/circular-dependency.test.js +318 -0
  12. package/dist/__tests__/circular-dependency.test.js.map +1 -0
  13. package/dist/__tests__/compression.test.d.ts +1 -0
  14. package/dist/__tests__/compression.test.js +459 -0
  15. package/dist/__tests__/compression.test.js.map +1 -0
  16. package/dist/__tests__/config.test.d.ts +1 -0
  17. package/dist/__tests__/config.test.js +86 -0
  18. package/dist/__tests__/config.test.js.map +1 -0
  19. package/dist/__tests__/cors.test.d.ts +1 -0
  20. package/dist/__tests__/cors.test.js +575 -0
  21. package/dist/__tests__/cors.test.js.map +1 -0
  22. package/dist/__tests__/env-config.test.d.ts +1 -0
  23. package/dist/__tests__/env-config.test.js +367 -0
  24. package/dist/__tests__/env-config.test.js.map +1 -0
  25. package/dist/__tests__/exception.test.d.ts +1 -0
  26. package/dist/__tests__/exception.test.js +207 -0
  27. package/dist/__tests__/exception.test.js.map +1 -0
  28. package/dist/__tests__/guards-interceptors.test.d.ts +1 -0
  29. package/dist/__tests__/guards-interceptors.test.js +660 -0
  30. package/dist/__tests__/guards-interceptors.test.js.map +1 -0
  31. package/dist/__tests__/health-check.test.d.ts +1 -0
  32. package/dist/__tests__/health-check.test.js +240 -0
  33. package/dist/__tests__/health-check.test.js.map +1 -0
  34. package/dist/__tests__/http.test.d.ts +1 -0
  35. package/dist/__tests__/http.test.js +629 -0
  36. package/dist/__tests__/http.test.js.map +1 -0
  37. package/dist/__tests__/integration/e2e.test.d.ts +1 -0
  38. package/dist/__tests__/integration/e2e.test.js +192 -0
  39. package/dist/__tests__/integration/e2e.test.js.map +1 -0
  40. package/dist/__tests__/integration/performance.bench.d.ts +1 -0
  41. package/dist/__tests__/integration/performance.bench.js +129 -0
  42. package/dist/__tests__/integration/performance.bench.js.map +1 -0
  43. package/dist/__tests__/integration/validation.test.d.ts +1 -0
  44. package/dist/__tests__/integration/validation.test.js +133 -0
  45. package/dist/__tests__/integration/validation.test.js.map +1 -0
  46. package/dist/__tests__/lifecycle-management.test.d.ts +1 -0
  47. package/dist/__tests__/lifecycle-management.test.js +688 -0
  48. package/dist/__tests__/lifecycle-management.test.js.map +1 -0
  49. package/dist/__tests__/lifecycle.test.d.ts +1 -0
  50. package/dist/__tests__/lifecycle.test.js +196 -0
  51. package/dist/__tests__/lifecycle.test.js.map +1 -0
  52. package/dist/__tests__/logger.test.d.ts +1 -0
  53. package/dist/__tests__/logger.test.js +109 -0
  54. package/dist/__tests__/logger.test.js.map +1 -0
  55. package/dist/__tests__/middleware.test.d.ts +1 -0
  56. package/dist/__tests__/middleware.test.js +329 -0
  57. package/dist/__tests__/middleware.test.js.map +1 -0
  58. package/dist/__tests__/module.test.d.ts +1 -0
  59. package/dist/__tests__/module.test.js +280 -0
  60. package/dist/__tests__/module.test.js.map +1 -0
  61. package/dist/__tests__/plugin.test.d.ts +1 -0
  62. package/dist/__tests__/plugin.test.js +283 -0
  63. package/dist/__tests__/plugin.test.js.map +1 -0
  64. package/dist/__tests__/request-logger.test.d.ts +1 -0
  65. package/dist/__tests__/request-logger.test.js +342 -0
  66. package/dist/__tests__/request-logger.test.js.map +1 -0
  67. package/dist/__tests__/request-mapping.test.d.ts +1 -0
  68. package/dist/__tests__/request-mapping.test.js +201 -0
  69. package/dist/__tests__/request-mapping.test.js.map +1 -0
  70. package/dist/__tests__/routes.test.d.ts +1 -0
  71. package/dist/__tests__/routes.test.js +119 -0
  72. package/dist/__tests__/routes.test.js.map +1 -0
  73. package/dist/__tests__/scan-fixtures/controllers/hello.controller.d.ts +4 -0
  74. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js +28 -0
  75. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js.map +1 -0
  76. package/dist/__tests__/scan-fixtures/modules/feature.module.d.ts +6 -0
  77. package/dist/__tests__/scan-fixtures/modules/feature.module.js +28 -0
  78. package/dist/__tests__/scan-fixtures/modules/feature.module.js.map +1 -0
  79. package/dist/__tests__/scan-fixtures/services/greeting.service.d.ts +4 -0
  80. package/dist/__tests__/scan-fixtures/services/greeting.service.js +18 -0
  81. package/dist/__tests__/scan-fixtures/services/greeting.service.js.map +1 -0
  82. package/dist/__tests__/scanner.test.d.ts +1 -0
  83. package/dist/__tests__/scanner.test.js +49 -0
  84. package/dist/__tests__/scanner.test.js.map +1 -0
  85. package/dist/__tests__/validation.test.d.ts +1 -0
  86. package/dist/__tests__/validation.test.js +561 -0
  87. package/dist/__tests__/validation.test.js.map +1 -0
  88. package/dist/__tests__/websocket-auth.test.d.ts +1 -0
  89. package/dist/__tests__/websocket-auth.test.js +431 -0
  90. package/dist/__tests__/websocket-auth.test.js.map +1 -0
  91. package/dist/__tests__/websocket-decorators.test.d.ts +1 -0
  92. package/dist/__tests__/websocket-decorators.test.js +173 -0
  93. package/dist/__tests__/websocket-decorators.test.js.map +1 -0
  94. package/dist/__tests__/websocket-validation.test.d.ts +1 -0
  95. package/dist/__tests__/websocket-validation.test.js +827 -0
  96. package/dist/__tests__/websocket-validation.test.js.map +1 -0
  97. package/dist/__tests__/websocket.test.d.ts +1 -0
  98. package/dist/__tests__/websocket.test.js +415 -0
  99. package/dist/__tests__/websocket.test.js.map +1 -0
  100. package/dist/config/config.module.d.ts +2 -0
  101. package/dist/config/config.module.js +18 -0
  102. package/dist/config/config.module.js.map +1 -0
  103. package/dist/config/config.service.d.ts +15 -0
  104. package/dist/config/config.service.js +58 -0
  105. package/dist/config/config.service.js.map +1 -0
  106. package/dist/config/schemas.d.ts +107 -0
  107. package/dist/config/schemas.js +87 -0
  108. package/dist/config/schemas.js.map +1 -0
  109. package/dist/core/app.d.ts +44 -0
  110. package/dist/core/app.js +178 -0
  111. package/dist/core/app.js.map +1 -0
  112. package/dist/core/cinnabun-factory.d.ts +5 -0
  113. package/dist/core/cinnabun-factory.js +130 -0
  114. package/dist/core/cinnabun-factory.js.map +1 -0
  115. package/dist/core/config-loader.d.ts +2 -0
  116. package/dist/core/config-loader.js +76 -0
  117. package/dist/core/config-loader.js.map +1 -0
  118. package/dist/core/config.d.ts +12 -0
  119. package/dist/core/config.js +27 -0
  120. package/dist/core/config.js.map +1 -0
  121. package/dist/core/container.d.ts +10 -0
  122. package/dist/core/container.js +82 -0
  123. package/dist/core/container.js.map +1 -0
  124. package/dist/core/dependency-validator.d.ts +12 -0
  125. package/dist/core/dependency-validator.js +76 -0
  126. package/dist/core/dependency-validator.js.map +1 -0
  127. package/dist/core/guard.d.ts +3 -0
  128. package/dist/core/guard.js +2 -0
  129. package/dist/core/guard.js.map +1 -0
  130. package/dist/core/interceptor.d.ts +4 -0
  131. package/dist/core/interceptor.js +2 -0
  132. package/dist/core/interceptor.js.map +1 -0
  133. package/dist/core/logger.d.ts +15 -0
  134. package/dist/core/logger.js +71 -0
  135. package/dist/core/logger.js.map +1 -0
  136. package/dist/core/module-resolver.d.ts +6 -0
  137. package/dist/core/module-resolver.js +67 -0
  138. package/dist/core/module-resolver.js.map +1 -0
  139. package/dist/core/plugin.d.ts +12 -0
  140. package/dist/core/plugin.js +2 -0
  141. package/dist/core/plugin.js.map +1 -0
  142. package/dist/core/router.d.ts +38 -0
  143. package/dist/core/router.js +406 -0
  144. package/dist/core/router.js.map +1 -0
  145. package/dist/core/scanner.d.ts +7 -0
  146. package/dist/core/scanner.js +83 -0
  147. package/dist/core/scanner.js.map +1 -0
  148. package/dist/core/shutdown-manager.d.ts +15 -0
  149. package/dist/core/shutdown-manager.js +68 -0
  150. package/dist/core/shutdown-manager.js.map +1 -0
  151. package/dist/core/websocket-handler.d.ts +41 -0
  152. package/dist/core/websocket-handler.js +242 -0
  153. package/dist/core/websocket-handler.js.map +1 -0
  154. package/dist/decorators/autowired.d.ts +3 -0
  155. package/dist/decorators/autowired.js +11 -0
  156. package/dist/decorators/autowired.js.map +1 -0
  157. package/dist/decorators/cinnabun-application.d.ts +14 -0
  158. package/dist/decorators/cinnabun-application.js +17 -0
  159. package/dist/decorators/cinnabun-application.js.map +1 -0
  160. package/dist/decorators/lifecycle.d.ts +2 -0
  161. package/dist/decorators/lifecycle.js +12 -0
  162. package/dist/decorators/lifecycle.js.map +1 -0
  163. package/dist/decorators/middleware.d.ts +2 -0
  164. package/dist/decorators/middleware.js +12 -0
  165. package/dist/decorators/middleware.js.map +1 -0
  166. package/dist/decorators/module.d.ts +10 -0
  167. package/dist/decorators/module.js +13 -0
  168. package/dist/decorators/module.js.map +1 -0
  169. package/dist/decorators/on-shutdown.d.ts +1 -0
  170. package/dist/decorators/on-shutdown.js +10 -0
  171. package/dist/decorators/on-shutdown.js.map +1 -0
  172. package/dist/decorators/params.d.ts +6 -0
  173. package/dist/decorators/params.js +31 -0
  174. package/dist/decorators/params.js.map +1 -0
  175. package/dist/decorators/request-mapping.d.ts +7 -0
  176. package/dist/decorators/request-mapping.js +34 -0
  177. package/dist/decorators/request-mapping.js.map +1 -0
  178. package/dist/decorators/response.d.ts +2 -0
  179. package/dist/decorators/response.js +17 -0
  180. package/dist/decorators/response.js.map +1 -0
  181. package/dist/decorators/rest-controller.d.ts +1 -0
  182. package/dist/decorators/rest-controller.js +19 -0
  183. package/dist/decorators/rest-controller.js.map +1 -0
  184. package/dist/decorators/routes.d.ts +5 -0
  185. package/dist/decorators/routes.js +19 -0
  186. package/dist/decorators/routes.js.map +1 -0
  187. package/dist/decorators/service.d.ts +1 -0
  188. package/dist/decorators/service.js +7 -0
  189. package/dist/decorators/service.js.map +1 -0
  190. package/dist/decorators/use-guard.d.ts +2 -0
  191. package/dist/decorators/use-guard.js +12 -0
  192. package/dist/decorators/use-guard.js.map +1 -0
  193. package/dist/decorators/use-interceptor.d.ts +2 -0
  194. package/dist/decorators/use-interceptor.js +12 -0
  195. package/dist/decorators/use-interceptor.js.map +1 -0
  196. package/dist/decorators/validate.d.ts +12 -0
  197. package/dist/decorators/validate.js +7 -0
  198. package/dist/decorators/validate.js.map +1 -0
  199. package/dist/decorators/websocket.d.ts +9 -0
  200. package/dist/decorators/websocket.js +38 -0
  201. package/dist/decorators/websocket.js.map +1 -0
  202. package/dist/decorators/ws-event.d.ts +28 -0
  203. package/dist/decorators/ws-event.js +37 -0
  204. package/dist/decorators/ws-event.js.map +1 -0
  205. package/dist/decorators/ws-gateway.d.ts +18 -0
  206. package/dist/decorators/ws-gateway.js +24 -0
  207. package/dist/decorators/ws-gateway.js.map +1 -0
  208. package/dist/dev/index.d.ts +6 -0
  209. package/dist/dev/index.js +28 -0
  210. package/dist/dev/index.js.map +1 -0
  211. package/dist/exceptions/circular-dependency-error.d.ts +5 -0
  212. package/dist/exceptions/circular-dependency-error.js +16 -0
  213. package/dist/exceptions/circular-dependency-error.js.map +1 -0
  214. package/dist/exceptions/http-exception.d.ts +41 -0
  215. package/dist/exceptions/http-exception.js +96 -0
  216. package/dist/exceptions/http-exception.js.map +1 -0
  217. package/dist/guards/jwt-websocket.guard.d.ts +11 -0
  218. package/dist/guards/jwt-websocket.guard.js +37 -0
  219. package/dist/guards/jwt-websocket.guard.js.map +1 -0
  220. package/dist/guards/websocket-auth.guard.d.ts +16 -0
  221. package/dist/guards/websocket-auth.guard.js +43 -0
  222. package/dist/guards/websocket-auth.guard.js.map +1 -0
  223. package/dist/health/health-check.service.d.ts +45 -0
  224. package/dist/health/health-check.service.js +95 -0
  225. package/dist/health/health-check.service.js.map +1 -0
  226. package/dist/health/health.controller.d.ts +15 -0
  227. package/dist/health/health.controller.js +63 -0
  228. package/dist/health/health.controller.js.map +1 -0
  229. package/dist/health/health.module.d.ts +2 -0
  230. package/dist/health/health.module.js +20 -0
  231. package/dist/health/health.module.js.map +1 -0
  232. package/dist/index.d.ts +74 -11
  233. package/dist/index.js +54 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/metadata/storage.d.ts +171 -0
  236. package/dist/metadata/storage.js +257 -0
  237. package/dist/metadata/storage.js.map +1 -0
  238. package/dist/middleware/compression.middleware.d.ts +32 -0
  239. package/dist/middleware/compression.middleware.js +113 -0
  240. package/dist/middleware/compression.middleware.js.map +1 -0
  241. package/dist/middleware/cors.middleware.d.ts +18 -0
  242. package/dist/middleware/cors.middleware.js +79 -0
  243. package/dist/middleware/cors.middleware.js.map +1 -0
  244. package/dist/middleware/performance-tracker.middleware.d.ts +35 -0
  245. package/dist/middleware/performance-tracker.middleware.js +79 -0
  246. package/dist/middleware/performance-tracker.middleware.js.map +1 -0
  247. package/dist/middleware/request-logger.middleware.d.ts +32 -0
  248. package/dist/middleware/request-logger.middleware.js +125 -0
  249. package/dist/middleware/request-logger.middleware.js.map +1 -0
  250. package/dist/types/index.d.ts +14 -0
  251. package/dist/types/index.js +5 -0
  252. package/dist/types/index.js.map +1 -0
  253. package/dist/validation/helpers.d.ts +36 -0
  254. package/dist/validation/helpers.js +27 -0
  255. package/dist/validation/helpers.js.map +1 -0
  256. package/dist/websocket/error.d.ts +27 -0
  257. package/dist/websocket/error.js +38 -0
  258. package/dist/websocket/error.js.map +1 -0
  259. package/package.json +38 -5
  260. package/LICENSE +0 -9
@@ -0,0 +1,7 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ export function Service() {
3
+ return (target) => {
4
+ metadataStorage.addProvider(target);
5
+ };
6
+ }
7
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/decorators/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Constructor } from "../metadata/storage.js";
2
+ export declare function UseGuard(...guards: Constructor[]): ClassDecorator & MethodDecorator;
@@ -0,0 +1,12 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ export function UseGuard(...guards) {
3
+ return (target, propertyKey) => {
4
+ if (propertyKey !== undefined) {
5
+ metadataStorage.addGuard(target.constructor, guards, propertyKey);
6
+ }
7
+ else {
8
+ metadataStorage.addGuard(target, guards);
9
+ }
10
+ };
11
+ }
12
+ //# sourceMappingURL=use-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-guard.js","sourceRoot":"","sources":["../../src/decorators/use-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,wBAAwB,CAAC;AAE3E,MAAM,UAAU,QAAQ,CAAC,GAAG,MAAqB;IAC/C,OAAO,CAAC,MAAW,EAAE,WAA6B,EAAE,EAAE;QACpD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,WAAqB,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Constructor } from "../metadata/storage.js";
2
+ export declare function UseInterceptor(...interceptors: Constructor[]): ClassDecorator & MethodDecorator;
@@ -0,0 +1,12 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ export function UseInterceptor(...interceptors) {
3
+ return (target, propertyKey) => {
4
+ if (propertyKey !== undefined) {
5
+ metadataStorage.addInterceptor(target.constructor, interceptors, propertyKey);
6
+ }
7
+ else {
8
+ metadataStorage.addInterceptor(target, interceptors);
9
+ }
10
+ };
11
+ }
12
+ //# sourceMappingURL=use-interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-interceptor.js","sourceRoot":"","sources":["../../src/decorators/use-interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,wBAAwB,CAAC;AAE3E,MAAM,UAAU,cAAc,CAAC,GAAG,YAA2B;IAC3D,OAAO,CAAC,MAAW,EAAE,WAA6B,EAAE,EAAE;QACpD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,WAAqB,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface ValidateOptions {
2
+ body?: {
3
+ parse: (data: unknown) => any;
4
+ };
5
+ query?: {
6
+ parse: (data: unknown) => any;
7
+ };
8
+ params?: {
9
+ parse: (data: unknown) => any;
10
+ };
11
+ }
12
+ export declare function Validate(schema: ValidateOptions): MethodDecorator;
@@ -0,0 +1,7 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ export function Validate(schema) {
3
+ return (target, propertyKey) => {
4
+ metadataStorage.setValidationSchema(target.constructor, propertyKey, schema);
5
+ };
6
+ }
7
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/decorators/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,UAAU,QAAQ,CAAC,MAAuB;IAC9C,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,eAAe,CAAC,mBAAmB,CACjC,MAAM,CAAC,WAAW,EAClB,WAAqB,EACrB,MAAM,CACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface WebSocketBrokerOptions {
2
+ broker: string[];
3
+ appDestinationPrefixes: string[];
4
+ endpoints: string[];
5
+ }
6
+ export declare function EnableWebSocketMessageBroker(options: WebSocketBrokerOptions): ClassDecorator;
7
+ export declare function MessageMapping(destination: string): MethodDecorator;
8
+ export declare function SendTo(topic: string): MethodDecorator;
9
+ export declare function SubscribeMapping(destination: string): MethodDecorator;
@@ -0,0 +1,38 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ export function EnableWebSocketMessageBroker(options) {
3
+ return (target) => {
4
+ metadataStorage.setWsBrokerMetadata(target, {
5
+ brokerPrefixes: options.broker,
6
+ appDestinationPrefixes: options.appDestinationPrefixes,
7
+ endpoints: options.endpoints,
8
+ });
9
+ };
10
+ }
11
+ export function MessageMapping(destination) {
12
+ return (target, propertyKey) => {
13
+ metadataStorage.addMessageMapping({
14
+ target: target.constructor,
15
+ methodKey: propertyKey,
16
+ destination,
17
+ });
18
+ };
19
+ }
20
+ export function SendTo(topic) {
21
+ return (target, propertyKey) => {
22
+ metadataStorage.addSendTo({
23
+ target: target.constructor,
24
+ methodKey: propertyKey,
25
+ topic,
26
+ });
27
+ };
28
+ }
29
+ export function SubscribeMapping(destination) {
30
+ return (target, propertyKey) => {
31
+ metadataStorage.addSubscribeMapping({
32
+ target: target.constructor,
33
+ methodKey: propertyKey,
34
+ destination,
35
+ });
36
+ };
37
+ }
38
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/decorators/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,UAAU,4BAA4B,CAC1C,OAA+B;IAE/B,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,eAAe,CAAC,mBAAmB,CAAC,MAAM,EAAE;YAC1C,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,eAAe,CAAC,iBAAiB,CAAC;YAChC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,SAAS,EAAE,WAAqB;YAChC,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,eAAe,CAAC,SAAS,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,SAAS,EAAE,WAAqB;YAChC,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,eAAe,CAAC,mBAAmB,CAAC;YAClC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,SAAS,EAAE,WAAqB;YAChC,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { ZodSchema } from "zod";
2
+ /**
3
+ * Marks a method as a WebSocket event handler.
4
+ * Can optionally validate incoming data with a Zod schema.
5
+ *
6
+ * @param event - The event name to handle
7
+ * @param schema - Optional Zod schema to validate event data
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { z } from "zod";
12
+ *
13
+ * const MessageSchema = z.object({
14
+ * text: z.string().min(1).max(500),
15
+ * room: z.string(),
16
+ * });
17
+ *
18
+ * @WsGateway("/chat")
19
+ * class ChatGateway {
20
+ * @WsEvent("message:send", MessageSchema)
21
+ * async handleMessage(data: z.infer<typeof MessageSchema>, ws: ServerWebSocket) {
22
+ * // data is validated and typed
23
+ * console.log(data.text, data.room);
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function WsEvent(event: string, schema?: ZodSchema): MethodDecorator;
@@ -0,0 +1,37 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ /**
3
+ * Marks a method as a WebSocket event handler.
4
+ * Can optionally validate incoming data with a Zod schema.
5
+ *
6
+ * @param event - The event name to handle
7
+ * @param schema - Optional Zod schema to validate event data
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { z } from "zod";
12
+ *
13
+ * const MessageSchema = z.object({
14
+ * text: z.string().min(1).max(500),
15
+ * room: z.string(),
16
+ * });
17
+ *
18
+ * @WsGateway("/chat")
19
+ * class ChatGateway {
20
+ * @WsEvent("message:send", MessageSchema)
21
+ * async handleMessage(data: z.infer<typeof MessageSchema>, ws: ServerWebSocket) {
22
+ * // data is validated and typed
23
+ * console.log(data.text, data.room);
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export function WsEvent(event, schema) {
29
+ return (target, propertyKey) => {
30
+ metadataStorage.addWsEvent(target.constructor, {
31
+ event,
32
+ methodKey: propertyKey,
33
+ schema,
34
+ });
35
+ };
36
+ }
37
+ //# sourceMappingURL=ws-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-event.js","sourceRoot":"","sources":["../../src/decorators/ws-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,MAAkB;IACvD,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE;YAC7C,KAAK;YACL,SAAS,EAAE,WAAqB;YAChC,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Marks a class as a WebSocket gateway.
3
+ * Gateway classes contain event handlers marked with @WsEvent.
4
+ *
5
+ * @param path - Optional WebSocket endpoint path (default: "/")
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * @WsGateway("/chat")
10
+ * class ChatGateway {
11
+ * @WsEvent("message:send")
12
+ * handleMessage(data: any, ws: ServerWebSocket) {
13
+ * // Handle message
14
+ * }
15
+ * }
16
+ * ```
17
+ */
18
+ export declare function WsGateway(path?: string): ClassDecorator;
@@ -0,0 +1,24 @@
1
+ import { metadataStorage } from "../metadata/storage.js";
2
+ /**
3
+ * Marks a class as a WebSocket gateway.
4
+ * Gateway classes contain event handlers marked with @WsEvent.
5
+ *
6
+ * @param path - Optional WebSocket endpoint path (default: "/")
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * @WsGateway("/chat")
11
+ * class ChatGateway {
12
+ * @WsEvent("message:send")
13
+ * handleMessage(data: any, ws: ServerWebSocket) {
14
+ * // Handle message
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ export function WsGateway(path = "/") {
20
+ return (target) => {
21
+ metadataStorage.addWsGateway(target, path);
22
+ };
23
+ }
24
+ //# sourceMappingURL=ws-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-gateway.js","sourceRoot":"","sources":["../../src/decorators/ws-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,GAAG;IAC1C,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CinnabunApplication } from "../core/app.js";
2
+ /**
3
+ * Development helpers (only available in NODE_ENV=development)
4
+ */
5
+ export declare function printRoutes(app: CinnabunApplication): void;
6
+ export declare function printProviders(app: CinnabunApplication): void;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Development helpers (only available in NODE_ENV=development)
3
+ */
4
+ export function printRoutes(app) {
5
+ if (process.env.NODE_ENV !== "development") {
6
+ console.warn("printRoutes() is only available in development mode");
7
+ return;
8
+ }
9
+ const routes = app.getRoutes();
10
+ console.log("\n📍 Registered Routes:\n");
11
+ routes.forEach((route) => {
12
+ console.log(` ${route.method.padEnd(7)} ${route.path}`);
13
+ });
14
+ console.log("");
15
+ }
16
+ export function printProviders(app) {
17
+ if (process.env.NODE_ENV !== "development") {
18
+ console.warn("printProviders() is only available in development mode");
19
+ return;
20
+ }
21
+ const providers = app.getProviders();
22
+ console.log("\n💉 Registered Providers:\n");
23
+ providers.forEach((provider) => {
24
+ console.log(` • ${provider.name}`);
25
+ });
26
+ console.log("");
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dev/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,GAAwB;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAwB;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Constructor } from "../metadata/storage.js";
2
+ export declare class CircularDependencyError extends Error {
3
+ readonly cycle: Constructor[];
4
+ constructor(cycle: Constructor[]);
5
+ }
@@ -0,0 +1,16 @@
1
+ export class CircularDependencyError extends Error {
2
+ cycle;
3
+ constructor(cycle) {
4
+ const names = cycle.map(t => t.name).join(" → ");
5
+ super(`❌ Circular dependency detected:\n\n` +
6
+ ` ${names}\n\n` +
7
+ `💡 Possible fixes:\n` +
8
+ ` 1. Use @Autowired() for field injection instead of constructor\n` +
9
+ ` 2. Extract shared logic into a third service\n` +
10
+ ` 3. Use an interface/provider pattern\n` +
11
+ ` 4. Review your dependency graph\n`);
12
+ this.cycle = cycle;
13
+ this.name = "CircularDependencyError";
14
+ }
15
+ }
16
+ //# sourceMappingURL=circular-dependency-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-dependency-error.js","sourceRoot":"","sources":["../../src/exceptions/circular-dependency-error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAE9B;IADlB,YACkB,KAAoB;QAEpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,CACH,qCAAqC;YACrC,MAAM,KAAK,MAAM;YACjB,sBAAsB;YACtB,qEAAqE;YACrE,mDAAmD;YACnD,2CAA2C;YAC3C,sCAAsC,CACvC,CAAC;QAXc,UAAK,GAAL,KAAK,CAAe;QAYpC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ export declare class HttpException extends Error {
2
+ readonly statusCode: number;
3
+ constructor(statusCode: number, message: string);
4
+ toJSON(): {
5
+ statusCode: number;
6
+ message: string;
7
+ error: string;
8
+ };
9
+ }
10
+ export declare class BadRequestException extends HttpException {
11
+ constructor(message?: string);
12
+ }
13
+ export interface ValidationError {
14
+ field: string;
15
+ message: string;
16
+ }
17
+ export declare class ValidationException extends BadRequestException {
18
+ readonly errors: ValidationError[];
19
+ readonly suggestions?: string[];
20
+ constructor(errors: ValidationError[], suggestions?: string[]);
21
+ /**
22
+ * Create ValidationException from Zod error
23
+ */
24
+ static fromZodError(error: any): ValidationException;
25
+ toJSON(): any;
26
+ }
27
+ export declare class UnauthorizedException extends HttpException {
28
+ constructor(message?: string);
29
+ }
30
+ export declare class ForbiddenException extends HttpException {
31
+ constructor(message?: string);
32
+ }
33
+ export declare class NotFoundException extends HttpException {
34
+ constructor(resource?: string);
35
+ }
36
+ export declare class ConflictException extends HttpException {
37
+ constructor(message?: string);
38
+ }
39
+ export declare class InternalServerErrorException extends HttpException {
40
+ constructor(message?: string);
41
+ }
@@ -0,0 +1,96 @@
1
+ export class HttpException extends Error {
2
+ statusCode;
3
+ constructor(statusCode, message) {
4
+ super(message);
5
+ this.statusCode = statusCode;
6
+ this.name = "HttpException";
7
+ }
8
+ toJSON() {
9
+ return {
10
+ statusCode: this.statusCode,
11
+ message: this.message,
12
+ error: getHttpStatusText(this.statusCode),
13
+ };
14
+ }
15
+ }
16
+ export class BadRequestException extends HttpException {
17
+ constructor(message = "Bad Request") {
18
+ super(400, message);
19
+ }
20
+ }
21
+ export class ValidationException extends BadRequestException {
22
+ errors;
23
+ suggestions;
24
+ constructor(errors, suggestions) {
25
+ super("Validation failed");
26
+ this.errors = errors;
27
+ this.suggestions = suggestions;
28
+ }
29
+ /**
30
+ * Create ValidationException from Zod error
31
+ */
32
+ static fromZodError(error) {
33
+ const errors = [];
34
+ for (const issue of error.issues) {
35
+ const field = issue.path.join(".") || "body";
36
+ errors.push({
37
+ field,
38
+ message: issue.message,
39
+ });
40
+ }
41
+ return new ValidationException(errors);
42
+ }
43
+ toJSON() {
44
+ const json = {
45
+ statusCode: this.statusCode,
46
+ message: this.message,
47
+ error: "Bad Request",
48
+ errors: this.errors,
49
+ };
50
+ if (this.suggestions && this.suggestions.length > 0) {
51
+ json.suggestions = this.suggestions;
52
+ }
53
+ return json;
54
+ }
55
+ }
56
+ export class UnauthorizedException extends HttpException {
57
+ constructor(message = "Unauthorized") {
58
+ super(401, message);
59
+ }
60
+ }
61
+ export class ForbiddenException extends HttpException {
62
+ constructor(message = "Forbidden") {
63
+ super(403, message);
64
+ }
65
+ }
66
+ export class NotFoundException extends HttpException {
67
+ constructor(resource) {
68
+ const message = resource
69
+ ? `${resource} not found`
70
+ : "The requested resource was not found";
71
+ super(404, message);
72
+ this.name = "NotFoundException";
73
+ }
74
+ }
75
+ export class ConflictException extends HttpException {
76
+ constructor(message = "Conflict") {
77
+ super(409, message);
78
+ }
79
+ }
80
+ export class InternalServerErrorException extends HttpException {
81
+ constructor(message = "Internal Server Error") {
82
+ super(500, message);
83
+ }
84
+ }
85
+ function getHttpStatusText(code) {
86
+ const map = {
87
+ 400: "Bad Request",
88
+ 401: "Unauthorized",
89
+ 403: "Forbidden",
90
+ 404: "Not Found",
91
+ 409: "Conflict",
92
+ 500: "Internal Server Error",
93
+ };
94
+ return map[code] ?? "Error";
95
+ }
96
+ //# sourceMappingURL=http-exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-exception.js","sourceRoot":"","sources":["../../src/exceptions/http-exception.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { WebSocketAuthGuard } from "./websocket-auth.guard.js";
2
+ export interface JwtPayload {
3
+ sub: string;
4
+ [key: string]: any;
5
+ }
6
+ export declare class JwtWebSocketGuard extends WebSocketAuthGuard {
7
+ private secret;
8
+ private verify;
9
+ constructor(secret: string, verify?: (payload: JwtPayload) => Promise<any>);
10
+ protected verifyToken(token: string): Promise<any>;
11
+ }
@@ -0,0 +1,37 @@
1
+ import { WebSocketAuthGuard } from "./websocket-auth.guard.js";
2
+ export class JwtWebSocketGuard extends WebSocketAuthGuard {
3
+ secret;
4
+ verify;
5
+ constructor(secret, verify = async (p) => p) {
6
+ super();
7
+ this.secret = secret;
8
+ this.verify = verify;
9
+ }
10
+ async verifyToken(token) {
11
+ // Simple JWT verification (use a library like jsonwebtoken in production)
12
+ try {
13
+ const [header, payload, signature] = token.split(".");
14
+ if (!header || !payload || !signature) {
15
+ throw new Error("Invalid JWT format");
16
+ }
17
+ // Decode payload
18
+ const decodedPayload = JSON.parse(atob(payload.replace(/-/g, "+").replace(/_/g, "/")));
19
+ // Verify signature (simplified - use proper crypto in production)
20
+ const encoder = new TextEncoder();
21
+ const data = encoder.encode(`${header}.${payload}`);
22
+ const secretKey = encoder.encode(this.secret);
23
+ // In production, use crypto.subtle.verify()
24
+ // For now, just check if signature exists
25
+ if (!signature) {
26
+ throw new Error("Missing signature");
27
+ }
28
+ // Call custom verify function
29
+ const user = await this.verify(decodedPayload);
30
+ return user;
31
+ }
32
+ catch (error) {
33
+ throw new Error("Invalid token");
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=jwt-websocket.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-websocket.guard.js","sourceRoot":"","sources":["../../src/guards/jwt-websocket.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,MAAM,OAAO,iBAAkB,SAAQ,kBAAkB;IAE7C;IACA;IAFV,YACU,MAAc,EACd,SAAgD,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtE,KAAK,EAAE,CAAC;QAHA,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAwD;IAGxE,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,KAAa;QACvC,0EAA0E;QAC1E,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YAED,iBAAiB;YACjB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACtC,CAAC;YAEhB,kEAAkE;YAClE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9C,4CAA4C;YAC5C,0CAA0C;YAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YAED,8BAA8B;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAE/C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { Guard } from "../core/guard.js";
2
+ export interface WebSocketAuthContext {
3
+ token?: string;
4
+ user?: any;
5
+ }
6
+ export declare abstract class WebSocketAuthGuard implements Guard {
7
+ /**
8
+ * Extract token from WebSocket upgrade request
9
+ */
10
+ protected extractToken(req: Request): string | null;
11
+ /**
12
+ * Verify the token and return user data
13
+ */
14
+ protected abstract verifyToken(token: string): Promise<any>;
15
+ canActivate(req: Request): Promise<boolean>;
16
+ }
@@ -0,0 +1,43 @@
1
+ export class WebSocketAuthGuard {
2
+ /**
3
+ * Extract token from WebSocket upgrade request
4
+ */
5
+ extractToken(req) {
6
+ // Check query params: /ws?token=xxx
7
+ const url = new URL(req.url);
8
+ const queryToken = url.searchParams.get("token");
9
+ if (queryToken)
10
+ return queryToken;
11
+ // Check Authorization header
12
+ const authHeader = req.headers.get("authorization");
13
+ if (authHeader?.startsWith("Bearer ")) {
14
+ return authHeader.substring(7);
15
+ }
16
+ // Check Sec-WebSocket-Protocol header (some clients use this)
17
+ const protocol = req.headers.get("sec-websocket-protocol");
18
+ if (protocol) {
19
+ // Format: "token, <actual-token>"
20
+ const parts = protocol.split(",").map((p) => p.trim());
21
+ if (parts[0] === "token" && parts[1]) {
22
+ return parts[1];
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ async canActivate(req) {
28
+ const token = this.extractToken(req);
29
+ if (!token) {
30
+ return false;
31
+ }
32
+ try {
33
+ const user = await this.verifyToken(token);
34
+ // Attach to request for downstream use
35
+ req.wsAuth = { token, user };
36
+ return !!user;
37
+ }
38
+ catch (error) {
39
+ return false;
40
+ }
41
+ }
42
+ }
43
+ //# sourceMappingURL=websocket-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-auth.guard.js","sourceRoot":"","sources":["../../src/guards/websocket-auth.guard.ts"],"names":[],"mappings":"AAOA,MAAM,OAAgB,kBAAkB;IACtC;;OAEG;IACO,YAAY,CAAC,GAAY;QACjC,oCAAoC;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAElC,6BAA6B;QAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,kCAAkC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,KAAK,CAAC,WAAW,CAAC,GAAY;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE3C,uCAAuC;YACtC,GAAW,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAEtC,OAAO,CAAC,CAAC,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ export interface HealthCheckResult {
2
+ status: "healthy" | "unhealthy" | "degraded";
3
+ uptime: number;
4
+ timestamp: number;
5
+ version?: string;
6
+ checks: Record<string, {
7
+ status: "pass" | "fail";
8
+ message?: string;
9
+ responseTime?: number;
10
+ }>;
11
+ }
12
+ export type HealthCheck = () => Promise<boolean>;
13
+ export declare class HealthCheckService {
14
+ private startTime;
15
+ private checks;
16
+ private version?;
17
+ constructor();
18
+ setVersion(version: string): void;
19
+ /**
20
+ * Register a custom health check
21
+ *
22
+ * @example
23
+ * healthCheck.register("database", async () => {
24
+ * try {
25
+ * await db.ping();
26
+ * return true;
27
+ * } catch {
28
+ * return false;
29
+ * }
30
+ * });
31
+ */
32
+ register(name: string, check: HealthCheck): void;
33
+ /**
34
+ * Execute all health checks
35
+ */
36
+ getHealth(): Promise<HealthCheckResult>;
37
+ /**
38
+ * Get uptime in seconds
39
+ */
40
+ getUptime(): number;
41
+ /**
42
+ * Clear all registered health checks (useful for testing)
43
+ */
44
+ clear(): void;
45
+ }