@elsikora/nestjs-crud-automator 1.21.1 → 1.22.0-dev.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 (600) hide show
  1. package/README.md +356 -49
  2. package/dist/cjs/class/api/authorization/bootstrap-validation.service.class.d.ts +13 -0
  3. package/dist/cjs/class/api/authorization/bootstrap-validation.service.class.js +155 -0
  4. package/dist/cjs/class/api/authorization/bootstrap-validation.service.class.js.map +1 -0
  5. package/dist/cjs/class/api/authorization/engine.class.js +33 -7
  6. package/dist/cjs/class/api/authorization/engine.class.js.map +1 -1
  7. package/dist/cjs/class/api/authorization/guard.class.d.ts +8 -7
  8. package/dist/cjs/class/api/authorization/guard.class.js +75 -39
  9. package/dist/cjs/class/api/authorization/guard.class.js.map +1 -1
  10. package/dist/cjs/class/api/authorization/hook-permission-resolver.class.d.ts +10 -0
  11. package/dist/cjs/class/api/authorization/hook-permission-resolver.class.js +64 -0
  12. package/dist/cjs/class/api/authorization/hook-permission-resolver.class.js.map +1 -0
  13. package/dist/cjs/class/api/authorization/iam/attachment-resolver.class.d.ts +11 -0
  14. package/dist/cjs/class/api/authorization/iam/attachment-resolver.class.js +77 -0
  15. package/dist/cjs/class/api/authorization/iam/attachment-resolver.class.js.map +1 -0
  16. package/dist/cjs/class/api/authorization/iam/document-resolver.class.d.ts +10 -0
  17. package/dist/cjs/class/api/authorization/iam/document-resolver.class.js +72 -0
  18. package/dist/cjs/class/api/authorization/iam/document-resolver.class.js.map +1 -0
  19. package/dist/cjs/class/api/authorization/iam/document-validator.class.d.ts +7 -0
  20. package/dist/cjs/class/api/authorization/iam/document-validator.class.js +95 -0
  21. package/dist/cjs/class/api/authorization/iam/document-validator.class.js.map +1 -0
  22. package/dist/cjs/class/api/authorization/iam/engine.class.d.ts +30 -0
  23. package/dist/cjs/class/api/authorization/iam/engine.class.js +331 -0
  24. package/dist/cjs/class/api/authorization/iam/engine.class.js.map +1 -0
  25. package/dist/cjs/class/api/authorization/iam/index.d.ts +5 -0
  26. package/dist/cjs/class/api/authorization/iam/query-planner.class.d.ts +20 -0
  27. package/dist/cjs/class/api/authorization/iam/query-planner.class.js +143 -0
  28. package/dist/cjs/class/api/authorization/iam/query-planner.class.js.map +1 -0
  29. package/dist/cjs/class/api/authorization/index.d.ts +5 -0
  30. package/dist/cjs/class/api/authorization/policy/base.class.d.ts +34 -7
  31. package/dist/cjs/class/api/authorization/policy/base.class.js +78 -41
  32. package/dist/cjs/class/api/authorization/policy/base.class.js.map +1 -1
  33. package/dist/cjs/class/api/authorization/policy/discovery-service.class.js +4 -4
  34. package/dist/cjs/class/api/authorization/policy/discovery-service.class.js.map +1 -1
  35. package/dist/cjs/class/api/authorization/policy/executor.class.d.ts +0 -1
  36. package/dist/cjs/class/api/authorization/policy/executor.class.js +5 -9
  37. package/dist/cjs/class/api/authorization/policy/executor.class.js.map +1 -1
  38. package/dist/cjs/class/api/authorization/policy/index.d.ts +1 -1
  39. package/dist/cjs/class/api/authorization/policy/registry.class.d.ts +3 -1
  40. package/dist/cjs/class/api/authorization/policy/registry.class.js +34 -21
  41. package/dist/cjs/class/api/authorization/policy/registry.class.js.map +1 -1
  42. package/dist/cjs/class/api/authorization/runtime.class.d.ts +37 -0
  43. package/dist/cjs/class/api/authorization/runtime.class.js +178 -0
  44. package/dist/cjs/class/api/authorization/runtime.class.js.map +1 -0
  45. package/dist/cjs/class/api/authorization/simulator.class.d.ts +18 -0
  46. package/dist/cjs/class/api/authorization/simulator.class.js +28 -0
  47. package/dist/cjs/class/api/authorization/simulator.class.js.map +1 -0
  48. package/dist/cjs/class/api/subscriber/registry.class.js +6 -13
  49. package/dist/cjs/class/api/subscriber/registry.class.js.map +1 -1
  50. package/dist/cjs/class/metadata-storage.class.js +4 -9
  51. package/dist/cjs/class/metadata-storage.class.js.map +1 -1
  52. package/dist/cjs/constant/class/authorization/audit-sink-token.constant.d.ts +1 -0
  53. package/dist/cjs/constant/class/authorization/audit-sink-token.constant.js +6 -0
  54. package/dist/cjs/constant/class/authorization/audit-sink-token.constant.js.map +1 -0
  55. package/dist/cjs/constant/class/authorization/hook-permission-sources-token.constant.d.ts +1 -0
  56. package/dist/cjs/constant/class/authorization/hook-permission-sources-token.constant.js +6 -0
  57. package/dist/cjs/constant/class/authorization/hook-permission-sources-token.constant.js.map +1 -0
  58. package/dist/cjs/constant/class/authorization/index.d.ts +5 -1
  59. package/dist/cjs/constant/class/authorization/module-options-token.constant.d.ts +1 -0
  60. package/dist/cjs/constant/class/authorization/module-options-token.constant.js +6 -0
  61. package/dist/cjs/constant/class/authorization/module-options-token.constant.js.map +1 -0
  62. package/dist/cjs/constant/class/authorization/policy/attachment-sources-token.constant.d.ts +1 -0
  63. package/dist/cjs/constant/class/authorization/policy/attachment-sources-token.constant.js +6 -0
  64. package/dist/cjs/constant/class/authorization/policy/attachment-sources-token.constant.js.map +1 -0
  65. package/dist/cjs/constant/class/authorization/{policy-decorator.constant.js → policy/decorator.constant.js} +1 -1
  66. package/dist/cjs/constant/class/authorization/policy/decorator.constant.js.map +1 -0
  67. package/dist/cjs/constant/class/authorization/policy/document-sources-token.constant.d.ts +1 -0
  68. package/dist/cjs/constant/class/authorization/policy/document-sources-token.constant.js +6 -0
  69. package/dist/cjs/constant/class/authorization/policy/document-sources-token.constant.js.map +1 -0
  70. package/dist/cjs/constant/class/authorization/policy/index.d.ts +3 -0
  71. package/dist/cjs/constant/class/authorization/principal-resolver-token.constant.d.ts +1 -0
  72. package/dist/cjs/constant/class/authorization/principal-resolver-token.constant.js +6 -0
  73. package/dist/cjs/constant/class/authorization/principal-resolver-token.constant.js.map +1 -0
  74. package/dist/cjs/constant/decorator/api/controller.constant.d.ts +1 -0
  75. package/dist/cjs/constant/decorator/api/controller.constant.js +2 -0
  76. package/dist/cjs/constant/decorator/api/controller.constant.js.map +1 -1
  77. package/dist/cjs/constant/decorator/api/index.d.ts +1 -0
  78. package/dist/cjs/constant/decorator/api/method.constant.d.ts +5 -0
  79. package/dist/cjs/constant/decorator/api/method.constant.js +13 -0
  80. package/dist/cjs/constant/decorator/api/method.constant.js.map +1 -0
  81. package/dist/cjs/decorator/api/authorization-policy.decorator.js +3 -3
  82. package/dist/cjs/decorator/api/authorization-policy.decorator.js.map +1 -1
  83. package/dist/cjs/decorator/api/function/create.decorator.js +1 -1
  84. package/dist/cjs/decorator/api/function/create.decorator.js.map +1 -1
  85. package/dist/cjs/decorator/api/function/delete.decorator.js +1 -1
  86. package/dist/cjs/decorator/api/function/delete.decorator.js.map +1 -1
  87. package/dist/cjs/decorator/api/function/get/decorator.js +1 -1
  88. package/dist/cjs/decorator/api/function/get/decorator.js.map +1 -1
  89. package/dist/cjs/decorator/api/function/get/list.decorator.js +1 -1
  90. package/dist/cjs/decorator/api/function/get/list.decorator.js.map +1 -1
  91. package/dist/cjs/decorator/api/function/get/many.decorator.js +2 -6
  92. package/dist/cjs/decorator/api/function/get/many.decorator.js.map +1 -1
  93. package/dist/cjs/decorator/api/function/update.decorator.js +1 -1
  94. package/dist/cjs/decorator/api/function/update.decorator.js.map +1 -1
  95. package/dist/cjs/decorator/api/method.decorator.js +10 -1
  96. package/dist/cjs/decorator/api/method.decorator.js.map +1 -1
  97. package/dist/cjs/decorator/api/property/boolean.decorator.js +4 -1
  98. package/dist/cjs/decorator/api/property/boolean.decorator.js.map +1 -1
  99. package/dist/cjs/decorator/api/property/date.decorator.js +4 -1
  100. package/dist/cjs/decorator/api/property/date.decorator.js.map +1 -1
  101. package/dist/cjs/decorator/api/property/enum.decorator.js +4 -1
  102. package/dist/cjs/decorator/api/property/enum.decorator.js.map +1 -1
  103. package/dist/cjs/decorator/api/property/number.decorator.js +6 -3
  104. package/dist/cjs/decorator/api/property/number.decorator.js.map +1 -1
  105. package/dist/cjs/decorator/api/property/object.decorator.js +12 -2
  106. package/dist/cjs/decorator/api/property/object.decorator.js.map +1 -1
  107. package/dist/cjs/decorator/api/property/string.decorator.js +5 -2
  108. package/dist/cjs/decorator/api/property/string.decorator.js.map +1 -1
  109. package/dist/cjs/decorator/api/property/uuid.decorator.js +4 -1
  110. package/dist/cjs/decorator/api/property/uuid.decorator.js.map +1 -1
  111. package/dist/cjs/enum/class/authorization/decision-type.enum.d.ts +5 -0
  112. package/dist/cjs/enum/class/authorization/decision-type.enum.js +9 -0
  113. package/dist/cjs/enum/class/authorization/decision-type.enum.js.map +1 -0
  114. package/dist/cjs/enum/class/authorization/effect.enum.d.ts +3 -3
  115. package/dist/cjs/enum/class/authorization/effect.enum.js +5 -5
  116. package/dist/cjs/enum/class/authorization/effect.enum.js.map +1 -1
  117. package/dist/cjs/enum/class/authorization/index.d.ts +6 -2
  118. package/dist/cjs/enum/class/authorization/mode.enum.d.ts +4 -0
  119. package/dist/cjs/enum/class/authorization/mode.enum.js +8 -0
  120. package/dist/cjs/enum/class/authorization/mode.enum.js.map +1 -0
  121. package/dist/cjs/enum/class/authorization/permission-match.enum.d.ts +4 -0
  122. package/dist/cjs/enum/class/authorization/permission-match.enum.js +8 -0
  123. package/dist/cjs/enum/class/authorization/permission-match.enum.js.map +1 -0
  124. package/dist/cjs/enum/class/authorization/policy/attachment-type.enum.d.ts +4 -0
  125. package/dist/cjs/enum/class/authorization/policy/attachment-type.enum.js +8 -0
  126. package/dist/cjs/enum/class/authorization/policy/attachment-type.enum.js.map +1 -0
  127. package/dist/cjs/enum/class/authorization/policy/index.d.ts +4 -0
  128. package/dist/cjs/enum/class/authorization/policy/on-type.enum.d.ts +3 -0
  129. package/dist/cjs/enum/class/authorization/policy/on-type.enum.js +7 -0
  130. package/dist/cjs/enum/class/authorization/policy/on-type.enum.js.map +1 -0
  131. package/dist/cjs/enum/class/authorization/policy/source-type.enum.d.ts +4 -0
  132. package/dist/cjs/enum/class/authorization/policy/source-type.enum.js +8 -0
  133. package/dist/cjs/enum/class/authorization/policy/source-type.enum.js.map +1 -0
  134. package/dist/cjs/enum/class/authorization/policy/status.enum.d.ts +6 -0
  135. package/dist/cjs/enum/class/authorization/policy/status.enum.js +10 -0
  136. package/dist/cjs/enum/class/authorization/policy/status.enum.js.map +1 -0
  137. package/dist/cjs/enum/class/authorization/principal-type.enum.d.ts +7 -0
  138. package/dist/cjs/enum/class/authorization/principal-type.enum.js +11 -0
  139. package/dist/cjs/enum/class/authorization/principal-type.enum.js.map +1 -0
  140. package/dist/cjs/factory/api-controller.factory.js +19 -24
  141. package/dist/cjs/factory/api-controller.factory.js.map +1 -1
  142. package/dist/cjs/index.js +112 -11
  143. package/dist/cjs/index.js.map +1 -1
  144. package/dist/cjs/interface/api/authentication-request.interface.d.ts +1 -1
  145. package/dist/cjs/interface/class/api/authorization/audit-sink.interface.d.ts +5 -0
  146. package/dist/cjs/interface/class/api/authorization/decision/index.d.ts +4 -0
  147. package/dist/cjs/interface/class/api/authorization/decision/interface.d.ts +22 -0
  148. package/dist/cjs/interface/class/api/authorization/decision/rule-trace.interface.d.ts +8 -0
  149. package/dist/cjs/interface/class/api/authorization/decision/statement-trace.interface.d.ts +8 -0
  150. package/dist/cjs/interface/class/api/authorization/decision/trace.interface.d.ts +15 -0
  151. package/dist/cjs/interface/class/api/authorization/engine.interface.d.ts +1 -1
  152. package/dist/cjs/interface/class/api/authorization/evaluate-options.interface.d.ts +6 -2
  153. package/dist/cjs/interface/class/api/authorization/hook-permission-source.interface.d.ts +4 -0
  154. package/dist/cjs/interface/class/api/authorization/iam-module-options.interface.d.ts +6 -0
  155. package/dist/cjs/interface/class/api/authorization/index.d.ts +8 -2
  156. package/dist/cjs/interface/class/api/authorization/module-options/async.interface.d.ts +9 -0
  157. package/dist/cjs/interface/class/api/authorization/module-options/factory.interface.d.ts +4 -0
  158. package/dist/cjs/interface/class/api/authorization/module-options/index.d.ts +3 -0
  159. package/dist/cjs/interface/class/api/authorization/module-options/interface.d.ts +8 -0
  160. package/dist/cjs/interface/class/api/authorization/policy/attachment/index.d.ts +3 -0
  161. package/dist/cjs/interface/class/api/authorization/policy/attachment/interface.d.ts +7 -0
  162. package/dist/cjs/interface/class/api/authorization/policy/attachment/resolved.interface.d.ts +5 -0
  163. package/dist/cjs/interface/class/api/authorization/policy/attachment/source.interface.d.ts +5 -0
  164. package/dist/cjs/interface/class/api/authorization/policy/build-options.interface.d.ts +10 -3
  165. package/dist/cjs/interface/class/api/authorization/policy/cache-options.interface.d.ts +1 -1
  166. package/dist/cjs/interface/class/api/authorization/policy/document/index.d.ts +4 -0
  167. package/dist/cjs/interface/class/api/authorization/policy/document/interface.d.ts +5 -0
  168. package/dist/cjs/interface/class/api/authorization/policy/document/record.interface.d.ts +9 -0
  169. package/dist/cjs/interface/class/api/authorization/policy/document/source.interface.d.ts +4 -0
  170. package/dist/cjs/interface/class/api/authorization/policy/document/statement.interface.d.ts +8 -0
  171. package/dist/cjs/interface/class/api/authorization/policy/index.d.ts +2 -0
  172. package/dist/cjs/interface/class/api/authorization/policy/registry.interface.d.ts +2 -1
  173. package/dist/cjs/interface/class/api/authorization/policy/subscriber/context/data.interface.d.ts +6 -4
  174. package/dist/cjs/interface/class/api/authorization/policy/subscriber/context/interface.d.ts +5 -3
  175. package/dist/cjs/interface/class/api/authorization/policy/subscriber/index.d.ts +1 -0
  176. package/dist/cjs/interface/class/api/authorization/policy/subscriber/interface.d.ts +1 -1
  177. package/dist/cjs/interface/class/api/authorization/policy/subscriber/permission-rule-options.interface.d.ts +6 -0
  178. package/dist/cjs/interface/class/api/authorization/policy/subscriber/rule.interface.d.ts +2 -2
  179. package/dist/cjs/interface/class/api/authorization/principal/index.d.ts +2 -0
  180. package/dist/cjs/interface/class/api/authorization/principal/interface.d.ts +9 -0
  181. package/dist/cjs/interface/class/api/authorization/principal/resolver.interface.d.ts +5 -0
  182. package/dist/cjs/interface/class/api/authorization/request-metadata.interface.d.ts +10 -0
  183. package/dist/cjs/interface/class/api/authorization/resource/definition.interface.d.ts +9 -0
  184. package/dist/cjs/interface/class/api/authorization/resource/field-definition.interface.d.ts +5 -0
  185. package/dist/cjs/interface/class/api/authorization/resource/index.d.ts +2 -0
  186. package/dist/cjs/interface/class/api/authorization/rule/context.interface.d.ts +3 -2
  187. package/dist/cjs/interface/class/api/authorization/rule/interface.d.ts +2 -2
  188. package/dist/cjs/interface/decorator/api/controller/index.d.ts +1 -1
  189. package/dist/cjs/interface/decorator/api/controller/properties/authorization.interface.d.ts +8 -0
  190. package/dist/cjs/interface/decorator/api/controller/properties/index.d.ts +1 -0
  191. package/dist/cjs/interface/decorator/api/controller/properties/route/base/authorization.interface.d.ts +4 -0
  192. package/dist/cjs/interface/decorator/api/controller/properties/route/base/index.d.ts +1 -0
  193. package/dist/cjs/interface/decorator/api/controller/properties/route/base/interface.d.ts +2 -0
  194. package/dist/cjs/interface/decorator/api/controller/properties.interface.d.ts +3 -1
  195. package/dist/cjs/interface/decorator/api/method/authorization.interface.d.ts +3 -0
  196. package/dist/cjs/interface/decorator/api/method/index.d.ts +1 -0
  197. package/dist/cjs/interface/decorator/api/method/properties.interface.d.ts +4 -1
  198. package/dist/cjs/module/api/authorization.module.d.ts +7 -0
  199. package/dist/cjs/module/api/authorization.module.js +158 -4
  200. package/dist/cjs/module/api/authorization.module.js.map +1 -1
  201. package/dist/cjs/type/class/api/authorization/guard-request.type.d.ts +6 -2
  202. package/dist/cjs/type/class/api/authorization/policy/before/create-result.type.d.ts +1 -1
  203. package/dist/cjs/type/class/api/authorization/policy/before/delete-result.type.d.ts +1 -1
  204. package/dist/cjs/type/class/api/authorization/policy/before/get/list-result.type.d.ts +1 -1
  205. package/dist/cjs/type/class/api/authorization/policy/before/get/result.type.d.ts +1 -1
  206. package/dist/cjs/type/class/api/authorization/policy/before/partial-update-result.type.d.ts +1 -1
  207. package/dist/cjs/type/class/api/authorization/policy/before/update-result.type.d.ts +1 -1
  208. package/dist/cjs/type/class/api/authorization/policy/context/before/create-context.type.d.ts +8 -0
  209. package/dist/cjs/type/class/api/authorization/policy/context/before/get/context.type.d.ts +7 -0
  210. package/dist/cjs/type/class/api/authorization/policy/context/before/get/index.d.ts +2 -0
  211. package/dist/cjs/type/class/api/authorization/policy/context/before/get/list-context.type.d.ts +8 -0
  212. package/dist/cjs/type/class/api/authorization/policy/context/before/index.d.ts +4 -0
  213. package/dist/cjs/type/class/api/authorization/policy/context/before/partial-update-context.type.d.ts +9 -0
  214. package/dist/cjs/type/class/api/authorization/policy/context/before/update-context.type.d.ts +9 -0
  215. package/dist/cjs/type/class/api/authorization/policy/context/index.d.ts +2 -0
  216. package/dist/cjs/type/class/api/authorization/policy/context/with-request-metadata.type.d.ts +7 -0
  217. package/dist/cjs/type/class/api/authorization/policy/custom-action-result.type.d.ts +1 -1
  218. package/dist/cjs/type/class/api/authorization/policy/hook/type.d.ts +1 -1
  219. package/dist/cjs/type/class/api/authorization/policy/index.d.ts +2 -1
  220. package/dist/cjs/type/class/api/authorization/policy/subscriber/index.d.ts +3 -0
  221. package/dist/cjs/type/class/api/authorization/policy/subscriber/permission-rule-options/without-transform.type.d.ts +5 -0
  222. package/dist/cjs/type/class/api/authorization/policy/subscriber/rule/index.d.ts +1 -0
  223. package/dist/cjs/type/class/api/authorization/policy/subscriber/rule/without/effect-without-transform.type.d.ts +5 -0
  224. package/dist/cjs/type/class/api/authorization/policy/subscriber/rule/without/index.d.ts +2 -0
  225. package/dist/cjs/type/class/api/authorization/policy/subscriber/rule/without/transform.type.d.ts +5 -0
  226. package/dist/cjs/type/class/api/authorization/policy/{policy-subscriber-rule-result.type.d.ts → subscriber/rule-result.type.d.ts} +2 -2
  227. package/dist/cjs/utility/api/controller/apply/decorators.utility.d.ts +2 -1
  228. package/dist/cjs/utility/api/controller/apply/decorators.utility.js +11 -7
  229. package/dist/cjs/utility/api/controller/apply/decorators.utility.js.map +1 -1
  230. package/dist/cjs/utility/api/controller/apply/metadata.utility.d.ts +2 -1
  231. package/dist/cjs/utility/api/controller/apply/metadata.utility.js +4 -23
  232. package/dist/cjs/utility/api/controller/apply/metadata.utility.js.map +1 -1
  233. package/dist/cjs/utility/api/controller/get/dto.utility.d.ts +19 -0
  234. package/dist/cjs/utility/api/controller/get/dto.utility.js +56 -0
  235. package/dist/cjs/utility/api/controller/get/dto.utility.js.map +1 -0
  236. package/dist/cjs/utility/api/controller/get/index.d.ts +1 -0
  237. package/dist/cjs/utility/api/controller/handle-request-relations.utility.d.ts +2 -1
  238. package/dist/cjs/utility/api/controller/handle-request-relations.utility.js.map +1 -1
  239. package/dist/cjs/utility/api/controller/transform-data.utility.d.ts +2 -1
  240. package/dist/cjs/utility/api/controller/transform-data.utility.js.map +1 -1
  241. package/dist/cjs/utility/api/controller/validate-request.utility.d.ts +2 -1
  242. package/dist/cjs/utility/api/controller/validate-request.utility.js.map +1 -1
  243. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.d.ts +2 -1
  244. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.js +5 -24
  245. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.js.map +1 -1
  246. package/dist/cjs/utility/api/controller/write/method.utility.d.ts +2 -1
  247. package/dist/cjs/utility/api/controller/write/method.utility.js.map +1 -1
  248. package/dist/cjs/utility/api/filter-order-by-from-entity.utility.js +2 -1
  249. package/dist/cjs/utility/api/filter-order-by-from-entity.utility.js.map +1 -1
  250. package/dist/cjs/utility/apply-auto-dto-response-exposure.utility.d.ts +11 -0
  251. package/dist/cjs/utility/apply-auto-dto-response-exposure.utility.js +56 -0
  252. package/dist/cjs/utility/apply-auto-dto-response-exposure.utility.js.map +1 -0
  253. package/dist/cjs/utility/authorization/decision/apply-result.utility.d.ts +1 -1
  254. package/dist/cjs/utility/authorization/decision/apply-result.utility.js +2 -1
  255. package/dist/cjs/utility/authorization/decision/apply-result.utility.js.map +1 -1
  256. package/dist/cjs/utility/authorization/decision/attach-resource.utility.d.ts +1 -1
  257. package/dist/cjs/utility/authorization/decision/resolve-from-request.utility.d.ts +1 -1
  258. package/dist/cjs/utility/authorization/index.d.ts +2 -1
  259. package/dist/cjs/utility/authorization/permission/index.d.ts +2 -0
  260. package/dist/cjs/utility/authorization/permission/matches.utility.d.ts +9 -0
  261. package/dist/cjs/utility/authorization/permission/matches.utility.js +33 -0
  262. package/dist/cjs/utility/authorization/permission/matches.utility.js.map +1 -0
  263. package/dist/cjs/utility/authorization/permission/set-matches.utility.d.ts +13 -0
  264. package/dist/cjs/utility/authorization/permission/set-matches.utility.js +36 -0
  265. package/dist/cjs/utility/authorization/permission/set-matches.utility.js.map +1 -0
  266. package/dist/cjs/utility/authorization/resolve-default-principal.utility.d.ts +7 -0
  267. package/dist/cjs/utility/authorization/resolve-default-principal.utility.js +75 -0
  268. package/dist/cjs/utility/authorization/resolve-default-principal.utility.js.map +1 -0
  269. package/dist/cjs/utility/authorization/scope-merge-where.utility.js +249 -4
  270. package/dist/cjs/utility/authorization/scope-merge-where.utility.js.map +1 -1
  271. package/dist/cjs/utility/auto-dto-context-queue.utility.d.ts +7 -0
  272. package/dist/cjs/utility/auto-dto-context-queue.utility.js +40 -5
  273. package/dist/cjs/utility/auto-dto-context-queue.utility.js.map +1 -1
  274. package/dist/cjs/utility/dto/get/decorator-config.utility.js +2 -1
  275. package/dist/cjs/utility/dto/get/decorator-config.utility.js.map +1 -1
  276. package/dist/cjs/utility/register-auto-dto-child.utility.js +3 -0
  277. package/dist/cjs/utility/register-auto-dto-child.utility.js.map +1 -1
  278. package/dist/cjs/validator/must-match-one-of-schemas.validator.js +4 -3
  279. package/dist/cjs/validator/must-match-one-of-schemas.validator.js.map +1 -1
  280. package/dist/esm/class/api/authorization/bootstrap-validation.service.class.d.ts +13 -0
  281. package/dist/esm/class/api/authorization/bootstrap-validation.service.class.js +155 -0
  282. package/dist/esm/class/api/authorization/bootstrap-validation.service.class.js.map +1 -0
  283. package/dist/esm/class/api/authorization/engine.class.js +34 -8
  284. package/dist/esm/class/api/authorization/engine.class.js.map +1 -1
  285. package/dist/esm/class/api/authorization/guard.class.d.ts +8 -7
  286. package/dist/esm/class/api/authorization/guard.class.js +78 -42
  287. package/dist/esm/class/api/authorization/guard.class.js.map +1 -1
  288. package/dist/esm/class/api/authorization/hook-permission-resolver.class.d.ts +10 -0
  289. package/dist/esm/class/api/authorization/hook-permission-resolver.class.js +64 -0
  290. package/dist/esm/class/api/authorization/hook-permission-resolver.class.js.map +1 -0
  291. package/dist/esm/class/api/authorization/iam/attachment-resolver.class.d.ts +11 -0
  292. package/dist/esm/class/api/authorization/iam/attachment-resolver.class.js +77 -0
  293. package/dist/esm/class/api/authorization/iam/attachment-resolver.class.js.map +1 -0
  294. package/dist/esm/class/api/authorization/iam/document-resolver.class.d.ts +10 -0
  295. package/dist/esm/class/api/authorization/iam/document-resolver.class.js +72 -0
  296. package/dist/esm/class/api/authorization/iam/document-resolver.class.js.map +1 -0
  297. package/dist/esm/class/api/authorization/iam/document-validator.class.d.ts +7 -0
  298. package/dist/esm/class/api/authorization/iam/document-validator.class.js +95 -0
  299. package/dist/esm/class/api/authorization/iam/document-validator.class.js.map +1 -0
  300. package/dist/esm/class/api/authorization/iam/engine.class.d.ts +30 -0
  301. package/dist/esm/class/api/authorization/iam/engine.class.js +331 -0
  302. package/dist/esm/class/api/authorization/iam/engine.class.js.map +1 -0
  303. package/dist/esm/class/api/authorization/iam/index.d.ts +5 -0
  304. package/dist/esm/class/api/authorization/iam/query-planner.class.d.ts +20 -0
  305. package/dist/esm/class/api/authorization/iam/query-planner.class.js +143 -0
  306. package/dist/esm/class/api/authorization/iam/query-planner.class.js.map +1 -0
  307. package/dist/esm/class/api/authorization/index.d.ts +5 -0
  308. package/dist/esm/class/api/authorization/policy/base.class.d.ts +34 -7
  309. package/dist/esm/class/api/authorization/policy/base.class.js +79 -42
  310. package/dist/esm/class/api/authorization/policy/base.class.js.map +1 -1
  311. package/dist/esm/class/api/authorization/policy/discovery-service.class.js +1 -1
  312. package/dist/esm/class/api/authorization/policy/executor.class.d.ts +0 -1
  313. package/dist/esm/class/api/authorization/policy/executor.class.js +5 -9
  314. package/dist/esm/class/api/authorization/policy/executor.class.js.map +1 -1
  315. package/dist/esm/class/api/authorization/policy/index.d.ts +1 -1
  316. package/dist/esm/class/api/authorization/policy/registry.class.d.ts +3 -1
  317. package/dist/esm/class/api/authorization/policy/registry.class.js +33 -20
  318. package/dist/esm/class/api/authorization/policy/registry.class.js.map +1 -1
  319. package/dist/esm/class/api/authorization/runtime.class.d.ts +37 -0
  320. package/dist/esm/class/api/authorization/runtime.class.js +178 -0
  321. package/dist/esm/class/api/authorization/runtime.class.js.map +1 -0
  322. package/dist/esm/class/api/authorization/simulator.class.d.ts +18 -0
  323. package/dist/esm/class/api/authorization/simulator.class.js +28 -0
  324. package/dist/esm/class/api/authorization/simulator.class.js.map +1 -0
  325. package/dist/esm/class/api/subscriber/registry.class.js +6 -13
  326. package/dist/esm/class/api/subscriber/registry.class.js.map +1 -1
  327. package/dist/esm/class/metadata-storage.class.js +4 -9
  328. package/dist/esm/class/metadata-storage.class.js.map +1 -1
  329. package/dist/esm/constant/class/authorization/audit-sink-token.constant.d.ts +1 -0
  330. package/dist/esm/constant/class/authorization/audit-sink-token.constant.js +4 -0
  331. package/dist/esm/constant/class/authorization/audit-sink-token.constant.js.map +1 -0
  332. package/dist/esm/constant/class/authorization/hook-permission-sources-token.constant.d.ts +1 -0
  333. package/dist/esm/constant/class/authorization/hook-permission-sources-token.constant.js +4 -0
  334. package/dist/esm/constant/class/authorization/hook-permission-sources-token.constant.js.map +1 -0
  335. package/dist/esm/constant/class/authorization/index.d.ts +5 -1
  336. package/dist/esm/constant/class/authorization/module-options-token.constant.d.ts +1 -0
  337. package/dist/esm/constant/class/authorization/module-options-token.constant.js +4 -0
  338. package/dist/esm/constant/class/authorization/module-options-token.constant.js.map +1 -0
  339. package/dist/esm/constant/class/authorization/policy/attachment-sources-token.constant.d.ts +1 -0
  340. package/dist/esm/constant/class/authorization/policy/attachment-sources-token.constant.js +4 -0
  341. package/dist/esm/constant/class/authorization/policy/attachment-sources-token.constant.js.map +1 -0
  342. package/dist/esm/constant/class/authorization/{policy-decorator.constant.js → policy/decorator.constant.js} +1 -1
  343. package/dist/esm/constant/class/authorization/policy/decorator.constant.js.map +1 -0
  344. package/dist/esm/constant/class/authorization/policy/document-sources-token.constant.d.ts +1 -0
  345. package/dist/esm/constant/class/authorization/policy/document-sources-token.constant.js +4 -0
  346. package/dist/esm/constant/class/authorization/policy/document-sources-token.constant.js.map +1 -0
  347. package/dist/esm/constant/class/authorization/policy/index.d.ts +3 -0
  348. package/dist/esm/constant/class/authorization/principal-resolver-token.constant.d.ts +1 -0
  349. package/dist/esm/constant/class/authorization/principal-resolver-token.constant.js +4 -0
  350. package/dist/esm/constant/class/authorization/principal-resolver-token.constant.js.map +1 -0
  351. package/dist/esm/constant/decorator/api/controller.constant.d.ts +1 -0
  352. package/dist/esm/constant/decorator/api/controller.constant.js +2 -0
  353. package/dist/esm/constant/decorator/api/controller.constant.js.map +1 -1
  354. package/dist/esm/constant/decorator/api/index.d.ts +1 -0
  355. package/dist/esm/constant/decorator/api/method.constant.d.ts +5 -0
  356. package/dist/esm/constant/decorator/api/method.constant.js +11 -0
  357. package/dist/esm/constant/decorator/api/method.constant.js.map +1 -0
  358. package/dist/esm/decorator/api/authorization-policy.decorator.js +1 -1
  359. package/dist/esm/decorator/api/function/create.decorator.js +1 -1
  360. package/dist/esm/decorator/api/function/create.decorator.js.map +1 -1
  361. package/dist/esm/decorator/api/function/delete.decorator.js +1 -1
  362. package/dist/esm/decorator/api/function/delete.decorator.js.map +1 -1
  363. package/dist/esm/decorator/api/function/get/decorator.js +1 -1
  364. package/dist/esm/decorator/api/function/get/decorator.js.map +1 -1
  365. package/dist/esm/decorator/api/function/get/list.decorator.js +1 -1
  366. package/dist/esm/decorator/api/function/get/list.decorator.js.map +1 -1
  367. package/dist/esm/decorator/api/function/get/many.decorator.js +2 -6
  368. package/dist/esm/decorator/api/function/get/many.decorator.js.map +1 -1
  369. package/dist/esm/decorator/api/function/update.decorator.js +1 -1
  370. package/dist/esm/decorator/api/function/update.decorator.js.map +1 -1
  371. package/dist/esm/decorator/api/method.decorator.js +11 -2
  372. package/dist/esm/decorator/api/method.decorator.js.map +1 -1
  373. package/dist/esm/decorator/api/property/boolean.decorator.js +4 -1
  374. package/dist/esm/decorator/api/property/boolean.decorator.js.map +1 -1
  375. package/dist/esm/decorator/api/property/date.decorator.js +4 -1
  376. package/dist/esm/decorator/api/property/date.decorator.js.map +1 -1
  377. package/dist/esm/decorator/api/property/enum.decorator.js +4 -1
  378. package/dist/esm/decorator/api/property/enum.decorator.js.map +1 -1
  379. package/dist/esm/decorator/api/property/number.decorator.js +6 -3
  380. package/dist/esm/decorator/api/property/number.decorator.js.map +1 -1
  381. package/dist/esm/decorator/api/property/object.decorator.js +13 -3
  382. package/dist/esm/decorator/api/property/object.decorator.js.map +1 -1
  383. package/dist/esm/decorator/api/property/string.decorator.js +5 -2
  384. package/dist/esm/decorator/api/property/string.decorator.js.map +1 -1
  385. package/dist/esm/decorator/api/property/uuid.decorator.js +4 -1
  386. package/dist/esm/decorator/api/property/uuid.decorator.js.map +1 -1
  387. package/dist/esm/enum/class/authorization/decision-type.enum.d.ts +5 -0
  388. package/dist/esm/enum/class/authorization/decision-type.enum.js +9 -0
  389. package/dist/esm/enum/class/authorization/decision-type.enum.js.map +1 -0
  390. package/dist/esm/enum/class/authorization/effect.enum.d.ts +3 -3
  391. package/dist/esm/enum/class/authorization/effect.enum.js +6 -6
  392. package/dist/esm/enum/class/authorization/effect.enum.js.map +1 -1
  393. package/dist/esm/enum/class/authorization/index.d.ts +6 -2
  394. package/dist/esm/enum/class/authorization/mode.enum.d.ts +4 -0
  395. package/dist/esm/enum/class/authorization/mode.enum.js +8 -0
  396. package/dist/esm/enum/class/authorization/mode.enum.js.map +1 -0
  397. package/dist/esm/enum/class/authorization/permission-match.enum.d.ts +4 -0
  398. package/dist/esm/enum/class/authorization/permission-match.enum.js +8 -0
  399. package/dist/esm/enum/class/authorization/permission-match.enum.js.map +1 -0
  400. package/dist/esm/enum/class/authorization/policy/attachment-type.enum.d.ts +4 -0
  401. package/dist/esm/enum/class/authorization/policy/attachment-type.enum.js +8 -0
  402. package/dist/esm/enum/class/authorization/policy/attachment-type.enum.js.map +1 -0
  403. package/dist/esm/enum/class/authorization/policy/index.d.ts +4 -0
  404. package/dist/esm/enum/class/authorization/policy/on-type.enum.d.ts +3 -0
  405. package/dist/esm/enum/class/authorization/policy/on-type.enum.js +7 -0
  406. package/dist/esm/enum/class/authorization/policy/on-type.enum.js.map +1 -0
  407. package/dist/esm/enum/class/authorization/policy/source-type.enum.d.ts +4 -0
  408. package/dist/esm/enum/class/authorization/policy/source-type.enum.js +8 -0
  409. package/dist/esm/enum/class/authorization/policy/source-type.enum.js.map +1 -0
  410. package/dist/esm/enum/class/authorization/policy/status.enum.d.ts +6 -0
  411. package/dist/esm/enum/class/authorization/policy/status.enum.js +10 -0
  412. package/dist/esm/enum/class/authorization/policy/status.enum.js.map +1 -0
  413. package/dist/esm/enum/class/authorization/principal-type.enum.d.ts +7 -0
  414. package/dist/esm/enum/class/authorization/principal-type.enum.js +11 -0
  415. package/dist/esm/enum/class/authorization/principal-type.enum.js.map +1 -0
  416. package/dist/esm/factory/api-controller.factory.js +19 -24
  417. package/dist/esm/factory/api-controller.factory.js.map +1 -1
  418. package/dist/esm/index.js +31 -5
  419. package/dist/esm/index.js.map +1 -1
  420. package/dist/esm/interface/api/authentication-request.interface.d.ts +1 -1
  421. package/dist/esm/interface/class/api/authorization/audit-sink.interface.d.ts +5 -0
  422. package/dist/esm/interface/class/api/authorization/decision/index.d.ts +4 -0
  423. package/dist/esm/interface/class/api/authorization/decision/interface.d.ts +22 -0
  424. package/dist/esm/interface/class/api/authorization/decision/rule-trace.interface.d.ts +8 -0
  425. package/dist/esm/interface/class/api/authorization/decision/statement-trace.interface.d.ts +8 -0
  426. package/dist/esm/interface/class/api/authorization/decision/trace.interface.d.ts +15 -0
  427. package/dist/esm/interface/class/api/authorization/engine.interface.d.ts +1 -1
  428. package/dist/esm/interface/class/api/authorization/evaluate-options.interface.d.ts +6 -2
  429. package/dist/esm/interface/class/api/authorization/hook-permission-source.interface.d.ts +4 -0
  430. package/dist/esm/interface/class/api/authorization/iam-module-options.interface.d.ts +6 -0
  431. package/dist/esm/interface/class/api/authorization/index.d.ts +8 -2
  432. package/dist/esm/interface/class/api/authorization/module-options/async.interface.d.ts +9 -0
  433. package/dist/esm/interface/class/api/authorization/module-options/factory.interface.d.ts +4 -0
  434. package/dist/esm/interface/class/api/authorization/module-options/index.d.ts +3 -0
  435. package/dist/esm/interface/class/api/authorization/module-options/interface.d.ts +8 -0
  436. package/dist/esm/interface/class/api/authorization/policy/attachment/index.d.ts +3 -0
  437. package/dist/esm/interface/class/api/authorization/policy/attachment/interface.d.ts +7 -0
  438. package/dist/esm/interface/class/api/authorization/policy/attachment/resolved.interface.d.ts +5 -0
  439. package/dist/esm/interface/class/api/authorization/policy/attachment/source.interface.d.ts +5 -0
  440. package/dist/esm/interface/class/api/authorization/policy/build-options.interface.d.ts +10 -3
  441. package/dist/esm/interface/class/api/authorization/policy/cache-options.interface.d.ts +1 -1
  442. package/dist/esm/interface/class/api/authorization/policy/document/index.d.ts +4 -0
  443. package/dist/esm/interface/class/api/authorization/policy/document/interface.d.ts +5 -0
  444. package/dist/esm/interface/class/api/authorization/policy/document/record.interface.d.ts +9 -0
  445. package/dist/esm/interface/class/api/authorization/policy/document/source.interface.d.ts +4 -0
  446. package/dist/esm/interface/class/api/authorization/policy/document/statement.interface.d.ts +8 -0
  447. package/dist/esm/interface/class/api/authorization/policy/index.d.ts +2 -0
  448. package/dist/esm/interface/class/api/authorization/policy/registry.interface.d.ts +2 -1
  449. package/dist/esm/interface/class/api/authorization/policy/subscriber/context/data.interface.d.ts +6 -4
  450. package/dist/esm/interface/class/api/authorization/policy/subscriber/context/interface.d.ts +5 -3
  451. package/dist/esm/interface/class/api/authorization/policy/subscriber/index.d.ts +1 -0
  452. package/dist/esm/interface/class/api/authorization/policy/subscriber/interface.d.ts +1 -1
  453. package/dist/esm/interface/class/api/authorization/policy/subscriber/permission-rule-options.interface.d.ts +6 -0
  454. package/dist/esm/interface/class/api/authorization/policy/subscriber/rule.interface.d.ts +2 -2
  455. package/dist/esm/interface/class/api/authorization/principal/index.d.ts +2 -0
  456. package/dist/esm/interface/class/api/authorization/principal/interface.d.ts +9 -0
  457. package/dist/esm/interface/class/api/authorization/principal/resolver.interface.d.ts +5 -0
  458. package/dist/esm/interface/class/api/authorization/request-metadata.interface.d.ts +10 -0
  459. package/dist/esm/interface/class/api/authorization/resource/definition.interface.d.ts +9 -0
  460. package/dist/esm/interface/class/api/authorization/resource/field-definition.interface.d.ts +5 -0
  461. package/dist/esm/interface/class/api/authorization/resource/index.d.ts +2 -0
  462. package/dist/esm/interface/class/api/authorization/rule/context.interface.d.ts +3 -2
  463. package/dist/esm/interface/class/api/authorization/rule/interface.d.ts +2 -2
  464. package/dist/esm/interface/decorator/api/controller/index.d.ts +1 -1
  465. package/dist/esm/interface/decorator/api/controller/properties/authorization.interface.d.ts +8 -0
  466. package/dist/esm/interface/decorator/api/controller/properties/index.d.ts +1 -0
  467. package/dist/esm/interface/decorator/api/controller/properties/route/base/authorization.interface.d.ts +4 -0
  468. package/dist/esm/interface/decorator/api/controller/properties/route/base/index.d.ts +1 -0
  469. package/dist/esm/interface/decorator/api/controller/properties/route/base/interface.d.ts +2 -0
  470. package/dist/esm/interface/decorator/api/controller/properties.interface.d.ts +3 -1
  471. package/dist/esm/interface/decorator/api/method/authorization.interface.d.ts +3 -0
  472. package/dist/esm/interface/decorator/api/method/index.d.ts +1 -0
  473. package/dist/esm/interface/decorator/api/method/properties.interface.d.ts +4 -1
  474. package/dist/esm/module/api/authorization.module.d.ts +7 -0
  475. package/dist/esm/module/api/authorization.module.js +158 -4
  476. package/dist/esm/module/api/authorization.module.js.map +1 -1
  477. package/dist/esm/type/class/api/authorization/guard-request.type.d.ts +6 -2
  478. package/dist/esm/type/class/api/authorization/policy/before/create-result.type.d.ts +1 -1
  479. package/dist/esm/type/class/api/authorization/policy/before/delete-result.type.d.ts +1 -1
  480. package/dist/esm/type/class/api/authorization/policy/before/get/list-result.type.d.ts +1 -1
  481. package/dist/esm/type/class/api/authorization/policy/before/get/result.type.d.ts +1 -1
  482. package/dist/esm/type/class/api/authorization/policy/before/partial-update-result.type.d.ts +1 -1
  483. package/dist/esm/type/class/api/authorization/policy/before/update-result.type.d.ts +1 -1
  484. package/dist/esm/type/class/api/authorization/policy/context/before/create-context.type.d.ts +8 -0
  485. package/dist/esm/type/class/api/authorization/policy/context/before/get/context.type.d.ts +7 -0
  486. package/dist/esm/type/class/api/authorization/policy/context/before/get/index.d.ts +2 -0
  487. package/dist/esm/type/class/api/authorization/policy/context/before/get/list-context.type.d.ts +8 -0
  488. package/dist/esm/type/class/api/authorization/policy/context/before/index.d.ts +4 -0
  489. package/dist/esm/type/class/api/authorization/policy/context/before/partial-update-context.type.d.ts +9 -0
  490. package/dist/esm/type/class/api/authorization/policy/context/before/update-context.type.d.ts +9 -0
  491. package/dist/esm/type/class/api/authorization/policy/context/index.d.ts +2 -0
  492. package/dist/esm/type/class/api/authorization/policy/context/with-request-metadata.type.d.ts +7 -0
  493. package/dist/esm/type/class/api/authorization/policy/custom-action-result.type.d.ts +1 -1
  494. package/dist/esm/type/class/api/authorization/policy/hook/type.d.ts +1 -1
  495. package/dist/esm/type/class/api/authorization/policy/index.d.ts +2 -1
  496. package/dist/esm/type/class/api/authorization/policy/subscriber/index.d.ts +3 -0
  497. package/dist/esm/type/class/api/authorization/policy/subscriber/permission-rule-options/without-transform.type.d.ts +5 -0
  498. package/dist/esm/type/class/api/authorization/policy/subscriber/rule/index.d.ts +1 -0
  499. package/dist/esm/type/class/api/authorization/policy/subscriber/rule/without/effect-without-transform.type.d.ts +5 -0
  500. package/dist/esm/type/class/api/authorization/policy/subscriber/rule/without/index.d.ts +2 -0
  501. package/dist/esm/type/class/api/authorization/policy/subscriber/rule/without/transform.type.d.ts +5 -0
  502. package/dist/esm/type/class/api/authorization/policy/{policy-subscriber-rule-result.type.d.ts → subscriber/rule-result.type.d.ts} +2 -2
  503. package/dist/esm/utility/api/controller/apply/decorators.utility.d.ts +2 -1
  504. package/dist/esm/utility/api/controller/apply/decorators.utility.js +12 -8
  505. package/dist/esm/utility/api/controller/apply/decorators.utility.js.map +1 -1
  506. package/dist/esm/utility/api/controller/apply/metadata.utility.d.ts +2 -1
  507. package/dist/esm/utility/api/controller/apply/metadata.utility.js +4 -23
  508. package/dist/esm/utility/api/controller/apply/metadata.utility.js.map +1 -1
  509. package/dist/esm/utility/api/controller/get/dto.utility.d.ts +19 -0
  510. package/dist/esm/utility/api/controller/get/dto.utility.js +54 -0
  511. package/dist/esm/utility/api/controller/get/dto.utility.js.map +1 -0
  512. package/dist/esm/utility/api/controller/get/index.d.ts +1 -0
  513. package/dist/esm/utility/api/controller/handle-request-relations.utility.d.ts +2 -1
  514. package/dist/esm/utility/api/controller/handle-request-relations.utility.js.map +1 -1
  515. package/dist/esm/utility/api/controller/transform-data.utility.d.ts +2 -1
  516. package/dist/esm/utility/api/controller/transform-data.utility.js.map +1 -1
  517. package/dist/esm/utility/api/controller/validate-request.utility.d.ts +2 -1
  518. package/dist/esm/utility/api/controller/validate-request.utility.js.map +1 -1
  519. package/dist/esm/utility/api/controller/write/dto-swagger.utility.d.ts +2 -1
  520. package/dist/esm/utility/api/controller/write/dto-swagger.utility.js +5 -24
  521. package/dist/esm/utility/api/controller/write/dto-swagger.utility.js.map +1 -1
  522. package/dist/esm/utility/api/controller/write/method.utility.d.ts +2 -1
  523. package/dist/esm/utility/api/controller/write/method.utility.js.map +1 -1
  524. package/dist/esm/utility/api/filter-order-by-from-entity.utility.js +2 -1
  525. package/dist/esm/utility/api/filter-order-by-from-entity.utility.js.map +1 -1
  526. package/dist/esm/utility/apply-auto-dto-response-exposure.utility.d.ts +11 -0
  527. package/dist/esm/utility/apply-auto-dto-response-exposure.utility.js +54 -0
  528. package/dist/esm/utility/apply-auto-dto-response-exposure.utility.js.map +1 -0
  529. package/dist/esm/utility/authorization/decision/apply-result.utility.d.ts +1 -1
  530. package/dist/esm/utility/authorization/decision/apply-result.utility.js +2 -1
  531. package/dist/esm/utility/authorization/decision/apply-result.utility.js.map +1 -1
  532. package/dist/esm/utility/authorization/decision/attach-resource.utility.d.ts +1 -1
  533. package/dist/esm/utility/authorization/decision/resolve-from-request.utility.d.ts +1 -1
  534. package/dist/esm/utility/authorization/index.d.ts +2 -1
  535. package/dist/esm/utility/authorization/permission/index.d.ts +2 -0
  536. package/dist/esm/utility/authorization/permission/matches.utility.d.ts +9 -0
  537. package/dist/esm/utility/authorization/permission/matches.utility.js +31 -0
  538. package/dist/esm/utility/authorization/permission/matches.utility.js.map +1 -0
  539. package/dist/esm/utility/authorization/permission/set-matches.utility.d.ts +13 -0
  540. package/dist/esm/utility/authorization/permission/set-matches.utility.js +34 -0
  541. package/dist/esm/utility/authorization/permission/set-matches.utility.js.map +1 -0
  542. package/dist/esm/utility/authorization/resolve-default-principal.utility.d.ts +7 -0
  543. package/dist/esm/utility/authorization/resolve-default-principal.utility.js +73 -0
  544. package/dist/esm/utility/authorization/resolve-default-principal.utility.js.map +1 -0
  545. package/dist/esm/utility/authorization/scope-merge-where.utility.js +249 -4
  546. package/dist/esm/utility/authorization/scope-merge-where.utility.js.map +1 -1
  547. package/dist/esm/utility/auto-dto-context-queue.utility.d.ts +7 -0
  548. package/dist/esm/utility/auto-dto-context-queue.utility.js +40 -6
  549. package/dist/esm/utility/auto-dto-context-queue.utility.js.map +1 -1
  550. package/dist/esm/utility/dto/get/decorator-config.utility.js +2 -1
  551. package/dist/esm/utility/dto/get/decorator-config.utility.js.map +1 -1
  552. package/dist/esm/utility/register-auto-dto-child.utility.js +3 -0
  553. package/dist/esm/utility/register-auto-dto-child.utility.js.map +1 -1
  554. package/dist/esm/validator/must-match-one-of-schemas.validator.js +4 -3
  555. package/dist/esm/validator/must-match-one-of-schemas.validator.js.map +1 -1
  556. package/package.json +4 -2
  557. package/dist/cjs/constant/class/authorization/policy-decorator.constant.js.map +0 -1
  558. package/dist/cjs/enum/class/authorization/policy-on-type.enum.d.ts +0 -3
  559. package/dist/cjs/enum/class/authorization/policy-on-type.enum.js +0 -7
  560. package/dist/cjs/enum/class/authorization/policy-on-type.enum.js.map +0 -1
  561. package/dist/cjs/external/@elsikora/cladi/dist/esm/domain/enum/logger-log-level.enum.js +0 -14
  562. package/dist/cjs/external/@elsikora/cladi/dist/esm/domain/enum/logger-log-level.enum.js.map +0 -1
  563. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/class/base/error.class.js +0 -31
  564. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/class/base/error.class.js.map +0 -1
  565. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/class/base/registry.class.js +0 -222
  566. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/class/base/registry.class.js.map +0 -1
  567. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/constant/console-logger-default-options.constant.js +0 -11
  568. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/constant/console-logger-default-options.constant.js.map +0 -1
  569. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/service/console-logger.service.js +0 -131
  570. package/dist/cjs/external/@elsikora/cladi/dist/esm/infrastructure/service/console-logger.service.js.map +0 -1
  571. package/dist/cjs/external/@elsikora/cladi/dist/esm/presentation/utility/create/registry.utility.js +0 -19
  572. package/dist/cjs/external/@elsikora/cladi/dist/esm/presentation/utility/create/registry.utility.js.map +0 -1
  573. package/dist/cjs/interface/class/api/authorization/decision.interface.d.ts +0 -18
  574. package/dist/cjs/interface/class/api/authorization/subject.interface.d.ts +0 -6
  575. package/dist/cjs/utility/authorization/resolve-default-subject.utility.d.ts +0 -7
  576. package/dist/cjs/utility/authorization/resolve-default-subject.utility.js +0 -52
  577. package/dist/cjs/utility/authorization/resolve-default-subject.utility.js.map +0 -1
  578. package/dist/esm/constant/class/authorization/policy-decorator.constant.js.map +0 -1
  579. package/dist/esm/enum/class/authorization/policy-on-type.enum.d.ts +0 -3
  580. package/dist/esm/enum/class/authorization/policy-on-type.enum.js +0 -7
  581. package/dist/esm/enum/class/authorization/policy-on-type.enum.js.map +0 -1
  582. package/dist/esm/external/@elsikora/cladi/dist/esm/domain/enum/logger-log-level.enum.js +0 -14
  583. package/dist/esm/external/@elsikora/cladi/dist/esm/domain/enum/logger-log-level.enum.js.map +0 -1
  584. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/class/base/error.class.js +0 -29
  585. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/class/base/error.class.js.map +0 -1
  586. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/class/base/registry.class.js +0 -220
  587. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/class/base/registry.class.js.map +0 -1
  588. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/constant/console-logger-default-options.constant.js +0 -9
  589. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/constant/console-logger-default-options.constant.js.map +0 -1
  590. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/service/console-logger.service.js +0 -129
  591. package/dist/esm/external/@elsikora/cladi/dist/esm/infrastructure/service/console-logger.service.js.map +0 -1
  592. package/dist/esm/external/@elsikora/cladi/dist/esm/presentation/utility/create/registry.utility.js +0 -17
  593. package/dist/esm/external/@elsikora/cladi/dist/esm/presentation/utility/create/registry.utility.js.map +0 -1
  594. package/dist/esm/interface/class/api/authorization/decision.interface.d.ts +0 -18
  595. package/dist/esm/interface/class/api/authorization/subject.interface.d.ts +0 -6
  596. package/dist/esm/utility/authorization/resolve-default-subject.utility.d.ts +0 -7
  597. package/dist/esm/utility/authorization/resolve-default-subject.utility.js +0 -50
  598. package/dist/esm/utility/authorization/resolve-default-subject.utility.js.map +0 -1
  599. /package/dist/cjs/constant/class/authorization/{policy-decorator.constant.d.ts → policy/decorator.constant.d.ts} +0 -0
  600. /package/dist/esm/constant/class/authorization/{policy-decorator.constant.d.ts → policy/decorator.constant.d.ts} +0 -0
