@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
@@ -165,8 +165,8 @@
165
165
  en: Batch Limit
166
166
  pt: Limite de Lote
167
167
  description:
168
- en: Maximum number of records to delete per cleanup task execution. Smaller values prevent long table locks but increase cleanup duration
169
- pt: Número máximo de registros a deletar por execução de tarefa de limpeza. Valores menores evitam locks prolongados mas aumentam a duração da limpeza
168
+ en: Maximum number of records to delete per batch. Cleanup repeats batches until the backlog is drained, so smaller values prevent long table locks but increase cleanup duration
169
+ pt: Número máximo de registros a deletar por lote. A limpeza repete os lotes até drenar o acúmulo, então valores menores evitam locks prolongados mas aumentam a duração da limpeza
170
170
  value: 20000
171
171
  user_override: false
172
172
  subgroup_id:
@@ -273,6 +273,10 @@
273
273
  - slug: mail-integration-profile-id
274
274
  type: string
275
275
  component: entity-picker
276
+ entity_filter:
277
+ typeSlug: email
278
+ excludeProviders:
279
+ - imap
276
280
  name:
277
281
  en: Mail Profile
278
282
  pt: Perfil de Email
@@ -323,6 +327,8 @@
323
327
  - slug: ai-openai-profile-id
324
328
  type: string
325
329
  component: entity-picker
330
+ entity_filter:
331
+ typeSlug: ai
326
332
  name:
327
333
  en: OpenAI Profile
328
334
  pt: Perfil OpenAI
@@ -337,6 +343,8 @@
337
343
  - slug: ai-gemini-profile-id
338
344
  type: string
339
345
  component: entity-picker
346
+ entity_filter:
347
+ typeSlug: ai
340
348
  name:
341
349
  en: Gemini Profile
342
350
  pt: Perfil Gemini
@@ -351,6 +359,8 @@
351
359
  - slug: ai-deepseek-profile-id
352
360
  type: string
353
361
  component: entity-picker
362
+ entity_filter:
363
+ typeSlug: ai
354
364
  name:
355
365
  en: DeepSeek Profile
356
366
  pt: Perfil DeepSeek
@@ -362,6 +372,20 @@
362
372
  subgroup_id:
363
373
  where:
364
374
  slug: ai-configuration
375
+ - slug: mcp-connector-denied-tools
376
+ type: array
377
+ component: input-tags
378
+ name:
379
+ en: Tools denied to connectors
380
+ pt: Ferramentas negadas ao conector
381
+ description:
382
+ en: Tools an external OAuth client (such as Claude) can never call, even when the person's role allows it. One per tag, by tool name.
383
+ pt: Ferramentas que um cliente OAuth externo (como o Claude) nunca pode chamar, mesmo que o papel da pessoa permita. Uma por tag, pelo nome da tool.
384
+ value: '["core.roles.create", "core.roles.delete", "core.roles.menus.update", "core.roles.routes.update", "core.roles.screens.update", "core.roles.update", "core.roles.users.update", "core.routes.create", "core.routes.delete", "core.routes.roles.update", "core.routes.screens.update", "core.routes.update", "core.screens.create", "core.screens.delete", "core.screens.roles.update", "core.screens.routes.update", "core.screens.update", "core.sessions.revoke", "core.sessions.revoke-all", "core.sessions.revoke-all-other", "core.settings.delete", "core.settings.set", "core.settings.set-many", "core.settings.update-from-slug", "core.users.assign-role", "core.users.create", "core.users.delete", "core.users.remove-role", "core.users.reset-password", "core.users.update", "core.users.verify-identifier"]'
385
+ user_override: false
386
+ subgroup_id:
387
+ where:
388
+ slug: ai-configuration
365
389
  - slug: mcp-enabled
366
390
  type: boolean
367
391
  component: switch
@@ -379,6 +403,8 @@
379
403
  - slug: mcp-ai-profile-id
380
404
  type: string
381
405
  component: entity-picker
406
+ entity_filter:
407
+ typeSlug: ai
382
408
  name:
383
409
  en: AI Profile
384
410
  pt: Perfil de IA
