Add client package

This commit is contained in:
Jon Staab
2026-04-28 16:08:41 -07:00
parent 48bf9d6ebe
commit e0e9ad5834
10 changed files with 497 additions and 26 deletions
+8
View File
@@ -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))
}
+6 -6
View File
@@ -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,
}
-10
View File
@@ -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) {
-10
View File
@@ -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()