NAME

Net::Nostr::RelayAccess - NIP-43 Relay Access Metadata and Requests

SYNOPSIS

use Net::Nostr::RelayAccess;

# Membership list (kind 13534)
my $event = Net::Nostr::RelayAccess->membership_list(
    pubkey  => $hex_pubkey,
    members => [$member_pk1, $member_pk2],
);

# Add member (kind 8000)
my $event = Net::Nostr::RelayAccess->add_member(
    pubkey => $hex_pubkey,
    member => $member_pk,
);

# Remove member (kind 8001)
my $event = Net::Nostr::RelayAccess->remove_member(
    pubkey => $hex_pubkey,
    member => $member_pk,
);

# Join request (kind 28934)
my $event = Net::Nostr::RelayAccess->join_request(
    pubkey => $hex_pubkey,
    claim  => $invite_code,
);

# Invite response (kind 28935)
my $event = Net::Nostr::RelayAccess->invite(
    pubkey => $hex_pubkey,
    claim  => $generated_code,
);

# Leave request (kind 28936)
my $event = Net::Nostr::RelayAccess->leave_request(
    pubkey => $hex_pubkey,
);

# Parse any relay access event
my $parsed = Net::Nostr::RelayAccess->from_event($event);

# Validate
Net::Nostr::RelayAccess->validate($event);

DESCRIPTION

Implements NIP-43 (Relay Access Metadata and Requests). Six event kinds are used:

  • Membership List (kind 13534) - A replaceable event listing pubkeys that have access to a relay. MUST be signed by the relay's NIP-11 self pubkey. Contains member tags with hex pubkeys.

  • Add Member (kind 8000) - Published when a member is added to a relay. Contains a p tag with the member's hex pubkey.

  • Remove Member (kind 8001) - Published when a member is removed from a relay. Contains a p tag with the member's hex pubkey.

  • Join Request (kind 28934) - An ephemeral event sent by a user to request admission to a relay. MUST contain a claim tag with an invite code.

  • Invite (kind 28935) - An ephemeral event returned by a relay with a claim string. Relays generate claims on the fly when requested.

  • Leave Request (kind 28936) - An ephemeral event sent by a user to revoke their own access.

All six kinds MUST include a NIP-70 ["-"] protected tag.

CONSTRUCTOR

new

my $ra = Net::Nostr::RelayAccess->new(
    members => [$member_pk],
);

Creates a new Net::Nostr::RelayAccess object. Croaks on unknown arguments. members defaults to [].

CLASS METHODS

membership_list

my $event = Net::Nostr::RelayAccess->membership_list(
    pubkey  => $hex_pubkey,          # required
    members => [$member_pk, ...],    # optional, defaults to []
);

Creates a kind 13534 membership list Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag. Each member pubkey is added as a ["member", $pubkey] tag.

add_member

my $event = Net::Nostr::RelayAccess->add_member(
    pubkey => $hex_pubkey,           # required
    member => $member_pk,            # required (p tag)
);

Creates a kind 8000 add-member Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag.

remove_member

my $event = Net::Nostr::RelayAccess->remove_member(
    pubkey => $hex_pubkey,           # required
    member => $member_pk,            # required (p tag)
);

Creates a kind 8001 remove-member Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag.

join_request

my $event = Net::Nostr::RelayAccess->join_request(
    pubkey => $hex_pubkey,           # required
    claim  => $invite_code,          # required (claim tag)
);

Creates a kind 28934 join request Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag. The claim tag contains the invite code.

invite

my $event = Net::Nostr::RelayAccess->invite(
    pubkey => $hex_pubkey,           # required
    claim  => $generated_code,       # required (claim tag)
);

Creates a kind 28935 invite Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag. The claim tag contains the generated invite code.

leave_request

my $event = Net::Nostr::RelayAccess->leave_request(
    pubkey => $hex_pubkey,           # required
);

Creates a kind 28936 leave request Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag. No other tags are required.

from_event

my $ra = Net::Nostr::RelayAccess->from_event($event);

Parses a kind 13534, 8000, 8001, 28934, 28935, or 28936 event into a Net::Nostr::RelayAccess object. Returns undef for unrecognized kinds.

validate

Net::Nostr::RelayAccess->validate($event);

Validates a NIP-43 event. Croaks if:

  • Kind is not 13534, 8000, 8001, 28934, 28935, or 28936

  • Missing NIP-70 ["-"] protected tag

  • Kind 8000/8001 missing p tag

  • Kind 28934/28935 missing claim tag

Returns 1 on success.

ACCESSORS

members

Arrayref of hex pubkeys from member tags (membership list only). Defaults to [].

member

Hex pubkey from p tag (add/remove member only).

claim

Invite code string from claim tag (join request/invite only).

SEE ALSO

NIP-43, NIP-70, Net::Nostr, Net::Nostr::Event