@decaf-ts/for-nest 0.12.0 → 0.12.2-0

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 (326) hide show
  1. package/README.md +30 -4
  2. package/dist/for-nest.cjs +2610 -2
  3. package/dist/for-nest.js +2723 -2
  4. package/lib/cjs/auth/AuthInterceptor.cjs +5 -13
  5. package/lib/cjs/auth/AuthMiddleware.cjs +51 -0
  6. package/lib/cjs/auth/DecafAuthHandler.cjs +10 -5
  7. package/lib/cjs/auth/DecafAuthModule.cjs +8 -3
  8. package/lib/cjs/auth/constants.cjs +5 -3
  9. package/lib/cjs/auth/decorators.cjs +6 -2
  10. package/lib/cjs/auth/index.cjs +3 -2
  11. package/lib/cjs/bin/cli.cjs +2 -2
  12. package/lib/cjs/cli-module.cjs +2 -2
  13. package/lib/cjs/constants.cjs +2 -2
  14. package/lib/cjs/controllers.cjs +2 -2
  15. package/lib/cjs/core-module.cjs +2 -2
  16. package/lib/cjs/decaf-model/DecafModelModule.cjs +2 -2
  17. package/lib/cjs/decaf-model/FromModelController.cjs +8 -2
  18. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs +2 -2
  19. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs +2 -2
  20. package/lib/cjs/decaf-model/decorators/DecafBody.cjs +2 -2
  21. package/lib/cjs/decaf-model/decorators/DecafParams.cjs +2 -2
  22. package/lib/cjs/decaf-model/decorators/controller-config.cjs +2 -2
  23. package/lib/cjs/decaf-model/decorators/decorators.cjs +2 -2
  24. package/lib/cjs/decaf-model/decorators/expose.cjs +2 -2
  25. package/lib/cjs/decaf-model/decorators/index.cjs +2 -2
  26. package/lib/cjs/decaf-model/decorators/types.cjs +2 -2
  27. package/lib/cjs/decaf-model/decorators/utils.cjs +2 -2
  28. package/lib/cjs/decaf-model/index.cjs +2 -2
  29. package/lib/cjs/decaf-model/types.cjs +2 -2
  30. package/lib/cjs/decaf-model/utils.cjs +2 -2
  31. package/lib/cjs/decoration.cjs +2 -2
  32. package/lib/cjs/decorators.cjs +2 -2
  33. package/lib/cjs/events-module/DecafStreamModule.cjs +15 -4
  34. package/lib/cjs/events-module/EventsController.cjs +30 -7
  35. package/lib/cjs/events-module/EventsSubscriptionController.cjs +81 -0
  36. package/lib/cjs/events-module/ObserverSubscriptionRegistry.cjs +51 -0
  37. package/lib/cjs/events-module/constant.cjs +4 -3
  38. package/lib/cjs/events-module/index.cjs +5 -2
  39. package/lib/cjs/events-module/utils.cjs +2 -2
  40. package/lib/cjs/factory/NestBootstraper.cjs +2 -2
  41. package/lib/cjs/factory/errors/cors.cjs +2 -2
  42. package/lib/cjs/factory/errors/index.cjs +2 -2
  43. package/lib/cjs/factory/errors/throttling.cjs +2 -2
  44. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs +2 -2
  45. package/lib/cjs/factory/exceptions/decorators.cjs +2 -2
  46. package/lib/cjs/factory/exceptions/index.cjs +2 -2
  47. package/lib/cjs/factory/index.cjs +2 -2
  48. package/lib/cjs/factory/openapi/DtoBuilder.cjs +2 -2
  49. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs +2 -2
  50. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs +2 -2
  51. package/lib/cjs/factory/openapi/constants.cjs +2 -2
  52. package/lib/cjs/factory/openapi/index.cjs +2 -2
  53. package/lib/cjs/index.cjs +5 -5
  54. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs +5 -33
  55. package/lib/cjs/interceptors/index.cjs +2 -2
  56. package/lib/cjs/module.cjs +3 -3
  57. package/lib/cjs/overrides/Adapter.cjs +2 -2
  58. package/lib/cjs/overrides/ModelBuilderExtensions.cjs +2 -2
  59. package/lib/cjs/overrides/constants.cjs +2 -2
  60. package/lib/cjs/overrides/decoration.cjs +2 -2
  61. package/lib/cjs/overrides/helpers.cjs +2 -2
  62. package/lib/cjs/overrides/index.cjs +2 -2
  63. package/lib/cjs/overrides/logging.cjs +2 -2
  64. package/lib/cjs/overrides/overrides.cjs +2 -2
  65. package/lib/cjs/request/DecafAuthHandler.cjs +2 -2
  66. package/lib/cjs/request/DecafHandlerExecutor.cjs +2 -2
  67. package/lib/cjs/request/DecafRequestContext.cjs +2 -2
  68. package/lib/cjs/request/DecafResponseInterceptor.cjs +2 -2
  69. package/lib/cjs/request/contextualize.cjs +46 -0
  70. package/lib/cjs/request/index.cjs +3 -2
  71. package/lib/cjs/swagger-types.cjs +2 -2
  72. package/lib/cjs/types.cjs +2 -2
  73. package/lib/cjs/utils.cjs +2 -2
  74. package/lib/cjs/webhooks/DecafWebhookModule.cjs +2 -2
  75. package/lib/cjs/webhooks/controllers.cjs +2 -2
  76. package/lib/cjs/webhooks/index.cjs +2 -2
  77. package/lib/cjs/webhooks/types.cjs +2 -2
  78. package/lib/esm/auth/AuthInterceptor.js +5 -13
  79. package/lib/esm/auth/AuthMiddleware.js +42 -0
  80. package/lib/esm/auth/DecafAuthHandler.js +9 -4
  81. package/lib/esm/auth/DecafAuthModule.js +8 -3
  82. package/lib/esm/auth/constants.js +3 -1
  83. package/lib/esm/auth/decorators.js +5 -2
  84. package/lib/esm/auth/index.js +2 -1
  85. package/lib/esm/bin/cli.js +1 -1
  86. package/lib/esm/cli-module.js +1 -1
  87. package/lib/esm/constants.js +1 -1
  88. package/lib/esm/controllers.js +1 -1
  89. package/lib/esm/core-module.js +1 -1
  90. package/lib/esm/decaf-model/DecafModelModule.js +1 -1
  91. package/lib/esm/decaf-model/FromModelController.js +9 -3
  92. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +1 -1
  93. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js +1 -1
  94. package/lib/esm/decaf-model/decorators/DecafBody.js +1 -1
  95. package/lib/esm/decaf-model/decorators/DecafParams.js +1 -1
  96. package/lib/esm/decaf-model/decorators/controller-config.js +1 -1
  97. package/lib/esm/decaf-model/decorators/decorators.js +1 -1
  98. package/lib/esm/decaf-model/decorators/expose.js +1 -1
  99. package/lib/esm/decaf-model/decorators/index.js +1 -1
  100. package/lib/esm/decaf-model/decorators/types.js +1 -1
  101. package/lib/esm/decaf-model/decorators/utils.js +1 -1
  102. package/lib/esm/decaf-model/index.js +1 -1
  103. package/lib/esm/decaf-model/types.js +1 -1
  104. package/lib/esm/decaf-model/utils.js +1 -1
  105. package/lib/esm/decoration.js +1 -1
  106. package/lib/esm/decorators.js +1 -1
  107. package/lib/esm/events-module/DecafStreamModule.js +15 -4
  108. package/lib/esm/events-module/EventsController.js +31 -8
  109. package/lib/esm/events-module/EventsSubscriptionController.js +72 -0
  110. package/lib/esm/events-module/ObserverSubscriptionRegistry.js +43 -0
  111. package/lib/esm/events-module/constant.js +2 -1
  112. package/lib/esm/events-module/index.js +4 -1
  113. package/lib/esm/events-module/utils.js +1 -1
  114. package/lib/esm/factory/NestBootstraper.js +1 -1
  115. package/lib/esm/factory/errors/cors.js +1 -1
  116. package/lib/esm/factory/errors/index.js +1 -1
  117. package/lib/esm/factory/errors/throttling.js +1 -1
  118. package/lib/esm/factory/exceptions/DecafErrorFilter.js +1 -1
  119. package/lib/esm/factory/exceptions/decorators.js +1 -1
  120. package/lib/esm/factory/exceptions/index.js +1 -1
  121. package/lib/esm/factory/index.js +1 -1
  122. package/lib/esm/factory/openapi/DtoBuilder.js +1 -1
  123. package/lib/esm/factory/openapi/SwaggerBuilder.js +1 -1
  124. package/lib/esm/factory/openapi/SwaggerCustomUI.js +1 -1
  125. package/lib/esm/factory/openapi/constants.js +1 -1
  126. package/lib/esm/factory/openapi/index.js +1 -1
  127. package/lib/esm/index.js +4 -4
  128. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js +4 -32
  129. package/lib/esm/interceptors/index.js +1 -1
  130. package/lib/esm/module.js +2 -2
  131. package/lib/esm/overrides/Adapter.js +1 -1
  132. package/lib/esm/overrides/ModelBuilderExtensions.js +1 -1
  133. package/lib/esm/overrides/constants.js +1 -1
  134. package/lib/esm/overrides/decoration.js +1 -1
  135. package/lib/esm/overrides/helpers.js +1 -1
  136. package/lib/esm/overrides/index.js +1 -1
  137. package/lib/esm/overrides/logging.js +1 -1
  138. package/lib/esm/overrides/overrides.js +1 -1
  139. package/lib/esm/request/DecafAuthHandler.js +1 -1
  140. package/lib/esm/request/DecafHandlerExecutor.js +1 -1
  141. package/lib/esm/request/DecafRequestContext.js +1 -1
  142. package/lib/esm/request/DecafResponseInterceptor.js +1 -1
  143. package/lib/esm/request/contextualize.js +42 -0
  144. package/lib/esm/request/index.js +2 -1
  145. package/lib/esm/swagger-types.js +1 -1
  146. package/lib/esm/types.js +1 -1
  147. package/lib/esm/utils.js +1 -1
  148. package/lib/esm/webhooks/DecafWebhookModule.js +1 -1
  149. package/lib/esm/webhooks/controllers.js +1 -1
  150. package/lib/esm/webhooks/index.js +1 -1
  151. package/lib/esm/webhooks/types.js +1 -1
  152. package/lib/types/auth/AuthMiddleware.d.cts +9 -0
  153. package/lib/types/auth/AuthMiddleware.d.mts +9 -0
  154. package/lib/types/auth/DecafAuthHandler.d.cts +6 -4
  155. package/lib/types/auth/DecafAuthHandler.d.mts +6 -4
  156. package/lib/types/auth/DecafAuthModule.d.cts +3 -2
  157. package/lib/types/auth/DecafAuthModule.d.mts +3 -2
  158. package/lib/types/auth/constants.d.cts +2 -0
  159. package/lib/types/auth/constants.d.mts +2 -0
  160. package/lib/types/auth/decorators.d.cts +1 -0
  161. package/lib/types/auth/decorators.d.mts +1 -0
  162. package/lib/types/auth/index.d.cts +1 -0
  163. package/lib/types/auth/index.d.mts +1 -0
  164. package/lib/types/events-module/DecafStreamModule.d.cts +2 -1
  165. package/lib/types/events-module/DecafStreamModule.d.mts +2 -1
  166. package/lib/types/events-module/EventsController.d.cts +6 -2
  167. package/lib/types/events-module/EventsController.d.mts +6 -2
  168. package/lib/types/events-module/EventsSubscriptionController.d.cts +17 -0
  169. package/lib/types/events-module/EventsSubscriptionController.d.mts +17 -0
  170. package/lib/types/events-module/ObserverSubscriptionRegistry.d.cts +13 -0
  171. package/lib/types/events-module/ObserverSubscriptionRegistry.d.mts +13 -0
  172. package/lib/types/events-module/constant.d.cts +1 -0
  173. package/lib/types/events-module/constant.d.mts +1 -0
  174. package/lib/types/events-module/index.d.cts +3 -0
  175. package/lib/types/events-module/index.d.mts +3 -0
  176. package/lib/types/index.d.cts +3 -3
  177. package/lib/types/index.d.mts +3 -3
  178. package/lib/types/request/contextualize.d.cts +2 -0
  179. package/lib/types/request/contextualize.d.mts +2 -0
  180. package/lib/types/request/index.d.cts +1 -0
  181. package/lib/types/request/index.d.mts +1 -0
  182. package/lib/types/types.d.cts +7 -2
  183. package/lib/types/types.d.mts +7 -2
  184. package/package.json +1 -1
  185. package/dist/for-nest.cjs.map +0 -1
  186. package/dist/for-nest.js.map +0 -1
  187. package/lib/cjs/auth/AuthInterceptor.cjs.map +0 -1
  188. package/lib/cjs/auth/DecafAuthHandler.cjs.map +0 -1
  189. package/lib/cjs/auth/DecafAuthModule.cjs.map +0 -1
  190. package/lib/cjs/auth/constants.cjs.map +0 -1
  191. package/lib/cjs/auth/decorators.cjs.map +0 -1
  192. package/lib/cjs/auth/index.cjs.map +0 -1
  193. package/lib/cjs/bin/cli.cjs.map +0 -1
  194. package/lib/cjs/cli-module.cjs.map +0 -1
  195. package/lib/cjs/constants.cjs.map +0 -1
  196. package/lib/cjs/controllers.cjs.map +0 -1
  197. package/lib/cjs/core-module.cjs.map +0 -1
  198. package/lib/cjs/decaf-model/DecafModelModule.cjs.map +0 -1
  199. package/lib/cjs/decaf-model/FromModelController.cjs.map +0 -1
  200. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs.map +0 -1
  201. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs.map +0 -1
  202. package/lib/cjs/decaf-model/decorators/DecafBody.cjs.map +0 -1
  203. package/lib/cjs/decaf-model/decorators/DecafParams.cjs.map +0 -1
  204. package/lib/cjs/decaf-model/decorators/controller-config.cjs.map +0 -1
  205. package/lib/cjs/decaf-model/decorators/decorators.cjs.map +0 -1
  206. package/lib/cjs/decaf-model/decorators/expose.cjs.map +0 -1
  207. package/lib/cjs/decaf-model/decorators/index.cjs.map +0 -1
  208. package/lib/cjs/decaf-model/decorators/types.cjs.map +0 -1
  209. package/lib/cjs/decaf-model/decorators/utils.cjs.map +0 -1
  210. package/lib/cjs/decaf-model/index.cjs.map +0 -1
  211. package/lib/cjs/decaf-model/types.cjs.map +0 -1
  212. package/lib/cjs/decaf-model/utils.cjs.map +0 -1
  213. package/lib/cjs/decoration.cjs.map +0 -1
  214. package/lib/cjs/decorators.cjs.map +0 -1
  215. package/lib/cjs/events-module/DecafStreamModule.cjs.map +0 -1
  216. package/lib/cjs/events-module/EventsController.cjs.map +0 -1
  217. package/lib/cjs/events-module/constant.cjs.map +0 -1
  218. package/lib/cjs/events-module/index.cjs.map +0 -1
  219. package/lib/cjs/events-module/utils.cjs.map +0 -1
  220. package/lib/cjs/factory/NestBootstraper.cjs.map +0 -1
  221. package/lib/cjs/factory/errors/cors.cjs.map +0 -1
  222. package/lib/cjs/factory/errors/index.cjs.map +0 -1
  223. package/lib/cjs/factory/errors/throttling.cjs.map +0 -1
  224. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs.map +0 -1
  225. package/lib/cjs/factory/exceptions/decorators.cjs.map +0 -1
  226. package/lib/cjs/factory/exceptions/index.cjs.map +0 -1
  227. package/lib/cjs/factory/index.cjs.map +0 -1
  228. package/lib/cjs/factory/openapi/DtoBuilder.cjs.map +0 -1
  229. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs.map +0 -1
  230. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs.map +0 -1
  231. package/lib/cjs/factory/openapi/constants.cjs.map +0 -1
  232. package/lib/cjs/factory/openapi/index.cjs.map +0 -1
  233. package/lib/cjs/index.cjs.map +0 -1
  234. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs.map +0 -1
  235. package/lib/cjs/interceptors/index.cjs.map +0 -1
  236. package/lib/cjs/module.cjs.map +0 -1
  237. package/lib/cjs/overrides/Adapter.cjs.map +0 -1
  238. package/lib/cjs/overrides/ModelBuilderExtensions.cjs.map +0 -1
  239. package/lib/cjs/overrides/constants.cjs.map +0 -1
  240. package/lib/cjs/overrides/decoration.cjs.map +0 -1
  241. package/lib/cjs/overrides/helpers.cjs.map +0 -1
  242. package/lib/cjs/overrides/index.cjs.map +0 -1
  243. package/lib/cjs/overrides/logging.cjs.map +0 -1
  244. package/lib/cjs/overrides/overrides.cjs.map +0 -1
  245. package/lib/cjs/request/DecafAuthHandler.cjs.map +0 -1
  246. package/lib/cjs/request/DecafHandlerExecutor.cjs.map +0 -1
  247. package/lib/cjs/request/DecafRequestContext.cjs.map +0 -1
  248. package/lib/cjs/request/DecafResponseInterceptor.cjs.map +0 -1
  249. package/lib/cjs/request/index.cjs.map +0 -1
  250. package/lib/cjs/swagger-types.cjs.map +0 -1
  251. package/lib/cjs/types.cjs.map +0 -1
  252. package/lib/cjs/utils.cjs.map +0 -1
  253. package/lib/cjs/webhooks/DecafWebhookModule.cjs.map +0 -1
  254. package/lib/cjs/webhooks/controllers.cjs.map +0 -1
  255. package/lib/cjs/webhooks/index.cjs.map +0 -1
  256. package/lib/cjs/webhooks/types.cjs.map +0 -1
  257. package/lib/esm/auth/AuthInterceptor.js.map +0 -1
  258. package/lib/esm/auth/DecafAuthHandler.js.map +0 -1
  259. package/lib/esm/auth/DecafAuthModule.js.map +0 -1
  260. package/lib/esm/auth/constants.js.map +0 -1
  261. package/lib/esm/auth/decorators.js.map +0 -1
  262. package/lib/esm/auth/index.js.map +0 -1
  263. package/lib/esm/bin/cli.js.map +0 -1
  264. package/lib/esm/cli-module.js.map +0 -1
  265. package/lib/esm/constants.js.map +0 -1
  266. package/lib/esm/controllers.js.map +0 -1
  267. package/lib/esm/core-module.js.map +0 -1
  268. package/lib/esm/decaf-model/DecafModelModule.js.map +0 -1
  269. package/lib/esm/decaf-model/FromModelController.js.map +0 -1
  270. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +0 -1
  271. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +0 -1
  272. package/lib/esm/decaf-model/decorators/DecafBody.js.map +0 -1
  273. package/lib/esm/decaf-model/decorators/DecafParams.js.map +0 -1
  274. package/lib/esm/decaf-model/decorators/controller-config.js.map +0 -1
  275. package/lib/esm/decaf-model/decorators/decorators.js.map +0 -1
  276. package/lib/esm/decaf-model/decorators/expose.js.map +0 -1
  277. package/lib/esm/decaf-model/decorators/index.js.map +0 -1
  278. package/lib/esm/decaf-model/decorators/types.js.map +0 -1
  279. package/lib/esm/decaf-model/decorators/utils.js.map +0 -1
  280. package/lib/esm/decaf-model/index.js.map +0 -1
  281. package/lib/esm/decaf-model/types.js.map +0 -1
  282. package/lib/esm/decaf-model/utils.js.map +0 -1
  283. package/lib/esm/decoration.js.map +0 -1
  284. package/lib/esm/decorators.js.map +0 -1
  285. package/lib/esm/events-module/DecafStreamModule.js.map +0 -1
  286. package/lib/esm/events-module/EventsController.js.map +0 -1
  287. package/lib/esm/events-module/constant.js.map +0 -1
  288. package/lib/esm/events-module/index.js.map +0 -1
  289. package/lib/esm/events-module/utils.js.map +0 -1
  290. package/lib/esm/factory/NestBootstraper.js.map +0 -1
  291. package/lib/esm/factory/errors/cors.js.map +0 -1
  292. package/lib/esm/factory/errors/index.js.map +0 -1
  293. package/lib/esm/factory/errors/throttling.js.map +0 -1
  294. package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +0 -1
  295. package/lib/esm/factory/exceptions/decorators.js.map +0 -1
  296. package/lib/esm/factory/exceptions/index.js.map +0 -1
  297. package/lib/esm/factory/index.js.map +0 -1
  298. package/lib/esm/factory/openapi/DtoBuilder.js.map +0 -1
  299. package/lib/esm/factory/openapi/SwaggerBuilder.js.map +0 -1
  300. package/lib/esm/factory/openapi/SwaggerCustomUI.js.map +0 -1
  301. package/lib/esm/factory/openapi/constants.js.map +0 -1
  302. package/lib/esm/factory/openapi/index.js.map +0 -1
  303. package/lib/esm/index.js.map +0 -1
  304. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js.map +0 -1
  305. package/lib/esm/interceptors/index.js.map +0 -1
  306. package/lib/esm/module.js.map +0 -1
  307. package/lib/esm/overrides/Adapter.js.map +0 -1
  308. package/lib/esm/overrides/ModelBuilderExtensions.js.map +0 -1
  309. package/lib/esm/overrides/constants.js.map +0 -1
  310. package/lib/esm/overrides/decoration.js.map +0 -1
  311. package/lib/esm/overrides/helpers.js.map +0 -1
  312. package/lib/esm/overrides/index.js.map +0 -1
  313. package/lib/esm/overrides/logging.js.map +0 -1
  314. package/lib/esm/overrides/overrides.js.map +0 -1
  315. package/lib/esm/request/DecafAuthHandler.js.map +0 -1
  316. package/lib/esm/request/DecafHandlerExecutor.js.map +0 -1
  317. package/lib/esm/request/DecafRequestContext.js.map +0 -1
  318. package/lib/esm/request/DecafResponseInterceptor.js.map +0 -1
  319. package/lib/esm/request/index.js.map +0 -1
  320. package/lib/esm/swagger-types.js.map +0 -1
  321. package/lib/esm/types.js.map +0 -1
  322. package/lib/esm/utils.js.map +0 -1
  323. package/lib/esm/webhooks/DecafWebhookModule.js.map +0 -1
  324. package/lib/esm/webhooks/controllers.js.map +0 -1
  325. package/lib/esm/webhooks/index.js.map +0 -1
  326. package/lib/esm/webhooks/types.js.map +0 -1
