@hed-hog/core 0.0.398 → 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 (664) 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 +30 -6
  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 +78 -4
  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 +385 -36
  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.controller.d.ts +9 -9
  356. package/dist/pairing/pairing.service.d.ts +15 -11
  357. package/dist/pairing/pairing.service.d.ts.map +1 -1
  358. package/dist/profile/dto/change-password.dto.d.ts.map +1 -1
  359. package/dist/profile/dto/change-password.dto.js +4 -6
  360. package/dist/profile/dto/change-password.dto.js.map +1 -1
  361. package/dist/profile/profile.controller.d.ts +1 -1
  362. package/dist/profile/profile.service.d.ts +1 -1
  363. package/dist/profile/profile.service.d.ts.map +1 -1
  364. package/dist/profile/profile.service.js +9 -3
  365. package/dist/profile/profile.service.js.map +1 -1
  366. package/dist/realtime/realtime-tick.coalescer.d.ts +34 -0
  367. package/dist/realtime/realtime-tick.coalescer.d.ts.map +1 -0
  368. package/dist/realtime/realtime-tick.coalescer.js +60 -0
  369. package/dist/realtime/realtime-tick.coalescer.js.map +1 -0
  370. package/dist/realtime/realtime.service.d.ts +2 -0
  371. package/dist/realtime/realtime.service.d.ts.map +1 -1
  372. package/dist/realtime/realtime.service.js +22 -2
  373. package/dist/realtime/realtime.service.js.map +1 -1
  374. package/dist/redis/redis-kv.service.d.ts +90 -0
  375. package/dist/redis/redis-kv.service.d.ts.map +1 -0
  376. package/dist/redis/redis-kv.service.js +247 -0
  377. package/dist/redis/redis-kv.service.js.map +1 -0
  378. package/dist/redis/redis-master.d.ts +29 -0
  379. package/dist/redis/redis-master.d.ts.map +1 -0
  380. package/dist/redis/redis-master.js +81 -0
  381. package/dist/redis/redis-master.js.map +1 -0
  382. package/dist/redis/redis-pubsub.d.ts +12 -0
  383. package/dist/redis/redis-pubsub.d.ts.map +1 -1
  384. package/dist/redis/redis-pubsub.js +25 -2
  385. package/dist/redis/redis-pubsub.js.map +1 -1
  386. package/dist/redis/redis.module.d.ts +11 -0
  387. package/dist/redis/redis.module.d.ts.map +1 -0
  388. package/dist/redis/redis.module.js +30 -0
  389. package/dist/redis/redis.module.js.map +1 -0
  390. package/dist/session/session.controller.d.ts +6 -2
  391. package/dist/session/session.controller.d.ts.map +1 -1
  392. package/dist/session/session.service.d.ts +118 -15
  393. package/dist/session/session.service.d.ts.map +1 -1
  394. package/dist/session/session.service.js +251 -77
  395. package/dist/session/session.service.js.map +1 -1
  396. package/dist/setting/setting.controller.d.ts +5 -0
  397. package/dist/setting/setting.controller.d.ts.map +1 -1
  398. package/dist/setting/setting.service.d.ts +7 -0
  399. package/dist/setting/setting.service.d.ts.map +1 -1
  400. package/dist/setting/setting.service.js +38 -3
  401. package/dist/setting/setting.service.js.map +1 -1
  402. package/dist/task/task.service.d.ts +17 -0
  403. package/dist/task/task.service.d.ts.map +1 -1
  404. package/dist/task/task.service.js +48 -13
  405. package/dist/task/task.service.js.map +1 -1
  406. package/dist/token/token.service.d.ts +19 -1
  407. package/dist/token/token.service.d.ts.map +1 -1
  408. package/dist/token/token.service.js +39 -2
  409. package/dist/token/token.service.js.map +1 -1
  410. package/dist/user/user-credential.util.d.ts +10 -0
  411. package/dist/user/user-credential.util.d.ts.map +1 -1
  412. package/dist/user/user-credential.util.js +14 -1
  413. package/dist/user/user-credential.util.js.map +1 -1
  414. package/dist/user/user.service.d.ts +12 -4
  415. package/dist/user/user.service.d.ts.map +1 -1
  416. package/dist/user/user.service.js +2 -11
  417. package/dist/user/user.service.js.map +1 -1
  418. package/dist/user/user.sort.d.ts +16 -0
  419. package/dist/user/user.sort.d.ts.map +1 -0
  420. package/dist/user/user.sort.js +25 -0
  421. package/dist/user/user.sort.js.map +1 -0
  422. package/dist/utils/abbreviate-name.d.ts +13 -0
  423. package/dist/utils/abbreviate-name.d.ts.map +1 -0
  424. package/dist/utils/abbreviate-name.js +42 -0
  425. package/dist/utils/abbreviate-name.js.map +1 -0
  426. package/dist/utils/date-range-query.dto.d.ts +11 -0
  427. package/dist/utils/date-range-query.dto.d.ts.map +1 -0
  428. package/dist/utils/date-range-query.dto.js +63 -0
  429. package/dist/utils/date-range-query.dto.js.map +1 -0
  430. package/dist/utils/date-range.d.ts +96 -0
  431. package/dist/utils/date-range.d.ts.map +1 -0
  432. package/dist/utils/date-range.js +172 -0
  433. package/dist/utils/date-range.js.map +1 -0
  434. package/dist/webhook-integration/webhook-utils.d.ts.map +1 -1
  435. package/dist/webhook-integration/webhook-utils.js +24 -0
  436. package/dist/webhook-integration/webhook-utils.js.map +1 -1
  437. package/dist/whatsapp-sender/whatsapp-recipients.d.ts +49 -0
  438. package/dist/whatsapp-sender/whatsapp-recipients.d.ts.map +1 -0
  439. package/dist/whatsapp-sender/whatsapp-recipients.js +66 -0
  440. package/dist/whatsapp-sender/whatsapp-recipients.js.map +1 -0
  441. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +25 -0
  442. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  443. package/dist/whatsapp-sender/whatsapp-sender.service.js +46 -5
  444. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  445. package/hedhog/data/integration_provider.yaml +9 -0
  446. package/hedhog/data/integration_type.yaml +6 -0
  447. package/hedhog/data/locale.yaml +0 -1
  448. package/hedhog/data/mail.yaml +2 -2
  449. package/hedhog/data/mail_layout.yaml +6 -3
  450. package/hedhog/data/menu.yaml +25 -5
  451. package/hedhog/data/route.yaml +140 -0
  452. package/hedhog/data/setting_group.yaml +137 -3
  453. package/hedhog/frontend/app/access-log/page.tsx.ejs +47 -53
  454. package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +33 -8
  455. package/hedhog/frontend/app/account/components/mcp-tokens.tsx.ejs +54 -13
  456. package/hedhog/frontend/app/account/components/mfa-method-card.tsx.ejs +7 -1
  457. package/hedhog/frontend/app/account/components/recovery-codes-dialog.tsx.ejs +1 -0
  458. package/hedhog/frontend/app/account/components/tokens.tsx.ejs +47 -17
  459. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +46 -5
  460. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +101 -30
  461. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +24 -8
  462. package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +80 -15
  463. package/hedhog/frontend/app/configurations/[slug]/components/image-optimization-action.tsx.ejs +166 -0
  464. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +145 -45
  465. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +99 -219
  466. package/hedhog/frontend/app/configurations/[slug]/page.tsx.ejs +19 -1
  467. package/hedhog/frontend/app/configurations/layout.tsx.ejs +19 -5
  468. package/hedhog/frontend/app/dashboard/[slug]/widget-renderer.tsx.ejs +2 -8
  469. package/hedhog/frontend/app/dashboard/components/dynamic-widget.tsx.ejs +3 -0
  470. package/hedhog/frontend/app/dashboard/components/widget-wrapper.tsx.ejs +4 -0
  471. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +43 -44
  472. package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +41 -3
  473. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +42 -2
  474. package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +41 -3
  475. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +39 -4
  476. package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +42 -3
  477. package/hedhog/frontend/app/incidents/page.tsx.ejs +60 -31
  478. package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +45 -5
  479. package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +92 -15
  480. package/hedhog/frontend/app/mail/log/page.tsx.ejs +109 -61
  481. package/hedhog/frontend/app/mail/template/page.tsx.ejs +125 -23
  482. package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +13 -15
  483. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +116 -110
  484. package/hedhog/frontend/app/message-templates/_components/message-template-sheet.tsx.ejs +245 -0
  485. package/hedhog/frontend/app/message-templates/_lib/types.ts.ejs +24 -0
  486. package/hedhog/frontend/app/message-templates/page.tsx.ejs +182 -0
  487. package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1 -0
  488. package/hedhog/frontend/app/pages/page.tsx.ejs +94 -9
  489. package/hedhog/frontend/app/roles/menus.tsx.ejs +4 -4
  490. package/hedhog/frontend/app/roles/routes.tsx.ejs +4 -4
  491. package/hedhog/frontend/app/roles/users.tsx.ejs +4 -4
  492. package/hedhog/frontend/app/setting-list/page.tsx.ejs +71 -9
  493. package/hedhog/frontend/app/users/page.tsx.ejs +77 -67
  494. package/hedhog/frontend/messages/en.json +183 -36
  495. package/hedhog/frontend/messages/pt.json +183 -36
  496. package/hedhog/table/cron_lock.yaml +17 -0
  497. package/hedhog/table/file.yaml +13 -1
  498. package/hedhog/table/file_upload_chunk.yaml +23 -0
  499. package/hedhog/table/file_upload_ticket.yaml +67 -0
  500. package/hedhog/table/mcp_tool_call_log.yaml +30 -22
  501. package/hedhog/table/message_template.yaml +33 -0
  502. package/hedhog/table/setting.yaml +8 -0
  503. package/hedhog/table/user_session.yaml +36 -1
  504. package/package.json +8 -6
  505. package/src/ai/ai-agent.sort.ts +21 -0
  506. package/src/ai/ai.service.spec.ts +173 -1
  507. package/src/ai/ai.service.ts +64 -193
  508. package/src/ai-instruction/ai-instruction.service.ts +32 -28
  509. package/src/ai-instruction/ai-instruction.sort.ts +32 -0
  510. package/src/auth/auth.module.ts +8 -1
  511. package/src/auth/auth.service.spec.ts +108 -1
  512. package/src/auth/auth.service.ts +59 -5
  513. package/src/auth/guards/auth.guard.ts +9 -1
  514. package/src/authorize/authorize.controller.ts +126 -11
  515. package/src/authorize/authorize.errors.ts +55 -0
  516. package/src/authorize/authorize.module.ts +6 -1
  517. package/src/authorize/authorize.service.spec.ts +379 -7
  518. package/src/authorize/authorize.service.ts +309 -23
  519. package/src/authorize/dto/authorize-info.dto.ts +21 -3
  520. package/src/authorize/dto/consent.dto.ts +21 -3
  521. package/src/authorize/dto/token.dto.ts +24 -2
  522. package/src/authorize/oauth-exception.filter.ts +58 -0
  523. package/src/authorize/oauth-metadata.service.ts +67 -0
  524. package/src/authorize/well-known.controller.spec.ts +84 -0
  525. package/src/authorize/well-known.controller.ts +96 -0
  526. package/src/captcha/captcha.service.spec.ts +211 -4
  527. package/src/captcha/captcha.service.ts +127 -10
  528. package/src/core.module.ts +6 -0
  529. package/src/dashboard/dashboard-component-role/dashboard-component-role.service.ts +2 -3
  530. package/src/dashboard/dashboard-component-role/dashboard-component-role.sort.ts +18 -0
  531. package/src/dashboard/dashboard-item/dashboard-item.service.ts +2 -3
  532. package/src/dashboard/dashboard-item/dashboard-item.sort.ts +19 -0
  533. package/src/dashboard/dashboard-role/dashboard-role.service.ts +2 -3
  534. package/src/dashboard/dashboard-role/dashboard-role.sort.ts +16 -0
  535. package/src/file/file-upload-ticket.service.spec.ts +422 -0
  536. package/src/file/file-upload-ticket.service.ts +513 -0
  537. package/src/file/file.controller.ts +65 -0
  538. package/src/file/file.module.ts +14 -2
  539. package/src/file/file.service.spec.ts +94 -0
  540. package/src/file/file.service.ts +432 -30
  541. package/src/file/filename-encoding.util.spec.ts +54 -0
  542. package/src/file/filename-encoding.util.ts +67 -0
  543. package/src/file/image-optimization.service.spec.ts +156 -19
  544. package/src/file/image-optimization.service.ts +106 -21
  545. package/src/file/mcp-file-source.schema.ts +83 -0
  546. package/src/file/mcp-file-source.service.spec.ts +473 -0
  547. package/src/file/mcp-file-source.service.ts +445 -0
  548. package/src/file/mimetype-sniff.util.spec.ts +126 -0
  549. package/src/file/mimetype-sniff.util.ts +265 -0
  550. package/src/file/remote-fetch.util.spec.ts +117 -0
  551. package/src/file/remote-fetch.util.ts +330 -0
  552. package/src/impersonation/dto/start-impersonation.dto.ts +5 -2
  553. package/src/impersonation/impersonation.service.spec.ts +24 -1
  554. package/src/impersonation/impersonation.service.ts +14 -4
  555. package/src/incident/incident.controller.ts +9 -1
  556. package/src/incident/incident.service.ts +7 -0
  557. package/src/index.ts +17 -0
  558. package/src/integration-profile/integration-profile.secrets.ts +7 -0
  559. package/src/integration-profile/integration-profile.service.ts +7 -64
  560. package/src/integration-profile/integration-profile.utils.spec.ts +9 -0
  561. package/src/integration-profile/integration-profile.utils.ts +5 -5
  562. package/src/integration-profile/testers/index.ts +2 -0
  563. package/src/integration-profile/testers/remaining.testers.spec.ts +79 -0
  564. package/src/integration-profile/testers/shipping.testers.ts +94 -0
  565. package/src/mail/dto/send.dto.ts +6 -1
  566. package/src/mail/mail-template.spec.ts +58 -1
  567. package/src/mail/mail.service.spec.ts +112 -0
  568. package/src/mail/mail.service.ts +42 -4
  569. package/src/mail-sent/mail-sent.service.ts +3 -0
  570. package/src/mail-sent/mail-sent.sort.ts +19 -0
  571. package/src/mcp/filters/mcp-challenge.filter.spec.ts +76 -0
  572. package/src/mcp/filters/mcp-challenge.filter.ts +70 -0
  573. package/src/mcp/guards/mcp-auth.guard.spec.ts +51 -2
  574. package/src/mcp/guards/mcp-auth.guard.ts +24 -1
  575. package/src/mcp/guards/mcp-permission.guard.spec.ts +109 -15
  576. package/src/mcp/guards/mcp-permission.guard.ts +76 -51
  577. package/src/mcp/mcp-audit.service.spec.ts +107 -0
  578. package/src/mcp/mcp-audit.service.ts +37 -1
  579. package/src/mcp/mcp-permission.service.spec.ts +197 -0
  580. package/src/mcp/mcp-permission.service.ts +184 -0
  581. package/src/mcp/mcp-server.service.spec.ts +84 -2
  582. package/src/mcp/mcp-server.service.ts +111 -87
  583. package/src/mcp/mcp.controller.ts +8 -1
  584. package/src/mcp/mcp.module.ts +5 -1
  585. package/src/mcp/tools/core-ai.mcp-tools.ts +1 -1
  586. package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +1 -1
  587. package/src/mcp/tools/core-dashboard.mcp-tools.ts +1 -1
  588. package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +1 -2
  589. package/src/mcp/tools/core-files.mcp-tools.ts +202 -22
  590. package/src/mcp/tools/core-integration-events.mcp-tools.ts +1 -1
  591. package/src/mcp/tools/core-mail-sent.mcp-tools.ts +1 -1
  592. package/src/mcp/tools/core-mail.mcp-tools.ts +1 -1
  593. package/src/mcp/tools/core-menus.mcp-tools.ts +1 -2
  594. package/src/mcp/tools/core-notifications.mcp-tools.ts +0 -1
  595. package/src/mcp/tools/core-roles.mcp-tools.ts +1 -5
  596. package/src/mcp/tools/core-routes.mcp-tools.ts +1 -3
  597. package/src/mcp/tools/core-screens.mcp-tools.ts +1 -3
  598. package/src/mcp/tools/core-sessions.mcp-tools.ts +0 -2
  599. package/src/mcp/tools/core-settings.mcp-tools.ts +1 -2
  600. package/src/mcp/tools/core-users.mcp-tools.ts +1 -1
  601. package/src/mcp/tools/core-webhooks.mcp-tools.ts +1 -2
  602. package/src/mcp/types/mcp-context.type.ts +15 -6
  603. package/src/mcp-chat/mcp-chat.service.ts +8 -0
  604. package/src/meeting/meeting-provider.registry.ts +121 -0
  605. package/src/meeting/meeting.constants.ts +74 -0
  606. package/src/menu/menu.service.spec.ts +89 -0
  607. package/src/menu/menu.service.ts +29 -11
  608. package/src/message-template/dto/update-message-template.dto.ts +22 -0
  609. package/src/message-template/message-template-admin.service.spec.ts +163 -0
  610. package/src/message-template/message-template-admin.service.ts +239 -0
  611. package/src/message-template/message-template.controller.ts +52 -0
  612. package/src/message-template/message-template.module.ts +21 -0
  613. package/src/message-template/message-template.registry.spec.ts +62 -0
  614. package/src/message-template/message-template.registry.ts +125 -0
  615. package/src/message-template/message-template.service.spec.ts +149 -0
  616. package/src/message-template/message-template.service.ts +149 -0
  617. package/src/notification/notification.constants.ts +10 -0
  618. package/src/notification/notification.module.ts +3 -0
  619. package/src/notification/notification.service.spec.ts +75 -1
  620. package/src/notification/notification.service.ts +39 -1
  621. package/src/oauth/oauth.controller.ts +0 -1
  622. package/src/oauth/oauth.errors.ts +7 -0
  623. package/src/oauth/oauth.module.ts +6 -1
  624. package/src/oauth/oauth.service.spec.ts +58 -7
  625. package/src/oauth/oauth.service.ts +71 -32
  626. package/src/oauth/providers/abstract.provider.spec.ts +192 -0
  627. package/src/oauth/providers/abstract.provider.ts +46 -14
  628. package/src/oauth/providers/github.provider.ts +57 -34
  629. package/src/oauth/providers/microsoft-entra-id.provider.ts +8 -1
  630. package/src/observability/monitored-cron.spec.ts +164 -31
  631. package/src/observability/monitored-cron.ts +154 -62
  632. package/src/profile/dto/change-password.dto.ts +25 -7
  633. package/src/profile/profile.service.spec.ts +97 -0
  634. package/src/profile/profile.service.ts +9 -3
  635. package/src/realtime/realtime-tick.coalescer.spec.ts +92 -0
  636. package/src/realtime/realtime-tick.coalescer.ts +60 -0
  637. package/src/realtime/realtime.service.spec.ts +33 -0
  638. package/src/realtime/realtime.service.ts +28 -2
  639. package/src/redis/redis-kv.service.ts +261 -0
  640. package/src/redis/redis-master.spec.ts +111 -0
  641. package/src/redis/redis-master.ts +86 -0
  642. package/src/redis/redis-pubsub.ts +27 -3
  643. package/src/redis/redis.module.ts +17 -0
  644. package/src/session/session.service.spec.ts +121 -42
  645. package/src/session/session.service.ts +279 -82
  646. package/src/setting/setting.service.ts +44 -3
  647. package/src/task/task.service.spec.ts +41 -0
  648. package/src/task/task.service.ts +53 -13
  649. package/src/token/token.service.spec.ts +90 -0
  650. package/src/token/token.service.ts +48 -2
  651. package/src/user/user-credential.util.ts +14 -5
  652. package/src/user/user.service.ts +2 -12
  653. package/src/user/user.sort.ts +25 -0
  654. package/src/utils/abbreviate-name.spec.ts +50 -0
  655. package/src/utils/abbreviate-name.ts +44 -0
  656. package/src/utils/date-range-query.dto.ts +56 -0
  657. package/src/utils/date-range.spec.ts +175 -0
  658. package/src/utils/date-range.ts +246 -0
  659. package/src/webhook-integration/webhook-utils.spec.ts +67 -0
  660. package/src/webhook-integration/webhook-utils.ts +26 -0
  661. package/src/whatsapp-sender/whatsapp-recipients.spec.ts +89 -0
  662. package/src/whatsapp-sender/whatsapp-recipients.ts +83 -0
  663. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +112 -0
  664. package/src/whatsapp-sender/whatsapp-sender.service.ts +58 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/core",
