@hed-hog/core 0.0.387 → 0.0.393

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (935) hide show
  1. package/README.md +51 -11
  2. package/dist/access-log/access-log.controller.d.ts.map +1 -1
  3. package/dist/access-log/access-log.controller.js +1 -1
  4. package/dist/access-log/access-log.controller.js.map +1 -1
  5. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  6. package/dist/access-log/access-log.interceptor.js +11 -6
  7. package/dist/access-log/access-log.interceptor.js.map +1 -1
  8. package/dist/access-log/access-log.service.d.ts +4 -0
  9. package/dist/access-log/access-log.service.d.ts.map +1 -1
  10. package/dist/access-log/access-log.service.js +31 -4
  11. package/dist/access-log/access-log.service.js.map +1 -1
  12. package/dist/access-log/dto/query-access-log.dto.d.ts +2 -0
  13. package/dist/access-log/dto/query-access-log.dto.d.ts.map +1 -1
  14. package/dist/access-log/dto/query-access-log.dto.js +5 -0
  15. package/dist/access-log/dto/query-access-log.dto.js.map +1 -1
  16. package/dist/ai/ai-attachment.fragments.d.ts +23 -0
  17. package/dist/ai/ai-attachment.fragments.d.ts.map +1 -0
  18. package/dist/ai/ai-attachment.fragments.js +34 -0
  19. package/dist/ai/ai-attachment.fragments.js.map +1 -0
  20. package/dist/ai/ai.controller.d.ts +12 -17
  21. package/dist/ai/ai.controller.d.ts.map +1 -1
  22. package/dist/ai/ai.controller.js +17 -2
  23. package/dist/ai/ai.controller.js.map +1 -1
  24. package/dist/ai/ai.module.d.ts.map +1 -1
  25. package/dist/ai/ai.module.js +3 -2
  26. package/dist/ai/ai.module.js.map +1 -1
  27. package/dist/ai/ai.prompts.d.ts +16 -0
  28. package/dist/ai/ai.prompts.d.ts.map +1 -0
  29. package/dist/ai/ai.prompts.js +37 -0
  30. package/dist/ai/ai.prompts.js.map +1 -0
  31. package/dist/ai/ai.service.d.ts +92 -12
  32. package/dist/ai/ai.service.d.ts.map +1 -1
  33. package/dist/ai/ai.service.js +309 -88
  34. package/dist/ai/ai.service.js.map +1 -1
  35. package/dist/ai/dto/chat.dto.d.ts +4 -1
  36. package/dist/ai/dto/chat.dto.d.ts.map +1 -1
  37. package/dist/ai/dto/chat.dto.js +23 -1
  38. package/dist/ai/dto/chat.dto.js.map +1 -1
  39. package/dist/ai/dto/create-agent.dto.d.ts +1 -1
  40. package/dist/ai/dto/create-agent.dto.d.ts.map +1 -1
  41. package/dist/ai/dto/create-agent.dto.js +1 -1
  42. package/dist/ai/dto/create-agent.dto.js.map +1 -1
  43. package/dist/ai/dto/richtext-edit-html.dto.d.ts +5 -0
  44. package/dist/ai/dto/richtext-edit-html.dto.d.ts.map +1 -0
  45. package/dist/ai/dto/richtext-edit-html.dto.js +27 -0
  46. package/dist/ai/dto/richtext-edit-html.dto.js.map +1 -0
  47. package/dist/ai/dto/update-agent.dto.d.ts +1 -1
  48. package/dist/ai/dto/update-agent.dto.d.ts.map +1 -1
  49. package/dist/ai/dto/update-agent.dto.js +1 -1
  50. package/dist/ai/dto/update-agent.dto.js.map +1 -1
  51. package/dist/ai/richtext-ai.prompts.d.ts +5 -0
  52. package/dist/ai/richtext-ai.prompts.d.ts.map +1 -0
  53. package/dist/ai/richtext-ai.prompts.js +57 -0
  54. package/dist/ai/richtext-ai.prompts.js.map +1 -0
  55. package/dist/ai/richtext-ai.service.d.ts +34 -0
  56. package/dist/ai/richtext-ai.service.d.ts.map +1 -0
  57. package/dist/ai/richtext-ai.service.js +95 -0
  58. package/dist/ai/richtext-ai.service.js.map +1 -0
  59. package/dist/ai-instruction/ai-instruction.controller.d.ts +59 -5
  60. package/dist/ai-instruction/ai-instruction.controller.d.ts.map +1 -1
  61. package/dist/ai-instruction/ai-instruction.controller.js +63 -20
  62. package/dist/ai-instruction/ai-instruction.controller.js.map +1 -1
  63. package/dist/ai-instruction/ai-instruction.module.d.ts.map +1 -1
  64. package/dist/ai-instruction/ai-instruction.module.js +13 -2
  65. package/dist/ai-instruction/ai-instruction.module.js.map +1 -1
  66. package/dist/ai-instruction/ai-instruction.service.d.ts +131 -6
  67. package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
  68. package/dist/ai-instruction/ai-instruction.service.js +533 -60
  69. package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
  70. package/dist/ai-instruction/ai-prompt-builder.service.d.ts +8 -0
  71. package/dist/ai-instruction/ai-prompt-builder.service.d.ts.map +1 -1
  72. package/dist/ai-instruction/ai-prompt-builder.service.js +10 -1
  73. package/dist/ai-instruction/ai-prompt-builder.service.js.map +1 -1
  74. package/dist/ai-instruction/ai-prompt-registry.d.ts +45 -0
  75. package/dist/ai-instruction/ai-prompt-registry.d.ts.map +1 -0
  76. package/dist/ai-instruction/ai-prompt-registry.js +49 -0
  77. package/dist/ai-instruction/ai-prompt-registry.js.map +1 -0
  78. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +89 -0
  79. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -0
  80. package/dist/ai-instruction/ai-prompt-resolver.service.js +222 -0
  81. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -0
  82. package/dist/ai-instruction/ai-prompt-template.util.d.ts +70 -0
  83. package/dist/ai-instruction/ai-prompt-template.util.d.ts.map +1 -0
  84. package/dist/ai-instruction/ai-prompt-template.util.js +154 -0
  85. package/dist/ai-instruction/ai-prompt-template.util.js.map +1 -0
  86. package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts +5 -0
  87. package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts.map +1 -1
  88. package/dist/ai-instruction/dto/create-ai-instruction.dto.js +27 -1
  89. package/dist/ai-instruction/dto/create-ai-instruction.dto.js.map +1 -1
  90. package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts +14 -0
  91. package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts.map +1 -0
  92. package/dist/ai-instruction/dto/preview-ai-instruction.dto.js +42 -0
  93. package/dist/ai-instruction/dto/preview-ai-instruction.dto.js.map +1 -0
  94. package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts +11 -0
  95. package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts.map +1 -1
  96. package/dist/ai-instruction/dto/update-ai-instruction.dto.js +34 -0
  97. package/dist/ai-instruction/dto/update-ai-instruction.dto.js.map +1 -1
  98. package/dist/ai-instruction/types/ai-instruction.types.d.ts +13 -1
  99. package/dist/ai-instruction/types/ai-instruction.types.d.ts.map +1 -1
  100. package/dist/ai-instruction/types/ai-instruction.types.js +10 -0
  101. package/dist/ai-instruction/types/ai-instruction.types.js.map +1 -1
  102. package/dist/auth/auth.controller.d.ts +89 -15
  103. package/dist/auth/auth.controller.d.ts.map +1 -1
  104. package/dist/auth/auth.controller.js +116 -44
  105. package/dist/auth/auth.controller.js.map +1 -1
  106. package/dist/auth/auth.module.d.ts.map +1 -1
  107. package/dist/auth/auth.module.js +2 -0
  108. package/dist/auth/auth.module.js.map +1 -1
  109. package/dist/auth/auth.service.d.ts +169 -12
  110. package/dist/auth/auth.service.d.ts.map +1 -1
  111. package/dist/auth/auth.service.js +314 -67
  112. package/dist/auth/auth.service.js.map +1 -1
  113. package/dist/auth/dto/confirm-email.dto.d.ts +4 -0
  114. package/dist/auth/dto/confirm-email.dto.d.ts.map +1 -0
  115. package/dist/auth/dto/confirm-email.dto.js +22 -0
  116. package/dist/auth/dto/confirm-email.dto.js.map +1 -0
  117. package/dist/auth/dto/resend-confirmation.dto.d.ts +8 -0
  118. package/dist/auth/dto/resend-confirmation.dto.d.ts.map +1 -0
  119. package/dist/auth/dto/resend-confirmation.dto.js +36 -0
  120. package/dist/auth/dto/resend-confirmation.dto.js.map +1 -0
  121. package/dist/authorize/authorize.controller.d.ts +1 -1
  122. package/dist/authorize/authorize.controller.d.ts.map +1 -1
  123. package/dist/authorize/authorize.controller.js +4 -2
  124. package/dist/authorize/authorize.controller.js.map +1 -1
  125. package/dist/authorize/authorize.service.d.ts +7 -0
  126. package/dist/authorize/authorize.service.d.ts.map +1 -1
  127. package/dist/authorize/authorize.service.js +1 -1
  128. package/dist/authorize/authorize.service.js.map +1 -1
  129. package/dist/captcha/captcha.module.d.ts +3 -0
  130. package/dist/captcha/captcha.module.d.ts.map +1 -0
  131. package/dist/captcha/captcha.module.js +23 -0
  132. package/dist/captcha/captcha.module.js.map +1 -0
  133. package/dist/captcha/captcha.service.d.ts +38 -0
  134. package/dist/captcha/captcha.service.d.ts.map +1 -0
  135. package/dist/captcha/captcha.service.js +144 -0
  136. package/dist/captcha/captcha.service.js.map +1 -0
  137. package/dist/challenge/challenge.service.d.ts +31 -9
  138. package/dist/challenge/challenge.service.d.ts.map +1 -1
  139. package/dist/challenge/challenge.service.js +111 -16
  140. package/dist/challenge/challenge.service.js.map +1 -1
  141. package/dist/core.module.d.ts +3 -1
  142. package/dist/core.module.d.ts.map +1 -1
  143. package/dist/core.module.js +46 -2
  144. package/dist/core.module.js.map +1 -1
  145. package/dist/dashboard/dashboard/dashboard.controller.d.ts +21 -21
  146. package/dist/dashboard/dashboard/dashboard.service.d.ts +21 -21
  147. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +10 -10
  148. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +10 -10
  149. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +20 -20
  150. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +20 -20
  151. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +3 -3
  152. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +3 -3
  153. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +2 -2
  154. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +2 -2
  155. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +13 -13
  156. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +13 -13
  157. package/dist/file/file.controller.d.ts +8 -1
  158. package/dist/file/file.controller.d.ts.map +1 -1
  159. package/dist/file/file.controller.js +45 -7
  160. package/dist/file/file.controller.js.map +1 -1
  161. package/dist/file/file.service.d.ts +134 -1
  162. package/dist/file/file.service.d.ts.map +1 -1
  163. package/dist/file/file.service.js +363 -12
  164. package/dist/file/file.service.js.map +1 -1
  165. package/dist/file/image-optimization.service.d.ts +43 -0
  166. package/dist/file/image-optimization.service.d.ts.map +1 -1
  167. package/dist/file/image-optimization.service.js +154 -0
  168. package/dist/file/image-optimization.service.js.map +1 -1
  169. package/dist/file/provider/abstract.provider.d.ts +16 -0
  170. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  171. package/dist/file/provider/abstract.provider.js +4 -0
  172. package/dist/file/provider/abstract.provider.js.map +1 -1
  173. package/dist/file/provider/gcs.provider.d.ts +2 -0
  174. package/dist/file/provider/gcs.provider.d.ts.map +1 -1
  175. package/dist/file/provider/gcs.provider.js +10 -0
  176. package/dist/file/provider/gcs.provider.js.map +1 -1
  177. package/dist/file/provider/local.provider.d.ts +1 -0
  178. package/dist/file/provider/local.provider.d.ts.map +1 -1
  179. package/dist/file/provider/local.provider.js +13 -0
  180. package/dist/file/provider/local.provider.js.map +1 -1
  181. package/dist/file/provider/s3.provider.d.ts +5 -0
  182. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  183. package/dist/file/provider/s3.provider.js +15 -0
  184. package/dist/file/provider/s3.provider.js.map +1 -1
  185. package/dist/file/provider/spaces.provider.d.ts +5 -0
  186. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  187. package/dist/file/provider/spaces.provider.js +16 -0
  188. package/dist/file/provider/spaces.provider.js.map +1 -1
  189. package/dist/impersonation/dto/redeem-impersonation.dto.d.ts +4 -0
  190. package/dist/impersonation/dto/redeem-impersonation.dto.d.ts.map +1 -0
  191. package/dist/impersonation/dto/redeem-impersonation.dto.js +23 -0
  192. package/dist/impersonation/dto/redeem-impersonation.dto.js.map +1 -0
  193. package/dist/impersonation/dto/start-impersonation.dto.d.ts +7 -0
  194. package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -0
  195. package/dist/impersonation/dto/start-impersonation.dto.js +27 -0
  196. package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -0
  197. package/dist/impersonation/impersonation-restrictions.d.ts +26 -0
  198. package/dist/impersonation/impersonation-restrictions.d.ts.map +1 -0
  199. package/dist/impersonation/impersonation-restrictions.js +76 -0
  200. package/dist/impersonation/impersonation-restrictions.js.map +1 -0
  201. package/dist/impersonation/impersonation.controller.d.ts +90 -0
  202. package/dist/impersonation/impersonation.controller.d.ts.map +1 -0
  203. package/dist/impersonation/impersonation.controller.js +135 -0
  204. package/dist/impersonation/impersonation.controller.js.map +1 -0
  205. package/dist/impersonation/impersonation.module.d.ts +8 -0
  206. package/dist/impersonation/impersonation.module.d.ts.map +1 -0
  207. package/dist/impersonation/impersonation.module.js +44 -0
  208. package/dist/impersonation/impersonation.module.js.map +1 -0
  209. package/dist/impersonation/impersonation.service.d.ts +164 -0
  210. package/dist/impersonation/impersonation.service.d.ts.map +1 -0
  211. package/dist/impersonation/impersonation.service.js +408 -0
  212. package/dist/impersonation/impersonation.service.js.map +1 -0
  213. package/dist/incident/incident-notifier.service.d.ts +36 -0
  214. package/dist/incident/incident-notifier.service.d.ts.map +1 -0
  215. package/dist/incident/incident-notifier.service.js +208 -0
  216. package/dist/incident/incident-notifier.service.js.map +1 -0
  217. package/dist/incident/incident.controller.d.ts +23 -0
  218. package/dist/incident/incident.controller.d.ts.map +1 -0
  219. package/dist/incident/incident.controller.js +75 -0
  220. package/dist/incident/incident.controller.js.map +1 -0
  221. package/dist/incident/incident.module.d.ts +7 -0
  222. package/dist/incident/incident.module.d.ts.map +1 -0
  223. package/dist/incident/incident.module.js +32 -0
  224. package/dist/incident/incident.module.js.map +1 -0
  225. package/dist/incident/incident.service.d.ts +72 -0
  226. package/dist/incident/incident.service.d.ts.map +1 -0
  227. package/dist/incident/incident.service.js +184 -0
  228. package/dist/incident/incident.service.js.map +1 -0
  229. package/dist/index.d.ts +43 -0
  230. package/dist/index.d.ts.map +1 -1
  231. package/dist/index.js +49 -0
  232. package/dist/index.js.map +1 -1
  233. package/dist/integration/services/outbox-polling.coordinator.d.ts +2 -0
  234. package/dist/integration/services/outbox-polling.coordinator.d.ts.map +1 -1
  235. package/dist/integration/services/outbox-polling.coordinator.js +50 -30
  236. package/dist/integration/services/outbox-polling.coordinator.js.map +1 -1
  237. package/dist/integration/services/outbox.service.d.ts.map +1 -1
  238. package/dist/integration/services/outbox.service.js +5 -1
  239. package/dist/integration/services/outbox.service.js.map +1 -1
  240. package/dist/integration-profile/dto/test.dto.d.ts +13 -0
  241. package/dist/integration-profile/dto/test.dto.d.ts.map +1 -0
  242. package/dist/integration-profile/dto/test.dto.js +26 -0
  243. package/dist/integration-profile/dto/test.dto.js.map +1 -0
  244. package/dist/integration-profile/integration-profile.controller.d.ts +12 -1
  245. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  246. package/dist/integration-profile/integration-profile.controller.js +9 -1
  247. package/dist/integration-profile/integration-profile.controller.js.map +1 -1
  248. package/dist/integration-profile/integration-profile.module.d.ts +6 -1
  249. package/dist/integration-profile/integration-profile.module.d.ts.map +1 -1
  250. package/dist/integration-profile/integration-profile.module.js +26 -3
  251. package/dist/integration-profile/integration-profile.module.js.map +1 -1
  252. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  253. package/dist/integration-profile/integration-profile.secrets.js +12 -1
  254. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  255. package/dist/integration-profile/integration-profile.service.d.ts +26 -7
  256. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  257. package/dist/integration-profile/integration-profile.service.js +94 -91
  258. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  259. package/dist/integration-profile/integration-profile.utils.d.ts +27 -1
  260. package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
  261. package/dist/integration-profile/integration-profile.utils.js +46 -5
  262. package/dist/integration-profile/integration-profile.utils.js.map +1 -1
  263. package/dist/integration-profile/testers/ai.testers.d.ts +3 -0
  264. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -0
  265. package/dist/integration-profile/testers/ai.testers.js +125 -0
  266. package/dist/integration-profile/testers/ai.testers.js.map +1 -0
  267. package/dist/integration-profile/testers/captcha.testers.d.ts +3 -0
  268. package/dist/integration-profile/testers/captcha.testers.d.ts.map +1 -0
  269. package/dist/integration-profile/testers/captcha.testers.js +121 -0
  270. package/dist/integration-profile/testers/captcha.testers.js.map +1 -0
  271. package/dist/integration-profile/testers/email.testers.d.ts +3 -0
  272. package/dist/integration-profile/testers/email.testers.d.ts.map +1 -0
  273. package/dist/integration-profile/testers/email.testers.js +156 -0
  274. package/dist/integration-profile/testers/email.testers.js.map +1 -0
  275. package/dist/integration-profile/testers/http-probe.d.ts +57 -0
  276. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -0
  277. package/dist/integration-profile/testers/http-probe.js +140 -0
  278. package/dist/integration-profile/testers/http-probe.js.map +1 -0
  279. package/dist/integration-profile/testers/index.d.ts +12 -0
  280. package/dist/integration-profile/testers/index.d.ts.map +1 -0
  281. package/dist/integration-profile/testers/index.js +45 -0
  282. package/dist/integration-profile/testers/index.js.map +1 -0
  283. package/dist/integration-profile/testers/infrastructure.testers.d.ts +3 -0
  284. package/dist/integration-profile/testers/infrastructure.testers.d.ts.map +1 -0
  285. package/dist/integration-profile/testers/infrastructure.testers.js +105 -0
  286. package/dist/integration-profile/testers/infrastructure.testers.js.map +1 -0
  287. package/dist/integration-profile/testers/integration-tester.registry.d.ts +17 -0
  288. package/dist/integration-profile/testers/integration-tester.registry.d.ts.map +1 -0
  289. package/dist/integration-profile/testers/integration-tester.registry.js +52 -0
  290. package/dist/integration-profile/testers/integration-tester.registry.js.map +1 -0
  291. package/dist/integration-profile/testers/integration-tester.types.d.ts +55 -0
  292. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -0
  293. package/dist/integration-profile/testers/integration-tester.types.js +16 -0
  294. package/dist/integration-profile/testers/integration-tester.types.js.map +1 -0
  295. package/dist/integration-profile/testers/messaging.testers.d.ts +3 -0
  296. package/dist/integration-profile/testers/messaging.testers.d.ts.map +1 -0
  297. package/dist/integration-profile/testers/messaging.testers.js +70 -0
  298. package/dist/integration-profile/testers/messaging.testers.js.map +1 -0
  299. package/dist/integration-profile/testers/oauth.testers.d.ts +3 -0
  300. package/dist/integration-profile/testers/oauth.testers.d.ts.map +1 -0
  301. package/dist/integration-profile/testers/oauth.testers.js +285 -0
  302. package/dist/integration-profile/testers/oauth.testers.js.map +1 -0
  303. package/dist/integration-profile/testers/payment.testers.d.ts +3 -0
  304. package/dist/integration-profile/testers/payment.testers.d.ts.map +1 -0
  305. package/dist/integration-profile/testers/payment.testers.js +169 -0
  306. package/dist/integration-profile/testers/payment.testers.js.map +1 -0
  307. package/dist/integration-profile/testers/storage.testers.d.ts +3 -0
  308. package/dist/integration-profile/testers/storage.testers.d.ts.map +1 -0
  309. package/dist/integration-profile/testers/storage.testers.js +208 -0
  310. package/dist/integration-profile/testers/storage.testers.js.map +1 -0
  311. package/dist/language/en.json +15 -2
  312. package/dist/language/pt.json +15 -2
  313. package/dist/leaked-password/leaked-password.controller.d.ts +24 -0
  314. package/dist/leaked-password/leaked-password.controller.d.ts.map +1 -0
  315. package/dist/leaked-password/leaked-password.controller.js +78 -0
  316. package/dist/leaked-password/leaked-password.controller.js.map +1 -0
  317. package/dist/leaked-password/leaked-password.module.d.ts +8 -0
  318. package/dist/leaked-password/leaked-password.module.d.ts.map +1 -0
  319. package/dist/leaked-password/leaked-password.module.js +31 -0
  320. package/dist/leaked-password/leaked-password.module.js.map +1 -0
  321. package/dist/leaked-password/leaked-password.service.d.ts +64 -0
  322. package/dist/leaked-password/leaked-password.service.d.ts.map +1 -0
  323. package/dist/leaked-password/leaked-password.service.js +218 -0
  324. package/dist/leaked-password/leaked-password.service.js.map +1 -0
  325. package/dist/locale/locale.controller.d.ts +1 -1
  326. package/dist/locale/locale.service.d.ts +1 -1
  327. package/dist/mail/dto/preview.dto.d.ts +18 -0
  328. package/dist/mail/dto/preview.dto.d.ts.map +1 -0
  329. package/dist/mail/dto/preview.dto.js +66 -0
  330. package/dist/mail/dto/preview.dto.js.map +1 -0
  331. package/dist/mail/dto/send.dto.d.ts +44 -0
  332. package/dist/mail/dto/send.dto.d.ts.map +1 -1
  333. package/dist/mail/dto/send.dto.js +20 -0
  334. package/dist/mail/dto/send.dto.js.map +1 -1
  335. package/dist/mail/mail.controller.d.ts +5 -0
  336. package/dist/mail/mail.controller.d.ts.map +1 -1
  337. package/dist/mail/mail.controller.js +16 -2
  338. package/dist/mail/mail.controller.js.map +1 -1
  339. package/dist/mail/mail.module.d.ts.map +1 -1
  340. package/dist/mail/mail.module.js +2 -0
  341. package/dist/mail/mail.module.js.map +1 -1
  342. package/dist/mail/mail.service.d.ts +69 -4
  343. package/dist/mail/mail.service.d.ts.map +1 -1
  344. package/dist/mail/mail.service.js +278 -37
  345. package/dist/mail/mail.service.js.map +1 -1
  346. package/dist/mail-delivery/mail-delivery-provision.service.d.ts +21 -0
  347. package/dist/mail-delivery/mail-delivery-provision.service.d.ts.map +1 -0
  348. package/dist/mail-delivery/mail-delivery-provision.service.js +64 -0
  349. package/dist/mail-delivery/mail-delivery-provision.service.js.map +1 -0
  350. package/dist/mail-delivery/mail-delivery.constants.d.ts +17 -0
  351. package/dist/mail-delivery/mail-delivery.constants.d.ts.map +1 -0
  352. package/dist/mail-delivery/mail-delivery.constants.js +31 -0
  353. package/dist/mail-delivery/mail-delivery.constants.js.map +1 -0
  354. package/dist/mail-delivery/mail-delivery.controller.d.ts +19 -0
  355. package/dist/mail-delivery/mail-delivery.controller.d.ts.map +1 -0
  356. package/dist/mail-delivery/mail-delivery.controller.js +53 -0
  357. package/dist/mail-delivery/mail-delivery.controller.js.map +1 -0
  358. package/dist/mail-delivery/mail-delivery.module.d.ts +7 -0
  359. package/dist/mail-delivery/mail-delivery.module.d.ts.map +1 -0
  360. package/dist/mail-delivery/mail-delivery.module.js +36 -0
  361. package/dist/mail-delivery/mail-delivery.module.js.map +1 -0
  362. package/dist/mail-delivery/mail-delivery.service.d.ts +38 -0
  363. package/dist/mail-delivery/mail-delivery.service.d.ts.map +1 -0
  364. package/dist/mail-delivery/mail-delivery.service.js +140 -0
  365. package/dist/mail-delivery/mail-delivery.service.js.map +1 -0
  366. package/dist/mail-delivery/ses-event.parser.d.ts +27 -0
  367. package/dist/mail-delivery/ses-event.parser.d.ts.map +1 -0
  368. package/dist/mail-delivery/ses-event.parser.js +131 -0
  369. package/dist/mail-delivery/ses-event.parser.js.map +1 -0
  370. package/dist/mail-delivery/ses-webhook.service.d.ts +58 -0
  371. package/dist/mail-delivery/ses-webhook.service.d.ts.map +1 -0
  372. package/dist/mail-delivery/ses-webhook.service.js +214 -0
  373. package/dist/mail-delivery/ses-webhook.service.js.map +1 -0
  374. package/dist/mail-delivery/sns-message.util.d.ts +38 -0
  375. package/dist/mail-delivery/sns-message.util.d.ts.map +1 -0
  376. package/dist/mail-delivery/sns-message.util.js +109 -0
  377. package/dist/mail-delivery/sns-message.util.js.map +1 -0
  378. package/dist/mail-layout/dto/update.dto.d.ts +17 -0
  379. package/dist/mail-layout/dto/update.dto.d.ts.map +1 -0
  380. package/dist/mail-layout/dto/update.dto.js +27 -0
  381. package/dist/mail-layout/dto/update.dto.js.map +1 -0
  382. package/dist/mail-layout/mail-layout.controller.d.ts +15 -0
  383. package/dist/mail-layout/mail-layout.controller.d.ts.map +1 -0
  384. package/dist/mail-layout/mail-layout.controller.js +71 -0
  385. package/dist/mail-layout/mail-layout.controller.js.map +1 -0
  386. package/dist/mail-layout/mail-layout.module.d.ts +3 -0
  387. package/dist/mail-layout/mail-layout.module.d.ts.map +1 -0
  388. package/dist/mail-layout/mail-layout.module.js +35 -0
  389. package/dist/mail-layout/mail-layout.module.js.map +1 -0
  390. package/dist/mail-layout/mail-layout.service.d.ts +27 -0
  391. package/dist/mail-layout/mail-layout.service.d.ts.map +1 -0
  392. package/dist/mail-layout/mail-layout.service.js +80 -0
  393. package/dist/mail-layout/mail-layout.service.js.map +1 -0
  394. package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts +5 -0
  395. package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts.map +1 -1
  396. package/dist/mail-sent/dto/query-mail-sent-list.dto.js +6 -0
  397. package/dist/mail-sent/dto/query-mail-sent-list.dto.js.map +1 -1
  398. package/dist/mail-sent/mail-sent.controller.d.ts +39 -0
  399. package/dist/mail-sent/mail-sent.controller.d.ts.map +1 -1
  400. package/dist/mail-sent/mail-sent.service.d.ts +39 -0
  401. package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
  402. package/dist/mail-sent/mail-sent.service.js +45 -4
  403. package/dist/mail-sent/mail-sent.service.js.map +1 -1
  404. package/dist/mailbox/mailbox-fetcher.registry.d.ts +100 -0
  405. package/dist/mailbox/mailbox-fetcher.registry.d.ts.map +1 -0
  406. package/dist/mailbox/mailbox-fetcher.registry.js +59 -0
  407. package/dist/mailbox/mailbox-fetcher.registry.js.map +1 -0
  408. package/dist/mailbox/mailbox.module.d.ts +8 -0
  409. package/dist/mailbox/mailbox.module.d.ts.map +1 -0
  410. package/dist/mailbox/mailbox.module.js +27 -0
  411. package/dist/mailbox/mailbox.module.js.map +1 -0
  412. package/dist/mcp-chat/mcp-chat.controller.d.ts +2 -2
  413. package/dist/mcp-chat/mcp-chat.service.d.ts +24 -2
  414. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  415. package/dist/mcp-chat/mcp-chat.service.js +80 -24
  416. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  417. package/dist/meeting/meeting-provider.registry.d.ts +155 -0
  418. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -0
  419. package/dist/meeting/meeting-provider.registry.js +53 -0
  420. package/dist/meeting/meeting-provider.registry.js.map +1 -0
  421. package/dist/meeting/meeting.constants.d.ts +47 -0
  422. package/dist/meeting/meeting.constants.d.ts.map +1 -0
  423. package/dist/meeting/meeting.constants.js +21 -0
  424. package/dist/meeting/meeting.constants.js.map +1 -0
  425. package/dist/meeting/meeting.module.d.ts +7 -0
  426. package/dist/meeting/meeting.module.d.ts.map +1 -0
  427. package/dist/meeting/meeting.module.js +26 -0
  428. package/dist/meeting/meeting.module.js.map +1 -0
  429. package/dist/menu/menu.controller.d.ts +3 -3
  430. package/dist/menu/menu.service.d.ts +3 -3
  431. package/dist/middlewares/locale-injection.middleware.d.ts +12 -0
  432. package/dist/middlewares/locale-injection.middleware.d.ts.map +1 -1
  433. package/dist/middlewares/locale-injection.middleware.js +20 -4
  434. package/dist/middlewares/locale-injection.middleware.js.map +1 -1
  435. package/dist/notification/notification.controller.d.ts +12 -12
  436. package/dist/notification/notification.service.d.ts +12 -12
  437. package/dist/oauth/oauth-token-broker.service.d.ts +72 -0
  438. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -0
  439. package/dist/oauth/oauth-token-broker.service.js +258 -0
  440. package/dist/oauth/oauth-token-broker.service.js.map +1 -0
  441. package/dist/oauth/oauth.module.d.ts.map +1 -1
  442. package/dist/oauth/oauth.module.js +3 -1
  443. package/dist/oauth/oauth.module.js.map +1 -1
  444. package/dist/oauth/oauth.service.d.ts +2 -0
  445. package/dist/oauth/oauth.service.d.ts.map +1 -1
  446. package/dist/oauth/oauth.service.js +6 -3
  447. package/dist/oauth/oauth.service.js.map +1 -1
  448. package/dist/oauth/providers/google.provider.d.ts +7 -0
  449. package/dist/oauth/providers/google.provider.d.ts.map +1 -1
  450. package/dist/oauth/providers/google.provider.js +43 -13
  451. package/dist/oauth/providers/google.provider.js.map +1 -1
  452. package/dist/observability/monitored-cron.d.ts +34 -0
  453. package/dist/observability/monitored-cron.d.ts.map +1 -0
  454. package/dist/observability/monitored-cron.js +118 -0
  455. package/dist/observability/monitored-cron.js.map +1 -0
  456. package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts +12 -0
  457. package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts.map +1 -0
  458. package/dist/pairing/dto/approve-reverse-pairing.dto.js +30 -0
  459. package/dist/pairing/dto/approve-reverse-pairing.dto.js.map +1 -0
  460. package/dist/pairing/dto/claim-pairing.dto.d.ts +11 -0
  461. package/dist/pairing/dto/claim-pairing.dto.d.ts.map +1 -0
  462. package/dist/pairing/dto/claim-pairing.dto.js +35 -0
  463. package/dist/pairing/dto/claim-pairing.dto.js.map +1 -0
  464. package/dist/pairing/dto/confirm-pairing.dto.d.ts +10 -0
  465. package/dist/pairing/dto/confirm-pairing.dto.d.ts.map +1 -0
  466. package/dist/pairing/dto/confirm-pairing.dto.js +24 -0
  467. package/dist/pairing/dto/confirm-pairing.dto.js.map +1 -0
  468. package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts +5 -0
  469. package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts.map +1 -0
  470. package/dist/pairing/dto/poll-reverse-pairing.dto.js +24 -0
  471. package/dist/pairing/dto/poll-reverse-pairing.dto.js.map +1 -0
  472. package/dist/pairing/dto/start-pairing.dto.d.ts +11 -0
  473. package/dist/pairing/dto/start-pairing.dto.d.ts.map +1 -0
  474. package/dist/pairing/dto/start-pairing.dto.js +30 -0
  475. package/dist/pairing/dto/start-pairing.dto.js.map +1 -0
  476. package/dist/pairing/dto/start-reverse-pairing.dto.d.ts +24 -0
  477. package/dist/pairing/dto/start-reverse-pairing.dto.d.ts.map +1 -0
  478. package/dist/pairing/dto/start-reverse-pairing.dto.js +47 -0
  479. package/dist/pairing/dto/start-reverse-pairing.dto.js.map +1 -0
  480. package/dist/pairing/pairing.controller.d.ts +118 -0
  481. package/dist/pairing/pairing.controller.d.ts.map +1 -0
  482. package/dist/pairing/pairing.controller.js +296 -0
  483. package/dist/pairing/pairing.controller.js.map +1 -0
  484. package/dist/pairing/pairing.module.d.ts +10 -0
  485. package/dist/pairing/pairing.module.d.ts.map +1 -0
  486. package/dist/pairing/pairing.module.js +40 -0
  487. package/dist/pairing/pairing.module.js.map +1 -0
  488. package/dist/pairing/pairing.service.d.ts +238 -0
  489. package/dist/pairing/pairing.service.d.ts.map +1 -0
  490. package/dist/pairing/pairing.service.js +495 -0
  491. package/dist/pairing/pairing.service.js.map +1 -0
  492. package/dist/pdf/pdf.service.d.ts +11 -6
  493. package/dist/pdf/pdf.service.d.ts.map +1 -1
  494. package/dist/pdf/pdf.service.js +60 -20
  495. package/dist/pdf/pdf.service.js.map +1 -1
  496. package/dist/presence/presence.controller.d.ts +16 -0
  497. package/dist/presence/presence.controller.d.ts.map +1 -0
  498. package/dist/presence/presence.controller.js +60 -0
  499. package/dist/presence/presence.controller.js.map +1 -0
  500. package/dist/presence/presence.listener.d.ts +29 -0
  501. package/dist/presence/presence.listener.d.ts.map +1 -0
  502. package/dist/presence/presence.listener.js +82 -0
  503. package/dist/presence/presence.listener.js.map +1 -0
  504. package/dist/presence/presence.module.d.ts +3 -0
  505. package/dist/presence/presence.module.d.ts.map +1 -0
  506. package/dist/presence/presence.module.js +32 -0
  507. package/dist/presence/presence.module.js.map +1 -0
  508. package/dist/presence/presence.service.d.ts +42 -0
  509. package/dist/presence/presence.service.d.ts.map +1 -0
  510. package/dist/presence/presence.service.js +147 -0
  511. package/dist/presence/presence.service.js.map +1 -0
  512. package/dist/profile/dto/delete-account.dto.d.ts +8 -0
  513. package/dist/profile/dto/delete-account.dto.d.ts.map +1 -0
  514. package/dist/profile/dto/delete-account.dto.js +22 -0
  515. package/dist/profile/dto/delete-account.dto.js.map +1 -0
  516. package/dist/profile/events/profile-account-deleted.event.d.ts +12 -0
  517. package/dist/profile/events/profile-account-deleted.event.d.ts.map +1 -0
  518. package/dist/profile/events/profile-account-deleted.event.js +17 -0
  519. package/dist/profile/events/profile-account-deleted.event.js.map +1 -0
  520. package/dist/profile/profile.controller.d.ts +32 -15
  521. package/dist/profile/profile.controller.d.ts.map +1 -1
  522. package/dist/profile/profile.controller.js +75 -46
  523. package/dist/profile/profile.controller.js.map +1 -1
  524. package/dist/profile/profile.service.d.ts +41 -18
  525. package/dist/profile/profile.service.d.ts.map +1 -1
  526. package/dist/profile/profile.service.js +133 -48
  527. package/dist/profile/profile.service.js.map +1 -1
  528. package/dist/realtime/realtime.gateway.d.ts +48 -0
  529. package/dist/realtime/realtime.gateway.d.ts.map +1 -0
  530. package/dist/realtime/realtime.gateway.js +156 -0
  531. package/dist/realtime/realtime.gateway.js.map +1 -0
  532. package/dist/realtime/realtime.module.d.ts +8 -0
  533. package/dist/realtime/realtime.module.d.ts.map +1 -0
  534. package/dist/realtime/realtime.module.js +29 -0
  535. package/dist/realtime/realtime.module.js.map +1 -0
  536. package/dist/realtime/realtime.service.d.ts +51 -0
  537. package/dist/realtime/realtime.service.d.ts.map +1 -0
  538. package/dist/realtime/realtime.service.js +177 -0
  539. package/dist/realtime/realtime.service.js.map +1 -0
  540. package/dist/redis/redis-pubsub.d.ts +27 -0
  541. package/dist/redis/redis-pubsub.d.ts.map +1 -0
  542. package/dist/redis/redis-pubsub.js +184 -0
  543. package/dist/redis/redis-pubsub.js.map +1 -0
  544. package/dist/role/guards/role.guard.d.ts +5 -0
  545. package/dist/role/guards/role.guard.d.ts.map +1 -1
  546. package/dist/role/guards/role.guard.js +41 -39
  547. package/dist/role/guards/role.guard.js.map +1 -1
  548. package/dist/role/role.controller.d.ts +3 -3
  549. package/dist/role/role.service.d.ts +3 -3
  550. package/dist/session/session.controller.d.ts +2 -0
  551. package/dist/session/session.controller.d.ts.map +1 -1
  552. package/dist/session/session.service.d.ts +39 -0
  553. package/dist/session/session.service.d.ts.map +1 -1
  554. package/dist/session/session.service.js +91 -8
  555. package/dist/session/session.service.js.map +1 -1
  556. package/dist/setting/brand-asset.service.d.ts +48 -0
  557. package/dist/setting/brand-asset.service.d.ts.map +1 -0
  558. package/dist/setting/brand-asset.service.js +130 -0
  559. package/dist/setting/brand-asset.service.js.map +1 -0
  560. package/dist/setting/dto/create.dto.d.ts.map +1 -1
  561. package/dist/setting/dto/create.dto.js +9 -2
  562. package/dist/setting/dto/create.dto.js.map +1 -1
  563. package/dist/setting/setting.controller.d.ts +5 -5
  564. package/dist/setting/setting.module.d.ts.map +1 -1
  565. package/dist/setting/setting.module.js +3 -2
  566. package/dist/setting/setting.module.js.map +1 -1
  567. package/dist/setting/setting.service.d.ts +41 -5
  568. package/dist/setting/setting.service.d.ts.map +1 -1
  569. package/dist/setting/setting.service.js +113 -1
  570. package/dist/setting/setting.service.js.map +1 -1
  571. package/dist/token/token.service.d.ts +23 -2
  572. package/dist/token/token.service.d.ts.map +1 -1
  573. package/dist/token/token.service.js +39 -4
  574. package/dist/token/token.service.js.map +1 -1
  575. package/dist/user/dto/create-with-email-and-password.dto.d.ts +2 -0
  576. package/dist/user/dto/create-with-email-and-password.dto.d.ts.map +1 -1
  577. package/dist/user/dto/create-with-email-and-password.dto.js +5 -0
  578. package/dist/user/dto/create-with-email-and-password.dto.js.map +1 -1
  579. package/dist/user/dto/query-user-mail-list.dto.d.ts +5 -0
  580. package/dist/user/dto/query-user-mail-list.dto.d.ts.map +1 -0
  581. package/dist/user/dto/query-user-mail-list.dto.js +25 -0
  582. package/dist/user/dto/query-user-mail-list.dto.js.map +1 -0
  583. package/dist/user/user-credential.util.d.ts +19 -0
  584. package/dist/user/user-credential.util.d.ts.map +1 -0
  585. package/dist/user/user-credential.util.js +32 -0
  586. package/dist/user/user-credential.util.js.map +1 -0
  587. package/dist/user/user.controller.d.ts +24 -26
  588. package/dist/user/user.controller.d.ts.map +1 -1
  589. package/dist/user/user.controller.js +18 -3
  590. package/dist/user/user.controller.js.map +1 -1
  591. package/dist/user/user.service.d.ts +71 -29
  592. package/dist/user/user.service.d.ts.map +1 -1
  593. package/dist/user/user.service.js +291 -17
  594. package/dist/user/user.service.js.map +1 -1
  595. package/dist/user-device/user-device.controller.d.ts +54 -0
  596. package/dist/user-device/user-device.controller.d.ts.map +1 -0
  597. package/dist/user-device/user-device.controller.js +103 -0
  598. package/dist/user-device/user-device.controller.js.map +1 -0
  599. package/dist/user-device/user-device.module.d.ts +3 -0
  600. package/dist/user-device/user-device.module.d.ts.map +1 -0
  601. package/dist/user-device/user-device.module.js +26 -0
  602. package/dist/user-device/user-device.module.js.map +1 -0
  603. package/dist/user-device/user-device.service.d.ts +71 -0
  604. package/dist/user-device/user-device.service.d.ts.map +1 -0
  605. package/dist/user-device/user-device.service.js +158 -0
  606. package/dist/user-device/user-device.service.js.map +1 -0
  607. package/dist/utils/device-key.d.ts +23 -0
  608. package/dist/utils/device-key.d.ts.map +1 -0
  609. package/dist/utils/device-key.js +31 -0
  610. package/dist/utils/device-key.js.map +1 -0
  611. package/dist/utils/geo-ip.d.ts +38 -0
  612. package/dist/utils/geo-ip.d.ts.map +1 -0
  613. package/dist/utils/geo-ip.js +122 -0
  614. package/dist/utils/geo-ip.js.map +1 -0
  615. package/dist/utils/locale-context.d.ts +10 -7
  616. package/dist/utils/locale-context.d.ts.map +1 -1
  617. package/dist/utils/locale-context.js +14 -8
  618. package/dist/utils/locale-context.js.map +1 -1
  619. package/dist/utils/security-event-vars.d.ts +56 -0
  620. package/dist/utils/security-event-vars.d.ts.map +1 -0
  621. package/dist/utils/security-event-vars.js +109 -0
  622. package/dist/utils/security-event-vars.js.map +1 -0
  623. package/dist/utils/user-agent.d.ts +19 -0
  624. package/dist/utils/user-agent.d.ts.map +1 -0
  625. package/dist/utils/user-agent.js +36 -0
  626. package/dist/utils/user-agent.js.map +1 -0
  627. package/dist/validators/is-strong-password-with-settings.validator.d.ts.map +1 -1
  628. package/dist/validators/is-strong-password-with-settings.validator.js +11 -0
  629. package/dist/validators/is-strong-password-with-settings.validator.js.map +1 -1
  630. package/dist/validators/service-locator.d.ts +9 -0
  631. package/dist/validators/service-locator.d.ts.map +1 -1
  632. package/dist/validators/service-locator.js +12 -0
  633. package/dist/validators/service-locator.js.map +1 -1
  634. package/dist/webhook-integration/webhook-integration.service.d.ts +5 -0
  635. package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
  636. package/dist/webhook-integration/webhook-integration.service.js +50 -4
  637. package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
  638. package/dist/webhook-integration/webhook-protocol.registry.d.ts +6 -0
  639. package/dist/webhook-integration/webhook-protocol.registry.d.ts.map +1 -1
  640. package/dist/webhook-integration/webhook-protocol.registry.js.map +1 -1
  641. package/dist/whatsapp-sender/whatsapp-sender.module.d.ts +3 -0
  642. package/dist/whatsapp-sender/whatsapp-sender.module.d.ts.map +1 -0
  643. package/dist/whatsapp-sender/whatsapp-sender.module.js +23 -0
  644. package/dist/whatsapp-sender/whatsapp-sender.module.js.map +1 -0
  645. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +50 -0
  646. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -0
  647. package/dist/whatsapp-sender/whatsapp-sender.service.js +224 -0
  648. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -0
  649. package/hedhog/data/integration_provider.yaml +25 -0
  650. package/hedhog/data/mail.yaml +275 -112
  651. package/hedhog/data/mail_layout.yaml +198 -0
  652. package/hedhog/data/menu.yaml +69 -3
  653. package/hedhog/data/role.yaml +16 -0
  654. package/hedhog/data/route.yaml +307 -3
  655. package/hedhog/data/setting_group.yaml +315 -1
  656. package/hedhog/data/setting_subgroup.yaml +8 -0
  657. package/hedhog/frontend/app/_lib/hooks/use-core-access.test.tsx.ejs +125 -0
  658. package/hedhog/frontend/app/_lib/hooks/use-core-access.ts.ejs +29 -0
  659. package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.test.ts.ejs +71 -0
  660. package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.ts.ejs +32 -0
  661. package/hedhog/frontend/app/access-log/page.tsx.ejs +96 -22
  662. package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +17 -1
  663. package/hedhog/frontend/app/account/components/known-devices.tsx.ejs +89 -0
  664. package/hedhog/frontend/app/account/components/mfa-setup-dialog.tsx.ejs +36 -0
  665. package/hedhog/frontend/app/account/components/profile-form.tsx.ejs +2 -1
  666. package/hedhog/frontend/app/account/components/two-factor-auth.tsx.ejs +2 -0
  667. package/hedhog/frontend/app/account/components/user-devices-list.tsx.ejs +186 -0
  668. package/hedhog/frontend/app/account/devices/page.tsx.ejs +5 -0
  669. package/hedhog/frontend/app/account/hooks/use-mfa-setup.ts.ejs +10 -7
  670. package/hedhog/frontend/app/account/layout.tsx.ejs +2 -0
  671. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +7 -4
  672. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +580 -0
  673. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-preview.tsx.ejs +150 -0
  674. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +199 -0
  675. package/hedhog/frontend/app/ai_instruction/_components/prompt-diff.tsx.ejs +63 -0
  676. package/hedhog/frontend/app/ai_instruction/_lib/line-diff.spec.ts.ejs +59 -0
  677. package/hedhog/frontend/app/ai_instruction/_lib/line-diff.ts.ejs +72 -0
  678. package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.spec.ts.ejs +170 -0
  679. package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.ts.ejs +167 -0
  680. package/hedhog/frontend/app/ai_instruction/_lib/types.ts.ejs +99 -0
  681. package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +422 -0
  682. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +298 -0
  683. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +410 -1223
  684. package/hedhog/frontend/app/incidents/page.tsx.ejs +400 -0
  685. package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +153 -84
  686. package/hedhog/frontend/app/mail/layout/page.tsx.ejs +344 -0
  687. package/hedhog/frontend/app/mail/log/page.tsx.ejs +210 -3
  688. package/hedhog/frontend/app/mail/template/page.tsx.ejs +292 -200
  689. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +129 -17
  690. package/hedhog/frontend/app/pages/_components/page-delete-dialog.tsx.ejs +343 -0
  691. package/hedhog/frontend/app/pages/_components/page-detail-sheet.tsx.ejs +438 -0
  692. package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1009 -0
  693. package/hedhog/frontend/app/pages/_components/system-page-types.ts.ejs +56 -0
  694. package/hedhog/frontend/app/pages/_components/use-system-pages.ts.ejs +171 -0
  695. package/hedhog/frontend/app/pages/page.tsx.ejs +514 -0
  696. package/hedhog/frontend/app/users/active-session.tsx.ejs +58 -11
  697. package/hedhog/frontend/app/users/page.tsx.ejs +186 -21
  698. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +202 -0
  699. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +170 -0
  700. package/hedhog/frontend/app/users/user-activity-timeline.tsx.ejs +250 -0
  701. package/hedhog/frontend/app/users/user-devices.tsx.ejs +89 -0
  702. package/hedhog/frontend/app/users/user-logs.tsx.ejs +13 -1
  703. package/hedhog/frontend/app/users/user-mails.tsx.ejs +399 -0
  704. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +106 -99
  705. package/hedhog/frontend/messages/en.json +643 -49
  706. package/hedhog/frontend/messages/pt.json +643 -49
  707. package/hedhog/table/access_log.yaml +7 -0
  708. package/hedhog/table/ai_agent.yaml +1 -0
  709. package/hedhog/table/ai_instruction.yaml +15 -0
  710. package/hedhog/table/file.yaml +8 -0
  711. package/hedhog/table/leaked_password.yaml +18 -0
  712. package/hedhog/table/mail_delivery_event.yaml +76 -0
  713. package/hedhog/table/mail_layout.yaml +35 -0
  714. package/hedhog/table/mail_sent.yaml +23 -0
  715. package/hedhog/table/mail_var.yaml +4 -0
  716. package/hedhog/table/setting.yaml +1 -0
  717. package/hedhog/table/system_incident.yaml +59 -0
  718. package/hedhog/table/user_activity.yaml +9 -0
  719. package/hedhog/table/user_device.yaml +52 -0
  720. package/hedhog/table/user_presence.yaml +36 -0
  721. package/hedhog/table/user_session.yaml +20 -1
  722. package/package.json +7 -2
  723. package/src/access-log/access-log.controller.ts +1 -0
  724. package/src/access-log/access-log.interceptor.ts +9 -3
  725. package/src/access-log/access-log.service.spec.ts +33 -2
  726. package/src/access-log/access-log.service.ts +38 -0
  727. package/src/access-log/dto/query-access-log.dto.ts +5 -0
  728. package/src/ai/ai-attachment.fragments.spec.ts +319 -0
  729. package/src/ai/ai-attachment.fragments.ts +35 -0
  730. package/src/ai/ai.controller.ts +9 -0
  731. package/src/ai/ai.module.ts +3 -2
  732. package/src/ai/ai.prompts.ts +38 -0
  733. package/src/ai/ai.service.spec.ts +280 -0
  734. package/src/ai/ai.service.ts +475 -82
  735. package/src/ai/dto/chat.dto.ts +33 -3
  736. package/src/ai/dto/create-agent.dto.ts +2 -2
  737. package/src/ai/dto/richtext-edit-html.dto.ts +11 -0
  738. package/src/ai/dto/update-agent.dto.ts +2 -2
  739. package/src/ai/richtext-ai.prompts.ts +57 -0
  740. package/src/ai/richtext-ai.service.ts +109 -0
  741. package/src/ai-instruction/ai-instruction.controller.ts +40 -9
  742. package/src/ai-instruction/ai-instruction.module.ts +13 -2
  743. package/src/ai-instruction/ai-instruction.service.spec.ts +658 -0
  744. package/src/ai-instruction/ai-instruction.service.ts +661 -62
  745. package/src/ai-instruction/ai-prompt-builder.service.ts +10 -1
  746. package/src/ai-instruction/ai-prompt-registry.ts +87 -0
  747. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +375 -0
  748. package/src/ai-instruction/ai-prompt-resolver.service.ts +295 -0
  749. package/src/ai-instruction/ai-prompt-template.util.spec.ts +162 -0
  750. package/src/ai-instruction/ai-prompt-template.util.ts +199 -0
  751. package/src/ai-instruction/dto/create-ai-instruction.dto.ts +39 -3
  752. package/src/ai-instruction/dto/preview-ai-instruction.dto.ts +26 -0
  753. package/src/ai-instruction/dto/update-ai-instruction.dto.ts +42 -1
  754. package/src/ai-instruction/types/ai-instruction.types.ts +24 -1
  755. package/src/auth/auth.controller.ts +78 -13
  756. package/src/auth/auth.module.ts +2 -0
  757. package/src/auth/auth.service.spec.ts +386 -7
  758. package/src/auth/auth.service.ts +435 -81
  759. package/src/auth/dto/confirm-email.dto.ts +7 -0
  760. package/src/auth/dto/resend-confirmation.dto.ts +20 -0
  761. package/src/authorize/authorize.controller.ts +2 -0
  762. package/src/authorize/authorize.service.spec.ts +23 -0
  763. package/src/authorize/authorize.service.ts +8 -0
  764. package/src/captcha/captcha.module.ts +10 -0
  765. package/src/captcha/captcha.service.spec.ts +210 -0
  766. package/src/captcha/captcha.service.ts +191 -0
  767. package/src/challenge/challenge.service.spec.ts +112 -4
  768. package/src/challenge/challenge.service.ts +131 -17
  769. package/src/core.module.ts +46 -1
  770. package/src/file/file.controller.ts +54 -4
  771. package/src/file/file.service.spec.ts +275 -0
  772. package/src/file/file.service.ts +468 -16
  773. package/src/file/image-optimization.service.spec.ts +92 -0
  774. package/src/file/image-optimization.service.ts +202 -0
  775. package/src/file/provider/abstract.provider.ts +23 -0
  776. package/src/file/provider/gcs.provider.ts +17 -0
  777. package/src/file/provider/local.provider.ts +21 -0
  778. package/src/file/provider/s3.provider.ts +25 -0
  779. package/src/file/provider/spaces.provider.ts +26 -0
  780. package/src/impersonation/dto/redeem-impersonation.dto.ts +8 -0
  781. package/src/impersonation/dto/start-impersonation.dto.ts +13 -0
  782. package/src/impersonation/impersonation-restrictions.ts +84 -0
  783. package/src/impersonation/impersonation.controller.ts +109 -0
  784. package/src/impersonation/impersonation.module.ts +31 -0
  785. package/src/impersonation/impersonation.service.spec.ts +427 -0
  786. package/src/impersonation/impersonation.service.ts +577 -0
  787. package/src/incident/incident-notifier.service.spec.ts +205 -0
  788. package/src/incident/incident-notifier.service.ts +241 -0
  789. package/src/incident/incident.controller.ts +38 -0
  790. package/src/incident/incident.module.ts +19 -0
  791. package/src/incident/incident.service.spec.ts +150 -0
  792. package/src/incident/incident.service.ts +209 -0
  793. package/src/index.ts +58 -0
  794. package/src/integration/services/outbox-polling.coordinator.spec.ts +90 -0
  795. package/src/integration/services/outbox-polling.coordinator.ts +62 -40
  796. package/src/integration/services/outbox.service.spec.ts +8 -0
  797. package/src/integration/services/outbox.service.ts +19 -13
  798. package/src/integration-profile/dto/test.dto.ts +19 -0
  799. package/src/integration-profile/integration-profile.controller.ts +10 -1
  800. package/src/integration-profile/integration-profile.module.spec.ts +51 -0
  801. package/src/integration-profile/integration-profile.module.ts +23 -4
  802. package/src/integration-profile/integration-profile.secrets.ts +12 -1
  803. package/src/integration-profile/integration-profile.service.spec.ts +279 -0
  804. package/src/integration-profile/integration-profile.service.ts +120 -124
  805. package/src/integration-profile/integration-profile.utils.spec.ts +22 -0
  806. package/src/integration-profile/integration-profile.utils.ts +78 -3
  807. package/src/integration-profile/testers/ai.testers.ts +165 -0
  808. package/src/integration-profile/testers/captcha.testers.spec.ts +92 -0
  809. package/src/integration-profile/testers/captcha.testers.ts +139 -0
  810. package/src/integration-profile/testers/email.testers.ts +194 -0
  811. package/src/integration-profile/testers/http-probe.spec.ts +153 -0
  812. package/src/integration-profile/testers/http-probe.ts +171 -0
  813. package/src/integration-profile/testers/index.ts +30 -0
  814. package/src/integration-profile/testers/infrastructure.testers.ts +122 -0
  815. package/src/integration-profile/testers/integration-tester.registry.spec.ts +75 -0
  816. package/src/integration-profile/testers/integration-tester.registry.ts +43 -0
  817. package/src/integration-profile/testers/integration-tester.types.ts +61 -0
  818. package/src/integration-profile/testers/messaging.testers.ts +102 -0
  819. package/src/integration-profile/testers/oauth.testers.spec.ts +220 -0
  820. package/src/integration-profile/testers/oauth.testers.ts +305 -0
  821. package/src/integration-profile/testers/payment.testers.ts +185 -0
  822. package/src/integration-profile/testers/remaining.testers.spec.ts +401 -0
  823. package/src/integration-profile/testers/storage.testers.spec.ts +185 -0
  824. package/src/integration-profile/testers/storage.testers.ts +226 -0
  825. package/src/integration-profile/testers/tester-coverage.spec.ts +58 -0
  826. package/src/language/en.json +15 -2
  827. package/src/language/pt.json +15 -2
  828. package/src/leaked-password/README.md +83 -0
  829. package/src/leaked-password/leaked-password.controller.ts +52 -0
  830. package/src/leaked-password/leaked-password.module.ts +18 -0
  831. package/src/leaked-password/leaked-password.service.ts +242 -0
  832. package/src/leaked-password/seed/build-seed-sql.mjs +180 -0
  833. package/src/leaked-password/seed/common-passwords.txt +335 -0
  834. package/src/mail/dto/preview.dto.ts +50 -0
  835. package/src/mail/dto/send.dto.ts +58 -1
  836. package/src/mail/mail-template.spec.ts +274 -0
  837. package/src/mail/mail.controller.ts +9 -2
  838. package/src/mail/mail.module.ts +2 -0
  839. package/src/mail/mail.service.spec.ts +422 -6
  840. package/src/mail/mail.service.ts +337 -34
  841. package/src/mail-delivery/mail-delivery-provision.service.ts +66 -0
  842. package/src/mail-delivery/mail-delivery.constants.ts +31 -0
  843. package/src/mail-delivery/mail-delivery.controller.ts +38 -0
  844. package/src/mail-delivery/mail-delivery.module.ts +23 -0
  845. package/src/mail-delivery/mail-delivery.service.spec.ts +136 -0
  846. package/src/mail-delivery/mail-delivery.service.ts +152 -0
  847. package/src/mail-delivery/ses-event.parser.spec.ts +140 -0
  848. package/src/mail-delivery/ses-event.parser.ts +191 -0
  849. package/src/mail-delivery/ses-webhook.service.spec.ts +170 -0
  850. package/src/mail-delivery/ses-webhook.service.ts +240 -0
  851. package/src/mail-delivery/sns-message.util.spec.ts +163 -0
  852. package/src/mail-delivery/sns-message.util.ts +125 -0
  853. package/src/mail-layout/dto/update.dto.ts +19 -0
  854. package/src/mail-layout/mail-layout.controller.ts +47 -0
  855. package/src/mail-layout/mail-layout.module.ts +22 -0
  856. package/src/mail-layout/mail-layout.service.ts +94 -0
  857. package/src/mail-sent/dto/query-mail-sent-list.dto.ts +15 -0
  858. package/src/mail-sent/mail-sent.service.ts +46 -2
  859. package/src/mailbox/mailbox-fetcher.registry.ts +132 -0
  860. package/src/mailbox/mailbox.module.ts +14 -0
  861. package/src/mcp-chat/mcp-chat.service.spec.ts +236 -0
  862. package/src/mcp-chat/mcp-chat.service.ts +122 -26
  863. package/src/meeting/meeting-provider.registry.ts +193 -0
  864. package/src/meeting/meeting.constants.ts +53 -0
  865. package/src/meeting/meeting.module.ts +13 -0
  866. package/src/middlewares/locale-injection.middleware.ts +25 -6
  867. package/src/oauth/oauth-token-broker.service.spec.ts +172 -0
  868. package/src/oauth/oauth-token-broker.service.ts +363 -0
  869. package/src/oauth/oauth.module.ts +3 -1
  870. package/src/oauth/oauth.service.ts +8 -2
  871. package/src/oauth/providers/google.provider.ts +49 -15
  872. package/src/observability/monitored-cron.spec.ts +102 -0
  873. package/src/observability/monitored-cron.ts +110 -0
  874. package/src/pairing/dto/approve-reverse-pairing.dto.ts +20 -0
  875. package/src/pairing/dto/claim-pairing.dto.ts +19 -0
  876. package/src/pairing/dto/confirm-pairing.dto.ts +14 -0
  877. package/src/pairing/dto/poll-reverse-pairing.dto.ts +9 -0
  878. package/src/pairing/dto/start-pairing.dto.ts +19 -0
  879. package/src/pairing/dto/start-reverse-pairing.dto.ts +45 -0
  880. package/src/pairing/pairing.controller.ts +246 -0
  881. package/src/pairing/pairing.module.ts +27 -0
  882. package/src/pairing/pairing.service.spec.ts +462 -0
  883. package/src/pairing/pairing.service.ts +614 -0
  884. package/src/pdf/pdf.service.ts +81 -24
  885. package/src/presence/presence.controller.ts +29 -0
  886. package/src/presence/presence.listener.ts +53 -0
  887. package/src/presence/presence.module.ts +19 -0
  888. package/src/presence/presence.service.spec.ts +97 -0
  889. package/src/presence/presence.service.ts +160 -0
  890. package/src/profile/dto/delete-account.dto.ts +11 -0
  891. package/src/profile/events/profile-account-deleted.event.ts +13 -0
  892. package/src/profile/profile.controller.ts +46 -34
  893. package/src/profile/profile.service.ts +164 -46
  894. package/src/realtime/realtime.gateway.ts +138 -0
  895. package/src/realtime/realtime.module.ts +16 -0
  896. package/src/realtime/realtime.service.spec.ts +50 -0
  897. package/src/realtime/realtime.service.ts +187 -0
  898. package/src/redis/redis-pubsub.ts +190 -0
  899. package/src/role/guards/role.guard.spec.ts +75 -0
  900. package/src/role/guards/role.guard.ts +64 -46
  901. package/src/session/session.service.spec.ts +81 -0
  902. package/src/session/session.service.ts +93 -6
  903. package/src/setting/brand-asset.service.ts +137 -0
  904. package/src/setting/dto/create.dto.ts +13 -2
  905. package/src/setting/setting.module.ts +3 -2
  906. package/src/setting/setting.service.spec.ts +135 -1
  907. package/src/setting/setting.service.ts +138 -2
  908. package/src/token/token.service.spec.ts +62 -0
  909. package/src/token/token.service.ts +57 -3
  910. package/src/user/dto/create-with-email-and-password.dto.ts +6 -1
  911. package/src/user/dto/query-user-mail-list.dto.ts +10 -0
  912. package/src/user/user-credential.util.ts +35 -0
  913. package/src/user/user.controller.ts +17 -2
  914. package/src/user/user.service.spec.ts +186 -2
  915. package/src/user/user.service.ts +361 -16
  916. package/src/user-device/user-device.controller.ts +77 -0
  917. package/src/user-device/user-device.module.ts +13 -0
  918. package/src/user-device/user-device.service.spec.ts +234 -0
  919. package/src/user-device/user-device.service.ts +168 -0
  920. package/src/utils/device-key.spec.ts +57 -0
  921. package/src/utils/device-key.ts +32 -0
  922. package/src/utils/geo-ip.spec.ts +134 -0
  923. package/src/utils/geo-ip.ts +93 -0
  924. package/src/utils/locale-context.spec.ts +27 -1
  925. package/src/utils/locale-context.ts +15 -12
  926. package/src/utils/security-event-vars.spec.ts +161 -0
  927. package/src/utils/security-event-vars.ts +153 -0
  928. package/src/utils/user-agent.spec.ts +37 -0
  929. package/src/utils/user-agent.ts +46 -0
  930. package/src/validators/is-strong-password-with-settings.validator.ts +12 -0
  931. package/src/validators/service-locator.ts +15 -0
  932. package/src/webhook-integration/webhook-integration.service.ts +57 -3
  933. package/src/webhook-integration/webhook-protocol.registry.ts +6 -0
  934. package/src/whatsapp-sender/whatsapp-sender.module.ts +10 -0
  935. package/src/whatsapp-sender/whatsapp-sender.service.ts +313 -0
