@hed-hog/core 0.0.401 → 0.0.404

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 (114) 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/authorize/authorize.controller.d.ts +1 -0
  6. package/dist/authorize/authorize.controller.d.ts.map +1 -1
  7. package/dist/authorize/authorize.service.d.ts +1 -0
  8. package/dist/authorize/authorize.service.d.ts.map +1 -1
  9. package/dist/authorize/authorize.service.js +3 -0
  10. package/dist/authorize/authorize.service.js.map +1 -1
  11. package/dist/file/file-upload-ticket.service.d.ts +1 -1
  12. package/dist/file/file.controller.d.ts +3 -3
  13. package/dist/file/file.service.d.ts +121 -12
  14. package/dist/file/file.service.d.ts.map +1 -1
  15. package/dist/file/file.service.js +245 -3
  16. package/dist/file/file.service.js.map +1 -1
  17. package/dist/file/provider/abstract.provider.d.ts +33 -0
  18. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  19. package/dist/file/provider/abstract.provider.js +9 -0
  20. package/dist/file/provider/abstract.provider.js.map +1 -1
  21. package/dist/file/provider/s3-multipart.util.d.ts +17 -0
  22. package/dist/file/provider/s3-multipart.util.d.ts.map +1 -0
  23. package/dist/file/provider/s3-multipart.util.js +88 -0
  24. package/dist/file/provider/s3-multipart.util.js.map +1 -0
  25. package/dist/file/provider/s3.provider.d.ts +9 -1
  26. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  27. package/dist/file/provider/s3.provider.js +16 -0
  28. package/dist/file/provider/s3.provider.js.map +1 -1
  29. package/dist/file/provider/spaces.provider.d.ts +10 -1
  30. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  31. package/dist/file/provider/spaces.provider.js +17 -0
  32. package/dist/file/provider/spaces.provider.js.map +1 -1
  33. package/dist/integration-profile/integration-profile.controller.d.ts +1 -0
  34. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  35. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  36. package/dist/integration-profile/integration-profile.secrets.js +7 -2
  37. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  38. package/dist/integration-profile/integration-profile.service.d.ts +1 -0
  39. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  40. package/dist/integration-profile/integration-profile.service.js +3 -3
  41. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  42. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -1
  43. package/dist/integration-profile/testers/http-probe.js +5 -3
  44. package/dist/integration-profile/testers/http-probe.js.map +1 -1
  45. package/dist/integration-profile/testers/integration-tester.types.d.ts +5 -0
  46. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -1
  47. package/dist/mail/mail.service.d.ts.map +1 -1
  48. package/dist/mail/mail.service.js +16 -1
  49. package/dist/mail/mail.service.js.map +1 -1
  50. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  51. package/dist/mcp/mcp-server.service.js +10 -1
  52. package/dist/mcp/mcp-server.service.js.map +1 -1
  53. package/dist/pdf/document/pdf-document.css.d.ts.map +1 -1
  54. package/dist/pdf/document/pdf-document.css.js +88 -0
  55. package/dist/pdf/document/pdf-document.css.js.map +1 -1
  56. package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -1
  57. package/dist/pdf/document/pdf-document.renderer.js +73 -0
  58. package/dist/pdf/document/pdf-document.renderer.js.map +1 -1
  59. package/dist/pdf/document/pdf-document.types.d.ts +56 -0
  60. package/dist/pdf/document/pdf-document.types.d.ts.map +1 -1
  61. package/dist/pdf/pdf.service.d.ts +6 -0
  62. package/dist/pdf/pdf.service.d.ts.map +1 -1
  63. package/dist/pdf/pdf.service.js +3 -0
  64. package/dist/pdf/pdf.service.js.map +1 -1
  65. package/dist/setting/setting.service.d.ts.map +1 -1
  66. package/dist/setting/setting.service.js +3 -0
  67. package/dist/setting/setting.service.js.map +1 -1
  68. package/dist/task/task.service.d.ts +6 -0
  69. package/dist/task/task.service.d.ts.map +1 -1
  70. package/dist/task/task.service.js +44 -13
  71. package/dist/task/task.service.js.map +1 -1
  72. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +35 -2
  73. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  74. package/dist/whatsapp-sender/whatsapp-sender.service.js +83 -21
  75. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  76. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +85 -2
  77. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +576 -491
  78. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +29 -50
  79. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +146 -50
  80. package/hedhog/frontend/messages/en.json +46 -20
  81. package/hedhog/frontend/messages/pt.json +46 -20
  82. package/hedhog/table/file.yaml +3 -1
  83. package/package.json +3 -3
  84. package/src/access-log/access-log.interceptor.spec.ts +50 -0
  85. package/src/access-log/access-log.interceptor.ts +18 -0
  86. package/src/authorize/authorize.service.spec.ts +1 -0
  87. package/src/authorize/authorize.service.ts +2 -0
  88. package/src/file/file-direct-upload.spec.ts +344 -0
  89. package/src/file/file.service.ts +363 -2
  90. package/src/file/provider/abstract.provider.ts +57 -0
  91. package/src/file/provider/s3-multipart.spec.ts +123 -0
  92. package/src/file/provider/s3-multipart.util.ts +126 -0
  93. package/src/file/provider/s3.provider.ts +65 -1
  94. package/src/file/provider/spaces.provider.ts +67 -1
  95. package/src/integration-profile/integration-profile.secrets.ts +7 -2
  96. package/src/integration-profile/integration-profile.service.ts +1 -0
  97. package/src/integration-profile/testers/http-probe.ts +5 -3
  98. package/src/integration-profile/testers/integration-tester.types.ts +5 -0
  99. package/src/integration-profile/testers/oauth.testers.spec.ts +13 -0
  100. package/src/integration-profile/testers/tester-coverage.spec.ts +2 -0
  101. package/src/mail/mail.service.spec.ts +25 -0
  102. package/src/mail/mail.service.ts +18 -1
  103. package/src/mcp/mcp-server.service.spec.ts +16 -0
  104. package/src/mcp/mcp-server.service.ts +10 -1
  105. package/src/pdf/document/pdf-document.css.ts +88 -0
  106. package/src/pdf/document/pdf-document.renderer.spec.ts +43 -0
  107. package/src/pdf/document/pdf-document.renderer.ts +102 -0
  108. package/src/pdf/document/pdf-document.types.ts +52 -0
  109. package/src/pdf/pdf.service.ts +11 -0
  110. package/src/setting/setting.service.ts +3 -0
  111. package/src/task/task.service.spec.ts +77 -1
  112. package/src/task/task.service.ts +58 -14
  113. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +191 -1
  114. package/src/whatsapp-sender/whatsapp-sender.service.ts +122 -14