3
- "version": "0.0.398",
3
+ "version": "0.0.400",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,6 +27,8 @@
27
27
  "@simplewebauthn/server": "^13.2.2",
28
28
  "argon2": "^0.44.0",
29
29
  "axios": "^1.9.0",
30
+ "class-transformer": "*",
31
+ "class-validator": "*",
30
32
  "cookie-parser": "^1.4.7",
31
33
  "geoip-lite": "^2.0.2",
32
34
  "handlebars": "^4.7.8",
@@ -45,13 +47,13 @@
45
47
  "speakeasy": "^2.0.0",
46
48
  "ua-parser-js": "^2.0.10",
47
49
  "uuid": "^11.1.0",
48
- "@hed-hog/vault-crypto": "0.0.1",
49
- "@hed-hog/api-pagination": "0.0.8",
50
50
  "@hed-hog/api-prisma": "0.0.7",
51
- "@hed-hog/api": "0.0.9",
52
- "@hed-hog/api-types": "0.0.2",
53
51
  "@hed-hog/api-locale": "0.0.15",
54
- "@hed-hog/api-mail": "0.0.11"
52
+ "@hed-hog/api-mail": "0.0.11",
53
+ "@hed-hog/vault-crypto": "0.0.1",
54
+ "@hed-hog/api": "0.0.9",
55
+ "@hed-hog/api-pagination": "0.0.8",
56
+ "@hed-hog/api-types": "0.0.2"
55
57
  },
