1. Go to this page and download the library: Download innis/nostr-nip46 library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
innis / nostr-nip46 example snippets
use Innis\Nostr\Core\Domain\Collection\RelayUrlCollection;
use Innis\Nostr\Core\Infrastructure\Time\SystemClock;
use Innis\Nostr\Nip46\Application\Service\Nip46Bunker;
$bunker = new Nip46Bunker($transport, $signer, $authenticator, $authoriser, new SystemClock());
$bunker->start($relays); // $relays: RelayUrlCollection
echo $bunker->bunkerUrlFor($appSecret); // $appSecret: ConnectSecret; bunker://<pubkey>?relay=...&secret=...
// Or accept a URL the client minted, pairing it to an app you decided on:
$bunker->acceptNostrConnect(NostrConnectUrl::tryFromString($pasted), $appId);
// Queued requests carry the app id the client authenticated as: $request->getAppId().
// Decide on them when they arrive:
$bunker->setQueueListener($yourPolicyOrUiListener);
foreach ($bunker->getPending() as $request) {
// inspect $request->getDetail() — a SignEventDetail, CryptoDetail or GetPublicKeyDetail — then:
$bunker->approve($request->getId()); // or $bunker->reject($request->getId());
}
$bunker->stop();
$bunker->setActivityListener($yourAuditSink); // notified as each autonomous request is answered
use Innis\Nostr\Core\Domain\ValueObject\Identity\PrivateKey;
use Innis\Nostr\Core\Infrastructure\Crypto\Secp256k1Signer;
use Innis\Nostr\Core\Infrastructure\Time\SystemClock;
use Innis\Nostr\Nip46\Application\Service\Nip46Client;
use Innis\Nostr\Nip46\Domain\Failure\Nip46Failure;
use Innis\Nostr\Nip46\Domain\ValueObject\BunkerUrl;
use Innis\Nostr\Nip46\Infrastructure\Crypto\LocalNip46Signer;
$client = new Nip46Client(
$transport, // your Nip46TransportInterface
LocalNip46Signer::create(PrivateKey::generate()), // ephemeral session key
Secp256k1Signer::create(), // verifies returned events
new SystemClock(),
$pendingResponses, // your Nip46PendingResponsesInterface
);
$client->setAuthUrlListener($yourAuthUrlListener); // optional: surfaces auth_url challenges
$bunkerUrl = BunkerUrl::tryFromString($pastedUrl) ?? exit('bad bunker URL');
$userPublicKey = $client->connect($bunkerUrl);
if ($userPublicKey instanceof Nip46Failure) {
exit($userPublicKey->describe());
}
$signed = $client->signEvent($unsignedRumour); // Event|Nip46Failure
$client->close();