From a4bc951eee09a25f8c4f6d79b2df748a4ff72dbd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 3 Jan 2024 21:39:54 -0600 Subject: [PATCH] Add `supportedNips` to all storages --- src/client.ts | 1 + src/reqmeister.ts | 2 ++ src/storages/events-db.ts | 3 +++ src/storages/memorelay.ts | 8 +++----- src/storages/optimizer.ts | 2 ++ src/store.ts | 2 ++ 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/client.ts b/src/client.ts index 511cbc75..75b216f8 100644 --- a/src/client.ts +++ b/src/client.ts @@ -59,6 +59,7 @@ function storeEvent(event: Event, opts: StoreEventOpts = {}): Promise { } const client: EventStore = { + supportedNips: [1], getEvents, storeEvent, countEvents: () => Promise.reject(new Error('COUNT not implemented')), diff --git a/src/reqmeister.ts b/src/reqmeister.ts index 2196e393..8cc7e0d9 100644 --- a/src/reqmeister.ts +++ b/src/reqmeister.ts @@ -32,6 +32,8 @@ class Reqmeister extends EventEmitter<{ [filterId: string]: (event: Event) => an #promise!: Promise; #resolve!: () => void; + supportedNips = []; + constructor(opts: ReqmeisterOpts = {}) { super(); this.#opts = opts; diff --git a/src/storages/events-db.ts b/src/storages/events-db.ts index 4fcaf49e..c5536daf 100644 --- a/src/storages/events-db.ts +++ b/src/storages/events-db.ts @@ -56,6 +56,9 @@ class EventsDB implements EventStore { #db: Kysely; #debug = Debug('ditto:db:events'); + /** NIPs supported by this storage method. */ + supportedNips = [1, 45, 50]; + constructor(db: Kysely) { this.#db = db; } diff --git a/src/storages/memorelay.ts b/src/storages/memorelay.ts index fab00c00..85f48268 100644 --- a/src/storages/memorelay.ts +++ b/src/storages/memorelay.ts @@ -8,15 +8,13 @@ class Memorelay implements EventStore { #debug = Debug('ditto:memorelay'); #cache: LRUCache; + /** NIPs supported by this storage method. */ + supportedNips = [1, 45]; + constructor(...args: ConstructorParameters>) { this.#cache = new LRUCache(...args); } - /** NIPs supported by this storage method. */ - get supportedNips(): number[] { - return [1]; - } - /** Iterate stored events. */ *#events(): Generator { for (const event of this.#cache.values()) { diff --git a/src/storages/optimizer.ts b/src/storages/optimizer.ts index 4b4ed9ec..f70fa7fe 100644 --- a/src/storages/optimizer.ts +++ b/src/storages/optimizer.ts @@ -13,6 +13,8 @@ class Optimizer implements EventStore { #cache: EventStore; #client: EventStore; + supportedNips = [1]; + constructor(opts: OptimizerOpts) { this.#db = opts.db; this.#cache = opts.cache; diff --git a/src/store.ts b/src/store.ts index 55674064..c89e9cc9 100644 --- a/src/store.ts +++ b/src/store.ts @@ -33,6 +33,8 @@ interface DittoEvent extends Event { /** Storage interface for Nostr events. */ interface EventStore { + /** Indicates NIPs supported by this data store, similar to NIP-11. For example, `50` would indicate support for `search` filters. */ + supportedNips: readonly number[]; /** Add an event to the store. */ storeEvent(event: Event, opts?: StoreEventOpts): Promise; /** Get events from filters. */