@velajs/vela 1.19.0 → 1.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/CHANGELOG.md +22 -14
  2. package/dist/configurable-module.builder-5FGMaXG6.js +91 -0
  3. package/dist/configurable-module.builder-5FGMaXG6.js.map +1 -0
  4. package/dist/container-BqUHID4l.js +645 -0
  5. package/dist/container-BqUHID4l.js.map +1 -0
  6. package/dist/cron-matcher-C9qv5OUA.js +113 -0
  7. package/dist/cron-matcher-C9qv5OUA.js.map +1 -0
  8. package/dist/decorate-GcSMAbKn.js +528 -0
  9. package/dist/decorate-GcSMAbKn.js.map +1 -0
  10. package/dist/decorators-C8YBFCIk.js +53 -0
  11. package/dist/decorators-C8YBFCIk.js.map +1 -0
  12. package/dist/define-module-NOyOZNXD.js +235 -0
  13. package/dist/define-module-NOyOZNXD.js.map +1 -0
  14. package/dist/discovery.service-BYm95SSD.js +368 -0
  15. package/dist/discovery.service-BYm95SSD.js.map +1 -0
  16. package/dist/discovery.service-Cpf1QcZ5.d.ts +648 -0
  17. package/dist/i18n/index.d.ts +138 -10
  18. package/dist/i18n/index.js +270 -8
  19. package/dist/i18n/index.js.map +1 -0
  20. package/dist/index-D72EQfcC.d.ts +430 -0
  21. package/dist/index-DhShDLCM.d.ts +2310 -0
  22. package/dist/index.d.ts +6 -70
  23. package/dist/index.js +14 -76
  24. package/dist/internal.d.ts +13 -17
  25. package/dist/internal.js +6 -19
  26. package/dist/live/index.d.ts +2 -12
  27. package/dist/live/index.js +826 -16
  28. package/dist/live/index.js.map +1 -0
  29. package/dist/metadata.registry-D1od8ZBt.d.ts +842 -0
  30. package/dist/plugin-ByBlVOve.js +1387 -0
  31. package/dist/plugin-ByBlVOve.js.map +1 -0
  32. package/dist/queue/index.d.ts +247 -10
  33. package/dist/queue/index.js +384 -12
  34. package/dist/queue/index.js.map +1 -0
  35. package/dist/request-context-C3nCGJNd.js +26 -0
  36. package/dist/request-context-C3nCGJNd.js.map +1 -0
  37. package/dist/route.manager-DRAZ5X04.js +991 -0
  38. package/dist/route.manager-DRAZ5X04.js.map +1 -0
  39. package/dist/schedule-node/index.d.ts +32 -3
  40. package/dist/schedule-node/index.js +97 -3
  41. package/dist/schedule-node/index.js.map +1 -0
  42. package/dist/schedule.registry-DVm7Jp5w.d.ts +55 -0
  43. package/dist/seeder/index.d.ts +75 -5
  44. package/dist/seeder/index.js +105 -4
  45. package/dist/seeder/index.js.map +1 -0
  46. package/dist/signed-url-CMmi0SIb.js +56 -0
  47. package/dist/signed-url-CMmi0SIb.js.map +1 -0
  48. package/dist/signed-url-DKhgja4U.d.ts +16 -0
  49. package/dist/src-eb5CI6Xn.js +2151 -0
  50. package/dist/src-eb5CI6Xn.js.map +1 -0
  51. package/dist/storage/index.d.ts +57 -4
  52. package/dist/storage/index.js +22 -5
  53. package/dist/storage/index.js.map +1 -0
  54. package/dist/streaming/index.d.ts +2 -2
  55. package/dist/streaming/index.js +2 -1
  56. package/dist/websocket/index.d.ts +3 -12
  57. package/dist/websocket/index.js +2 -16
  58. package/dist/websocket-DXmB-MWJ.js +697 -0
  59. package/dist/websocket-DXmB-MWJ.js.map +1 -0
  60. package/dist/websocket-node/index.d.ts +108 -6
  61. package/dist/websocket-node/index.js +228 -6
  62. package/dist/websocket-node/index.js.map +1 -0
  63. package/package.json +66 -53
  64. package/dist/__tests__/workers/entry.d.ts +0 -9
  65. package/dist/__tests__/workers-als/entry-als.d.ts +0 -9
  66. package/dist/application.d.ts +0 -104
  67. package/dist/application.js +0 -364
  68. package/dist/cache/cache.decorators.d.ts +0 -2
  69. package/dist/cache/cache.decorators.js +0 -4
  70. package/dist/cache/cache.interceptor.d.ts +0 -9
  71. package/dist/cache/cache.interceptor.js +0 -60
  72. package/dist/cache/cache.module.d.ts +0 -7
  73. package/dist/cache/cache.module.js +0 -58
  74. package/dist/cache/cache.service.d.ts +0 -9
  75. package/dist/cache/cache.service.js +0 -42
  76. package/dist/cache/cache.store.d.ts +0 -12
  77. package/dist/cache/cache.store.js +0 -51
  78. package/dist/cache/cache.tokens.d.ts +0 -6
  79. package/dist/cache/cache.tokens.js +0 -5
  80. package/dist/cache/cache.types.d.ts +0 -41
  81. package/dist/cache/cache.types.js +0 -1
  82. package/dist/cache/index.d.ts +0 -8
  83. package/dist/cache/index.js +0 -7
  84. package/dist/cache/tiered-cache.store.d.ts +0 -19
  85. package/dist/cache/tiered-cache.store.js +0 -40
  86. package/dist/config/config.module.d.ts +0 -19
  87. package/dist/config/config.module.js +0 -98
  88. package/dist/config/config.service.d.ts +0 -20
  89. package/dist/config/config.service.js +0 -43
  90. package/dist/config/config.store.d.ts +0 -46
  91. package/dist/config/config.store.js +0 -119
  92. package/dist/config/config.tokens.d.ts +0 -13
  93. package/dist/config/config.tokens.js +0 -14
  94. package/dist/config/config.types.d.ts +0 -41
  95. package/dist/config/config.types.js +0 -4
  96. package/dist/config/index.d.ts +0 -7
  97. package/dist/config/index.js +0 -5
  98. package/dist/config/register-as.d.ts +0 -52
  99. package/dist/config/register-as.js +0 -39
  100. package/dist/constants.d.ts +0 -44
  101. package/dist/constants.js +0 -46
  102. package/dist/container/container.d.ts +0 -154
  103. package/dist/container/container.js +0 -849
  104. package/dist/container/decorators.d.ts +0 -17
  105. package/dist/container/decorators.js +0 -57
  106. package/dist/container/disposable.d.ts +0 -5
  107. package/dist/container/disposable.js +0 -33
  108. package/dist/container/index.d.ts +0 -6
  109. package/dist/container/index.js +0 -5
  110. package/dist/container/mixin.d.ts +0 -24
  111. package/dist/container/mixin.js +0 -26
  112. package/dist/container/module-ref.d.ts +0 -21
  113. package/dist/container/module-ref.js +0 -48
  114. package/dist/container/types.d.ts +0 -154
  115. package/dist/container/types.js +0 -49
  116. package/dist/cors/cors.module.d.ts +0 -7
  117. package/dist/cors/cors.module.js +0 -37
  118. package/dist/cors/cors.tokens.d.ts +0 -3
  119. package/dist/cors/cors.tokens.js +0 -2
  120. package/dist/cors/cors.types.d.ts +0 -8
  121. package/dist/cors/cors.types.js +0 -1
  122. package/dist/cors/index.d.ts +0 -3
  123. package/dist/cors/index.js +0 -2
  124. package/dist/crypto/signed-url.d.ts +0 -12
  125. package/dist/crypto/signed-url.js +0 -60
  126. package/dist/discovery/discoverable.decorator.d.ts +0 -38
  127. package/dist/discovery/discoverable.decorator.js +0 -42
  128. package/dist/discovery/discovery.service.d.ts +0 -102
  129. package/dist/discovery/discovery.service.js +0 -177
  130. package/dist/discovery/index.d.ts +0 -2
  131. package/dist/discovery/index.js +0 -2
  132. package/dist/entrypoint/entrypoint.registry.d.ts +0 -42
  133. package/dist/entrypoint/entrypoint.registry.js +0 -112
  134. package/dist/entrypoint/entrypoint.types.d.ts +0 -41
  135. package/dist/entrypoint/entrypoint.types.js +0 -3
  136. package/dist/entrypoint/execution-context.d.ts +0 -15
  137. package/dist/entrypoint/execution-context.js +0 -21
  138. package/dist/entrypoint/execution-scope.d.ts +0 -21
  139. package/dist/entrypoint/execution-scope.js +0 -28
  140. package/dist/entrypoint/index.d.ts +0 -4
  141. package/dist/entrypoint/index.js +0 -4
  142. package/dist/errors/http-exception.d.ts +0 -63
  143. package/dist/errors/http-exception.js +0 -142
  144. package/dist/errors/index.d.ts +0 -1
  145. package/dist/errors/index.js +0 -1
  146. package/dist/event-emitter/event-emitter.decorators.d.ts +0 -1
  147. package/dist/event-emitter/event-emitter.decorators.js +0 -10
  148. package/dist/event-emitter/event-emitter.module.d.ts +0 -2
  149. package/dist/event-emitter/event-emitter.module.js +0 -23
  150. package/dist/event-emitter/event-emitter.service.d.ts +0 -13
  151. package/dist/event-emitter/event-emitter.service.js +0 -127
  152. package/dist/event-emitter/event-emitter.subscriber.d.ts +0 -9
  153. package/dist/event-emitter/event-emitter.subscriber.js +0 -45
  154. package/dist/event-emitter/event-emitter.tokens.d.ts +0 -1
  155. package/dist/event-emitter/event-emitter.tokens.js +0 -1
  156. package/dist/event-emitter/event-emitter.types.d.ts +0 -5
  157. package/dist/event-emitter/event-emitter.types.js +0 -1
  158. package/dist/event-emitter/index.d.ts +0 -6
  159. package/dist/event-emitter/index.js +0 -5
  160. package/dist/exceptions/errors.module.d.ts +0 -40
  161. package/dist/exceptions/errors.module.js +0 -46
  162. package/dist/exceptions/exception-handler.d.ts +0 -56
  163. package/dist/exceptions/exception-handler.js +0 -17
  164. package/dist/exceptions/index.d.ts +0 -6
  165. package/dist/exceptions/index.js +0 -3
  166. package/dist/exceptions/reporter.d.ts +0 -21
  167. package/dist/exceptions/reporter.js +0 -70
  168. package/dist/factory/adapter.d.ts +0 -36
  169. package/dist/factory/adapter.js +0 -18
  170. package/dist/factory/bootstrap.d.ts +0 -23
  171. package/dist/factory/bootstrap.js +0 -110
  172. package/dist/factory.d.ts +0 -16
  173. package/dist/factory.js +0 -36
  174. package/dist/fetch/fetch.module.d.ts +0 -7
  175. package/dist/fetch/fetch.module.js +0 -31
  176. package/dist/fetch/fetch.service.d.ts +0 -24
  177. package/dist/fetch/fetch.service.js +0 -145
  178. package/dist/fetch/fetch.types.d.ts +0 -24
  179. package/dist/fetch/fetch.types.js +0 -1
  180. package/dist/fetch/index.d.ts +0 -3
  181. package/dist/fetch/index.js +0 -2
  182. package/dist/health/health.http.d.ts +0 -14
  183. package/dist/health/health.http.js +0 -75
  184. package/dist/health/health.indicator.d.ts +0 -9
  185. package/dist/health/health.indicator.js +0 -32
  186. package/dist/health/health.module.d.ts +0 -2
  187. package/dist/health/health.module.js +0 -26
  188. package/dist/health/health.service.d.ts +0 -7
  189. package/dist/health/health.service.js +0 -69
  190. package/dist/health/health.types.d.ts +0 -15
  191. package/dist/health/health.types.js +0 -1
  192. package/dist/health/index.d.ts +0 -6
  193. package/dist/health/index.js +0 -4
  194. package/dist/http/ambient.d.ts +0 -17
  195. package/dist/http/ambient.js +0 -44
  196. package/dist/http/argument-resolver.d.ts +0 -10
  197. package/dist/http/argument-resolver.js +0 -89
  198. package/dist/http/decorators.d.ts +0 -198
  199. package/dist/http/decorators.js +0 -321
  200. package/dist/http/execution-context.d.ts +0 -8
  201. package/dist/http/execution-context.js +0 -35
  202. package/dist/http/handler-executor.d.ts +0 -20
  203. package/dist/http/handler-executor.js +0 -133
  204. package/dist/http/index.d.ts +0 -12
  205. package/dist/http/index.js +0 -7
  206. package/dist/http/instantiate.d.ts +0 -4
  207. package/dist/http/instantiate.js +0 -45
  208. package/dist/http/lazy-param.decorator.d.ts +0 -37
  209. package/dist/http/lazy-param.decorator.js +0 -117
  210. package/dist/http/request-container.d.ts +0 -16
  211. package/dist/http/request-container.js +0 -19
  212. package/dist/http/request-context.d.ts +0 -13
  213. package/dist/http/request-context.js +0 -22
  214. package/dist/http/response-mapper.d.ts +0 -8
  215. package/dist/http/response-mapper.js +0 -42
  216. package/dist/http/route-contributor.d.ts +0 -68
  217. package/dist/http/route-contributor.js +0 -22
  218. package/dist/http/route-map.d.ts +0 -30
  219. package/dist/http/route-map.js +0 -27
  220. package/dist/http/route.manager.d.ts +0 -92
  221. package/dist/http/route.manager.js +0 -481
  222. package/dist/http/types.d.ts +0 -37
  223. package/dist/http/types.js +0 -1
  224. package/dist/http/url/index.d.ts +0 -4
  225. package/dist/http/url/index.js +0 -3
  226. package/dist/http/url/signed-url.guard.d.ts +0 -27
  227. package/dist/http/url/signed-url.guard.js +0 -62
  228. package/dist/http/url/signing-secret.d.ts +0 -20
  229. package/dist/http/url/signing-secret.js +0 -24
  230. package/dist/http/url/url-generator.service.d.ts +0 -52
  231. package/dist/http/url/url-generator.service.js +0 -104
  232. package/dist/i18n/deep-merge.d.ts +0 -2
  233. package/dist/i18n/deep-merge.js +0 -15
  234. package/dist/i18n/i18n.middleware.d.ts +0 -15
  235. package/dist/i18n/i18n.middleware.js +0 -94
  236. package/dist/i18n/i18n.module.d.ts +0 -13
  237. package/dist/i18n/i18n.module.js +0 -69
  238. package/dist/i18n/i18n.options.d.ts +0 -30
  239. package/dist/i18n/i18n.options.js +0 -16
  240. package/dist/i18n/i18n.service.d.ts +0 -20
  241. package/dist/i18n/i18n.service.js +0 -49
  242. package/dist/i18n/i18n.tokens.d.ts +0 -6
  243. package/dist/i18n/i18n.tokens.js +0 -3
  244. package/dist/i18n/i18n.types.d.ts +0 -6
  245. package/dist/i18n/i18n.types.js +0 -1
  246. package/dist/i18n/message-loader.service.d.ts +0 -21
  247. package/dist/i18n/message-loader.service.js +0 -90
  248. package/dist/i18n/message-registry.d.ts +0 -16
  249. package/dist/i18n/message-registry.js +0 -49
  250. package/dist/lifecycle/index.d.ts +0 -20
  251. package/dist/lifecycle/index.js +0 -15
  252. package/dist/live/live.cursor.d.ts +0 -22
  253. package/dist/live/live.cursor.js +0 -56
  254. package/dist/live/live.decorators.d.ts +0 -32
  255. package/dist/live/live.decorators.js +0 -46
  256. package/dist/live/live.delta.d.ts +0 -15
  257. package/dist/live/live.delta.js +0 -51
  258. package/dist/live/live.engine.d.ts +0 -88
  259. package/dist/live/live.engine.js +0 -471
  260. package/dist/live/live.invalidation.d.ts +0 -45
  261. package/dist/live/live.invalidation.js +0 -99
  262. package/dist/live/live.module.d.ts +0 -28
  263. package/dist/live/live.module.js +0 -87
  264. package/dist/live/live.tokens.d.ts +0 -9
  265. package/dist/live/live.tokens.js +0 -8
  266. package/dist/live/live.types.d.ts +0 -138
  267. package/dist/live/live.types.js +0 -1
  268. package/dist/live/presence.d.ts +0 -44
  269. package/dist/live/presence.js +0 -130
  270. package/dist/metadata.d.ts +0 -10
  271. package/dist/metadata.js +0 -20
  272. package/dist/module/configurable-module.builder.d.ts +0 -56
  273. package/dist/module/configurable-module.builder.js +0 -84
  274. package/dist/module/configurable-module.types.d.ts +0 -93
  275. package/dist/module/configurable-module.types.js +0 -5
  276. package/dist/module/decorators.d.ts +0 -10
  277. package/dist/module/decorators.js +0 -47
  278. package/dist/module/define-module.d.ts +0 -112
  279. package/dist/module/define-module.js +0 -232
  280. package/dist/module/graph.d.ts +0 -10
  281. package/dist/module/graph.js +0 -35
  282. package/dist/module/index.d.ts +0 -10
  283. package/dist/module/index.js +0 -7
  284. package/dist/module/lazy-modules.d.ts +0 -82
  285. package/dist/module/lazy-modules.js +0 -231
  286. package/dist/module/lazy-provider.d.ts +0 -65
  287. package/dist/module/lazy-provider.js +0 -111
  288. package/dist/module/middleware.d.ts +0 -30
  289. package/dist/module/middleware.js +0 -67
  290. package/dist/module/module-loader.d.ts +0 -58
  291. package/dist/module/module-loader.js +0 -484
  292. package/dist/module/stable-hash.d.ts +0 -15
  293. package/dist/module/stable-hash.js +0 -52
  294. package/dist/module/types.d.ts +0 -1
  295. package/dist/module/types.js +0 -1
  296. package/dist/openapi/decorators.d.ts +0 -34
  297. package/dist/openapi/decorators.js +0 -66
  298. package/dist/openapi/document.d.ts +0 -3
  299. package/dist/openapi/document.js +0 -316
  300. package/dist/openapi/index.d.ts +0 -7
  301. package/dist/openapi/index.js +0 -6
  302. package/dist/openapi/redoc-ui.d.ts +0 -1
  303. package/dist/openapi/redoc-ui.js +0 -19
  304. package/dist/openapi/scalar-ui.d.ts +0 -1
  305. package/dist/openapi/scalar-ui.js +0 -19
  306. package/dist/openapi/swagger-ui.d.ts +0 -1
  307. package/dist/openapi/swagger-ui.js +0 -23
  308. package/dist/openapi/types.d.ts +0 -182
  309. package/dist/openapi/types.js +0 -4
  310. package/dist/openapi/zod-to-json-schema.d.ts +0 -4
  311. package/dist/openapi/zod-to-json-schema.js +0 -57
  312. package/dist/pipeline/app-providers.d.ts +0 -10
  313. package/dist/pipeline/app-providers.js +0 -43
  314. package/dist/pipeline/component.manager.d.ts +0 -25
  315. package/dist/pipeline/component.manager.js +0 -66
  316. package/dist/pipeline/decorators.d.ts +0 -10
  317. package/dist/pipeline/decorators.js +0 -42
  318. package/dist/pipeline/index.d.ts +0 -12
  319. package/dist/pipeline/index.js +0 -7
  320. package/dist/pipeline/pipeline-runner.d.ts +0 -31
  321. package/dist/pipeline/pipeline-runner.js +0 -40
  322. package/dist/pipeline/pipes.d.ts +0 -48
  323. package/dist/pipeline/pipes.js +0 -104
  324. package/dist/pipeline/reflector.d.ts +0 -86
  325. package/dist/pipeline/reflector.js +0 -121
  326. package/dist/pipeline/scoped-components.d.ts +0 -26
  327. package/dist/pipeline/scoped-components.js +0 -27
  328. package/dist/pipeline/tokens.d.ts +0 -57
  329. package/dist/pipeline/tokens.js +0 -47
  330. package/dist/pipeline/types.d.ts +0 -64
  331. package/dist/pipeline/types.js +0 -1
  332. package/dist/plugin/plugin.d.ts +0 -31
  333. package/dist/plugin/plugin.js +0 -111
  334. package/dist/queue/inline.driver.d.ts +0 -30
  335. package/dist/queue/inline.driver.js +0 -58
  336. package/dist/queue/queue.binding.d.ts +0 -23
  337. package/dist/queue/queue.binding.js +0 -60
  338. package/dist/queue/queue.client.d.ts +0 -20
  339. package/dist/queue/queue.client.js +0 -33
  340. package/dist/queue/queue.decorators.d.ts +0 -23
  341. package/dist/queue/queue.decorators.js +0 -46
  342. package/dist/queue/queue.dispatch.d.ts +0 -36
  343. package/dist/queue/queue.dispatch.js +0 -109
  344. package/dist/queue/queue.module.d.ts +0 -32
  345. package/dist/queue/queue.module.js +0 -80
  346. package/dist/queue/queue.tokens.d.ts +0 -21
  347. package/dist/queue/queue.tokens.js +0 -34
  348. package/dist/queue/queue.types.d.ts +0 -61
  349. package/dist/queue/queue.types.js +0 -4
  350. package/dist/registry/index.d.ts +0 -2
  351. package/dist/registry/index.js +0 -1
  352. package/dist/registry/metadata.registry.d.ts +0 -73
  353. package/dist/registry/metadata.registry.js +0 -357
  354. package/dist/registry/paths.d.ts +0 -3
  355. package/dist/registry/paths.js +0 -15
  356. package/dist/registry/types.d.ts +0 -116
  357. package/dist/registry/types.js +0 -1
  358. package/dist/registry/util.d.ts +0 -3
  359. package/dist/registry/util.js +0 -8
  360. package/dist/schedule/cron-matcher.d.ts +0 -2
  361. package/dist/schedule/cron-matcher.js +0 -62
  362. package/dist/schedule/index.d.ts +0 -8
  363. package/dist/schedule/index.js +0 -5
  364. package/dist/schedule/schedule.decorators.d.ts +0 -2
  365. package/dist/schedule/schedule.decorators.js +0 -18
  366. package/dist/schedule/schedule.module.d.ts +0 -9
  367. package/dist/schedule/schedule.module.js +0 -28
  368. package/dist/schedule/schedule.registry.d.ts +0 -23
  369. package/dist/schedule/schedule.registry.js +0 -63
  370. package/dist/schedule/schedule.tokens.d.ts +0 -2
  371. package/dist/schedule/schedule.tokens.js +0 -2
  372. package/dist/schedule/schedule.types.d.ts +0 -8
  373. package/dist/schedule/schedule.types.js +0 -1
  374. package/dist/schedule-node/schedule-node.module.d.ts +0 -9
  375. package/dist/schedule-node/schedule-node.module.js +0 -28
  376. package/dist/schedule-node/schedule.executor.d.ts +0 -19
  377. package/dist/schedule-node/schedule.executor.js +0 -112
  378. package/dist/seeder/seeder.decorator.d.ts +0 -7
  379. package/dist/seeder/seeder.decorator.js +0 -15
  380. package/dist/seeder/seeder.module.d.ts +0 -16
  381. package/dist/seeder/seeder.module.js +0 -44
  382. package/dist/seeder/seeder.registry.d.ts +0 -23
  383. package/dist/seeder/seeder.registry.js +0 -83
  384. package/dist/seeder/seeder.tokens.d.ts +0 -2
  385. package/dist/seeder/seeder.tokens.js +0 -1
  386. package/dist/seeder/seeder.types.d.ts +0 -20
  387. package/dist/seeder/seeder.types.js +0 -1
  388. package/dist/serialization/index.d.ts +0 -2
  389. package/dist/serialization/index.js +0 -2
  390. package/dist/serialization/serialize.decorator.d.ts +0 -6
  391. package/dist/serialization/serialize.decorator.js +0 -7
  392. package/dist/serialization/serializer.interceptor.d.ts +0 -4
  393. package/dist/serialization/serializer.interceptor.js +0 -16
  394. package/dist/services/index.d.ts +0 -2
  395. package/dist/services/index.js +0 -1
  396. package/dist/services/logger.d.ts +0 -59
  397. package/dist/services/logger.js +0 -159
  398. package/dist/storage/path-template.d.ts +0 -9
  399. package/dist/storage/path-template.js +0 -20
  400. package/dist/storage/storage.types.d.ts +0 -41
  401. package/dist/storage/storage.types.js +0 -5
  402. package/dist/throttler/index.d.ts +0 -6
  403. package/dist/throttler/index.js +0 -5
  404. package/dist/throttler/throttler.decorators.d.ts +0 -3
  405. package/dist/throttler/throttler.decorators.js +0 -4
  406. package/dist/throttler/throttler.guard.d.ts +0 -9
  407. package/dist/throttler/throttler.guard.js +0 -72
  408. package/dist/throttler/throttler.module.d.ts +0 -7
  409. package/dist/throttler/throttler.module.js +0 -41
  410. package/dist/throttler/throttler.storage.d.ts +0 -10
  411. package/dist/throttler/throttler.storage.js +0 -44
  412. package/dist/throttler/throttler.tokens.d.ts +0 -6
  413. package/dist/throttler/throttler.tokens.js +0 -5
  414. package/dist/throttler/throttler.types.d.ts +0 -25
  415. package/dist/throttler/throttler.types.js +0 -1
  416. package/dist/validation/create-zod-dto.d.ts +0 -13
  417. package/dist/validation/create-zod-dto.js +0 -18
  418. package/dist/validation/index.d.ts +0 -3
  419. package/dist/validation/index.js +0 -2
  420. package/dist/validation/validation.pipe.d.ts +0 -4
  421. package/dist/validation/validation.pipe.js +0 -19
  422. package/dist/websocket/websocket.decorators.d.ts +0 -47
  423. package/dist/websocket/websocket.decorators.js +0 -80
  424. package/dist/websocket/websocket.module.d.ts +0 -35
  425. package/dist/websocket/websocket.module.js +0 -63
  426. package/dist/websocket/websocket.tokens.d.ts +0 -30
  427. package/dist/websocket/websocket.tokens.js +0 -27
  428. package/dist/websocket/websocket.types.d.ts +0 -102
  429. package/dist/websocket/websocket.types.js +0 -4
  430. package/dist/websocket/ws-argument-resolver.d.ts +0 -13
  431. package/dist/websocket/ws-argument-resolver.js +0 -40
  432. package/dist/websocket/ws-dispatcher.d.ts +0 -54
  433. package/dist/websocket/ws-dispatcher.js +0 -343
  434. package/dist/websocket/ws-exception.d.ts +0 -25
  435. package/dist/websocket/ws-exception.js +0 -42
  436. package/dist/websocket/ws-execution-context.d.ts +0 -9
  437. package/dist/websocket/ws-execution-context.js +0 -24
  438. package/dist/websocket/ws-server.d.ts +0 -31
  439. package/dist/websocket/ws-server.js +0 -74
  440. package/dist/websocket/ws-sync.d.ts +0 -47
  441. package/dist/websocket/ws-sync.js +0 -74
  442. package/dist/websocket-node/node-ws-client.d.ts +0 -24
  443. package/dist/websocket-node/node-ws-client.js +0 -49
  444. package/dist/websocket-node/redis-live.d.ts +0 -24
  445. package/dist/websocket-node/redis-live.js +0 -57
  446. package/dist/websocket-node/redis-sync.d.ts +0 -33
  447. package/dist/websocket-node/redis-sync.js +0 -56
  448. package/dist/websocket-node/register-gateways.d.ts +0 -20
  449. package/dist/websocket-node/register-gateways.js +0 -61
