@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
@@ -75,6 +75,7 @@
75
75
  "tab2fa": "2FA",
76
76
  "tabAccounts": "Contas",
77
77
  "tabSessions": "Sessões",
78
+ "tabDevices": "Dispositivos",
78
79
  "tabMcpTokens": "Tokens MCP",
79
80
  "tabTokens": "Tokens",
80
81
  "breadcrumbLabel": "Conta",
@@ -255,6 +256,7 @@
255
256
  "tabIdentifiers": "Identificadores",
256
257
  "tabMfa": "MFA",
257
258
  "tabSessions": "Sessões",
259
+ "tabDevices": "Dispositivos",
258
260
  "tabEmails": "E-mails",
259
261
  "tabLogs": "Logs",
260
262
  "cardLastLoginDescription": "Último login",
@@ -384,7 +386,8 @@
384
386
  "passwordResetPending": "Reset pendente",
385
387
  "passwordResetNone": "Em dia",
386
388
  "neverLoggedIn": "Nunca acessou",
387
- "filterOptionPasswordReset": "Reset de senha pendente"
389
+ "filterOptionPasswordReset": "Reset de senha pendente",
390
+ "activityByActor": "por {name}"
388
391
  },
389
392
  "RolePage": {
390
393
  "title": "Gerenciamento de Cargos",
@@ -584,12 +587,14 @@
584
587
  "variablesHelp": "Use '{{variavel}}' no corpo do e-mail",
585
588
  "bodyLabel": "Corpo HTML",
586
589
  "localeLabel": "Idioma",
590
+ "sectionIdentification": "Identificação",
587
591
  "preview": "Preview",
588
592
  "availableVariables": "Variáveis disponíveis:",
589
593
  "testValuePlaceholder": "Valor de teste",
590
594
  "downloadYAML": "Baixar YAML",
591
595
  "generateMigration": "Gerar Migration",
592
596
  "sendTestEmail": "Enviar e-mail de teste",
597
+ "moreActions": "Mais ações",
593
598
  "cancel": "Cancelar",
594
599
  "saveChanges": "Salvar Alterações",
595
600
  "createTemplate": "Criar Template",
@@ -719,7 +724,11 @@
719
724
  "logout": "Realizou logout",
720
725
  "resetPassword": "Redefiniu a senha",
721
726
  "revokeAllSessions": "Revogou todas as sessões",
722
- "revokeSession": "Revogou uma sessão"
727
+ "revokeSession": "Revogou uma sessão",
728
+ "impersonationStarted": "Acesso simulado por um operador",
729
+ "impersonationEnded": "Simulação de acesso encerrada",
730
+ "impersonationPerformed": "Simulou o acesso de outro usuário",
731
+ "impersonationPerformedEnded": "Encerrou a simulação de acesso"
723
732
  },
724
733
  "LoginPage": {
725
734
  "title": "Autenticação",
@@ -770,6 +779,16 @@
770
779
  "submitButton": "Redefinir senha",
771
780
  "submitButtonLoading": "Redefinindo..."
772
781
  },
782
+ "ConfirmEmailPage": {
783
+ "title": "Confirmação de e-mail",
784
+ "checking": "Só um instante enquanto validamos o link...",
785
+ "invalidTitle": "Link inválido",
786
+ "invalidDescription": "Este link de confirmação é inválido ou já expirou. Sua conta continua ativa: basta entrar normalmente.",
787
+ "successTitle": "E-mail confirmado",
788
+ "successDescription": "Pronto! Seu endereço de e-mail foi confirmado.",
789
+ "alreadyConfirmedDescription": "Seu e-mail já estava confirmado. Não é preciso fazer mais nada.",
790
+ "goToLogin": "Ir para o login"
791
+ },
773
792
  "ForgotPage": {
774
793
  "title": "Esqueci minha Senha",
775
794
  "emailLabel": "E-mail",
@@ -1027,7 +1046,8 @@
1027
1046
  "revokeSuccess": "Sessão revogada com sucesso!",
1028
1047
  "revokeFailure": "Falha ao revogar a sessão",
1029
1048
  "revokeAllSuccess": "Sessões revogadas com sucesso!",
1030
- "revokeAllFailure": "Falha ao revogar sessões"
1049
+ "revokeAllFailure": "Falha ao revogar sessões",
1050
+ "simulatedBy": "Simulado por {name}"
1031
1051
  },
