Expondo o status do LiveKit no serializador de configurações do site

voice_enabled não é acessível pela API JSON de forma alguma: /site.json não contém a chave site_settings. Portanto, o único sinal público de que a voz está ativa em um site é a presença de voice_assets_path.

O que estou pedindo são dois booleanos públicos, sem necessidade de credenciais, para que um cliente possa decidir se deve exibir a voz antes de buscar qualquer sala. Ambos são derivados de um estado existente e não exigem nenhum novo endpoint, em plugins/voice/plugin.rb:

Na linha 141, acima de voice_public_access:

#Sinais públicos, sem credenciais, para clientes da API de que a voz está habilitada.

add_to_serializer(:site, :voice_available) { SiteSetting.voice_enabled }

Na linha 152, acima de voice_livekit_per_room_available:

# Se as conexões podem usar o LiveKit. Uma resposta simples de sim/não: sem URL, chave ou
# valor de política. O atributo por sala abaixo apenas controla a caixa de seleção do SFU
# no formulário da sala e lê false sob a política all_rooms.

  add_to_serializer(:site, :voice_livekit_available) do

    Voice::Livekit.configured? && SiteSetting.voice_livekit_room_policy != "disabled"

  end

Isso não expõe nada de novo: expected_transport é um atributo não controlado no RoomSerializer (linha 30, definido na 150) e rooms#index ignora o login (rooms_controller.rb:18), então “livekit” / “mesh” já é legível anonimamente por sala. Isso apenas responde a isso sem uma busca de sala que pode retornar vazia.