fix: resolve critical bugs and improve admin panel reliability
- Fix missing await in pets API route causing empty responses - Fix updateSetting to use upsert pattern instead of update-only - Create missing /api/admin/sounds/upload route (upload was broken) - Wire bulk delete actions in catalog table - Replace native confirm() with useConfirmDialog() across rooms and clone pages - Add error logging to silent catch blocks in radio actions and audit route - Add graceful degradation to devops health endpoint - Add cache eviction to clone icon route to prevent memory leak - Internationalize hardcoded Italian strings to English - Remove placeholder created_at fields from prefix API responses - Remove dead code and fix type errors in translations and import pages - Standardize PERMS import path in analytics export route
This commit is contained in:
1 parent
6f53ca514d
commit
1b817fe434
19 files changed
+255
-89
No files matched your search
@@ -7,6 +7,15 @@ import { getSource } from "@/lib/services/clone-sources";
|
||||
// In-process cache of extracted icons, keyed by source+classname.
|
||||
// null = known-missing (don't refetch the bundle every render).
|
||||
const iconCache = new Map<string, Buffer | null>();
|
||||
const MAX_ICON_CACHE_SIZE = 500;
|
||||
|
||||
function pruneIconCache() {
|
||||
while (iconCache.size > MAX_ICON_CACHE_SIZE) {
|
||||
const oldest = iconCache.keys().next().value;
|
||||
if (oldest === undefined) break;
|
||||
iconCache.delete(oldest);
|
||||
}
|
||||
}
|
||||
|
||||
// GET ?source=<id>&classname=<cn>
|
||||
// Fetches the source's .nitro bundle and returns the embedded furni icon as a
|
||||
@@ -39,6 +48,7 @@ export const GET = withAdmin(
|
||||
}
|
||||
icon = extractFurniIconPng(Buffer.from(await res.arrayBuffer()));
|
||||
iconCache.set(cacheKey, icon);
|
||||
pruneIconCache();
|
||||
} catch {
|
||||
iconCache.set(cacheKey, null);
|
||||
return apiError("Failed to fetch bundle", 502);
|
||||
|
||||
Reference in new issue
Block a user