From 3367cb929b4917c923276e66b9b5ef77d2aa94cc Mon Sep 17 00:00:00 2001 From: Danny Morabito Date: Wed, 6 Aug 2025 02:11:48 +0200 Subject: [PATCH] fix typo, correctly perform auth, and close remote when local disconnects --- src/main.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index 58d89e3..e63566f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -20,7 +20,7 @@ async function validateAuthEvent(event: Event, challenge: string): boolean { if (event.kind !== 22242) return false; const last30Seconds = Math.floor(Date.now() / 1000) - 30; if (event.created_at < last30Seconds) return false; - const challengeTag = event.tags.find(tag => tag[0] === 'challange')?.[1]; + const challengeTag = event.tags.find(tag => tag[0] === 'challenge')?.[1]; if (challengeTag !== challenge) return false; const file = Bun.file("./allowed-pubkeys.json"); if (!await file.exists()) return true; @@ -60,20 +60,31 @@ export function main(mainRelayUrl: string) { const [event] = data; const valid = await validateAuthEvent(event, ws.data.authToken); if (!valid) return sendMessage(ws, ['NOTICE', "Invalid auth event"]); + sendMessage(ws, ['OK', event.id, true, "successully authenticated. welcome"]); ws.data.authenticated = true; return; } return sendAuth(ws); + } else if (ws.data.authenticated && command === "AUTH") { + const [event] = data; + return sendMessage(ws, ['OK', event.id, true, 'you were already authenticated']) } ws.data.remoteWs.send(msg); }, open(ws) { - sendAuth(ws); - ws.data.remoteWs = new WebSocket(mainRelayUrl); - ws.data.remoteWs.onmessage = (data) => ws.send(data.data, true); + const remoteWs = new WebSocket(mainRelayUrl); + remoteWs.addEventListener("message", data => ws.send(data.data, true)); + remoteWs.addEventListener("open", () => { + ws.data.remoteWs = remoteWs; + sendAuth(ws); + }) + remoteWs.addEventListener("error", console.error) }, perMessageDeflate: true, perMessageDeflateCompressionLevel: 9 + close(ws) { + ws.data.remoteWs?.close(); + } } }) console.log('Server listening @', server.url.host)