Cómo referirse a `api.addPosterIcon` desde dentro de una función

Hola,

¿Podría alguien aconsejar cómo hacer referencia a api.addPosterIcon desde dentro de una función?

Ejemplo:

<script type="text/discourse-plugin" version="0.8">
   api.onPageChange(url => {
       if (Discourse?.currentUser?.admin) {
           extract_associated_user_data();
       }
   });
   function extract_associated_user_data() {
       // mucho código arriba, y ahora estamos listos para llamar a la función `addPosterIcon`
       api.addPosterIcon(function(data, attrs) {
            return { icon: 'user', className: 'customer' };       
       });
   }
</script>

Si api.addPosterIcon se mueve al nivel superior, funciona; sin embargo, cuando se ejecuta desde dentro de extract_associated_user_data, simplemente no hace nada en silencio (no se ejecuta). Quizás this se está confundiendo internamente, pero no estoy seguro de cómo hacer referencia a él de todos modos. He probado muchas cosas antes de publicar esto.

Espero que esto también sea útil para futuros lectores desarrolladores.

Ejecutamos la última versión de Discourse 2.8.0.beta6 (cba8b39607).

La implementación de los fragmentos de text/discourse-plugin en los temas es aparentemente la siguiente:

No veo ninguna mención directa de una instancia this aquí, lo que implicaría que no está relacionado con el this implícito de JS, ni tampoco puede ser que api se salga del ámbito, ya que el fragmento se pega allí.

¿Funciona realmente este ejemplo mínimo, es decir, no es un problema con el código omitido?

Por cierto: el global Discourse y su campo currentUser también podrían reemplazarse con api.getCurrentUser() aquí:

Genial, gracias.

Me pregunto por qué api.getCurrentUser() funciona perfectamente dentro de la función, mientras que api.addPosterIcon aún no.

Me gustaría intentar utilizar la API nativa tanto como sea posible en lugar de escribir soluciones de código personalizadas (lo cual no es ningún problema en absoluto).