diff --git a/package.json b/package.json index 3e36252..e9978fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paravel", - "version": "0.3.0", + "version": "0.3.1", "description": "Yet another toolkit for nostr", "repository": { "type": "git", diff --git a/src/Connection.ts b/src/Connection.ts index 63581ce..040fec5 100644 --- a/src/Connection.ts +++ b/src/Connection.ts @@ -26,13 +26,18 @@ class SendQueue extends Queue { } if (verb === 'REQ') { - return this.cxn.meta.pendingRequests.size < 10 + return this.cxn.meta.pendingRequests.size < 8 } return true } handle(message: SocketMessage) { + // If we ended up handling a CLOSE before we handled the REQ, don't send the REQ + if (message[0] === 'CLOSE') { + this.messages = this.messages.filter(m => !(m[0] === 'REQ' && m[1] === message[1])) + } + this.cxn.onSend(message) } } diff --git a/src/ConnectionMeta.ts b/src/ConnectionMeta.ts index be54d30..03e76a1 100644 --- a/src/ConnectionMeta.ts +++ b/src/ConnectionMeta.ts @@ -44,7 +44,7 @@ export class ConnectionMeta { responseCount = 0 responseTimer = 0 - constructor(cxn: Connection) { + constructor(readonly cxn: Connection) { cxn.on('open', () => { this.lastOpen = Date.now() }) @@ -77,6 +77,8 @@ export class ConnectionMeta { if (verb === 'EVENT') this.onReceiveEvent(...payload) // @ts-ignore if (verb === 'EOSE') this.onReceiveEose(...payload) + // @ts-ignore + if (verb === 'NOTICE') this.onReceiveNotice(...payload) }) } @@ -133,6 +135,10 @@ export class ConnectionMeta { } } + onReceiveNotice(message: string) { + console.warn('NOTICE', this.cxn.url, message) + } + clearPending = () => { this.pendingPublishes.clear() this.pendingRequests.clear() diff --git a/src/util/Queue.ts b/src/util/Queue.ts index a2cca85..9c41354 100644 --- a/src/util/Queue.ts +++ b/src/util/Queue.ts @@ -20,7 +20,14 @@ export class Queue { } doWork() { - for (const message of this.messages.splice(0, 10)) { + for (let i = 0; i < 10; i++) { + if (this.messages.length === 0) { + break + } + + // Pop the messages one at a time so handle can modify the queue + const [message] = this.messages.splice(0, 1) + if (this.shouldSend(message)) { this.handle(message) } else {