@@ -407,6 +433,8 @@
407
433
  - slug: richtext-ai-profile-id
408
434
  type: string
409
435
  component: entity-picker
436
+ entity_filter:
437
+ typeSlug: ai
410
438
  name:
411
439
  en: AI Profile
412
440
  pt: Perfil de IA
@@ -890,6 +918,9 @@
890
918
  - slug: oauth-google-profile-id
891
919
  type: string
892
920
  component: entity-picker
921
+ entity_filter:
922
+ typeSlug: oauth
923
+ providerSlug: google-oauth
893
924
  name:
894
925
  en: Google OAuth Profile
895
926
  pt: Perfil OAuth Google
@@ -940,6 +971,9 @@
940
971
  - slug: oauth-facebook-profile-id
941
972
  type: string
942
973
  component: entity-picker
974
+ entity_filter:
975
+ typeSlug: oauth
976
+ providerSlug: facebook-oauth
943
977
  name:
944
978
  en: Facebook OAuth Profile
945
979
  pt: Perfil OAuth Facebook
@@ -994,6 +1028,9 @@
994
1028
  - slug: oauth-github-profile-id
995
1029
  type: string
996
1030
  component: entity-picker
1031
+ entity_filter:
1032
+ typeSlug: oauth
1033
+ providerSlug: github-oauth
997
1034
  name:
998
1035
  en: GitHub OAuth Profile
999
1036
  pt: Perfil OAuth GitHub
@@ -1042,6 +1079,9 @@
1042
1079
  - slug: oauth-microsoft-profile-id
1043
1080
  type: string
1044
1081
  component: entity-picker
1082
+ entity_filter:
1083
+ typeSlug: oauth
1084
+ providerSlug: microsoft-oauth
1045
1085
  name:
1046
1086
  en: Microsoft OAuth Profile
1047
1087
  pt: Perfil OAuth Microsoft
@@ -1096,6 +1136,9 @@
1096
1136
  - slug: oauth-microsoft-entra-id-profile-id
1097
1137
  type: string
1098
1138
  component: entity-picker
1139
+ entity_filter:
1140
+ typeSlug: oauth
1141
+ providerSlug: microsoft-entra-id-oauth
1099
1142
  name:
1100
1143
  en: Microsoft Entra ID OAuth Profile
1101
1144
  pt: Perfil OAuth Microsoft Entra ID
@@ -1164,6 +1207,12 @@
1164
1207
  order: 13
1165
1208
  - value: OnlineMeetingRecording.Read.All
1166
1209
  order: 14
1210
+ # Necessario para IMPORTAR o anexo do chat da reuniao: o download usa
1211
+ # o token delegado da conta que le o chat, e sem escopo de arquivo o
1212
+ # /shares/{id}/driveItem/content responde 403 — o material vira link
1213
+ # para o arquivo original em vez do arquivo em si.
1214
+ - value: Files.Read.All
1215
+ order: 15
1167
1216
  subgroup_id:
1168
1217
  where:
1169
1218
  slug: microsoft-entra-id
@@ -1295,9 +1344,40 @@
1295
1344
  subgroup_id:
1296
1345
  where:
1297
1346
  slug: microsoft-entra-id
1347
+ - slug: microsoft-meeting-chat-capture-enabled
1348
+ type: boolean
1349
+ component: switch
1350
+ name:
1351
+ en: Capture meeting chat
1352
+ pt: Capturar o chat da reunião
1353
+ description:
1354
+ en: 'After a managed meeting ends, read its Teams chat so the source module can turn what the host shared into materials. Off by default: it reads what people wrote and needs a delegated account with Chat.Read.'
1355
+ pt: 'Quando uma reunião gerenciada termina, ler o chat dela no Teams para o módulo de origem transformar o que o instrutor compartilhou em materiais. Desligado por padrão: lê o que as pessoas escreveram e exige conta delegada com Chat.Read.'
1356
+ value: 'false'
1357
+ user_override: false
1358
+ subgroup_id:
1359
+ where:
1360
+ slug: microsoft-entra-id
1361
+ - slug: microsoft-meeting-chat-delegated-upn
1362
+ type: string
1363
+ component: input-text
1364
+ name:
1365
+ en: Account that reads the chat
1366
+ pt: Conta que lê o chat
1367
+ description:
1368
+ en: UPN of the account whose delegated token reads meeting chats. Empty uses the meeting service account, which organizes every meeting and is therefore in every meeting chat. It must be connected under My account, with Chat.Read granted.
1369
+ pt: UPN da conta cujo token delegado lê os chats das reuniões. Vazio usa a conta de serviço das reuniões, que organiza todas e por isso participa de todos os chats. Ela precisa estar conectada em Minha conta, com Chat.Read concedido.
1370
+ value: ''
1371
+ user_override: false
1372
+ subgroup_id:
1373
+ where:
1374
+ slug: microsoft-entra-id
1298
1375
  - slug: oauth-apple-profile-id
