@hed-hog/core 0.0.400 → 0.0.402

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 (274) hide show
  1. package/dist/access-log/access-log.interceptor.d.ts +10 -0
  2. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  3. package/dist/access-log/access-log.interceptor.js +15 -1
  4. package/dist/access-log/access-log.interceptor.js.map +1 -1
  5. package/dist/ai/ai.controller.d.ts +2 -0
  6. package/dist/ai/ai.controller.d.ts.map +1 -1
  7. package/dist/ai/ai.service.d.ts +86 -2
  8. package/dist/ai/ai.service.d.ts.map +1 -1
  9. package/dist/ai/ai.service.js +304 -23
  10. package/dist/ai/ai.service.js.map +1 -1
  11. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +12 -0
  12. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -1
  13. package/dist/ai-instruction/ai-prompt-resolver.service.js +26 -0
  14. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -1
  15. package/dist/core.module.d.ts.map +1 -1
  16. package/dist/core.module.js +3 -0
  17. package/dist/core.module.js.map +1 -1
  18. package/dist/document-kit/document-kit.module.d.ts +3 -0
  19. package/dist/document-kit/document-kit.module.d.ts.map +1 -0
  20. package/dist/document-kit/document-kit.module.js +24 -0
  21. package/dist/document-kit/document-kit.module.js.map +1 -0
  22. package/dist/document-kit/document-kit.registry.d.ts +55 -0
  23. package/dist/document-kit/document-kit.registry.d.ts.map +1 -0
  24. package/dist/document-kit/document-kit.registry.js +91 -0
  25. package/dist/document-kit/document-kit.registry.js.map +1 -0
  26. package/dist/document-kit/document-kit.service.d.ts +49 -0
  27. package/dist/document-kit/document-kit.service.d.ts.map +1 -0
  28. package/dist/document-kit/document-kit.service.js +135 -0
  29. package/dist/document-kit/document-kit.service.js.map +1 -0
  30. package/dist/file/file-upload-ticket.service.d.ts +1 -1
  31. package/dist/file/file.controller.d.ts +3 -3
  32. package/dist/file/file.service.d.ts +136 -13
  33. package/dist/file/file.service.d.ts.map +1 -1
  34. package/dist/file/file.service.js +297 -27
  35. package/dist/file/file.service.js.map +1 -1
  36. package/dist/file/mcp-file-source.schema.d.ts.map +1 -1
  37. package/dist/file/mcp-file-source.schema.js +8 -5
  38. package/dist/file/mcp-file-source.schema.js.map +1 -1
  39. package/dist/file/provider/abstract.provider.d.ts +33 -0
  40. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  41. package/dist/file/provider/abstract.provider.js +9 -0
  42. package/dist/file/provider/abstract.provider.js.map +1 -1
  43. package/dist/file/provider/s3-multipart.util.d.ts +17 -0
  44. package/dist/file/provider/s3-multipart.util.d.ts.map +1 -0
  45. package/dist/file/provider/s3-multipart.util.js +88 -0
  46. package/dist/file/provider/s3-multipart.util.js.map +1 -0
  47. package/dist/file/provider/s3.provider.d.ts +9 -1
  48. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  49. package/dist/file/provider/s3.provider.js +16 -0
  50. package/dist/file/provider/s3.provider.js.map +1 -1
  51. package/dist/file/provider/spaces.provider.d.ts +10 -1
  52. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  53. package/dist/file/provider/spaces.provider.js +17 -0
  54. package/dist/file/provider/spaces.provider.js.map +1 -1
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +5 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/integration-profile/integration-profile.controller.d.ts +1 -0
  60. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  61. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  62. package/dist/integration-profile/integration-profile.secrets.js +26 -0
  63. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  64. package/dist/integration-profile/integration-profile.service.d.ts +1 -0
  65. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  66. package/dist/integration-profile/integration-profile.service.js +3 -3
  67. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  68. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -1
  69. package/dist/integration-profile/testers/ai.testers.js +46 -8
  70. package/dist/integration-profile/testers/ai.testers.js.map +1 -1
  71. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -1
  72. package/dist/integration-profile/testers/http-probe.js +5 -3
  73. package/dist/integration-profile/testers/http-probe.js.map +1 -1
  74. package/dist/integration-profile/testers/integration-tester.types.d.ts +5 -0
  75. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -1
  76. package/dist/mail/mail.service.d.ts.map +1 -1
  77. package/dist/mail/mail.service.js +16 -1
  78. package/dist/mail/mail.service.js.map +1 -1
  79. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  80. package/dist/mcp/mcp-server.service.js +10 -1
  81. package/dist/mcp/mcp-server.service.js.map +1 -1
  82. package/dist/mcp/mcp.module.d.ts.map +1 -1
  83. package/dist/mcp/mcp.module.js +2 -0
  84. package/dist/mcp/mcp.module.js.map +1 -1
  85. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts +17 -0
  86. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts.map +1 -0
  87. package/dist/mcp/tools/core-access-log.mcp-tools.js +74 -0
  88. package/dist/mcp/tools/core-access-log.mcp-tools.js.map +1 -0
  89. package/dist/mcp/tools/core-files.mcp-tools.js +4 -4
  90. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  91. package/dist/meeting/meeting-provider.registry.d.ts +72 -0
  92. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  93. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  94. package/dist/oauth/oauth-token-broker.service.d.ts +50 -1
  95. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -1
  96. package/dist/oauth/oauth-token-broker.service.js +105 -3
  97. package/dist/oauth/oauth-token-broker.service.js.map +1 -1
  98. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts +6 -0
  99. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  100. package/dist/oauth/providers/microsoft-entra-id.provider.js +30 -4
  101. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  102. package/dist/pdf/document/charts/chart-bar.d.ts +24 -0
  103. package/dist/pdf/document/charts/chart-bar.d.ts.map +1 -0
  104. package/dist/pdf/document/charts/chart-bar.js +117 -0
  105. package/dist/pdf/document/charts/chart-bar.js.map +1 -0
  106. package/dist/pdf/document/charts/chart-donut.d.ts +16 -0
  107. package/dist/pdf/document/charts/chart-donut.d.ts.map +1 -0
  108. package/dist/pdf/document/charts/chart-donut.js +89 -0
  109. package/dist/pdf/document/charts/chart-donut.js.map +1 -0
  110. package/dist/pdf/document/charts/chart-gauge.d.ts +15 -0
  111. package/dist/pdf/document/charts/chart-gauge.d.ts.map +1 -0
  112. package/dist/pdf/document/charts/chart-gauge.js +60 -0
  113. package/dist/pdf/document/charts/chart-gauge.js.map +1 -0
  114. package/dist/pdf/document/charts/chart-line.d.ts +29 -0
  115. package/dist/pdf/document/charts/chart-line.d.ts.map +1 -0
  116. package/dist/pdf/document/charts/chart-line.js +89 -0
  117. package/dist/pdf/document/charts/chart-line.js.map +1 -0
  118. package/dist/pdf/document/charts/chart-primitives.d.ts +64 -0
  119. package/dist/pdf/document/charts/chart-primitives.d.ts.map +1 -0
  120. package/dist/pdf/document/charts/chart-primitives.js +110 -0
  121. package/dist/pdf/document/charts/chart-primitives.js.map +1 -0
  122. package/dist/pdf/document/charts/chart-radar.d.ts +13 -0
  123. package/dist/pdf/document/charts/chart-radar.d.ts.map +1 -0
  124. package/dist/pdf/document/charts/chart-radar.js +83 -0
  125. package/dist/pdf/document/charts/chart-radar.js.map +1 -0
  126. package/dist/pdf/document/charts/chart-scale.d.ts +39 -0
  127. package/dist/pdf/document/charts/chart-scale.d.ts.map +1 -0
  128. package/dist/pdf/document/charts/chart-scale.js +118 -0
  129. package/dist/pdf/document/charts/chart-scale.js.map +1 -0
  130. package/dist/pdf/document/charts/index.d.ts +8 -0
  131. package/dist/pdf/document/charts/index.d.ts.map +1 -0
  132. package/dist/pdf/document/charts/index.js +24 -0
  133. package/dist/pdf/document/charts/index.js.map +1 -0
  134. package/dist/pdf/document/index.d.ts +8 -0
  135. package/dist/pdf/document/index.d.ts.map +1 -0
  136. package/dist/pdf/document/index.js +24 -0
  137. package/dist/pdf/document/index.js.map +1 -0
  138. package/dist/pdf/document/pdf-document.chrome.d.ts +20 -0
  139. package/dist/pdf/document/pdf-document.chrome.d.ts.map +1 -0
  140. package/dist/pdf/document/pdf-document.chrome.js +36 -0
  141. package/dist/pdf/document/pdf-document.chrome.js.map +1 -0
  142. package/dist/pdf/document/pdf-document.css.d.ts +20 -0
  143. package/dist/pdf/document/pdf-document.css.d.ts.map +1 -0
  144. package/dist/pdf/document/pdf-document.css.js +327 -0
  145. package/dist/pdf/document/pdf-document.css.js.map +1 -0
  146. package/dist/pdf/document/pdf-document.renderer.d.ts +10 -0
  147. package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -0
  148. package/dist/pdf/document/pdf-document.renderer.js +226 -0
  149. package/dist/pdf/document/pdf-document.renderer.js.map +1 -0
  150. package/dist/pdf/document/pdf-document.service.d.ts +27 -0
  151. package/dist/pdf/document/pdf-document.service.d.ts.map +1 -0
  152. package/dist/pdf/document/pdf-document.service.js +81 -0
  153. package/dist/pdf/document/pdf-document.service.js.map +1 -0
  154. package/dist/pdf/document/pdf-document.theme.d.ts +41 -0
  155. package/dist/pdf/document/pdf-document.theme.d.ts.map +1 -0
  156. package/dist/pdf/document/pdf-document.theme.js +105 -0
  157. package/dist/pdf/document/pdf-document.theme.js.map +1 -0
  158. package/dist/pdf/document/pdf-document.types.d.ts +164 -0
  159. package/dist/pdf/document/pdf-document.types.d.ts.map +1 -0
  160. package/dist/pdf/document/pdf-document.types.js +18 -0
  161. package/dist/pdf/document/pdf-document.types.js.map +1 -0
  162. package/dist/pdf/pdf.module.d.ts.map +1 -1
  163. package/dist/pdf/pdf.module.js +3 -2
  164. package/dist/pdf/pdf.module.js.map +1 -1
  165. package/dist/pdf/pdf.service.d.ts +75 -1
  166. package/dist/pdf/pdf.service.d.ts.map +1 -1
  167. package/dist/pdf/pdf.service.js +167 -63
  168. package/dist/pdf/pdf.service.js.map +1 -1
  169. package/dist/pdf/templates/commercial-proposal.template.d.ts +96 -0
  170. package/dist/pdf/templates/commercial-proposal.template.d.ts.map +1 -0
  171. package/dist/pdf/templates/commercial-proposal.template.js +276 -0
  172. package/dist/pdf/templates/commercial-proposal.template.js.map +1 -0
  173. package/dist/setting/favicon.controller.d.ts +26 -0
  174. package/dist/setting/favicon.controller.d.ts.map +1 -0
  175. package/dist/setting/favicon.controller.js +130 -0
  176. package/dist/setting/favicon.controller.js.map +1 -0
  177. package/dist/setting/setting.module.d.ts.map +1 -1
  178. package/dist/setting/setting.module.js +2 -1
  179. package/dist/setting/setting.module.js.map +1 -1
  180. package/dist/setting/setting.service.d.ts.map +1 -1
  181. package/dist/setting/setting.service.js +3 -0
  182. package/dist/setting/setting.service.js.map +1 -1
  183. package/dist/task/task.service.d.ts +6 -0
  184. package/dist/task/task.service.d.ts.map +1 -1
  185. package/dist/task/task.service.js +44 -13
  186. package/dist/task/task.service.js.map +1 -1
  187. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +35 -2
  188. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  189. package/dist/whatsapp-sender/whatsapp-sender.service.js +107 -22
  190. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  191. package/hedhog/data/integration_type.yaml +6 -0
  192. package/hedhog/data/route.yaml +8 -0
  193. package/hedhog/data/setting_group.yaml +52 -0
  194. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +85 -2
  195. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +576 -491
  196. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +29 -50
  197. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +146 -50
  198. package/hedhog/frontend/messages/en.json +81 -2
  199. package/hedhog/frontend/messages/pt.json +81 -2
  200. package/hedhog/table/file.yaml +3 -1
  201. package/package.json +5 -5
  202. package/src/access-log/access-log.interceptor.spec.ts +50 -0
  203. package/src/access-log/access-log.interceptor.ts +18 -0
  204. package/src/ai/ai-attachment.fragments.spec.ts +56 -3
  205. package/src/ai/ai.service.responses.spec.ts +429 -0
  206. package/src/ai/ai.service.ts +409 -27
  207. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +44 -0
  208. package/src/ai-instruction/ai-prompt-resolver.service.ts +29 -0
  209. package/src/core.module.ts +3 -0
  210. package/src/document-kit/document-kit.module.ts +12 -0
  211. package/src/document-kit/document-kit.registry.ts +125 -0
  212. package/src/document-kit/document-kit.service.spec.ts +156 -0
  213. package/src/document-kit/document-kit.service.ts +173 -0
  214. package/src/file/file-direct-upload.spec.ts +344 -0
  215. package/src/file/file.service.spec.ts +168 -1
  216. package/src/file/file.service.ts +435 -36
  217. package/src/file/mcp-file-source.schema.ts +8 -5
  218. package/src/file/provider/abstract.provider.ts +57 -0
  219. package/src/file/provider/s3-multipart.spec.ts +123 -0
  220. package/src/file/provider/s3-multipart.util.ts +126 -0
  221. package/src/file/provider/s3.provider.ts +65 -1
  222. package/src/file/provider/spaces.provider.ts +67 -1
  223. package/src/index.ts +5 -0
  224. package/src/integration-profile/integration-profile.secrets.ts +26 -0
  225. package/src/integration-profile/integration-profile.service.ts +1 -0
  226. package/src/integration-profile/testers/ai.testers.ts +70 -5
  227. package/src/integration-profile/testers/http-probe.ts +5 -3
  228. package/src/integration-profile/testers/integration-tester.types.ts +5 -0
  229. package/src/integration-profile/testers/oauth.testers.spec.ts +13 -0
  230. package/src/integration-profile/testers/remaining.testers.spec.ts +65 -1
  231. package/src/integration-profile/testers/tester-coverage.spec.ts +12 -0
  232. package/src/mail/mail.service.spec.ts +25 -0
  233. package/src/mail/mail.service.ts +18 -1
  234. package/src/mcp/mcp-server.service.spec.ts +16 -0
  235. package/src/mcp/mcp-server.service.ts +10 -1
  236. package/src/mcp/mcp.module.ts +2 -0
  237. package/src/mcp/tools/core-access-log.mcp-tools.ts +66 -0
  238. package/src/mcp/tools/core-files.mcp-tools.ts +4 -4
  239. package/src/meeting/meeting-provider.registry.ts +80 -0
  240. package/src/oauth/oauth-token-broker.service.spec.ts +108 -0
  241. package/src/oauth/oauth-token-broker.service.ts +129 -2
  242. package/src/oauth/providers/microsoft-entra-id.provider.spec.ts +133 -0
  243. package/src/oauth/providers/microsoft-entra-id.provider.ts +29 -2
  244. package/src/pdf/document/charts/chart-bar.ts +217 -0
  245. package/src/pdf/document/charts/chart-donut.ts +163 -0
  246. package/src/pdf/document/charts/chart-gauge.ts +94 -0
  247. package/src/pdf/document/charts/chart-line.ts +159 -0
  248. package/src/pdf/document/charts/chart-primitives.ts +188 -0
  249. package/src/pdf/document/charts/chart-radar.ts +136 -0
  250. package/src/pdf/document/charts/chart-scale.spec.ts +93 -0
  251. package/src/pdf/document/charts/chart-scale.ts +141 -0
  252. package/src/pdf/document/charts/charts.spec.ts +157 -0
  253. package/src/pdf/document/charts/index.ts +7 -0
  254. package/src/pdf/document/index.ts +7 -0
  255. package/src/pdf/document/pdf-document.chrome.ts +38 -0
  256. package/src/pdf/document/pdf-document.css.ts +326 -0
  257. package/src/pdf/document/pdf-document.renderer.spec.ts +172 -0
  258. package/src/pdf/document/pdf-document.renderer.ts +317 -0
  259. package/src/pdf/document/pdf-document.service.ts +77 -0
  260. package/src/pdf/document/pdf-document.theme.ts +146 -0
  261. package/src/pdf/document/pdf-document.types.ts +149 -0
  262. package/src/pdf/pdf.module.ts +3 -2
  263. package/src/pdf/pdf.service.spec.ts +131 -0
  264. package/src/pdf/pdf.service.ts +256 -82
  265. package/src/pdf/templates/commercial-proposal.template.spec.ts +177 -0
  266. package/src/pdf/templates/commercial-proposal.template.ts +400 -0
  267. package/src/setting/favicon.controller.spec.ts +92 -0
  268. package/src/setting/favicon.controller.ts +135 -0
  269. package/src/setting/setting.module.ts +2 -1
  270. package/src/setting/setting.service.ts +3 -0
  271. package/src/task/task.service.spec.ts +77 -1
  272. package/src/task/task.service.ts +58 -14
  273. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +263 -0
  274. package/src/whatsapp-sender/whatsapp-sender.service.ts +154 -16
