Messages to relays
According to NIP-01 there are the following different messages we can send as a client to a relay.
REQ
- used to request events and subscribe to new updatesEVENT
- used to publish eventsCLOSE
- used to stop previous subscriptions
Request events
Request events are used for fetching data from relay. Events will be requested and with a subscription you can keep the connection open to receive new updates. You can add multiple filters to a request message.
$subscription = new Subscription();
$filter1 = new Filter();
$filter1->setKinds([0,1,30023]);
$filter1->setLimit(50);
$filter1->setTag('#t', ['PHP']);
$filter2 = new Filter();
//
$filters = [$filter1, $filter2];
$requestMessage = new RequestMessage($subscription->getId(), $filters);
Event messages
Event messages are used for publishing Nostr event to relays.
$note = new Event();
//
$eventMessage = new EventMessage($note);
Closing messages
A close message can be used to 'unsubscribe' an active subscription to a relay initialized by a request message.
$closeMessage = new CloseMessage($subscriptionId);
NIP-42 and NIP-50
There are two other message types defined in NIP-42 (authentication of clients to relays ) and NIP-45 (event counts);
Auth messages
When a relay responds with AUTH
(provided with a challenge string) and a following CLOSED
response (with an auth-required message), the library will perform the authentication automatically.
$challenge = '';
$authEvent = new AuthEvent('wss://relay.io', $challenge);
$sec = '0000000000000000000000000000000000000000000000000000000000000001';
// todo: use client defined secret key here instead of this default one
$signer = new Sign();
$signer->signEvent($authEvent, $sec);
$authMessage = new AuthMessage($event);
$payload = $authMessage->generate();
Count messages
@todo: not implemented yet.