From dd603e47d8bfe073080d163976606fe8dbb356ab Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Thu, 3 Apr 2025 23:31:34 -0300 Subject: [PATCH] some small bugs codebuff found. --- abstract-relay.ts | 2 ++ core.ts | 2 +- utils.ts | 23 +++++++++++++++-------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/abstract-relay.ts b/abstract-relay.ts index 322ba6b..48fb387 100644 --- a/abstract-relay.ts +++ b/abstract-relay.ts @@ -90,6 +90,7 @@ export class AbstractRelay { try { this.ws = new this._WebSocket(this.url) } catch (err) { + clearTimeout(this.connectionTimeoutHandle) reject(err) return } @@ -101,6 +102,7 @@ export class AbstractRelay { } this.ws.onerror = ev => { + clearTimeout(this.connectionTimeoutHandle) reject((ev as any).message || 'websocket error') if (this._connected) { this._connected = false diff --git a/core.ts b/core.ts index a92b824..4583dbe 100644 --- a/core.ts +++ b/core.ts @@ -43,7 +43,7 @@ export function validateEvent(event: T): event is T & UnsignedEvent { let tag = event.tags[i] if (!Array.isArray(tag)) return false for (let j = 0; j < tag.length; j++) { - if (typeof tag[j] === 'object') return false + if (typeof tag[j] !== 'string') return false } } diff --git a/utils.ts b/utils.ts index 70ed664..0801995 100644 --- a/utils.ts +++ b/utils.ts @@ -4,14 +4,18 @@ export const utf8Decoder: TextDecoder = new TextDecoder('utf-8') export const utf8Encoder: TextEncoder = new TextEncoder() export function normalizeURL(url: string): string { - if (url.indexOf('://') === -1) url = 'wss://' + url - let p = new URL(url) - p.pathname = p.pathname.replace(/\/+/g, '/') - if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1) - if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = '' - p.searchParams.sort() - p.hash = '' - return p.toString() + try { + if (url.indexOf('://') === -1) url = 'wss://' + url + let p = new URL(url) + p.pathname = p.pathname.replace(/\/+/g, '/') + if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1) + if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = '' + p.searchParams.sort() + p.hash = '' + return p.toString() + } catch (e) { + throw new Error(`Invalid URL: ${url}`) + } } export function insertEventIntoDescendingList(sortedArray: Event[], event: Event): Event[] { @@ -111,6 +115,9 @@ export class Queue { const target = this.first this.first = target.next + if (this.first) { + this.first.prev = null // fix: clean up prev pointer + } return target.value }