@venizia/ignis 0.2.0-3 → 0.2.0-31

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 (341) 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 +18 -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 +72 -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/constants.d.ts +9 -1
  291. package/dist/components/static-asset/common/constants.d.ts.map +1 -1
  292. package/dist/components/static-asset/common/constants.js +25 -2
  293. package/dist/components/static-asset/common/constants.js.map +1 -1
  294. package/dist/components/static-asset/common/types.d.ts +28 -8
  295. package/dist/components/static-asset/common/types.d.ts.map +1 -1
  296. package/dist/components/static-asset/component.d.ts.map +1 -1
  297. package/dist/components/static-asset/component.js +12 -6
  298. package/dist/components/static-asset/component.js.map +1 -1
  299. package/dist/components/static-asset/controller/base.definition.d.ts +25 -554
  300. package/dist/components/static-asset/controller/base.definition.d.ts.map +1 -1
  301. package/dist/components/static-asset/controller/base.definition.js +205 -291
  302. package/dist/components/static-asset/controller/base.definition.js.map +1 -1
  303. package/dist/components/static-asset/controller/factory.d.ts +61 -5
  304. package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
  305. package/dist/components/static-asset/controller/factory.js +282 -109
  306. package/dist/components/static-asset/controller/factory.js.map +1 -1
  307. package/dist/components/static-asset/index.d.ts +1 -0
  308. package/dist/components/static-asset/index.d.ts.map +1 -1
  309. package/dist/components/static-asset/index.js +1 -0
  310. package/dist/components/static-asset/index.js.map +1 -1
  311. package/dist/components/static-asset/ingest.d.ts +58 -0
  312. package/dist/components/static-asset/ingest.d.ts.map +1 -0
  313. package/dist/components/static-asset/ingest.js +82 -0
  314. package/dist/components/static-asset/ingest.js.map +1 -0
  315. package/dist/components/static-asset/models/base.model.d.ts +4 -4
  316. package/dist/index.d.ts +1 -1
  317. package/dist/index.d.ts.map +1 -1
  318. package/package.json +27 -23
  319. package/dist/base/applications/types.d.ts.map +0 -1
  320. package/dist/base/applications/types.js.map +0 -1
  321. package/dist/components/api-reference/ui-factory.d.ts +0 -21
  322. package/dist/components/api-reference/ui-factory.d.ts.map +0 -1
  323. package/dist/components/api-reference/ui-factory.js.map +0 -1
  324. package/dist/components/auth/authenticate/strategies/jwks.strategy.d.ts.map +0 -1
  325. package/dist/components/auth/authenticate/strategies/jwks.strategy.js.map +0 -1
  326. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +0 -121
  327. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +0 -1
  328. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +0 -1
  329. package/dist/components/auth/authorize/adapters/types.d.ts.map +0 -1
  330. package/dist/components/auth/authorize/adapters/types.js.map +0 -1
  331. package/dist/components/auth/authorize/enforcers/resource-role-manager.d.ts.map +0 -1
  332. package/dist/components/auth/authorize/enforcers/resource-role-manager.js.map +0 -1
  333. package/dist/components/mail/common/types.d.ts +0 -201
  334. package/dist/components/mail/common/types.d.ts.map +0 -1
  335. package/dist/components/mail/common/types.js +0 -10
  336. package/dist/components/mail/common/types.js.map +0 -1
  337. package/dist/components/mail/services/generator.service.d.ts +0 -14
  338. package/dist/components/mail/services/generator.service.d.ts.map +0 -1
  339. package/dist/components/mail/services/generator.service.js.map +0 -1
  340. /package/dist/base/applications/{types.js → common/types.js} +0 -0
  341. /package/dist/components/auth/authorize/adapters/{types.js → common/types.js} +0 -0
