Após alguma discussão com a equipe do Discourse por e-mail, estou atualizando aqui.
A principal descoberta é que as miniaturas não são carregadas se um link que se torna um onebox for renderizado como um iframe.
Isso significa que o link:
https://app.everviz.com/embed/N0dDTJaOQ
Renderizará ou não uma miniatura dependendo se iframes são permitidos do domínio (allowed iframes). A solução para isso é injetar de alguma forma um iframe na postagem. Criei um plugin que faz isso e garante que display: none seja definido na imagem, para evitar que ela apareça na postagem.
Imagino que seja possível generalizar isso para:
- Para todos os oneboxes genéricos, carregar silenciosamente e ocultar uma imagem ao lado dela se
get_oembed.thumbnail_urlexistir. - Provavelmente uma solução melhor, adicionar suporte geral para extrair
get_oembed.thumbnail_urle associá-lo à postagem, sem que ele faça parte da áreacookedem si.
Locais relevantes:
- https://oembed.com/
- discourse/lib/onebox/engine at main · discourse/discourse · GitHub
- discourse/lib/onebox/engine/standard_embed.rb at main · discourse/discourse · GitHub
Não estou muito satisfeito com esse comportamento modal, ou seja, allowed iframes está habilitado ou não? Seria bom se o Discourse extraísse e utilizasse todas as propriedades de um determinado endpoint oembed quando ele envia um GET para ele pela primeira vez.