Remover dados do Twilio do diagnóstico do ping de reunião

TLDR: remover os campos de qualidade de rede do Twilio do payload de diagnóstico do ping de reunião, já que as chamadas rodam em salas P2P do Twilio, onde a Network Quality API sempre retorna null.

Contexto

A feature de diagnóstico do ping de reunião (adicionada nesta branch, ver .project/docs/specs/20260804145005_meeting_ping_diagnostics.md) envia um sub-objeto twilio com network_quality_level, network_quality_stats e reconnection_events. A Network Quality API do Twilio só reporta dados em Group Rooms; este app se conecta ao Twilio em salas peer-to-peer, então esses campos são sempre null em produção. Manter código que só produz dados null não tem valor diagnóstico.

Os campos twilio equivalentes estão sendo removidos do backend (trgclub-api) em uma mudança paralela e separada — não faz parte deste spec.

Objetivos

  • Remover o sub-objeto twilio do payload de diagnóstico enviado por usePingMeeting
  • Remover o código de coleta de qualidade de rede que só alimentava esse sub-objeto (getNetworkStats em connectionFactory.ts, connectionManager.ts, tipos do CallManager)
  • Remover a opção networkQuality agora morta, passada ao twilioConnect, e o errorBuffer só-diagnóstico usado para reportar reconnection_events
  • Atualizar testes que cobrem os caminhos de código removidos

Fora de escopo

  • Não muda o transporte real da chamada — as chamadas continuam usando o SDK/estratégia twilio-video em src/infra/CallManager/strategies/twilio/
  • Não toca nos campos de diagnóstico device, network, app_state ou media_devices — vêm de APIs nativas do browser, nunca são null, e ficam como estão
  • Não modifica o backend (trgclub-api); essa remoção é rastreada separadamente
  • Não muda o comportamento de reconexão nos códigos de erro 53001/53405 do Twilio em connectionFactory.ts — só o buffering de diagnóstico desses erros é removido

Mudanças

Arquivo O que muda
src/containers/Call/Call.tsx Remove o callback getTwilioData e o lookup de contexto callManager que só o alimentava; chama usePingMeeting(id as string) sem segundo argumento; remove imports agora não usados (useContext, CallManagerContext, ICallManager)
src/infra/CallManager/strategies/twilio/factories/connectionFactory.ts Remove a opção networkQuality: { local: 1, remote: 1 } do twilioConnect; remove o array errorBuffer e a chamada errorBuffer.push(...) dentro do handler reconnecting (o resto da lógica de reconexão desse handler para os códigos 53001/53405 permanece); remove a função getNetworkStats e sua entrada no objeto retornado; remove imports agora não usados TConnectionError/TNetworkStats
src/infra/CallManager/modules/connectionManager.ts Remove a delegação getNetworkStats (const getNetworkStats = () => strategy.getNetworkStats()) e sua entrada no objeto retornado
src/infra/CallManager/types.ts Remove os tipos TNetworkStats e TConnectionError; remove getNetworkStats de ICallManager; remove ITwilioStrategy (só adicionava getNetworkStats sobre ICallManagerStrategy<TTrack>) e faz ICallManagerSelectedStrategy estender ICallManagerStrategy<TTrack> diretamente
src/infra/CallManager/strategies/twilio/factories/__tests__/connectionFactory.test.ts Remove o describe block de getNetworkStats e os campos de mock networkQualityLevel/networkQualityStats que só existiam para suportá-lo
src/hooks/__tests__/usePingMeeting.test.ts Remove o caso de teste/mock que cobre o merge de twilioStats no payload

usePingMeeting.ts em si não precisa de mudança — seu parâmetro getExtraData já é genérico e só repassado via spread; ele fica sem uso assim que Call.tsx parar de passá-lo, o que é aceitável já que o parâmetro é opcional.

Payload Schema (depois desta mudança)

typescript { diagnostics: { timestamp: string, device: { user_agent: string, }, network: { online: boolean, effective_type: string | null, downlink: number | null, rtt: number | null, save_data: boolean, }, app_state: { visibility_state: 'visible' | 'hidden', }, media_devices: { audioinput_count: number, audiooutput_count: number, videoinput_count: number, }, }, }

Nenhuma chave twilio é mais enviada.

Como verificar

  1. Rodar connectionFactory.test.ts e usePingMeeting.test.ts — suítes atualizadas passam, sem referências remanescentes a getNetworkStats/twilioStats
  2. npx tsc --noEmit (ou o script de type-check do projeto) — confirma que não há referências soltas a ITwilioStrategy, TNetworkStats, TConnectionError ou getNetworkStats
  3. Abrir uma chamada localmente; DevTools → Network → filtrar por pings — o objeto diagnostics do corpo do PUT não tem chave twilio, enquanto device, network, app_state e media_devices continuam presentes e populados
  4. Confirmar que a chamada ainda conecta e o comportamento de reconexão (reconexão forçada no erro 53405 do Twilio) ainda funciona — essa lógica está intocada, só seu efeito colateral de diagnóstico é removido

Documentação

Nenhuma mudança de documentação necessária. O spec original (.project/docs/specs/20260804145005_meeting_ping_diagnostics.md) permanece como registro histórico de por que os campos do Twilio existiam; este spec substitui seu sub-objeto twilio.