@venizia/ignis 0.2.0-4 → 0.2.0-41

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 (361) hide show
  1. package/dist/base/applications/base.d.ts +19 -13
  2. package/dist/base/applications/base.d.ts.map +1 -1
  3. package/dist/base/applications/base.js +85 -65
  4. package/dist/base/applications/base.js.map +1 -1
  5. package/dist/base/applications/boot-steps.d.ts +13 -0
  6. package/dist/base/applications/boot-steps.d.ts.map +1 -0
  7. package/dist/base/applications/boot-steps.js +23 -0
  8. package/dist/base/applications/boot-steps.js.map +1 -0
  9. package/dist/base/applications/common/index.d.ts +2 -0
  10. package/dist/base/applications/common/index.d.ts.map +1 -0
  11. package/dist/base/applications/common/index.js +18 -0
  12. package/dist/base/applications/common/index.js.map +1 -0
  13. package/dist/base/applications/{types.d.ts → common/types.d.ts} +11 -0
  14. package/dist/base/applications/common/types.d.ts.map +1 -0
  15. package/dist/base/applications/common/types.js.map +1 -0
  16. package/dist/base/applications/index.d.ts +2 -1
  17. package/dist/base/applications/index.d.ts.map +1 -1
  18. package/dist/base/applications/index.js +2 -1
  19. package/dist/base/applications/index.js.map +1 -1
  20. package/dist/base/applications/server.d.ts +4 -2
  21. package/dist/base/applications/server.d.ts.map +1 -1
  22. package/dist/base/applications/server.js +25 -2
  23. package/dist/base/applications/server.js.map +1 -1
  24. package/dist/base/controllers/grpc/adapter.d.ts +2 -1
  25. package/dist/base/controllers/grpc/adapter.d.ts.map +1 -1
  26. package/dist/base/controllers/grpc/adapter.js +4 -3
  27. package/dist/base/controllers/grpc/adapter.js.map +1 -1
  28. package/dist/base/middlewares/app-error/app-error.middleware.d.ts +3 -2
  29. package/dist/base/middlewares/app-error/app-error.middleware.d.ts.map +1 -1
  30. package/dist/base/middlewares/app-error/app-error.middleware.js +4 -3
  31. package/dist/base/middlewares/app-error/app-error.middleware.js.map +1 -1
  32. package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -1
  33. package/dist/base/middlewares/request-spy/request-spy.middleware.js +2 -1
  34. package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -1
  35. package/dist/common/constants.d.ts.map +1 -1
  36. package/dist/common/constants.js +2 -1
  37. package/dist/common/constants.js.map +1 -1
  38. package/dist/common/environments.d.ts +31 -10
  39. package/dist/common/environments.d.ts.map +1 -1
  40. package/dist/common/environments.js +33 -10
  41. package/dist/common/environments.js.map +1 -1
  42. package/dist/components/api-reference/component.js +2 -2
  43. package/dist/components/api-reference/component.js.map +1 -1
  44. package/dist/components/api-reference/index.d.ts +1 -1
  45. package/dist/components/api-reference/index.d.ts.map +1 -1
  46. package/dist/components/api-reference/index.js +1 -1
  47. package/dist/components/api-reference/index.js.map +1 -1
  48. package/dist/components/api-reference/ui/factory.d.ts +14 -0
  49. package/dist/components/api-reference/ui/factory.d.ts.map +1 -0
  50. package/dist/components/api-reference/{ui-factory.js → ui/factory.js} +12 -25
  51. package/dist/components/api-reference/ui/factory.js.map +1 -0
  52. package/dist/components/api-reference/ui/index.d.ts +4 -0
  53. package/dist/components/api-reference/ui/index.d.ts.map +1 -0
  54. package/dist/components/api-reference/ui/index.js +20 -0
  55. package/dist/components/api-reference/ui/index.js.map +1 -0
  56. package/dist/components/api-reference/ui/scalar.d.ts +8 -0
  57. package/dist/components/api-reference/ui/scalar.d.ts.map +1 -0
  58. package/dist/components/api-reference/ui/scalar.js +28 -0
  59. package/dist/components/api-reference/ui/scalar.js.map +1 -0
  60. package/dist/components/api-reference/ui/swagger.d.ts +8 -0
  61. package/dist/components/api-reference/ui/swagger.d.ts.map +1 -0
  62. package/dist/components/api-reference/ui/swagger.js +28 -0
  63. package/dist/components/api-reference/ui/swagger.js.map +1 -0
  64. package/dist/components/auth/authenticate/controllers/factory.d.ts +33 -2
  65. package/dist/components/auth/authenticate/controllers/factory.d.ts.map +1 -1
  66. package/dist/components/auth/authenticate/services/service/verifier.service.d.ts.map +1 -1
  67. package/dist/components/auth/authenticate/services/service/verifier.service.js +10 -6
  68. package/dist/components/auth/authenticate/services/service/verifier.service.js.map +1 -1
  69. package/dist/components/auth/authenticate/strategies/index.d.ts +1 -1
  70. package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
  71. package/dist/components/auth/authenticate/strategies/index.js +1 -1
  72. package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
  73. package/dist/components/auth/authenticate/strategies/jwks/index.d.ts +3 -0
  74. package/dist/components/auth/authenticate/strategies/jwks/index.d.ts.map +1 -0
  75. package/dist/components/auth/authenticate/strategies/jwks/index.js +19 -0
  76. package/dist/components/auth/authenticate/strategies/jwks/index.js.map +1 -0
  77. package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts +13 -0
  78. package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts.map +1 -0
  79. package/dist/components/auth/authenticate/strategies/{jwks.strategy.js → jwks/issuer.js} +4 -27
  80. package/dist/components/auth/authenticate/strategies/jwks/issuer.js.map +1 -0
  81. package/dist/components/auth/authenticate/strategies/{jwks.strategy.d.ts → jwks/verifier.d.ts} +2 -10
  82. package/dist/components/auth/authenticate/strategies/jwks/verifier.d.ts.map +1 -0
  83. package/dist/components/auth/authenticate/strategies/jwks/verifier.js +45 -0
  84. package/dist/components/auth/authenticate/strategies/jwks/verifier.js.map +1 -0
  85. package/dist/components/auth/authorize/adapters/base-filtered.d.ts +1 -1
  86. package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
  87. package/dist/components/auth/authorize/adapters/base-filtered.js +5 -8
  88. package/dist/components/auth/authorize/adapters/base-filtered.js.map +1 -1
  89. package/dist/components/auth/authorize/adapters/common/index.d.ts +2 -0
  90. package/dist/components/auth/authorize/adapters/common/index.d.ts.map +1 -0
  91. package/dist/components/auth/authorize/adapters/common/index.js +18 -0
  92. package/dist/components/auth/authorize/adapters/common/index.js.map +1 -0
  93. package/dist/components/auth/authorize/adapters/{types.d.ts → common/types.d.ts} +1 -1
  94. package/dist/components/auth/authorize/adapters/common/types.d.ts.map +1 -0
  95. package/dist/components/auth/authorize/adapters/common/types.js.map +1 -0
  96. package/dist/components/auth/authorize/adapters/connector.d.ts +10 -0
  97. package/dist/components/auth/authorize/adapters/connector.d.ts.map +1 -0
  98. package/dist/components/auth/authorize/adapters/connector.js +20 -0
  99. package/dist/components/auth/authorize/adapters/connector.js.map +1 -0
  100. package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts +52 -0
  101. package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts.map +1 -0
  102. package/dist/components/auth/authorize/adapters/custom-grant-expander.js +111 -0
  103. package/dist/components/auth/authorize/adapters/custom-grant-expander.js.map +1 -0
  104. package/dist/components/auth/authorize/adapters/index.d.ts +4 -2
  105. package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
  106. package/dist/components/auth/authorize/adapters/index.js +4 -2
  107. package/dist/components/auth/authorize/adapters/index.js.map +1 -1
  108. package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.d.ts +93 -0
  109. package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.d.ts.map +1 -0
  110. package/dist/components/auth/authorize/adapters/{scoped-casbin.adapter.js → scoped-casbin/adapter.js} +95 -97
  111. package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.js.map +1 -0
  112. package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts +2 -0
  113. package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts.map +1 -0
  114. package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js +5 -0
  115. package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js.map +1 -0
  116. package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts +3 -0
  117. package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts.map +1 -0
  118. package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js +19 -0
  119. package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js.map +1 -0
  120. package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts +50 -0
  121. package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts.map +1 -0
  122. package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js +3 -0
  123. package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js.map +1 -0
  124. package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts +4 -0
  125. package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts.map +1 -0
  126. package/dist/components/auth/authorize/adapters/scoped-casbin/index.js +19 -0
  127. package/dist/components/auth/authorize/adapters/scoped-casbin/index.js.map +1 -0
  128. package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts +17 -0
  129. package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts.map +1 -0
  130. package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js +11 -0
  131. package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js.map +1 -0
  132. package/dist/components/auth/authorize/component.d.ts.map +1 -1
  133. package/dist/components/auth/authorize/component.js +3 -0
  134. package/dist/components/auth/authorize/component.js.map +1 -1
  135. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +7 -36
  136. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -1
  137. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +48 -117
  138. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -1
  139. package/dist/components/auth/authorize/enforcers/index.d.ts +2 -1
  140. package/dist/components/auth/authorize/enforcers/index.d.ts.map +1 -1
  141. package/dist/components/auth/authorize/enforcers/index.js +2 -1
  142. package/dist/components/auth/authorize/enforcers/index.js.map +1 -1
  143. package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts +26 -0
  144. package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts.map +1 -0
  145. package/dist/components/auth/authorize/enforcers/policy-line-codec.js +57 -0
  146. package/dist/components/auth/authorize/enforcers/policy-line-codec.js.map +1 -0
  147. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts +46 -0
  148. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts.map +1 -0
  149. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js +98 -0
  150. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js.map +1 -0
  151. package/dist/components/auth/authorize/index.d.ts +1 -0
  152. package/dist/components/auth/authorize/index.d.ts.map +1 -1
  153. package/dist/components/auth/authorize/index.js +1 -0
  154. package/dist/components/auth/authorize/index.js.map +1 -1
  155. package/dist/components/auth/authorize/role-managers/base.d.ts +34 -0
  156. package/dist/components/auth/authorize/role-managers/base.d.ts.map +1 -0
  157. package/dist/components/auth/authorize/role-managers/base.js +76 -0
  158. package/dist/components/auth/authorize/role-managers/base.js.map +1 -0
  159. package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts +28 -0
  160. package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts.map +1 -0
  161. package/dist/components/auth/authorize/role-managers/domain-hierarchy.js +77 -0
  162. package/dist/components/auth/authorize/role-managers/domain-hierarchy.js.map +1 -0
  163. package/dist/components/auth/authorize/role-managers/index.d.ts +5 -0
  164. package/dist/components/auth/authorize/role-managers/index.d.ts.map +1 -0
  165. package/dist/components/auth/authorize/role-managers/index.js +21 -0
  166. package/dist/components/auth/authorize/role-managers/index.js.map +1 -0
  167. package/dist/components/auth/authorize/role-managers/membership.d.ts +21 -0
  168. package/dist/components/auth/authorize/role-managers/membership.d.ts.map +1 -0
  169. package/dist/components/auth/authorize/role-managers/membership.js +69 -0
  170. package/dist/components/auth/authorize/role-managers/membership.js.map +1 -0
  171. package/dist/components/auth/authorize/{enforcers/resource-role-manager.d.ts → role-managers/resource.d.ts} +3 -9
  172. package/dist/components/auth/authorize/role-managers/resource.d.ts.map +1 -0
  173. package/dist/components/auth/authorize/{enforcers/resource-role-manager.js → role-managers/resource.js} +9 -21
  174. package/dist/components/auth/authorize/role-managers/resource.js.map +1 -0
  175. package/dist/components/auth/models/entities/policy-definition.model.d.ts +49 -14
  176. package/dist/components/auth/models/entities/policy-definition.model.d.ts.map +1 -1
  177. package/dist/components/auth/models/entities/policy-definition.model.js +45 -11
  178. package/dist/components/auth/models/entities/policy-definition.model.js.map +1 -1
  179. package/dist/components/auth/models/entities/user.model.d.ts +2 -2
  180. package/dist/components/health-check/common/constants.d.ts +5 -0
  181. package/dist/components/health-check/common/constants.d.ts.map +1 -0
  182. package/dist/components/health-check/common/constants.js +9 -0
  183. package/dist/components/health-check/common/constants.js.map +1 -0
  184. package/dist/components/health-check/common/index.d.ts +1 -0
  185. package/dist/components/health-check/common/index.d.ts.map +1 -1
  186. package/dist/components/health-check/common/index.js +1 -0
  187. package/dist/components/health-check/common/index.js.map +1 -1
  188. package/dist/components/health-check/common/keys.d.ts +2 -0
  189. package/dist/components/health-check/common/keys.d.ts.map +1 -1
  190. package/dist/components/health-check/common/keys.js +2 -0
  191. package/dist/components/health-check/common/keys.js.map +1 -1
  192. package/dist/components/health-check/common/rest-paths.d.ts +1 -0
  193. package/dist/components/health-check/common/rest-paths.d.ts.map +1 -1
  194. package/dist/components/health-check/common/rest-paths.js +1 -0
  195. package/dist/components/health-check/common/rest-paths.js.map +1 -1
  196. package/dist/components/health-check/common/types.d.ts +22 -0
  197. package/dist/components/health-check/common/types.d.ts.map +1 -1
  198. package/dist/components/health-check/component.d.ts +9 -3
  199. package/dist/components/health-check/component.d.ts.map +1 -1
  200. package/dist/components/health-check/component.js +38 -1
  201. package/dist/components/health-check/component.js.map +1 -1
  202. package/dist/components/health-check/controller.d.ts +10 -2
  203. package/dist/components/health-check/controller.d.ts.map +1 -1
  204. package/dist/components/health-check/controller.js +79 -13
  205. package/dist/components/health-check/controller.js.map +1 -1
  206. package/dist/components/health-check/index.d.ts +1 -0
  207. package/dist/components/health-check/index.d.ts.map +1 -1
  208. package/dist/components/health-check/index.js +1 -0
  209. package/dist/components/health-check/index.js.map +1 -1
  210. package/dist/components/health-check/reporter.d.ts +98 -0
  211. package/dist/components/health-check/reporter.d.ts.map +1 -0
  212. package/dist/components/health-check/reporter.js +138 -0
  213. package/dist/components/health-check/reporter.js.map +1 -0
  214. package/dist/components/mail/common/constants.d.ts +8 -0
  215. package/dist/components/mail/common/constants.d.ts.map +1 -1
  216. package/dist/components/mail/common/constants.js +9 -1
  217. package/dist/components/mail/common/constants.js.map +1 -1
  218. package/dist/components/mail/common/types/index.d.ts +6 -0
  219. package/dist/components/mail/common/types/index.d.ts.map +1 -0
  220. package/dist/components/mail/common/types/index.js +22 -0
  221. package/dist/components/mail/common/types/index.js.map +1 -0
  222. package/dist/components/mail/common/types/message.d.ts +49 -0
  223. package/dist/components/mail/common/types/message.d.ts.map +1 -0
  224. package/dist/components/mail/common/types/message.js +3 -0
  225. package/dist/components/mail/common/types/message.js.map +1 -0
  226. package/dist/components/mail/common/types/options.d.ts +65 -0
  227. package/dist/components/mail/common/types/options.d.ts.map +1 -0
  228. package/dist/components/mail/common/types/options.js +3 -0
  229. package/dist/components/mail/common/types/options.js.map +1 -0
  230. package/dist/components/mail/common/types/queue.d.ts +53 -0
  231. package/dist/components/mail/common/types/queue.d.ts.map +1 -0
  232. package/dist/components/mail/common/types/queue.js +3 -0
  233. package/dist/components/mail/common/types/queue.js.map +1 -0
  234. package/dist/components/mail/common/types/template.d.ts +33 -0
  235. package/dist/components/mail/common/types/template.d.ts.map +1 -0
  236. package/dist/components/mail/common/types/template.js +3 -0
  237. package/dist/components/mail/common/types/template.js.map +1 -0
  238. package/dist/components/mail/common/types/verification.d.ts +26 -0
  239. package/dist/components/mail/common/types/verification.d.ts.map +1 -0
  240. package/dist/components/mail/common/types/verification.js +3 -0
  241. package/dist/components/mail/common/types/verification.js.map +1 -0
  242. package/dist/components/mail/component.d.ts +4 -1
  243. package/dist/components/mail/component.d.ts.map +1 -1
  244. package/dist/components/mail/component.js +12 -0
  245. package/dist/components/mail/component.js.map +1 -1
  246. package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.d.ts +19 -0
  247. package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.d.ts.map +1 -0
  248. package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.js +111 -0
  249. package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.js.map +1 -0
  250. package/dist/components/mail/helpers/transporters/index.d.ts +2 -1
  251. package/dist/components/mail/helpers/transporters/index.d.ts.map +1 -1
  252. package/dist/components/mail/helpers/transporters/index.js +2 -1
  253. package/dist/components/mail/helpers/transporters/index.js.map +1 -1
  254. package/dist/components/mail/providers/mail-transporter.provider.d.ts +2 -0
  255. package/dist/components/mail/providers/mail-transporter.provider.d.ts.map +1 -1
  256. package/dist/components/mail/providers/mail-transporter.provider.js +17 -0
  257. package/dist/components/mail/providers/mail-transporter.provider.js.map +1 -1
  258. package/dist/components/mail/services/generators/index.d.ts +4 -0
  259. package/dist/components/mail/services/generators/index.d.ts.map +1 -0
  260. package/dist/components/mail/services/generators/index.js +20 -0
  261. package/dist/components/mail/services/generators/index.js.map +1 -0
  262. package/dist/components/mail/services/generators/numeric-code.d.ts +7 -0
  263. package/dist/components/mail/services/generators/numeric-code.d.ts.map +1 -0
  264. package/dist/components/mail/services/generators/numeric-code.js +20 -0
  265. package/dist/components/mail/services/generators/numeric-code.js.map +1 -0
  266. package/dist/components/mail/services/generators/random-token.d.ts +7 -0
  267. package/dist/components/mail/services/generators/random-token.d.ts.map +1 -0
  268. package/dist/components/mail/services/generators/random-token.js +18 -0
  269. package/dist/components/mail/services/generators/random-token.js.map +1 -0
  270. package/dist/components/mail/services/generators/verification-data.d.ts +9 -0
  271. package/dist/components/mail/services/generators/verification-data.d.ts.map +1 -0
  272. package/dist/components/mail/services/{generator.service.js → generators/verification-data.js} +10 -25
  273. package/dist/components/mail/services/generators/verification-data.js.map +1 -0
  274. package/dist/components/mail/services/index.d.ts +1 -1
  275. package/dist/components/mail/services/index.d.ts.map +1 -1
  276. package/dist/components/mail/services/index.js +1 -1
  277. package/dist/components/mail/services/index.js.map +1 -1
  278. package/dist/components/mail/utilities/address.utility.d.ts +9 -0
  279. package/dist/components/mail/utilities/address.utility.d.ts.map +1 -0
  280. package/dist/components/mail/utilities/address.utility.js +36 -0
  281. package/dist/components/mail/utilities/address.utility.js.map +1 -0
  282. package/dist/components/mail/utilities/index.d.ts +2 -0
  283. package/dist/components/mail/utilities/index.d.ts.map +1 -1
  284. package/dist/components/mail/utilities/index.js +2 -0
  285. package/dist/components/mail/utilities/index.js.map +1 -1
  286. package/dist/components/mail/utilities/mime.utility.d.ts +19 -0
  287. package/dist/components/mail/utilities/mime.utility.d.ts.map +1 -0
  288. package/dist/components/mail/utilities/mime.utility.js +412 -0
  289. package/dist/components/mail/utilities/mime.utility.js.map +1 -0
  290. package/dist/components/static-asset/common/commit-token.d.ts +23 -0
  291. package/dist/components/static-asset/common/commit-token.d.ts.map +1 -0
  292. package/dist/components/static-asset/common/commit-token.js +40 -0
  293. package/dist/components/static-asset/common/commit-token.js.map +1 -0
  294. package/dist/components/static-asset/common/constants.d.ts +13 -1
  295. package/dist/components/static-asset/common/constants.d.ts.map +1 -1
  296. package/dist/components/static-asset/common/constants.js +29 -2
  297. package/dist/components/static-asset/common/constants.js.map +1 -1
  298. package/dist/components/static-asset/common/errors.d.ts +34 -0
  299. package/dist/components/static-asset/common/errors.d.ts.map +1 -1
  300. package/dist/components/static-asset/common/errors.js +28 -0
  301. package/dist/components/static-asset/common/errors.js.map +1 -1
  302. package/dist/components/static-asset/common/index.d.ts +1 -0
  303. package/dist/components/static-asset/common/index.d.ts.map +1 -1
  304. package/dist/components/static-asset/common/index.js +1 -0
  305. package/dist/components/static-asset/common/index.js.map +1 -1
  306. package/dist/components/static-asset/common/keys.d.ts +1 -0
  307. package/dist/components/static-asset/common/keys.d.ts.map +1 -1
  308. package/dist/components/static-asset/common/keys.js +1 -0
  309. package/dist/components/static-asset/common/keys.js.map +1 -1
  310. package/dist/components/static-asset/common/types.d.ts +87 -30
  311. package/dist/components/static-asset/common/types.d.ts.map +1 -1
  312. package/dist/components/static-asset/component.d.ts +4 -1
  313. package/dist/components/static-asset/component.d.ts.map +1 -1
  314. package/dist/components/static-asset/component.js +19 -9
  315. package/dist/components/static-asset/component.js.map +1 -1
  316. package/dist/components/static-asset/controller/base.definition.d.ts +27 -554
  317. package/dist/components/static-asset/controller/base.definition.d.ts.map +1 -1
  318. package/dist/components/static-asset/controller/base.definition.js +250 -285
  319. package/dist/components/static-asset/controller/base.definition.js.map +1 -1
  320. package/dist/components/static-asset/controller/factory.d.ts +68 -6
  321. package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
  322. package/dist/components/static-asset/controller/factory.js +561 -138
  323. package/dist/components/static-asset/controller/factory.js.map +1 -1
  324. package/dist/components/static-asset/index.d.ts +1 -0
  325. package/dist/components/static-asset/index.d.ts.map +1 -1
  326. package/dist/components/static-asset/index.js +1 -0
  327. package/dist/components/static-asset/index.js.map +1 -1
  328. package/dist/components/static-asset/ingest.d.ts +58 -0
  329. package/dist/components/static-asset/ingest.d.ts.map +1 -0
  330. package/dist/components/static-asset/ingest.js +82 -0
  331. package/dist/components/static-asset/ingest.js.map +1 -0
  332. package/dist/components/static-asset/models/base.model.d.ts +44 -6
  333. package/dist/components/static-asset/models/base.model.d.ts.map +1 -1
  334. package/dist/components/static-asset/models/base.model.js +7 -1
  335. package/dist/components/static-asset/models/base.model.js.map +1 -1
  336. package/dist/index.d.ts +1 -1
  337. package/dist/index.d.ts.map +1 -1
  338. package/package.json +27 -23
  339. package/dist/base/applications/types.d.ts.map +0 -1
  340. package/dist/base/applications/types.js.map +0 -1
  341. package/dist/components/api-reference/ui-factory.d.ts +0 -21
  342. package/dist/components/api-reference/ui-factory.d.ts.map +0 -1
  343. package/dist/components/api-reference/ui-factory.js.map +0 -1
  344. package/dist/components/auth/authenticate/strategies/jwks.strategy.d.ts.map +0 -1
  345. package/dist/components/auth/authenticate/strategies/jwks.strategy.js.map +0 -1
  346. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +0 -121
  347. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +0 -1
  348. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +0 -1
  349. package/dist/components/auth/authorize/adapters/types.d.ts.map +0 -1
  350. package/dist/components/auth/authorize/adapters/types.js.map +0 -1
  351. package/dist/components/auth/authorize/enforcers/resource-role-manager.d.ts.map +0 -1
  352. package/dist/components/auth/authorize/enforcers/resource-role-manager.js.map +0 -1
  353. package/dist/components/mail/common/types.d.ts +0 -201
  354. package/dist/components/mail/common/types.d.ts.map +0 -1
  355. package/dist/components/mail/common/types.js +0 -10
  356. package/dist/components/mail/common/types.js.map +0 -1
  357. package/dist/components/mail/services/generator.service.d.ts +0 -14
  358. package/dist/components/mail/services/generator.service.d.ts.map +0 -1
  359. package/dist/components/mail/services/generator.service.js.map +0 -1
  360. /package/dist/base/applications/{types.js → common/types.js} +0 -0
  361. /package/dist/components/auth/authorize/adapters/{types.js → common/types.js} +0 -0
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MembershipRoleManager = void 0;
4
+ const base_1 = require("./base");
5
+ /** `g2` axis (`g2(r.sub, r.dom)`): membership holds when the user joined the request domain or any
6
+ * ancestor of it, walking the shared per-request domain-hierarchy overlay. Memberships are
7
+ * per-principal and rebuilt every request, so `clear()` wipes all. */
8
+ class MembershipRoleManager extends base_1.BaseRoleManager {
9
+ constructor(opts) {
10
+ super({ scope: MembershipRoleManager.name });
11
+ this.memberships = new Map();
12
+ this.overlay = opts.overlay;
13
+ }
14
+ async clear() {
15
+ this.memberships = new Map();
16
+ this.graphReported = false;
17
+ }
18
+ async addLink(user, domain) {
19
+ const existing = this.memberships.get(user);
20
+ if (existing) {
21
+ existing.add(domain);
22
+ }
23
+ else {
24
+ this.memberships.set(user, new Set([domain]));
25
+ }
26
+ }
27
+ async deleteLink(user, domain) {
28
+ this.memberships.get(user)?.delete(domain);
29
+ }
30
+ /** True when `name1` (user) joined `name2` (request domain) itself, or any ancestor of it. Walks UP from the request domain only - walking down from every joined domain would fan out over the whole subtree. */
31
+ syncedHasLink(name1, name2) {
32
+ this.reportGraphOnce(() => {
33
+ const { nodeCount, edgeCount } = MembershipRoleManager.overlayStats(this.overlay);
34
+ return {
35
+ message: 'membership role manager initialized | nodes: %d | edges: %d',
36
+ args: [nodeCount, edgeCount],
37
+ };
38
+ });
39
+ const joined = this.memberships.get(name1);
40
+ if (!joined || joined.size === 0) {
41
+ return false;
42
+ }
43
+ const ancestors = MembershipRoleManager.collectAncestors({
44
+ overlay: this.overlay,
45
+ node: name2,
46
+ });
47
+ for (const ancestor of ancestors) {
48
+ if (joined.has(ancestor)) {
49
+ return true;
50
+ }
51
+ }
52
+ return false;
53
+ }
54
+ /** Local membership state only, not the shared graph - correct for hasLink, incomplete for casbin's management API. */
55
+ async getRoles(name) {
56
+ return [...(this.memberships.get(name) ?? [])];
57
+ }
58
+ async getUsers(name) {
59
+ const users = [];
60
+ for (const [user, domains] of this.memberships) {
61
+ if (domains.has(name)) {
62
+ users.push(user);
63
+ }
64
+ }
65
+ return users;
66
+ }
67
+ }
68
+ exports.MembershipRoleManager = MembershipRoleManager;
69
+ //# sourceMappingURL=membership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/role-managers/membership.ts"],"names":[],"mappings":";;;AACA,iCAAyC;AAEzC;;sEAEsE;AACtE,MAAa,qBAAsB,SAAQ,sBAAe;IAUxD,YAAY,IAA4C;QACtD,KAAK,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;QANvC,gBAAW,GAAG,IAAI,GAAG,EAG1B,CAAC;QAIF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAc;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAAc;QAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,kNAAkN;IAClN,aAAa,CAAC,KAAa,EAAE,KAAa;QACxC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YACxB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClF,OAAO;gBACL,OAAO,EAAE,6DAA6D;gBACtE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;YACvD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uHAAuH;IACvH,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA7ED,sDA6EC"}
@@ -1,22 +1,16 @@
1
- import { BaseHelper } from '@venizia/ignis-helpers/core';
2
1
  import type { RoleManager } from 'casbin';
