nostr-tools
Advanced tools
Comparing version 0.4.2 to 0.4.3
{ | ||
"name": "nostr-tools", | ||
"version": "0.4.2", | ||
"version": "0.4.3", | ||
"description": "Tools for making a Nostr client.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
43
relay.js
@@ -16,9 +16,10 @@ import 'websocket-polyfill' | ||
var ws, resolveOpen, untilOpen, rejectOpen | ||
var ws, resolveOpen, untilOpen | ||
var openSubs = {} | ||
let attemptNumber = 1 | ||
let nextAttemptSeconds = 1 | ||
function resetOpenState() { | ||
untilOpen = new Promise((resolve, reject) => { | ||
untilOpen = new Promise(resolve => { | ||
resolveOpen = resolve | ||
rejectOpen = reject | ||
}) | ||
@@ -35,6 +36,12 @@ } | ||
resolveOpen() | ||
// restablish old subscriptions | ||
for (let channel in openSubs) { | ||
let filters = openSubs[channel] | ||
let cb = channels[channel] | ||
sub({cb, filter: filters}, channel) | ||
} | ||
} | ||
ws.onerror = err => { | ||
console.log('error connecting to relay', url, err) | ||
rejectOpen() | ||
ws.onerror = () => { | ||
console.log('error connecting to relay', url) | ||
} | ||
@@ -44,4 +51,5 @@ ws.onclose = () => { | ||
attemptNumber++ | ||
nextAttemptSeconds += attemptNumber | ||
console.log( | ||
`relay ${url} connection closed. reconnecting in ${attemptNumber} seconds.` | ||
`relay ${url} connection closed. reconnecting in ${nextAttemptSeconds} seconds.` | ||
) | ||
@@ -52,3 +60,3 @@ setTimeout(async () => { | ||
} catch (err) {} | ||
}, attemptNumber * 1000) | ||
}, nextAttemptSeconds * 1000) | ||
} | ||
@@ -101,12 +109,4 @@ | ||
if (ws && ws.readyState === WebSocket.OPEN) { | ||
ws.send(msg) | ||
} else { | ||
try { | ||
await untilOpen | ||
ws.send(msg) | ||
} catch (e) { | ||
console.log(`waiting to connect to ${url}`) | ||
} | ||
} | ||
await untilOpen | ||
ws.send(msg) | ||
} | ||
@@ -124,6 +124,11 @@ | ||
channels[channel] = cb | ||
openSubs[channel] = filters | ||
return { | ||
sub: ({cb = cb, filter = filter}) => sub({cb, filter}, channel), | ||
unsub: () => trySend(['CLOSE', channel]) | ||
unsub: () => { | ||
delete openSubs[channel] | ||
delete channels[channel] | ||
trySend(['CLOSE', channel]) | ||
} | ||
} | ||
@@ -130,0 +135,0 @@ } |
10610
286