package/README.md CHANGED
@@ -127,7 +127,9 @@ Applied at the **class level** to every auto-generated controller for that model
127
127
  |---|---|---|---|
128
128
  | `public` | `boolean` | `false` | When `true`, applies `@Public()` — the `AuthInterceptor` skips authorization entirely. |
129
129
  | `roles` | `string[]` | — | When provided, applies `@RequireRoles(...roles)` — the auth handler validates the user has all listed roles. |
130
+ | `namespaces` | `string[]` | — | When provided, applies `@RequireNamespaces(...namespaces)` — the auth handler validates the user has all listed namespace scopes. |
130
131
  | `skipModelRoles` | `boolean` | `false` | When `true`, sets `SKIP_MODEL_ROLES_KEY` metadata — the `AuthInterceptor` passes `undefined` as the model to `authHandler.authorize()`, so model-level `@roles()` checks are skipped. Route-level roles (if set) still apply. |
132
+ | `skipModelNamespaces` | `boolean` | `false` | When `true`, sets `SKIP_MODEL_NAMESPACES_KEY` metadata — the `AuthInterceptor` skips model-level `@namespace()` checks while still enforcing route-level namespaces. |
131
133
 
132
134
  If `auth` is omitted, `@Auth(Model)` is applied by default (requires authentication + model-level role checks).