2
+ import { BaseRoleManager } from './base';
3
3
  /** Resource-axis (`g4`) role manager: `addMatchingFunc` would set `hasPattern` and disable DefaultRoleManager's O(1) fast path, so prefix ancestors are walked manually; `addLink` must stay idempotent because `buildRoleLinks` re-adds every edge once per request. */
4
- export declare class ResourceRoleManager extends BaseHelper implements RoleManager {
4
+ export declare class ResourceRoleManager extends BaseRoleManager implements RoleManager {
5
5
  private parents;
6
- private graphReported;
7
6
  constructor();
8
7
  clear(): Promise<void>;
9
8
  addLink(child: string, parent: string): Promise<void>;
10
9
  deleteLink(child: string, parent: string): Promise<void>;
11
10
  syncedHasLink(name1: string, name2: string): boolean;
12
- hasLink(name1: string, name2: string): Promise<boolean>;
13
11
  getRoles(name: string): Promise<string[]>;
14
12
  getUsers(name: string): Promise<string[]>;
15
- /** casbin calls this after buildRoleLinks purely as a debug hook; the resource graph is not logged. */
16
- printRoles(): Promise<void>;
17
- getDomains(): Promise<string[]>;
18
- getAllDomains(): Promise<string[]>;
19
13
  /** All stored prefix ancestors of a dotted code (`a.b.c` -> `a.b` -> `a`), not only the deepest, plus a literal stored `'*'` node - `objectMatch(anything, '*')` is always true, so a `g4` edge whose child is `'*'` must stay reachable from every request object. */
20
14
  private collectStoredAncestors;
21
15
  }
22
- //# sourceMappingURL=resource-role-manager.d.ts.map
16
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/role-managers/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,yQAAyQ;AACzQ,qBAAa,mBAAoB,SAAQ,eAAgB,YAAW,WAAW;IAC7E,OAAO,CAAC,OAAO,CAGX;;IAME,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA8C9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY/C,uQAAuQ;IACvQ,OAAO,CAAC,sBAAsB;CA0B/B"}
@@ -1,13 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResourceRoleManager = void 0;
4
- const core_1 = require("@venizia/ignis-helpers/core");
4
+ const base_1 = require("./base");
5
5
  /** Resource-axis (`g4`) role manager: `addMatchingFunc` would set `hasPattern` and disable DefaultRoleManager's O(1) fast path, so prefix ancestors are walked manually; `addLink` must stay idempotent because `buildRoleLinks` re-adds every edge once per request. */
6
- class ResourceRoleManager extends core_1.BaseHelper {
6
+ class ResourceRoleManager extends base_1.BaseRoleManager {
7
7
  constructor() {
8
8
  super({ scope: ResourceRoleManager.name });
9
9
  this.parents = new Map();
10
- this.graphReported = false;
11
10
  }
12
11
  async clear() {
13
12
  this.parents = new Map();
@@ -29,14 +28,14 @@ class ResourceRoleManager extends core_1.BaseHelper {
29
28
  this.parents.get(child)?.delete(parent);
30
29
  }
31
30
  syncedHasLink(name1, name2) {
32
- if (!this.graphReported) {
33
- this.graphReported = true;
31
+ this.reportGraphOnce(() => {
34
32
  const nodeCount = this.parents.size;
35
33
  const edgeCount = Array.from(this.parents.values()).reduce((sum, set) => sum + set.size, 0);
36
- this.logger
37
- .for(this.syncedHasLink.name)
38
- .debug('resource-role initialized | nodes: %d | edges: %d', nodeCount, edgeCount);
39
- }
34
+ return {
35
+ message: 'resource-role initialized | nodes: %d | edges: %d',
36
+ args: [nodeCount, edgeCount],
37
+ };
38
+ });
40
39
  if (name1 === name2) {
41
40
  return true;
42
41
  }
@@ -65,9 +64,6 @@ class ResourceRoleManager extends core_1.BaseHelper {
65
64
  }
66
65
  return false;
67
66
  }
68
- async hasLink(name1, name2) {
69
- return this.syncedHasLink(name1, name2);
70
- }
71
67
  async getRoles(name) {
72
68
  return [...(this.parents.get(name) ?? [])];
73
69
  }
@@ -80,14 +76,6 @@ class ResourceRoleManager extends core_1.BaseHelper {
80
76
  }
81
77
  return users;
82
78
  }
83
- /** casbin calls this after buildRoleLinks purely as a debug hook; the resource graph is not logged. */
84
- async printRoles() { }
85
- async getDomains() {
86
- return [];
87
- }
88
- async getAllDomains() {
89
- return [];
90
- }
91
79
  /** All stored prefix ancestors of a dotted code (`a.b.c` -> `a.b` -> `a`), not only the deepest, plus a literal stored `'*'` node - `objectMatch(anything, '*')` is always true, so a `g4` edge whose child is `'*'` must stay reachable from every request object. */
92
80
  collectStoredAncestors(opts) {
93
81
  const ancestors = [];
@@ -112,4 +100,4 @@ class ResourceRoleManager extends core_1.BaseHelper {
112
100
  }
113
101
  }
114
102
  exports.ResourceRoleManager = ResourceRoleManager;
115
- //# sourceMappingURL=resource-role-manager.js.map
103
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/role-managers/resource.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,60 @@
1
- import { integer, jsonb, text } from 'drizzle-orm/pg-core';
2
- export type TPolicyDefinitionOptions = {
1
+ import type { TAuthorizationDecision, TSubsetGrantMetadata } from '@venizia/ignis-kernel';
2
+ import { integer, text } from 'drizzle-orm/pg-core';
3
+ export type TPolicyDefinitionOptions<ExtraVariant extends string = never> = {
3
4
  idType?: 'string' | 'number';
5
+ /**
6
+ * App-only edge kinds stored in this same table alongside IGNIS's seven (e.g. `merchant_role`).
7
+ * `ScopedCasbinAdapter` never selects an undeclared variant - it is purely the consumer's data.
8
+ * Pass as an inline array literal; the `const` type parameter below infers the literal union
9
+ * from it without needing `as const`.
10
+ */
11
+ extraVariants?: ReadonlyArray<ExtraVariant>;
4
12
  };
5
- export type TPolicyDefinitionCommonColumns = {
6
- variant: ReturnType<typeof text>;
7
- subjectType: ReturnType<typeof text>;
8
- targetType: ReturnType<typeof text>;
9
- action: ReturnType<typeof text>;
10
- effect: ReturnType<typeof text>;
11
- domain: ReturnType<typeof text>;
12
- metadata: ReturnType<typeof jsonb>;
13
+ /** Extracts the app-declared extra variants from `Opts`, or `never` when none were declared. */
14
+ type TExtraPolicyVariantOf<Opts> = Opts extends {
15
+ extraVariants?: ReadonlyArray<infer ExtraVariant extends string>;
16
+ } ? ExtraVariant : never;
17
+ /** Column shape is inferred, never hand-declared, so it can never drift from the `$type<>()` narrowing below. */
18
+ declare const buildCommonPolicyDefinitionColumns: <ExtraVariant extends string = never, Metadata extends object = TSubsetGrantMetadata>() => {
19
+ metadata: import("drizzle-orm").$Type<import("drizzle-orm/pg-core").PgJsonbBuilderInitial<"metadata">, Metadata>;
20
+ variant: import("drizzle-orm").NotNull<import("drizzle-orm").$Type<import("drizzle-orm/pg-core").PgTextBuilderInitial<"variant", [string, ...string[]]>, "join_domain" | "assign_role" | "grant" | "role_inherits" | "domain_inherits" | "resource_inherits" | "action_inherits" | ExtraVariant>>;
21
+ subjectType: import("drizzle-orm").NotNull<import("drizzle-orm/pg-core").PgTextBuilderInitial<"subject_type", [string, ...string[]]>>;
22
+ targetType: import("drizzle-orm").NotNull<import("drizzle-orm/pg-core").PgTextBuilderInitial<"target_type", [string, ...string[]]>>;
23
+ domainType: import("drizzle-orm/pg-core").PgTextBuilderInitial<"domain_type", [string, ...string[]]>;
24
+ action: import("drizzle-orm/pg-core").PgTextBuilderInitial<"action", [string, ...string[]]>;
25
+ effect: import("drizzle-orm").$Type<import("drizzle-orm/pg-core").PgTextBuilderInitial<"effect", [string, ...string[]]>, TAuthorizationDecision>;
13
26
  };
14
- type TPolicyDefinitionColumnDef<Opts extends TPolicyDefinitionOptions | undefined = undefined> = Opts extends {
27
+ export type TPolicyDefinitionCommonColumns<ExtraVariant extends string = never, Metadata extends object = TSubsetGrantMetadata> = ReturnType<typeof buildCommonPolicyDefinitionColumns<ExtraVariant, Metadata>>;
28
+ type TPolicyDefinitionColumnDef<Opts extends TPolicyDefinitionOptions<string> | undefined = undefined, Metadata extends object = TSubsetGrantMetadata> = Opts extends {
15
29
  idType: 'string';
16
- } ? TPolicyDefinitionCommonColumns & {
30
+ } ? TPolicyDefinitionCommonColumns<TExtraPolicyVariantOf<Opts>, Metadata> & {
17
31
  subjectId: ReturnType<typeof text>;
18
32
  targetId: ReturnType<typeof text>;
19
- } : TPolicyDefinitionCommonColumns & {
33
+ domainId: ReturnType<typeof text>;
34
+ } : TPolicyDefinitionCommonColumns<TExtraPolicyVariantOf<Opts>, Metadata> & {
20
35
  subjectId: ReturnType<typeof integer>;
21
36
  targetId: ReturnType<typeof integer>;
37
+ domainId: ReturnType<typeof integer>;
22
38
  };
23
- export declare const extraPolicyDefinitionColumns: <Opts extends TPolicyDefinitionOptions | undefined>(opts?: Opts) => TPolicyDefinitionColumnDef<Opts>;
39
+ /**
40
+ * `Metadata` is a type parameter, not an `opts` field: unlike `extraVariants` there is no runtime
41
+ * value to infer from, so supplying it means spelling `Opts` too (no partial inference):
42
+ * `extraPolicyDefinitionColumns<{ idType: 'string' }, IMyMetadata>({ idType: 'string' })`.
43
+ * Keep `ops` in a custom shape if the app also issues subset grants - `customGrant` writes it.
44
+ */
45
+ export declare const extraPolicyDefinitionColumns: <const Opts extends TPolicyDefinitionOptions<string> | undefined = undefined, Metadata extends object = TSubsetGrantMetadata>(opts?: Opts) => TPolicyDefinitionColumnDef<Opts, Metadata>;
46
+ /**
47
+ * The three legal `(domain_type, domain_id)` pairs, as CHECK predicate TEXT for a migration - text,
48
+ * not a Drizzle `SQL`, because a column ref in a `sql` template renders schema-qualified, which a
49
+ * table-level CHECK rejects.
50
+ *
51
+ * The `IS NOT NULL` guard on the last branch looks redundant next to `NOT IN` and is not: a NULL
52
+ * `domain_type` makes `NOT IN` evaluate to NULL, and a CHECK rejects only on FALSE - without it an id
53
+ * with no type passes.
54
+ */
55
+ export declare const policyDefinitionDomainShapeCheck: (opts?: {
56
+ domainTypeColumn?: string;
57
+ domainIdColumn?: string;
58
+ }) => string;
24
59
  export {};
25
60
  //# sourceMappingURL=policy-definition.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-definition.model.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/models/entities/policy-definition.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACjC,WAAW,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;CACpC,CAAC;AAEF,KAAK,0BAA0B,CAAC,IAAI,SAAS,wBAAwB,GAAG,SAAS,GAAG,SAAS,IAC3F,IAAI,SAAS;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC7B,8BAA8B,GAAG;IAC/B,SAAS,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;CACnC,GACD,8BAA8B,GAAG;IAC/B,SAAS,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IACtC,QAAQ,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;CACtC,CAAC;AAER,eAAO,MAAM,4BAA4B,GAAI,IAAI,SAAS,wBAAwB,GAAG,SAAS,EAC5F,OAAO,IAAI,KACV,0BAA0B,CAAC,IAAI,CAoCjC,CAAC"}
1
+ {"version":3,"file":"policy-definition.model.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/models/entities/policy-definition.model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EAEtB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAS,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,wBAAwB,CAAC,YAAY,SAAS,MAAM,GAAG,KAAK,IAAI;IAC1E,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CAC7C,CAAC;AAEF,gGAAgG;AAChG,KAAK,qBAAqB,CAAC,IAAI,IAAI,IAAI,SAAS;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,YAAY,SAAS,MAAM,CAAC,CAAC;CAClE,GACG,YAAY,GACZ,KAAK,CAAC;AAEV,iHAAiH;AACjH,QAAA,MAAM,kCAAkC,GACtC,YAAY,SAAS,MAAM,GAAG,KAAK,EACnC,QAAQ,SAAS,MAAM,GAAG,oBAAoB;;;;;;;;CAa9C,CAAC;AAEH,MAAM,MAAM,8BAA8B,CACxC,YAAY,SAAS,MAAM,GAAG,KAAK,EACnC,QAAQ,SAAS,MAAM,GAAG,oBAAoB,IAC5C,UAAU,CAAC,OAAO,kCAAkC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElF,KAAK,0BAA0B,CAC7B,IAAI,SAAS,wBAAwB,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,EACrE,QAAQ,SAAS,MAAM,GAAG,oBAAoB,IAC5C,IAAI,SAAS;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACjC,8BAA8B,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG;IACtE,SAAS,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IAClC,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;CACnC,GACD,8BAA8B,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG;IACtE,SAAS,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IACtC,QAAQ,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IACrC,QAAQ,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;CACtC,CAAC;AAEN;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACvC,KAAK,CAAC,IAAI,SAAS,wBAAwB,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,EAC3E,QAAQ,SAAS,MAAM,GAAG,oBAAoB,EAE9C,OAAO,IAAI,KACV,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CA4B3C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,GAAI,OAAO;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,MAaH,CAAC"}
@@ -1,26 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extraPolicyDefinitionColumns = void 0;
3
+ exports.policyDefinitionDomainShapeCheck = exports.extraPolicyDefinitionColumns = void 0;
4
4
  const core_1 = require("@venizia/ignis-helpers/core");
5
+ const ignis_kernel_1 = require("@venizia/ignis-kernel");
5
6
  const pg_core_1 = require("drizzle-orm/pg-core");
7
+ /** Column shape is inferred, never hand-declared, so it can never drift from the `$type<>()` narrowing below. */
8
+ const buildCommonPolicyDefinitionColumns = () => ({
9
+ metadata: (0, pg_core_1.jsonb)('metadata').$type(),
10
+ variant: (0, pg_core_1.text)('variant').$type().notNull(),
11
+ subjectType: (0, pg_core_1.text)('subject_type').notNull(),
12
+ targetType: (0, pg_core_1.text)('target_type').notNull(),
13
+ // `null` IS `ANY_MEMBER`, not "unknown"; the literal is refused by `policyDefinitionDomainShapeCheck`.
14
+ domainType: (0, pg_core_1.text)('domain_type'),
15
+ action: (0, pg_core_1.text)('action'),
16
+ effect: (0, pg_core_1.text)('effect').$type(),
17
+ });
18
+ /**
19
+ * `Metadata` is a type parameter, not an `opts` field: unlike `extraVariants` there is no runtime
20
+ * value to infer from, so supplying it means spelling `Opts` too (no partial inference):
21
+ * `extraPolicyDefinitionColumns<{ idType: 'string' }, IMyMetadata>({ idType: 'string' })`.
22
+ * Keep `ops` in a custom shape if the app also issues subset grants - `customGrant` writes it.
23
+ */
6
24
  const extraPolicyDefinitionColumns = (opts) => {
7
25
  const { idType = 'number' } = opts ?? {};
8
- const common = {
9
- variant: (0, pg_core_1.text)('variant').notNull(),
10
- subjectType: (0, pg_core_1.text)('subject_type').notNull(),
11
- targetType: (0, pg_core_1.text)('target_type').notNull(),
12
- action: (0, pg_core_1.text)('action'),
13
- effect: (0, pg_core_1.text)('effect'),
14
- domain: (0, pg_core_1.text)('domain'),
15
- // Nullable: only subset grants populate it, and a consumer may map its own column instead.
16
- metadata: (0, pg_core_1.jsonb)('metadata'),
17
- };
26
+ const common = buildCommonPolicyDefinitionColumns();
18
27
  switch (idType) {
19
28
  case 'number': {
20
29
  return {
21
30
  ...common,
22
31
  subjectId: (0, pg_core_1.integer)('subject_id').notNull(),
23
32
  targetId: (0, pg_core_1.integer)('target_id').notNull(),
33
+ domainId: (0, pg_core_1.integer)('domain_id'),
24
34
  };
25
35
  }
26
36
  case 'string': {
@@ -28,6 +38,7 @@ const extraPolicyDefinitionColumns = (opts) => {
28
38
  ...common,
29
39
  subjectId: (0, pg_core_1.text)('subject_id').notNull(),
30
40
  targetId: (0, pg_core_1.text)('target_id').notNull(),
41
+ domainId: (0, pg_core_1.text)('domain_id'),
31
42
  };
32
43
  }
33
44
  default: {
@@ -38,4 +49,27 @@ const extraPolicyDefinitionColumns = (opts) => {
38
49
  }
39
50
  };
40
51
  exports.extraPolicyDefinitionColumns = extraPolicyDefinitionColumns;
52
+ /**
53
+ * The three legal `(domain_type, domain_id)` pairs, as CHECK predicate TEXT for a migration - text,
54
+ * not a Drizzle `SQL`, because a column ref in a `sql` template renders schema-qualified, which a
55
+ * table-level CHECK rejects.
56
+ *
57
+ * The `IS NOT NULL` guard on the last branch looks redundant next to `NOT IN` and is not: a NULL
58
+ * `domain_type` makes `NOT IN` evaluate to NULL, and a CHECK rejects only on FALSE - without it an id
59
+ * with no type passes.
60
+ */
61
+ const policyDefinitionDomainShapeCheck = (opts) => {
62
+ const { domainTypeColumn = 'domain_type', domainIdColumn = 'domain_id' } = opts ?? {};
63
+ const { ANY_MEMBER, SYSTEM_WIDE } = ignis_kernel_1.AuthorizationDomainScopes;
64
+ return [
65
+ `(${domainTypeColumn} IS NULL AND ${domainIdColumn} IS NULL)`,
66
+ `OR (${domainTypeColumn} = '${SYSTEM_WIDE}' AND ${domainIdColumn} IS NULL)`,
67
+ `OR (
68
+ ${domainTypeColumn} IS NOT NULL
69
+ AND ${domainTypeColumn} NOT IN ('${ANY_MEMBER}', '${SYSTEM_WIDE}')
70
+ AND ${domainIdColumn} IS NOT NULL
71
+ )`,
72
+ ].join('\n');
73
+ };
74
+ exports.policyDefinitionDomainShapeCheck = policyDefinitionDomainShapeCheck;
41
75
  //# sourceMappingURL=policy-definition.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-definition.model.js","sourceRoot":"","sources":["../../../../../src/components/auth/models/entities/policy-definition.model.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AACvD,iDAA2D;AA2BpD,MAAM,4BAA4B,GAAG,CAC1C,IAAW,EACuB,EAAE;IACpC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,IAAA,cAAI,EAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QAClC,WAAW,EAAE,IAAA,cAAI,EAAC,cAAc,CAAC,CAAC,OAAO,EAAE;QAC3C,UAAU,EAAE,IAAA,cAAI,EAAC,aAAa,CAAC,CAAC,OAAO,EAAE;QACzC,MAAM,EAAE,IAAA,cAAI,EAAC,QAAQ,CAAC;QACtB,MAAM,EAAE,IAAA,cAAI,EAAC,QAAQ,CAAC;QACtB,MAAM,EAAE,IAAA,cAAI,EAAC,QAAQ,CAAC;QAEtB,2FAA2F;QAC3F,QAAQ,EAAE,IAAA,eAAK,EAAC,UAAU,CAAC;KAC5B,CAAC;IAEF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO;gBACL,GAAG,MAAM;gBACT,SAAS,EAAE,IAAA,iBAAO,EAAC,YAAY,CAAC,CAAC,OAAO,EAAE;gBAC1C,QAAQ,EAAE,IAAA,iBAAO,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;aACL,CAAC;QACxC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO;gBACL,GAAG,MAAM;gBACT,SAAS,EAAE,IAAA,cAAI,EAAC,YAAY,CAAC,CAAC,OAAO,EAAE;gBACvC,QAAQ,EAAE,IAAA,cAAI,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;aACF,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAA,eAAQ,EAAC;gBACb,OAAO,EAAE,2DAA2D,MAAM,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAtCW,QAAA,4BAA4B,gCAsCvC"}
1
+ {"version":3,"file":"policy-definition.model.js","sourceRoot":"","sources":["../../../../../src/components/auth/models/entities/policy-definition.model.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAMvD,wDAAkE;AAClE,iDAA2D;AAoB3D,iHAAiH;AACjH,MAAM,kCAAkC,GAAG,GAGvC,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,IAAA,eAAK,EAAC,UAAU,CAAC,CAAC,KAAK,EAAY;IAC7C,OAAO,EAAE,IAAA,cAAI,EAAC,SAAS,CAAC,CAAC,KAAK,EAA8C,CAAC,OAAO,EAAE;IAEtF,WAAW,EAAE,IAAA,cAAI,EAAC,cAAc,CAAC,CAAC,OAAO,EAAE;IAC3C,UAAU,EAAE,IAAA,cAAI,EAAC,aAAa,CAAC,CAAC,OAAO,EAAE;IAEzC,uGAAuG;IACvG,UAAU,EAAE,IAAA,cAAI,EAAC,aAAa,CAAC;IAE/B,MAAM,EAAE,IAAA,cAAI,EAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,IAAA,cAAI,EAAC,QAAQ,CAAC,CAAC,KAAK,EAA0B;CACvD,CAAC,CAAC;AAsBH;;;;;GAKG;AACI,MAAM,4BAA4B,GAAG,CAI1C,IAAW,EACiC,EAAE;IAC9C,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,kCAAkC,EAAyC,CAAC;IAE3F,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO;gBACL,GAAG,MAAM;gBACT,SAAS,EAAE,IAAA,iBAAO,EAAC,YAAY,CAAC,CAAC,OAAO,EAAE;gBAC1C,QAAQ,EAAE,IAAA,iBAAO,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;gBACxC,QAAQ,EAAE,IAAA,iBAAO,EAAC,WAAW,CAAC;aACe,CAAC;QAClD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO;gBACL,GAAG,MAAM;gBACT,SAAS,EAAE,IAAA,cAAI,EAAC,YAAY,CAAC,CAAC,OAAO,EAAE;gBACvC,QAAQ,EAAE,IAAA,cAAI,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;gBACrC,QAAQ,EAAE,IAAA,cAAI,EAAC,WAAW,CAAC;aACkB,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAA,eAAQ,EAAC;gBACb,OAAO,EAAE,2DAA2D,MAAM,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAjCW,QAAA,4BAA4B,gCAiCvC;AAEF;;;;;;;;GAQG;AACI,MAAM,gCAAgC,GAAG,CAAC,IAGhD,EAAU,EAAE;IACX,MAAM,EAAE,gBAAgB,GAAG,aAAa,EAAE,cAAc,GAAG,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IACtF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,wCAAyB,CAAC;IAE9D,OAAO;QACL,IAAI,gBAAgB,gBAAgB,cAAc,WAAW;QAC7D,OAAO,gBAAgB,OAAO,WAAW,SAAS,cAAc,WAAW;QAC3E;QACI,gBAAgB;YACZ,gBAAgB,aAAa,UAAU,OAAO,WAAW;YACzD,cAAc;MACpB;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC;AAhBW,QAAA,gCAAgC,oCAgB3C"}
@@ -10,7 +10,7 @@ export declare const extraUserColumns: (opts?: {
10
10
  name: string;
11
11
  dataType: "custom";
12
12
  columnType: "PgCustomColumn";
13
- data: string;
13
+ data: string | import("@venizia/ignis-kernel").TIsoTimestamp;
14
14
  driverParam: string;
15
15
  enumValues: undefined;
16
16
  }>;
@@ -18,7 +18,7 @@ export declare const extraUserColumns: (opts?: {
18
18
  name: string;
19
19
  dataType: "custom";
20
20
  columnType: "PgCustomColumn";
21
- data: string;
21
+ data: string | import("@venizia/ignis-kernel").TIsoTimestamp;
22
22
  driverParam: string;
23
23
  enumValues: undefined;
24
24
  }>;
@@ -0,0 +1,5 @@
1
+ export declare class HealthCheckHeaders {
2
+ /** Where a gated stats request carries its key; lowercase because Hono normalises header names. */
3
+ static readonly SECRET_KEY = "x-health-key";
4
+ }
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/constants.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B,mGAAmG;IACnG,MAAM,CAAC,QAAQ,CAAC,UAAU,kBAAkB;CAC7C"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HealthCheckHeaders = void 0;
4
+ class HealthCheckHeaders {
5
+ /** Where a gated stats request carries its key; lowercase because Hono normalises header names. */
6
+ static { this.SECRET_KEY = 'x-health-key'; }
7
+ }
8
+ exports.HealthCheckHeaders = HealthCheckHeaders;
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;IAC7B,mGAAmG;aACnF,eAAU,GAAG,cAAc,CAAC;;AAF9C,gDAGC"}
@@ -1,3 +1,4 @@
1
+ export * from './constants';
1
2
  export * from './keys';
2
3
  export * from './rest-paths';
3
4
  export * from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
17
18
  __exportStar(require("./keys"), exports);
18
19
  __exportStar(require("./rest-paths"), exports);
19
20
  __exportStar(require("./types"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB"}
@@ -1,4 +1,6 @@
1
1
  export declare class HealthCheckBindingKeys {
2
2
  static readonly HEALTH_CHECK_OPTIONS = "@app/health-check/options";
3
+ /** The component resolves `getAppInfo()` once (it is async) and binds the result for the controller. */
4
+ static readonly APPLICATION_INFO = "@app/health-check/application-info";
3
5
  }
4
6
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/keys.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAsB;IACjC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,+BAA+B;CACpE"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/keys.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAsB;IACjC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,+BAA+B;IACnE,wGAAwG;IACxG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,wCAAwC;CACzE"}
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HealthCheckBindingKeys = void 0;
4
4
  class HealthCheckBindingKeys {
5
5
  static { this.HEALTH_CHECK_OPTIONS = '@app/health-check/options'; }
6
+ /** The component resolves `getAppInfo()` once (it is async) and binds the result for the controller. */
7
+ static { this.APPLICATION_INFO = '@app/health-check/application-info'; }
6
8
  }
7
9
  exports.HealthCheckBindingKeys = HealthCheckBindingKeys;
8
10
  //# sourceMappingURL=keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/keys.ts"],"names":[],"mappings":";;;AAAA,MAAa,sBAAsB;aACjB,yBAAoB,GAAG,2BAA2B,CAAC;;AADrE,wDAEC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/keys.ts"],"names":[],"mappings":";;;AAAA,MAAa,sBAAsB;aACjB,yBAAoB,GAAG,2BAA2B,CAAC;IACnE,wGAAwG;aACxF,qBAAgB,GAAG,oCAAoC,CAAC;;AAH1E,wDAIC"}
@@ -1,5 +1,6 @@
1
1
  export declare class HealthCheckRestPaths {
2
2
  static readonly ROOT = "/";
3
3
  static readonly PING = "/ping";
4
+ static readonly STATS = "/stats";
4
5
  }
5
6
  //# sourceMappingURL=rest-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-paths.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/rest-paths.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW;CAChC"}
1
+ {"version":3,"file":"rest-paths.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/rest-paths.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW;IAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY;CAClC"}
@@ -4,6 +4,7 @@ exports.HealthCheckRestPaths = void 0;
4
4
  class HealthCheckRestPaths {
5
5
  static { this.ROOT = '/'; }
6
6
  static { this.PING = '/ping'; }
7
+ static { this.STATS = '/stats'; }
7
8
  }
8
9
  exports.HealthCheckRestPaths = HealthCheckRestPaths;
9
10
  //# sourceMappingURL=rest-paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-paths.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/rest-paths.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;aACf,SAAI,GAAG,GAAG,CAAC;aACX,SAAI,GAAG,OAAO,CAAC;;AAFjC,oDAGC"}
1
+ {"version":3,"file":"rest-paths.js","sourceRoot":"","sources":["../../../../src/components/health-check/common/rest-paths.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;aACf,SAAI,GAAG,GAAG,CAAC;aACX,SAAI,GAAG,OAAO,CAAC;aACf,UAAK,GAAG,QAAQ,CAAC;;AAHnC,oDAIC"}
@@ -1,7 +1,29 @@
1
+ import type { IBuildInfo } from '@venizia/ignis-helpers/core';
1
2
  export interface IHealthCheckOptions {
2
3
  /** Partially-filled bindings are accepted; every missing field falls back to its default. */
3
4
  restOptions?: {
4
5
  path?: string;
5
6
  };
7
+ /**
8
+ * `GET <path>/stats`: build stamp, process and memory. The runtime and version it reports are
9
+ * exactly what an attacker needs to pick an exploit, so the default is CLOSED on every host that
10
+ * is not provably a development one.
11
+ */
12
+ stats?: {
13
+ /**
14
+ * Default: open only when `NODE_ENV` names a development environment
15
+ * (`Environment.DEVELOPMENT_ENVS`). `staging`, `uat`, `production`, an unrecognised name and an
16
+ * unset `NODE_ENV` all keep the route closed.
17
+ */
18
+ enable?: boolean;
19
+ /**
20
+ * When set, the route answers only for a request carrying this value in `X-Health-Key`, and a
21
+ * refusal is indistinguishable from an unmounted route. A blank value fails closed.
22
+ * Without the field the route is open to anything that can reach the port.
23
+ */
24
+ secretKey?: string;
25
+ /** Wins over {@link BuildInfoRegistry}; a host that stamps its own build passes it here. */
26
+ buildInfo?: IBuildInfo;
27
+ };
6
28
  }
7
29
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,6FAA6F;IAC7F,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/health-check/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,6FAA6F;IAC7F,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN;;;;WAIG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,4FAA4F;QAC5F,SAAS,CAAC,EAAE,UAAU,CAAC;KACxB,CAAC;CACH"}
@@ -1,9 +1,15 @@
1
1
  import { BaseApplication } from '../../base/applications';
2
2
  import { BaseComponent } from '@venizia/ignis-kernel';
3
- import { ValueOrPromise } from '@venizia/ignis-helpers/common';
4
- export declare class HealthCheckComponent extends BaseComponent {
3
+ import { type IHealthCheckOptions } from './common';
4
+ export declare class HealthCheckComponent extends BaseComponent<IHealthCheckOptions> {
5
5
  private application;
6
6
  constructor(application: BaseApplication);
7
- binding(): ValueOrPromise<void>;
7
+ /**
8
+ * `application.component(HealthCheckComponent, { options })` lands here. Options given at the
9
+ * call site are the most explicit statement of intent, so they take the binding over anything
10
+ * bound earlier; `initDefaultBindings` then finds the key taken and leaves the default aside.
11
+ */
12
+ configure(opts?: IHealthCheckOptions): Promise<void>;
13
+ binding(): Promise<void>;
8
14
  }
9
15
  //# sourceMappingURL=component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/health-check/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAU/D,qBAAa,oBAAqB,SAAQ,aAAa;IAEC,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAajF,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC;CAYzC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/health-check/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAY5E,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,mBAAmB,CAAC;IAEpB,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAa1F;;;;OAIG;IACY,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAmCxC"}
@@ -20,6 +20,8 @@ const metadata_1 = require("../../base/metadata");
20
20
  const ignis_kernel_2 = require("@venizia/ignis-kernel");
21
21
  const common_1 = require("./common");
22
22
  const controller_1 = require("./controller");
23
+ const reporter_1 = require("./reporter");
24
+ const ignis_helpers_1 = require("@venizia/ignis-helpers");
23
25
  const ignis_kernel_3 = require("@venizia/ignis-kernel");
24
26
  const DEFAULT_REST_PATH = '/health';
25
27
  const DEFAULT_OPTIONS = {
@@ -38,13 +40,48 @@ let HealthCheckComponent = HealthCheckComponent_1 = class HealthCheckComponent e
38
40
  });
39
41
  this.application = application;
40
42
  }
41
- binding() {
43
+ /**
44
+ * `application.component(HealthCheckComponent, { options })` lands here. Options given at the
45
+ * call site are the most explicit statement of intent, so they take the binding over anything
46
+ * bound earlier; `initDefaultBindings` then finds the key taken and leaves the default aside.
47
+ */
48
+ async configure(opts) {
49
+ // The base short-circuits a second call; binding before that check would swap the options
50
+ // under routes that were already mounted from the first ones.
51
+ if (this.isConfigured) {
52
+ return;
53
+ }
54
+ if (opts !== undefined) {
55
+ this.application
56
+ .bind({ key: common_1.HealthCheckBindingKeys.HEALTH_CHECK_OPTIONS })
57
+ .toValue(opts);
58
+ }
59
+ await super.configure(opts);
60
+ }
61
+ async binding() {
42
62
  const healthOptions = this.application.get({
43
63
  key: common_1.HealthCheckBindingKeys.HEALTH_CHECK_OPTIONS,
44
64
  isOptional: true,
45
65
  });
46
66
  // A partially filled options binding (env/config driven) must not take the app down at boot.
47
67
  const path = healthOptions?.restOptions?.path ?? DEFAULT_REST_PATH;
68
+ // Legal, occasionally correct, and silent until now: `stats.enable: true` bypasses the
69
+ // environment gate, so the same code that opened the route for a local run opens it in
70
+ // production. Warn rather than refuse - only the operator knows whether the port is reachable.
71
+ if (healthOptions && reporter_1.HealthCheckReporter.isStatsUnguarded({ options: healthOptions })) {
72
+ this.logger
73
+ .for(this.binding.name)
74
+ .warn('GET %s/stats is ENABLED with no secretKey on env "%s" - build stamp, runtime version and memory are readable by anything that reaches this port. Set stats.secretKey, or drop stats.enable and let the environment decide.', path, ignis_helpers_1.Environment.ambient ?? 'unset');
75
+ }
76
+ // `getAppInfo()` is async while the container builds the controller synchronously, so the
77
+ // resolved value is bound here rather than resolved inside the controller.
78
+ this.application
79
+ .bind({ key: common_1.HealthCheckBindingKeys.APPLICATION_INFO })
80
+ .toValue(await this.application.getAppInfo());
81
+ // The gate and the app identity are per container, but `@controller` writes the PATH onto this
82
+ // one shared class in the process-wide MetadataRegistry, and `RestComponent` reads it back at
83
+ // step 8. Two applications booted one after another are safe; two booted CONCURRENTLY with
84
+ // different `restOptions.path` would race here, and nothing in this component prevents that.
48
85
  Reflect.decorate([(0, metadata_1.controller)({ path })], controller_1.HealthCheckController);
49
86
  this.application.controller(controller_1.HealthCheckController);
50
87
  }