import b4a from "b4a"; export interface Peer { host: string; port: number; } export type PeerSource = (pubkey: Buffer) => Promise; export class PeerDiscovery { private _sources: Map = new Map(); public registerSource(name: string, source: PeerSource): boolean { if (this._sources.has(name)) { return false; } this._sources.set(name, source); return true; } public removeSource(name: string): boolean { if (!this._sources.has(name)) { return false; } this._sources.delete(name); return true; } public async discover(pubkey: string | Buffer): Promise { if (!b4a.isBuffer(pubkey)) { pubkey = b4a.from(pubkey, "hex") as Buffer; } for (const source of this._sources.values()) { const result = await source(pubkey); if (result) { return result; } } return false; } }