chore(deps): atualização agressiva — Baileys rc13, Prisma 7, Express 5, ESLint 10, Redis 6, TS 6#2575
Open
pastoriniMatheus wants to merge 14 commits into
Open
chore(deps): atualização agressiva — Baileys rc13, Prisma 7, Express 5, ESLint 10, Redis 6, TS 6#2575pastoriniMatheus wants to merge 14 commits into
pastoriniMatheus wants to merge 14 commits into
Conversation
…rm patch - baileys atualizado para a ultima versao publicada (rc13) - remove patches/baileys+7.0.0-rc.6.patch: a correcao de waveform PTT (requiresWaveformProcessing) ja foi incorporada upstream no rc13 - API additionalNodes do relayMessage confirmada identica: botoes/lista/carrossel preservados - adiciona ATUALIZACAO-DEPENDENCIAS.md (plano de atualizacao em tiers) tsc --noEmit e build (tsup) passam limpos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- runtime: axios 1.17, @sentry/node 10.56, pg 8.21, dayjs, jimp, socket.io(+client) 4.8.3, minio, mediainfo.js, libphonenumber-js, jsonwebtoken, cors, fetch-socks, multer 2.1, @aws-sdk/client-sqs, prisma+@prisma/client 6.19.3, undici 7.27 - dev: prettier 3.8, tsx 4.22, @typescript-eslint/* 8.60, eslint-plugin-prettier, @types/node 24, lint-staged 16 - fix(types): cast response.headers['content-type'] as string (axios 1.17 endureceu AxiosHeaderValue) em whatsapp.baileys.service.ts e chatwoot.service.ts tsc --noEmit e build passam limpos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- uuid 14, dotenv 17, node-cron 4, i18next 26, @paralleldrive/cuid2 3, class-validator 0.15, pusher 5.3, mime-types 3 (+@types/mime-types 3), amqplib 2 - fix(rabbitmq): coerce url.port para Number (amqplib 2 exige port:number) - mantidos na faixa de peer do baileys rc13 (evita ERESOLVE/quebra interna): audio-decode 2, link-preview-js 3, pino 9, jimp 1.6 - adiados (majors ESM-only que exigiriam mudar moduleResolution): https-proxy-agent 9, socks-proxy-agent 10, undici 8 -> mantidos em 7/8/7 tsc --noEmit e build passam limpos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- eslint 8 -> 10 com eslint.config.mjs (flat config), removendo .eslintrc.js e .eslintignore - substitui @typescript-eslint/eslint-plugin+parser pelo meta-pacote typescript-eslint 8 - troca eslint-plugin-import (sem suporte a eslint 10) por eslint-plugin-import-x 4 (regras import-x/first e import-x/no-duplicates) - simple-import-sort 13, @commitlint/* 21, lint-staged 17, globals - desativa regras novas do recommended do eslint 10 (preserve-caught-error, no-useless-assignment) para preservar baseline - scripts lint/lint:check sem --ext (flat config) - reinstalacao limpa da arvore (lock regenerado, peers do baileys respeitados) lint:check, tsc --noEmit e build passam limpos (apos prisma generate). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- express 4 -> 5 (+@types/express 5), movido de volta para dependencies
- rotas wildcard adaptadas ao path-to-regexp v8:
- index.router.ts: /assets/* -> /assets/*splat (req.params.splat agora e array, juntado com '/')
- view.router.ts: '*' -> /{*splat}
- cast 'as string' em req.params.<id> nos 7 routers de chatbot (req.params agora e string|string[] no @types/express 5; rotas :param sempre retornam string)
tsc --noEmit, lint e build passam limpos.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tivel com express 5) - openai 4 -> 6: beta.threads.runs.retrieve/submitToolOutputs agora recebem runId e thread_id no objeto de params - remove express-async-errors (peer so suporta express 4; express 5 ja trata erros async de handlers nativamente) e seu import em abstract.router.ts tsc --noEmit, lint e build passam limpos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- redis 4 -> 6: cast 'as string' no retorno de get()/hGet() em rediscache.ts (redis 6/RESP3 tipa retorno como string|{}; JSON.parse exige string)
- has() ja tratava exists() > 0 (exists retorna numero)
tsc --noEmit, lint e build passam limpos.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- typescript 5.7 -> 6.0.3 (compativel com typescript-eslint <6.1.0) - adiciona 'ignoreDeprecations: 6.0' no tsconfig: baseUrl e moduleResolution=node10 viraram deprecation-error no TS 6; migracao real (node16/bundler) exigiria extensoes .js em todos os imports — adiado para o TS 7 tsc --noEmit, lint e build passam limpos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tas finais Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…solution) - baileys rc13 depende de whatsapp-rust-bridge@0.5.4 (ESM-only, exports so com 'import'): app nao sobe via tsx/require (ERR_PACKAGE_PATH_NOT_EXPORTED) - 0.5.5 adiciona condicao 'require' nos exports -> resolve em contexto CommonJS (Node 24 suporta require de ESM) - aplicado via overrides no package.json Validado: require do modulo funciona e dev:server inicializa toda a stack ate a conexao de infra (DB/Redis). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- tsconfig: module CommonJS->preserve, moduleResolution node10->bundler - remove baseUrl e ignoreDeprecations: elimina por completo a divida de deprecacao do TS 6/7 (node10 e baseUrl); paths resolvem relativo ao tsconfig (validado em tsc, tsup e tsx) - https-proxy-agent 7->9 e socks-proxy-agent 8->10 (majors ESM-only, agora resolviveis com bundler) - src nao usa require()/export = (compativel com module preserve) Validado: tsc, lint, build limpos; dev:server carrega TODOS os modulos (aliases + proxy agents ESM-only) ate a fronteira de infra (auth do Postgres). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lient generator) BREAKING: Prisma 6 -> 7 (ESM-only, driver adapters obrigatorios) - @prisma/client+prisma 7.8.0; adiciona @prisma/adapter-pg e @prisma/adapter-mariadb - generator 'prisma-client-js' -> 'prisma-client' com output ./generated/client (TS gerado) nos 3 schemas (postgresql, mysql, psql_bouncer); url removida do datasource (proibida no v7) - prisma.config.ts: connection string (datasource.url via DATABASE_CONNECTION_URI) + selecao dinamica de schema/migrations por DATABASE_PROVIDER (multi-provider) - repository.service.ts: instancia PrismaClient com driver adapter conforme provider (PrismaPg | PrismaMariaDb) - alias @prisma/client -> client gerado: no tsconfig (tsx/tsc) e reforcado no tsup (noExternal + esbuild alias), pois esbuild nao honra paths do tsconfig - tsup: shims:true (shim de import.meta.url p/ client v7 no bundle CJS) e platform:node - start:prod usa dist/main.js (CJS) - ESM puro quebra por imports sem extensao do @figuro/chatwoot-sdk - 3 imports de JsonValue: @prisma/client/runtime/library -> /runtime/client (caminho mudou no v7) - prisma/generated/ no .gitignore (gerado por provider via db:generate) Validado: db:generate (postgres+mysql), tsc, lint, build; boot dev (tsx) e prod (node dist/main.js) inicializam ate a query real (DriverAdapterError: AuthenticationFailed = credenciais/infra, nao codigo). HTTP server sobe na porta 3210. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… concluidos Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…1670) Remove o getAudioMetadata() redundante: o Baileys rc13 ja calcula seconds/waveform nativamente (getAudioDuration/getAudioWaveform via audio-decode) quando ausentes no envio de PTT. - removido getAudioMetadata() (~50 linhas) e o import orfao de audio-decode - audioWhatsapp() para de passar seconds/waveform nos 2 caminhos; agora URL tambem ganha waveform - audio-decode mantido no package.json (peerOptional usado internamente pelo Baileys) Validado: tsc/lint/build limpos; PTT real -> resposta com seconds:9 + waveform (Uint8Array) gerados pelo Baileys; confirmado visualmente pelo usuario. Ref: EVO-1670 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Sorry @pastoriniMatheus, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Atualização Agressiva de Dependências — Baileys rc13 + grande up (sem perder Botões/Listas/Carrosséis)
Esta PR moderniza toda a stack da Evolution API para as versões mais recentes possíveis sem quebrar a implementação de botões interativos, listas e carrosséis (injeção de nós
<biz>viaadditionalNodesnorelayMessagedo Baileys). O trabalho foi feito em camadas (tiers) de risco crescente, cada uma comtsc --noEmit+tsup build+lintlimpos e commit isolado, e validada ao final por envio real para um número de teste.1. Resumo das versões (de → para)
prisma-clientruns.*moduleResolution: bundlercallback_apimantidobundler)Mantidos/adicionados: override
whatsapp-rust-bridge@0.5.5; substituiçãoeslint-plugin-import→eslint-plugin-import-x@4; troca@typescript-eslint/*pelo meta-pacotetypescript-eslint.2. Execução em camadas (tiers)
Tier 0 — Baileys rc.9 → rc13 (EVO-1652)
package.json:baileys7.0.0-rc.9→7.0.0-rc13.patches/baileys+7.0.0-rc.6.patch: a correção de waveform PTT (requiresWaveformProcessing) já está upstream no rc13.relayMessage({ additionalNodes })é idêntico no rc13 (stanza.content.push(...additionalNodes)) → botões/lista/carrossel preservados.Tier 1 — Bumps minor/patch seguros (EVO-1653)
AxiosHeaderValue→ castas stringemresponse.headers['content-type'](whatsapp.baileys.service.ts, chatwoot.service.ts).Tier 2 — Majors de baixo/médio risco (EVO-1654)
port: url.port || 5672→port: url.port ? Number(url.port) : 5672(oConnectexigenumber).Tier 3a — ESLint 8 → 10 (flat config) (EVO-1655, EVO-1664)
eslint.config.mjs(flat config) com o meta-pacotetypescript-eslint,@eslint/js,globals,prettier/recommended,simple-import-sorteeslint-plugin-import-x(oeslint-plugin-importnão suporta ESLint 10)..eslintrc.jse.eslintignore; scriptslint/lint:checksem--ext; commitlint 21 + lint-staged 17.preserve-caught-error,no-useless-assignment) desativadas para preservar o baseline.Tier 3b — Express 4 → 5 (EVO-1656, EVO-1662)
/assets/*→/assets/*splat(ereq.params[0]→ array juntado), SPA'*'→/{*splat}.as stringemreq.params.<id>nos 7 routers de chatbot (req.paramsviroustring | string[]).express-async-errors(peer só Express 4; o Express 5 trata erros async nativamente).Tier 3c — OpenAI 4 → 6 (EVO-1657)
beta.threads.runs.retrieve/submitToolOutputspassaram a receberrunId+thread_idno objeto de params (openai.service.ts).Tier 3d — Redis 4 → 6 (EVO-1658)
get/hGetcomostring | {}→ castsas stringemrediscache.ts;exists()já tratado como número.Tier 3e — TypeScript 5 → 6 (EVO-1659)
tsc6.0.3 (compatível comtypescript-eslint).Tier 3f — moduleResolution + proxy agents (EVO-1667, EVO-1668)
tsconfig:module: preserve+moduleResolution: bundler; removidosbaseUrleignoreDeprecations— dívida do TS 6/7 (node10/baseUrl) eliminada por completo.https-proxy-agent7→9 esocks-proxy-agent8→10 (majors ESM-only, destravados pelobundler).Tier 4 — Prisma 6 → 7 (EVO-1660) — a migração mais complexa
@prisma/adapter-pg+@prisma/adapter-mariadb(não háadapter-mysql).prisma-client-js→prisma-clientcomoutput ./generated/client(TS gerado) nos 3 schemas;url/directUrlremovidos dodatasource(proibidos no v7).prisma.config.ts(novo): connection string (DATABASE_CONNECTION_URI) + seleção dinâmica de schema/migrations porDATABASE_PROVIDER— multi-provider preservado.repository.service.ts: instancia oPrismaClientcom o adapter correto por provider.@prisma/clienté aliasado ao client gerado notsconfig(tsx/tsc) e reforçado notsup(noExternal: [/^@prisma\/client$/]+esbuildOptions.alias+shims: truepara oimport.meta.urlno bundle CJS), pois o esbuild não honra ospathsdo tsconfig.JsonValuemigrado de@prisma/client/runtime/library→/runtime/client(3 DTOs).start:prod→dist/main.js(CJS); o ESM puro quebra por imports sem extensão do@figuro/chatwoot-sdk.prisma/generated/adicionado ao.gitignore.3. Imprevistos resolvidos (não previstos no plano)
whatsapp-rust-bridgeESM-only impedia o boot (EVO-1661): o rc13 depende da 0.5.4 (sem condiçãorequirenoexports), causandoERR_PACKAGE_PATH_NOT_EXPORTEDem runtime CJS. Fixado viaoverridespara 0.5.5.express-async-errorsincompatível com Express 5 (EVO-1662): removido (redundante no Express 5).audio-decode,link-preview-js,pino,jimpmantidos na faixa do Baileys (ver seção Travados).eslint-plugin-importsem suporte a ESLint 10 (EVO-1664): trocado poreslint-plugin-import-x.prisma generatenecessário após instalação limpa (EVO-1665): documentado (não está nopostinstall).getAudioMetadata()redundante — o Baileys rc13 calculaseconds/waveformnativamente (getAudioWaveform/getAudioDurationviaaudio-decode). Agora URLs de áudio também ganham waveform.4. Validação
Estática (do zero)
npm ci→npm run db:generate→npx tsc --noEmit→npm run build(tsup) →npm run lint:check— todos limpos.Runtime
node dist/main.js) →Repository:Prisma - ON,redis ready,HTTP - ON: 3210(healthcheck 200).evolution, migrations aplicadas viadb:deploycom Prisma 7) + Redis (com senha) — conexões reais OK, sem erro de código.Smoke test de envio real (instância conectada → número de teste)
Todos HTTP 201 e renderização confirmada no WhatsApp:
/message/sendList/message/sendButtons/message/sendButtons/message/sendButtons/message/sendButtons/message/sendCarousel/message/sendWhatsAppAudioseconds+waveformnativos do Baileys)Regras de negócio confirmadas no
buttonMessage: reply até 3 (isolado), CTA até 2 (isolado), PIX 1 (sozinho).As rotas wildcard do Express 5 (
/assets/*splat, SPA/{*splat}) servem o manager (SPA) corretamente.5. Segurança
npm audit: 57 → 12 vulnerabilidades (2 low, 4 moderate, 6 high). Remanescentes presas por upstream (axiosaninhado no@figuro/chatwoot-sdk,link-preview-js/baileys) ou dev-only (commitizen, dev tooling do Prisma 7).npm audit fix --forcenão aplicado para não quebrar (EVO-1669).6. Conscientemente travados (sobem quando o Baileys ampliar os peers — EVO-1663)
audio-decode@2,link-preview-js@3,pino@9,jimp@1.6— mantidos na faixa de peer do Baileys rc13 para não quebrar funcionalidades internas (waveform de áudio, preview de link, logger). Forçar os majors novos quebraria o Baileys (ex.: a API doaudio-decodev3 é incompatível). Sobem "de graça" quando o Baileys publicar peers ampliados.7. Arquivos principais tocados
package.json,package-lock.json,tsconfig.json,tsup.config.ts,eslint.config.mjs(novo),prisma.config.ts(novo),.gitignore.prisma/postgresql-schema.prisma,prisma/mysql-schema.prisma,prisma/psql_bouncer-schema.prisma.src/api/repository/repository.service.ts(driver adapters).src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts(áudio, casts).src/api/routes/index.router.ts,view.router.ts(rotas wildcard Express 5) + os 7 routers de chatbot (castsreq.params).src/cache/rediscache.ts(Redis 6),src/api/integrations/event/rabbitmq/rabbitmq.controller.ts(amqplib 2),src/api/integrations/chatbot/openai/services/openai.service.ts(OpenAI 6),src/api/abstract/abstract.router.ts(remoção express-async-errors), 3 DTOs (JsonValue).8. Como testar
9. Rastreabilidade (Linear — time EVO)
19 issues com descrição da tarefa + comentário técnico (o que foi codado, como resolveu, testes): EVO-1652 (Baileys rc13) · EVO-1653 · EVO-1654 · EVO-1655 (ESLint 10) · EVO-1656 (Express 5) · EVO-1657 (OpenAI 6) · EVO-1658 (Redis 6) · EVO-1659 (TS 6) · EVO-1660 (Prisma 7) · EVO-1661 (whatsapp-rust-bridge) · EVO-1662 (express-async-errors) · EVO-1663 (peers Baileys) · EVO-1664 (import-x) · EVO-1665 (prisma generate) · EVO-1666 (smoke test) · EVO-1667 (moduleResolution) · EVO-1668 (proxy agents) · EVO-1669 (vulnerabilidades) · EVO-1670 (áudio nativo).
🤖 Generated with Claude Code