@hed-hog/core 0.0.390 → 0.0.394

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
@@ -29,6 +29,7 @@ import {
29
29
  } from '@/components/ui/form';
30
30
  import { FormActions } from '@/components/ui/form-actions';
31
31
  import { Input } from '@/components/ui/input';
32
+ import { NameInput } from '@/components/ui/name-input';
32
33
  import {
33
34
  formatIntegrationProviderName,
34
35
  IntegrationLogo,
@@ -63,6 +64,7 @@ import {
63
64
  Key,
64
65
  Mail,
65
66
  Monitor,
67
+ MonitorSmartphone,
66
68
  ScrollText,
67
69
  RefreshCcw,
68
70
  Save,
@@ -77,7 +79,9 @@ import { useEffect, useMemo, useRef, useState } from 'react';
77
79
  import { useForm, useWatch } from 'react-hook-form';
78
80
  import { toast } from 'sonner';
79
81
  import { z } from 'zod';
82
+ import { useCoreAccess } from '../_lib/hooks/use-core-access';
80
83
  import { ActiveSessions } from './active-session';
84
+ import { UserDevices } from './user-devices';
81
85
  import { UserIdentifiersSection } from './identifiers';
82
86
  import { PermissionsSection } from './permissions';
83
87
  import {
@@ -318,7 +322,7 @@ function UserCreateSheet({
318
322
  <FormItem>
319
323
  <FormLabel>{t('formNameLabel')}</FormLabel>
320
324
  <FormControl>
321
- <Input {...field} />
325
+ <NameInput {...field} />
322
326
  </FormControl>
323
327
  <FormMessage />
324
328
  </FormItem>
@@ -421,6 +425,11 @@ function UserEditSheet({
421
425
  user: currentUser,
422
426
  } = useApp();
423
427
  const minPasswordLength = Number(getSettingValue('password-min-length')) || 6;
428
+ // A aba de permissões concede/revoga papéis de outra conta. Só aparece para
429
+ // quem tem `admin` ou `admin-user-permission` — os mesmos papéis que o
430
+ // RoleGuard exige em POST/DELETE /user/:userId/role/:roleId. Enquanto a
431
+ // consulta a /auth/roles não responde, a aba fica escondida.
432
+ const { canManageUserPermissions } = useCoreAccess();
424
433
  // Resetar a própria senha por aqui força `requires_reset` na conta logada
425
434
  // sem passar pelo fluxo de troca (que exige a senha atual). Como o admin
426
435
  // não sabe essa senha nova gerada, ele fica preso na tela de troca forçada
@@ -774,10 +783,12 @@ function UserEditSheet({
774
783
  <Fingerprint className="h-4 w-4" />
775
784
  <span>{t('tabIdentifiers')}</span>
776
785
  </TabsTrigger>
777
- <TabsTrigger value="permissions">
778
- <ShieldCheck className="h-4 w-4" />
779
- <span>{t('tabPermissions')}</span>
780
- </TabsTrigger>
786
+ {canManageUserPermissions && (
787
+ <TabsTrigger value="permissions">
788
+ <ShieldCheck className="h-4 w-4" />
789
+ <span>{t('tabPermissions')}</span>
790
+ </TabsTrigger>
791
+ )}
781
792
  <TabsTrigger value="mfa">
782
793
  <Shield className="h-4 w-4" />
783
794
  <span>{t('tabMfa')}</span>
@@ -786,6 +797,10 @@ function UserEditSheet({
786
797
  <Monitor className="h-4 w-4" />
787
798
  <span>{t('tabSessions')}</span>
788
799
  </TabsTrigger>
800
+ <TabsTrigger value="devices">
801
+ <MonitorSmartphone className="h-4 w-4" />
802
+ <span>{t('tabDevices')}</span>
803
+ </TabsTrigger>
789
804
  <TabsTrigger value="emails">
790
805
  <Mail className="h-4 w-4" />
791
806
  <span>{t('tabEmails')}</span>
@@ -1084,7 +1099,7 @@ function UserEditSheet({
1084
1099
  <FormItem>
1085
1100
  <FormLabel>{t('editNameLabel')}</FormLabel>
1086
1101
  <FormControl>
1087
- <Input
1102
+ <NameInput
1088
1103
  placeholder={t('editNamePlaceholder')}
1089
1104
  {...field}
1090
1105
  />
@@ -1408,26 +1423,28 @@ function UserEditSheet({
1408
1423
  </TabsContent>
1409
1424
 
1410
1425
  {/* Permissions Tab */}
1411
- <TabsContent value="permissions" className="space-y-4 mt-4 p-4 pt-0">
1412
- <div className="space-y-3">
1413
- <div className="flex items-center justify-between">
1414
- <div>
1415
- <h4 className="text-sm font-semibold flex items-center gap-2">
1416
- <ShieldCheck className="h-4 w-4" />
1417
- {t('permissionsTitle')}
1418
- </h4>
1419
- <p className="text-xs text-muted-foreground mt-1">
1420
- {t('permissionsDescription')}
1421
- </p>
1426
+ {canManageUserPermissions && (
1427
+ <TabsContent value="permissions" className="space-y-4 mt-4 p-4 pt-0">
1428
+ <div className="space-y-3">
1429
+ <div className="flex items-center justify-between">
1430
+ <div>
1431
+ <h4 className="text-sm font-semibold flex items-center gap-2">
1432
+ <ShieldCheck className="h-4 w-4" />
1433
+ {t('permissionsTitle')}
1434
+ </h4>
1435
+ <p className="text-xs text-muted-foreground mt-1">
1436
+ {t('permissionsDescription')}
1437
+ </p>
1438
+ </div>
1422
1439
  </div>
1440
+ <PermissionsSection
1441
+ userId={editingUser.id!}
1442
+ userName={editingUser.name ?? undefined}
1443
+ onRoleChange={handleRefreshUser}
1444
+ />
1423
1445
  </div>
1424
- <PermissionsSection
1425
- userId={editingUser.id!}
1426
- userName={editingUser.name ?? undefined}
1427
- onRoleChange={handleRefreshUser}
1428
- />
1429
- </div>
1430
- </TabsContent>
1446
+ </TabsContent>
1447
+ )}
1431
1448
 
1432
1449
  {/* MFA Tab */}
1433
1450
  <TabsContent value="mfa" className="space-y-4 mt-4 p-4 pt-0">
@@ -1476,6 +1493,11 @@ function UserEditSheet({
1476
1493
  />
1477
1494
  </TabsContent>
1478
1495
 
1496
+ {/* Devices Tab */}
1497
+ <TabsContent value="devices" className="space-y-4 mt-4 p-4 pt-0">
1498
+ <UserDevices editingUser={editingUser} />
1499
+ </TabsContent>
1500
+
1479
1501
  {/* Emails Tab */}
1480
1502
  <TabsContent value="emails" className="space-y-4 mt-4 p-4 pt-0">
1481
1503
  <UserMails editingUser={editingUser} />
@@ -75,6 +75,7 @@
75
75
  "tab2fa": "2FA",
76
76
  "tabAccounts": "Accounts",
77
77
  "tabSessions": "Sessions",
78
+ "tabDevices": "Devices",
78
79
  "tabMcpTokens": "MCP Tokens",
79
80
  "tabTokens": "Tokens",
80
81
  "breadcrumbLabel": "Account",
@@ -255,6 +256,7 @@
255
256
  "tabIdentifiers": "Identifiers",
256
257
  "tabMfa": "MFA",
257
258
  "tabSessions": "Sessions",
259
+ "tabDevices": "Devices",
258
260
  "tabEmails": "Emails",
259
261
  "tabLogs": "Logs",
260
262
  "cardLastLoginDescription": "Last Login",
@@ -384,7 +386,8 @@
384
386
  "passwordResetPending": "Reset pending",
385
387
  "passwordResetNone": "Up to date",
386
388
  "neverLoggedIn": "Never signed in",
387
- "filterOptionPasswordReset": "Password reset pending"
389
+ "filterOptionPasswordReset": "Password reset pending",
390
+ "activityByActor": "by {name}"
388
391
  },
389
392
  "RolePage": {
390
393
  "title": "Roles Management",
@@ -584,12 +587,14 @@
584
587
  "variablesHelp": "Use '{{variable}}' in the email body",
585
588
  "bodyLabel": "HTML Body",
586
589
  "localeLabel": "Language",
590
+ "sectionIdentification": "Identification",
587
591
  "preview": "Preview",
588
592
  "availableVariables": "Available variables:",
589
593
  "testValuePlaceholder": "Test value",
590
594
  "downloadYAML": "Download YAML",
591
595
  "generateMigration": "Generate Migration",
592
596
  "sendTestEmail": "Send test email",
597
+ "moreActions": "More actions",
593
598
  "cancel": "Cancel",
594
599
  "saveChanges": "Save Changes",
595
600
  "createTemplate": "Create Template",
@@ -719,7 +724,11 @@
719
724
  "logout": "Logged out",
720
725
  "resetPassword": "Reset the password",
721
726
  "revokeAllSessions": "Revoked all sessions",
722
- "revokeSession": "Revoked a session"
727
+ "revokeSession": "Revoked a session",
728
+ "impersonationStarted": "Access simulated by an operator",
729
+ "impersonationEnded": "Access simulation ended",
730
+ "impersonationPerformed": "Simulated another user’s access",
731
+ "impersonationPerformedEnded": "Ended the access simulation"
723
732
  },
724
733
  "LoginPage": {
725
734
  "title": "Authentication",
@@ -781,6 +790,16 @@
781
790
  "submitButton": "Reset Password",
782
791
  "submitButtonLoading": "Resetting..."
783
792
  },
793
+ "ConfirmEmailPage": {
794
+ "title": "Email confirmation",
795
+ "checking": "One moment while we validate the link...",
796
+ "invalidTitle": "Invalid link",
797
+ "invalidDescription": "This confirmation link is invalid or has expired. Your account is still active — just sign in normally.",
798
+ "successTitle": "Email confirmed",
799
+ "successDescription": "All set! Your email address has been confirmed.",
800
+ "alreadyConfirmedDescription": "Your email was already confirmed. There is nothing else to do.",
801
+ "goToLogin": "Go to sign in"
802
+ },
784
803
  "NavUser": {
785
804
  "account": "Account",
786
805
  "notifications": "Notifications",
@@ -1027,7 +1046,8 @@
1027
1046
  "revokeSuccess": "Session revoked successfully!",
1028
1047
  "revokeFailure": "Failed to revoke session",
1029
1048
  "revokeAllSuccess": "Sessions revoked successfully!",
1030
- "revokeAllFailure": "Failed to revoke sessions"
1049
+ "revokeAllFailure": "Failed to revoke sessions",
1050
+ "simulatedBy": "Simulated by {name}"
1031
1051
  },
1032
1052
  "UserMails": {
1033
1053
  "title": "Sent emails",
@@ -1069,7 +1089,10 @@
1069
1089
  "role_removed": "Role removed",
1070
1090
  "avatar_changed": "Avatar changed",
1071
1091
  "emptyTitle": "No changes recorded",
1072
- "emptyDescription": "Administrative changes made to this user will appear here."
1092
+ "emptyDescription": "Administrative changes made to this user will appear here.",
1093
+ "impersonation_requested": "Access simulation requested",
1094
+ "impersonation_started": "Access simulation started",
1095
+ "impersonation_ended": "Access simulation ended"
1073
1096
  },
1074
1097
  "UserActiveSessions": {
1075
1098
  "title": "Active Sessions",
@@ -1086,7 +1109,9 @@
1086
1109
  "revokeSuccess": "Session successfully revoked!",
1087
1110
  "revokeFailure": "Failed to revoke session",
1088
1111
  "revokeAllSuccess": "Sessions successfully revoked!",
1089
- "revokeAllFailure": "Failed to revoke sessions"
1112
+ "revokeAllFailure": "Failed to revoke sessions",
1113
+ "simulatedSession": "Simulated access",
1114
+ "simulatedBy": "Simulated by {name}"
1090
1115
  },
1091
1116
  "UserIdentifiers": {
1092
1117
  "title": "User Identifiers",
@@ -1287,6 +1312,7 @@
1287
1312
  "to": "To",
1288
1313
  "cc": "CC",
1289
1314
  "bcc": "BCC",
1315
+ "providerMessageId": "Provider message ID",
1290
1316
  "body": "Body",
1291
1317
  "createdAt": "Created At",
1292
1318
  "updatedAt": "Updated At",
@@ -1306,6 +1332,20 @@
1306
1332
  "statusRead": "Read",
1307
1333
  "statusError": "Error",
1308
1334
  "statusUnavailable": "No status",
1335
+ "filterByDelivery": "Delivery",
1336
+ "deliveryAll": "Any delivery outcome",
1337
+ "deliveryPending": "No answer yet",
1338
+ "deliveryPendingHint": "The provider accepted the message and has not reported the outcome yet.",
1339
+ "deliveryDelivered": "Delivered",
1340
+ "deliveryBounced": "Bounced",
1341
+ "deliveryComplained": "Marked as spam",
1342
+ "deliveryRejected": "Rejected",
1343
+ "undeliveredCurrentPage": "Not delivered (page)",
1344
+ "undeliveredHint": "Accepted by the provider and returned afterwards",
1345
+ "providerEvents": "Provider delivery events",
1346
+ "noProviderEvents": "The provider has not reported anything about this message yet.",
1347
+ "allRecipients": "All recipients",
1348
+ "reportingMta": "Reported by",
1309
1349
  "statusReceivedShort": "Received: {count}",
1310
1350
  "statusReadShort": "Read: {count}",
1311
1351
  "statusErrorShort": "Errors: {count}",
@@ -1357,7 +1397,7 @@
1357
1397
  "fileUploaded": "File uploaded successfully.",
1358
1398
  "fileUploadFailed": "Failed to upload file.",
1359
1399
  "fileIdNotReturned": "File ID not returned.",
1360
- "temporaryOpenUrlNotReturned": "Temporary open URL not returned.",
1400
+ "apiBaseUrlNotConfigured": "API base URL is not configured.",
1361
1401
  "uploadedFileAlt": "Uploaded file",
1362
1402
  "fileUrlPlaceholder": "File URL",
1363
1403
  "durationUnitSeconds": "Seconds",
@@ -1381,44 +1421,21 @@
1381
1421
  "oauthProfileEmptyState": "No OAuth profiles found.",
1382
1422
  "selectPaymentProfile": "Select a payment profile",
1383
1423
  "paymentProfileEmptyState": "No payment profiles found.",
1384
- "mailProfile": {
1385
- "nameLabel": "Name *",
1386
- "namePlaceholder": "My Mail Profile",
1387
- "fromEmailLabel": "From Email *",
1388
- "fromEmailPlaceholder": "no-reply@example.com",
1389
- "fromNameLabel": "Sender name",
1390
- "fromNamePlaceholder": "Sales Team",
1391
- "providerLabel": "Provider *",
1392
- "providers": {
1393
- "ses": "Amazon SES"
1394
- },
1395
- "smtpHostLabel": "SMTP Host *",
1396
- "smtpHostPlaceholder": "smtp.example.com",
1397
- "smtpPortLabel": "SMTP Port *",
1398
- "smtpPortPlaceholder": "587",
1399
- "smtpUsernameLabel": "SMTP Username *",
1400
- "smtpUsernamePlaceholder": "user@example.com",
1401
- "smtpPasswordLabel": "SMTP Password *",
1402
- "replyToEmailLabel": "Reply-to email",
1403
- "replyToEmailPlaceholder": "support@company.com",
1404
- "clientIdLabel": "Client ID *",
1405
- "clientSecretLabel": "Client Secret *",
1406
- "refreshTokenLabel": "Refresh Token *",
1407
- "accessKeyIdLabel": "Access Key ID *",
1408
- "secretAccessKeyLabel": "Secret Access Key *",
1409
- "regionLabel": "Region *",
1410
- "regionPlaceholder": "us-east-1"
1411
- },
1412
- "whatsappProfile": {
1413
- "nameLabel": "Name *",
1414
- "namePlaceholder": "My WhatsApp Profile",
1415
- "providerLabel": "Provider *",
1416
- "hostLabel": "API Host *",
1417
- "hostPlaceholder": "https://api.example.com",
1418
- "instanceNameLabel": "Instance Name *",
1419
- "instanceNamePlaceholder": "MyInstance",
1420
- "tokenLabel": "Token *",
1421
- "tokenPlaceholder": "Authentication token"
1424
+ "whatsappProfileEmptyState": "No WhatsApp profiles found.",
1425
+ "selectIntegrationProfile": "Select an integration profile",
1426
+ "integrationProfileEmptyState": "No integration profiles found.",
1427
+ "editProfileAria": "Edit {profile}",
1428
+ "createProfileAria": "Create {profile}",
1429
+ "profileTypeNames": {
1430
+ "ai": "AI profile",
1431
+ "email": "email profile",
1432
+ "whatsapp": "WhatsApp profile",
1433
+ "storage": "storage profile",
1434
+ "oauth": "OAuth profile",
1435
+ "payment": "payment profile",
1436
+ "infrastructure": "infrastructure profile",
1437
+ "kubernetes": "Kubernetes profile",
1438
+ "generic": "integration profile"
1422
1439
  },
1423
1440
  "selectInfraProfile": "Select infrastructure profile",
1424
1441
  "infraProfileEmptyState": "No infrastructure profiles found. Create a DigitalOcean or Kubernetes profile first.",
@@ -1811,7 +1828,13 @@
1811
1828
  "decreaseZoom": "Decrease zoom",
1812
1829
  "resetZoom": "Reset zoom",
1813
1830
  "increaseZoom": "Increase zoom",
1814
- "saveAndClose": "Save and Close"
1831
+ "saveAndClose": "Save and Close",
1832
+ "aiEdit": "Edit with AI",
1833
+ "aiEditPromptLabel": "What do you want to change?",
1834
+ "aiEditPromptPlaceholder": "e.g., make the tone more formal and add a bullet list of next steps",
1835
+ "aiEditSubmit": "Generate",
1836
+ "aiEditSuccess": "Content updated by AI",
1837
+ "aiEditError": "Could not update the content with AI"
1815
1838
  },
1816
1839
  "DashboardManagement": {
1817
1840
  "title": "Dashboard Management",
@@ -2403,7 +2426,14 @@
2403
2426
  "detailsDescription": "Full details of this access log entry",
2404
2427
  "os": "Operating System",
2405
2428
  "location": "Location",
2406
- "rawUserAgent": "User Agent"
2429
+ "rawUserAgent": "User Agent",
2430
+ "simulated": "Simulated",
2431
+ "simulatedBy": "Simulated by {name}",
2432
+ "simulatedAccess": "Simulated access",
2433
+ "filterBySimulated": "Simulation",
2434
+ "simulatedAll": "All accesses",
2435
+ "simulatedOnly": "Simulated only",
2436
+ "simulatedExclude": "Exclude simulated"
2407
2437
  },
2408
2438
  "IntegrationProfilePage": {
2409
2439
  "breadcrumbHome": "Home",
@@ -2509,6 +2539,7 @@
2509
2539
  "fieldFromName": "From Name",
2510
2540
  "fieldReplyTo": "Reply-To Email",
2511
2541
  "fieldReplyToName": "Reply-To Name",
2542
+ "fieldSnsTopicArn": "SNS Topic ARN (delivery tracking)",
2512
2543
  "fieldClientId": "Client ID",
2513
2544
  "fieldClientSecret": "Client Secret",
2514
2545
  "fieldRefreshToken": "Refresh Token",
@@ -2516,6 +2547,7 @@
2516
2547
  "fieldSecretAccessKey": "Secret Access Key",
2517
2548
  "fieldRegion": "Region",
2518
2549
  "fieldDomain": "Domain",
2550
+ "fieldImapSecure": "Direct TLS (port 993)",
2519
2551
  "fieldToken": "Token",
2520
2552
  "fieldInstanceName": "Instance Name",
2521
2553
  "fieldPhoneNumberId": "Phone Number ID",
@@ -2529,6 +2561,13 @@
2529
2561
  "fieldEnvironmentTest": "Test",
2530
2562
  "fieldEnvironmentProduction": "Production",
2531
2563
  "copiedToClipboard": "Copied to clipboard",
2564
+ "sesWebhookSectionTitle": "Delivery tracking (SNS)",
2565
+ "sesWebhookDescription": "Without this subscription the Hub only knows the provider accepted the message, not whether it was delivered.",
2566
+ "sesWebhookEndpointLabel": "Endpoint URL",
2567
+ "sesWebhookStep1": "Create an SNS topic in the same region as this SES profile.",
2568
+ "sesWebhookStep2": "Add an HTTPS subscription to the topic using the URL above. It is confirmed automatically.",
2569
+ "sesWebhookStep3": "In SES, open the sending identity and point Bounce, Complaint and Delivery notifications to that topic.",
2570
+ "sesWebhookStep4": "Paste the topic ARN in the field above so events from other topics are rejected.",
2532
2571
  "whatsappWebhookSectionTitle": "Meta Webhook",
2533
2572
  "whatsappWebhookDescription": "Register this webhook in your Meta app to receive WhatsApp messages.",
2534
2573
  "whatsappWebhookCallbackUrlLabel": "Callback URL",
@@ -2674,7 +2713,9 @@
2674
2713
  "fieldTimeoutMs": "Timeout (ms)",
2675
2714
  "fieldMaxRetries": "Max retries",
2676
2715
  "fileStored": "A file is stored and encrypted. Click to replace it.",
2677
- "fileSelected": "New file selected. It will be encrypted on save."
2716
+ "fileSelected": "New file selected. It will be encrypted on save.",
2717
+ "fieldRtdnServiceAccount": "Notifications Service Account (RTDN)",
2718
+ "fieldRtdnAudience": "Notifications Audience (RTDN)"
2678
2719
  },
2679
2720
  "SystemPagesPage": {
2680
2721
  "title": "Pages",
@@ -3008,7 +3049,18 @@
3008
3049
  "previewTitle": "HTML preview",
3009
3050
  "noContent": "No content to preview",
3010
3051
  "complexHtmlWarningTitle": "Complex HTML detected",
3011
- "complexHtmlWarningDesc": "This content has style, head or script tags that the visual editor removes. Use the HTML tab to edit it."
3052
+ "complexHtmlWarningDesc": "This content has style, head or script tags that the visual editor removes. Use the HTML tab to edit it.",
3053
+ "aiEditTitle": "Adjust HTML with AI",
3054
+ "aiInstructionPlaceholder": "Describe the adjustment the AI should make to this HTML.",
3055
+ "aiApplyButton": "Adjust with AI",
3056
+ "aiApplying": "Adjusting...",
3057
+ "aiEditAppliedDefault": "HTML adjusted by AI. Review before saving.",
3058
+ "aiEditErrorDefault": "Could not adjust the HTML with AI.",
3059
+ "enterFullscreen": "Fullscreen",
3060
+ "exitFullscreen": "Exit fullscreen",
3061
+ "enterSplitView": "View panels side by side",
3062
+ "exitSplitView": "View as tabs",
3063
+ "splitViewLabel": "Preview, HTML and AI side by side"
3012
3064
  },
3013
3065
  "MailLayoutPage": {
3014
3066
  "breadcrumbHome": "Home",
@@ -3032,5 +3084,51 @@
3032
3084
  "saveSuccess": "Base layout saved",
3033
3085
  "saveError": "Failed to save the base layout",
3034
3086
  "missingContentTokenError": "The wrapper must contain the {{{content}}} token, otherwise every email would be sent empty."
3087
+ },
3088
+ "KnownDevices": {
3089
+ "title": "Known Devices",
3090
+ "description": "Devices your account already recognizes. A sign-in from a device outside this list triggers an email alert.",
3091
+ "adminDescription": "Devices this user's account already recognizes.",
3092
+ "device": "Device",
3093
+ "browser": "Browser",
3094
+ "lastIp": "Last IP",
3095
+ "lastSeen": "Last seen",
3096
+ "firstSeen": "First seen",
3097
+ "action": "Action",
3098
+ "unknown": "Unknown",
3099
+ "forget": "Forget",
3100
+ "noDevices": "No recognized devices yet",
3101
+ "forgetTitle": "Forget device",
3102
+ "forgetDescription": "The next sign-in from this device will be treated as unrecognized and will trigger an email alert. Sessions already open on it stay valid — revoke the sessions to end those.",
3103
+ "cancel": "Cancel",
3104
+ "forgetSuccess": "Device forgotten",
3105
+ "forgetFailure": "Could not forget the device",
3106
+ "simulatedNotRecorded": "Simulated accesses are not recorded as devices — see the sessions tab."
3107
+ },
3108
+ "AccessSimulation": {
3109
+ "action": "Simulate access",
3110
+ "dialogTitle": "Simulate access",
3111
+ "dialogDescription": "Open a short, audited session seeing the system as {name}. Everything you do is recorded under their name and yours.",
3112
+ "targetApp": "Target application",
3113
+ "targetAppPlaceholder": "Choose where to open the session",
3114
+ "noAppsConfigured": "No application has a URL configured in the app-urls setting.",
3115
+ "reason": "Reason (optional)",
3116
+ "reasonPlaceholder": "Ticket, request or context for this simulation",
3117
+ "auditWarning": "The simulation is recorded in the sessions, access log and activity timeline of both users. It lasts 30 minutes and cannot be renewed.",
3118
+ "confirm": "Start simulation",
3119
+ "cancel": "Cancel",
3120
+ "opening": "Opening…",
3121
+ "startFailure": "Could not start the access simulation.",
3122
+ "bannerViewingAs": "SIMULATED ACCESS — you are seeing the system as",
3123
+ "bannerOperator": "Operator",
3124
+ "bannerExpiresIn": "expires in",
3125
+ "bannerStop": "End simulation",
3126
+ "bannerStopping": "Ending…",
3127
+ "redeemLoading": "Starting access simulation…",
3128
+ "redeemInvalidTitle": "Simulation link is no longer valid",
3129
+ "redeemInvalidDescription": "This link works only once and expires after a minute. Ask the operator to start a new simulation.",
3130
+ "redeemMissingCode": "No simulation code found in the link.",
3131
+ "noAdminAccessTitle": "This user has no access to the admin panel",
3132
+ "noAdminAccessDescription": "{name} has no administrative role, so there is nothing to show here. Simulate them in the application they actually use."
3035
3133
  }
3036
3134
  }