1032
1052
  "UserMails": {
1033
1053
  "title": "E-mails enviados",
@@ -1069,7 +1089,10 @@
1069
1089
  "role_removed": "Papel removido",
1070
1090
  "avatar_changed": "Avatar alterado",
1071
1091
  "emptyTitle": "Nenhuma alteração registrada",
1072
- "emptyDescription": "As alterações administrativas feitas neste usuário aparecerão aqui."
1092
+ "emptyDescription": "As alterações administrativas feitas neste usuário aparecerão aqui.",
1093
+ "impersonation_requested": "Simulação de acesso solicitada",
1094
+ "impersonation_started": "Simulação de acesso iniciada",
1095
+ "impersonation_ended": "Simulação de acesso encerrada"
1073
1096
  },
1074
1097
  "UserActiveSessions": {
1075
1098
  "title": "Sessões Ativas",
@@ -1086,7 +1109,9 @@
1086
1109
  "revokeSuccess": "Sessão revogada com sucesso!",
1087
1110
  "revokeFailure": "Falha ao revogar sessão",
1088
1111
  "revokeAllSuccess": "Sessões revogadas com sucesso!",
1089
- "revokeAllFailure": "Falha ao revogar sessões"
1112
+ "revokeAllFailure": "Falha ao revogar sessões",
1113
+ "simulatedSession": "Acesso simulado",
1114
+ "simulatedBy": "Simulado por {name}"
1090
1115
  },
