configurable list and get timeout on relay.

This commit is contained in:
fiatjaf 2023-02-26 21:23:09 -03:00
parent c362212778
commit 9d345a8f01
No known key found for this signature in database
GPG Key ID: BAD43C4BE5C1A3A1
3 changed files with 16 additions and 5 deletions

View File

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

View File

@ -29,7 +29,10 @@ export class SimplePool {
const existing = this._conn[nm]
if (existing) return existing
const relay = relayInit(nm)
const relay = relayInit(nm, {
getTimeout: this.getTimeout * 0.9,
listTimeout: this.getTimeout * 0.9
})
this._conn[nm] = relay
await relay.connect()

View File

@ -35,7 +35,15 @@ export type SubscriptionOptions = {
alreadyHaveEvent?: null | ((id: string, relay: string) => boolean)
}
export function relayInit(url: string): Relay {
export function relayInit(
url: string,
options: {
getTimeout?: number
listTimeout?: number
} = {}
): Relay {
let {listTimeout = 3000, getTimeout = 3000} = options
var ws: WebSocket
var openSubs: {[id: string]: {filters: Filter[]} & SubscriptionOptions} = {}
var listeners: {
@ -252,7 +260,7 @@ export function relayInit(url: string): Relay {
let timeout = setTimeout(() => {
s.unsub()
resolve(events)
}, 1500)
}, listTimeout)
s.on('eose', () => {
s.unsub()
clearTimeout(timeout)
@ -268,7 +276,7 @@ export function relayInit(url: string): Relay {
let timeout = setTimeout(() => {
s.unsub()
resolve(null)
}, 1500)
}, getTimeout)
s.on('event', (event: Event) => {
s.unsub()
clearTimeout(timeout)