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
twiliodo payload de diagnóstico enviado porusePingMeeting - Remover o código de coleta de qualidade de rede que só alimentava esse sub-objeto (
getNetworkStatsemconnectionFactory.ts,connectionManager.ts, tipos doCallManager) - Remover a opção
networkQualityagora morta, passada aotwilioConnect, e oerrorBuffersó-diagnóstico usado para reportarreconnection_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-videoemsrc/infra/CallManager/strategies/twilio/ - Não toca nos campos de diagnóstico
device,network,app_stateoumedia_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
- Rodar
connectionFactory.test.tseusePingMeeting.test.ts— suítes atualizadas passam, sem referências remanescentes agetNetworkStats/twilioStats npx tsc --noEmit(ou o script de type-check do projeto) — confirma que não há referências soltas aITwilioStrategy,TNetworkStats,TConnectionErrorougetNetworkStats- Abrir uma chamada localmente; DevTools → Network → filtrar por
pings— o objetodiagnosticsdo corpo do PUT não tem chavetwilio, enquantodevice,network,app_stateemedia_devicescontinuam presentes e populados - 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.