1091
1116
  "UserIdentifiers": {
1092
1117
  "title": "Identificadores do Usuário",
@@ -1290,6 +1315,7 @@
1290
1315
  "to": "Para",
1291
1316
  "cc": "CC",
1292
1317
  "bcc": "CCO",
1318
+ "providerMessageId": "ID da mensagem no provedor",
1293
1319
  "body": "Corpo",
1294
1320
  "createdAt": "Criado em",
1295
1321
  "updatedAt": "Atualizado em",
@@ -1309,6 +1335,20 @@
1309
1335
  "statusRead": "Lido",
1310
1336
  "statusError": "Erro",
1311
1337
  "statusUnavailable": "Sem status",
1338
+ "filterByDelivery": "Entrega",
1339
+ "deliveryAll": "Qualquer desfecho",
1340
+ "deliveryPending": "Sem resposta ainda",
1341
+ "deliveryPendingHint": "O provedor aceitou a mensagem e ainda não informou o desfecho.",
1342
+ "deliveryDelivered": "Entregue",
1343
+ "deliveryBounced": "Devolvido",
1344
+ "deliveryComplained": "Marcado como spam",
1345
+ "deliveryRejected": "Recusado",
1346
+ "undeliveredCurrentPage": "Não entregues (página)",
1347
+ "undeliveredHint": "Aceitos pelo provedor e devolvidos depois",
1348
+ "providerEvents": "Eventos de entrega do provedor",
1349
+ "noProviderEvents": "O provedor ainda não informou nada sobre esta mensagem.",
1350
+ "allRecipients": "Todos os destinatários",
1351
+ "reportingMta": "Reportado por",
1312
1352
  "statusReceivedShort": "Recebidos: {count}",
1313
1353
  "statusReadShort": "Lidos: {count}",
1314
1354
  "statusErrorShort": "Erros: {count}",
@@ -1360,7 +1400,7 @@
1360
1400
  "fileUploaded": "Arquivo enviado com sucesso.",
1361
1401
  "fileUploadFailed": "Falha ao enviar arquivo.",
1362
1402
  "fileIdNotReturned": "ID do arquivo não retornado.",
1363
- "temporaryOpenUrlNotReturned": "URL temporária de abertura não retornada.",
1403
+ "apiBaseUrlNotConfigured": "A URL base da API não está configurada.",
1364
1404
  "uploadedFileAlt": "Arquivo enviado",
1365
1405
  "fileUrlPlaceholder": "URL do arquivo",
1366
1406
  "durationUnitSeconds": "Segundos",
@@ -1384,44 +1424,21 @@
1384
1424
  "oauthProfileEmptyState": "Nenhum perfil OAuth encontrado.",
1385
1425
  "selectPaymentProfile": "Selecione um perfil de pagamento",
1386
1426
  "paymentProfileEmptyState": "Nenhum perfil de pagamento encontrado.",
1387
- "mailProfile": {
1388
- "nameLabel": "Nome *",
1389
- "namePlaceholder": "Meu Perfil de Email",
1390
- "fromEmailLabel": "Email de envio *",
1391
- "fromEmailPlaceholder": "nao-responda@exemplo.com",
1392
- "fromNameLabel": "Nome do remetente",
1393
- "fromNamePlaceholder": "Equipe Comercial",
1394
- "providerLabel": "Provedor *",
1395
- "providers": {
1396
- "ses": "Amazon SES"
1397
- },
1398
- "smtpHostLabel": "Host SMTP *",
1399
- "smtpHostPlaceholder": "smtp.exemplo.com",
1400
- "smtpPortLabel": "Porta SMTP *",
1401
- "smtpPortPlaceholder": "587",
1402
- "smtpUsernameLabel": "Usuário SMTP *",
1403
- "smtpUsernamePlaceholder": "usuario@exemplo.com",
1404
- "smtpPasswordLabel": "Senha SMTP *",
1405
- "replyToEmailLabel": "E-mail do reply-to",
1406
- "replyToEmailPlaceholder": "suporte@empresa.com",
1407
- "clientIdLabel": "Client ID *",
1408
- "clientSecretLabel": "Client Secret *",
1409
- "refreshTokenLabel": "Refresh Token *",
1410
- "accessKeyIdLabel": "Access Key ID *",
1411
- "secretAccessKeyLabel": "Secret Access Key *",
1412
- "regionLabel": "Região *",
1413
- "regionPlaceholder": "us-east-1"
1414
- },
1415
- "whatsappProfile": {
1416
- "nameLabel": "Nome *",
1417
- "namePlaceholder": "Meu Perfil de WhatsApp",
1418
- "providerLabel": "Provedor *",
1419
- "hostLabel": "Host da API *",
1420
- "hostPlaceholder": "https://api.exemplo.com",
1421
- "instanceNameLabel": "Nome da instância *",
1422
- "instanceNamePlaceholder": "MinhaInstancia",
1423
- "tokenLabel": "Token *",
1424
- "tokenPlaceholder": "Token de autenticação"
1427
+ "whatsappProfileEmptyState": "Nenhum perfil de WhatsApp encontrado.",
1428
+ "selectIntegrationProfile": "Selecione um perfil de integração",
1429
+ "integrationProfileEmptyState": "Nenhum perfil de integração encontrado.",
1430
+ "editProfileAria": "Editar {profile}",
1431
+ "createProfileAria": "Criar {profile}",
1432
+ "profileTypeNames": {
1433
+ "ai": "perfil de IA",
1434
+ "email": "perfil de e-mail",
1435
+ "whatsapp": "perfil de WhatsApp",
1436
+ "storage": "perfil de armazenamento",
1437
+ "oauth": "perfil OAuth",
1438
+ "payment": "perfil de pagamento",
1439
+ "infrastructure": "perfil de infraestrutura",
1440
+ "kubernetes": "perfil Kubernetes",
1441
+ "generic": "perfil de integração"
1425
1442
  },
1426
1443
  "selectInfraProfile": "Selecione o perfil de infraestrutura",
1427
1444
  "infraProfileEmptyState": "Nenhum perfil de infraestrutura encontrado. Crie um perfil DigitalOcean ou Kubernetes primeiro.",
@@ -1816,7 +1833,13 @@
1816
1833
  "decreaseZoom": "Diminuir zoom",
1817
1834
  "resetZoom": "Resetar zoom",
1818
1835
  "increaseZoom": "Aumentar zoom",
1819
- "saveAndClose": "Salvar e Fechar"
1836
+ "saveAndClose": "Salvar e Fechar",
1837
+ "aiEdit": "Editar com IA",
1838
+ "aiEditPromptLabel": "O que você quer mudar?",
1839
+ "aiEditPromptPlaceholder": "Ex.: deixe o texto mais formal e adicione uma lista com os próximos passos",
1840
+ "aiEditSubmit": "Gerar",
1841
+ "aiEditSuccess": "Conteúdo atualizado pela IA",
1842
+ "aiEditError": "Não foi possível atualizar o conteúdo com IA"
1820
1843
  },
1821
1844
  "DashboardManagement": {
1822
1845
  "title": "Gerenciamento de Dashboards",
@@ -2458,7 +2481,14 @@
2458
2481
  "detailsDescription": "Detalhes completos desta entrada de log de acesso",
2459
2482
  "os": "Sistema Operacional",
2460
2483
  "location": "Localização",
2461
- "rawUserAgent": "User Agent"
2484
+ "rawUserAgent": "User Agent",
2485
+ "simulated": "Simulado",
2486
+ "simulatedBy": "Simulado por {name}",
2487
+ "simulatedAccess": "Acesso simulado",
2488
+ "filterBySimulated": "Simulação",
2489
+ "simulatedAll": "Todos os acessos",
2490
+ "simulatedOnly": "Somente simulados",
2491
+ "simulatedExclude": "Excluir simulados"
2462
2492
  },
2463
2493
  "IntegrationProfilePage": {
2464
2494
  "breadcrumbHome": "Início",
@@ -2564,6 +2594,7 @@
2564
2594
  "fieldFromName": "Nome de Envio",
2565
2595
  "fieldReplyTo": "E-mail de Resposta",
2566
2596
  "fieldReplyToName": "Nome de Resposta",
2597
+ "fieldSnsTopicArn": "ARN do Tópico SNS (rastreio de entrega)",
2567
2598
  "fieldClientId": "Client ID",
2568
2599
  "fieldClientSecret": "Client Secret",
2569
2600
  "fieldRefreshToken": "Refresh Token",
@@ -2571,6 +2602,7 @@
2571
2602
  "fieldSecretAccessKey": "Secret Access Key",
2572
2603
  "fieldRegion": "Região",
2573
2604
  "fieldDomain": "Domínio",
2605
+ "fieldImapSecure": "TLS direto (porta 993)",
2574
2606
  "fieldToken": "Token",
2575
2607
  "fieldInstanceName": "Nome da Instância",
2576
2608
  "fieldPhoneNumberId": "ID do Número de Telefone",
@@ -2584,6 +2616,13 @@
2584
2616
  "fieldEnvironmentTest": "Teste",
2585
2617
  "fieldEnvironmentProduction": "Produção",
2586
2618
  "copiedToClipboard": "Copiado para a área de transferência",
2619
+ "sesWebhookSectionTitle": "Rastreio de entrega (SNS)",
2620
+ "sesWebhookDescription": "Sem esta assinatura o Hub só sabe que o provedor aceitou a mensagem, não se ela foi entregue.",
2621
+ "sesWebhookEndpointLabel": "URL do endpoint",
2622
+ "sesWebhookStep1": "Crie um tópico SNS na mesma região deste perfil do SES.",
2623
+ "sesWebhookStep2": "Adicione uma assinatura HTTPS no tópico com a URL acima. Ela é confirmada automaticamente.",
2624
+ "sesWebhookStep3": "No SES, abra a identidade de envio e aponte as notificações de Bounce, Complaint e Delivery para esse tópico.",
2625
+ "sesWebhookStep4": "Cole o ARN do tópico no campo acima para que eventos de outros tópicos sejam recusados.",
2587
2626
  "whatsappWebhookSectionTitle": "Webhook da Meta",
2588
2627
  "whatsappWebhookDescription": "Registre este webhook no seu app da Meta para receber mensagens do WhatsApp.",
2589
2628
  "whatsappWebhookCallbackUrlLabel": "URL de Callback",
@@ -2729,7 +2768,9 @@
2729
2768
  "fieldTimeoutMs": "Timeout (ms)",
2730
2769
  "fieldMaxRetries": "Máximo de tentativas",
2731
2770
  "fileStored": "Arquivo armazenado e cifrado. Clique para substituir.",
2732
- "fileSelected": "Novo arquivo selecionado. Será cifrado ao salvar."
2771
+ "fileSelected": "Novo arquivo selecionado. Será cifrado ao salvar.",
2772
+ "fieldRtdnServiceAccount": "Conta de Serviço das Notificações (RTDN)",
2773
+ "fieldRtdnAudience": "Audience das Notificações (RTDN)"
2733
2774
  },
2734
2775
  "SystemPagesPage": {
2735
2776
  "title": "Páginas",
@@ -3063,7 +3104,18 @@
3063
3104
  "previewTitle": "Pré-visualização do HTML",
3064
3105
  "noContent": "Sem conteúdo para visualizar",
3065
3106
  "complexHtmlWarningTitle": "HTML complexo detectado",
3066
- "complexHtmlWarningDesc": "Este conteúdo tem tags style, head ou script que o editor visual remove. Use a aba HTML para editá-lo."
3107
+ "complexHtmlWarningDesc": "Este conteúdo tem tags style, head ou script que o editor visual remove. Use a aba HTML para editá-lo.",
3108
+ "aiEditTitle": "Ajustar HTML com IA",
3109
+ "aiInstructionPlaceholder": "Descreva o ajuste que a IA deve fazer neste HTML.",
3110
+ "aiApplyButton": "Ajustar com IA",
3111
+ "aiApplying": "Ajustando...",
3112
+ "aiEditAppliedDefault": "HTML ajustado pela IA. Revise antes de salvar.",
3113
+ "aiEditErrorDefault": "Não foi possível ajustar o HTML com IA.",
3114
+ "enterFullscreen": "Tela cheia",
3115
+ "exitFullscreen": "Sair da tela cheia",
3116
+ "enterSplitView": "Ver painéis lado a lado",
3117
+ "exitSplitView": "Ver em abas",
3118
+ "splitViewLabel": "Preview, HTML e IA lado a lado"
3067
3119
  },
3068
3120
  "MailLayoutPage": {
3069
3121
  "breadcrumbHome": "Início",
@@ -3087,5 +3139,51 @@
3087
3139
  "saveSuccess": "Layout base salvo",
3088
3140
  "saveError": "Falha ao salvar o layout base",
3089
3141
  "missingContentTokenError": "O wrapper precisa conter o token {{{content}}}, senão todos os e-mails seriam enviados vazios."
3142
+ },
3143
+ "KnownDevices": {
3144
+ "title": "Dispositivos Conhecidos",
3145
+ "description": "Aparelhos que sua conta já reconhece. Um acesso vindo de um dispositivo fora desta lista dispara um alerta por e-mail.",
3146
+ "adminDescription": "Aparelhos que a conta deste usuário já reconhece.",
3147
+ "device": "Dispositivo",
3148
+ "browser": "Navegador",
3149
+ "lastIp": "Último IP",
3150
+ "lastSeen": "Último acesso",
3151
+ "firstSeen": "Reconhecido em",
3152
+ "action": "Ação",
3153
+ "unknown": "Desconhecido",
3154
+ "forget": "Esquecer",
3155
+ "noDevices": "Nenhum dispositivo reconhecido ainda",
3156
+ "forgetTitle": "Esquecer dispositivo",
3157
+ "forgetDescription": "O próximo acesso vindo deste dispositivo será tratado como desconhecido e disparará um alerta por e-mail. As sessões abertas nele continuam válidas — para encerrá-las, revogue as sessões.",
3158
+ "cancel": "Cancelar",
3159
+ "forgetSuccess": "Dispositivo esquecido",
3160
+ "forgetFailure": "Não foi possível esquecer o dispositivo",
3161
+ "simulatedNotRecorded": "Acessos simulados não são registrados como dispositivo — veja a aba de sessões."
3162
+ },
3163
+ "AccessSimulation": {
3164
+ "action": "Simular acesso",
3165
+ "dialogTitle": "Simular acesso",
3166
+ "dialogDescription": "Abre uma sessão curta e auditada vendo o sistema como {name}. Tudo o que você fizer fica registrado no nome dessa pessoa e no seu.",
3167
+ "targetApp": "Aplicação de destino",
3168
+ "targetAppPlaceholder": "Escolha onde abrir a sessão",
3169
+ "noAppsConfigured": "Nenhuma aplicação tem URL configurada na setting app-urls.",
3170
+ "reason": "Motivo (opcional)",
3171
+ "reasonPlaceholder": "Chamado, solicitação ou contexto desta simulação",
3172
+ "auditWarning": "A simulação fica registrada nas sessões, no log de acesso e na linha do tempo de atividade dos dois usuários. Dura 30 minutos e não pode ser renovada.",
3173
+ "confirm": "Iniciar simulação",
3174
+ "cancel": "Cancelar",
3175
+ "opening": "Abrindo…",
3176
+ "startFailure": "Não foi possível iniciar a simulação de acesso.",
3177
+ "bannerViewingAs": "ACESSO SIMULADO — você está vendo o sistema como",
3178
+ "bannerOperator": "Operador",
3179
+ "bannerExpiresIn": "expira em",
3180
+ "bannerStop": "Encerrar simulação",
3181
+ "bannerStopping": "Encerrando…",
3182
+ "redeemLoading": "Iniciando a simulação de acesso…",
3183
+ "redeemInvalidTitle": "Este link de simulação não vale mais",
3184
+ "redeemInvalidDescription": "O link funciona uma única vez e expira em um minuto. Peça ao operador para iniciar uma nova simulação.",
3185
+ "redeemMissingCode": "Nenhum código de simulação foi encontrado no link.",
3186
+ "noAdminAccessTitle": "Este usuário não tem acesso ao painel",
3187
+ "noAdminAccessDescription": "{name} não tem papel administrativo, então não há o que mostrar aqui. Simule esse acesso na aplicação que a pessoa realmente usa."
3090
3188
  }
3091
3189
  }