@@ -13,20 +13,19 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  };
14
14
  var WhatsappSenderService_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.WhatsappSenderService = exports.WhatsappSendError = void 0;
16
+ exports.WhatsappSenderService = exports.WhatsappSendError = exports.WHATSAPP_OFFICIAL_ONLY = void 0;
17
+ exports.toTemplateParam = toTemplateParam;
17
18
  const api_prisma_1 = require("@hed-hog/api-prisma");
18
19
  const common_1 = require("@nestjs/common");
19
20
  const integration_profile_utils_1 = require("../integration-profile/integration-profile.utils");
20
- /**
21
- * Erro de envio classificado: `retryable` diz se tentar de novo pode dar
22
- * resultado diferente. Um HTTP 4xx da Graph API (id inexistente, sem
23
- * permissão, token ruim) não muda em cinco minutos; um 5xx ou falha de rede
24
- * pode ser uma instabilidade passageira do provedor.
25
- */
21
+ /** Só a Cloud API da Meta — para envio em volume a quem não é da equipe. */
22
+ exports.WHATSAPP_OFFICIAL_ONLY = ['whatsapp-official'];
26
23
  class WhatsappSendError extends common_1.BadRequestException {
27
- constructor(message, retryable) {
24
+ constructor(message, retryable, reason) {
28
25
  super(message);
29
26
  this.retryable = retryable;
27
+ this.reason = reason;
28
+ this.isTransient = retryable;
30
29
  }
31
30
  }
32
31
  exports.WhatsappSendError = WhatsappSendError;
@@ -43,7 +42,7 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
43
42
  this.logger = new common_1.Logger(WhatsappSenderService_1.name);
44
43
  }