1299
1376
  type: string
1300
1377
  component: entity-picker
1378
+ entity_filter:
1379
+ typeSlug: oauth
1380
+ providerSlug: apple-oauth
1301
1381
  name:
1302
1382
  en: Apple OAuth Profile
1303
1383
  pt: Perfil OAuth Apple
@@ -1346,6 +1426,9 @@
1346
1426
  - slug: oauth-linkedin-profile-id
1347
1427
  type: string
1348
1428
  component: entity-picker
1429
+ entity_filter:
1430
+ typeSlug: oauth
1431
+ providerSlug: linkedin-oauth
1349
1432
  name:
1350
1433
  en: LinkedIn OAuth Profile
1351
1434
  pt: Perfil OAuth LinkedIn
@@ -2070,6 +2153,8 @@
2070
2153
  - slug: file-storage-profile-id
2071
2154
  type: string
2072
2155
  component: entity-picker
2156
+ entity_filter:
2157
+ typeSlug: storage
2073
2158
  name:
2074
2159
  en: Storage Profile
2075
2160
  pt: Perfil de Armazenamento
@@ -2088,7 +2173,7 @@
2088
2173
  description:
2089
2174
  en: MIME types accepted for file uploads (e.g., images, documents, videos)
2090
2175
  pt: Tipos MIME aceitos para upload de arquivos (por exemplo, imagens, documentos, vídeos)
2091
- value: '["application/pdf","image/jpeg","image/png","image/gif"]'
2176
+ value: '["application/pdf","image/jpeg","image/png","image/gif","text/html"]'
2092
2177
  component: checkbox
2093
2178
  relations:
2094
2179
  setting_list:
@@ -2134,6 +2219,8 @@
2134
2219
  order: 16
2135
2220
  - value: audio/flac
2136
2221
  order: 17
2222
+ - value: text/html
2223
+ order: 18
2137
2224
  subgroup_id:
2138
2225
  where:
2139
2226
  slug: storage-general
@@ -2149,6 +2236,53 @@
2149
2236
  subgroup_id:
2150
2237
  where:
2151
2238
  slug: storage-general
