Gestión NIP-86

La API de gestión JSON-RPC: moderación, listas de acceso, identidad del relé, roles, códigos de invitación y delegaciones de métodos, con autenticación Bearer o NIP-98.

Habilitación

NIP-86 es una API JSON-RPC para gestionar el relé. Necesita uno de los dos métodos de autenticación, de lo contrario cada llamada es rechazada:

MétodoConfiguración
Token BearerConfigura rpc.management_token y envía Authorization: Bearer <token>
NIP-98Configura rpc.admin_pubkey y envía un evento de autenticación NIP-98 (kind 27235) firmado por la clave de administración en Authorization: Nostr <base64> — se requiere una etiqueta payload; cada evento es de un solo uso dentro de su ventana de 60 segundos

Llamar a la API

POST / con 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étodos

MétodoParámetrosDescripción
supportedmethods[]Lista de métodos admitidos
banpubkey["pubkey", "reason (optional)"]Banear una pubkey para que no publique (también la elimina de la lista de permitidos)
unbanpubkey["pubkey"]Desbanear una pubkey
listbannedpubkeys[]Listar pubkeys baneadas y motivos
allowpubkey["pubkey", "reason (optional)"]Añadir a la lista de permitidos (también desbanea)
unallowpubkey["pubkey"]Eliminar de la lista de permitidos
listallowedpubkeys[]Listar la lista de permitidos
allowkind / disallowkind[kind]Permitir / denegar un kind
listallowedkinds / listdisallowedkinds[]Listar kinds permitidos / denegados
changerelayname / changerelaydescription / changerelayicon["new value"]Cambiar el nombre / la descripción / el icono del relé (persistido en el archivo de configuración; informa de un error cuando el archivo no se puede escribir)
createrole / editrole / deleterole[id, label, description, color, order]Gestión de roles NIP-43 (los campos con tipo incorrecto se rechazan; eliminar un rol inexistente tiene éxito)
assignrole / unassignrole["pubkey", "role id"]Asignar / retirar un rol (una concesión duplicada o una revocación inexistente tiene éxito)
assignmethod / unassignmethod["pubkey", "method"]Conceder / revocar un método NIP-86 a una pubkey no administradora — solo los métodos de moderación y lectura son delegables
listmethodassignees[]Listar concesiones de métodos ([{pubkey, methods}])
blockip / unblockip["ip", "reason (optional)"]Bloquear / desbloquear una IP (bloquear también corta las conexiones existentes)
listblockedips[]Listar IPs bloqueadas
banevent["event id", "reason (optional)"]Banear un evento (banear un id desconocido lo pre-banea; también lo elimina de la lista de permitidos)
allowevent["event id", "reason (optional)"]Añadir un evento a la lista de permitidos (también levanta el baneo; permitir un id desconocido lo pre-permite)
unallowevent / unbanevent["event id"]Eliminar un evento de la lista de permitidos / baneados (una entrada inexistente tiene éxito)
listbannedevents[]Listar eventos baneados (una búsqueda fallida devuelve un error, nunca una lista vacía)
listallowedevents[]Listar eventos permitidos
listeventsneedingmoderation[]Eventos pendientes de moderación (siempre vacío en este relé)
listclaims[]Listar códigos de invitación NIP-43
createclaim / deleteclaim["claim"]Emitir / revocar un código de invitación NIP-43 (un kind:28934 con un código listado admite a su autor)
Administración delegada
rpc.admin_pubkey (y el token de gestión) sigue siendo el acceso raíz con todos los métodos. Las demás pubkeys se autentican con NIP-98 y solo pueden ejecutar sus métodos concedidos vía assignmethod (supportedmethods muestra su propio subconjunto). La gestión de permisos, roles, códigos de invitación e identidad del relé sigue siendo solo de admin, por lo que un beneficiario nunca puede escalar privilegios. Una pubkey baneada es rechazada incluso con concesiones.
Servido en las rutas públicas POST /
El RPC NIP-86 está montado en las rutas públicas POST / del relé. Las mutaciones se registran en un registro de auditoría con límite de velocidad (como máximo 600 entradas por minuto) con la identidad autenticada. Las solicitudes que superen rpc.max_admin_body_bytes se rechazan con 413.