45
44
  async send(input) {
46
- const profile = await this.resolveProfile(input.profileSlug);
45
+ const profile = await this.resolveProfile(input.profileSlug, input.providers);
47
46
  switch (profile.providerSlug) {
48
47
  case 'evolution-api':
49
48
  return this.sendWithEvolution(profile, input);
@@ -54,9 +53,9 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
54
53
  }
55
54
  }
56
55
  /** Diz se há perfil utilizável, para o chamador decidir por um fallback sem tentar o envio. */
57
- async isConfigured(profileSlug) {
56
+ async isConfigured(profileSlug, providers) {
58
57
  try {
59
- const profile = await this.resolveProfile(profileSlug);
58
+ const profile = await this.resolveProfile(profileSlug, providers);
60
59
  if (profile.providerSlug === 'evolution-api') {
61
60
  const { baseUrl, token, instance } = this.readEvolutionConfig(profile);
62
61
  return Boolean(baseUrl && token && instance);
@@ -102,9 +101,10 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
102
101
  }
103
102
  return normalized;
104
103
  }
105
- async resolveProfile(profileSlug) {
104
+ async resolveProfile(profileSlug, providers) {
106
105
  var _a, _b, _c, _d;
107
106
  const slug = String(profileSlug !== null && profileSlug !== void 0 ? profileSlug : '').trim();
107
+ const allowed = (providers === null || providers === void 0 ? void 0 : providers.length) ? [...providers] : null;
108
108
  const profile = slug
109
109
  ? await this.prisma.integration_profile.findUnique({
110
110
  where: { slug },
@@ -114,7 +114,7 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
114
114
  },
115
115
  })
116
116
  : await this.prisma.integration_profile.findFirst({
117
- where: { is_active: true, integration_type: { slug: 'whatsapp' } },
117
+ where: Object.assign({ is_active: true, integration_type: { slug: 'whatsapp' } }, (allowed ? { integration_provider: { slug: { in: allowed } } } : {})),
118
118
  orderBy: { updated_at: 'desc' },
119
119
  include: {
120
120
  integration_provider: { select: { slug: true } },
@@ -124,15 +124,23 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
124
124
  if (!profile) {
125
125
  throw new common_1.NotFoundException(slug
126
126
  ? `Perfil de integração "${slug}" não encontrado.`
127
- : 'Nenhum perfil de integração de WhatsApp ativo encontrado.');
127
+ : allowed
128
+ ? `Nenhum perfil de WhatsApp ativo do provider ${allowed.join(' ou ')} encontrado.`
129
+ : 'Nenhum perfil de integração de WhatsApp ativo encontrado.');
128
130
  }
129
131
  if (((_a = profile.integration_type) === null || _a === void 0 ? void 0 : _a.slug) !== 'whatsapp') {
130
132
  throw new common_1.BadRequestException(`Perfil de integração "${profile.slug}" não é do tipo whatsapp.`);
131
133
  }
134
+ const providerSlug = String((_c = (_b = profile.integration_provider) === null || _b === void 0 ? void 0 : _b.slug) !== null && _c !== void 0 ? _c : '');
135
+ // Perfil escolhido à mão que não é do provider exigido: é configuração, não
136
+ // instabilidade — reenviar daria no mesmo.
137
+ if (allowed && !allowed.includes(providerSlug)) {
138
+ throw new WhatsappSendError(`Perfil de integração "${profile.slug}" usa o provider "${providerSlug}", e este envio só aceita ${allowed.join(' ou ')}.`, false);
139
+ }
132
140
  return {
133
141
  id: profile.id,
134
142
  slug: profile.slug,
135
- providerSlug: String((_c = (_b = profile.integration_provider) === null || _b === void 0 ? void 0 : _b.slug) !== null && _c !== void 0 ? _c : ''),
143
+ providerSlug,
136
144
  config: ((_d = profile.config) !== null && _d !== void 0 ? _d : {}),
137
145
  };
138
146
  }
@@ -174,11 +182,44 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
174
182
  if (!response.ok) {
175
183
  const detail = await response.text().catch(() => '');
176
184
  if (response.status === 401) {
177
- throw new common_1.BadRequestException(`Credenciais do WhatsApp inválidas (401). Verifique o token do perfil "${profile.slug}".`);
185
+ throw new WhatsappSendError(`Credenciais do WhatsApp inválidas (401). Verifique o token do perfil "${profile.slug}".`, false, 'unauthorized');
178
186
  }
179
- throw new common_1.BadRequestException(`Evolution API recusou o envio (HTTP ${response.status}): ${detail.slice(0, 300)}`);
187
+ // Número sem conta no WhatsApp: a Evolution responde 400 com
188
+ // `exists: false`. É dado do cadastro, não instabilidade — reenviar não
189
+ // muda nada, e o chamador precisa saber disso para não insistir.
190
+ if (isEvolutionNumberMissing(detail)) {
191
+ throw new WhatsappSendError(`O número ${target} não tem WhatsApp (Evolution: exists=false).`, false);
192
+ }
193
+ // Sessão da instância caída (celular deslogado ou Baileys reconectando):
194
+ // a Evolution responde 500 "Connection Closed". Segue retentável porque a
195
+ // reconexão costuma ser sozinha; se persistir, quem ler a falha precisa
196
+ // saber que a ação é reconectar a instância, não mexer no envio.
197
+ if (isEvolutionSessionClosed(detail)) {
198
+ throw new WhatsappSendError(`A instância "${instance}" da Evolution está desconectada do WhatsApp (Connection Closed). Reconecte a instância (QR code) do perfil "${profile.slug}".`, true, 'session_closed');
199
+ }
200
+ // Mesmo critério do provider oficial: 4xx é recusa estrutural, 5xx e
201
+ // 429 podem passar numa próxima tentativa.
202
+ throw new WhatsappSendError(`Evolution API recusou o envio (HTTP ${response.status}): ${detail.slice(0, 300)}`, response.status >= 500 || response.status === 429);
180
203
  }
181
204
  }
205
+ /**
206
+ * Número padrão do perfil, mantido pela library `whatsapp` (sync com o WABA
207
+ * ou registro na primeira mensagem recebida).
208
+ *
209
+ * A tabela não é do core: num projeto sem a library `whatsapp` o delegate não
210
+ * existe, e o envio segue sem padrão — cai no erro de phone_number_id ausente.
211
+ */
212
+ async resolveDefaultPhoneNumberId(profileId) {
213
+ var _a;
214
+ const delegate = this.prisma.whatsapp_phone_number;
215
+ if (!(delegate === null || delegate === void 0 ? void 0 : delegate.findFirst))
216
+ return '';
217
+ const found = await delegate.findFirst({
218
+ where: { integration_profile_id: profileId, is_default: true, status: 'active' },
219
+ select: { phone_number_id: true },
220
+ });
221
+ return String((_a = found === null || found === void 0 ? void 0 : found.phone_number_id) !== null && _a !== void 0 ? _a : '').trim();
222
+ }
182
223
  async sendWithOfficial(profile, input) {
183
224
  var _a, _b, _c, _d, _e, _f, _g, _h;
184
225
  const cfg = (0, integration_profile_utils_1.buildWhatsappOfficialConfigFromIntegration)(profile.config);
@@ -194,11 +235,13 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
194
235
  if (!cfg.accessToken) {
195
236
  throw new common_1.BadRequestException(`Perfil de WhatsApp "${profile.slug}" está sem access_token.`);
196
237
  }
197
- // O phone_number_id não vive no perfil: um WABA pode ter vários números,
198
- // então quem envia precisa dizer por qual deles a mensagem sai.
199
- const phoneNumberId = String((_b = (_a = input.phoneNumberId) !== null && _a !== void 0 ? _a : profile.config.phone_number_id) !== null && _b !== void 0 ? _b : '').trim();
238
+ // O phone_number_id não vive no perfil: um WABA pode ter vários números.
239
+ // Quem envia pode dizer por qual deles a mensagem sai; sem isso, vale o
240
+ // número padrão do perfil.
241
+ const phoneNumberId = String((_b = (_a = input.phoneNumberId) !== null && _a !== void 0 ? _a : profile.config.phone_number_id) !== null && _b !== void 0 ? _b : '').trim() ||
242
+ (await this.resolveDefaultPhoneNumberId(profile.id));
200
243
  if (!phoneNumberId) {
201
- throw new common_1.BadRequestException('O provider whatsapp-official exige o phone_number_id do número remetente.');
244
+ throw new common_1.BadRequestException(`Perfil de WhatsApp "${profile.slug}" não tem número padrão: informe o phone_number_id do número remetente ou mande uma mensagem para o número, que ele é registrado.`);
202
245
  }
203
246
  const to = this.normalizeTarget(input.to, 'phone');
204
247
  // A Meta só aceita mensagem iniciada pela empresa através de template
@@ -217,7 +260,7 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
217
260
  type: 'body',
218
261
  parameters: ((_d = input.template.params) !== null && _d !== void 0 ? _d : [input.text]).map((text) => ({
219
262
  type: 'text',
220
- text,
263
+ text: toTemplateParam(text),
221
264
  })),
222
265
  },
223
266
  ],
@@ -257,6 +300,48 @@ exports.WhatsappSenderService = WhatsappSenderService = WhatsappSenderService_1
257
300
  __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => api_prisma_1.PrismaService))),
