@dwbn/capacitor-plugin-playlist 8.4.3 → 8.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +3 -3
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/org/dwbn/plugins/playlist/AudioDrm.java +1 -1
  4. package/android/src/main/java/org/dwbn/plugins/playlist/AudioDrmSession.java +1 -1
  5. package/android/src/main/java/org/dwbn/plugins/playlist/AudioMediaItemFactory.java +1 -1
  6. package/android/src/main/java/org/dwbn/plugins/playlist/AudioOfflineProvider.java +1 -1
  7. package/android/src/main/java/org/dwbn/plugins/playlist/PlaylistPlugin.kt +7 -3
  8. package/android/src/main/java/org/dwbn/plugins/playlist/RmxAudioPlayer.java +15 -2
  9. package/android/src/main/java/org/dwbn/plugins/playlist/data/AudioTrack.kt +1 -1
  10. package/android/src/main/java/org/dwbn/plugins/playlist/manager/PlaylistManager.kt +1 -1
  11. package/android/src/main/java/org/dwbn/plugins/playlist/offline/OfflineDownloads.kt +2 -2
  12. package/android/src/main/java/org/dwbn/plugins/playlist/offline/OfflineStorage.kt +1 -1
  13. package/android/src/main/java/org/dwbn/plugins/playlist/playlist/AudioPlaylistHandler.java +2 -4
  14. package/android/src/main/java/org/dwbn/plugins/playlist/service/HandoffForwardingPlayer.kt +1 -1
  15. package/dist/docs.json +3 -3
  16. package/dist/esm/interfaces.d.ts +3 -3
  17. package/dist/esm/web.d.ts +1 -1
  18. package/dist/esm/web.js +2 -2
  19. package/dist/esm/web.js.map +1 -1
  20. package/dist/plugin.cjs.js +2 -2
  21. package/dist/plugin.cjs.js.map +1 -1
  22. package/dist/plugin.js +2 -2
  23. package/dist/plugin.js.map +1 -1
  24. package/ios/Sources/PlaylistPlugin/AudioDrm.swift +5 -5
  25. package/ios/Sources/PlaylistPlugin/AudioOffline.swift +2 -2
  26. package/ios/Sources/PlaylistPlugin/AudioOfflineProvider.swift +1 -1
  27. package/ios/Sources/PlaylistPlugin/AudioTrack.swift +3 -3
  28. package/ios/Sources/PlaylistPlugin/Plugin.swift +3 -3
  29. package/ios/Sources/PlaylistPlugin/RmxAudioPlayer.swift +2 -2
  30. package/ios/Sources/PlaylistPlugin/offline/AvAssetOfflineEngine.swift +1 -1
  31. package/ios/Sources/PlaylistPlugin/offline/OfflineDownloads.swift +3 -3
  32. package/ios/Sources/PlaylistPlugin/offline/OfflineMetaStore.swift +1 -1
  33. package/ios/Tests/PlaylistPluginTests/AudioDrmTests.swift +4 -5
  34. package/ios/Tests/PlaylistPluginTests/AudioOfflineTests.swift +1 -1
  35. package/ios/Tests/PlaylistPluginTests/OfflineDownloadsTests.swift +1 -1
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * `assetUrl` for a queued track whose stream is not resolved yet (a protected item before its\n * playback session opens). Android keeps it idle in the timeline and never loads it; the host\n * swaps in the real URL with `replaceItem` when the track becomes current.\n */\nexport const QUEUED_TRACK_URL = 'https://localhost/queued';\n/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n /**\n * No active source to play. You are unlikely to see this.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n /**\n * Playback was aborted, typically because the source was torn down mid-load.\n * Web only, from `MediaError.MEDIA_ERR_ABORTED`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n /**\n * The source is fine but could not be reached or read - a dropped connection,\n * a timeout, a bad HTTP status. **This is the retry-able error**: the same URL\n * may well succeed once connectivity returns.\n *\n * Android: media3's `ERROR_CODE_IO_*` network codes. iOS: an `NSError` in\n * `NSURLErrorDomain` / `NSPOSIXErrorDomain`. Web: `MediaError.MEDIA_ERR_NETWORK`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n /**\n * The media was reached but could not be decoded. Not retry-able.\n *\n * Android: media3's decoder error codes. iOS: `AVFoundationErrorDomain` decode\n * and parse failures. Web: `MediaError.MEDIA_ERR_DECODE`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n /**\n * The source itself is unusable - missing, the wrong container, or a body that\n * does not parse as what it claims to be. Not retry-able; skip the track.\n *\n * Also the fallback when a platform reports a failure that does not classify.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * Playback has stalled - the player is still trying, but position is not advancing.\n * Raised on all three platforms: from each platform's own stall signal where it fires,\n * and otherwise from a position-freeze poll gated by `AudioPlayerOptions.stallTimeoutMs`.\n * Emitted once per stall episode; the track's reported `status` reads `\"stalled\"` until\n * position advances again.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n *\n * Suppressed while the WebView is backgrounded, and (Android/iOS) while the track is\n * stalled - so a frozen position is never reported as if playback were healthy.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * An item has been moved within the playlist.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_MOVED\"] = 112] = \"RMXSTATUS_ITEM_MOVED\";\n /**\n * An item in the playlist has been replaced in place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REPLACED\"] = 113] = \"RMXSTATUS_ITEM_REPLACED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 112: 'Track Moved',\n 113: 'Track Replaced',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n let d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n const r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true, stallTimeoutMs: 10000 };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist, or at a specific index.\n */\n this.addItem = (trackItem, index) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem, index });\n };\n /**\n * Move a track within the playlist without disrupting playback of the current track.\n */\n this.moveItem = (from, to) => {\n return Playlist.moveItem({ from, to });\n };\n /**\n * Replace a track in the playlist (e.g. swap stream URL for a local file URL).\n * Unlike addItem, the replacement is NOT run through validateTrack: an omitted\n * `replacement.trackId` intentionally signals \"keep the existing id\", and\n * validateTrack would otherwise auto-assign a new random UUID and defeat that.\n */\n this.replaceItem = (replacement, spec) => {\n if (!replacement) {\n throw new Error('Provided track is null or not an audio track');\n }\n if (spec.index === undefined && !spec.trackId) {\n throw new Error('Track replacement spec is invalid');\n }\n return Playlist.replaceItem({\n item: replacement,\n index: spec.index,\n id: spec.trackId,\n });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && removeItem.trackIndex === undefined) {\n throw new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({\n id: removeItem.trackId,\n index: removeItem.trackIndex\n });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({\n items: (items || []).map((item) => ({\n id: item === null || item === void 0 ? void 0 : item.trackId,\n index: item === null || item === void 0 ? void 0 : item.trackIndex\n }))\n });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioErrorType, RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nconst HLS_MIME_TYPES = ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/x-mpegurl'];\n/**\n * Whether the track should be played through hls.js. An `.m3u8` path is the usual signal;\n * an explicit `mimeType` covers HLS served from a URL with no extension (issue #144).\n */\nfunction isHlsSource(item) {\n var _a;\n const declared = (_a = item.mimeType) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();\n if (declared) {\n return HLS_MIME_TYPES.includes(declared);\n }\n return pathEndsWith(item.assetUrl, '.m3u8');\n}\n/** Whether the URL's path ends in `suffix`, ignoring any query string or fragment. */\nfunction pathEndsWith(url, suffix) {\n if (!url) {\n return false;\n }\n return url.toLowerCase().split('#')[0].split('?')[0].endsWith(suffix);\n}\n/** Map an `HTMLMediaElement.error` onto the RmxAudioErrorType values shared with the native platforms. */\nfunction mediaErrorToRmxErrorType(error) {\n switch (error === null || error === void 0 ? void 0 : error.code) {\n case 1: // MEDIA_ERR_ABORTED\n return RmxAudioErrorType.RMXERR_ABORTED;\n case 2: // MEDIA_ERR_NETWORK\n return RmxAudioErrorType.RMXERR_NETWORK;\n case 3: // MEDIA_ERR_DECODE\n return RmxAudioErrorType.RMXERR_DECODE;\n default: // MEDIA_ERR_SRC_NOT_SUPPORTED, or no MediaError at all\n return RmxAudioErrorType.RMXERR_NONE_SUPPORTED;\n }\n}\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.isStalled = false;\n this.isSeeking = false;\n this.hasCanPlayed = false;\n // Issue #143 parity backstop: position-freeze polling, in case the browser's own\n // 'waiting'/'stalled' events never fire while playback is genuinely frozen (mirrors\n // Android's ExoPlayer-specific gap). null means \"no baseline yet\".\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n this.lastKnownHandoffPosition = 0;\n this.hlsLoaded = false;\n }\n async addAllItems(options) {\n assertWebDrmNotSupported(options.items);\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n }\n async addItem(options) {\n assertWebDrmNotSupported([options.item]);\n const track = validateTrack(options.item);\n if (track) {\n const insertIndex = options.index !== undefined && options.index !== null\n ? Math.min(Math.max(0, options.index), this.playlistItems.length)\n : this.playlistItems.length;\n this.playlistItems.splice(insertIndex, 0, track);\n // currentTrack is tracked by object reference, so getCurrentIndex() (indexOf)\n // automatically reflects the shift caused by this insertion; no bookkeeping needed here.\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, Object.assign(Object.assign({}, track), { index: insertIndex }), track.trackId);\n }\n }\n moveItem(options) {\n const { from, to } = options;\n if (from < 0 || from >= this.playlistItems.length || to < 0 || to >= this.playlistItems.length) {\n return Promise.reject(new Error('Index out of bounds'));\n }\n if (from === to) {\n return Promise.resolve();\n }\n const [item] = this.playlistItems.splice(from, 1);\n this.playlistItems.splice(to, 0, item);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_MOVED, { from, to, currentIndex: this.getCurrentIndex() }, item.trackId);\n return Promise.resolve();\n }\n async replaceItem(options) {\n var _a;\n assertWebDrmNotSupported([options.item]);\n let replaceIndex = -1;\n if (options.index !== undefined && options.index !== null) {\n replaceIndex = options.index;\n }\n else if (options.id) {\n replaceIndex = this.playlistItems.findIndex((t) => t.trackId === options.id);\n }\n if (replaceIndex < 0 || replaceIndex >= this.playlistItems.length) {\n return Promise.reject(new Error('Could not find item to replace'));\n }\n const existing = this.playlistItems[replaceIndex];\n const replacement = validateTrack(Object.assign(Object.assign({}, options.item), { trackId: (_a = options.item.trackId) !== null && _a !== void 0 ? _a : existing.trackId }));\n if (!replacement) {\n return Promise.reject(new Error('Invalid replacement track'));\n }\n const isCurrent = this.currentTrack === existing;\n let savedPosition = 0;\n let wasPlaying = false;\n if (isCurrent && this.audio) {\n savedPosition = this.audio.currentTime;\n wasPlaying = !this.audio.paused;\n }\n this.playlistItems[replaceIndex] = replacement;\n if (isCurrent) {\n await this.setCurrent(replacement, savedPosition);\n if (!wasPlaying) {\n await this.pause();\n }\n }\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REPLACED, replacement, replacement.trackId);\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async getPlaylist() {\n return Promise.resolve({ items: this.playlistItems });\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (const track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (const { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.clearStallWatchdog();\n this.audio = undefined;\n this.currentTrack = null;\n this.lastState = 'stopped';\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n // options.index can be 0; don't use a truthy check.\n let removeIndex = -1;\n if (options.index !== undefined && options.index !== null) {\n removeIndex = options.index;\n }\n else if (options.id) {\n removeIndex = this.playlistItems.findIndex((t) => t.trackId === options.id);\n }\n if (removeIndex >= 0 && removeIndex < this.playlistItems.length) {\n const removedTrack = this.playlistItems.splice(removeIndex, 1)[0];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack, removedTrack === null || removedTrack === void 0 ? void 0 : removedTrack.trackId);\n }\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async startDownload(_options) {\n throw offlineNotSupported();\n }\n async cancelDownload(_options) {\n throw offlineNotSupported();\n }\n async deleteDownload(_options) {\n throw offlineNotSupported();\n }\n async renewDownload(_options) {\n throw offlineNotSupported();\n }\n async listDownloads() {\n throw offlineNotSupported();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n assertWebDrmNotSupported(options.items);\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n const currentIndex = this.getCurrentIndex();\n if (currentIndex < 0) {\n return;\n }\n let targetIndex = currentIndex + 1;\n if (targetIndex >= this.playlistItems.length) {\n if (!this.loop) {\n return;\n }\n targetIndex = 0;\n }\n const targetTrack = this.playlistItems[targetIndex];\n await this.setCurrent(targetTrack);\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_FORWARD, {\n currentIndex: targetIndex,\n currentItem: targetTrack\n }, targetTrack.trackId);\n }\n async skipBack() {\n const currentIndex = this.getCurrentIndex();\n if (currentIndex <= 0) {\n return;\n }\n const targetIndex = currentIndex - 1;\n const targetTrack = this.playlistItems[targetIndex];\n await this.setCurrent(targetTrack);\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: targetIndex,\n currentItem: targetTrack\n }, targetTrack.trackId);\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async prepareForVideoHandoff() {\n var _a, _b;\n this.lastKnownHandoffPosition = (_b = (_a = this.audio) === null || _a === void 0 ? void 0 : _a.currentTime) !== null && _b !== void 0 ? _b : 0;\n await this.pause();\n return Promise.resolve();\n }\n async resumeAfterVideoHandoff(options) {\n this.lastKnownHandoffPosition = options.position;\n return Promise.resolve({ resumed: false });\n }\n async getLastKnownPosition() {\n return Promise.resolve({ position: this.lastKnownHandoffPosition });\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: any, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n if (this.audio) {\n this.startStallWatchdog(this.audio);\n }\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => {\n this.hasCanPlayed = false;\n this.isStalled = false;\n this.isSeeking = false;\n this.setMediaSessionRemoteControlMetadata();\n });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('canplay', () => {\n this.hasCanPlayed = true;\n this.clearStalled();\n });\n this.audio.addEventListener('playing', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n var _a, _b;\n this.clearStalled();\n this.isSeeking = false;\n // Carry a real RmxAudioErrorType so consumers can tell a dropped connection\n // (retry) from an unusable source (skip) - issue #143. The track status fields\n // are kept alongside `code`/`message` so this stays a superset of what web\n // emitted before, while now matching the declared OnStatusErrorCallbackData.\n const mediaError = (_b = (_a = this.audio) === null || _a === void 0 ? void 0 : _a.error) !== null && _b !== void 0 ? _b : null;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, Object.assign({ code: mediaErrorToRmxErrorType(mediaError), message: (mediaError === null || mediaError === void 0 ? void 0 : mediaError.message) || 'Playback error' }, this.getCurrentTrackStatus('error')));\n });\n // Parity with Android (position-freeze polling) / iOS (AVPlayerItemPlaybackStalledNotification):\n // the browser's own stall signals for \"still trying, not necessarily failed\" (issue #143).\n // 'waiting' is the reliable one (temporary data underrun); 'stalled' is best-effort.\n // Suppressed during an in-flight seek and before the first 'canplay' of a source, since both\n // routinely fire a spurious 'waiting' that isn't an actual playback stall. Only emitted once\n // per stall episode; 'playing'/'pause'/'error'/'canplay'/'ended' all clear it again.\n const stalledListener = () => {\n if (this.isSeeking || !this.hasCanPlayed || this.isStalled) {\n return;\n }\n this.isStalled = true;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_STALLED, this.getCurrentTrackStatus('stalled'));\n };\n this.audio.addEventListener('waiting', stalledListener);\n this.audio.addEventListener('stalled', stalledListener);\n this.audio.addEventListener('ended', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n this.audio.addEventListener('seeking', () => {\n this.isSeeking = true;\n const status = this.getCurrentTrackStatus(this.lastState);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_SEEK, status);\n });\n this.audio.addEventListener('seeked', () => {\n this.isSeeking = false;\n });\n }\n }\n clearStalled() {\n this.isStalled = false;\n }\n clearStallWatchdog() {\n if (this.stallWatchdogId !== undefined) {\n clearInterval(this.stallWatchdogId);\n this.stallWatchdogId = undefined;\n }\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n }\n /**\n * Backstop for issue #143 parity: 'waiting'/'stalled' reliably fire for an ordinary data\n * underrun, but polling `currentTime` directly (as Android/iOS do) also catches playback\n * that is genuinely frozen without either event ever firing. Tied to this `audio` element's\n * lifetime — cleared on release()/track change rather than left running for the page's life.\n */\n startStallWatchdog(audio) {\n this.clearStallWatchdog();\n this.stallWatchdogId = setInterval(() => {\n var _a;\n if (audio.paused || audio.ended || this.isSeeking || !this.hasCanPlayed) {\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n return;\n }\n const positionMs = audio.currentTime * 1000;\n const nowMs = Date.now();\n // The first observation after (re)arming only establishes a baseline — it is not\n // evidence of a genuine resume, so it must not clear a stall an already-fired native\n // 'waiting'/'stalled' event just reported.\n if (this.lastProgressPositionMs === null) {\n this.lastProgressPositionMs = positionMs;\n this.lastProgressObservedAtMs = nowMs;\n return;\n }\n if (positionMs !== this.lastProgressPositionMs) {\n this.lastProgressPositionMs = positionMs;\n this.lastProgressObservedAtMs = nowMs;\n if (this.isStalled) {\n this.clearStalled();\n }\n return;\n }\n const stallTimeoutMs = (_a = this.options.stallTimeoutMs) !== null && _a !== void 0 ? _a : 10000;\n if (!this.isStalled && this.lastProgressObservedAtMs !== null\n && nowMs - this.lastProgressObservedAtMs >= stallTimeoutMs) {\n this.isStalled = true;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_STALLED, this.getCurrentTrackStatus('stalled'));\n }\n }, 1000);\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n return this.currentTrack ? this.playlistItems.indexOf(this.currentTrack) : -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n // Reset directly here rather than relying solely on the new element's 'loadstart' to fire\n // after registerHtmlListeners() attaches below — `.src` is assigned before that, so a race\n // between the load task and listener attachment could otherwise leave stale state (in\n // particular `isSeeking`) stuck across a track change that interrupted an in-flight seek.\n this.hasCanPlayed = false;\n this.isStalled = false;\n this.isSeeking = false;\n this.currentTrack = item;\n if (isHlsSource(item)) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (typeof Hls !== 'undefined' || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.7.3';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n/** Offline downloads are native-only (Story 59.4); web rejects `notSupported`. */\nfunction offlineNotSupported() {\n const error = new Error('Offline downloads not supported on this platform');\n error.code = 'notSupported';\n return error;\n}\n/** iOS/web refuse `drm` before creating a player (Story 57.5). */\nexport function assertWebDrmNotSupported(items) {\n if (items.some((item) => item != null && (item.drm != null || item.downloadId != null))) {\n const error = new Error('DRM not supported on this platform yet');\n error.code = 'notSupported';\n throw error;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * `assetUrl` for a queued track whose stream is not resolved yet (a protected item before its\n * playback session opens). Android keeps it idle in the timeline and never loads it; the host\n * swaps in the real URL with `replaceItem` when the track becomes current.\n */\nexport const QUEUED_TRACK_URL = 'https://localhost/queued';\n/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n /**\n * No active source to play. You are unlikely to see this.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n /**\n * Playback was aborted, typically because the source was torn down mid-load.\n * Web only, from `MediaError.MEDIA_ERR_ABORTED`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n /**\n * The source is fine but could not be reached or read - a dropped connection,\n * a timeout, a bad HTTP status. **This is the retry-able error**: the same URL\n * may well succeed once connectivity returns.\n *\n * Android: media3's `ERROR_CODE_IO_*` network codes. iOS: an `NSError` in\n * `NSURLErrorDomain` / `NSPOSIXErrorDomain`. Web: `MediaError.MEDIA_ERR_NETWORK`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n /**\n * The media was reached but could not be decoded. Not retry-able.\n *\n * Android: media3's decoder error codes. iOS: `AVFoundationErrorDomain` decode\n * and parse failures. Web: `MediaError.MEDIA_ERR_DECODE`.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n /**\n * The source itself is unusable - missing, the wrong container, or a body that\n * does not parse as what it claims to be. Not retry-able; skip the track.\n *\n * Also the fallback when a platform reports a failure that does not classify.\n */\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * Playback has stalled - the player is still trying, but position is not advancing.\n * Raised on all three platforms: from each platform's own stall signal where it fires,\n * and otherwise from a position-freeze poll gated by `AudioPlayerOptions.stallTimeoutMs`.\n * Emitted once per stall episode; the track's reported `status` reads `\"stalled\"` until\n * position advances again.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n *\n * Suppressed while the WebView is backgrounded, and (Android/iOS) while the track is\n * stalled - so a frozen position is never reported as if playback were healthy.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * An item has been moved within the playlist.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_MOVED\"] = 112] = \"RMXSTATUS_ITEM_MOVED\";\n /**\n * An item in the playlist has been replaced in place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REPLACED\"] = 113] = \"RMXSTATUS_ITEM_REPLACED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 112: 'Track Moved',\n 113: 'Track Replaced',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n let d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n const r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true, stallTimeoutMs: 10000 };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist, or at a specific index.\n */\n this.addItem = (trackItem, index) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem, index });\n };\n /**\n * Move a track within the playlist without disrupting playback of the current track.\n */\n this.moveItem = (from, to) => {\n return Playlist.moveItem({ from, to });\n };\n /**\n * Replace a track in the playlist (e.g. swap stream URL for a local file URL).\n * Unlike addItem, the replacement is NOT run through validateTrack: an omitted\n * `replacement.trackId` intentionally signals \"keep the existing id\", and\n * validateTrack would otherwise auto-assign a new random UUID and defeat that.\n */\n this.replaceItem = (replacement, spec) => {\n if (!replacement) {\n throw new Error('Provided track is null or not an audio track');\n }\n if (spec.index === undefined && !spec.trackId) {\n throw new Error('Track replacement spec is invalid');\n }\n return Playlist.replaceItem({\n item: replacement,\n index: spec.index,\n id: spec.trackId,\n });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && removeItem.trackIndex === undefined) {\n throw new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({\n id: removeItem.trackId,\n index: removeItem.trackIndex\n });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({\n items: (items || []).map((item) => ({\n id: item === null || item === void 0 ? void 0 : item.trackId,\n index: item === null || item === void 0 ? void 0 : item.trackIndex\n }))\n });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioErrorType, RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nconst HLS_MIME_TYPES = ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/x-mpegurl'];\n/**\n * Whether the track should be played through hls.js. An `.m3u8` path is the usual signal;\n * an explicit `mimeType` covers HLS served from a URL with no extension (issue #144).\n */\nfunction isHlsSource(item) {\n var _a;\n const declared = (_a = item.mimeType) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();\n if (declared) {\n return HLS_MIME_TYPES.includes(declared);\n }\n return pathEndsWith(item.assetUrl, '.m3u8');\n}\n/** Whether the URL's path ends in `suffix`, ignoring any query string or fragment. */\nfunction pathEndsWith(url, suffix) {\n if (!url) {\n return false;\n }\n return url.toLowerCase().split('#')[0].split('?')[0].endsWith(suffix);\n}\n/** Map an `HTMLMediaElement.error` onto the RmxAudioErrorType values shared with the native platforms. */\nfunction mediaErrorToRmxErrorType(error) {\n switch (error === null || error === void 0 ? void 0 : error.code) {\n case 1: // MEDIA_ERR_ABORTED\n return RmxAudioErrorType.RMXERR_ABORTED;\n case 2: // MEDIA_ERR_NETWORK\n return RmxAudioErrorType.RMXERR_NETWORK;\n case 3: // MEDIA_ERR_DECODE\n return RmxAudioErrorType.RMXERR_DECODE;\n default: // MEDIA_ERR_SRC_NOT_SUPPORTED, or no MediaError at all\n return RmxAudioErrorType.RMXERR_NONE_SUPPORTED;\n }\n}\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.isStalled = false;\n this.isSeeking = false;\n this.hasCanPlayed = false;\n // Issue #143 parity backstop: position-freeze polling, in case the browser's own\n // 'waiting'/'stalled' events never fire while playback is genuinely frozen (mirrors\n // Android's ExoPlayer-specific gap). null means \"no baseline yet\".\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n this.lastKnownHandoffPosition = 0;\n this.hlsLoaded = false;\n }\n async addAllItems(options) {\n assertWebDrmNotSupported(options.items);\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n }\n async addItem(options) {\n assertWebDrmNotSupported([options.item]);\n const track = validateTrack(options.item);\n if (track) {\n const insertIndex = options.index !== undefined && options.index !== null\n ? Math.min(Math.max(0, options.index), this.playlistItems.length)\n : this.playlistItems.length;\n this.playlistItems.splice(insertIndex, 0, track);\n // currentTrack is tracked by object reference, so getCurrentIndex() (indexOf)\n // automatically reflects the shift caused by this insertion; no bookkeeping needed here.\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, Object.assign(Object.assign({}, track), { index: insertIndex }), track.trackId);\n }\n }\n moveItem(options) {\n const { from, to } = options;\n if (from < 0 || from >= this.playlistItems.length || to < 0 || to >= this.playlistItems.length) {\n return Promise.reject(new Error('Index out of bounds'));\n }\n if (from === to) {\n return Promise.resolve();\n }\n const [item] = this.playlistItems.splice(from, 1);\n this.playlistItems.splice(to, 0, item);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_MOVED, { from, to, currentIndex: this.getCurrentIndex() }, item.trackId);\n return Promise.resolve();\n }\n async replaceItem(options) {\n var _a;\n assertWebDrmNotSupported([options.item]);\n let replaceIndex = -1;\n if (options.index !== undefined && options.index !== null) {\n replaceIndex = options.index;\n }\n else if (options.id) {\n replaceIndex = this.playlistItems.findIndex((t) => t.trackId === options.id);\n }\n if (replaceIndex < 0 || replaceIndex >= this.playlistItems.length) {\n return Promise.reject(new Error('Could not find item to replace'));\n }\n const existing = this.playlistItems[replaceIndex];\n const replacement = validateTrack(Object.assign(Object.assign({}, options.item), { trackId: (_a = options.item.trackId) !== null && _a !== void 0 ? _a : existing.trackId }));\n if (!replacement) {\n return Promise.reject(new Error('Invalid replacement track'));\n }\n const isCurrent = this.currentTrack === existing;\n let savedPosition = 0;\n let wasPlaying = false;\n if (isCurrent && this.audio) {\n savedPosition = this.audio.currentTime;\n wasPlaying = !this.audio.paused;\n }\n this.playlistItems[replaceIndex] = replacement;\n if (isCurrent) {\n await this.setCurrent(replacement, savedPosition);\n if (!wasPlaying) {\n await this.pause();\n }\n }\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REPLACED, replacement, replacement.trackId);\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async getPlaylist() {\n return Promise.resolve({ items: this.playlistItems });\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (const track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (const { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.clearStallWatchdog();\n this.audio = undefined;\n this.currentTrack = null;\n this.lastState = 'stopped';\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n // options.index can be 0; don't use a truthy check.\n let removeIndex = -1;\n if (options.index !== undefined && options.index !== null) {\n removeIndex = options.index;\n }\n else if (options.id) {\n removeIndex = this.playlistItems.findIndex((t) => t.trackId === options.id);\n }\n if (removeIndex >= 0 && removeIndex < this.playlistItems.length) {\n const removedTrack = this.playlistItems.splice(removeIndex, 1)[0];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack, removedTrack === null || removedTrack === void 0 ? void 0 : removedTrack.trackId);\n }\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async startDownload(_options) {\n throw offlineNotSupported();\n }\n async cancelDownload(_options) {\n throw offlineNotSupported();\n }\n async deleteDownload(_options) {\n throw offlineNotSupported();\n }\n async renewDownload(_options) {\n throw offlineNotSupported();\n }\n async listDownloads() {\n throw offlineNotSupported();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n assertWebDrmNotSupported(options.items);\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n const currentIndex = this.getCurrentIndex();\n if (currentIndex < 0) {\n return;\n }\n let targetIndex = currentIndex + 1;\n if (targetIndex >= this.playlistItems.length) {\n if (!this.loop) {\n return;\n }\n targetIndex = 0;\n }\n const targetTrack = this.playlistItems[targetIndex];\n await this.setCurrent(targetTrack);\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_FORWARD, {\n currentIndex: targetIndex,\n currentItem: targetTrack\n }, targetTrack.trackId);\n }\n async skipBack() {\n const currentIndex = this.getCurrentIndex();\n if (currentIndex <= 0) {\n return;\n }\n const targetIndex = currentIndex - 1;\n const targetTrack = this.playlistItems[targetIndex];\n await this.setCurrent(targetTrack);\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: targetIndex,\n currentItem: targetTrack\n }, targetTrack.trackId);\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async prepareForVideoHandoff() {\n var _a, _b;\n this.lastKnownHandoffPosition = (_b = (_a = this.audio) === null || _a === void 0 ? void 0 : _a.currentTime) !== null && _b !== void 0 ? _b : 0;\n await this.pause();\n return Promise.resolve();\n }\n async resumeAfterVideoHandoff(options) {\n this.lastKnownHandoffPosition = options.position;\n return Promise.resolve({ resumed: false });\n }\n async getLastKnownPosition() {\n return Promise.resolve({ position: this.lastKnownHandoffPosition });\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: any, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n if (this.audio) {\n this.startStallWatchdog(this.audio);\n }\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => {\n this.hasCanPlayed = false;\n this.isStalled = false;\n this.isSeeking = false;\n this.setMediaSessionRemoteControlMetadata();\n });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('canplay', () => {\n this.hasCanPlayed = true;\n this.clearStalled();\n });\n this.audio.addEventListener('playing', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n var _a, _b;\n this.clearStalled();\n this.isSeeking = false;\n // Carry a real RmxAudioErrorType so consumers can tell a dropped connection\n // (retry) from an unusable source (skip) - issue #143. The track status fields\n // are kept alongside `code`/`message` so this stays a superset of what web\n // emitted before, while now matching the declared OnStatusErrorCallbackData.\n const mediaError = (_b = (_a = this.audio) === null || _a === void 0 ? void 0 : _a.error) !== null && _b !== void 0 ? _b : null;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, Object.assign({ code: mediaErrorToRmxErrorType(mediaError), message: (mediaError === null || mediaError === void 0 ? void 0 : mediaError.message) || 'Playback error' }, this.getCurrentTrackStatus('error')));\n });\n // Parity with Android (position-freeze polling) / iOS (AVPlayerItemPlaybackStalledNotification):\n // the browser's own stall signals for \"still trying, not necessarily failed\" (issue #143).\n // 'waiting' is the reliable one (temporary data underrun); 'stalled' is best-effort.\n // Suppressed during an in-flight seek and before the first 'canplay' of a source, since both\n // routinely fire a spurious 'waiting' that isn't an actual playback stall. Only emitted once\n // per stall episode; 'playing'/'pause'/'error'/'canplay'/'ended' all clear it again.\n const stalledListener = () => {\n if (this.isSeeking || !this.hasCanPlayed || this.isStalled) {\n return;\n }\n this.isStalled = true;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_STALLED, this.getCurrentTrackStatus('stalled'));\n };\n this.audio.addEventListener('waiting', stalledListener);\n this.audio.addEventListener('stalled', stalledListener);\n this.audio.addEventListener('ended', () => {\n this.clearStalled();\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n this.audio.addEventListener('seeking', () => {\n this.isSeeking = true;\n const status = this.getCurrentTrackStatus(this.lastState);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_SEEK, status);\n });\n this.audio.addEventListener('seeked', () => {\n this.isSeeking = false;\n });\n }\n }\n clearStalled() {\n this.isStalled = false;\n }\n clearStallWatchdog() {\n if (this.stallWatchdogId !== undefined) {\n clearInterval(this.stallWatchdogId);\n this.stallWatchdogId = undefined;\n }\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n }\n /**\n * Backstop for issue #143 parity: 'waiting'/'stalled' reliably fire for an ordinary data\n * underrun, but polling `currentTime` directly (as Android/iOS do) also catches playback\n * that is genuinely frozen without either event ever firing. Tied to this `audio` element's\n * lifetime — cleared on release()/track change rather than left running for the page's life.\n */\n startStallWatchdog(audio) {\n this.clearStallWatchdog();\n this.stallWatchdogId = setInterval(() => {\n var _a;\n if (audio.paused || audio.ended || this.isSeeking || !this.hasCanPlayed) {\n this.lastProgressPositionMs = null;\n this.lastProgressObservedAtMs = null;\n return;\n }\n const positionMs = audio.currentTime * 1000;\n const nowMs = Date.now();\n // The first observation after (re)arming only establishes a baseline — it is not\n // evidence of a genuine resume, so it must not clear a stall an already-fired native\n // 'waiting'/'stalled' event just reported.\n if (this.lastProgressPositionMs === null) {\n this.lastProgressPositionMs = positionMs;\n this.lastProgressObservedAtMs = nowMs;\n return;\n }\n if (positionMs !== this.lastProgressPositionMs) {\n this.lastProgressPositionMs = positionMs;\n this.lastProgressObservedAtMs = nowMs;\n if (this.isStalled) {\n this.clearStalled();\n }\n return;\n }\n const stallTimeoutMs = (_a = this.options.stallTimeoutMs) !== null && _a !== void 0 ? _a : 10000;\n if (!this.isStalled && this.lastProgressObservedAtMs !== null\n && nowMs - this.lastProgressObservedAtMs >= stallTimeoutMs) {\n this.isStalled = true;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_STALLED, this.getCurrentTrackStatus('stalled'));\n }\n }, 1000);\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n return this.currentTrack ? this.playlistItems.indexOf(this.currentTrack) : -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n // Reset directly here rather than relying solely on the new element's 'loadstart' to fire\n // after registerHtmlListeners() attaches below — `.src` is assigned before that, so a race\n // between the load task and listener attachment could otherwise leave stale state (in\n // particular `isSeeking`) stuck across a track change that interrupted an in-flight seek.\n this.hasCanPlayed = false;\n this.isStalled = false;\n this.isSeeking = false;\n this.currentTrack = item;\n if (isHlsSource(item)) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (typeof Hls !== 'undefined' || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.7.3';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n/** Offline downloads are native-only; web rejects `notSupported`. */\nfunction offlineNotSupported() {\n const error = new Error('Offline downloads not supported on this platform');\n error.code = 'notSupported';\n return error;\n}\n/** iOS/web refuse `drm` before creating a player. */\nexport function assertWebDrmNotSupported(items) {\n if (items.some((item) => item != null && (item.drm != null || item.downloadId != null))) {\n const error = new Error('DRM not supported on this platform yet');\n error.code = 'notSupported';\n throw error;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -1270,13 +1270,13 @@ var capacitorPlaylist = (function (exports, core) {
1270
1270
  });
1271
1271
  }
1272
1272
  }
1273
- /** Offline downloads are native-only (Story 59.4); web rejects `notSupported`. */
1273
+ /** Offline downloads are native-only; web rejects `notSupported`. */
1274
1274
  function offlineNotSupported() {
1275
1275
  const error = new Error('Offline downloads not supported on this platform');
1276
1276
  error.code = 'notSupported';
1277
1277
  return error;
1278
1278
  }
1279
- /** iOS/web refuse `drm` before creating a player (Story 57.5). */
1279
+ /** iOS/web refuse `drm` before creating a player. */
1280
1280
  function assertWebDrmNotSupported(items) {
1281
1281
  if (items.some((item) => item != null && (item.drm != null || item.downloadId != null))) {
1282
1282
  const error = new Error('DRM not supported on this platform yet');