package/README.md CHANGED
@@ -353,53 +353,358 @@ export class UserController {
353
353
  }
354
354
  ```
355
355
 
356
- ### Declarative Authorization Policies
356
+ ### Authorization
357
357
 
358
- Import `ApiAuthorizationModule` once and describe access rules as policies. The guard is attached automatically—mark controllers with `@ApiControllerSecurable()` to enable policy evaluation.
358
+ Authorization now has two first-class modes:
359
+
360
+ - `hooks`: auto-discovered `@ApiAuthorizationPolicy({ entity })` classes
361
+ - `iam`: attachment/document-based IAM evaluation with optional boundaries
362
+
363
+ `@ApiControllerSecurable()` is marker-only. It turns on the authorization pipeline, but mode selection and all authorization configuration live in `@ApiController({ authorization: ... })`. Each route uses exactly one mode, and route config can override the controller default with `routes[routeType].authorization.mode`.
364
+
365
+ #### Runtime authorization actions
366
+
367
+ `@ApiMethod(...)` uses two different action concepts:
368
+
369
+ - `action` is a documentation hint for Swagger summaries and descriptions
370
+ - `authorization.action` is the runtime authorization action string used by hooks and IAM
371
+
372
+ Auto-generated CRUD routes receive built-in runtime actions automatically:
373
+
374
+ - `create`
375
+ - `delete`
376
+ - `get`
377
+ - `getList`
378
+ - `partialUpdate`
379
+ - `update`
380
+
381
+ Custom secured routes should declare their own domain-specific action strings:
382
+
383
+ ```typescript
384
+ @ApiMethod<UserEntity>({
385
+ action: EApiAction.UPDATE,
386
+ authorization: {
387
+ action: "update.promote",
388
+ },
389
+ entity: UserEntity,
390
+ httpCode: HttpStatus.OK,
391
+ method: RequestMethod.POST,
392
+ path: ":id/promote",
393
+ responseType: UserResponseDto,
394
+ })
395
+ public promote(@Param("id") id: string) {
396
+ return this.service.promote(id);
397
+ }
398
+ ```
399
+
400
+ The same `authorization.action` value is what hooks receive as `context.action` and what IAM turns into a namespaced action such as `admin:user:update.promote`.
359
401
 
360
402
  ```typescript