258
301
  __metadata("design:paramtypes", [api_prisma_1.PrismaService])
259
302
  ], WhatsappSenderService);
303
+ /**
304
+ * Reconhece o 400 da Evolution para destino inexistente:
305
+ * `{"response":{"message":[{"exists":false,"number":"55..."}]}}`.
306
+ */
307
+ function isEvolutionNumberMissing(detail) {
308
+ var _a, _b;
309
+ try {
310
+ const messages = (_b = (_a = JSON.parse(detail)) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.message;
311
+ return (Array.isArray(messages) &&
312
+ messages.some((item) => item && typeof item === 'object' && item.exists === false));
313
+ }
314
+ catch (_c) {
315
+ return false;
316
+ }
317
+ }
318
+ /**
319
+ * Reconhece o 500 da Evolution com a sessão do WhatsApp fechada:
320
+ * `{"response":{"message":"Connection Closed"}}` (às vezes com a string num array).
321
+ */
322
+ function isEvolutionSessionClosed(detail) {
323
+ var _a, _b;
324
+ try {
325
+ const message = (_b = (_a = JSON.parse(detail)) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.message;
326
+ const texts = Array.isArray(message) ? message : [message];
327
+ return texts.some((item) => typeof item === 'string' && /connection closed/i.test(item));
328
+ }
329
+ catch (_c) {
330
+ return false;
331
+ }
332
+ }
333
+ /**
334
+ * A Meta recusa parâmetro de template com quebra de linha, tab ou mais de
335
+ * quatro espaços seguidos (erro 132018) — e o texto que os módulos montam para
336
+ * o WhatsApp vem em parágrafos. Vazio também é recusado.
337
+ */
338
+ function toTemplateParam(text) {
339
+ const flat = String(text !== null && text !== void 0 ? text : '')
340
+ .replace(/\s*[\r\n\t]+\s*/g, ' · ')
341
+ .replace(/ {2,}/g, ' ')
342
+ .trim();
343
+ return flat || '-';
344
+ }
260
345
  /** Evolution espera base64 puro; um data URL vindo do chamador quebraria o envio. */
261
346
  function stripDataUrlPrefix(image) {
262
347
  const match = /^data:[^;]+;base64,(.*)$/i.exec(image);
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-sender.service.js","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whatsapp-sender.service.js","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"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"}
@@ -57,3 +57,9 @@
57
57
  en: Shipping
58
58
  pt: Frete
59
59
  icon: truck
60
+
61
+ - slug: social
62
+ name:
63
+ en: Social Networks
64
+ pt: Redes Sociais
65
+ icon: share-2
@@ -3787,3 +3787,11 @@
3787
3787
  role:
3788
3788
  - where:
3789
3789
  slug: admin
3790
+
3791
+ - tool_name: core.access-log.list
3792
+ type: MCP
3793
+ name: List Access Log
3794
+ relations:
3795
+ role:
3796
+ - where:
3797
+ slug: admin
@@ -329,6 +329,7 @@
329
329
  component: entity-picker
330
330
  entity_filter:
331
331
  typeSlug: ai
332
+ providerSlug: openai
332
333
  name:
333
334
  en: OpenAI Profile
334
335
  pt: Perfil OpenAI
@@ -345,6 +346,7 @@
345
346
  component: entity-picker
346
347
  entity_filter:
347
348
  typeSlug: ai
349
+ providerSlug: gemini
348
350
  name:
349
351
  en: Gemini Profile
350
352
  pt: Perfil Gemini
@@ -361,6 +363,7 @@
361
363
  component: entity-picker
362
364
  entity_filter:
363
365
  typeSlug: ai
366
+ providerSlug: deepseek
364
367
  name:
365
368
  en: DeepSeek Profile
366
369
  pt: Perfil DeepSeek
@@ -1213,6 +1216,11 @@
1213
1216
  # para o arquivo original em vez do arquivo em si.
1214
1217
  - value: Files.Read.All
1215
1218
  order: 15
1219
+ # Necessario para o sistema PUBLICAR no chat da reuniao (o convite da
1220
+ # chamada por codigo). E o unico escopo de ESCRITA em chat que
1221
+ # usamos, e so a conta de servico precisa dele.
1222
+ - value: Chat.ReadWrite
1223
+ order: 16
1216
1224
  subgroup_id:
1217
1225
  where:
1218
1226
  slug: microsoft-entra-id
@@ -2658,4 +2666,48 @@
2658
2666
  pt: Cor hexadecimal principal para PDFs da área Research (padrão #9400B5)
2659
2667
  value: '#9400B5'
2660
2668
  user_override: false
2669
+ - slug: pdf-legal-footer
2670
+ type: string
2671
+ component: input-text
2672
+ name:
2673
+ en: Legal Footer
2674
+ pt: Rodapé Legal
2675
+ description:
2676
+ en: Line repeated in the footer of commercial documents, such as legal name, tax ID and address. Leave empty to show the company name.
2677
+ pt: Linha repetida no rodapé dos documentos comerciais, como razão social, CNPJ e endereço. Deixe vazio para mostrar o nome da empresa.
2678
+ value: ''
2679
+ user_override: false
2680
+ - slug: pdf-partner-line
2681
+ type: string
2682
+ component: input-text
2683
+ name:
2684
+ en: Partner Line
2685
+ pt: Linha de Parceiros
2686
+ description:
2687
+ en: Short line printed on the cover of commercial proposals, such as partnerships or certifications. Leave empty to hide it.
2688
+ pt: Linha curta impressa na capa das propostas comerciais, como parcerias ou certificações. Deixe vazio para ocultar.
2689
+ value: ''
2690
+ user_override: false
2691
+ - slug: pdf-font-family
2692
+ type: string
2693
+ component: input-text
2694
+ name:
2695
+ en: Document Font
2696
+ pt: Fonte dos Documentos
2697
+ description:
2698
+ en: CSS font stack for the body and titles of commercial documents.
2699
+ pt: Pilha de fontes CSS para o corpo e os títulos dos documentos comerciais.
2700
+ value: "'Inter', sans-serif"
2701
+ user_override: false
2702
+ - slug: pdf-font-mono
2703
+ type: string
2704
+ component: input-text
2705
+ name:
2706
+ en: Label Font
2707
+ pt: Fonte dos Rótulos
2708
+ description:
2709
+ en: Monospace CSS font stack for labels, section numbers and the footer of commercial documents.
2710
+ pt: Pilha de fontes CSS monoespaçada para rótulos, números de seção e rodapé dos documentos comerciais.
2711
+ value: "'JetBrains Mono', monospace"
2712
+ user_override: false
2661
2713
 
@@ -179,7 +179,10 @@ describe('SettingField / settings de perfil de integração', () => {
179
179
  });
180
180
 
181
181
  it.each([
182
- ['operations.approval-notifications.whatsapp-integration-profile-id', 'whatsapp'],
182
+ [
183
+ 'operations.approval-notifications.whatsapp-integration-profile-id',
184
+ 'whatsapp',
185
+ ],
183
186
  ['operations.approval-notifications.email-integration-profile-id', 'email'],
184
187
  ['lms-digest-notify-email-profile-id', 'email'],
185
188
  ['lms-digest-notify-whatsapp-profile-id', 'whatsapp'],
@@ -329,7 +332,10 @@ describe('SettingField / settings de perfil de integração', () => {
329
332
  it.each([
330
333
  ['string quebrada', '{'],
331
334
  ['array', [] as unknown as SettingEntityFilter],
332
- ['typeSlug que não é texto', { typeSlug: 42 } as unknown as SettingEntityFilter],
335
+ [
336
+ 'typeSlug que não é texto',
337
+ { typeSlug: 42 } as unknown as SettingEntityFilter,
338
+ ],
333
339
  ])(
334
340
  'cai na rede de segurança com filtro inválido (%s), sem quebrar a tela',
335
341
  async (_caso, filtroInvalido) => {
@@ -396,3 +402,80 @@ describe('SettingField / settings de perfil de integração', () => {
396
402
  );
397
403
  });
398
404
  });
405
+
406
+ describe('SettingField / salvamento automático de campo digitado', () => {
407
+ function numberSetting(value = '10'): Setting {
408
+ return {
409
+ id: 2,
410
+ slug: 'social.media.max-video-mb',
411
+ type: 'number',
412
+ component: 'input-number',
413
+ value,
414
+ user_override: false,
415
+ } as unknown as Setting;
416
+ }
417
+
418
+ const wait = (ms: number) =>
419
+ new Promise((resolve) => setTimeout(resolve, ms));
420
+
421
+ it('não grava enquanto o foco está no campo, só ao sair dele', async () => {
422
+ const { container } = render(<SettingField setting={numberSetting()} />);
423
+ const input = container.querySelector('input') as HTMLInputElement;
424
+
425
+ input.focus();
426
+ fireEvent.change(input, { target: { value: '1' } });
427
+ await wait(700);
428
+ fireEvent.change(input, { target: { value: '1024' } });
429
+ await wait(700);
430
+ expect(setSettingValue).not.toHaveBeenCalled();
431
+
432
+ fireEvent.blur(input);
433
+ expect(setSettingValue).toHaveBeenCalledTimes(1);
434
+ expect(setSettingValue).toHaveBeenCalledWith(
435
+ 'social.media.max-video-mb',
436
+ '1024'
437
+ );
438
+ });
439
+
440
+ it('Enter grava o valor digitado, e sair do campo depois não grava de novo', () => {
441
+ const { container } = render(<SettingField setting={numberSetting()} />);
442
+ const input = container.querySelector('input') as HTMLInputElement;
443
+
444
+ input.focus();
445
+ fireEvent.change(input, { target: { value: '2048' } });
446
+ fireEvent.keyDown(input, { key: 'Enter' });
447
+ fireEvent.blur(input);
448
+
449
+ expect(setSettingValue).toHaveBeenCalledTimes(1);
450
+ expect(setSettingValue).toHaveBeenCalledWith(
451
+ 'social.media.max-video-mb',
452
+ '2048'
453
+ );
454
+ });
455
+
456
+ it('desmontar com edição pendente grava, em vez de descartar', () => {
457
+ const { container, unmount } = render(
458
+ <SettingField setting={numberSetting()} />
459
+ );
460
+ const input = container.querySelector('input') as HTMLInputElement;
461
+
462
+ input.focus();
463
+ fireEvent.change(input, { target: { value: '512' } });
464
+ unmount();
465
+
466
+ expect(setSettingValue).toHaveBeenCalledWith(
467
+ 'social.media.max-video-mb',
468
+ '512'
469
+ );
470
+ });
471
+
472
+ it('sair do campo sem mudar nada não grava', () => {
473
+ const { container } = render(<SettingField setting={numberSetting()} />);
474
+ const input = container.querySelector('input') as HTMLInputElement;
475
+
476
+ input.focus();
477
+ fireEvent.blur(input);
478
+
479
+ expect(setSettingValue).not.toHaveBeenCalled();
480
+ });
481
+ });