Почему старая авторизация Nostr не подходит после переподключения WebSocket
Клиент подключился к тому же релею и повторно отправил последнее подписанное событие авторизации. Открытый ключ тот же, но новое соединение получило другой запрос на подтверждение.
Привяжите ответ к текущему соединению
В NIP-42 клиент подписывает событие вида 22242 с URL релея и выданной строкой challenge. В примере сравниваются эти два поля после проверки подписи. Получится false: строка от предыдущего соединения не совпала. До привязки ключа к соединению проверьте также вид события и его время.
const issued = { relay: "wss://relay.example", challenge: "socket-2" };
const signedTags = [["relay","wss://relay.example"],["challenge","socket-1"]];
const field = name => signedTags.find(t => t[0] === name)?.[1];
console.log(field("relay") === issued.relay && field("challenge") === issued.challenge);
Возобновите закрытую операцию
Дождитесь ответа OK на авторизацию. Если публикация или подписка ранее получила отказ с требованием авторизации, повторите её после успешного подтверждения. Служебное событие авторизации не должно попадать в публичный поток. Чтобы отличить бесконечное переподключение от отсутствия прав, запишите идентификатор соединения и операцию, на которой произошёл отказ.