Bring back some net context
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import EventEmitter from "events"
|
||||
import {call, on} from "@welshman/lib"
|
||||
import {call, mergeRight, on} from "@welshman/lib"
|
||||
import {isRelayUrl} from "@welshman/util"
|
||||
import {LocalRelay, LOCAL_RELAY_URL, Repository} from "@welshman/relay"
|
||||
import {LocalRelay, LOCAL_RELAY_URL} from "@welshman/relay"
|
||||
import {RelayMessage, ClientMessage} from "./message.js"
|
||||
import {Socket, SocketEvent} from "./socket.js"
|
||||
import {TypedEmitter, Unsubscriber} from "./util.js"
|
||||
import {Pool} from "./pool.js"
|
||||
import {netContext, NetContext} from "./context.js"
|
||||
|
||||
export enum AdapterEvent {
|
||||
Receive = "adapter:event:receive",
|
||||
@@ -99,13 +99,13 @@ export class MockAdapter extends AbstractAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
export type AdapterContext = {
|
||||
pool?: Pool
|
||||
relay?: LocalRelay
|
||||
export type AdapterContext = Partial<NetContext> & {
|
||||
getAdapter?: (url: string, context: AdapterContext) => AbstractAdapter
|
||||
}
|
||||
|
||||
export const getAdapter = (url: string, context: AdapterContext = {}) => {
|
||||
export const getAdapter = (url: string, adapterContext: AdapterContext = {}) => {
|
||||
const context = mergeRight(netContext, adapterContext as any)
|
||||
|
||||
if (context.getAdapter) {
|
||||
const adapter = context.getAdapter(url, context)
|
||||
|
||||
@@ -115,15 +115,11 @@ export const getAdapter = (url: string, context: AdapterContext = {}) => {
|
||||
}
|
||||
|
||||
if (url === LOCAL_RELAY_URL) {
|
||||
const relay = context.relay || new LocalRelay(Repository.getSingleton())
|
||||
|
||||
return new LocalAdapter(relay)
|
||||
return new LocalAdapter(new LocalRelay(context.repository))
|
||||
}
|
||||
|
||||
if (isRelayUrl(url)) {
|
||||
const pool = context.pool || Pool.getSingleton()
|
||||
|
||||
return new SocketAdapter(pool.get(url))
|
||||
return new SocketAdapter(context.pool.get(url))
|
||||
}
|
||||
|
||||
throw new Error(`Invalid relay url ${url}`)
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import {Repository} from "@welshman/relay"
|
||||
import {verifyEvent, TrustedEvent, SignedEvent} from "@welshman/util"
|
||||
import {Pool} from "./pool.js"
|
||||
|
||||
export type NetContext = {
|
||||
pool: Pool
|
||||
repository: Repository
|
||||
isEventValid: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted: (event: TrustedEvent, url: string) => boolean
|
||||
}
|
||||
|
||||
export const netContext: NetContext = {
|
||||
pool: Pool.getSingleton(),
|
||||
repository: Repository.getSingleton(),
|
||||
isEventValid: (event, url) => Boolean(event.sig && verifyEvent(event as SignedEvent)),
|
||||
isEventDeleted: (event, url) => netContext.repository.isDeleted(event),
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from "./adapter.js"
|
||||
export * from "./auth.js"
|
||||
export * from "./context.js"
|
||||
export * from "./diff.js"
|
||||
export * from "./message.js"
|
||||
export * from "./negentropy.js"
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import {EventEmitter} from "events"
|
||||
import {on, always, call, randomId, yieldThread, pushToMapKey, batcher} from "@welshman/lib"
|
||||
import {on, call, randomId, yieldThread, pushToMapKey, batcher} from "@welshman/lib"
|
||||
import {
|
||||
Filter,
|
||||
unionFilters,
|
||||
matchFilter,
|
||||
TrustedEvent,
|
||||
getFilterResultCardinality,
|
||||
verifyEvent as defaultVerifyEvent,
|
||||
} from "@welshman/util"
|
||||
import {RelayMessage, ClientMessageType, isRelayEvent, isRelayEose} from "./message.js"
|
||||
import {getAdapter, AdapterContext, AbstractAdapter, AdapterEvent} from "./adapter.js"
|
||||
import {SocketEvent, SocketStatus} from "./socket.js"
|
||||
import {TypedEmitter, Unsubscriber} from "./util.js"
|
||||
import {netContext} from "./context.js"
|
||||
import {Tracker} from "./tracker.js"
|
||||
|
||||
export enum RequestEvent {
|
||||
@@ -45,8 +45,8 @@ export type SingleRequestOptions = {
|
||||
timeout?: number
|
||||
tracker?: Tracker
|
||||
autoClose?: boolean
|
||||
isEventValid?: (event: any, url: string) => boolean
|
||||
isEventDeleted?: (event: any, url: string) => boolean
|
||||
isEventValid?: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted?: (event: TrustedEvent, url: string) => boolean
|
||||
}
|
||||
|
||||
export class SingleRequest extends (EventEmitter as new () => TypedEmitter<SingleRequestEvents>) {
|
||||
@@ -59,8 +59,8 @@ export class SingleRequest extends (EventEmitter as new () => TypedEmitter<Singl
|
||||
super()
|
||||
|
||||
const tracker = options.tracker || new Tracker()
|
||||
const isEventValid = options.isEventValid || defaultVerifyEvent
|
||||
const isEventDeleted = options.isEventDeleted || always(false)
|
||||
const isEventValid = options.isEventValid || netContext.isEventValid
|
||||
const isEventDeleted = options.isEventDeleted || netContext.isEventDeleted
|
||||
|
||||
// Set up our adapter
|
||||
this._adapter = getAdapter(this.options.relay, this.options.context)
|
||||
|
||||
Reference in New Issue
Block a user