@hed-hog/core 0.0.399 → 0.0.400

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 (668) hide show
  1. package/dist/ai/ai-agent.sort.d.ts +6 -0
  2. package/dist/ai/ai-agent.sort.d.ts.map +1 -0
  3. package/dist/ai/ai-agent.sort.js +21 -0
  4. package/dist/ai/ai-agent.sort.js.map +1 -0
  5. package/dist/ai/ai.controller.d.ts +4 -4
  6. package/dist/ai/ai.service.d.ts +35 -4
  7. package/dist/ai/ai.service.d.ts.map +1 -1
  8. package/dist/ai/ai.service.js +51 -137
  9. package/dist/ai/ai.service.js.map +1 -1
  10. package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
  11. package/dist/ai-instruction/ai-instruction.service.js +26 -23
  12. package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
  13. package/dist/ai-instruction/ai-instruction.sort.d.ts +16 -0
  14. package/dist/ai-instruction/ai-instruction.sort.d.ts.map +1 -0
  15. package/dist/ai-instruction/ai-instruction.sort.js +32 -0
  16. package/dist/ai-instruction/ai-instruction.sort.js.map +1 -0
  17. package/dist/auth/auth.controller.d.ts +24 -8
  18. package/dist/auth/auth.controller.d.ts.map +1 -1
  19. package/dist/auth/auth.module.d.ts.map +1 -1
  20. package/dist/auth/auth.module.js +8 -1
  21. package/dist/auth/auth.module.js.map +1 -1
  22. package/dist/auth/auth.service.d.ts +72 -25
  23. package/dist/auth/auth.service.d.ts.map +1 -1
  24. package/dist/auth/auth.service.js +41 -4
  25. package/dist/auth/auth.service.js.map +1 -1
  26. package/dist/auth/guards/auth.guard.d.ts +3 -1
  27. package/dist/auth/guards/auth.guard.d.ts.map +1 -1
  28. package/dist/auth/guards/auth.guard.js +12 -3
  29. package/dist/auth/guards/auth.guard.js.map +1 -1
  30. package/dist/authorize/authorize.controller.d.ts +29 -5
  31. package/dist/authorize/authorize.controller.d.ts.map +1 -1
  32. package/dist/authorize/authorize.controller.js +120 -13
  33. package/dist/authorize/authorize.controller.js.map +1 -1
  34. package/dist/authorize/authorize.errors.d.ts +34 -0
  35. package/dist/authorize/authorize.errors.d.ts.map +1 -0
  36. package/dist/authorize/authorize.errors.js +37 -0
  37. package/dist/authorize/authorize.errors.js.map +1 -0
  38. package/dist/authorize/authorize.module.d.ts.map +1 -1
  39. package/dist/authorize/authorize.module.js +6 -1
  40. package/dist/authorize/authorize.module.js.map +1 -1
  41. package/dist/authorize/authorize.service.d.ts +77 -3
  42. package/dist/authorize/authorize.service.d.ts.map +1 -1
  43. package/dist/authorize/authorize.service.js +212 -21
  44. package/dist/authorize/authorize.service.js.map +1 -1
  45. package/dist/authorize/dto/authorize-info.dto.d.ts +10 -1
  46. package/dist/authorize/dto/authorize-info.dto.d.ts.map +1 -1
  47. package/dist/authorize/dto/authorize-info.dto.js +16 -1
  48. package/dist/authorize/dto/authorize-info.dto.js.map +1 -1
  49. package/dist/authorize/dto/consent.dto.d.ts +10 -1
  50. package/dist/authorize/dto/consent.dto.d.ts.map +1 -1
  51. package/dist/authorize/dto/consent.dto.js +16 -1
  52. package/dist/authorize/dto/consent.dto.js.map +1 -1
  53. package/dist/authorize/dto/token.dto.d.ts +12 -0
  54. package/dist/authorize/dto/token.dto.d.ts.map +1 -1
  55. package/dist/authorize/dto/token.dto.js +21 -1
  56. package/dist/authorize/dto/token.dto.js.map +1 -1
  57. package/dist/authorize/oauth-exception.filter.d.ts +17 -0
  58. package/dist/authorize/oauth-exception.filter.d.ts.map +1 -0
  59. package/dist/authorize/oauth-exception.filter.js +54 -0
  60. package/dist/authorize/oauth-exception.filter.js.map +1 -0
  61. package/dist/authorize/oauth-metadata.service.d.ts +39 -0
  62. package/dist/authorize/oauth-metadata.service.d.ts.map +1 -0
  63. package/dist/authorize/oauth-metadata.service.js +81 -0
  64. package/dist/authorize/oauth-metadata.service.js.map +1 -0
  65. package/dist/authorize/well-known.controller.d.ts +67 -0
  66. package/dist/authorize/well-known.controller.d.ts.map +1 -0
  67. package/dist/authorize/well-known.controller.js +126 -0
  68. package/dist/authorize/well-known.controller.js.map +1 -0
  69. package/dist/captcha/captcha.service.d.ts +32 -2
  70. package/dist/captcha/captcha.service.d.ts.map +1 -1
  71. package/dist/captcha/captcha.service.js +85 -12
  72. package/dist/captcha/captcha.service.js.map +1 -1
  73. package/dist/challenge/challenge.service.d.ts +2 -2
  74. package/dist/core.module.d.ts.map +1 -1
  75. package/dist/core.module.js +6 -0
  76. package/dist/core.module.js.map +1 -1
  77. package/dist/dashboard/dashboard/dashboard.controller.d.ts +9 -9
  78. package/dist/dashboard/dashboard/dashboard.service.d.ts +9 -9
  79. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +3 -3
  80. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +3 -3
  81. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +3 -3
  82. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +3 -3
  83. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts.map +1 -1
  84. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js +2 -4
  85. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js.map +1 -1
  86. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts +8 -0
  87. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts.map +1 -0
  88. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js +18 -0
  89. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js.map +1 -0
  90. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts.map +1 -1
  91. package/dist/dashboard/dashboard-item/dashboard-item.service.js +2 -4
  92. package/dist/dashboard/dashboard-item/dashboard-item.service.js.map +1 -1
  93. package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts +9 -0
  94. package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts.map +1 -0
  95. package/dist/dashboard/dashboard-item/dashboard-item.sort.js +19 -0
  96. package/dist/dashboard/dashboard-item/dashboard-item.sort.js.map +1 -0
  97. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +3 -3
  98. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +3 -3
  99. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts.map +1 -1
  100. package/dist/dashboard/dashboard-role/dashboard-role.service.js +2 -4
  101. package/dist/dashboard/dashboard-role/dashboard-role.service.js.map +1 -1
  102. package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts +8 -0
  103. package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts.map +1 -0
  104. package/dist/dashboard/dashboard-role/dashboard-role.sort.js +16 -0
  105. package/dist/dashboard/dashboard-role/dashboard-role.sort.js.map +1 -0
  106. package/dist/file/file-upload-ticket.service.d.ts +160 -0
  107. package/dist/file/file-upload-ticket.service.d.ts.map +1 -0
  108. package/dist/file/file-upload-ticket.service.js +382 -0
  109. package/dist/file/file-upload-ticket.service.js.map +1 -0
  110. package/dist/file/file.controller.d.ts +24 -1
  111. package/dist/file/file.controller.d.ts.map +1 -1
  112. package/dist/file/file.controller.js +63 -2
  113. package/dist/file/file.controller.js.map +1 -1
  114. package/dist/file/file.module.d.ts.map +1 -1
  115. package/dist/file/file.module.js +14 -2
  116. package/dist/file/file.module.js.map +1 -1
  117. package/dist/file/file.service.d.ts +182 -6
  118. package/dist/file/file.service.d.ts.map +1 -1
  119. package/dist/file/file.service.js +386 -54
  120. package/dist/file/file.service.js.map +1 -1
  121. package/dist/file/filename-encoding.util.d.ts +24 -0
  122. package/dist/file/filename-encoding.util.d.ts.map +1 -0
  123. package/dist/file/filename-encoding.util.js +63 -0
  124. package/dist/file/filename-encoding.util.js.map +1 -0
  125. package/dist/file/image-optimization.service.d.ts +27 -0
  126. package/dist/file/image-optimization.service.d.ts.map +1 -1
  127. package/dist/file/image-optimization.service.js +63 -14
  128. package/dist/file/image-optimization.service.js.map +1 -1
  129. package/dist/file/mcp-file-source.schema.d.ts +33 -0
  130. package/dist/file/mcp-file-source.schema.d.ts.map +1 -0
  131. package/dist/file/mcp-file-source.schema.js +75 -0
  132. package/dist/file/mcp-file-source.schema.js.map +1 -0
  133. package/dist/file/mcp-file-source.service.d.ts +124 -0
  134. package/dist/file/mcp-file-source.service.d.ts.map +1 -0
  135. package/dist/file/mcp-file-source.service.js +262 -0
  136. package/dist/file/mcp-file-source.service.js.map +1 -0
  137. package/dist/file/mimetype-sniff.util.d.ts +62 -0
  138. package/dist/file/mimetype-sniff.util.d.ts.map +1 -0
  139. package/dist/file/mimetype-sniff.util.js +226 -0
  140. package/dist/file/mimetype-sniff.util.js.map +1 -0
  141. package/dist/file/remote-fetch.util.d.ts +35 -0
  142. package/dist/file/remote-fetch.util.d.ts.map +1 -0
  143. package/dist/file/remote-fetch.util.js +236 -0
  144. package/dist/file/remote-fetch.util.js.map +1 -0
  145. package/dist/impersonation/dto/start-impersonation.dto.d.ts +4 -1
  146. package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -1
  147. package/dist/impersonation/dto/start-impersonation.dto.js +1 -1
  148. package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -1
  149. package/dist/impersonation/impersonation.service.d.ts +8 -3
  150. package/dist/impersonation/impersonation.service.d.ts.map +1 -1
  151. package/dist/impersonation/impersonation.service.js +14 -4
  152. package/dist/impersonation/impersonation.service.js.map +1 -1
  153. package/dist/incident/incident.controller.d.ts +2 -1
  154. package/dist/incident/incident.controller.d.ts.map +1 -1
  155. package/dist/incident/incident.controller.js +10 -6
  156. package/dist/incident/incident.controller.js.map +1 -1
  157. package/dist/incident/incident.service.d.ts +2 -0
  158. package/dist/incident/incident.service.d.ts.map +1 -1
  159. package/dist/incident/incident.service.js +4 -0
  160. package/dist/incident/incident.service.js.map +1 -1
  161. package/dist/index.d.ts +17 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +17 -0
  164. package/dist/index.js.map +1 -1
  165. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  166. package/dist/integration-profile/integration-profile.secrets.js +7 -0
  167. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  168. package/dist/integration-profile/integration-profile.service.d.ts +0 -13
  169. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  170. package/dist/integration-profile/integration-profile.service.js +5 -40
  171. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  172. package/dist/integration-profile/integration-profile.utils.js +5 -5
  173. package/dist/integration-profile/integration-profile.utils.js.map +1 -1
  174. package/dist/integration-profile/testers/index.d.ts.map +1 -1
  175. package/dist/integration-profile/testers/index.js +2 -0
  176. package/dist/integration-profile/testers/index.js.map +1 -1
  177. package/dist/integration-profile/testers/shipping.testers.d.ts +3 -0
  178. package/dist/integration-profile/testers/shipping.testers.d.ts.map +1 -0
  179. package/dist/integration-profile/testers/shipping.testers.js +71 -0
  180. package/dist/integration-profile/testers/shipping.testers.js.map +1 -0
  181. package/dist/locale/locale.controller.d.ts +1 -1
  182. package/dist/locale/locale.service.d.ts +1 -1
  183. package/dist/mail/dto/send.dto.d.ts +6 -1
  184. package/dist/mail/dto/send.dto.d.ts.map +1 -1
  185. package/dist/mail/dto/send.dto.js.map +1 -1
  186. package/dist/mail/mail.service.d.ts +9 -0
  187. package/dist/mail/mail.service.d.ts.map +1 -1
  188. package/dist/mail/mail.service.js +34 -14
  189. package/dist/mail/mail.service.js.map +1 -1
  190. package/dist/mail-sent/mail-sent.controller.d.ts +1 -1
  191. package/dist/mail-sent/mail-sent.service.d.ts +1 -1
  192. package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
  193. package/dist/mail-sent/mail-sent.service.js +2 -1
  194. package/dist/mail-sent/mail-sent.service.js.map +1 -1
  195. package/dist/mail-sent/mail-sent.sort.d.ts +9 -0
  196. package/dist/mail-sent/mail-sent.sort.d.ts.map +1 -0
  197. package/dist/mail-sent/mail-sent.sort.js +19 -0
  198. package/dist/mail-sent/mail-sent.sort.js.map +1 -0
  199. package/dist/mcp/filters/mcp-challenge.filter.d.ts +20 -0
  200. package/dist/mcp/filters/mcp-challenge.filter.d.ts.map +1 -0
  201. package/dist/mcp/filters/mcp-challenge.filter.js +69 -0
  202. package/dist/mcp/filters/mcp-challenge.filter.js.map +1 -0
  203. package/dist/mcp/guards/mcp-auth.guard.d.ts +4 -1
  204. package/dist/mcp/guards/mcp-auth.guard.d.ts.map +1 -1
  205. package/dist/mcp/guards/mcp-auth.guard.js +19 -5
  206. package/dist/mcp/guards/mcp-auth.guard.js.map +1 -1
  207. package/dist/mcp/guards/mcp-permission.guard.d.ts +25 -3
  208. package/dist/mcp/guards/mcp-permission.guard.d.ts.map +1 -1
  209. package/dist/mcp/guards/mcp-permission.guard.js +46 -26
  210. package/dist/mcp/guards/mcp-permission.guard.js.map +1 -1
  211. package/dist/mcp/mcp-audit.service.d.ts +17 -0
  212. package/dist/mcp/mcp-audit.service.d.ts.map +1 -1
  213. package/dist/mcp/mcp-audit.service.js +32 -3
  214. package/dist/mcp/mcp-audit.service.js.map +1 -1
  215. package/dist/mcp/mcp-permission.service.d.ts +64 -0
  216. package/dist/mcp/mcp-permission.service.d.ts.map +1 -0
  217. package/dist/mcp/mcp-permission.service.js +178 -0
  218. package/dist/mcp/mcp-permission.service.js.map +1 -0
  219. package/dist/mcp/mcp-server.service.d.ts +3 -1
  220. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  221. package/dist/mcp/mcp-server.service.js +36 -15
  222. package/dist/mcp/mcp-server.service.js.map +1 -1
  223. package/dist/mcp/mcp.controller.d.ts.map +1 -1
  224. package/dist/mcp/mcp.controller.js +10 -2
  225. package/dist/mcp/mcp.controller.js.map +1 -1
  226. package/dist/mcp/mcp.module.d.ts.map +1 -1
  227. package/dist/mcp/mcp.module.js +5 -1
  228. package/dist/mcp/mcp.module.js.map +1 -1
  229. package/dist/mcp/tools/core-ai.mcp-tools.js +2 -9
  230. package/dist/mcp/tools/core-ai.mcp-tools.js.map +1 -1
  231. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js +1 -1
  232. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js.map +1 -1
  233. package/dist/mcp/tools/core-dashboard.mcp-tools.js +2 -9
  234. package/dist/mcp/tools/core-dashboard.mcp-tools.js.map +1 -1
  235. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts.map +1 -1
  236. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js +2 -10
  237. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js.map +1 -1
  238. package/dist/mcp/tools/core-files.mcp-tools.d.ts +17 -5
  239. package/dist/mcp/tools/core-files.mcp-tools.d.ts.map +1 -1
  240. package/dist/mcp/tools/core-files.mcp-tools.js +186 -24
  241. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  242. package/dist/mcp/tools/core-integration-events.mcp-tools.js +2 -9
  243. package/dist/mcp/tools/core-integration-events.mcp-tools.js.map +1 -1
  244. package/dist/mcp/tools/core-mail-sent.mcp-tools.js +2 -14
  245. package/dist/mcp/tools/core-mail-sent.mcp-tools.js.map +1 -1
  246. package/dist/mcp/tools/core-mail.mcp-tools.js +2 -9
  247. package/dist/mcp/tools/core-mail.mcp-tools.js.map +1 -1
  248. package/dist/mcp/tools/core-menus.mcp-tools.d.ts.map +1 -1
  249. package/dist/mcp/tools/core-menus.mcp-tools.js +2 -10
  250. package/dist/mcp/tools/core-menus.mcp-tools.js.map +1 -1
  251. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts.map +1 -1
  252. package/dist/mcp/tools/core-notifications.mcp-tools.js +0 -1
  253. package/dist/mcp/tools/core-notifications.mcp-tools.js.map +1 -1
  254. package/dist/mcp/tools/core-roles.mcp-tools.d.ts.map +1 -1
  255. package/dist/mcp/tools/core-roles.mcp-tools.js +2 -13
  256. package/dist/mcp/tools/core-roles.mcp-tools.js.map +1 -1
  257. package/dist/mcp/tools/core-routes.mcp-tools.d.ts.map +1 -1
  258. package/dist/mcp/tools/core-routes.mcp-tools.js +2 -11
  259. package/dist/mcp/tools/core-routes.mcp-tools.js.map +1 -1
  260. package/dist/mcp/tools/core-screens.mcp-tools.d.ts.map +1 -1
  261. package/dist/mcp/tools/core-screens.mcp-tools.js +2 -11
  262. package/dist/mcp/tools/core-screens.mcp-tools.js.map +1 -1
  263. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts.map +1 -1
  264. package/dist/mcp/tools/core-sessions.mcp-tools.js +0 -2
  265. package/dist/mcp/tools/core-sessions.mcp-tools.js.map +1 -1
  266. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -1
  267. package/dist/mcp/tools/core-settings.mcp-tools.js +2 -10
  268. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -1
  269. package/dist/mcp/tools/core-users.mcp-tools.js +2 -9
  270. package/dist/mcp/tools/core-users.mcp-tools.js.map +1 -1
  271. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts.map +1 -1
  272. package/dist/mcp/tools/core-webhooks.mcp-tools.js +2 -10
  273. package/dist/mcp/tools/core-webhooks.mcp-tools.js.map +1 -1
  274. package/dist/mcp/types/mcp-context.type.d.ts +9 -0
  275. package/dist/mcp/types/mcp-context.type.d.ts.map +1 -1
  276. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  277. package/dist/mcp-chat/mcp-chat.service.js +8 -0
  278. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  279. package/dist/meeting/meeting-provider.registry.d.ts +115 -0
  280. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  281. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  282. package/dist/meeting/meeting.constants.d.ts +70 -0
  283. package/dist/meeting/meeting.constants.d.ts.map +1 -1
  284. package/dist/meeting/meeting.constants.js +9 -1
  285. package/dist/meeting/meeting.constants.js.map +1 -1
  286. package/dist/menu/menu.service.d.ts.map +1 -1
  287. package/dist/menu/menu.service.js +29 -9
  288. package/dist/menu/menu.service.js.map +1 -1
  289. package/dist/message-template/dto/update-message-template.dto.d.ts +18 -0
  290. package/dist/message-template/dto/update-message-template.dto.d.ts.map +1 -0
  291. package/dist/message-template/dto/update-message-template.dto.js +38 -0
  292. package/dist/message-template/dto/update-message-template.dto.js.map +1 -0
  293. package/dist/message-template/message-template-admin.service.d.ts +70 -0
  294. package/dist/message-template/message-template-admin.service.d.ts.map +1 -0
  295. package/dist/message-template/message-template-admin.service.js +226 -0
  296. package/dist/message-template/message-template-admin.service.js.map +1 -0
  297. package/dist/message-template/message-template.controller.d.ts +29 -0
  298. package/dist/message-template/message-template.controller.d.ts.map +1 -0
  299. package/dist/message-template/message-template.controller.js +101 -0
  300. package/dist/message-template/message-template.controller.js.map +1 -0
  301. package/dist/message-template/message-template.module.d.ts +10 -0
  302. package/dist/message-template/message-template.module.d.ts.map +1 -0
  303. package/dist/message-template/message-template.module.js +33 -0
  304. package/dist/message-template/message-template.module.js.map +1 -0
  305. package/dist/message-template/message-template.registry.d.ts +55 -0
  306. package/dist/message-template/message-template.registry.d.ts.map +1 -0
  307. package/dist/message-template/message-template.registry.js +64 -0
  308. package/dist/message-template/message-template.registry.js.map +1 -0
  309. package/dist/message-template/message-template.service.d.ts +59 -0
  310. package/dist/message-template/message-template.service.d.ts.map +1 -0
  311. package/dist/message-template/message-template.service.js +166 -0
  312. package/dist/message-template/message-template.service.js.map +1 -0
  313. package/dist/notification/notification.constants.d.ts +11 -0
  314. package/dist/notification/notification.constants.d.ts.map +1 -0
  315. package/dist/notification/notification.constants.js +14 -0
  316. package/dist/notification/notification.constants.js.map +1 -0
  317. package/dist/notification/notification.controller.d.ts +20 -20
  318. package/dist/notification/notification.module.d.ts.map +1 -1
  319. package/dist/notification/notification.module.js +3 -0
  320. package/dist/notification/notification.module.js.map +1 -1
  321. package/dist/notification/notification.service.d.ts +33 -21
  322. package/dist/notification/notification.service.d.ts.map +1 -1
  323. package/dist/notification/notification.service.js +36 -2
  324. package/dist/notification/notification.service.js.map +1 -1
  325. package/dist/oauth/oauth.controller.d.ts +4 -6
  326. package/dist/oauth/oauth.controller.d.ts.map +1 -1
  327. package/dist/oauth/oauth.controller.js +0 -1
  328. package/dist/oauth/oauth.controller.js.map +1 -1
  329. package/dist/oauth/oauth.errors.d.ts +15 -1
  330. package/dist/oauth/oauth.errors.d.ts.map +1 -1
  331. package/dist/oauth/oauth.errors.js +9 -1
  332. package/dist/oauth/oauth.errors.js.map +1 -1
  333. package/dist/oauth/oauth.module.d.ts.map +1 -1
  334. package/dist/oauth/oauth.module.js +6 -1
  335. package/dist/oauth/oauth.module.js.map +1 -1
  336. package/dist/oauth/oauth.service.d.ts +25 -5
  337. package/dist/oauth/oauth.service.d.ts.map +1 -1
  338. package/dist/oauth/oauth.service.js +63 -27
  339. package/dist/oauth/oauth.service.js.map +1 -1
  340. package/dist/oauth/providers/abstract.provider.d.ts +10 -0
  341. package/dist/oauth/providers/abstract.provider.d.ts.map +1 -1
  342. package/dist/oauth/providers/abstract.provider.js +39 -12
  343. package/dist/oauth/providers/abstract.provider.js.map +1 -1
  344. package/dist/oauth/providers/github.provider.d.ts +1 -1
  345. package/dist/oauth/providers/github.provider.d.ts.map +1 -1
  346. package/dist/oauth/providers/github.provider.js +48 -22
  347. package/dist/oauth/providers/github.provider.js.map +1 -1
  348. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  349. package/dist/oauth/providers/microsoft-entra-id.provider.js +6 -0
  350. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  351. package/dist/observability/monitored-cron.d.ts +29 -12
  352. package/dist/observability/monitored-cron.d.ts.map +1 -1
  353. package/dist/observability/monitored-cron.js +131 -46
  354. package/dist/observability/monitored-cron.js.map +1 -1
  355. package/dist/pairing/pairing.service.d.ts +6 -2
  356. package/dist/pairing/pairing.service.d.ts.map +1 -1
  357. package/dist/profile/dto/change-password.dto.d.ts.map +1 -1
  358. package/dist/profile/dto/change-password.dto.js +4 -6
  359. package/dist/profile/dto/change-password.dto.js.map +1 -1
  360. package/dist/profile/profile.controller.d.ts +1 -1
  361. package/dist/profile/profile.service.d.ts +1 -1
  362. package/dist/profile/profile.service.d.ts.map +1 -1
  363. package/dist/profile/profile.service.js +9 -3
  364. package/dist/profile/profile.service.js.map +1 -1
  365. package/dist/realtime/realtime-tick.coalescer.d.ts +34 -0
  366. package/dist/realtime/realtime-tick.coalescer.d.ts.map +1 -0
  367. package/dist/realtime/realtime-tick.coalescer.js +60 -0
  368. package/dist/realtime/realtime-tick.coalescer.js.map +1 -0
  369. package/dist/realtime/realtime.service.d.ts +2 -0
  370. package/dist/realtime/realtime.service.d.ts.map +1 -1
  371. package/dist/realtime/realtime.service.js +22 -2
  372. package/dist/realtime/realtime.service.js.map +1 -1
  373. package/dist/redis/redis-kv.service.d.ts +90 -0
  374. package/dist/redis/redis-kv.service.d.ts.map +1 -0
  375. package/dist/redis/redis-kv.service.js +247 -0
  376. package/dist/redis/redis-kv.service.js.map +1 -0
  377. package/dist/redis/redis-master.d.ts +29 -0
  378. package/dist/redis/redis-master.d.ts.map +1 -0
  379. package/dist/redis/redis-master.js +81 -0
  380. package/dist/redis/redis-master.js.map +1 -0
  381. package/dist/redis/redis-pubsub.d.ts +12 -0
  382. package/dist/redis/redis-pubsub.d.ts.map +1 -1
  383. package/dist/redis/redis-pubsub.js +25 -2
  384. package/dist/redis/redis-pubsub.js.map +1 -1
  385. package/dist/redis/redis.module.d.ts +11 -0
  386. package/dist/redis/redis.module.d.ts.map +1 -0
  387. package/dist/redis/redis.module.js +30 -0
  388. package/dist/redis/redis.module.js.map +1 -0
  389. package/dist/session/session.controller.d.ts +6 -2
  390. package/dist/session/session.controller.d.ts.map +1 -1
  391. package/dist/session/session.service.d.ts +118 -15
  392. package/dist/session/session.service.d.ts.map +1 -1
  393. package/dist/session/session.service.js +251 -77
  394. package/dist/session/session.service.js.map +1 -1
  395. package/dist/setting/setting.controller.d.ts +5 -0
  396. package/dist/setting/setting.controller.d.ts.map +1 -1
  397. package/dist/setting/setting.service.d.ts +7 -0
  398. package/dist/setting/setting.service.d.ts.map +1 -1
  399. package/dist/setting/setting.service.js +38 -3
  400. package/dist/setting/setting.service.js.map +1 -1
  401. package/dist/task/task.service.d.ts +17 -0
  402. package/dist/task/task.service.d.ts.map +1 -1
  403. package/dist/task/task.service.js +48 -13
  404. package/dist/task/task.service.js.map +1 -1
  405. package/dist/token/token.service.d.ts +19 -1
  406. package/dist/token/token.service.d.ts.map +1 -1
  407. package/dist/token/token.service.js +39 -2
  408. package/dist/token/token.service.js.map +1 -1
  409. package/dist/user/user-credential.util.d.ts +10 -0
  410. package/dist/user/user-credential.util.d.ts.map +1 -1
  411. package/dist/user/user-credential.util.js +14 -1
  412. package/dist/user/user-credential.util.js.map +1 -1
  413. package/dist/user/user.service.d.ts +12 -4
  414. package/dist/user/user.service.d.ts.map +1 -1
  415. package/dist/user/user.service.js +2 -11
  416. package/dist/user/user.service.js.map +1 -1
  417. package/dist/user/user.sort.d.ts +16 -0
  418. package/dist/user/user.sort.d.ts.map +1 -0
  419. package/dist/user/user.sort.js +25 -0
  420. package/dist/user/user.sort.js.map +1 -0
  421. package/dist/utils/abbreviate-name.d.ts +13 -0
  422. package/dist/utils/abbreviate-name.d.ts.map +1 -0
  423. package/dist/utils/abbreviate-name.js +42 -0
  424. package/dist/utils/abbreviate-name.js.map +1 -0
  425. package/dist/utils/date-range-query.dto.d.ts +11 -0
  426. package/dist/utils/date-range-query.dto.d.ts.map +1 -0
  427. package/dist/utils/date-range-query.dto.js +63 -0
  428. package/dist/utils/date-range-query.dto.js.map +1 -0
  429. package/dist/utils/date-range.d.ts +96 -0
  430. package/dist/utils/date-range.d.ts.map +1 -0
  431. package/dist/utils/date-range.js +172 -0
  432. package/dist/utils/date-range.js.map +1 -0
  433. package/dist/webhook-integration/webhook-utils.d.ts.map +1 -1
  434. package/dist/webhook-integration/webhook-utils.js +24 -0
  435. package/dist/webhook-integration/webhook-utils.js.map +1 -1
  436. package/dist/whatsapp-sender/whatsapp-recipients.d.ts +49 -0
  437. package/dist/whatsapp-sender/whatsapp-recipients.d.ts.map +1 -0
  438. package/dist/whatsapp-sender/whatsapp-recipients.js +66 -0
  439. package/dist/whatsapp-sender/whatsapp-recipients.js.map +1 -0
  440. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +25 -0
  441. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  442. package/dist/whatsapp-sender/whatsapp-sender.service.js +46 -5
  443. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  444. package/hedhog/data/integration_provider.yaml +9 -0
  445. package/hedhog/data/integration_type.yaml +6 -0
  446. package/hedhog/data/locale.yaml +0 -1
  447. package/hedhog/data/mail.yaml +2 -2
  448. package/hedhog/data/mail_layout.yaml +6 -3
  449. package/hedhog/data/menu.yaml +25 -5
  450. package/hedhog/data/route.yaml +140 -0
  451. package/hedhog/data/setting_group.yaml +137 -3
  452. package/hedhog/frontend/app/access-log/page.tsx.ejs +47 -53
  453. package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +33 -8
  454. package/hedhog/frontend/app/account/components/mcp-tokens.tsx.ejs +54 -13
  455. package/hedhog/frontend/app/account/components/mfa-method-card.tsx.ejs +7 -1
  456. package/hedhog/frontend/app/account/components/recovery-codes-dialog.tsx.ejs +1 -0
  457. package/hedhog/frontend/app/account/components/tokens.tsx.ejs +47 -17
  458. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +46 -5
  459. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +101 -30
  460. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +24 -8
  461. package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +80 -15
  462. package/hedhog/frontend/app/configurations/[slug]/components/image-optimization-action.tsx.ejs +166 -0
  463. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +145 -45
  464. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +99 -219
  465. package/hedhog/frontend/app/configurations/[slug]/page.tsx.ejs +19 -1
  466. package/hedhog/frontend/app/configurations/layout.tsx.ejs +19 -5
  467. package/hedhog/frontend/app/dashboard/[slug]/widget-renderer.tsx.ejs +2 -8
  468. package/hedhog/frontend/app/dashboard/components/dynamic-widget.tsx.ejs +3 -0
  469. package/hedhog/frontend/app/dashboard/components/widget-wrapper.tsx.ejs +4 -0
  470. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +43 -44
  471. package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +41 -3
  472. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +42 -2
  473. package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +41 -3
  474. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +39 -4
  475. package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +42 -3
  476. package/hedhog/frontend/app/incidents/page.tsx.ejs +60 -31
  477. package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +45 -5
  478. package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +92 -15
  479. package/hedhog/frontend/app/mail/log/page.tsx.ejs +109 -61
  480. package/hedhog/frontend/app/mail/template/page.tsx.ejs +125 -23
  481. package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +13 -15
  482. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +116 -110
  483. package/hedhog/frontend/app/message-templates/_components/message-template-sheet.tsx.ejs +245 -0
  484. package/hedhog/frontend/app/message-templates/_lib/types.ts.ejs +24 -0
  485. package/hedhog/frontend/app/message-templates/page.tsx.ejs +182 -0
  486. package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1 -0
  487. package/hedhog/frontend/app/pages/page.tsx.ejs +94 -9
  488. package/hedhog/frontend/app/roles/menus.tsx.ejs +4 -4
  489. package/hedhog/frontend/app/roles/routes.tsx.ejs +4 -4
  490. package/hedhog/frontend/app/roles/users.tsx.ejs +4 -4
  491. package/hedhog/frontend/app/setting-list/page.tsx.ejs +71 -9
  492. package/hedhog/frontend/app/users/page.tsx.ejs +77 -67
  493. package/hedhog/frontend/messages/en.json +183 -36
  494. package/hedhog/frontend/messages/pt.json +183 -36
  495. package/hedhog/table/cron_lock.yaml +17 -0
  496. package/hedhog/table/file.yaml +13 -1
  497. package/hedhog/table/file_upload_chunk.yaml +23 -0
  498. package/hedhog/table/file_upload_ticket.yaml +67 -0
  499. package/hedhog/table/mcp_tool_call_log.yaml +30 -22
  500. package/hedhog/table/message_template.yaml +33 -0
  501. package/hedhog/table/setting.yaml +8 -0
  502. package/hedhog/table/user_session.yaml +36 -1
  503. package/package.json +7 -5
  504. package/src/ai/ai-agent.sort.ts +21 -0
  505. package/src/ai/ai.service.spec.ts +173 -1
  506. package/src/ai/ai.service.ts +64 -193
  507. package/src/ai-instruction/ai-instruction.service.ts +32 -28
  508. package/src/ai-instruction/ai-instruction.sort.ts +32 -0
  509. package/src/auth/auth.module.ts +8 -1
  510. package/src/auth/auth.service.spec.ts +108 -1
  511. package/src/auth/auth.service.ts +59 -5
  512. package/src/auth/guards/auth.guard.ts +9 -1
  513. package/src/authorize/authorize.controller.ts +126 -11
  514. package/src/authorize/authorize.errors.ts +55 -0
  515. package/src/authorize/authorize.module.ts +6 -1
  516. package/src/authorize/authorize.service.spec.ts +379 -7
  517. package/src/authorize/authorize.service.ts +309 -23
  518. package/src/authorize/dto/authorize-info.dto.ts +21 -3
  519. package/src/authorize/dto/consent.dto.ts +21 -3
  520. package/src/authorize/dto/token.dto.ts +24 -2
  521. package/src/authorize/oauth-exception.filter.ts +58 -0
  522. package/src/authorize/oauth-metadata.service.ts +67 -0
  523. package/src/authorize/well-known.controller.spec.ts +84 -0
  524. package/src/authorize/well-known.controller.ts +96 -0
  525. package/src/captcha/captcha.service.spec.ts +211 -4
  526. package/src/captcha/captcha.service.ts +127 -10
  527. package/src/core.module.ts +6 -0
  528. package/src/dashboard/dashboard-component-role/dashboard-component-role.service.ts +2 -3
  529. package/src/dashboard/dashboard-component-role/dashboard-component-role.sort.ts +18 -0
  530. package/src/dashboard/dashboard-item/dashboard-item.service.ts +2 -3
  531. package/src/dashboard/dashboard-item/dashboard-item.sort.ts +19 -0
  532. package/src/dashboard/dashboard-role/dashboard-role.service.ts +2 -3
  533. package/src/dashboard/dashboard-role/dashboard-role.sort.ts +16 -0
  534. package/src/file/file-upload-ticket.service.spec.ts +422 -0
  535. package/src/file/file-upload-ticket.service.ts +513 -0
  536. package/src/file/file.controller.ts +65 -0
  537. package/src/file/file.module.ts +14 -2
  538. package/src/file/file.service.spec.ts +94 -0
  539. package/src/file/file.service.ts +433 -53
  540. package/src/file/filename-encoding.util.spec.ts +54 -0
  541. package/src/file/filename-encoding.util.ts +67 -0
  542. package/src/file/image-optimization.service.spec.ts +156 -19
  543. package/src/file/image-optimization.service.ts +106 -21
  544. package/src/file/mcp-file-source.schema.ts +83 -0
  545. package/src/file/mcp-file-source.service.spec.ts +473 -0
  546. package/src/file/mcp-file-source.service.ts +445 -0
  547. package/src/file/mimetype-sniff.util.spec.ts +126 -0
  548. package/src/file/mimetype-sniff.util.ts +265 -0
  549. package/src/file/remote-fetch.util.spec.ts +117 -0
  550. package/src/file/remote-fetch.util.ts +330 -0
  551. package/src/impersonation/dto/start-impersonation.dto.ts +5 -2
  552. package/src/impersonation/impersonation.service.spec.ts +24 -1
  553. package/src/impersonation/impersonation.service.ts +14 -4
  554. package/src/incident/incident.controller.ts +9 -1
  555. package/src/incident/incident.service.ts +7 -0
  556. package/src/index.ts +17 -0
  557. package/src/integration-profile/integration-profile.secrets.ts +7 -0
  558. package/src/integration-profile/integration-profile.service.ts +7 -64
  559. package/src/integration-profile/integration-profile.utils.spec.ts +9 -0
  560. package/src/integration-profile/integration-profile.utils.ts +5 -5
  561. package/src/integration-profile/testers/index.ts +2 -0
  562. package/src/integration-profile/testers/remaining.testers.spec.ts +79 -0
  563. package/src/integration-profile/testers/shipping.testers.ts +94 -0
  564. package/src/mail/dto/send.dto.ts +6 -1
  565. package/src/mail/mail-template.spec.ts +58 -1
  566. package/src/mail/mail.service.spec.ts +112 -0
  567. package/src/mail/mail.service.ts +42 -4
  568. package/src/mail-sent/mail-sent.service.ts +3 -0
  569. package/src/mail-sent/mail-sent.sort.ts +19 -0
  570. package/src/mcp/filters/mcp-challenge.filter.spec.ts +76 -0
  571. package/src/mcp/filters/mcp-challenge.filter.ts +70 -0
  572. package/src/mcp/guards/mcp-auth.guard.spec.ts +51 -2
  573. package/src/mcp/guards/mcp-auth.guard.ts +24 -1
  574. package/src/mcp/guards/mcp-permission.guard.spec.ts +109 -15
  575. package/src/mcp/guards/mcp-permission.guard.ts +76 -51
  576. package/src/mcp/mcp-audit.service.spec.ts +107 -0
  577. package/src/mcp/mcp-audit.service.ts +37 -1
  578. package/src/mcp/mcp-permission.service.spec.ts +197 -0
  579. package/src/mcp/mcp-permission.service.ts +184 -0
  580. package/src/mcp/mcp-server.service.spec.ts +84 -2
  581. package/src/mcp/mcp-server.service.ts +111 -87
  582. package/src/mcp/mcp.controller.ts +8 -1
  583. package/src/mcp/mcp.module.ts +5 -1
  584. package/src/mcp/tools/core-ai.mcp-tools.ts +1 -1
  585. package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +1 -1
  586. package/src/mcp/tools/core-dashboard.mcp-tools.ts +1 -1
  587. package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +1 -2
  588. package/src/mcp/tools/core-files.mcp-tools.ts +202 -22
  589. package/src/mcp/tools/core-integration-events.mcp-tools.ts +1 -1
  590. package/src/mcp/tools/core-mail-sent.mcp-tools.ts +1 -1
  591. package/src/mcp/tools/core-mail.mcp-tools.ts +1 -1
  592. package/src/mcp/tools/core-menus.mcp-tools.ts +1 -2
  593. package/src/mcp/tools/core-notifications.mcp-tools.ts +0 -1
  594. package/src/mcp/tools/core-roles.mcp-tools.ts +1 -5
  595. package/src/mcp/tools/core-routes.mcp-tools.ts +1 -3
  596. package/src/mcp/tools/core-screens.mcp-tools.ts +1 -3
  597. package/src/mcp/tools/core-sessions.mcp-tools.ts +0 -2
  598. package/src/mcp/tools/core-settings.mcp-tools.ts +1 -2
  599. package/src/mcp/tools/core-users.mcp-tools.ts +1 -1
  600. package/src/mcp/tools/core-webhooks.mcp-tools.ts +1 -2
  601. package/src/mcp/types/mcp-context.type.ts +15 -6
  602. package/src/mcp-chat/mcp-chat.service.ts +8 -0
  603. package/src/meeting/meeting-provider.registry.ts +121 -0
  604. package/src/meeting/meeting.constants.ts +74 -0
  605. package/src/menu/menu.service.spec.ts +89 -0
  606. package/src/menu/menu.service.ts +29 -11
  607. package/src/message-template/dto/update-message-template.dto.ts +22 -0
  608. package/src/message-template/message-template-admin.service.spec.ts +163 -0
  609. package/src/message-template/message-template-admin.service.ts +239 -0
  610. package/src/message-template/message-template.controller.ts +52 -0
  611. package/src/message-template/message-template.module.ts +21 -0
  612. package/src/message-template/message-template.registry.spec.ts +62 -0
  613. package/src/message-template/message-template.registry.ts +125 -0
  614. package/src/message-template/message-template.service.spec.ts +149 -0
  615. package/src/message-template/message-template.service.ts +149 -0
  616. package/src/notification/notification.constants.ts +10 -0
  617. package/src/notification/notification.module.ts +3 -0
  618. package/src/notification/notification.service.spec.ts +75 -1
  619. package/src/notification/notification.service.ts +39 -1
  620. package/src/oauth/oauth.controller.ts +0 -1
  621. package/src/oauth/oauth.errors.ts +7 -0
  622. package/src/oauth/oauth.module.ts +6 -1
  623. package/src/oauth/oauth.service.spec.ts +58 -7
  624. package/src/oauth/oauth.service.ts +71 -32
  625. package/src/oauth/providers/abstract.provider.spec.ts +192 -0
  626. package/src/oauth/providers/abstract.provider.ts +46 -14
  627. package/src/oauth/providers/github.provider.ts +57 -34
  628. package/src/oauth/providers/microsoft-entra-id.provider.ts +8 -1
  629. package/src/observability/monitored-cron.spec.ts +164 -31
  630. package/src/observability/monitored-cron.ts +154 -62
  631. package/src/profile/dto/change-password.dto.ts +25 -7
  632. package/src/profile/profile.service.spec.ts +97 -0
  633. package/src/profile/profile.service.ts +9 -3
  634. package/src/realtime/realtime-tick.coalescer.spec.ts +92 -0
  635. package/src/realtime/realtime-tick.coalescer.ts +60 -0
  636. package/src/realtime/realtime.service.spec.ts +33 -0
  637. package/src/realtime/realtime.service.ts +28 -2
  638. package/src/redis/redis-kv.service.ts +261 -0
  639. package/src/redis/redis-master.spec.ts +111 -0
  640. package/src/redis/redis-master.ts +86 -0
  641. package/src/redis/redis-pubsub.ts +27 -3
  642. package/src/redis/redis.module.ts +17 -0
  643. package/src/session/session.service.spec.ts +121 -42
  644. package/src/session/session.service.ts +279 -82
  645. package/src/setting/setting.service.ts +44 -3
  646. package/src/task/task.service.spec.ts +41 -0
  647. package/src/task/task.service.ts +53 -13
  648. package/src/token/token.service.spec.ts +90 -0
  649. package/src/token/token.service.ts +48 -2
  650. package/src/user/user-credential.util.ts +14 -5
  651. package/src/user/user.service.ts +2 -12
  652. package/src/user/user.sort.ts +25 -0
  653. package/src/utils/abbreviate-name.spec.ts +50 -0
  654. package/src/utils/abbreviate-name.ts +44 -0
  655. package/src/utils/date-range-query.dto.ts +56 -0
  656. package/src/utils/date-range.spec.ts +175 -0
  657. package/src/utils/date-range.ts +246 -0
  658. package/src/webhook-integration/webhook-utils.spec.ts +67 -0
  659. package/src/webhook-integration/webhook-utils.ts +26 -0
  660. package/src/whatsapp-sender/whatsapp-recipients.spec.ts +89 -0
  661. package/src/whatsapp-sender/whatsapp-recipients.ts +83 -0
  662. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +112 -0
  663. package/src/whatsapp-sender/whatsapp-sender.service.ts +58 -5
  664. package/hedhog/query/device_pairing_request.sql +0 -46
  665. package/hedhog/query/impersonation_grant.sql +0 -71
  666. package/hedhog/query/oauth_authorize_pkce.sql +0 -58
  667. package/hedhog/query/oauth_mobile_state_token.sql +0 -30
  668. package/hedhog/query/oauth_web_ref_token.sql +0 -25
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { SortableTableHead } from '@/components/entity-list';
3
4
  import {
4
5
  AlertDialog,
5
6
  AlertDialogAction,
@@ -45,6 +46,7 @@ import {
45
46
  TableRow,
46
47
  } from '@/components/ui/table';
47
48
  import { useDebounce } from '@/hooks/use-debounce';
49
+ import { useTableSort, type SortableColumn } from '@/hooks/use-table-sort';
48
50
  import { useFormDraft } from '@/hooks/use-form-draft';
49
51
  import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
50
52
  import { formatDateTime } from '@/lib/format-date';
@@ -129,6 +131,22 @@ type ComponentListResponse = {
129
131
 
130
132
  const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
131
133
 
134
+ /**
135
+ * Espelha `DASHBOARD_ITEM_SORT`
136
+ * (`libraries/core/src/dashboard/dashboard-item/dashboard-item.sort.ts`). Os
137
+ * nomes localizados exibidos (dashboard/componente) ficam de fora — a
138
+ * ordenação usa o slug da relação to-one.
139
+ */
140
+ type DashboardItemSortField = 'id' | 'dashboard_slug' | 'component_slug';
141
+
142
+ const SORT_COLUMNS: readonly SortableColumn<DashboardItemSortField>[] = [
143
+ { field: 'id', initialOrder: 'desc' },
144
+ 'dashboard_slug',
145
+ 'component_slug',
146
+ ];
147
+
148
+ const DEFAULT_SORT = { field: 'id', order: 'desc' } as const;
149
+
132
150
  export function ItemsTab() {
133
151
  const t = useTranslations('core.DashboardManagement');
134
152
  const { request, currentLocaleCode, getSettingValue } = useApp();
@@ -184,6 +202,12 @@ export function ItemsTab() {
184
202
  const searchQuery = '';
185
203
  const debouncedSearch = useDebounce(searchQuery, 500);
186
204
 
205
+ const sort = useTableSort<DashboardItemSortField>({
206
+ columns: SORT_COLUMNS,
207
+ defaultSort: DEFAULT_SORT,
208
+ onSortChange: () => setPage(1),
209
+ });
210
+
187
211
  const {
188
212
  data: paginatedData,
189
213
  isLoading,
@@ -195,11 +219,15 @@ export function ItemsTab() {
195
219
  pageSize,
196
220
  debouncedSearch,
197
221
  currentLocaleCode,
222
+ sort.sortField,
223
+ sort.sortOrder,
198
224
  ],
199
225
  queryFn: async () => {
200
226
  const params = new URLSearchParams();
201
227
  params.set('page', String(page));
202
228
  params.set('pageSize', String(pageSize));
229
+ params.set('sortField', sort.sortField);
230
+ params.set('sortOrder', sort.sortOrder);
203
231
  if (debouncedSearch) params.set('search', debouncedSearch);
204
232
 
205
233
  const response = await request<{ data: DashboardItem[]; total: number }>({
@@ -592,9 +620,15 @@ export function ItemsTab() {
592
620
  <Table>
593
621
  <TableHeader>
594
622
  <TableRow>
595
- <TableHead>{t('id')}</TableHead>
596
- <TableHead>{t('dashboard')}</TableHead>
597
- <TableHead>{t('component')}</TableHead>
623
+ <SortableTableHead label={t('id')} {...sort.getSortProps('id')} />
624
+ <SortableTableHead
625
+ label={t('dashboard')}
626
+ {...sort.getSortProps('dashboard_slug')}
627
+ />
628
+ <SortableTableHead
629
+ label={t('component')}
630
+ {...sort.getSortProps('component_slug')}
631
+ />
598
632
  <TableHead className="w-25">{t('actions')}</TableHead>
599
633
  </TableRow>
600
634
  </TableHeader>
@@ -635,6 +669,7 @@ export function ItemsTab() {
635
669
  size="icon"
636
670
  variant="ghost"
637
671
  onClick={() => handleDeleteClick(item.id)}
672
+ tooltip={t('delete')}
638
673
  >
639
674
  <IconTrash className="size-4" />
640
675
  </Button>
@@ -697,6 +732,7 @@ export function ItemsTab() {
697
732
  className="size-8"
698
733
  onClick={() => setPage(1)}
699
734
  disabled={page === 1}
735
+ tooltip={t('goToFirstPage')}
700
736
  >
701
737
  <IconChevronsLeft className="size-4" />
702
738
  </Button>
@@ -706,6 +742,7 @@ export function ItemsTab() {
706
742
  className="size-8"
707
743
  onClick={() => setPage((p) => Math.max(1, p - 1))}
708
744
  disabled={page === 1}
745
+ tooltip={t('goToPreviousPage')}
709
746
  >
710
747
  <IconChevronLeft className="size-4" />
711
748
  </Button>
@@ -715,6 +752,7 @@ export function ItemsTab() {
715
752
  className="size-8"
716
753
  onClick={() => setPage((p) => Math.min(totalPages, p + 1))}
717
754
  disabled={page === totalPages}
755
+ tooltip={t('goToNextPage')}
718
756
  >
719
757
  <IconChevronRight className="size-4" />
720
758
  </Button>
@@ -724,6 +762,7 @@ export function ItemsTab() {
724
762
  className="size-8"
725
763
  onClick={() => setPage(totalPages)}
726
764
  disabled={page === totalPages}
765
+ tooltip={t('goToLastPage')}
727
766
  >
728
767
  <IconChevronsRight className="size-4" />
729
768
  </Button>
@@ -10,6 +10,7 @@ import {
10
10
  } from '@/components/entity-list';
11
11
  import { Badge } from '@/components/ui/badge';
12
12
  import { Button } from '@/components/ui/button';
13
+ import { DateRangePicker } from '@/components/ui/date-range-picker';
13
14
  import { Card, CardContent } from '@/components/ui/card';
14
15
  import { KpiCardsGrid, type KpiCardItem } from '@/components/ui/kpi-cards-grid';
15
16
  import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
@@ -23,7 +24,7 @@ import {
23
24
  TableHeader,
24
25
  TableRow,
25
26
  } from '@/components/ui/table';
26
- import { useDebounce } from '@/hooks/use-debounce';
27
+ import { useListUrlState } from '@/hooks/use-list-url-state';
27
28
  import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
28
29
  import { formatDateTime } from '@/lib/format-date';
29
30
  import { useApp, useQuery } from '@hed-hog/next-app-provider';
@@ -73,11 +74,29 @@ export default function IncidentsPage() {
73
74
  const t = useTranslations('core.Incidents');
74
75
  const { request, getSettingValue } = useApp();
75
76
 
76
- const [searchTerm, setSearchTerm] = useState('');
77
- const [severity, setSeverity] = useState<Severity | 'all'>('all');
78
- const [source, setSource] = useState('all');
79
- const [status, setStatus] = useState<StatusFilter>('open');
80
- const [page, setPage] = useState(1);
77
+ // Busca, filtros e página vivem na URL: voltar do detalhe de um incidente
78
+ // recupera a mesma consulta, e o link pode ser passado adiante.
79
+ const urlState = useListUrlState({
80
+ filters: {
81
+ severity: { param: 'severity', defaultValue: 'all' },
82
+ source: { param: 'source', defaultValue: 'all' },
83
+ status: { param: 'status', defaultValue: 'open' },
84
+ from: { param: 'from', defaultValue: '' },
85
+ to: { param: 'to', defaultValue: '' },
86
+ },
87
+ });
88
+ const {
89
+ search: searchTerm,
90
+ setSearch: setSearchTerm,
91
+ debouncedSearch,
92
+ page,
93
+ setPage,
94
+ } = urlState;
95
+ const severity = urlState.filters.severity as Severity | 'all';
96
+ const source = urlState.filters.source;
97
+ const status = urlState.filters.status as StatusFilter;
98
+ const dateFrom = urlState.filters.from;
99
+ const dateTo = urlState.filters.to;
81
100
  const [pageSize, setPageSize] = usePersistedPageSize({
82
101
  storageKey: 'core-incidents',
83
102
  defaultValue: 12,
@@ -86,8 +105,6 @@ export default function IncidentsPage() {
86
105
  const [selected, setSelected] = useState<Incident | null>(null);
87
106
  const [isDetailOpen, setIsDetailOpen] = useState(false);
88
107
 
89
- const debouncedSearch = useDebounce(searchTerm);
90
-
91
108
  const { data: summary, refetch: refetchSummary } = useQuery<Summary>({
92
109
  queryKey: ['incident-summary'],
93
110
  queryFn: async () => {
@@ -102,7 +119,17 @@ export default function IncidentsPage() {
102
119
  isLoading,
103
120
  refetch,
104
121
  } = useQuery<PaginationResult<Incident>>({
105
- queryKey: ['incident', debouncedSearch, severity, source, status, page, pageSize],
122
+ queryKey: [
123
+ 'incident',
124
+ debouncedSearch,
125
+ severity,
126
+ source,
127
+ status,
128
+ dateFrom,
129
+ dateTo,
130
+ page,
131
+ pageSize,
132
+ ],
106
133
  queryFn: async () => {
107
134
  const response = await request({
108
135
  url: '/incident',
@@ -111,6 +138,8 @@ export default function IncidentsPage() {
111
138
  severity: severity !== 'all' ? severity : undefined,
112
139
  source: source !== 'all' ? source : undefined,
113
140
  status,
141
+ from: dateFrom || undefined,
142
+ to: dateTo || undefined,
114
143
  page,
115
144
  pageSize,
116
145
  },
@@ -184,10 +213,7 @@ export default function IncidentsPage() {
184
213
  id: 'status',
185
214
  type: 'select',
186
215
  value: status,
187
- onChange: (value) => {
188
- setStatus(value as StatusFilter);
189
- setPage(1);
190
- },
216
+ onChange: (value) => urlState.setFilter('status', value),
191
217
  placeholder: t('filterByStatus'),
192
218
  options: [
193
219
  { value: 'open', label: t('statusOpen') },
@@ -199,10 +225,7 @@ export default function IncidentsPage() {
199
225
  id: 'severity',
200
226
  type: 'select',
201
227
  value: severity,
202
- onChange: (value) => {
203
- setSeverity(value as Severity | 'all');
204
- setPage(1);
205
- },
228
+ onChange: (value) => urlState.setFilter('severity', value),
206
229
  placeholder: t('filterBySeverity'),
207
230
  options: [
208
231
  { value: 'all', label: t('severityAll') },
@@ -215,10 +238,7 @@ export default function IncidentsPage() {
215
238
  id: 'source',
216
239
  type: 'select',
217
240
  value: source,
218
- onChange: (value) => {
219
- setSource(value);
220
- setPage(1);
221
- },
241
+ onChange: (value) => urlState.setFilter('source', value),
222
242
  placeholder: t('filterBySource'),
223
243
  options: [
224
244
  { value: 'all', label: t('sourceAll') },
@@ -229,6 +249,7 @@ export default function IncidentsPage() {
229
249
  ],
230
250
  },
231
251
  ],
252
+ // eslint-disable-next-line react-hooks/exhaustive-deps
232
253
  [status, severity, source, summary, t],
233
254
  );
234
255
 
@@ -253,16 +274,24 @@ export default function IncidentsPage() {
253
274
 
254
275
  <KpiCardsGrid items={kpiCards} className="mb-1" />
255
276
 
256
- <SearchBar
257
- searchQuery={searchTerm}
258
- onSearchChange={(v) => {
259
- setSearchTerm(v);
260
- setPage(1);
261
- }}
262
- onSearch={() => setPage(1)}
263
- placeholder={t('searchPlaceholder')}
264
- controls={searchControls}
265
- />
277
+ <div className="flex flex-col gap-4 xl:flex-row xl:items-center">
278
+ <div className="flex-1">
279
+ <SearchBar
280
+ searchQuery={searchTerm}
281
+ onSearchChange={setSearchTerm}
282
+ onSearch={() => setPage(1)}
283
+ placeholder={t('searchPlaceholder')}
284
+ controls={searchControls}
285
+ />
286
+ </div>
287
+
288
+ <DateRangePicker
289
+ fromDate={dateFrom}
290
+ toDate={dateTo}
291
+ onFromDateChange={(value) => urlState.setFilter('from', value)}
292
+ onToDateChange={(value) => urlState.setFilter('to', value)}
293
+ />
294
+ </div>
266
295
 
267
296
  {!isLoading && incidents.length === 0 ? (
268
297
  <EmptyState
@@ -2,12 +2,15 @@
2
2
 
3
3
  import type React from 'react';
4
4
 
5
+ import type { SortableColumn } from '@/hooks/use-table-sort';
6
+
5
7
  import {
6
8
  EmptyState,
7
9
  Page,
8
10
  PageHeader,
9
11
  PaginationFooter,
10
12
  SearchBar,
13
+ SortableTableHead,
11
14
  } from '@/components/entity-list';
12
15
  import {
13
16
  AlertDialog,
@@ -132,6 +135,23 @@ type ImportValidationResponse = {
132
135
 
133
136
  // ─── Helpers ─────────────────────────────────────────────────────────────────
134
137
 
138
+ /**
139
+ * Espelha a allowlist de `integration_profile` no backend, conferida contra a
140
+ * API: um `sortField` inválido devolve 400 listando as colunas válidas.
141
+ *
142
+ * "Provedor" fica de fora de propósito. A coluna existe (`provider_id`), mas
143
+ * ordenaria pelo id do provedor e a tela mostra o nome dele — a seta prometeria
144
+ * ordem alfabética e entregaria outra coisa.
145
+ */
146
+ type ProfileSortField = 'name' | 'slug' | 'is_active' | 'updated_at';
147
+
148
+ const SORT_COLUMNS = [
149
+ 'name',
150
+ 'slug',
151
+ 'is_active',
152
+ { field: 'updated_at', initialOrder: 'desc' },
153
+ ] as const satisfies readonly SortableColumn<ProfileSortField>[];
154
+
135
155
  function getLocaleName(locales: LocaleEntry[], code: string): string {
136
156
  return (
137
157
  locales.find((l) => l.locale.code === code)?.name ?? locales[0]?.name ?? ''
@@ -180,7 +200,13 @@ function TypeTab({
180
200
  search,
181
201
  setSearch,
182
202
  isLoading,
183
- } = usePagination({ url: `/integration-profile?typeId=${typeId}` });
203
+ sort,
204
+ } = usePagination<ProfileSortField>({
205
+ url: `/integration-profile?typeId=${typeId}`,
206
+ orderField: 'name',
207
+ orderDirection: 'asc',
208
+ sortColumns: SORT_COLUMNS,
209
+ });
184
210
 
185
211
  useEffect(() => {
186
212
  if (refreshKey > 0) refetch();
@@ -277,8 +303,14 @@ function TypeTab({
277
303
  aria-label={t('selectAllVisible')}
278
304
  />
279
305
  </TableHead>
280
- <TableHead>{t('tableName')}</TableHead>
281
- <TableHead>{t('tableSlug')}</TableHead>
306
+ <SortableTableHead
307
+ label={t('tableName')}
308
+ {...sort.getSortProps('name')}
309
+ />
310
+ <SortableTableHead
311
+ label={t('tableSlug')}
312
+ {...sort.getSortProps('slug')}
313
+ />
282
314
  <TableHead>{t('tableProvider')}</TableHead>
283
315
  <TableHead>
284
316
  {currentLocaleCode.startsWith('pt')
@@ -286,9 +318,15 @@ function TypeTab({
286
318
  : 'Configuration'}
287
319
  </TableHead>
288
320
  <TableHead>{t('tableValidation')}</TableHead>
289
- <TableHead>{t('tableStatus')}</TableHead>
321
+ <SortableTableHead
322
+ label={t('tableStatus')}
323
+ {...sort.getSortProps('is_active')}
324
+ />
290
325
  <TableHead className="text-right">{t('tableUses')}</TableHead>
291
- <TableHead>{t('tableUpdated')}</TableHead>
326
+ <SortableTableHead
327
+ label={t('tableUpdated')}
328
+ {...sort.getSortProps('updated_at')}
329
+ />
292
330
  <TableHead className="text-right">
293
331
  {t('tableActions')}
294
332
  </TableHead>
@@ -412,6 +450,7 @@ function TypeTab({
412
450
  e.stopPropagation();
413
451
  onEdit(profile);
414
452
  }}
453
+ tooltip={t('editProfile')}
415
454
  >
416
455
  <Pencil className="h-4 w-4" />
417
456
  </Button>
@@ -422,6 +461,7 @@ function TypeTab({
422
461
  e.stopPropagation();
423
462
  onDelete(profile.id);
424
463
  }}
464
+ tooltip={t('delete')}
425
465
  >
426
466
  <Trash2 className="h-4 w-4 text-destructive" />
427
467
  </Button>
@@ -7,7 +7,9 @@ import {
7
7
  PageHeader,
8
8
  PaginationFooter,
9
9
  SearchBar,
10
+ SortableTableHead,
10
11
  } from '@/components/entity-list';
12
+ import type { SortableColumn } from '@/hooks/use-table-sort';
11
13
  import {
12
14
  AlertDialog,
13
15
  AlertDialogAction,
@@ -320,6 +322,37 @@ const defaultMailProfileEditForm = {
320
322
  ses_region: '',
321
323
  };
322
324
 
325
+ /**
326
+ * Allowlists conferidas contra a API — um `sortField` invalido responde 400
327
+ * listando as colunas validas — e cada campo verificado reordenando asc x desc
328
+ * antes de virar cabecalho clicavel.
329
+ *
330
+ * Nas entradas, "URL publica", "Seguranca" e "Acoes" ficam de fora: a primeira
331
+ * ordenaria pelo `public_uuid`, as outras duas sao composicoes de varias
332
+ * colunas e uma contagem de relacao. Nenhuma delas ordena pelo que mostra.
333
+ */
334
+ type CatalogSortField =
335
+ | 'name'
336
+ | 'module'
337
+ | 'description'
338
+ | 'status'
339
+ | 'updated_at';
340
+
341
+ const CATALOG_SORT_COLUMNS = [
342
+ 'name',
343
+ 'module',
344
+ 'description',
345
+ 'status',
346
+ { field: 'updated_at', initialOrder: 'desc' },
347
+ ] as const satisfies readonly SortableColumn<CatalogSortField>[];
348
+
349
+ type IncomingSortField = 'name' | 'status';
350
+
351
+ const INCOMING_SORT_COLUMNS = [
352
+ 'name',
353
+ 'status',
354
+ ] as const satisfies readonly SortableColumn<IncomingSortField>[];
355
+
323
356
  function trimString(value: unknown) {
324
357
  return String(value ?? '').trim();
325
358
  }
@@ -543,13 +576,19 @@ export default function IntegrationsWebhooksPage() {
543
576
  }
544
577
  }, [generalSettings]);
545
578
 
546
- const catalog = usePagination({
579
+ const catalog = usePagination<CatalogSortField>({
547
580
  url: '/integration-event-catalog',
548
581
  paginationOptions: { pageSizeOptions },
582
+ orderField: 'name',
583
+ orderDirection: 'asc',
584
+ sortColumns: CATALOG_SORT_COLUMNS,
549
585
  });
550
- const incoming = usePagination({
586
+ const incoming = usePagination<IncomingSortField>({
551
587
  url: '/webhook-integration',
552
588
  paginationOptions: { pageSizeOptions },
589
+ orderField: 'name',
590
+ orderDirection: 'asc',
591
+ sortColumns: INCOMING_SORT_COLUMNS,
553
592
  });
554
593
  const eventWebhooks = usePagination({
555
594
  url: '/event-webhook',
@@ -1750,11 +1789,26 @@ export default function IntegrationsWebhooksPage() {
1750
1789
  <Table>
1751
1790
  <TableHeader>
1752
1791
  <TableRow>
1753
- <TableHead>{t('eventName')}</TableHead>
1754
- <TableHead>{t('module')}</TableHead>
1755
- <TableHead>{t('descriptionColumn')}</TableHead>
1756
- <TableHead>{t('status')}</TableHead>
1757
- <TableHead>{t('updatedAt')}</TableHead>
1792
+ <SortableTableHead
1793
+ label={t('eventName')}
1794
+ {...catalog.sort.getSortProps('name')}
1795
+ />
1796
+ <SortableTableHead
1797
+ label={t('module')}
1798
+ {...catalog.sort.getSortProps('module')}
1799
+ />
1800
+ <SortableTableHead
1801
+ label={t('descriptionColumn')}
1802
+ {...catalog.sort.getSortProps('description')}
1803
+ />
1804
+ <SortableTableHead
1805
+ label={t('status')}
1806
+ {...catalog.sort.getSortProps('status')}
1807
+ />
1808
+ <SortableTableHead
1809
+ label={t('updatedAt')}
1810
+ {...catalog.sort.getSortProps('updated_at')}
1811
+ />
1758
1812
  <TableHead className="text-right">{t('actions')}</TableHead>
1759
1813
  </TableRow>
1760
1814
  </TableHeader>
@@ -1788,6 +1842,7 @@ export default function IntegrationsWebhooksPage() {
1788
1842
  variant="ghost"
1789
1843
  size="icon"
1790
1844
  onClick={() => openCatalogEdit(item)}
1845
+ tooltip={t('editEvent')}
1791
1846
  >
1792
1847
  <Pencil className="h-4 w-4" />
1793
1848
  </Button>
@@ -1801,6 +1856,7 @@ export default function IntegrationsWebhooksPage() {
1801
1856
  name: item.name,
1802
1857
  })
1803
1858
  }
1859
+ tooltip={t('delete')}
1804
1860
  >
1805
1861
  <Trash2 className="h-4 w-4 text-destructive" />
1806
1862
  </Button>
@@ -1848,11 +1904,17 @@ export default function IntegrationsWebhooksPage() {
1848
1904
  <Table>
1849
1905
  <TableHeader>
1850
1906
  <TableRow>
1851
- <TableHead>{t('name')}</TableHead>
1907
+ <SortableTableHead
1908
+ label={t('name')}
1909
+ {...incoming.sort.getSortProps('name')}
1910
+ />
1852
1911
  <TableHead>{t('publicUrl')}</TableHead>
1853
1912
  <TableHead>{t('security')}</TableHead>
1854
1913
  <TableHead>{t('actionsCount')}</TableHead>
1855
- <TableHead>{t('status')}</TableHead>
1914
+ <SortableTableHead
1915
+ label={t('status')}
1916
+ {...incoming.sort.getSortProps('status')}
1917
+ />
1856
1918
  <TableHead className="text-right">{t('actions')}</TableHead>
1857
1919
  </TableRow>
1858
1920
  </TableHeader>
@@ -1899,6 +1961,7 @@ export default function IntegrationsWebhooksPage() {
1899
1961
  variant="ghost"
1900
1962
  size="icon"
1901
1963
  onClick={() => openIncomingEdit(item)}
1964
+ tooltip={t('editIncoming')}
1902
1965
  >
1903
1966
  <Pencil className="h-4 w-4" />
1904
1967
  </Button>
@@ -1906,6 +1969,7 @@ export default function IntegrationsWebhooksPage() {
1906
1969
  variant="ghost"
1907
1970
  size="icon"
1908
1971
  onClick={() => duplicateIncoming(item)}
1972
+ tooltip={t('duplicate')}
1909
1973
  >
1910
1974
  <Copy className="h-4 w-4" />
1911
1975
  </Button>
@@ -1919,6 +1983,7 @@ export default function IntegrationsWebhooksPage() {
1919
1983
  name: item.name,
1920
1984
  })
1921
1985
  }
1986
+ tooltip={t('delete')}
1922
1987
  >
1923
1988
  <Trash2 className="h-4 w-4 text-destructive" />
1924
1989
  </Button>
@@ -2015,6 +2080,7 @@ export default function IntegrationsWebhooksPage() {
2015
2080
  variant="ghost"
2016
2081
  size="icon"
2017
2082
  onClick={() => openEventWebhookEdit(item)}
2083
+ tooltip={t('editEventWebhook')}
2018
2084
  >
2019
2085
  <Pencil className="h-4 w-4" />
2020
2086
  </Button>
@@ -2022,6 +2088,7 @@ export default function IntegrationsWebhooksPage() {
2022
2088
  variant="ghost"
2023
2089
  size="icon"
2024
2090
  onClick={() => duplicateEventWebhook(item)}
2091
+ tooltip={t('duplicate')}
2025
2092
  >
2026
2093
  <Copy className="h-4 w-4" />
2027
2094
  </Button>
@@ -2035,6 +2102,7 @@ export default function IntegrationsWebhooksPage() {
2035
2102
  name: item.name,
2036
2103
  })
2037
2104
  }
2105
+ tooltip={t('delete')}
2038
2106
  >
2039
2107
  <Trash2 className="h-4 w-4 text-destructive" />
2040
2108
  </Button>
@@ -2323,6 +2391,7 @@ export default function IntegrationsWebhooksPage() {
2323
2391
  variant="ghost"
2324
2392
  size="icon"
2325
2393
  onClick={() => removeAllowedIp(index)}
2394
+ tooltip={t('removeIp')}
2326
2395
  >
2327
2396
  <Trash2 className="h-4 w-4" />
2328
2397
  </Button>
@@ -2836,8 +2905,7 @@ export default function IntegrationsWebhooksPage() {
2836
2905
  size="icon"
2837
2906
  className="h-10 w-10 shrink-0"
2838
2907
  disabled={!actionForm.integration_profile_id}
2839
- aria-label="Editar perfil de e-mail selecionado"
2840
- title="Editar perfil de e-mail selecionado"
2908
+ tooltip={t('editSelectedMailProfile')}
2841
2909
  onClick={() => {
2842
2910
  if (actionForm.integration_profile_id) {
2843
2911
  void openMailProfileEditor(
@@ -2925,8 +2993,7 @@ export default function IntegrationsWebhooksPage() {
2925
2993
  size="icon"
2926
2994
  className="h-10 w-10 shrink-0"
2927
2995
  disabled={!actionForm.mail_id}
2928
- aria-label="Editar template de e-mail selecionado"
2929
- title="Editar template de e-mail selecionado"
2996
+ tooltip={t('editSelectedMailTemplate')}
2930
2997
  onClick={() => {
2931
2998
  if (actionForm.mail_id) {
2932
2999
  void openMailTemplateEditor(actionForm.mail_id);
@@ -4306,10 +4373,20 @@ function SortableIncomingActionRow({
4306
4373
  </TableCell>
4307
4374
  <TableCell>{action.order}</TableCell>
4308
4375
  <TableCell className="text-right">
4309
- <Button variant="ghost" size="icon" onClick={() => onEdit(action)}>
4376
+ <Button
4377
+ variant="ghost"
4378
+ size="icon"
4379
+ onClick={() => onEdit(action)}
4380
+ tooltip={t('editAction')}
4381
+ >
4310
4382
  <Pencil className="h-4 w-4" />
4311
4383
  </Button>
4312
- <Button variant="ghost" size="icon" onClick={onDelete}>
4384
+ <Button
4385
+ variant="ghost"
4386
+ size="icon"
4387
+ onClick={onDelete}
4388
+ tooltip={t('deleteAction')}
4389
+ >
4313
4390
  <Trash2 className="h-4 w-4 text-destructive" />
4314
4391
  </Button>
4315
4392
  </TableCell>