Skip to content

Commit

Permalink
send pong message to relay when we've received a ping response, added…
Browse files Browse the repository at this point in the history
… example snippet for publishing an event to a relay which requires AUTH
  • Loading branch information
Sebastix committed Jan 4, 2025
1 parent cca30f9 commit 6ef1e05
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
49 changes: 49 additions & 0 deletions src/Examples/publish-event-with-auth.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

declare(strict_types=1);

require __DIR__ . '/../../vendor/autoload.php';

use swentel\nostr\Event\Event;
use swentel\nostr\Key\Key;
use swentel\nostr\Message\EventMessage;
use swentel\nostr\Relay\Relay;
use swentel\nostr\RelayResponse\RelayResponse;
use swentel\nostr\RelayResponse\RelayResponseOk;
use swentel\nostr\Request\Request;
use swentel\nostr\Sign\Sign;

try {
$note = new Event();
$note->setKind(1);
$note->addTag(['t', 'introduction']);
$note->addTag(['r', 'wss://nostr.wine']);
$content = 'Hello Nostr world! This is just a test, please ignore.';
$note->setContent($content);
// Sign event.
$private_key = new Key();
$private_key = $private_key->generatePrivateKey();
$signer = new Sign();
$signer->signEvent($note, $private_key);
// Optional, verify event.
$isValid = $note->verify();
// Transmit the event to a relay.
$relay = new Relay('wss://nostr.wine');
$eventMessage = new EventMessage($note);
$relay->setMessage($eventMessage);
$request = new Request($relay, $eventMessage);
$response = $request->send();
// Handle response.
foreach ($response as $relayUrl => $relayResponses) {
foreach ($relayResponses as $relayResponse) {
if ($relayResponse->isSuccess && $relayResponse instanceof RelayResponseOk) {
print 'The event has been transmitted to the relay ' . $relayUrl . PHP_EOL;
$eventId = $relayResponse->eventId;
print 'The received event id from the relay: ' . $relayResponse->eventId;
// Now we could request the event with this id.
}
}
}
} catch (Exception $e) {
print 'Exception error: ' . $e->getMessage() . PHP_EOL;
}
6 changes: 4 additions & 2 deletions src/Request/Request.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use WebSocket;
use WebSocket\Client;
use WebSocket\Connection;
use WebSocket\Message\Pong;
use WebSocket\Message\Text;

class Request implements RequestInterface
Expand Down Expand Up @@ -116,8 +117,9 @@ private function getResponseFromRelay(Relay $relay): array | RelayResponse
$client->disconnect();
return RelayResponse::create($response);
} elseif ($response instanceof WebSocket\Message\Ping) {
$client->disconnect();
return $this->responses;
// Send pong message.
$pongMessage = new Pong();
$client->text($pongMessage->getPayload());
} elseif ($response instanceof Text) {
$relayResponse = RelayResponse::create(json_decode($response->getContent()));
$this->responses[] = $relayResponse;
Expand Down

0 comments on commit 6ef1e05

Please sign in to comment.