2239
+ # Validade da URL assinada de upload (PUT /file/upload/:token). Curta de
2240
+ # proposito: o token e a unica credencial do endpoint publico, e o cliente
2241
+ # sobe o arquivo logo depois de pedir a URL.
2242
+ - slug: storage-upload-url-ttl
2243
+ type: number
2244
+ name:
2245
+ en: Upload URL Lifetime (seconds)
2246
+ pt: Validade da URL de Upload (segundos)
2247
+ description:
2248
+ en: How long a signed upload URL stays valid. The token is single use and scoped to one upload ticket.
2249
+ pt: Por quanto tempo uma URL assinada de upload continua valida. O token e de uso unico e vale para um unico ticket de upload.
2250
+ value: 900
2251
+ component: input-number
2252
+ subgroup_id:
2253
+ where:
2254
+ slug: storage-general
2255
+ # Tamanho de cada parte no upload em partes pelo MCP. O teto real e o limite
2256
+ # de saida do modelo: base64 infla ~33%, entao 64 KiB viram ~87 mil
2257
+ # caracteres por chamada.
2258
+ - slug: mcp-upload-chunk-bytes
2259
+ type: number
2260
+ name:
2261
+ en: MCP Upload Chunk Size (bytes)
2262
+ pt: Tamanho da Parte no Upload MCP (bytes)
2263
+ description:
2264
+ en: Chunk size for core.files.upload.append. Larger chunks mean fewer calls but risk overflowing the model output limit once base64-encoded.
2265
+ pt: Tamanho de cada parte em core.files.upload.append. Partes maiores significam menos chamadas, mas arriscam estourar o limite de saida do modelo depois de codificadas em base64.
2266
+ value: 65536
2267
+ component: input-number
2268
+ subgroup_id:
2269
+ where:
2270
+ slug: storage-general
2271
+ # Allowlist opcional para a modalidade fileUrl. Vazia = qualquer host
2272
+ # publico (enderecos privados sao recusados de qualquer forma).
2273
+ - slug: mcp-file-url-allowed-hosts
2274
+ type: string
2275
+ name:
2276
+ en: Allowed Hosts for File URLs
2277
+ pt: Hosts Permitidos para URL de Arquivo
2278
+ description:
2279
+ en: Comma-separated hostnames the server may download from when a tool receives fileUrl. Leave empty to allow any public host. Private, loopback, link-local and metadata addresses are always rejected.
2280
+ pt: Nomes de host separados por virgula dos quais o servidor pode baixar quando uma tool recebe fileUrl. Deixe vazio para permitir qualquer host publico. Enderecos privados, loopback, link-local e de metadados sao sempre recusados.
2281
+ value: ''
2282
+ component: input-text
2283
+ subgroup_id:
2284
+ where:
2285
+ slug: storage-general
2152
2286
  - slug: image-compression-enabled
2153
2287
  type: boolean
2154
2288
  component: switch
@@ -31,7 +31,8 @@ import {
31
31
  TableRow,
32
32
  } from '@/components/ui/table';
33
33
  import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group';
34
- import { useDebounce } from '@/hooks/use-debounce';
34
+ import { DateRangePicker } from '@/components/ui/date-range-picker';
35
+ import { useListUrlState } from '@/hooks/use-list-url-state';
35
36
  import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
36
37
  import { formatDateTime } from '@/lib/format-date';
37
38
  import { getPhotoUrl } from '@/lib/get-photo-url';
