@hed-hog/core 0.0.390 → 0.0.393

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 (528) hide show
  1. package/README.md +39 -0
  2. package/dist/access-log/access-log.controller.d.ts.map +1 -1
  3. package/dist/access-log/access-log.controller.js +1 -1
  4. package/dist/access-log/access-log.controller.js.map +1 -1
  5. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  6. package/dist/access-log/access-log.interceptor.js +8 -5
  7. package/dist/access-log/access-log.interceptor.js.map +1 -1
  8. package/dist/access-log/access-log.service.d.ts +4 -0
  9. package/dist/access-log/access-log.service.d.ts.map +1 -1
  10. package/dist/access-log/access-log.service.js +31 -4
  11. package/dist/access-log/access-log.service.js.map +1 -1
  12. package/dist/access-log/dto/query-access-log.dto.d.ts +2 -0
  13. package/dist/access-log/dto/query-access-log.dto.d.ts.map +1 -1
  14. package/dist/access-log/dto/query-access-log.dto.js +5 -0
  15. package/dist/access-log/dto/query-access-log.dto.js.map +1 -1
  16. package/dist/ai/ai.controller.d.ts +12 -8
  17. package/dist/ai/ai.controller.d.ts.map +1 -1
  18. package/dist/ai/ai.controller.js +17 -2
  19. package/dist/ai/ai.controller.js.map +1 -1
  20. package/dist/ai/ai.module.d.ts.map +1 -1
  21. package/dist/ai/ai.module.js +3 -2
  22. package/dist/ai/ai.module.js.map +1 -1
  23. package/dist/ai/ai.service.d.ts +30 -1
  24. package/dist/ai/ai.service.d.ts.map +1 -1
  25. package/dist/ai/ai.service.js +97 -3
  26. package/dist/ai/ai.service.js.map +1 -1
  27. package/dist/ai/dto/richtext-edit-html.dto.d.ts +5 -0
  28. package/dist/ai/dto/richtext-edit-html.dto.d.ts.map +1 -0
  29. package/dist/ai/dto/richtext-edit-html.dto.js +27 -0
  30. package/dist/ai/dto/richtext-edit-html.dto.js.map +1 -0
  31. package/dist/ai/richtext-ai.prompts.d.ts +5 -0
  32. package/dist/ai/richtext-ai.prompts.d.ts.map +1 -0
  33. package/dist/ai/richtext-ai.prompts.js +57 -0
  34. package/dist/ai/richtext-ai.prompts.js.map +1 -0
  35. package/dist/ai/richtext-ai.service.d.ts +34 -0
  36. package/dist/ai/richtext-ai.service.d.ts.map +1 -0
  37. package/dist/ai/richtext-ai.service.js +95 -0
  38. package/dist/ai/richtext-ai.service.js.map +1 -0
  39. package/dist/ai-instruction/ai-instruction.controller.d.ts +5 -5
  40. package/dist/auth/auth.controller.d.ts +66 -7
  41. package/dist/auth/auth.controller.d.ts.map +1 -1
  42. package/dist/auth/auth.controller.js +67 -23
  43. package/dist/auth/auth.controller.js.map +1 -1
  44. package/dist/auth/auth.module.d.ts.map +1 -1
  45. package/dist/auth/auth.module.js +2 -0
  46. package/dist/auth/auth.module.js.map +1 -1
  47. package/dist/auth/auth.service.d.ts +136 -4
  48. package/dist/auth/auth.service.d.ts.map +1 -1
  49. package/dist/auth/auth.service.js +246 -48
  50. package/dist/auth/auth.service.js.map +1 -1
  51. package/dist/auth/dto/confirm-email.dto.d.ts +4 -0
  52. package/dist/auth/dto/confirm-email.dto.d.ts.map +1 -0
  53. package/dist/auth/dto/confirm-email.dto.js +22 -0
  54. package/dist/auth/dto/confirm-email.dto.js.map +1 -0
  55. package/dist/auth/dto/resend-confirmation.dto.d.ts +8 -0
  56. package/dist/auth/dto/resend-confirmation.dto.d.ts.map +1 -0
  57. package/dist/auth/dto/resend-confirmation.dto.js +36 -0
  58. package/dist/auth/dto/resend-confirmation.dto.js.map +1 -0
  59. package/dist/authorize/authorize.controller.d.ts +1 -1
  60. package/dist/authorize/authorize.controller.d.ts.map +1 -1
  61. package/dist/authorize/authorize.controller.js +4 -2
  62. package/dist/authorize/authorize.controller.js.map +1 -1
  63. package/dist/authorize/authorize.service.d.ts +7 -0
  64. package/dist/authorize/authorize.service.d.ts.map +1 -1
  65. package/dist/authorize/authorize.service.js +1 -1
  66. package/dist/authorize/authorize.service.js.map +1 -1
  67. package/dist/challenge/challenge.service.d.ts +18 -5
  68. package/dist/challenge/challenge.service.d.ts.map +1 -1
  69. package/dist/challenge/challenge.service.js +50 -3
  70. package/dist/challenge/challenge.service.js.map +1 -1
  71. package/dist/core.module.d.ts.map +1 -1
  72. package/dist/core.module.js +17 -0
  73. package/dist/core.module.js.map +1 -1
  74. package/dist/dashboard/dashboard/dashboard.controller.d.ts +6 -6
  75. package/dist/dashboard/dashboard/dashboard.service.d.ts +6 -6
  76. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +4 -4
  77. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +4 -4
  78. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +1 -1
  79. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +1 -1
  80. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +2 -2
  81. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +2 -2
  82. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +2 -2
  83. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +2 -2
  84. package/dist/file/file.controller.d.ts +8 -1
  85. package/dist/file/file.controller.d.ts.map +1 -1
  86. package/dist/file/file.controller.js +45 -7
  87. package/dist/file/file.controller.js.map +1 -1
  88. package/dist/file/file.service.d.ts +128 -1
  89. package/dist/file/file.service.d.ts.map +1 -1
  90. package/dist/file/file.service.js +319 -8
  91. package/dist/file/file.service.js.map +1 -1
  92. package/dist/file/image-optimization.service.d.ts +43 -0
  93. package/dist/file/image-optimization.service.d.ts.map +1 -1
  94. package/dist/file/image-optimization.service.js +154 -0
  95. package/dist/file/image-optimization.service.js.map +1 -1
  96. package/dist/file/provider/abstract.provider.d.ts +16 -0
  97. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  98. package/dist/file/provider/abstract.provider.js +4 -0
  99. package/dist/file/provider/abstract.provider.js.map +1 -1
  100. package/dist/file/provider/gcs.provider.d.ts +2 -0
  101. package/dist/file/provider/gcs.provider.d.ts.map +1 -1
  102. package/dist/file/provider/gcs.provider.js +10 -0
  103. package/dist/file/provider/gcs.provider.js.map +1 -1
  104. package/dist/file/provider/local.provider.d.ts +1 -0
  105. package/dist/file/provider/local.provider.d.ts.map +1 -1
  106. package/dist/file/provider/local.provider.js +13 -0
  107. package/dist/file/provider/local.provider.js.map +1 -1
  108. package/dist/file/provider/s3.provider.d.ts +5 -0
  109. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  110. package/dist/file/provider/s3.provider.js +15 -0
  111. package/dist/file/provider/s3.provider.js.map +1 -1
  112. package/dist/file/provider/spaces.provider.d.ts +5 -0
  113. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  114. package/dist/file/provider/spaces.provider.js +16 -0
  115. package/dist/file/provider/spaces.provider.js.map +1 -1
  116. package/dist/impersonation/dto/redeem-impersonation.dto.d.ts +4 -0
  117. package/dist/impersonation/dto/redeem-impersonation.dto.d.ts.map +1 -0
  118. package/dist/impersonation/dto/redeem-impersonation.dto.js +23 -0
  119. package/dist/impersonation/dto/redeem-impersonation.dto.js.map +1 -0
  120. package/dist/impersonation/dto/start-impersonation.dto.d.ts +7 -0
  121. package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -0
  122. package/dist/impersonation/dto/start-impersonation.dto.js +27 -0
  123. package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -0
  124. package/dist/impersonation/impersonation-restrictions.d.ts +26 -0
  125. package/dist/impersonation/impersonation-restrictions.d.ts.map +1 -0
  126. package/dist/impersonation/impersonation-restrictions.js +76 -0
  127. package/dist/impersonation/impersonation-restrictions.js.map +1 -0
  128. package/dist/impersonation/impersonation.controller.d.ts +90 -0
  129. package/dist/impersonation/impersonation.controller.d.ts.map +1 -0
  130. package/dist/impersonation/impersonation.controller.js +135 -0
  131. package/dist/impersonation/impersonation.controller.js.map +1 -0
  132. package/dist/impersonation/impersonation.module.d.ts +8 -0
  133. package/dist/impersonation/impersonation.module.d.ts.map +1 -0
  134. package/dist/impersonation/impersonation.module.js +44 -0
  135. package/dist/impersonation/impersonation.module.js.map +1 -0
  136. package/dist/impersonation/impersonation.service.d.ts +164 -0
  137. package/dist/impersonation/impersonation.service.d.ts.map +1 -0
  138. package/dist/impersonation/impersonation.service.js +408 -0
  139. package/dist/impersonation/impersonation.service.js.map +1 -0
  140. package/dist/index.d.ts +17 -0
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +19 -0
  143. package/dist/index.js.map +1 -1
  144. package/dist/integration/services/outbox-polling.coordinator.d.ts +2 -0
  145. package/dist/integration/services/outbox-polling.coordinator.d.ts.map +1 -1
  146. package/dist/integration/services/outbox-polling.coordinator.js +50 -30
  147. package/dist/integration/services/outbox-polling.coordinator.js.map +1 -1
  148. package/dist/integration/services/outbox.service.d.ts.map +1 -1
  149. package/dist/integration/services/outbox.service.js +5 -1
  150. package/dist/integration/services/outbox.service.js.map +1 -1
  151. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  152. package/dist/integration-profile/integration-profile.secrets.js +3 -0
  153. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  154. package/dist/integration-profile/integration-profile.utils.d.ts +14 -0
  155. package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
  156. package/dist/integration-profile/integration-profile.utils.js +26 -0
  157. package/dist/integration-profile/integration-profile.utils.js.map +1 -1
  158. package/dist/integration-profile/testers/email.testers.d.ts.map +1 -1
  159. package/dist/integration-profile/testers/email.testers.js +28 -0
  160. package/dist/integration-profile/testers/email.testers.js.map +1 -1
  161. package/dist/language/en.json +11 -0
  162. package/dist/language/pt.json +11 -0
  163. package/dist/mail/dto/send.dto.d.ts +38 -1
  164. package/dist/mail/dto/send.dto.d.ts.map +1 -1
  165. package/dist/mail/dto/send.dto.js +10 -0
  166. package/dist/mail/dto/send.dto.js.map +1 -1
  167. package/dist/mail/mail.controller.d.ts +1 -0
  168. package/dist/mail/mail.controller.d.ts.map +1 -1
  169. package/dist/mail/mail.module.d.ts.map +1 -1
  170. package/dist/mail/mail.module.js +2 -0
  171. package/dist/mail/mail.module.js.map +1 -1
  172. package/dist/mail/mail.service.d.ts +48 -4
  173. package/dist/mail/mail.service.d.ts.map +1 -1
  174. package/dist/mail/mail.service.js +187 -35
  175. package/dist/mail/mail.service.js.map +1 -1
  176. package/dist/mail-delivery/mail-delivery-provision.service.d.ts +21 -0
  177. package/dist/mail-delivery/mail-delivery-provision.service.d.ts.map +1 -0
  178. package/dist/mail-delivery/mail-delivery-provision.service.js +64 -0
  179. package/dist/mail-delivery/mail-delivery-provision.service.js.map +1 -0
  180. package/dist/mail-delivery/mail-delivery.constants.d.ts +17 -0
  181. package/dist/mail-delivery/mail-delivery.constants.d.ts.map +1 -0
  182. package/dist/mail-delivery/mail-delivery.constants.js +31 -0
  183. package/dist/mail-delivery/mail-delivery.constants.js.map +1 -0
  184. package/dist/mail-delivery/mail-delivery.controller.d.ts +19 -0
  185. package/dist/mail-delivery/mail-delivery.controller.d.ts.map +1 -0
  186. package/dist/mail-delivery/mail-delivery.controller.js +53 -0
  187. package/dist/mail-delivery/mail-delivery.controller.js.map +1 -0
  188. package/dist/mail-delivery/mail-delivery.module.d.ts +7 -0
  189. package/dist/mail-delivery/mail-delivery.module.d.ts.map +1 -0
  190. package/dist/mail-delivery/mail-delivery.module.js +36 -0
  191. package/dist/mail-delivery/mail-delivery.module.js.map +1 -0
  192. package/dist/mail-delivery/mail-delivery.service.d.ts +38 -0
  193. package/dist/mail-delivery/mail-delivery.service.d.ts.map +1 -0
  194. package/dist/mail-delivery/mail-delivery.service.js +140 -0
  195. package/dist/mail-delivery/mail-delivery.service.js.map +1 -0
  196. package/dist/mail-delivery/ses-event.parser.d.ts +27 -0
  197. package/dist/mail-delivery/ses-event.parser.d.ts.map +1 -0
  198. package/dist/mail-delivery/ses-event.parser.js +131 -0
  199. package/dist/mail-delivery/ses-event.parser.js.map +1 -0
  200. package/dist/mail-delivery/ses-webhook.service.d.ts +58 -0
  201. package/dist/mail-delivery/ses-webhook.service.d.ts.map +1 -0
  202. package/dist/mail-delivery/ses-webhook.service.js +214 -0
  203. package/dist/mail-delivery/ses-webhook.service.js.map +1 -0
  204. package/dist/mail-delivery/sns-message.util.d.ts +38 -0
  205. package/dist/mail-delivery/sns-message.util.d.ts.map +1 -0
  206. package/dist/mail-delivery/sns-message.util.js +109 -0
  207. package/dist/mail-delivery/sns-message.util.js.map +1 -0
  208. package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts +5 -0
  209. package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts.map +1 -1
  210. package/dist/mail-sent/dto/query-mail-sent-list.dto.js +6 -0
  211. package/dist/mail-sent/dto/query-mail-sent-list.dto.js.map +1 -1
  212. package/dist/mail-sent/mail-sent.controller.d.ts +39 -0
  213. package/dist/mail-sent/mail-sent.controller.d.ts.map +1 -1
  214. package/dist/mail-sent/mail-sent.service.d.ts +39 -0
  215. package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
  216. package/dist/mail-sent/mail-sent.service.js +45 -4
  217. package/dist/mail-sent/mail-sent.service.js.map +1 -1
  218. package/dist/mailbox/mailbox-fetcher.registry.d.ts +100 -0
  219. package/dist/mailbox/mailbox-fetcher.registry.d.ts.map +1 -0
  220. package/dist/mailbox/mailbox-fetcher.registry.js +59 -0
  221. package/dist/mailbox/mailbox-fetcher.registry.js.map +1 -0
  222. package/dist/mailbox/mailbox.module.d.ts +8 -0
  223. package/dist/mailbox/mailbox.module.d.ts.map +1 -0
  224. package/dist/mailbox/mailbox.module.js +27 -0
  225. package/dist/mailbox/mailbox.module.js.map +1 -0
  226. package/dist/meeting/meeting-provider.registry.d.ts +155 -0
  227. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -0
  228. package/dist/meeting/meeting-provider.registry.js +53 -0
  229. package/dist/meeting/meeting-provider.registry.js.map +1 -0
  230. package/dist/meeting/meeting.constants.d.ts +47 -0
  231. package/dist/meeting/meeting.constants.d.ts.map +1 -0
  232. package/dist/meeting/meeting.constants.js +21 -0
  233. package/dist/meeting/meeting.constants.js.map +1 -0
  234. package/dist/meeting/meeting.module.d.ts +7 -0
  235. package/dist/meeting/meeting.module.d.ts.map +1 -0
  236. package/dist/meeting/meeting.module.js +26 -0
  237. package/dist/meeting/meeting.module.js.map +1 -0
  238. package/dist/middlewares/locale-injection.middleware.d.ts +12 -0
  239. package/dist/middlewares/locale-injection.middleware.d.ts.map +1 -1
  240. package/dist/middlewares/locale-injection.middleware.js +20 -4
  241. package/dist/middlewares/locale-injection.middleware.js.map +1 -1
  242. package/dist/oauth/providers/google.provider.d.ts +7 -0
  243. package/dist/oauth/providers/google.provider.d.ts.map +1 -1
  244. package/dist/oauth/providers/google.provider.js +43 -13
  245. package/dist/oauth/providers/google.provider.js.map +1 -1
  246. package/dist/observability/monitored-cron.d.ts +34 -0
  247. package/dist/observability/monitored-cron.d.ts.map +1 -0
  248. package/dist/observability/monitored-cron.js +118 -0
  249. package/dist/observability/monitored-cron.js.map +1 -0
  250. package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts +12 -0
  251. package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts.map +1 -0
  252. package/dist/pairing/dto/approve-reverse-pairing.dto.js +30 -0
  253. package/dist/pairing/dto/approve-reverse-pairing.dto.js.map +1 -0
  254. package/dist/pairing/dto/claim-pairing.dto.d.ts +11 -0
  255. package/dist/pairing/dto/claim-pairing.dto.d.ts.map +1 -0
  256. package/dist/pairing/dto/claim-pairing.dto.js +35 -0
  257. package/dist/pairing/dto/claim-pairing.dto.js.map +1 -0
  258. package/dist/pairing/dto/confirm-pairing.dto.d.ts +10 -0
  259. package/dist/pairing/dto/confirm-pairing.dto.d.ts.map +1 -0
  260. package/dist/pairing/dto/confirm-pairing.dto.js +24 -0
  261. package/dist/pairing/dto/confirm-pairing.dto.js.map +1 -0
  262. package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts +5 -0
  263. package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts.map +1 -0
  264. package/dist/pairing/dto/poll-reverse-pairing.dto.js +24 -0
  265. package/dist/pairing/dto/poll-reverse-pairing.dto.js.map +1 -0
  266. package/dist/pairing/dto/start-pairing.dto.d.ts +11 -0
  267. package/dist/pairing/dto/start-pairing.dto.d.ts.map +1 -0
  268. package/dist/pairing/dto/start-pairing.dto.js +30 -0
  269. package/dist/pairing/dto/start-pairing.dto.js.map +1 -0
  270. package/dist/pairing/dto/start-reverse-pairing.dto.d.ts +24 -0
  271. package/dist/pairing/dto/start-reverse-pairing.dto.d.ts.map +1 -0
  272. package/dist/pairing/dto/start-reverse-pairing.dto.js +47 -0
  273. package/dist/pairing/dto/start-reverse-pairing.dto.js.map +1 -0
  274. package/dist/pairing/pairing.controller.d.ts +118 -0
  275. package/dist/pairing/pairing.controller.d.ts.map +1 -0
  276. package/dist/pairing/pairing.controller.js +296 -0
  277. package/dist/pairing/pairing.controller.js.map +1 -0
  278. package/dist/pairing/pairing.module.d.ts +10 -0
  279. package/dist/pairing/pairing.module.d.ts.map +1 -0
  280. package/dist/pairing/pairing.module.js +40 -0
  281. package/dist/pairing/pairing.module.js.map +1 -0
  282. package/dist/pairing/pairing.service.d.ts +238 -0
  283. package/dist/pairing/pairing.service.d.ts.map +1 -0
  284. package/dist/pairing/pairing.service.js +495 -0
  285. package/dist/pairing/pairing.service.js.map +1 -0
  286. package/dist/pdf/pdf.service.d.ts +3 -6
  287. package/dist/pdf/pdf.service.d.ts.map +1 -1
  288. package/dist/pdf/pdf.service.js +8 -20
  289. package/dist/pdf/pdf.service.js.map +1 -1
  290. package/dist/profile/profile.controller.d.ts +11 -0
  291. package/dist/profile/profile.controller.d.ts.map +1 -1
  292. package/dist/profile/profile.service.d.ts +11 -0
  293. package/dist/profile/profile.service.d.ts.map +1 -1
  294. package/dist/profile/profile.service.js +20 -11
  295. package/dist/profile/profile.service.js.map +1 -1
  296. package/dist/redis/redis-pubsub.d.ts.map +1 -1
  297. package/dist/redis/redis-pubsub.js +44 -0
  298. package/dist/redis/redis-pubsub.js.map +1 -1
  299. package/dist/role/guards/role.guard.d.ts +5 -0
  300. package/dist/role/guards/role.guard.d.ts.map +1 -1
  301. package/dist/role/guards/role.guard.js +41 -39
  302. package/dist/role/guards/role.guard.js.map +1 -1
  303. package/dist/session/session.controller.d.ts +2 -0
  304. package/dist/session/session.controller.d.ts.map +1 -1
  305. package/dist/session/session.service.d.ts +39 -0
  306. package/dist/session/session.service.d.ts.map +1 -1
  307. package/dist/session/session.service.js +91 -8
  308. package/dist/session/session.service.js.map +1 -1
  309. package/dist/setting/brand-asset.service.d.ts +48 -0
  310. package/dist/setting/brand-asset.service.d.ts.map +1 -0
  311. package/dist/setting/brand-asset.service.js +130 -0
  312. package/dist/setting/brand-asset.service.js.map +1 -0
  313. package/dist/setting/setting.module.d.ts.map +1 -1
  314. package/dist/setting/setting.module.js +3 -2
  315. package/dist/setting/setting.module.js.map +1 -1
  316. package/dist/setting/setting.service.d.ts +33 -0
  317. package/dist/setting/setting.service.d.ts.map +1 -1
  318. package/dist/setting/setting.service.js +88 -0
  319. package/dist/setting/setting.service.js.map +1 -1
  320. package/dist/token/token.service.d.ts +23 -2
  321. package/dist/token/token.service.d.ts.map +1 -1
  322. package/dist/token/token.service.js +39 -4
  323. package/dist/token/token.service.js.map +1 -1
  324. package/dist/user/user.controller.d.ts +8 -22
  325. package/dist/user/user.controller.d.ts.map +1 -1
  326. package/dist/user/user.service.d.ts +44 -24
  327. package/dist/user/user.service.d.ts.map +1 -1
  328. package/dist/user/user.service.js +89 -6
  329. package/dist/user/user.service.js.map +1 -1
  330. package/dist/user-device/user-device.controller.d.ts +54 -0
  331. package/dist/user-device/user-device.controller.d.ts.map +1 -0
  332. package/dist/user-device/user-device.controller.js +103 -0
  333. package/dist/user-device/user-device.controller.js.map +1 -0
  334. package/dist/user-device/user-device.module.d.ts +3 -0
  335. package/dist/user-device/user-device.module.d.ts.map +1 -0
  336. package/dist/user-device/user-device.module.js +26 -0
  337. package/dist/user-device/user-device.module.js.map +1 -0
  338. package/dist/user-device/user-device.service.d.ts +71 -0
  339. package/dist/user-device/user-device.service.d.ts.map +1 -0
  340. package/dist/user-device/user-device.service.js +158 -0
  341. package/dist/user-device/user-device.service.js.map +1 -0
  342. package/dist/utils/device-key.d.ts +23 -0
  343. package/dist/utils/device-key.d.ts.map +1 -0
  344. package/dist/utils/device-key.js +31 -0
  345. package/dist/utils/device-key.js.map +1 -0
  346. package/dist/utils/geo-ip.d.ts +38 -0
  347. package/dist/utils/geo-ip.d.ts.map +1 -0
  348. package/dist/utils/geo-ip.js +122 -0
  349. package/dist/utils/geo-ip.js.map +1 -0
  350. package/dist/utils/locale-context.d.ts +10 -7
  351. package/dist/utils/locale-context.d.ts.map +1 -1
  352. package/dist/utils/locale-context.js +14 -8
  353. package/dist/utils/locale-context.js.map +1 -1
  354. package/dist/utils/security-event-vars.d.ts +56 -0
  355. package/dist/utils/security-event-vars.d.ts.map +1 -0
  356. package/dist/utils/security-event-vars.js +109 -0
  357. package/dist/utils/security-event-vars.js.map +1 -0
  358. package/dist/utils/user-agent.d.ts +19 -0
  359. package/dist/utils/user-agent.d.ts.map +1 -0
  360. package/dist/utils/user-agent.js +36 -0
  361. package/dist/utils/user-agent.js.map +1 -0
  362. package/dist/webhook-integration/webhook-integration.service.d.ts +5 -0
  363. package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
  364. package/dist/webhook-integration/webhook-integration.service.js +50 -4
  365. package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
  366. package/dist/webhook-integration/webhook-protocol.registry.d.ts +6 -0
  367. package/dist/webhook-integration/webhook-protocol.registry.d.ts.map +1 -1
  368. package/dist/webhook-integration/webhook-protocol.registry.js.map +1 -1
  369. package/hedhog/data/integration_provider.yaml +9 -0
  370. package/hedhog/data/mail.yaml +198 -62
  371. package/hedhog/data/mail_layout.yaml +43 -33
  372. package/hedhog/data/menu.yaml +2 -0
  373. package/hedhog/data/role.yaml +16 -0
  374. package/hedhog/data/route.yaml +172 -3
  375. package/hedhog/data/setting_group.yaml +178 -2
  376. package/hedhog/data/setting_subgroup.yaml +8 -0
  377. package/hedhog/frontend/app/_lib/hooks/use-core-access.test.tsx.ejs +125 -0
  378. package/hedhog/frontend/app/_lib/hooks/use-core-access.ts.ejs +29 -0
  379. package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.test.ts.ejs +71 -0
  380. package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.ts.ejs +32 -0
  381. package/hedhog/frontend/app/access-log/page.tsx.ejs +96 -22
  382. package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +17 -1
  383. package/hedhog/frontend/app/account/components/known-devices.tsx.ejs +89 -0
  384. package/hedhog/frontend/app/account/components/profile-form.tsx.ejs +2 -1
  385. package/hedhog/frontend/app/account/components/user-devices-list.tsx.ejs +186 -0
  386. package/hedhog/frontend/app/account/devices/page.tsx.ejs +5 -0
  387. package/hedhog/frontend/app/account/layout.tsx.ejs +2 -0
  388. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +298 -0
  389. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +376 -1236
  390. package/hedhog/frontend/app/mail/log/page.tsx.ejs +210 -3
  391. package/hedhog/frontend/app/mail/template/page.tsx.ejs +190 -132
  392. package/hedhog/frontend/app/users/active-session.tsx.ejs +58 -11
  393. package/hedhog/frontend/app/users/page.tsx.ejs +69 -10
  394. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +202 -0
  395. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +170 -0
  396. package/hedhog/frontend/app/users/user-activity-timeline.tsx.ejs +19 -0
  397. package/hedhog/frontend/app/users/user-devices.tsx.ejs +89 -0
  398. package/hedhog/frontend/app/users/user-logs.tsx.ejs +13 -1
  399. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +46 -24
  400. package/hedhog/frontend/messages/en.json +146 -48
  401. package/hedhog/frontend/messages/pt.json +146 -48
  402. package/hedhog/table/access_log.yaml +7 -0
  403. package/hedhog/table/file.yaml +8 -0
  404. package/hedhog/table/mail_delivery_event.yaml +76 -0
  405. package/hedhog/table/mail_sent.yaml +23 -0
  406. package/hedhog/table/user_activity.yaml +9 -0
  407. package/hedhog/table/user_device.yaml +52 -0
  408. package/hedhog/table/user_session.yaml +20 -1
  409. package/package.json +6 -5
  410. package/src/access-log/access-log.controller.ts +1 -0
  411. package/src/access-log/access-log.interceptor.ts +5 -1
  412. package/src/access-log/access-log.service.spec.ts +33 -2
  413. package/src/access-log/access-log.service.ts +38 -0
  414. package/src/access-log/dto/query-access-log.dto.ts +5 -0
  415. package/src/ai/ai.controller.ts +9 -0
  416. package/src/ai/ai.module.ts +3 -2
  417. package/src/ai/ai.service.ts +150 -13
  418. package/src/ai/dto/richtext-edit-html.dto.ts +11 -0
  419. package/src/ai/richtext-ai.prompts.ts +57 -0
  420. package/src/ai/richtext-ai.service.ts +109 -0
  421. package/src/auth/auth.controller.ts +47 -8
  422. package/src/auth/auth.module.ts +2 -0
  423. package/src/auth/auth.service.spec.ts +383 -6
  424. package/src/auth/auth.service.ts +345 -56
  425. package/src/auth/dto/confirm-email.dto.ts +7 -0
  426. package/src/auth/dto/resend-confirmation.dto.ts +20 -0
  427. package/src/authorize/authorize.controller.ts +2 -0
  428. package/src/authorize/authorize.service.spec.ts +23 -0
  429. package/src/authorize/authorize.service.ts +8 -0
  430. package/src/challenge/challenge.service.spec.ts +73 -0
  431. package/src/challenge/challenge.service.ts +62 -3
  432. package/src/core.module.ts +19 -0
  433. package/src/file/file.controller.ts +54 -4
  434. package/src/file/file.service.spec.ts +275 -105
  435. package/src/file/file.service.ts +409 -14
  436. package/src/file/image-optimization.service.spec.ts +92 -0
  437. package/src/file/image-optimization.service.ts +202 -0
  438. package/src/file/provider/abstract.provider.ts +23 -0
  439. package/src/file/provider/gcs.provider.ts +17 -0
  440. package/src/file/provider/local.provider.ts +21 -0
  441. package/src/file/provider/s3.provider.ts +25 -0
  442. package/src/file/provider/spaces.provider.ts +26 -0
  443. package/src/impersonation/dto/redeem-impersonation.dto.ts +8 -0
  444. package/src/impersonation/dto/start-impersonation.dto.ts +13 -0
  445. package/src/impersonation/impersonation-restrictions.ts +84 -0
  446. package/src/impersonation/impersonation.controller.ts +109 -0
  447. package/src/impersonation/impersonation.module.ts +31 -0
  448. package/src/impersonation/impersonation.service.spec.ts +427 -0
  449. package/src/impersonation/impersonation.service.ts +577 -0
  450. package/src/index.ts +21 -0
  451. package/src/integration/services/outbox-polling.coordinator.spec.ts +90 -0
  452. package/src/integration/services/outbox-polling.coordinator.ts +62 -40
  453. package/src/integration/services/outbox.service.spec.ts +8 -0
  454. package/src/integration/services/outbox.service.ts +19 -13
  455. package/src/integration-profile/integration-profile.secrets.ts +3 -0
  456. package/src/integration-profile/integration-profile.utils.ts +38 -0
  457. package/src/integration-profile/testers/email.testers.ts +34 -1
  458. package/src/language/en.json +11 -0
  459. package/src/language/pt.json +11 -0
  460. package/src/mail/dto/send.dto.ts +46 -2
  461. package/src/mail/mail-template.spec.ts +79 -2
  462. package/src/mail/mail.module.ts +2 -0
  463. package/src/mail/mail.service.spec.ts +307 -6
  464. package/src/mail/mail.service.ts +227 -30
  465. package/src/mail-delivery/mail-delivery-provision.service.ts +66 -0
  466. package/src/mail-delivery/mail-delivery.constants.ts +31 -0
  467. package/src/mail-delivery/mail-delivery.controller.ts +38 -0
  468. package/src/mail-delivery/mail-delivery.module.ts +23 -0
  469. package/src/mail-delivery/mail-delivery.service.spec.ts +136 -0
  470. package/src/mail-delivery/mail-delivery.service.ts +152 -0
  471. package/src/mail-delivery/ses-event.parser.spec.ts +140 -0
  472. package/src/mail-delivery/ses-event.parser.ts +191 -0
  473. package/src/mail-delivery/ses-webhook.service.spec.ts +170 -0
  474. package/src/mail-delivery/ses-webhook.service.ts +240 -0
  475. package/src/mail-delivery/sns-message.util.spec.ts +163 -0
  476. package/src/mail-delivery/sns-message.util.ts +125 -0
  477. package/src/mail-sent/dto/query-mail-sent-list.dto.ts +15 -0
  478. package/src/mail-sent/mail-sent.service.ts +46 -2
  479. package/src/mailbox/mailbox-fetcher.registry.ts +132 -0
  480. package/src/mailbox/mailbox.module.ts +14 -0
  481. package/src/meeting/meeting-provider.registry.ts +193 -0
  482. package/src/meeting/meeting.constants.ts +53 -0
  483. package/src/meeting/meeting.module.ts +13 -0
  484. package/src/middlewares/locale-injection.middleware.ts +25 -6
  485. package/src/oauth/providers/google.provider.ts +49 -15
  486. package/src/observability/monitored-cron.spec.ts +102 -0
  487. package/src/observability/monitored-cron.ts +110 -0
  488. package/src/pairing/dto/approve-reverse-pairing.dto.ts +20 -0
  489. package/src/pairing/dto/claim-pairing.dto.ts +19 -0
  490. package/src/pairing/dto/confirm-pairing.dto.ts +14 -0
  491. package/src/pairing/dto/poll-reverse-pairing.dto.ts +9 -0
  492. package/src/pairing/dto/start-pairing.dto.ts +19 -0
  493. package/src/pairing/dto/start-reverse-pairing.dto.ts +45 -0
  494. package/src/pairing/pairing.controller.ts +246 -0
  495. package/src/pairing/pairing.module.ts +27 -0
  496. package/src/pairing/pairing.service.spec.ts +462 -0
  497. package/src/pairing/pairing.service.ts +614 -0
  498. package/src/pdf/pdf.service.ts +6 -24
  499. package/src/profile/profile.service.ts +26 -8
  500. package/src/redis/redis-pubsub.ts +11 -0
  501. package/src/role/guards/role.guard.spec.ts +75 -0
  502. package/src/role/guards/role.guard.ts +64 -46
  503. package/src/session/session.service.spec.ts +81 -0
  504. package/src/session/session.service.ts +93 -6
  505. package/src/setting/brand-asset.service.ts +137 -0
  506. package/src/setting/setting.module.ts +3 -2
  507. package/src/setting/setting.service.spec.ts +79 -1
  508. package/src/setting/setting.service.ts +109 -1
  509. package/src/token/token.service.spec.ts +62 -0
  510. package/src/token/token.service.ts +57 -3
  511. package/src/user/user.service.spec.ts +33 -2
  512. package/src/user/user.service.ts +108 -6
  513. package/src/user-device/user-device.controller.ts +77 -0
  514. package/src/user-device/user-device.module.ts +13 -0
  515. package/src/user-device/user-device.service.spec.ts +234 -0
  516. package/src/user-device/user-device.service.ts +168 -0
  517. package/src/utils/device-key.spec.ts +57 -0
  518. package/src/utils/device-key.ts +32 -0
  519. package/src/utils/geo-ip.spec.ts +134 -0
  520. package/src/utils/geo-ip.ts +93 -0
  521. package/src/utils/locale-context.spec.ts +27 -1
  522. package/src/utils/locale-context.ts +15 -12
  523. package/src/utils/security-event-vars.spec.ts +161 -0
  524. package/src/utils/security-event-vars.ts +153 -0
  525. package/src/utils/user-agent.spec.ts +37 -0
  526. package/src/utils/user-agent.ts +46 -0
  527. package/src/webhook-integration/webhook-integration.service.ts +57 -3
  528. package/src/webhook-integration/webhook-protocol.registry.ts +6 -0
