# Ativar dados autenticados no Cloudflare — v8

Este ZIP inclui o site e um servidor `_worker.js` compatível com o upload direto no Cloudflare Pages. Não usa pasta `functions`, que o upload pelo painel não compila. O site funciona sem chaves com todos os dados incluídos na v7; **não há xG/lesões/técnicos autenticados incluídos**. O conector foi testado com respostas simuladas, não com sua conta nos provedores.

## 1. Publicar

Faça upload de `brasileirao-2026-cloudflare-v8.zip` no projeto Pages existente. `index.html`, `_worker.js` e `_routes.json` precisam estar na raiz, sem pasta intermediária. O Worker do servidor é diferente de `worker.js`, que executa Monte Carlo no navegador.

## 2. Obter as chaves

Crie as contas pessoalmente, confirme email, confira os termos e copie as chaves do painel:

- [API-FOOTBALL](https://dashboard.api-football.com/register): ausências e técnicos. Gratuito anunciado: 100 consultas/dia. Acesso à temporada 2026 e cobertura de ausências dependem do plano e são verificados durante a sincronização.
- [StrikerAPI](https://strikerapi.com/signup): xG próprio calculado sobre eventos ESPN. Gratuito anunciado: 500 créditos por ciclo de aniversário mensal. Um mapa custa 10 créditos. Não equivale ao xG Opta. [Termos](https://strikerapi.com/terms) exigem email verificado e limitam a redistribuição dos dados; este app oferece apenas projeções por partida, sem resposta crua do provedor.

Não envie suas chaves na conversa, não as inclua em arquivos do ZIP ou no código da página.

## 3. Configurar o projeto Pages

No painel Cloudflare, crie um namespace **Workers KV**. Em Settings → Bindings do projeto Pages, associe esse namespace com o nome exato `PROVIDER_CACHE`.

Em Settings → Variables and Secrets, adicione como **segredos**, no ambiente de produção:

| Nome | Conteúdo |
|---|---|
| `API_FOOTBALL_KEY` | Chave da sua conta API-FOOTBALL |
| `STRIKER_API_KEY` | Chave da sua conta StrikerAPI |
| `SYNC_TOKEN` | Senha aleatória longa, exclusiva para sincronizar este site |

Pode configurar só um provedor. Depois das alterações, faça um novo deployment para garantir que os vínculos e segredos sejam aplicados. Deployments de preview precisam de configuração própria; prefira o endereço estável `https://brasileirao.pages.dev` para o agendamento.

## 4. Primeira consulta

Acesse `/api/providers/status` no domínio publicado: deve indicar os vínculos como configurados. Esse endereço não mostra chaves. Na aba Dados ampliados, o botão **Ler dados das APIs** só lê o cache; não dispara uma consulta cobrada.

Para sincronizar, envie um **POST** para `https://SEU-DOMINIO/api/admin/sync` com cabeçalho `Authorization: Bearer SEU_SYNC_TOKEN`, usando um cliente HTTP de sua preferência. Não coloque o token na URL. Nenhum corpo é necessário. O servidor ignora dados/URLs enviados pelo cliente e só consulta os destinos fixos do app.

O primeiro ciclo verifica a Série A/2026 e os 20 clubes, consulta as ausências se cobertas, um técnico e um jogo com xG. A associação entre IDs ESPN e API-FOOTBALL é conferida por clube, mando e data. Se nomes/formatos divergirem, a fonte fica com erro visível em vez de aceitar uma associação aproximada.

Cada fonte tem horário de sucesso, tentativas, erro e cobertura. “Ciclo concluído” não significa que todas as fontes responderam. Plano sem 2026, chaves inválidas e respostas incompletas mantêm os dados anteriores com sua data.

## 5. Agendamento opcional

Pages não executa cron sozinho. Crie um Worker separado no Cloudflare com o conteúdo de `agendamento/cron-worker.js`. Configure nele o segredo `SYNC_TOKEN` com o mesmo valor e a variável `APP_ORIGIN` com o endereço estável do seu site (apenas origem HTTPS). Adicione um Cron Trigger `0 */4 * * *` no painel. O script também está no ZIP como referência; seu simples upload no Pages **não ativa o cron**.

Com isso, cada ciclo consulta no máximo um novo jogo de xG e um técnico. A cobertura é gradual: até 40 tentativas de xG por janela móvel de 35 dias, não os 380 jogos imediatamente. Um técnico por ciclo permite observar os 20 clubes em cerca de 80 horas; depois, atualiza primeiro o mais antigo. O backend exige intervalo mínimo de quatro horas. Não ligue mais de um agendamento para o mesmo projeto/namespace.

Limites locais: 80 chamadas API-FOOTBALL por dia UTC, 400 créditos Striker por 35 dias. Tentativas malsucedidas também contam conservadoramente. Esses contadores são aproximados, não o saldo real da sua conta; KV não oferece bloqueio global transacional e outros apps podem consumir sua chave. Não há compra/upgrade automático. Confira o saldo no provedor.

## Efeito no modelo

Os novos pesos continuam em zero: não houve calibração retrospectiva destes feeds. Ative xG ou redução de memória por técnico nas opções, caso queira experimentar. Observações posteriores ao horário da base atual são excluídas do treino; atualize a base ESPN depois da sincronização. O xG manual prevalece sobre o autenticado quando ambos são válidos para a mesma partida.

Um mapa só entra se todos os chutes tiverem jogo/time identificados, xG numérico válido e cobertura completa, com contagem por lado igual à ESPN. Dados incompatíveis são recusados; uma tentativa recusada não é repetida automaticamente, para poupar créditos. O modelo de gols contra não é inferido do mapa.

Ausências têm escopo da partida, data da consulta e motivo informado; retorno desconhecido fica vazio. Tipo não confirmado permanece “ausência reportada”. Não se inferem suspensões por cartões parciais. São informativas, sem impacto automático nos gols esperados. O perfil atual do técnico não fornece histórico completo de trocas.

Os feeds autenticados não entram nos arquivos exportados de cenário/resultados. Ao reabrir um cenário, o site usa o cache disponível no servidor; para reprodução exata do experimento, mantenha a mesma base/cache ou use dados manuais verificáveis. Os testes históricos incluídos permanecem os da v7, sem esses feeds atuais.

## Referências e verificação

Documentação pública conferida em 18/10/2026. Horários de cada consulta real ficam no próprio app.

- [Cloudflare: upload direto e suporte a `_worker.js`](https://developers.cloudflare.com/pages/get-started/direct-upload/)
- [Cloudflare: Advanced Mode](https://developers.cloudflare.com/pages/functions/advanced-mode/)
- [Cloudflare: vínculos e segredos](https://developers.cloudflare.com/pages/functions/bindings/)
- [API-FOOTBALL: guia oficial](https://www.api-football.com/news/post/how-to-get-started-with-api-football-the-complete-beginners-guide)
- [API-FOOTBALL: planos](https://www.api-football.com/pricing)
- [StrikerAPI: mapa de chutes](https://strikerapi.com/docs/get-shot-map)
- [StrikerAPI: OpenAPI](https://mcp.strikerapi.com/openapi.json)