361
403
  // app.module.ts
404
+ import type {
405
+ IApiAuthorizationPrincipal,
406
+ IApiHookPermissionSource,
407
+ IApiPolicyAttachmentSource,
408
+ IApiPolicyDocumentSource,
409
+ IApiResolvedPolicyAttachments,
410
+ } from "@elsikora/nestjs-crud-automator";
411
+
362
412
  import { Module } from "@nestjs/common";
363
- import { ApiAuthorizationModule } from "@elsikora/nestjs-crud-automator";
413
+
414
+ import {
415
+ ApiAuthorizationModule,
416
+ EApiAuthorizationPrincipalType,
417
+ EApiPolicySourceType,
418
+ AuthorizationResolveDefaultPrincipal,
419
+ } from "@elsikora/nestjs-crud-automator";
420
+
421
+ const hookPermissionSource: IApiHookPermissionSource = {
422
+ async getPermissions(principal: IApiAuthorizationPrincipal): Promise<ReadonlyArray<string>> {
423
+ const permissions = principal.claims?.permissions;
424
+
425
+ return Array.isArray(permissions)
426
+ ? permissions.filter((value): value is string => typeof value === "string")
427
+ : [];
428
+ },
429
+ };
430
+
431
+ const iamAttachmentSource: IApiPolicyAttachmentSource = {
432
+ async getAttachments(principal): Promise<IApiResolvedPolicyAttachments> {
433
+ return {
434
+ attachments: [
435
+ {
436
+ policyId: "user-items",
437
+ principalId: principal.id,
438
+ principalType: principal.type,
439
+ },
440
+ ],
441
+ boundaries: [],
442
+ };
443
+ },
444
+ };
445
+
446
+ const iamDocumentSource: IApiPolicyDocumentSource = {
447
+ async getDocumentsByIds(ids) {
448
+ return ids.map((id) => ({
449
+ document: {
450
+ Statement: [
451
+ {
452
+ Action: ["admin:item:list", "admin:item:read"],
453
+ Condition: {
454
+ StringEquals: {
455
+ "resource.operatorId": "operator-1",
456
+ },
457
+ },
458
+ Effect: "Allow",
459
+ Resource: ["gameport:admin:item/{id}"],
460
+ Sid: "AllowOperatorItems",
461
+ },
462
+ ],
463
+ Version: "2012-10-17",
464
+ },
465
+ id,
466
+ namespace: "admin:item",
467
+ sourceType: EApiPolicySourceType.MANAGED,
468
+ version: "2026-03-14",
469
+ }));
470
+ },
471
+ };
364
472
 