@@ -171,6 +171,17 @@
171
171
  "not_found": "Modelo de e-mail com id {id} não encontrado."
172
172
  }
173
173
  },
174
+ "oauth": {
175
+ "callback": {
176
+ "codeRequired": "O código de autorização é obrigatório para concluir a autenticação.",
177
+ "invalidState": "O retorno da autenticação é inválido ou expirou. Inicie o login novamente.",
178
+ "invalidType": "Tipo de retorno de autenticação não suportado.",
179
+ "invalid": "O retorno da autenticação é inválido ou expirou. Inicie o login novamente.",
180
+ "alreadyProcessed": "Este retorno de autenticação já foi processado. Inicie o login novamente.",
181
+ "inProgress": "Este retorno de autenticação já está sendo processado. Aguarde um instante e tente novamente.",
182
+ "unavailable": "Não foi possível concluir a autenticação agora. Tente novamente."
183
+ }
184
+ },
174
185
  "mail_sent_not_found": "Registro de e-mail enviado não encontrado.",
175
186
  "validationSslugMustBeString": "O slug deve ser uma string.",
176
187
  "sessionRevoked": "Sessão foi revogada ou expirou.",
@@ -7,7 +7,44 @@ export declare class SendTemplatedMailDTO {
7
7
  * Quando ausente, vale o perfil global do setting `mail-integration-profile-id`.
8
8
  */
9
9
  profileSlug?: string;
10
- /** Chave do app de origem (ex.: "class"), usada para resolver o nome de marca via a setting `app-names`. */
10
+ /**
11
+ * Endereco para onde a resposta do destinatario deve voltar.
12
+ *
13
+ * Sem isto a resposta cai no `from` do perfil, que nao carrega nenhuma
14
+ * identificacao do assunto tratado. E o que permite ao SAC endereçar cada
15
+ * chamado (`<protocolo>@dominio-de-resposta`) e reconhecer a resposta na
16
+ * entrada.
17
+ */
18
+ replyTo?: string;
19
+ /**
20
+ * Chave do app de origem (ex.: "class"). Nao afeta mais a marca —
21
+ * `{{brandName}}` vem sempre de `system-name`.
22
+ */
11
23
  app?: string;
24
+ /**
25
+ * Destinatario, quando o chamador ja o conhece.
26
+ *
27
+ * Serve so para pular a busca do usuario pelo e-mail na hora de descobrir o
28
+ * idioma de preferencia; omitir nao muda o resultado.
29
+ */
30
+ userId?: number;
12
31
  }
