Files
OwnCord/Client
jevb 0983c34d59 fix: client code review — 27 fixes across 17 files
Dual-model review (Claude + Codex) found 1 CRITICAL, 9 HIGH,
10 MEDIUM, 7 LOW issues. All addressed:

Security:
- SSRF protection: block link previews to private/internal IPs
- Context-menu dismiss listener leak on item click

Type safety:
- Replace `as any` casts with LocalVideoTrack/LocalTrack types
- loadPref runtime typeof validation against corrupted localStorage
- handleLocalTrackPublished typed with LocalTrackPublication

Memory leaks / listener cleanup:
- MessageInput.destroy() closes open pickers before aborting
- ChannelSidebar/VoiceChannel dismiss setTimeout race guard
- Context-menu item click aborts dismiss AbortController

Async correctness:
- attemptAutoReconnect takes AbortSignal; leaveVoice() aborts it
- OG dedup returns shared in-flight Promise (not empty placeholder)
- Clipboard copy handles rejection with user feedback

State management:
- setMembers() clears typing timers on reconnect
- prependMessages() sets hasMore=true when trimming to cap
- setVoiceStates() preserves currentChannelId when user absent

Code quality:
- VideoGrid: createIcon() replaces innerHTML SVG strings
- VideoGrid: single setUserVolume on unmute (no volume spike)
- api.ts: shared doFetch() eliminates request/adminRequest duplication
- livekitSession: __owncord.lkDebug namespace replaces __lkDebug
- console.error replaced with structured logger
- YouTube oembed uses tauriFetch for consistency
2026-03-27 08:05:32 +01:00
..