Publish EVENT
RxNostr
の send()
メソッドを通じて EVENT メッセージを送信することができます。
send()
の引数は kind
と content
のみが必須で残りが省略可能な event オブジェクトです。 引数に渡されたオブジェクトは、createRxNostr()
のオプションで指定された signer
によって署名され、適切なリレーに送信されます。signer
について詳しくは Signer を参照してください。
import { createRxNostr, seckeySigner } from "rx-nostr";
const rxNostr = createRxNostr({
signer: seckeySigner("nsec1..."),
});
rxNostr.setDefaultRelays(["wss://nostr.example.com"]);
rxNostr.send({
kind: 1,
content: "Hello, Nostr!",
});
Note
signer
は send()
の第二引数で渡すこともできます。signer
が両方で指定された場合は send()
の引数として渡された signer
が優先的に使用されます。
Handling OK Messages
send()
の返り値は subscribe()
可能なオブジェクトです。これを subscribe()
することで、OK メッセージを待ち受けることができます。
rxNostr.send(event).subscribe((packet) => {
console.log(
`リレー ${packet.from} への送信が ${packet.ok ? "成功" : "失敗"} しました。`,
);
});
OK メッセージの結果に興味がない場合は subscribe()
する必要はありません。subscribe()
の結果を unsubscribe()
すると、まだ送信に成功していないリレーへの再送信が中止されます。
WARNING
EVENT 送信の過程で NIP-42 に基づく AUTH を求められた場合、rx-nostr は AUTH の後に EVENT メッセージを自動で再送します。このシナリオでは同一のリレーから 2 つの OK メッセージを受け取りうることに注意してください。あるリレーから OK メッセージを受け取ったとき、2 回目の OK メッセージが届きうるかを確かめるには packet.done
が false
であることを確認します。
RxJS Tips
send()
の返り値は厳密には Observable です。この Observable は OK メッセージがこれ以上届き得ないと判断された時点で complete します。また、まだ OK メッセージが届き得るにも関わらず何も届かないまま 30 秒が経過した場合にも complete します。この挙動は createRxNostr()
の okTimeout
オプションや send()
の completeOn
オプションによって調整できます。
cast()
cast()
は send()
とほとんど同じですが、いずれかひとつのリレーにイベントが届けられたことが確認でき次第解決される Promise<void>
を返します。
WARNING
cast()
が呼び出された時点で接続済みであるすべてのリレーに対しては少なくとも1回の送信試行が保証されますが、そうでないリレーに対しては Promise の解決以降に送信が試行される保証はありません。
いずれかひとつのリレーに送信が成功していればいいような特定の状況でのみ cast()
を使用してください。