As miniaturas estão faltando para nossos embeds externos ao usar topic-thumbnails

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:

  1. Para todos os oneboxes genéricos, carregar silenciosamente e ocultar uma imagem ao lado dela se get_oembed.thumbnail_url existir.
  2. Provavelmente uma solução melhor, adicionar suporte geral para extrair get_oembed.thumbnail_url e associá-lo à postagem, sem que ele faça parte da área cooked em si.

Locais relevantes:

  1. https://oembed.com/
  2. discourse/lib/onebox/engine at main · discourse/discourse · GitHub
  3. 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.