56
58
  "exports": {
57
59
  ".": {
@@ -0,0 +1,21 @@
1
+ import { defineSortable } from '@hed-hog/api-pagination';
2
+
3
+ /**
4
+ * Campos ordenáveis de `ai_agent` (`AiService.listAgents`). Todas as colunas
5
+ * exibidas na tela são planas — sem relação envolvida.
6
+ */
7
+ export const AI_AGENT_SORT = defineSortable(
8
+ {
9
+ slug: true,
10
+ provider: true,
11
+ model: true,
12
+ external_agent_id: true,
13
+ created_at: { initialOrder: 'desc' },
14
+ id: { initialOrder: 'desc' },
15
+ },
16
+ {
17
+ // Mesma ordem que estava fixa no `$queryRaw` (`ORDER BY id DESC`).
18
+ default: 'id',
19
+ defaultOrder: 'desc',
20
+ },
21
+ );
@@ -14,6 +14,7 @@ const mockedAxios = axios as jest.Mocked<typeof axios>;
14
14
  describe('AiService — parâmetros de modelo', () => {
15
15
  let service: AiService;
16
16
  let promptResolver: { resolveMany: jest.Mock };
17
+ let aiExecution: any;
17
18
 
18
19
  const aiProfile = {
19
20
  apiKey: 'sk-test',
@@ -25,7 +26,7 @@ describe('AiService — parâmetros de modelo', () => {
25
26
  const prisma = {} as any;
26
27
  const settingService = { getSettingValues: jest.fn().mockResolvedValue({}) } as any;
27
28
  const fileService = {} as any;
28
- const aiExecution = {
29
+ aiExecution = {
29
30
  start: jest.fn().mockResolvedValue(1),
30
31
  recordStep: jest.fn().mockResolvedValue(undefined),
31
32
  finish: jest.fn().mockResolvedValue(undefined),
@@ -276,5 +277,176 @@ describe('AiService — parâmetros de modelo', () => {
276
277
  response_format: { type: 'json_object' },
277
278
  });
278
279
  });
280
+
281
+ /** Prompt sem nenhum parâmetro gravado: o registro não opina no modelo. */
282
+ const promptSemParametros = () =>
283
+ promptResolver.resolveMany.mockResolvedValue({
284
+ 'task.lms.quiz.generate.user': {
285
+ slug: 'task.lms.quiz.generate.user',
286
+ content: 'Gere 5 questões.',
287
+ source: 'fallback',
288
+ model: null,
289
+ temperature: null,
290
+ maxTokens: null,
291
+ },
292
+ });
293
+
294
+ it('o modelo pedido pelo chamador vence o do perfil', async () => {
295
+ // O SAC lê `sac.ai.model` do operador e não tinha por onde entregá-la:
296
+ // a setting era lida e descartada.
297
+ promptSemParametros();
298
+ (service as any).getAiProfile.mockResolvedValueOnce({
299
+ ...aiProfile,
300
+ model: 'gpt-4o-mini',
301
+ });
302
+
303
+ const result = await service.chatWithPrompt({
304
+ userPromptSlug: 'task.lms.quiz.generate.user',
305
+ provider: 'openai',
306
+ model: 'gpt-4o',
307
+ });
308
+
309
+ expect(result.model).toBe('gpt-4o');
310
+ expect(lastBody()).toMatchObject({ model: 'gpt-4o' });
311
+ });
312
+
313
+ it('e vence também o modelo gravado no registro do prompt', async () => {
314
+ // Precedência documentada em `mergeModelParams`: argumento explícito
315
+ // primeiro, depois a linha de `ai_instruction`, depois o perfil. Note que
316
+ // `temperature` e `maxTokens` seguem a ordem inversa nesta mesma função —
317
+ // ali o registro vence o chamador.
318
+ promptResolver.resolveMany.mockResolvedValue({
319
+ 'task.lms.quiz.generate.user': {
320
+ slug: 'task.lms.quiz.generate.user',
321
+ content: 'Gere 5 questões.',
322
+ source: 'db',
323
+ model: 'gpt-4o',
324
+ temperature: null,
325
+ maxTokens: null,
326
+ },
327
+ });
328
+
329
+ const result = await service.chatWithPrompt({
330
+ userPromptSlug: 'task.lms.quiz.generate.user',
331
+ provider: 'openai',
332
+ model: 'gpt-3.5-turbo',
333
+ });
334
+
335
+ expect(result.model).toBe('gpt-3.5-turbo');
336
+ });
337
+
338
+ it('devolve a execução de IA, onde o custo da chamada é registrado', async () => {
339
+ promptSemParametros();
340
+
341
+ const result = await service.chatWithPrompt({
342
+ userPromptSlug: 'task.lms.quiz.generate.user',
343
+ provider: 'openai',
344
+ });
345
+
346
+ expect(result.executionId).toBe(1);
347
+ });
348
+
349
+ it('devolve null quando a execução não pôde ser aberta', async () => {
350
+ // `start` engole a falha e devolve 0; repassar esse 0 faria quem o grava
351
+ // apontar para uma execução que não existe.
352
+ promptSemParametros();
353
+ aiExecution.start.mockResolvedValueOnce(0);
354
+
355
+ const result = await service.chatWithPrompt({
356
+ userPromptSlug: 'task.lms.quiz.generate.user',
357
+ provider: 'openai',
358
+ });
359
+
360
+ expect(result.executionId).toBeNull();
361
+ });
362
+ });
363
+ });
364
+
365
+ /**
366
+ * A Assistants API (beta) da OpenAI foi desligada em 26/08/2026: `/v1/assistants`
367
+ * e `/v1/threads` passaram a responder 404, e o `createOpenAiAssistant` que o
368
+ * agente do financeiro disparava a cada extração derrubava a requisição com 500
369
+ * antes de qualquer leitura do arquivo. Estes testes guardam a ausência desse
370
+ * caminho — agente é linha no banco, e a conversa é sempre `chat/completions`.
371
+ */
372
+ describe('AiService — agentes sem a Assistants API', () => {
373
+ let service: AiService;
374
+ let executeRaw: jest.Mock;
375
+
376
+ beforeEach(() => {
377
+ executeRaw = jest.fn().mockResolvedValue(1);
378
+ const prisma = { $executeRaw: executeRaw } as any;
379
+ const settingService = { getSettingValues: jest.fn().mockResolvedValue({}) } as any;
380
+ const aiExecution = {
381
+ start: jest.fn().mockResolvedValue(1),
382
+ recordStep: jest.fn().mockResolvedValue(undefined),
383
+ finish: jest.fn().mockResolvedValue(undefined),
384
+ } as any;
385
+ const promptResolver = {
386
+ resolve: jest
387
+ .fn()
388
+ .mockResolvedValue({ content: 'instrucao padrao do agente', source: 'db' }),
389
+ };
390
+
391
+ service = new AiService(prisma, settingService, {} as any, aiExecution, promptResolver as any);
392
+
393
+ jest.spyOn(service as any, 'getAiProfile').mockResolvedValue({ apiKey: 'sk-test' });
394
+ jest.spyOn(service as any, 'resolveAttachment').mockResolvedValue(null);
395
+
396
+ mockedAxios.post.mockResolvedValue({
397
+ data: { choices: [{ message: { content: 'ok' } }] },
398
+ } as any);
399
+ });
400
+
401
+ afterEach(() => {
402
+ jest.restoreAllMocks();
403
+ mockedAxios.post.mockReset();
404
+ });
405
+
406
+ it('cria o agente sem assistant remoto, guardando a instrução padrão na linha', async () => {
407
+ const created = { id: 1, slug: 'finance-payable-extractor' };
408
+ jest
409
+ .spyOn(service as any, 'findAgentBySlug')
410
+ .mockResolvedValueOnce(null)
411
+ .mockResolvedValueOnce(created);
412
+
413
+ const agent = await service.createAgent({
414
+ slug: 'finance-payable-extractor',
415
+ provider: 'openai',
416
+ } as any);
417
+
418
+ expect(mockedAxios.post).not.toHaveBeenCalled();
419
+ expect(agent).toBe(created);
420
+
421
+ const [sql, ...values] = executeRaw.mock.calls[0];
422
+ // A instrução padrão precisa ficar na linha: sem assistant remoto para
423
+ // guardá-la, ela é o único system prompt que o agente terá.
424
+ expect(values).toContain('instrucao padrao do agente');
425
+ expect(sql.join('?')).toContain('NULL');
426
+ });
427
+
428
+ it('conversa por chat/completions mesmo com external_agent_id legado e sem anexo', async () => {
429
+ jest.spyOn(service as any, 'findAgentBySlug').mockResolvedValue({
430
+ id: 1,
431
+ slug: 'finance-payable-extractor',
432
+ provider: 'openai',
433
+ model: 'gpt-4o',
434
+ instructions: 'extraia os dados do título',
435
+ external_agent_id: 'asst_legado',
436
+ });
437
+
438
+ const result = await service.chatWithAgent('finance-payable-extractor', {
439
+ message: 'oi',
440
+ } as any);
441
+
442
+ expect(mockedAxios.post).toHaveBeenCalledTimes(1);
443
+ expect(mockedAxios.post.mock.calls[0][0]).toBe(
444
+ 'https://api.openai.com/v1/chat/completions',
445
+ );
446
+ expect((mockedAxios.post.mock.calls[0][1] as any).messages[0]).toEqual({
447
+ role: 'system',
448
+ content: 'extraia os dados do título',
449
+ });
450
+ expect(result.content).toBe('ok');
279
451
  });
280
452
  });
@@ -29,6 +29,7 @@ import {
29
29
  DEEPSEEK_DEFAULT_MODEL,
30
30
  } from '../integration-profile/integration-profile.utils';
31
31
  import { SettingService } from '../setting/setting.service';
32
+ import { AI_AGENT_SORT } from './ai-agent.sort';
32
33
  import {
33
34
  attachedFileBlock,
34
35
  binaryAttachmentMarker,
@@ -200,6 +201,15 @@ export class AiService implements OnModuleInit {
200
201
  * sistema. Mesmo padrão que `sendTemplatedMail` já usa para e-mail.
201
202
  */
202
203
  profileSlug?: string;
204
+ /**
205
+ * Modelo a usar, no lugar do que o perfil define.
206
+ *
207
+ * Existe para o chamador que tem a própria configuração de modelo — o SAC
208
+ * lê `sac.ai.model` do operador e não tinha por onde entregá-la. Vence a
209
+ * linha de `ai_instruction` e o perfil, na precedência que
210
+ * `mergeModelParams` documenta: argumento explícito primeiro.
211
+ */
212
+ model?: string;
203
213
  params?: AiChatModelParams;
204
214
  contextSlug?: string;
205
215
  }): Promise<{
@@ -207,6 +217,14 @@ export class AiService implements OnModuleInit {
207
217
  model: string;
208
218
  content: string;
209
219
  promptSources: Record<string, PromptSource>;
220
+ /**
221
+ * Linha de `ai_execution` desta chamada, onde o custo estimado é registrado.
222
+ *
223
+ * `null` quando o registro não pôde ser aberto: `AiExecutionService.start`
224
+ * devolve `0` nesse caso, e quem grava esse id numa coluna própria estaria
225
+ * apontando para uma execução que não existe.
226
+ */
227
+ executionId: number | null;
210
228
  }> {
211
229
  const slugs = input.systemPromptSlug
212
230
  ? [input.systemPromptSlug, input.userPromptSlug]
@@ -233,7 +251,10 @@ export class AiService implements OnModuleInit {
233
251
  const provider = target.provider;
234
252
  const aiProfile = target.profile;
235
253
  const model =
236
- stored.model || aiProfile.model || this.getDefaultModel(provider);
254
+ input.model?.trim() ||
255
+ stored.model ||
256
+ aiProfile.model ||
257
+ this.getDefaultModel(provider);
237
258
  const timeoutMs = aiProfile.timeoutMs ?? DEFAULT_AI_CALL_TIMEOUT_MS;
238
259
 
239
260
  const params: AiChatModelParams = {
@@ -277,32 +298,44 @@ export class AiService implements OnModuleInit {
277
298
  Object.entries(resolved).map(([slug, prompt]) => [slug, prompt.source]),
278
299
  );
279
300
 
280
- return { provider, model, content, promptSources };
301
+ // `executionId || null`: `start` devolve 0 quando não conseguiu abrir a
302
+ // linha, e quem guarda esse id (o SAC, em `ai_execution_id`) ficaria
303
+ // apontando para uma execução inexistente — a coluna não tem FK para
304
+ // barrar isso.
305
+ return { provider, model, content, promptSources, executionId: executionId || null };
281
306
  } catch (err) {
282
307
  await this.aiExecution.finish(executionId, 'failed', String(err));
283
308
  throw err;
284
309
  }
285
310
  }
286
311
 
312
+ /**
313
+ * `external_agent_id` nasce nulo: a Assistants API da OpenAI, que devolvia o
314
+ * `asst_...` guardado nessa coluna, foi desligada em 26/08/2026 e todo
315
+ * `POST /v1/assistants` passou a responder 404. As instruções do agente viram
316
+ * system prompt do `chat/completions` em `chatWithAgent`, então elas precisam
317
+ * estar na linha — daí resolver aqui a instrução padrão que antes ia embutida
318
+ * no assistant remoto, em vez de deixar o agente sem prompt nenhum.
319
+ */
287
320
  async createAgent(data: CreateAgentDTO) {
288
321
  const slug = data.slug.trim();
289
322
  const provider = data.provider || 'openai';
290
323
  const model = data.model || this.getDefaultModel(provider);
291
- const instructions = data.instructions?.trim() || null;
292
324
 
293
325
  const existing = await this.findAgentBySlug(slug);
294
326
  if (existing) {
295
327
  return existing;
296
328
  }
297
329
 
298
- let externalAgentId: string | null = null;
330
+ let instructions = data.instructions?.trim() || null;
299
331
 
300
- if (provider === 'openai') {
301
- externalAgentId = await this.createOpenAiAssistant({
302
- slug,
303
- model,
304
- instructions,
332
+ if (!instructions) {
333
+ const defaultInstructions = await this.promptResolver.resolve({
334
+ slug: CORE_AI_PROMPT_SLUGS.agentDefaultInstructions,
335
+ variables: { slug },
305
336
  });
337
+
338
+ instructions = defaultInstructions.content;
306
339
  }
307
340
 
308
341
  await this.prismaService.$executeRaw`
@@ -312,7 +345,7 @@ export class AiService implements OnModuleInit {
312
345
  CAST(${provider} AS ai_agent_provider_7cb93b1143_enum),
313
346
  ${model},
314
347
  ${instructions},
315
- ${externalAgentId}
348
+ NULL
316
349
  )
317
350
  `;
318
351
 
@@ -358,29 +391,22 @@ export class AiService implements OnModuleInit {
358
391
  Math.max(Number(paginationParams?.pageSize || 10), 1),
359
392
  100,
360
393
  );
361
- const offset = (page - 1) * pageSize;
394
+ const skip = (page - 1) * pageSize;
362
395
  const search = String(paginationParams?.search || '').trim();
363
396
 
364
- const whereClause = search
365
- ? Prisma.sql`WHERE LOWER(slug) LIKE LOWER(${`%${search}%`})`
366
- : Prisma.empty;
397
+ const where: Prisma.ai_agentWhereInput = search
398
+ ? { slug: { contains: search, mode: 'insensitive' } }
399
+ : {};
367
400
 
368
- const data = await this.prismaService.$queryRaw<AiAgentRecord[]>(Prisma.sql`
369
- SELECT id, slug, provider, model, instructions, external_agent_id, created_at, updated_at
370
- FROM ai_agent
371
- ${whereClause}
372
- ORDER BY id DESC
373
- LIMIT ${pageSize}
374
- OFFSET ${offset}
375
- `);
376
-
377
- const totalResult = await this.prismaService.$queryRaw<Array<{ total: bigint | number | string }>>(Prisma.sql`
378
- SELECT COUNT(*) AS total
379
- FROM ai_agent
380
- ${whereClause}
381
- `);
382
-
383
- const total = Number(totalResult?.[0]?.total || 0);
401
+ const [data, total] = await Promise.all([
402
+ this.prismaService.ai_agent.findMany({
403
+ where,
404
+ orderBy: AI_AGENT_SORT.toPrismaOrderBy(paginationParams),
405
+ skip,
406
+ take: pageSize,
407
+ }),
408
+ this.prismaService.ai_agent.count({ where }),
409
+ ]);
384
410
 
385
411
  return {
386
412
  data,
@@ -420,25 +446,15 @@ export class AiService implements OnModuleInit {
420
446
  }
421
447
  }
422
448
 
423
- let externalAgentId = currentAgent.external_agent_id;
424
-
425
- if (provider !== 'openai') {
426
- externalAgentId = null;
427
- } else if (!externalAgentId) {
428
- externalAgentId = await this.createOpenAiAssistant({
429
- slug,
430
- model,
431
- instructions,
432
- });
433
- }
434
-
449
+ // Zera o `asst_...` legado: a coluna deixou de ser alimentada quando a
450
+ // Assistants API foi desligada, e valor antigo aqui não tem mais para onde ir.
435
451
  await this.prismaService.$executeRaw`
436
452
  UPDATE ai_agent
437
453
  SET slug = ${slug},
438
454
  provider = CAST(${provider} AS ai_agent_provider_7cb93b1143_enum),
439
455
  model = ${model},
440
456
  instructions = ${instructions},
441
- external_agent_id = ${externalAgentId},
457
+ external_agent_id = NULL,
442
458
  updated_at = NOW()
443
459
  WHERE id = ${agentId}
444
460
  `;
@@ -479,20 +495,11 @@ export class AiService implements OnModuleInit {
479
495
  throw new NotFoundException(`AI agent with slug "${slug}" was not found.`);
480
496
  }
481
497
 
482
- if (agent.provider === 'openai' && agent.external_agent_id && !attachment) {
483
- const content = await this.chatWithOpenAiAssistant(
484
- agent.external_agent_id,
485
- data.message,
486
- );
487
-
488
- return {
489
- slug: agent.slug,
490
- provider: agent.provider,
491
- model: agent.model,
492
- content,
493
- };
494
- }
495
-
498
+ // Um único caminho para todo agente, com ou sem anexo: as instruções da
499
+ // linha viram system prompt do provider. Até 26/08/2026 o agente da OpenAI
500
+ // com `external_agent_id` e sem anexo era atendido por thread + run da
501
+ // Assistants API — que a OpenAI desligou, e que já ignorava model e
502
+ // instructions do banco porque só mandava o `assistant_id`.
496
503
  const aiProfile = await this.getAiProfile(agent.provider);
497
504
 
498
505
  const { content } = await this.chatWithProvider(agent.provider, {
@@ -887,138 +894,6 @@ export class AiService implements OnModuleInit {
887
894
  };
888
895
  }
889
896
 
890
- private async createOpenAiAssistant({
891
- slug,
892
- model,
893
- instructions,
894
- }: {
895
- slug: string;
896
- model: string;
897
- instructions: string | null;
898
- }): Promise<string> {
899
- const openai = await this.getAiApiKey('openai');
900
-
901
- const defaultInstructions = await this.promptResolver.resolve({
902
- slug: CORE_AI_PROMPT_SLUGS.agentDefaultInstructions,
903
- variables: { slug },
904
- });
905
-
906
- const response = await axios.post(
907
- 'https://api.openai.com/v1/assistants',
908
- {
909
- name: slug,
910
- model,
911
- instructions: instructions || defaultInstructions.content,
912
- },
913
- {
914
- headers: {
915
- Authorization: `Bearer ${openai}`,
916
- 'Content-Type': 'application/json',
917
- 'OpenAI-Beta': 'assistants=v2',
918
- },
919
- },
920
- );
921
-
922
- const assistantId = response.data?.id;
923
-
924
- if (!assistantId) {
925
- throw new BadRequestException('OpenAI assistant creation failed.');
926
- }
927
-
928
- return assistantId;
929
- }
930
-
931
- private async chatWithOpenAiAssistant(
932
- assistantId: string,
933
- message: string,
934
- ): Promise<string> {
935
- const openai = await this.getAiApiKey('openai');
936
-
937
- const threadResponse = await axios.post(
938
- 'https://api.openai.com/v1/threads',
939
- {
940
- messages: [{ role: 'user', content: message }],
941
- },
942
- {
943
- headers: {
944
- Authorization: `Bearer ${openai}`,
945
- 'Content-Type': 'application/json',
946
- 'OpenAI-Beta': 'assistants=v2',
947
- },
948
- },
949
- );
950
-
951
- const threadId = threadResponse.data?.id;
952
-
953
- if (!threadId) {
954
- throw new BadRequestException('OpenAI thread creation failed.');
955
- }
956
-
957
- const runResponse = await axios.post(
958
- `https://api.openai.com/v1/threads/${threadId}/runs`,
959
- {
960
- assistant_id: assistantId,
961
- },
962
- {
963
- headers: {
964
- Authorization: `Bearer ${openai}`,
965
- 'Content-Type': 'application/json',
966
- 'OpenAI-Beta': 'assistants=v2',
967
- },
968
- },
969
- );
970
-
971
- const runId = runResponse.data?.id;
972
-
973
- if (!runId) {
974
- throw new BadRequestException('OpenAI assistant run failed to start.');
975
- }
976
-
977
- for (let i = 0; i < 30; i++) {
978
- const runStatusResponse = await axios.get(
979
- `https://api.openai.com/v1/threads/${threadId}/runs/${runId}`,
980
- {
981
- headers: {
982
- Authorization: `Bearer ${openai}`,
983
- 'OpenAI-Beta': 'assistants=v2',
984
- },
985
- },
986
- );
987
-
988
- const status = runStatusResponse.data?.status;
989
-
990
- if (status === 'completed') {
991
- break;
992
- }
993
-
994
- if (['cancelled', 'failed', 'expired'].includes(status)) {
995
- throw new BadRequestException(
996
- `OpenAI assistant run did not complete successfully (status: ${status}).`,
997
- );
998
- }
999
-
1000
- await this.sleep(1000);
1001
- }
1002
-
1003
- const messagesResponse = await axios.get(
1004
- `https://api.openai.com/v1/threads/${threadId}/messages`,
1005
- {
1006
- headers: {
1007
- Authorization: `Bearer ${openai}`,
1008
- 'OpenAI-Beta': 'assistants=v2',
1009
- },
1010
- },
1011
- );
1012
-
1013
- const assistantMessage = messagesResponse.data?.data?.find(
1014
- (item: any) => item.role === 'assistant',
1015
- );
1016
-
1017
- const output = assistantMessage?.content?.[0]?.text?.value;
1018
-
1019
- return output || '';
1020
- }
1021
-
1022
897
  private async chatWithGemini({
1023
898
  message,
1024
899
  model,
@@ -1100,10 +975,6 @@ export class AiService implements OnModuleInit {
1100
975
  };
1101
976
  }
1102
977
 
1103
- private async sleep(ms: number) {
1104
- await new Promise((resolve) => setTimeout(resolve, ms));
1105
- }
1106
-
1107
978
  private async resolveAttachment(
1108
979
  uploadFile?: MulterFile,
1109
980
  fileId?: number,