feat: launch readiness — PWA, API hardening, memory leak fixes, sticker removal

- Add PWA infrastructure: vite-plugin-pwa, manifest, service worker,
  SW update prompt component, placeholder icons, Apple meta tags
- Harden API client: 401 auto-logout, AbortController timeouts
  (30s standard, 120s uploads), onUnauthorized callback
- Fix memory leaks: clear voice user status on leave, clean up all
  Maps (channelToSpaceMap, permissions, etc.) on removeSpace
- Upgrade error boundary to Aether Drift design with Try Again button,
  collapsible stack trace, and componentDidCatch logging
- Configure desktop icon paths in electron-builder.yml
- Remove sticker feature (server routes, schema, types, UI components)
- Fix Docker build: use **/node_modules in .dockerignore to prevent
  COPY from clobbering pnpm-installed workspace dependencies
- Add vite-env.d.ts declarations for noise suppressor wasm imports
- Exclude test files from tsc build via tsconfig
This commit is contained in:
Jannis Braun
2026-03-15 15:41:22 +01:00
parent b08f40feb7
commit 4d230711fc
36 changed files with 2740 additions and 1283 deletions
+1 -14
View File
@@ -333,6 +333,7 @@ function handleEvent(origin: string, event: ServerEvent): void {
addVoiceUser(event.channelId, event.userId);
} else {
removeVoiceUser(event.channelId, event.userId);
clearVoiceUserStatus(event.userId);
}
break;
@@ -755,20 +756,6 @@ function handleEvent(origin: string, event: ServerEvent): void {
break;
}
// ─── Sticker events (all origins) ────────────────────────────────────
case 'sticker_pack_created':
case 'sticker_pack_updated':
case 'sticker_pack_deleted':
case 'sticker_created':
case 'sticker_deleted': {
// Invalidate the sticker picker cache so next open fetches fresh data
import('../components/chat/StickerPicker').then(({ invalidateStickerCache }) => {
invalidateStickerCache();
});
break;
}
case 'pong':
break;