From d4cecd5e507888fa5cc082cea89bc40fa57c6973 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 3 Jun 2024 12:27:53 -0700 Subject: [PATCH] Fix repository delte notification and CLOSE buffering --- packages/lib/LRUCache.ts | 4 ++++ packages/lib/Tools.ts | 22 ++++++++++++++++++---- packages/net/Connection.ts | 7 ++++++- packages/util/Repository.ts | 1 + 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/lib/LRUCache.ts b/packages/lib/LRUCache.ts index 40f0fb7..73931ea 100644 --- a/packages/lib/LRUCache.ts +++ b/packages/lib/LRUCache.ts @@ -63,3 +63,7 @@ export function cached({ return get } + +export function simpleCache(getValue: (args: Args) => V) { + return cached({maxSize: 10**10, getKey: xs => xs.join(':'), getValue}) +} diff --git a/packages/lib/Tools.ts b/packages/lib/Tools.ts index e1d66f1..d4de895 100644 --- a/packages/lib/Tools.ts +++ b/packages/lib/Tools.ts @@ -311,11 +311,25 @@ export const batch = (t: number, f: (xs: T[]) => void) => { } } -export const addToMapKey = (m: Map>, k: K, v: T) => { - const a = m.get(k) || new Set() +export const addToKey = (m: Record>, k: string, v: T) => { + const s = m[k] || new Set() - a.add(v) - m.set(k, a) + s.add(v) + m[k] = s +} + +export const pushToKey = (m: Record, k: string, v: T) => { + const a = m[k] || [] + + a.push(v) + m[k] = a +} + +export const addToMapKey = (m: Map>, k: K, v: T) => { + const s = m.get(k) || new Set() + + s.add(v) + m.set(k, s) } export const pushToMapKey = (m: Map, k: K, v: T) => { diff --git a/packages/net/Connection.ts b/packages/net/Connection.ts index de6ea90..1db5d54 100644 --- a/packages/net/Connection.ts +++ b/packages/net/Connection.ts @@ -30,10 +30,15 @@ export class Connection extends Emitter { const [verb, ...extra] = asMessage(message) - if (['AUTH', 'CLOSE'].includes(verb)) { + if (verb === 'AUTH') { return false } + // Only close reqs that have been sent + if (verb === 'CLOSE') { + return !this.meta.pendingRequests.has(extra[0]) + } + // Allow relay requests through if (verb === 'EVENT' && extra[0].kind === 28934) { return false diff --git a/packages/util/Repository.ts b/packages/util/Repository.ts index 0abc567..214ee4e 100644 --- a/packages/util/Repository.ts +++ b/packages/util/Repository.ts @@ -162,6 +162,7 @@ export class Repository extends Emitter { // Delete our duplicate first if (duplicate) { + this.notifyDelete(duplicate) this.eventsById.delete(duplicate.id) if (isReplaceable(duplicate)) {