Merge pull request #6 from rsbondi/protocol-change

This commit is contained in:
fiatjaf
2021-02-20 11:10:33 -03:00
committed by GitHub
2 changed files with 13 additions and 13 deletions

14
pool.js
View File

@@ -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)

View File

@@ -85,8 +85,7 @@ export function relayConnect(url, onNotice) {
} else {
console.warn(
'got event with invalid signature from ' + url,
event,
id
event
)
}
return
@@ -116,21 +115,22 @@ export function relayConnect(url, onNotice) {
}
}
const sub = async (channel, {cb, filter}) => {
const sub = async ({ch, cb, filter}) => {
const channel = ch || (await sha256(Math.random().toString())).reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '')
trySend(['REQ', channel, filter])
channels[channel] = cb
return {
sub: ({cb = cb, filter = filter}) => sub(channel, {cb, filter}),
sub: ({cb = cb, filter = filter}) => sub({ch: channel, cb, filter}),
unsub: () => trySend(['CLOSE', channel])
}
}
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()