17.W Stealth Observability (Superadmin)#
Scaffold inicial para os dashboards administrativos de fingerprint/warmup. Os endpoints abaixo já existem e mantem shape estável mesmo antes das tasks que populam os campos de fingerprint/warmup.
GET/v1/admin/fingerprint-audit#
Resumo frota-wide de diversidade de plataforma/spec/cidade + violacoes de coerencia.
Auth: Superadmin
Resposta 200:
{
"total_instances": 0,
"by_platform": {},
"by_utls_spec": {},
"by_city": {},
"coherence_violations": {
"city_mismatch_ddd": 0,
"push_name_equals_api": 0,
"mcc_equals_000": 0,
"platform_spec_mismatch": 0
},
"warmup_distribution": {}
}
Notas:
total_instancese contado na frota ativa.- Os mapas podem vir vazios no bootstrap inicial; a shape não muda.
- O frontend admin em
/platform/fingerprint-auditconsome este payload.
GET/v1/admin/warmup-audit#
Resumo frota-wide da distribuição de warmup, instâncias perto do daily cap e próximas promocoes.
Auth: Superadmin
Resposta 200:
{
"total_instances": 0,
"by_phase": {},
"near_daily_cap": [],
"next_promotions": []
}
Notas:
- O endpoint existe antes dos produtores finais de warmup para permitir integração antecipada do dashboard.
- O frontend admin em
/platform/warmup-auditconsome este payload.
Fingerprint uTLS Pool (Superadmin)#
Profiles deste pool são atribuidos somente a instâncias novas. Instâncias já pareadas nunca são mutadas, e a fonte de verdade em runtime contínua sendo o campo tenant fingerprint_utls_spec.
Built-ins entram como staging; WA Probe e o único gate que promove um profile para active.
GET /v1/admin/fingerprint-pool/profiles#
Retorna todos os profiles uTLS do master DB com status, peso, último probe e estado de burn.
Auth: Superadmin
PATCH /v1/admin/fingerprint-pool/profiles/{profileName}#
Atualiza campos operacionais de um profile. Permite weight entre 0 e 1000 e status igual a staging, deprecated ou burned. active não e aceito neste endpoint: WA Probe contínua sendo o único gate de promoção para active.
Auth: Superadmin
Body:
{
"status": "deprecated",
"weight": 3
}
POST /v1/admin/fingerprint-pool/profiles/seed-builtins#
Seed idempotente dos profiles compilados no binario atual. Em 2026-05-08, o builtin disponível e safari-mac-17.
Auth: Superadmin
POST /v1/admin/fingerprint-pool/profiles/{profileName}/wa-probe/{proxyId}#
Executa um WhatsApp QR Probe descartavel através do proxy selecionado usando o profile uTLS escolhido. Não pareia instância de cliente.
Auth: Superadmin
Metricas relacionadas: biazap_fingerprint_utls_pool_active_size, biazap_fingerprint_utls_assignments_total, biazap_fingerprint_utls_probe_total, biazap_fingerprint_utls_burn_total.
GET/v1/admin/app-version#
Retorna o estado singleton do rollout de AppVersion mantido pelo worker no master DB. O worker consulta o upstream do whatsmeow a cada 14 dias, válida o semver detectado e apenas faz stage; a aplicação na frota depende de aprovacao explicita por superadmin.
Auth: Superadmin
Resposta 200:
{
"current_catalog_version": "2.3000.1034566421",
"detected_upstream_version": "2.3001.1",
"staged_pending_approval_version": "2.3001.1",
"canary_rollout": {
"active": true,
"started_at": "2026-04-21T15:00:00Z",
"instance_ids": [
"inst-a",
"inst-b",
"inst-c",
"inst-d",
"inst-e"
],
"fleet_applied_at": null
},
"last_fetch_at": "2026-04-21T14:00:00Z"
}
Notas:
staged_pending_approval_versionfica vazio quando o upstream não detecta um valor mais novo que o catalogo atual.canary_rollout.active=truesignifica que a versão staged já foi aprovada e está observando 5 instâncias por 72h antes do fleet apply.- O worker persiste o estado em
app_version_states(singletonid=1) para sobreviver a restart.
POST/v1/admin/app-version/approve#
Aprova a versão staged e inicia o rollout canary em 5 instâncias conectadas escolhidas aleatoriamente. Não recebe body.
Auth: Superadmin
Resposta 200:
{
"current_catalog_version": "2.3000.1034566421",
"detected_upstream_version": "2.3001.1",
"staged_pending_approval_version": "2.3001.1",
"canary_rollout": {
"active": true,
"started_at": "2026-04-21T15:00:00Z",
"instance_ids": [
"inst-a",
"inst-b",
"inst-c",
"inst-d",
"inst-e"
],
"fleet_applied_at": null
},
"last_fetch_at": "2026-04-21T14:00:00Z"
}
Resposta 400:
{
"error": "no staged app version pending approval"
}
Notas:
- O canary escreve
fingerprint_app_versionapenas nas 5 instâncias selecionadas; o restante da frota contínua comcurrent_catalog_version. - Depois de 72h sem falha observada, o worker promove a staged para
current_catalog_version, aplica na frota toda e emitestealth.app_version_fleet_applied. - Se o fetch upstream falhar ou for rejeitado nas sanity checks, o worker mantem o catalogo atual, loga WARN e incrementa
biazap_appversion_fetch_failed_total.
POST/v1/admin/instances/{instanceId}/warmup/bypass#
Concede um bypass temporario do warmup v2 para uma instância especifica. O worker passa a ignorar os gates de warmup_phase, daily cap e janela horaria enquanto a chave Redis do bypass estiver válida.
Auth: Superadmin
Body JSON:
{
"reason": "sla unblock",
"ticket_id": "SUP-123",
"auto_expire_at": "2026-04-22T12:00:00Z"
}
Campos:
reasonobrigatório.ticket_idobrigatório.auto_expire_atopcional. Quando omitido, a API usa TTL padrão de 24h.
Resposta 200:
{
"instance_id": "84c2e480-...",
"token": "0f3f6f15-3fa2-46f0-b7a7-d7790f9e5e36",
"expires_at": "2026-04-22T12:00:00Z"
}
Notas:
- O grant grava uma linha em
stealth_audit_eventscomevent_type = "warmup.bypass_granted". - O bypass e rate-limited por instância no Redis para evitar uso repetitivo sem triagem humana.
- O valor retornado em
tokene apenas auditoria/operação; o gate do worker válida a chave Redis por instância.
POST/v1/admin/instances/{instanceId}/hygiene/apply#
Forca a aplicação imediata dos defaults de hygiene na instância conectada e persiste hygiene_skip=false para os próximos connects.
Auth: Superadmin
Body JSON: nenhum.
Resposta 200:
{
"instance_id": "84c2e480-...",
"company_id": 1,
"hygiene_skip": false
}
Notas:
- O endpoint reutiliza o mesmo applier deterministico do worker (
FingerprintSeed -> push_name/avatar/status). - O endpoint e rate-limited por instância no Redis para evitar uso repetitivo sem triagem humana.
- A chamada falha se a instância não tiver sessão WhatsApp conectada no worker; nesse caso
hygiene_skippermanece inalterado. - Cada alteração aplicada gera
stealth.audit_event/hygiene.appliedcomevent_data.typeempush_name,photooustatus.
Regras de alerta seedadas#
No primeiro boot, a API passa a semear também estas AlertRule padrão para o modulo Stealth:
FingerprintPlatformDiversityLowUTLSSpecsTooFewConnectionBurstWarmupReceiveOnlyBacklogBanRateSpikeProxyPoolCityStarvedStealthDebugModeStuckStealthAuditTableUnbounded