mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-08 16:28:49 +00:00
a better way to do pubs and subs with SimplePool.
This commit is contained in:
29
README.md
29
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
|
||||
|
||||
18
pool.test.js
18
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))
|
||||
|
||||
|
||||
8
pool.ts
8
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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user