@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.
- package/dist/access-log/access-log.interceptor.d.ts +10 -0
- package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
- package/dist/access-log/access-log.interceptor.js +15 -1
- package/dist/access-log/access-log.interceptor.js.map +1 -1
- package/dist/authorize/authorize.controller.d.ts +1 -0
- package/dist/authorize/authorize.controller.d.ts.map +1 -1
- package/dist/authorize/authorize.service.d.ts +1 -0
- package/dist/authorize/authorize.service.d.ts.map +1 -1
- package/dist/authorize/authorize.service.js +3 -0
- package/dist/authorize/authorize.service.js.map +1 -1
- package/dist/file/file-upload-ticket.service.d.ts +1 -1
- package/dist/file/file.controller.d.ts +3 -3
- package/dist/file/file.service.d.ts +121 -12
- package/dist/file/file.service.d.ts.map +1 -1
- package/dist/file/file.service.js +245 -3
- package/dist/file/file.service.js.map +1 -1
- package/dist/file/provider/abstract.provider.d.ts +33 -0
- package/dist/file/provider/abstract.provider.d.ts.map +1 -1
- package/dist/file/provider/abstract.provider.js +9 -0
- package/dist/file/provider/abstract.provider.js.map +1 -1
- package/dist/file/provider/s3-multipart.util.d.ts +17 -0
- package/dist/file/provider/s3-multipart.util.d.ts.map +1 -0
- package/dist/file/provider/s3-multipart.util.js +88 -0
- package/dist/file/provider/s3-multipart.util.js.map +1 -0
- package/dist/file/provider/s3.provider.d.ts +9 -1
- package/dist/file/provider/s3.provider.d.ts.map +1 -1
- package/dist/file/provider/s3.provider.js +16 -0
- package/dist/file/provider/s3.provider.js.map +1 -1
- package/dist/file/provider/spaces.provider.d.ts +10 -1
- package/dist/file/provider/spaces.provider.d.ts.map +1 -1
- package/dist/file/provider/spaces.provider.js +17 -0
- package/dist/file/provider/spaces.provider.js.map +1 -1
- package/dist/integration-profile/integration-profile.controller.d.ts +1 -0
- package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.js +7 -2
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
- package/dist/integration-profile/integration-profile.service.d.ts +1 -0
- package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.service.js +3 -3
- package/dist/integration-profile/integration-profile.service.js.map +1 -1
- package/dist/integration-profile/testers/http-probe.d.ts.map +1 -1
- package/dist/integration-profile/testers/http-probe.js +5 -3
- package/dist/integration-profile/testers/http-probe.js.map +1 -1
- package/dist/integration-profile/testers/integration-tester.types.d.ts +5 -0
- package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -1
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +16 -1
- package/dist/mail/mail.service.js.map +1 -1
- package/dist/mcp/mcp-server.service.d.ts.map +1 -1
- package/dist/mcp/mcp-server.service.js +10 -1
- package/dist/mcp/mcp-server.service.js.map +1 -1
- package/dist/pdf/document/pdf-document.css.d.ts.map +1 -1
- package/dist/pdf/document/pdf-document.css.js +88 -0
- package/dist/pdf/document/pdf-document.css.js.map +1 -1
- package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -1
- package/dist/pdf/document/pdf-document.renderer.js +73 -0
- package/dist/pdf/document/pdf-document.renderer.js.map +1 -1
- package/dist/pdf/document/pdf-document.types.d.ts +56 -0
- package/dist/pdf/document/pdf-document.types.d.ts.map +1 -1
- package/dist/pdf/pdf.service.d.ts +6 -0
- package/dist/pdf/pdf.service.d.ts.map +1 -1
- package/dist/pdf/pdf.service.js +3 -0
- package/dist/pdf/pdf.service.js.map +1 -1
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +3 -0
- package/dist/setting/setting.service.js.map +1 -1
- package/dist/task/task.service.d.ts +6 -0
- package/dist/task/task.service.d.ts.map +1 -1
- package/dist/task/task.service.js +44 -13
- package/dist/task/task.service.js.map +1 -1
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +35 -2
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
- package/dist/whatsapp-sender/whatsapp-sender.service.js +83 -21
- package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +85 -2
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +576 -491
- package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +29 -50
- package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +146 -50
- package/hedhog/frontend/messages/en.json +46 -20
- package/hedhog/frontend/messages/pt.json +46 -20
- package/hedhog/table/file.yaml +3 -1
- package/package.json +3 -3
- package/src/access-log/access-log.interceptor.spec.ts +50 -0
- package/src/access-log/access-log.interceptor.ts +18 -0
- package/src/authorize/authorize.service.spec.ts +1 -0
- package/src/authorize/authorize.service.ts +2 -0
- package/src/file/file-direct-upload.spec.ts +344 -0
- package/src/file/file.service.ts +363 -2
- package/src/file/provider/abstract.provider.ts +57 -0
- package/src/file/provider/s3-multipart.spec.ts +123 -0
- package/src/file/provider/s3-multipart.util.ts +126 -0
- package/src/file/provider/s3.provider.ts +65 -1
- package/src/file/provider/spaces.provider.ts +67 -1
- package/src/integration-profile/integration-profile.secrets.ts +7 -2
- package/src/integration-profile/integration-profile.service.ts +1 -0
- package/src/integration-profile/testers/http-probe.ts +5 -3
- package/src/integration-profile/testers/integration-tester.types.ts +5 -0
- package/src/integration-profile/testers/oauth.testers.spec.ts +13 -0
- package/src/integration-profile/testers/tester-coverage.spec.ts +2 -0
- package/src/mail/mail.service.spec.ts +25 -0
- package/src/mail/mail.service.ts +18 -1
- package/src/mcp/mcp-server.service.spec.ts +16 -0
- package/src/mcp/mcp-server.service.ts +10 -1
- package/src/pdf/document/pdf-document.css.ts +88 -0
- package/src/pdf/document/pdf-document.renderer.spec.ts +43 -0
- package/src/pdf/document/pdf-document.renderer.ts +102 -0
- package/src/pdf/document/pdf-document.types.ts +52 -0
- package/src/pdf/pdf.service.ts +11 -0
- package/src/setting/setting.service.ts +3 -0
- package/src/task/task.service.spec.ts +77 -1
- package/src/task/task.service.ts +58 -14
- package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +191 -1
- 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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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)(
|
|
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":";;;;;;;;;;;;;AAAA,
|
|
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
|
-
|
|
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;
|
|
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
|
-
|
|
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
|
-
:
|
|
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
|
|
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
|
-
//
|
|
207
|
-
|
|
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(
|
|
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
|
-
[
|
|
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
|
-
[
|
|
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
|
+
});
|