@@ -23,70 +23,81 @@ const axios_1 = __importDefault(require("axios"));
23
23
  const crypto_1 = require("crypto");
24
24
  const pdf_parse_1 = __importDefault(require("pdf-parse"));
25
25
  const ai_execution_service_1 = require("../ai-instruction/ai-execution.service");
26
+ const ai_prompt_resolver_service_1 = require("../ai-instruction/ai-prompt-resolver.service");
26
27
  const file_service_1 = require("../file/file.service");
27
28
  const integration_profile_utils_1 = require("../integration-profile/integration-profile.utils");
28
29
  const setting_service_1 = require("../setting/setting.service");
30
+ const ai_attachment_fragments_1 = require("./ai-attachment.fragments");
31
+ const ai_prompts_1 = require("./ai.prompts");
32
+ /** Fallback call timeout when the active AI integration profile doesn't set `timeout_ms`. */
33
+ const DEFAULT_AI_CALL_TIMEOUT_MS = 120000;
34
+ /** Setting (Settings → AI) que guarda o perfil de integração de cada provider. */
35
+ const AI_PROFILE_SETTING = {
36
+ openai: 'ai-openai-profile-id',
37
+ gemini: 'ai-gemini-profile-id',
38
+ deepseek: 'ai-deepseek-profile-id',
39
+ claude: 'ai-claude-profile-id',
40
+ };
41
+ /**
42
+ * Slug do provider de integração -> provider do chat.
43
+ *
44
+ * Usado quando o chamador escolhe um PERFIL (e não um provider): o provider sai
45
+ * do perfil, não do setting global.
46
+ */
47
+ const PROVIDER_BY_INTEGRATION_SLUG = {
48
+ openai: 'openai',
49
+ gemini: 'gemini',
50
+ deepseek: 'deepseek',
51
+ claude: 'claude',
52
+ };
29
53
  let AiService = AiService_1 = class AiService {
30
- constructor(prismaService, settingService, fileService, aiExecution) {
54
+ constructor(prismaService, settingService, fileService, aiExecution, promptResolver) {
31
55
  this.prismaService = prismaService;
32
56
  this.settingService = settingService;
33
57
  this.fileService = fileService;
34
58
  this.aiExecution = aiExecution;
59
+ this.promptResolver = promptResolver;
35
60
  this.logger = new common_1.Logger(AiService_1.name);
36
61
  }
37
62
  async onModuleInit() {
38
- var _a, _b;
39
63
  try {
40
- const s = await this.settingService.getSettingValues([
41
- 'ai-openai-profile-id',
42
- 'ai-gemini-profile-id',
43
- ]);
44
- if (!String((_a = s['ai-openai-profile-id']) !== null && _a !== void 0 ? _a : '').trim() &&
45
- !String((_b = s['ai-gemini-profile-id']) !== null && _b !== void 0 ? _b : '').trim()) {
64
+ const slugs = Object.values(AI_PROFILE_SETTING);
65
+ const s = await this.settingService.getSettingValues(slugs);
66
+ if (slugs.every((slug) => { var _a; return !String((_a = s[slug]) !== null && _a !== void 0 ? _a : '').trim(); })) {
46
67
  this.logger.warn('No AI profiles configured. Set profiles in Settings → AI.');
47
68
  }
48
69
  }
49
- catch ( /* settings not available yet */_c) { /* settings not available yet */ }
70
+ catch ( /* settings not available yet */_a) { /* settings not available yet */ }
50
71
  }
51
72
  async chat(data, file) {
52
- const provider = data.provider || 'openai';
73
+ var _a;
74
+ const provider = data.provider || (await this.getDefaultProvider());
53
75
  const attachment = await this.resolveAttachment(file, data.file_id);
76
+ const aiProfile = await this.getAiProfile(provider);
77
+ const model = data.model || aiProfile.model || this.getDefaultModel(provider);
78
+ const timeoutMs = (_a = aiProfile.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_AI_CALL_TIMEOUT_MS;
79
+ const params = {
80
+ temperature: data.temperature,
81
+ maxTokens: data.max_tokens,
82
+ responseFormat: data.response_format,
83
+ };
54
84
  const executionId = await this.aiExecution.start({ trigger: 'api', contextSlug: 'ai-chat' });
55
85
  const stepStart = Date.now();
56
86
  try {
57
- if (provider === 'openai') {
58
- const model = data.model || 'gpt-4o-mini';
59
- const { content, usage } = await this.chatWithOpenAi({
60
- message: data.message,
61
- model,
62
- systemPrompt: data.systemPrompt,
63
- attachment,
64
- });
65
- await this.aiExecution.recordStep({
66
- executionId,
67
- stepOrder: 0,
68
- type: 'output',
69
- provider: 'openai',
70
- model,
71
- durationMs: Date.now() - stepStart,
72
- usage,
73
- outputSummary: content.slice(0, 200),
74
- });
75
- await this.aiExecution.finish(executionId, 'completed');
76
- return { provider, model, content };
77
- }
78
- const model = data.model || 'gemini-1.5-flash';
79
- const { content, usage } = await this.chatWithGemini({
87
+ const { content, usage } = await this.withTimeout(this.chatWithProvider(provider, {
80
88
  message: data.message,
81
89
  model,
82
90
  systemPrompt: data.systemPrompt,
83
91
  attachment,
84
- });
92
+ apiKey: aiProfile.apiKey,
93
+ baseUrl: aiProfile.baseUrl,
94
+ params,
95
+ }), timeoutMs);
85
96
  await this.aiExecution.recordStep({
86
97
  executionId,
87
98
  stepOrder: 0,
88
99
  type: 'output',
89
- provider: 'gemini',
100
+ provider,
90
101
  model,
91
102
  durationMs: Date.now() - stepStart,
92
103
  usage,
@@ -100,6 +111,71 @@ let AiService = AiService_1 = class AiService {
100
111
  throw err;
101
112
  }
102
113
  }
114
+ /**
115
+ * Chat driven by prompts stored in `ai_instruction`.
116
+ *
117
+ * Resolves the system and user prompts by slug in one query, applies whatever
118
+ * model params the records declare (falling back to `params` and then to the
119
+ * provider defaults), and reports back where each prompt came from so callers
120
+ * can log a fallback.
121
+ */
122
+ async chatWithPrompt(input) {
123
+ var _a, _b, _c, _d, _e, _f;
124
+ const slugs = input.systemPromptSlug
125
+ ? [input.systemPromptSlug, input.userPromptSlug]
126
+ : [input.userPromptSlug];
127
+ const resolved = await this.promptResolver.resolveMany(slugs.map((slug) => ({ slug, variables: input.variables })));
128
+ const systemPrompt = input.systemPromptSlug
129
+ ? resolved[input.systemPromptSlug]
130
+ : undefined;
131
+ const userPrompt = resolved[input.userPromptSlug];
132
+ // The system prompt represents the call, so its params win over the user one.
133
+ const stored = (0, ai_prompt_resolver_service_1.mergeModelParams)(systemPrompt, userPrompt);
134
+ // Um perfil explícito manda no provider: pedir "openai" e apontar um perfil
135
+ // Claude bateria na API errada com a chave errada.
136
+ const target = await this.resolveProviderAndProfile(input.provider, input.profileSlug);
137
+ const provider = target.provider;
138
+ const aiProfile = target.profile;
139
+ const model = stored.model || aiProfile.model || this.getDefaultModel(provider);
140
+ const timeoutMs = (_a = aiProfile.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_AI_CALL_TIMEOUT_MS;
141
+ const params = {
142
+ temperature: (_b = stored.temperature) !== null && _b !== void 0 ? _b : (_c = input.params) === null || _c === void 0 ? void 0 : _c.temperature,
143
+ maxTokens: (_d = stored.maxTokens) !== null && _d !== void 0 ? _d : (_e = input.params) === null || _e === void 0 ? void 0 : _e.maxTokens,
144
+ responseFormat: (_f = input.params) === null || _f === void 0 ? void 0 : _f.responseFormat,
145
+ };
146
+ const executionId = await this.aiExecution.start({
147
+ trigger: 'api',
148
+ contextSlug: input.contextSlug || input.userPromptSlug,
149
+ });
150
+ const stepStart = Date.now();
151
+ try {
152
+ const { content, usage } = await this.withTimeout(this.chatWithProvider(provider, {
153
+ message: userPrompt.content,
154
+ model,
155
+ systemPrompt: (systemPrompt === null || systemPrompt === void 0 ? void 0 : systemPrompt.content) || undefined,
156
+ apiKey: aiProfile.apiKey,
157
+ baseUrl: aiProfile.baseUrl,
158
+ params,
159
+ }), timeoutMs);
160
+ await this.aiExecution.recordStep({
161
+ executionId,
162
+ stepOrder: 0,
163
+ type: 'output',
164
+ provider,
165
+ model,
166
+ durationMs: Date.now() - stepStart,
167
+ usage,
168
+ outputSummary: content.slice(0, 200),
169
+ });
170
+ await this.aiExecution.finish(executionId, 'completed');
171
+ const promptSources = Object.fromEntries(Object.entries(resolved).map(([slug, prompt]) => [slug, prompt.source]));
172
+ return { provider, model, content, promptSources };
173
+ }
174
+ catch (err) {
175
+ await this.aiExecution.finish(executionId, 'failed', String(err));
176
+ throw err;
177
+ }
178
+ }
103
179
  async createAgent(data) {
104
180
  var _a;
105
181
  const slug = data.slug.trim();
@@ -122,7 +198,7 @@ let AiService = AiService_1 = class AiService {
122
198
  INSERT INTO ai_agent (slug, provider, model, instructions, external_agent_id)
123
199
  VALUES (
124
200
  ${slug},
125
- CAST(${provider} AS ai_agent_provider_enum),
201
+ CAST(${provider} AS ai_agent_provider_7cb93b1143_enum),
126
202
  ${model},
127
203
  ${instructions},
128
204
  ${externalAgentId}
@@ -130,6 +206,33 @@ let AiService = AiService_1 = class AiService {
130
206
  `;
131
207
  return this.findAgentBySlug(slug);
132
208
  }
209
+ /**
210
+ * Creates the agent, or updates it when its stored instructions/model drifted
211
+ * from what the caller now wants.
212
+ *
213
+ * `createAgent` returns the existing row untouched, so a caller that passes
214
+ * instructions on every request would keep whatever the very first call
215
+ * persisted. That silently defeats an editable prompt: the admin would save a
216
+ * change and the agent would go on using the original text.
217
+ */
218
+ async upsertAgent(data) {
219
+ var _a;
220
+ const existing = await this.findAgentBySlug(data.slug.trim());
221
+ if (!existing) {
222
+ return this.createAgent(data);
223
+ }
224
+ const instructions = ((_a = data.instructions) === null || _a === void 0 ? void 0 : _a.trim()) || null;
225
+ const model = data.model || existing.model;
226
+ const unchanged = (instructions === null || instructions === existing.instructions) &&
227
+ model === existing.model;
228
+ if (unchanged) {
229
+ return existing;
230
+ }
231
+ return this.updateAgent(existing.id, {
232
+ instructions: instructions !== null && instructions !== void 0 ? instructions : undefined,
233
+ model: model !== null && model !== void 0 ? model : undefined,
234
+ });
235
+ }
133
236
  async listAgents(paginationParams) {
134
237
  var _a;
135
238
  const page = Math.max(Number((paginationParams === null || paginationParams === void 0 ? void 0 : paginationParams.page) || 1), 1);
@@ -198,7 +301,7 @@ let AiService = AiService_1 = class AiService {
198
301
  await this.prismaService.$executeRaw `
199
302
  UPDATE ai_agent
200
303
  SET slug = ${slug},
201
- provider = CAST(${provider} AS ai_agent_provider_enum),
304
+ provider = CAST(${provider} AS ai_agent_provider_7cb93b1143_enum),
202
305
  model = ${model},
203
306
  instructions = ${instructions},
204
307
  external_agent_id = ${externalAgentId},
@@ -232,22 +335,8 @@ let AiService = AiService_1 = class AiService {
232
335
  if (!agent) {
233
336
  throw new common_1.NotFoundException(`AI agent with slug "${slug}" was not found.`);
234
337
  }
235
- if (agent.provider === 'openai') {
236
- if (agent.external_agent_id && !attachment) {
237
- const content = await this.chatWithOpenAiAssistant(agent.external_agent_id, data.message);
238
- return {
239
- slug: agent.slug,
240
- provider: agent.provider,
241
- model: agent.model,
242
- content,
243
- };
244
- }
245
- const { content } = await this.chatWithOpenAi({
246
- message: data.message,
247
- model: agent.model || this.getDefaultModel('openai'),
248
- systemPrompt: agent.instructions || undefined,
249
- attachment,
250
- });
338
+ if (agent.provider === 'openai' && agent.external_agent_id && !attachment) {
339
+ const content = await this.chatWithOpenAiAssistant(agent.external_agent_id, data.message);
251
340
  return {
252
341
  slug: agent.slug,
253
342
  provider: agent.provider,
@@ -255,11 +344,14 @@ let AiService = AiService_1 = class AiService {
255
344
  content,
256
345
  };
257
346
  }
258
- const { content } = await this.chatWithGemini({
347
+ const aiProfile = await this.getAiProfile(agent.provider);
348
+ const { content } = await this.chatWithProvider(agent.provider, {
259
349
  message: data.message,
260
- model: agent.model || this.getDefaultModel('gemini'),
350
+ model: agent.model || this.getDefaultModel(agent.provider),
261
351
  systemPrompt: agent.instructions || undefined,
262
352
  attachment,
353
+ apiKey: aiProfile.apiKey,
354
+ baseUrl: aiProfile.baseUrl,
263
355
  });
264
356
  return {
265
357
  slug: agent.slug,
@@ -347,19 +439,82 @@ let AiService = AiService_1 = class AiService {
347
439
  return (result === null || result === void 0 ? void 0 : result[0]) || null;
348
440
  }
349
441
  getDefaultModel(provider) {
350
- if (provider === 'openai') {
351
- return 'gpt-4o-mini';
442
+ if (provider === 'gemini') {
443
+ return 'gemini-1.5-flash';
444
+ }
445
+ if (provider === 'deepseek') {
446
+ return integration_profile_utils_1.DEEPSEEK_DEFAULT_MODEL;
352
447
  }
353
- return 'gemini-1.5-flash';
448
+ if (provider === 'claude') {
449
+ return 'claude-sonnet-4-5';
450
+ }
451
+ return 'gpt-4o-mini';
354
452
  }
355
- async getAiApiKey(provider) {
453
+ /** Default AI provider used when a caller doesn't specify one (Settings → AI). */
454
+ async getDefaultProvider() {
356
455
  var _a;
357
- const slug = provider === 'openai' ? 'ai-openai-profile-id' : 'ai-gemini-profile-id';
456
+ const settings = await this.settingService.getSettingValues(['ai-default-provider']);
457
+ const value = String((_a = settings['ai-default-provider']) !== null && _a !== void 0 ? _a : '').trim();
458
+ return value in AI_PROFILE_SETTING ? value : 'openai';
459
+ }
460
+ /**
461
+ * Envia o chat ao provider certo.
462
+ *
463
+ * O DeepSeek expõe a mesma API de `/chat/completions` da OpenAI, então reusa o
464
+ * caminho da OpenAI trocando a base URL — só não aceita imagens, porque os
465
+ * modelos `deepseek-chat`/`deepseek-reasoner` não têm visão.
466
+ */
467
+ chatWithProvider(provider, input) {
468
+ if (provider === 'gemini') {
469
+ return this.chatWithGemini(input);
470
+ }
471
+ if (provider === 'claude') {
472
+ return this.chatWithClaude(input);
473
+ }
474
+ if (provider === 'deepseek') {
475
+ return this.chatWithOpenAi(Object.assign(Object.assign({}, input), { provider, baseUrl: input.baseUrl || integration_profile_utils_1.DEEPSEEK_API_BASE_URL, supportsImages: false }));
476
+ }
477
+ return this.chatWithOpenAi(input);
478
+ }
479
+ async getAiApiKey(provider) {
480
+ return (await this.getAiProfile(provider)).apiKey;
481
+ }
482
+ /**
483
+ * Resolve provider e credenciais juntos.
484
+ *
485
+ * Com `profileSlug`, o provider vem do perfil — o chamador escolheu uma conta
486
+ * concreta, e o setting global do provider não tem nada a dizer sobre ela.
487
+ */
488
+ async resolveProviderAndProfile(provider, profileSlug) {
489
+ const slug = String(profileSlug !== null && profileSlug !== void 0 ? profileSlug : '').trim();
490
+ if (!slug) {
491
+ const resolvedProvider = provider || (await this.getDefaultProvider());
492
+ return {
493
+ provider: resolvedProvider,
494
+ profile: await this.getAiProfile(resolvedProvider),
495
+ };
496
+ }
497
+ const profile = await this.loadAiProfileBySlug(slug);
498
+ const providerSlug = profile.providerSlug;
499
+ const mapped = PROVIDER_BY_INTEGRATION_SLUG[providerSlug];
500
+ if (!mapped) {
501
+ throw new common_1.BadRequestException(`AI profile "${slug}" uses provider "${providerSlug}", which is not supported for chat. ` +
502
+ `Use one of: ${Object.keys(PROVIDER_BY_INTEGRATION_SLUG).join(', ')}.`);
503
+ }
504
+ return { provider: mapped, profile: profile.config };
505
+ }
506
+ /** Resolves the active AI integration profile's credentials plus its optional model/timeout overrides. */
507
+ async getAiProfile(provider) {
508
+ var _a, _b;
509
+ const slug = (_a = AI_PROFILE_SETTING[provider]) !== null && _a !== void 0 ? _a : AI_PROFILE_SETTING.openai;
358
510
  const settings = await this.settingService.getSettingValues([slug]);
359
- const profileSlug = String((_a = settings[slug]) !== null && _a !== void 0 ? _a : '').trim();
511
+ const profileSlug = String((_b = settings[slug]) !== null && _b !== void 0 ? _b : '').trim();
360
512
  if (!profileSlug) {
361
513
  throw new common_1.BadRequestException(`No ${provider} AI profile configured. Set one in Settings → AI.`);
362
514
  }
515
+ return (await this.loadAiProfileBySlug(profileSlug)).config;
516
+ }
517
+ async loadAiProfileBySlug(profileSlug) {
363
518
  const profile = await this.prismaService.integration_profile.findUnique({
364
519
  where: { slug: profileSlug },
365
520
  include: { integration_provider: { select: { slug: true } } },
@@ -367,40 +522,103 @@ let AiService = AiService_1 = class AiService {
367
522
  if (!profile) {
368
523
  throw new common_1.BadRequestException(`AI profile "${profileSlug}" not found.`);
369
524
  }
370
- const { apiKey } = (0, integration_profile_utils_1.buildAiConfigFromIntegration)(profile.integration_provider.slug, profile.config);
371
- if (!apiKey) {
525
+ const aiConfig = (0, integration_profile_utils_1.buildAiConfigFromIntegration)(profile.integration_provider.slug, profile.config);
526
+ if (!aiConfig.apiKey) {
372
527
  throw new common_1.BadRequestException(`AI profile "${profileSlug}" has no API key configured.`);
373
528
  }
374
- return apiKey;
529
+ return { providerSlug: profile.integration_provider.slug, config: aiConfig };
375
530
  }
376
- async chatWithOpenAi({ message, model, systemPrompt, attachment, }) {
377
- var _a, _b, _c, _d, _e, _f, _g, _h;
378
- const openai = await this.getAiApiKey('openai');
531
+ /** Rejects with a timeout error if `promise` doesn't settle within `ms`. */
532
+ withTimeout(promise, ms) {
533
+ return new Promise((resolve, reject) => {
534
+ const timer = setTimeout(() => reject(new Error(`AI call timed out after ${ms}ms`)), ms);
535
+ promise.then((value) => {
536
+ clearTimeout(timer);
537
+ resolve(value);
538
+ }, (error) => {
539
+ clearTimeout(timer);
540
+ reject(error);
541
+ });
542
+ });
543
+ }
544
+ async chatWithOpenAi({ message, model, systemPrompt, attachment, apiKey, params, provider = 'openai', baseUrl = 'https://api.openai.com/v1', supportsImages = true, }) {
545
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
546
+ const openai = apiKey !== null && apiKey !== void 0 ? apiKey : (await this.getAiApiKey(provider));
379
547
  const messages = [];
380
548
  if (systemPrompt) {
381
549
  messages.push({ role: 'system', content: systemPrompt });
382
550
  }
383
- const userContent = await this.buildOpenAiUserContent(message, attachment);
551
+ const userContent = await this.buildOpenAiUserContent(message, attachment, supportsImages);
384
552
  messages.push({ role: 'user', content: userContent });
385
- const response = await axios_1.default.post('https://api.openai.com/v1/chat/completions', { model, messages }, {
553
+ const body = (0, ai_prompt_resolver_service_1.applyOpenAiModelParams)({ messages }, { model: null, temperature: (_a = params === null || params === void 0 ? void 0 : params.temperature) !== null && _a !== void 0 ? _a : null, maxTokens: (_b = params === null || params === void 0 ? void 0 : params.maxTokens) !== null && _b !== void 0 ? _b : null }, { model, jsonObject: (params === null || params === void 0 ? void 0 : params.responseFormat) === 'json_object' });
554
+ const response = await axios_1.default.post(`${baseUrl.replace(/\/+$/, '')}/chat/completions`, body, {
386
555
  headers: {
387
556
  Authorization: `Bearer ${openai}`,
388
557
  'Content-Type': 'application/json',
389
558
  },
390
559
  });
391
- const u = (_a = response.data) === null || _a === void 0 ? void 0 : _a.usage;
560
+ const u = (_c = response.data) === null || _c === void 0 ? void 0 : _c.usage;
392
561
  return {
393
- content: ((_e = (_d = (_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.choices) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.message) === null || _e === void 0 ? void 0 : _e.content) || '',
394
- usage: u ? { input: (_f = u.prompt_tokens) !== null && _f !== void 0 ? _f : 0, output: (_g = u.completion_tokens) !== null && _g !== void 0 ? _g : 0, total: (_h = u.total_tokens) !== null && _h !== void 0 ? _h : 0 } : undefined,
562
+ content: ((_g = (_f = (_e = (_d = response.data) === null || _d === void 0 ? void 0 : _d.choices) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.message) === null || _g === void 0 ? void 0 : _g.content) || '',
563
+ usage: u ? { input: (_h = u.prompt_tokens) !== null && _h !== void 0 ? _h : 0, output: (_j = u.completion_tokens) !== null && _j !== void 0 ? _j : 0, total: (_k = u.total_tokens) !== null && _k !== void 0 ? _k : 0 } : undefined,
564
+ };
565
+ }
566
+ /**
567
+ * Anthropic (Claude).
568
+ *
569
+ * A API é diferente da da OpenAI em três pontos que quebram se reusarmos
570
+ * aquele caminho: autentica por `x-api-key` (não Bearer), exige o header de
571
+ * versão, e o system prompt é um campo à parte em vez de uma mensagem com
572
+ * `role: system`. `max_tokens` é obrigatório — sem ele a requisição é
573
+ * recusada, daí o padrão.
574
+ *
575
+ * Anexo não é suportado aqui: a Anthropic recebe imagem como bloco base64, e
576
+ * nenhum chamador do SAC manda anexo para o modelo.
577
+ */
578
+ async chatWithClaude({ message, model, systemPrompt, apiKey, params, }) {
579
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
580
+ const key = apiKey !== null && apiKey !== void 0 ? apiKey : (await this.getAiApiKey('claude'));
581
+ const body = {
582
+ model,
583
+ max_tokens: (_a = params === null || params === void 0 ? void 0 : params.maxTokens) !== null && _a !== void 0 ? _a : 4096,
584
+ messages: [{ role: 'user', content: message }],
585
+ };
586
+ if (systemPrompt)
587
+ body.system = systemPrompt;
588
+ if ((params === null || params === void 0 ? void 0 : params.temperature) !== undefined && (params === null || params === void 0 ? void 0 : params.temperature) !== null) {
589
+ body.temperature = params.temperature;
590
+ }
591
+ const response = await axios_1.default.post('https://api.anthropic.com/v1/messages', body, {
592
+ headers: {
593
+ 'x-api-key': key,
594
+ 'anthropic-version': '2023-06-01',
595
+ 'Content-Type': 'application/json',
596
+ },
597
+ });
598
+ const content = (_e = (_d = (_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text) !== null && _e !== void 0 ? _e : '';
599
+ const u = (_f = response.data) === null || _f === void 0 ? void 0 : _f.usage;
600
+ return {
601
+ content,
602
+ usage: u
603
+ ? {
604
+ input: (_g = u.input_tokens) !== null && _g !== void 0 ? _g : 0,
605
+ output: (_h = u.output_tokens) !== null && _h !== void 0 ? _h : 0,
606
+ total: ((_j = u.input_tokens) !== null && _j !== void 0 ? _j : 0) + ((_k = u.output_tokens) !== null && _k !== void 0 ? _k : 0),
607
+ }
608
+ : undefined,
395
609
  };
396
610
  }
397
611
  async createOpenAiAssistant({ slug, model, instructions, }) {
398
612
  var _a;
399
613
  const openai = await this.getAiApiKey('openai');
614
+ const defaultInstructions = await this.promptResolver.resolve({
615
+ slug: ai_prompts_1.CORE_AI_PROMPT_SLUGS.agentDefaultInstructions,
616
+ variables: { slug },
617
+ });
400
618
  const response = await axios_1.default.post('https://api.openai.com/v1/assistants', {
401
619
  name: slug,
402
620
  model,
403
- instructions: instructions || `You are the assistant identified by slug ${slug}.`,
621
+ instructions: instructions || defaultInstructions.content,
404
622
  }, {
405
623
  headers: {
406
624
  Authorization: `Bearer ${openai}`,
@@ -469,22 +687,22 @@ let AiService = AiService_1 = class AiService {
469
687
  const output = (_h = (_g = (_f = assistantMessage === null || assistantMessage === void 0 ? void 0 : assistantMessage.content) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.text) === null || _h === void 0 ? void 0 : _h.value;
470
688
  return output || '';
471
689
  }
472
- async chatWithGemini({ message, model, systemPrompt, attachment, }) {
473
- var _a, _b, _c, _d, _e, _f, _g, _h;
474
- const gemini = await this.getAiApiKey('gemini');
690
+ async chatWithGemini({ message, model, systemPrompt, attachment, apiKey, params, }) {
691
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
692
+ const gemini = apiKey !== null && apiKey !== void 0 ? apiKey : (await this.getAiApiKey('gemini'));
475
693
  const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${gemini}`;
476
694
  const userParts = [{ text: message }];
477
695
  if (attachment) {
478
696
  if (this.isTextMime(attachment.mimeType)) {
479
697
  userParts.push({
480
- text: `\n\n[Attached file: ${attachment.filename}]\n${this.toUtf8Text(attachment.buffer)}`,
698
+ text: (0, ai_attachment_fragments_1.attachedFileBlock)(attachment.filename, this.toUtf8Text(attachment.buffer)),
481
699
  });
482
700
  }
483
701
  else if (this.isPdfMime(attachment.mimeType)) {
484
702
  const pdfText = await this.extractPdfText(attachment.buffer);
485
703
  if (pdfText) {
486
704
  userParts.push({
487
- text: `\n\n[Attached file: ${attachment.filename}]\n${pdfText}`,
705
+ text: (0, ai_attachment_fragments_1.attachedFileBlock)(attachment.filename, pdfText),
488
706
  });
489
707
  }
490
708
  else {
@@ -505,7 +723,7 @@ let AiService = AiService_1 = class AiService {
505
723
  });
506
724
  }
507
725
  }
508
- const payload = {
726
+ let payload = {
509
727
  contents: [{ parts: userParts }],
510
728
  };
511
729
  if (systemPrompt) {
@@ -513,17 +731,18 @@ let AiService = AiService_1 = class AiService {
513
731
  parts: [{ text: systemPrompt }],
514
732
  };
515
733
  }
734
+ payload = (0, ai_prompt_resolver_service_1.applyGeminiModelParams)(payload, { model: null, temperature: (_a = params === null || params === void 0 ? void 0 : params.temperature) !== null && _a !== void 0 ? _a : null, maxTokens: (_b = params === null || params === void 0 ? void 0 : params.maxTokens) !== null && _b !== void 0 ? _b : null }, { jsonObject: (params === null || params === void 0 ? void 0 : params.responseFormat) === 'json_object' });
516
735
  const response = await axios_1.default.post(url, payload, {
517
736
  headers: {
518
737
  'Content-Type': 'application/json',
519
738
  },
520
739
  });
521
- const parts = ((_d = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.candidates) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.parts) || [];
740
+ const parts = ((_f = (_e = (_d = (_c = response.data) === null || _c === void 0 ? void 0 : _c.candidates) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.content) === null || _f === void 0 ? void 0 : _f.parts) || [];
522
741
  const content = parts.map((part) => part.text || '').join('');
523
- const u = (_e = response.data) === null || _e === void 0 ? void 0 : _e.usageMetadata;
742
+ const u = (_g = response.data) === null || _g === void 0 ? void 0 : _g.usageMetadata;
524
743
  return {
525
744
  content,
526
- usage: u ? { input: (_f = u.promptTokenCount) !== null && _f !== void 0 ? _f : 0, output: (_g = u.candidatesTokenCount) !== null && _g !== void 0 ? _g : 0, total: (_h = u.totalTokenCount) !== null && _h !== void 0 ? _h : 0 } : undefined,
745
+ usage: u ? { input: (_h = u.promptTokenCount) !== null && _h !== void 0 ? _h : 0, output: (_j = u.candidatesTokenCount) !== null && _j !== void 0 ? _j : 0, total: (_k = u.totalTokenCount) !== null && _k !== void 0 ? _k : 0 } : undefined,
527
746
  };
528
747
  }
529
748
  async sleep(ms) {
@@ -550,11 +769,11 @@ let AiService = AiService_1 = class AiService {
550
769
  }
551
770
  return null;
552
771
  }
553
- async buildOpenAiUserContent(message, attachment) {
772
+ async buildOpenAiUserContent(message, attachment, supportsImages = true) {
554
773
  if (!attachment) {
555
774
  return message;
556
775
  }
557
- if (this.isImageMime(attachment.mimeType)) {
776
+ if (supportsImages && this.isImageMime(attachment.mimeType)) {
558
777
  const dataUri = `data:${attachment.mimeType};base64,${attachment.buffer.toString('base64')}`;
559
778
  return [
560
779
  { type: 'text', text: message },
@@ -568,12 +787,12 @@ let AiService = AiService_1 = class AiService {
568
787
  else if (this.isPdfMime(attachment.mimeType)) {
569
788
  text =
570
789
  (await this.extractPdfText(attachment.buffer)) ||
571
- `[PDF attachment with unreadable text: ${attachment.filename}]`;
790
+ (0, ai_attachment_fragments_1.unreadablePdfMarker)(attachment.filename);
572
791
  }
573
792
  else {
574
- text = `[Binary attachment: ${attachment.filename} | ${attachment.mimeType} | ${attachment.buffer.length} bytes]`;
793
+ text = (0, ai_attachment_fragments_1.binaryAttachmentMarker)(attachment.filename, attachment.mimeType, attachment.buffer.length);
575
794
  }
576
- return `${message}\n\n[Attached file: ${attachment.filename}]\n${text}`;
795
+ return `${message}${(0, ai_attachment_fragments_1.attachedFileBlock)(attachment.filename, text)}`;
577
796
  }
578
797
  isImageMime(mimeType) {
579
798
  return mimeType.startsWith('image/');
@@ -638,9 +857,11 @@ exports.AiService = AiService = AiService_1 = __decorate([
638
857
  __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => setting_service_1.SettingService))),
639
858
  __param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => file_service_1.FileService))),
640
859
  __param(3, (0, common_1.Inject)((0, common_1.forwardRef)(() => ai_execution_service_1.AiExecutionService))),
860
+ __param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => ai_prompt_resolver_service_1.AiPromptResolverService))),
641
861
  __metadata("design:paramtypes", [api_prisma_1.PrismaService,
642
862
  setting_service_1.SettingService,
643
863
  file_service_1.FileService,
644
- ai_execution_service_1.AiExecutionService])
864
+ ai_execution_service_1.AiExecutionService,
865
+ ai_prompt_resolver_service_1.AiPromptResolverService])
645
866
  ], AiService);
646
867
  //# sourceMappingURL=ai.service.js.map