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
|
```js
|
||||||
import {pool} from 'nostr-tools'
|
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)
|
let relay = pool.ensureRelay(url)
|
||||||
await relay.connect()
|
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
|
### Querying profile data from a NIP-05 address
|
||||||
|
|||||||
18
pool.test.js
18
pool.test.js
@@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
require('websocket-polyfill')
|
require('websocket-polyfill')
|
||||||
const {
|
const {
|
||||||
pool,
|
SimplePool,
|
||||||
generatePrivateKey,
|
generatePrivateKey,
|
||||||
getPublicKey,
|
getPublicKey,
|
||||||
getEventHash,
|
getEventHash,
|
||||||
signEvent
|
signEvent
|
||||||
} = require('./lib/nostr.cjs')
|
} = require('./lib/nostr.cjs')
|
||||||
|
|
||||||
let p = pool()
|
let pool = new SimplePool()
|
||||||
|
|
||||||
let relays = [
|
let relays = [
|
||||||
'wss://nostr-dev.wellorder.net/',
|
'wss://nostr-dev.wellorder.net/',
|
||||||
@@ -23,7 +23,7 @@ beforeAll(async () => {
|
|||||||
Promise.all(
|
Promise.all(
|
||||||
relays.map(relay => {
|
relays.map(relay => {
|
||||||
try {
|
try {
|
||||||
let r = p.ensureRelay(relay)
|
let r = pool.ensureRelay(relay)
|
||||||
return r.connect()
|
return r.connect()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
/***/
|
/***/
|
||||||
@@ -35,7 +35,7 @@ beforeAll(async () => {
|
|||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
relays.forEach(relay => {
|
relays.forEach(relay => {
|
||||||
try {
|
try {
|
||||||
let r = p.ensureRelay(relay)
|
let r = pool.ensureRelay(relay)
|
||||||
r.close()
|
r.close()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
/***/
|
/***/
|
||||||
@@ -47,7 +47,7 @@ test('removing duplicates when querying', async () => {
|
|||||||
let priv = generatePrivateKey()
|
let priv = generatePrivateKey()
|
||||||
let pub = getPublicKey(priv)
|
let pub = getPublicKey(priv)
|
||||||
|
|
||||||
let subs = p.sub(relays, [
|
let subs = pool.sub(relays, [
|
||||||
{
|
{
|
||||||
authors: [pub]
|
authors: [pub]
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ test('removing duplicates when querying', async () => {
|
|||||||
event.id = getEventHash(event)
|
event.id = getEventHash(event)
|
||||||
event.sig = signEvent(event, priv)
|
event.sig = signEvent(event, priv)
|
||||||
|
|
||||||
p.publish(relays, event)
|
pool.publish(relays, event)
|
||||||
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 1500))
|
await new Promise(resolve => setTimeout(resolve, 1500))
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ test('removing duplicates correctly when double querying', async () => {
|
|||||||
let priv = generatePrivateKey()
|
let priv = generatePrivateKey()
|
||||||
let pub = getPublicKey(priv)
|
let pub = getPublicKey(priv)
|
||||||
|
|
||||||
let subs1 = p.sub(relays, [ { authors: [pub] } ])
|
let subs1 = pool.sub(relays, [{authors: [pub]}])
|
||||||
let subs2 = p.sub(relays, [ { authors: [pub] } ])
|
let subs2 = pool.sub(relays, [{authors: [pub]}])
|
||||||
|
|
||||||
let received = []
|
let received = []
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ test('removing duplicates correctly when double querying', async () => {
|
|||||||
event.id = getEventHash(event)
|
event.id = getEventHash(event)
|
||||||
event.sig = signEvent(event, priv)
|
event.sig = signEvent(event, priv)
|
||||||
|
|
||||||
p.publish(relays, event)
|
pool.publish(relays, event)
|
||||||
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 1500))
|
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 {Event} from './event'
|
||||||
import {SubscriptionOptions, Sub, Pub} from './relay'
|
import {SubscriptionOptions, Sub, Pub} from './relay'
|
||||||
|
|
||||||
export function pool(defaultRelays: string[] = []) {
|
export class SimplePool {
|
||||||
return new SimplePool(defaultRelays)
|
|
||||||
}
|
|
||||||
|
|
||||||
class SimplePool {
|
|
||||||
private _conn: {[url: string]: Relay}
|
private _conn: {[url: string]: Relay}
|
||||||
|
|
||||||
constructor(defaultRelays: string[]) {
|
constructor(defaultRelays: string[] = []) {
|
||||||
this._conn = {}
|
this._conn = {}
|
||||||
defaultRelays.forEach(this.ensureRelay)
|
defaultRelays.forEach(this.ensureRelay)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user