@@ -14,13 +14,22 @@ exports.TasksService = void 0;
14
14
  const api_prisma_1 = require("@hed-hog/api-prisma");
15
15
  const common_1 = require("@nestjs/common");
16
16
  const schedule_1 = require("@nestjs/schedule");
17
+ const monitored_cron_1 = require("../observability/monitored-cron");
17
18
  const setting_service_1 = require("../setting/setting.service");
19
+ const CLEANUP_CRON_SCHEDULE = schedule_1.CronExpression.EVERY_DAY_AT_MIDNIGHT;
18
20
  /**
19
21
  * Teto de tempo da limpeza do `access_log`. Existe para o caso da entrada
20
22
  * superar a saída de novo: o laço para e devolve o resto para a execução
21
23
  * seguinte, em vez de varrer a madrugada inteira disputando o banco.
22
24
  */
23
25
  const ACCESS_LOG_CLEANUP_BUDGET_MS = 10 * 60 * 1000;
26
+ /**
27
+ * Pausa entre dois lotes cheios do `access_log`. Sem ela o laço emenda um DELETE
28
+ * de 20 mil linhas no outro e o Postgres (1 CPU) não sobra para o tráfego: as
29
+ * requests do pod ficam lentas, seguram as 5 conexões do pool e o próprio lote
30
+ * seguinte morre em "Timed out fetching a new connection" (Sentry 7692792694).
31
+ */
32
+ const ACCESS_LOG_BATCH_PAUSE_MS = 500;
24
33
  let TasksService = TasksService_1 = class TasksService {
25
34
  constructor(prismaService, settingService) {
26
35
  this.prismaService = prismaService;
@@ -32,8 +41,15 @@ let TasksService = TasksService_1 = class TasksService {
32
41
  *
33
42
  * As tarefas são executadas sequencialmente para evitar contenção excessiva no banco.
34
43
  * Cada tarefa possui logging detalhado para monitoramento e troubleshooting.
44
+ *
45
+ * O @Cron dispara no mesmo segundo em todos os pods (API e workers); sem a
46
+ * eleição do `runMonitoredCron` cada um drenava o `access_log` em paralelo,
47
+ * disputando as mesmas linhas e saturando o banco.
35
48
  */
36
49
  async clear() {
50
+ await (0, monitored_cron_1.runMonitoredCron)(this.prismaService, { slug: 'core-daily-cleanup', schedule: CLEANUP_CRON_SCHEDULE, maxRuntimeMinutes: 15 }, () => this.runCleanup());
51
+ }
52
+ async runCleanup() {
37
53
  this.logger.verbose('++++++++++++++++++++++++++++++++++');
38
54
  this.logger.verbose('Running scheduled cleanup tasks');
39
55
  this.logger.verbose('++++++++++++++++++++++++++++++++++');
@@ -276,18 +292,18 @@ let TasksService = TasksService_1 = class TasksService {
276
292
  let deleted = 0;
277
293
  let batches = 0;
278
294
  for (;;) {
279
- const removed = await this.prismaService.$executeRaw `
280
- WITH del AS (
281
- SELECT id
282
- FROM access_log
283
- WHERE created_at < (now() - ${api_prisma_1.Prisma.sql `INTERVAL '${api_prisma_1.Prisma.raw(String(retentionDays))} days'`})
284
- ORDER BY id
285
- LIMIT ${batchLimit}
286
- )
287
- DELETE FROM access_log al
288
- USING del
289
- WHERE al.id = del.id
290
- `;
295
+ let removed;
296
+ try {
297
+ removed = await this.deleteAccessLogBatch(retentionDays, batchLimit);
298
+ }
299
+ catch (error) {
300
+ // Limpeza é best-effort: com o pool saturado o resto fica para a próxima
301
+ // execução, como no estouro do orçamento de tempo.
302
+ if ((0, api_prisma_1.classifyDatabaseInfraError)(error) !== 'pool')
303
+ throw error;
304
+ this.logger.warn(`Access log cleanup stopped on a saturated connection pool after ${deleted} rows; the remainder goes on the next run.`);
305
+ break;
306
+ }
291
307
  deleted += removed;
292
308
  batches += 1;
293
309
  if (removed < batchLimit)
@@ -296,9 +312,24 @@ let TasksService = TasksService_1 = class TasksService {
296
312
  this.logger.warn(`Access log cleanup hit the ${ACCESS_LOG_CLEANUP_BUDGET_MS}ms budget after ${deleted} rows; the remainder goes on the next run.`);
297
313
  break;
298
314
  }
315
+ await new Promise((resolve) => setTimeout(resolve, ACCESS_LOG_BATCH_PAUSE_MS));
299
316
  }
300
317
  this.logger.verbose(`Old access logs cleaned up in ${Date.now() - startAt}ms (${deleted} rows in ${batches} batches)`);
301
318
  }
319
+ deleteAccessLogBatch(retentionDays, batchLimit) {
320
+ return this.prismaService.$executeRaw `
321
+ WITH del AS (
322
+ SELECT id
323
+ FROM access_log
324
+ WHERE created_at < (now() - ${api_prisma_1.Prisma.sql `INTERVAL '${api_prisma_1.Prisma.raw(String(retentionDays))} days'`})
325
+ ORDER BY id
326
+ LIMIT ${batchLimit}
327
+ )
328
+ DELETE FROM access_log al
329
+ USING del
330
+ WHERE al.id = del.id
331
+ `;
332
+ }
302
333
  async clearOldNotifications() {
303
334
  const settings = await this.settingService.getSettingValues([
304
335
  'cleanup-batch-limit',
@@ -369,7 +400,7 @@ let TasksService = TasksService_1 = class TasksService {
369
400
  };
370
401
  exports.TasksService = TasksService;
371
402
  __decorate([
372
- (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_DAY_AT_MIDNIGHT),
403
+ (0, schedule_1.Cron)(CLEANUP_CRON_SCHEDULE),
373
404
  __metadata("design:type", Function),
374
405
  __metadata("design:paramtypes", []),
375
406
  __metadata("design:returntype", Promise)
@@ -1 +1 @@
1
- {"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":"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"}
@@ -23,16 +23,35 @@ export type WhatsappSendInput = {
23
23
  language?: string;
24
24
  params?: string[];
25
25
  };
26
+ /**
27
+ * Providers aceitos para este envio. Vazio aceita qualquer um. Quem manda em
28
+ * lote para alunos restringe ao oficial: disparo em massa pela Evolution
29
+ * (WhatsApp Web) derruba e bane o número.
30
+ */
31
+ providers?: readonly string[];
26
32
  };
33
+ /** Só a Cloud API da Meta — para envio em volume a quem não é da equipe. */
34
+ export declare const WHATSAPP_OFFICIAL_ONLY: readonly string[];
27
35
  /**
28
36
  * Erro de envio classificado: `retryable` diz se tentar de novo pode dar
29
37
  * resultado diferente. Um HTTP 4xx da Graph API (id inexistente, sem
30
38
  * permissão, token ruim) não muda em cinco minutos; um 5xx ou falha de rede
31
39
  * pode ser uma instabilidade passageira do provedor.
40
+ *
41
+ * `isTransient` repete o `retryable` no formato que o `TransientError.is` da
42
+ * fila reconhece por duck-typing (o core não depende do queue): com ele as
43
+ * tentativas intermediárias vão ao Sentry como warning, e só a última como erro.
44
+ *
45
+ * `reason` marca as falhas que valem para a instância inteira, não para a
46
+ * mensagem: com a sessão fechada ou a credencial recusada, a próxima mensagem
47
+ * do mesmo lote tem o mesmo destino, e quem envia em série pode parar ali.
32
48
  */
49
+ export type WhatsappSendErrorReason = 'session_closed' | 'unauthorized';
33
50
  export declare class WhatsappSendError extends BadRequestException {
34
51
  readonly retryable: boolean;
35
- constructor(message: string, retryable: boolean);
52
+ readonly reason?: WhatsappSendErrorReason;
53
+ readonly isTransient: boolean;
54
+ constructor(message: string, retryable: boolean, reason?: WhatsappSendErrorReason);
36
55
  }
37
56
  /**
38
57
  * Envio de WhatsApp usando um perfil de integração escolhido pelo usuário.
@@ -47,7 +66,7 @@ export declare class WhatsappSenderService {
47
66
  constructor(prisma: PrismaService);
48
67
  send(input: WhatsappSendInput): Promise<void>;
49
68
  /** Diz se há perfil utilizável, para o chamador decidir por um fallback sem tentar o envio. */
50
- isConfigured(profileSlug?: string): Promise<boolean>;
69
+ isConfigured(profileSlug?: string, providers?: readonly string[]): Promise<boolean>;
51
70
  /**
52
71
  * Identidade do perfil que o `send` usaria, sem o `config`.
53
72
  *
@@ -70,6 +89,20 @@ export declare class WhatsappSenderService {
70
89
  private resolveProfile;
71
90
  private readEvolutionConfig;
72
91
  private sendWithEvolution;
92
+ /**
93
+ * Número padrão do perfil, mantido pela library `whatsapp` (sync com o WABA
94
+ * ou registro na primeira mensagem recebida).
95
+ *
96
+ * A tabela não é do core: num projeto sem a library `whatsapp` o delegate não
97
+ * existe, e o envio segue sem padrão — cai no erro de phone_number_id ausente.
98
+ */
99
+ private resolveDefaultPhoneNumberId;
73
100
  private sendWithOfficial;
74
101
  }
102
+ /**
103
+ * A Meta recusa parâmetro de template com quebra de linha, tab ou mais de
104
+ * quatro espaços seguidos (erro 132018) — e o texto que os módulos montam para
105
+ * o WhatsApp vem em parágrafos. Vazio também é recusado.
106
+ */
107
+ export declare function toTemplateParam(text: unknown): string;
75
108
  //# sourceMappingURL=whatsapp-sender.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-sender.service.d.ts","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,mBAAmB,EAMpB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACnE,CAAC;AASF;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,mBAAmB;aAGtC,SAAS,EAAE,OAAO;gBADlC,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,OAAO;CAIrC;AAED;;;;;;GAMG;AACH,qBACa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAI9C,MAAM,EAAE,aAAa;IAGlC,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,+FAA+F;IACzF,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB1D;;;;;;;;OAQG;IACG,eAAe,CACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA4B,GAAG,MAAM;YAsBnE,cAAc;IA0C5B,OAAO,CAAC,mBAAmB;YAUb,iBAAiB;YAiEjB,gBAAgB;CAwG/B"}
1
+ {"version":3,"file":"whatsapp-sender.service.d.ts","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,mBAAmB,EAMpB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClE;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAA0B,CAAC;AAS/E;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAExE,qBAAa,iBAAkB,SAAQ,mBAAmB;aAKtC,SAAS,EAAE,OAAO;aAClB,MAAM,CAAC,EAAE,uBAAuB;IALlD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;gBAG5B,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,OAAO,EAClB,MAAM,CAAC,EAAE,uBAAuB;CAKnD;AAED;;;;;;GAMG;AACH,qBACa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAI9C,MAAM,EAAE,aAAa;IAGlC,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,+FAA+F;IACzF,YAAY,CAChB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;;;;;;OAQG;IACG,eAAe,CACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA4B,GAAG,MAAM;YAsBnE,cAAc;IA+D5B,OAAO,CAAC,mBAAmB;YAUb,iBAAiB;IA8E/B;;;;;;OAMG;YACW,2BAA2B;YAW3B,gBAAgB;CAyG/B;AAkCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMrD"}
@@ -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,7 +182,7 @@ 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 WhatsappSendError(`Credenciais do WhatsApp inválidas (401). Verifique o token do perfil "${profile.slug}".`, false);
185
+ throw new WhatsappSendError(`Credenciais do WhatsApp inválidas (401). Verifique o token do perfil "${profile.slug}".`, false, 'unauthorized');
178
186
  }
179
187
  // Número sem conta no WhatsApp: a Evolution responde 400 com
180
188
  // `exists: false`. É dado do cadastro, não instabilidade — reenviar não
@@ -182,11 +190,36 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
182
190
  if (isEvolutionNumberMissing(detail)) {
183
191
  throw new WhatsappSendError(`O número ${target} não tem WhatsApp (Evolution: exists=false).`, false);
184
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
+ }
185
200
  // Mesmo critério do provider oficial: 4xx é recusa estrutural, 5xx e
186
201
  // 429 podem passar numa próxima tentativa.
187
202
  throw new WhatsappSendError(`Evolution API recusou o envio (HTTP ${response.status}): ${detail.slice(0, 300)}`, response.status >= 500 || response.status === 429);
188
203
  }
189
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
+ }
190
223
  async sendWithOfficial(profile, input) {
191
224
  var _a, _b, _c, _d, _e, _f, _g, _h;
192
225
  const cfg = (0, integration_profile_utils_1.buildWhatsappOfficialConfigFromIntegration)(profile.config);
@@ -202,11 +235,13 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
202
235
  if (!cfg.accessToken) {
203
236
  throw new common_1.BadRequestException(`Perfil de WhatsApp "${profile.slug}" está sem access_token.`);
204
237
  }
205
- // O phone_number_id não vive no perfil: um WABA pode ter vários números,
206
- // então quem envia precisa dizer por qual deles a mensagem sai.
207
- 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));
208
243
  if (!phoneNumberId) {
209
- 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.`);
210
245
  }
211
246
  const to = this.normalizeTarget(input.to, 'phone');
212
247
  // A Meta só aceita mensagem iniciada pela empresa através de template
@@ -225,7 +260,7 @@ let WhatsappSenderService = WhatsappSenderService_1 = class WhatsappSenderServic
225
260
  type: 'body',
226
261
  parameters: ((_d = input.template.params) !== null && _d !== void 0 ? _d : [input.text]).map((text) => ({
227
262
  type: 'text',
228
- text,
263
+ text: toTemplateParam(text),
229
264
  })),
230
265
  },
231
266
  ],
@@ -280,6 +315,33 @@ function isEvolutionNumberMissing(detail) {
280
315
  return false;
281
316
  }
282
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
+ }
283
345
  /** Evolution espera base64 puro; um data URL vindo do chamador quebraria o envio. */
284
346
  function stripDataUrlPrefix(image) {
285
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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"}
@@ -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
+ });