@@ -25,7 +25,14 @@ columns:
25
25
  - name: mcp_prompt
26
26
  type: text
27
27
  isNullable: true
28
+ # Operador por tras de um acesso simulado. INT puro, SEM FK: uma segunda FK
29
+ # para `user` renomearia a relacao `user.access_log` no prisma db pull e
30
+ # quebraria AccessLogService.list. O nome sai de uma segunda consulta.
31
+ - name: impersonator_user_id
32
+ type: int
33
+ isNullable: true
28
34
  - type: created_at
29
35
  indexes:
30
36
  - fields: [user_id]
31
37
  - fields: [created_at]
38
+ - fields: [impersonator_user_id]
@@ -19,5 +19,13 @@ columns:
19
19
  type: int
20
20
  unsigned: true
21
21
  default: 0
22
+ # Tira o arquivo das duas rotas que servem por id sem autenticacao
23
+ # (GET /file/open/:id e GET /file/image/:id). O caminho autenticado
24
+ # PUT /file/open/:id -> token -> GET /file/open/:token continua valendo, e e
25
+ # por ele que o admin exibe anexo sensivel. Existe porque id de arquivo e
26
+ # sequencial: sem isso, um formulario de vaga com curriculos e enumeravel.
27
+ - name: is_private
28
+ type: boolean
29
+ default: false
22
30
  - type: created_at
