Gerenciamento NIP-86

A API de gerenciamento JSON-RPC: moderação, listas de acesso, identidade do relay, papéis, códigos de convite e delegações de métodos, com autenticação Bearer ou NIP-98.

Ativação

NIP-86 é uma API JSON-RPC para gerenciar o relay. Ela precisa de um dos dois métodos de autenticação, caso contrário cada chamada é recusada:

MétodoConfiguração
Token BearerDefina rpc.management_token e envie Authorization: Bearer <token>
NIP-98Defina rpc.admin_pubkey e envie um evento de autenticação NIP-98 (kind 27235) assinado pela chave de administração em Authorization: Nostr <base64> — uma tag payload é obrigatória; cada evento é de uso único dentro da sua janela de 60 segundos

Chamar a API

POST / com 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âmetrosDescrição
supportedmethods[]Lista de métodos suportados
banpubkey["pubkey", "reason (optional)"]Banir uma pubkey de publicar (também a remove da lista de permissão)
unbanpubkey["pubkey"]Desbanir uma pubkey
listbannedpubkeys[]Listar pubkeys banidas e motivos
allowpubkey["pubkey", "reason (optional)"]Adicionar à lista de permissão (também remove o ban)
unallowpubkey["pubkey"]Remover da lista de permissão
listallowedpubkeys[]Listar a lista de permissão
allowkind / disallowkind[kind]Permitir / negar um kind
listallowedkinds / listdisallowedkinds[]Listar kinds permitidos / negados
changerelayname / changerelaydescription / changerelayicon["new value"]Alterar o nome / descrição / ícone do relay (persistido no arquivo de configuração; retorna um erro quando o arquivo não pode ser escrito)
createrole / editrole / deleterole[id, label, description, color, order]Gerenciamento de papéis NIP-43 (campos com tipo errado são rejeitados; excluir um papel inexistente retorna sucesso)
assignrole / unassignrole["pubkey", "role id"]Atribuir / remover um papel (uma concessão duplicada ou uma revogação inexistente retorna sucesso)
assignmethod / unassignmethod["pubkey", "method"]Conceder / revogar um método NIP-86 a uma pubkey não administradora — apenas métodos de moderação e leitura podem ser delegados
listmethodassignees[]Listar concessões de métodos ([{pubkey, methods}])
blockip / unblockip["ip", "reason (optional)"]Bloquear / desbloquear um IP (bloquear também encerra as conexões existentes)
listblockedips[]Listar IPs bloqueados
banevent["event id", "reason (optional)"]Banir um evento (banir um id desconhecido pré-bane-o; também o remove da lista de permissão)
allowevent["event id", "reason (optional)"]Adicionar um evento à lista de permissão (também levanta o ban; permitir um id desconhecido pré-permite-o)
unallowevent / unbanevent["event id"]Remover um evento da lista de permissão / bloqueio (uma entrada inexistente retorna sucesso)
listbannedevents[]Listar eventos banidos (uma busca com falha retorna um erro, nunca uma lista vazia)
listallowedevents[]Listar eventos permitidos
listeventsneedingmoderation[]Eventos a aguardar moderação (sempre vazio neste relay)
listclaims[]Listar códigos de convite NIP-43
createclaim / deleteclaim["claim"]Emitir / revogar um código de convite NIP-43 (um kind:28934 com um código listado admite o seu autor)
Administração delegada
rpc.admin_pubkey (e o token de gerenciamento) continua sendo o acesso raiz, com todos os métodos. As outras pubkeys se autenticam com NIP-98 e só podem executar os métodos concedidos via assignmethod (supportedmethods mostra o próprio subconjunto). O gerenciamento de permissões, papéis, códigos de convite e identidade do relay continua restrito ao admin, então um usuário com concessão nunca consegue escalar privilégios. Uma pubkey banida é recusada mesmo com concessões.
Servido nas rotas públicas POST /
O RPC NIP-86 fica nas rotas públicas POST / do relay. As alterações são registradas em um log de auditoria com limite de taxa (no máximo 600 entradas por minuto) com a identidade autenticada. Requisições acima de rpc.max_admin_body_bytes são recusadas com 413.