diff --git a/pool.js b/pool.js index dc2b9d8..f0e8f7d 100644 --- a/pool.js +++ b/pool.js @@ -15,7 +15,7 @@ export function relayPool(globalPrivateKey) { const activeSubscriptions = {} - const sub = async (id, cb, filter) => { + const sub = async (id, {cb, filter}) => { const subControllers = Object.fromEntries( Object.values(relays) .filter(({policy}) => policy.read) @@ -53,11 +53,11 @@ export function relayPool(globalPrivateKey) { setPrivateKey(privateKey) { globalPrivateKey = privateKey }, - addRelay(url, policy = {read: true, write: true}) { + async addRelay(url, policy = {read: true, write: true}) { let relayURL = normalizeRelayURL(url) if (relayURL in relays) return - let relay = relayConnect(url, notice => { + let relay = await relayConnect(url, notice => { propagateNotice(notice, relayURL) }) relays[relayURL] = {relay, policy} @@ -105,12 +105,12 @@ export function relayPool(globalPrivateKey) { try { await relay.publish(event) statusCallback(0, relay.url) - let {unsub} = relay.sub( - () => { + let {unsub} = relay.sub({ + cb: () => { statusCallback(1, relay.url) }, - {id: event.id} - ) + filter: {id: event.id} + }) setTimeout(unsub, 5000) } catch (err) { statusCallback(-1, relay.url) diff --git a/relay.js b/relay.js index 4f684e9..488674b 100644 --- a/relay.js +++ b/relay.js @@ -85,8 +85,7 @@ export function relayConnect(url, onNotice) { } else { console.warn( 'got event with invalid signature from ' + url, - event, - id + event ) } 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]) channels[channel] = cb @@ -128,9 +128,9 @@ export function relayConnect(url, onNotice) { return { url, - sub: sub.bind(null, await sha256(Math.random().toString())), + sub, async publish(event) { - trySend(JSON.stringify(['EVENT', event])) + trySend(['EVENT', event]) }, close() { ws.close()