133
135
 
@@ -226,6 +228,16 @@ Requires the user to have all listed roles. Applies `ApiSecurity("bearer")`, `Se
226
228
  update() {}
227
229
  ```
228
230
 
231
+ ### `@RequireNamespaces(...namespaces)`
232
+
233
+ Namespace-scope counterpart to `@RequireRoles(...)`. Requires the user to have all listed namespace scopes. Applies `ApiSecurity("bearer")`, `SetMetadata(REQUIRED_NAMESPACES_KEY, namespaces)`, and `UseInterceptors(AuthInterceptor)`.
234
+
235
+ ```ts
236
+ @RequireNamespaces("tenant:acme", "org:engineering")
237
+ @Get("tenant-data")
238
+ listTenantData() {}
239
+ ```
240
+
229
241
  ### `@SkipFabricIdentity()` *(application-specific)*
230
242
 
231
243
  Application-level decorator (e.g. in ew-backend) that sets metadata to skip Fabric identity re-enrollment for specific routes. Not part of `for-nest`.
@@ -242,7 +254,7 @@ Abstract base class from `@decaf-ts/for-http/server`. Concrete handlers extend i
242
254
  |---|---|---|
243
255
  | `extractFromAuth(ctx: EC): D \| Promise<D>` | Yes | Pulls auth data (user, roles, organization) from the platform execution context. MUST throw `AuthorizationError` when unauthenticated. |