23
31
  - type: updated_at
@@ -0,0 +1,76 @@
1
+ # Evento de entrega devolvido pelo provedor de e-mail (SES via SNS, por ora).
2
+ #
3
+ # Motivo: ate aqui "enviado" significava apenas "o provedor aceitou". O chamado
4
+ # 202608-000020 teve tres mensagens aceitas pelo SES, cada uma com MessageId de
5
+ # sucesso, e nenhuma chegou a caixa alguma - sem esta tabela nao havia como
6
+ # saber disso, nem por que. O `diagnostic_code` e a resposta literal do servidor
7
+ # destinatario, que e o que responde "por que nao chegou".
8
+ columns:
9
+ - type: pk
10
+ # Nullable de proposito: um evento pode chegar de um envio anterior a coluna
11
+ # provider_message_id existir, ou de um e-mail que saiu por fora do Hub.
12
+ # Descartar seria jogar fora justamente a evidencia de que algo escapou.
13
+ - type: fk
14
+ name: mail_sent_id
15
+ isNullable: true
16
+ references:
17
+ table: mail_sent
18
+ column: id
19
+ onDelete: set null
20
+ onUpdate: cascade
21
+ # Chave de juncao com mail_sent.provider_message_id.
22
+ - name: provider_message_id
23
+ type: varchar
24
+ length: 255
25
+ # O provedor reporta por destinatario: uma mensagem para tres pessoas pode
26
+ # ser entregue a duas e voltar da terceira.
27
+ - name: recipient_email
28
+ type: varchar
29
+ length: 255
30
+ isNullable: true
31
+ # varchar e nao enum: o SES ja tem sete tipos e acrescenta outros sem aviso,
32
+ # e um valor novo nao pode derrubar a ingestao do webhook.
33
+ - name: event_type
34
+ type: varchar
35
+ length: 32
36
+ - name: bounce_type
37
+ type: varchar
38
+ length: 64
39
+ isNullable: true
40
+ - name: bounce_subtype
41
+ type: varchar
42
+ length: 64
43
+ isNullable: true
44
+ - name: diagnostic_code
45
+ type: text
46
+ isNullable: true
47
+ - name: reporting_mta
48
+ type: varchar
49
+ length: 255
50
+ isNullable: true
51
+ # Notificacao crua, para o que o schema nao previu.
52
+ - name: payload
53
+ type: json
54
+ isNullable: true
55
+ # Horario do provedor, nao o nosso: o SNS reentrega e o nosso relogio diria
56
+ # quando processamos, nao quando aconteceu.
57
+ - name: occurred_at
58
+ type: timestamp
59
+ - type: created_at
60
+ - type: updated_at
61
+ indices:
62
+ - columns:
63
+ - provider_message_id
64
+ - columns:
65
+ - mail_sent_id
66
+ - columns:
67
+ - event_type
68
+ - occurred_at
69
+ # O SNS reentrega quando a resposta demora; sem esta chave o mesmo bounce
70
+ # viraria uma linha nova a cada tentativa.
71
+ - columns:
72
+ - provider_message_id
73
+ - recipient_email
74
+ - event_type
75
+ - occurred_at
76
+ isUnique: true
@@ -17,5 +17,28 @@ columns:
17
17
  isNullable: true
