Skip to content

Harden product-webhook contract validation and Supabase typing#203

Merged
adm01-debug merged 1 commit into
mainfrom
codex/refactor-product-webhook-types-and-validations
May 24, 2026
Merged

Harden product-webhook contract validation and Supabase typing#203
adm01-debug merged 1 commit into
mainfrom
codex/refactor-product-webhook-types-and-validations

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 24, 2026

Motivation

  • Evitar uso inseguro de any no client Supabase e alinhar a função com os tipos gerados do schema para reduzir erros de runtime e melhorar autocompleção;
  • Proteger o endpoint product-webhook contra payloads massivos ou formas inválidas em campos livres (variations, metadata) que hoje poderiam atravessar validações permissivas;
  • Garantir regressões não reapareçam adicionando testes de contrato que cubram casos negativos que antes passariam como any.

Description

  • Substituí o uso genérico por tipagem explícita ao instanciar o client com createClient<Database>(...) e alterei a assinatura de upsertProducts para SupabaseClient<Database> no arquivo supabase/functions/product-webhook/index.ts.
  • Introduzi um JsonValueSchema recursivo com limites (.max(100) para arrays e limite de chaves por objeto) e um VariationSchema baseado em z.unknown().superRefine(...) que valida forma mínima, número de chaves e presença de id/external_id/sku no arquivo supabase/functions/_shared/contracts/schemas/product-webhook.ts.
  • Troquei variations: z.array(z.any()) por variations: z.array(VariationSchema) e converti metadata para z.unknown() com validação estrutural que recusa objetos/arrays excessivamente grandes; essas mudanças impõem limites para evitar payloads massivos.
  • Adicionei testes de contrato negativos em supabase/functions/_shared/contracts/schemas/product-webhook.test.ts cobrindo variação como string, variação sem identificador, metadata com mais de 100 chaves e metadata com array gigante.

Testing

  • Executei a tentativa de teste automatizado com deno test supabase/functions/_shared/contracts/schemas/product-webhook.test.ts, porém a execução falhou por limitação do ambiente: deno: command not found.

Codex Task


Summary by cubic

Hardened product-webhook validation and added type-safe Supabase client to block oversized/invalid payloads and reduce runtime errors.

  • Refactors

    • Made Supabase client type-safe using createClient<Database>(...) from @supabase/supabase-js and SupabaseClient<Database> in upsertProducts.
    • Replaced permissive schemas with strict zod validators: VariationSchema requires id/external_id/sku and limits keys; JsonValueSchema caps arrays at 100 and metadata objects to 100 keys.
  • Bug Fixes

    • Added negative contract tests for invalid variations and massive metadata to prevent regressions.

Written for commit 1366a0f. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

Notas de Lançamento

  • Melhorias

    • Validações mais rigorosas implementadas para dados de produtos em integrações de webhooks, garantindo que variações possuam identificadores válidos e que metadados respeitem limites de tamanho e estrutura.
  • Testes

    • Cobertura de testes expandida para cenários de validação de webhooks de produtos.

Review Change Stack

Copilot AI review requested due to automatic review settings May 24, 2026 00:54
@vercel
Copy link
Copy Markdown

vercel Bot commented May 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
we-dream-big Ready Ready Preview, Comment May 24, 2026 12:56am

@supabase
Copy link
Copy Markdown

supabase Bot commented May 24, 2026

This pull request has been ignored for the connected project doufsxqlfjyuvxuezpln due to reaching the limit of concurrent preview branches.
Go to Project Integrations Settings ↗︎ if you wish to update this limit.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

O PR aprimora a validação de webhooks de produtos introduzindo schemas Zod estritos para campos variations e metadata, adiciona testes que cobrem rejeição de payloads inválidos, e melhora a tipagem do cliente Supabase no handler removendo any.

Changes

Validação e tipagem do webhook de produtos

Layer / File(s) Summary
Schemas de validação para variações e metadata
supabase/functions/_shared/contracts/schemas/product-webhook.ts
Introduz JsonValueSchema recursivo para validar metadata como valores JSON com limites de profundidade/chaves, e VariationSchema que exige objeto não-vazio com máx. 30 chaves e identificador (id/external_id/sku) obrigatório. O ProductV1 deixa de aceitar z.any() em variations e z.record(z.any()) em metadata, usando os novos validadores que refletem automaticamente em ProductWebhookV1Payload e ProductWebhookV2Payload.
Testes de validação para payloads inválidos
supabase/functions/_shared/contracts/schemas/product-webhook.test.ts
Adiciona 4 casos de teste que cobrem rejeição esperada (result.success === false): variações com formato inválido (string), variações sem identificador obrigatório, metadata massiva e arrays gigantes dentro de metadata.
Tipagem do cliente Supabase
supabase/functions/product-webhook/index.ts
Remove any do cliente Supabase: importa tipos SupabaseClient<Database> e parametriza createClient<Database>(). Altera parâmetro supabase em upsertProducts de any para SupabaseClient<Database>, restringindo o contrato de tipos.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • adm01-debug/promo-gifts-v4#45: Trabalha no mesmo contrato Zod do product-webhook.ts e adiciona/ajusta testes de validação para ProductWebhookV1.
  • adm01-debug/promo-gifts-v4#87: Ajusta o schema compartilhado product-webhook.ts com novas validações estritas e está ligado a migração do parseContract no handler.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed O título reflete com precisão as duas mudanças principais do PR: endurecimento da validação do contrato do product-webhook e melhoria da tipagem do Supabase, alinhado com os objetivos documentados.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/refactor-product-webhook-types-and-validations

Comment @coderabbitai help to get the list of available commands and usage tips.

@adm01-debug adm01-debug merged commit c832c1f into main May 24, 2026
20 of 27 checks passed
@adm01-debug adm01-debug deleted the codex/refactor-product-webhook-types-and-validations branch May 24, 2026 00:56
@adm01-debug adm01-debug review requested due to automatic review settings May 24, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant