From aae37bd0b3d7f73cdffd325bce7d964ad201cce8 Mon Sep 17 00:00:00 2001 From: TR Tajim Date: Sun, 11 Oct 2026 10:48:05 +0600 Subject: [PATCH 1/2] feat(chat): gate realtime websocket to authenticated users and disconnect on unmount --- resources/js/lib/echo.ts | 16 ++++++++ resources/js/pages/Chat/Index.vue | 61 ++++++++++++++++++++++++------- 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/resources/js/lib/echo.ts b/resources/js/lib/echo.ts index 6e135423..6f0e7411 100644 --- a/resources/js/lib/echo.ts +++ b/resources/js/lib/echo.ts @@ -44,3 +44,19 @@ export function getEcho(key?: string, cluster?: string): Echo<'pusher'> | null { return echoInstance; } + +export function disconnectEcho(): void { + if (echoInstance) { + try { + echoInstance.disconnect(); + } catch { + // Silently ignore disconnect errors + } + + echoInstance = null; + + if (typeof window !== 'undefined' && (window as any).Echo) { + delete (window as any).Echo; + } + } +} diff --git a/resources/js/pages/Chat/Index.vue b/resources/js/pages/Chat/Index.vue index 633df696..d026d93c 100644 --- a/resources/js/pages/Chat/Index.vue +++ b/resources/js/pages/Chat/Index.vue @@ -1,26 +1,26 @@ @@ -1631,6 +1653,19 @@ onUnmounted(() => {
+ +
+ +

+ রিয়েলটাইম লাইভ চ্যাট দেখতে ও মেসেজ পাঠাতে লগইন করুন +

+
+
Date: Sun, 11 Oct 2026 10:54:16 +0600 Subject: [PATCH 2/2] refactor(chat): remove redundant currentUser watcher --- resources/js/pages/Chat/Index.vue | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/resources/js/pages/Chat/Index.vue b/resources/js/pages/Chat/Index.vue index d026d93c..fc620d4d 100644 --- a/resources/js/pages/Chat/Index.vue +++ b/resources/js/pages/Chat/Index.vue @@ -1461,22 +1461,6 @@ const handleDocumentClick = () => { showMentionSuggestions.value = false; }; -watch(currentUser, (newUser, oldUser) => { - if (newUser && !oldUser) { - setupRealtime(); - setupPresenceChannel(); - } else if (!newUser && oldUser) { - const echo = getEcho(); - - if (echo) { - echo.leave(chatChannelName.value); - echo.leave(presenceChannelName.value); - } - - disconnectEcho(); - } -}); - onMounted(() => { initCooldown(); setupRealtime();