should subscribe correctly

This commit is contained in:
Richard Bondi
2021-02-19 09:22:01 -06:00
parent 0c0f9d0e76
commit bdc778314d
2 changed files with 12 additions and 12 deletions

14
pool.js
View File

@@ -15,7 +15,7 @@ export function relayPool(globalPrivateKey) {
const activeSubscriptions = {} const activeSubscriptions = {}
const sub = async (id, cb, filter) => { const sub = async (id, {cb, filter}) => {
const subControllers = Object.fromEntries( const subControllers = Object.fromEntries(
Object.values(relays) Object.values(relays)
.filter(({policy}) => policy.read) .filter(({policy}) => policy.read)
@@ -53,11 +53,11 @@ export function relayPool(globalPrivateKey) {
setPrivateKey(privateKey) { setPrivateKey(privateKey) {
globalPrivateKey = privateKey globalPrivateKey = privateKey
}, },
addRelay(url, policy = {read: true, write: true}) { async addRelay(url, policy = {read: true, write: true}) {
let relayURL = normalizeRelayURL(url) let relayURL = normalizeRelayURL(url)
if (relayURL in relays) return if (relayURL in relays) return
let relay = relayConnect(url, notice => { let relay = await relayConnect(url, notice => {
propagateNotice(notice, relayURL) propagateNotice(notice, relayURL)
}) })
relays[relayURL] = {relay, policy} relays[relayURL] = {relay, policy}
@@ -105,12 +105,12 @@ export function relayPool(globalPrivateKey) {
try { try {
await relay.publish(event) await relay.publish(event)
statusCallback(0, relay.url) statusCallback(0, relay.url)
let {unsub} = relay.sub( let {unsub} = relay.sub({
() => { cb: () => {
statusCallback(1, relay.url) statusCallback(1, relay.url)
}, },
{id: event.id} filter: {id: event.id}
) })
setTimeout(unsub, 5000) setTimeout(unsub, 5000)
} catch (err) { } catch (err) {
statusCallback(-1, relay.url) statusCallback(-1, relay.url)

View File

@@ -85,8 +85,7 @@ export function relayConnect(url, onNotice) {
} else { } else {
console.warn( console.warn(
'got event with invalid signature from ' + url, 'got event with invalid signature from ' + url,
event, event
id
) )
} }
return return
@@ -116,7 +115,8 @@ export function relayConnect(url, onNotice) {
} }
} }
const sub = async (channel, {cb, filter}) => { const sub = async ({cb, filter}) => {
const channel = (await sha256(Math.random().toString())).reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '')
trySend(['REQ', channel, filter]) trySend(['REQ', channel, filter])
channels[channel] = cb channels[channel] = cb
@@ -128,9 +128,9 @@ export function relayConnect(url, onNotice) {
return { return {
url, url,
sub: sub.bind(null, await sha256(Math.random().toString())), sub,
async publish(event) { async publish(event) {
trySend(JSON.stringify(['EVENT', event])) trySend(['EVENT', event])
}, },
close() { close() {
ws.close() ws.close()