NAME
Net::Nostr::RelayAccess - NIP-43 Relay Access Metadata and Requests
SYNOPSIS
use Net::Nostr::RelayAccess;
# Role definition (kind 33534)
my $event = Net::Nostr::RelayAccess->role_definition(
pubkey => $hex_pubkey,
role_id => '28b7e50f',
label => 'king',
description => 'ruler of the relay',
color => 37,
order => 1,
);
# Membership list (kind 13534)
my $event = Net::Nostr::RelayAccess->membership_list(
pubkey => $hex_pubkey,
members => [$member_pk1, { pubkey => $member_pk2, roles => ['28b7e50f'] }],
);
# 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). Seven 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
selfpubkey. Containsmembertags with hex pubkeys and optional role ids.Role Definition (kind 33534) - An addressable event defining a relay role. Contains a
dtag with the role id and optionallabel,description,color, andordertags.Add Member (kind 8000) - Published when a member is added to a relay. Contains a
ptag with the member's hex pubkey.Remove Member (kind 8001) - Published when a member is removed from a relay. Contains a
ptag 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
claimtag 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 seven kinds MUST include a NIP-70 ["-"] protected tag.
CONSTRUCTOR
new
Accepts named arguments as either a flat list or a single hash reference.
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
role_definition
my $event = Net::Nostr::RelayAccess->role_definition(
pubkey => $hex_pubkey, # required
role_id => '28b7e50f', # required, d tag
label => 'king', # optional
description => 'ruler', # optional
color => 37, # optional, 0..360
order => 1, # optional integer
);
Creates a kind 33534 role definition Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag.
membership_list
my $event = Net::Nostr::RelayAccess->membership_list(
pubkey => $hex_pubkey, # required
members => [
$member_pk,
{ pubkey => $other_pk, roles => ['28b7e50f'] },
], # optional, defaults to []
);
Creates a kind 13534 membership list Net::Nostr::Event. Automatically includes the NIP-70 ["-"] protected tag. A plain member pubkey becomes ["member", $pubkey]. A hashref member adds role ids after the pubkey. members and hashref roles values must be arrayrefs.
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, 33534, 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, 33534, 8000, 8001, 28934, 28935, or 28936
Missing NIP-70
["-"]protected tagKind 8000/8001 missing
ptagKind 28934/28935 missing
claimtagKind 33534 missing
dtag
Returns 1 on success.
ACCESSORS
members
Arrayref of member entries from member tags (membership list only). Entries without roles are hex pubkey strings. Entries with roles are hashrefs with pubkey and roles. Defaults to [].
member
Hex pubkey from p tag (add/remove member only).
claim
Invite code string from claim tag (join request/invite only).
role_id
Role id from the d tag (role definition only).
label
Optional role label.
description
Optional role description.
color
Optional role color value, 0 through 360.
order
Optional role sort order.