Pular para o conteúdo

Licenciamento

Sistema de licenciamento, ambientes, controle de volume e cache.

Credencial Formato Local Finalidade
API Key pvv_api_* Backend do integrador Autenticar criação de sessões web (POST /web/sessions)
License Key pvv_<env>_<base58> Frontend / SDK Validar licenciamento do SDK antes de cada captura
Token UUID v4 Transitório Identificar uma sessão de captura específica

A API Key é segredo de backend — expô-la no frontend permite que terceiros criem sessões na sua conta. A License Key é projetada para uso no frontend — o backend de licenciamento controla por volume de capturas e ambiente.


Cada licença pertence a um ambiente. O prefixo da chave identifica o ambiente:

Ambiente Prefixo Uso Características
Sandbox pvv_sand_ Desenvolvimento e testes Volume ilimitado, integridade relaxada
Staging pvv_stag_ Homologação Volume limitado, integridade ativa
Production pvv_live_ Produção Volume limitado, integridade máxima

Chaves de ambientes diferentes não são intercambiáveis. Uma chave pvv_sand_ não funciona em produção.


SDK (frontend/app) api.provvi.com.br
──────────────── ──────────────────
1. POST /validate ──────────────────→ Verifica chave, contrato,
{ "license_key": "pvv_live_..." } volume, status do cliente
←──────────── { "valid": true,
"environment": "PRODUCTION",
"capture_resolution": "HD",
... }
2. SDK armazena em cache (1h)
3. Captura permitida
Momento Comportamento
Primeiro uso Validação obrigatória via rede
Dentro de 1 hora Cache local, sem rede
Após 1 hora Revalida via rede
Sem rede (transitória) O SDK tolera usando o último resultado de validação recente
Sem rede prolongada Bloqueio — LICENSE_NETWORK_ERROR

A resposta de /validate retorna a policy que controla o comportamento do SDK:

Campo Tipo Descrição
valid boolean Se a licença é válida
environment string PRODUCTION, STAGING, SANDBOX
integrity_enforcement string Modo de aplicação da integridade
capture_resolution string Resolução máxima de captura
tsa_required boolean Se timestamp authority é obrigatório
max_captures_per_session number? Limite por sessão (null = ilimitado)
captures_used number Total de capturas no período atual
volume_limit number Limite mensal de capturas
expires_at string Data de expiração do contrato
Modo Comportamento
BLOCK Dispositivo comprometido → captura bloqueada
WARN Dispositivo comprometido → captura prossegue, risco registrado
IGNORE Verificação de integridade ignorada
Valor Resolução Megapixels
SD 1280 x 720 ~0.9 MP
HD 1920 x 1080 ~2.0 MP
FHD 2560 x 1440 ~3.7 MP
MAX Nativa do dispositivo Variável

O volume de capturas é rastreado mensalmente por licença.

  1. Cada captura incrementa o contador no backend
  2. Cada captura bem-sucedida é contabilizada no volume mensal da sua licença.
  3. Se o volume exceder o limite: próxima validação retorna VOLUME_EXCEEDED
  4. O SDK invalida o cache local e bloqueia novas capturas

O backend emite alertas nos seguintes thresholds:

Threshold Alerta
70% do volume VOLUME_70 — aviso preventivo
90% do volume VOLUME_90 — ação recomendada
100% do volume VOLUME_100 — limite atingido

Os alertas aparecem no Admin Console e podem ser consultados via API.


Chaves de licença podem ser rotacionadas no Admin Console sem interrupção:

  1. Admin rotaciona no console → nova chave gerada
  2. Integrador atualiza a chave no código/config
  3. Nova chave passa a ser usada nas próximas validações

A chave antiga para de funcionar em seguida; atualize para a nova imediatamente para evitar interrupção.


Revogar uma licença bloqueia imediatamente todas as capturas usando aquela chave:

  1. Admin revoga no console
  2. Próxima validação retorna { "valid": false, "reason": "REVOKED" }
  3. SDK limpa cache e bloqueia
  4. Alerta REVOKED emitido no Admin Console

A revogação não pode ser desfeita. Para reativar, crie uma nova licença.


O cache é gerenciado internamente pelo SDK. Use clearCache() ao trocar de ambiente (sandbox↔produção).

O cache é invalidado automaticamente quando:

  • TTL de 1 hora expira
  • Volume excedido é detectado
  • SDK chama invalidateLicenseCache() / LicenseValidator.clearCache()
  • Licença é rotacionada (novo hash da chave)

  1. Acesse o Admin Console
  2. Navegue até Clientes → Seu cliente
  3. Na seção Licenças, copie a License Key (para o SDK)
  4. Na seção API Keys, crie uma API Key (para o backend)

Ambas as chaves são exibidas uma única vez ao serem criadas — armazene-as com segurança.

Para desenvolvimento, use chaves pvv_sand_*:

  • Sem cobrança
  • Volume ilimitado
  • Integridade relaxada (jailbreak/root não bloqueia)
  • Mesmo fluxo funcional da produção