Gestion NIP-86

L’API de gestion JSON-RPC : modération, listes d’accès, identité du relais, rôles, codes d’invitation et délégations de méthodes, avec authentification Bearer ou NIP-98.

Activation

NIP-86 est une API JSON-RPC pour gérer le relais. Elle nécessite l’une des deux méthodes d’authentification, sinon chaque appel est refusé :

MéthodeConfiguration
Jeton BearerDéfinissez rpc.management_token et envoyez Authorization: Bearer <token>
NIP-98Définissez rpc.admin_pubkey et envoyez un événement d’authentification NIP-98 (kind 27235) signé par la clé admin dans Authorization: Nostr <base64> — un tag payload est requis ; chaque événement est à usage unique dans sa fenêtre de 60 secondes

Appeler l’API

POST / avec Content-Type: application/nostr+json+rpc :

sh
curl -X POST http://127.0.0.1:8080/ \
  -H "Content-Type: application/nostr+json+rpc" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"method":"supportedmethods","params":[]}'

Méthodes

MéthodeParamètresDescription
supportedmethods[]Liste des méthodes prises en charge
banpubkey["pubkey", "reason (optional)"]Bannir une pubkey de la publication (la retire aussi de la liste d’autorisation)
unbanpubkey["pubkey"]Débannir une pubkey
listbannedpubkeys[]Lister les pubkeys bannies et les motifs
allowpubkey["pubkey", "reason (optional)"]Ajouter à la liste d’autorisation (débannit aussi)
unallowpubkey["pubkey"]Retirer de la liste d’autorisation
listallowedpubkeys[]Lister la liste d’autorisation
allowkind / disallowkind[kind]Autoriser / interdire un kind
listallowedkinds / listdisallowedkinds[]Lister les kinds autorisés / interdits
changerelayname / changerelaydescription / changerelayicon["new value"]Changer le nom / la description / l’icône du relais (persisté dans le fichier de configuration ; signale une erreur si le fichier ne peut pas être écrit)
createrole / editrole / deleterole[id, label, description, color, order]Gestion des rôles NIP-43 (les champs mal typés sont rejetés ; supprimer un rôle manquant réussit)
assignrole / unassignrole["pubkey", "role id"]Attribuer / retirer un rôle (une attribution en double ou une révocation manquante réussit)
assignmethod / unassignmethod["pubkey", "method"]Accorder / révoquer une méthode NIP-86 à une pubkey non-admin — seules les méthodes de modération et de lecture peuvent être déléguées
listmethodassignees[]Lister les délégations de méthodes ([{pubkey, methods}])
blockip / unblockip["ip", "reason (optional)"]Bloquer / débloquer une IP (le blocage coupe aussi les connexions existantes)
listblockedips[]Lister les IP bloquées
banevent["event id", "reason (optional)"]Bannir un événement (bannir un id inconnu le pré-bannit ; le retire aussi de la liste d’autorisation)
allowevent["event id", "reason (optional)"]Ajouter un événement à la liste d’autorisation (lève aussi le bannissement ; autoriser un id inconnu le pré-autorise)
unallowevent / unbanevent["event id"]Retirer un événement de la liste d’autorisation / de bannissement (une entrée manquante réussit)
listbannedevents[]Lister les événements bannis (une recherche échouée renvoie une erreur, jamais une liste vide)
listallowedevents[]Lister les événements autorisés
listeventsneedingmoderation[]Événements en attente de modération (toujours vide sur ce relais)
listclaims[]Lister les codes d’invitation NIP-43
createclaim / deleteclaim["claim"]Émettre / révoquer un code d’invitation NIP-43 (un kind:28934 portant un code listé admet son auteur)
Administration déléguée
rpc.admin_pubkey (et le jeton de gestion) restent la connexion racine avec toutes les méthodes. Les autres pubkeys s’authentifient avec NIP-98 et ne peuvent exécuter que leurs méthodes accordées via assignmethod (supportedmethods affiche leur propre sous-ensemble). La gestion des permissions, des rôles, des codes d’invitation et de l’identité du relais reste réservée à l’admin, donc un bénéficiaire ne peut jamais escalader. Une pubkey bannie est refusée même avec des délégations.
Servi sur les routes publiques POST /
Le RPC NIP-86 est monté sur les routes publiques POST / du relais. Les mutations sont enregistrées dans un journal d’audit limité en débit (600 entrées par minute au maximum) avec l’identité authentifiée. Les requêtes dépassant rpc.max_admin_body_bytes sont refusées avec un code 413.