@@ -1,481 +0,0 @@
1
- import { Hono } from "hono";
2
- import { contextStorage } from "hono/context-storage";
3
- import { HttpMethod } from "../constants.js";
4
- import { HttpException } from "../errors/http-exception.js";
5
- import { getMetadata } from "../metadata.js";
6
- import { joinPaths } from "../registry/paths.js";
7
- import { ArgumentResolver } from "./argument-resolver.js";
8
- import { getRouteContributors } from "./route-contributor.js";
9
- import { buildMiddlewareExecutionContext } from "./execution-context.js";
10
- import { HandlerExecutor } from "./handler-executor.js";
11
- import { instantiate, instantiateMany } from "./instantiate.js";
12
- import { REQUEST_CONTEXT, createRequestContext } from "./request-context.js";
13
- import { mapResponse } from "./response-mapper.js";
14
- import { ComponentManager } from "../pipeline/component.manager.js";
15
- import { shouldFilterCatch } from "../pipeline/decorators.js";
16
- import { MetadataRegistry } from "../registry/metadata.registry.js";
17
- const defaultGetClientIp = (c)=>c.req.raw.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? c.req.raw.headers.get('x-real-ip') ?? null;
18
- // Mirror a response body stream, invoking `onDone` exactly once when it is fully
19
- // read, errors, or is cancelled. Lets request-scoped resources be disposed only
20
- // after the body has drained — never mid-stream.
21
- function disposeStreamWhenDone(body, onDone) {
22
- const reader = body.getReader();
23
- let finished = false;
24
- const finish = ()=>{
25
- if (!finished) {
26
- finished = true;
27
- onDone();
28
- }
29
- };
30
- return new ReadableStream({
31
- async pull (controller) {
32
- try {
33
- const { done, value } = await reader.read();
34
- if (done) {
35
- controller.close();
36
- finish();
37
- return;
38
- }
39
- controller.enqueue(value);
40
- } catch (error) {
41
- controller.error(error);
42
- finish();
43
- }
44
- },
45
- cancel (reason) {
46
- finish();
47
- return reader.cancel(reason);
48
- }
49
- });
50
- }
51
- export class RouteManager {
52
- container;
53
- static METHOD_REGISTRAR = new Map([
54
- [
55
- HttpMethod.GET,
56
- (app, p, h)=>app.get(p, h)
57
- ],
58
- [
59
- HttpMethod.POST,
60
- (app, p, h)=>app.post(p, h)
61
- ],
62
- [
63
- HttpMethod.PUT,
64
- (app, p, h)=>app.put(p, h)
65
- ],
66
- [
67
- HttpMethod.PATCH,
68
- (app, p, h)=>app.patch(p, h)
69
- ],
70
- [
71
- HttpMethod.DELETE,
72
- (app, p, h)=>app.delete(p, h)
73
- ],
74
- [
75
- HttpMethod.OPTIONS,
76
- (app, p, h)=>app.options(p, h)
77
- ],
78
- [
79
- HttpMethod.HEAD,
80
- (app, p, h)=>app.get(p, (c, next)=>c.req.method === 'HEAD' ? h(c) : next())
81
- ],
82
- [
83
- HttpMethod.ALL,
84
- (app, p, h)=>app.all(p, h)
85
- ]
86
- ]);
87
- controllers = [];
88
- globalMiddleware = [];
89
- globalPipes = [];
90
- globalGuards = [];
91
- globalInterceptors = [];
92
- globalFilters = [];
93
- globalPrefix = '';
94
- consumerMiddlewareDefinitions = [];
95
- routeDescriptions = [];
96
- handlerExecutor;
97
- ambientContainer;
98
- constructor(container, options = {}){
99
- this.container = container;
100
- this.ambientContainer = options.ambientContainer ?? false;
101
- const argumentResolver = new ArgumentResolver(options.getClientIp ?? defaultGetClientIp);
102
- this.handlerExecutor = new HandlerExecutor(argumentResolver, ()=>({
103
- guards: this.globalGuards,
104
- pipes: this.globalPipes,
105
- interceptors: this.globalInterceptors,
106
- filters: this.globalFilters
107
- }), (c)=>this.getRequestContainer(c));
108
- }
109
- /**
110
- * The global-tier components (`APP_*` provider tokens + imperative
111
- * `app.useGlobalX()` instances). Exposed so non-HTTP transports (the
112
- * WebSocket dispatcher) can apply the same app-wide guards/pipes/interceptors/
113
- * filters as HTTP routes, read live so late registrations propagate.
114
- */ getGlobalComponents() {
115
- return {
116
- guards: this.globalGuards,
117
- pipes: this.globalPipes,
118
- interceptors: this.globalInterceptors,
119
- filters: this.globalFilters
120
- };
121
- }
122
- registerConsumerMiddleware(definitions) {
123
- this.consumerMiddlewareDefinitions.push(...definitions);
124
- return this;
125
- }
126
- setGlobalPrefix(prefix) {
127
- this.globalPrefix = prefix && !prefix.startsWith('/') ? `/${prefix}` : prefix;
128
- return this;
129
- }
130
- useGlobalMiddleware(...middleware) {
131
- this.globalMiddleware.push(...middleware);
132
- return this;
133
- }
134
- useGlobalMiddlewareTokens(...middlewareTokens) {
135
- this.globalMiddleware.push(...middlewareTokens);
136
- return this;
137
- }
138
- useGlobalPipes(...pipes) {
139
- this.globalPipes.push(...pipes);
140
- return this;
141
- }
142
- useGlobalPipeTokens(...pipeTokens) {
143
- this.globalPipes.push(...pipeTokens);
144
- return this;
145
- }
146
- useGlobalGuards(...guards) {
147
- this.globalGuards.push(...guards);
148
- return this;
149
- }
150
- useGlobalGuardTokens(...guardTokens) {
151
- this.globalGuards.push(...guardTokens);
152
- return this;
153
- }
154
- useGlobalInterceptors(...interceptors) {
155
- this.globalInterceptors.push(...interceptors);
156
- return this;
157
- }
158
- useGlobalInterceptorTokens(...interceptorTokens) {
159
- this.globalInterceptors.push(...interceptorTokens);
160
- return this;
161
- }
162
- useGlobalFilters(...filters) {
163
- this.globalFilters.push(...filters);
164
- return this;
165
- }
166
- useGlobalFilterTokens(...filterTokens) {
167
- this.globalFilters.push(...filterTokens);
168
- return this;
169
- }
170
- getMiddlewarePriority(entry) {
171
- if (entry == null) return 0;
172
- if (typeof entry === 'function') {
173
- const p = entry.priority;
174
- if (typeof p === 'number') return p;
175
- }
176
- if (typeof entry === 'object') {
177
- const inst = entry;
178
- if (typeof inst.priority === 'number') return inst.priority;
179
- if (typeof inst.constructor?.priority === 'number') return inst.constructor.priority;
180
- }
181
- // A token owned exclusively by unmaterialized lazy modules must not be
182
- // instantiate-probed here — the probe at route build would defeat the
183
- // module's deferral (i18n's APP_MIDDLEWARE). Default priority instead;
184
- // the middleware still materializes on its first request.
185
- if (this.container.isLazyPending(entry)) return 0;
186
- try {
187
- const resolved = instantiate(entry, this.container);
188
- if (resolved && typeof resolved === 'object') {
189
- const p = resolved.priority;
190
- if (typeof p === 'number') return p;
191
- const cp = resolved.constructor?.priority;
192
- if (typeof cp === 'number') return cp;
193
- }
194
- } catch {
195
- // Unresolvable at build time (e.g. request-scoped) — default 0
196
- }
197
- return 0;
198
- }
199
- getRequestContainer(c) {
200
- const existing = c.get('container');
201
- if (existing) {
202
- return existing;
203
- }
204
- const child = this.container.createChild();
205
- child.setRequestInstance(REQUEST_CONTEXT, createRequestContext(c));
206
- c.set('container', child);
207
- return child;
208
- }
209
- // Wraps an attached middleware so a thrown error flows through the
210
- // exception-filter chain instead of bypassing it on the way to Hono's
211
- // outer error handler. Mirrors the catch tail in HandlerExecutor — global
212
- // filters are the only scope reachable here, since per-handler filters
213
- // require a controller call frame that the middleware boundary lacks.
214
- // Non-throwing middleware paths (returning a Response, calling `next()`,
215
- // resolving a promise) are byte-identical to before — the wrapper only
216
- // intercepts thrown / rejected values.
217
- wrapMiddlewareWithFilters(handler) {
218
- return async (c, next)=>{
219
- try {
220
- return await handler(c, next);
221
- } catch (error) {
222
- const response = await this.mapMiddlewareError(c, error);
223
- // Force-replace any handler-set response. A middleware that throws
224
- // *after* `await next()` has the handler's body already attached
225
- // to `c.res`; without overwriting it, Hono would emit the
226
- // pre-throw success response and the filter's render would be
227
- // dropped.
228
- c.res = response;
229
- return response;
230
- }
231
- };
232
- }
233
- async mapMiddlewareError(c, error) {
234
- const requestContainer = this.getRequestContainer(c);
235
- const filters = instantiateMany(this.globalFilters, requestContainer);
236
- const host = buildMiddlewareExecutionContext(c);
237
- for (const filter of filters){
238
- if (shouldFilterCatch(filter, error)) {
239
- try {
240
- const filtered = await filter.catch(error, host);
241
- return mapResponse(c, filtered);
242
- } catch {
243
- break;
244
- }
245
- }
246
- }
247
- if (error instanceof HttpException) {
248
- const response = error.getResponse();
249
- const status = error.getStatus();
250
- return c.json(response, status);
251
- }
252
- // Non-HttpException with no catching filter: re-throw so Hono's
253
- // outer error handler produces the same default-500 response it
254
- // produced before this wrapping was introduced.
255
- throw error;
256
- }
257
- registerController(controller) {
258
- const prefix = MetadataRegistry.getControllerPath(controller);
259
- const options = MetadataRegistry.getControllerOptions(controller);
260
- const routes = MetadataRegistry.getRoutes(controller);
261
- // The ModuleLoader registers controllers in their owning module's bucket;
262
- // fall back to a `__root__` registration only for controllers that arrive
263
- // here outside the module-loading flow (test harnesses, custom adapters).
264
- if (!this.container.has(controller)) {
265
- this.container.register(controller);
266
- }
267
- this.controllers.push({
268
- controller,
269
- metadata: {
270
- prefix,
271
- version: options.version
272
- },
273
- routes: routes
274
- });
275
- return this;
276
- }
277
- /** The explicit controller routes recorded by the last `build()`. */ getRouteDescriptions() {
278
- return [
279
- ...this.routeDescriptions
280
- ];
281
- }
282
- /** The global prefix in effect (set at bootstrap; '' when none). */ getGlobalPrefix() {
283
- return this.globalPrefix;
284
- }
285
- async build() {
286
- const app = new Hono();
287
- this.routeDescriptions = [];
288
- // Outermost: dispose the per-request child container once the request is
289
- // fully done. Fast-paths out when the child has no request-scoped
290
- // disposables (the common case → zero overhead / no behavior change).
291
- // Streaming-safe: when a response body is present, disposal is deferred
292
- // until the body is fully read (or errors/cancels), never mid-stream.
293
- app.use('*', async (c, next)=>{
294
- let threw = false;
295
- try {
296
- await next();
297
- } catch (error) {
298
- threw = true;
299
- throw error;
300
- } finally{
301
- const child = c.get('container');
302
- if (child?.hasDisposables()) {
303
- const body = threw ? null : c.res?.body ?? null;
304
- if (body) {
305
- // Defer disposal to when the runtime finishes reading the body.
306
- c.res = new Response(disposeStreamWhenDone(body, ()=>void child.dispose()), {
307
- status: c.res.status,
308
- statusText: c.res.statusText,
309
- headers: c.res.headers
310
- });
311
- } else {
312
- // No body (or error path) — nothing streaming, dispose now.
313
- await child.dispose();
314
- }
315
- }
316
- }
317
- });
318
- // Opt-in ambient container: contextStorage() must be an early middleware so
319
- // getContext() is available to everything downstream.
320
- if (this.ambientContainer) {
321
- app.use('*', contextStorage());
322
- }
323
- // Sort global middleware by priority (lower runs first) with insertion
324
- // index as tiebreaker so equal priorities preserve registration order.
325
- const sortedGlobal = this.globalMiddleware.map((entry, index)=>({
326
- entry,
327
- index,
328
- priority: this.getMiddlewarePriority(entry)
329
- })).sort((a, b)=>a.priority - b.priority || a.index - b.index);
330
- for (const { entry } of sortedGlobal){
331
- app.use('*', this.wrapMiddlewareWithFilters((c, next)=>{
332
- const requestContainer = this.getRequestContainer(c);
333
- const resolved = instantiate(entry, requestContainer);
334
- return resolved.use(c, next);
335
- }));
336
- }
337
- const sortedConsumer = this.consumerMiddlewareDefinitions.map((def, index)=>({
338
- def,
339
- index,
340
- priority: def.priority ?? 0
341
- })).sort((a, b)=>a.priority - b.priority || a.index - b.index);
342
- for (const { def } of sortedConsumer){
343
- const matchRoute = this.compileRouteMatcher(def.routes);
344
- const matchExclude = this.compileRouteMatcher(def.excludes);
345
- app.use('*', this.wrapMiddlewareWithFilters((c, next)=>{
346
- const path = c.req.path;
347
- const method = c.req.method;
348
- if (!matchRoute(path, method) || matchExclude(path, method)) return next();
349
- const requestContainer = this.getRequestContainer(c);
350
- const runChain = (index)=>{
351
- if (index >= def.middleware.length) return next();
352
- const instance = instantiate(def.middleware[index], requestContainer);
353
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
- return instance.use(c, ()=>runChain(index + 1)).then(()=>{});
355
- };
356
- return runChain(0);
357
- }));
358
- }
359
- // First pass: register all custom routes (must come before CRUD /:id routes).
360
- for (const { controller, metadata, routes } of this.controllers){
361
- if (routes.length > 0) {
362
- const allParamMetadata = MetadataRegistry.getParameters(controller);
363
- for (const route of routes){
364
- const effectiveVersion = route.version ?? metadata.version;
365
- const versionedPaths = this.buildVersionedPaths(this.globalPrefix, metadata.prefix, route.path, effectiveVersion);
366
- // Parallel to versionedPaths: buildVersionedPaths maps versions to
367
- // paths 1:1 in order, so index i of both arrays belongs together.
368
- const versionsForPaths = effectiveVersion === undefined ? [
369
- undefined
370
- ] : Array.isArray(effectiveVersion) ? effectiveVersion : [
371
- effectiveVersion
372
- ];
373
- // Scoped (controller/handler) middleware only — global middleware is
374
- // applied once by this manager's own global pass, never re-read here.
375
- const middlewareItems = ComponentManager.getScopedComponents('middleware', controller, route.handlerName);
376
- const handler = this.handlerExecutor.create(route, controller, allParamMetadata);
377
- for (const [pathIndex, fullPath] of versionedPaths.entries()){
378
- for (const middlewareItem of middlewareItems){
379
- app.use(fullPath, this.wrapMiddlewareWithFilters((c, next)=>{
380
- const requestContainer = this.getRequestContainer(c);
381
- const resolved = instantiate(middlewareItem, requestContainer);
382
- return resolved.use(c, next);
383
- }));
384
- }
385
- this.registerRoute(app, route.method, fullPath, handler);
386
- this.routeDescriptions.push({
387
- method: String(route.method),
388
- path: fullPath || '/',
389
- controller: controller.name,
390
- handler: String(route.handlerName),
391
- version: versionsForPaths[pathIndex],
392
- ...route.name !== undefined ? {
393
- name: route.name
394
- } : {}
395
- });
396
- }
397
- }
398
- }
399
- }
400
- // Second pass: route contributors (generated routes registered last, so a
401
- // contributor's `/:id` catch-alls never shadow explicit routes). Each
402
- // contributor claims controllers by class-level metadata; `@velajs/crud`
403
- // registers one as an import side effect. The registry contract (instead
404
- // of dynamic `import()`) exists because esbuild leaves
405
- // `await import(variable)` as a runtime import Cloudflare Workers cannot
406
- // resolve.
407
- const contributors = getRouteContributors();
408
- for (const { controller, metadata, routes } of this.controllers){
409
- for (const contributor of contributors){
410
- const meta = getMetadata(contributor.claimsMetaKey, controller);
411
- if (meta === undefined) continue;
412
- await contributor.buildRoutes(app, {
413
- controller,
414
- controllerPrefix: metadata.prefix,
415
- meta,
416
- globalPrefix: this.globalPrefix,
417
- globalGuards: instantiateMany(this.globalGuards, this.container),
418
- container: this.container,
419
- joinPaths
420
- });
421
- }
422
- // DX warning for stale setups: @Crud() metadata but nothing produced a
423
- // route — native @velajs/crud (>=1.18) stamps real routes at decoration
424
- // time, and legacy bridges register a claiming contributor.
425
- if (getMetadata('vela:crud', controller) !== undefined && routes.length === 0 && !contributors.some((c)=>c.claimsMetaKey === 'vela:crud')) {
426
- console.warn(`[vela] ${controller.name} carries @Crud() metadata but produced no routes — ` + "install and import '@velajs/crud' (>=1.18), or remove the decorator.");
427
- }
428
- }
429
- return app;
430
- }
431
- registerRoute(app, method, path, handler) {
432
- const normalizedPath = path || '/';
433
- const registrar = RouteManager.METHOD_REGISTRAR.get(method);
434
- if (registrar) {
435
- registrar(app, normalizedPath, handler);
436
- } else {
437
- app.on(method, normalizedPath, handler);
438
- }
439
- }
440
- buildVersionedPaths(globalPrefix, controllerPrefix, routePath, version) {
441
- if (version === undefined) {
442
- return [
443
- joinPaths(globalPrefix, joinPaths(controllerPrefix, routePath))
444
- ];
445
- }
446
- const versions = Array.isArray(version) ? version : [
447
- version
448
- ];
449
- return versions.map((v)=>{
450
- const versionSegment = `/v${v}`;
451
- return joinPaths(globalPrefix, joinPaths(versionSegment, joinPaths(controllerPrefix, routePath)));
452
- });
453
- }
454
- compilePathMatcher(routePath) {
455
- if (routePath === '*') return ()=>true;
456
- const norm = routePath.startsWith('/') ? routePath : `/${routePath}`;
457
- if (norm.endsWith('*')) {
458
- const prefix = norm.slice(0, -1);
459
- return (p)=>p.startsWith(prefix);
460
- }
461
- return (p)=>p === norm || p.startsWith(`${norm}/`);
462
- }
463
- compileRouteMatcher(routes) {
464
- const matchers = routes.map((route)=>{
465
- const matchPath = this.compilePathMatcher(route.path);
466
- return (path, method)=>{
467
- if (!matchPath(path)) return false;
468
- if (route.method && route.method !== HttpMethod.ALL) return method === route.method;
469
- return true;
470
- };
471
- });
472
- if (matchers.length === 0) return ()=>false;
473
- if (matchers.length === 1) return matchers[0];
474
- return (path, method)=>matchers.some((m)=>m(path, method));
475
- }
476
- getControllers() {
477
- return [
478
- ...this.controllers
479
- ];
480
- }
481
- }
@@ -1,37 +0,0 @@
1
- import type { HttpMethod } from '../constants';
2
- import type { Type } from '../container/types';
3
- import type { PipeType } from '../registry/types';
4
- export interface RouteMetadata {
5
- method: HttpMethod;
6
- path: string;
7
- handlerName: string | symbol;
8
- version?: number | number[];
9
- /** Route name for URL generation / OpenAPI operationId (`@Get(path, { name })`). */
10
- name?: string;
11
- }
12
- export interface ControllerOptions {
13
- path?: string;
14
- version?: number | number[];
15
- }
16
- export interface ControllerMetadata {
17
- prefix: string;
18
- version?: number | number[];
19
- }
20
- export interface ParamMetadata {
21
- index: number;
22
- type: string;
23
- name?: string;
24
- pipes?: PipeType[];
25
- factory?: (data: unknown, ctx: import('hono').Context) => unknown;
26
- /**
27
- * Explicit param type for programmatic routes. Methods synthesized at
28
- * runtime (e.g. `@Crud()` verb handlers) have no `design:paramtypes`, so
29
- * ValidationPipe and the OpenAPI walk read this instead when present.
30
- */
31
- metatype?: unknown;
32
- }
33
- export interface ControllerRegistration {
34
- controller: Type;
35
- metadata: ControllerMetadata;
36
- routes: RouteMetadata[];
37
- }
@@ -1 +0,0 @@
1
- export { };
@@ -1,4 +0,0 @@
1
- export { UrlGeneratorService } from './url-generator.service';
2
- export type { UrlForOptions, SignedUrlGenerateOptions } from './url-generator.service';
3
- export { SignedUrlGuard, SignedUrl } from './signed-url.guard';
4
- export { URL_SIGNING_SECRET } from './signing-secret';
@@ -1,3 +0,0 @@
1
- export { UrlGeneratorService } from "./url-generator.service.js";
2
- export { SignedUrlGuard, SignedUrl } from "./signed-url.guard.js";
3
- export { URL_SIGNING_SECRET } from "./signing-secret.js";
@@ -1,27 +0,0 @@
1
- import { applyDecorators } from '../decorators';
2
- import type { CanActivate, ExecutionContext } from '../../pipeline/types';
3
- /**
4
- * Verifies the HMAC signature (and `expires`) of the incoming request URL,
5
- * using the same secret source as {@link UrlGeneratorService.signedUrl}: the
6
- * {@link URL_SIGNING_SECRET} token, else `CONFIG_ENV`. Throws
7
- * `ForbiddenException` (403) when the signature is missing, tampered, or
8
- * expired. Registered app-wide by `bootstrap`; apply it per-route with
9
- * {@link SignedUrl}.
10
- */
11
- export declare class SignedUrlGuard implements CanActivate {
12
- private readonly secretToken?;
13
- private readonly env;
14
- constructor(secretToken?: string | undefined, env?: Record<string, unknown>);
15
- canActivate(context: ExecutionContext): Promise<boolean>;
16
- }
17
- /**
18
- * Guards a route with {@link SignedUrlGuard} — the request must carry a valid,
19
- * unexpired HMAC signature (produced by `UrlGeneratorService.signedUrl`).
20
- *
21
- * ```ts
22
- * @Get('download', { name: 'file.download' })
23
- * @SignedUrl()
24
- * download() { ... }
25
- * ```
26
- */
27
- export declare function SignedUrl(): ReturnType<typeof applyDecorators>;
@@ -1,62 +0,0 @@
1
- function _ts_decorate(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
- function _ts_metadata(k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- }
10
- function _ts_param(paramIndex, decorator) {
11
- return function(target, key) {
12
- decorator(target, key, paramIndex);
13
- };
14
- }
15
- import { Injectable, Inject, Optional } from "../../container/decorators.js";
16
- import { CONFIG_ENV } from "../../config/config.tokens.js";
17
- import { verifySignedUrl } from "../../crypto/signed-url.js";
18
- import { ForbiddenException } from "../../errors/http-exception.js";
19
- import { applyDecorators } from "../decorators.js";
20
- import { UseGuards } from "../../pipeline/decorators.js";
21
- import { URL_SIGNING_SECRET, resolveSigningSecret } from "./signing-secret.js";
22
- export class SignedUrlGuard {
23
- secretToken;
24
- env;
25
- constructor(secretToken, env = {}){
26
- this.secretToken = secretToken;
27
- this.env = env;
28
- }
29
- async canActivate(context) {
30
- const request = context.switchToHttp().getRequest();
31
- const secret = resolveSigningSecret(undefined, this.secretToken, this.env);
32
- const valid = await verifySignedUrl(request.url, secret);
33
- if (!valid) {
34
- throw new ForbiddenException('Invalid or expired signed URL');
35
- }
36
- return true;
37
- }
38
- }
39
- SignedUrlGuard = _ts_decorate([
40
- Injectable(),
41
- _ts_param(0, Optional()),
42
- _ts_param(0, Inject(URL_SIGNING_SECRET)),
43
- _ts_param(1, Optional()),
44
- _ts_param(1, Inject(CONFIG_ENV)),
45
- _ts_metadata("design:type", Function),
46
- _ts_metadata("design:paramtypes", [
47
- String,
48
- typeof Record === "undefined" ? Object : Record
49
- ])
50
- ], SignedUrlGuard);
51
- /**
52
- * Guards a route with {@link SignedUrlGuard} — the request must carry a valid,
53
- * unexpired HMAC signature (produced by `UrlGeneratorService.signedUrl`).
54
- *
55
- * ```ts
56
- * @Get('download', { name: 'file.download' })
57
- * @SignedUrl()
58
- * download() { ... }
59
- * ```
60
- */ export function SignedUrl() {
61
- return applyDecorators(UseGuards(SignedUrlGuard));
62
- }
@@ -1,20 +0,0 @@
1
- import { InjectionToken } from '../../container/types';
2
- /**
3
- * Optional DI token holding the HMAC secret used to sign / verify URLs. Provide
4
- * it globally (e.g. from a platform adapter or a `@Global` module) so both
5
- * {@link UrlGeneratorService} and the signed-URL guard can read it:
6
- *
7
- * ```ts
8
- * { provide: URL_SIGNING_SECRET, useValue: env.URL_SIGNING_SECRET }
9
- * ```
10
- */
11
- export declare const URL_SIGNING_SECRET: InjectionToken<string>;
12
- /** Key read from `CONFIG_ENV` when no explicit secret / token is available. */
13
- export declare const URL_SIGNING_SECRET_ENV_KEY = "URL_SIGNING_SECRET";
14
- /**
15
- * Resolve the signing secret from, in order: an explicit argument, the
16
- * {@link URL_SIGNING_SECRET} token, then `CONFIG_ENV[URL_SIGNING_SECRET]`.
17
- * Throws a descriptive error when none is available — signing must never fall
18
- * back to an empty/implicit key.
19
- */
20
- export declare function resolveSigningSecret(explicit: string | undefined, token: string | undefined, env: Record<string, unknown> | undefined): string;
@@ -1,24 +0,0 @@
1
- import { InjectionToken } from "../../container/types.js";
2
- /**
3
- * Optional DI token holding the HMAC secret used to sign / verify URLs. Provide
4
- * it globally (e.g. from a platform adapter or a `@Global` module) so both
5
- * {@link UrlGeneratorService} and the signed-URL guard can read it:
6
- *
7
- * ```ts
8
- * { provide: URL_SIGNING_SECRET, useValue: env.URL_SIGNING_SECRET }
9
- * ```
10
- */ export const URL_SIGNING_SECRET = new InjectionToken('URL_SIGNING_SECRET');
11
- /** Key read from `CONFIG_ENV` when no explicit secret / token is available. */ export const URL_SIGNING_SECRET_ENV_KEY = 'URL_SIGNING_SECRET';
12
- /**
13
- * Resolve the signing secret from, in order: an explicit argument, the
14
- * {@link URL_SIGNING_SECRET} token, then `CONFIG_ENV[URL_SIGNING_SECRET]`.
15
- * Throws a descriptive error when none is available — signing must never fall
16
- * back to an empty/implicit key.
17
- */ export function resolveSigningSecret(explicit, token, env) {
18
- const fromEnv = env?.[URL_SIGNING_SECRET_ENV_KEY];
19
- const secret = explicit ?? token ?? (typeof fromEnv === 'string' ? fromEnv : undefined);
20
- if (!secret) {
21
- throw new Error('No URL signing secret is available. Pass one explicitly, register a ' + '`URL_SIGNING_SECRET` provider, or set `URL_SIGNING_SECRET` in `CONFIG_ENV`.');
22
- }
23
- return secret;
24
- }