node-xmpp-component を使用して external-xmpp-component を構築していますが、特定の jid のすべてのアーカイブ メッセージをプルする必要があります。
接続してメッセージを送信することはできますが、アーカイブされたメッセージを要求するための sanza を構築する方法がわかりません。
注: これは、アーカイブされたメッセージを取得する方法に関する質問ではなく、外部 XMPP コンポーネントからそれらを取得する方法に関する質問です。
メッセージ アーカイブを取得するには、アーカイブを要求しているユーザー アカウントからクエリを実行する必要があります。XEPの例 ( アーカイブの照会 ) でわかるように、どのユーザーとして行動しているかを定義する場所はありません。XMPP パケットを送信するユーザーであると想定されます。
<iq type='set' id='juliet1'>
<query xmlns='urn:xmpp:mam:0' queryid='f27' />
</iq>
ただし、node-xmpp-component はXEP-0114: Jabber Component Protocol を実装しています。コンポーネント プロトコルでは、基本的に、コンポーネントまたはそのコンポーネント ドメインのユーザー名としてのみ機能できます。
認証されると、コンポーネントはサーバーを介してスタンザを送信し、サーバーからスタンザを受信できます。サーバーに送信されるすべてのスタンザは、'jabber:server' 名前空間のように、'from' 属性と 'to' 属性を持っている必要があります。「from」属性に含まれる JID のドメイン識別子部分は、コンポーネントのホスト名と一致する必要があります。ただし、これは「送信元」アドレスに対する唯一の制限であり、コンポーネントはそのホスト名で任意のユーザーからスタンザを送信する場合があります。
これは、プライバシー/セキュリティ上の理由から、「Jabber コンポーネント」がメイン サーバー ユーザーの代わりにパケットを送信できないことを意味します。
そのため、MAM アーカイブをユーザーとしてコンポーネントから照会するために必要な IQ パケットを偽造することはできません。これはプライバシー上の理由からです。
実装したい機能の別の設計を見つける必要があります。