18
18
  - name: body
19
19
  type: text
20
+ # Id devolvido pelo provedor (MessageId do SES, messageId do nodemailer).
21
+ # Sem ele nao ha como cruzar um envio nosso com o evento de entrega/bounce
22
+ # do provedor - foi essa lacuna que deixou "enviado sem erro, nunca chegou"
23
+ # sem resposta possivel.
24
+ - name: provider_message_id
25
+ length: 255
26
+ isNullable: true
27
+ # Desfecho consolidado dos eventos de mail_delivery_event, para a listagem do
28
+ # log nao precisar agregar a tabela de eventos a cada linha.
29
+ # delivered | bounced | complained | rejected
30
+ - name: delivery_status
31
+ type: varchar
32
+ length: 32
33
+ isNullable: true
34
+ - name: delivery_updated_at
35
+ type: timestamp
36
+ isNullable: true
20
37
  - type: created_at
21
38
  - type: updated_at
39
+ indices:
40
+ # Coluna de lookup do webhook de entrega: o provedor so conhece o MessageId.
41
+ - columns:
42
+ - provider_message_id
43
+ - columns:
44
+ - delivery_status
@@ -8,6 +8,15 @@ columns:
8
8
  onDelete: CASCADE
9
9
  - name: action
10
10
  type: text
