Quero apenas documentar isso aqui, caso alguém mais esteja tentando fazer o mesmo e precise de um pouco de orientação.
Atualmente, estou trabalhando em um frontend React acoplado a um backend Discourse e a um plugin que personaliza algumas funcionalidades do Discourse. Eu queria fazer o MessageBus funcionar com o aplicativo frontend personalizado, mas encontrei um problema de CORS, já que o frontend está sendo servido de uma origem diferente do Discourse.
Percebi que o Discourse estava definindo o cabeçalho Access-Control-Allow-Origin para Discourse.base_url_no_prefix no ambiente do MessageBus, pois naturalmente se assume que o MessageBus funcionará com o frontend Ember padrão do Discourse.
Conforme documentado no README do MessageBus no GitHub, é possível adicionar cabeçalhos extras ao ambiente do MessageBus, que é exatamente o que o inicializador do MessageBus do Discourse está fazendo, e onde Access-Control-Allow-Origin está sendo definido como Discourse.base_url_no_prefix.
Para personalizar isso, adicionei o seguinte código ao meu plugin:
MessageBus.extra_response_headers_lookup do |env|
env["__mb"][:extra_headers].merge({
"Access-Control-Allow-Origin" => "http://your-custom-domain.com"
})
end
Isso tem a vantagem de não sobrescrever a lógica importante do Discourse ao determinar o ambiente do MessageBus, que é estabelecido ao chamar setup_message_bus_env no inicializador do Discourse, ao mesmo tempo que permite valores personalizados.
Percebo que essa configuração pode ser bastante óbvia para muitos dos desenvolvedores aqui, mas achei que valia a pena documentar, pois nem sempre é fácil unir as peças. E se isso economizar uma hora de alguém tentando resolver isso, então ótimo!
Obviamente, se algo acima estiver incorreto ou impreciso, por favor, me avise e eu farei a edição!