From db11812bd63ee8a3f06df133cb293eacdaaf8e2b Mon Sep 17 00:00:00 2001 From: Koala <6156589+Shik3i@users.noreply.github.com> Date: Tue, 26 May 2026 01:05:56 +0200 Subject: [PATCH] fix: suppress seek events when solo, add moz-extension CORS, add server logging --- extension/background.js | 9 +++++++++ package.json | 2 +- server/index.js | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/extension/background.js b/extension/background.js index e25a77c..46a37c5 100644 --- a/extension/background.js +++ b/extension/background.js @@ -1167,6 +1167,15 @@ async function handleAsyncMessage(message, sender, sendResponse) { }, FORCE_SYNC_TIMEOUT); } addToHistory(message.action, 'You'); + + const isNonEssentialEvent = message.action === EVENTS.PLAY || message.action === EVENTS.PAUSE || message.action === EVENTS.SEEK; + const hasOtherPeers = currentRoom && Array.isArray(currentRoom.peers) && currentRoom.peers.length > 0; + + if (isNonEssentialEvent && !hasOtherPeers) { + sendResponse({ status: 'ok_solo' }); + return; + } + emit(message.action, { ...message.payload, peerId }); sendResponse({ status: 'ok' }); }; diff --git a/package.json b/package.json index 85ac2c6..04f22d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "koalasync", - "version": "1.8.5", + "version": "1.8.6", "description": "KoalaSync Build Scripts", "private": true, "scripts": { diff --git a/server/index.js b/server/index.js index 79c804f..024510c 100644 --- a/server/index.js +++ b/server/index.js @@ -44,9 +44,10 @@ const httpServer = createServer(app); const io = new Server(httpServer, { cors: { origin: (origin, callback) => { - if (!origin || origin === 'https://sync.koalastuff.net' || origin.startsWith('chrome-extension://')) { + if (!origin || origin === 'https://sync.koalastuff.net' || origin.startsWith('chrome-extension://') || origin.startsWith('moz-extension://')) { callback(null, true); } else { + log('CORS', `Rejected origin: ${origin}`); callback(new Error('Not allowed by CORS')); } }, @@ -296,6 +297,7 @@ io.on('connection', (socket) => { const ip = socket._clientIp || socket.handshake.address; if (!checkAuthRate(ip, roomId)) { + log('AUTH', `Auth rate limit blocked ${ip} from room ${roomId.substring(0, 3)}***`); socket.emit(EVENTS.ERROR, { message: "Too many failed attempts. Try again later." }); return; } @@ -317,6 +319,7 @@ io.on('connection', (socket) => { roomCreationLocks.set(roomId, lockPromise); try { if (rooms.size >= MAX_ROOMS) { + log('ROOM', `Server at capacity: ${rooms.size}/${MAX_ROOMS} rooms — rejecting join`); socket.emit(EVENTS.ERROR, { message: "Server capacity reached" }); return; } @@ -343,11 +346,13 @@ io.on('connection', (socket) => { if (room.passwordHash) { if (!password || !(await bcrypt.compare(password, room.passwordHash))) { recordAuthFailure(ip, roomId); + log('AUTH', `Invalid password from ${ip} for room ${roomId.substring(0, 3)}***`); socket.emit(EVENTS.ERROR, { message: "Invalid password" }); return; } } if (room.peers.size >= MAX_PEERS_PER_ROOM) { + log('ROOM', `Room full (${room.peers.size}/${MAX_PEERS_PER_ROOM}): ${roomId.substring(0, 3)}***`); socket.emit(EVENTS.ERROR, { message: "Room full" }); return; }