diff --git a/packages/net/src/Executor.ts b/packages/net/src/Executor.ts index 0a6ad41..5264849 100644 --- a/packages/net/src/Executor.ts +++ b/packages/net/src/Executor.ts @@ -68,10 +68,13 @@ export class Executor { } publish(event: SignedEvent, {verb = 'EVENT', onOk, onError}: PublishOpts = {}) { - const okListener = (url: string, id: string, ...payload: any[]) => { + const okListener = (url: string, id: string, ok: boolean, message: string) => { if (id === event.id) { - ctx.net.onEvent(url, event) - onOk?.(url, id, ...payload) + if (ok) { + ctx.net.onEvent(url, event) + } + + onOk?.(url, id, ok, message) } } diff --git a/packages/net/src/Tracker.ts b/packages/net/src/Tracker.ts index 0294ba0..64fa3ac 100644 --- a/packages/net/src/Tracker.ts +++ b/packages/net/src/Tracker.ts @@ -17,8 +17,18 @@ export class Tracker extends Emitter { hasRelay = (eventId: string, relay: string) => this.relaysById.get(eventId)?.has(relay) addRelay = (eventId: string, relay: string) => { - const relays = this.relaysById.get(eventId) || new Set() - const ids = this.idsByRelay.get(relay) || new Set() + let relays = this.relaysById.get(eventId) + let ids = this.idsByRelay.get(relay) + + if (relays?.has(relay) && ids?.has(eventId)) return + + if (!relays) { + relays = new Set() + } + + if (!ids) { + ids = new Set() + } relays.add(relay) ids.add(eventId) @@ -30,8 +40,10 @@ export class Tracker extends Emitter { } removeRelay = (eventId: string, relay: string) => { - this.relaysById.get(eventId)?.delete(relay) - this.idsByRelay.get(relay)?.delete(eventId) + const didDeleteRelay = this.relaysById.get(eventId)?.delete(relay) + const didDeleteId = this.idsByRelay.get(relay)?.delete(eventId) + + if (!didDeleteRelay && !didDeleteId) return this.emit('update') }