365
473
  @Module({
366
474
  imports: [
367
- /* ... */
368
- ApiAuthorizationModule,
475
+ ApiAuthorizationModule.forRoot({
476
+ hookPermissionSources: [hookPermissionSource],
477
+ iam: {
478
+ attachmentSources: [iamAttachmentSource],
479
+ documentSources: [iamDocumentSource],
480
+ },
481
+ principalResolver: {
482
+ resolve(user) {
483
+ if (!user || typeof user !== "object" || !("account" in user)) {
484
+ return AuthorizationResolveDefaultPrincipal(user);
485
+ }
486
+
487
+ const payload = user as {
488
+ account: { id: string; operatorId: string };
489
+ access: { permissions: Array<string>; roles: Array<string> };
490
+ };
491
+
492
+ return {
493
+ attributes: { operatorId: payload.account.operatorId },
494
+ claims: { permissions: payload.access.permissions },
495
+ id: payload.account.id,
496
+ roles: payload.access.roles,
497
+ type: EApiAuthorizationPrincipalType.USER,
498
+ };
499
+ },
500
+ },
501
+ }),
369
502
  ],
370
503
  })
371
504
  export class AppModule {}
372
505
  ```
373
506
 
374
- Mark controllers with `@ApiControllerSecurable()` to enable policy evaluation.
507
+ Use `ApiAuthorizationModule.forRootAsync(...)` when the resolver or IAM sources must be real Nest providers with `Repository`, `DataSource`, or service dependencies. The module supports `imports`, `inject`, `useFactory`, `useClass`, and `useExisting`.
375
508
 
376
509
  ```typescript
