Thread context through feed controller

This commit is contained in:
Jon Staab
2025-05-05 14:05:34 -07:00
parent c538db070a
commit 6589886df2
6 changed files with 42 additions and 33 deletions
+13 -7
View File
@@ -39,9 +39,7 @@ const deduplicateEvents = (events: TrustedEvent[]) => {
return Array.from(eventsByAddress.values())
}
export type RequestOneOptions = {
relay: string
filters: Filter[]
export type BaseRequestOptions = {
signal?: AbortSignal
tracker?: Tracker
context?: AdapterContext
@@ -58,6 +56,11 @@ export type RequestOneOptions = {
onClose?: () => void
}
export type RequestOneOptions = BaseRequestOptions & {
relay: string
filters: Filter[]
}
export const requestOne = (options: RequestOneOptions) => {
const ids = new Set<string>()
const eose = new Set<string>()
@@ -158,8 +161,9 @@ export const requestOne = (options: RequestOneOptions) => {
return deferred
}
export type RequestOptions = Omit<RequestOneOptions, "relay"> & {
export type RequestOptions = BaseRequestOptions & {
relays: string[]
filters: Filter[]
threshold?: number
}
@@ -216,6 +220,8 @@ export type LoadOptions = {
onClose?: () => void
}
export type Loader = (options: LoadOptions) => Promise<TrustedEvent[]>
/**
* Creates a convenience function which returns a promise of events from a request.
* It may return early if filter cardinality is known, and it delays requests in order
@@ -224,7 +230,7 @@ export type LoadOptions = {
* @returns - a load function
*/
export const makeLoader = (options: LoaderOptions) =>
batcher(options.delay, async (allRequests: LoadOptions[]) => {
batcher(options.delay, (allRequests: LoadOptions[]) => {
const resultsByRequest = new Map<LoadOptions, Deferred<TrustedEvent[]>>()
const eventsByRequest = new Map<LoadOptions, TrustedEvent[]>()
const requestsByRelay = new Map<string, LoadOptions[]>()
@@ -276,7 +282,7 @@ export const makeLoader = (options: LoaderOptions) =>
signalsByRelay.set(relay, AbortSignal.any(signals))
}
Array.from(requestsByRelay).forEach(async ([relay, requests]) => {
Array.from(requestsByRelay).forEach(([relay, requests]) => {
// Union all filters for a given request and send them together
const filters = unionFilters(requests.flatMap(r => r.filters))
@@ -318,6 +324,6 @@ export const makeLoader = (options: LoaderOptions) =>
})
return allRequests.map(r => resultsByRequest.get(r) || [])
})
}) as Loader
export const load = makeLoader({delay: 200, timeout: 3000, threshold: 0.5})
+1
View File
@@ -122,6 +122,7 @@ export class Socket extends EventEmitter {
close = () => {
this._ws?.close()
this._ws = undefined
this._sendQueue.clear()
}
cleanup = () => {