@@ -124,15 +125,33 @@ export default function AccessLogPage() {
124
125
  const [selectedUserId, setSelectedUserId] = useState<number | null>(null);
125
126
  const [isUserSheetOpen, setIsUserSheetOpen] = useState(false);
126
127
 
127
- const [searchTerm, setSearchTerm] = useState('');
128
- const [filterUserId, setFilterUserId] = useState<number | null>(null);
129
- const [typeFilter, setTypeFilter] = useState<TypeFilter>('all');
130
- const [simulatedFilter, setSimulatedFilter] = useState<SimulatedFilter>('all');
131
- const [createdAtFrom, setCreatedAtFrom] = useState('');
132
- const [createdAtTo, setCreatedAtTo] = useState('');
128
+ // Busca, filtros e página vivem na URL: voltar do detalhe de um log
129
+ // recupera a mesma consulta, e o link pode ser passado adiante.
130
+ const urlState = useListUrlState({
131
+ filters: {
132
+ userId: { param: 'userId', defaultValue: '' },
133
+ type: { param: 'type', defaultValue: 'all' },
134
+ simulated: { param: 'simulated', defaultValue: 'all' },
135
+ createdAtFrom: { param: 'createdAtFrom', defaultValue: '' },
136
+ createdAtTo: { param: 'createdAtTo', defaultValue: '' },
137
+ },
138
+ });
139
+ const {
140
+ search: searchTerm,
141
+ setSearch: setSearchTerm,
142
+ debouncedSearch,
143
+ page,
144
+ setPage,
145
+ } = urlState;
146
+ const filterUserId = urlState.filters.userId
147
+ ? Number(urlState.filters.userId)
148
+ : null;
149
+ const typeFilter = urlState.filters.type as TypeFilter;
150
+ const simulatedFilter = urlState.filters.simulated as SimulatedFilter;
151
+ const createdAtFrom = urlState.filters.createdAtFrom;
152
+ const createdAtTo = urlState.filters.createdAtTo;
133
153
  const [viewMode, setViewMode] = useState<ViewMode>('table');
134
154
  const [isLive, setIsLive] = useState(true);
135
- const [page, setPage] = useState(1);
136
155
  const { data: generalSettings } = useQuery<{
137
156
  data: Array<{ slug: string; value: string }>;
138
157
  }>({
@@ -169,8 +188,6 @@ export default function AccessLogPage() {
169
188
  allowedValues: pageSizeOptions,
170
189
  });
171
190
 
172
- const debouncedSearch = useDebounce(searchTerm);
173
-
174
191
  const {
175
192
  data: logsResult,
176
193
  isLoading,
@@ -218,12 +235,11 @@ export default function AccessLogPage() {
218
235
 
219
236
  const clearFilters = () => {
220
237
  setSearchTerm('');
221
- setFilterUserId(null);
222
- setTypeFilter('all');
223
- setSimulatedFilter('all');
224
- setCreatedAtFrom('');
225
- setCreatedAtTo('');
226
- setPage(1);
238
+ urlState.setFilter('userId', '');
239
+ urlState.setFilter('type', 'all');
240
+ urlState.setFilter('simulated', 'all');
241
+ urlState.setFilter('createdAtFrom', '');
242
+ urlState.setFilter('createdAtTo', '');
227
243
  };
228
244
 
229
245
  const searchControls = useMemo<SearchBarControl[]>(
@@ -232,10 +248,7 @@ export default function AccessLogPage() {
232
248
  id: 'type',
233
249
  type: 'select',
234
250
  value: typeFilter,
235
- onChange: (value) => {
236
- setTypeFilter(value as TypeFilter);
237
- setPage(1);
238
- },
251
+ onChange: (value) => urlState.setFilter('type', value),
239
252
  placeholder: t('filterByType'),
240
253
  options: [
241
254
  { value: 'all', label: t('typeAll') },
@@ -247,10 +260,7 @@ export default function AccessLogPage() {
247
260
  id: 'simulated',
248
261
  type: 'select',
249
262
  value: simulatedFilter,
250
- onChange: (value) => {
251
- setSimulatedFilter(value as SimulatedFilter);
252
- setPage(1);
253
- },
263
+ onChange: (value) => urlState.setFilter('simulated', value),
254
264
  placeholder: t('filterBySimulated'),
255
265
  options: [
256
266
  { value: 'all', label: t('simulatedAll') },
@@ -258,28 +268,9 @@ export default function AccessLogPage() {
258
268
  { value: 'exclude', label: t('simulatedExclude') },
259
269
  ],
260
270
  },
261
- {
262
- id: 'created-at-from',
263
- type: 'date',
264
- value: createdAtFrom,
265
- onChange: (value) => {
266
- setCreatedAtFrom(value);
267
- setPage(1);
268
- },
269
- max: createdAtTo || undefined,
270
- },
271
- {
272
- id: 'created-at-to',
273
- type: 'date',
274
- value: createdAtTo,
275
- onChange: (value) => {
276
- setCreatedAtTo(value);
277
- setPage(1);
278
- },
279
- min: createdAtFrom || undefined,
280
- },
281
271
  ],
282
- [createdAtFrom, createdAtTo, typeFilter, simulatedFilter, t]
272
+ // eslint-disable-next-line react-hooks/exhaustive-deps
273
+ [typeFilter, simulatedFilter, t]
283
274
  );
284
275
 
285
276
  const kpiCards = useMemo<KpiCardItem[]>(() => {
@@ -441,10 +432,7 @@ export default function AccessLogPage() {
441
432
  <div className="flex-1">
442
433
  <SearchBar
443
434
  searchQuery={searchTerm}
444
- onSearchChange={(v) => {
445
- setSearchTerm(v);
446
- setPage(1);
447
- }}
435
+ onSearchChange={setSearchTerm}
448
436
  onSearch={() => setPage(1)}
449
437
  placeholder={t('searchPlaceholder')}
450
438
  controls={searchControls}
@@ -452,6 +440,15 @@ export default function AccessLogPage() {
452
440
  </div>
453
441
 
454
442
  <div className="flex flex-col gap-2 sm:flex-row sm:flex-wrap xl:justify-end">
443
+ <DateRangePicker
444
+ fromDate={createdAtFrom}
445
+ toDate={createdAtTo}
446
+ onFromDateChange={(value) =>
447
+ urlState.setFilter('createdAtFrom', value)
448
+ }
449
+ onToDateChange={(value) => urlState.setFilter('createdAtTo', value)}
450
+ />
451
+
455
452
  <EntityPicker<UserPickerOption>
456
453
  placeholder={t('userPickerPlaceholder')}
457
454
  emptySelectionLabel={t('userPickerPlaceholder')}
@@ -459,10 +456,7 @@ export default function AccessLogPage() {
459
456
  clearable
460
457
  allowEmptySelection
461
458
  value={filterUserId !== null ? String(filterUserId) : ''}
462
- onChange={(val) => {
463
- setFilterUserId(val ? Number(val) : null);
464
- setPage(1);
465
- }}
459
+ onChange={(val) => urlState.setFilter('userId', val ? String(val) : '')}
466
460
  getOptionValue={(o) => o.id}
467
461
  getOptionLabel={(o) => o.name}
468
462
  loadOptions={async ({ page, pageSize, search }) => {
@@ -33,7 +33,7 @@ import { formatDate, formatDateTime } from '@/lib/format-date';
33
33
  import { parseBrowser, parseDeviceType, parseOS } from '@/lib/session';
34
34
  import { UserSession } from '@hed-hog/api-types';
35
35
  import { useApp, useQuery } from '@hed-hog/next-app-provider';
36
- import { Calendar, Clock, LogOut, MapPin, VenetianMask } from 'lucide-react';
36
+ import { Calendar, Clock, LogOut, MapPin, Plug, VenetianMask } from 'lucide-react';
37
37
  import { useTranslations } from 'next-intl';
38
38
  import { useMemo, useState } from 'react';
39
39
  import { toast } from 'sonner';
@@ -288,12 +288,33 @@ function SessionRow({
288
288
  <TableCell>
289
289
  <div className="flex items-center gap-3">
290
290
  <div>
291
- <p className="font-medium capitalize">
292
- {parseDeviceType(session.user_agent)}
293
- </p>
294
- <p className="text-xs text-muted-foreground">
295
- {parseOS(session.user_agent)}
296
- </p>
291
+ {/* Sessão de app conectado (OAuth) não tem dispositivo para mostrar:
292
+ ela nasce na nuvem do fornecedor, com um user agent que o parser
293
+ não reconhece e geolocalizada no país dele. Repetir isso aqui faz
294
+ a linha parecer invasão de conta — o nome do app é a informação
295
+ que o usuário precisa para reconhecer o que autorizou. */}
296
+ {session.oauth_client ? (
297
+ <p className="font-medium">{session.oauth_client.name}</p>
298
+ ) : (
299
+ <>
300
+ <p className="font-medium capitalize">
301
+ {parseDeviceType(session.user_agent)}
302
+ </p>
303
+ <p className="text-xs text-muted-foreground">
304
+ {parseOS(session.user_agent)}
305
+ </p>
306
+ </>
307
+ )}
308
+
309
+ {session.oauth_client && (
310
+ <Badge
311
+ variant="outline"
312
+ className="mt-1 border-sky-500/30 bg-sky-500/10 text-xs text-sky-700"
313
+ >
314
+ <Plug className="mr-1 size-3" />
315
+ {t('connectedApp')}
316
+ </Badge>
317
+ )}
297
318
  {/* Esta é a tela de segurança do próprio usuário: é aqui que ele
298
319
  precisa enxergar que alguém entrou na conta dele por simulação
299
320
  de acesso, e quem foi. */}
@@ -314,7 +335,11 @@ function SessionRow({
314
335
  </div>
315
336
  </TableCell>
316
337
  <TableCell>
317
- <div>{parseBrowser(session.user_agent)}</div>
338
+ <div>
339
+ {session.oauth_client
340
+ ? t('viaConnector')
341
+ : parseBrowser(session.user_agent)}
342
+ </div>
318
343
 
319
344
  {session.revoked_at === null && (
320
345
  <Badge variant="default" className="mt-1 text-xs">
@@ -165,7 +165,9 @@ export function McpTokens() {
165
165
  <CardHeader className="flex flex-row items-start justify-between">
166
166
  <div>
167
167
  <CardTitle>{t('title')}</CardTitle>
168
- <CardDescription className="mt-1">{t('description')}</CardDescription>
168
+ <CardDescription className="mt-1">
169
+ {t('description')}
170
+ </CardDescription>
169
171
  </div>
170
172
  <Button size="sm" onClick={() => setIsCreateDialogOpen(true)}>
171
173
  <Plus className="size-4 mr-2" />
@@ -174,10 +176,22 @@ export function McpTokens() {
174
176
  </CardHeader>
175
177
  <CardContent className="space-y-4">
176
178
  <div className="flex items-center gap-2 rounded-md border bg-muted/40 px-3 py-2">
177
- <span className="text-sm text-muted-foreground shrink-0">{t('mcpUrlLabel')}:</span>
179
+ <span className="text-sm text-muted-foreground shrink-0">
180
+ {t('mcpUrlLabel')}:
181
+ </span>
178
182
  <code className="flex-1 text-sm break-all">{mcpUrl}</code>
179
- <Button variant="ghost" size="icon" className="size-7 shrink-0" onClick={handleCopyUrl}>
180
- {isCopiedUrl ? <Check className="size-3.5 text-green-500" /> : <Copy className="size-3.5" />}
183
+ <Button
184
+ variant="ghost"
185
+ size="icon"
186
+ className="size-7 shrink-0"
187
+ onClick={handleCopyUrl}
188
+ tooltip={t('copyUrl')}
189
+ >
190
+ {isCopiedUrl ? (
191
+ <Check className="size-3.5 text-green-500" />
192
+ ) : (
193
+ <Copy className="size-3.5" />
194
+ )}
181
195
  </Button>
182
196
  </div>
183
197
 
@@ -207,7 +221,9 @@ export function McpTokens() {
207
221
  </code>
208
222
  </TableCell>
209
223
  <TableCell className="text-muted-foreground text-sm">
210
- {key.last_used_at ? formatDateTime(key.last_used_at, getSettingValue) : t('never')}
224
+ {key.last_used_at
225
+ ? formatDateTime(key.last_used_at, getSettingValue)
226
+ : t('never')}
211
227
  </TableCell>
212
228
  <TableCell className="text-muted-foreground text-sm">
213
229
  {formatDateTime(key.created_at, getSettingValue)}
@@ -218,6 +234,7 @@ export function McpTokens() {
218
234
  size="icon"
219
235
  className="size-8 text-destructive hover:text-destructive"
220
236
  onClick={() => setKeyToRevoke(key.id)}
237
+ tooltip={t('revoke')}
221
238
  >
222
239
  <Trash2 className="size-4" />
223
240
  </Button>
@@ -243,11 +260,16 @@ export function McpTokens() {
243
260
  </Card>
244
261
 
245
262
  {/* Revoke confirmation */}
246
- <AlertDialog open={keyToRevoke !== null} onOpenChange={(open) => !open && setKeyToRevoke(null)}>
263
+ <AlertDialog
264
+ open={keyToRevoke !== null}
265
+ onOpenChange={(open) => !open && setKeyToRevoke(null)}
266
+ >
247
267
  <AlertDialogContent>
248
268
  <AlertDialogHeader>
249
269
  <AlertDialogTitle>{t('revokeTokenTitle')}</AlertDialogTitle>
250
- <AlertDialogDescription>{t('revokeTokenDescription')}</AlertDialogDescription>
270
+ <AlertDialogDescription>
271
+ {t('revokeTokenDescription')}
272
+ </AlertDialogDescription>
251
273
  </AlertDialogHeader>
252
274
  <AlertDialogFooter>
253
275
  <AlertDialogCancel>{t('cancel')}</AlertDialogCancel>
@@ -262,13 +284,18 @@ export function McpTokens() {
262
284
  </AlertDialog>
263
285
 
264
286
  {/* Create token dialog */}
265
- <Dialog open={isCreateDialogOpen} onOpenChange={(open) => !open && handleCloseCreateDialog()}>
287
+ <Dialog
288
+ open={isCreateDialogOpen}
289
+ onOpenChange={(open) => !open && handleCloseCreateDialog()}
290
+ >
266
291
  <DialogContent className="sm:max-w-md">
267
292
  {createdToken === null ? (
268
293
  <>
269
294
  <DialogHeader>
270
295
  <DialogTitle>{t('createTokenTitle')}</DialogTitle>
271
- <DialogDescription>{t('createTokenDescription')}</DialogDescription>
296
+ <DialogDescription>
297
+ {t('createTokenDescription')}
298
+ </DialogDescription>
272
299
  </DialogHeader>
273
300
  <div className="space-y-2 py-2">
274
301
  <Label htmlFor="token-name">{t('tokenNameLabel')}</Label>
@@ -281,7 +308,9 @@ export function McpTokens() {
281
308
  />
282
309
  </div>
283
310
  <DialogFooter>
284
- <Button variant="outline" onClick={handleCloseCreateDialog}>{t('cancel')}</Button>
311
+ <Button variant="outline" onClick={handleCloseCreateDialog}>
312
+ {t('cancel')}
313
+ </Button>
285
314
  <Button onClick={handleCreate} disabled={!newKeyName.trim()}>
286
315
  {t('createToken')}
287
316
  </Button>
@@ -302,14 +331,26 @@ export function McpTokens() {
302
331
  <code className="flex-1 rounded border bg-muted px-3 py-2 text-xs break-all">
303
332
  {createdToken}
304
333
  </code>
305
- <Button variant="outline" size="icon" onClick={handleCopyToken} className="shrink-0">
306
- {isCopied ? <Check className="size-4 text-green-500" /> : <Copy className="size-4" />}
334
+ <Button
335
+ variant="outline"
336
+ size="icon"
337
+ onClick={handleCopyToken}
338
+ className="shrink-0"
339
+ tooltip={t('copyToken')}
340
+ >
341
+ {isCopied ? (
342
+ <Check className="size-4 text-green-500" />
343
+ ) : (
344
+ <Copy className="size-4" />
345
+ )}
307
346
  </Button>
308
347
  </div>
309
348
  </div>
310
349
  </div>
311
350
  <DialogFooter>
312
- <Button onClick={handleCloseCreateDialog}>{t('closeDialog')}</Button>
351
+ <Button onClick={handleCloseCreateDialog}>
352
+ {t('closeDialog')}
353
+ </Button>
313
354
  </DialogFooter>
314
355
  </>
315
356
  )}
@@ -75,6 +75,7 @@ export function MfaMethodCard({
75
75
  setEditName(method.name);
76
76
  setIsEditOpen(true);
77
77
  }}
78
+ tooltip={t('editMfaName')}
78
79
  >
79
80
  <Edit2 className="w-4 h-4" />
80
81
  </Button>
@@ -106,7 +107,12 @@ export function MfaMethodCard({
106
107
  </form>
107
108
  </DialogContent>
108
109
  </Dialog>
109
- <Button variant="ghost" size="icon" onClick={() => onRemove(method)}>
110
+ <Button
111
+ variant="ghost"
112
+ size="icon"
113
+ onClick={() => onRemove(method)}
114
+ tooltip={t('removeMfa')}
115
+ >
110
116
  <Trash2 className="size-4 text-destructive" />
111
117
  </Button>
112
118
  </div>
@@ -122,6 +122,7 @@ export function RecoveryCodesDialog({
122
122
  variant="ghost"
123
123
  size="icon"
124
124
  onClick={() => handleCopyCode(code)}
125
+ tooltip={t('copyCode')}
125
126
  >
126
127
  <Copy className="w-4 h-4" />
127
128
  </Button>