32
+ /**
33
+ * Resultado de `MailService.sendTemplatedMail`.
34
+ *
35
+ * `sent: false` cobre tanto o aborto por configuração ausente quanto qualquer
36
+ * falha do provedor: os dois são tratados internamente e não lançam, então o
37
+ * retorno é a única forma de o chamador saber que nada saiu.
38
+ *
39
+ * Deliberadamente um objeto único em vez de união discriminada: as libraries
40
+ * compilam com `strictNullChecks: false`, e nessa configuração o `if (r.sent)`
41
+ * não estreita a união no ponto de uso.
42
+ */
43
+ export type SendTemplatedMailResult = {
44
+ sent: boolean;
45
+ /** Id devolvido pelo provedor quando `sent` é `true`. */
46
+ providerMessageId?: string | null;
47
+ reason?: 'mail-not-configured' | 'send-failed' | 'template-locale-missing';
48
+ error?: string;
49
+ };
13
50
  //# sourceMappingURL=send.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.dto.d.ts","sourceRoot":"","sources":["../../../src/mail/dto/send.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAG/B,KAAK,EAAE,MAAM,CAAC;IAId,IAAI,EAAE,MAAM,CAAC;IAGb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC;;;OAGG;IAGH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4GAA4G;IAG5G,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"send.dto.d.ts","sourceRoot":"","sources":["../../../src/mail/dto/send.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAG/B,KAAK,EAAE,MAAM,CAAC;IAId,IAAI,EAAE,MAAM,CAAC;IAGb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC;;;OAGG;IAGH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;IAGH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IAGH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IAGH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,qBAAqB,GAAG,aAAa,GAAG,yBAAyB,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -34,9 +34,19 @@ __decorate([
