Aparência
Introdução
O Khronos é o serviço responsável por autenticar contas em programas de fidelidade aéreos e entregar, para o restante da plataforma, uma sessão utilizável: tokens OAuth, cookies e dados da conta.
Hoje ele cobre três companhias:
| Companhia | Prefixo das rotas | Identificador interno (cia) |
|---|---|---|
| Smiles (GOL) | /smiles | smiles |
| LATAM Pass | /latam | latam |
| TudoAzul | /azul | azul |
O que o Khronos faz
- Recebe usuário e senha, executa o fluxo de login da companhia (incluindo MFA quando exigido) e devolve o par de tokens.
- Guarda o resultado no Redis para que o próximo pedido do mesmo CPF não precise logar de novo.
- Renova tokens expirados — sob demanda no próprio login e em background, por cron, no caso da Smiles.
- Monta a sessão de navegador (cookies +
localStorage) quando o consumidor pedesession: true. - Publica métricas Prometheus e um fluxo de eventos estruturados por passo de login.
O que o Khronos não faz
Ele não fala diretamente com os sites das companhias. Cada chamada de login sai do Khronos para um serviço de automação interno, configurado por variável de ambiente (SMILES_OAUTH_URL, LATAM_LOGIN_URL, AZUL_LOGIN_URL, …). Esse serviço é quem lida com o navegador, o antibot e as particularidades de cada site.
consumidor ──► Khronos ──► serviço de automação ──► site da companhia
│
├──► Redis (cache de sessão)
└──► Pigeon (códigos de MFA)Isso explica duas coisas que aparecem o tempo todo no código:
- Erros "upstream" são erros do serviço de automação, não necessariamente da companhia. O pacote
internal/upstreamexiste justamente para preservar status e corpo dessas respostas. proxyUrlé um parâmetro repassado adiante — o Khronos nunca usa o proxy diretamente, apenas inclui no payload que envia para a automação.
Dependências externas
| Dependência | Papel | Configuração |
|---|---|---|
| Redis | Cache de tokens/sessões e lock do cron | REDIS_* |
| Pigeon Carrier | Entrega dos códigos MFA recebidos por e-mail/SMS/WhatsApp | PIGEON_* |
| Serviços de automação | Execução do login em cada companhia | SMILES_*, LATAM_*, AZUL_* |
| Graylog | Destino dos eventos estruturados | GRAYLOG_* |
Stack
- Go (versão do
go.mod:1.26.1) - huma v2 sobre chi — roteamento, validação e OpenAPI automático
- Redis (
go-redis/v9) - Prometheus (
client_golang) viabot-tools-go/metrics - logrus (eventos estruturados / Graylog) e slog (log operacional)
- robfig/cron para o job de refresh da Smiles
Próximo passo: Primeiros passos.