# Playback Webview Debugging

> Use when playback, auth recovery, queue sync, or hidden WebView state diverges from native Swift state and you need to debug the DRM playback WebView, bridge events, or cookie/auth behavior.

- Skill: `sozercan/playback-webview-debugging` (Agent Skill)
- Install (CLI): `npx skillmds@latest add sozercan/playback-webview-debugging`
- Raw SKILL.md: https://api.skillmd.com/api/skills/sozercan/playback-webview-debugging/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: sozercan (https://skillmd.com/u/sozercan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/sozercan/playback-webview-debugging

---


# Playback WebView Debugging

Use this skill when playback, auth recovery, queue sync, or hidden WebView state diverges from the native Swift state.

## When To Use It

- Playback starts, stops, or advances unexpectedly
- Auth looks stale and API calls return 401/403
- WebView metadata drifts from the native queue
- You need to inspect JavaScript bridge events or DOM/player state

## Runtime Workflow

1. Reproduce with the packaged app or `Scripts/compile_and_run.sh`.
2. Use Xcode Console filters to watch runtime logs:
   `subsystem:Kaset category:player`
   `subsystem:Kaset category:auth`
3. In debug builds, verify `webView.isInspectable = true`, then inspect the player WebView with Safari Web Inspector.
4. To simulate auth expiry, delete `__Secure-3PAPISID` via Safari Web Inspector storage tools and trigger an authenticated API call.
5. If auth cookies or headers look suspicious, run `swift run api-explorer auth` and compare against the exported cookie state.

## Landmarks

- `docs/testing.md`
- `docs/playback.md`
- `Sources/Kaset/Views/MiniPlayerWebView.swift`
- `Sources/Kaset/Views/SingletonPlayerWebView+ObserverScript.swift`
- `Sources/Kaset/Views/SingletonPlayerWebView+NavigationState.swift`
- `Sources/Kaset/Views/SingletonPlayerWebView+QueueInjection.swift`
- `Sources/Kaset/Services/Player/PlayerService.swift`
- `Sources/Kaset/Services/Player/PlayerService+WebPlaybackIdentity.swift`
- `Sources/Kaset/Services/Player/PlayerService+WebQueueSync.swift`
- `Sources/Kaset/Services/Player/PlayerService+QueueNavigationRecovery.swift`
- `Sources/Kaset/Services/WebKit/WebKitManager.swift`