34
34
  (0, class_validator_1.IsString)({ message: (args) => (0, api_locale_1.getLocaleText)('validation.stringRequired', args.value) }),
35
35
  __metadata("design:type", String)
36
36
  ], SendTemplatedMailDTO.prototype, "profileSlug", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsString)({ message: (args) => (0, api_locale_1.getLocaleText)('validation.stringRequired', args.value) }),
40
+ __metadata("design:type", String)
41
+ ], SendTemplatedMailDTO.prototype, "replyTo", void 0);
37
42
  __decorate([
38
43
  (0, class_validator_1.IsOptional)(),
39
44
  (0, class_validator_1.IsString)({ message: (args) => (0, api_locale_1.getLocaleText)('validation.stringRequired', args.value) }),
40
45
  __metadata("design:type", String)
41
46
  ], SendTemplatedMailDTO.prototype, "app", void 0);
47
+ __decorate([
48
+ (0, class_validator_1.IsOptional)(),
49
+ (0, class_validator_1.IsNumber)({}, { message: (args) => (0, api_locale_1.getLocaleText)('validation.numberRequired', args.value) }),
50
+ __metadata("design:type", Number)
51
+ ], SendTemplatedMailDTO.prototype, "userId", void 0);
42
52
  //# sourceMappingURL=send.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.dto.js","sourceRoot":"","sources":["../../../src/mail/dto/send.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAoD;AACpD,qDAA6E;AAE7E,MAAa,oBAAoB;CAwBhC;AAxBD,oDAwBC;AArBC;IAFC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;mDAC3E;AAId;IAFC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;kDAC5E;AAGb;IADC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;uDACtD;AAQlC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;yDACnE;AAKrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;iDAC3E"}
