From 13ffdbca90c585a479de39ba156b0f36cc6a4efc Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Thu, 26 Feb 2026 17:22:29 +0700 Subject: [PATCH] fix(plugins/developer-kit): proper error message for websocket disconnects --- src/plugins/start/developer-kit/devtools.ts | 24 ++++++++----------- .../start/developer-kit/react-devtools.ts | 24 ++++++++----------- tsconfig.json | 2 +- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/plugins/start/developer-kit/devtools.ts b/src/plugins/start/developer-kit/devtools.ts index db6bf31..dd18da3 100644 --- a/src/plugins/start/developer-kit/devtools.ts +++ b/src/plugins/start/developer-kit/devtools.ts @@ -7,7 +7,6 @@ import { getBridgeInfo } from '@revenge-mod/modules/native' import { instead } from '@revenge-mod/patcher' import { noop } from '@revenge-mod/utils/callback' import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord' -import { getErrorStack } from '@revenge-mod/utils/error' import { useReRender } from '@revenge-mod/utils/react' import { useEffect } from 'react' import { api } from '.' @@ -96,23 +95,20 @@ export function connect() { events.emit('connect') }) - ws.addEventListener('close', () => { + ws.addEventListener('close', e_ => { cleanup() events.emit('disconnect') - }) - ws.addEventListener('error', e => { - cleanup() - events.emit('errored', e) + const e = e_ as CloseEvent + if (!e.wasClean) { + api.logger.error('DevTools error:', e.reason) - const err = (e as { message: string }).message ?? getErrorStack(e) - api.logger.error('DevTools error:', err) - - ToastActionCreators.open({ - key: 'DEVTOOLS_ERROR', - IconComponent: CircleErrorIcon, - content: err, - }) + ToastActionCreators.open({ + key: 'DEVTOOLS_ERROR', + IconComponent: CircleErrorIcon, + content: e.reason, + }) + } }) } diff --git a/src/plugins/start/developer-kit/react-devtools.ts b/src/plugins/start/developer-kit/react-devtools.ts index ff3585a..dc0ae97 100644 --- a/src/plugins/start/developer-kit/react-devtools.ts +++ b/src/plugins/start/developer-kit/react-devtools.ts @@ -1,7 +1,6 @@ import { ToastActionCreators } from '@revenge-mod/discord/actions' import { TypedEventEmitter } from '@revenge-mod/discord/common/utils' import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord' -import { getErrorStack } from '@revenge-mod/utils/error' import { useReRender } from '@revenge-mod/utils/react' import { useEffect } from 'react' import { api } from '.' @@ -40,23 +39,20 @@ export function connect() { events.emit('connect') }) - ws.addEventListener('close', () => { + ws.addEventListener('close', e_ => { cleanup() events.emit('disconnect') - }) - ws.addEventListener('error', e => { - cleanup() - events.emit('errored', e) + const e = e_ as CloseEvent + if (!e.wasClean) { + api.logger.error('React DevTools error:', e.reason) - const err = (e as { message: string }).message ?? getErrorStack(e) - api.logger.error('React DevTools error:', err) - - ToastActionCreators.open({ - key: 'REACT_DEVTOOLS_ERROR', - IconComponent: CircleErrorIcon, - content: err, - }) + ToastActionCreators.open({ + key: 'REACT_DEVTOOLS_ERROR', + IconComponent: CircleErrorIcon, + content: e.reason, + }) + } }) __REACT_DEVTOOLS__!.exports.connectToDevTools({ diff --git a/tsconfig.json b/tsconfig.json index c3633f2..4b761ab 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "lib": ["ESNext"], + "lib": ["ESNext", "DOM"], "module": "ESNext", "target": "ES2020", "moduleResolution": "bundler",