@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,660 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import "reflect-metadata";
11
+ import { describe, it, expect, afterEach } from "bun:test";
12
+ import { CinnabunApplication } from "../core/app.js";
13
+ import { Service } from "../decorators/service.js";
14
+ import { RestController } from "../decorators/rest-controller.js";
15
+ import { GetMapping } from "../decorators/routes.js";
16
+ import { UseGuard } from "../decorators/use-guard.js";
17
+ import { UseInterceptor } from "../decorators/use-interceptor.js";
18
+ let app = null;
19
+ afterEach(async () => {
20
+ if (app) {
21
+ await app.close();
22
+ app = null;
23
+ }
24
+ });
25
+ function url(path) {
26
+ return `http://localhost:${app.getPort()}${path}`;
27
+ }
28
+ describe("Guards", () => {
29
+ it("allows access when guard returns true", async () => {
30
+ let AllowGuard = class AllowGuard {
31
+ canActivate() {
32
+ return true;
33
+ }
34
+ };
35
+ AllowGuard = __decorate([
36
+ Service()
37
+ ], AllowGuard);
38
+ let GuardedController = class GuardedController {
39
+ get() {
40
+ return "allowed";
41
+ }
42
+ };
43
+ __decorate([
44
+ GetMapping("/"),
45
+ UseGuard(AllowGuard),
46
+ __metadata("design:type", Function),
47
+ __metadata("design:paramtypes", []),
48
+ __metadata("design:returntype", void 0)
49
+ ], GuardedController.prototype, "get", null);
50
+ GuardedController = __decorate([
51
+ RestController("/guarded")
52
+ ], GuardedController);
53
+ app = await CinnabunApplication.create({
54
+ controllers: [GuardedController],
55
+ providers: [AllowGuard],
56
+ });
57
+ await app.listen(0);
58
+ const res = await fetch(url("/guarded/"));
59
+ expect(res.status).toBe(200);
60
+ expect(await res.text()).toBe("allowed");
61
+ });
62
+ it("returns 403 when guard returns false", async () => {
63
+ let DenyGuard = class DenyGuard {
64
+ canActivate() {
65
+ return false;
66
+ }
67
+ };
68
+ DenyGuard = __decorate([
69
+ Service()
70
+ ], DenyGuard);
71
+ let DeniedController = class DeniedController {
72
+ get() {
73
+ return "should not reach";
74
+ }
75
+ };
76
+ __decorate([
77
+ GetMapping("/"),
78
+ UseGuard(DenyGuard),
79
+ __metadata("design:type", Function),
80
+ __metadata("design:paramtypes", []),
81
+ __metadata("design:returntype", void 0)
82
+ ], DeniedController.prototype, "get", null);
83
+ DeniedController = __decorate([
84
+ RestController("/denied")
85
+ ], DeniedController);
86
+ app = await CinnabunApplication.create({
87
+ controllers: [DeniedController],
88
+ providers: [DenyGuard],
89
+ });
90
+ await app.listen(0);
91
+ const res = await fetch(url("/denied/"));
92
+ expect(res.status).toBe(403);
93
+ const body = await res.json();
94
+ expect(body.message).toBe("Forbidden");
95
+ });
96
+ it("supports async guards", async () => {
97
+ let AsyncGuard = class AsyncGuard {
98
+ async canActivate() {
99
+ await new Promise((r) => setTimeout(r, 5));
100
+ return true;
101
+ }
102
+ };
103
+ AsyncGuard = __decorate([
104
+ Service()
105
+ ], AsyncGuard);
106
+ let AsyncGuardController = class AsyncGuardController {
107
+ get() {
108
+ return "async ok";
109
+ }
110
+ };
111
+ __decorate([
112
+ GetMapping("/"),
113
+ UseGuard(AsyncGuard),
114
+ __metadata("design:type", Function),
115
+ __metadata("design:paramtypes", []),
116
+ __metadata("design:returntype", void 0)
117
+ ], AsyncGuardController.prototype, "get", null);
118
+ AsyncGuardController = __decorate([
119
+ RestController("/async-guard")
120
+ ], AsyncGuardController);
121
+ app = await CinnabunApplication.create({
122
+ controllers: [AsyncGuardController],
123
+ providers: [AsyncGuard],
124
+ });
125
+ await app.listen(0);
126
+ const res = await fetch(url("/async-guard/"));
127
+ expect(res.status).toBe(200);
128
+ expect(await res.text()).toBe("async ok");
129
+ });
130
+ it("applies class-level guard to all methods", async () => {
131
+ let ClassDenyGuard = class ClassDenyGuard {
132
+ canActivate() {
133
+ return false;
134
+ }
135
+ };
136
+ ClassDenyGuard = __decorate([
137
+ Service()
138
+ ], ClassDenyGuard);
139
+ let ClassGuardedController = class ClassGuardedController {
140
+ a() {
141
+ return "a";
142
+ }
143
+ b() {
144
+ return "b";
145
+ }
146
+ };
147
+ __decorate([
148
+ GetMapping("/a"),
149
+ __metadata("design:type", Function),
150
+ __metadata("design:paramtypes", []),
151
+ __metadata("design:returntype", void 0)
152
+ ], ClassGuardedController.prototype, "a", null);
153
+ __decorate([
154
+ GetMapping("/b"),
155
+ __metadata("design:type", Function),
156
+ __metadata("design:paramtypes", []),
157
+ __metadata("design:returntype", void 0)
158
+ ], ClassGuardedController.prototype, "b", null);
159
+ ClassGuardedController = __decorate([
160
+ RestController("/class-guarded"),
161
+ UseGuard(ClassDenyGuard)
162
+ ], ClassGuardedController);
163
+ app = await CinnabunApplication.create({
164
+ controllers: [ClassGuardedController],
165
+ providers: [ClassDenyGuard],
166
+ });
167
+ await app.listen(0);
168
+ const resA = await fetch(url("/class-guarded/a"));
169
+ expect(resA.status).toBe(403);
170
+ const resB = await fetch(url("/class-guarded/b"));
171
+ expect(resB.status).toBe(403);
172
+ });
173
+ it("checks guard based on request data", async () => {
174
+ let AuthGuard = class AuthGuard {
175
+ canActivate(req) {
176
+ return req.headers.get("authorization") === "Bearer secret";
177
+ }
178
+ };
179
+ AuthGuard = __decorate([
180
+ Service()
181
+ ], AuthGuard);
182
+ let AuthController = class AuthController {
183
+ get() {
184
+ return "authenticated";
185
+ }
186
+ };
187
+ __decorate([
188
+ GetMapping("/"),
189
+ UseGuard(AuthGuard),
190
+ __metadata("design:type", Function),
191
+ __metadata("design:paramtypes", []),
192
+ __metadata("design:returntype", void 0)
193
+ ], AuthController.prototype, "get", null);
194
+ AuthController = __decorate([
195
+ RestController("/auth")
196
+ ], AuthController);
197
+ app = await CinnabunApplication.create({
198
+ controllers: [AuthController],
199
+ providers: [AuthGuard],
200
+ });
201
+ await app.listen(0);
202
+ // Without auth header
203
+ const res1 = await fetch(url("/auth/"));
204
+ expect(res1.status).toBe(403);
205
+ // With correct auth header
206
+ const res2 = await fetch(url("/auth/"), {
207
+ headers: { Authorization: "Bearer secret" },
208
+ });
209
+ expect(res2.status).toBe(200);
210
+ expect(await res2.text()).toBe("authenticated");
211
+ });
212
+ it("runs multiple guards in order — first failure stops", async () => {
213
+ const order = [];
214
+ let Guard1 = class Guard1 {
215
+ canActivate() {
216
+ order.push("guard1");
217
+ return true;
218
+ }
219
+ };
220
+ Guard1 = __decorate([
221
+ Service()
222
+ ], Guard1);
223
+ let Guard2 = class Guard2 {
224
+ canActivate() {
225
+ order.push("guard2");
226
+ return false;
227
+ }
228
+ };
229
+ Guard2 = __decorate([
230
+ Service()
231
+ ], Guard2);
232
+ let Guard3 = class Guard3 {
233
+ canActivate() {
234
+ order.push("guard3");
235
+ return true;
236
+ }
237
+ };
238
+ Guard3 = __decorate([
239
+ Service()
240
+ ], Guard3);
241
+ let MultiGuardController = class MultiGuardController {
242
+ get() {
243
+ return "ok";
244
+ }
245
+ };
246
+ __decorate([
247
+ GetMapping("/"),
248
+ UseGuard(Guard1, Guard2, Guard3),
249
+ __metadata("design:type", Function),
250
+ __metadata("design:paramtypes", []),
251
+ __metadata("design:returntype", void 0)
252
+ ], MultiGuardController.prototype, "get", null);
253
+ MultiGuardController = __decorate([
254
+ RestController("/multi-guard")
255
+ ], MultiGuardController);
256
+ app = await CinnabunApplication.create({
257
+ controllers: [MultiGuardController],
258
+ providers: [Guard1, Guard2, Guard3],
259
+ });
260
+ await app.listen(0);
261
+ const res = await fetch(url("/multi-guard/"));
262
+ expect(res.status).toBe(403);
263
+ expect(order).toEqual(["guard1", "guard2"]);
264
+ });
265
+ it("guard can inject services via DI", async () => {
266
+ let TokenService = class TokenService {
267
+ isValid(token) {
268
+ return token === "valid-token";
269
+ }
270
+ };
271
+ TokenService = __decorate([
272
+ Service()
273
+ ], TokenService);
274
+ let TokenGuard = class TokenGuard {
275
+ tokenService;
276
+ constructor(tokenService) {
277
+ this.tokenService = tokenService;
278
+ }
279
+ canActivate(req) {
280
+ const token = req.headers.get("x-token") ?? "";
281
+ return this.tokenService.isValid(token);
282
+ }
283
+ };
284
+ TokenGuard = __decorate([
285
+ Service(),
286
+ __metadata("design:paramtypes", [TokenService])
287
+ ], TokenGuard);
288
+ let TokenController = class TokenController {
289
+ get() {
290
+ return "valid";
291
+ }
292
+ };
293
+ __decorate([
294
+ GetMapping("/"),
295
+ UseGuard(TokenGuard),
296
+ __metadata("design:type", Function),
297
+ __metadata("design:paramtypes", []),
298
+ __metadata("design:returntype", void 0)
299
+ ], TokenController.prototype, "get", null);
300
+ TokenController = __decorate([
301
+ RestController("/token")
302
+ ], TokenController);
303
+ app = await CinnabunApplication.create({
304
+ controllers: [TokenController],
305
+ providers: [TokenService, TokenGuard],
306
+ });
307
+ await app.listen(0);
308
+ const res1 = await fetch(url("/token/"), {
309
+ headers: { "X-Token": "invalid" },
310
+ });
311
+ expect(res1.status).toBe(403);
312
+ const res2 = await fetch(url("/token/"), {
313
+ headers: { "X-Token": "valid-token" },
314
+ });
315
+ expect(res2.status).toBe(200);
316
+ });
317
+ });
318
+ describe("Interceptors", () => {
319
+ it("runs before hook before the handler", async () => {
320
+ let beforeCalled = false;
321
+ let LogInterceptor = class LogInterceptor {
322
+ before() {
323
+ beforeCalled = true;
324
+ }
325
+ };
326
+ LogInterceptor = __decorate([
327
+ Service()
328
+ ], LogInterceptor);
329
+ let InterceptedController = class InterceptedController {
330
+ get() {
331
+ return "ok";
332
+ }
333
+ };
334
+ __decorate([
335
+ GetMapping("/"),
336
+ UseInterceptor(LogInterceptor),
337
+ __metadata("design:type", Function),
338
+ __metadata("design:paramtypes", []),
339
+ __metadata("design:returntype", void 0)
340
+ ], InterceptedController.prototype, "get", null);
341
+ InterceptedController = __decorate([
342
+ RestController("/intercepted")
343
+ ], InterceptedController);
344
+ app = await CinnabunApplication.create({
345
+ controllers: [InterceptedController],
346
+ providers: [LogInterceptor],
347
+ });
348
+ await app.listen(0);
349
+ const res = await fetch(url("/intercepted/"));
350
+ expect(res.status).toBe(200);
351
+ expect(beforeCalled).toBe(true);
352
+ });
353
+ it("runs after hook and can transform the response", async () => {
354
+ let AddHeaderInterceptor = class AddHeaderInterceptor {
355
+ after(_req, response) {
356
+ const newRes = new Response(response.body, {
357
+ status: response.status,
358
+ headers: response.headers,
359
+ });
360
+ newRes.headers.set("X-Intercepted", "true");
361
+ return newRes;
362
+ }
363
+ };
364
+ AddHeaderInterceptor = __decorate([
365
+ Service()
366
+ ], AddHeaderInterceptor);
367
+ let AddHeaderController = class AddHeaderController {
368
+ get() {
369
+ return "ok";
370
+ }
371
+ };
372
+ __decorate([
373
+ GetMapping("/"),
374
+ UseInterceptor(AddHeaderInterceptor),
375
+ __metadata("design:type", Function),
376
+ __metadata("design:paramtypes", []),
377
+ __metadata("design:returntype", void 0)
378
+ ], AddHeaderController.prototype, "get", null);
379
+ AddHeaderController = __decorate([
380
+ RestController("/add-header")
381
+ ], AddHeaderController);
382
+ app = await CinnabunApplication.create({
383
+ controllers: [AddHeaderController],
384
+ providers: [AddHeaderInterceptor],
385
+ });
386
+ await app.listen(0);
387
+ const res = await fetch(url("/add-header/"));
388
+ expect(res.status).toBe(200);
389
+ expect(res.headers.get("X-Intercepted")).toBe("true");
390
+ });
391
+ it("applies class-level interceptor to all methods", async () => {
392
+ let callCount = 0;
393
+ let CountInterceptor = class CountInterceptor {
394
+ before() {
395
+ callCount++;
396
+ }
397
+ };
398
+ CountInterceptor = __decorate([
399
+ Service()
400
+ ], CountInterceptor);
401
+ let ClassInterceptedController = class ClassInterceptedController {
402
+ a() {
403
+ return "a";
404
+ }
405
+ b() {
406
+ return "b";
407
+ }
408
+ };
409
+ __decorate([
410
+ GetMapping("/a"),
411
+ __metadata("design:type", Function),
412
+ __metadata("design:paramtypes", []),
413
+ __metadata("design:returntype", void 0)
414
+ ], ClassInterceptedController.prototype, "a", null);
415
+ __decorate([
416
+ GetMapping("/b"),
417
+ __metadata("design:type", Function),
418
+ __metadata("design:paramtypes", []),
419
+ __metadata("design:returntype", void 0)
420
+ ], ClassInterceptedController.prototype, "b", null);
421
+ ClassInterceptedController = __decorate([
422
+ RestController("/class-intercepted"),
423
+ UseInterceptor(CountInterceptor)
424
+ ], ClassInterceptedController);
425
+ app = await CinnabunApplication.create({
426
+ controllers: [ClassInterceptedController],
427
+ providers: [CountInterceptor],
428
+ });
429
+ await app.listen(0);
430
+ await fetch(url("/class-intercepted/a"));
431
+ await fetch(url("/class-intercepted/b"));
432
+ expect(callCount).toBe(2);
433
+ });
434
+ it("runs multiple interceptors in order", async () => {
435
+ const order = [];
436
+ let FirstInterceptor = class FirstInterceptor {
437
+ before() {
438
+ order.push("first-before");
439
+ }
440
+ after(_req, res) {
441
+ order.push("first-after");
442
+ return res;
443
+ }
444
+ };
445
+ FirstInterceptor = __decorate([
446
+ Service()
447
+ ], FirstInterceptor);
448
+ let SecondInterceptor = class SecondInterceptor {
449
+ before() {
450
+ order.push("second-before");
451
+ }
452
+ after(_req, res) {
453
+ order.push("second-after");
454
+ return res;
455
+ }
456
+ };
457
+ SecondInterceptor = __decorate([
458
+ Service()
459
+ ], SecondInterceptor);
460
+ let MultiInterceptController = class MultiInterceptController {
461
+ get() {
462
+ return "ok";
463
+ }
464
+ };
465
+ __decorate([
466
+ GetMapping("/"),
467
+ UseInterceptor(FirstInterceptor, SecondInterceptor),
468
+ __metadata("design:type", Function),
469
+ __metadata("design:paramtypes", []),
470
+ __metadata("design:returntype", void 0)
471
+ ], MultiInterceptController.prototype, "get", null);
472
+ MultiInterceptController = __decorate([
473
+ RestController("/multi-intercept")
474
+ ], MultiInterceptController);
475
+ app = await CinnabunApplication.create({
476
+ controllers: [MultiInterceptController],
477
+ providers: [FirstInterceptor, SecondInterceptor],
478
+ });
479
+ await app.listen(0);
480
+ await fetch(url("/multi-intercept/"));
481
+ expect(order).toEqual([
482
+ "first-before",
483
+ "second-before",
484
+ "first-after",
485
+ "second-after",
486
+ ]);
487
+ });
488
+ it("interceptor can inject services via DI", async () => {
489
+ let TimingService = class TimingService {
490
+ getTimestamp() {
491
+ return "12345";
492
+ }
493
+ };
494
+ TimingService = __decorate([
495
+ Service()
496
+ ], TimingService);
497
+ let TimingInterceptor = class TimingInterceptor {
498
+ timing;
499
+ constructor(timing) {
500
+ this.timing = timing;
501
+ }
502
+ after(_req, response) {
503
+ const newRes = new Response(response.body, {
504
+ status: response.status,
505
+ headers: response.headers,
506
+ });
507
+ newRes.headers.set("X-Timestamp", this.timing.getTimestamp());
508
+ return newRes;
509
+ }
510
+ };
511
+ TimingInterceptor = __decorate([
512
+ Service(),
513
+ __metadata("design:paramtypes", [TimingService])
514
+ ], TimingInterceptor);
515
+ let TimedController = class TimedController {
516
+ get() {
517
+ return "ok";
518
+ }
519
+ };
520
+ __decorate([
521
+ GetMapping("/"),
522
+ UseInterceptor(TimingInterceptor),
523
+ __metadata("design:type", Function),
524
+ __metadata("design:paramtypes", []),
525
+ __metadata("design:returntype", void 0)
526
+ ], TimedController.prototype, "get", null);
527
+ TimedController = __decorate([
528
+ RestController("/timed")
529
+ ], TimedController);
530
+ app = await CinnabunApplication.create({
531
+ controllers: [TimedController],
532
+ providers: [TimingService, TimingInterceptor],
533
+ });
534
+ await app.listen(0);
535
+ const res = await fetch(url("/timed/"));
536
+ expect(res.headers.get("X-Timestamp")).toBe("12345");
537
+ });
538
+ });
539
+ describe("Guards + Interceptors together", () => {
540
+ it("guards run before interceptors", async () => {
541
+ const order = [];
542
+ let OrderGuard = class OrderGuard {
543
+ canActivate() {
544
+ order.push("guard");
545
+ return true;
546
+ }
547
+ };
548
+ OrderGuard = __decorate([
549
+ Service()
550
+ ], OrderGuard);
551
+ let OrderInterceptor = class OrderInterceptor {
552
+ before() {
553
+ order.push("interceptor-before");
554
+ }
555
+ after(_req, res) {
556
+ order.push("interceptor-after");
557
+ return res;
558
+ }
559
+ };
560
+ OrderInterceptor = __decorate([
561
+ Service()
562
+ ], OrderInterceptor);
563
+ let OrderController = class OrderController {
564
+ get() {
565
+ order.push("handler");
566
+ return "ok";
567
+ }
568
+ };
569
+ __decorate([
570
+ GetMapping("/"),
571
+ UseGuard(OrderGuard),
572
+ UseInterceptor(OrderInterceptor),
573
+ __metadata("design:type", Function),
574
+ __metadata("design:paramtypes", []),
575
+ __metadata("design:returntype", void 0)
576
+ ], OrderController.prototype, "get", null);
577
+ OrderController = __decorate([
578
+ RestController("/order")
579
+ ], OrderController);
580
+ app = await CinnabunApplication.create({
581
+ controllers: [OrderController],
582
+ providers: [OrderGuard, OrderInterceptor],
583
+ });
584
+ await app.listen(0);
585
+ await fetch(url("/order/"));
586
+ expect(order).toEqual([
587
+ "guard",
588
+ "interceptor-before",
589
+ "handler",
590
+ "interceptor-after",
591
+ ]);
592
+ });
593
+ it("interceptor does not run if guard denies", async () => {
594
+ let interceptorCalled = false;
595
+ let BlockGuard = class BlockGuard {
596
+ canActivate() {
597
+ return false;
598
+ }
599
+ };
600
+ BlockGuard = __decorate([
601
+ Service()
602
+ ], BlockGuard);
603
+ let SkippedInterceptor = class SkippedInterceptor {
604
+ before() {
605
+ interceptorCalled = true;
606
+ }
607
+ };
608
+ SkippedInterceptor = __decorate([
609
+ Service()
610
+ ], SkippedInterceptor);
611
+ let BlockedController = class BlockedController {
612
+ get() {
613
+ return "ok";
614
+ }
615
+ };
616
+ __decorate([
617
+ GetMapping("/"),
618
+ UseGuard(BlockGuard),
619
+ UseInterceptor(SkippedInterceptor),
620
+ __metadata("design:type", Function),
621
+ __metadata("design:paramtypes", []),
622
+ __metadata("design:returntype", void 0)
623
+ ], BlockedController.prototype, "get", null);
624
+ BlockedController = __decorate([
625
+ RestController("/blocked")
626
+ ], BlockedController);
627
+ app = await CinnabunApplication.create({
628
+ controllers: [BlockedController],
629
+ providers: [BlockGuard, SkippedInterceptor],
630
+ });
631
+ await app.listen(0);
632
+ const res = await fetch(url("/blocked/"));
633
+ expect(res.status).toBe(403);
634
+ expect(interceptorCalled).toBe(false);
635
+ });
636
+ it("works without guards or interceptors", async () => {
637
+ let PlainController = class PlainController {
638
+ get() {
639
+ return "plain";
640
+ }
641
+ };
642
+ __decorate([
643
+ GetMapping("/"),
644
+ __metadata("design:type", Function),
645
+ __metadata("design:paramtypes", []),
646
+ __metadata("design:returntype", void 0)
647
+ ], PlainController.prototype, "get", null);
648
+ PlainController = __decorate([
649
+ RestController("/plain")
650
+ ], PlainController);
651
+ app = await CinnabunApplication.create({
652
+ controllers: [PlainController],
653
+ });
654
+ await app.listen(0);
655
+ const res = await fetch(url("/plain/"));
656
+ expect(res.status).toBe(200);
657
+ expect(await res.text()).toBe("plain");
658
+ });
659
+ });
660
+ //# sourceMappingURL=guards-interceptors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards-interceptors.test.js","sourceRoot":"","sources":["../../src/__tests__/guards-interceptors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "reflect-metadata";