1
+ {"version":3,"file":"send.dto.js","sourceRoot":"","sources":["../../../src/mail/dto/send.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAoD;AACpD,qDAAuF;AAEvF,MAAa,oBAAoB;CAiDhC;AAjDD,oDAiDC;AA9CC;IAFC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;mDAC3E;AAId;IAFC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;kDAC5E;AAGb;IADC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;uDACtD;AAQlC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;yDACnE;AAYrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;qDACvE;AAQjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;iDAC3E;AAUb;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;oDAC5E"}
@@ -66,6 +66,7 @@ export declare class MailController {
66
66
  success: boolean;
67
67
  provider: string;
68
68
  from: string;
69
+ replyTo?: string;
69
70
  config: any;
70
71
  }>;
71
72
  update(id: number, data: UpdateDTO): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"mail.controller.d.ts","sourceRoot":"","sources":["../../src/mail/mail.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,MAAM,cAAc,CAAC;AAkB/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAEa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAIrC,IAAI,CAAW,MAAM,KAAA,EAAgB,gBAAgB,KAAA;;;;;;;;;IAKrD,GAAG,CACoB,EAAE,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;IAQ9B,OAAO,CACgB,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,QAAQ,EACH,WAAW,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM;IAgB9B,OAAO,CAAW,eAAe,EAAE,MAAM,EAAU,IAAI,EAAE,UAAU,EAAmB,WAAW,CAAC,EAAE,MAAM;;;IAK1G,MAAM,CAAS,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAK9B,YAAY;;;;;;IAKZ,MAAM,CAA4B,EAAE,EAAE,MAAM,EAAU,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAQrE,MAAM,CAAS,IAAI,EAAE,SAAS;;;IAK9B,YAAY,CAAW,MAAM,EAAE,MAAM,EAAU,IAAI,EAAE,WAAW;IAKhE,MAAM,CAAS,IAAI,EAAE,SAAS;;;;;;;;;;;CAGrC"}
1
+ {"version":3,"file":"mail.controller.d.ts","sourceRoot":"","sources":["../../src/mail/mail.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,MAAM,cAAc,CAAC;AAkB/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAEa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAIrC,IAAI,CAAW,MAAM,KAAA,EAAgB,gBAAgB,KAAA;;;;;;;;;IAKrD,GAAG,CACoB,EAAE,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;IAQ9B,OAAO,CACgB,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,QAAQ,EACH,WAAW,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM;IAgB9B,OAAO,CAAW,eAAe,EAAE,MAAM,EAAU,IAAI,EAAE,UAAU,EAAmB,WAAW,CAAC,EAAE,MAAM;;;IAK1G,MAAM,CAAS,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAK9B,YAAY;;;;;;;IAKZ,MAAM,CAA4B,EAAE,EAAE,MAAM,EAAU,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAQrE,MAAM,CAAS,IAAI,EAAE,SAAS;;;IAK9B,YAAY,CAAW,MAAM,EAAE,MAAM,EAAU,IAAI,EAAE,WAAW;IAKhE,MAAM,CAAS,IAAI,EAAE,SAAS;;;;;;;;;;;CAGrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mail.module.d.ts","sourceRoot":"","sources":["../../src/mail/mail.module.ts"],"names":[],"mappings":"AAUA,qBA4Fa,UAAU;CAAI"}
1
+ {"version":3,"file":"mail.module.d.ts","sourceRoot":"","sources":["../../src/mail/mail.module.ts"],"names":[],"mappings":"AAWA,qBA6Fa,UAAU;CAAI"}
@@ -12,6 +12,7 @@ const api_mail_1 = require("@hed-hog/api-mail");
12
12
  const api_pagination_1 = require("@hed-hog/api-pagination");
13
13
  const api_prisma_1 = require("@hed-hog/api-prisma");
14
14
  const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
15
16
  const mail_sent_module_1 = require("../mail-sent/mail-sent.module");
16
17
  const setting_module_1 = require("../setting/setting.module");
17
18
  const mail_controller_1 = require("./mail.controller");
@@ -97,6 +98,7 @@ exports.MailModule = MailModule = __decorate([
97
98
  (0, common_1.forwardRef)(() => api_pagination_1.PaginationModule),
98
99
  (0, common_1.forwardRef)(() => api_locale_1.LocaleModule),
99
100
  (0, common_1.forwardRef)(() => setting_module_1.SettingModule),
101
+ config_1.ConfigModule,
100
102
  ],
101
103
  controllers: [mail_controller_1.MailController],
102
104
  providers: [mail_service_1.MailService],
@@ -1 +1 @@
1
- {"version":3,"file":"mail.module.js","sourceRoot":"","sources":["../../src/mail/mail.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,gDAAoF;AACpF,4DAA2D;AAC3D,oDAAkE;AAClE,2CAAoD;AACpD,oEAA+D;AAC/D,8DAA0D;AAC1D,uDAAmD;AACnD,iDAA6C;AA8FtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAI,CAAA;AAAd,gCAAU;qBAAV,UAAU;IA5FtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAc,CAAC,YAAY,CAAC;gBAC3C,OAAO,EAAE,CAAC,yBAAY,CAAC;gBACvB,MAAM,EAAE,CAAC,0BAAa,CAAC;gBACvB,UAAU,EAAE,KAAK,EAAE,MAAqB,EAAE,EAAE;;oBAC1C,IAAI,CAAC;wBACH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;4BACpD,KAAK,EAAE;gCACL,IAAI,EAAE;oCACJ,EAAE,EAAE,CAAC,6BAA6B,CAAC;iCACpC;6BACF;4BACD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;yBACpC,CAAC,CAAC;wBAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAChC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;wBAEF,MAAM,WAAW,GAAG,MAAM,CACxB,MAAA,kBAAkB,CAAC,GAAG,CAAC,6BAA6B,CAAC,mCAAI,EAAE,CAC5D,CAAC,IAAI,EAAE,CAAC;wBAET,IAAI,CAAC,WAAW,EAAE,CAAC;4BACjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAuB,CAAC;wBACvI,CAAC;wBAED,MAAM,OAAO,GAAG,MAAO,MAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC;4BACnE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;4BAC5B,OAAO,EAAE;gCACP,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gCAChD,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;6BAC7C;yBACF,CAAC,CAAC;wBAEH,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAuB,CAAC;wBACvI,CAAC;wBAED,IAAI,CAAA,MAAA,OAAO,CAAC,gBAAgB,0CAAE,IAAI,MAAK,OAAO,EAAE,CAAC;4BAC/C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAuB,CAAC;wBACvI,CAAC;wBAED,MAAM,GAAG,GAAG,MAAC,OAAO,CAAC,MAAkC,mCAAI,EAAE,CAAC;wBAC9D,MAAM,IAAI,GAAsB,EAAE,MAAM,EAAE,IAAI,EAAuB,CAAC;wBAEtE,QAAQ,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;4BAC1C,KAAK,OAAO;gCACV,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;oCACzB,IAAI,EAAE,OAAO;oCACb,QAAQ,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,SAAS,mCAAI,EAAE,CAAC;oCACrC,YAAY,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,EAAE,CAAC;oCAC7C,YAAY,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,EAAE,CAAC;oCAC7C,IAAI,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,UAAU,mCAAI,EAAE,CAAC;iCACnC,CAAC,CAAC;4BACL,KAAK,MAAM;gCACT,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;oCACzB,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,WAAW,CAAC;oCACrC,IAAI,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,IAAI,CAAC;oCAC9B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;oCAC3B,QAAQ,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,QAAQ,mCAAI,EAAE,CAAC;oCACpC,QAAQ,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,QAAQ,mCAAI,EAAE,CAAC;iCACrC,CAAC,CAAC;4BACL,KAAK,KAAK;gCACR,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;oCACzB,IAAI,EAAE,KAAK;oCACX,MAAM,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,MAAM,mCAAI,EAAE,CAAC;oCAChC,WAAW,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,EAAE,CAAC;oCAC5C,eAAe,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE,CAAC;oCACpD,IAAI,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,UAAU,mCAAI,EAAE,CAAC;iCACnC,CAAC,CAAC;4BACL;gCACE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAuB,CAAC;wBACzI,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;wBACrD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAuB,CAAC;oBACvI,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YACH,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAc,CAAC;YAChC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAgB,CAAC;YAClC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;SAChC;QACD,WAAW,EAAE,CAAC,gCAAc,CAAC;QAC7B,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAAI"}
1
+ {"version":3,"file":"mail.module.js","sourceRoot":"","sources":["../../src/mail/mail.module.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,16 @@ import { PaginationDTO } from '@hed-hog/api-pagination';
5
5
  import { PrismaService } from '@hed-hog/api-prisma';
6
6
  import { OnModuleInit } from '@nestjs/common';
7
7
  import { IntegrationDeveloperApiService } from '../integration/services/integration-developer-api.service';
8
+ import { BrandAssetService } from '../setting/brand-asset.service';
8
9
  import { SettingService } from '../setting/setting.service';
9
10
  import { CreateDTO } from './dto/create.dto';
10
11
  import { ImportDTO } from './dto/import.dto';
11
12
  import { PreviewDTO } from './dto/preview.dto';
12
- import { SendTemplatedMailDTO } from './dto/send.dto';
13
+ import { SendTemplatedMailDTO, SendTemplatedMailResult } from './dto/send.dto';
13
14
  import { TestMailDTO } from './dto/test-mail.dto';
14
15
  import { UpdateDTO } from './dto/update.dto';
15
16
  import { IncidentService } from '../incident/incident.service';
17
+ export type { SendTemplatedMailResult } from './dto/send.dto';
16
18
  export declare class MailService implements OnModuleInit {
17
19
  private readonly prismaService;
18
20
  private readonly mailMainService;
@@ -20,13 +22,22 @@ export declare class MailService implements OnModuleInit {
20
22
  private readonly setting;
21
23
  private readonly integrationApi;
22
24
  private readonly incident;
25
+ private readonly brandAsset;
23
26
  private readonly logger;
24
27
  private readonly modelName;
25
28
  private readonly integrationProfileSettingSlug;
26
- constructor(prismaService: PrismaService, mailMainService: MailMainService, localeService: LocaleService, setting: SettingService, integrationApi: IntegrationDeveloperApiService, incident: IncidentService);
29
+ constructor(prismaService: PrismaService, mailMainService: MailMainService, localeService: LocaleService, setting: SettingService, integrationApi: IntegrationDeveloperApiService, incident: IncidentService, brandAsset: BrandAssetService);
27
30
  onModuleInit(): void;
31
+ /** Settings que compoem o cabecalho do e-mail resolvido em `resolveLayout`. */
32
+ private static readonly BRAND_SLUGS;
28
33
  private isMailConfigSlug;
29
34
  private isSettingEnabled;
35
+ /**
36
+ * Cor de marca (`theme-primary-light`) e seu contraste (`theme-primary-foreground-light`),
37
+ * disponibilizadas como `{{primaryColor}}`/`{{primaryForeground}}` no corpo Handlebars dos
38
+ * templates (ex.: o botao de CTA de um convite) e no layout base do e-mail.
39
+ */
40
+ private getThemeVariables;
30
41
  private syncConfiguredMailFlag;
31
42
  /**
32
43
  * Reload mail configuration from database and update MailMainService.
@@ -38,6 +49,7 @@ export declare class MailService implements OnModuleInit {
38
49
  success: boolean;
39
50
  provider: string;
40
51
  from: string;
52
+ replyTo?: string;
41
53
  config: any;
42
54
  }>;
43
55
  /**
@@ -129,8 +141,40 @@ export declare class MailService implements OnModuleInit {
129
141
  delete({ ids }: DeleteDTO): Promise<{
130
142
  count: number;
131
143
  }>;
132
- sendTemplatedMail(locale: string, { email, slug, variables, profileSlug, app }: SendTemplatedMailDTO): Promise<void>;
133
- private getLocaleRecord;
144
+ /**
145
+ * Continua sem lancar: ha dezenas de call sites que disparam e-mail sem
146
+ * `await`, e transformar isto em excecao derrubaria fluxos que hoje so perdem
147
+ * a notificacao. O que muda e o *retorno* - quem se importa (a fila do SAC,
148
+ * por exemplo) agora consegue distinguir enviado de engolido, em vez de
149
+ * assumir sucesso porque a promise resolveu.
150
+ */
151
+ sendTemplatedMail(locale: string, { email, slug, variables, profileSlug, replyTo, app, userId }: SendTemplatedMailDTO): Promise<SendTemplatedMailResult>;
152
+ /**
153
+ * Idioma em que ESTE destinatario deve receber o e-mail.
154
+ *
155
+ * Publico porque quem pre-formata variaveis antes de enviar (data e pais do
156
+ * alerta de seguranca) precisa do mesmo idioma que o corpo, senao o texto sai
157
+ * em portugues com a data em ingles. E idempotente: chamar aqui e passar o
158
+ * resultado como `locale` no envio da no mesmo lugar.
159
+ *
160
+ * Ordem:
161
+ * 1. preferencia gravada do destinatario - escolha explicita sempre vence;
162
+ * 2. locale do chamador, se o cliente realmente declarou um idioma;
163
+ * 3. setting global `language`;
164
+ * 4. `en`.
165
+ */
166
+ resolveRecipientLocale(email: string, callerLocale?: string | null, userId?: number): Promise<string>;
167
+ /** `user_identifier` tem unique (type, value), entao e busca por indice. */
168
+ private findUserIdByEmail;
169
+ /**
170
+ * Escolhe a traducao do template, caindo para o que existir.
171
+ *
172
+ * O filtro por locale ficava na propria query e `mail_locale[0]` era acessado
173
+ * sem checagem: template sem a traducao pedida virava TypeError silencioso.
174
+ * Trazendo todas as traducoes numa query so, a escolha vira decisao explicita
175
+ * - e o `locale.findUnique` que estourava com `pt-BR` deixa de ser preciso.
176
+ */
177
+ private pickTranslation;
134
178
  private getMailTemplate;
135
179
  private interpolateTemplate;
136
180
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"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"}
@@ -54,16 +54,18 @@ const common_1 = require("@nestjs/common");
54
54
  const Handlebars = __importStar(require("handlebars"));
55
55
  const integration_profile_utils_1 = require("../integration-profile/integration-profile.utils");
56
56
  const integration_developer_api_service_1 = require("../integration/services/integration-developer-api.service");
57
+ const brand_asset_service_1 = require("../setting/brand-asset.service");
57
58
  const setting_service_1 = require("../setting/setting.service");
58
59
  const incident_service_1 = require("../incident/incident.service");
59
60
  let MailService = MailService_1 = class MailService {
60
- constructor(prismaService, mailMainService, localeService, setting, integrationApi, incident) {
61
+ constructor(prismaService, mailMainService, localeService, setting, integrationApi, incident, brandAsset) {
61
62
  this.prismaService = prismaService;
62
63
  this.mailMainService = mailMainService;
63
64
  this.localeService = localeService;
64
65
  this.setting = setting;
65
66
  this.integrationApi = integrationApi;
66
67
  this.incident = incident;
68
+ this.brandAsset = brandAsset;
67
69
  this.logger = new common_1.Logger(MailService_1.name);
68
70
  this.modelName = 'mail';
69
71
  this.integrationProfileSettingSlug = 'mail-integration-profile-id';
@@ -76,6 +78,12 @@ let MailService = MailService_1 = class MailService {
76
78
  handler: async (event) => {
77
79
  var _a;
78
80
  const slug = String(((_a = event.payload) === null || _a === void 0 ? void 0 : _a.slug) || '').trim();
81
+ // O layout resolvido (logo, cores, nome) fica ate 60s em cache no
82
+ // api-mail. Sem descartar aqui, "subi o logo e mandei um teste" - o
83
+ // fluxo natural de validacao - mostraria o valor antigo.
84
+ if (MailService_1.BRAND_SLUGS.has(slug)) {
85
+ this.mailMainService.invalidateLayoutCache();
86
+ }
79
87
  if (!this.isMailConfigSlug(slug)) {
80
88
  return;
81
89
  }
@@ -89,6 +97,22 @@ let MailService = MailService_1 = class MailService {
89
97
  isSettingEnabled(value) {
90
98
  return value === true || value === 'true';
91
99
  }
100
+ /**
101
+ * Cor de marca (`theme-primary-light`) e seu contraste (`theme-primary-foreground-light`),
102
+ * disponibilizadas como `{{primaryColor}}`/`{{primaryForeground}}` no corpo Handlebars dos
103
+ * templates (ex.: o botao de CTA de um convite) e no layout base do e-mail.
104
+ */
105
+ async getThemeVariables() {
106
+ const settings = await this.setting.getSettingValues([
107
+ 'theme-primary-light',
108
+ 'theme-primary-foreground-light',
109
+ ]);
110
+ return {
111
+ primaryColor: settings['theme-primary-light'] || api_mail_1.DEFAULT_PRIMARY_COLOR,
112
+ primaryForeground: settings['theme-primary-foreground-light'] ||
113
+ api_mail_1.DEFAULT_PRIMARY_FOREGROUND,
114
+ };
115
+ }
92
116
  async syncConfiguredMailFlag() {
93
117
  var _a;
94
118
  try {
@@ -151,7 +175,8 @@ let MailService = MailService_1 = class MailService {
151
175
  this.mailMainService.setConfig(config);
152
176
  this.logger.log(`Mail configuration reloaded from profile "${profile.name}" (${providerSlug})`);
153
177
  const from = (0, integration_profile_utils_1.getFromAddress)(profile.config);
154
- return { success: true, provider: providerSlug, from, config };
178
+ const replyTo = (0, integration_profile_utils_1.getReplyToAddress)(profile.config);
179
+ return { success: true, provider: providerSlug, from, replyTo, config };
155
180
  }
156
181
  catch (error) {
157
182
  this.logger.error('Error reloading mail configuration:', error);
@@ -344,7 +369,15 @@ let MailService = MailService_1 = class MailService {
344
369
  },
345
370
  });
346
371
  }
347
- async sendTemplatedMail(locale, { email, slug, variables, profileSlug, app }) {
372
+ /**
373
+ * Continua sem lancar: ha dezenas de call sites que disparam e-mail sem
374
+ * `await`, e transformar isto em excecao derrubaria fluxos que hoje so perdem
375
+ * a notificacao. O que muda e o *retorno* - quem se importa (a fila do SAC,
376
+ * por exemplo) agora consegue distinguir enviado de engolido, em vez de
377
+ * assumir sucesso porque a promise resolveu.
378
+ */
379
+ async sendTemplatedMail(locale, { email, slug, variables, profileSlug, replyTo, app, userId }) {
380
+ var _a, _b, _c, _d, _e, _f, _g;
348
381
  const settings = await this.setting.getSettingValues(['configured-mail']);
349
382
  if (!this.isSettingEnabled(settings['configured-mail'])) {
350
383
  this.logger.warn('Mail service is not configured. Aborting sending email.');
@@ -357,26 +390,48 @@ let MailService = MailService_1 = class MailService {
357
390
  message: 'Envio de e-mail abortado: a configuracao de e-mail nao esta ativa.',
358
391
  context: { slug },
359
392
  });
360
- return;
393
+ return { sent: false, reason: 'mail-not-configured' };
361
394
  }
362
395
  try {
363
- const { from } = await this.reloadConfig(profileSlug);
364
- const localeRecord = await this.getLocaleRecord(locale);
365
- const mail = await this.getMailTemplate(slug, localeRecord.id);
366
- const { subject, body } = mail.mail_locale[0];
367
- const brandName = await this.mailMainService.getBrandName(app, locale);
368
- const mergedVariables = Object.assign({ brandName }, variables);
396
+ // O `replyTo` do perfil de integracao entra como padrao para que a
397
+ // resposta de quem trata o e-mail transacional como conversa caia numa
398
+ // caixa monitorada, e nao no remetente. Quem passa `replyTo` no DTO
399
+ // continua mandando.
400
+ const { from, replyTo: profileReplyTo } = await this.reloadConfig(profileSlug);
401
+ const resolvedReplyTo = (replyTo === null || replyTo === void 0 ? void 0 : replyTo.trim()) || profileReplyTo;
402
+ const recipientLocale = await this.resolveRecipientLocale(email, locale, userId);
403
+ const mail = await this.getMailTemplate(slug);
404
+ const translation = this.pickTranslation(mail, recipientLocale);
405
+ if (!translation) {
406
+ // Antes isto era um TypeError em `mail_locale[0]`, engolido pelo catch
407
+ // abaixo e reportado como `send-failed` - um template sem traducao
408
+ // nenhuma parecia falha do provedor.
409
+ this.logger.error(`Template "${slug}" has no translation available.`);
410
+ this.incident.record({
411
+ source: 'core.mail',
412
+ code: 'mail_template_no_locale',
413
+ severity: 'critical',
414
+ message: `Template "${slug}" nao tem nenhuma traducao cadastrada.`,
415
+ key: slug,
416
+ context: { slug, locale: recipientLocale },
417
+ });
418
+ return { sent: false, reason: 'template-locale-missing' };
419
+ }
420
+ const { subject, body, code: templateLocale } = translation;
421
+ const brandName = await this.mailMainService.getBrandName(app, templateLocale);
422
+ const { primaryColor, primaryForeground } = await this.getThemeVariables();
423
+ const mergedVariables = Object.assign({ brandName, primaryColor, primaryForeground }, variables);
369
424
  const parsedSubject = this.interpolateTemplate(subject, mergedVariables);
370
425
  const parsedBody = this.interpolateTemplate(body, mergedVariables);
371
- await this.mailMainService.send({
372
- to: email,
373
- from,
374
- subject: parsedSubject,
375
- body: parsedBody,
376
- mail_id: mail.id,
377
- locale,
378
- app,
379
- });
426
+ const sendResult = await this.mailMainService.send(Object.assign(Object.assign({ to: email, from }, (resolvedReplyTo ? { replyTo: resolvedReplyTo } : {})), { subject: parsedSubject, body: parsedBody, mail_id: mail.id,
427
+ // O layout (header/footer) e escolhido por este locale la no api-mail,
428
+ // entao tem que ser o do template escolhido, nao o cru do request.
429
+ locale: templateLocale, app }));
430
+ const providerMessageId = (_g = (_d = (_b = (_a = sendResult === null || sendResult === void 0 ? void 0 : sendResult.result) === null || _a === void 0 ? void 0 : _a.MessageId) !== null && _b !== void 0 ? _b : (_c = sendResult === null || sendResult === void 0 ? void 0 : sendResult.result) === null || _c === void 0 ? void 0 : _c.messageId) !== null && _d !== void 0 ? _d : (_f = (_e = sendResult === null || sendResult === void 0 ? void 0 : sendResult.result) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.id) !== null && _g !== void 0 ? _g : null;
431
+ return {
432
+ sent: true,
433
+ providerMessageId: providerMessageId ? String(providerMessageId) : null,
434
+ };
380
435
  }
381
436
  catch (error) {
382
437
  this.logger.error('Error sending templated mail:', error);
@@ -389,24 +444,95 @@ let MailService = MailService_1 = class MailService {
389
444
  key: slug,
390
445
  context: { slug, locale },
391
446
  });
447
+ return {
448
+ sent: false,
449
+ reason: 'send-failed',
450
+ error: error instanceof Error ? error.message : String(error),
451
+ };
452
+ }
453
+ }
454
+ /**
455
+ * Idioma em que ESTE destinatario deve receber o e-mail.
456
+ *
457
+ * Publico porque quem pre-formata variaveis antes de enviar (data e pais do
458
+ * alerta de seguranca) precisa do mesmo idioma que o corpo, senao o texto sai
459
+ * em portugues com a data em ingles. E idempotente: chamar aqui e passar o
460
+ * resultado como `locale` no envio da no mesmo lugar.
461
+ *
462
+ * Ordem:
463
+ * 1. preferencia gravada do destinatario - escolha explicita sempre vence;
464
+ * 2. locale do chamador, se o cliente realmente declarou um idioma;
465
+ * 3. setting global `language`;
466
+ * 4. `en`.
467
+ */
468
+ async resolveRecipientLocale(email, callerLocale, userId) {
469
+ var _a, _b;
470
+ try {
471
+ const recipientId = userId !== null && userId !== void 0 ? userId : (await this.findUserIdByEmail(email));
472
+ const resolved = await this.setting.resolveUserLocale(recipientId);
473
+ // A cadeia do `SettingService` usa o locale do CONTEXTO da requisicao.
474
+ // Quase sempre e o mesmo que chegou aqui, mas ha envios fora de request
475
+ // (fila, cron) e chamadores que passam um locale proprio: nesses, o
476
+ // `callerLocale` e a unica pista que existe.
477
+ if (resolved !== 'en') {
478
+ return resolved;
479
+ }
480
+ return (_a = (0, api_locale_1.normalizeLocaleCode)(callerLocale)) !== null && _a !== void 0 ? _a : resolved;
481
+ }
482
+ catch (error) {
483
+ this.logger.warn(`Falling back to caller locale while resolving recipient language: ${error}`);
484
+ return (_b = (0, api_locale_1.normalizeLocaleCode)(callerLocale)) !== null && _b !== void 0 ? _b : 'en';
392
485
  }
393
486
  }
394
- async getLocaleRecord(locale) {
395
- const localeRecord = await this.prismaService.locale.findUnique({
396
- where: { code: locale },
487
+ /** `user_identifier` tem unique (type, value), entao e busca por indice. */
488
+ async findUserIdByEmail(email) {
489
+ var _a;
490
+ const value = String(email !== null && email !== void 0 ? email : '').trim();
491
+ if (!value) {
492
+ return null;
493
+ }
494
+ const identifier = await this.prismaService.user_identifier.findFirst({
495
+ where: { type: 'email', value },
496
+ select: { user_id: true },
397
497
  });
398
- if (!localeRecord) {
399
- throw new Error(`Locale "${locale}" not found`);
498
+ return (_a = identifier === null || identifier === void 0 ? void 0 : identifier.user_id) !== null && _a !== void 0 ? _a : null;
499
+ }
500
+ /**
501
+ * Escolhe a traducao do template, caindo para o que existir.
502
+ *
503
+ * O filtro por locale ficava na propria query e `mail_locale[0]` era acessado
504
+ * sem checagem: template sem a traducao pedida virava TypeError silencioso.
505
+ * Trazendo todas as traducoes numa query so, a escolha vira decisao explicita
506
+ * - e o `locale.findUnique` que estourava com `pt-BR` deixa de ser preciso.
507
+ */
508
+ pickTranslation(mail, requested) {
509
+ var _a, _b, _c, _d;
510
+ const translations = ((_a = mail === null || mail === void 0 ? void 0 : mail.mail_locale) !== null && _a !== void 0 ? _a : [])
511
+ .map((item) => {
512
+ var _a;
513
+ return ({
514
+ subject: item === null || item === void 0 ? void 0 : item.subject,
515
+ body: item === null || item === void 0 ? void 0 : item.body,
516
+ code: (_a = item === null || item === void 0 ? void 0 : item.locale) === null || _a === void 0 ? void 0 : _a.code,
517
+ });
518
+ })
519
+ .filter((item) => item.code && item.subject != null && item.body != null);
520
+ if (!translations.length) {
521
+ return null;
400
522
  }
401
- return localeRecord;
523
+ const byCode = (code) => translations.find((item) => item.code === code);
524
+ return (_d = (_c = (_b = byCode(requested)) !== null && _b !== void 0 ? _b : byCode('pt')) !== null && _c !== void 0 ? _c : byCode('en')) !== null && _d !== void 0 ? _d : translations[0];
402
525
  }
403
- async getMailTemplate(slug, localeId) {
526
+ async getMailTemplate(slug) {
404
527
  const mail = await this.prismaService.mail.findUnique({
405
528
  where: { slug },
406
529
  include: {
407
530
  mail_locale: {
408
- where: { locale_id: localeId },
409
- select: { subject: true, body: true },
531
+ select: {
532
+ subject: true,
533
+ body: true,
534
+ locale: { select: { code: true } },
535
+ },
410
536
  },
411
537
  mail_var: {
412
538
  select: { name: true },
@@ -414,7 +540,7 @@ let MailService = MailService_1 = class MailService {
414
540
  },
415
541
  });
416
542
  if (!mail) {
417
- throw new Error(`Template "${slug}" not found for locale "${localeId}"`);
543
+ throw new Error(`Template "${slug}" not found`);
418
544
  }
419
545
  return mail;
420
546
  }
@@ -467,9 +593,21 @@ let MailService = MailService_1 = class MailService {
467
593
  */
468
594
  async preview(locale, { subject, body, variables, use_layout, layout }) {
469
595
  var _a, _b, _c;
470
- const settings = await this.setting.getSettingValues(['system-name']);
596
+ const settings = await this.setting.getSettingValues([
597
+ 'system-name',
598
+ 'theme-primary-light',
599
+ 'theme-primary-foreground-light',
600
+ 'image-url',
601
+ ]);
471
602
  const brandName = settings['system-name'];
472
- const data = Object.assign({ brandName }, (variables || {}));
603
+ const primaryColor = settings['theme-primary-light'] || api_mail_1.DEFAULT_PRIMARY_COLOR;
604
+ const primaryForeground = settings['theme-primary-foreground-light'] ||
605
+ api_mail_1.DEFAULT_PRIMARY_FOREGROUND;
606
+ const rawLogoUrl = settings['image-url'];
607
+ const logoUrl = rawLogoUrl
608
+ ? (await this.brandAsset.resolveAssetUrl(rawLogoUrl)) || undefined
609
+ : undefined;
610
+ const data = Object.assign({ brandName, primaryColor, primaryForeground }, (variables || {}));
473
611
  const parsedSubject = subject ? this.interpolateTemplate(subject, data) : '';
474
612
  const parsedBody = body ? this.interpolateTemplate(body, data) : '';
475
613
  let resolvedLayout = null;
@@ -489,13 +627,15 @@ let MailService = MailService_1 = class MailService {
489
627
  // devolver o corpo cru.
490
628
  layout: use_layout === false ? { wrapper: '' } : resolvedLayout,
491
629
  brandName,
630
+ primaryColor,
631
+ primaryForeground,
632
+ logoUrl,
492
633
  lang: locale,
493
634
  });
494
635
  return { html };
495
636
  }
496
637
  async sendTestMail(locale, { slug, email, subject, body, variables, }) {
497
- const localeRecord = await this.getLocaleRecord(locale);
498
- const mail = await this.getMailTemplate(slug, localeRecord.id);
638
+ const mail = await this.getMailTemplate(slug);
499
639
  const settings = await this.setting.getSettingValues(['configured-mail']);
500
640
  if (!this.isSettingEnabled(settings['configured-mail'])) {
501
641
  throw new common_1.BadRequestException('Mail service is not configured.');
@@ -503,7 +643,8 @@ let MailService = MailService_1 = class MailService {
503
643
  const { from } = await this.reloadConfig();
504
644
  try {
505
645
  const brandName = await this.mailMainService.getBrandName(undefined, locale);
506
- const mergedVariables = Object.assign({ brandName }, (variables || {}));
646
+ const { primaryColor, primaryForeground } = await this.getThemeVariables();
647
+ const mergedVariables = Object.assign({ brandName, primaryColor, primaryForeground }, (variables || {}));
507
648
  const parsedSubject = this.interpolateTemplate(subject, mergedVariables);
508
649
  const parsedBody = this.interpolateTemplate(body, mergedVariables);
509
650
  return this.mailMainService.send({
@@ -611,6 +752,15 @@ let MailService = MailService_1 = class MailService {
611
752
  }
612
753
  };
613
754
  exports.MailService = MailService;
755
+ /** Settings que compoem o cabecalho do e-mail resolvido em `resolveLayout`. */
756
+ MailService.BRAND_SLUGS = new Set([
757
+ 'image-url',
758
+ 'url',
759
+ 'api-url',
760
+ 'system-name',
761
+ 'theme-primary-light',
762
+ 'theme-primary-foreground-light',
763
+ ]);
614
764
  exports.MailService = MailService = MailService_1 = __decorate([
615
765
  (0, common_1.Injectable)(),
616
766
  __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => api_prisma_1.PrismaService))),
@@ -619,11 +769,13 @@ exports.MailService = MailService = MailService_1 = __decorate([
619
769
  __param(3, (0, common_1.Inject)((0, common_1.forwardRef)(() => setting_service_1.SettingService))),
620
770
  __param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => integration_developer_api_service_1.IntegrationDeveloperApiService))),
621
771
  __param(5, (0, common_1.Inject)((0, common_1.forwardRef)(() => incident_service_1.IncidentService))),
772
+ __param(6, (0, common_1.Inject)((0, common_1.forwardRef)(() => brand_asset_service_1.BrandAssetService))),
622
773
  __metadata("design:paramtypes", [api_prisma_1.PrismaService,
623
774
  api_mail_1.MailService,
624
775
  api_locale_1.LocaleService,
625
776
  setting_service_1.SettingService,
626
777
  integration_developer_api_service_1.IntegrationDeveloperApiService,
627
- incident_service_1.IncidentService])
778
+ incident_service_1.IncidentService,
779
+ brand_asset_service_1.BrandAssetService])
628
780
  ], MailService);
629
781
  //# sourceMappingURL=mail.service.js.map