Compare commits

...

2 Commits

Author SHA1 Message Date
fiatjaf
a8938a3a0f wait a second before failing to send on a not yet connected websocket. 2023-02-26 16:53:03 -03:00
fiatjaf
a21329da3f make timeouts configurable for pool. 2023-02-26 16:50:49 -03:00
3 changed files with 13 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "nostr-tools", "name": "nostr-tools",
"version": "1.6.2", "version": "1.6.3",
"description": "Tools for making a Nostr client.", "description": "Tools for making a Nostr client.",
"repository": { "repository": {
"type": "git", "type": "git",

11
pool.ts
View File

@@ -8,8 +8,13 @@ export class SimplePool {
private _conn: {[url: string]: Relay} private _conn: {[url: string]: Relay}
private _seenOn: {[id: string]: Set<string>} = {} // a map of all events we've seen in each relay private _seenOn: {[id: string]: Set<string>} = {} // a map of all events we've seen in each relay
constructor() { private eoseSubTimeout: number
private getTimeout: number
constructor(options: {eoseSubTimeout?: number; getTimeout?: number} = {}) {
this._conn = {} this._conn = {}
this.eoseSubTimeout = options.eoseSubTimeout || 3400
this.getTimeout = options.getTimeout || 3400
} }
close(relays: string[]): void { close(relays: string[]): void {
@@ -51,7 +56,7 @@ export class SimplePool {
let eoseTimeout = setTimeout(() => { let eoseTimeout = setTimeout(() => {
eoseSent = true eoseSent = true
for (let cb of eoseListeners.values()) cb() for (let cb of eoseListeners.values()) cb()
}, 3500) }, this.eoseSubTimeout)
relays.forEach(async relay => { relays.forEach(async relay => {
let r let r
@@ -120,7 +125,7 @@ export class SimplePool {
let timeout = setTimeout(() => { let timeout = setTimeout(() => {
sub.unsub() sub.unsub()
resolve(null) resolve(null)
}, 3500) }, this.getTimeout)
sub.on('event', (event: Event) => { sub.on('event', (event: Event) => {
resolve(event) resolve(event)
clearTimeout(timeout) clearTimeout(timeout)

View File

@@ -175,7 +175,10 @@ export function relayInit(url: string): Relay {
async function trySend(params: [string, ...any]) { async function trySend(params: [string, ...any]) {
let msg = JSON.stringify(params) let msg = JSON.stringify(params)
if (!connected()) { if (!connected()) {
return await new Promise(resolve => setTimeout(resolve, 1000))
if (!connected()) {
return
}
} }
try { try {
ws.send(msg) ws.send(msg)