* Use GitHub `release` env for npm publish
As this is used for npm OIDC. Also stops passing the token given OIDC doesn't need it
* Do not write token to config
* Move unknown codecs handling to playlist-loader
* Add `stats.parsing.end` timing prior to emitting MANIFEST_PARSED on MANIFEST_LOADED (or MANIFEST_PARSING_ERROR)
Resolves#7518
* Add mvp loading and parsing test with `stats.parsing.end` assertion (#7518)
* Fix incorrect LEVEL_LOADED `level` index when lower level removed while loading
* Wait to retry fragment request when `navigator.onLine` is false
(uses polling for Firefox where "online" event never fires)
Fixes#7471
* Only treat no-alternate segment request failures as gaps in live playlists (#7464, #7410)
* Retry once per seeking out of current fragment range (even when offline)
* Do not exhaust retries in tick loop while seeking
* Only schedule immediate tick on seeking when buffer is empty and state is idle (#7472)
* Handle EME key status errors before appending segments
Fixes#7413 (playback/switching fails on KEY_SYSTEM_STATUS_INTERNAL_ERROR 'internal-error' key status)
* Fix handling of one-to-many KEY URI to Key IDs
#7413
* Remove levels with "internal-error" key status errors and optimize key-bytes comparison
Add "FIXME" comments for future MediaKeySessionContext multi-key handling improvements
* Do not throw fatal keyLoadingPromise error when context changes on KEY_LOADING
reproducible with `hls.once(Hls.Events.KEY_LOADING, () => hls.removeLevel(hls.loadLevel))`
* Fix interstitial asset events not firing when attaching primary early for playout-limit change
* Add log message helper for timeline position updates
* Force schedule update on asset or interstitial error (in case playout duration is not changed by error but schedule update is needed)
* Handle seeking back in interstitial with faulty assets
* Interstitials improvements
- Fix DateRange mapping in Live with fragment reference sliding (use `frag.setStart` over `frag.start =` to update tagAnchor ref)
- Skip gaps between interstitial assets
- Make MEDIA_ATTACHED async on transferMedia (this.media undefined in id3-track-controller onMediaAttached otherwise)
- Add metadata cue timing to assets for better event timing
- Removed unnecessary conditionals in changed files (added looser typing in cases where object[index] result may be undefined)
Fixes#7426
* Fix `fragment.byteLength` with no byte range
* Load next asset m3u8 on asset-list loaded (w/o append-in-place)
* Prevent schedule from advancing past interstitials loading asset-lists (with no duration)
* Handle append-in-line interstitials with shorter that playout-limit fill
* Advance asset player buffering on asset error prior to starting interstitial
* Update asset duration on first playlist update
* Workaround asset buffered to end edge cases
* Do not flush when QuotaExceededError is received by asset players while playing primary
* Handle seeking to unplayable range caused by truncated interstitial
* Fix resetting of initPTS when muxed "audiovideo" sample start times are inconsistent
Fixes#7431
* Continue loading parts even with gaps and warn when frag selects fallback likely due to a gap