From a5290d314f472ee384a316ebfcbf86dd909690db Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Sun, 26 Jul 2026 00:56:15 +0700 Subject: [PATCH] fix(lib/plugins): forget initial persisted states when un/reinstalling a plugin --- lib/plugins/src/_internal/external-plugins.ts | 7 +++++++ lib/plugins/src/_internal/index.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/lib/plugins/src/_internal/external-plugins.ts b/lib/plugins/src/_internal/external-plugins.ts index b9a34c7..21a045a 100644 --- a/lib/plugins/src/_internal/external-plugins.ts +++ b/lib/plugins/src/_internal/external-plugins.ts @@ -7,6 +7,7 @@ import { getErrorStack } from '@revenge-mod/utils/error' import { pUnscopedApi } from '../apis' import { disablePlugin, + forgetInitialPluginState, getInternalPluginMeta, handlePluginError, InternalPluginFlags, @@ -67,6 +68,9 @@ export function registerExternalPlugins() { const { plugin } = result try { + // Drop the stale boot snapshot entry (from before a mid-session uninstall) + // so the fresh install registers disabled + forgetInitialPluginState(plugin.manifest.id) registerExternalPlugin(plugin) } catch (e) { pEmitter.emit('install', { error: toPluginError(e) }) @@ -189,6 +193,9 @@ export async function uninstallExternalPlugin(plugin: AnyPlugin) { await callNativeMethod('revenge.plugins.uninstall', [plugin.manifest.id]) + // Native cleared its persisted flags, drop our boot snapshot entry too + forgetInitialPluginState(plugin.manifest.id) + pList.delete(plugin.manifest.id) pEmitter.emit('unregister', plugin) } diff --git a/lib/plugins/src/_internal/index.ts b/lib/plugins/src/_internal/index.ts index de36a7c..ecaf4a4 100644 --- a/lib/plugins/src/_internal/index.ts +++ b/lib/plugins/src/_internal/index.ts @@ -238,6 +238,10 @@ const { states: InitialPersistedStates }: PersistedPluginStates = states: {}, } +export function forgetInitialPluginState(id: PluginManifest['id']) { + delete InitialPersistedStates[id] +} + // Native is the source of truth, we're expecting dispatches from native to sync states registerJSMethod('revenge.plugins.states.update', (id, state) => { applyPluginFlags(