Refactor: remove legacy compatibility systems

- Removed `WATCH_HISTORY_LEGACY_KIND` (30078) support from watch history fetch and config.
- Removed `WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS` from config.
- Removed `LEGACY_EVENTS_STORAGE_KEY` (bitvidEvents) migration logic from client.
- Removed `loadLegacyAdminState` and `LEGACY_STORAGE_KEYS` from admin list store.
- Updated tests to remove references to legacy kinds.
This commit is contained in:
google-labs-jules[bot] committed 2026-01-06 19:48:55 +00:00
1 parent cf4dc211ab
commit 1b577d3326
6 files changed
+1 -135

No files matched your search

-9
View File
@@ -302,7 +302,6 @@ export const THEME_ACCENT_OVERRIDES = Object.freeze({
* accept the chosen kind.
*/
export const WATCH_HISTORY_KIND = 30003;
export const WATCH_HISTORY_LEGACY_KIND = 30078;
/**
* Identifier applied to the watch-history list when storing it on relays.
@@ -314,14 +313,6 @@ export const WATCH_HISTORY_LEGACY_KIND = 30078;
*/
export const WATCH_HISTORY_LIST_IDENTIFIER = "watch-history";
/**
* Legacy identifiers that bitvid clients should continue honoring when
* fetching historical watch-history snapshots.
*/
export const WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS = Object.freeze([
"watch-history:v2:index",
]);
/**
* Whether to enable the V2 encrypted watch-history service.
*
-90
View File
@@ -18,14 +18,6 @@ import {
} from "./nostrEventSchemas.js";
import { publishEventToRelay } from "./nostrPublish.js";
const LEGACY_STORAGE_KEYS = {
editors: "bitvid_admin_editors",
whitelist: "bitvid_admin_whitelist",
whitelistLegacy: "bitvid_whitelist",
blacklist: "bitvid_admin_blacklist",
blacklistLegacy: "bitvid_blacklist",
};
const ADMIN_STATE_CACHE_VERSION = 1;
const ADMIN_STATE_CACHE_KEY = `bitvid_admin_state_v${ADMIN_STATE_CACHE_VERSION}`;
@@ -240,42 +232,6 @@ function hasAnyEntries(state = {}) {
);
}
function readJsonListFromStorage(key) {
if (typeof localStorage === "undefined") {
return null;
}
try {
const raw = localStorage.getItem(key);
if (raw === null) {
return null;
}
const parsed = JSON.parse(raw);
return Array.isArray(parsed) ? parsed : null;
} catch (error) {
devLogger.warn(
`[adminListStore] Failed to parse legacy list for ${key}:`,
error,
);
return null;
}
}
function loadLegacyAdminState() {
const editors = readJsonListFromStorage(LEGACY_STORAGE_KEYS.editors) || [];
const whitelist =
readJsonListFromStorage(LEGACY_STORAGE_KEYS.whitelist) ||
readJsonListFromStorage(LEGACY_STORAGE_KEYS.whitelistLegacy) ||
[];
const blacklist =
readJsonListFromStorage(LEGACY_STORAGE_KEYS.blacklist) ||
readJsonListFromStorage(LEGACY_STORAGE_KEYS.blacklistLegacy) ||
[];
const sanitized = sanitizeAdminState({ editors, whitelist, blacklist });
return hasAnyEntries(sanitized) ? sanitized : null;
}
export const readCachedAdminState = () => {
if (typeof localStorage === "undefined") {
return null;
@@ -324,40 +280,6 @@ export const writeCachedAdminState = (state) => {
}
};
function clearLegacyStorageFor(listKey) {
if (typeof localStorage === "undefined") {
return;
}
const keyGroups = {
editors: [LEGACY_STORAGE_KEYS.editors],
whitelist: [
LEGACY_STORAGE_KEYS.whitelist,
LEGACY_STORAGE_KEYS.whitelistLegacy,
],
blacklist: [
LEGACY_STORAGE_KEYS.blacklist,
LEGACY_STORAGE_KEYS.blacklistLegacy,
],
};
const keys = keyGroups[listKey];
if (!Array.isArray(keys)) {
return;
}
for (const key of keys) {
try {
localStorage.removeItem(key);
} catch (error) {
devLogger.warn(
`[adminListStore] Failed to clear legacy storage for ${key}:`,
error,
);
}
}
}
function ensureNostrReady() {
const nostrClient = requireNostrClient();
@@ -1010,8 +932,6 @@ async function persistNostrState(actorNpub, updates = {}) {
loggingError,
);
});
clearLegacyStorageFor(listKey);
}
}
@@ -1082,16 +1002,6 @@ export async function loadAdminState() {
}
}
if (!hasAnyEntries(mergedState)) {
const legacy = loadLegacyAdminState();
if (legacy && isDevMode) {
userLogger.warn(
"[adminListStore] Ignoring legacy admin lists because remote mode is enforced. Publish them to Nostr to retain access.",
legacy
);
}
}
return mergedState || sanitizeAdminState();
}
-4
View File
@@ -28,9 +28,7 @@ import {
DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLD,
DEFAULT_TRUSTED_SPAM_HIDE_THRESHOLD,
WATCH_HISTORY_KIND,
WATCH_HISTORY_LEGACY_KIND,
WATCH_HISTORY_LIST_IDENTIFIER,
WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS,
WATCH_HISTORY_MAX_ITEMS,
WATCH_HISTORY_BATCH_RESOLVE,
WATCH_HISTORY_BATCH_PAGE_SIZE,
@@ -119,9 +117,7 @@ export { ADMIN_WHITELIST_MODE_STORAGE_KEY };
// -----------------------------------------------------------------------------
export { WATCH_HISTORY_KIND };
export { WATCH_HISTORY_LEGACY_KIND };
export { WATCH_HISTORY_LIST_IDENTIFIER };
export { WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS };
export { WATCH_HISTORY_MAX_ITEMS };
export { WATCH_HISTORY_BATCH_RESOLVE };
export { WATCH_HISTORY_BATCH_PAGE_SIZE };
-21
View File
@@ -298,7 +298,6 @@ function shouldRequestExtensionPermissions(signer) {
}
const EVENTS_CACHE_STORAGE_KEY = "bitvid:eventsCache:v1";
const LEGACY_EVENTS_STORAGE_KEY = "bitvidEvents";
const EVENTS_CACHE_TTL_MS = 10 * 60 * 1000; // 10 minutes
const EVENTS_CACHE_DB_NAME = "bitvid-events-cache";
const EVENTS_CACHE_DB_VERSION = 1;
@@ -3333,25 +3332,6 @@ export class NostrClient {
let payload = parsePayload(localStorage.getItem(EVENTS_CACHE_STORAGE_KEY));
if (!payload) {
const legacyRaw = localStorage.getItem(LEGACY_EVENTS_STORAGE_KEY);
const legacyParsed = parsePayload(legacyRaw);
if (legacyParsed) {
payload = {
version: 1,
savedAt: now,
events: legacyParsed,
};
}
if (legacyRaw) {
try {
localStorage.removeItem(LEGACY_EVENTS_STORAGE_KEY);
} catch (err) {
devLogger.warn("[nostr] Failed to remove legacy cache:", err);
}
}
}
const applied = this.applyCachedPayload(payload, "localStorage");
if (!applied && payload) {
@@ -5570,7 +5550,6 @@ export class NostrClient {
EVENTS_CACHE_STORAGE_KEY,
JSON.stringify(serializedPayload),
);
localStorage.removeItem(LEGACY_EVENTS_STORAGE_KEY);
} catch (err) {
devLogger.warn("[nostr] Failed to persist events cache:", err);
}
-9
View File
@@ -1,8 +1,6 @@
import {
WATCH_HISTORY_KIND,
WATCH_HISTORY_LEGACY_KIND,
WATCH_HISTORY_LIST_IDENTIFIER,
WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS,
WATCH_HISTORY_MAX_ITEMS,
WATCH_HISTORY_BATCH_RESOLVE,
WATCH_HISTORY_BATCH_PAGE_SIZE,
@@ -1885,13 +1883,6 @@ class WatchHistoryManager {
let pointerEvents = [];
try {
const kinds = [WATCH_HISTORY_KIND];
if (
Number.isFinite(WATCH_HISTORY_LEGACY_KIND) &&
WATCH_HISTORY_LEGACY_KIND > 0 &&
WATCH_HISTORY_LEGACY_KIND !== WATCH_HISTORY_KIND
) {
kinds.push(WATCH_HISTORY_LEGACY_KIND);
}
const filters = [
{
kinds,
+1 -2
View File
@@ -11,7 +11,6 @@ const {
WATCH_HISTORY_BATCH_PAGE_SIZE,
WATCH_HISTORY_LIST_IDENTIFIER,
WATCH_HISTORY_KIND,
WATCH_HISTORY_LEGACY_KIND,
} =
await import("../js/config.js");
const {
@@ -2564,7 +2563,7 @@ async function testWatchHistoryFeedHydration() {
results.push(videoEvent);
}
if (filter.kinds && (filter.kinds.includes(WATCH_HISTORY_KIND) || filter.kinds.includes(WATCH_HISTORY_LEGACY_KIND))) {
if (filter.kinds && (filter.kinds.includes(WATCH_HISTORY_KIND))) {
results.push({
id: "history-event-id",
kind: WATCH_HISTORY_KIND,