244
256
  | `bindToContext(ctx: C, data: D)` | Yes* | Binds auth data to the request context. Default implementation calls `ctx.accumulate(data)`. Override to add adapter-specific keys (e.g. `UUID`, `organization`). |
245
- | `validate(data, routeRoles, model, ...args)` | No | Default validates route roles then model-level roles (from `@roles()`). Override for custom logic. |
257
+ | `validate(data, routeRoles, routeNamespaces, skipModelNamespaces, model, ...args)` | No | Default validates route roles, route namespaces, model-level roles, and model-level namespaces (from `@namespace()`). Override for custom logic. |
246
258
 
247
259
  \* The default `bindToContext` exists but every concrete handler typically overrides it.
248
260
 
@@ -264,12 +276,26 @@ class CustomAuthHandler extends AuthHandler {
264
276
  }
265
277
  ```
266
278
 
279
+ ## Namespace authorization
280
+
281
+ Use the `namespace(...)` decorator exported from `@decaf-ts/integrations/nest` on models to attach namespace scopes in the same way `@roles(...)` attaches model roles. The `AuthInterceptor` forwards those scopes to `AuthHandler.authorize(...)`, and the base auth handler checks them against the authenticated principal.
282
+
283
+ ```ts
284
+ import { namespace } from "@decaf-ts/integrations/nest";
285
+
286
+ @namespace(["tenant:acme", "org:engineering"])
287
+ class Product extends Model {}
288
+ ```
289
+
290
+ Route-level namespace guards can be layered with `@RequireNamespaces(...)` and skipped at the model level with `skipModelNamespaces: true` in `AuthConfig`.
291
+
267
292
  ### `AuthData` / `UserData`
268
293
 
269
294
  | Field | Type | Description |
270
295
  |---|---|---|
271
296
  | `user` | `string` | Authenticated user identifier. |
272
297
  | `roles` | `string[]` | Roles granted to the user. |
298
+ | `namespaces` | `string[]` | Namespace scopes granted to the user. |
273
299
  | `organization` | `string` | Organization / tenant / MSP. |
274
300
 
275
301
  ---
@@ -282,9 +308,9 @@ Request → AuthInterceptor → DecafRequestHandlerInterceptor → Controller
282
308
 
283
309
  1. **`AuthInterceptor`** (request-scoped):
284
310
  - Reads `IS_PUBLIC_KEY` — if `true`, skips auth.
285
- - Reads `AUTH_META_KEY` (model name) and `REQUIRED_ROLES_KEY` (route roles).
286
- - Reads `SKIP_MODEL_ROLES_KEY` if `true`, passes `undefined` as model (skips model-level role checks).
287
- - Calls `authHandler.authorize(ctx, effectiveModel, requiredRoles, requestContext)`.
311
+ - Reads `AUTH_META_KEY` (model name), `REQUIRED_ROLES_KEY` (route roles), and `REQUIRED_NAMESPACES_KEY` (route namespaces).
312
+ - Reads `SKIP_MODEL_ROLES_KEY` and `SKIP_MODEL_NAMESPACES_KEY` to selectively skip model-level role or namespace checks.
313
+ - Calls `authHandler.authorize(ctx, effectiveModel, requiredRoles, requiredNamespaces, skipModelNamespaces, requestContext)`.
288
314
  - Runs `applyTransformers()` — iterates `Adapter.flavoursToTransform()`, instantiates each `RequestToContextTransformer` if needed, calls `transformer.from(requestContext)`, and accumulates the result.
289
315
  - Enriches the logger with `user` / `organization` if present.
290
316