# Token da Meta (CAPI) — troca e renovação sem redeploy

O Worker usa, nesta ordem: **token no KV** (gravado pela rota admin) → secret `META_ACCESS_TOKEN`.
Trocar o token não exige `wrangler secret put` nem `wrangler deploy`.

## Qual token usar

| Tipo | Validade | Observação |
|---|---|---|
| Token do **dataset (Pixel)** gerado no Gerenciador de Eventos | sem expiração, até ser revogado | mais simples para a CAPI |
| **System User** do Business Manager | pode ser criado "sem expiração" | recomendado para produção |
| Token de **usuário** de longa duração | ~60 dias | renovável automaticamente (abaixo) |

## Rotas administrativas

Todas exigem `Authorization: Bearer <ADMIN_API_TOKEN>`.

```bash
# estado do token (origem, final do token, validade) — nunca o valor completo
curl -H "Authorization: Bearer $ADMIN_API_TOKEN" https://SEU-WORKER/admin/meta-token

# trocar o token: valida no seu Pixel antes de gravar
curl -X POST -H "Authorization: Bearer $ADMIN_API_TOKEN" -H "Content-Type: application/json" \
     -d '{"token":"NOVO_TOKEN"}' https://SEU-WORKER/admin/meta-token

# voltar a usar o secret META_ACCESS_TOKEN
curl -X DELETE -H "Authorization: Bearer $ADMIN_API_TOKEN" https://SEU-WORKER/admin/meta-token
```

O token novo só é gravado se a Meta confirmar que ele acessa o Pixel configurado (`META_PIXEL_ID`).

## Renovação automática (opcional)

Para tokens de usuário de longa duração, configure:

```bash
wrangler secret put META_APP_ID
wrangler secret put META_APP_SECRET
```

O cron semanal verifica a validade (`debug_token`) e, se faltarem menos de 10 dias, troca o token
(`fb_exchange_token`) e grava o novo no KV. Tokens sem expiração são ignorados.
Forçar agora: `POST /admin/meta-token/refresh`.

## Detalhes

- O token vai no header `Authorization` das chamadas à Meta, nunca no corpo, então não chega aos logs do D1.
- O KV usado é o binding `GEO_CACHE`, chave `meta:access_token`. O KV é privado da sua conta, mas não é um cofre de segredos; se preferir apenas secrets, não use a rota POST.
- Erro Meta `190` (token inválido/expirado) aparece no log do Worker com a instrução de enviar um token novo.
- A versão da Graph API fica em `modules/meta-api.ts` (`DEFAULT_GRAPH_VERSION`). Para testar outra versão sem alterar o código, defina a var `META_GRAPH_VERSION` (ex.: `v26.0`).
