p.stop?p.inWatchSpan=!1:p.inWatchSpan||(p.allowMultiple||p.stopMonitor(),p.inWatchSpan=!0,yield p.callback(n,p))},function(){var e=this,n=arguments;return new Promise((function(p,h){var y=d.apply(e,n);function _next(e){asyncGeneratorStep$z(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$z(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}constructor(e,n,d,p,h=!1){_define_property$K(this,"dispatcher",void 0),_define_property$K(this,"callback",void 0),_define_property$K(this,"start",void 0),_define_property$K(this,"stop",void 0),_define_property$K(this,"allowMultiple",void 0),_define_property$K(this,"inWatchSpan",void 0),this.dispatcher=e,this.callback=n,this.start=d,this.stop=p,this.allowMultiple=h,this.inWatchSpan=!1}}function _define_property$J(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_metadata$e(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$f("design:type",Function),_ts_metadata$f("design:paramtypes",[void 0,void 0])],SpanWatcher.prototype,"handleTimeChange",null);class PlaybackMonitor{activate(){this.isActive=!0,this.startMonitor()}deactivate(){this.isActive=!1,this.clearMonitor()}clearMonitor(){this.isMonitoring&&(this.watchers.forEach(e=>e.stopMonitor()),this.isMonitoring=!1)}shouldMonitor(){return this.isActive}startMonitor(){this.shouldMonitor()&&(this.watchers.forEach(e=>e.startMonitor()),this.isMonitoring=!0)}handleMediaItemChange(){this.isActive&&(this.clearMonitor(),this.shouldMonitor()&&this.startMonitor())}constructor(e){_define_property$J(this,"isActive",!1),_define_property$J(this,"isMonitoring",!1),_define_property$J(this,"apiManager",void 0),_define_property$J(this,"dispatcher",void 0),_define_property$J(this,"playbackController",void 0),_define_property$J(this,"watchers",[]),this.handlePlaybackThreshold=this.handlePlaybackThreshold.bind(this),this.playbackController=e.controller,this.dispatcher=e.services.dispatcher,this.dispatcher.subscribe(So.nowPlayingItemDidChange,this.handleMediaItemChange),this.apiManager=e.services.apiManager}}function asyncGeneratorStep$y(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$e("design:type",Function),_ts_metadata$e("design:paramtypes",[])],PlaybackMonitor.prototype,"handleMediaItemChange",null);class RollMonitor extends PlaybackMonitor{handlePlaybackThreshold(e,n){var d,p=this;return(d=function*(){if(!p.rollMap.has(n))return;const e=p.rollMap.get(n);p.dispatcher.publish(So.mediaRollEntered,e),p.rollMap.delete(n)},function(){var e=this,n=arguments;return new Promise((function(p,h){var y=d.apply(e,n);function _next(e){asyncGeneratorStep$y(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$y(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}shouldMonitor(){if(!super.shouldMonitor())return!1;return this.getRollMetadata().length>0}startMonitor(){this.setupWatchers(this.getRollMetadata()),super.startMonitor()}getRollMetadata(){const e=this.playbackController.nowPlayingItem;return void 0===e?[]:function(e,n=["pre-roll","mid-roll","post-roll"]){if(void 0===e.hlsMetadata)return[];const d=[];return n.forEach(n=>{const p=parseInt(e.hlsMetadata[n+".count"],10);if(!isNaN(p))for(let h=0;h{const{start:d,duration:p}=e,h=new SpanWatcher(this.dispatcher,this.handlePlaybackThreshold,d,d+p);n.push(h),this.rollMap.set(h,e)}),this.watchers=n}constructor(e){var n,d,p;super(e),n=this,d="rollMap",p=new Map,d in n?Object.defineProperty(n,d,{value:p,enumerable:!0,configurable:!0,writable:!0}):n[d]=p}}function asyncGeneratorStep$x(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}class SkipAvailable extends PlaybackMonitor{handlePlaybackThreshold(e,n){var d,p=this;return(d=function*(){if(!p.skipMap.has(n))return;const e=p.skipMap.get(n);p.dispatcher.publish(So.mediaSkipAvailable,e),p.skipMap.delete(n)},function(){var e=this,n=arguments;return new Promise((function(p,h){var y=d.apply(e,n);function _next(e){asyncGeneratorStep$x(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$x(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}shouldMonitor(){if(!super.shouldMonitor())return!1;return this.getNowPlayingMetadata().length>0}startMonitor(){this.setupWatchers(this.getNowPlayingMetadata()),super.startMonitor()}getNowPlayingMetadata(){const e=this.playbackController.nowPlayingItem;return void 0===e?[]:function(e){const n=parseInt(e.hlsMetadata["skip.count"],10),d=[];if(isNaN(n)||0===n)return d;for(let p=0;p{const{start:d,target:p,duration:h,promo:y}=e,_=new SpanWatcher(this.dispatcher,this.handlePlaybackThreshold,d,y?p:d+h);n.push(_),this.skipMap.set(_,e)}),this.watchers=n}constructor(e){var n,d,p;super(e),n=this,d="skipMap",p=new Map,d in n?Object.defineProperty(n,d,{value:p,enumerable:!0,configurable:!0,writable:!0}):n[d]=p}}function asyncGeneratorStep$w(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _define_property$G(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}const hasContentCompletionThresholdData=e=>!isNaN(getUpNextStart(e))&&!isNaN(getWatchedTime(e)),getUpNextStart=e=>parseFloat(e.hlsMetadata["up-next.start"]),getWatchedTime=e=>parseFloat(e.hlsMetadata["watched.time"]),Po=function(){var e,n=(e=function*(e,n){if(e.isUTS&&e.assetURL)try{const d=generateAssetUrl(e,n),p=yield Zn.fetchManifest(d);e.hlsMetadata=function(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$d("design:type",Function),_ts_metadata$d("design:paramtypes",[])],UpNextMonitor.prototype,"handlePlaybackThreshold",null);const Eo=getHlsJsCdnConfig(),To={app:{},autoplay:{maxQueueSizeForAutoplay:50,maxQueueSizeInRequest:10,maxUpcomingTracksToMaintain:10},features:{xtrick:!0,isWeb:!0,bookmarking:!1,"seamless-audio-transitions":!0,"enhanced-hls":!1},urls:{hls:Eo.hls,rtc:Eo.rtc,mediaApi:"https://api.music.apple.com/v1",webPlayback:`https://${getCommerceHostname("play")}/WebObjects/MZPlay.woa/wa/webPlayback`}},ko=JsonDevFlag.register("mk-offers-key-urls").get();function asyncGeneratorStep$u(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$u(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$u(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$u(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$F(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread_props$e(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var d=Object.keys(e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);n&&(p=p.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),d.push.apply(d,p)}return d}(Object(n)).forEach((function(d){Object.defineProperty(e,d,Object.getOwnPropertyDescriptor(n,d))})),e}let wo;ko&&(To.urls.hlsOffersKeyUrls=ko);class Store{get authorizationStatus(){return this.storekit.authorizationStatus}get cid(){return this.storekit.cid}get developerToken(){return this.storekit.developerToken}get hasAuthorized(){return this._hasAuthorized}get isAuthorized(){return this.storekit.hasAuthorized}get isRestricted(){return this.storekit.authorizationStatus===Ae.RESTRICTED}get metricsClientId(){return this._metricsClientId}set metricsClientId(e){this._metricsClientId=e}get musicUserToken(){return this.storekit.userToken}set musicUserToken(e){this.storekit.userToken=e}set dynamicMusicUserToken(e){this.storekit.dynamicUserToken=e}get realm(){return this.storekit.realm}set requestUserToken(e){this._providedRequestUserToken=!0,this.storekit.requestUserToken=e}get restrictedEnabled(){return this.storekit.restrictedEnabled}set restrictedEnabled(e){this.storekit.overrideRestrictEnabled(e)}get storefrontCountryCode(){var e;return this.isAuthorized?this.storekit.storefrontCountryCode:null!==(e=this._defaultStorefrontCountryCode)&&void 0!==e?e:this.storekit.storefrontCountryCode}get storefrontId(){return this._apiStorefrontId||this.storekit.storefrontCountryCode}set storefrontId(e){e&&(e=e.toLowerCase()),e!==this._apiStorefrontId&&(this._apiStorefrontId=e,this._dispatcher.publish(_t.apiStorefrontChanged,{storefrontId:e}))}get subscribeURL(){return this.storekit.deeplinkURL({p:"subscribe"})}get subscribeFamilyURL(){return this.storekit.deeplinkURL({p:"subscribe-family"})}get subscribeIndividualURL(){return this.storekit.deeplinkURL({p:"subscribe-individual"})}get subscribeStudentURL(){return this.storekit.deeplinkURL({p:"subscribe-student"})}get userToken(){return this.musicUserToken}authorize(){var e=this;return _async_to_generator$u((function*(){if(e.storekit.userTokenIsValid)return e.storekit.userToken;let n;try{n=yield e.storekit.requestUserToken()}catch(Q){try{yield e.unauthorize()}catch(Ut){}throw new MKError(MKError.Reason.AUTHORIZATION_ERROR,"Unauthorized")}return e._providedRequestUserToken&&(e.storekit.userToken=n),e.storekit.userTokenIsValid?(yield e.storekit.requestStorefrontCountryCode().catch(function(){var n=_async_to_generator$u((function*(n){return yield e.unauthorize(),Promise.reject(n)}));return function(e){return n.apply(this,arguments)}}()),n):void 0}))()}unauthorize(){var e=this;return _async_to_generator$u((function*(){return e.storekit.revokeUserToken()}))()}constructor(n,d={}){_define_property$F(this,"precache",void 0),_define_property$F(this,"storekit",void 0),_define_property$F(this,"_apiStorefrontId",void 0),_define_property$F(this,"_defaultStorefrontCountryCode",void 0),_define_property$F(this,"_dispatcher",void 0),_define_property$F(this,"_hasAuthorized",!1),_define_property$F(this,"_metricsClientId",void 0),_define_property$F(this,"_providedRequestUserToken",!1),_define_property$F(this,"_ageVerificationRequired",(e,n)=>!0),this._dispatcher=d.services.dispatcher,d.precache&&(this.precache=d.precache),d.storefrontId&&(this.storefrontId=d.storefrontId),this._defaultStorefrontCountryCode=d.storefrontCountryCode,(d.affiliateToken||d.campaignToken)&&(d.linkParameters=_object_spread_props$e(function(e){for(var n=1;n{const{authorizationStatus:n}=e;this._hasAuthorized=[Ae.AUTHORIZED,Ae.RESTRICTED].includes(n)})}}function formattedSeconds(e){return{hours:Math.floor(e/3600),minutes:Math.floor(e%3600/60)}}function asyncGeneratorStep$t(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$t(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$t(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$t(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function hasAuthorization(e){return void 0===e&&(e=wo&&wo.storekit),void 0!==e&&e.hasAuthorized&&e.userTokenIsValid}function hasMusicSubscription(e){return _hasMusicSubscription.apply(this,arguments)}function _hasMusicSubscription(){return(_hasMusicSubscription=_async_to_generator$t((function*(e){return void 0===e&&(e=wo&&wo.storekit),e.hasMusicSubscription()}))).apply(this,arguments)}function _define_property$E(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_decorate$c(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$c(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}class MediaSessionManager{onCapabilitiesChanged(){this._resetHandlers(),this._setMediaSessionHandlers()}onNowPlayingItemDidChange(e,{item:n}){this._setMediaSessionMetadata(n)}_setMediaSessionMetadata(e){var n,d;this.session&&"MediaMetadata"in window&&e&&(this.session.metadata=new window.MediaMetadata({title:e.title,artist:null!==(d=e.artistName)&&void 0!==d?d:null===(n=e.attributes)||void 0===n?void 0:n.showTitle,album:e.albumName,artwork:e.artwork?[96,128,192,256,384,512].map(n=>({src:formatArtworkURL(e.artwork,n,n),sizes:`${n}x${n}`,type:"image/jpeg"})):[]}))}_setMediaSessionHandlers(){this.session&&(this._resetHandlers(),this.session.setActionHandler("play",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.play()}),this.capabilities.canPause?this.session.setActionHandler("pause",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.pause()}):this.session.setActionHandler("pause",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.stop()}),this.capabilities.canSeek&&(this.session.setActionHandler("seekforward",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.seekForward()}),this.session.setActionHandler("seekbackward",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.seekBackward()})),this.capabilities.canSkipToNextItem&&this.session.setActionHandler("nexttrack",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.skipToNextItem()}),this.capabilities.canSkipToPreviousItem&&this.session.setActionHandler("previoustrack",()=>{var e;return null===(e=this.controller)||void 0===e?void 0:e.skipToPreviousItem()}))}_resetHandlers(){this.session&&(this.session.setActionHandler("play",void 0),this.session.setActionHandler("pause",void 0),this.session.setActionHandler("seekforward",void 0),this.session.setActionHandler("seekbackward",void 0),this.session.setActionHandler("nexttrack",void 0),this.session.setActionHandler("previoustrack",void 0))}constructor(e,n){_define_property$E(this,"capabilities",void 0),_define_property$E(this,"dispatcher",void 0),_define_property$E(this,"controller",void 0),_define_property$E(this,"session",void 0),this.capabilities=e,this.dispatcher=n,this.session=navigator.mediaSession,this.session&&(this.dispatcher.subscribe(So.nowPlayingItemDidChange,this.onNowPlayingItemDidChange),this.dispatcher.subscribe(So.capabilitiesChanged,this.onCapabilitiesChanged),this._setMediaSessionHandlers())}}function _define_property$D(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}var Io;_ts_decorate$c([Bind(),_ts_metadata$c("design:type",Function),_ts_metadata$c("design:paramtypes",[])],MediaSessionManager.prototype,"onCapabilitiesChanged",null),_ts_decorate$c([Bind(),_ts_metadata$c("design:type",Function),_ts_metadata$c("design:paramtypes",[void 0,void 0])],MediaSessionManager.prototype,"onNowPlayingItemDidChange",null),function(e){e[e.PAUSE=0]="PAUSE",e[e.EDIT_QUEUE=1]="EDIT_QUEUE",e[e.SEEK=2]="SEEK",e[e.REPEAT=3]="REPEAT",e[e.SHUFFLE=4]="SHUFFLE",e[e.SKIP_NEXT=5]="SKIP_NEXT",e[e.SKIP_PREVIOUS=6]="SKIP_PREVIOUS",e[e.SKIP_TO_ITEM=7]="SKIP_TO_ITEM",e[e.AUTOPLAY=8]="AUTOPLAY",e[e.VOLUME=9]="VOLUME"}(Io||(Io={}));class Capabilities{set controller(e){this._mediaSession.controller=e}updateChecker(e){this._checkCapability!==e&&(this._checkCapability=e,this._dispatcher.publish(So.capabilitiesChanged))}get canEditPlaybackQueue(){return this._checkCapability(Io.EDIT_QUEUE)}get canPause(){return this._checkCapability(Io.PAUSE)}get canSeek(){return this._checkCapability(Io.SEEK)}get canSetRepeatMode(){return this._checkCapability(Io.REPEAT)}get canSetShuffleMode(){return this._checkCapability(Io.SHUFFLE)}get canSkipToNextItem(){return this._checkCapability(Io.SKIP_NEXT)}get canSkipToMediaItem(){return this._checkCapability(Io.SKIP_TO_ITEM)}get canSkipToPreviousItem(){return this._checkCapability(Io.SKIP_PREVIOUS)}get canAutoplay(){return this._checkCapability(Io.AUTOPLAY)}get canSetVolume(){return this._checkCapability(Io.VOLUME)}constructor(e){_define_property$D(this,"_dispatcher",void 0),_define_property$D(this,"_checkCapability",void 0),_define_property$D(this,"_mediaSession",void 0),this._dispatcher=e,this._checkCapability=e=>e===Io.VOLUME,this._mediaSession=new MediaSessionManager(this,e)}}function _define_property$C(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function transform$6(e){return function(e){for(var n=1;n!0,toOptions:(e,n,d)=>[_object_spread_props$d(_object_spread$l({},e),{context:d})]};function _define_property$A(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$k(e){for(var n=1;n{var n;return"stations"===e.type&&(null===(n=e.attributes)||void 0===n?void 0:n.isLive)},toOptions:(e,n,d)=>{var p;return[_object_spread_props$c(_object_spread$k({},e),{context:d,container:{attributes:e.attributes,id:e.id,type:e.type,name:null===(p=d)||void 0===p?void 0:p.featureName}})]}},typeIs=(...e)=>({type:n})=>e.includes(n),withBagPrefix=e=>{if(void 0===e||""===e)return;const{prefix:n}=To;return n?`${n}:${e}`:e};function _define_property$z(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread_props$b(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var d=Object.keys(e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);n&&(p=p.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),d.push.apply(d,p)}return d}(Object(n)).forEach((function(d){Object.defineProperty(e,d,Object.getOwnPropertyDescriptor(n,d))})),e}var Ro;const getContainerName$1=(e,n)=>{var d,p;return null!==(Ro=null!=n?n:null===(p=e)||void 0===p||null===(d=p.container)||void 0===d?void 0:d.name)&&void 0!==Ro?Ro:mt.SONG},$o={toOptions:(e,n,d)=>{var p;const h=_object_spread_props$b(function(e){for(var n=1;ne.includes("udio")?(e=>{if(void 0===e)return;const[n]=Object.keys(e);return e[n]})(n):(e=>{if(void 0===e)return;const n=Object.keys(e);return e[n[n.length-1]]})(n),Co={condition:typeIs("uploaded-audios","uploadedAudio","uploaded-videos","uploadedVideo"),toOptions:(e,n,d)=>{var p,h,y,_;const m=_object_spread_props$a(_object_spread$i({},e),{context:d,attributes:_object_spread_props$a(_object_spread$i({},e.attributes),{assetUrl:parseAssets(e),playParams:null!==(_=null===(h=e)||void 0===h||null===(p=h.attributes)||void 0===p?void 0:p.playParams)&&void 0!==_?_:{id:e.id,kind:e.type}})});var g;(void 0!==n&&(m.container=n),void 0!==(null===(y=d)||void 0===y?void 0:y.featureName))&&(m.container=_object_spread_props$a(_object_spread$i({},m.container),{name:null===(g=d)||void 0===g?void 0:g.featureName}));return[m]}};const getFeatureName=(e,n)=>{if(n)return n;const d=function(e=[]){return 0!==e.length&&e.filter(({attributes:e})=>!!e&&(e.workName||e.movementName||e.movementCount||e.movementNumber)).length>0}(e.relationships.tracks.data);return"albums"===e.type||"library-albums"===e.type?d?mt.ALBUM_CLASSICAL:mt.ALBUM:"playlists"===e.type||"library-playlists"===e.type?d?mt.PLAYLIST_CLASSICAL:mt.PLAYLIST:void 0};var Mo;const Do=[{toOptions:(e,n,d)=>{var p;const h={attributes:e.attributes,id:e.id,type:e.type,name:withBagPrefix(getFeatureName(e,null===(p=d)||void 0===p?void 0:p.featureName))};return e.relationships.tracks.data.map(e=>({attributes:e.attributes,id:e.id,type:e.type,container:h,context:d}))},condition:(Mo="tracks",e=>{var n,d;return!!(null===(d=e.relationships)||void 0===d||null===(n=d[Mo])||void 0===n?void 0:n.data)}),requiredRelationships:["tracks"]},$o,Ao,Co],xo=Do.reduce((e,n)=>{const d=n.requiredRelationships;return d&&e.push(...d),e},[]),Lo=new Set(xo),isArrayOf=(e,n)=>Array.isArray(e)&&(0===e.length||n(e[0])),isMediaAPIResource=e=>e&&void 0!==e.id&&void 0!==e.type,isMediaItem=e=>e&&void 0!==e.id,isMPMediaItem=e=>e&&void 0!==e.contentId&&void 0!==e.metadata&&void 0!==e.metadata.itemId&&void 0!==e.metadata.itemType,isQueueItems=e=>e&&e.items&&Array.isArray(e.items),isQueueLoaded=e=>e&&e.loaded,isQueueURLOption=e=>e&&e.url;function _define_property$x(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}const No=He.linkChild(new Logger("queue")),descriptorToMediaItems=e=>{if(!isQueueItems(e)&&!isQueueLoaded(e))return[];const n=isQueueLoaded(e)?loadedDescriptorToMediaItem(e):unloadedDescriptorToMediaItem(e);return n.forEach(n=>n.context=function(e){for(var n=1;nisArrayOf(e,isMPMediaItem)?e.map(e=>new MediaItem(transform$6(e))):isArrayOf(e,isMediaItem)?e.map(e=>new MediaItem(e)):[],loadedDescriptorToMediaItem=e=>{const n=[],{loaded:d,container:p,context:h}=e;return void 0===d?[]:isArrayOf(d,isDataRecord)?(d.forEach(e=>{n.push(...dataRecordToMediaItems(e,p,h))}),n):isArrayOf(d,isMediaAPIResource)?(d.forEach(e=>{n.push(...resourceToMediaItem(e,p,h))}),n):isDataRecord(d)?dataRecordToMediaItems(d,p,h):isMediaAPIResource(d)?resourceToMediaItem(d,p,h):[]},dataRecordToMediaItems=(e,n,d={})=>{const{data:p}=e.serialize(!0,void 0,{includeRelationships:Lo,allowFullDuplicateSerializations:!0});return resourceToMediaItem(p,n,d)},resourceToMediaItem=(e,n,d={})=>(No.debug("_resourceToMediaItem",e),((e,n,d={})=>{var p,h,y,_;n=null!==(y=null===(h=n)||void 0===h||null===(p=h.serialize)||void 0===p?void 0:p.call(h).data)&&void 0!==y?y:n;return(null!==(_=Do.find(p=>p.condition(e,n,d)))&&void 0!==_?_:Oo).toOptions(e,n,d).map(e=>new MediaItem(e))})(e,n,d));function _define_property$w(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}class BaseModifiableQueue{append(e){Be.warn("Append is not supported for this type of playback")}clear(){Be.warn("Clear is not supported for this type of playback")}insertAt(e,n){Be.warn("InsertAt is not supported for this type of playback")}prepend(e,n=!1){Be.warn("Prepend is not supported for this type of playback")}constructor(){_define_property$w(this,"queue",void 0),_define_property$w(this,"canModifyQueue",!1)}}class ModifiableQueue{append(e){const n=descriptorToMediaItems(e);this.queue.splice(this.queue.appendTargetIndex,0,n)}clear(){this.queue.length&&(this.queue.splice(0,this.queue.length),this.queue.reset())}insertAt(e,n){const d=descriptorToMediaItems(n);this.queue.splice(e,0,d)}prepend(e,n=!1){const d=descriptorToMediaItems(e),p=this.queue.position+1;n&&this.queue.splice(p,this.queue.length),this.queue.splice(p,0,d)}constructor(e,n){_define_property$w(this,"queue",void 0),_define_property$w(this,"canModifyQueue",!0),_define_property$w(this,"_mediaItemPlayback",void 0),this.queue=e,this._mediaItemPlayback=n}}function _define_property$v(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}var jo;e.PlayerRepeatMode=void 0,(jo=e.PlayerRepeatMode||(e.PlayerRepeatMode={}))[jo.none=0]="none",jo[jo.one=1]="one",jo[jo.all=2]="all";class BaseRepeatable{get repeatMode(){return e.PlayerRepeatMode.none}set repeatMode(e){e!==this.repeatMode&&Be.warn("setting repeatMode is not supported in this playback method")}constructor(){_define_property$v(this,"canSetRepeatMode",!1)}}class Repeatable{get repeatMode(){return this._repeatMode}set repeatMode(n){n in e.PlayerRepeatMode&&n!==this._repeatMode&&(this._repeatMode=n,this.dispatcher.publish(So.repeatModeDidChange,this._repeatMode))}constructor(n,d=e.PlayerRepeatMode.none){_define_property$v(this,"canSetRepeatMode",!0),_define_property$v(this,"dispatcher",void 0),_define_property$v(this,"_repeatMode",void 0),this.dispatcher=n,this._repeatMode=d}}function _define_property$u(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function asyncGeneratorStep$s(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$s(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$s(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$s(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$t(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}!function(e){for(var n=1;n{var n,d,p;return(null===(n=e)||void 0===n?void 0:n.isUTS)||Uo.includes(null===(d=e)||void 0===d?void 0:d.type)?{FORWARD:10,BACK:10}:(null===(p=e)||void 0===p?void 0:p.isAOD)?{FORWARD:30,BACK:30}:{FORWARD:30,BACK:15}})(e)}seekBackward(e=this._seekToBeginning){var n=this;return _async_to_generator$s((function*(){if(void 0===n.mediaItemPlayback.nowPlayingItem)return void Be.warn("Cannot seekBackward when nowPlayingItem is not yet set.");const d=n.mediaItemPlayback.currentPlaybackTime-n.getSeekSeconds(n.mediaItemPlayback.nowPlayingItem).BACK;d<0?yield e.call(n):yield n.seekToTime(d,St.Interval)}))()}seekForward(e=this._seekToEnd){var n=this;return _async_to_generator$s((function*(){if(void 0===n.mediaItemPlayback.nowPlayingItem)return void Be.warn("Cannot seekForward when nowPlayingItem is not yet set.");const d=n.mediaItemPlayback.currentPlaybackTime+n.getSeekSeconds(n.mediaItemPlayback.nowPlayingItem).FORWARD;d>n.mediaItemPlayback.currentPlaybackDuration?yield e.call(n):yield n.seekToTime(d,St.Interval)}))()}seekToTime(e,n=St.Manual){var d=this;return _async_to_generator$s((function*(){if(void 0===d.mediaItemPlayback.nowPlayingItem)return void Be.warn("Cannot seekToTime when nowPlayingItem is not yet set.");const p=d.mediaItemPlayback.nowPlayingItem,h=d.mediaItemPlayback.currentPlaybackTime,y=d.mediaItemPlayback.currentPlayingDate,_=Math.min(Math.max(0,e),d.mediaItemPlayback.currentPlaybackDuration);let m;if(p.isLinearStream&&void 0!==y){const e=1e3*(_-h);m=new Date(y.getTime()+e)}yield d.mediaItemPlayback.seekToTime(_,n),d._dispatcher.publish(_t.playbackSeek,{item:p,startPosition:h,position:_,playingDate:m,startPlayingDate:y,seekReasonType:n})}))()}_seekToBeginning(){var e=this;return _async_to_generator$s((function*(){yield e.seekToTime(0,St.Interval)}))()}_seekToEnd(){var e=this;return _async_to_generator$s((function*(){yield e.seekToTime(e.mediaItemPlayback.currentPlaybackDuration,St.Interval)}))()}constructor(e,n){_define_property$t(this,"_dispatcher",void 0),_define_property$t(this,"mediaItemPlayback",void 0),_define_property$t(this,"canSeek",void 0),this._dispatcher=e,this.mediaItemPlayback=n,this.canSeek=!0}}const shuffleCollection=e=>{const n=[...e],{length:d}=n;for(let p=0;p0?` (${h.join(", ")})`:""))}function _define_property$s(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_without_properties$1(e,n){if(null==e)return{};var d,p,h=function(e,n){if(null==e)return{};var d,p,h={},y=Object.keys(e);for(p=0;p=0||(h[d]=e[d]);return h}(e,n);if(Object.getOwnPropertySymbols){var y=Object.getOwnPropertySymbols(e);for(p=0;p=0||Object.prototype.propertyIsEnumerable.call(e,d)&&(h[d]=e[d])}return h}const Fo=He.createChild("queue");class QueueItem{restrict(){return this.item.restrict()}constructor(e,n){var d,p;_define_property$s(this,"isAutoplay",!1),_define_property$s(this,"item",void 0),this.item=e,this.isAutoplay=null!==(p=null===(d=n)||void 0===d?void 0:d.isAutoplay)&&void 0!==p&&p}}function toQueueItems(e,n){return e.map(e=>new QueueItem(e,n))}function toMediaItems(e){return e.map(e=>e.item)}const parseQueueURLOption=e=>{if(!isQueueURLOption(e))return e;const{url:n}=e,d=_object_without_properties$1(e,["url"]),{contentId:p,kind:h,storefrontId:y}=formattedMediaURL(n);return h&&(d[h]=p),y&&(wo.storefrontId=y),Fo.debug("parseQueueURLOption",d),d},{queueItemsDidChange:Ko,queuePositionDidChange:Go}=So;class Queue{get isEmpty(){return 0===this.length}set isRestricted(e){this._isRestricted=e,this._isRestricted&&this._queueItems&&this._queueItems.forEach(e=>{e.restrict()})}get isRestricted(){return this._isRestricted}get appendTargetIndex(){let e=this.length;const n=this._queueItems.findIndex(e=>e.isAutoplay);return-1!==n&&this.positione.isAutoplay))}get unplayedAutoplayItems(){return toMediaItems(this._unplayedQueueItems.filter(e=>e.isAutoplay))}get userAddedItems(){return toMediaItems(this._queueItems.filter(e=>!e.isAutoplay))}get unplayedUserItems(){return toMediaItems(this._unplayedQueueItems.filter(e=>!e.isAutoplay))}get playableItems(){return toMediaItems(this._queueItems.filter(e=>canPlay(e.item,this.playbackMode)))}get unplayedPlayableItems(){return toMediaItems(this._unplayedQueueItems.filter(e=>canPlay(e.item,this.playbackMode)))}get length(){return this._queueItems.length}get nextPlayableItem(){if(-1!==this.nextPlayableItemIndex)return this.item(this.nextPlayableItemIndex)}get nextPlayableItemIndex(){return this._nextPlayableItemIndex=this.findPlayableIndexForward(),this._nextPlayableItemIndex}get position(){return this._position}set position(e){this._updatePosition(e)}get isInitiated(){return this.position>=0}get previousPlayableItem(){if(-1!==this.previousPlayableItemIndex)return this.item(this.previousPlayableItemIndex)}get previousPlayableItemIndex(){return this.findPlayableIndexBackward()}removeQueueItems(e){for(let n=this.length-1;n>=0;n--)e(this.queueItem(n),n)&&this.spliceQueueItems(n,1)}indexForItem(e){return("string"==typeof e?this._itemIDs:this.items).indexOf(e)}item(e){var n;return null===(n=this.queueItem(e))||void 0===n?void 0:n.item}get currentItem(){return this.item(this.position)}queueItem(e){var n;return null===(n=this._queueItems)||void 0===n?void 0:n[e]}updateItems(e){this._queueItems=toQueueItems(e),this._reindex(),this._dispatcher.publish(So.queueItemsDidChange,this.items)}get currentQueueItem(){return this.queueItem(this.position)}remove(e){if(deprecationWarning("remove",{message:"The queue remove function has been deprecated"}),e===this.position)throw new MKError(MKError.Reason.INVALID_ARGUMENTS);this.splice(e,1)}append(e=[]){return this.appendQueueItems(toQueueItems(e))}appendQueueItems(e=[]){return this.spliceQueueItems(this.appendTargetIndex,0,e)}splice(e,n,d=[]){return toMediaItems(this.spliceQueueItems(e,n,toQueueItems(d)))}spliceQueueItems(e,n,d=[],p=!0){d=d.filter(e=>{var n;return isPlayable(null===(n=e)||void 0===n?void 0:n.item,this.playbackMode)});const h=this._queueItems.splice(e,n,...d);return this._itemIDs.splice(e,n,...d.map(e=>e.item.id)),p&&(this._dispatcher.publish(_t.queueModified,{start:e,added:toMediaItems(d),removed:toMediaItems(h)}),this._dispatcher.publish(Ko,this.items)),h}reset(){const e=this.position;this._position=-1,this._dispatcher.publish(Go,{oldPosition:e,position:this.position})}_isSameItems(e){if(e.length!==this.length)return!1;const n=e.map(e=>e.id).sort(),d=[...this._itemIDs].sort();let p,h;try{p=JSON.stringify(n),h=JSON.stringify(d)}catch(Ut){return!1}return p===h}_reindex(){this._queueItems&&(this._itemIDs=this._queueItems.map(e=>e.item.id))}_updatePosition(e){if(e===this._position)return;const n=this._position;this._position=e;const d=this.item(e);d&&canPlay(d,this.playbackMode)||(this._position=this.findPlayableIndexForward(e)),this._position!==n&&this._dispatcher.publish(Go,{oldPosition:n,position:this._position})}findPlayableIndexForward(n=this.position){var d;if(this.isEmpty)return-1;if(this.isInitiated&&!indexInBounds([0,this.position],n))return-1;const p=null===(d=this.repeatable)||void 0===d?void 0:d.repeatMode;if(n0)for(let e=n-1;e>=0;e--){if(canPlay(this.item(e),this.playbackMode))return e}if(p===e.PlayerRepeatMode.all)for(let e=this.length-1;e>=n;e--){if(canPlay(this.item(e),this.playbackMode))return e}return-1}get _unplayedQueueItems(){const e=this.position<0?0:this.position;return this._queueItems.slice(e)}_getStartItemPosition(e){if(void 0===e)return-1;if("object"==typeof e&&"id"in e&&(e=e.id),"string"==typeof e)return this.indexForItem(e);const n=parseInt(""+e,10);return n>=0&&nisPlayable(e,this.playbackMode));this._queueItems=toQueueItems(d),this._reindex(),void 0!==n.descriptor.startWith&&(this.position=this._getStartItemPosition(n.descriptor.startWith))}}function isPlayable(n,d){return n.isPlayable||d!==e.PlaybackMode.FULL_PLAYBACK_ONLY&&void 0!==n.previewURL}function canPlay(e,n){return isPlayable(e,n)&&!function(e){return e.isRestricted}(e)&&!function(e){return e.isUnavailable}(e)}function indexInBounds(e,n){return e[0]<=n&&n<=e[1]}function _define_property$r(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_metadata$b(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}var Vo;e.PlayerShuffleMode=void 0,(Vo=e.PlayerShuffleMode||(e.PlayerShuffleMode={}))[Vo.off=0]="off",Vo[Vo.songs=1]="songs";const Ho="Shuffling is not supported in this playback method.";class BaseShuffler{set shuffle(e){Be.warn(Ho)}get shuffleMode(){return e.PlayerShuffleMode.off}set shuffleMode(e){Be.warn(Ho)}checkAndReshuffle(e){Be.warn(Ho)}constructor(){_define_property$r(this,"canSetShuffleMode",!1),_define_property$r(this,"queue",void 0)}}class Shuffler{get queue(){return this._queue}set queue(e){this._queue=e,this._unshuffledIDs=e.userAddedItems.map(e=>e.id),this.checkAndReshuffle(!1)}queueModifiedHandler(e,n){if(this._isSpliceFromShuffle)return void(this._isSpliceFromShuffle=!1);const{start:d,added:p,removed:h}=n;if(h.length>0){const e=h.map(e=>e.id);this._unshuffledIDs=this._unshuffledIDs.filter(n=>!e.includes(n))}p.length>0&&this._unshuffledIDs.splice(d,0,...p.map(e=>e.id))}set shuffle(n){this.shuffleMode=n?e.PlayerShuffleMode.songs:e.PlayerShuffleMode.off}get shuffleMode(){return this.mode}set shuffleMode(n){n!==this.shuffleMode&&n in e.PlayerShuffleMode&&(Be.debug(`mk: set shuffleMode from ${this.shuffleMode} to ${n}`),this.mode=n,this.mode===e.PlayerShuffleMode.songs?this.shuffleQueue():this.unshuffleQueue(),this.controller.nowPlayingItem&&(this._queue.position=this._queue.indexForItem(this.controller.nowPlayingItem.id)),this.dispatcher.publish(So.shuffleModeDidChange,this.shuffleMode))}checkAndReshuffle(n=!1){this.shuffleMode===e.PlayerShuffleMode.songs&&this.shuffleQueue(n)}shuffleQueue(e=!0){const{userAddedItems:n}=this._queue;if(n.length<=1)return n;const d=n.slice(0),p=this._queue.position>-1?d.splice(this._queue.position,1):[];let h=[];do{h=shuffleCollection(d)}while(d.length>1&&arrayEquals(h,d));const y=[...p,...h];this._isSpliceFromShuffle=!0,this._queue.spliceQueueItems(0,y.length,toQueueItems(y),e)}unshuffleQueue(e=!0){let n=[];const d=this._unshuffledIDs.reduce((e,n,d)=>(e[n]=d,e),{}),p=[];let h=0;const y=this._queue.item(this._queue.position);this._queue.userAddedItems.forEach(e=>{var _;const m=d[e.id];void 0===m&&p.push(e),n[m]=e,e.id===(null===(_=y)||void 0===_?void 0:_.id)&&(h=m)}),n=n.filter(Boolean);const _=n.concat(p);this._isSpliceFromShuffle=!0,this._queue.spliceQueueItems(0,_.length,toQueueItems(_),e),this._queue.position=h}constructor(n,{dispatcher:d}){_define_property$r(this,"controller",void 0),_define_property$r(this,"canSetShuffleMode",void 0),_define_property$r(this,"dispatcher",void 0),_define_property$r(this,"mode",void 0),_define_property$r(this,"_queue",void 0),_define_property$r(this,"_unshuffledIDs",void 0),_define_property$r(this,"_isSpliceFromShuffle",void 0),this.controller=n,this.canSetShuffleMode=!0,this.mode=e.PlayerShuffleMode.off,this._unshuffledIDs=[],this._isSpliceFromShuffle=!1,this.dispatcher=d,this.dispatcher.subscribe(_t.queueModified,this.queueModifiedHandler),this._queue=n.queue}}function asyncGeneratorStep$r(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$r(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$r(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$r(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$q(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$f(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$b("design:type",Function),_ts_metadata$b("design:paramtypes",[String,Object])],Shuffler.prototype,"queueModifiedHandler",null),function(e){e.continuous="continuous",e.serial="serial"}(qo||(qo={}));const{queueItemsDidChange:Wo}=So;class PlaybackController{get isDestroyed(){return this._isDestroyed}updateAutoplay(e,n){this.autoplayEnabled=n}constructContext(e,n){var d;let p=e.context;var h;return void 0!==e.featureName&&void 0===(null===(d=p)||void 0===d?void 0:d.featureName)&&(Be.warn("featureName is deprecated, pass it inside context"),p||(p={}),p.featureName=e.featureName),null!==(h=null!=p?p:n)&&void 0!==h?h:{}}get context(){return this._context}get continuous(){return this._continuous||this.hasAuthorization}set continuous(e){this._continuous=e}get autoplayEnabled(){return this._autoplayEnabled}set autoplayEnabled(e){this._autoplayEnabled=e}get previewOnly(){return this._mediaItemPlayback.previewOnly}get _dispatcher(){return this._services.dispatcher}get hasAuthorization(){return hasAuthorization(this.storekit)}get isPlaying(){return this._mediaItemPlayback.isPlaying}get isPrimaryPlayer(){return this._mediaItemPlayback.isPrimaryPlayer}set isPrimaryPlayer(e){this._mediaItemPlayback.isPrimaryPlayer=e}get isReady(){return this._mediaItemPlayback.isReady}get _mediaItemPlayback(){return this._services.mediaItemPlayback}get nowPlayingItem(){return this._mediaItemPlayback.nowPlayingItem}get nowPlayingItemIndex(){return this.queue?this.queue.position:-1}get playbackMode(){return this._playbackMode}set playbackMode(e){this._playbackMode=e,this.queue&&(this.queue.playbackMode=e)}get queue(){return this._queue}set queue(e){this._prepareQueue(e),this._queue=e,this._shuffler.queue=this._queue,this._queueModifier.queue=this._queue,this._dispatcher.publish(Wo,e.items)}get repeatMode(){return this._repeatable.repeatMode}set repeatMode(e){this._repeatable.repeatMode=e}get seekSeconds(){const{nowPlayingItem:e}=this;if(void 0!==e)return this._seekable.getSeekSeconds(e)}set shuffle(e){this._shuffler.shuffle=e}get shuffleMode(){return this._shuffler.shuffleMode}set shuffleMode(e){this._shuffler.shuffleMode=e}get storekit(){return this._storekit}set storekit(n){if(n){var d=this;n.addEventListener(xe.authorizationStatusWillChange,function(){var n=_async_to_generator$r((function*({authorizationStatus:n,newAuthorizationStatus:p}){n>Ae.DENIED&&p=0)return e.changeToMediaAtIndex(e.nowPlayingItemIndex);const{queue:n}=e;if(-1!==n.nextPlayableItemIndex)return e.changeToMediaAtIndex(n.nextPlayableItemIndex);n.isRestricted&&n.items.every(e=>e.isRestricted)&&e._dispatcher.publish(So.mediaPlaybackError,new MKError(MKError.Reason.CONTENT_RESTRICTED,"Content restricted"))}))()}playSingleMediaItem(e,n){var d=this;return _async_to_generator$r((function*(){yield Po(e,n),d._dispatcher.publish(So.queueItemsDidChange,[e]);const p=yield d._mediaItemPlayback.startMediaItemPlayback(e,!0);if(p){var h;const e={item:p,position:null!==(h=d._mediaItemPlayback.currentPlaybackTime)&&void 0!==h?h:0,playingDate:d._mediaItemPlayback.currentPlayingDate,userInitiated:!0};Be.debug("playSingleMediaItem: Dispatching DispatchTypes.playbackPlay event",e),d._dispatcher.publish(_t.playbackPlay,e)}}))()}onPlaybackStateDidChange(n,d){var p=this;return _async_to_generator$r((function*(){d.state===e.PlaybackStates.ended&&(p.continuous||p.repeatMode===e.PlayerRepeatMode.one)&&(Be.debug("controller detected track ended event, moving to next item."),p._dispatcher.publish(_t.applicationActivityIntent,{endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS,userInitiated:!1}),yield p._next())}))()}preload(){var e=this;return _async_to_generator$r((function*(){return e._mediaItemPlayback.preload()}))()}prepend(e,n){var d=this;return _async_to_generator$r((function*(){const p=yield d._dataForQueueOptions(e);return d._queueModifier.prepend(p,n),d.queue}))()}prepareToPlay(e){var n=this;return _async_to_generator$r((function*(){return n._mediaItemPlayback.prepareToPlay(e)}))()}showPlaybackTargetPicker(){this._mediaItemPlayback.showPlaybackTargetPicker()}seekBackward(){var e=this;return _async_to_generator$r((function*(){return e._seekable.seekBackward()}))()}seekForward(){var e=this;return _async_to_generator$r((function*(){return e._seekable.seekForward(e.skipToNextItem.bind(e))}))()}skipToNextItem(){var e=this;return _async_to_generator$r((function*(){return e._next({userInitiated:!0})}))()}skipToPreviousItem(){var e=this;return _async_to_generator$r((function*(){return e._previous({userInitiated:!0})}))()}getNewSeeker(){return this._mediaItemPlayback.getNewSeeker()}seekToTime(e,n){var d=this;return _async_to_generator$r((function*(){yield d._seekable.seekToTime(e,n)}))()}setQueue(e){var n=this;return _async_to_generator$r((function*(){return yield n.extractGlobalValues(e),yield n._mediaItemPlayback.stop(),n.returnQueueForOptions(e)}))()}extractGlobalValues(e){var n=this;return _async_to_generator$r((function*(){n._context=n.constructContext(e),void 0!==e.featureName&&e.context&&(Be.warn("featureName is deprecated, pass it inside context"),e.context.featureName=e.featureName)}))()}stop(e){var n=this;return _async_to_generator$r((function*(){yield n._mediaItemPlayback.stop(e)}))()}_changeToMediaAtIndex(e=0,n={}){var d=this;return _async_to_generator$r((function*(){if(d.queue.isEmpty)return;d.queue.position=e;const p=d.queue.item(d.queue.position);if(!p)return;var h;const y=yield d._mediaItemPlayback.startMediaItemPlayback(p,null!==(h=n.userInitiated)&&void 0!==h&&h);if(y||p.state!==F.unsupported)return y;yield d.skipToNextItem()}))()}_next(n={}){var d=this;return _async_to_generator$r((function*(){if(d.queue.isEmpty)return;const{userInitiated:p=!1}=n;return d.repeatMode===e.PlayerRepeatMode.one&&void 0!==d.queue.currentItem?(yield d.stop(_object_spread$f({userInitiated:p},n)),void(yield d.play())):(!p&&n.seamlessAudioTransition&&(d._dispatcher.publish(_t.playbackStop,_object_spread$f({userInitiated:p,endReasonType:e.PlayActivityEndReasonType.NATURAL_END_OF_TRACK},n)),n={userInitiated:n.userInitiated,seamlessAudioTransition:!0}),d._nextAtIndex(d.queue.nextPlayableItemIndex,n))}))()}_nextAtIndex(n,d={}){var p=this;return _async_to_generator$r((function*(){if(p.queue.isEmpty)return;const{_mediaItemPlayback:h}=p;var y;const _=null!==(y=d.userInitiated)&&void 0!==y&&y;if(n<0)return Be.debug("controller/index._next no next item available, stopping playback"),yield p.stop({userInitiated:_,seamlessAudioTransition:d.seamlessAudioTransition}),void(h.playbackState=e.PlaybackStates.completed);const m=p.isPlaying,g=h.currentPlaybackTime,b=yield p._changeToMediaAtIndex(n,{userInitiated:_});var S;return p._notifySkip(m,b,{userInitiated:_,seamlessAudioTransition:null!==(S=d.seamlessAudioTransition)&&void 0!==S&&S,position:g,direction:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS}),b}))()}_previous(n={}){var d=this;return _async_to_generator$r((function*(){if(d.queue.isEmpty)return;const{userInitiated:p=!1}=n;if(d.repeatMode===e.PlayerRepeatMode.one&&void 0!==d.queue.currentItem)return yield d.stop({endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_BACKWARDS,userInitiated:p}),void(yield d.play());const h=d.queue.previousPlayableItemIndex;if(p&&d.repeatMode===e.PlayerRepeatMode.none&&void 0!==d.nowPlayingItem&&-1===h)return yield d.stop({endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_BACKWARDS,userInitiated:!0}),void(yield d.play());if(-1===h)return;const y=d.isPlaying,_=d._mediaItemPlayback.currentPlaybackTime,m=yield d._changeToMediaAtIndex(h,{userInitiated:p});return d._notifySkip(y,m,{userInitiated:p,seamlessAudioTransition:!1,direction:e.PlayActivityEndReasonType.TRACK_SKIPPED_BACKWARDS,position:_}),m}))()}_notifySkip(n,d,p){const{userInitiated:h,direction:y,position:_,seamlessAudioTransition:m=!1}=p,g=this._dispatcher;m?(Be.debug("seamlessAudioTransition transition, PAF play"),g.publish(_t.playbackPlay,{item:d,position:0,endReasonType:e.PlayActivityEndReasonType.NATURAL_END_OF_TRACK})):n?d?g.publish(_t.playbackSkip,{item:d,userInitiated:h,direction:y,position:_}):g.publish(_t.playbackStop,{item:d,userInitiated:h,position:_}):d&&g.publish(_t.playbackPlay,_object_spread$f({item:d,position:0},h?{endReasonType:e.PlayActivityEndReasonType.MANUALLY_SELECTED_PLAYBACK_OF_A_DIFF_ITEM}:{}))}_prepareQueue(e){Be.debug("mk: _prepareQueue"),this.hasAuthorization&&(e.isRestricted=this.storekit.restrictedEnabled||!1),e.repeatable=this._repeatable}constructor(e){var n,d;_define_property$q(this,"_context",{}),_define_property$q(this,"_continuous",void 0),_define_property$q(this,"_autoplayEnabled",void 0),_define_property$q(this,"_playerOptions",void 0),_define_property$q(this,"_queue",void 0),_define_property$q(this,"_storekit",void 0),_define_property$q(this,"_queueModifier",void 0),_define_property$q(this,"_repeatable",void 0),_define_property$q(this,"_shuffler",void 0),_define_property$q(this,"_seekable",void 0),_define_property$q(this,"_services",void 0),_define_property$q(this,"_rollMonitor",void 0),_define_property$q(this,"_skipIntro",void 0),_define_property$q(this,"_upNext",void 0),_define_property$q(this,"_playbackMode",void 0),_define_property$q(this,"_isDestroyed",!0),this.onPlaybackStateDidChange=this.onPlaybackStateDidChange.bind(this),this._autoplayEnabled=null!==(d=null===(n=e)||void 0===n?void 0:n.autoplayEnabled)&&void 0!==d&&d,this._services=e.services,this._playerOptions=e,this.storekit=e.storekit,this._skipIntro=new SkipAvailable({controller:this,services:e.services}),this._upNext=new UpNextMonitor({controller:this,services:e.services}),this._rollMonitor=new RollMonitor({controller:this,services:e.services}),this._queueModifier=new BaseModifiableQueue,this._shuffler=new BaseShuffler,this._seekable=new BaseSeekable(this._mediaItemPlayback),this._repeatable=new BaseRepeatable,this._dispatcher.subscribe(So.autoplayEnabledDidChange,this.updateAutoplay),this._playbackMode=e.playbackMode}}!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$a("design:type",Function),_ts_metadata$a("design:paramtypes",[String,Boolean])],PlaybackController.prototype,"updateAutoplay",null);function rejectOnLast(){return Promise.reject("The last middleware in the stack should not call next")}function processMiddleware(e,...n){return e.length?function createNextFunction([e,...n]){return(...d)=>e(createNextFunction(n),...d)}([...e,rejectOnLast])(...n):Promise.reject("processMiddleware requires at mimimum one middleware function")}function parameterizeString(e,n){return function(e){try{return function recursiveTokenizeParameterizedString(e,n=[]){if(e.startsWith("{{")){const d=e.indexOf("}}");if(-1===d)throw new Error("UNCLOSED_PARAMETER");const p={type:Yo.Parameter,value:e.slice(2,d)};return d+2{switch(e.type){case Yo.Parameter:return e.value in n?encodeURIComponent(""+n[e.value]):`{{${e.value}}}`;case Yo.Static:default:return e.value}}).join("")}var Yo;function _define_property$p(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread_props$8(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var d=Object.keys(e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);n&&(p=p.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),d.push.apply(d,p)}return d}(Object(n)).forEach((function(d){Object.defineProperty(e,d,Object.getOwnPropertyDescriptor(n,d))})),e}function constructUrlMiddleware(e,n){let d=n.url;return d||(d=addPathToURL(n.baseUrl,n.path)),n.urlParameters&&(d=parameterizeString(d,n.urlParameters)),n.queryParameters&&(d=addQueryParamsToURL(d,n.queryParameters)),e(_object_spread_props$8(function(e){for(var n=1;n{throw new Error("window.fetch is not defined")});function _define_property$o(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$d(e){for(var n=1;n{if(void 0===e[n])throw new Error(`Session requires a valid SessionConfig, missing "${n}"`)}),this._config=e,this.middlewareStack=this.createMiddlewareStack()}createMiddlewareStack(){return Array.isArray(this.config.middleware)?[constructUrlMiddleware,...this.config.middleware,this.makeFetchMiddleware()]:[constructUrlMiddleware,this.makeFetchMiddleware()]}makeFetchMiddleware(){return"function"==typeof this.config.fetchFunction?fetchMiddlewareFactory(this.config.fetchFunction):zo}constructor(e){_define_property$o(this,"_config",void 0),_define_property$o(this,"middlewareStack",void 0),this.reconfigure(e)}}function _object_without_properties(e,n){if(null==e)return{};var d,p,h=function(e,n){if(null==e)return{};var d,p,h={},y=Object.keys(e);for(p=0;p=0||(h[d]=e[d]);return h}(e,n);if(Object.getOwnPropertySymbols){var y=Object.getOwnPropertySymbols(e);for(p=0;p=0||Object.prototype.propertyIsEnumerable.call(e,d)&&(h[d]=e[d])}return h}const Xo={music:{url:"https://api.music.apple.com"}};class MediaAPIV3{configure(e,n,d=Qo.Merge){this.storefrontId=n.storefrontId;const p=function(e){let n={};e.url&&(n.url=e.url);e.storefrontId&&(n.defaultUrlParameters={storefrontId:e.storefrontId});e.mediaUserToken&&(n.defaultOptions={fetchOptions:{headers:{"Media-User-Token":e.mediaUserToken}}});e.developerToken&&(n=deepmerge(n,{defaultOptions:{fetchOptions:{headers:{Authorization:"Bearer "+e.developerToken}}}}));e.options&&(n=deepmerge(n,e.options));return n}(n);if(this[e])this[e].session.reconfigure(p,d);else{var h;const n=new APISession(p),d=n.request.bind(n);d.session=n;const y="undefined"!=typeof process&&"test"===(null===(h=process.env)||void 0===h?void 0:h.NODE_ENV);Object.defineProperty(this,e,{value:d,writable:y,enumerable:!0})}}constructor(e){var n,d,p;p=void 0,(d="storefrontId")in(n=this)?Object.defineProperty(n,d,{value:p,enumerable:!0,configurable:!0,writable:!0}):n[d]=p;const{realmConfig:h}=e,y=_object_without_properties(e,["realmConfig"]);for(const m in Xo){var _;let e=deepmerge(Xo[m],y);const n=null===(_=h)||void 0===_?void 0:_[m];n&&(e=deepmerge(e,n)),this.configure(m,e)}}}function asyncGeneratorStep$p(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _define_property$m(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_metadata$9(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}class StationTrackLoader{activate(){this.dispatcher.unsubscribe(So.queuePositionDidChange,this.checkLoadMore),this.dispatcher.subscribe(So.queuePositionDidChange,this.checkLoadMore),this.isActive=!0}deactivate(){this.dispatcher.unsubscribe(So.queuePositionDidChange,this.checkLoadMore),this.isActive=!1}start(){return this.isActive||this.activate(),this.loadNextTracks()}checkLoadMore(){if(!(this.queue.isEmpty||this.queue.nextPlayableItemIndex>=0))return this.loadNextTracks()}loadNextTracks(){var e,n=this;return(e=function*(){var e;let d=[];const{apiManager:p}=n;if((null===(e=p)||void 0===e?void 0:e.api)instanceof MediaAPIV3){var h,y;d=null===(y=yield p.api.music("v1/me/stations/next-tracks/"+n.station.id,void 0,{fetchOptions:{method:"POST"}}))||void 0===y||null===(h=y.data)||void 0===h?void 0:h.data}else{var _;const e={};var m;To.features["enhanced-hls"]&&(e.extend={songs:["extendedAssetUrls"]}),d=null!==(m=yield null===(_=p.mediaAPI)||void 0===_?void 0:_.nextStationTracks(n.station.id,null,{queryParameters:e}))&&void 0!==m?m:[]}if(0===d.length)throw Be.warn("No track data is available for the current station",{stationId:n.station.id}),new MKError(MKError.Reason.CONTENT_UNAVAILABLE,"No track data is available for the current station.");const g=descriptorToMediaItems({context:n.context,loaded:d,container:n.station});n.queue.splice(n.queue.length,0,g)},function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$p(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$p(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}constructor(e,n,{dispatcher:d,apiManager:p},h={}){_define_property$m(this,"queue",void 0),_define_property$m(this,"station",void 0),_define_property$m(this,"context",void 0),_define_property$m(this,"apiManager",void 0),_define_property$m(this,"dispatcher",void 0),_define_property$m(this,"isActive",void 0),this.queue=e,this.station=n,this.context=h,this.isActive=!1,this.dispatcher=d,this.apiManager=p}}var Zo,ea;!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$9("design:type",Function),_ts_metadata$9("design:paramtypes",[])],StationTrackLoader.prototype,"checkLoadMore",null),function(e){e.artist="artist",e.song="song",e.station="station",e.radioStation="radioStation"}(Zo||(Zo={})),function(e){e.BEATS1="beats1"}(ea||(ea={}));const isIdentityQueue=e=>e&&void 0!==e.identity;function asyncGeneratorStep$o(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$o(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$o(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$o(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$l(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_metadata$8(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}const{queueIsReady:ta}=So;class ContinuousPlaybackController extends PlaybackController{get continuous(){return!0}set continuous(e){if(!0!==e)throw new MKError(MKError.Reason.UNSUPPORTED_ERROR,"Continuous playback cannot be disabled for station queues.")}get context(){return function(e){for(var n=1;nsuper.pause;return _async_to_generator$o((function*(){if(!n.isLive)return _superprop_get_pause().call(n,e);n.generateMethodNotAvailable("pause")}))()}skipToPreviousItem(){var e=this,_superprop_get_skipToPreviousItem=()=>super.skipToPreviousItem;return _async_to_generator$o((function*(){if(!e.isLive)return _superprop_get_skipToPreviousItem().call(e);e.generateMethodNotAvailable("skipToPreviousItem")}))()}_dataForQueueOptions(e){var n=this,_superprop_get__dataForQueueOptions=()=>super._dataForQueueOptions;return _async_to_generator$o((function*(){const d=yield _superprop_get__dataForQueueOptions().call(n,e);return n.isLive&&(d.loaded=n.station),d}))()}returnQueueForOptions(e){var n=this;return _async_to_generator$o((function*(){var d,p,h;const y=isIdentityQueue(e)?yield n.loadStationByIdentity(e.identity):yield n.loadStationByStationId(n.generateStationId(e));if(void 0===y)return Promise.reject(new MKError(MKError.Reason.UNSUPPORTED_ERROR,"Cannot load requested station"));n.station=y,n.isLive=isIdentityQueue(e)||!!(null===(d=y)||void 0===d?void 0:d.isLive)||!!(null===(h=y)||void 0===h||null===(p=h.attributes)||void 0===p?void 0:p.isLive);const _={services:{runtime:n._services.runtime,dispatcher:n._services.dispatcher},descriptor:yield n._dataForQueueOptions(e),playbackMode:n.playbackMode};return n.queue=new Queue(_),n.isLive||(n.trackLoader=new StationTrackLoader(n.queue,y,{dispatcher:n._dispatcher,apiManager:n._services.apiManager},n.context),yield n.trackLoader.start()),n._seekable=n.isLive?new BaseSeekable(n._mediaItemPlayback):new Seekable(n._dispatcher,n._mediaItemPlayback),n._dispatcher.publish(ta,n.queue.items),n.queue}))()}getNewSeeker(){return this.hasCapabilities(Io.SEEK)?super.getNewSeeker():new UnsupportedSeeker}skipToNextItem(){var e=this,_superprop_get_skipToNextItem=()=>super.skipToNextItem;return _async_to_generator$o((function*(){if(!e.isLive)return _superprop_get_skipToNextItem().call(e);e.generateMethodNotAvailable("skipToNextItem")}))()}generateMethodNotAvailable(e){Be.warn(e+" is not supported for this type of playback")}generateStationId(e){let n;if(isQueueURLOption(e)){const{contentId:d,kind:p,storefrontId:h}=formattedMediaURL(e.url);p&&(e[p]=d),h&&(wo.storefrontId=h),n=p}const d=e;if(d.artist)return"ra."+d.artist;if(d.song)return"ra."+d.song;if(d.station)return d.station;if(d.radioStation)return d.radioStation;throw new MKError(MKError.Reason.UNSUPPORTED_ERROR,n?n+" is not a supported option. Use setQueue instead.":"Unsupported options specified for setStationQueue. You may want setQueue instead.")}loadStationByIdentity(e){var n=this;return _async_to_generator$o((function*(){var d,p,h;const{apiManager:y}=n._services;if((null===(d=y)||void 0===d?void 0:d.api)instanceof MediaAPIV3){var _,m,g;return null===(g=yield y.api.music("v1/catalog/{{storefrontId}}/stations",{filter:{identity:e}}))||void 0===g||null===(m=g.data)||void 0===m||null===(_=m.data)||void 0===_?void 0:_[0]}const b=yield null===(h=y)||void 0===h||null===(p=h.mediaAPI)||void 0===p?void 0:p.stations(void 0,{filter:{identity:e}});return b&&b[0]}))()}loadStationByStationId(e){var n=this;return _async_to_generator$o((function*(){var d,p,h;const{apiManager:y}=n._services;if((null===(d=y)||void 0===d?void 0:d.api)instanceof MediaAPIV3){var _,m,g;return null===(g=yield y.api.music("v1/catalog/{{storefrontId}}/stations/"+e))||void 0===g||null===(m=g.data)||void 0===m||null===(_=m.data)||void 0===_?void 0:_[0]}return null===(h=y)||void 0===h||null===(p=h.mediaAPI)||void 0===p?void 0:p.station(e)}))()}activate(){super.activate(),this.trackLoader&&this.trackLoader.activate()}deactivate(){var e=this,_superprop_get_deactivate=()=>super.deactivate;return _async_to_generator$o((function*(){yield _superprop_get_deactivate().call(e),e.trackLoader&&e.trackLoader.deactivate()}))()}constructor(e){super(e),_define_property$l(this,"type",qo.continuous),_define_property$l(this,"_isLive",!1),_define_property$l(this,"trackLoader",void 0),_define_property$l(this,"station",void 0),this._continuous=!0}}function asyncGeneratorStep$n(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _define_property$k(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_decorate$7(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$7(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([Bind(),_ts_metadata$8("design:type",Function),_ts_metadata$8("design:paramtypes",[void 0===Io?Object:Io])],ContinuousPlaybackController.prototype,"hasCapabilities",null);class PercentageWatcher{startMonitor(){this.dispatcher.unsubscribe(So.playbackDurationDidChange,this.updateThreshold),this.dispatcher.unsubscribe(So.playbackTimeDidChange,this.handleTimeChange),this.dispatcher.subscribe(So.playbackDurationDidChange,this.updateThreshold),this.dispatcher.subscribe(So.playbackTimeDidChange,this.handleTimeChange)}stopMonitor(){this.dispatcher.unsubscribe(So.playbackDurationDidChange,this.updateThreshold),this.dispatcher.unsubscribe(So.playbackTimeDidChange,this.handleTimeChange),this.threshold=-1}handleTimeChange(e,{currentPlaybackDuration:n,currentPlaybackTime:d}){var p,h=this;return(p=function*(){h.threshold<0&&h.updateThreshold(e,{duration:n}),d0&&_{const d=[],p=e.namedQueueOptions;for(const h in n)Object.keys(p).includes(h)&&d.push([h,p[h]]);return d},ia=function(){var e=_async_to_generator$l((function*(e,n,d){const[p]=d,h=n[p];if(!Array.isArray(h))return loadSelectedQueueValue(e,n,d,h);const y=new Map;h.forEach(e=>{const n=e.indexOf("."),d=-1===n?"":e.substring(0,n);y.has(d)||y.set(d,[]);const p=y.get(d);p&&p.push(e)});const _=(yield Promise.all([...y.values()].map(p=>loadSelectedQueueValue(e,n,d,p)))).reduce((e,n)=>{var d;return(n=null!==(d=n.data)&&void 0!==d?d:n).forEach(n=>{e.set(n.id,n)}),e},new Map),m=[];return h.forEach(e=>{const n=_.get(e);n&&m.push(n)}),m}));return function(n,d,p){return e.apply(this,arguments)}}();function loadSelectedQueueValue(e,n,d,p){return _loadSelectedQueueValue.apply(this,arguments)}function _loadSelectedQueueValue(){return(_loadSelectedQueueValue=_async_to_generator$l((function*(e,n,d,p){const h=yield e.getAPIForItem(Array.isArray(p)?p[0]:p);return h instanceof MediaAPIV3?loadSelectedQueueValueV3(h,n,d,p):loadSelectedQueueValueV2(h,n,d,p)}))).apply(this,arguments)}function loadSelectedQueueValueV2(e,n,d,p){return _loadSelectedQueueValueV2.apply(this,arguments)}function _loadSelectedQueueValueV2(){return(_loadSelectedQueueValueV2=_async_to_generator$l((function*(e,n,d,p){const[,h]=d;let y=n.parameters;To.features["enhanced-hls"]&&(y=_object_spread_props$6(_object_spread$b({},y),{extend:{songs:["extendedAssetUrls"]}}));let _=yield e[h.apiMethod](p,y);return h.loadedQueueTransform&&(_=h.loadedQueueTransform(_)),Array.isArray(p)||(yield loadRelationshipData(e,h.relationshipMethod,_)),_}))).apply(this,arguments)}function loadSelectedQueueValueV3(e,n,d,p){return _loadSelectedQueueValueV3.apply(this,arguments)}function _loadSelectedQueueValueV3(){return(_loadSelectedQueueValueV3=_async_to_generator$l((function*(e,n,d,p){const[h]=d,y=Array.isArray(p),_=T(y?""+p[0]:""+p),m=/^(?:playlists?|albums?)$/i.test(h);let g=dasherize(h);g.endsWith("s")||(g+="s");let b=(_?"/v1/me/library":"/v1/catalog/{{storefrontId}}")+"/"+g;y||(b+="/{{id}}");const S={};y&&(S.ids=p),_&&m&&(S.include="tracks");const P=yield e.music(b,S,{urlParameters:{id:p}});return y?P.data.data:P.data.data[0]}))).apply(this,arguments)}function asyncGeneratorStep$k(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$k(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$k(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$k(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$h(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$a(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$6(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}const na=["library-songs","songs"],isAutoplaySupportedForType=e=>na.includes(e),normalizeTypeForAutoplay=(e,n)=>(T(e)&&!(null!=n?n:"").startsWith("library-")?"library-":"")+normalizeContentType(n);class AutoplayTrackLoader{activate(){this.isActive||(this.dispatcher.unsubscribe(So.queuePositionDidChange,this.onQueueChanged),this.dispatcher.subscribe(So.queuePositionDidChange,this.onQueueChanged),this.dispatcher.unsubscribe(So.repeatModeDidChange,this.onRepeatableChanged),this.dispatcher.subscribe(So.repeatModeDidChange,this.onRepeatableChanged),this.isActive=!0)}deactivate(){this.isActive&&(this.dispatcher.unsubscribe(So.queuePositionDidChange,this.onQueueChanged),this.dispatcher.unsubscribe(So.repeatModeDidChange,this.onRepeatableChanged),this.isActive=!1,this.station=void 0,this.queue.hasAutoplayStation=!1)}start(){if(!this.isActive)return this.activate(),this.loadNextTracks()}stop(){this.isActive&&(this.deactivate(),this.cleanupQueue())}onRepeatableChanged(){this.repeatable.repeatMode===e.PlayerRepeatMode.none?this.checkLoadMore():this.cleanupQueue()}onQueueChanged(){if(!(this.queue.nextPlayableItemIndex>=0))return this.checkLoadMore()}get api(){var e;const n=this.apiManager.mediaAPI;var d;return null!==(d=null===(e=n)||void 0===e?void 0:e.v3)&&void 0!==d?d:n}checkLoadMore(){var e;const n=null!==(e=this.queue.unplayedAutoplayItems.length)&&void 0!==e?e:0,d=To.autoplay.maxUpcomingTracksToMaintain;if(!(this.queue.isEmpty||this.queue.unplayedUserItems.length>To.autoplay.maxQueueSizeForAutoplay))return n!(n<=this.queue.position)&&!!e.isAutoplay)}loadNextTracks(n=To.autoplay.maxUpcomingTracksToMaintain){var d=this;return _async_to_generator$k((function*(){var p;if(d.repeatable.repeatMode!==e.PlayerRepeatMode.none)return;let h,{station:y}=d;if(d.station){try{var _,m;h=yield d.api.music("v1/me/stations/next-tracks/"+d.station.id,{limit:n},{fetchOptions:{method:"POST"}}),h=null===(m=h)||void 0===m||null===(_=m.data)||void 0===_?void 0:_.data}catch(Ut){return}if(!d.isActive)return}else{var g,b;const e=yield d.startStation(n);if(!e||!d.isActive)return void(d.queue.hasAutoplayStation=!1);var S;if(y=d.station=e.station,d.queue.hasAutoplayStation=!0,h=e.tracks,!(null===(b=e)||void 0===b||null===(g=b.tracks)||void 0===g?void 0:g.length))Be.warn("No track data is available for the current station",{stationId:null===(S=y)||void 0===S?void 0:S.id})}const P=descriptorToMediaItems({context:_object_spread_props$5(_object_spread$a({},d.context),{featureName:"now_playing",reco_id:(null===(p=d.context.featureName)||void 0===p?void 0:p.startsWith("listen-now"))?void 0:d.context.reco_id}),loaded:h,container:y});d.queue.appendQueueItems(toQueueItems(P,{isAutoplay:!0}))}))()}startStation(e){var n=this;return _async_to_generator$k((function*(){var d;const{userAddedItems:p}=n.queue;var h;const y=null===(d=null!==(h=p[p.length-2])&&void 0!==h?h:p[p.length-1])||void 0===d?void 0:d.container,_=y?{container:{id:y.id,type:y.type}}:void 0,m=n.queue.items.slice(-1*To.autoplay.maxQueueSizeInRequest).reduce((e,{id:d,type:p})=>{const h=normalizeTypeForAutoplay(d,p);return isAutoplaySupportedForType(h)&&!n.errorIds.has(d)&&e.push({id:d,type:h,meta:_}),e},[]);if(0===m.length)return;const g={data:m};let b;try{var S,P;b=yield n.api.music("v1/me/stations/continuous",{"limit[results:tracks]":e,with:["tracks"]},{fetchOptions:{method:"POST",body:JSON.stringify(g,void 0,2)}}),b=null===(P=b)||void 0===P||null===(S=P.data)||void 0===S?void 0:S.results}catch(Ut){m.forEach(e=>n.errorIds.add(e.id))}return b}))()}constructor(e,n,{dispatcher:d,apiManager:p},h={}){_define_property$h(this,"queue",void 0),_define_property$h(this,"repeatable",void 0),_define_property$h(this,"context",void 0),_define_property$h(this,"apiManager",void 0),_define_property$h(this,"dispatcher",void 0),_define_property$h(this,"isActive",void 0),_define_property$h(this,"errorIds",void 0),_define_property$h(this,"station",void 0),this.queue=e,this.repeatable=n,this.context=h,this.isActive=!1,this.errorIds=new Set,this.dispatcher=d,this.apiManager=p}}function asyncGeneratorStep$j(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$j(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$j(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$j(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$g(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$9(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$5(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}_ts_decorate$6([Bind(),_ts_metadata$6("design:type",Function),_ts_metadata$6("design:paramtypes",[])],AutoplayTrackLoader.prototype,"onRepeatableChanged",null),_ts_decorate$6([Bind(),_ts_metadata$6("design:type",Function),_ts_metadata$6("design:paramtypes",[])],AutoplayTrackLoader.prototype,"onQueueChanged",null),_ts_decorate$6([(e,n,d)=>{const p=d.value,h="_singlePromise_"+n,y="undefined"!=typeof Symbol?Symbol(h):h;return d.value=function(...e){if(this[y])return this[y];const n=this[y]=p.apply(this,e),reset=()=>{this[y]=void 0};return n.then(reset,reset),n},d},_ts_metadata$6("design:type",Function),_ts_metadata$6("design:paramtypes",[Number])],AutoplayTrackLoader.prototype,"loadNextTracks",null);const{queueIsReady:oa}=So;var aa,sa;!function(e){e.album="album",e.musicVideo="musicVideo",e.playlist="playlist",e.song="song"}(aa||(aa={})),function(e){e.albums="albums",e.musicVideos="musicVideos",e.playlists="playlists",e.songs="songs"}(sa||(sa={}));class SerialPlaybackController extends PlaybackController{get autoplayEnabled(){return this._autoplayEnabled}set autoplayEnabled(e){var n;this._autoplayEnabled=e;const d=e?"start":"stop";null===(n=this._autoplayTrackLoader)||void 0===n||n[d]()}activate(){super.activate(),this._preloader.activate(),this._dispatcher.subscribe(Nn,this.onSeamlessAudioTransition),this._dispatcher.subscribe(So.repeatModeDidChange,this.onRepeatModeChange)}deactivate(){var e=this,_superprop_get_deactivate=()=>super.deactivate;return _async_to_generator$j((function*(){var n;yield _superprop_get_deactivate().call(e),e._preloader.deactivate(),e._dispatcher.unsubscribe(Nn,e.onSeamlessAudioTransition),e._dispatcher.unsubscribe(So.repeatModeDidChange,e.onRepeatModeChange),null===(n=e._autoplayTrackLoader)||void 0===n||n.stop()}))()}onSeamlessAudioTransition(n,d){Be.debug("controller handling seamless audio transition, PAF stop",d),this._next({userInitiated:!1,seamlessAudioTransition:!0,endReasonType:e.PlayActivityEndReasonType.NATURAL_END_OF_TRACK,position:d.previous.playbackDuration/1e3,isPlaying:!1})}hasCapabilities(e){var n,d,p;return e===Io.SKIP_PREVIOUS||(e!==Io.REPEAT&&e!==Io.SHUFFLE||!(null===(d=this.queue)||void 0===d||null===(n=d.currentQueueItem)||void 0===n?void 0:n.isAutoplay))&&((e!==Io.SEEK&&e!==Io.PAUSE||!(null===(p=this.nowPlayingItem)||void 0===p?void 0:p.isAssetScrubbingDisabled))&&super.hasCapabilities(e))}onRepeatModeChange(){var e;this.queue.nextPlayableItem&&(Be.info("SerialPlaybackController: preparing new item after RepeatMode change",null===(e=this.queue.nextPlayableItem)||void 0===e?void 0:e.title),this.prepareToPlay(this.queue.nextPlayableItem,!0))}prepareToPlay(n,d=!1){var p=this;return _async_to_generator$j((function*(){if(Be.debug("mk: SerialController - prepareToPlay - ",{item:n,preload:d}),n.isPlayable)return p._mediaItemPlayback.prepareToPlay(n).catch(n=>{const h=!d&&-1===[MKError.Reason.DEVICE_LIMIT,MKError.Reason.STREAM_UPSELL].indexOf(n.reason);if(p.continuous&&h)return p._dispatcher.publish(_t.applicationActivityIntent,{endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS,userInitiated:!1}),p._next();throw n})}))()}prepend(e,n){var d=this,_superprop_get_prepend=()=>super.prepend;return _async_to_generator$j((function*(){const p=yield _superprop_get_prepend().call(d,e,n);if(d.shouldTransitionSeamlessly){const e=d.queue,n=e.position,p=e.item(n+1);Be.debug("prepend preparing ",p.title),yield d._mediaItemPlayback.prepareToPlay(p)}return p}))()}returnQueueForOptions(e){var n=this;return _async_to_generator$j((function*(){void 0!==(e=parseQueueURLOption(e)).startPosition&&(deprecationWarning("startPosition",{message:"startPosition has been deprecated in favor of startWith"}),void 0===e.startWith&&(e.startWith=e.startPosition));const d=yield n._dataForQueueOptions(e),p={services:{runtime:n._services.runtime,dispatcher:n._services.dispatcher,mediaItemPlayback:n._services.mediaItemPlayback},descriptor:d,playbackMode:n.playbackMode};if(void 0!==e.shuffleMode&&(n.shuffleMode=e.shuffleMode),n.queue=new Queue(p),"number"==typeof e.startTime){const d=n.queue.nextPlayableItem;d&&n._mediaItemPlayback.playOptions.set(d.id,{startTime:e.startTime})}if(0===n.queue.length)throw Be.warn("No item data is available for the current media queue",e),new MKError(MKError.Reason.CONTENT_UNAVAILABLE,"No item data is available for the current media queue.");return n._autoplayTrackLoader&&n._autoplayTrackLoader.deactivate(),n._autoplayTrackLoader=new AutoplayTrackLoader(n.queue,n._repeatable,{dispatcher:n._dispatcher,apiManager:n._services.apiManager},n._context),n.autoplayEnabled&&n.hasCapabilities(Io.AUTOPLAY)&&n._autoplayTrackLoader.start(),n._dispatcher.publish(oa,n.queue.items),n.queue}))()}_dataForQueueOptions(e){var n=this,_superprop_get__dataForQueueOptions=()=>super._dataForQueueOptions;return _async_to_generator$j((function*(){var d;const p=e,h=((e,n)=>{const d=getNamedQueueOptions(e,n);if(d.length>1)throw new MKError(MKError.Reason.UNSUPPORTED_ERROR,"Queues with multiple media types are not supported.");if(0===d.length)return;const[p]=d,[h,y]=p;if(Array.isArray(n[h])!==y.isPlural)throw new MKError(MKError.Reason.UNSUPPORTED_ERROR,y.isPlural?`Queue option ${h} must be an array of id values`:`Queue option ${h} must be a single id value`);return p})(n._services.apiManager.apiService,e);return void 0===h||((null===(d=n.storekit)||void 0===d?void 0:d.restrictedEnabled)&&(e.parameters=_object_spread_props$4(_object_spread$9({},e.parameters),{restrict:"explicit"})),p.loaded=yield ia(n._services.apiManager.apiService,e,h)),_object_spread$9({},yield _superprop_get__dataForQueueOptions().call(n,e),p)}))()}_changeToMediaAtIndex(e=0,n={userInitiated:!1}){var d=this,_superprop_get__changeToMediaAtIndex=()=>super._changeToMediaAtIndex;return _async_to_generator$j((function*(){const p=yield _superprop_get__changeToMediaAtIndex().call(d,e,n),h=d.queue.nextPlayableItem;return h&&d.shouldTransitionSeamlessly&&(yield d.prepareToPlay(h)),p}))()}_prepareQueue(e){super._prepareQueue(e),this._shuffler.checkAndReshuffle()}get shouldTransitionSeamlessly(){return this._isSeamlessAudioTransitionsEnabled&&this.hasAuthorization&&!this.previewOnly}constructor(e){var n,d;super(e),_define_property$g(this,"type",qo.serial),_define_property$g(this,"_preloader",void 0),_define_property$g(this,"_isSeamlessAudioTransitionsEnabled",void 0),_define_property$g(this,"_autoplayTrackLoader",void 0),this._queue=new Queue(e),this._repeatable=new Repeatable(this._dispatcher),this._seekable=new Seekable(this._dispatcher,this._mediaItemPlayback),this._shuffler=new Shuffler(this,{dispatcher:this._dispatcher}),this._queueModifier=new ModifiableQueue(this._queue,this._mediaItemPlayback),this._isSeamlessAudioTransitionsEnabled=!!(null===(d=e)||void 0===d||null===(n=d.bag)||void 0===n?void 0:n.features["seamless-audio-transitions"]);const p={controller:this,services:e.services};this._preloader=new Preloader(p)}}function _define_property$f(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}_ts_decorate$5([Bind(),_ts_metadata$5("design:type",Function),_ts_metadata$5("design:paramtypes",[void 0,void 0])],SerialPlaybackController.prototype,"onSeamlessAudioTransition",null),_ts_decorate$5([Bind(),_ts_metadata$5("design:type",Function),_ts_metadata$5("design:paramtypes",[void 0===Io?Object:Io])],SerialPlaybackController.prototype,"hasCapabilities",null),_ts_decorate$5([Bind(),_ts_metadata$5("design:type",Function),_ts_metadata$5("design:paramtypes",[])],SerialPlaybackController.prototype,"onRepeatModeChange",null);class MKDialog{static presentError(e){const n=e.dialog;void 0!==n?MKDialog.serverDialog(n).present():new MKDialog(e.message).present()}static serverDialog(e){const n=new this(e.message,e.explanation);return e.okButtonAction&&e.okButtonAction.url&&(n._okButtonActionURL=e.okButtonAction.url),e.okButtonString&&(n._okButtonString=e.okButtonString),e.cancelButtonString&&(n._cancelButtonString=e.cancelButtonString),n}static clientDialog(e){const n=new this(e.message,e.explanation);return e.okButtonAction&&(n._okButtonAction=e.okButtonAction),e.cancelButtonAction&&(n._cancelButtonAction=e.cancelButtonAction),e.okButtonString&&(n._okButtonString=e.okButtonString),e.cancelButtonString&&(n._cancelButtonString=e.cancelButtonString),n}get actions(){return this.cancelButton?`${this.cancelButton}${this.okButton}
`:`${this.okButton}
`}get cancelButton(){if("string"==typeof this._cancelButtonString)return``}set cancelButton(e){this._cancelButtonString=e}get explanation(){return`${this._explanation}
`}get hasOKButtonAction(){return!!this._okButtonActionURL||!!this._okButtonAction}get message(){return`${this._message}
`}get okButton(){return this.hasOKButtonAction&&this._okButtonActionURL?``:``}present(){const e=document.createDocumentFragment(),n=document.createElement("div");n.id=this.scrimId,e.appendChild(n);const d=document.createElement("div");d.id=this.id,d.classList.add("mk-dialog"),d.setAttribute("role","alertDialog"),d.setAttribute("aria-modal","true"),d.setAttribute("aria-labeledby","mk-dialog-title"),d.setAttribute("aria-describedby","mk-dialog-explanation");let p=`\n \n ${this.message}\n ${this.explanation}\n
`;p=`\n ${p}\n ${this.actions}\n `,d.innerHTML=p,e.appendChild(d),document.body.appendChild(e),document.querySelector(`#${d.id} #mk-dialog-actions *:first-child`).focus(),setTimeout(()=>{document.querySelector(`#${d.id} #mk-dialog-actions *:first-child`).addEventListener("click",()=>{this._cancelButtonAction&&this._cancelButtonAction(),d.parentElement.removeChild(d),n.parentElement.removeChild(n)}),this.hasOKButtonAction&&(this._okButtonActionURL?document.querySelector(`#${d.id} #mk-dialog-actions *:last-child`).addEventListener("click",e=>{window.open(e.target.dataset.okActionUrl,"_blank"),d.parentElement.removeChild(d),n.parentElement.removeChild(n)}):this._okButtonAction&&document.querySelector(`#${d.id} #mk-dialog-actions *:last-child`).addEventListener("click",e=>{this._okButtonAction(),d.parentElement.removeChild(d),n.parentElement.removeChild(n)}))})}_appendStyle(e){const n=document.createElement("style");n.id=this.styleId,n.styleSheet?n.styleSheet.cssText=e:n.innerHTML=e,document.body.appendChild(n)}constructor(e,n=""){_define_property$f(this,"_message",void 0),_define_property$f(this,"_explanation",void 0),_define_property$f(this,"id",void 0),_define_property$f(this,"scrimId",void 0),_define_property$f(this,"styleId",void 0),_define_property$f(this,"_cancelButtonString",void 0),_define_property$f(this,"_cancelButtonAction",void 0),_define_property$f(this,"_okButtonAction",void 0),_define_property$f(this,"_okButtonActionURL",void 0),_define_property$f(this,"_okButtonString",void 0),this._message=e,this._explanation=n,this.id="musickit-dialog",this.scrimId=this.id+"-scrim",this.styleId=this.id+"-style",this._okButtonString="OK",[this.id,this.scrimId,this.styleId].forEach(e=>{try{const n=document.getElementById(e);n.parentElement.removeChild(n)}catch(Ut){}}),this._appendStyle("\n#musickit-dialog {\n --mk-dialog-background: rgba(255, 255, 255, 1);\n --mk-dialog-text: rgba(0, 0, 0, 0.95);\n --mk-dialog-border: rgba(0, 0, 0, 0.07);\n --mk-dialog-scrim: rgba(255, 255, 255, 0.8);\n --mk-dialog-primary: rgba(0, 122, 255, 1);\n}\n\n@media (prefers-color-scheme: dark) {\n #musickit-dialog {\n --mk-dialog-background: rgba(30, 30, 30, 1);\n --mk-dialog-text: rgba(255, 255, 255, 0.85);\n --mk-dialog-border: rgba(255, 255, 255, 0.1);\n --mk-dialog-scrim: rgba(38, 38, 38, 0.8);\n --mk-dialog-primary: rgba(8, 132, 255, 1);\n }\n}\n\n#musickit-dialog-scrim {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.35);\n}\n\n#musickit-dialog * {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n -ms-touch-action: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n font-family: -apple-system, SF UI Text, Helvetica Neue, Helvetica, sans-serif;\n font-size: 15px;\n line-height: 20px;\n}\n\n#musickit-dialog *:focus { outline: 0; }\n\n#musickit-dialog {\n display: -webkit-box;\n display: -moz-box;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-direction: column;\n -moz-flex-direction: column;\n flex-direction: column;\n -webkit-justify-content: space-between;\n -moz-justify-content: space-between;\n justify-content: space-between;\n min-width: 277px;\n max-width: 290px;\n min-height: 109px;\n background: var(--mk-dialog-background);\n box-shadow: 0px 0px 9px rgba(0, 0, 0, 0.18);\n border-radius: 10px;\n color: var(--mk-dialog-text);\n position: fixed;\n top: 50%;\n left: 50%;\n margin-left: -142px;\n margin-top: -67px;\n z-index: 9999999999999999999999999;\n}\n\n#musickit-dialog #mk-dialog-body {\n display: -webkit-box;\n display: -moz-box;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-direction: column;\n -moz-flex-direction: column;\n flex-direction: column;\n flex-grow: 1;\n -webkit-justify-content: space-evenly;\n -moz-justify-content: space-evenly;\n justify-content: space-evenly;\n -webkit-align-items: stretch;\n align-items: stretch;\n padding: 10px 20px;\n min-height: 74px;\n text-align: center;\n}\n\n#musickit-dialog .mk-dialog h5 {\n font-weight: 500;\n line-height: 20px;\n margin: 7px 0 0 0;\n padding: 0;\n}\n\n#musickit-dialog .mk-dialog p {\n margin: 0 0 7px 0;\n padding: 0;\n paddin-top: 3px;\n line-height: 18px;\n font-size: 13px;\n font-weight: 300;\n}\n\n#musickit-dialog #mk-dialog-actions {\n border-top: 1px solid var(--mk-dialog-border);\n display: -webkit-box;\n display: -moz-box;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-direction: row;\n -moz-flex-direction: colrowumn;\n flex-direction: row;\n max-height: 41px;\n min-height: 34px;\n -webkit-justify-self: flex-end;\n -moz-justify-self: flex-end;\n justify-self: flex-end;\n}\n\n#musickit-dialog #mk-dialog-actions button {\n flex-grow: 1;\n border: 0;\n background: none;\n color: var(--mk-dialog-primary);\n padding: 0;\n margin: 0;\n min-height: 34px;\n height: 41px;\n text-align: center;\n}\n\n#musickit-dialog #mk-dialog-actions *:nth-child(2) {\n border-left: 1px solid var(--mk-dialog-border);\n font-weight: 500;\n}\n")}}var ca;function asyncGeneratorStep$i(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _define_property$e(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}!function(e){e.MEDIA_API="media-api",e.UTS_CLIENT="uts-client"}(ca||(ca={}));class APIServiceManager{get api(){return this.getApiByType(this._defaultAPI)}get apiService(){if(void 0!==this._defaultAPI)return this._apisByType[this._defaultAPI];Be.error("There is no API instance configured")}get mediaAPI(){return this.getApiByType(ca.MEDIA_API)}get utsClient(){return this.getApiByType(ca.UTS_CLIENT)}getApiByType(e){let n;if(void 0!==e&&(n=this._apisByType[e]),void 0===n||void 0===n.api)throw new MKError(MKError.Reason.CONFIGURATION_ERROR,"There is no API instance configured for the requested type: "+e);return n.api}set defaultApiType(e){this._defaultAPI=e}registerAPIService(e){var n,d=this;return(n=function*(){const{apiType:n,configureFn:p,options:h}=e,y=h.apiOptions||{};void 0===d._defaultAPI&&(d._defaultAPI=n),d._apisByType[n]=yield p.call(d,{apiOptions:y,store:d.store,dispatcher:d._dispatcher})},function(){var e=this,d=arguments;return new Promise((function(p,h){var y=n.apply(e,d);function _next(e){asyncGeneratorStep$i(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$i(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}constructor(e,n){_define_property$e(this,"store",void 0),_define_property$e(this,"_dispatcher",void 0),_define_property$e(this,"_apisByType",void 0),_define_property$e(this,"_defaultAPI",void 0),this.store=e,this._dispatcher=n,this._apisByType={}}}const da={};function adaptAddEventListener(e,n,d,p={}){const{once:h}=p,y=function(e,n){const d=getCallbacksForName(e),wrappedCallback=(e,d)=>{n(d)};return d.push([n,wrappedCallback]),wrappedCallback}(n,d);!0===h?e.subscribeOnce(n,y):e.subscribe(n,y)}function getCallbacksForName(e){let n=da[e];return n||(n=[],da[e]=n),n}function asyncGeneratorStep$h(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$h(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$h(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$h(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$d(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}const la=Be.createChild("rtc");class RTCStreamingTracker{get isConfigured(){return void 0!==this.instance}configure(e){var n=this;return _async_to_generator$h((function*(){n.instance=e.instance}))()}handleEvent(e,n,d){}loadScript(){return _async_to_generator$h((function*(){if(!To.urls.rtc)throw new Error("bag.urls.rtc is not configured");yield loadScript(To.urls.rtc)}))()}prepareReportingAgent(e){this.clearReportingAgent();const{Sender:n,ClientName:d,ServiceName:p,ApplicationName:h,ReportingStoreBag:y,DeviceName:_}=window.rtc.RTCReportingAgentConfigKeys;e=null!=e?e:this.instance.nowPlayingItem;const m=function(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$4(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}class PlayActivityService{cleanup(){this.trackers.forEach(e=>{var n,d;return null===(n=(d=e).cleanup)||void 0===n?void 0:n.call(d)}),this.clearIntention(),this.teardownListeners(),this.registeredEvents.clear()}configure(e){var n,d=this;return(n=function*(){d.cleanup(),d.registeredEvents=function(e){const n=[];for(const d of e)n.push(...d.requestedEvents);return new Set(n)}(d.trackers),d.setupListeners();try{yield Promise.all(d.trackers.map(n=>n.configure(e)))}catch(Ut){Be.error("Error configuring a play activity service",Ut)}},function(){var e=this,d=arguments;return new Promise((function(p,h){var y=n.apply(e,d);function _next(e){asyncGeneratorStep$g(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$g(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))})()}getTrackerByType(e){return this.trackers.find(n=>n instanceof e)}handleEvent(e,n={}){const d=this.addIntention(e,n);e===_t.playerActivate&&(d.flush="boolean"==typeof n.isPlaying?!n.isPlaying:void 0);for(const p of this.trackers)p.handleEvent(e,d,n.item)}addIntention(e,n){if(![_t.playbackPause,_t.playbackStop].includes(e))return n;const d=function(e){for(var n=1;n{this.dispatcher.subscribe(e,this.handleEvent)}),this.dispatcher.subscribe(_t.userActivityIntent,this.recordUserIntent),this.dispatcher.subscribe(_t.applicationActivityIntent,this.recordApplicationIntent)}teardownListeners(){this.registeredEvents.forEach(e=>{this.dispatcher.unsubscribe(e,this.handleEvent)}),this.dispatcher.unsubscribe(_t.userActivityIntent,this.recordUserIntent),this.dispatcher.unsubscribe(_t.applicationActivityIntent,this.recordApplicationIntent)}constructor(e,n){_define_property$c(this,"dispatcher",void 0),_define_property$c(this,"trackers",void 0),_define_property$c(this,"registeredEvents",void 0),_define_property$c(this,"lastUserIntent",void 0),_define_property$c(this,"lastApplicationIntent",void 0),_define_property$c(this,"isConfigured",void 0),this.dispatcher=e,this.trackers=n,this.registeredEvents=new Set,this.isConfigured=!0}}function asyncGeneratorStep$f(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$f(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$f(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$f(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}_ts_decorate$4([Bind(),_ts_metadata$4("design:type",Function),_ts_metadata$4("design:paramtypes",[String,Object])],PlayActivityService.prototype,"handleEvent",null),_ts_decorate$4([Bind(),_ts_metadata$4("design:type",Function),_ts_metadata$4("design:paramtypes",[String,"undefined"==typeof ActivityIntention?Object:ActivityIntention])],PlayActivityService.prototype,"recordApplicationIntent",null),_ts_decorate$4([Bind(),_ts_metadata$4("design:type",Function),_ts_metadata$4("design:paramtypes",[String,"undefined"==typeof ActivityIntention?Object:ActivityIntention])],PlayActivityService.prototype,"recordUserIntent",null);const ua=BooleanDevFlag.register("mk-force-safari-hlsjs");function useNativeSafariPlayback(){return!ua.enabled}function requiresHlsJs(e){return _requiresHlsJs.apply(this,arguments)}function _requiresHlsJs(){return(_requiresHlsJs=_async_to_generator$f((function*(e){const n=null!=e?e:yield findKeySystemPreference(),d=!useNativeSafariPlayback();return n!==We.FAIRPLAY||d}))).apply(this,arguments)}function asyncGeneratorStep$e(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _define_property$b(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread_props$3(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var d=Object.keys(e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);n&&(p=p.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),d.push.apply(d,p)}return d}(Object(n)).forEach((function(d){Object.defineProperty(e,d,Object.getOwnPropertyDescriptor(n,d))})),e}const pa=function(){var e,n=(e=function*(e,n,d){const p=new Headers({Authorization:"Bearer "+n,Accept:"application/json","Content-Type":"application/json","X-Apple-Music-User-Token":""+d}),h=urlEncodeParameters(_object_spread_props$3(function(e){for(var n=1;n{const p=/^#EXT-X-STREAM-INF:.*BANDWIDTH=(\d+),CODECS="(.*)"\s*\n(.*$)/gim;let h;for(;h=p.exec(e);){let[e,p,y,_]=h;/^http(s)?:\/\//.test(_)||(_=rewriteLastUrlPath(n,_)),d.assets.push({bandwidth:Number(p),codec:y,URL:_})}},filterUnavailableLiveRadioUrls=(e,n)=>{const d=new URL(e.url);if(!d.host.endsWith(".apple.com")&&!d.host.endsWith(".applemusic.com"))throw makeContentUnavailableError(n)},makeContentUnavailableError=e=>{const n=new MKError(MKError.Reason.CONTENT_UNAVAILABLE);return n.data=e,n},va=function(){var e=_async_to_generator$d((function*(e,n,d){var p;if(Be.debug("mk: loadWithMZPlay",e.playParams),"podcast-episodes"===e.type)return void(e.assetURL=e.attributes.assetUrl);if(!(yield hasMusicSubscription()))return;const h=null===(p=e.playParams)||void 0===p?void 0:p.id,y=new Headers({Authorization:"Bearer "+n,Accept:"application/json","Content-Type":"application/json","X-Apple-Music-User-Token":""+d});let _={salableAdamId:h};if(e.isCloudItem){_={},e.playParams.purchasedId&&(_.purchaseAdamId=e.playParams.purchasedId),e.playParams.catalogId&&(_.subscriptionAdamId=e.playParams.catalogId);const n=/^a\.(\d+)$/;n.test(h)?_.subscriptionAdamId=h.replace(n,"$1"):T(h)&&(_.universalLibraryId=h)}if(!To.urls.webPlayback)throw new Error("bag.urls.webPlayback is not configured");const m=yield fetch(To.urls.webPlayback,{method:"POST",body:JSON.stringify(_),headers:y}),g=yield m.text(),b=JSON.parse(g);if(!b||!b.songList){const n=MKError.serverError(b,MKError.Reason.UNSUPPORTED_ERROR);return e.updateFromLoadError(n),Be.debug("mk: prepareItemWithMZPlay - rejecting with error",n),Promise.reject(n)}const[S]=b.songList;e.updateFromSongList(S)}));return function(n,d,p){return e.apply(this,arguments)}}();function asyncGeneratorStep$c(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$c(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$c(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$c(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function prepareToPlayMediaItem(e,n){return _prepareToPlayMediaItem.apply(this,arguments)}function _prepareToPlayMediaItem(){return(_prepareToPlayMediaItem=_async_to_generator$c((function*(e,n){const{developerToken:d,userToken:p}=e.store;if(void 0===d||void 0===p)return Promise.reject(new MKError(MKError.Reason.AUTHORIZATION_ERROR,"Unable to prepare media item for play."));if(n.isPreparedToPlay)Be.warn("media-item: item is prepared to play");else{if(Be.debug("media-item: item.prepareToPlay playParams",n.playParams),n.state=F.loading,n.isUTS)return Promise.reject(new MKError(MKError.Reason.UNSUPPORTED_ERROR,"Item was not prepared to play"));yield ha(n,d,p)}}))).apply(this,arguments)}function _shouldPlayPreview(){return(_shouldPlayPreview=_async_to_generator$c((function*(e,n){return!!e.previewURL&&(!!n||!e.playRawAssetURL&&(!e.isUTS&&!(yield hasMusicSubscription())||(!hasAuthorization()||!e.isPlayable||(e.isUTS?"Preview"===e.type:!supportsDrm()))))}))).apply(this,arguments)}function _prepareForEncryptedPlayback(){return(_prepareForEncryptedPlayback=_async_to_generator$c((function*(e,n,d){if(Be.debug("prepareForEncryptedPlayback"),!hasAuthorization())return Promise.reject(new MKError(MKError.Reason.AUTHORIZATION_ERROR,"Unable to prepare for playback."));try{yield prepareToPlayMediaItem(e,n)}catch(Q){if(Q.reason===MKError.Reason.AUTHORIZATION_ERROR)yield e.store.storekit.revokeUserToken();else if(Q.reason===MKError.Reason.TOKEN_EXPIRED)try{return yield e.store.storekit.renewUserToken(),yield prepareToPlayMediaItem(e,n),n.playbackData=_playbackDataForItem(n,d),n}catch(Ut){}if(Q)return Promise.reject(Q)}return n.playbackData=_playbackDataForItem(n,d),n}))).apply(this,arguments)}function _playbackDataForItem(n,d){if(Be.debug("mk: _playbackDataForItem",n),n.isCloudUpload)return n.assets[0];if("musicVideo"!==n.type&&!n.isLiveVideoStation){if(!n.isLiveRadioStation){const[e]=n.assets.filter(e=>{if(!("flavor"in e))return!1;const n=new RegExp(`\\d{1,2}\\:(c${(null===(p=window.WebKitMediaKeys)||void 0===p?void 0:p.isTypeSupported(rt+".1_0",Xe.AVC1))?"bc":"tr"}p)(\\d{2,3})`,"i");var p;const h=n.test(e.flavor);var y;const _=null!==(y=e.flavor.match(n))&&void 0!==y?y:[];return h&&parseInt(_[2],10)<=d.bitrate});return e}{var p,h;const y=n.assets.reduce((e,n)=>{const d=n.bandwidth;return e[d]||(e[d]=[]),e[d].push(n),e},{}),_=Object.keys(y).sort((e,n)=>parseInt(e,10)-parseInt(n,10)),m=d.bitrate===e.PlaybackBitrate.STANDARD?_[0]:_[_.length-1];(null===(h=y)||void 0===h||null===(p=h[m])||void 0===p?void 0:p[0].URL)&&(n.assetURL=y[m][0].URL)}}}function asyncGeneratorStep$b(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$b(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$b(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$b(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$a(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_decorate$3(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$3(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}const ma={keySystemGenericError:"keySystemGenericError"},ga=new Set([MKError.Reason.DEVICE_LIMIT,MKError.Reason.GEO_BLOCK]),ba={};ba[We.FAIRPLAY]="fairplaystreaming",ba[We.PLAYREADY]="playready",ba[We.WIDEVINE]="widevine";const Sa=je.createChild("hlsjs-audio"),Pa=JsonDevFlag.register("mk-hlsjs-config-overrides");class HlsJsAudioPlayer extends BasePlayer{loadPreviewImage(){return _async_to_generator$b((function*(){}))()}get _targetElement(){return this.mediaElement}setNextSeamlessItem(e){return _async_to_generator$b((function*(){}))()}setPresentationMode(e){return _async_to_generator$b((function*(){return Promise.resolve()}))()}get shouldDispatchErrors(){return!this.userInitiated||this._playbackDidStart}get currentPlayingDate(){var e;return null===(e=this.hls)||void 0===e?void 0:e.playingDate}get isPlayingAtLiveEdge(){var e;const n=this.hls;return!(!n||!(null===(e=this.nowPlayingItem)||void 0===e?void 0:e.isLinearStream))&&!!n.isPlayingAtLive}playItemFromEncryptedSource(n,d=!1,p={}){var h=this;return _async_to_generator$b((function*(){h.playbackState!==e.PlaybackStates.stopped?(n.playbackType=e.PlaybackType.encryptedFull,h.nowPlayingItem=n,n.state=F.loading,h.userInitiated=d,yield h.playHlsStream(n.assetURL,n,p)):Sa.debug("hlsjsAudioPlayer.playItemFromEncryptedSource aborting playback because player is stopped")}))()}isPlayerSupported(){return!0}initializeMediaElement(){var e=this;return _async_to_generator$b((function*(){const n=nextAvailableAudioElement();n.autoplay=!1,n.id="apple-music-player",n.controls=!1,n.muted=!1,n.playbackRate=1,n.preload="metadata",n.volume=1,e.mediaElement=n,document.body.appendChild(n),Sa.debug("initializedMediaElement",n)}))()}get seekableTimeRanges(){const e=this.hls;return e?e.seekableTimeRanges:this.currentPlaybackDuration?[{start:0,end:this.currentPlaybackDuration}]:void 0}initializeExtension(){var e=this;return _async_to_generator$b((function*(){e._keySystem=yield findKeySystemPreference();try{var n;if(!Ye.urls.hls)throw new Error("bag.urls.hls is not configured");yield Promise.all([loadScript(Ye.urls.hls),null===(n=e._rtcTracker)||void 0===n?void 0:n.loadScript()])}catch(Ut){throw Sa.error("hlsjs-audio-player failed to load script "+Ye.urls.hls,Ut),Ut}}))()}_stopMediaElement(){var e=this,_superprop_get__stopMediaElement=()=>super._stopMediaElement;return _async_to_generator$b((function*(){yield _superprop_get__stopMediaElement().call(e),e.destroy()}))()}destroy(){if(Sa.debug("hlsjs-audio-player.destroy"),this.hls){const{ERROR:e,INTERNAL_ERROR:n,MANIFEST_PARSED:d,KEY_REQUEST_STARTED:p,LICENSE_CHALLENGE_CREATED:h,LEVEL_SWITCHED:y}=window.Hls.Events,_=this.hls;_.stopLoad(),_.detachMedia(),_.off(e,this.handleHlsError),_.off(n,this.handleHlsError),_.off(d,this.handleManifestParsed),_.off(p,this.handleKeyRequestStarted),_.off(h,this.handleLicenseChallengeCreated),_.off(y,this.handleLevelSwitched),_.destroy()}super.destroy(),asAsync(this._license.stop())}playHlsStream(e,n,d={}){var p=this;return _async_to_generator$b((function*(){const{_keySystem:h}=p;if(!h)return;let y,_;p._unrecoverableError=void 0,p.createHlsPlayer(),h===We.WIDEVINE&&(y="WIDEVINE_SOFTWARE",_={initDataTypes:["cenc","keyids"],distinctiveIdentifier:"optional",persistentState:"required"});const m={subs:"accepts-css",platformInfo:{requiresCDMAttachOnStart:h!==We.NONE,maxSecurityLevel:y,keySystemConfig:_},appData:{serviceName:Ye.app.name}},{_rtcTracker:g,hls:b}=p;if(g){const e=g.prepareReportingAgent(n);void 0!==e&&(m.appData.reportingAgent=e)}Sa.debug("RTC: loadSource with load options",m);const S=p.startPlaybackSequence();return Sa.info("Manifest already loaded, passing url to HLSJS",e),b.loadSource(e,m,d.startTime),b.attachMedia(p.mediaElement),n&&(p._licenseServerUrl=n.keyURLs["hls-key-server-url"],h===We.FAIRPLAY?b.setProtectionData({fairplaystreaming:{serverCertUrl:n.keyURLs["hls-key-cert-url"]}}):b.setProtectionData({widevine:{serverCertUrl:n.keyURLs["widevine-cert-url"]}})),S}))()}createHlsPlayer(){const{_keySystem:e}=this,{os:n}=this.services.runtime,{Hls:d}=window,p=ue.get(),h={clearMediaKeysOnPromise:!1,debug:!!p,debugLevel:p,enablePerformanceLogging:!!p,enablePlayReadyKeySystem:!0,enableRtcReporting:void 0!==this._rtcTracker,keySystemPreference:ba[e],useMediaKeySystemAccessFilter:!0,nativeControlsEnabled:n.isAndroid,enableID3Cues:!0};(e=>{const n=se.value;n&&n.socketurl&&isAppleHostname(n.socketurl)&&"carry-"===determineCdnBasePrefix()&&(e.socketurl=n.socketurl,e.socketid=n.socketid,e.log=n.log)})(h),(e=>{const n=Pa.value;n&&"object"==typeof n&&Object.assign(e,n)})(h);const y=new d(h),{ERROR:_,INTERNAL_ERROR:m,MANIFEST_PARSED:g,KEY_REQUEST_STARTED:b,LICENSE_CHALLENGE_CREATED:S,LEVEL_SWITCHED:P}=d.Events;y.on(_,this.handleHlsError),y.on(m,this.handleHlsError),y.on(g,this.handleManifestParsed),y.on(b,this.handleKeyRequestStarted),y.on(S,this.handleLicenseChallengeCreated),y.on(P,this.handleLevelSwitched),this.hls=y}handleLevelSwitched(e,n){var d,p,h;const{level:y}=n;if(!y)return;const _=null===(d=this._levels)||void 0===d?void 0:d.find(e=>e.persistentId===y);if(!_||(null===(p=this._currentLevel)||void 0===p?void 0:p.persistentId)===(null===(h=_)||void 0===h?void 0:h.persistentId))return;this._currentLevel=_;const m=void 0!==_.audioGroupId?this._channelsByGroup[_.audioGroupId]:void 0;this._dispatcher.publish(_t.hlsLevelUpdated,{level:_,channels:m})}handleHlsError(e,n){if(Sa.warn("HLS.js error",JSON.stringify(n)),this._unrecoverableError)return;let d=new MKError(MKError.Reason.UNSUPPORTED_ERROR,n.reason);d.data=n;const{keySystemGenericError:p}=ma;if(n.details!==p){if("output-restricted"===n.reason&&(d=new MKError(MKError.Reason.OUTPUT_RESTRICTED,n.reason)),n.fatal){if(this.hls.destroy(),!this.shouldDispatchErrors)throw d;this._dispatcher.publish(vt.mediaPlaybackError,d)}}else this._dispatcher.publish(p,d)}handleManifestParsed(e,n){var d=this;return _async_to_generator$b((function*(){var e,p;let h;Sa.debug("handleManifestParsed",n),d._levels=null!==(e=n.levels)&&void 0!==e?e:[],d.nowPlayingItem.state=F.ready,d._channelsByGroup=(null!==(p=n.audioTracks)&&void 0!==p?p:[]).reduce((e,n)=>(e[n.groupId]=n.channels,e),{});try{yield d._playMedia()}catch(Ut){throw Sa.warn("error from media element, possibly non-fatal",Ut),Ut}finally{h=yield d.finishPlaybackSequence()}return h}))()}handleKeyRequestStarted(e,n){Sa.debug("hlsjs-video.handleKeyRequestStarted"),this.hls.generateKeyRequest(n.keyuri,{})}handleLicenseChallengeCreated(n,d){var p=this;return _async_to_generator$b((function*(){const{_licenseServerUrl:n,nowPlayingItem:h,_keySystem:y,userInitiated:_}=p;try{var m,g;const e=yield null===(m=p._license)||void 0===m?void 0:m.start(n,h,d,y,_),b={statusCode:e.status};(null===(g=e)||void 0===g?void 0:g.license)&&(y===We.FAIRPLAY?b.ckc=Te(e.license):b.license=Te(e.license));const S=e["renew-after"];S&&(b.renewalDate=new Date(Date.now()+1e3*S)),p.hls.setLicenseResponse(d.keyuri,b)}catch(Ut){var b;if(p._unrecoverableError)return;const h=Ut.data,y={};void 0!==(null===(b=h)||void 0===b?void 0:b.status)&&(y.statusCode=+h.status),Sa.warn("Passing license response error to Hls.js",y),p.hls.setLicenseResponse(d.keyuri,y),ga.has(Ut.name)&&(p._unrecoverableError=Ut,p.resetDeferredPlay(),yield p.stop({endReasonType:e.PlayActivityEndReasonType.FAILED_TO_LOAD,userInitiated:_})),p.onPlaybackLicenseError(Ut)}}))()}onPlaybackLicenseError(e){this.resetDeferredPlay(),this._dispatcher.publish(Je.playbackLicenseError,e)}seekToTime(e){var n=this;return _async_to_generator$b((function*(){n.hls?(Sa.debug("hlsjs-video: hls seekTo",e),n.hls.seekTo=e):(Sa.debug("hlsjs-video: media element seek to",e),n._targetElement.currentTime=e)}))()}constructor(e){var n,d;super(e),_define_property$a(this,"currentAudioTrack",void 0),_define_property$a(this,"currentTextTrack",void 0),_define_property$a(this,"textTracks",[]),_define_property$a(this,"audioTracks",[]),_define_property$a(this,"userInitiated",!1),_define_property$a(this,"mediaElement",void 0),_define_property$a(this,"mediaPlayerType","hlsjs-audio"),_define_property$a(this,"hls",void 0),_define_property$a(this,"supportsPreviewImages",!1),_define_property$a(this,"extension",void 0),_define_property$a(this,"_keySystem",void 0),_define_property$a(this,"_license",void 0),_define_property$a(this,"_rtcTracker",void 0),_define_property$a(this,"_levels",void 0),_define_property$a(this,"_channelsByGroup",{}),_define_property$a(this,"_currentLevel",void 0),_define_property$a(this,"_licenseServerUrl",void 0),_define_property$a(this,"_unrecoverableError",void 0),this._rtcTracker=null===(d=e)||void 0===d||null===(n=d.playbackServices)||void 0===n?void 0:n.getRTCStreamingTracker(),this._license=new License}}function asyncGeneratorStep$a(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$a(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$a(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$a(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$9(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[void 0,void 0])],HlsJsAudioPlayer.prototype,"handleLevelSwitched",null),_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[void 0,void 0])],HlsJsAudioPlayer.prototype,"handleHlsError",null),_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[void 0,void 0])],HlsJsAudioPlayer.prototype,"handleManifestParsed",null),_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[void 0,void 0])],HlsJsAudioPlayer.prototype,"handleKeyRequestStarted",null),_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[void 0,void 0])],HlsJsAudioPlayer.prototype,"handleLicenseChallengeCreated",null),_ts_decorate$3([Bind(),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",["undefined"==typeof Error?Object:Error])],HlsJsAudioPlayer.prototype,"onPlaybackLicenseError",null),_ts_decorate$3([AsyncDebounce(250),_ts_metadata$3("design:type",Function),_ts_metadata$3("design:paramtypes",[Number])],HlsJsAudioPlayer.prototype,"seekToTime",null);const Ea=BooleanDevFlag.register("mk-force-native-safari-video-player"),Ta=BooleanDevFlag.register("mk-force-hlsjs-video-player"),ka=BooleanDevFlag.register("mk-force-hls-audio-player"),wa=je.createChild("factory");class Factory{get isDestroyed(){return this._isDestroyed}getPlayerForMediaItem(e){var n=this;return _async_to_generator$a((function*(){let d;if(wa.debug("Factory.getPlayerForMediaItem",e),function(e){return null!=e&&!isVideo(e)}(e)){const p=n.playersByType.get("audio");if(!e.hasOffersHlsUrl&&p&&!p.isDestroyed)return wa.debug("Returning pooled AudioPlayer"),p;d=yield n.createAudioPlayer(e,n.playerOptions),"audio"===d.mediaPlayerType&&n.playersByType.set("audio",d)}else isVideo(e)&&(d=yield n.createVideoPlayer(e,n.playerOptions));var p;if(void 0===d)throw new Error("Unable to create player for MediaItem: "+(null===(p=e)||void 0===p?void 0:p.id));return wa.debug("Initializing player: "+d.constructor.name),yield d.initialize(),d}))()}createAudioPlayer(e,n){return _async_to_generator$a((function*(){return e.hasOffersHlsUrl||ka.enabled?(wa.debug("Creating HLSAudioPlayer"),new HlsJsAudioPlayer(n)):(wa.debug("Creating AudioPlayer"),new AudioPlayer(n))}))()}createVideoPlayer(e,n){return _async_to_generator$a((function*(){var d,p,h,y;return wa.debug("Creating VideoPlayer"),Ea.enabled?(wa.debug("Creating NativeSafariVideoPlayer with mkForceSafariNativeVideoPlayer enabled"),new NativeSafariVideoPlayer(n)):Ta.enabled?(wa.debug("Creating HlsJsVideoPlayer with mkForceHlsjsVideoPlayer enabled"),new HlsJsVideoPlayer(n)):(yield null===(d=n.playbackServices)||void 0===d?void 0:d.requiresHlsJs())?(wa.debug("Creating HlsJsVideoPlayer required for the KeySystem"),new HlsJsVideoPlayer(n)):e.isLiveVideoStation||e.isLinearStream||(null===(y=e.defaultPlayable)||void 0===y||null===(h=y.assets)||void 0===h||null===(p=h.fpsKeyServerUrl)||void 0===p?void 0:p.startsWith("https://linear.tv.apple.com"))?(wa.debug("Creating HlsJsVideoPlayer for Live Video stream"),new HlsJsVideoPlayer(n)):(wa.debug("Creating NativeSafariVideoPlayer as a fall through"),new NativeSafariVideoPlayer(n))}))()}destroy(){this._isDestroyed=!0;for(const e of this.playersByType.values())e.destroy();this.playersByType.clear()}constructor(e){_define_property$9(this,"playerOptions",void 0),_define_property$9(this,"playersByType",void 0),_define_property$9(this,"_isDestroyed",!1),this.playersByType=new Map,this.playerOptions=e}}function asyncGeneratorStep$9(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$9(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$9(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$9(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$8(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _ts_decorate$2(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$2(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}const{mediaPlaybackError:Ia,playerTypeDidChange:Oa}=vt,{playbackLicenseError:Aa}=Je,{keySystemGenericError:Ra}=co,$a=function(){var e=_async_to_generator$9((function*(e,n){var d,p;if(null===(p=e.container)||void 0===p||null===(d=p.attributes)||void 0===d?void 0:d.requiresSubscription){if(!(yield n())){const n=new MKError(MKError.Reason.SUBSCRIPTION_ERROR);throw n.data=e,n}}}));return function(n,d){return e.apply(this,arguments)}}();let Ca=!1;class MediaItemPlayback{get isDestroyed(){return this._isDestroyed}get currentPlaybackTime(){return this._currentPlayer.currentPlaybackTime}get currentPlaybackTimeRemaining(){return this._currentPlayer.currentPlaybackTimeRemaining}get currentPlayingDate(){return this._currentPlayer.currentPlayingDate}get isPlayingAtLiveEdge(){return this._currentPlayer.isPlayingAtLiveEdge}get seekableTimeRanges(){return this._currentPlayer.seekableTimeRanges}get audioTracks(){return this._currentPlayer.audioTracks}get currentAudioTrack(){return this._currentPlayer.currentAudioTrack}set currentAudioTrack(e){this._currentPlayer.currentAudioTrack=e}get currentPlaybackDuration(){return this._currentPlayer.currentPlaybackDuration}get currentBufferedProgress(){return this._currentPlayer.currentBufferedProgress}get currentPlaybackProgress(){return this._currentPlayer.currentPlaybackProgress}get currentTextTrack(){return this._currentPlayer.currentTextTrack}set currentTextTrack(e){this._currentPlayer.currentTextTrack=e}get previewOnly(){return this._previewOnly}set previewOnly(e){this._previewOnly=e}get isPlaying(){return this._currentPlayer.isPlaying}get isPrimaryPlayer(){return this._currentPlayer.isPrimaryPlayer}set isPrimaryPlayer(e){this._currentPlayer.isPrimaryPlayer=e}get isReady(){return this._currentPlayer.isReady}get nowPlayingItem(){return this._currentPlayer.nowPlayingItem}get playbackRate(){return this._currentPlayer.playbackRate}set playbackRate(e){this._updatePlayerState("playbackRate",e)}get playbackState(){return this._currentPlayer.playbackState}set playbackState(e){this._currentPlayer.setPlaybackState(e,this.nowPlayingItem)}get playbackTargetAvailable(){return this._currentPlayer.playbackTargetAvailable}get playbackTargetIsWireless(){return this._currentPlayer.playbackTargetIsWireless}get supportsPreviewImages(){return this._currentPlayer.supportsPreviewImages}get textTracks(){return this._currentPlayer.textTracks}get volume(){return this._currentPlayer.volume}set volume(e){var n;this._currentPlayer.isDestroyed&&(null===(n=this._dispatcher)||void 0===n||n.publish(vt.playbackVolumeDidChange,{}));this._updatePlayerState("volume",e)}clearNextManifest(){this._currentPlayer.clearNextManifest()}destroy(){var e,n;this._isDestroyed=!0,this._playerFactory.destroy(),null===(e=this._dispatcher)||void 0===e||e.unsubscribe(Aa,this.onPlaybackLicenseError),null===(n=this._dispatcher)||void 0===n||n.unsubscribe(Ra,this.onKeySystemGenericError)}exitFullscreen(){return this._currentPlayer.exitFullscreen()}loadPreviewImage(e){var n=this;return _async_to_generator$9((function*(){return n._currentPlayer.loadPreviewImage(e)}))()}getNewSeeker(){return this._currentPlayer.newSeeker()}mute(){this._volumeAtMute=this.volume,this.volume=0}pause(e){var n=this;return _async_to_generator$9((function*(){return n._currentPlayer.pause(e)}))()}play(){var e=this;return _async_to_generator$9((function*(){return e._currentPlayer.play()}))()}preload(){var e=this;return _async_to_generator$9((function*(){return e._currentPlayer.preload()}))()}prepareToPlay(e){var n=this;return _async_to_generator$9((function*(){var d,p;He.debug("invoking prepareToPlay for ",e.title);const h=yield n.prepareForEncryptedPlayback(e,{bitrate:n._bitrateCalculator.bitrate}),y=null===(d=n._currentPlayback)||void 0===d?void 0:d.item,_=Ye.features["seamless-audio-transitions"],m="song"===(null===(p=y)||void 0===p?void 0:p.type)&&"song"===e.type,g=!e.playRawAssetURL;return _&&m&&g&&(He.debug(`setting ${e.title} for seamless audio transition`),yield n._currentPlayer.setNextSeamlessItem(e)),h}))()}requestFullscreen(e){return this._currentPlayer.requestFullscreen(e)}showPlaybackTargetPicker(){this._currentPlayer.showPlaybackTargetPicker()}seekToTime(e,n=St.Manual){var d=this;return _async_to_generator$9((function*(){yield d._currentPlayer.seekToTime(e,n)}))()}setPresentationMode(e){var n=this;return _async_to_generator$9((function*(){return n._currentPlayer.setPresentationMode(e)}))()}startMediaItemPlayback(e,n=!1){var d=this;return _async_to_generator$9((function*(){var p;He.debug("MediaItemPlayback: startMediaItemPlayback",e),e.resetState(),((e,n)=>{const{os:d}=n;if(e.isLinearStream&&("ios"===d.name||"ipados"===d.name)){He.warn("Cannot play linear stream on iOS or iPad");const n=new MKError(MKError.Reason.CONTENT_UNSUPPORTED,"IOS LINEAR");throw n.data={item:e},n}})(e,d.services.runtime),yield $a(e,d.hasMusicSubscription);const h=yield d._getPlayerForMediaItem(e);if(yield d.setCurrentPlayer(h),!(null===(p=d._currentPlayer)||void 0===p?void 0:p.hasMediaElement))return He.warn(`MediaItemPlayback: Could not play media of type ${e.type}, marking item as unsupported and skipping.`),void e.notSupported();try{const{dispatcher:p}=d.services;e.beginMonitoringStateDidChange(e=>p.publish(A.mediaItemStateDidChange,e)),e.beginMonitoringStateWillChange(e=>p.publish(A.mediaItemStateWillChange,e));const h=d.playOptions.get(e.id);h&&d.playOptions.delete(e.id);const y=yield d._playAccordingToPlaybackType(e,n,h);return d._currentPlayback={item:e,userInitiated:n},y}catch(Q){throw e.updateFromLoadError(Q),He.error(Q.message,Q),Q}}))()}_playAccordingToPlaybackType(e,n,d){var p=this;return _async_to_generator$9((function*(){return(yield function(e,n){return _shouldPlayPreview.apply(this,arguments)}(e,p._previewOnly))?p._playPreview(e,n):function(e){return!(!e.playRawAssetURL||!e.attributes.assetUrl)}(e)?p._playRawAsset(e,n,d):isBroadcastRadio(e)?p._playBroadcastRadio(e,n):((e=>{if(!supportsDrm()){const n=new MKError(MKError.Reason.CONTENT_UNSUPPORTED,"NO DRM");throw n.data={item:e},He.warn("No DRM detected"),n}})(e),p._playEncryptedFull(e,n,d))}))()}_playEncryptedFull(e,n,d){var p=this;return _async_to_generator$9((function*(){if(He.debug("MediaItemPlayback: play encrypted full",e),!e||!e.isPlayable)return Promise.reject(new MKError(MKError.Reason.MEDIA_PLAYBACK,"Not Playable"));const h=p._currentPlayer;try{yield p.prepareForEncryptedPlayback(e,{bitrate:p._bitrateCalculator.bitrate})}catch(Q){return He.error("prepareForEncryptedPlayback Error: userInitiated "+n),h.destroy(),n?Promise.reject(Q):void h.dispatch(vt.mediaPlaybackError,Q)}return yield function(e){return new Promise((n,d)=>{var p,h;const{ageGatePolicy:y}=e;if(!y||!y.age||!y.frequencyInMinutes)return Be.debug("No ageGatePolicy. Resolving handleAgeGate()"),n(void 0);const _=getLocalStorage(),m=null===(p=_)||void 0===p?void 0:p.ageGatePolicyAge,g=null===(h=_)||void 0===h?void 0:h.ageGatePolicyExpiration;if(m&&g&&parseInt(g,10)>Date.now()&&parseInt(m,10)>=y.age)return n(void 0);MKDialog.clientDialog({okButtonString:"Yes",okButtonAction:()=>{var e,d;return null===(e=_)||void 0===e||e.setItem("ageGatePolicyAge",y.age.toString()),null===(d=_)||void 0===d||d.setItem("ageGatePolicyExpiration",(Date.now()+60*y.frequencyInMinutes*1e3).toString()),n(void 0)},cancelButtonString:"No",cancelButtonAction:()=>d(new MKError("AGE_GATE","Age Gate Declined")),explanation:`This content may not be appropriate for ages younger than ${y.age}.`,message:`Are you ${y.age} or older?`}).present()})}(e),He.debug("About to play item as encrypted",e),yield h.playItemFromEncryptedSource(e,n,d),e}))()}_playBroadcastRadio(n,d){var p=this;return _async_to_generator$9((function*(){if(He.debug("MediaItemPlayback: play broadcast radio",n),!Ye.features["broadcast-radio"]){const e=new MKError(MKError.Reason.CONTENT_UNAVAILABLE);throw e.data=n,e}const h=p._currentPlayer,y=h.isPaused()&&!d,_=yield pa(n,gn.developerToken,gn.musicUserToken),m=_.assets[0];return n.playbackType=e.PlaybackType.unencryptedFull,n.trackInfo=_["track-info"],h.nowPlayingItem=n,yield h.playItemFromUnencryptedSource(m.url,y),n}))()}_playRawAsset(n,d,p){var h=this;return _async_to_generator$9((function*(){He.debug("MediaItemPlayback: play raw asset",n);const y=h._currentPlayer,_=y.isPaused()&&!d;return n.playbackType=e.PlaybackType.unencryptedFull,y.nowPlayingItem=n,yield y.playItemFromUnencryptedSource(n.attributes.assetUrl,_,p),n}))()}_playPreview(n,d){var p=this;return _async_to_generator$9((function*(){He.debug("MediaItemPlayback: play preview",n);const h=p._currentPlayer,y=h.isPaused()&&!d;return supportsDrm()||h.dispatch(vt.drmUnsupported,{item:n}),n.playbackType=e.PlaybackType.preview,h.nowPlayingItem=n,yield h.playItemFromUnencryptedSource(n.previewURL,y),n}))()}stop(e){var n=this;return _async_to_generator$9((function*(){yield n._currentPlayer.stop(e)}))()}unmute(){this.volume>0||(this.volume=this._volumeAtMute||1,this._volumeAtMute=void 0)}_getPlayerForMediaItem(e){var n=this;return _async_to_generator$9((function*(){He.trace("MediaItemPlayback._getPlayerForMediaItem",e);const d=yield n._playerFactory.getPlayerForMediaItem(e);return He.trace("Applying default player state",d,n.playerState),Object.assign(d,n.playerState),d}))()}setCurrentPlayer(e){var n=this;return _async_to_generator$9((function*(){var d;n._currentPlayer!==e&&(He.debug("MediaItemPlayback: setting currentPlayer",e),yield n._currentPlayer.stop(),n._currentPlayer=e,null===(d=n._dispatcher)||void 0===d||d.publish(Oa,{player:e}))}))()}getCurrentPlayer(){return this._currentPlayer}onKeySystemGenericError(e,n){var d=this;return _async_to_generator$9((function*(){var e;Ca?null===(e=d._dispatcher)||void 0===e||e.publish(Ia,n):(Ca=!0,He.warn("Retrying playback after keysystemGenericError"),yield d.restartPlayback())}))()}onPlaybackLicenseError(e,n){var d=this;return _async_to_generator$9((function*(){var e;n.reason===MKError.Reason.PLAYREADY_CBC_ENCRYPTION_ERROR?(He.warn("MediaItemPlayback: PLAYREADY_CBC_ENCRYPTION_ERROR...retrying with different key system"),yield d.restartPlayback()):null===(e=d._dispatcher)||void 0===e||e.publish(Ia,n)}))()}restartPlayback(){var e=this;return _async_to_generator$9((function*(){yield e.stop();const{_currentPlayback:n}=e;if(n){const{item:d,userInitiated:p}=n;d.resetState(),yield e.startMediaItemPlayback(d,p)}}))()}_updatePlayerState(e,n){this.playerState[e]=n,this._currentPlayer[e]=n}constructor(e){_define_property$8(this,"playerState",{playbackRate:1,volume:1}),_define_property$8(this,"playOptions",new Map),_define_property$8(this,"hasMusicSubscription",void 0),_define_property$8(this,"prepareForEncryptedPlayback",void 0),_define_property$8(this,"_currentPlayer",void 0),_define_property$8(this,"services",void 0),_define_property$8(this,"_dispatcher",void 0),_define_property$8(this,"_playerFactory",void 0),_define_property$8(this,"_previewOnly",!1),_define_property$8(this,"_volumeAtMute",void 0),_define_property$8(this,"_currentPlayback",void 0),_define_property$8(this,"_bitrateCalculator",void 0),_define_property$8(this,"_isDestroyed",!1);const{playbackServices:n}=e;var d,p;this.hasMusicSubscription=n.hasMusicSubscription,this.prepareForEncryptedPlayback=n.prepareForEncryptedPlayback,d=e.tokens,gn=d,e.bag&&(p=e.bag,Object.assign(Ye,p)),this.services=e.services,this._dispatcher=e.services.dispatcher,this._bitrateCalculator=e.services.bitrateCalculator,this._playerFactory=new Factory(e),this._currentPlayer=new PlayerStub(e),this._dispatcher.subscribe(Aa,this.onPlaybackLicenseError),this._dispatcher.subscribe(Ra,this.onKeySystemGenericError)}}function asyncGeneratorStep$8(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$8(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$8(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$8(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$7(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$5(e){for(var n=1;n=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);return y>3&&_&&Object.defineProperty(n,d,_),_}function _ts_metadata$1(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}_ts_decorate$2([Bind(),_ts_metadata$2("design:type",Function),_ts_metadata$2("design:paramtypes",[void 0,void 0])],MediaItemPlayback.prototype,"onKeySystemGenericError",null),_ts_decorate$2([Bind(),_ts_metadata$2("design:type",Function),_ts_metadata$2("design:paramtypes",[void 0,void 0])],MediaItemPlayback.prototype,"onPlaybackLicenseError",null);const Ma=[MKError.Reason.AGE_VERIFICATION,MKError.Reason.CONTENT_EQUIVALENT,MKError.Reason.CONTENT_RESTRICTED,MKError.Reason.CONTENT_UNAVAILABLE,MKError.Reason.CONTENT_UNSUPPORTED,MKError.Reason.SERVER_ERROR,MKError.Reason.SUBSCRIPTION_ERROR,MKError.Reason.UNSUPPORTED_ERROR,MKError.Reason.USER_INTERACTION_REQUIRED],Da=JsonDevFlag.register("mk-bag-features-overrides");class MKInstance{get developerToken(){return wo.developerToken}get api(){return this._services.apiManager.api}get audioTracks(){return this._mediaItemPlayback.audioTracks}get authorizationStatus(){return wo.authorizationStatus}get bitrate(){return this._services.bitrateCalculator.bitrate}set bitrate(e){this._services.bitrateCalculator.bitrate=e}get browserSupportsPictureInPicture(){return detectPictureInPictureSupport()}get browserSupportsVideoDrm(){return supportsDrm()}get cid(){return(this.realm===e.SKRealm.TV||this.sourceType!==Lt.MUSICKIT)&&wo.cid}get continuous(){return this._playbackController.continuous}set continuous(e){this._playbackController.continuous=e}get autoplayEnabled(){return this._autoplayEnabled}set autoplayEnabled(n){this.realm!==e.SKRealm.MUSIC&&(n=!1),n!==this.autoplayEnabled&&(this._autoplayEnabled=n,this._services.dispatcher.publish(So.autoplayEnabledDidChange,this.autoplayEnabled))}get currentAudioTrack(){return this._mediaItemPlayback.currentAudioTrack}set currentAudioTrack(e){this._mediaItemPlayback.currentAudioTrack=e}get currentPlaybackDuration(){return this._mediaItemPlayback.currentPlaybackDuration}get currentPlaybackProgress(){return this._mediaItemPlayback.currentPlaybackProgress}get currentPlaybackTime(){return this._mediaItemPlayback.currentPlaybackTime}get currentPlaybackTimeRemaining(){return this._mediaItemPlayback.currentPlaybackTimeRemaining}get currentTextTrack(){return this._mediaItemPlayback.currentTextTrack}set currentTextTrack(e){this._mediaItemPlayback.currentTextTrack=e}get isAuthorized(){return wo.isAuthorized}get isPlaying(){return this._playbackController.isPlaying}get isRestricted(){return wo.isRestricted}get metricsClientId(){return wo.metricsClientId}set metricsClientId(e){wo.metricsClientId=e}get musicUserToken(){return wo.musicUserToken}set musicUserToken(e){e&&wo.musicUserToken===e||(wo.musicUserToken=e)}get nowPlayingItem(){return this._mediaItemPlayback.nowPlayingItem}get nowPlayingItemIndex(){return this._playbackController.nowPlayingItemIndex}get playbackMode(){return this._playbackMode}set playbackMode(n){if(-1===Object.values(e.PlaybackMode).indexOf(n))return;const d=n===e.PlaybackMode.PREVIEW_ONLY,p=this._services.mediaItemPlayback;p&&(p.previewOnly=d),this._playbackMode!==n&&(this._playbackController.playbackMode=n,this._playbackMode=n)}get playbackRate(){return this._mediaItemPlayback.playbackRate}set playbackRate(e){this._mediaItemPlayback.playbackRate=e}get playbackState(){return this._mediaItemPlayback.playbackState}get playbackTargetAvailable(){return this._mediaItemPlayback.playbackTargetAvailable}get playbackTargetIsWireless(){return this._mediaItemPlayback.playbackTargetIsWireless}get previewOnly(){return this.playbackMode===e.PlaybackMode.PREVIEW_ONLY}set previewOnly(n){this.playbackMode=n?e.PlaybackMode.PREVIEW_ONLY:e.PlaybackMode.MIXED_CONTENT}get queue(){return this._playbackController.queue}get queueIsEmpty(){return this._playbackController.queue.isEmpty}get realm(){return wo.realm}get repeatMode(){return this._playbackController.repeatMode}set repeatMode(e){this._playbackController.repeatMode=e}set requestUserToken(e){wo.requestUserToken=e}get restrictedEnabled(){return wo.restrictedEnabled}set restrictedEnabled(e){wo.restrictedEnabled=e}get supportsPreviewImages(){return this._mediaItemPlayback.supportsPreviewImages}get seekSeconds(){return this._playbackController.seekSeconds}get services(){return this._services}set shuffle(e){this._playbackController.shuffle=e}get shuffleMode(){return this._playbackController.shuffleMode}set shuffleMode(e){this._playbackController.shuffleMode=e}get storefrontCountryCode(){return wo.storefrontCountryCode}get subscribeURL(){return wo.subscribeURL}get subscribeFamilyURL(){return wo.subscribeFamilyURL}get subscribeIndividualURL(){return wo.subscribeIndividualURL}get subscribeStudentURL(){return wo.subscribeStudentURL}get textTracks(){return this._mediaItemPlayback.textTracks}get videoContainerElement(){return this.context.videoContainerElement}set videoContainerElement(e){this.context.videoContainerElement=e}get volume(){return this._mediaItemPlayback.volume}set volume(e){this._mediaItemPlayback.volume=e}get storefrontId(){return wo.storefrontId}set storefrontId(e){wo.storefrontId=e}get _mediaItemPlayback(){return this._services.mediaItemPlayback}get _playbackController(){if(void 0!==this._playbackControllerInternal)return this._playbackControllerInternal;He.debug("setting _playbackController");const e=this._getPlaybackControllerByType(qo.serial);return this._playbackController=e,e}set _playbackController(e){this._playbackControllerInternal=e,this._playbackControllerInternal.autoplayEnabled=this._autoplayEnabled,this._playbackControllerInternal.activate(),this.capabilities.updateChecker(this._playbackControllerInternal.hasCapabilities),this.capabilities.controller=this._playbackControllerInternal}addEventListener(e,n,d={}){adaptAddEventListener(this._services.dispatcher,e,n,d)}authorize(){var e=this;return _async_to_generator$8((function*(){return e.deferPlayback(),wo.authorize()}))()}canAuthorize(){return supportsDrm()&&!this.isAuthorized}canUnauthorize(){return supportsDrm()&&this.isAuthorized}changeToMediaAtIndex(e){var n=this;return _async_to_generator$8((function*(){n._isPlaybackSupported()&&(yield n._validateAuthorization(),n._signalChangeItemIntent(),yield n._playbackController.changeToMediaAtIndex(e))}))()}changeToMediaItem(e){var n=this;return _async_to_generator$8((function*(){He.debug("instance.changeToMediaItem",e),n._isPlaybackSupported()&&(yield n._validateAuthorization(),n._signalChangeItemIntent(),yield n._playbackController.changeToMediaItem(e))}))()}changeUserStorefront(e){var n=this;return _async_to_generator$8((function*(){n.storefrontId=e}))()}cleanup(){var n=this;return _async_to_generator$8((function*(){var d;null===(d=n._services.mediaItemPlayback)||void 0===d||d.destroy(),n._signalIntent({endReasonType:e.PlayActivityEndReasonType.EXITED_APPLICATION});const p=Object.keys(n._playbackControllers).map(e=>n._playbackControllers[e].destroy());try{yield Promise.all(p)}catch(Ut){He.error("Error cleaning up controller",Ut)}n._services.dispatcher.clear()}))()}configure(e){var n=this;return _async_to_generator$8((function*(){return n._whenConfigured=n._configure(e),n._whenConfigured}))()}_configure(e){var n=this;return _async_to_generator$8((function*(){yield wo.storekit.whenAuthCompleted;const d=e.map(n._services.apiManager.registerAPIService,n._services.apiManager);yield Promise.all(d),yield n._configurePlayActivity(),n._initializeExternalEventPublishing()}))()}deferPlayback(){He.debug("deferPlayback",this._playbackControllerInternal),deferPlayback()}me(){return _async_to_generator$8((function*(){try{return yield wo.storekit.me()}catch(Ut){return Promise.reject(new MKError(MKError.Reason.AUTHORIZATION_ERROR,"Unauthorized"))}}))()}hasMusicSubscription(){return hasMusicSubscription(wo.storekit)}mute(){return this._mediaItemPlayback.mute()}pause(n){var d=this;return _async_to_generator$8((function*(){if(d._isPlaybackSupported()){try{d._signalIntent({endReasonType:e.PlayActivityEndReasonType.PLAYBACK_MANUALLY_PAUSED}),yield d._playbackController.pause(n)}catch(Q){d._handlePlaybackError(Q)}return Promise.resolve()}}))()}play(){var e=this;return _async_to_generator$8((function*(){if(He.debug("instance.play()"),e._isPlaybackSupported()){yield e._validateAuthorization();try{yield e._playbackController.play()}catch(Q){e._handlePlaybackError(Q)}return Promise.resolve()}}))()}playMediaItem(e,n){var d=this;return _async_to_generator$8((function*(){var p,h,y,_;if(He.debug("mk: playMediaItem",e),(null===(p=n)||void 0===p?void 0:p.bingeWatching)||d.deferPlayback(),n=_object_spread$5({},n),(null===(h=e)||void 0===h?void 0:h.playEvent)&&!hasOwn(n,"startTime")){const{playEvent:d}=e;d.isDone||void 0===d.playCursorInSeconds||(n.startTime=d.playCursorInSeconds)}d.services.dispatcher.publish(So.playInitiated,{item:e,timestamp:null!==(_=null===(y=n.meta)||void 0===y?void 0:y.initiatedTimestamp)&&void 0!==_?_:Date.now()});try{n&&d._mediaItemPlayback.playOptions.set(e.id,n);const p=yield d._playbackController.playSingleMediaItem(e,n);return d.services.dispatcher.publish(So.capabilitiesChanged),p}catch(Q){He.error("mk:playMediaItem error",Q),d._handlePlaybackError(Q)}}))()}removeEventListener(e,n){!function(e,n,d){const p=getCallbacksForName(n);let h;for(let y=p.length-1;y>=0;y--){const[e,n]=p[y];if(e===d){h=n,p.splice(y,1);break}}h&&e.unsubscribe(n,h)}(this._services.dispatcher,e,n)}exitFullscreen(){return this._mediaItemPlayback.exitFullscreen()}requestFullscreen(e){return this._mediaItemPlayback.requestFullscreen(e)}loadPreviewImage(e){var n=this;return _async_to_generator$8((function*(){return n._mediaItemPlayback.loadPreviewImage(e)}))()}getNewSeeker(){return this._playbackController.getNewSeeker()}seekToTime(e,n=St.Manual){var d=this;return _async_to_generator$8((function*(){if(d._isPlaybackSupported()){yield d._validateAuthorization();try{yield d._playbackController.seekToTime(e,n)}catch(Q){d._handlePlaybackError(Q)}return Promise.resolve()}}))()}setPresentationMode(e){var n=this;return _async_to_generator$8((function*(){return n._mediaItemPlayback.setPresentationMode(e)}))()}skipToNextItem(){var n=this;return _async_to_generator$8((function*(){if(n._isPlaybackSupported()){yield n._validateAuthorization(),n._signalIntent({endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS,direction:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS});try{yield n._playbackController.skipToNextItem()}catch(Q){n._handlePlaybackError(Q)}}}))()}skipToPreviousItem(){var n=this;return _async_to_generator$8((function*(){if(n._isPlaybackSupported()){yield n._validateAuthorization(),n._signalIntent({endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_BACKWARDS,direction:e.PlayActivityEndReasonType.TRACK_SKIPPED_BACKWARDS});try{yield n._playbackController.skipToPreviousItem()}catch(Q){n._handlePlaybackError(Q)}}}))()}seekForward(){var n=this;return _async_to_generator$8((function*(){if(n._isPlaybackSupported()){yield n._validateAuthorization();try{n._signalIntent({endReasonType:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS,direction:e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS}),yield n._playbackController.seekForward()}catch(Q){n._handlePlaybackError(Q)}}}))()}seekBackward(){var e=this;return _async_to_generator$8((function*(){if(e._isPlaybackSupported()){yield e._validateAuthorization();try{yield e._playbackController.seekBackward()}catch(Q){e._handlePlaybackError(Q)}}}))()}showPlaybackTargetPicker(){this._playbackController.showPlaybackTargetPicker()}stop(e){var n=this;return _async_to_generator$8((function*(){var d,p;if(n._isPlaybackSupported()){var h;n._signalIntent({endReasonType:null===(d=e)||void 0===d?void 0:d.endReasonType,userInitiated:null===(h=null===(p=e)||void 0===p?void 0:p.userInitiated)||void 0===h||h});try{yield n._playbackController.stop(e)}catch(Q){n._handlePlaybackError(Q)}}}))()}unauthorize(){return _async_to_generator$8((function*(){return wo.unauthorize()}))()}unmute(){return this._mediaItemPlayback.unmute()}_createPlayerControllerOptions(){var e;return{tokens:wo,bag:To,playbackServices:{getRTCStreamingTracker:()=>{var e;return null===(e=this._services.playActivity)||void 0===e?void 0:e.getTrackerByType(RTCStreamingTracker)},hasMusicSubscription:hasMusicSubscription,prepareForEncryptedPlayback:(e,n)=>function(e,n,d){return _prepareForEncryptedPlayback.apply(this,arguments)}(this._services.apiManager,e,n),requiresHlsJs:requiresHlsJs},services:this._services,context:this.context,autoplayEnabled:this.autoplayEnabled,privateEnabled:this.privateEnabled,siriInitiated:this.siriInitiated,storekit:null===(e=wo)||void 0===e?void 0:e.storekit,playbackMode:this.playbackMode}}_getPlaybackControllerByType(e){const n=this._playbackControllers[e];if(n)return n;let d;switch(e){case qo.serial:d=new SerialPlaybackController(this._createPlayerControllerOptions());break;case qo.continuous:d=new ContinuousPlaybackController(this._createPlayerControllerOptions());break;default:throw new MKError(MKError.Reason.UNSUPPORTED_ERROR,"Unsupported controller requested: "+e)}return this._playbackControllers[e]=d,d}_handlePlaybackError(e){if(He.error("mediaPlaybackError",e),MKError.isMKError(e)&&Ma.includes(e.reason))throw e;this._playbackErrorDialog&&!this._services.runtime.isNodeEnvironment&&MKDialog.presentError(e)}_initializeInternalEventHandling(){wo.storekit.addEventListener(So.userTokenDidChange,()=>{this._whenConfigured&&this._whenConfigured.then(()=>this._configurePlayActivity().catch()).catch()});const n=this._services.dispatcher;n.subscribe(So.mediaPlaybackError,(e,n)=>this._handlePlaybackError(n)),n.subscribe(So.playbackStateDidChange,(n,d)=>{d.state===e.PlaybackStates.paused&&(He.debug("mk: playbackStateDidChange callback - calling storekit.presentSubscribeViewForEligibleUsers"),wo.storekit.presentSubscribeViewForEligibleUsers({state:d.state,item:this.nowPlayingItem},!1))})}_initializeExternalEventPublishing(){[So.authorizationStatusDidChange,So.storefrontCountryCodeDidChange,So.storefrontIdentifierDidChange,So.userTokenDidChange,So.eligibleForSubscribeView].forEach(e=>{wo.storekit.addEventListener(e,n=>this._services.dispatcher.publish(e,n))});const e=pt[this.storefrontId.toUpperCase()],n=dt[e];this._services.dispatcher.subscribe(jn,(e,d)=>{d.resolveAdamIdFromStorefront(n),this._services.dispatcher.publish(So.timedMetadataDidChange,d)})}configureLogger(e){var n;He.level===Ge&&(!0===e.debug?setRootLoggingLevel(R.DEBUG):void 0!==e.logLevel&&setRootLoggingLevel(e.logLevel)),void 0!==e.logHandler&&(n=e.logHandler,He.handlers.external=new CallbackHandler(n))}_configurePlayActivity(){var e=this;return _async_to_generator$8((function*(){void 0!==e._services.playActivity&&(yield e._services.playActivity.configure({instance:e,services:e._services}))}))()}_isPlaybackSupported(){return!this._services.runtime.isNodeEnvironment||(He.warn("Media playback is not supported in Node environments."),!1)}_updatePlaybackController(e){var n=this;return _async_to_generator$8((function*(){He.debug("mk: _updatePlaybackController",e),n._playbackControllerInternal!==e&&(n._playbackControllerInternal&&(yield n._playbackControllerInternal.deactivate()),n._playbackController=e)}))()}_signalChangeItemIntent(){this._signalIntent({endReasonType:e.PlayActivityEndReasonType.MANUALLY_SELECTED_PLAYBACK_OF_A_DIFF_ITEM})}_signalIntent(e){this.services.dispatcher.publish(_t.userActivityIntent,_object_spread$5({userInitiated:!0},e))}_validateAuthorization(n=!1){var d=this;return _async_to_generator$8((function*(){(n||d.playbackMode===e.PlaybackMode.FULL_PLAYBACK_ONLY)&&(void 0!==d._playbackControllerInternal&&d._playbackControllerInternal.isReady&&d._playbackControllerInternal.isPlaying||(yield d.authorize()))}))()}constructor(n,d,p){if(_define_property$7(this,"app",void 0),_define_property$7(this,"capabilities",void 0),_define_property$7(this,"context",void 0),_define_property$7(this,"_autoplayEnabled",!1),_define_property$7(this,"id",void 0),_define_property$7(this,"prefix",void 0),_define_property$7(this,"privateEnabled",!1),_define_property$7(this,"siriInitiated",!1),_define_property$7(this,"sourceType",Lt.MUSICKIT),_define_property$7(this,"version",e.version),_define_property$7(this,"playbackActions",void 0),_define_property$7(this,"guid",void 0),_define_property$7(this,"_bag",To),_define_property$7(this,"_playbackControllers",{}),_define_property$7(this,"_playbackControllerInternal",void 0),_define_property$7(this,"_services",void 0),_define_property$7(this,"_playbackErrorDialog",!0),_define_property$7(this,"_playbackMode",e.PlaybackMode.MIXED_CONTENT),_define_property$7(this,"_whenConfigured",void 0),"string"!=typeof n)throw new Error("MusicKit was initialized without an developerToken.");Object.assign(To.features,function(e=[]){const n={};return e.forEach(e=>{"-"===e.charAt(0)?(e=e.substr(1),n[e]=!1):n[e]=!0}),n}(p.features));const h=Da.get();h&&(He.warn("Overriding bag.features with",h),To.features=_object_spread$5({},To.features,h)),Object.assign(To.autoplay,p.autoplay),this.context={};const y=new PubSub;this.capabilities=new Capabilities(y),p.playbackActions&&(this.playbackActions=p.playbackActions),p.guid&&(this.guid=p.guid);const _=new TimingAccuracy(!!To.features["player-accurate-timing"]),m=new BitrateCalculator(y,p.bitrate);this._services={runtime:d,dispatcher:y,timing:_,bitrateCalculator:m},void 0!==p.playActivityAPI&&(this._services.playActivity=new PlayActivityService(y,p.playActivityAPI)),p.services=this._services,this.configureLogger(p),To.app=p.app||{},To.store=new DataStore({filter:getFilterFromFlags(p.storeFilterTypes||[]),shouldDisableRecordReuse:!!To.features["disable-data-store-record-reuse"]}),Object.assign(To.urls,p.urls||{});const g=function(e,n){return wo=new Store(e,n),wo}(n,p);this._services.apiManager=new APIServiceManager(g,y);const b=new MediaItemPlayback(this._createPlayerControllerOptions());this._services.mediaItemPlayback=b,p.sourceType&&(this.sourceType=p.sourceType),this._initializeInternalEventHandling(),p.bitrate&&(this.bitrate=p.bitrate),p.prefix&&/^(?:web|preview)$/.test(p.prefix)&&(this.prefix=To.prefix=p.prefix),p.suppressErrorDialog&&(this._playbackErrorDialog=!p.suppressErrorDialog),void 0!==p.playbackMode&&(this.playbackMode=p.playbackMode),this.privateEnabled=p.privateEnabled||!1,this.siriInitiated=p.siriInitiated||!1,this.id=generateUUID(),He.info("MusicKit JS Version: "+this.version),He.info("InstanceId",this.id),He.debug("Link Parameters",p.linkParameters),To.app&&He.debug("App",To.app)}}function asyncGeneratorStep$7(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$7(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$7(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$7(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function dispatchDocumentEvent(e){if(detectNodeEnvironment())return;const n=new Event(e,{bubbles:!0,cancelable:!0});setTimeout(()=>document.dispatchEvent(n))}function _loadWebComponents(){return(_loadWebComponents=_async_to_generator$7((function*(){var e,n;if(detectNodeEnvironment())return;const d=findScript("musickit.js");if(""!==(null===(n=d)||void 0===n||null===(e=n.dataset)||void 0===e?void 0:e.webComponents))return;const p="noModule"in d,h=`components/musickit-components/musickit-components${p?".esm":""}.js`,y="https:"+cdnBaseURL(h)+h,_={};p&&(_.type="module"),d.hasAttribute("async")&&(_.async=""),d.hasAttribute("defer")&&(_.defer=""),yield loadScript(y,_),dispatchDocumentEvent(So.webComponentsLoaded)}))).apply(this,arguments)}function asyncGeneratorStep$6(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$6(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$6(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$6(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$6(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$4(e){for(var n=1;ne.cleanup());yield Promise.all(e),Na.splice(0,Na.length)}))).apply(this,arguments)}function configure$2(e){return _configure$1.apply(this,arguments)}function _configure$1(){return(_configure$1=_async_to_generator$6((function*(e,n=MKInstance,d){if(!e)throw new MKError(MKError.Reason.INVALID_ARGUMENTS,"configuration required");const p={},{developerToken:h,mergeQueryParams:y}=e;if(!h)throw new MKError(MKError.Reason.CONFIGURATION_ERROR,"Missing developer token");y&&xa&&window.location&&(p.linkParameters=_object_spread$4({},e.linkParameters||{},parseQueryParams(window.location.href)));const _=yield RuntimeEnvironment.detect();yield findKeySystemPreference(_);const m=new n(h,_,_object_spread$4({},e,p));return La||(yield cleanupInstances()),d&&(yield d(m)),Na.push(m),dispatchDocumentEvent(So.configured),m}))).apply(this,arguments)}function getInstances(){return Na}function _define_property$5(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$3(e){for(var n=1;n/^(fields|extend)/.test(e)),d.views&&(h.views=d.views),d.include&&(h.relationships=d.include)),this.hasDataStore&&!y){let p,y=[];if(d&&(y=Object.keys(d).reduce((e,n)=>(-1===ja.indexOf(n)&&e.push([n,d[n]]),e),y)),p=y&&1===y.length?this._store.query(y[0][0],y[0][1]):this._store.peek(e,n,h),Array.isArray(p)){if(!d&&p.length)return p}else if(p)return p}if("function"==typeof p)return p()}write(e){return this._prepareDataForDataStore(e,e=>this._store.save(e))}parse(e){return this._prepareDataForDataStore(e,e=>this._store.populateDataRecords(e,{}))}_prepareDataForDataStore(e,n){return this.hasDataStore?Array.isArray(e)?n({data:e}):Object.keys(e).reduce((d,p)=>{const h=e[p];return hasOwn(h,"data")&&(d[p]=n({data:h.data})),"meta"===p&&(d[p]=e[p]),d},{}):e}constructor(e={}){_define_property$4(this,"_store",void 0),_define_property$4(this,"enableDataStore",!1);let n=!1;e.features&&hasOwn(e.features,"api-data-store")&&(this.enableDataStore=!!e.features["api-data-store"]),e.features&&hasOwn(e.features,"disable-data-store-record-reuse")&&(n=!!e.features["disable-data-store-record-reuse"]),this.enableDataStore&&(this._store=e.store||new DataStore({shouldDisableRecordReuse:n}),this._store.mapping=transformStoreData)}}function _define_property$3(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread_props$2(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var d=Object.keys(e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);n&&(p=p.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),d.push.apply(d,p)}return d}(Object(n)).forEach((function(d){Object.defineProperty(e,d,Object.getOwnPropertyDescriptor(n,d))})),e}var Ua,Ba;!function(e){e[e.Global=0]="Global",e.Catalog="catalog",e.Personalized="me",e.Editorial="editorial",e.Engagement="engagement",e.Social="social"}(Ua||(Ua={})),function(e){e.songs="songs",e.albums="albums",e.playlists="playlists",e.stations="stations",e["music-videos"]="music-videos",e["library-music-videos"]="library-music-videos",e["library-playlists"]="library-playlists",e["library-songs"]="library-songs"}(Ba||(Ba={}));class API extends class extends class{clearCacheForRequest(e,n){"object"==typeof e&&(n=e,e=void 0);const d=this.constructURL(e,n);this.networkCache.removeItemsMatching(d)}request(e,n,d){var p,h=this;return(p=function*(){d||"object"!=typeof e||(d=n||{},n=e,e=void 0);let p={};"object"==typeof(d=_object_spread$D({method:h.method,headers:h.headers,reload:!1},h._fetchOptions,d)).queryParameters?(p=d.queryParameters,delete d.queryParameters):"GET"!==d.method&&"DELETE"!==d.method||(p=n);const y=h.constructURL(e,p),{method:_,reload:m=!1,useRawResponse:g}=d;if(d.headers=h.buildHeaders(d),delete d.reload,delete d.useRawResponse,"GET"===_&&!m){const e=h.getCacheItem(y);if(e)return Promise.resolve(e)}n&&Object.keys(n).length&&("POST"===_||"PUT"===_)&&(d.body=d.body||n,d.contentType===Gt.FORM?(d.body=urlEncodeParameters(d.body),d.headers.set("Content-Type",Gt.FORM)):(d.body=JSON.stringify(d.body),d.headers.set("Content-Type",Gt.JSON)));const b=yield h._fetchFunction(y,d);if(!b.ok)return Promise.reject(b);let S;try{S=yield b.json()}catch(Ut){S={}}if(S.errors)return Promise.reject(S.errors);const P=g?S:S.results||S.data||S;if("GET"===_){var E;const e=null!==(E=getMaxAgeFromHeaders(b.headers))&&void 0!==E?E:h.ttl;h.setCacheItem(y,P,e)}return P},function(){var e=this,n=arguments;return new Promise((function(d,h){var y=p.apply(e,n);function _next(e){asyncGeneratorStep$10(y,d,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$10(y,d,h,_next,_throw,"throw",e)}_next(void 0)}))})()}buildHeaders({headers:e,reload:n=!1}={}){void 0===e&&(e=this.headers);const d=(e=>new e.constructor(e))(e);return n&&d.set("Cache-Control","no-cache"),d}constructURL(e,n){return d=this.url,p=n,addQueryParamsToURL(addPathToURL(d,e),p);var d,p}getCacheItem(e){const n=this.networkCache.storage,d=`${this.prefix}${this.prefix}cache-mut`,p=n.getItem(d)||null,h=this.headers.get("Music-User-Token")||this.headers.get("Media-User-Token")||null;return h!==p&&(this.networkCache.clear(),null===h?n.removeItem(d):n.setItem(d,h)),this.networkCache.getItem(e)}setCacheItem(e,n,d=this.ttl){this.networkCache.setItem(e,n,d)}clearNetworkCache(){this.networkCache.clear()}_key(e,n){const d=function(e){try{const[n,d]=e.split("?",2);if(void 0===d)return n;const p=d.split("&").map(e=>e.split("=",2)),h=[...Array(p.length).keys()];h.sort((e,n)=>{const d=p[e],h=p[n];return dh?1:e-n});const y=h.map(e=>p[e]);return`${n}?${y.map(([e,n])=>void 0!==n?`${e}=${n}`:e).join("&")}`}catch(Ut){return e}}(e).toLowerCase().replace(this.url,"");return`${this.prefix}${d.replace(/[^-_0-9a-z]{1,}/g,".")}`}constructor(e,n){if(_define_property$1x(this,"url",void 0),_define_property$1x(this,"headers",void 0),_define_property$1x(this,"prefix",""),_define_property$1x(this,"storage",void 0),_define_property$1x(this,"networkCache",void 0),_define_property$1x(this,"ttl",void 0),_define_property$1x(this,"method","GET"),_define_property$1x(this,"_fetchOptions",void 0),_define_property$1x(this,"_fetchFunction",void 0),this.url=e,(n=n||{}).storage&&n.underlyingStorage)throw new Error("only pass storage OR underlyingStorage in sessionOptions to URLSession");const d=n.underlyingStorage||{};if(this.storage=n.storage||new GenericStorage(d),this.networkCache=new NetworkCache({storage:this.storage,prefix:this.prefix,cacheKeyFunction:this._key.bind(this)}),this.ttl=n.ttl||3e5,this._fetchOptions=_object_spread$D({},n.fetchOptions),"function"!=typeof n.fetch&&"function"!=typeof fetch)throw new Error("window.fetch is not defined");var p;this._fetchFunction=null!==(p=n.fetch)&&void 0!==p?p:fetch.bind(window),this.headers=this._fetchOptions.headers||new Headers,delete this._fetchOptions.headers}}{get developerToken(){return this._developerToken.token}constructor(e,n,d){super(e,d),_define_property$1x(this,"userToken",void 0),_define_property$1x(this,"_developerToken",void 0),this._developerToken=new DeveloperToken(n),this.headers.set("Authorization","Bearer "+this.developerToken),d=d||{},this.userToken=d.userToken,this.userToken&&this.headers.set("Media-User-Token",this.userToken)}}{get needsEquivalents(){const{userStorefrontId:e}=this;return void 0!==e&&""!==e&&e!==this.storefrontId}constructor(e,n,d,p,h,y,_={},m){super(e,n,_object_spread_props$2(function(e){for(var n=1;n{n.store.storekit.addEventListener(e,()=>n.resetAPI())}),n._initializeAPI(e))}))()}clear(){this.api&&this.api.clearNetworkCache&&this.api.clearNetworkCache()}getAPIForItem(e){var n=this;return _async_to_generator$5((function*(){return T(e)?(yield n.store.authorize(),n.api.library||n.api):n.api}))()}resetAPI(){var e=this;return _async_to_generator$5((function*(){e.clear(),e._initializeAPI()}))()}_initializeAPI(e){var n;if(void 0!==(null===(n=e)||void 0===n?void 0:n.api))return void(this._api=e.api);const d=e&&e.store||this.store;if(void 0===d)return;const p=To.features["api-session-storage"]?getSessionStorage():void 0,h=e&&e.storefrontId||d.storefrontId,y=new API(this.url,d.developerToken,h,d.storekit.userToken,d.storekit.storefrontCountryCode,p,To,e&&e.apiOptions&&e.apiOptions.sessionOptions);this._api=y.v3}_updateStorefrontId(e){var n=this;return _async_to_generator$5((function*(){n.api&&e===n.api.storefrontId||(yield n.configure({dispatcher:n._dispatcher,store:n.store,storefrontId:e}))}))()}constructor(e){if(_define_property$2(this,"_dispatcher",void 0),_define_property$2(this,"namedQueueOptions",void 0),_define_property$2(this,"url",void 0),_define_property$2(this,"store",void 0),_define_property$2(this,"_api",void 0),this._dispatcher=e,!To.urls.mediaApi)throw new Error("bag.urls.mediaApi is not configured");this.url=To.urls.mediaApi,this.namedQueueOptions=Ga;var n=this;this._dispatcher.subscribe(_t.apiStorefrontChanged,function(){var e=_async_to_generator$5((function*(e,{storefrontId:d}){yield n._updateStorefrontId(d)}));return function(n,d){return e.apply(this,arguments)}}())}}const Va=["uploadedVideo","uploadedAudio","uploaded-videos","uploaded-audios"];function asyncGeneratorStep$4(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$4(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$4(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$4(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property$1(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread$1(e){for(var n=1;n{switch(typeof n){case"string":return n;case"undefined":return"undefined";default:return"PlayActivityEndReasonType."+e.PlayActivityEndReasonType[n]}};class MPAFTracker{get requestedEvents(){return Array.from(this.dispatchTable.keys())}get isConfigured(){return void 0!==this.instance}get activityTracker(){if(void 0===this._activityTracker)throw new MKError(MKError.Reason.CONFIGURATION_ERROR,"Play Activity service was called before configuration.");return this._activityTracker}configure(e){var n=this;return _async_to_generator$4((function*(){var d,p,h;n.instance=e.instance,n.services=e.services,n._activityTracker=(d=e.instance,p=e.services.runtime,new PlayActivity(d.developerToken,d.musicUserToken,d.storefrontCountryCode,{app:{build:To.app.build,name:null!==(h=To.app.name)&&void 0!==h?h:"",version:To.app.version},fetch:!p.isNodeEnvironment&&fetch.bind(globalThis),isQA:qa.enabled,logInfo:Ha.enabled,sourceType:d.sourceType,guid:d.guid,userIsSubscribed:()=>!(!d.isAuthorized||!wo.storekit._getIsActiveSubscription.getCachedValue())}))}))()}handleEvent(e,n,d){if(!this.shouldTrackPlayActivity(e,d))return;const p=this.dispatchTable.get(e);void 0!==p&&"function"==typeof this[p]&&this[p](d,n)}activate(e,n={}){return this.activityTracker.activate(n.flush)}exit(e,n={}){return Ha.debug("PAF debug",`client.exit(${n.position})`),this.activityTracker.exit(n.position)}pause(e,n={}){return"number"==typeof n.endReasonType?(Ha.debug("PAF debug",`client.stop(${n.position}, ${n.endReasonType})`),this.activityTracker.stop(n.position,n.endReasonType)):(Ha.debug("PAF debug",`client.pause(${n.position})`),this.activityTracker.pause(n.position))}play(e,n={}){const d=generateItemDescriptorForPAF(_t.playbackPlay,this.instance,e);return isLiveRadioKind(e,"video")&&(this.musicLiveVideoStartTime=Date.now()),Ha.debug("PAF debug",`client.play(${JSON.stringify(d)}, ${n.position})`),this.activityTracker.play(d,n.position)}scrub(e,n={}){return Ha.debug("PAF debug",`client.scrub(${n.position}, ${asCode(n.endReasonType)})`),this.activityTracker.scrub(n.position,n.endReasonType)}seek(n,d={}){var p=this;return _async_to_generator$4((function*(){yield p.scrub(n,{position:d.startPosition,endReasonType:e.PlayActivityEndReasonType.SCRUB_BEGIN}),yield p.scrub(n,{position:d.position,endReasonType:e.PlayActivityEndReasonType.SCRUB_END})}))()}skip(e,n={}){var d=this;return _async_to_generator$4((function*(){const p=generateItemDescriptorForPAF(_t.playbackSkip,d.instance,e);Ha.debug("PAF debug",`client.skip(${JSON.stringify(p)}, ${asCode(n.direction)}, ${n.position})`);try{yield d.activityTracker.skip(p,n.direction,n.position)}catch(Ut){if("A play stop() method was called without a previous play() descriptor"!==Ut.message)return Promise.reject(Ut);yield d.play(e,n)}}))()}stop(n,d={}){var p,h,y;(isLiveRadioKind(n,"video")?(d.position=(Date.now()-this.musicLiveVideoStartTime)/1e3,this.musicLiveVideoStartTime=0):(null===(p=n)||void 0===p?void 0:p.isLiveRadioStation)&&d.position&&(d.position=d.position-(d.startPosition||0)),null===(h=n)||void 0===h?void 0:h.isLiveRadioStation)&&(d.endReasonType=null!==(y=d.endReasonType)&&void 0!==y?y:e.PlayActivityEndReasonType.PLAYBACK_MANUALLY_PAUSED);return Ha.debug("PAF debug",`client.stop(${d.position}, ${asCode(d.endReasonType)})`),this.activityTracker.stop(d.position,d.endReasonType)}shouldTrackPlayActivity(n,d){const p=hasAuthorization(),h=!d||d.playbackType!==e.PlaybackType.preview,y=this.alwaysSendForActivityType(n),_=!d||d&&this.mediaRequiresPlayActivity(d);return!(!p||!h||!y&&!_)}alwaysSendForActivityType(e){return e===_t.playerActivate||e===_t.playerExit}mediaRequiresPlayActivity(e){return void 0!==(n=e.type)&&Va.includes(n)||-1!==["musicVideo","song","radioStation"].indexOf(e.type);var n}constructor(){_define_property$1(this,"instance",void 0),_define_property$1(this,"services",void 0),_define_property$1(this,"_activityTracker",void 0),_define_property$1(this,"musicLiveVideoStartTime",0),_define_property$1(this,"dispatchTable",new Map([[_t.playbackPlay,"play"],[_t.playbackPause,"pause"],[_t.playbackScrub,"scrub"],[_t.playbackSeek,"seek"],[_t.playbackSkip,"skip"],[_t.playbackStop,"stop"],[_t.playerActivate,"activate"],[_t.playerExit,"exit"]]))}}function generateItemDescriptorForPAF(n,d,p){var h;const y=_object_spread_props$1(_object_spread$1({},function(n,d,p){var h;if(void 0===(null===(h=p)||void 0===h?void 0:h.playbackActions)||void 0===d)return{};const y={[e.PlayerRepeatMode.all]:Ot.REPEAT_ALL,[e.PlayerRepeatMode.none]:Ot.REPEAT_OFF,[e.PlayerRepeatMode.one]:Ot.REPEAT_ONE},_={[e.PlayerShuffleMode.off]:At.SHUFFLE_OFF,[e.PlayerShuffleMode.songs]:At.SHUFFLE_ON};return{playMode(){let n=Ot.REPEAT_UNKNOWN,d=At.SHUFFLE_UNKNOWN,h=Rt.AUTO_UNKNOWN;const{playbackActions:m}=p;var g;return m&&(m.includes(e.PlaybackActions.REPEAT)&&(n=y[p.repeatMode]),m.includes(e.PlaybackActions.SHUFFLE)&&(d=_[p.shuffleMode]),m.includes(e.PlaybackActions.AUTOPLAY)&&(h=p.autoplayEnabled?(g=p.queue).hasAutoplayStation&&g.items.some(e=>{const{id:n,type:d,container:p}=e;if(p&&"stations"===p.type&&p.name===mt.RADIO)return!1;const h=normalizeTypeForAutoplay(n,d);return isAutoplaySupportedForType(h)})?Rt.AUTO_ON:Rt.AUTO_ON_CONTENT_UNSUPPORTED:Rt.AUTO_OFF)),{repeatPlayMode:n,shufflePlayMode:d,autoplayMode:h}}}}(0,p,d),function(e,n){var d;if(!typeRequiresItem(e))return{};if(void 0===n)return{};const p=null===(d=n.attributes)||void 0===d?void 0:d.mediaKind;return _object_spread$1({},void 0!==p?{mediaType:p}:{},n.playParams)}(n,p),function(e,n){if(!typeRequiresItem(e)||void 0===n)return{};const{context:d={}}=n;return{recoData:d.reco_id}}(n,p),function(e,n){if(!typeRequiresItem(e)||void 0===n)return{};const d=n.playbackDuration;if(!d)return{};return{duration:d/1e3}}(n,p),function(e,n){var d,p,h,y,_,m,g;const b=function(e,n){var d,p;return itemIsRequired(e,n)&&(null===(p=n)||void 0===p||null===(d=p.container)||void 0===d?void 0:d.name)||null}(e,n),S=itemIsRequired(e,n)?_object_spread$1({},null===(d=n)||void 0===d?void 0:d.container,null===(y=n)||void 0===y||null===(h=y.container)||void 0===h||null===(p=h.attributes)||void 0===p?void 0:p.playParams,(null===(g=n)||void 0===g||null===(m=g.container)||void 0===m||null===(_=m.attributes)||void 0===_?void 0:_.hasCollaboration)&&{isCollaborative:!0}):null;if(null===b&&null===S)return;return{container:cleanContainer(_object_spread$1({},S,null!==b?{name:b}:{}))}}(n,p)),{trackInfo:null===(h=p)||void 0===h?void 0:h.trackInfo});return Ha.trace("PAF descriptor",y),y}const qa=BooleanDevFlag.register("mk-use-paf-qa-endpoint");const typeRequiresItem=e=>[_t.playbackPlay,_t.playbackSkip].includes(e),itemIsRequired=(e,n)=>void 0!==n&&typeRequiresItem(e);function cleanContainer(e){const n=_object_spread$1({},e);return delete n.attributes,n}function asyncGeneratorStep$3(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$3(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$3(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$3(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _define_property(e,n,d){return n in e?Object.defineProperty(e,n,{value:d,enumerable:!0,configurable:!0,writable:!0}):e[n]=d,e}function _object_spread(e){for(var n=1;ne.isAuthorized&&wo.storekit._getIsActiveSubscription.getCachedValue()}))),this._activityTracker}get isConfigured(){return void 0!==this.instance}static configure(e){var n=this;return _async_to_generator$3((function*(){const d=new n;return d.configure(e),d}))()}configure(e){var n=this;return _async_to_generator$3((function*(){n.instance=e.instance,n.services=e.services}))()}handleEvent(e,n,d){const p=this.dispatchTable.get(e);void 0!==p&&"function"==typeof this[p]&&this[p](d,n)}lyricsPlay(e,n){var d=this;return _async_to_generator$3((function*(){var p;const h=null===(p=n)||void 0===p?void 0:p.lyrics;if(void 0===h)throw new MKError(MKError.Reason.MEDIA_DESCRIPTOR,"Key lyrics is missing from descriptor provided to lyricsPlay");if(void 0===e)throw new MKError(MKError.Reason.MEDIA_DESCRIPTOR,"Cannot display lyrics without a MediaItem");d.activityTracker.play(function(e,n,d){var p,h,y,_;return _object_spread_props(_object_spread({id:n.id,duration:0,eventType:Ct.LYRIC_DISPLAY,container:_object_spread({},n.container,null===(h=n.container)||void 0===h||null===(p=h.attributes)||void 0===p?void 0:p.playParams)},n.playParams),{lyricDescriptor:{id:null!==(_=d.id)&&void 0!==_?_:n.id,displayType:d.displayType,language:d.language},trackInfo:n.trackInfo,recoData:null===(y=n.attributes)||void 0===y?void 0:y.reco_id})}(_t.lyricsPlay,e,h))}))()}lyricsStop(e,n){var d=this;return _async_to_generator$3((function*(){d.activityTracker.stop()}))()}exit(e,n){var d=this;return _async_to_generator$3((function*(){d.activityTracker.exit()}))()}constructor(){_define_property(this,"dispatchTable",new Map([[_t.lyricsPlay,"lyricsPlay"],[_t.lyricsStop,"lyricsStop"],[_t.playerExit,"exit"]])),_define_property(this,"instance",void 0),_define_property(this,"services",void 0),_define_property(this,"_activityTracker",void 0)}}const Ya=BooleanDevFlag.register("mk-use-paf-qa-endpoint");function asyncGeneratorStep$2(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$2(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$2(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$2(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function _ts_metadata(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}class MusicKitInstance extends MKInstance{addToLibrary(e,n){var d=this;return _async_to_generator$2((function*(){let p;return yield d.authorize(),n||(n=/[a-z]{2}\.[a-z0-9\-]+/i.test(e)?"playlists":"albums"),d.api.music&&(p=d.api.music("/v1/me/library",{[`ids[${n}]`]:e},{fetchOptions:{method:"POST"}})),p}))()}changeToMediaItem(e){var n=this,_superprop_get_changeToMediaItem=()=>super.changeToMediaItem;return _async_to_generator$2((function*(){return n._checkNeedsEquivalent(),_superprop_get_changeToMediaItem().call(n,e)}))()}play(){var e=this,_superprop_get_play=()=>super.play;return _async_to_generator$2((function*(){return e._checkNeedsEquivalent(),_superprop_get_play().call(e)}))()}playMediaItem(e,n){var d=this,_superprop_get_playMediaItem=()=>super.playMediaItem;return _async_to_generator$2((function*(){if(d._isPlaybackSupported())return d._checkNeedsEquivalent(),_superprop_get_playMediaItem().call(d,e,n)}))()}_isStationQueueOptions(e){return!(!(e=>!!e&&(!!isIdentityQueue(e)||(!!isQueueURLOption(e)||Object.keys(Zo).some(n=>void 0!==e[n]))))(e=parseQueueURLOption(e))||(e=>{if(!e)return!1;if(isQueueURLOption(e))return!0;if(isQueueItems(e))return!0;return Object.keys(aa).concat(Object.keys(sa)).some(n=>void 0!==e[n])})(e))}setStationQueue(e){var n=this,_superprop_get__validateAuthorization=()=>super._validateAuthorization;return _async_to_generator$2((function*(){if(!n._isPlaybackSupported())return void He.warn("Playback is not supported");n._signalChangeItemIntent(),n.deferPlayback(),yield n._updatePlaybackController(n._getPlaybackControllerByType(qo.continuous)),yield _superprop_get__validateAuthorization().call(n,!0),e=parseQueueURLOption(e);const d=n._playbackController.setQueue(e);return void 0!==e.autoplay&&(deprecationWarning("autoplay",{message:"autoplay has been deprecated, use startPlaying instead"}),void 0===e.startPlaying&&(e.startPlaying=e.autoplay)),e.startPlaying&&(yield n.play()),d}))()}setQueue(e){var n=this;return _async_to_generator$2((function*(){if(He.debug("instance.setQueue()",e),n._checkNeedsEquivalent(),!n._isPlaybackSupported())return void He.warn("Playback is not supported");if(n._isStationQueueOptions(e))return He.warn("setQueue options contained a station queue request. Changing to setStationQueue mode."),n.setStationQueue(e);n._signalChangeItemIntent(),n.deferPlayback(),yield n._updatePlaybackController(n._getPlaybackControllerByType(qo.serial));const d=yield n._playbackController.setQueue(e);return void 0!==e.repeatMode&&(n._playbackController.repeatMode=e.repeatMode),void 0!==e.autoplay&&(deprecationWarning("autoplay",{message:"autoplay has been deprecated, use startPlaying instead"}),void 0===e.startPlaying&&(e.startPlaying=e.autoplay)),e.startPlaying&&(yield n.play()),d}))()}_checkNeedsEquivalent(){var n;if(this.realm===e.SKRealm.MUSIC&&!this.previewOnly&&(null===(n=this.api)||void 0===n?void 0:n.needsEquivalents))throw new MKError(MKError.Reason.CONTENT_EQUIVALENT)}playNext(e,n=!1){var d=this;return _async_to_generator$2((function*(){if(d._isPlaybackSupported())return d._playbackController.queue?(d.deferPlayback(),d._playbackController.prepend(e,n)):d.setQueue(e);He.warn("Playback is not supported")}))()}playLater(e){var n=this;return _async_to_generator$2((function*(){if(n._isPlaybackSupported())return n._playbackController.queue?(n.deferPlayback(),n._playbackController.append(e)):n.setQueue(e);He.warn("Playback is not supported")}))()}playAt(e,n){var d=this;return _async_to_generator$2((function*(){if(d._isPlaybackSupported())return d._playbackController.queue?(d.deferPlayback(),d._playbackController.insertAt(e,n)):d.setQueue(n);He.warn("Playback is not supported")}))()}clearQueue(){var e=this;return _async_to_generator$2((function*(){return e._mediaItemPlayback.clearNextManifest(),e._playbackController.clear()}))()}}var za;function asyncGeneratorStep$1(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator$1(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep$1(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep$1(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}!function(e,n,d,p){var h,y=arguments.length,_=y<3?n:null===p?p=Object.getOwnPropertyDescriptor(n,d):p;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(e,n,d,p);else for(var m=e.length-1;m>=0;m--)(h=e[m])&&(_=(y<3?h(_):y>3?h(n,d,_):h(n,d))||_);y>3&&_&&Object.defineProperty(n,d,_)}([(e,n,d)=>{const p=d.value;return d.value=function(...e){if(!this.isInSharePlay)return p.apply(this,e);za&&this.services.dispatcher.publish(za)},d},_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[Number,"undefined"==typeof SerialQueueOptions?Object:SerialQueueOptions])],MusicKitInstance.prototype,"playAt",null);function loadLinksData(){return _loadLinksData.apply(this,arguments)}function _loadLinksData(){return(_loadLinksData=_async_to_generator$1((function*(){const e=[{feature:"album-song",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/albums?/(?:[^/]+/)?(?\\d+)$",requiredQueryParams:{i:"(?\\d+)"},mediaAPI:{resources:["songs"]}},{feature:"albums",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/albums?/(?:[^/]+/)?(?\\d+)$",mediaAPI:{resources:["albums"]}},{feature:"algo-stations",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/stations?/(?:[^/]+/)?(?(?:ra|st).\\d+)",mediaAPI:{resources:["stations"]}},{feature:"artist-default-playable-content",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/artists?/(?:[^/]+/)?(?\\d+)$",mediaAPI:{resources:["artists","default-playable-content"]}},{feature:"genre-stations",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/genre-stations?",mediaAPI:{resources:["stations"],parameterMapping:{genres:"filter[genres]",eras:"filter[eras]",tags:"filter[tags]",moods:"filter[moods]"}}},{feature:"library-albums",regex:"http(?:s)?://(?itunes|music).apple.com/library/albums?/(?:[^/]+/)?(?(?:l).[a-zA-Z0-9-]+)$",mediaAPI:{resources:["albums"]}},{feature:"library-album-song",regex:"http(?:s)?://(?itunes|music).apple.com/library/albums?/(?:[^/]+/)?(?(?:l).[a-zA-Z0-9-]+)$",requiredQueryParams:{i:"(?i\\.[a-zA-Z0-9-]+)"},mediaAPI:{resources:["songs"]}},{feature:"library-playlists",regex:"http(?:s)?://(?itunes|music).apple.com/library/playlists?/(?:[^/]+/)?(?(?:p).[a-zA-Z0-9-]+)$",mediaAPI:{resources:["playlists"]}},{feature:"music-videos",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/music-videos?/(?:[^/]+/)?(?\\d+)$",mediaAPI:{resources:["musicVideos"]}},{feature:"personal-general-radio",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/stations?/me$",mediaAPI:{resources:["stations"],parameters:{"filter[identity]":"personal"}}},{feature:"personal-mixes",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/(?:personal-)?mix/(?:[^/]+/)?(?mx.(?:\\d{1,2}|rp-\\d{4}))$",mediaAPI:{resources:["playlists"]}},{feature:"playlists",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/playlists?/(?:[^/]+/)?(?(?:pl).[a-zA-Z0-9-]+)$",mediaAPI:{resources:["playlists"]}},{feature:"song",regex:"http(?:s)?://(?itunes|music).apple.com/(?\\w{2})/songs?/(?:[^/]+/)?(?\\d+)$",mediaAPI:{resources:["songs"]}},{feature:"steering-request",regex:"http(?:s)?://(?itunes|music).apple.com/me/stations?/change-station/?$",mediaAPI:{resources:["stations"]}}].map(e=>(e.regex=new RegExp(e.regex),e.requiredQueryParams&&(e.requiredQueryParams=Object.keys(e.requiredQueryParams).reduce((n,d)=>(n[d]=new RegExp(e.requiredQueryParams[d]),n),{})),e));return Promise.resolve(e)}))).apply(this,arguments)}function meetsLinkRequirements(e,n,d={}){const[p]=e.split(/\?|\#|\&/),h=n.regex.test(p);return h&&n.requiredQueryParams?Object.keys(n.requiredQueryParams).every(e=>{const p=d[e];return n.requiredQueryParams[e].test(p)}):h}function filterLinks(e){return _filterLinks.apply(this,arguments)}function _filterLinks(){return(_filterLinks=_async_to_generator$1((function*(e){const n=yield loadLinksData(),d=parseQueryParams(e);return n.reduce((n,p)=>{if(meetsLinkRequirements(e,p,d)){if(n.length>0)if(p.requiredQueryParams)n=n.filter(e=>e.requiredQueryParams);else if(n.some(e=>e.requiredQueryParams))return n;p.requiredQueryParams?p.mediaAPI.parameters=Object.keys(p.requiredQueryParams).reduce((e,n)=>(e[n]=d[n],e),{}):p.mediaAPI.parameterMapping&&(p.mediaAPI.parameters=transform$8(p.mediaAPI.parameterMapping,d,!0)),n.push(p)}return n},[])}))).apply(this,arguments)}function _resolveCanonical(){return(_resolveCanonical=_async_to_generator$1((function*(e){return{results:{links:yield filterLinks(e)},meta:{originalUrl:e,originalQueryParams:parseQueryParams(e)}}}))).apply(this,arguments)}function asyncGeneratorStep(e,n,d,p,h,y,_){try{var m=e[y](_),g=m.value}catch(Q){return void d(Q)}m.done?n(g):Promise.resolve(g).then(p,h)}function _async_to_generator(e){return function(){var n=this,d=arguments;return new Promise((function(p,h){var y=e.apply(n,d);function _next(e){asyncGeneratorStep(y,p,h,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(y,p,h,_next,_throw,"throw",e)}_next(void 0)}))}}function configure(e){return _configure.apply(this,arguments)}function _configure(){return(_configure=_async_to_generator((function*(e){He.linkChild(Be),He.linkChild(je),He.linkChild(ye),He.linkChild(Ue),e.playActivityAPI=[new MPAFTracker,new LyricsTracker];let n=MusicKitInstance;return yield configure$2(e,n,function(){var n=_async_to_generator((function*(n){const d={apiType:ca.MEDIA_API,configureFn:Ka,options:{}};yield n.configure([d]),e.declarativeMarkup&&"undefined"!=typeof console&&console.warn&&console.warn("The declarativeMarkup configuration option has been removed in MusicKit JS V3")}));return function(e){return n.apply(this,arguments)}}())}))).apply(this,arguments)}if(xa){const e=function(){function meta(e){var n;if(detectNodeEnvironment())return;return(null===(n=document.head.querySelector(`meta[name=${e}]`))||void 0===n?void 0:n.content)||void 0}const e=meta("apple-music-developer-token")||meta("JWT"),n=meta("apple-music-app-build")||meta("version"),d=meta("apple-music-app-name"),p=meta("apple-music-app-version");let h;return(e||n||d||p)&&(h={},e&&(h.developerToken=e),(n||d||p)&&(h.app={},n&&(h.app.build=n),d&&(h.app.name=d),p&&(h.app.version=p))),h}(),n=/interactive|complete|loaded/.test(document.readyState);e&&e.developerToken&&0===getInstances().length&&(n?asAsync(configure(e)):document.addEventListener("DOMContentLoaded",()=>configure(e)))}e.Events=So,e.MKError=MKError,e.MediaItem=MediaItem,e.VideoTypes={movie:!0,musicVideo:!0,musicMovie:!0,trailer:!0,tvEpisode:!0,uploadedVideo:!0,"uploaded-videos":!0,"music-videos":!0,"music-movies":!0,"tv-episodes":!0,Bonus:!0,Extra:!0,Episode:!0,Movie:!0,Preview:!0,Promotional:!0,Season:!0,Show:!0,Vod:!0,EditorialVideoClip:!0,RealityVideo:!0,SportingEvent:!0,LiveService:!0},e.configure=configure,e.enableMultipleInstances=function(){La=!0},e.formatArtworkURL=formatArtworkURL,e.formatMediaTime=function(e,n=":"){const{hours:d,minutes:p}=formattedSeconds(e);e=Math.floor(e%3600%60);const h=[];return d?(h.push(""+d),h.push(p<10?"0"+p:""+p)):h.push(""+p),h.push(e<10?"0"+e:""+e),h.join(n)},e.formattedMediaURL=formattedMediaURL,e.formattedMilliseconds=function(e){return formattedSeconds(e/1e3)},e.formattedSeconds=formattedSeconds,e.generateEmbedCode=function(e,n={height:"450",width:"660"}){if(!p.test(e))throw new Error("Invalid content url");var d;let _=null!==(d=n.height)&&void 0!==d?d:"450";var m;let g=null!==(m=n.width)&&void 0!==m?m:"660";const{kind:b,isUTS:S}=formattedMediaURL(e),P="post"===b||"musicVideo"===b||S;"song"===b||"episode"===b?_="175":P&&(_=""+Math.round(.5625*parseInt(g,10))),_=(""+_).replace(/(\d+)px/i,"$1"),g=(""+g).replace(/^(\d+)(?!px)%?$/i,"$1px");const E=(P?"width:"+g:"width:100%;"+(g?"max-width:"+g:""))+";overflow:hidden;border-radius:10px;";return``},e.getHlsJsCdnConfig=getHlsJsCdnConfig,e.getInstance=function(e){if(0!==Na.length)return void 0===e?Na[Na.length-1]:Na.find(n=>n.id===e)},e.getInstances=getInstances,e.getPlayerType=function(e){var n,d,p,h,y,_;return(null===(n=e)||void 0===n?void 0:n.isUTS)||re.includes(null===(d=e)||void 0===d?void 0:d.type)?"video":"podcast-episodes"===(null===(p=e)||void 0===p?void 0:p.type)?"audio":null!==(_=null===(y=e)||void 0===y||null===(h=y.attributes)||void 0===h?void 0:h.mediaKind)&&void 0!==_?_:"audio"},e.resolveCanonical=function(e){return _resolveCanonical.apply(this,arguments)},Object.defineProperty(e,"__esModule",{value:!0})}));
\ No newline at end of file
diff --git a/MusicPlayerV2-GUI/src/components/libraryView.vue b/MusicPlayerV2-GUI/src/components/libraryView.vue
index b5e9c2c..e27494e 100644
--- a/MusicPlayerV2-GUI/src/components/libraryView.vue
+++ b/MusicPlayerV2-GUI/src/components/libraryView.vue
@@ -1,10 +1,18 @@
\ No newline at end of file
diff --git a/MusicPlayerV2-GUI/src/components/playerView.vue b/MusicPlayerV2-GUI/src/components/playerView.vue
index 105aa73..cebd5cd 100644
--- a/MusicPlayerV2-GUI/src/components/playerView.vue
+++ b/MusicPlayerV2-GUI/src/components/playerView.vue
@@ -29,7 +29,7 @@
import { ref } from 'vue';
import playlistView from '@/components/playlistView.vue';
- import MusicKitJSWrapper from '@/scripts/player';
+ import MusicKitJSWrapper from '@/scripts/music-player';
const isPlaying = ref( false );
const repeatMode = ref( '' );
@@ -46,9 +46,9 @@
isPlaying.value = !isPlaying.value;
// TODO: Execute function on player
if ( isPlaying.value ) {
- player.play();
+ player.control( 'play' );
} else {
- player.pause();
+ player.control( 'pause' );
}
}
@@ -85,8 +85,28 @@
}
}
+ const getPlaylists = ( cb: ( data: object ) => void ) => {
+ player.getUserPlaylists( cb );
+ }
+
+ const logIntoAppleMusic = () => {
+ player.logIn();
+ }
+
+ const getAuth = (): boolean[] => {
+ return player.getAuth();
+ }
+
+ const skipLogin = () => {
+ player.init();
+ }
+
defineExpose( {
+ logIntoAppleMusic,
+ getPlaylists,
controlUI,
+ getAuth,
+ skipLogin,
} );
diff --git a/MusicPlayerV2-GUI/src/components/playlistsView.vue b/MusicPlayerV2-GUI/src/components/playlistsView.vue
index f89cc1f..7a92f5d 100644
--- a/MusicPlayerV2-GUI/src/components/playlistsView.vue
+++ b/MusicPlayerV2-GUI/src/components/playlistsView.vue
@@ -1,5 +1,18 @@
Your playlists
+
+ {{ pl.attributes.name }}
+
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/MusicPlayerV2-GUI/src/scripts/music-player.ts b/MusicPlayerV2-GUI/src/scripts/music-player.ts
new file mode 100644
index 0000000..bc2f0f8
--- /dev/null
+++ b/MusicPlayerV2-GUI/src/scripts/music-player.ts
@@ -0,0 +1,361 @@
+type Origin = 'apple-music' | 'disk';
+
+interface Song {
+ /**
+ * The ID. Either the apple music ID, or if from local disk, an ID starting in local_
+ */
+ id: string;
+
+ /**
+ * Origin of the song
+ */
+ origin: Origin;
+
+ /**
+ * The cover image as a URL
+ */
+ cover: string;
+
+ /**
+ * The artist of the song
+ */
+ artist: string;
+
+ /**
+ * The name of the song
+ */
+ title: string;
+
+ /**
+ * Duration of the song in milliseconds
+ */
+ duration: number;
+
+ /**
+ * (OPTIONAL) The genres this song belongs to. Can be displayed on the showcase screen, but requires settings there
+ */
+ genres?: string[];
+
+ /**
+ * (OPTIONAL) This will be displayed in brackets on the showcase screens
+ */
+ additionalInfo?: string;
+}
+
+interface Config {
+ devToken: string;
+ userToken: string;
+}
+
+type ControlAction = 'play' | 'pause' | 'next' | 'previous' | 'skip-10' | 'back-10';
+type RepeatMode = 'off' | 'once' | 'all';
+
+class MusicKitJSWrapper {
+ playingSongID: number;
+ playlist: Song[];
+ queue: number[];
+ config: Config;
+ musicKit: any;
+ isLoggedIn: boolean;
+ isPreparedToPlay: boolean;
+ repeatMode: RepeatMode;
+ isShuffleEnabled: boolean;
+ hasEncounteredAuthError: boolean;
+
+ constructor () {
+ this.playingSongID = 0;
+ this.playlist = [];
+ this.queue = [];
+ this.config = {
+ devToken: '',
+ userToken: '',
+ };
+ this.isShuffleEnabled = false;
+ this.repeatMode = 'off';
+ this.isPreparedToPlay = false;
+ this.isLoggedIn = false;
+ this.hasEncounteredAuthError = false;
+
+ const self = this;
+
+ if ( !window.MusicKit ) {
+ document.addEventListener( 'musickitloaded', () => {
+ self.init();
+ } );
+ } else {
+ this.init();
+ }
+ }
+
+ /**
+ * Log a user into Apple Music. Will automatically initialize MusicKitJS, once user is logged in
+ * @returns {void}
+ */
+ logIn (): void {
+ if ( !this.musicKit.isAuthorized ) {
+ this.musicKit.authorize().then( () => {
+ this.isLoggedIn = true;
+ this.init();
+ } ).catch( () => {
+ this.hasEncounteredAuthError = true;
+ } );
+ } else {
+ this.musicKit.authorize().then( () => {
+ this.isLoggedIn = true;
+ this.init();
+ } ).catch( () => {
+ this.hasEncounteredAuthError = true;
+ } );
+ }
+ }
+
+ /**
+ * Initialize MusicKitJS. Should not be called. Use logIn instead, which first tries to log the user in, then calls this method.
+ * @returns {void}
+ */
+ init (): void {
+ fetch( localStorage.getItem( 'url' ) + '/getAppleMusicDevToken', { credentials: 'include' } ).then( res => {
+ if ( res.status === 200 ) {
+ res.text().then( token => {
+ // MusicKit global is now defined
+ MusicKit.configure( {
+ developerToken: token,
+ app: {
+ name: 'MusicPlayer',
+ build: '3'
+ },
+ storefrontId: 'CH',
+ } ).then( () => {
+ this.config.devToken = token;
+ this.musicKit = MusicKit.getInstance();
+ if ( this.musicKit.isAuthorized ) {
+ this.isLoggedIn = true;
+ this.config.userToken = this.musicKit.musicUserToken;
+ }
+ this.musicKit.shuffleMode = MusicKit.PlayerShuffleMode.off;
+ } );
+ } );
+ }
+ } );
+ }
+
+ /**
+ * Get the authentication status of the user
+ * @returns {boolean[]} Returns an array, where the first element indicates login status, the second one, if an error was encountered
+ */
+ getAuth (): boolean[] {
+ return [ this.isLoggedIn, this.hasEncounteredAuthError ];
+ }
+
+ /**
+ * Request data from the Apple Music API
+ * @param {string} url The URL at the Apple Music API to call (including protocol and url)
+ * @param {( data: object ) => void} callback A callback function that takes the data and returns nothing
+ * @returns {void}
+ */
+ apiGetRequest ( url: string, callback: ( data: object ) => void ): void {
+ if ( this.config.devToken != '' && this.config.userToken != '' ) {
+ fetch( url, {
+ method: 'GET',
+ headers: {
+ 'Authorization': `Bearer ${ this.config.devToken }`,
+ 'Music-User-Token': this.config.userToken
+ }
+ } ).then( res => {
+ if ( res.status === 200 ) {
+ res.json().then( json => {
+ try {
+ callback( { 'status': 'ok', 'data': json } );
+ } catch( err ) { /* empty */}
+ } );
+ } else {
+ try {
+ callback( { 'status': 'error', 'error': res.status } );
+ } catch( err ) { /* empty */}
+ }
+ } );
+ } else return;
+ }
+
+ /**
+ * Set the playlist to play
+ * @param {Song[]} playlist The playlist as an array of songs
+ * @returns {void}
+ */
+ setPlaylist ( playlist: Song[] ): void {
+ this.playlist = playlist;
+ this.setShuffle( this.isShuffleEnabled );
+ }
+
+ /**
+ * Prepare a specific song in the queue for playing and start playing
+ * @param {number} playlistID The ID of the song in the playlist to prepare to play
+ * @returns {boolean} Returns true, if successful, false, if playlist is missing / empty. Set that first
+ */
+ prepare ( playlistID: number ): boolean {
+ if ( this.playlist.length > 0 ) {
+ this.playingSongID = playlistID;
+ this.isPreparedToPlay = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Control the player
+ * @param {ControlAction} action Action to take on the player
+ * @returns {void}
+ */
+ control ( action: ControlAction ): void {
+ switch ( action ) {
+ case "play":
+ if ( this.isPreparedToPlay ) {
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ this.musicKit.play();
+ } else {
+ // TODO: Implement
+ }
+ } else {
+ return;
+ }
+ break;
+ case "pause":
+ if ( this.isPreparedToPlay ) {
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ this.musicKit.pause();
+ } else {
+ // TODO: Implement
+ }
+ } else {
+ return;
+ }
+ break;
+ case "back-10":
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ this.musicKit.seekToTime( this.musicKit.currentPlaybackTime > 10 ? this.musicKit.currentPlaybackTime - 10 : 0 );
+ } else {
+ // TODO: Implement
+ }
+ break;
+ case "skip-10":
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ if ( this.musicKit.currentPlaybackTime < ( this.playlist[ this.playingSongID ].duration - 10 ) ) {
+ this.musicKit.seekToTime( this.musicKit.currentPlaybackTime + 10 );
+ } else {
+ if ( this.repeatMode !== 'once' ) {
+ this.control( 'next' );
+ } else {
+ this.musicKit.seekToTime( 0 );
+ }
+ }
+ } else {
+ // TODO: Finish
+ // if ( this.audioPlayer.currentTime < ( this.playlist[ this.playingSongID ].duration - 10 ) ) {
+ // this.audioPlayer.currentTime = this.audioPlayer.currentTime + 10;
+ // this.pos = this.audioPlayer.currentTime;
+ // this.sendUpdate( 'pos' );
+ // } else {
+ // if ( this.repeatMode !== 'one' ) {
+ // this.control( 'next' );
+ // } else {
+ // this.audioPlayer.currentTime = 0;
+ // this.pos = this.audioPlayer.currentTime;
+ // this.sendUpdate( 'pos' );
+ // }
+ // }
+ }
+ break;
+ case "next":
+ //
+ break;
+ case "previous":
+ }
+ }
+
+ setShuffle ( enabled: boolean ) {
+ this.isShuffleEnabled = enabled;
+ // TODO: Shuffle playlist
+ }
+
+ setRepeatMode ( mode: RepeatMode ) {
+ this.repeatMode = mode;
+ }
+
+ goToPos ( pos: number ) {
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ this.musicKit.seekToTime( pos );
+ } else {
+ // TODO: Implement
+ }
+ }
+
+ /**
+ * Get the current position of the play heed. Will return in ms since start of the song
+ * @returns {number}
+ */
+ getPlaybackPos (): number {
+ if ( this.playlist[ this.playingSongID ].origin === 'apple-music' ) {
+ return this.musicKit.currentPlaybackTime;
+ } else {
+ return 0;
+ // TODO: Implement
+ }
+ }
+
+ /**
+ * Get details on the currently playing song
+ * @returns {Song}
+ */
+ getPlayingSong (): Song {
+ return this.playlist[ this.playingSongID ];
+ }
+
+ /**
+ * Get the playlist index of the currently playing song
+ * @returns {number}
+ */
+ getPlayingSongID (): number {
+ return this.playingSongID;
+ }
+
+ /**
+ * Get the full playlist, as it is set currently, not ordered by queue settings, but as passed in originally
+ * @returns {Song[]}
+ */
+ getPlaylist (): Song[] {
+ return this.playlist;
+ }
+
+ /**
+ * Same as getPlaylist, but returns a ordered playlist, by how it will play according to the queue.
+ * @returns {Song[]}
+ */
+ getQueue (): Song[] {
+ const data = [];
+ for ( const el in this.queue ) {
+ data.push( this.playlist[ this.queue[ el ] ] );
+ }
+ return data;
+ }
+
+ /**
+ * Get all playlists the authenticated user has on Apple Music. Only available once the user has authenticated!
+ * @param {( data: object ) => void} cb The callback function called with the results from the API
+ * @returns {boolean} Returns true, if user is authenticated and request was started, false if not.
+ */
+ getUserPlaylists ( cb: ( data: object ) => void ): boolean {
+ if ( this.isLoggedIn ) {
+ this.apiGetRequest( 'https://api.music.apple.com/v1/me/library/playlists', cb );
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // findSongOnAppleMusic ( searchTerm: string ): Song => {
+ // TODO: Implement
+ // }
+}
+
+export default MusicKitJSWrapper;
\ No newline at end of file
diff --git a/MusicPlayerV2-GUI/src/scripts/player.ts b/MusicPlayerV2-GUI/src/scripts/player.ts
index db608f4..69e2012 100644
--- a/MusicPlayerV2-GUI/src/scripts/player.ts
+++ b/MusicPlayerV2-GUI/src/scripts/player.ts
@@ -1,3 +1,6 @@
+// IMPORTANT: Old, unfinished version that doesn't ship! See ./music-player.ts for the actual code!
+
+
type Origin = 'apple-music' | 'disk';
interface Song {
diff --git a/MusicPlayerV2-GUI/src/views/AppView.vue b/MusicPlayerV2-GUI/src/views/AppView.vue
index 4fffe4c..91ca17f 100644
--- a/MusicPlayerV2-GUI/src/views/AppView.vue
+++ b/MusicPlayerV2-GUI/src/views/AppView.vue
@@ -1,13 +1,15 @@
-
-
{ handlePlayerStateChange( state ) }">
+

-
+
+
+
{ handlePlayerStateChange( state ) }"
+ ref="player">
@@ -16,8 +18,10 @@
import libraryView from '@/components/libraryView.vue';
import { ref } from 'vue';
- const isLoggedIntoAppleMusic = ref( true );
+ const isLoggedIntoAppleMusic = ref( false );
const isShowingFullScreenPlayer = ref( false );
+ const player = ref( playerView );
+ const playlists = ref( [] );
const handlePlayerStateChange = ( newState: string ) => {
if ( newState === 'hide' ) {
@@ -26,21 +30,44 @@
isShowingFullScreenPlayer.value = true;
}
}
+
+ let loginChecker = 0;
+
+ const logIntoAppleMusic = () => {
+ loginChecker = setInterval( () => {
+ if ( player.value.getAuth()[ 0 ] ) {
+ isLoggedIntoAppleMusic.value = true;
+ player.value.getPlaylists( ( data ) => {
+ console.log( data.data.data );
+ playlists.value = data.data.data;
+ } );
+ clearInterval( loginChecker );
+ } else if ( player.value.getAuth()[ 1 ] ) {
+ clearInterval( loginChecker );
+ alert( 'An error occurred when logging you in. Please try again!' );
+ }
+ }, 500 );
+ }
+
+ const skipLogin = () => {
+ isLoggedIntoAppleMusic.value = true;
+ player.value.skipLogin();
+ }
\ No newline at end of file
diff --git a/backend/dist/app.js b/backend/dist/app.js
index df8fec6..84d928d 100644
--- a/backend/dist/app.js
+++ b/backend/dist/app.js
@@ -24,15 +24,16 @@ const run = () => {
// sign dev token
const privateKey = fs_1.default.readFileSync(path_1.default.join(__dirname + '/config/apple_private_key.p8')).toString();
// TODO: Remove secret
- const config = JSON.parse('' + fs_1.default.readFileSync(path_1.default.join(__dirname + '/config/apple-music-api.config.json')));
- const jwtToken = jsonwebtoken_1.default.sign({}, privateKey, {
+ const config = JSON.parse('' + fs_1.default.readFileSync(path_1.default.join(__dirname + '/config/apple-music-api.config.secret.json')));
+ const now = new Date().getTime();
+ const tomorrow = now + 24 * 3600 * 1000;
+ const jwtToken = jsonwebtoken_1.default.sign({
+ 'iss': config.teamID,
+ 'iat': Math.floor(now / 1000),
+ 'exp': Math.floor(tomorrow / 1000),
+ }, privateKey, {
algorithm: "ES256",
- expiresIn: "180d",
- issuer: config.teamID,
- header: {
- alg: "ES256",
- kid: config.keyID
- }
+ keyid: config.keyID
});
res.send(jwtToken);
});
diff --git a/backend/src/app.ts b/backend/src/app.ts
index 871db0a..9d541c1 100644
--- a/backend/src/app.ts
+++ b/backend/src/app.ts
@@ -26,15 +26,16 @@ const run = () => {
// sign dev token
const privateKey = fs.readFileSync( path.join( __dirname + '/config/apple_private_key.p8' ) ).toString();
// TODO: Remove secret
- const config = JSON.parse( '' + fs.readFileSync( path.join( __dirname + '/config/apple-music-api.config.json' ) ) );
- const jwtToken = jwt.sign( {}, privateKey, {
+ const config = JSON.parse( '' + fs.readFileSync( path.join( __dirname + '/config/apple-music-api.config.secret.json' ) ) );
+ const now = new Date().getTime();
+ const tomorrow = now + 24 * 3600 * 1000;
+ const jwtToken = jwt.sign( {
+ 'iss': config.teamID,
+ 'iat': Math.floor( now / 1000 ),
+ 'exp': Math.floor( tomorrow / 1000 ),
+ }, privateKey, {
algorithm: "ES256",
- expiresIn: "180d",
- issuer: config.teamID,
- header: {
- alg: "ES256",
- kid: config.keyID
- }
+ keyid: config.keyID
} );
res.send( jwtToken );
} );