Управление NIP-86

API управления JSON-RPC: модерация, списки доступа, идентичность релея, роли, пригласительные коды и делегированные разрешения на методы, с аутентификацией Bearer или NIP-98.

Включение

NIP-86 — это JSON-RPC API для управления релеем. Требуется один из двух методов аутентификации, иначе каждый вызов отклоняется:

МетодНастройка
Bearer-токенУстановите rpc.management_token и отправляйте Authorization: Bearer <token>
NIP-98Установите rpc.admin_pubkey и отправляйте событие аутентификации NIP-98 (kind 27235), подписанное ключом администратора, в Authorization: Nostr <base64> — тег payload обязателен; каждое событие одноразовое в пределах своего 60-секундного окна

Вызов API

POST / с 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":[]}'

Методы

МетодПараметрыОписание
supportedmethods[]Список поддерживаемых методов
banpubkey["pubkey", "reason (optional)"]Заблокировать pubkey для публикаций (также удаляет его из списка разрешённых)
unbanpubkey["pubkey"]Разблокировать pubkey
listbannedpubkeys[]Список заблокированных pubkey и причин
allowpubkey["pubkey", "reason (optional)"]Добавить в список разрешённых (также снимает блокировку)
unallowpubkey["pubkey"]Удалить из списка разрешённых
listallowedpubkeys[]Список разрешённых
allowkind / disallowkind[kind]Разрешить / запретить kind
listallowedkinds / listdisallowedkinds[]Список разрешённых / запрещённых kind
changerelayname / changerelaydescription / changerelayicon["new value"]Изменить имя / описание / значок релея (сохраняется в файл конфигурации; при невозможности записи файла сообщается об ошибке)
createrole / editrole / deleterole[id, label, description, color, order]Управление ролями NIP-43 (поля с неверным типом отклоняются; удаление отсутствующей роли завершается успешно)
assignrole / unassignrole["pubkey", "role id"]Назначить / снять роль (повторное назначение или отсутствующее снятие завершается успешно)
assignmethod / unassignmethod["pubkey", "method"]Предоставить / отозвать метод NIP-86 для pubkey без прав администратора — делегировать можно только методы модерации и чтения
listmethodassignees[]Список разрешений на методы ([{pubkey, methods}])
blockip / unblockip["ip", "reason (optional)"]Заблокировать / разблокировать IP (блокировка также разрывает существующие соединения)
listblockedips[]Список заблокированных IP
banevent["event id", "reason (optional)"]Заблокировать событие (блокировка неизвестного id предварительно блокирует его; также удаляет его из списка разрешённых)
allowevent["event id", "reason (optional)"]Добавить событие в список разрешённых (также снимает блокировку; разрешение неизвестного id предварительно разрешает его)
unallowevent / unbanevent["event id"]Удалить событие из списка разрешённых / заблокированных (отсутствующая запись завершается успешно)
listbannedevents[]Список заблокированных событий (неудачный поиск возвращает ошибку, а не пустой список)
listallowedevents[]Список разрешённых событий
listeventsneedingmoderation[]События, ожидающие модерации (на этом релее всегда пусто)
listclaims[]Список пригласительных кодов NIP-43
createclaim / deleteclaim["claim"]Выпустить / отозвать пригласительный код NIP-43 (kind:28934 с кодом из списка допускает его автора)
Делегированное администрирование
rpc.admin_pubkey (и токен управления) остаются корневым доступом со всеми методами. Остальные ключи аутентифицируются через NIP-98 и могут выполнять только предоставленные им через assignmethod методы (supportedmethods показывает их собственный поднабор). Управление разрешениями, ролями, пригласительными кодами и идентичностью релея остаётся только для администратора, поэтому получатель не может повысить привилегии. Заблокированный pubkey отклоняется даже при наличии разрешений.
Обслуживается на публичных маршрутах POST /
RPC NIP-86 смонтирован на публичных маршрутах POST / релея. Изменения записываются в журнал аудита с ограничением скорости (не более 600 записей в минуту) с указанием аутентифицированной личности. Запросы свыше rpc.max_admin_body_bytes отклоняются с кодом 413.