@@ -0,0 +1,412 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatAddressHeader = formatAddressHeader;
4
+ exports.buildRawMimeMessage = buildRawMimeMessage;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const promises_1 = require("node:fs/promises");
7
+ const core_1 = require("@venizia/ignis-helpers/core");
8
+ const common_1 = require("../common");
9
+ const address_utility_1 = require("./address.utility");
10
+ const CRLF = '\r\n';
11
+ const BASE64_LINE_LENGTH = 76;
12
+ /** RFC 5322 recommends folding well under its own 998-byte hard limit; 78 matches common MTA
13
+ * practice. This is a *soft* preferred width, not a hard requirement - {@link foldHeaderLine}
14
+ * only forces a line break past it when a natural whitespace break point exists nearby. */
15
+ const MAX_HEADER_LINE_LENGTH = 78;
16
+ /** The real hard requirement: SES rejects any raw-message physical line at or over 1000 bytes.
17
+ * A 10-byte margin below that, and comfortably under RFC 5322's own 998-octet hard limit. Only
18
+ * an unbroken token that would itself cross this line forces {@link foldHeaderLine}'s
19
+ * content-altering hard-wrap fallback - below it, one long line is safer than corrupting an
20
+ * atomic value (a single very long address, an unbroken encoded-word) by splitting it. */
21
+ const MAX_HEADER_HARD_LIMIT = 990;
22
+ /** RFC 2047 caps one encoded-word (`=?charset?B?...?=` included) at 75 characters. */
23
+ const ENCODED_WORD_MAX_LENGTH = 75;
24
+ function isAscii(value) {
25
+ for (let index = 0; index < value.length; index++) {
26
+ if (value.charCodeAt(index) > 127) {
27
+ return false;
28
+ }
29
+ }
30
+ return true;
31
+ }
32
+ /**
33
+ * RFC 2047 §5(3) requires each encoded-word to carry whole characters - a multi-byte UTF-8
34
+ * sequence split across two encoded-words decodes to mojibake or invalid UTF-8 on either side of
35
+ * the cut. `bytesPerChunk` is a fixed byte budget, not a character-aligned one, so after slicing
36
+ * at that budget we walk the boundary back over any UTF-8 continuation bytes (`10xxxxxx`, i.e.
37
+ * `byte & 0xC0 === 0x80`) until it lands on the leading byte of a character. `bytesPerChunk` is
38
+ * always far larger than the longest UTF-8 sequence (4 bytes), so this walk-back can never
39
+ * consume the whole chunk. Words are joined with a single space - the required separator between
40
+ * adjacent encoded-words, and also a valid header-folding point.
41
+ */
42
+ function encodeWord(text) {
43
+ const prefix = '=?UTF-8?B?';
44
+ const suffix = '?=';
45
+ const maxPayloadChars = ENCODED_WORD_MAX_LENGTH - prefix.length - suffix.length;
46
+ const bytesPerChunk = Math.floor(maxPayloadChars / 4) * 3;
47
+ const bytes = Buffer.from(text, 'utf-8');
48
+ const words = [];
49
+ let offset = 0;
50
+ while (offset < bytes.length) {
51
+ let end = Math.min(offset + bytesPerChunk, bytes.length);
52
+ while (end < bytes.length && (bytes[end] & 0xc0) === 0x80) {
53
+ end--;
54
+ }
55
+ const chunk = bytes.subarray(offset, end);
56
+ words.push(`${prefix}${chunk.toString('base64')}${suffix}`);
57
+ offset = end;
58
+ }
59
+ return words.join(' ');
60
+ }
61
+ /** Only non-ASCII values pay for RFC 2047 encoding, so a plain-English subject or custom header
62
+ * stays byte-for-byte readable. */
63
+ function encodeHeaderValue(value) {
64
+ return isAscii(value) ? value : encodeWord(value);
65
+ }
66
+ /**
67
+ * Encodes only the *display-name* portion of `"Name" <addr@x.com>` (or bare `Name <addr@x.com>`).
68
+ * The `<addr-spec>` must stay 7-bit ASCII per RFC 5321/5322 and per the SES raw-message
69
+ * requirements - only the free-text name may become an RFC 2047 encoded-word. A bare address with
70
+ * no display name is returned unchanged.
71
+ */
72
+ function encodeAddress(address) {
73
+ const match = /^(.*)<([^<>]+)>\s*$/.exec(address);
74
+ if (!match) {
75
+ return address;
76
+ }
77
+ const [, rawName, addr] = match;
78
+ const name = rawName.trim().replace(/^"|"$/g, '');
79
+ if (name.length === 0 || isAscii(name)) {
80
+ return rawName.trim().length > 0 ? `${rawName.trim()} <${addr}>` : `<${addr}>`;
81
+ }
82
+ return `${encodeWord(name)} <${addr}>`;
83
+ }
84
+ /** Formats a `to`/`cc`/`from`/`replyTo` field as one RFC 5322 address list: splits a
85
+ * comma-separated string or array into individual mailboxes, RFC 2047-encodes each display name,
86
+ * and rejoins with `, ` - the same shape whether the caller passed a string or an array. */
87
+ function formatAddressHeader(value) {
88
+ return (0, address_utility_1.splitAddressList)(value).map(encodeAddress).join(', ');
89
+ }
90
+ /**
91
+ * RFC 5322 §2.2.3 header folding: inserting CRLF immediately before an existing whitespace
92
+ * character splits one logical header value across physical lines without changing its content
93
+ * (the folded whitespace is still there, just after a line break). SES enforces a 1000-byte
94
+ * ceiling per raw-message line; folding at {@link MAX_HEADER_LINE_LENGTH} keeps arbitrarily long
95
+ * recipient lists, subjects, or encoded display names deliverable regardless of how many
96
+ * addresses or how much non-ASCII text a caller supplies - purely by adding more physical
97
+ * lines, never by dropping or truncating anything (verified: rejoining every folded line always
98
+ * reproduces the original value exactly).
99
+ *
100
+ * The one value-altering fallback is deliberately gated on the *hard* limit, not the soft one:
101
+ * an unbroken token (a single very long address, an encoded-word with no adjacent break) that
102
+ * fits under {@link MAX_HEADER_HARD_LIMIT} is left on one long physical line rather than
103
+ * force-broken at the soft width - forcing a break through the middle of an atomic token (an
104
+ * email address has no internal whitespace) would insert a space that was never there,
105
+ * corrupting it. Only a token that would itself violate the real transport limit gets the
106
+ * content-altering hard-wrap - a case that essentially never occurs with real-world input.
107
+ */
108
+ function foldHeaderLine(line) {
109
+ const lines = [];
110
+ let remaining = line;
111
+ while (remaining.length > MAX_HEADER_LINE_LENGTH) {
112
+ let breakAt = remaining.lastIndexOf(' ', MAX_HEADER_LINE_LENGTH);
113
+ if (breakAt <= 0) {
114
+ // No break within the soft width - look further ahead instead of forcing one through an
115
+ // atomic token. Still bounded by the hard limit, so the physical line this produces can
116
+ // never violate the real transport constraint.
117
+ const nextBreak = remaining.indexOf(' ', MAX_HEADER_LINE_LENGTH);
118
+ breakAt = nextBreak > 0 && nextBreak <= MAX_HEADER_HARD_LIMIT ? nextBreak : -1;
119
+ }
120
+ if (breakAt > 0) {
121
+ lines.push(remaining.slice(0, breakAt));
122
+ remaining = remaining.slice(breakAt);
123
+ continue;
124
+ }
125
+ if (remaining.length <= MAX_HEADER_HARD_LIMIT) {
126
+ break;
127
+ }
128
+ // Truly no natural break within the hard limit - an unbroken token that would itself
129
+ // violate the transport line cap. This is the only path that can alter the value.
130
+ lines.push(remaining.slice(0, MAX_HEADER_HARD_LIMIT));
131
+ remaining = ` ${remaining.slice(MAX_HEADER_HARD_LIMIT)}`;
132
+ }
133
+ lines.push(remaining);
134
+ return lines.join(CRLF);
135
+ }
136
+ /** MIME requires encoded body lines capped well under the RFC 5322 998-byte hard limit. */
137
+ function foldBase64(base64) {
138
+ const lines = [];
139
+ for (let index = 0; index < base64.length; index += BASE64_LINE_LENGTH) {
140
+ lines.push(base64.slice(index, index + BASE64_LINE_LENGTH));
141
+ }
142
+ return lines.join(CRLF);
143
+ }
144
+ /** UTF-8 text (`text`/`html` bodies) must be encoded before folding - unlike {@link encodeBufferBase64}, which folds bytes that are already final. Two names instead of one so the caller can never feed raw bytes through the wrong path and silently double-encode them. */
145
+ function encodeTextBase64(text) {
146
+ return foldBase64(Buffer.from(text, 'utf-8').toString('base64'));
147
+ }
148
+ /** Attachment bytes are already final binary content - only folding applies, no UTF-8 re-encode. */
149
+ function encodeBufferBase64(buffer) {
150
+ return foldBase64(buffer.toString('base64'));
151
+ }
152
+ async function streamToBuffer(stream) {
153
+ const chunks = [];
154
+ for await (const chunk of stream) {
155
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
156
+ }
157
+ return Buffer.concat(chunks);
158
+ }
159
+ /** A string `content` is raw text unless `encoding` says otherwise (nodemailer's convention) - a
160
+ * caller that already holds a base64 payload sets `encoding: 'base64'` instead of handing over
161
+ * decoded bytes. */
162
+ async function readAttachmentContent(attachment) {
163
+ if (attachment.content !== undefined) {
164
+ if (Buffer.isBuffer(attachment.content)) {
165
+ return attachment.content;
166
+ }
167
+ if (typeof attachment.content === 'string') {
168
+ return Buffer.from(attachment.content, attachment.encoding ?? 'utf-8');
169
+ }
170
+ return streamToBuffer(attachment.content);
171
+ }
172
+ if (attachment.path) {
173
+ return (0, promises_1.readFile)(attachment.path);
174
+ }
175
+ return Buffer.alloc(0);
176
+ }
177
+ /** A literal CR/LF/NUL inside a header-bound value would let it break out of its own header line and forge additional headers or smuggle body content - classic email header injection. Every value spliced into a raw header line is checked here first, so an attempt fails loudly instead of silently reaching the wire.
178
+ *
179
+ * `value` is `unknown`, not `string`: `IMailMessage`/`IMailAttachment` both end in
180
+ * `[key: string]: any`, so nothing at the type layer stops a caller (e.g. a controller
181
+ * forwarding a request body) from putting a non-string - notably an array - where a string is
182
+ * declared. `Array.prototype.includes('\r')` checks element *equality*, not substring, so
183
+ * `['x\r\nBcc: evil'].includes('\r')` is `false` and a naive string-only check would wave a
184
+ * forged header straight through once it is later stringified by a template literal. Requiring
185
+ * `typeof value === 'string'` up front closes that gap for every field that flows through here. */
186
+ function assertNoHeaderInjection(opts) {
187
+ const { field, value } = opts;
188
+ if (typeof value !== 'string') {
189
+ throw (0, core_1.getError)({
190
+ statusCode: 500,
191
+ messageCode: common_1.MailErrorCodes.INVALID_CONFIGURATION,
192
+ message: `Invalid Amazon SES message | ${field} must be a string`,
193
+ });
194
+ }
195
+ if (!value.includes('\r') && !value.includes('\n') && !value.includes('\0')) {
196
+ return;
197
+ }
198
+ throw (0, core_1.getError)({
199
+ statusCode: 500,
200
+ messageCode: common_1.MailErrorCodes.INVALID_CONFIGURATION,
201
+ message: `Invalid Amazon SES message | ${field} contains illegal control characters`,
202
+ });
203
+ }
204
+ /** Same guard as {@link assertNoHeaderInjection}, applied to every address in a `to`/`cc`/`bcc`
205
+ * field individually - a string field only, not `[key: string]: any`; validating the raw
206
+ * caller-provided value (before splitting/joining) both types and content-checks each entry. */
207
+ function assertNoAddressListInjection(opts) {
208
+ const { field, value } = opts;
209
+ const list = Array.isArray(value) ? value : [value];
210
+ for (const item of list) {
211
+ assertNoHeaderInjection({ field, value: item });
212
+ }
213
+ }
214
+ function extractDomain(address) {
215
+ const match = address ? /@([^@>\s]+)>?\s*$/.exec(address) : null;
216
+ return match ? match[1] : 'localhost';
217
+ }
218
+ function buildHeaders(message) {
219
+ const headers = [];
220
+ if (message.from) {
221
+ assertNoAddressListInjection({ field: 'from', value: message.from });
222
+ headers.push(foldHeaderLine(`From: ${formatAddressHeader(message.from)}`));
223
+ }
224
+ if (message.to) {
225
+ assertNoAddressListInjection({ field: 'to', value: message.to });
226
+ headers.push(foldHeaderLine(`To: ${formatAddressHeader(message.to)}`));
227
+ }
228
+ if (message.cc) {
229
+ assertNoAddressListInjection({ field: 'cc', value: message.cc });
230
+ headers.push(foldHeaderLine(`Cc: ${formatAddressHeader(message.cc)}`));
231
+ }
232
+ if (message.replyTo) {
233
+ assertNoAddressListInjection({ field: 'replyTo', value: message.replyTo });
234
+ headers.push(foldHeaderLine(`Reply-To: ${formatAddressHeader(message.replyTo)}`));
235
+ }
236
+ // Checked, never emitted: a `Bcc:` header would disclose the blind recipients, so they travel as
237
+ // `Destination.BccAddresses`. Without this, `bcc` is the one address field that fails at AWS.
238
+ if (message.bcc) {
239
+ assertNoAddressListInjection({ field: 'bcc', value: message.bcc });
240
+ }
241
+ assertNoHeaderInjection({ field: 'subject', value: message.subject });
242
+ headers.push(foldHeaderLine(`Subject: ${encodeHeaderValue(message.subject)}`));
243
+ // RFC 5322 requires both on every message; SES's raw-message parser does not synthesize them,
244
+ // so an omission here is an omission on the wire (some receiving MTAs reject a `Date`-less
245
+ // message outright, and a missing `Message-ID` breaks threading and dedup).
246
+ headers.push(`Date: ${new Date().toUTCString()}`);
247
+ headers.push(`Message-ID: <${(0, node_crypto_1.randomBytes)(16).toString('hex')}@${extractDomain(message.from)}>`);
248
+ headers.push('MIME-Version: 1.0');
249
+ if (message.headers) {
250
+ for (const [key, value] of Object.entries(message.headers)) {
251
+ assertNoHeaderInjection({ field: `headers.${key}`, value: key });
252
+ assertNoHeaderInjection({ field: `headers.${key}`, value });
253
+ headers.push(foldHeaderLine(`${key}: ${encodeHeaderValue(value)}`));
254
+ }
255
+ }
256
+ return headers;
257
+ }
258
+ /** One text/plain or text/html MIME part. `boundary` omitted only for the single-part, no-attachment case, where the content type belongs on the top-level headers instead of a nested part. */
259
+ function textPart(boundary, contentType, content) {
260
+ return [
261
+ `--${boundary}`,
262
+ `Content-Type: ${contentType}; charset=UTF-8`,
263
+ 'Content-Transfer-Encoding: base64',
264
+ '',
265
+ encodeTextBase64(content),
266
+ ].join(CRLF);
267
+ }
268
+ function escapeQuotedString(value) {
269
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
270
+ }
271
+ /** RFC 2231 percent-encoding for the `filename*=`/`name*=` extended parameter form. */
272
+ function encodeRfc2231(value) {
273
+ return encodeURIComponent(value).replace(/[!'()*]/g, char => `%${char.charCodeAt(0).toString(16).toUpperCase()}`);
274
+ }
275
+ /**
276
+ * Builds the `; name="..."`/`; filename="..."` (and, for non-ASCII names, the RFC 2231
277
+ * `; filename*=UTF-8''...` extended form) suffix for a Content-Type/Content-Disposition line.
278
+ * ASCII names are still quoted-string escaped - an unescaped `"` or `\` in a filename would
279
+ * terminate the quoted string early and let the rest of the value merge into a sibling MIME
280
+ * parameter, corrupting the part header for every downstream reader.
281
+ */
282
+ function attachmentNameParams(attribute, value) {
283
+ if (isAscii(value)) {
284
+ return `; ${attribute}="${escapeQuotedString(value)}"`;
285
+ }
286
+ const asciiFallback = value.replace(/[^\x20-\x7E]/g, '_');
287
+ return (`; ${attribute}="${escapeQuotedString(asciiFallback)}"` +
288
+ `; ${attribute}*=UTF-8''${encodeRfc2231(value)}`);
289
+ }
290
+ async function attachmentPart(attachment, boundary) {
291
+ const content = await readAttachmentContent(attachment);
292
+ const contentType = attachment.contentType ?? 'application/octet-stream';
293
+ assertNoHeaderInjection({ field: 'attachment.contentType', value: contentType });
294
+ if (attachment.filename) {
295
+ assertNoHeaderInjection({ field: 'attachment.filename', value: attachment.filename });
296
+ }
297
+ if (attachment.cid) {
298
+ assertNoHeaderInjection({ field: 'attachment.cid', value: attachment.cid });
299
+ }
300
+ const nameAttribute = attachment.filename
301
+ ? attachmentNameParams('name', attachment.filename)
302
+ : '';
303
+ const filenameAttribute = attachment.filename
304
+ ? attachmentNameParams('filename', attachment.filename)
305
+ : '';
306
+ const disposition = attachment.cid ? 'inline' : 'attachment';
307
+ const headerLines = [
308
+ `--${boundary}`,
309
+ foldHeaderLine(`Content-Type: ${contentType}${nameAttribute}`),
310
+ 'Content-Transfer-Encoding: base64',
311
+ foldHeaderLine(`Content-Disposition: ${disposition}${filenameAttribute}`),
312
+ ];
313
+ if (attachment.cid) {
314
+ headerLines.push(`Content-ID: <${attachment.cid}>`);
315
+ }
316
+ return [...headerLines, '', encodeBufferBase64(content)].join(CRLF);
317
+ }
318
+ /** Every boundary is generated the same way - a fixed prefix plus random hex - so no two nested multipart sections in one message can ever collide. */
319
+ function newBoundary(label) {
320
+ return `----=_${label}_${(0, node_crypto_1.randomBytes)(12).toString('hex')}`;
321
+ }
322
+ /**
323
+ * Builds a raw RFC 822 message with zero external dependencies - Amazon SES's `SendEmailCommand`
324
+ * `Content.Simple` shape has no attachment field, so attachments require a raw MIME body. Written
325
+ * by hand instead of depending on `nodemailer`'s `MailComposer` so the `ses` provider never needs
326
+ * the `nodemailer` peer installed at all.
327
+ *
328
+ * Inline (`cid`) attachments nest under `multipart/related` next to the body - a mail client
329
+ * only renders `cid:` references inline when they share a `multipart/related` parent with the
330
+ * body; under `multipart/mixed` they show up as ordinary downloadable attachments instead. Plain
331
+ * file attachments (no `cid`) stay under `multipart/mixed`, alongside the body or the
332
+ * `multipart/related` group when both kinds are present.
333
+ */
334
+ async function buildRawMimeMessage(message) {
335
+ const headers = buildHeaders(message);
336
+ const attachments = message.attachments ?? [];
337
+ const inlineAttachments = attachments.filter(attachment => Boolean(attachment.cid));
338
+ const fileAttachments = attachments.filter(attachment => !attachment.cid);
339
+ const hasBothBodies = Boolean(message.text) && Boolean(message.html);
340
+ const singleContentType = message.html ? 'text/html' : 'text/plain';
341
+ const singleContent = message.html ?? message.text ?? '';
342
+ const bodyPart = (boundary) => {
343
+ if (!hasBothBodies) {
344
+ return textPart(boundary, singleContentType, singleContent);
345
+ }
346
+ const altBoundary = newBoundary('Alt');
347
+ return [
348
+ `--${boundary}`,
349
+ `Content-Type: multipart/alternative; boundary="${altBoundary}"`,
350
+ '',
351
+ [
352
+ textPart(altBoundary, 'text/plain', message.text ?? ''),
353
+ textPart(altBoundary, 'text/html', message.html ?? ''),
354
+ `--${altBoundary}--`,
355
+ ].join(CRLF),
356
+ ].join(CRLF);
357
+ };
358
+ if (attachments.length === 0 && !hasBothBodies) {
359
+ headers.push(`Content-Type: ${singleContentType}; charset=UTF-8`);
360
+ headers.push('Content-Transfer-Encoding: base64');
361
+ return Buffer.from([...headers, '', encodeTextBase64(singleContent)].join(CRLF), 'utf-8');
362
+ }
363
+ if (attachments.length === 0) {
364
+ const boundary = newBoundary('Alt');
365
+ headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
366
+ const parts = [
367
+ textPart(boundary, 'text/plain', message.text ?? ''),
368
+ textPart(boundary, 'text/html', message.html ?? ''),
369
+ `--${boundary}--`,
370
+ ];
371
+ return Buffer.from([...headers, '', parts.join(CRLF)].join(CRLF), 'utf-8');
372
+ }
373
+ const buildRelatedPart = async (parentBoundary) => {
374
+ const relatedBoundary = newBoundary('Related');
375
+ const parts = [bodyPart(relatedBoundary)];
376
+ for (const attachment of inlineAttachments) {
377
+ parts.push(await attachmentPart(attachment, relatedBoundary));
378
+ }
379
+ parts.push(`--${relatedBoundary}--`);
380
+ return [
381
+ `--${parentBoundary}`,
382
+ `Content-Type: multipart/related; boundary="${relatedBoundary}"`,
383
+ '',
384
+ parts.join(CRLF),
385
+ ].join(CRLF);
386
+ };
387
+ if (inlineAttachments.length > 0 && fileAttachments.length === 0) {
388
+ const relatedBoundary = newBoundary('Related');
389
+ const parts = [bodyPart(relatedBoundary)];
390
+ for (const attachment of inlineAttachments) {
391
+ parts.push(await attachmentPart(attachment, relatedBoundary));
392
+ }
393
+ parts.push(`--${relatedBoundary}--`);
394
+ headers.push(`Content-Type: multipart/related; boundary="${relatedBoundary}"`);
395
+ return Buffer.from([...headers, '', parts.join(CRLF)].join(CRLF), 'utf-8');
396
+ }
397
+ const mixedBoundary = newBoundary('Mixed');
398
+ headers.push(`Content-Type: multipart/mixed; boundary="${mixedBoundary}"`);
399
+ const bodyParts = [];
400
+ if (inlineAttachments.length > 0) {
401
+ bodyParts.push(await buildRelatedPart(mixedBoundary));
402
+ }
403
+ else {
404
+ bodyParts.push(bodyPart(mixedBoundary));
405
+ }
406
+ for (const attachment of fileAttachments) {
407
+ bodyParts.push(await attachmentPart(attachment, mixedBoundary));
408
+ }
409
+ bodyParts.push(`--${mixedBoundary}--`);
410
+ return Buffer.from([...headers, '', bodyParts.join(CRLF)].join(CRLF), 'utf-8');
411
+ }
412
+ //# sourceMappingURL=mime.utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.utility.js","sourceRoot":"","sources":["../../../../src/components/mail/utilities/mime.utility.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,15 @@
1
1
  import type { TConstValue } from '@venizia/ignis-helpers/common';
2
- export declare const WHITELIST_HEADERS: readonly ["content-type", "content-encoding", "cache-control", "etag", "last-modified"];
2
+ /** `content-type` is absent on purpose: it is decided from the object name, never from the backend. */
3
+ export declare const WHITELIST_HEADERS: readonly ["content-encoding", "cache-control", "etag", "last-modified"];
4
+ /**
5
+ * Types the controller will let a browser render, keyed off the object name. Anything absent here is
6
+ * served as an attachment, because a renderable upload on the API origin is stored XSS - and `nosniff`
7
+ * cannot stop a type we declared ourselves. `image/svg+xml` is deliberately excluded: SVG carries script.
8
+ */
9
+ export declare const RENDERABLE_CONTENT_TYPES: Set<string>;
3
10
  export declare class StaticAssetStorageTypes {
4
11
  static readonly DISK = "disk";
12
+ /** @deprecated Use {@link StaticAssetStorageTypes.BUN_S3}, which reaches MinIO over the same S3 API. */
5
13
  static readonly MINIO = "minio";
6
14
  static readonly BUN_S3 = "bun-s3";
7
15
  static readonly SCHEME_SET: Set<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/components/static-asset/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,iBAAiB,yFAMpB,CAAC;AAEX,qBAAa,uBAAuB;IAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAElC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAiD;IAE3E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGzC;AAED,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/components/static-asset/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,uGAAuG;AACvG,eAAO,MAAM,iBAAiB,yEAKpB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,aAgBnC,CAAC;AAEH,qBAAa,uBAAuB;IAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,wGAAwG;IACxG,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAElC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAiD;IAE3E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGzC;AAED,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,16 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StaticAssetStorageTypes = exports.WHITELIST_HEADERS = void 0;
3
+ exports.StaticAssetStorageTypes = exports.RENDERABLE_CONTENT_TYPES = exports.WHITELIST_HEADERS = void 0;
4
4
  const common_1 = require("@venizia/ignis-helpers/common");
5
+ /** `content-type` is absent on purpose: it is decided from the object name, never from the backend. */
5
6
  exports.WHITELIST_HEADERS = [
6
- common_1.HTTP.Headers.CONTENT_TYPE,
7
7
  common_1.HTTP.Headers.CONTENT_ENCODING,
8
8
  common_1.HTTP.Headers.CACHE_CONTROL,
9
9
  common_1.HTTP.Headers.ETAG,
10
10
  common_1.HTTP.Headers.LAST_MODIFIED,
11
11
  ];
12
+ /**
13
+ * Types the controller will let a browser render, keyed off the object name. Anything absent here is
14
+ * served as an attachment, because a renderable upload on the API origin is stored XSS - and `nosniff`
15
+ * cannot stop a type we declared ourselves. `image/svg+xml` is deliberately excluded: SVG carries script.
16
+ */
17
+ exports.RENDERABLE_CONTENT_TYPES = new Set([
18
+ 'image/png',
19
+ 'image/jpeg',
20
+ 'image/gif',
21
+ 'image/webp',
22
+ 'image/avif',
23
+ 'image/bmp',
24
+ 'image/x-icon',
25
+ 'video/mp4',
26
+ 'video/webm',
27
+ 'audio/mpeg',
28
+ 'audio/wav',
29
+ 'audio/ogg',
30
+ 'application/pdf',
31
+ 'text/plain',
32
+ 'text/csv',
33
+ ]);
12
34
  class StaticAssetStorageTypes {
13
35
  static { this.DISK = 'disk'; }
36
+ /** @deprecated Use {@link StaticAssetStorageTypes.BUN_S3}, which reaches MinIO over the same S3 API. */
14
37
  static { this.MINIO = 'minio'; }
15
38
  static { this.BUN_S3 = 'bun-s3'; }
16
39
  static { this.SCHEME_SET = new Set([this.DISK, this.MINIO, this.BUN_S3]); }
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/components/static-asset/common/constants.ts"],"names":[],"mappings":";;;AACA,0DAAqD;AAExC,QAAA,iBAAiB,GAAG;IAC/B,aAAI,CAAC,OAAO,CAAC,YAAY;IACzB,aAAI,CAAC,OAAO,CAAC,gBAAgB;IAC7B,aAAI,CAAC,OAAO,CAAC,aAAa;IAC1B,aAAI,CAAC,OAAO,CAAC,IAAI;IACjB,aAAI,CAAC,OAAO,CAAC,aAAa;CAClB,CAAC;AAEX,MAAa,uBAAuB;aAClB,SAAI,GAAG,MAAM,CAAC;aACd,UAAK,GAAG,OAAO,CAAC;aAChB,WAAM,GAAG,QAAQ,CAAC;aAElB,eAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3E,MAAM,CAAC,OAAO,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;;AATH,0DAUC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/components/static-asset/common/constants.ts"],"names":[],"mappings":";;;AACA,0DAAqD;AAErD,uGAAuG;AAC1F,QAAA,iBAAiB,GAAG;IAC/B,aAAI,CAAC,OAAO,CAAC,gBAAgB;IAC7B,aAAI,CAAC,OAAO,CAAC,aAAa;IAC1B,aAAI,CAAC,OAAO,CAAC,IAAI;IACjB,aAAI,CAAC,OAAO,CAAC,aAAa;CAClB,CAAC;AAEX;;;;GAIG;AACU,QAAA,wBAAwB,GAAG,IAAI,GAAG,CAAS;IACtD,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,cAAc;IACd,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAEH,MAAa,uBAAuB;aAClB,SAAI,GAAG,MAAM,CAAC;IAC9B,wGAAwG;aACxF,UAAK,GAAG,OAAO,CAAC;aAChB,WAAM,GAAG,QAAQ,CAAC;aAElB,eAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3E,MAAM,CAAC,OAAO,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;;AAVH,0DAWC"}
@@ -1,8 +1,9 @@
1
- import type { IAuthRouteConfig } from '../../../base';
1
+ import type { BaseRestController, IAuthRouteConfig } from '../../../base';
2
+ import type { IStorageHelper } from '@venizia/ignis-helpers';
2
3
  import type { BaseRelationalEntity } from '@venizia/ignis-connectors/postgres';
3
4
  import type { DefaultCRUDRepository } from '@venizia/ignis-connectors/postgres';
4
5
  import type { AnyType, ValueOrPromise } from '@venizia/ignis-helpers/common';
5
- import type { DiskHelper, IFileStat, IUploadResult } from '@venizia/ignis-helpers';
6
+ import type { DiskHelper, IBucketRef, IFileStat, IObjectLocation, IUploadResult, TUploadNaming } from '@venizia/ignis-helpers';
6
7
  import type { BunS3Helper } from '@venizia/ignis-helpers/bun-s3';
7
8
  import type { MinioHelper } from '@venizia/ignis-helpers/minio';
8
9
  import type { TMetaLinkSchema } from '../models';
@@ -14,17 +15,26 @@ export type TStaticAssetExtraOptions = {
14
15
  };
15
16
  /** `folderPath` carries the upload query's target folder - dropping it flattens nested uploads. */
16
17
  normalizeNameFn?: (opts: {
17
- originalName: string;
18
- folderPath?: string;
19
- }) => string;
20
- normalizeLinkFn?: (opts: {
21
- bucketName: string;
22
- normalizeName: string;
18
+ file: TUploadNaming;
23
19
  }) => string;
20
+ normalizeLinkFn?: (opts: IObjectLocation) => string;
24
21
  /** Maximum folder nesting depth allowed in object paths. Default: 2 */
25
22
  maxFolderDepth?: number;
26
23
  [key: string]: AnyType;
27
24
  };
25
+ /** Decides the key one uploaded file is stored under. `defaultKey` is what IGNIS would have written. */
26
+ export type TResolveObjectName = (opts: {
27
+ bucket: IBucketRef;
28
+ file: TUploadNaming;
29
+ defaultKey: string;
30
+ }) => string;
31
+ /** Adds routes of the application's own to a generated asset controller. Runs after every built-in route, so a built-in route always wins a path collision. `basePath` is the mount path with exactly one leading slash. */
32
+ /** Adds routes of the application's own. Registration order decides a path collision, so the same shape serves both the before and the after hook. */
33
+ export type TDefineExtraRoutes = (opts: {
34
+ controller: BaseRestController;
35
+ helper: IStorageHelper;
36
+ basePath: string;
37
+ }) => void;
28
38
  export type TBucketParams = {
29
39
  bucketName: string;
30
40
  };
@@ -61,6 +71,10 @@ export type TStaticAssetsComponentOptions = {
61
71
  name: string;
62
72
  basePath: string;
63
73
  isStrict?: boolean;
74
+ /** The single bucket every object route uses. It leaves the URL (`/objects/{objectName}`) and the four bucket-management routes are not registered. The function form is read per request, so an environment variable can be read lazily. */
75
+ bucket?: string | (() => string);
76
+ /** `true` serves a raw nested object path (`/objects/photos/2024/f.jpg`) - a URL shape change; a percent-encoded path keeps working either way. Default: `false`. */
77
+ rawObjectPath?: boolean;
64
78
  routes?: {
65
79
  getBuckets?: Partial<Omit<IAuthRouteConfig, 'method' | 'request' | 'responses'>>;
66
80
  getBucketByName?: Partial<Omit<IAuthRouteConfig, 'method' | 'request' | 'responses'>>;
@@ -75,6 +89,12 @@ export type TStaticAssetsComponentOptions = {
75
89
  };
76
90
  };
77
91
  extra?: TStaticAssetExtraOptions;
92
+ /** Decides the stored object name of each uploaded file; absent keeps the storage helper's own naming. */
93
+ resolveObjectName?: TResolveObjectName;
94
+ /** Registers the application's own routes BEFORE every built-in one, so a literal path wins over the catch-all `rawObjectPath` produces. Hono matches in registration order. */
95
+ defineRoutesBefore?: TDefineExtraRoutes;
96
+ /** Registers the application's own routes on the generated controller, after every built-in one. */
97
+ defineExtraRoutes?: TDefineExtraRoutes;
78
98
  } & ({
79
99
  storage: typeof StaticAssetStorageTypes.BUN_S3;
80
100
  helper: BunS3Helper;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/static-asset/common/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/static-asset/common/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/static-asset/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,qBAAa,oBAAqB,SAAQ,aAAa;IAEC,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAcjF,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC;CAoCzC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/static-asset/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,qBAAa,oBAAqB,SAAQ,aAAa;IAEC,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAcjF,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC;CAmDzC"}
@@ -39,21 +39,27 @@ let StaticAssetComponent = StaticAssetComponent_1 = class StaticAssetComponent e
39
39
  key: common_1.StaticAssetComponentBindingKeys.STATIC_ASSET_COMPONENT_OPTIONS,
40
40
  });
41
41
  for (const [key, opt] of Object.entries(componentOptions)) {
42
- const { storage, controller, helper, extra } = opt;
42
+ const { storage, controller, helper, extra, resolveObjectName, defineRoutesBefore, defineExtraRoutes, } = opt;
43
43
  this.application.controller(controller_1.AssetControllerFactory.defineAssetController({
44
44
  controller,
45
45
  storage,
46
46
  helper,
47
47
  useMetaLink: opt.useMetaLink,
48
48
  metaLink: opt.useMetaLink ? opt.metaLink : undefined,
49
+ resolveObjectName,
50
+ defineRoutesBefore,
51
+ defineExtraRoutes,
49
52
  options: {
50
53
  ...extra,
51
54
  normalizeLinkFn: extra?.normalizeLinkFn ??
52
- (opts => {
53
- // The object route binds `{objectName}` as one Hono path segment, so a nested path must be encoded whole - a raw `/` produces a 404 link.
54
- const encodedPath = encodeURIComponent(opts.normalizeName);
55
- return `${controller.basePath}/buckets/${opts.bucketName}/objects/${encodedPath}`;
56
- }),
55
+ // The link follows the URL shape the controller serves: `{objectName}` is one Hono path segment unless `rawObjectPath` widens it, and a configured bucket leaves the path.
56
+ (linkOptions => (0, controller_1.buildObjectLink)({
57
+ basePath: controller.basePath,
58
+ bucket: linkOptions.bucket,
59
+ object: linkOptions.object,
60
+ hasConfiguredBucket: controller.bucket !== undefined,
61
+ rawObjectPath: controller.rawObjectPath,
62
+ })),
57
63
  },
58
64
  }));
59
65
  this.application.logger.info(`[binding] Asset storage is bound | Key: %s | Storage type: %s | UseMetaLink: %s`, key, storage, Boolean(opt.useMetaLink));