`SOURCE` object
Required core: `id`, `name`, `baseUrl`, `language`, `version`. Optional: `iconUrl`, `contentKind`.
Contract for catalog providers
Sources expose discovery lists and item metadata, then return children and mirrors for playback.
Required core: `id`, `name`, `baseUrl`, `language`, `version`. Optional: `iconUrl`, `contentKind`.
Implement `fetchPopular(page)`, `fetchLatest(page)` and `fetchSearch(query, page, filters)` when available.
`fetchItemDetails(id)` -> `fetchChildren(itemId)` -> `fetchVideoList(itemId, childId)`.