diff --git a/README.md b/README.md index 4d6ba5d..2d7aa4a 100644 --- a/README.md +++ b/README.md @@ -125,15 +125,34 @@ import 'websocket-polyfill' ```js import {pool} from 'nostr-tools' -const p = pool() +const pool = new SimplePool() -["wss://relay.example.com", "wss://relay.example2.com"].forEach(async url => { +let relays = ['wss://relay.example.com', 'wss://relay.example2.com'] + +relays.forEach(async url => { let relay = pool.ensureRelay(url) await relay.connect() - - relay.sub(...) // same as above - relay.publish(...) // etc }) + +let relay = pool.ensureRelay('wss://relay.example3.com') + +let subs = pool.sub([...relays, relay], { + authors: ['32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245'] +}) + +subs.forEach(sub => + sub.on('event', event => { + // this will only be called once the first time the event is received + // ... + }) +) + +let pubs = pool.publish(newEvent) +pubs.forEach(pub => + pub.on('ok', () => { + // ... + }) +) ``` ### Querying profile data from a NIP-05 address diff --git a/pool.test.js b/pool.test.js index 71fe3a8..28e0c05 100644 --- a/pool.test.js +++ b/pool.test.js @@ -2,14 +2,14 @@ require('websocket-polyfill') const { - pool, + SimplePool, generatePrivateKey, getPublicKey, getEventHash, signEvent } = require('./lib/nostr.cjs') -let p = pool() +let pool = new SimplePool() let relays = [ 'wss://nostr-dev.wellorder.net/', @@ -23,7 +23,7 @@ beforeAll(async () => { Promise.all( relays.map(relay => { try { - let r = p.ensureRelay(relay) + let r = pool.ensureRelay(relay) return r.connect() } catch (err) { /***/ @@ -35,7 +35,7 @@ beforeAll(async () => { afterAll(async () => { relays.forEach(relay => { try { - let r = p.ensureRelay(relay) + let r = pool.ensureRelay(relay) r.close() } catch (err) { /***/ @@ -47,7 +47,7 @@ test('removing duplicates when querying', async () => { let priv = generatePrivateKey() let pub = getPublicKey(priv) - let subs = p.sub(relays, [ + let subs = pool.sub(relays, [ { authors: [pub] } @@ -74,7 +74,7 @@ test('removing duplicates when querying', async () => { event.id = getEventHash(event) event.sig = signEvent(event, priv) - p.publish(relays, event) + pool.publish(relays, event) await new Promise(resolve => setTimeout(resolve, 1500)) @@ -85,8 +85,8 @@ test('removing duplicates correctly when double querying', async () => { let priv = generatePrivateKey() let pub = getPublicKey(priv) - let subs1 = p.sub(relays, [ { authors: [pub] } ]) - let subs2 = p.sub(relays, [ { authors: [pub] } ]) + let subs1 = pool.sub(relays, [{authors: [pub]}]) + let subs2 = pool.sub(relays, [{authors: [pub]}]) let received = [] @@ -111,7 +111,7 @@ test('removing duplicates correctly when double querying', async () => { event.id = getEventHash(event) event.sig = signEvent(event, priv) - p.publish(relays, event) + pool.publish(relays, event) await new Promise(resolve => setTimeout(resolve, 1500)) diff --git a/pool.ts b/pool.ts index 5884306..c6e8668 100644 --- a/pool.ts +++ b/pool.ts @@ -4,14 +4,10 @@ import {Filter} from './filter' import {Event} from './event' import {SubscriptionOptions, Sub, Pub} from './relay' -export function pool(defaultRelays: string[] = []) { - return new SimplePool(defaultRelays) -} - -class SimplePool { +export class SimplePool { private _conn: {[url: string]: Relay} - constructor(defaultRelays: string[]) { + constructor(defaultRelays: string[] = []) { this._conn = {} defaultRelays.forEach(this.ensureRelay) }