Integração Cloudflare
O MIDDAG Account utiliza Cloudflare D1 e R2 como serviços de infraestrutura. O D1 fornece um banco de dados réplica de leitura na edge para o portal do cliente. O R2 fornece armazenamento de objetos para ZIPs de plugins, documentos e outros arquivos. Workers, D1 e R2 são infraestrutura externa gerenciada fora do plugin -- o plugin lida com o lado WordPress da sincronização.
Configuração
Token de API
O plugin comunica-se com o Cloudflare usando um token de API com permissões para D1 e R2. Configure-o como variável de ambiente:
| Variável | Descrição |
|---|---|
CLOUDFLARE_API_TOKEN | Token de API do Cloudflare |
CLOUDFLARE_ACCOUNT_ID | ID da conta Cloudflare |
O token deve ter as permissões mínimas necessárias: leitura/escrita no D1 e leitura/escrita de objetos no R2.
D1 -- Banco de dados na edge
O D1 atua como cache de réplica de leitura para dados que o portal do cliente (NextJS) acessa com frequência. O plugin WordPress é a fonte da verdade; o D1 é uma camada de desempenho.
O que é armazenado em cache
| Dado | Origem no plugin | Método de atualização |
|---|---|---|
| Perfis de organização | OrganizationService | Webhook (quase em tempo real) |
| Status de licenças | LicenseService | Webhook (quase em tempo real) |
| Catálogo de produtos | WooCommerce | Cron (periódico) |
| Metadados de plugins | DownloadService | Cron (periódico) |
Sincronização
Dois mecanismos mantêm o D1 sincronizado:
Webhooks (quase em tempo real): Quando dados relevantes mudam (organização atualizada, licença ativada, pedido criado), o plugin dispara um webhook para um endpoint Cloudflare Workers via
do_action('middag_cloudflare_sync', $entity, $event).Cron (reconciliação): Um job WP-Cron periódico sincroniza dados em lotes para capturar quaisquer alterações que os webhooks possam ter perdido.
Consistência eventual é aceitável para o portal. Operações críticas (válidação de licença, processamento de pagamento) sempre consultam a REST API do plugin diretamente.
Invalidação de cache
Quando um produto ou documento é atualizado, o plugin aciona a invalidação no D1 e purga o cache dos Workers via API do Cloudflare.
R2 -- Armazenamento de objetos
O R2 fornece armazenamento de objetos compatível com S3. O plugin o utiliza para distribuição de arquivos e gerenciamento de documentos.
Buckets
| Bucket | Conteúdo | Gerenciado por |
|---|---|---|
middag-plugins | Arquivos ZIP de plugins WordPress versionados | CI/CD + Plugin |
middag-documents | Contratos, PDFs de faturas, termos | Plugin |
middag-app-cache | Cache ISR do NextJS | Workers |
URLs assinadas
O plugin gera URLs temporárias pré-assinadas para downloads autorizados do R2. Antes de gerar uma URL, o plugin válida o status da licença ou entitlement do solicitante. As URLs expiram após um período configurável.
Uploads
O plugin faz upload de documentos (contratos, PDFs de faturas) para o R2 usando a API compatível com S3. Isso acontece automaticamente quando um documento é gerado ou vinculado a um entitlement.
Arquitetura
O plugin lida apenas com dados de saída. Ele envia dados para o D1 e R2, e invalida caches. Ele não recebe dados de entrada do Cloudflare.