377
- // policies/user-access.policy.ts
378
- import type { IApiAuthorizationRuleContext, IApiAuthorizationScope, TApiAuthorizationPolicyBeforeDeleteResult, TApiAuthorizationPolicyBeforeGetResult } from "@elsikora/nestjs-crud-automator";
510
+ // authorization.module.ts
511
+ import { Injectable, Module } from "@nestjs/common";
512
+
513
+ import {
514
+ ApiAuthorizationModule,
515
+ AuthorizationResolveDefaultPrincipal,
516
+ } from "@elsikora/nestjs-crud-automator";
517
+
518
+ @Injectable()
519
+ class DbPrincipalResolver {
520
+ resolve(user: unknown) {
521
+ return AuthorizationResolveDefaultPrincipal(user);
522
+ }
523
+ }
524
+
525
+ @Injectable()
526
+ class DbAttachmentSource {
527
+ // Inject Repository / DataSource / services here
528
+ }
529
+
530
+ @Injectable()
531
+ class DbDocumentSource {
532
+ // Inject Repository / DataSource / services here
533
+ }
379
534
 
380
- import { ApiAuthorizationPolicy, ApiAuthorizationPolicyBase } from "@elsikora/nestjs-crud-automator";
381
- import { UserEntity } from "../user.entity";
535
+ @Module({
536
+ exports: [DbAttachmentSource, DbDocumentSource, DbPrincipalResolver],
537
+ providers: [DbAttachmentSource, DbDocumentSource, DbPrincipalResolver],
538
+ })
539
+ class AuthorizationSourcesModule {}
540
+
541
+ @Module({
542
+ imports: [
543
+ AuthorizationSourcesModule,
544
+ ApiAuthorizationModule.forRootAsync({
545
+ imports: [AuthorizationSourcesModule],
546
+ inject: [DbAttachmentSource, DbDocumentSource, DbPrincipalResolver],
547
+ useFactory: (attachmentSource, documentSource, principalResolver) => ({
548
+ iam: {
549
+ attachmentSources: [attachmentSource],
550
+ documentSources: [documentSource],
551
+ },
552
+ principalResolver,
553
+ }),
554
+ }),
555
+ ],
556
+ })
557
+ export class AppModule {}
558
+ ```
559
+
560
+ Use the controller `authorization` block to pick the mode:
561
+
562
+ ```typescript
563
+ // user.controller.ts
564
+ import {
565
+ EApiAuthorizationMode,
566
+ ApiController,
567
+ ApiControllerSecurable,
568
+ } from "@elsikora/nestjs-crud-automator";
569
+
570
+ @ApiControllerSecurable()
571
+ @ApiController<UserEntity>({
572
+ authorization: {
573
+ defaultMode: EApiAuthorizationMode.HOOKS,
574
+ },
575
+ entity: UserEntity,
576
+ path: "users",
577
+ })
578
+ export class UserController {
579
+ constructor(public service: UserService) {}
580
+ }
581
+ ```
582
+
583
+ Hooks mode keeps entity-based policy autodiscovery:
584
+
585
+ ```typescript
586
+ // policies/user-hooks.policy.ts
587
+ import type {
588
+ IApiAuthorizationRuleContext,
589
+ IApiAuthorizationScope,
590
+ TApiAuthorizationPolicyBeforeGetListContext,
591
+ TApiAuthorizationPolicyBeforeUpdateContext,
592
+ } from "@elsikora/nestjs-crud-automator";
593
+
594
+ import {
595
+ EApiAuthorizationPermissionMatch,
596
+ ApiAuthorizationPolicy,
597
+ ApiAuthorizationPolicyBase,
598
+ } from "@elsikora/nestjs-crud-automator";
382
599
 
383
600
  @ApiAuthorizationPolicy<UserEntity>({ entity: UserEntity, priority: 200 })
384
- export class UserAccessPolicy extends ApiAuthorizationPolicyBase<UserEntity> {
385
- public onBeforeGet(): TApiAuthorizationPolicyBeforeGetResult<UserEntity> {
386
- return this.allow({
387
- scope: (context: IApiAuthorizationRuleContext<UserEntity>): IApiAuthorizationScope<UserEntity> => ({
388
- where: { id: context.subject.id },
601
+ export class UserHooksPolicy extends ApiAuthorizationPolicyBase<UserEntity> {
602
+ private getOperatorId(principal: IApiAuthorizationRuleContext<UserEntity>["principal"]): string | undefined {
603
+ return principal.attributes.operatorId as string | undefined;
604
+ }
605
+
606
+ private scopeToOperator(context: IApiAuthorizationRuleContext<UserEntity>): IApiAuthorizationScope<UserEntity> {
607
+ return {
608
+ where: {
609
+ operatorId: this.getOperatorId(context.principal),
610
+ },
611
+ };
612
+ }
613
+
614
+ public onBeforeGetList(context: TApiAuthorizationPolicyBeforeGetListContext<UserEntity>) {
615
+ if (context.query.filters?.operatorId && context.query.filters.operatorId !== this.getOperatorId(context.principal)) {
616
+ return [];
617
+ }
618
+
619
+ return [
620
+ ...this.allowForRoles(["platform-admin"]),
621
+ ...this.allowForPermissions(["admin.user.read", "admin.user.list"], {
622
+ match: EApiAuthorizationPermissionMatch.ALL,
623
+ scope: (ruleContext: IApiAuthorizationRuleContext<UserEntity>): IApiAuthorizationScope<UserEntity> => this.scopeToOperator(ruleContext),
389
624
  }),
390
- });
625
+ ];
391
626
  }
392
627
 
393
- public onBeforeDelete(): TApiAuthorizationPolicyBeforeDeleteResult<UserEntity> {
394
- return this.deny({
395
- description: "Only admins can delete users",
396
- condition: (context: IApiAuthorizationRuleContext<UserEntity>): boolean => !context.subject.roles.includes("admin"),
397
- });
628
+ public onBeforeUpdate(_context: TApiAuthorizationPolicyBeforeUpdateContext<UserEntity>) {
629
+ return [
630
+ ...this.allowForPermissions(["admin.user.update"], {
631
+ scope: (ruleContext: IApiAuthorizationRuleContext<UserEntity>): IApiAuthorizationScope<UserEntity> => this.scopeToOperator(ruleContext),
632
+ }),
633
+ ...this.denyForPermissions(["admin.user.update"], {
634
+ condition: ({ principal }: IApiAuthorizationRuleContext<UserEntity>): boolean => Boolean(principal.attributes.isOperatorLocked),
635
+ priority: 1000,
636
+ }),
637
+ ];
638
+ }
639
+ }
640
+ ```
641
+
642
+ Generated CRUD routes dispatch to CRUD hooks such as `onBeforeGetList` or `onBeforeUpdate` using the internal `routeType`. Custom `@ApiMethod(...)` routes do not use CRUD hook names; handle them in `getCustomActionRule(action, context)` instead:
643
+
644
+ ```typescript
645
+ public getCustomActionRule(action: string) {
646
+ if (action === "update.promote") {
647
+ return this.allowForPermissions(["admin.user.promote"]);
398
648
  }
649
+
650
+ return [];
399
651
  }
400
652
  ```
401
653
 
402
- Policies return arrays of allow/deny rules, merge scope conditions into generated queries, and transform responses before they are sent back to the client. Return an empty array (`[]`) when no rules apply. `authorizationDecision.policyIds` lists all policy IDs contributing rules for the request. You can optionally enable policy caching globally via `ApiAuthorizationPolicyRegistry.configureCache()` or per policy via the `cache` option when policies are static.
654
+ IAM mode stays storage-agnostic. Attachments and documents come from your configured sources, while the controller defines the resource model used for action/resource matching and safe query planning:
655
+
656
+ ```typescript
657
+ @ApiControllerSecurable()
658
+ @ApiController<ItemEntity>({
659
+ authorization: {
660
+ defaultMode: EApiAuthorizationMode.IAM,
661
+ policyNamespace: "admin:item",
662
+ resourceDefinition: {
663
+ entity: ItemEntity,
664
+ fields: [
665
+ {
666
+ isFilterable: true,
667
+ path: "resource.id",
668
+ queryPath: "id",
669
+ },
670
+ {
671
+ isFilterable: true,
672
+ path: "resource.operatorId",
673
+ queryPath: "operator.id",
674
+ },
675
+ ],
676
+ namespace: "admin:item",
677
+ resourcePath: "gameport:admin:item/{id}",
678
+ resourceType: "gameport:admin:item",
679
+ },
680
+ },
681
+ entity: ItemEntity,
682
+ path: "items",
683
+ })
684
+ export class ItemController {
685
+ constructor(public service: ItemService) {}
686
+ }
687
+ ```
688
+
689
+ Generated CRUD actions are normalized to IAM-friendly names inside the configured namespace:
690
+
691
+ - `get` -> `<policyNamespace>:read`
692
+ - `getList` -> `<policyNamespace>:list`
693
+ - `create` -> `<policyNamespace>:create`
694
+ - `update` / `partialUpdate` -> `<policyNamespace>:update`
695
+ - `delete` -> `<policyNamespace>:delete`
696
+
697
+ Custom `@ApiMethod(...)` actions pass through unchanged after the namespace. For example, `authorization.action: "update.promote"` becomes `admin:item:update.promote` when `policyNamespace` is `admin:item`.
698
+
699
+ The runtime resolves a `principal`, dispatches to the selected mode, and stores a unified `authorizationDecision` on the request. Hooks mode traces matched rules and resolved permissions; IAM mode traces attachments, documents, statements, boundaries, and final decision type. For out-of-band checks, inject `ApiAuthorizationSimulator` and call `evaluate(...)` with the same controller authorization metadata you use at runtime.
700
+
701
+ Important IAM details from the current implementation:
702
+
703
+ - `resource.id` and `resource.operatorId` are safe planner-friendly paths for `GET` and `GET_LIST` when declared in `resourceDefinition.fields`
704
+ - `queryPath` may be nested, for example `operator.id`, when your repository where-shape uses relations
705
+ - route filters and authorization scopes are merged with logical `AND`, not overwrite semantics
706
+ - impossible conflicts collapse to a match-nothing branch instead of rewriting the requested filter
707
+ - relation payloads can be raw UUID strings, so create/update conditions like `request.body.operator = "${principal.attributes.operatorId}"` work without hooks fallback
403
708
 
404
709
  ### `CorrelationIDResponseBodyInterceptor`: Request Tracing
405
710
 
@@ -646,33 +951,35 @@ This query would search for users with "john" in their username and created betw
646
951
 
647
952
  ## Roadmap
648
953
 
649
- | Task / Feature | Status |
650
- | ------------------------------------------ | -------------- |
651
- | Core CRUD operations | ✅ Done |
652
- | TypeORM integration | ✅ Done |
653
- | Swagger/OpenAPI documentation | ✅ Done |
654
- | Validation with class-validator | ✅ Done |
655
- | Transformation with class-transformer | ✅ Done |
656
- | Advanced filtering for GET_LIST operation | ✅ Done |
657
- | Authentication guard integration | ✅ Done |
658
- | Request/response transformers | ✅ Done |
659
- | Relation loading strategies | ✅ Done |
660
- | Custom validator integration | ✅ Done |
661
- | Pagination support | ✅ Done |
662
- | Error handling with standardized responses | ✅ Done |
663
- | Support for TypeScript decorators | ✅ Done |
664
- | Support for ESM and CommonJS modules | ✅ Done |
665
- | Subscriber System | ✅ Done |
666
- | Role-based access control | ✅ Done |
667
- | MongoDB support | 🚧 In Progress |
668
- | GraphQL integration | 🚧 In Progress |
669
- | Support for soft deletes | 🚧 In Progress |
670
- | Cache integration | 🚧 In Progress |
671
- | Audit logging middleware | 🚧 In Progress |
672
- | Bulk operations (create many, update many) | 🚧 In Progress |
673
- | Query complexity analyzer | 🚧 In Progress |
674
- | Rate limiting enhancements | 🚧 In Progress |
675
- | Custom parameter decorators | 🚧 In Progress |
954
+ | Task / Feature | Status |
955
+ | ------------------------------------------- | -------------- |
956
+ | Core CRUD operations | ✅ Done |
957
+ | TypeORM integration | ✅ Done |
958
+ | Swagger/OpenAPI documentation | ✅ Done |
959
+ | Validation with class-validator | ✅ Done |
960
+ | Transformation with class-transformer | ✅ Done |
961
+ | Advanced filtering for GET_LIST operation | ✅ Done |
962
+ | Authentication guard integration | ✅ Done |
963
+ | Request/response transformers | ✅ Done |
964
+ | Relation loading strategies | ✅ Done |
965
+ | Custom validator integration | ✅ Done |
966
+ | Pagination support | ✅ Done |
967
+ | Error handling with standardized responses | ✅ Done |
968
+ | Support for TypeScript decorators | ✅ Done |
969
+ | Support for ESM and CommonJS modules | ✅ Done |
970
+ | Subscriber System | ✅ Done |
971
+ | Hooks and IAM authorization pipeline | ✅ Done |
972
+ | DI-backed authorization bootstrap | Done |
973
+ | Scope-safe authorization filtering | Done |
974
+ | MongoDB support | 🚧 In Progress |
975
+ | GraphQL integration | 🚧 In Progress |
976
+ | Support for soft deletes | 🚧 In Progress |
977
+ | Cache integration | 🚧 In Progress |
978
+ | Audit logging middleware | 🚧 In Progress |
979
+ | Bulk operations (create many, update many) | 🚧 In Progress |
980
+ | Query complexity analyzer | 🚧 In Progress |
981
+ | Rate limiting enhancements | 🚧 In Progress |
982
+ | Custom parameter decorators | 🚧 In Progress |
676
983
 
677
984
  ## ❓ FAQ
678
985
 
@@ -0,0 +1,13 @@
1
+ import { OnApplicationBootstrap } from "@nestjs/common";
2
+ import { DiscoveryService } from "@nestjs/core";
3
+ import { ApiAuthorizationPolicyRegistry } from './policy/registry.class';
4
+ export declare class ApiAuthorizationBootstrapValidationService implements OnApplicationBootstrap {
5
+ private readonly discoveryService;
6
+ private readonly policyRegistry;
7
+ private readonly documentSources;
8
+ constructor(discoveryService: DiscoveryService, policyRegistry: ApiAuthorizationPolicyRegistry, documentSources?: ReadonlyArray<unknown>);
9
+ onApplicationBootstrap(): void;
10
+ private assertValidMode;
11
+ private validateController;
12
+ private validateResourceDefinition;
13
+ }
@@ -0,0 +1,155 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('../../../external/tslib/tslib.es6.js');
4
+ var documentSourcesToken_constant = require('../../../constant/class/authorization/policy/document-sources-token.constant.js');
5
+ var controller_constant = require('../../../constant/decorator/api/controller.constant.js');
6
+ require('../../../enum/class/authorization/decision-type.enum.js');
7
+ require('../../../enum/class/authorization/effect.enum.js');
8
+ var mode_enum = require('../../../enum/class/authorization/mode.enum.js');
9
+ require('../../../enum/class/authorization/permission-match.enum.js');
10
+ require('../../../enum/class/authorization/policy/attachment-type.enum.js');
11
+ require('../../../enum/class/authorization/policy/on-type.enum.js');
12
+ require('../../../enum/class/authorization/policy/source-type.enum.js');
13
+ require('../../../enum/class/authorization/policy/status.enum.js');
14
+ require('../../../enum/class/authorization/principal-type.enum.js');
15
+ var routeType_enum = require('../../../enum/decorator/api/route-type.enum.js');
16
+ var common = require('@nestjs/common');
17
+ var core = require('@nestjs/core');
18
+ var exception_utility = require('../../../utility/error/exception.utility.js');
19
+ var logger_utility = require('../../../utility/logger.utility.js');
20
+ var registry_class = require('./policy/registry.class.js');
21
+
22
+ const authorizationBootstrapValidationLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationBootstrapValidationService");
23
+ exports.ApiAuthorizationBootstrapValidationService = class ApiAuthorizationBootstrapValidationService {
24
+ discoveryService;
25
+ policyRegistry;
26
+ documentSources;
27
+ constructor(discoveryService, policyRegistry, documentSources = []) {
28
+ this.discoveryService = discoveryService;
29
+ this.policyRegistry = policyRegistry;
30
+ this.documentSources = documentSources;
31
+ }
32
+ onApplicationBootstrap() {
33
+ const controllerWrappers = this.discoveryService.getControllers();
34
+ authorizationBootstrapValidationLogger.verbose(`Starting authorization bootstrap validation for ${controllerWrappers.length} controllers.`);
35
+ for (const controllerWrapper of controllerWrappers) {
36
+ this.validateController(controllerWrapper);
37
+ }
38
+ authorizationBootstrapValidationLogger.verbose("Authorization bootstrap validation finished.");
39
+ }
40
+ assertValidMode(mode, controllerName, routeType) {
41
+ if (mode === mode_enum.EApiAuthorizationMode.HOOKS || mode === mode_enum.EApiAuthorizationMode.IAM) {
42
+ return;
43
+ }
44
+ if (routeType) {
45
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" route "${routeType}" uses unknown authorization mode "${String(mode)}"`);
46
+ throw exception_utility.ErrorException(`Controller "${controllerName}" route "${routeType}" uses unknown authorization mode "${String(mode)}"`);
47
+ }
48
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" uses unknown authorization mode "${String(mode)}"`);
49
+ throw exception_utility.ErrorException(`Controller "${controllerName}" uses unknown authorization mode "${String(mode)}"`);
50
+ }
51
+ validateController(controllerWrapper) {
52
+ const metatype = controllerWrapper.metatype;
53
+ if (!metatype) {
54
+ return;
55
+ }
56
+ authorizationBootstrapValidationLogger.verbose(`Validating authorization configuration for controller "${metatype.name}".`);
57
+ const isSecurable = Boolean(Reflect.getMetadata(controller_constant.CONTROLLER_API_DECORATOR_CONSTANT.SECURABLE_METADATA_KEY, metatype));
58
+ const properties = Reflect.getMetadata(controller_constant.CONTROLLER_API_DECORATOR_CONSTANT.PROPERTIES_METADATA_KEY, metatype);
59
+ const authorization = properties?.authorization;
60
+ if (isSecurable && !authorization) {
61
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" is marked with @ApiControllerSecurable() but does not declare an authorization block`);
62
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" is marked with @ApiControllerSecurable() but does not declare an authorization block`);
63
+ }
64
+ if (!isSecurable && authorization) {
65
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" declares an authorization block but is missing @ApiControllerSecurable()`);
66
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" declares an authorization block but is missing @ApiControllerSecurable()`);
67
+ }
68
+ if (!authorization || !properties) {
69
+ return;
70
+ }
71
+ this.assertValidMode(authorization.defaultMode, metatype.name);
72
+ const enabledRouteTypes = Object.values(routeType_enum.EApiRouteType).filter((routeType) => properties.routes[routeType]?.isEnabled !== false);
73
+ const enabledRouteModes = new Set(enabledRouteTypes.map((routeType) => properties.routes[routeType]?.authorization?.mode ?? authorization.defaultMode));
74
+ const usesHooks = enabledRouteModes.has(mode_enum.EApiAuthorizationMode.HOOKS);
75
+ const usesIam = enabledRouteModes.has(mode_enum.EApiAuthorizationMode.IAM);
76
+ for (const routeType of enabledRouteTypes) {
77
+ const routeMode = properties.routes[routeType]?.authorization?.mode ?? authorization.defaultMode;
78
+ this.assertValidMode(routeMode, metatype.name, routeType);
79
+ }
80
+ if (usesHooks && !this.policyRegistry.hasSubscriberForEntity(properties.entity)) {
81
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" uses hooks authorization but no @ApiAuthorizationPolicy(...) is registered for entity "${properties.entity.name ?? "UnknownEntity"}"`);
82
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" uses hooks authorization but no @ApiAuthorizationPolicy(...) is registered for entity "${properties.entity.name ?? "UnknownEntity"}"`);
83
+ }
84
+ if (usesIam) {
85
+ if (!authorization.policyNamespace) {
86
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" uses IAM authorization but does not declare policyNamespace`);
87
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" uses IAM authorization but does not declare policyNamespace`);
88
+ }
89
+ if (!authorization.resourceDefinition) {
90
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" uses IAM authorization but does not declare resourceDefinition`);
91
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" uses IAM authorization but does not declare resourceDefinition`);
92
+ }
93
+ if (this.documentSources.length === 0) {
94
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" uses IAM authorization but no documentSources are registered`);
95
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" uses IAM authorization but no documentSources are registered`);
96
+ }
97
+ if (authorization.resourceDefinition.namespace !== authorization.policyNamespace) {
98
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" resourceDefinition namespace must match policyNamespace`);
99
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" resourceDefinition namespace must match policyNamespace`);
100
+ }
101
+ if (authorization.resourceDefinition.entity !== properties.entity) {
102
+ authorizationBootstrapValidationLogger.error(`Controller "${metatype.name}" resourceDefinition entity must match controller entity`);
103
+ throw exception_utility.ErrorException(`Controller "${metatype.name}" resourceDefinition entity must match controller entity`);
104
+ }
105
+ this.validateResourceDefinition(metatype.name, authorization.resourceDefinition);
106
+ }
107
+ }
108
+ validateResourceDefinition(controllerName, resourceDefinition) {
109
+ if (!resourceDefinition) {
110
+ return;
111
+ }
112
+ if (typeof resourceDefinition.namespace !== "string" || resourceDefinition.namespace.length === 0) {
113
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resourceDefinition.namespace must be a non-empty string`);
114
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resourceDefinition.namespace must be a non-empty string`);
115
+ }
116
+ if (typeof resourceDefinition.resourceType !== "string" || resourceDefinition.resourceType.length === 0) {
117
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resourceDefinition.resourceType must be a non-empty string`);
118
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resourceDefinition.resourceType must be a non-empty string`);
119
+ }
120
+ if (typeof resourceDefinition.resourcePath !== "string" || resourceDefinition.resourcePath.length === 0) {
121
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resourceDefinition.resourcePath must be a non-empty string`);
122
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resourceDefinition.resourcePath must be a non-empty string`);
123
+ }
124
+ const fieldPaths = new Set();
125
+ const queryPaths = new Set();
126
+ for (const field of resourceDefinition.fields) {
127
+ if (!field.path.startsWith("resource.")) {
128
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resource field path "${field.path}" must start with "resource."`);
129
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resource field path "${field.path}" must start with "resource."`);
130
+ }
131
+ if (field.path.length === 0 || field.queryPath.length === 0) {
132
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resource field mappings must use non-empty path and queryPath`);
133
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resource field mappings must use non-empty path and queryPath`);
134
+ }
135
+ if (fieldPaths.has(field.path)) {
136
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resourceDefinition contains duplicate field path "${field.path}"`);
137
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resourceDefinition contains duplicate field path "${field.path}"`);
138
+ }
139
+ if (queryPaths.has(field.queryPath)) {
140
+ authorizationBootstrapValidationLogger.error(`Controller "${controllerName}" resourceDefinition contains duplicate queryPath "${field.queryPath}"`);
141
+ throw exception_utility.ErrorException(`Controller "${controllerName}" resourceDefinition contains duplicate queryPath "${field.queryPath}"`);
142
+ }
143
+ fieldPaths.add(field.path);
144
+ queryPaths.add(field.queryPath);
145
+ }
146
+ }
147
+ };
148
+ exports.ApiAuthorizationBootstrapValidationService = tslib_es6.__decorate([
149
+ common.Injectable(),
150
+ tslib_es6.__param(2, common.Optional()),
151
+ tslib_es6.__param(2, common.Inject(documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN)),
152
+ tslib_es6.__metadata("design:paramtypes", [core.DiscoveryService,
153
+ registry_class.ApiAuthorizationPolicyRegistry, Array])
154
+ ], exports.ApiAuthorizationBootstrapValidationService);
155
+ //# sourceMappingURL=bootstrap-validation.service.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-validation.service.class.js","sources":["../../../../../../src/class/api/authorization/bootstrap-validation.service.class.ts"],"sourcesContent":[null],"names":["LoggerUtility","ApiAuthorizationBootstrapValidationService","EApiAuthorizationMode","ErrorException","CONTROLLER_API_DECORATOR_CONSTANT","EApiRouteType","__decorate","Injectable","__param","Optional","Inject","AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN","DiscoveryService","ApiAuthorizationPolicyRegistry"],"mappings":"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"}