11
+ # Quem provocou a atividade, quando nao foi o proprio usuario (hoje: simulacao
12
+ # de acesso). INT puro, SEM FK: uma segunda FK para `user` renomearia a relacao
13
+ # `user.user_activity` no prisma db pull e quebraria getUserIncludeClause.
14
+ - name: actor_user_id
15
+ type: int
16
+ isNullable: true
11
17
  - type: created_at
12
18
  - type: updated_at
13
19
 
20
+ indices:
21
+ - columns: [actor_user_id]
22
+
@@ -0,0 +1,52 @@
1
+ # Dispositivos ja vistos por usuario, usada por AuthService para decidir se um
2
+ # login vem de um dispositivo desconhecido (e-mail auth-login-new-device).
3
+ #
4
+ # Existe porque a checagem anterior olhava o historico de `user_session`, que
5
+ # `clearExpiredSessions` poda por `session-retention-days`: um dispositivo parado
6
+ # alguns meses sumia do historico e era reanunciado como novo.
7
+ columns:
8
+ - type: pk
9
+ - name: user_id
10
+ type: fk
11
+ references:
12
+ table: user
13
+ column: id
14
+ onDelete: CASCADE
15
+ onUpdate: CASCADE
16
+ # sha256 hex de `b:<browser_id>` ou, na falta dele, `u:<user_agent>`.
17
+ # Ver buildDeviceKey em libraries/core/src/utils/device-key.ts.
18
+ - name: device_key
19
+ type: varchar
20
+ length: 64
21
+ # browser_id e user_agent ficam gravados crus so para diagnostico: quem decide
22
+ # a identidade e a device_key.
23
+ - name: browser_id
24
+ type: varchar
25
+ isNullable: true
26
+ - name: user_agent
27
+ type: text
28
+ isNullable: true
29
+ - name: browser_name
30
+ type: varchar
31
+ length: 64
32
+ isNullable: true
33
+ - name: os_name
34
+ type: varchar
35
+ length: 64
36
+ isNullable: true
37
+ - name: last_ip
38
+ type: varchar
39
+ length: 45
40
+ isNullable: true
41
+ - name: last_seen_at
42
+ type: timestamptz
43
+ - type: created_at
44
+ - type: updated_at
45
+
46
+ indices:
47
+ # A unica que importa no caminho de login: "este usuario ja usou este
48
+ # dispositivo?". Unica porque o upsert do registro depende dela.
49
+ - columns: [user_id, device_key]
50
+ isUnique: true
51
+ # Para uma futura poda de dispositivos ha muito nao usados.
52
+ - columns: [last_seen_at]
@@ -16,5 +16,24 @@ columns:
16
16
  isNullable: true
