From f4244f881ef219becabf5fa490bfdf7b63f0af18 Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 18 Apr 2023 21:29:38 +0100 Subject: [PATCH 1/2] fix: nip42 --- packages/app/src/Pages/Layout.tsx | 2 +- packages/nostr/src/legacy/Connection.ts | 34 ++++++++++++++++++------- packages/nostr/src/legacy/RelayInfo.ts | 1 + 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/app/src/Pages/Layout.tsx b/packages/app/src/Pages/Layout.tsx index 44f149b8..c5d31ab0 100644 --- a/packages/app/src/Pages/Layout.tsx +++ b/packages/app/src/Pages/Layout.tsx @@ -64,7 +64,7 @@ export default function Layout() { useEffect(() => { if (pub) { - System.HandleAuth = pub.nip42Auth; + System.HandleAuth = pub.nip42Auth.bind(pub); } }, [pub]); diff --git a/packages/nostr/src/legacy/Connection.ts b/packages/nostr/src/legacy/Connection.ts index f5f70567..5e0ddd3c 100644 --- a/packages/nostr/src/legacy/Connection.ts +++ b/packages/nostr/src/legacy/Connection.ts @@ -62,7 +62,7 @@ export class Connection { OnEose?: (sub: string) => void; Auth?: AuthHandler; AwaitingAuth: Map; - Authed: boolean; + Authed = false; Ephemeral: boolean; EphemeralTimeout: ReturnType | undefined; Down = true; @@ -90,7 +90,6 @@ export class Connection { this.ReconnectTimer = null; this.EventsCallback = new Map(); this.AwaitingAuth = new Map(); - this.Authed = false; this.Auth = auth; this.Ephemeral = ephemeral; @@ -189,7 +188,9 @@ export class Connection { const tag = msg[0]; switch (tag) { case "AUTH": { - this._OnAuthAsync(msg[1]); + this._OnAuthAsync(msg[1]) + .then(() => this.#sendPendingRaw()) + .catch(console.error); this.Stats.EventsReceived++; this.#UpdateState(); break; @@ -354,7 +355,7 @@ export class Connection { this.CurrentState.avgLatency = this.Stats.Latency.length > 0 ? this.Stats.Latency.reduce((acc, v) => acc + v, 0) / - this.Stats.Latency.length + this.Stats.Latency.length : 0; this.CurrentState.disconnects = this.Stats.Disconnects; this.CurrentState.info = this.Info; @@ -376,11 +377,29 @@ export class Connection { } #SendJson(obj: object) { - const authPending = !this.Authed && this.AwaitingAuth.size > 0; + const authPending = !this.Authed && (this.AwaitingAuth.size > 0 || this.Info?.limitation?.auth_required === true); if (this.Socket?.readyState !== WebSocket.OPEN || authPending) { this.PendingRaw.push(obj); return; } + + this.#sendPendingRaw(); + this.#sendOnWire(obj); + } + + #sendPendingRaw() { + while (this.PendingRaw.length > 0) { + const next = this.PendingRaw.shift(); + if (next) { + this.#sendOnWire(next); + } + } + } + + #sendOnWire(obj: unknown) { + if (this.Socket?.readyState !== WebSocket.OPEN) { + throw new Error("Socket is not open"); + } const json = JSON.stringify(obj); this.Socket.send(json); } @@ -414,10 +433,7 @@ export class Connection { resolve(); }); - const req = ["AUTH", authEvent]; - this.#SendJson(req); - this.Stats.EventsSent++; - this.#UpdateState(); + this.#sendOnWire(["AUTH", authEvent]); }); } diff --git a/packages/nostr/src/legacy/RelayInfo.ts b/packages/nostr/src/legacy/RelayInfo.ts index 9531fb3a..438fe41f 100644 --- a/packages/nostr/src/legacy/RelayInfo.ts +++ b/packages/nostr/src/legacy/RelayInfo.ts @@ -11,5 +11,6 @@ export interface RelayInfo { max_subscriptions: number; max_filters: number; max_event_tags: number; + auth_required: boolean }; } From 64da4248b555b7f2352500d1a05faa65634fcbed Mon Sep 17 00:00:00 2001 From: Kieran Date: Wed, 19 Apr 2023 10:39:13 +0100 Subject: [PATCH 2/2] formatting --- packages/app/src/translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index 1638ac64..17334667 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -377,4 +377,4 @@ "zjJZBd": "You're ready!", "zonsdq": "Failed to load LNURL service", "zvCDao": "Automatically show latest notes" -} \ No newline at end of file +}