remove net global state
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import EventEmitter from "events"
|
||||
import {call, sleep, mergeRight, on} from "@welshman/lib"
|
||||
import {call, sleep, on} from "@welshman/lib"
|
||||
import {isRelayUrl, matchFilters, Filter} from "@welshman/util"
|
||||
import {LOCAL_RELAY_URL, Repository} from "./repository.js"
|
||||
import {
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
} from "./message.js"
|
||||
import {Socket, SocketEvent} from "./socket.js"
|
||||
import {Unsubscriber} from "./util.js"
|
||||
import {netContext, NetContext} from "./context.js"
|
||||
import type {NetContext} from "./context.js"
|
||||
|
||||
export enum AdapterEvent {
|
||||
Receive = "receive",
|
||||
@@ -150,9 +150,7 @@ export class MockAdapter extends AbstractAdapter {
|
||||
|
||||
export type AdapterContext = Partial<NetContext>
|
||||
|
||||
export const getAdapter = (url: string, adapterContext: AdapterContext = {}) => {
|
||||
const context = mergeRight(netContext, adapterContext as any)
|
||||
|
||||
export const getAdapter = (url: string, context: AdapterContext = {}) => {
|
||||
if (context.getAdapter) {
|
||||
const adapter = context.getAdapter(url, context)
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import {verifyEvent, TrustedEvent} from "@welshman/util"
|
||||
import {AbstractAdapter} from "./adapter.js"
|
||||
import {Repository} from "./repository.js"
|
||||
import {Pool} from "./pool.js"
|
||||
@@ -6,14 +5,7 @@ import {Pool} from "./pool.js"
|
||||
export type AdapterFactory = (url: string, context: NetContext) => AbstractAdapter
|
||||
|
||||
export type NetContext = {
|
||||
isEventValid: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted: (event: TrustedEvent, url: string) => boolean
|
||||
pool?: Pool
|
||||
repository?: Repository
|
||||
getAdapter?: AdapterFactory
|
||||
}
|
||||
|
||||
export const netContext: NetContext = {
|
||||
isEventValid: (event, url) => verifyEvent(event),
|
||||
isEventDeleted: (event, url) => netContext.repository?.isDeleted(event) ?? false,
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
unionFilters,
|
||||
matchFilters,
|
||||
TrustedEvent,
|
||||
verifyEvent,
|
||||
deduplicateEvents,
|
||||
getFilterResultCardinality,
|
||||
} from "@welshman/util"
|
||||
@@ -27,7 +28,6 @@ import {
|
||||
} from "./message.js"
|
||||
import {getAdapter, AdapterContext, AdapterEvent} from "./adapter.js"
|
||||
import {SocketEvent, SocketStatus} from "./socket.js"
|
||||
import {netContext} from "./context.js"
|
||||
import {Tracker} from "./tracker.js"
|
||||
|
||||
export type BaseRequestOptions = {
|
||||
@@ -36,7 +36,6 @@ export type BaseRequestOptions = {
|
||||
context?: AdapterContext
|
||||
autoClose?: boolean
|
||||
isEventValid?: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted?: (event: TrustedEvent, url: string) => boolean
|
||||
onEvent?: (event: TrustedEvent, url: string) => void
|
||||
onDeleted?: (event: unknown, url: string) => void
|
||||
onInvalid?: (event: unknown, url: string) => void
|
||||
@@ -60,8 +59,8 @@ export const requestOne = (options: RequestOneOptions) => {
|
||||
const deferred = defer<TrustedEvent[]>()
|
||||
const tracker = options.tracker || new Tracker()
|
||||
const adapter = getAdapter(options.relay, options.context)
|
||||
const isEventValid = options.isEventValid || netContext.isEventValid
|
||||
const isEventDeleted = options.isEventDeleted || netContext.isEventDeleted
|
||||
const isEventValid: (event: TrustedEvent, url: string) => boolean =
|
||||
options.isEventValid || (event => verifyEvent(event))
|
||||
|
||||
let closed = false
|
||||
|
||||
@@ -88,7 +87,7 @@ export const requestOne = (options: RequestOneOptions) => {
|
||||
if (ids.has(id)) {
|
||||
if (tracker.track(event.id, url)) {
|
||||
options.onDuplicate?.(event, url)
|
||||
} else if (isEventDeleted(event, url)) {
|
||||
} else if (options.context?.repository?.isDeleted(event)) {
|
||||
options.onDeleted?.(event, url)
|
||||
} else if (!isEventValid(event, url)) {
|
||||
options.onInvalid?.(event, url)
|
||||
@@ -216,7 +215,6 @@ export type LoaderOptions = {
|
||||
threshold?: number
|
||||
context?: AdapterContext
|
||||
isEventValid?: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted?: (event: TrustedEvent, url: string) => boolean
|
||||
}
|
||||
|
||||
export type LoadOptions = {
|
||||
@@ -320,7 +318,6 @@ export const makeLoader = (options: LoaderOptions) =>
|
||||
signal: signalsByRelay.get(relay),
|
||||
context: options.context,
|
||||
isEventValid: options.isEventValid,
|
||||
isEventDeleted: options.isEventDeleted,
|
||||
onEvent: (event: TrustedEvent, url: string) => {
|
||||
for (const request of getOpenRequests()) {
|
||||
if (matchFilters(request.filters, event)) {
|
||||
|
||||
Reference in New Issue
Block a user