From a6e7caa76bbf964b191f1332387982f3d58865f5 Mon Sep 17 00:00:00 2001
From: Yonle <yonle@lecturify.net>
Date: Sun, 18 Feb 2024 19:37:59 +0700
Subject: [PATCH] bouncer: only start connect after first relay command.

Signed-off-by: Yonle <yonle@lecturify.net>
---
 bouncer.js | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/bouncer.js b/bouncer.js
index b796845..25fd78d 100644
--- a/bouncer.js
+++ b/bouncer.js
@@ -20,6 +20,7 @@ module.exports = (ws, req, onClose) => {
   let query = querystring.parse(req.url.slice(2));
   let authKey = null;
   let authorized = true;
+  let sessStarted = false;
   let lastEvent = Date.now();
   ws.ip = req.headers["x-forwarded-for"]?.split(",")[0] || req.socket.address()?.address;
   ws.relays = new Set(); // Set() of connected relays.
@@ -77,6 +78,11 @@ module.exports = (ws, req, onClose) => {
           return ws.send(JSON.stringify(["OK", data[1]?.id, false, "rate-limited: request too fast."]));
         }
 
+        if (!ws.relays.size && !sessStarted) {
+          newsess(ws);
+          sessStarted = true;
+        }
+
         lastEvent = Date.now();
 
         ws.my_events.add(data[1]);
@@ -107,6 +113,12 @@ module.exports = (ws, req, onClose) => {
             });
           }
         }
+
+        if (!ws.relays.size && !sessStarted) {
+          newsess(ws);
+          sessStarted = true;
+        }
+
         ws.subs.set(origID, filters);
         ws.events.set(origID, new Set());
         ws.pause_subs.delete(origID);
@@ -142,7 +154,6 @@ module.exports = (ws, req, onClose) => {
           ws.pubkey = data[1].pubkey;
           console.log(process.pid, "---", ws.ip, "successfully authorized as", ws.pubkey, private_keys[ws.pubkey] ? "(admin)" : "(user)");
           if (authorized) return;
-          newsess(ws);
           authorized = true;
           lastEvent = Date.now();
         }
@@ -168,8 +179,6 @@ module.exports = (ws, req, onClose) => {
       sock.terminate();
     }
   });
-
-  if (authorized) newsess(ws);
 }
 
 // WS - New session for client $id