Add client package
This commit is contained in:
@@ -162,10 +162,18 @@ export const getAdapter = (url: string, adapterContext: AdapterContext = {}) =>
|
||||
}
|
||||
|
||||
if (url === LOCAL_RELAY_URL) {
|
||||
if (!context.repository) {
|
||||
throw new Error("LOCAL_RELAY_URL cannot be used without context.repository")
|
||||
}
|
||||
|
||||
return new LocalAdapter(context.repository)
|
||||
}
|
||||
|
||||
if (isRelayUrl(url)) {
|
||||
if (!context.pool) {
|
||||
throw new Error("Unable to connect to relays without context.pool")
|
||||
}
|
||||
|
||||
return new SocketAdapter(context.pool.get(url))
|
||||
}
|
||||
|
||||
|
||||
@@ -3,17 +3,17 @@ import {AbstractAdapter} from "./adapter.js"
|
||||
import {Repository} from "./repository.js"
|
||||
import {Pool} from "./pool.js"
|
||||
|
||||
export type AdapterFactory = (url: string, context: NetContext) => AbstractAdapter
|
||||
|
||||
export type NetContext = {
|
||||
pool: Pool
|
||||
repository: Repository
|
||||
isEventValid: (event: TrustedEvent, url: string) => boolean
|
||||
isEventDeleted: (event: TrustedEvent, url: string) => boolean
|
||||
getAdapter?: (url: string, context: NetContext) => AbstractAdapter
|
||||
pool?: Pool
|
||||
repository?: Repository
|
||||
getAdapter?: AdapterFactory
|
||||
}
|
||||
|
||||
export const netContext: NetContext = {
|
||||
pool: Pool.get(),
|
||||
repository: Repository.get(),
|
||||
isEventValid: (event, url) => verifyEvent(event),
|
||||
isEventDeleted: (event, url) => netContext.repository.isDeleted(event),
|
||||
isEventDeleted: (event, url) => netContext.repository?.isDeleted(event) ?? false,
|
||||
}
|
||||
|
||||
@@ -9,20 +9,10 @@ export type PoolOptions = {
|
||||
makeSocket?: (url: string) => Socket
|
||||
}
|
||||
|
||||
export let poolSingleton: Pool
|
||||
|
||||
export class Pool {
|
||||
_data = new Map<string, Socket>()
|
||||
_subs: PoolSubscription[] = []
|
||||
|
||||
static get() {
|
||||
if (!poolSingleton) {
|
||||
poolSingleton = new Pool()
|
||||
}
|
||||
|
||||
return poolSingleton
|
||||
}
|
||||
|
||||
constructor(readonly options: PoolOptions = {}) {}
|
||||
|
||||
has(url: string) {
|
||||
|
||||
@@ -26,8 +26,6 @@ export const LOCAL_RELAY_URL = "local://welshman.relay/"
|
||||
|
||||
const getDay = (ts: number) => Math.floor(ts / DAY)
|
||||
|
||||
export let repositorySingleton: Repository
|
||||
|
||||
export type RepositoryUpdate = {
|
||||
added: TrustedEvent[]
|
||||
removed: Set<string>
|
||||
@@ -61,14 +59,6 @@ export class Repository extends Emitter {
|
||||
deletes = new Map<string, {created_at: number; pubkey: string}[]>()
|
||||
expired = new Map<string, number>()
|
||||
|
||||
static get() {
|
||||
if (!repositorySingleton) {
|
||||
repositorySingleton = new Repository()
|
||||
}
|
||||
|
||||
return repositorySingleton
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user