fix(edges): corrige 3 TS errors que travavam CI Deno typecheck#10
Conversation
- sync-external-db:83 (TS18046): type guard antes de error.message - simulation-orchestrator:221 (TS18046): mesmo padrão - cnpj-lookup:58 (TS2322): guard de Deno.env.get + 503 fail-closed se ausente Validação: node scripts/typecheck-edge-functions.mjs sync-external-db simulation-orchestrator cnpj-lookup → all clean
- sync-external-db:83 (TS18046): type guard antes de error.message - simulation-orchestrator:221 (TS18046): mesmo padrão - cnpj-lookup:58 (TS2322): guard de Deno.env.get + 503 fail-closed se ausente Validação: node scripts/typecheck-edge-functions.mjs sync-external-db simulation-orchestrator cnpj-lookup → all clean
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
WalkthroughPR implementa defesas contra crashes em três funções Supabase: valida variável de ambiente obrigatória antes de chamar API externa, e normaliza captura de erros em handlers para evitar assumir que exceptions possuem propriedade ChangesValidação e Tratamento de Erros
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutes ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Fixes three TypeScript errors blocking the Deno typecheck CI gate for edge functions. Two cases apply the standard error instanceof Error type guard for unknown catch parameters, and one adds a fail-closed check for a missing CNPJA_API_KEY env var.
Changes:
- Type-guard
errorin catch blocks ofsync-external-dbandsimulation-orchestrator. - Return 503 in
cnpj-lookupwhenCNPJA_API_KEYis unset, preventingAuthorization: undefined.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| supabase/functions/sync-external-db/index.ts | Narrow unknown error to message string before JSON response. |
| supabase/functions/simulation-orchestrator/index.ts | Same type-guard pattern for catch error. |
| supabase/functions/cnpj-lookup/index.ts | Early return 503 when CNPJA_API_KEY is missing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| } catch (error) { | ||
| return new Response(JSON.stringify({ error: error.message }), { | ||
| const errorMessage = error instanceof Error ? error.message : String(error); | ||
| return new Response(JSON.stringify({ error: errorMessage }), { |
| console.error("Sync error:", error); | ||
| return new Response(JSON.stringify({ error: error.message }), { | ||
| const errorMessage = error instanceof Error ? error.message : String(error); | ||
| return new Response(JSON.stringify({ error: errorMessage }), { |
* fix: resolve TS/ESLint errors in items #9–#17 (exhaustive bug fix batch) #9 price-response.adapter.ts — typed 4 helper fns (asRec/str/num/bool/optStr) to eliminate 61 TS errors from snake/camelCase + null-safety issues #10 AdminProductFormPage.tsx — fixed PromobrindProduct field access after expanding ~50 optional fields in product-types.ts #11 AddressTab.tsx — replaced Record<string,unknown> form props with typed interfaces, eliminating 56 TS errors #12 BasicDataTab.tsx — same root cause as #11, typed interfaces applied, 32 TS errors resolved #13 CompareTableView.tsx — changed import from @/types/product.ts (DB snake_case) to @/types/product-catalog.ts (UI camelCase), fixing 26 TS errors #14 SupabaseConnectionsTab.tsx — replaced 17 non-null assertions (!) with nullish coalescing (??) + type casts #15 CatalogContent.tsx + ProductQuickView.tsx — removed unused imports/vars, resolving 32 ESLint warnings #16 useSimulatorWizard.ts — added dispatch to all 15 useCallback/useEffect dep arrays; useGlobalSearch.ts — removed unused imports, stabilised callback, fixed non-null assertions and missing deps #17 T-FIX-5b ESLint guardrail added to eslint.config.js; guards added before forEach+expect loops in commercial-intelligence.test.ts; baselines updated to grandfather existing violations in magic-up tests Baselines: .tsc-baseline.json (1065 errors frozen), .eslint-baseline.json (405) * fix(#17): fix all T-FIX-5b forEach+expect violations in magic-up tests - magic-up-result-panel-keyboard.test.tsx: 64 violations fixed - getDots()/getThumbs() forEach (getAllByRole throws on empty): eslint-disable-next-line - Literal arrays [prev,next], [0,1,2]: eslint-disable-next-line - calls/elements/observedIndices: expect(var).not.toHaveLength(0) guards added - REQUIRED_*_CLASSES consts: eslint-disable-next-line - ids/thumbNames/liveRegions: guards added - magic-up-onda5.test.tsx: 29 violations fixed - required/select.allCards/allMarcar/literal arrays: eslint-disable-next-line - cards/listitems/winnerButtons/buttons/tabIndices: guards added - REQUIRED_FOCUS_CLASSES const: eslint-disable-next-line ESLint baseline updated: 405 → 401 errors (positive drift on all T-FIX-5b work) * fix(#17): suppress T-FIX-5b in commercial-intelligence (guards already in place) All 14 remaining forEach+expect violations suppressed with // eslint-disable-next-line no-restricted-syntax after the existing expect(array).not.toHaveLength(0) guards. Arrays are provably non-empty static constants (PERIOD_OPTIONS=9, MOCK_TRENDING=4, MOCK_OPPORTUNITIES=4) or deterministic generators (generateDateMap(30), generateMockMarketData(360)). Pattern applied consistently with magic-up test fixes from previous commit: - Guard documents intent (catches accidental empty-array mutation) - Disable comment acknowledges guard is in place and suppresses the lint rule Result: 0 T-FIX-5b errors in all 3 test files. T-FIX-5b work fully complete. --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Codex Simulation <codex-simulation@example.local>
…ós-colapso) Fecha 2 dos 3 itens P0/P1 pendentes do RELATORIO_COLAPSO_2026-05-24: - #3 idle_session_timeout = 0 -> 10min (ALTER DATABASE) idle_in_transaction_session_timeout = 0 -> 60s (ALTER DATABASE) - #10 log_min_duration_statement = -1 -> 2000ms (ALTER ROLE, via supautils) Aplicado via MCP em 2026-05-25 13:00-13:20 UTC. Conexão PostgREST zumbi de 10.9 dias (PID 2376) foi eliminada na hora pelo novo idle_session_timeout. Operações idempotentes - reaplicação pelo pipeline é segura. Restante pendente: #6 Auth Connection Strategy (so via Dashboard).
…ós-colapso) (#336) Fecha 2 dos 3 itens P0/P1 pendentes do RELATORIO_COLAPSO_2026-05-24: - #3 idle_session_timeout = 0 -> 10min (ALTER DATABASE) idle_in_transaction_session_timeout = 0 -> 60s (ALTER DATABASE) - #10 log_min_duration_statement = -1 -> 2000ms (ALTER ROLE, via supautils) Aplicado via MCP em 2026-05-25 13:00-13:20 UTC. Conexão PostgREST zumbi de 10.9 dias (PID 2376) foi eliminada na hora pelo novo idle_session_timeout. Operações idempotentes - reaplicação pelo pipeline é segura. Restante pendente: #6 Auth Connection Strategy (so via Dashboard).
…337) * fix(db): aplica idle_*_timeout e log_min_duration_statement (Fase 6 pós-colapso) Fecha 2 dos 3 itens P0/P1 pendentes do RELATORIO_COLAPSO_2026-05-24: - #3 idle_session_timeout = 0 -> 10min (ALTER DATABASE) idle_in_transaction_session_timeout = 0 -> 60s (ALTER DATABASE) - #10 log_min_duration_statement = -1 -> 2000ms (ALTER ROLE, via supautils) Aplicado via MCP em 2026-05-25 13:00-13:20 UTC. Conexão PostgREST zumbi de 10.9 dias (PID 2376) foi eliminada na hora pelo novo idle_session_timeout. Operações idempotentes - reaplicação pelo pipeline é segura. Restante pendente: #6 Auth Connection Strategy (so via Dashboard). * docs: adiciona STATUS_POS_COLAPSO_2026-05-25.md (auditoria do follow-up) Documenta a operação completa de fechamento das pendências do colapso de 24/05, com: - Linha do tempo consolidada 24/05 -> 25/05 (~24h) - Validação direta nas fontes dos 10 achados originais (queries + resultados) - Detalhe técnico das 2 correções aplicadas hoje: * ALTER DATABASE idle_session_timeout / idle_in_transaction_session_timeout * ALTER ROLE log_min_duration_statement (via supautils) - Tabela-resumo final: 6/10 resolvidos, 3/10 com nuance, 1/10 pendente - 5 licoes aprendidas (BPM / processo) - Pendencias ativas organizadas por P0/P1/P2 - Bloco de queries SQL prontas para auditoria futura Companheiro de leitura do RELATORIO_COLAPSO_2026-05-24.md.
Contexto
GitHub Actions desbloqueou hoje (budget reset). Quando o CI voltou a rodar, 3/79 edge functions estavam com TS errors travando o gate
Edge Functions — Deno typecheckem todas as runs. Causa: erros introduzidos pelo Lovable nos 1115 commits das últimas 48h.Fixes (3 arquivos, +11/-2)
1.
sync-external-db/index.ts:83— TS18046errorem catch éunknownpor padrão no TS strict. Type guard padrão.2.
simulation-orchestrator/index.ts:221— TS18046Mesmo padrão, mesmo fix.
3.
cnpj-lookup/index.ts:58— TS2322'string | undefined' → 'string'Fail-closed: melhor 503 explícito que mandar
Authorization: undefinedpra API CNPJá (que ia rejeitar ou cobrar como anônimo). Comportamento defensivo.Validação
Por que merge
Edge Functions — Deno typecheck(falhava em 100% dos PRs hoje, inclusive chore(lint): consolida 99 imports duplicados + corrige 5 eqeqeq (Lovable 19/mai) #9 que mergeei)error instanceof Errorserá candidato a regra ESLint depois (Lovable repete esse erro com frequência — mesmo padrão aparece em 18+ lugares nas outras edges, mas não bloqueia CI hoje)Summary by cubic
Fixes three TypeScript errors in edge functions, unblocking the
Edge Functions — Deno typecheckCI gate. Adds safe error handling and a defensive env var check for the CNPJ lookup.sync-external-dbandsimulation-orchestrator: useerror instanceof Error ? error.message : String(error)before serializing (TS18046).cnpj-lookup: requireCNPJA_API_KEY; if missing, return 503 JSON error and avoid sendingAuthorization: undefined.Written for commit 0c62fc8. Summary will update on new commits. Review in cubic
Summary by CodeRabbit
Notas de Lançamento