関数内から`api.addPosterIcon`を参照する方法

こんにちは、

関数内から api.addPosterIcon を参照するには、どのようにすればよいでしょうか?

例:

<script type="text/discourse-plugin" version="0.8">
   api.onPageChange(url => {
       if (Discourse?.currentUser?.admin) {
           extract_associated_user_data();
       }
   });
   function extract_associated_user_data() {
       // 上記に多くのコードがあり、ここで `addPosterIcon` 関数を呼び出す準備が整いました
       api.addPosterIcon(function(data, attrs) {
            return { icon: 'user', className: 'customer' };       
       });
   }
</script>

api.addPosterIcon をトップレベルに移動させれば動作しますが、extract_associated_user_data 内から実行すると、何も起こらず(実行されず)静かに失敗します。おそらく内部で this が混乱しているのでしょうが、どのように参照すればよいのか確信が持てません。投稿する前に多くの試行を行いました。

将来的な開発者の読者の皆様にも役立つことを願っています。

Discourse の最新バージョン 2.8.0.beta6 (cba8b39607) を運用しています。

text/discourse-plugin スニペットのテーマへの実装は、おそらく以下の通りです:

ここには this インスタンスの言及が直接見当たりません。これは JavaScript の暗黙的な this に関係していないことを示唆しており、スニペットがそこに貼り付けられている以上、api がスコープ外に出ている可能性もありません。

この最小限の例は実際に動作するのでしょうか?つまり、省略されたコードに問題があるわけではないのでしょうか?

参考までに:Discourse グローバル変数とその currentUser フィールドは、ここでも api.getCurrentUser() に置き換えることができます:

ありがとうございます。

なぜ api.getCurrentUser() は関数内から問題なく動作するのに、api.addPosterIcon はまだ動作しないのでしょうか?

カスタムコードソリューションを書くのではなく、ネイティブ API を可能な限り活用したいと考えています(カスタムコード自体は問題ありませんが)。