From d4beed100a22678c5955d4fcbc5c0ce9a1dfe8f3 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 00:33:27 +0000 Subject: [PATCH] Remove legacy moderation overrides support Removed the legacy support for version 1 moderation overrides in `js/state/cache.js`. This includes removing the `LEGACY_MODERATION_OVERRIDE_STORAGE_KEY`, the migration logic in `loadModerationOverridesFromStorage`, and the cleanup logic in `persistModerationOverridesToStorage`. Updated `tests/state/cache.test.mjs` to include tests verifying that legacy overrides are ignored and not migrated. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- js/state/cache.js | 21 +-------------- tests/state/cache.test.mjs | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/js/state/cache.js b/js/state/cache.js index 03c51e7e..b399633c 100644 --- a/js/state/cache.js +++ b/js/state/cache.js @@ -30,7 +30,6 @@ const URL_PROBE_TIMEOUT_RETRY_MS = 15 * 1000; // 15 seconds const MODERATION_OVERRIDE_STORAGE_KEY = "bitvid:moderationOverrides:v2"; -const LEGACY_MODERATION_OVERRIDE_STORAGE_KEY = "bitvid:moderationOverrides:v1"; const MODERATION_OVERRIDE_STORAGE_VERSION = 2; const MODERATION_SETTINGS_STORAGE_KEY = "bitvid:moderationSettings:v1"; const MODERATION_SETTINGS_STORAGE_VERSION = 3; @@ -1530,9 +1529,7 @@ export function loadModerationOverridesFromStorage() { return; } - const raw = - localStorage.getItem(MODERATION_OVERRIDE_STORAGE_KEY) || - localStorage.getItem(LEGACY_MODERATION_OVERRIDE_STORAGE_KEY); + const raw = localStorage.getItem(MODERATION_OVERRIDE_STORAGE_KEY); if (!raw) { return; } @@ -1553,20 +1550,6 @@ export function loadModerationOverridesFromStorage() { } else { shouldRewrite = true; } - } else if (payload.version === 1) { - const legacyEntries = - payload.entries && typeof payload.entries === "object" - ? payload.entries - : {}; - Object.entries(legacyEntries).forEach(([eventId, entry]) => { - entries.push({ - eventId, - authorPubkey: "", - showAnyway: entry?.showAnyway === true, - updatedAt: entry?.updatedAt, - }); - }); - shouldRewrite = true; } else { return; } @@ -1633,7 +1616,6 @@ export function persistModerationOverridesToStorage() { if (entries.length === 0) { try { localStorage.removeItem(MODERATION_OVERRIDE_STORAGE_KEY); - localStorage.removeItem(LEGACY_MODERATION_OVERRIDE_STORAGE_KEY); } catch (error) { userLogger.warn( "[cache.persistModerationOverridesToStorage] Failed to clear overrides:", @@ -1654,7 +1636,6 @@ export function persistModerationOverridesToStorage() { MODERATION_OVERRIDE_STORAGE_KEY, JSON.stringify(payload), ); - localStorage.removeItem(LEGACY_MODERATION_OVERRIDE_STORAGE_KEY); } catch (error) { userLogger.warn( "[cache.persistModerationOverridesToStorage] Failed to persist overrides:", diff --git a/tests/state/cache.test.mjs b/tests/state/cache.test.mjs index c21a6684..78f7d3ea 100644 --- a/tests/state/cache.test.mjs +++ b/tests/state/cache.test.mjs @@ -12,6 +12,9 @@ import { getModerationSettings, setModerationSettings, urlHealthConstants, + loadModerationOverridesFromStorage, + getModerationOverridesList, + clearModerationOverride, } from "../../js/state/cache.js"; // Ensure localStorage is mocked @@ -102,4 +105,53 @@ test("js/state/cache.js", async (t) => { assert.strictEqual(updated.blurThreshold, 1); assert.strictEqual(updated.autoplayBlockThreshold, 2); }); + + await t.test("Legacy Moderation Overrides Support", async (t) => { + // Reset internal state by clearing overrides + const current = getModerationOverridesList(); + for (const entry of current) { + clearModerationOverride(entry, { persist: false }); + } + + const VALID_HEX_ID_1 = "0000000000000000000000000000000000000000000000000000000000000001"; + const VALID_HEX_ID_2 = "0000000000000000000000000000000000000000000000000000000000000002"; + + await t.test("ignores legacy v1 overrides", () => { + const legacyData = { + version: 1, + entries: { + [VALID_HEX_ID_1]: { showAnyway: true, updatedAt: 1234567890 }, + } + }; + localStorage.setItem("bitvid:moderationOverrides:v1", JSON.stringify(legacyData)); + + loadModerationOverridesFromStorage(); + + const overrides = getModerationOverridesList(); + assert.strictEqual(overrides.length, 0, "Should not load legacy overrides"); + + // Check if it migrated to v2 key + const v2Data = localStorage.getItem("bitvid:moderationOverrides:v2"); + assert.strictEqual(v2Data, null, "Should not migrate/persist v2 data"); + + // Check if legacy key is NOT removed + assert.ok(localStorage.getItem("bitvid:moderationOverrides:v1"), "Should not remove legacy key"); + }); + + await t.test("loads v2 overrides", () => { + const v2Data = { + version: 2, + entries: [ + { eventId: VALID_HEX_ID_2, authorPubkey: "", showAnyway: true, updatedAt: 1234567890 } + ] + }; + localStorage.setItem("bitvid:moderationOverrides:v2", JSON.stringify(v2Data)); + + loadModerationOverridesFromStorage(); + + const overrides = getModerationOverridesList(); + assert.strictEqual(overrides.length, 1); + assert.strictEqual(overrides[0].eventId, VALID_HEX_ID_2); + }); + }); });