Skip to content

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:

CompanhiaPrefixo das rotasIdentificador interno (cia)
Smiles (GOL)/smilessmiles
LATAM Pass/latamlatam
TudoAzul/azulazul

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 pede session: 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:

  1. Erros "upstream" são erros do serviço de automação, não necessariamente da companhia. O pacote internal/upstream existe justamente para preservar status e corpo dessas respostas.
  2. 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ênciaPapelConfiguração
RedisCache de tokens/sessões e lock do cronREDIS_*
Pigeon CarrierEntrega dos códigos MFA recebidos por e-mail/SMS/WhatsAppPIGEON_*
Serviços de automaçãoExecução do login em cada companhiaSMILES_*, LATAM_*, AZUL_*
GraylogDestino dos eventos estruturadosGRAYLOG_*

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) via bot-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.

Documentação interna — 123milhas