Skip to content

ADR-401: Licensing — License & Download

Status: Accepted

Contexto

Público-alvo primário (empresas de software no WordPress) precisa de gestão de licenças: chaves por domínio, ativação/desativação, max ativações, renovação automática, distribuição de downloads. Atualmente, WOO_SL (WC Software License) gerencia chaves mas não tem visibilidade no portal, renovação depende de memória do admin, e cliente não vê suas licenças em lugar único.

Decisão

License (Adapter WOO_SL)

License é domínio CORE que abstrai gestão de chaves via LicenseAdapter. Se WOO_SL ativo, adapter lê chaves do WOO_SL. Se ausente, usa gestão built-in simplificada.

AspectoDetalhe
VinculaçãoLicense pertence a Entitlement (classe PLG)
ChaveGerada automaticamente (ou via WOO_SL)
AtivaçãoPor domínio registrado (ex: moodle.cliente.com)
Max ativaçõesConfigurável por produto (ex: 5 sites)
Statusactive / expired / revoked
PortalCliente vê: chave, domínios ativados, max, expiração
Auto-provisioningPLG Entitlement → License criada automaticamente

Download (Distribuição Digital)

Download é domínio OPTIONAL vinculado a PLG Entitlements. Distribuição de produtos digitais (plugins, assets) para clientes com licença ativa.

AspectoDetalhe
VinculaçãoDownload habilitado via Entitlement PLG (ou ORD)
FonteWC downloadable products via DownloadAdapter
AcessoApenas com Entitlement ativo (license válida)
PortalLink de download visível, versão atual

Auto-Renovação via WC Subscriptions

Se WC Subscriptions ativo, licenças renovam automaticamente via assinatura. Hook woocommerce_subscription_status_updated atualiza Entitlement. Se ausente, renovação é manual (quote de renovação).

Lembretes Automáticos

Lembretes escalonados antes da expiração: 30 dias, 15 dias, 7 dias (configurável via NotificationPolicy). Se auto-renovação ativa, lembretes são informativos. Se manual, incluem link de renovação.

Fluxo Self-Serve

Cliente compra plugin → Pagamento → PLG Entitlement criado
→ License key gerada → Download habilitado
→ Cliente ativa licença no domínio (API)
→ Portal mostra: chave, ativações, expiração
→ 30/15/7 dias antes: lembrete de renovação
→ Auto-renovação (WC Sub) ou manual (quote/portal)

Distribuição via CDN (NextJS + Cloudflare)

Downloads de plugins são autorizados na edge para performance e disponibilidade global:

1. Cliente solicita download no portal NextJS
2. Portal gera request para Cloudflare Worker com token de licença
3. Worker valida: licença ativa, produto corresponde, domínio autorizado, limite não excedido
4. Se válido, Worker gera signed URL do R2 com expiração curta (5 min)
5. Cliente recebe redirect para download direto do R2

Catálogo de plugins (metadados: nome, slug, versão, changelog, compatibilidade) reside no ecossistema NextJS/Cloudflare (D1 + R2). Permite atualizações de catálogo independentes do WordPress.

Detalhes de LicenseService API, endpoints REST, tipos de licença e DownloadsService em REF-401-01.

Consequências

Positivas:

  • Self-serve completo para público-alvo primário (empresas de software)
  • WOO_SL adapter preserva compatibilidade com plugin existente
  • Lembretes automáticos previnem renovações perdidas
  • Portal dá visibilidade que cliente não tem hoje
  • Downloads via CDN/edge oferecem performance superior e disponibilidade global
  • Validação de licença na edge elimina carga no WordPress para operações de alta frequência
  • Bundles permitem precificação e empacotamento flexível

Negativas:

  • Dependência de WOO_SL para gestão avançada (built-in é simplificada)
  • WC Subscriptions necessário para auto-renovação (sem ele, manual)
  • Ativação por domínio requer validação (DNS, domínio fake)
  • Arquitetura distribuída (WP emite, NextJS/CF entrega) aumenta complexidade operacional
  • Sincronização de estado de licença entre WordPress e D1/Workers requer mecanismo confiável

Referências

  • REF-401-01 — License Activation & Renewal
  • ADR-202 — Entitlement (PLG provisiona License)
  • ADR-103 — Plugin Ecosystem (WOO_SL como dependência opcional)
  • Fluxo License de Plugin — conteúdo absorvido neste ADR e REF