diff --git a/src/reqmeister.ts b/src/reqmeister.ts index 27a97da..2196e39 100644 --- a/src/reqmeister.ts +++ b/src/reqmeister.ts @@ -1,6 +1,14 @@ import { client } from '@/client.ts'; import { Debug, type Event, EventEmitter, type Filter } from '@/deps.ts'; -import { AuthorMicrofilter, eventToMicroFilter, getFilterId, IdMicrofilter, type MicroFilter } from '@/filter.ts'; +import { + AuthorMicrofilter, + eventToMicroFilter, + getFilterId, + IdMicrofilter, + isMicrofilter, + type MicroFilter, +} from '@/filter.ts'; +import { type EventStore, GetEventsOpts } from '@/store.ts'; import { Time } from '@/utils/time.ts'; const debug = Debug('ditto:reqmeister'); @@ -18,7 +26,7 @@ interface ReqmeisterReqOpts { type ReqmeisterQueueItem = [string, MicroFilter, WebSocket['url'][]]; /** Batches requests to Nostr relays using microfilters. */ -class Reqmeister extends EventEmitter<{ [filterId: string]: (event: Event) => any }> { +class Reqmeister extends EventEmitter<{ [filterId: string]: (event: Event) => any }> implements EventStore { #opts: ReqmeisterOpts; #queue: ReqmeisterQueueItem[] = []; #promise!: Promise; @@ -119,6 +127,33 @@ class Reqmeister extends EventEmitter<{ [filterId: string]: (event: Event) => an const filterId = getFilterId(eventToMicroFilter(event)); return this.#queue.some(([id]) => id === filterId); } + + getEvents(filters: Filter[], opts?: GetEventsOpts | undefined): Promise[]> { + if (opts?.signal?.aborted) return Promise.resolve([]); + if (!filters.length) return Promise.resolve([]); + + const promises = filters.reduce>[]>((result, filter) => { + if (isMicrofilter(filter)) { + result.push(this.req(filter) as Promise>); + } + return result; + }, []); + + return Promise.all(promises); + } + + storeEvent(event: Event): Promise { + this.encounter(event); + return Promise.resolve(); + } + + countEvents(_filters: Filter[]): Promise { + throw new Error('COUNT not implemented.'); + } + + deleteEvents(_filters: Filter[]): Promise { + throw new Error('DELETE not implemented.'); + } } const reqmeister = new Reqmeister({