17
17
  - name: expires_at
18
18
  type: datetime
19
+ # Sessao aberta por outro usuario via simulacao de acesso. INT puro, SEM FK:
20
+ # esta tabela ja tem uma FK para `user`, e uma segunda faria o prisma db pull
21
+ # renomear `user.user_session` (foi o que aconteceu com user_change_log), o que
22
+ # quebraria UserService.findUserById e a tela de sessoes do admin. O nome do
23
+ # operador sai de uma segunda consulta.
24
+ - name: impersonator_user_id
25
+ type: int
26
+ isNullable: true
27
+ - name: impersonation_reason
28
+ type: varchar
29
+ length: 255
30
+ isNullable: true
19
31
  - type: created_at
20
- - type: updated_at
32
+ - type: updated_at
33
+
34
+ # A FK user_id nasceu sem indice, entao toda consulta por usuario (listagem de
35
+ # sessoes, revogacao em massa) fazia seq scan. O prefixo user_id deste indice
36
+ # composto ja cobre esses casos.
37
+ indices:
38
+ - columns: [user_id, browser_id]
39
+ - columns: [impersonator_user_id]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/core",
3
- "version": "0.0.390",
3
+ "version": "0.0.393",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,18 +39,19 @@
39
39
  "qrcode": "^1.5.4",
40
40
  "redis": "4.7.1",
41
41
  "rxjs": "^7.8.2",
42
+ "@sentry/nestjs": "10.70.0",
42
43
  "socket.io": "^4.8.1",
43
44
  "sharp": "^0.34.2",
44
45
  "speakeasy": "^2.0.0",
45
46
  "ua-parser-js": "^2.0.10",
46
47
  "uuid": "^11.1.0",
47
48
  "@hed-hog/api-prisma": "0.0.6",
48
- "@hed-hog/api-locale": "0.0.14",
49
+ "@hed-hog/api-mail": "0.0.10",
49
50
  "@hed-hog/vault-crypto": "0.0.1",
50
- "@hed-hog/api": "0.0.8",
51
51
  "@hed-hog/api-types": "0.0.1",
52
- "@hed-hog/api-mail": "0.0.9",
53
- "@hed-hog/api-pagination": "0.0.7"
52
+ "@hed-hog/api-pagination": "0.0.7",
53
+ "@hed-hog/api-locale": "0.0.14",
54
+ "@hed-hog/api": "0.0.8"
54
55
  },
55
56
  "exports": {
56
57
  ".": {
@@ -24,6 +24,7 @@ export class AccessLogController {
24
24
  createdAtFrom: query.createdAtFrom,
25
25
  createdAtTo: query.createdAtTo,
26
26
  type: query.type,
27
+ simulated: query.simulated,
27
28
  });
28
29
  }
29
30
  }
@@ -26,6 +26,10 @@ export class AccessLogInterceptor implements NestInterceptor {
26
26
  return next.handle().pipe(
27
27
  tap(() => {
28
28
  const userId: number | undefined = request.auth?.sub;
29
+ // Numa simulacao de acesso o `sub` e o ALVO; sem gravar o operador, o
30
+ // log ficaria indistinguivel de um acesso genuino do usuario.
31
+ const impersonatorUserId: number | undefined =
32
+ request.auth?.imp === true ? request.auth?.act : undefined;
29
33
  // request.ip já resolve o IP real do cliente respeitando `trust proxy` (main.ts):
30
34
  // ler x-forwarded-for na mão aqui pegava o primeiro valor da lista, que é
31
35
  // exatamente o mais fácil de forjar pelo próprio cliente.
@@ -33,7 +37,7 @@ export class AccessLogInterceptor implements NestInterceptor {
33
37
  const userAgent: string = (request.headers['user-agent'] as string) ?? '';
34
38
  const method: string = request.method ?? '';
35
39
 
36
- this.accessLogService.recordHttp({ userId, ip, userAgent, method, path });
40
+ this.accessLogService.recordHttp({ userId, ip, userAgent, method, path, impersonatorUserId });
37
41
  }),
38
42
  );
39
43
  }