!function(e, s) {
"object" == typeof exports && "undefined" != typeof module ? s(exports) : "function" == typeof define && define.amd ? define(["exports"], s) : s((e = "undefined" != typeof globalThis ? globalThis : e || self).MusicKit = {})
}(this, (function(e) {
"use strict";
var s = void 0 !== typeof self ? self : this;
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __decorate$2(e, s, n, d) {
var h, p = arguments.length, y = p < 3 ? s : null === d ? d = Object.getOwnPropertyDescriptor(s, n) : d;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate)
y = Reflect.decorate(e, s, n, d);
else
for (var m = e.length - 1; m >= 0; m--)
(h = e[m]) && (y = (p < 3 ? h(y) : p > 3 ? h(s, n, y) : h(s, n)) || y);
return p > 3 && y && Object.defineProperty(s, n, y),
y
}
function __metadata$2(e, s) {
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata)
return Reflect.metadata(e, s)
}
function __awaiter$3(e, s, n, d) {
return new (n || (n = Promise))((function(h, p) {
function fulfilled(e) {
try {
step(d.next(e))
} catch (bt) {
p(bt)
}
}
function rejected(e) {
try {
step(d.throw(e))
} catch (bt) {
p(bt)
}
}
function step(e) {
var s;
e.done ? h(e.value) : (s = e.value,
s instanceof n ? s : new n((function(e) {
e(s)
}
))).then(fulfilled, rejected)
}
step((d = d.apply(e, s || [])).next())
}
))
}
function formatArtworkURL(e, s, n) {
return s = s || e.height || 100,
n = n || e.width || 100,
window.devicePixelRatio >= 1.5 && (n *= 2,
s *= 2),
e.url.replace("{h}", "" + s).replace("{w}", "" + n).replace("{f}", "jpeg")
}
const K = ()=>{}
, asAsync = e=>{
e.then(K, K)
}
, n = K;
function isLive(e) {
return !!e && !!e.attributes && !!e.attributes.isLive
}
function isStream$1(e) {
var s, n;
return "stream" === (null === (n = null === (s = null == e ? void 0 : e.attributes) || void 0 === s ? void 0 : s.playParams) || void 0 === n ? void 0 : n.format)
}
function isLiveRadioStation(e) {
return isLive(e) && isStream$1(e)
}
function isLiveRadioKind(e, s) {
var n;
return isLiveRadioStation(e) && (null === (n = e.attributes) || void 0 === n ? void 0 : n.mediaKind) === s
}
function isBroadcastRadio(e) {
return isLive(e) && isStream$1(e) && void 0 !== e.attributes.stationProviderName && "Shoutcast" === e.attributes.streamingRadioSubType
}
function getFilterFromFlags(e) {
const s = e.includes("radio-live")
, n = e.includes("radio-aod")
, d = e.includes("radio-broadcast");
return e=>(!s || s && !isLiveRadioStation(e)) && (!n || n && !function(e) {
return !isLive(e) && isStream$1(e) && "Episode" === e.attributes.streamingRadioSubType
}(e)) && (!d || d && !isBroadcastRadio(e))
}
const d = {
album: "albums",
albums: "albums",
artist: "artists",
artists: "artists",
song: "songs",
songs: "songs"
};
function normalizeContentType(e) {
let s = d[e];
return s || (s = e.replace(/_|[A-Z]/g, (e,s)=>"_" === e ? "-" : (e = e.toLowerCase(),
0 === s ? e : "-" + e)),
e.endsWith("y") ? s = s.substring(0, s.length - 1) + "ies" : s.endsWith("s") || (s += "s"),
d[e] = s,
s)
}
const h = {
400: "REQUEST_ERROR",
401: "UNAUTHORIZED_ERROR",
403: "ACCESS_DENIED",
404: "NOT_FOUND",
405: "NOT_FOUND",
413: "REQUEST_ERROR",
414: "REQUEST_ERROR",
429: "QUOTA_EXCEEDED",
500: "SERVER_ERROR",
501: "NOT_FOUND",
503: "SERVICE_UNAVAILABLE"
}
, p = {
"-1004": "DEVICE_LIMIT",
1010: h[404],
2002: "AUTHORIZATION_ERROR",
2034: "TOKEN_EXPIRED",
3059: "DEVICE_LIMIT",
3063: "SUBSCRIPTION_ERROR",
3076: "CONTENT_UNAVAILABLE",
3082: "CONTENT_RESTRICTED",
3084: "STREAM_UPSELL",
5002: h[500],
180202: "PLAYREADY_CBC_ENCRYPTION_ERROR",
190121: "WIDEVINE_CDM_EXPIRED"
}
, y = []
, m = new Set(["UNSUPPORTED_ERROR", "CONTENT_EQUIVALENT", "CONTENT_UNAVAILABLE", "CONTENT_UNSUPPORTED", "SERVER_ERROR", "SUBSCRIPTION_ERROR"]);
class MKError extends Error {
constructor(e, s) {
super(),
this.errorCode = "UNKNOWN_ERROR",
e && m.has(e) ? (this.name = this.errorCode = e,
this.message = this.description = s || e) : s || "string" != typeof e ? (this.name = this.errorCode = e || "UNKNOWN_ERROR",
s && (this.message = this.description = s)) : (this.name = this.errorCode = "UNKNOWN_ERROR",
this.message = this.description = e),
y.push(this),
Error.captureStackTrace && Error.captureStackTrace(this, MKError)
}
static get errors() {
return y
}
static playActivityError(e) {
return new this("PLAY_ACTIVITY",e)
}
static parseError(e) {
return new this("PARSE_ERROR",e)
}
static responseError(e) {
const {status: s, statusText: n} = e
, d = new this(h[s] || "NETWORK_ERROR",n || "" + s);
return d.data = e,
d
}
static serverError(e) {
let {status: s, dialog: n, failureType: d, customerMessage: h, errorMessage: y, message: m} = e;
n && (m = n.message || n.customerMessage || n.errorMessage,
n.message = m);
const g = p[d] || p[s] || "UNKNOWN_ERROR"
, v = new this(g,m || h || y);
return "STREAM_UPSELL" === g && n && n.okButtonAction && n.okButtonAction.url && (n.okButtonAction.url = n.okButtonAction.url.replace(/\&(?:challenge|key-system|uri|user-initiated)=[^\&]+/gim, "")),
v.dialog = n,
v
}
static internalError(e) {
return new this(MKError.INTERNAL_ERROR,e)
}
}
MKError.ACCESS_DENIED = h[403],
MKError.AGE_VERIFICATION = "AGE_VERIFICATION",
MKError.AUTHORIZATION_ERROR = p[2002],
MKError.CONFIGURATION_ERROR = "CONFIGURATION_ERROR",
MKError.CONTENT_EQUIVALENT = "CONTENT_EQUIVALENT",
MKError.CONTENT_RESTRICTED = p[3082],
MKError.CONTENT_UNAVAILABLE = p[3076],
MKError.CONTENT_UNSUPPORTED = "CONTENT_UNSUPPORTED",
MKError.DEVICE_LIMIT = p[3059],
MKError.INVALID_ARGUMENTS = "INVALID_ARGUMENTS",
MKError.PLAYREADY_CBC_ENCRYPTION_ERROR = "PLAYREADY_CBC_ENCRYPTION_ERROR",
MKError.MEDIA_CERTIFICATE = "MEDIA_CERTIFICATE",
MKError.MEDIA_DESCRIPTOR = "MEDIA_DESCRIPTOR",
MKError.MEDIA_LICENSE = "MEDIA_LICENSE",
MKError.MEDIA_KEY = "MEDIA_KEY",
MKError.MEDIA_PLAYBACK = "MEDIA_PLAYBACK",
MKError.MEDIA_SESSION = "MEDIA_SESSION",
MKError.NETWORK_ERROR = "NETWORK_ERROR",
MKError.NOT_FOUND = p[1010],
MKError.PARSE_ERROR = "PARSE_ERROR",
MKError.PLAY_ACTIVITY = "PLAY_ACTIVITY",
MKError.QUOTA_EXCEEDED = h[429],
MKError.REQUEST_ERROR = h[400],
MKError.SERVER_ERROR = p[5002],
MKError.SERVICE_UNAVAILABLE = h[503],
MKError.STREAM_UPSELL = p[3084],
MKError.SUBSCRIPTION_ERROR = p[3063],
MKError.TOKEN_EXPIRED = p[2034],
MKError.UNAUTHORIZED_ERROR = h[401],
MKError.UNKNOWN_ERROR = "UNKNOWN_ERROR",
MKError.UNSUPPORTED_ERROR = "UNSUPPORTED_ERROR",
MKError.INTERNAL_ERROR = "INTERNAL_ERROR",
MKError.OUTPUT_RESTRICTED = "OUTPUT_RESTRICTED",
MKError.WIDEVINE_CDM_EXPIRED = "WIDEVINE_CDM_EXPIRED";
class Notifications {
constructor(e=[], s) {
this._eventRegistry = {},
e.forEach(e=>{
this._eventRegistry[e] = []
}
),
s && s.namespace && (this.dispatchNamespace = "com.apple." + s.namespace),
this.shouldStorageDispatch && (this._handleGlobalStorageEvent = this._handleGlobalStorageEvent.bind(this),
window.addEventListener("storage", this._handleGlobalStorageEvent))
}
get shouldStorageDispatch() {
return "undefined" != typeof window && "undefined" != typeof sessionStorage && this.dispatchNamespace
}
addEventListener(e, s) {
Array.isArray(this._eventRegistry[e]) && this._eventRegistry[e].push(s)
}
dispatchEvent(e, s) {
Array.isArray(this._eventRegistry[e]) && this._eventRegistry[e].forEach(e=>e(s))
}
dispatchDistributedEvent(e, s) {
if (this.dispatchEvent(e, s),
this.shouldStorageDispatch) {
const n = `${this.dispatchNamespace}:${e}`;
sessionStorage.setItem(n, JSON.stringify(s))
}
}
removeEventListener(e, s) {
if (Array.isArray(this._eventRegistry[e])) {
const n = this._eventRegistry[e].indexOf(s);
this._eventRegistry[e].splice(n, 1)
}
}
_handleGlobalStorageEvent(e) {
var s;
if (this.dispatchNamespace && (null === (s = e.key) || void 0 === s ? void 0 : s.startsWith(this.dispatchNamespace + ":"))) {
const s = e.key.substring(this.dispatchNamespace.length + 1);
this.dispatchEvent(s, JSON.parse(e.newValue))
}
}
}
var g = "undefined" != typeof FastBoot ? FastBoot.require("buffer").Buffer : "undefined" != typeof process && null !== process.versions && null !== process.versions.node ? Buffer : window.Buffer;
function memoize(e) {
return function(...s) {
let n = ""
, d = s.length;
for (e._memoized = e._memoized || {}; d--; ) {
const e = s[d];
n += e === Object(e) ? JSON.stringify(e) : e
}
return n in e._memoized ? e._memoized[n] : e._memoized[n] = e(...s)
}
}
function isObject(e) {
return !!e && "object" == typeof e && !Array.isArray(e)
}
function generateUUID() {
let e = strRandomizer() + strRandomizer();
for (; e.length < 16; )
e += strRandomizer();
return e.slice(0, 16)
}
function strRandomizer() {
return Math.random().toString(16).substring(2)
}
const v = memoize(e=>/^[a|i|l|p]{1}\.[a-zA-Z0-9]+$/.test(e))
, _ = memoize(e=>/^(a\.)?[a-zA-Z0-9]+$/.test(e));
function isNodeEnvironment$1(e) {
const isDefined = e=>null != e;
return 0 === arguments.length && "undefined" != typeof process && (e = process),
isDefined(e) && isDefined(e.versions) && isDefined(e.versions.node) || "undefined" != typeof FastBoot
}
const b = memoize(isNodeEnvironment$1() ? e=>g.from(e, "base64").toString("binary") : e=>window.atob(e));
memoize(isNodeEnvironment$1() ? e=>g.from(e).toString("base64") : e=>window.btoa(e));
const debounce = (e,s=250,n={
isImmediate: !1
})=>{
let d;
return function(...h) {
const p = this
, y = n.isImmediate && void 0 === d;
void 0 !== d && clearTimeout(d),
d = setTimeout((function() {
d = void 0,
n.isImmediate || e.apply(p, h)
}
), s),
y && e.apply(p, h)
}
}
, exceptFields = (e,...s)=>{
const n = {};
return Object.keys(e).forEach(d=>{
s.includes(d) || (n[d] = e[d])
}
),
n
}
, arrayEquals = (e,s)=>!!e && !!s && [].every.call(e, (e,n)=>e === s[n]);
function hasOwn(e, s) {
return Object.prototype.hasOwnProperty.call(Object(e), s)
}
function isEmpty(e) {
if ("object" != typeof e)
throw new TypeError("Source is not an Object");
for (const s in e)
if (hasOwn(e, s))
return !1;
return !0
}
function transform$9(e, s, n=!1) {
return n && (e = Object.keys(e).reduce((s,n)=>(s[e[n]] = n,
s), {})),
Object.keys(e).reduce((n,d)=>{
const h = e[d]
, p = "function" == typeof h ? h() : function(e, s) {
return s.split(".").reduce((e,s)=>{
if (void 0 !== e)
return e[s]
}
, e)
}(s, h);
return p && function(e, s, n) {
s.split(".").reduce((s,d,h,p)=>{
const y = h === p.length - 1
, m = hasOwn(s, d)
, g = s[d]instanceof Object
, v = null === s[d];
if (!y && m && (!g || v))
throw new TypeError(`Value at ${p.slice(0, h + 1).join(".")} in keypath is not an Object.`);
return y ? (s[d] = n,
e) : m ? s[d] : s[d] = {}
}
, e)
}(n, d, p),
n
}
, {})
}
function transformKeys(e, s) {
return Object.keys(e).reduce((n,d)=>(n[s(d)] = e[d],
n), {})
}
const T = ["contributors", "Episode", "modalities", "Movie", "musicVideo", "podcast-episodes", "radioStation", "Show", "song", "uploaded-audios", "uploadedAudio", "uploaded-videos", "uploadedVideo", "Vod", "workouts", "workout-programs"]
, E = {
"uploaded-videos": !0,
uploadedVideo: !0,
"uploaded-audios": !0,
uploadedAudio: !0,
"podcast-episodes": !0
}
, k = {
mediaItemStateDidChange: "mediaItemStateDidChange",
mediaItemStateWillChange: "mediaItemStateWillChange"
}
, S = ["trace", "debug", "info", "warn", "error"];
class Nonsole {
}
S.forEach(e=>{
Nonsole.prototype[e] = ()=>{}
}
);
const P = new Nonsole
, getConsole = ()=>"undefined" == typeof console ? P : console
, I = {}
, createLocalStorageFlag = e=>{
const s = "undefined" == typeof localStorage ? void 0 : localStorage
, n = e.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (e,s)=>s.toUpperCase());
let d;
return I.hasOwnProperty(n) ? d = I[n] : (d = {
get: ()=>null == s ? void 0 : s.getItem(e),
json: ()=>{
const n = null == s ? void 0 : s.getItem(e);
try {
return n ? JSON.parse(n) : void 0
} catch (bt) {
return
}
}
,
setJson: n=>{
try {
const d = JSON.stringify(n);
null == s || s.setItem(e, d)
} catch (bt) {}
}
,
remove: ()=>null == s ? void 0 : s.removeItem(e),
set: n=>null == s ? void 0 : s.setItem(e, n)
},
I[n] = d),
d
}
;
createLocalStorageFlag("mk-debug"),
createLocalStorageFlag("mk-debug-topic");
const A = "undefined" == typeof localStorage ? void 0 : localStorage
, getConfiguredLevel = (e="mk-debug",s=S.length)=>parseInt(w(e, s), 10)
, w = memoize((e,s)=>{
var n, d;
return null !== (d = null === (n = null == A ? void 0 : A.getItem) || void 0 === n ? void 0 : n.call(A, e)) && void 0 !== d ? d : "" + s
}
)
, getAllowedLevels = e=>isNaN(e) || e < 0 ? [] : S.slice(e)
, canLogTopic = (e,s)=>{
const n = ((e="mk-debug-topic",s="*")=>w(e, s))(s);
return R(n).some(s=>s.test(e))
}
, R = memoize(e=>e.split(/[\s,]+/).map(e=>{
const s = e.replace(/\*/g, ".*?");
return new RegExp("^" + s + "$")
}
))
, trace = (e,...s)=>logMessage(Object.assign({
level: "trace"
}, e), ...s)
, debug = (e,...s)=>logMessage(Object.assign({
level: "debug"
}, e), ...s)
, info = (e,...s)=>logMessage(Object.assign({
level: "info"
}, e), ...s)
, warn = (e,...s)=>logMessage(Object.assign({
level: "warn"
}, e), ...s)
, error$1 = (e,...s)=>logMessage(Object.assign({
level: "error"
}, e), ...s)
, log = (e,...s)=>logMessage(e, ...s)
, logMessage = (e,...s)=>{
let {level: n, levelKey: d, topic: h, topicKey: p} = e;
if (n = null != n ? n : "debug",
!((e,s)=>-1 !== getAllowedLevels(getConfiguredLevel(s)).indexOf(e))(n, d))
return;
if (!canLogTopic(h, p))
return;
const y = getConsole();
if ("function" != typeof y[n])
return;
let[m,...g] = s;
void 0 !== h && (m = `${h}: ${m}`),
y[n](m, ...g)
}
;
class Logger {
constructor(e) {
var s, n, d, h;
this._levelFilterKey = "mk-debug",
"string" == typeof e ? (this._levelFilterKey = e,
this.level = getConfiguredLevel(this._levelFilterKey, 5)) : "object" == typeof e ? (this._levelFilterKey = null !== (s = e.levelFilterStorageKey) && void 0 !== s ? s : this._levelFilterKey,
this._topicFilterKey = null !== (n = e.topicFilterStorageKey) && void 0 !== n ? n : this.generateDefaultTopicFilterStorageKey(this._levelFilterKey),
this.topic = e.topic,
this.level = null !== (d = e.level) && void 0 !== d ? d : getConfiguredLevel(this._levelFilterKey, 5)) : this.level = null != e ? e : getConfiguredLevel(this._levelFilterKey, 5),
this._topicFilterKey = null !== (h = this._topicFilterKey) && void 0 !== h ? h : this.generateDefaultTopicFilterStorageKey(this._levelFilterKey)
}
get enabled() {
return this.level < 5
}
set enabled(e) {
this.level = e ? 1 : 5
}
debug(e, ...s) {
this.callLogMethod(debug, e, ...s)
}
error(e, ...s) {
this.callLogMethod(error$1, e, ...s)
}
log(e, ...s) {
this.callLogMethod(log, e, ...s)
}
info(e, ...s) {
this.callLogMethod(info, e, ...s)
}
trace(e, ...s) {
this.callLogMethod(trace, e, ...s)
}
warn(e, ...s) {
this.callLogMethod(warn, e, ...s)
}
callLogMethod(e, s, ...n) {
var d, h;
const p = {
levelKey: this._levelFilterKey,
topicKey: this._topicFilterKey,
topic: this.topic
};
let y = s;
var m;
"object" == typeof (m = s) && null !== m && "string" == typeof m.topic && (p.topic = null !== (d = s.topic) && void 0 !== d ? d : p.topic,
y = null !== (h = s.message) && void 0 !== h ? h : n.shift()),
e(p, y, ...n)
}
generateDefaultTopicFilterStorageKey(e) {
return e + "-topic"
}
}
const O = new Logger
, C = new Logger;
var M, D;
e.PlaybackType = void 0,
(M = e.PlaybackType || (e.PlaybackType = {}))[M.none = 0] = "none",
M[M.preview = 1] = "preview",
M[M.unencryptedFull = 2] = "unencryptedFull",
M[M.encryptedFull = 3] = "encryptedFull",
function(e) {
e[e.none = 0] = "none",
e[e.loading = 1] = "loading",
e[e.ready = 2] = "ready",
e[e.playing = 3] = "playing",
e[e.ended = 4] = "ended",
e[e.unavailable = 5] = "unavailable",
e[e.restricted = 6] = "restricted",
e[e.error = 7] = "error",
e[e.unsupported = 8] = "unsupported"
}(D || (D = {}));
const {none: N, loading: L, ready: x, playing: U, ended: $, unavailable: j, restricted: B, error: F, unsupported: V} = D
, H = {
[N]: {
allowed: [L],
unknown: [$, j, B, F, V]
},
[L]: {
allowed: [x, B, F, V],
unknown: []
},
[x]: {
allowed: [U],
unknown: [F]
},
[U]: {
allowed: [$, F],
unknown: [j, B, V]
},
[$]: {
allowed: [],
unknown: []
},
[j]: {
allowed: [],
unknown: []
},
[B]: {
allowed: [],
unknown: []
},
[F]: {
allowed: [],
unknown: []
},
[V]: {
allowed: [],
unknown: []
}
}
, toName = e=>D[e]
, createMediaItemStateGuard = (e=N)=>{
const s = {
current: e,
set(e) {
const {current: n} = s;
if (!((e,s)=>H[e].allowed.includes(s))(n, e)) {
const s = ((e,s)=>H[e].unknown.includes(s))(n, e);
C.debug(`MediaItem.state was changed from ${toName(n)} to ${toName(e)}`, s ? "but it is unknown whether it should be allowed or not." : "and it should not be happening")
}
s.current = e
}
};
return s
}
;
function isStringNotEmpty(e) {
return !function(e) {
return void 0 === e || "" === e.trim()
}(e)
}
function transform$8(e) {
return transform$9({
"attributes.albumName": "metadata.playlistName",
"attributes.artistName": "metadata.artistName",
"attributes.artwork"() {
const s = null == e ? void 0 : e.artworkURL;
if (s)
return function(e) {
const s = e.split("/").pop()
, [n,d] = !!s && s.match(/\d+/g) || ["100", "100"];
return {
width: parseInt(n, 10),
height: parseInt(d, 10),
url: e.replace(`${n}x${d}`, "{w}x{h}")
}
}(s)
},
"attributes.composerName": "metadata.composerName",
"attributes.contentRating"() {
var s;
if (1 === (null === (s = null == e ? void 0 : e.metadata) || void 0 === s ? void 0 : s.explicit))
return "explicit"
},
"attributes.discNumber"() {
var s;
return (null === (s = null == e ? void 0 : e.metadata) || void 0 === s ? void 0 : s.discNumber) || 1
},
"attributes.durationInMillis": "metadata.duration",
"attributes.genreNames"() {
var s;
return [null === (s = null == e ? void 0 : e.metadata) || void 0 === s ? void 0 : s.genre]
},
"attributes.isrc"() {
var s;
const n = null === (s = null == e ? void 0 : e.metadata) || void 0 === s ? void 0 : s.xid;
if (n)
return n.replace(/^([^:]+):isrc:/, "$1")
},
"attributes.name": "metadata.itemName",
"attributes.playParams.id": "metadata.itemId",
"attributes.playParams.kind": "metadata.kind",
"attributes.previews": ()=>[{
url: null == e ? void 0 : e.previewURL
}],
"attributes.releaseDate": "metadata.releaseDate",
"attributes.trackNumber": "metadata.trackNumber",
assetURL: "URL",
cloudId: "metadata.cloud-id",
id() {
var s;
return "" + (null === (s = null == e ? void 0 : e.metadata) || void 0 === s ? void 0 : s.itemId)
},
flavor: "flavor",
type: "metadata.kind"
}, e)
}
const {mediaItemStateDidChange: z, mediaItemStateWillChange: q} = k
, W = {
isEntitledToPlay: !0
};
class MediaItem extends Notifications {
constructor(s={}) {
super([z, q]),
this.bingeWatching = !1,
this.hlsMetadata = {},
this.playbackType = e.PlaybackType.none,
this._assets = [],
this._state = createMediaItemStateGuard(),
C.debug("media-item: creating Media Item with options:", s);
s.id && s.attributes ? (Object.keys(s).forEach(e=>{
hasOwn(W, e) || (this[e] = s[e])
}
),
this.type = this.playParams && this.playParams.kind ? this.playParams.kind : this.type || "song") : (this.id = s.id || generateUUID(),
this.type = s.type || "song",
this.attributes = {
playParams: {
id: this.id,
kind: this.type
}
}),
this._context = s.context || {},
s.container ? this._container = s.container : s.containerId && s.containerType && (this._container = {
id: s.containerId,
type: s.containerType
})
}
get albumInfo() {
const {albumName: e, artistName: s} = this
, n = [];
return s && n.push(s),
e && n.push(e),
n.join(" - ")
}
get albumName() {
return this.attributes.albumName
}
get artistName() {
return this.attributes.genreNames && this.attributes.genreNames.indexOf("Classical") > -1 && this.attributes.composerName ? this.attributes.composerName : this.attributes.artistName
}
get artwork() {
var e, s;
return null !== (e = this.attributes.artwork) && void 0 !== e ? e : null === (s = this.attributes.images) || void 0 === s ? void 0 : s.coverArt16X9
}
get artworkURL() {
if (this.artwork && this.artwork.url)
return this.artwork.url
}
get assets() {
return this._assets
}
get canPlay() {
return this.isPlayable && this.isReady
}
get container() {
return this._container
}
set container(e) {
this._container = e
}
get contentRating() {
return this.attributes.contentRating
}
get context() {
return this._context
}
set context(e) {
this._context = e
}
get discNumber() {
return this.attributes.discNumber
}
get hasContainerArtwork() {
return this.container && this.container.attributes && this.container.attributes.artwork && this.container.attributes.artwork.url
}
get hasPlaylistContainer() {
return this.container && "playlists" === this.container.type && this.container.attributes
}
get isEntitledToPlay() {
var e, s;
const {attributes: n, playables: d} = this;
return null !== (s = n.isEntitledToPlay || (null === (e = null == d ? void 0 : d[0]) || void 0 === e ? void 0 : e.isEntitledToPlay)) && void 0 !== s && s
}
get isLiveRadioStation() {
return isLiveRadioStation(this)
}
get isLiveAudioStation() {
return isLiveRadioKind(this, "audio")
}
get isLiveVideoStation() {
return isLiveRadioKind(this, "video")
}
get isSong() {
return "song" === this.type
}
get info() {
return `${this.title} - ${this.albumInfo}`
}
get isCloudItem() {
return this.playParams && this.playParams.isLibrary || v(this.id)
}
get isCloudUpload() {
return -1 === this._songId
}
get isExplicitItem() {
return "explicit" === this.contentRating
}
get isLoading() {
return this.state === D.loading
}
get isPlayableMediaType() {
return -1 !== T.indexOf(this.type)
}
get isPlayable() {
var e;
return !!this.isPlayableMediaType && (!(!this.isLiveRadioStation && !this.hasOffersHlsUrl) || (this.needsPlayParams ? !!this.playParams : this.isUTS ? this.isEntitledToPlay : !!this.attributes.assetUrl || !!(null === (e = this.attributes.previews) || void 0 === e ? void 0 : e.length)))
}
get isPlaying() {
return this.state === D.playing
}
get isPreparedToPlay() {
if ("song" === this.type)
return !!this._assets && !!this.keyURLs && !!this._songId;
if (this.isUTS) {
const e = isStringNotEmpty(this.assetURL)
, s = !!(this.keyURLs && isStringNotEmpty(this.keyURLs["hls-key-cert-url"]) && isStringNotEmpty(this.keyURLs["hls-key-server-url"]) && isStringNotEmpty(this.keyURLs["widevine-cert-url"]));
return e && s
}
return !!isStringNotEmpty(this.assetURL) || this.playRawAssetURL && !!isStringNotEmpty(this.attributes.assetUrl)
}
get isrc() {
return this.attributes.isrc
}
get isReady() {
return this.state === D.ready
}
get isRestricted() {
return this.state === D.restricted
}
get isUTS() {
return ["Episode", "Movie", "MusicMovie", "Show", "Vod"].includes(this.type)
}
get isUnavailable() {
return this.state === D.unavailable
}
get needsPlayParams() {
return ["musicVideo", "song"].includes(this.type)
}
get normalizedType() {
return normalizeContentType(this.type)
}
get offers() {
return this.attributes.offers
}
get offersHlsUrl() {
const {offers: e} = this
, s = null == e ? void 0 : e.find(e=>{
var s;
return !!(null === (s = e.hlsUrl) || void 0 === s ? void 0 : s.length)
}
);
return null == s ? void 0 : s.hlsUrl
}
get hasOffersHlsUrl() {
return isStringNotEmpty(this.offersHlsUrl)
}
set playbackData(e) {
if (void 0 === e)
return;
this.previewURL && (e.previewURL = this.previewURL);
const s = transform$8(e);
this.artwork && s.artwork && delete s.artwork,
s.id !== this.id && delete s.id,
this.playParams && s.attributes.playParams && (s.attributes.playParams = this.playParams),
Object.assign(this, s),
C.debug("media-item: item merged with playbackData", this),
this.state = D.ready
}
get playbackDuration() {
return this.attributes.durationInMillis || this.attributes.durationInMilliseconds
}
get playlistArtworkURL() {
var e, s, n;
return this.hasPlaylistContainer && this.hasContainerArtwork ? null === (n = null === (s = null === (e = this.container) || void 0 === e ? void 0 : e.attributes) || void 0 === s ? void 0 : s.artwork) || void 0 === n ? void 0 : n.url : this.artworkURL
}
get playlistName() {
var e, s;
return this.hasPlaylistContainer ? null === (s = null === (e = this.container) || void 0 === e ? void 0 : e.attributes) || void 0 === s ? void 0 : s.name : this.albumName
}
get playParams() {
return this.attributes.playParams
}
get playRawAssetURL() {
return this.offers ? this.offers.some(e=>"STDQ" === e.type) : !(!this.isCloudUpload && !E[this.type])
}
get previewURL() {
var e, s, n, d, h, p, y, m, g, v, _, b, T, E, k;
return (null === (n = null === (s = null === (e = this.attributes) || void 0 === e ? void 0 : e.previews) || void 0 === s ? void 0 : s[0]) || void 0 === n ? void 0 : n.url) || (null === (p = null === (h = null === (d = this.attributes) || void 0 === d ? void 0 : d.previews) || void 0 === h ? void 0 : h[0]) || void 0 === p ? void 0 : p.hlsUrl) || (null === (v = null === (g = null === (m = null === (y = this.attributes) || void 0 === y ? void 0 : y.trailers) || void 0 === m ? void 0 : m[0]) || void 0 === g ? void 0 : g.assets) || void 0 === v ? void 0 : v.hlsUrl) || (null === (T = null === (b = null === (_ = this.attributes) || void 0 === _ ? void 0 : _.movieClips) || void 0 === b ? void 0 : b[0]) || void 0 === T ? void 0 : T.hlsUrl) || (null === (k = null === (E = this.attributes) || void 0 === E ? void 0 : E.video) || void 0 === k ? void 0 : k.hlsUrl)
}
get rating() {
return this.attributes.rating
}
get releaseDate() {
if (this._releaseDate)
return this._releaseDate;
if (this.attributes && (this.attributes.releaseDate || this.attributes.releaseDateTime)) {
const e = this.attributes.releaseDate || this.attributes.releaseDateTime;
return this._releaseDate = /^\d{4}-\d{1,2}-\d{1,2}/.test(e) ? new Date(e) : void 0,
this._releaseDate
}
}
get songId() {
return this._songId && -1 !== this._songId ? this._songId : this.id
}
get state() {
return this._state.current
}
set state(e) {
const s = {
oldState: this._state.current,
state: e
};
this._stateWillChange && this._stateWillChange(this),
this.dispatchEvent(q, s),
this._state.set(e),
this._stateDidChange && this._stateDidChange(this),
this.dispatchEvent(z, s)
}
get title() {
return this.attributes.name || this.attributes.title
}
get trackNumber() {
return this.attributes.trackNumber
}
beginMonitoringStateDidChange(e) {
this._stateDidChange = e
}
beginMonitoringStateWillChange(e) {
this._stateWillChange = e
}
endMonitoringStateDidChange() {
this._stateDidChange = void 0
}
endMonitoringStateWillChange() {
this._stateWillChange = void 0
}
isEqual(e) {
return this.id === e.id && this.type === e.type && this.attributes === e.attributes
}
resetState() {
this.endMonitoringStateWillChange(),
this.endMonitoringStateDidChange(),
this.state = D.none
}
restrict() {
this.isExplicitItem && (this.state = D.restricted,
this._removePlayableData())
}
notSupported() {
this.state = D.unsupported,
this._removePlayableData()
}
updateFromLoadError(e) {
switch (e.errorCode) {
case MKError.CONTENT_RESTRICTED:
this.state = D.restricted;
break;
case MKError.CONTENT_UNAVAILABLE:
this.state = D.unavailable;
break;
default:
this.state = D.error
}
}
updateFromSongList(e) {
"musicVideo" === this.type ? this.updateWithLoadedAssets(void 0, e["hls-playlist-url"]) : this.updateWithLoadedAssets(e.assets),
this._songId = e.songId,
this.updateWithLoadedKeys({
"hls-key-cert-url": e["hls-key-cert-url"],
"hls-key-server-url": e["hls-key-server-url"],
"widevine-cert-url": e["widevine-cert-url"]
})
}
updateWithLoadedKeys(e, s) {
this.keyURLs = e,
s && (this.keyServerQueryParameters = s)
}
updateWithLoadedAssets(e, s) {
e && (this._assets = e),
s && (this.assetURL = s)
}
_removePlayableData() {
var e, s, n;
null === (e = this.attributes) || void 0 === e || delete e.playParams,
null === (s = this.attributes) || void 0 === s || delete s.previews,
null === (n = this.attributes) || void 0 === n || delete n.trailers
}
}
var Y = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : void 0 !== s ? s : "undefined" != typeof self ? self : {};
function unwrapExports(e) {
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e
}
function createCommonjsModule(e, s) {
return e(s = {
exports: {}
}, s.exports),
s.exports
}
var G = createCommonjsModule((function(e) {
var s = e.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")();
"number" == typeof __g && (__g = s)
}
))
, Q = createCommonjsModule((function(e) {
var s = e.exports = {
version: "2.6.12"
};
"number" == typeof __e && (__e = s)
}
));
Q.version;
var _isObject = function(e) {
return "object" == typeof e ? null !== e : "function" == typeof e
}
, _anObject = function(e) {
if (!_isObject(e))
throw TypeError(e + " is not an object!");
return e
}
, _fails = function(e) {
try {
return !!e()
} catch (bt) {
return !0
}
}
, J = !_fails((function() {
return 7 != Object.defineProperty({}, "a", {
get: function() {
return 7
}
}).a
}
))
, X = G.document
, Z = _isObject(X) && _isObject(X.createElement)
, ee = !J && !_fails((function() {
return 7 != Object.defineProperty((e = "div",
Z ? X.createElement(e) : {}), "a", {
get: function() {
return 7
}
}).a;
var e
}
))
, te = Object.defineProperty
, ie = {
f: J ? Object.defineProperty : function(e, s, n) {
if (_anObject(e),
s = function(e, s) {
if (!_isObject(e))
return e;
var n, d;
if (s && "function" == typeof (n = e.toString) && !_isObject(d = n.call(e)))
return d;
if ("function" == typeof (n = e.valueOf) && !_isObject(d = n.call(e)))
return d;
if (!s && "function" == typeof (n = e.toString) && !_isObject(d = n.call(e)))
return d;
throw TypeError("Can't convert object to primitive value")
}(s, !0),
_anObject(n),
ee)
try {
return te(e, s, n)
} catch (bt) {}
if ("get"in n || "set"in n)
throw TypeError("Accessors not supported!");
return "value"in n && (e[s] = n.value),
e
}
}
, se = J ? function(e, s, n) {
return ie.f(e, s, function(e, s) {
return {
enumerable: !(1 & e),
configurable: !(2 & e),
writable: !(4 & e),
value: s
}
}(1, n))
}
: function(e, s, n) {
return e[s] = n,
e
}
, re = {}.hasOwnProperty
, _has = function(e, s) {
return re.call(e, s)
}
, ne = 0
, ae = Math.random()
, _uid = function(e) {
return "Symbol(".concat(void 0 === e ? "" : e, ")_", (++ne + ae).toString(36))
}
, oe = createCommonjsModule((function(e) {
var s = G["__core-js_shared__"] || (G["__core-js_shared__"] = {});
(e.exports = function(e, n) {
return s[e] || (s[e] = void 0 !== n ? n : {})
}
)("versions", []).push({
version: Q.version,
mode: "global",
copyright: "© 2020 Denis Pushkarev (zloirock.ru)"
})
}
))
, de = oe("native-function-to-string", Function.toString)
, le = createCommonjsModule((function(e) {
var s = _uid("src")
, n = ("" + de).split("toString");
Q.inspectSource = function(e) {
return de.call(e)
}
,
(e.exports = function(e, d, h, p) {
var y = "function" == typeof h;
y && (_has(h, "name") || se(h, "name", d)),
e[d] !== h && (y && (_has(h, s) || se(h, s, e[d] ? "" + e[d] : n.join(String(d)))),
e === G ? e[d] = h : p ? e[d] ? e[d] = h : se(e, d, h) : (delete e[d],
se(e, d, h)))
}
)(Function.prototype, "toString", (function() {
return "function" == typeof this && this[s] || de.call(this)
}
))
}
))
, _ctx = function(e, s, n) {
if (function(e) {
if ("function" != typeof e)
throw TypeError(e + " is not a function!")
}(e),
void 0 === s)
return e;
switch (n) {
case 1:
return function(n) {
return e.call(s, n)
}
;
case 2:
return function(n, d) {
return e.call(s, n, d)
}
;
case 3:
return function(n, d, h) {
return e.call(s, n, d, h)
}
}
return function() {
return e.apply(s, arguments)
}
}
, $export = function(e, s, n) {
var d, h, p, y, m = e & $export.F, g = e & $export.G, v = e & $export.S, _ = e & $export.P, b = e & $export.B, T = g ? G : v ? G[s] || (G[s] = {}) : (G[s] || {}).prototype, E = g ? Q : Q[s] || (Q[s] = {}), k = E.prototype || (E.prototype = {});
for (d in g && (n = s),
n)
p = ((h = !m && T && void 0 !== T[d]) ? T : n)[d],
y = b && h ? _ctx(p, G) : _ && "function" == typeof p ? _ctx(Function.call, p) : p,
T && le(T, d, p, e & $export.U),
E[d] != p && se(E, d, y),
_ && k[d] != p && (k[d] = p)
};
G.core = Q,
$export.F = 1,
$export.G = 2,
$export.S = 4,
$export.P = 8,
$export.B = 16,
$export.W = 32,
$export.U = 64,
$export.R = 128;
var ce, ue, he = $export, pe = {}.toString, ye = Object("z").propertyIsEnumerable(0) ? Object : function(e) {
return "String" == function(e) {
return pe.call(e).slice(8, -1)
}(e) ? e.split("") : Object(e)
}
, _defined = function(e) {
if (null == e)
throw TypeError("Can't call method on " + e);
return e
}, _toIobject = function(e) {
return ye(_defined(e))
}, me = Math.ceil, ge = Math.floor, _toInteger = function(e) {
return isNaN(e = +e) ? 0 : (e > 0 ? ge : me)(e)
}, fe = Math.min, ve = Math.max, _e = Math.min, be = oe("keys"), Te = (ce = !1,
function(e, s, n) {
var d, h, p = _toIobject(e), y = (d = p.length) > 0 ? fe(_toInteger(d), 9007199254740991) : 0, m = function(e, s) {
return (e = _toInteger(e)) < 0 ? ve(e + s, 0) : _e(e, s)
}(n, y);
if (ce && s != s) {
for (; y > m; )
if ((h = p[m++]) != h)
return !0
} else
for (; y > m; m++)
if ((ce || m in p) && p[m] === s)
return ce || m || 0;
return !ce && -1
}
), Ee = be[ue = "IE_PROTO"] || (be[ue] = _uid(ue)), ke = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","), Se = Object.keys || function(e) {
return function(e, s) {
var n, d = _toIobject(e), h = 0, p = [];
for (n in d)
n != Ee && _has(d, n) && p.push(n);
for (; s.length > h; )
_has(d, n = s[h++]) && (~Te(p, n) || p.push(n));
return p
}(e, ke)
}
, Pe = {
f: Object.getOwnPropertySymbols
}, Ie = {
f: {}.propertyIsEnumerable
}, _toObject = function(e) {
return Object(_defined(e))
}, Ae = Object.assign, we = !Ae || _fails((function() {
var e = {}
, s = {}
, n = Symbol()
, d = "abcdefghijklmnopqrst";
return e[n] = 7,
d.split("").forEach((function(e) {
s[e] = e
}
)),
7 != Ae({}, e)[n] || Object.keys(Ae({}, s)).join("") != d
}
)) ? function(e, s) {
for (var n = _toObject(e), d = arguments.length, h = 1, p = Pe.f, y = Ie.f; d > h; )
for (var m, g = ye(arguments[h++]), v = p ? Se(g).concat(p(g)) : Se(g), _ = v.length, b = 0; _ > b; )
m = v[b++],
J && !y.call(g, m) || (n[m] = g[m]);
return n
}
: Ae;
he(he.S + he.F, "Object", {
assign: we
}),
Q.Object.assign;
var Re = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== Re && Re
, Oe = "URLSearchParams"in Re
, Ce = "Symbol"in Re && "iterator"in Symbol
, Me = "FileReader"in Re && "Blob"in Re && function() {
try {
return new Blob,
!0
} catch (bt) {
return !1
}
}()
, De = "FormData"in Re
, Ne = "ArrayBuffer"in Re;
if (Ne)
var Le = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"]
, xe = ArrayBuffer.isView || function(e) {
return e && Le.indexOf(Object.prototype.toString.call(e)) > -1
}
;
function normalizeName(e) {
if ("string" != typeof e && (e = String(e)),
/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e)
throw new TypeError('Invalid character in header field name: "' + e + '"');
return e.toLowerCase()
}
function normalizeValue(e) {
return "string" != typeof e && (e = String(e)),
e
}
function iteratorFor(e) {
var s = {
next: function() {
var s = e.shift();
return {
done: void 0 === s,
value: s
}
}
};
return Ce && (s[Symbol.iterator] = function() {
return s
}
),
s
}
function Headers$1(e) {
this.map = {},
e instanceof Headers$1 ? e.forEach((function(e, s) {
this.append(s, e)
}
), this) : Array.isArray(e) ? e.forEach((function(e) {
this.append(e[0], e[1])
}
), this) : e && Object.getOwnPropertyNames(e).forEach((function(s) {
this.append(s, e[s])
}
), this)
}
function consumed(e) {
if (e.bodyUsed)
return Promise.reject(new TypeError("Already read"));
e.bodyUsed = !0
}
function fileReaderReady(e) {
return new Promise((function(s, n) {
e.onload = function() {
s(e.result)
}
,
e.onerror = function() {
n(e.error)
}
}
))
}
function readBlobAsArrayBuffer(e) {
var s = new FileReader
, n = fileReaderReady(s);
return s.readAsArrayBuffer(e),
n
}
function bufferClone(e) {
if (e.slice)
return e.slice(0);
var s = new Uint8Array(e.byteLength);
return s.set(new Uint8Array(e)),
s.buffer
}
function Body() {
return this.bodyUsed = !1,
this._initBody = function(e) {
var s;
this.bodyUsed = this.bodyUsed,
this._bodyInit = e,
e ? "string" == typeof e ? this._bodyText = e : Me && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : De && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : Oe && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : Ne && Me && ((s = e) && DataView.prototype.isPrototypeOf(s)) ? (this._bodyArrayBuffer = bufferClone(e.buffer),
this._bodyInit = new Blob([this._bodyArrayBuffer])) : Ne && (ArrayBuffer.prototype.isPrototypeOf(e) || xe(e)) ? this._bodyArrayBuffer = bufferClone(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "",
this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : Oe && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"))
}
,
Me && (this.blob = function() {
var e = consumed(this);
if (e)
return e;
if (this._bodyBlob)
return Promise.resolve(this._bodyBlob);
if (this._bodyArrayBuffer)
return Promise.resolve(new Blob([this._bodyArrayBuffer]));
if (this._bodyFormData)
throw new Error("could not read FormData body as blob");
return Promise.resolve(new Blob([this._bodyText]))
}
,
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
var e = consumed(this);
return e || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer))
}
return this.blob().then(readBlobAsArrayBuffer)
}
),
this.text = function() {
var e, s, n, d = consumed(this);
if (d)
return d;
if (this._bodyBlob)
return e = this._bodyBlob,
s = new FileReader,
n = fileReaderReady(s),
s.readAsText(e),
n;
if (this._bodyArrayBuffer)
return Promise.resolve(function(e) {
for (var s = new Uint8Array(e), n = new Array(s.length), d = 0; d < s.length; d++)
n[d] = String.fromCharCode(s[d]);
return n.join("")
}(this._bodyArrayBuffer));
if (this._bodyFormData)
throw new Error("could not read FormData body as text");
return Promise.resolve(this._bodyText)
}
,
De && (this.formData = function() {
return this.text().then(decode)
}
),
this.json = function() {
return this.text().then(JSON.parse)
}
,
this
}
Headers$1.prototype.append = function(e, s) {
e = normalizeName(e),
s = normalizeValue(s);
var n = this.map[e];
this.map[e] = n ? n + ", " + s : s
}
,
Headers$1.prototype.delete = function(e) {
delete this.map[normalizeName(e)]
}
,
Headers$1.prototype.get = function(e) {
return e = normalizeName(e),
this.has(e) ? this.map[e] : null
}
,
Headers$1.prototype.has = function(e) {
return this.map.hasOwnProperty(normalizeName(e))
}
,
Headers$1.prototype.set = function(e, s) {
this.map[normalizeName(e)] = normalizeValue(s)
}
,
Headers$1.prototype.forEach = function(e, s) {
for (var n in this.map)
this.map.hasOwnProperty(n) && e.call(s, this.map[n], n, this)
}
,
Headers$1.prototype.keys = function() {
var e = [];
return this.forEach((function(s, n) {
e.push(n)
}
)),
iteratorFor(e)
}
,
Headers$1.prototype.values = function() {
var e = [];
return this.forEach((function(s) {
e.push(s)
}
)),
iteratorFor(e)
}
,
Headers$1.prototype.entries = function() {
var e = [];
return this.forEach((function(s, n) {
e.push([n, s])
}
)),
iteratorFor(e)
}
,
Ce && (Headers$1.prototype[Symbol.iterator] = Headers$1.prototype.entries);
var Ue = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
function Request(e, s) {
if (!(this instanceof Request))
throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
var n, d, h = (s = s || {}).body;
if (e instanceof Request) {
if (e.bodyUsed)
throw new TypeError("Already read");
this.url = e.url,
this.credentials = e.credentials,
s.headers || (this.headers = new Headers$1(e.headers)),
this.method = e.method,
this.mode = e.mode,
this.signal = e.signal,
h || null == e._bodyInit || (h = e._bodyInit,
e.bodyUsed = !0)
} else
this.url = String(e);
if (this.credentials = s.credentials || this.credentials || "same-origin",
!s.headers && this.headers || (this.headers = new Headers$1(s.headers)),
this.method = (n = s.method || this.method || "GET",
d = n.toUpperCase(),
Ue.indexOf(d) > -1 ? d : n),
this.mode = s.mode || this.mode || null,
this.signal = s.signal || this.signal,
this.referrer = null,
("GET" === this.method || "HEAD" === this.method) && h)
throw new TypeError("Body not allowed for GET or HEAD requests");
if (this._initBody(h),
!("GET" !== this.method && "HEAD" !== this.method || "no-store" !== s.cache && "no-cache" !== s.cache)) {
var p = /([?&])_=[^&]*/;
if (p.test(this.url))
this.url = this.url.replace(p, "$1_=" + (new Date).getTime());
else {
this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + (new Date).getTime()
}
}
}
function decode(e) {
var s = new FormData;
return e.trim().split("&").forEach((function(e) {
if (e) {
var n = e.split("=")
, d = n.shift().replace(/\+/g, " ")
, h = n.join("=").replace(/\+/g, " ");
s.append(decodeURIComponent(d), decodeURIComponent(h))
}
}
)),
s
}
function Response(e, s) {
if (!(this instanceof Response))
throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
s || (s = {}),
this.type = "default",
this.status = void 0 === s.status ? 200 : s.status,
this.ok = this.status >= 200 && this.status < 300,
this.statusText = void 0 === s.statusText ? "" : "" + s.statusText,
this.headers = new Headers$1(s.headers),
this.url = s.url || "",
this._initBody(e)
}
Request.prototype.clone = function() {
return new Request(this,{
body: this._bodyInit
})
}
,
Body.call(Request.prototype),
Body.call(Response.prototype),
Response.prototype.clone = function() {
return new Response(this._bodyInit,{
status: this.status,
statusText: this.statusText,
headers: new Headers$1(this.headers),
url: this.url
})
}
,
Response.error = function() {
var e = new Response(null,{
status: 0,
statusText: ""
});
return e.type = "error",
e
}
;
var $e = [301, 302, 303, 307, 308];
Response.redirect = function(e, s) {
if (-1 === $e.indexOf(s))
throw new RangeError("Invalid status code");
return new Response(null,{
status: s,
headers: {
location: e
}
})
}
;
var je = Re.DOMException;
try {
new je
} catch (Ra) {
(je = function(e, s) {
this.message = e,
this.name = s;
var n = Error(e);
this.stack = n.stack
}
).prototype = Object.create(Error.prototype),
je.prototype.constructor = je
}
function fetch$1(e, s) {
return new Promise((function(n, d) {
var h = new Request(e,s);
if (h.signal && h.signal.aborted)
return d(new je("Aborted","AbortError"));
var p = new XMLHttpRequest;
function abortXhr() {
p.abort()
}
p.onload = function() {
var e, s, d = {
status: p.status,
statusText: p.statusText,
headers: (e = p.getAllResponseHeaders() || "",
s = new Headers$1,
e.replace(/\r?\n[\t ]+/g, " ").split("\r").map((function(e) {
return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e
}
)).forEach((function(e) {
var n = e.split(":")
, d = n.shift().trim();
if (d) {
var h = n.join(":").trim();
s.append(d, h)
}
}
)),
s)
};
d.url = "responseURL"in p ? p.responseURL : d.headers.get("X-Request-URL");
var h = "response"in p ? p.response : p.responseText;
setTimeout((function() {
n(new Response(h,d))
}
), 0)
}
,
p.onerror = function() {
setTimeout((function() {
d(new TypeError("Network request failed"))
}
), 0)
}
,
p.ontimeout = function() {
setTimeout((function() {
d(new TypeError("Network request failed"))
}
), 0)
}
,
p.onabort = function() {
setTimeout((function() {
d(new je("Aborted","AbortError"))
}
), 0)
}
,
p.open(h.method, function(e) {
try {
return "" === e && Re.location.href ? Re.location.href : e
} catch (bt) {
return e
}
}(h.url), !0),
"include" === h.credentials ? p.withCredentials = !0 : "omit" === h.credentials && (p.withCredentials = !1),
"responseType"in p && (Me ? p.responseType = "blob" : Ne && h.headers.get("Content-Type") && -1 !== h.headers.get("Content-Type").indexOf("application/octet-stream") && (p.responseType = "arraybuffer")),
!s || "object" != typeof s.headers || s.headers instanceof Headers$1 ? h.headers.forEach((function(e, s) {
p.setRequestHeader(s, e)
}
)) : Object.getOwnPropertyNames(s.headers).forEach((function(e) {
p.setRequestHeader(e, normalizeValue(s.headers[e]))
}
)),
h.signal && (h.signal.addEventListener("abort", abortXhr),
p.onreadystatechange = function() {
4 === p.readyState && h.signal.removeEventListener("abort", abortXhr)
}
),
p.send(void 0 === h._bodyInit ? null : h._bodyInit)
}
))
}
fetch$1.polyfill = !0,
Re.fetch || (Re.fetch = fetch$1,
Re.Headers = Headers$1,
Re.Request = Request,
Re.Response = Response);
const addPathToURL = (e,s)=>void 0 === e || "" === e ? s || "" : void 0 === s ? e : (e.endsWith("/") && (e = e.slice(0, -1)),
s.startsWith("/") && (s = s.slice(1)),
`${e}/${s}`)
, addQueryParamsToURL = (e,s)=>{
const n = urlEncodeParameters(s);
return "" === n ? e : e.endsWith("&") || e.endsWith("?") ? `${e}${n}` : e.includes("?") ? `${e}&${n}` : `${e}?${n}`
}
, Be = "undefined" != typeof Headers
, headersToDict = e=>{
let s = {};
var n;
return n = e,
Be && n instanceof Headers ? e.forEach((e,n)=>s[n] = e) : Array.isArray(e) ? e.forEach(([e,n])=>s[e] = n) : s = e,
s
}
, mergeFetchHeaders = (e={},s={})=>Object.assign(Object.assign({}, headersToDict(e)), headersToDict(s))
, mergeFetchOptions = (e,s)=>{
if (e || s)
return (null == e ? void 0 : e.headers) && (null == s ? void 0 : s.headers) ? Object.assign(Object.assign(Object.assign({}, e), s), {
headers: mergeFetchHeaders(e.headers, s.headers)
}) : Object.assign(Object.assign({}, e), s)
}
;
function parseQueryParams(e) {
var s;
if (!e || e.startsWith("http") && !e.includes("?"))
return {};
try {
return parseParams(null !== (s = e.split("?")[1]) && void 0 !== s ? s : e, "&", decodeURIComponent)
} catch (n) {
return {}
}
}
function parseParams(e, s="&", n=(e=>e)) {
return "string" != typeof e ? {} : e.split(s).map(e=>e.trim().split("=", 2)).reduce((e,s)=>{
const [d,h] = s;
return "" === d && void 0 === h || (e[n(d)] = n(h),
void 0 === h && (e[n(d)] = void 0)),
e
}
, {})
}
function getMaxAgeFromHeaders(e) {
const s = function(e, s) {
if (void 0 !== s)
return Be && s instanceof Headers ? s.get(e) : s[e]
}("cache-control", e);
if (s) {
return (e=>{
const s = Number(e);
if (Number.isFinite(s))
return s
}
)(parseParams(s, ",")["max-age"])
}
}
function rewriteLastUrlPath(e, s) {
const n = e.split("/");
return n.pop(),
n.push(s),
n.join("/")
}
const recursiveEncodeParameters = (e,s)=>Object.keys(e).reduce((n,d)=>{
const h = e[d]
, p = s ? `${s}[${encodeURIComponent(d)}]` : encodeURIComponent(d);
return `${n}${n ? "&" : ""}${isObject(h) ? recursiveEncodeParameters(h, p) : `${p}=${encodeURIComponent("" + h)}`}`
}
, "");
function urlEncodeParameters(e) {
return e ? recursiveEncodeParameters(e) : ""
}
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
function __awaiter$2(e, s, n, d) {
return new (n || (n = Promise))((function(h, p) {
function fulfilled(e) {
try {
step(d.next(e))
} catch (bt) {
p(bt)
}
}
function rejected(e) {
try {
step(d.throw(e))
} catch (bt) {
p(bt)
}
}
function step(e) {
e.done ? h(e.value) : new n((function(s) {
s(e.value)
}
)).then(fulfilled, rejected)
}
step((d = d.apply(e, s || [])).next())
}
))
}
const AsyncDebounce = (e=100,s)=>(n,d,h)=>{
const p = h.value
, y = asyncDebounce(p, e, s);
h.value = y
}
, asyncDebounce = (e,s=250,n={
isImmediate: !1
})=>{
let d, h;
function fulfill(e) {
return hasOwn(n, "cancelledValue") ? null == e ? void 0 : e.resolve(n.cancelledValue) : null == e ? void 0 : e.reject(new Error("cancelled"))
}
const clearLastPromise = ()=>{
d && (d.resolved || (fulfill(d),
d.timeoutId && clearTimeout(d.timeoutId)),
d = void 0)
}
, invokeFn = (s,n,h,p)=>{
e.apply(s, p).then(e=>{
n(e),
d && (d.resolved = !0)
}
).catch(h)
}
;
return n.isImmediate ? function(...e) {
const n = Date.now()
, p = this;
return h && n >= h && clearLastPromise(),
h = Date.now() + s,
d ? fulfill(Promise) : new Promise((s,n)=>{
d = {
resolve: s,
reject: n
},
invokeFn(p, s, n, e)
}
)
}
: function(...e) {
const n = this;
return d && clearLastPromise(),
new Promise((function(h, p) {
const y = setTimeout(invokeFn.bind(void 0, n, h, p, e), s);
d = {
resolve: h,
reject: p,
timeoutId: y
}
}
))
}
}
, Ke = isNodeEnvironment$1();
class Browser {
constructor(e) {
var s;
e || (e = "undefined" != typeof window && (null === (s = null === window || void 0 === window ? void 0 : window.navigator) || void 0 === s ? void 0 : s.userAgent) ? window.navigator.userAgent : "");
const n = e.toLowerCase();
this.isEdge = /\sedge\//.test(n),
this.isChrome = !this.isEdge && /chrome/.test(n),
this.isSafari = !this.isEdge && !this.isChrome && /safari/.test(n),
this.isFirefox = !this.isEdge && !this.isChrome && !this.isSafari && /firefox/.test(n),
this.isIE = !this.isEdge && !this.isChrome && !this.isSafari && !this.isFirefox && /trident|msie/.test(n),
this.isMobile = /mobile/.test(n),
this.isAndroid = this.isMobile && /android/.test(n),
this.isiOS = this.isMobile && /iphone|ipad|ipod/.test(n),
this.isWebView = /(webview|(iphone|ipod|ipad)(?!.*safari\/)|android.*(wv|\.0\.0\.0)|\bfb[\w_]+\/(?:messenger)?|\binstagram|\btwitter)/.test(n),
this.isEdge ? this.engineVersion = n.match(/(?:edge).(\d+)/) : (this.version = n.match(/(?:chrome|version|firefox|msie|rv).(\d+)\.(\d+)/),
this.engineVersion = n.match(/(?:applewebkit|gecko|trident).(\d+)/)),
this.version && (this.majorVersion = parseInt(this.version[1], 10),
this.minorVersion = parseInt(this.version[2], 10)),
this.engineVersion && (this.engineMajorVersion = parseInt(this.engineVersion[1], 10))
}
static supportsEs6() {
if ("undefined" == typeof Symbol)
return !1;
try {
new Function('"use strict";class Foo {}')(),
new Function('"use strict";var bar = (x) => x+1')()
} catch (bt) {
return !1
}
return !0
}
}
const Fe = new Browser
, Ve = {
AFG: "143610",
AGO: "143564",
AIA: "143538",
ALB: "143575",
AND: "143611",
ARE: "143481",
ARG: "143505",
ARM: "143524",
ATG: "143540",
AUS: "143460",
AUT: "143445",
AZE: "143568",
BEL: "143446",
BEN: "143576",
BFA: "143578",
BGD: "143490",
BGR: "143526",
BHR: "143559",
BHS: "143539",
BIH: "143612",
BLR: "143565",
BLZ: "143555",
BMU: "143542",
BOL: "143556",
BRA: "143503",
BRB: "143541",
BRN: "143560",
BTN: "143577",
BWA: "143525",
CAF: "143623",
CAN: "143455",
CHE: "143459",
CHL: "143483",
CHN: "143465",
CIV: "143527",
CMR: "143574",
COD: "143613",
COG: "143582",
COL: "143501",
CPV: "143580",
CRI: "143495",
CYM: "143544",
CYP: "143557",
CZE: "143489",
DEU: "143443",
DMA: "143545",
DNK: "143458",
DOM: "143508",
DZA: "143563",
ECU: "143509",
EGY: "143516",
ESP: "143454",
EST: "143518",
ETH: "143569",
FIN: "143447",
FJI: "143583",
FRA: "143442",
FSM: "143591",
GAB: "143614",
GBR: "143444",
GEO: "143615",
GHA: "143573",
GIN: "143616",
GMB: "143584",
GNB: "143585",
GRC: "143448",
GRD: "143546",
GTM: "143504",
GUY: "143553",
HKG: "143463",
HND: "143510",
HRV: "143494",
HUN: "143482",
IDN: "143476",
IND: "143467",
IRL: "143449",
IRQ: "143617",
ISL: "143558",
ISR: "143491",
ITA: "143450",
JAM: "143511",
JOR: "143528",
JPN: "143462",
KAZ: "143517",
KEN: "143529",
KGZ: "143586",
KHM: "143579",
KNA: "143548",
KOR: "143466",
KWT: "143493",
LAO: "143587",
LBN: "143497",
LBR: "143588",
LBY: "143567",
LCA: "143549",
LIE: "143522",
LKA: "143486",
LTU: "143520",
LUX: "143451",
LVA: "143519",
MAC: "143515",
MAR: "143620",
MCO: "143618",
MDA: "143523",
MDG: "143531",
MDV: "143488",
MEX: "143468",
MKD: "143530",
MLI: "143532",
MLT: "143521",
MMR: "143570",
MNE: "143619",
MNG: "143592",
MOZ: "143593",
MRT: "143590",
MSR: "143547",
MUS: "143533",
MWI: "143589",
MYS: "143473",
NAM: "143594",
NER: "143534",
NGA: "143561",
NIC: "143512",
NLD: "143452",
NOR: "143457",
NPL: "143484",
NRU: "143606",
NZL: "143461",
OMN: "143562",
PAK: "143477",
PAN: "143485",
PER: "143507",
PHL: "143474",
PLW: "143595",
PNG: "143597",
POL: "143478",
PRT: "143453",
PRY: "143513",
PSE: "143596",
QAT: "143498",
ROU: "143487",
RUS: "143469",
RWA: "143621",
SAU: "143479",
SEN: "143535",
SGP: "143464",
SLB: "143601",
SLE: "143600",
SLV: "143506",
SRB: "143500",
STP: "143598",
SUR: "143554",
SVK: "143496",
SVN: "143499",
SWE: "143456",
SWZ: "143602",
SYC: "143599",
TCA: "143552",
TCD: "143581",
THA: "143475",
TJK: "143603",
TKM: "143604",
TON: "143608",
TTO: "143551",
TUN: "143536",
TUR: "143480",
TWN: "143470",
TZA: "143572",
UGA: "143537",
UKR: "143492",
URY: "143514",
USA: "143441",
UZB: "143566",
VCT: "143550",
VEN: "143502",
VGB: "143543",
VNM: "143471",
VUT: "143609",
WSM: "143607",
XKX: "143624",
YEM: "143571",
ZAF: "143472",
ZMB: "143622",
ZWE: "143605"
}
, He = memoize(e=>{
const s = new Uint16Array(e)
, n = s.length;
let d = "";
for (let h = 0; h < n; h++)
d += String.fromCharCode(s[h]);
return d
}
)
, ze = memoize(e=>{
const s = b(e);
return qe(s)
}
);
function ensureArray(e=[]) {
return Array.isArray(e) ? e : [e]
}
const qe = memoize(e=>{
const s = e.length
, n = new ArrayBuffer(s)
, d = new Uint8Array(n);
for (let h = 0; h < s; h++)
d[h] = e.charCodeAt(h);
return d
}
)
, We = memoize(e=>{
const s = e.length
, n = new ArrayBuffer(2 * s)
, d = new Uint16Array(n);
for (let h = 0; h < s; h++)
d[h] = e.charCodeAt(h);
return d
}
)
, Ye = memoize(e=>{
let s, n, d, h, p, y, m, g = 0;
const v = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
let _ = "";
for (; g < e.length; )
s = e[g++],
n = g < e.length ? e[g++] : Number.NaN,
d = g < e.length ? e[g++] : Number.NaN,
h = s >> 2,
p = (3 & s) << 4 | n >> 4,
y = (15 & n) << 2 | d >> 6,
m = 63 & d,
isNaN(n) ? y = m = 64 : isNaN(d) && (m = 64),
_ += v.charAt(h) + v.charAt(p) + v.charAt(y) + v.charAt(m);
return _
}
);
let isMergeableObject = function(e) {
return function(e) {
return !!e && "object" == typeof e
}(e) && !function(e) {
let s = Object.prototype.toString.call(e);
return "[object RegExp]" === s || "[object Date]" === s || function(e) {
return e.$$typeof === Ge
}(e)
}(e)
};
let Ge = "function" == typeof Symbol && Symbol.for ? Symbol.for("react.element") : 60103;
function cloneUnlessOtherwiseSpecified(e, s) {
return !1 !== s.clone && s.isMergeableObject(e) ? deepmerge((n = e,
Array.isArray(n) ? [] : {}), e, s) : e;
var n
}
function defaultArrayMerge(e, s, n) {
return e.concat(s).map((function(e) {
return cloneUnlessOtherwiseSpecified(e, n)
}
))
}
function getKeys(e) {
return Object.keys(e).concat(function(e) {
return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(e).filter((function(s) {
return e.propertyIsEnumerable(s)
}
)) : []
}(e))
}
function mergeObject(e, s, n) {
let d = {};
return n.isMergeableObject(e) && getKeys(e).forEach((function(s) {
d[s] = cloneUnlessOtherwiseSpecified(e[s], n)
}
)),
getKeys(s).forEach((function(h) {
n.isMergeableObject(s[h]) && e[h] ? d[h] = function(e, s) {
if (!s.customMerge)
return deepmerge;
let n = s.customMerge(e);
return "function" == typeof n ? n : deepmerge
}(h, n)(e[h], s[h], n) : d[h] = cloneUnlessOtherwiseSpecified(s[h], n)
}
)),
d
}
function deepmerge(e, s, n) {
(n = n || {}).arrayMerge = n.arrayMerge || defaultArrayMerge,
n.isMergeableObject = n.isMergeableObject || isMergeableObject;
let d = Array.isArray(s);
return d === Array.isArray(e) ? d ? n.arrayMerge(e, s, n) : mergeObject(e, s, n) : cloneUnlessOtherwiseSpecified(s, n)
}
var Qe;
deepmerge.all = function(e, s) {
if (!Array.isArray(e))
throw new Error("first argument should be an array");
return e.reduce((function(e, n) {
return deepmerge(e, n, s)
}
), {})
}
,
function(e) {
e.dataRecordDidDelete = "dataRecordDidDelete",
e.dataRecordWillDelete = "dataRecordWillDelete",
e.dataRecordDidMaterialize = "dataRecordDidMaterialize",
e.dataRecordDidPopulate = "dataRecordDidPopulate",
e.dataRecordWillPopulate = "dataRecordWillPopulate"
}(Qe || (Qe = {}));
const isDataRecord = e=>!(!e || "function" != typeof e.hasAttributes || "function" != typeof e.hasRelationships || "function" != typeof e.hasViews || "function" != typeof e.serialize);
class DataRecord {
constructor(e, s, n={}) {
this.type = e,
this.id = s,
this._mjs = {
attributes: [],
relationships: [],
views: []
},
this._meta = {},
this._mjs = Object.assign(Object.assign({}, this._mjs), n)
}
hasProperties(e) {
return !e || (e.attributes || e.relationships || e.views ? !(e.attributes && !this.hasAttributes(e.attributes)) && (!(e.relationships && !this.hasRelationships(e.relationships)) && !(e.views && !this.hasViews(e.views))) : this.hasAttributes() || this.hasRelationships() || this.hasViews())
}
hasAttributes(e) {
return this._hasProperties(this._mjs.attributes, e)
}
hasRelationships(e) {
return this._hasProperties(this._mjs.relationships, e)
}
hasViews(e) {
return this._hasProperties(this._mjs.views, e)
}
meta(e) {
return e ? this._meta[e] : this._meta
}
serialize(e=!0, s={}, n={}) {
const d = {
id: this.id,
type: this.type
};
return s[`${this.type}-${this.id}`] && !n.allowFullDuplicateSerializations ? d : (s[`${this.type}-${this.id}`] = !0,
this.hasAttributes() && (d.attributes = this._mjs.attributes.reduce((e,s)=>(e[s] = this[s],
e), {})),
this._mjs.relationships.length > 0 && (d.relationships = this._serializeRelatedData(this._mjs.relationships, s, n)),
this._mjs.views.length > 0 && (d.views = this._serializeRelatedData(this._mjs.views, s, n)),
e ? {
data: d
} : d)
}
setProperty(e, s, n="attributes", d={}) {
function isMergeableObject(e) {
return !(!e || "object" != typeof e || e instanceof DataRecord)
}
hasOwn(this, e) || (this._mjs[n] || (this._mjs[n] = []),
this._mjs[n].push(e));
const setDescriptor = e=>({
value: e,
writable: !0,
configurable: !0,
enumerable: !0
});
this[e] && s && "object" == typeof this[e] && "object" == typeof s ? "attributes" === n ? Object.defineProperty(this, e, setDescriptor(deepmerge(this[e], s, {
arrayMerge: function(e, s, n) {
return s
},
isMergeableObject: isMergeableObject
}))) : "relationships" === n && Array.isArray(this[e]) && d.extendRelationships ? Object.defineProperty(this, e, setDescriptor(deepmerge(this[e], s, {
isMergeableObject: isMergeableObject
}))) : Object.defineProperty(this, e, setDescriptor(s)) : Object.defineProperty(this, e, setDescriptor(s))
}
removeRelative(e, s) {
this[e] && (Array.isArray(this[e]) ? this[e] = this[e].filter(e=>e.id !== s) : delete this[e])
}
setParent(e) {
const s = this._mjs.parents
, n = s && s.length > 0;
this._mjs.parents = n ? s.concat(e) : e
}
_hasProperties(e, s) {
return !!e && (s ? ensureArray(s).every(s=>e.includes(s)) : e.length > 0)
}
_serializeRelatedData(e, s={}, n={}) {
return e.reduce((e,d)=>{
if (n.excludeRelationships && n.excludeRelationships.has(d))
return e;
if (n.includeRelationships && !n.includeRelationships.has(d))
return e;
const h = this[d];
return Array.isArray(h) ? e[d] = {
data: h.map(e=>"function" == typeof e.serialize ? e.serialize(!1, s, n) : e)
} : e[d] = h && "function" == typeof h.serialize ? h.serialize(!1, s, n) : h,
e
}
, {})
}
}
class DataStore extends Notifications {
constructor(e={}) {
super([Qe.dataRecordDidDelete, Qe.dataRecordWillDelete, Qe.dataRecordDidMaterialize, Qe.dataRecordWillPopulate, Qe.dataRecordDidPopulate]),
this._removeOnExpiration = !1,
this._shouldDisableRecordReuse = !0,
this._records = {},
this._expiryRecords = new Set,
this._removeOnExpiration = !!e.removeOnExpiration,
this._mapping = e.mapping,
this._shouldDisableRecordReuse = !!e.shouldDisableRecordReuse,
this.filter = e.filter
}
get mapping() {
return this._mapping
}
set mapping(e) {
this._mapping = e
}
clear() {
this._records = {},
this._expiryRecords = new Set
}
peek(e, s, n) {
if (this._checkForExpiredRecords(),
!this._records[e])
return s ? null : [];
if (!s)
return Object.values(this._records[e]);
if (Array.isArray(s))
return s.map(s=>{
const d = this._records[e][s];
if (d && d.hasProperties(n))
return d
}
);
const d = this._records[e][s];
return d && d.hasProperties(n) ? d : null
}
populateDataRecords(e, s={}, n={}) {
if (!e.data)
return [];
if (!Array.isArray(e.data))
return this.populateDataRecord(e.data, s, n);
const d = [];
return e.data.forEach((e,h)=>{
const p = Object.assign(Object.assign({}, n), {
parents: n.parents ? [Object.assign(Object.assign({}, n.parents[0]), {
position: h
})] : []
});
n.parents && (n.parents[0].position = h);
const y = this.populateDataRecord(e, s, p);
d.push(y)
}
),
d
}
populateDataRecord(e, s={}, n) {
const d = n.filter || this.filter
, h = n.mapping || this.mapping;
if (d && !d(e))
return;
if (h) {
let s = "function" == typeof h ? h(e) : transform$9(h, e);
Object.assign(e, s)
}
this._shouldDisableRecordReuse && (s = {});
const p = this._materializeRecord(s, Object.assign({
id: e.id,
type: e.type
}, n));
return e.meta && (p._meta = e.meta),
e.attributes && e.attributes.cachingPolicy && e.attributes.cachingPolicy.maxAge && (p._mjs.expiration = Date.now() + 1e3 * e.attributes.cachingPolicy.maxAge,
this._removeOnExpiration && this._expiryRecords.add(p)),
this._populateDataAttributes(e, p),
"object" == typeof e.relationships && Object.keys(e.relationships).forEach(d=>{
let y = e.relationships[d];
y && "data"in y && (y = this.populateDataRecords(y, s, {
mapping: h,
parents: [{
relationshipName: d,
parentType: p.type,
parentId: p.id
}]
}),
p.setProperty(d, y, "relationships", n))
}
),
"object" == typeof e.views && Object.keys(e.views).forEach(n=>{
const d = e.views[n];
if (d.attributes || d.data) {
const e = new DataRecord("view",n);
if (this._populateDataAttributes(d, e),
d.data) {
const n = this.populateDataRecords(d, s, h);
e.setProperty("data", n, "relationships")
}
p.setProperty(n, e, "views")
}
}
),
p
}
query(e, s) {
this._checkForExpiredRecords();
let includeRecord = e=>!1;
return "string" == typeof e && s ? includeRecord = n=>(null == n ? void 0 : n[e]) === s : "function" == typeof e ? includeRecord = s=>{
try {
return e(s)
} catch (bt) {
return !1
}
}
: "object" == typeof e && (includeRecord = s=>{
const n = Object.keys(e);
let d = 0;
return n.forEach(n=>{
(null == s ? void 0 : s[n]) === e[n] && d++
}
),
n.length === d
}
),
Object.values(this._records).reduce((e,s)=>(Object.values(s).forEach(s=>{
includeRecord(s) && e.push(s)
}
),
e), [])
}
remove(e, s) {
setTimeout(this._checkForExpiredRecords.bind(this), 0);
if (!hasOwn(this._records, e))
return;
const n = this.peek(e, s);
n && (this.dispatchEvent(Qe.dataRecordWillDelete, [e, s]),
n._mjs.parents && n._mjs.parents.length > 0 && n._mjs.parents.forEach(({relationshipName: e, parentType: s, parentId: d})=>{
this.peek(s, d).removeRelative(e, n.id)
}
),
delete this._records[e][s],
this.dispatchEvent(Qe.dataRecordDidDelete, [e, s]))
}
save(e, s={}) {
return setTimeout(this._checkForExpiredRecords.bind(this), 0),
this.populateDataRecords(e, this._records, s)
}
_populateDataAttributes(e, s) {
"object" == typeof e.attributes && (this.dispatchEvent(Qe.dataRecordWillPopulate, [s.type, s.id]),
Object.keys(e.attributes).forEach(n=>{
s.setProperty(n, e.attributes[n], "attributes")
}
),
this.dispatchEvent(Qe.dataRecordDidPopulate, [s.type, s.id]))
}
_materializeRecord(e, s) {
const {type: n, id: d} = s
, h = function(e, s) {
var n = {};
for (var d in e)
Object.prototype.hasOwnProperty.call(e, d) && s.indexOf(d) < 0 && (n[d] = e[d]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var h = 0;
for (d = Object.getOwnPropertySymbols(e); h < d.length; h++)
s.indexOf(d[h]) < 0 && (n[d[h]] = e[d[h]])
}
return n
}(s, ["type", "id"]);
return e[n] = e[n] || {},
e[n][d] ? e[n][d].setParent(h.parents || []) : e[n][d] = new DataRecord(n,d,h),
this.dispatchEvent(Qe.dataRecordDidMaterialize, [n, d]),
e[n][d]
}
_checkForExpiredRecords() {
const e = [];
this._expiryRecords.forEach(s=>{
Date.now() > s._mjs.expiration && (e.push([s.type, s.id]),
this._expiryRecords.delete(s))
}
),
e.forEach(e=>{
this.remove(...e)
}
)
}
}
const logDeprecation = (e,s={})=>{
if (O && O.enabled) {
const n = [];
n.push("Deprecation warning:"),
n.push(s.message || e + " has been deprecated."),
void 0 !== s.until && n.push(`${e} will be removed in version ${s.until}.`),
O.warn(n.join(" "))
}
}
;
const Je = {
AW: "ABW",
AF: "AFG",
AO: "AGO",
AI: "AIA",
AX: "ALA",
AL: "ALB",
AD: "AND",
AE: "ARE",
AR: "ARG",
AM: "ARM",
AS: "ASM",
AQ: "ATA",
TF: "ATF",
AG: "ATG",
AU: "AUS",
AT: "AUT",
AZ: "AZE",
BI: "BDI",
BE: "BEL",
BJ: "BEN",
BQ: "BES",
BF: "BFA",
BD: "BGD",
BG: "BGR",
BH: "BHR",
BS: "BHS",
BA: "BIH",
BL: "BLM",
BY: "BLR",
BZ: "BLZ",
BM: "BMU",
BO: "BOL",
BR: "BRA",
BB: "BRB",
BN: "BRN",
BT: "BTN",
BV: "BVT",
BW: "BWA",
CF: "CAF",
CA: "CAN",
CC: "CCK",
CH: "CHE",
CL: "CHL",
CN: "CHN",
CI: "CIV",
CM: "CMR",
CD: "COD",
CG: "COG",
CK: "COK",
CO: "COL",
KM: "COM",
CV: "CPV",
CR: "CRI",
CU: "CUB",
CW: "CUW",
CX: "CXR",
KY: "CYM",
CY: "CYP",
CZ: "CZE",
DE: "DEU",
DJ: "DJI",
DM: "DMA",
DK: "DNK",
DO: "DOM",
DZ: "DZA",
EC: "ECU",
EG: "EGY",
ER: "ERI",
EH: "ESH",
ES: "ESP",
EE: "EST",
ET: "ETH",
FI: "FIN",
FJ: "FJI",
FK: "FLK",
FR: "FRA",
FO: "FRO",
FM: "FSM",
GA: "GAB",
GB: "GBR",
GE: "GEO",
GG: "GGY",
GH: "GHA",
GI: "GIB",
GN: "GIN",
GP: "GLP",
GM: "GMB",
GW: "GNB",
GQ: "GNQ",
GR: "GRC",
GD: "GRD",
GL: "GRL",
GT: "GTM",
GF: "GUF",
GU: "GUM",
GY: "GUY",
HK: "HKG",
HM: "HMD",
HN: "HND",
HR: "HRV",
HT: "HTI",
HU: "HUN",
ID: "IDN",
IM: "IMN",
IN: "IND",
IO: "IOT",
IE: "IRL",
IR: "IRN",
IQ: "IRQ",
IS: "ISL",
IL: "ISR",
IT: "ITA",
JM: "JAM",
JE: "JEY",
JO: "JOR",
JP: "JPN",
KZ: "KAZ",
KE: "KEN",
KG: "KGZ",
KH: "KHM",
KI: "KIR",
KN: "KNA",
KR: "KOR",
KW: "KWT",
LA: "LAO",
LB: "LBN",
LR: "LBR",
LY: "LBY",
LC: "LCA",
LI: "LIE",
LK: "LKA",
LS: "LSO",
LT: "LTU",
LU: "LUX",
LV: "LVA",
MO: "MAC",
MF: "MAF",
MA: "MAR",
MC: "MCO",
MD: "MDA",
MG: "MDG",
MV: "MDV",
MX: "MEX",
MH: "MHL",
MK: "MKD",
ML: "MLI",
MT: "MLT",
MM: "MMR",
ME: "MNE",
MN: "MNG",
MP: "MNP",
MZ: "MOZ",
MR: "MRT",
MS: "MSR",
MQ: "MTQ",
MU: "MUS",
MW: "MWI",
MY: "MYS",
YT: "MYT",
NA: "NAM",
NC: "NCL",
NE: "NER",
NF: "NFK",
NG: "NGA",
NI: "NIC",
NU: "NIU",
NL: "NLD",
NO: "NOR",
NP: "NPL",
NR: "NRU",
NZ: "NZL",
OM: "OMN",
PK: "PAK",
PA: "PAN",
PN: "PCN",
PE: "PER",
PH: "PHL",
PW: "PLW",
PG: "PNG",
PL: "POL",
PR: "PRI",
KP: "PRK",
PT: "PRT",
PY: "PRY",
PS: "PSE",
PF: "PYF",
QA: "QAT",
RE: "REU",
RO: "ROU",
RU: "RUS",
RW: "RWA",
SA: "SAU",
SD: "SDN",
SN: "SEN",
SG: "SGP",
GS: "SGS",
SH: "SHN",
SJ: "SJM",
SB: "SLB",
SL: "SLE",
SV: "SLV",
SM: "SMR",
SO: "SOM",
PM: "SPM",
RS: "SRB",
SS: "SSD",
ST: "STP",
SR: "SUR",
SK: "SVK",
SI: "SVN",
SE: "SWE",
SZ: "SWZ",
SX: "SXM",
SC: "SYC",
SY: "SYR",
TC: "TCA",
TD: "TCD",
TG: "TGO",
TH: "THA",
TJ: "TJK",
TK: "TKL",
TM: "TKM",
TL: "TLS",
TO: "TON",
TT: "TTO",
TN: "TUN",
TR: "TUR",
TV: "TUV",
TW: "TWN",
TZ: "TZA",
UG: "UGA",
UA: "UKR",
UM: "UMI",
UY: "URY",
US: "USA",
UZ: "UZB",
VA: "VAT",
VC: "VCT",
VE: "VEN",
VG: "VGB",
VI: "VIR",
VN: "VNM",
VU: "VUT",
WF: "WLF",
WS: "WSM",
XK: "XKX",
YE: "YEM",
ZA: "ZAF",
ZM: "ZMB",
ZW: "ZWE"
};
class PubSub {
constructor() {
this.events = {}
}
publish(e, s) {
const n = this.getSubscribersForType(e);
void 0 !== n && n.forEach(n=>{
n(e, s)
}
)
}
subscribe(e, s) {
this.getSubscribersForType(e, !0).push(s)
}
subscribeOnce(e, s) {
const onceCallback = (e,n)=>{
this.unsubscribe(e, onceCallback),
s(e, n)
}
;
this.subscribe(e, onceCallback)
}
unsubscribe(e, s) {
const n = this.getSubscribersForType(e);
if (void 0 !== n)
for (const d in n)
if (n[d] === s) {
delete n[d];
break
}
}
clear(e) {
void 0 === e ? this.events = {} : delete this.events[e]
}
getSubscribersForType(e, s=!1) {
return !this.events.hasOwnProperty(e) && s && (this.events[e] = []),
this.events[e]
}
}
const Xe = {}
, SerialAsync = e=>{
let s = Promise.resolve();
return (n,d,h)=>{
const p = h.value;
return h.value = function(...n) {
return __awaiter$2(this, void 0, void 0, (function*() {
return e && (s = (e=>{
let s = Xe[e];
return s || (s = Promise.resolve(),
Xe[e] = s),
s
}
)(e)),
s = s.catch(()=>{}
).then(()=>p.apply(this, n)),
e && (Xe[e] = s),
s
}
))
}
,
h
}
}
;
var Ze, et, tt, it, st, rt, nt, at, ot;
e.PlaybackBitrate = void 0,
(Ze = e.PlaybackBitrate || (e.PlaybackBitrate = {}))[Ze.STANDARD = 64] = "STANDARD",
Ze[Ze.HIGH = 256] = "HIGH",
function(e) {
e.apiStorefrontChanged = "apiStorefrontChanged",
e.hlsLevelUpdated = "hlsLevelUpdated",
e.mediaContentComplete = "mediaContentComplete",
e.playbackPause = "playbackPause",
e.playbackPlay = "playbackPlay",
e.playbackScrub = "playbackScrub",
e.playbackSeek = "playbackSeek",
e.playbackSkip = "playbackSkip",
e.playbackStop = "playbackStop",
e.playerActivate = "playerActivate",
e.playerExit = "playerExit",
e.queueModified = "queueModified",
e.userActivityIntent = "userActivityIntent",
e.applicationActivityIntent = "applicationActivityIntent"
}(et || (et = {})),
function(e) {
e.MUSICKIT = "music_kit-integration",
e.OTHER = "other",
e.MINI = "mini",
e.SONG = "song",
e.ALBUM = "album",
e.ALBUM_CLASSICAL = "album-classical",
e.ARTIST = "artist",
e.COMPILATION = "compilation",
e.COMPILATION_CLASSICAL = "compilation-classical",
e.PLAYLIST = "playlist",
e.PLAYLIST_CLASSICAL = "playlist-classical",
e.RADIO = "radio",
e.SEARCH = "search",
e.STATION = "station"
}(tt || (tt = {})),
function(e) {
e[e.UNKNOWN = 0] = "UNKNOWN",
e[e.RADIO = 1] = "RADIO",
e[e.PLAYLIST = 2] = "PLAYLIST",
e[e.ALBUM = 3] = "ALBUM",
e[e.ARTIST = 4] = "ARTIST"
}(it || (it = {})),
e.PlayActivityEndReasonType = void 0,
(st = e.PlayActivityEndReasonType || (e.PlayActivityEndReasonType = {}))[st.NOT_APPLICABLE = 0] = "NOT_APPLICABLE",
st[st.OTHER = 1] = "OTHER",
st[st.TRACK_SKIPPED_FORWARDS = 2] = "TRACK_SKIPPED_FORWARDS",
st[st.PLAYBACK_MANUALLY_PAUSED = 3] = "PLAYBACK_MANUALLY_PAUSED",
st[st.PLAYBACK_SUSPENDED = 4] = "PLAYBACK_SUSPENDED",
st[st.MANUALLY_SELECTED_PLAYBACK_OF_A_DIFF_ITEM = 5] = "MANUALLY_SELECTED_PLAYBACK_OF_A_DIFF_ITEM",
st[st.PLAYBACK_PAUSED_DUE_TO_INACTIVITY = 6] = "PLAYBACK_PAUSED_DUE_TO_INACTIVITY",
st[st.NATURAL_END_OF_TRACK = 7] = "NATURAL_END_OF_TRACK",
st[st.PLAYBACK_STOPPED_DUE_TO_SESSION_TIMEOUT = 8] = "PLAYBACK_STOPPED_DUE_TO_SESSION_TIMEOUT",
st[st.TRACK_BANNED = 9] = "TRACK_BANNED",
st[st.FAILED_TO_LOAD = 10] = "FAILED_TO_LOAD",
st[st.PAUSED_ON_TIMEOUT = 11] = "PAUSED_ON_TIMEOUT",
st[st.SCRUB_BEGIN = 12] = "SCRUB_BEGIN",
st[st.SCRUB_END = 13] = "SCRUB_END",
st[st.TRACK_SKIPPED_BACKWARDS = 14] = "TRACK_SKIPPED_BACKWARDS",
st[st.NOT_SUPPORTED_BY_CLIENT = 15] = "NOT_SUPPORTED_BY_CLIENT",
st[st.QUICK_PLAY = 16] = "QUICK_PLAY",
st[st.EXITED_APPLICATION = 17] = "EXITED_APPLICATION",
function(e) {
e[e.Manual = 0] = "Manual",
e[e.Interval = 1] = "Interval",
e[e.SkipIntro = 2] = "SkipIntro"
}(rt || (rt = {})),
function(e) {
e[e.UNKNOWN = 0] = "UNKNOWN",
e[e.NO_RIGHTS = 1] = "NO_RIGHTS",
e[e.PURCHASED = 2] = "PURCHASED",
e[e.UPLOADED = 3] = "UPLOADED",
e[e.MATCHED = 4] = "MATCHED",
e[e.ADDED = 5] = "ADDED",
e[e.SUBSCRIBED = 6] = "SUBSCRIBED",
e[e.NOT_SUPPORTED = 7] = "NOT_SUPPORTED"
}(nt || (nt = {})),
function(e) {
e[e.NO_SELECTION_PLAY = 0] = "NO_SELECTION_PLAY",
e[e.RESUME_LAST_PLAYED_SONG = 1] = "RESUME_LAST_PLAYED_SONG",
e[e.RESUME_CURRENT_DEVICE_POSITION = 2] = "RESUME_CURRENT_DEVICE_POSITION"
}(at || (at = {})),
function(e) {
e[e.NOT_APPLICABLE = 0] = "NOT_APPLICABLE",
e[e.SIMILARITIES = 1] = "SIMILARITIES",
e[e.ESSENTIALS = 2] = "ESSENTIALS",
e[e.USER_LIBRARY = 3] = "USER_LIBRARY",
e[e.ALGO_HEATSEEKER = 4] = "ALGO_HEATSEEKER",
e[e.SEED_TRACK = 5] = "SEED_TRACK",
e[e.GN_1M_TEMPORARY = 6] = "GN_1M_TEMPORARY",
e[e.VECTOR = 8] = "VECTOR",
e[e.ARTIST_SIMILARITIES = 9] = "ARTIST_SIMILARITIES",
e[e.STORY_ALBUM_LISTENERS_ALSO_BOUGHT = 10] = "STORY_ALBUM_LISTENERS_ALSO_BOUGHT",
e[e.STORY_ALBUM_SALES_LEADER = 11] = "STORY_ALBUM_SALES_LEADER",
e[e.STORY_BILLBOARD = 12] = "STORY_BILLBOARD",
e[e.STORY_COMPLETE_MY_ALBUM = 13] = "STORY_COMPLETE_MY_ALBUM",
e[e.STORY_CRITICAL_PICK = 14] = "STORY_CRITICAL_PICK",
e[e.STORY_ITUNES_ESSENTIAL = 15] = "STORY_ITUNES_ESSENTIAL",
e[e.STORY_HEATSEEKER = 16] = "STORY_HEATSEEKER",
e[e.STORY_IDENTITY = 17] = "STORY_IDENTITY",
e[e.STORY_POWER_SONG = 18] = "STORY_POWER_SONG",
e[e.STORY_SONG_SALES_LEADER = 20] = "STORY_SONG_SALES_LEADER",
e[e.GENRE_SIMILARITIES = 21] = "GENRE_SIMILARITIES",
e[e.STORY_IMIX = 22] = "STORY_IMIX",
e[e.STORY_OTHER_MIX = 23] = "STORY_OTHER_MIX",
e[e.EDITORIAL = 24] = "EDITORIAL",
e[e.TOP_SONGS = 25] = "TOP_SONGS",
e[e.SUBFORMAT_SONGS = 26] = "SUBFORMAT_SONGS",
e[e.CRITICAL_PICKS = 27] = "CRITICAL_PICKS",
e[e.US_ARTIST_SIMS = 28] = "US_ARTIST_SIMS",
e[e.HEAVY_ROTATION = 29] = "HEAVY_ROTATION",
e[e.STORY_FORMAT_STATION_HEAVY_ROTATION = 30] = "STORY_FORMAT_STATION_HEAVY_ROTATION",
e[e.ARTIST_BASED_CORE_SIMILAR_ARTISTS = 31] = "ARTIST_BASED_CORE_SIMILAR_ARTISTS",
e[e.ARTIST_BASED_FAMILIAR_SIMILAR_ARTISTS = 32] = "ARTIST_BASED_FAMILIAR_SIMILAR_ARTISTS",
e[e.ARTIST_BASED_DISCOVERIES = 33] = "ARTIST_BASED_DISCOVERIES",
e[e.ARTIST_BASED_HOT_SONGS = 34] = "ARTIST_BASED_HOT_SONGS",
e[e.ARTIST_BASED_SEED_ARTIST = 35] = "ARTIST_BASED_SEED_ARTIST",
e[e.ARTIST_BASED_COMPOSER = 36] = "ARTIST_BASED_COMPOSER",
e[e.EDITORIAL_STATION_INTRO = 37] = "EDITORIAL_STATION_INTRO",
e[e.EDITORIAL_RELATIVE_REPEAT = 38] = "EDITORIAL_RELATIVE_REPEAT",
e[e.EDITORIAL_ABSOLUTE_REPEAT = 39] = "EDITORIAL_ABSOLUTE_REPEAT",
e[e.EDITORIAL_SCHEDULED = 40] = "EDITORIAL_SCHEDULED",
e[e.EDITORIAL_SUGGESTED_ARTIST = 41] = "EDITORIAL_SUGGESTED_ARTIST",
e[e.FOR_YOU_FAMILIAR = 42] = "FOR_YOU_FAMILIAR",
e[e.FOR_YOU_RECOMMENDED = 43] = "FOR_YOU_RECOMMENDED",
e[e.FOR_YOU_FAVORITE_ARTIST = 44] = "FOR_YOU_FAVORITE_ARTIST",
e[e.FOR_YOU_RECOMMENDED_ARTIST = 45] = "FOR_YOU_RECOMMENDED_ARTIST",
e[e.EDITORIAL_POSITIONAL = 46] = "EDITORIAL_POSITIONAL",
e[e.SIMILAR_SONGS = 47] = "SIMILAR_SONGS",
e[e.SONG_ATTRIBUTE_FAVORITE_ARTIST = 48] = "SONG_ATTRIBUTE_FAVORITE_ARTIST",
e[e.SONG_ATTRIBUTE_FAVORITE_ARTIST_DERIVED = 49] = "SONG_ATTRIBUTE_FAVORITE_ARTIST_DERIVED",
e[e.SONG_ATTRIBUTE_FAVORITE_ARTIST_EDITORIAL = 50] = "SONG_ATTRIBUTE_FAVORITE_ARTIST_EDITORIAL",
e[e.SONG_ATTRIBUTE_RECOMMENDED = 51] = "SONG_ATTRIBUTE_RECOMMENDED",
e[e.SONG_ATTRIBUTE_RECOMMENDED_DERIVED = 52] = "SONG_ATTRIBUTE_RECOMMENDED_DERIVED",
e[e.SONG_ATTRIBUTE_RECOMMENDED_EDITORIAL = 53] = "SONG_ATTRIBUTE_RECOMMENDED_EDITORIAL",
e[e.SONG_ATTRIBUTE_NON_PERSONALIZED = 54] = "SONG_ATTRIBUTE_NON_PERSONALIZED",
e[e.SONG_ATTRIBUTE_NON_PERSONALIZED_DERIVED = 55] = "SONG_ATTRIBUTE_NON_PERSONALIZED_DERIVED",
e[e.SONG_ATTRIBUTE_NON_PERSONALIZED_EDITORIAL = 56] = "SONG_ATTRIBUTE_NON_PERSONALIZED_EDITORIAL",
e[e.PERSONAL_STATION = 57] = "PERSONAL_STATION",
e[e.PERSONAL_STATION_FAVORITE_ARTIST = 58] = "PERSONAL_STATION_FAVORITE_ARTIST",
e[e.PERSONAL_STATION_RECOMMENDED = 59] = "PERSONAL_STATION_RECOMMENDED",
e[e.NEW_MUSIC_STATION = 60] = "NEW_MUSIC_STATION",
e[e.NEW_MUSIC_STATION_FAVORITE_ARTIST = 61] = "NEW_MUSIC_STATION_FAVORITE_ARTIST",
e[e.NEW_MUSIC_STATION_RECOMMENDED = 62] = "NEW_MUSIC_STATION_RECOMMENDED"
}(ot || (ot = {}));
var dt, lt, ct, ut, ht, pt, yt, mt, gt, ft, vt, _t;
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __rest$1(e, s) {
var n = {};
for (var d in e)
Object.prototype.hasOwnProperty.call(e, d) && s.indexOf(d) < 0 && (n[d] = e[d]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var h = 0;
for (d = Object.getOwnPropertySymbols(e); h < d.length; h++)
s.indexOf(d[h]) < 0 && Object.prototype.propertyIsEnumerable.call(e, d[h]) && (n[d[h]] = e[d[h]])
}
return n
}
function __metadata$1(e, s) {
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata)
return Reflect.metadata(e, s)
}
function __awaiter$1(e, s, n, d) {
return new (n || (n = Promise))((function(h, p) {
function fulfilled(e) {
try {
step(d.next(e))
} catch (bt) {
p(bt)
}
}
function rejected(e) {
try {
step(d.throw(e))
} catch (bt) {
p(bt)
}
}
function step(e) {
var s;
e.done ? h(e.value) : (s = e.value,
s instanceof n ? s : new n((function(e) {
e(s)
}
))).then(fulfilled, rejected)
}
step((d = d.apply(e, s || [])).next())
}
))
}
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function t(e, s) {
var n = "function" == typeof Symbol && e[Symbol.iterator];
if (!n)
return e;
var d, h, p = n.call(e), y = [];
try {
for (; (void 0 === s || s-- > 0) && !(d = p.next()).done; )
y.push(d.value)
} catch (e) {
h = {
error: e
}
} finally {
try {
d && !d.done && (n = p.return) && n.call(p)
} finally {
if (h)
throw h.error
}
}
return y
}
!function(e) {
e[e.UNSPECIFIED = 0] = "UNSPECIFIED",
e[e.STATIC = 1] = "STATIC",
e[e.TIME_SYNCED = 2] = "TIME_SYNCED"
}(dt || (dt = {})),
function(e) {
e[e.REPEAT_UNKNOWN = 0] = "REPEAT_UNKNOWN",
e[e.REPEAT_OFF = 1] = "REPEAT_OFF",
e[e.REPEAT_ONE = 2] = "REPEAT_ONE",
e[e.REPEAT_ALL = 3] = "REPEAT_ALL"
}(lt || (lt = {})),
function(e) {
e[e.SHUFFLE_UNKNOWN = 0] = "SHUFFLE_UNKNOWN",
e[e.SHUFFLE_OFF = 1] = "SHUFFLE_OFF",
e[e.SHUFFLE_ON = 2] = "SHUFFLE_ON"
}(ct || (ct = {})),
function(e) {
e[e.AUTO_UNKNOWN = 0] = "AUTO_UNKNOWN",
e[e.AUTO_OFF = 1] = "AUTO_OFF",
e[e.AUTO_ON = 2] = "AUTO_ON",
e[e.AUTO_ON_CONTENT_UNSUPPORTED = 3] = "AUTO_ON_CONTENT_UNSUPPORTED"
}(ut || (ut = {})),
function(e) {
e[e.NOT_SPECIFIED = 0] = "NOT_SPECIFIED",
e[e.CONTAINER_CHANGED = 1] = "CONTAINER_CHANGED"
}(ht || (ht = {})),
function(e) {
e[e.PLAY_END = 0] = "PLAY_END",
e[e.PLAY_START = 1] = "PLAY_START",
e[e.LYRIC_DISPLAY = 2] = "LYRIC_DISPLAY"
}(pt || (pt = {})),
function(e) {
e[e.INVALID = 0] = "INVALID",
e[e.ITUNES_STORE_CONTENT = 1] = "ITUNES_STORE_CONTENT",
e[e.NON_SONG_CLIP = 2] = "NON_SONG_CLIP",
e[e.AD = 3] = "AD",
e[e.STREAM = 4] = "STREAM",
e[e.AUDIO_AD = 5] = "AUDIO_AD",
e[e.VIDEO_AD = 6] = "VIDEO_AD",
e[e.TIMED_METADATA_PING = 7] = "TIMED_METADATA_PING",
e[e.ARTIST_UPLOADED_CONTENT = 8] = "ARTIST_UPLOADED_CONTENT",
e[e.AGGREGATE_NON_CATALOG_PLAY_TIME = 9] = "AGGREGATE_NON_CATALOG_PLAY_TIME",
e[e.ORIGINAL_CONTENT_MOVIES = 10] = "ORIGINAL_CONTENT_MOVIES",
e[e.ORIGINAL_CONTENT_SHOWS = 11] = "ORIGINAL_CONTENT_SHOWS"
}(yt || (yt = {})),
function(e) {
e[e.AUDIO = 0] = "AUDIO",
e[e.VIDEO = 1] = "VIDEO"
}(mt || (mt = {})),
function(e) {
e[e.AUTO = 0] = "AUTO",
e[e.MANUAL = 1] = "MANUAL"
}(gt || (gt = {})),
function(e) {
e[e.ORIGINATING_DEVICE = 0] = "ORIGINATING_DEVICE",
e[e.PAIRED_WATCH = 1] = "PAIRED_WATCH",
e[e.SONOS = 2] = "SONOS",
e[e.CAR_PLAY = 3] = "CAR_PLAY",
e[e.WEB_AUC = 4] = "WEB_AUC",
e[e.TWITTER_AUC = 5] = "TWITTER_AUC",
e[e.MUSIC_SDK = 6] = "MUSIC_SDK",
e[e.ATV_REMOTE = 7] = "ATV_REMOTE",
e[e.WEBPLAYER = 8] = "WEBPLAYER",
e[e.WHOLE_HOUSE_AUDIO = 9] = "WHOLE_HOUSE_AUDIO",
e[e.MUSICKIT = 10] = "MUSICKIT",
e[e.VW = 11] = "VW",
e[e.UNKNOWN_SOURCE_TYPE = 12] = "UNKNOWN_SOURCE_TYPE",
e[e.AMAZON = 13] = "AMAZON",
e[e.PORSCHE = 14] = "PORSCHE",
e[e.CHROMECAST = 15] = "CHROMECAST",
e[e.WEB_APP = 16] = "WEB_APP",
e[e.MERCEDES_BENZ = 17] = "MERCEDES_BENZ",
e[e.THIRD_PARTY_TV = 18] = "THIRD_PARTY_TV",
e[e.SEAT = 19] = "SEAT",
e[e.CUPRA = 20] = "CUPRA"
}(ft || (ft = {})),
function(e) {
e[e.EPISODE = 1] = "EPISODE",
e[e.SHOUTCAST = 2] = "SHOUTCAST"
}(vt || (vt = {})),
function(e) {
e[e.NotStarted = 0] = "NotStarted",
e[e.Running = 1] = "Running",
e[e.Stopped = 2] = "Stopped"
}(_t || (_t = {}));
var bt = {
type: "xstate.init"
};
function r(e) {
return void 0 === e ? [] : [].concat(e)
}
function o(e) {
return {
type: "xstate.assign",
assignment: e
}
}
function i(e, s) {
return "string" == typeof (e = "string" == typeof e && s && s[e] ? s[e] : e) ? {
type: e
} : "function" == typeof e ? {
type: e.name,
exec: e
} : e
}
function a(e) {
return function(s) {
return e === s
}
}
function u(e) {
return "string" == typeof e ? {
type: e
} : e
}
function c(e, s) {
return {
value: e,
context: s,
actions: [],
changed: !1,
matches: a(e)
}
}
function f(e, s, n) {
var d = s
, h = !1;
return [e.filter((function(e) {
if ("xstate.assign" === e.type) {
h = !0;
var s = Object.assign({}, d);
return "function" == typeof e.assignment ? s = e.assignment(d, n) : Object.keys(e.assignment).forEach((function(h) {
s[h] = "function" == typeof e.assignment[h] ? e.assignment[h](d, n) : e.assignment[h]
}
)),
d = s,
!1
}
return !0
}
)), d, h]
}
var l = function(e, s) {
return e.actions.forEach((function(n) {
var d = n.exec;
return d && d(e.context, s)
}
))
};
function invoke(e) {
return void 0 === e || (e=>"function" != typeof e)(e) ? e : e()
}
const Tt = /(?:st|ra)\.([0-9]+)/
, Et = /st\.([0-9]+)/
, toTimeMeasuredData = e=>{
var {timestamp: s} = e
, n = __rest$1(e, ["timestamp"]);
return Object.assign(Object.assign({}, n), {
"milliseconds-since-play": Date.now() - s
})
}
;
class PlayActivitySender {
constructor(e) {
var s, n, d, h;
this.mode = gt.AUTO,
this._isQA = !1,
this._logInfo = !1,
this._preferDSID = !1,
this._accessToken = e.accessToken,
this._clientId = e.clientId,
this._eventType = e.eventType,
this._fetch = null !== (s = e.fetch) && void 0 !== s ? s : fetch,
this._fetchOptions = null !== (n = e.fetchOptions) && void 0 !== n ? n : {},
this._headersClass = null !== (d = e.headersClass) && void 0 !== d ? d : Headers,
this._isQA = null !== (h = e.isQA) && void 0 !== h && h,
this._logInfo = e.logInfo || this._isQA,
this._musicUserToken = e.musicUserToken,
this._preferDSID = e.preferDSID,
this._sourceType = e.sourceType,
this._traceTag = e.traceTag
}
get accessToken() {
return invoke(this._accessToken)
}
get musicUserToken() {
return invoke(this._musicUserToken)
}
get url() {
return this._isQA ? "https://universal-activity-service.itunes.apple.com/qa/play" : "https://universal-activity-service.itunes.apple.com/play"
}
send(e) {
return __awaiter$1(this, void 0, void 0, (function*() {
const s = {
client_id: this._clientId,
event_type: this._eventType,
data: ensureArray(e).map(toTimeMeasuredData)
};
if (0 === s.data.length)
throw new Error("send() called without any data");
const n = this._generateFetchOptions({
method: "POST",
body: JSON.stringify(s),
headers: this.headers()
})
, d = yield this._fetch(this.url, n);
return yield d.text(),
this._logInfo && console.info("play activity:", this._sourceType === ft.AMAZON ? JSON.stringify(s) : s),
s
}
))
}
baseHeaders() {
var e, s;
const n = null !== (s = null === (e = this._fetchOptions) || void 0 === e ? void 0 : e.headers) && void 0 !== s ? s : {};
return n instanceof this._headersClass ? new this._headersClass(Array.from(n.entries())) : new this._headersClass(n)
}
headers() {
const e = this._preferDSID ? "X-Dsid" : "media-user-token"
, s = this.baseHeaders();
return s.set("Authorization", "Bearer " + this.accessToken),
s.set("Content-Type", "application/json"),
s.set(e, "" + this.musicUserToken),
this._isQA && void 0 !== this._traceTag && s.set("Data-Trace-Tag", this._traceTag),
s
}
_generateFetchOptions(e) {
return Object.assign(Object.assign({}, this._fetchOptions), e)
}
}
const fullAppId = (e,s)=>{
if (void 0 === (null == s ? void 0 : s.name))
return "MusicKitApp/1.0";
if (void 0 !== e)
return e;
return `${function(e) {
return e.toLowerCase().replace(/[-_]+/g, " ").replace(/[^\w\s]/g, "").replace(/\b./g, e=>e.toUpperCase()).replace(/\s/g, "")
}(s.name)}/${(null == s ? void 0 : s.version) || "1.0"}`
}
, os = e=>{
var s, n, d;
const h = e.toLowerCase();
let p, y = "Unidentified OS";
const m = /mobile/.test(h);
m && /android|adr/.test(h) ? (y = "Android",
p = h.match(/(?:android|adr)\ ((\d+[._])+\d+)/)) : m && /iphone|ipad|ipod/.test(h) ? (y = "iOS",
p = h.match(/os\ ((\d+[._])+\d+)\ like\ mac\ os\ x/)) : /tizen/.test(h) ? (y = "Tizen",
p = h.match(/tizen (.*)/)) : /web0s|webos/.test(h) ? (y = "WebOS",
p = h.match(/[web0s|webos] (.*)/)) : !m && /cros/.test(h) ? y = "ChromeOS" : !m && /macintosh/.test(h) ? (y = "macOS",
p = h.match(/os\ x\ ((\d+[._])+\d+)\b/)) : !m && /linux/.test(h) ? y = "Linux" : !m && /windows/.test(h) && (y = "Windows",
p = h.match(/windows ([^\)]*)/));
return `${y}/${null !== (d = null === (n = null === (s = null == p ? void 0 : p[1]) || void 0 === s ? void 0 : s.replace) || void 0 === n ? void 0 : n.call(s, /_/g, ".")) && void 0 !== d ? d : "0.0"}`
}
, model = e=>"model/" + ((null == e ? void 0 : e.platform) || "Unavailable")
, build = e=>{
const s = null == e ? void 0 : e.build;
return void 0 === s || "" === s ? "build/0.0.0" : "build/" + s
}
, kt = {
platform: "",
userAgent: ""
};
class DeveloperToken {
constructor(e) {
if (this.token = e,
!e || !/^[a-z0-9\-\_]{16,}\.[a-z0-9\-\_]{16,}\.[a-z0-9\-\_]{16,}/i.test(e))
throw new Error("Invalid token.");
const [s,n] = e.split(".")
, {exp: d, iss: h} = this._decode(n);
if (this.expiration = 1e3 * d,
this.isExpired)
throw new Error("Initialized with an expired token.");
this.teamId = h;
const {kid: p} = this._decode(s);
this.keyId = p
}
get isExpired() {
return this.expiration < Date.now()
}
_decode(e) {
return JSON.parse(b(e))
}
}
class GenericStorage {
constructor(e={}) {
this.data = e
}
get data() {
return this._data
}
set data(e) {
this._data = e
}
get length() {
return this.keys.length
}
get keys() {
return Object.keys(this.data)
}
getItem(e) {
return this.data[e] || null
}
setItem(e, s) {
this.data[e] = s
}
removeItem(e) {
delete this.data[e]
}
clear() {
this.keys.forEach(e=>this.removeItem(e))
}
key(e) {
return this.keys[e] || null
}
}
function getCookie(e="", s=document.cookie) {
const n = s.match(new RegExp(`(?:^|;\\s*)${e}=([^;]*)`));
if (n)
return n[1]
}
function setCookie(e, s, n="", d=14, h, p) {
const y = new Date;
h = null != h ? h : window;
const m = (p = null != p ? p : /\./.test(h.location.hostname) ? h.location.hostname : "").length > 0 ? `domain=${p}; ` : "";
y.setTime(y.getTime() + 24 * d * 60 * 60 * 1e3);
let g = "";
"https:" === h.location.protocol && (g = "; secure"),
h.document.cookie = `${e}=${s}; expires=${y.toUTCString()}; ${m}path=${n}${g}`
}
function removeCookie(e, s, n) {
setCookie(e, "", "/", 0, s, n)
}
const DEFAULT_CACHE_KEY_FUNCTION = (e,s)=>`${s}${e}`;
class NetworkCache {
constructor(e={}) {
this.storage = e.storage || new GenericStorage,
this.prefix = e.prefix || "",
this.ttl = e.ttl || 3e5,
this.cacheKeyFunction = e.cacheKeyFunction || DEFAULT_CACHE_KEY_FUNCTION
}
getItem(e) {
const s = this.cacheKeyForPath(e)
, n = this.storage.getItem(s);
if (null !== n) {
const {x: e, d: d} = JSON.parse(n);
if (e > Date.now())
return d;
this.storage.removeItem(s)
}
}
setItem(e, s, n=this.ttl) {
const d = this.cacheKeyForPath(e);
this.storage.setItem(d, JSON.stringify({
x: Date.now() + n,
d: s
}))
}
removeItem(e) {
const s = this.cacheKeyForPath(e);
this.storage.removeItem(s)
}
removeItemsMatching(e, s=!0) {
const n = this.cacheKeyForPath(e);
this.removeItemsMatchingCacheKey(n, s)
}
clear() {
this.removeItemsMatchingCacheKey(this.prefix, !1)
}
removeItemsMatchingCacheKey(e, s) {
const n = new RegExp(`^${e}${s ? "$" : ""}`);
(this.storage instanceof GenericStorage ? this.storage.keys : Object.keys(this.storage)).forEach(e=>{
e && n.test(e) && this.storage.removeItem(e)
}
)
}
cacheKeyForPath(e) {
return this.cacheKeyFunction(e, this.prefix)
}
}
var St;
!function(e) {
e.JSON = "application/json",
e.FORM = "application/x-www-form-urlencoded"
}(St || (St = {}));
class TokenSession extends class {
constructor(e, s) {
var n;
if (this.prefix = "",
this.method = "GET",
this.url = e,
(s = s || {}).storage && s.underlyingStorage)
throw new Error("only pass storage OR underlyingStorage in sessionOptions to URLSession");
const d = s.underlyingStorage || {};
if (this.storage = s.storage || new GenericStorage(d),
this.networkCache = new NetworkCache({
storage: this.storage,
prefix: this.prefix,
cacheKeyFunction: this._key.bind(this)
}),
this.ttl = s.ttl || 3e5,
this._fetchOptions = Object.assign({}, s.fetchOptions),
"function" != typeof s.fetch && "function" != typeof fetch)
throw new Error("window.fetch is not defined");
this._fetchFunction = null !== (n = s.fetch) && void 0 !== n ? n : fetch.bind(window),
this.headers = this._fetchOptions.headers || new Headers,
delete this._fetchOptions.headers
}
clearCacheForRequest(e, s) {
"object" == typeof e && (s = e,
e = void 0);
const n = this.constructURL(e, s);
this.networkCache.removeItemsMatching(n)
}
request(e, s, n) {
var d;
return __awaiter$2(this, void 0, void 0, (function*() {
n || "object" != typeof e || (n = s || {},
s = e,
e = void 0);
let h = {};
"object" == typeof (n = Object.assign(Object.assign({
method: this.method,
headers: this.headers,
reload: !1
}, this._fetchOptions), n)).queryParameters ? (h = n.queryParameters,
delete n.queryParameters) : "GET" !== n.method && "DELETE" !== n.method || (h = s);
const p = this.constructURL(e, h)
, {method: y, reload: m=!1, useRawResponse: g} = n;
if (n.headers = this.buildHeaders(n),
delete n.reload,
delete n.useRawResponse,
"GET" === y && !m) {
const e = this.getCacheItem(p);
if (e)
return Promise.resolve(e)
}
s && Object.keys(s).length && ("POST" === y || "PUT" === y) && (n.body = n.body || s,
n.contentType === St.FORM ? (n.body = urlEncodeParameters(n.body),
n.headers.set("Content-Type", St.FORM)) : (n.body = JSON.stringify(n.body),
n.headers.set("Content-Type", St.JSON)));
const v = yield this._fetchFunction(p, n);
if (!v.ok)
return Promise.reject(v);
let _;
try {
_ = yield v.json()
} catch (T) {
_ = {}
}
if (_.errors)
return Promise.reject(_.errors);
const b = g ? _ : _.results || _.data || _;
if ("GET" === y) {
const e = null !== (d = getMaxAgeFromHeaders(v.headers)) && void 0 !== d ? d : this.ttl;
this.setCacheItem(p, b, e)
}
return b
}
))
}
buildHeaders({headers: e, reload: s=!1}={}) {
void 0 === e && (e = this.headers);
const n = (e=>new e.constructor(e))(e);
return s && n.set("Cache-Control", "no-cache"),
n
}
constructURL(e, s) {
return ((e,s,n)=>addQueryParamsToURL(addPathToURL(e, s), n))(this.url, e, s)
}
getCacheItem(e) {
const s = this.networkCache.storage
, n = `${this.prefix}${this.prefix}cache-mut`
, d = s.getItem(n) || null
, h = this.headers.get("Music-User-Token") || this.headers.get("Media-User-Token") || null;
return h !== d && (this.networkCache.clear(),
null === h ? s.removeItem(n) : s.setItem(n, h)),
this.networkCache.getItem(e)
}
setCacheItem(e, s, n=this.ttl) {
this.networkCache.setItem(e, s, n)
}
clearNetworkCache() {
this.networkCache.clear()
}
_key(e, s) {
const n = function(e) {
try {
const [s,n] = e.split("?", 2);
if (void 0 === n)
return s;
const d = n.split("&").map(e=>e.split("=", 2))
, h = [...Array(d.length).keys()];
h.sort((e,s)=>{
const n = d[e]
, h = d[s];
return n < h ? -1 : n > h ? 1 : e - s
}
);
const p = h.map(e=>d[e]);
return `${s}?${p.map(([e,s])=>void 0 !== s ? `${e}=${s}` : e).join("&")}`
} catch (s) {
return e
}
}(e).toLowerCase().replace(this.url, "");
return `${this.prefix}${n.replace(/[^-_0-9a-z]{1,}/g, ".")}`
}
}
{
constructor(e, s, n) {
super(e, n),
this._developerToken = new DeveloperToken(s),
this.headers.set("Authorization", "Bearer " + this.developerToken),
n = n || {},
this.userToken = n.userToken,
this.userToken && this.headers.set("Media-User-Token", this.userToken)
}
get developerToken() {
return this._developerToken.token
}
}
Date.now();
isNodeEnvironment$1();
const formatByte = e=>("0" + (255 & e).toString(16)).slice(-2)
, createHelper = (e,s)=>(n,d,h)=>{
const {helpers: p} = h.cache;
return e in p || (p[e] = s(n, d, h)),
p[e]
}
;
const returnAsField = (e,s)=>(...n)=>function(e, s) {
if (void 0 !== s)
return {
[e]: s
}
}(e, s(...n))
, createFieldFn = (e,s)=>(n,d,h)=>{
const {fields: p} = h.cache;
var y;
return e in p || (h.cache.fields = Object.assign(Object.assign({}, p), {
[e]: (y = s(n, d, h),
null == y ? void 0 : {
[e]: y
})
})),
h.cache.fields[e]
}
, createClientFieldFn = (e,s)=>createFieldFn(e, (e,n,{client: d})=>d[s])
, Pt = createClientFieldFn("build-version", "buildVersion")
, It = ["play", "playbackstarted"]
, At = createFieldFn("event-type", (e,s,n)=>{
const d = e.eventType;
if (void 0 === d)
return pt.PLAY_START;
if (e.itemType === yt.TIMED_METADATA_PING && void 0 !== e.timedMetadata)
return pt.PLAY_END;
if ("string" != typeof d)
return null != d ? d : pt.PLAY_START;
const h = d.toLowerCase();
return It.includes(h) ? pt.PLAY_START : pt.PLAY_END
}
)
, wt = ["uploadedVideo", "uploadedAudio", "uploaded-videos", "uploaded-audios"]
, Rt = createHelper("is-auc", ({kind: e})=>void 0 !== e && wt.includes(e))
, Ot = createHelper("should-send-timed-metadata", ({endReasonType: s, eventType: n, itemType: d, timedMetadata: h})=>void 0 !== h && (d === yt.TIMED_METADATA_PING || n === pt.PLAY_START || s === e.PlayActivityEndReasonType.PLAYBACK_MANUALLY_PAUSED))
, Ct = createFieldFn("type", (e,s,n)=>{
var d;
const {id: h, reporting: p} = e;
if ("-1" === h || !p)
switch (null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) {
case pt.PLAY_END:
return yt.AGGREGATE_NON_CATALOG_PLAY_TIME;
case pt.PLAY_START:
if ("-1" === h)
return yt.INVALID
}
const {format: y, itemType: m} = e;
return Ot(e, s, n) ? m === yt.TIMED_METADATA_PING ? m : yt.STREAM : "stream" === y ? yt.STREAM : Rt(e, s, n) ? yt.ARTIST_UPLOADED_CONTENT : null != m ? m : yt.ITUNES_STORE_CONTENT
}
)
, Mt = createFieldFn("container-type", (e,s,n)=>{
var d, h;
if ((null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return;
const {container: p} = e;
if (void 0 === p)
return it.UNKNOWN;
const y = null !== (h = p.type) && void 0 !== h ? h : p.kind;
if ("number" == typeof y)
return y;
switch (y) {
case "album":
case "albums":
case "library-albums":
return it.ALBUM;
case "artist":
case "artists":
case "library-artists":
return it.ARTIST;
case "playlist":
case "playlists":
case "library-playlists":
return it.PLAYLIST;
case "radio":
case "radioStation":
case "station":
case "stations":
return it.RADIO;
default:
return it.UNKNOWN
}
}
)
, Dt = [returnAsField("album-adam-id", (e,s,n)=>{
var d;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.ALBUM)
return;
const {container: h} = e
, p = null == h ? void 0 : h.id;
return void 0 === p || v(p) ? void 0 : p
}
), returnAsField("cloud-album-id", (e,s,n)=>{
var d;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.ALBUM)
return;
const {container: h} = e
, p = null == h ? void 0 : h.id;
return void 0 !== p && v(p) ? p : void 0
}
), returnAsField("global-playlist-id", (e,s,n)=>{
var d, h;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.PLAYLIST)
return;
const {container: p} = e
, y = null !== (h = null == p ? void 0 : p.catalogId) && void 0 !== h ? h : null == p ? void 0 : p.globalId;
return (null == p ? void 0 : p.isLibrary) && y ? y : v(null == p ? void 0 : p.id) || null == p ? void 0 : p.id
}
), returnAsField("playlist-version-hash", (e,s,n)=>{
var d;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.PLAYLIST)
return;
const {container: h} = e
, p = null == h ? void 0 : h.versionHash;
return void 0 !== p && "" !== p ? p : void 0
}
), returnAsField("station-hash", (e,s,n)=>{
var d, h;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.RADIO)
return;
const p = null === (h = e.container) || void 0 === h ? void 0 : h.stationHash;
return void 0 !== p && "" !== p ? p : void 0
}
), returnAsField("station-id", (e,s,n)=>{
var d, h;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) === it.RADIO)
return null === (h = e.container) || void 0 === h ? void 0 : h.id
}
), returnAsField("station-personalized-id", (e,s,n)=>{
var d, h;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.RADIO)
return;
const p = null === (h = e.container) || void 0 === h ? void 0 : h.id;
return void 0 !== p && Et.test(p) ? parseInt(p.replace(Et, "$1"), 10) : void 0
}
), returnAsField("universal-library-id", (e,s,n)=>{
var d, h;
if ((null === (d = Mt(e, s, n)) || void 0 === d ? void 0 : d["container-type"]) !== it.PLAYLIST)
return;
const {container: p} = e
, y = null !== (h = null == p ? void 0 : p.catalogId) && void 0 !== h ? h : null == p ? void 0 : p.globalId
, m = null == p ? void 0 : p.id;
if (void 0 !== m)
if ((null == p ? void 0 : p.isLibrary) && y) {
if ("" !== m)
return m
} else if (v(m))
return m
}
)]
, Nt = createFieldFn("container-ids", (e,s,n)=>{
var d;
if ((null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return;
const h = Dt.reduce((d,h)=>Object.assign(Object.assign({}, d), h(e, s, n)), Object.create(null));
return isEmpty(h) ? void 0 : h
}
)
, Lt = createClientFieldFn("developer-token", "accessToken")
, xt = createClientFieldFn("device-name", "deviceName")
, Ut = createHelper("initial-start-position-in-milliseconds", ({position: e=0, startPositionInMilliseconds: s})=>s || Math.round(1e3 * e))
, $t = createFieldFn("end-position-in-milliseconds", (e,s,n)=>{
var d;
switch (null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) {
case pt.LYRIC_DISPLAY:
return e.duration;
case pt.PLAY_START:
return;
default:
if (s && void 0 === s.position)
return;
return e.endPositionInMilliseconds || Ut(e, s, n)
}
}
)
, jt = createHelper("is-private", ({id: e, reporting: s})=>"-1" === e || !s)
, Bt = e.PlayActivityEndReasonType
, Kt = {
exit: Bt.EXITED_APPLICATION,
next: Bt.TRACK_SKIPPED_FORWARDS,
pause: Bt.PLAYBACK_MANUALLY_PAUSED,
playbackfinished: Bt.NATURAL_END_OF_TRACK,
playbackstopped: Bt.PLAYBACK_MANUALLY_PAUSED,
previous: Bt.TRACK_SKIPPED_BACKWARDS,
scrub_begin: Bt.SCRUB_BEGIN,
scrub_end: Bt.SCRUB_END,
stop: Bt.NATURAL_END_OF_TRACK
}
, Ft = createFieldFn("end-reason-type", (s,n,d)=>{
var h;
const {eventType: p, endReasonType: y, timedMetadata: m} = s;
if (n && void 0 === n.position)
return;
if ((null === (h = Ct(s, n, d)) || void 0 === h ? void 0 : h.type) === yt.TIMED_METADATA_PING && void 0 !== m)
return e.PlayActivityEndReasonType.NOT_APPLICABLE;
if (jt(s, n, d) && p === pt.PLAY_END)
return e.PlayActivityEndReasonType.NOT_APPLICABLE;
if (void 0 !== y || "string" != typeof p)
return y;
const g = p.toLowerCase();
return Kt[g]
}
)
, {CONTAINER_CHANGED: Vt, NOT_SPECIFIED: Ht} = ht
, zt = createFieldFn("event-reason-hint-type", (e,s,n)=>{
var d, h;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) !== pt.PLAY_START)
return;
const p = e.container;
return void 0 === p ? Ht : !1 === s ? n.isAlexa ? Ht : Vt : (null === (h = null == s ? void 0 : s.container) || void 0 === h ? void 0 : h.id) !== p.id ? Vt : Ht
}
)
, qt = createFieldFn("feature-name", (e,s,n)=>{
var d, h, p, y;
if ((null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return;
if ((null === (h = At(e, s, n)) || void 0 === h ? void 0 : h["event-type"]) === pt.LYRIC_DISPLAY)
return "now_playing";
const m = null !== (y = null === (p = e.container) || void 0 === p ? void 0 : p.name) && void 0 !== y ? y : tt.MUSICKIT;
return "string" == typeof m ? m : "" + m
}
)
, Wt = createClientFieldFn("guid", "guid")
, Yt = createHelper("should-have-auc-adam-id", Rt)
, Gt = createHelper("should-have-radio-adam-id", ({id: e, container: s})=>Tt.test(e) || "radioStation" === (null == s ? void 0 : s.kind))
, Qt = createHelper("is-library-item-or-library-type", ({id: e, isLibrary: s},n,d)=>s || v(e))
, Jt = createHelper("catalog-id", ({catalogId: e, container: s})=>null != e ? e : null == s ? void 0 : s.catalogId)
, Xt = createHelper("is-library-item-with-catalog-id", (e,s,n)=>e.isLibrary && !!Jt(e, s, n))
, Zt = [returnAsField("auc-adam-id", (e,s,n)=>{
var d;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) !== pt.LYRIC_DISPLAY && !jt(e, s, n) && !Gt(e, s, n))
return Yt(e, s, n) ? e.id : void 0
}
), returnAsField("cloud-id", (e,s,n)=>{
var d, h;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY)
return e.cloudId;
const {id: p} = e
, y = void 0 !== p && "" !== p;
return jt(e, s, n) && (null === (h = At(e, s, n)) || void 0 === h ? void 0 : h["event-type"]) === pt.PLAY_START && y && "-1" !== p ? p : Gt(e, s, n) || Yt(e, s, n) ? e.cloudId : Xt(e, s, n) && y || Qt(e, s, n) ? p : e.cloudId
}
), returnAsField("lyric-id", (e,s,n)=>{
var d, h;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY)
return null === (h = e.lyricDescriptor) || void 0 === h ? void 0 : h.id
}
), returnAsField("purchased-adam-id", (e,s,n)=>{
var d;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) !== pt.LYRIC_DISPLAY)
return e.purchasedId
}
), returnAsField("radio-adam-id", (e,s,n)=>{
var d;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY || jt(e, s, n))
return;
const {container: h, id: p} = e;
return Tt.test(p) || "radioStation" === (null == h ? void 0 : h.kind) ? parseInt(("" + p).replace(Tt, "$1"), 10) : void 0
}
), returnAsField("subscription-adam-id", (e,s,n)=>{
var d;
if (!((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY || jt(e, s, n) || Gt(e, s, n) || Yt(e, s, n))) {
if (Xt(e, s, n))
return Jt(e, s, n);
if (!Qt(e, s, n))
return e.id
}
}
)]
, ei = createFieldFn("ids", (e,s,n)=>{
var d;
if ((null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return;
const h = Zt.reduce((d,h)=>Object.assign(Object.assign({}, d), h(e, s, n)), Object.create(null));
return isEmpty(h) ? void 0 : h
}
)
, ti = createClientFieldFn("internal-build", "internalBuild")
, ii = createHelper("has-episode-streaming-kind", ({streamingKind: e},s,n)=>e === vt.EPISODE)
, si = createHelper("is-stream", (e,s,n)=>{
var d;
return (null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.STREAM
}
)
, ri = createHelper("is-live-stream", (e,s,n)=>si(e, s, n) && !ii(e, s, n))
, ni = createFieldFn("media-duration-in-milliseconds", (e,s,n)=>{
var d, h, p;
const y = null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"];
if (y === pt.LYRIC_DISPLAY)
return 0;
if (ri(e, s, n))
return 0;
const m = Math.round(1e3 * e.duration);
if (y === pt.PLAY_START)
return m;
const g = null !== (h = e.startPositionInMilliseconds) && void 0 !== h ? h : Math.round(1e3 * (null !== (p = e.position) && void 0 !== p ? p : 0));
return g > 1e3 * e.duration ? g : m
}
)
, {AUDIO: ai, VIDEO: oi} = mt
, di = createFieldFn("media-type", (e,s,n)=>{
var d;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY)
return ai;
const {kind: h, mediaType: p} = e;
if ("number" == typeof p)
return p;
const y = "string" == typeof p ? p : h;
return y && /video/i.test(y) ? oi : ai
}
)
, li = createClientFieldFn("metrics-client-id", "metricsClientId")
, ci = createFieldFn("offline", ()=>!1)
, ui = createFieldFn("persistent-id", ()=>generateUUID())
, hi = createFieldFn("play-mode", (e,s,n)=>{
var d, h, p, y, m, g, v, _;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) === pt.LYRIC_DISPLAY || (null === (h = Ct(e, s, n)) || void 0 === h ? void 0 : h.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return {
"auto-play-mode": null !== (p = hi.autoplayMode) && void 0 !== p ? p : 0,
"repeat-play-mode": null !== (y = hi.repeatPlayMode) && void 0 !== y ? y : 0,
"shuffle-play-mode": null !== (m = hi.shufflePlayMode) && void 0 !== m ? m : 0
};
const b = invoke(e.playMode);
return void 0 !== b ? {
"auto-play-mode": null !== (g = b.autoplayMode) && void 0 !== g ? g : 0,
"repeat-play-mode": null !== (v = b.repeatPlayMode) && void 0 !== v ? v : 0,
"shuffle-play-mode": null !== (_ = b.shufflePlayMode) && void 0 !== _ ? _ : 0
} : void 0
}
)
, pi = createClientFieldFn("private-enabled", "privateEnabled")
, yi = createFieldFn("reco-data", (e,s,n)=>{
var d, h;
if ((null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"]) !== pt.LYRIC_DISPLAY && (null === (h = Ct(e, s, n)) || void 0 === h ? void 0 : h.type) !== yt.AGGREGATE_NON_CATALOG_PLAY_TIME)
return e.recoData
}
)
, mi = createClientFieldFn("sb-enabled", "userIsSubscribed")
, gi = createClientFieldFn("siri-initiated", "siriInitiated")
, fi = createClientFieldFn("source-type", "sourceType")
, vi = createFieldFn("start-position-in-milliseconds", (e,s,n)=>{
var d, h, p, y;
const m = null === (d = At(e, s, n)) || void 0 === d ? void 0 : d["event-type"];
return m === pt.LYRIC_DISPLAY || (null === (h = Ct(e, s, n)) || void 0 === h ? void 0 : h.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME || ri(e, s, n) ? 0 : m === pt.PLAY_START ? Ut(e, s, n) : null !== (y = null !== (p = e.startPositionInMilliseconds) && void 0 !== p ? p : previousPosition(s)) && void 0 !== y ? y : 0
}
)
, previousPosition = e=>e && void 0 !== e.position ? Math.round(1e3 * e.position) : 0
, _i = createClientFieldFn("store-front", "storefrontId")
, bi = createFieldFn("timed-metadata", (e,s,n)=>{
const d = e.timedMetadata;
if (void 0 !== d && shouldSendTimedMetadata(e, s, n))
return ((e,s=8)=>{
if (!(e instanceof Uint8Array))
return "";
const n = Array.prototype.map.call(e, formatByte).join("");
return 0 === s ? n : n.replace(new RegExp(`(.{1,${s}})`,"g"), "$1 ").trim()
}
)(d, 0)
}
)
, shouldSendTimedMetadata = (e,s,n)=>{
var d, h;
return (null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.TIMED_METADATA_PING || (null === (h = At(e, s, n)) || void 0 === h ? void 0 : h["event-type"]) !== pt.LYRIC_DISPLAY
}
, Ti = createFieldFn("timestamp", ({timestamp: e},s,n)=>null != e ? e : Date.now())
, Ei = createClientFieldFn("user-agent", "userAgent")
, ki = createFieldFn("user-token", (e,s,{client: n})=>{
if (!n.preferDSID)
return n.musicUserToken
}
)
, Si = createFieldFn("utc-offset-in-seconds", (e,s,n)=>{
var d;
return (null === (d = Ct(e, s, n)) || void 0 === d ? void 0 : d.type) === yt.AGGREGATE_NON_CATALOG_PLAY_TIME ? 0 : n.client.utcOffsetInSeconds
}
)
, Pi = {
"build-version": Pt,
"container-ids": Nt,
"container-type": Mt,
"developer-token": Lt,
"device-name": xt,
"end-position-in-milliseconds": $t,
"end-reason-type": Ft,
"event-reason-hint-type": zt,
"event-type": At,
"feature-name": qt,
guid: Wt,
ids: ei,
"internal-build": ti,
"media-duration-in-milliseconds": ni,
"media-type": di,
"metrics-client-id": li,
offline: ci,
"persistent-id": ui,
"play-mode": hi,
"private-enabled": pi,
"reco-data": yi,
"sb-enabled": mi,
"siri-initiated": gi,
"source-type": fi,
"start-position-in-milliseconds": vi,
"store-front": _i,
"timed-metadata": bi,
timestamp: Ti,
type: Ct,
"user-agent": Ei,
"user-token": ki,
"utc-offset-in-seconds": Si
};
let Ii = 0;
const buildPlayActivityData = (e,s,n,d=!1)=>{
if (void 0 === s)
throw new Error("called without a play activity descriptor");
const h = ((e,...s)=>Object.assign(Object.assign(Object.assign({}, e), Object.assign({}, ...s)), {
cache: {
fields: Object.assign({}, ...s.map(e=>{
var s;
return null === (s = null == e ? void 0 : e.cache) || void 0 === s ? void 0 : s.fields
}
)),
helpers: Object.assign({}, ...s.map(e=>{
var s;
return null === (s = null == e ? void 0 : e.cache) || void 0 === s ? void 0 : s.helpers
}
))
}
}))("boolean" == typeof d ? ((e={},s)=>Object.assign({
id: (Ii++).toFixed(0),
client: s,
isAlexa: !1
}, e))({
isAlexa: d
}, e) : Object.assign(Object.assign({}, d), {
client: e
}));
return Object.assign(s, (e=>{
var s, n;
return {
eventType: null !== (s = e.eventType) && void 0 !== s ? s : pt.PLAY_START,
reporting: null === (n = e.reporting) || void 0 === n || n
}
}
)(s)),
Object.assign(Object.create(null), ...Object.values(Pi).map(e=>null == e ? void 0 : e(s, n, h)))
}
;
var Ai;
!function(e) {
e[e.ALEXA = 13] = "ALEXA"
}(Ai || (Ai = {}));
const createCookieJar = e=>{
switch (void 0 === e && (e = "browser"),
e) {
case "browser":
return {
get: getCookie,
set: setCookie
};
case "memory":
return ((e={})=>({
get(s) {
if (void 0 !== s)
return e[s]
},
set(s, n) {
e[s] = n
}
}))();
default:
return e
}
}
, empty = (e,s)=>write(e, s, [], "/", 0)
, read = (e,s)=>{
const n = e.get(s);
if (void 0 === n || "" === n)
return [];
return ensureArray(JSON.parse(atob(n)))
}
, write = (e,s,n,d,h,p)=>e.set(s, btoa(JSON.stringify(n)), d, h, p)
, {AUTO: wi} = gt;
class PlayActivityBatchableSender {
constructor(e, s) {
this.sender = e,
this.jar = s,
this.mode = wi
}
flush() {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = read(this.jar, "amupaee");
if (void 0 !== e && 0 !== e.length)
try {
yield this.sender.send(e),
empty(this.jar, "amupaee")
} catch ({message: s}) {
throw new Error("flush: " + s)
}
}
))
}
send(s) {
return __awaiter$1(this, void 0, void 0, (function*() {
if (this.mode === wi && (Array.isArray(s) || s["end-reason-type"] !== e.PlayActivityEndReasonType.EXITED_APPLICATION))
return this.sender.send(s);
((e,s,n,d,h,p)=>{
write(e, s, [...read(e, s), n], d, h, p)
}
)(this.jar, "amupaee", s, "/")
}
))
}
}
class Timeline {
constructor() {
this._events = {},
this._keys = []
}
get events() {
return this._events
}
get first() {
return this.at(0)
}
get keys() {
return this._keys
}
get last() {
return this.at(this.length - 1)
}
get length() {
return this._keys.length
}
get second() {
return this.at(1)
}
at(e) {
if (e > this.length - 1)
throw new Error("Invalid timeline index");
const s = this._keys[e];
return this._events[s]
}
before(e) {
if ("number" != typeof e) {
const s = [];
for (const e in this._events)
hasOwn(this._events, e) && s.push(this._events[e]);
e = this._keys[s.indexOf(e)]
}
const s = this._keys.indexOf(e);
if (-1 === s)
throw new Error("Key not found");
if (s > 0)
return this._events[this._keys[s - 1]]
}
drain() {
const e = this._keys.map(e=>this._events[e]);
return this.reset(),
e
}
reset() {
this._events = {},
this._keys = []
}
pop() {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = this._keys.pop();
if (void 0 === e)
return Promise.reject("TIMELINE IS EMPTY");
const s = this._events[e];
return delete this._events[e],
Promise.resolve(s)
}
))
}
add(e, s) {
return __awaiter$1(this, void 0, void 0, (function*() {
return this.push(e, s)
}
))
}
push(e, s=Date.now()) {
return __awaiter$1(this, void 0, void 0, (function*() {
for (; -1 !== this._keys.indexOf(s); )
s++;
return this._events[s] = e,
this._keys.push(s),
Promise.resolve(s)
}
))
}
shift() {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = this._keys.shift();
if (void 0 === e)
return Promise.reject("TIMELINE IS EMPTY");
const s = this._events[e];
return delete this._events[e],
Promise.resolve(s)
}
))
}
unshift(e, s=Date.now()) {
return __awaiter$1(this, void 0, void 0, (function*() {
for (; -1 !== this._keys.indexOf(s); )
s++;
return this._events[s] = e,
this._keys.unshift(s),
Promise.resolve(s)
}
))
}
}
const Ri = new Logger;
class TimedMetadataTracker {
constructor(e, s) {
this.client = e,
this._currentValue = s
}
get currentValue() {
return this._currentValue
}
clear() {
this._currentValue = void 0
}
ping(e, s) {
return __awaiter$1(this, void 0, void 0, (function*() {
this.timedMetadataChanged(e) && (void 0 !== this._currentValue && (yield this.client.pingTimedMetadata(s, this._currentValue)),
this._currentValue = void 0 === e ? void 0 : e.slice(0))
}
))
}
timedMetadataChanged(e) {
const {_currentValue: s} = this;
return void 0 === s ? void 0 !== e : void 0 === e || (e.length !== s.length || s.some((s,n)=>s !== e[n]))
}
}
const fieldGetter = (e,s)=>n=>s in n ? n[s] : n[e]
, Oi = fieldGetter("eventType", "event-type")
, Ci = fieldGetter("endReasonType", "end-reason-type")
, Mi = fieldGetter("itemType", "type")
, createMPAFMachine = ()=>function(e, s) {
void 0 === s && (s = {});
var n = t(f(r(e.states[e.initial].entry).map((function(e) {
return i(e, s.actions)
}
)), e.context, bt), 2)
, d = n[0]
, h = n[1]
, p = {
config: e,
_options: s,
initialState: {
value: e.initial,
actions: d,
context: h,
matches: a(e.initial)
},
transition: function(s, n) {
var d, h, y = "string" == typeof s ? {
value: s,
context: e.context
} : s, m = y.value, g = y.context, v = u(n), _ = e.states[m];
if (_.on) {
var b = r(_.on[v.type]);
try {
for (var T = function(e) {
var s = "function" == typeof Symbol && Symbol.iterator
, n = s && e[s]
, d = 0;
if (n)
return n.call(e);
if (e && "number" == typeof e.length)
return {
next: function() {
return e && d >= e.length && (e = void 0),
{
value: e && e[d++],
done: !e
}
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.")
}(b), E = T.next(); !E.done; E = T.next()) {
var k = E.value;
if (void 0 === k)
return c(m, g);
var S = "string" == typeof k ? {
target: k
} : k
, P = S.target
, I = S.actions
, A = void 0 === I ? [] : I
, w = S.cond
, R = void 0 === w ? function() {
return !0
}
: w
, O = void 0 === P
, C = null != P ? P : m
, M = e.states[C];
if (R(g, v)) {
var D = t(f((O ? r(A) : [].concat(_.exit, A, M.entry).filter((function(e) {
return e
}
))).map((function(e) {
return i(e, p._options.actions)
}
)), g, v), 3)
, N = D[0]
, L = D[1]
, x = D[2]
, U = null != P ? P : m;
return {
value: U,
context: L,
actions: N,
changed: P !== m || N.length > 0 || x,
matches: a(U)
}
}
}
} catch (t) {
d = {
error: t
}
} finally {
try {
E && !E.done && (h = T.return) && h.call(T)
} finally {
if (d)
throw d.error
}
}
}
return c(m, g)
}
};
return p
}({
id: "mpaf",
initial: "idle",
context: {},
states: {
error: {},
idle: {
on: {
play: "playing",
scrubBegin: {
target: "scrubbing",
actions: o(e=>Object.assign(Object.assign({}, e), {
stateBeforeScrub: "idle"
}))
},
scrubEnd: {
target: "error",
actions: ["clearStateBeforeScrub", "setScrubEndError"]
}
}
},
playing: {
on: {
scrubBegin: {
target: "scrubbing",
actions: o(e=>Object.assign(Object.assign({}, e), {
stateBeforeScrub: "playing"
}))
},
stop: "idle",
scrubEnd: {
target: "error",
actions: ["clearStateBeforeScrub", "setScrubEndError"]
}
}
},
scrubbing: {
on: {
scrubEnd: [{
target: "idle",
cond: ({stateBeforeScrub: e})=>"idle" === e,
actions: ["clearStateBeforeScrub"]
}, {
target: "playing",
actions: ["clearStateBeforeScrub"]
}]
}
}
}
}, {
actions: {
clearStateBeforeScrub: o(e=>__rest$1(e, ["stateBeforeScrub"])),
setScrubEndError: o(e=>Object.assign(Object.assign({}, e), {
errorMessage: "The scrub() method was called with the SCRUB_END action without a previous SCRUB_START descriptor"
}))
}
});
class MPAFStateMachine {
constructor() {
this.machine = createMPAFMachine(),
this.machineService = function(e) {
var s = e.initialState
, n = _t.NotStarted
, d = new Set
, h = {
_machine: e,
send: function(h) {
n === _t.Running && (s = e.transition(s, h),
l(s, u(h)),
d.forEach((function(e) {
return e(s)
}
)))
},
subscribe: function(e) {
return d.add(e),
e(s),
{
unsubscribe: function() {
return d.delete(e)
}
}
},
start: function(d) {
if (d) {
var p = "object" == typeof d ? d : {
context: e.config.context,
value: d
};
s = {
value: p.value,
actions: [],
context: p.context,
matches: a(p.value)
}
}
return n = _t.Running,
l(s, bt),
h
},
stop: function() {
return n = _t.Stopped,
d.clear(),
h
},
get state() {
return s
},
get status() {
return n
}
};
return h
}(this.machine).start()
}
canSendEvent(e) {
var s;
return null !== (s = this.machine.transition(this.machineService.state, e).changed) && void 0 !== s && s
}
matches(e) {
return this.machineService.state.matches(e)
}
send(s) {
const n = (s=>{
const n = Oi(s)
, d = Ci(s);
if (Mi(s) === yt.TIMED_METADATA_PING)
return !1;
switch (n) {
case pt.PLAY_START:
return "play";
case pt.PLAY_END:
switch (d) {
case e.PlayActivityEndReasonType.SCRUB_BEGIN:
return "scrubBegin";
case e.PlayActivityEndReasonType.SCRUB_END:
return "scrubEnd";
case e.PlayActivityEndReasonType.EXITED_APPLICATION:
case e.PlayActivityEndReasonType.NOT_APPLICABLE:
return !1;
default:
return "stop"
}
default:
return "stop"
}
}
)(s);
if (!1 !== n && (this.canSendEvent({
type: n
}) && this.machineService.send({
type: n
}),
this.matches("error")))
throw new Error(this.machineService.state.context.errorMessage)
}
}
class StatelessPlayActivity extends class {
constructor(e, s, n, d) {
var h, p, y;
this._accessToken = e,
this._musicUserToken = s,
this._storefrontId = n,
this.privateEnabled = !1,
this.siriInitiated = !1,
this.clientId = "JSCLIENT",
this.eventType = "JSPLAY",
this.internalBuild = !1,
this.preferDSID = !1,
this.sourceType = ft.MUSICKIT,
this._utcOffset = (new Date).getTimezoneOffset(),
this._userIsSubscribed = !0,
d && (this._appInfo = d.app,
this._navigator = d.navigator,
this._userAgent = d.userAgent,
hasOwn(d, "utcOffset") && isNaN(d.utcOffset) ? this._utcOffsetInSeconds = -1 : hasOwn(d, "utcOffset") && (this._utcOffset = d.utcOffset),
this.clientId = d.clientId || "JSCLIENT",
this._deviceName = d.deviceName,
this.guid = d.guid,
this.metricsClientId = d.metricsClientId,
this.preferDSID = null !== (h = d.preferDSID) && void 0 !== h && h,
this.sourceType = void 0 !== d.sourceType && "number" == typeof d.sourceType ? d.sourceType : ft.MUSICKIT,
this._userIsSubscribed = null === (p = d.userIsSubscribed) || void 0 === p || p),
this.buildVersion = ((e,s,n,d)=>[fullAppId(e, s), os(d), model(n), build(s)].join(" "))(this._appId, this._appInfo, this.navigator, this.userAgent),
this.sender = new PlayActivitySender({
accessToken: this._accessToken,
clientId: this.clientId,
eventType: this.eventType,
fetch: null == d ? void 0 : d.fetch,
fetchOptions: null == d ? void 0 : d.fetchOptions,
headersClass: null === (y = null == d ? void 0 : d.fetch) || void 0 === y ? void 0 : y.Headers,
isQA: null == d ? void 0 : d.isQA,
logInfo: null == d ? void 0 : d.logInfo,
musicUserToken: this._musicUserToken,
preferDSID: this.preferDSID,
sourceType: this.sourceType,
traceTag: null == d ? void 0 : d.traceTag
})
}
get accessToken() {
return invoke(this._accessToken)
}
get appID() {
return void 0 === this._appId && (this._appId = fullAppId(this._appId, this._appInfo)),
this._appId
}
get deviceName() {
return this._deviceName
}
get musicUserToken() {
return invoke(this._musicUserToken)
}
get navigator() {
var e;
return null !== (e = this._navigator) && void 0 !== e ? e : "undefined" == typeof navigator ? kt : navigator
}
get storefrontId() {
return invoke(this._storefrontId)
}
get userAgent() {
var e;
return null !== (e = this._userAgent) && void 0 !== e ? e : this.navigator.userAgent
}
get userIsSubscribed() {
return invoke(this._userIsSubscribed)
}
get utcOffsetInSeconds() {
if (void 0 === this._utcOffsetInSeconds && void 0 !== this._utcOffset && !isNaN(this._utcOffset)) {
const e = 60 * this._utcOffset;
this._utcOffsetInSeconds = e <= 0 ? Math.abs(e) : -e
}
return void 0 === this._utcOffsetInSeconds || isNaN(this._utcOffsetInSeconds) ? -1 : this._utcOffsetInSeconds
}
send(e) {
return __awaiter$1(this, void 0, void 0, (function*() {
return this.sender.send(e)
}
))
}
buildDescriptorForPlayParams(e, s, n, d, h) {
const p = "stream" === e.format ? yt.STREAM : yt.ITUNES_STORE_CONTENT;
return Object.assign(Object.assign(Object.assign({}, e), {
container: n,
duration: null != d ? d : 0,
eventType: s,
itemType: p
}), h)
}
buildForPlayParams(e, s, n, d=0, h={}, p=!1) {
return this.build(this.buildDescriptorForPlayParams(e, s, n, d, h), p)
}
}
{
constructor(e, s, n, d) {
super(e, s, n, d)
}
build(e, s) {
return buildPlayActivityData(this, e, s, "JSCLIENT" !== this.clientId)
}
}
class PlayActivity {
constructor(e, s, n, d) {
this.timeline = new Timeline,
this._paf = new StatelessPlayActivity(e,s,n,d),
this._cookieJar = createCookieJar(null == d ? void 0 : d.cookieJar),
this.sender = new PlayActivityBatchableSender(this._paf.sender,this._cookieJar),
this._machine = new MPAFStateMachine,
this._timedMetadataTracker = new TimedMetadataTracker(this)
}
get mode() {
return this.sender.mode
}
set mode(e) {
this.sender.mode = e
}
get privateEnabled() {
return this._paf.privateEnabled
}
set privateEnabled(e) {
this._paf.privateEnabled = e
}
get timedMetadata() {
return this._timedMetadataTracker.currentValue
}
clearTimedMetadata() {
return this._timedMetadataTracker.clear()
}
setTimedMetadata(e, s) {
return this._timedMetadataTracker.ping(e, s)
}
activate(s=!1) {
return __awaiter$1(this, void 0, void 0, (function*() {
if (s)
try {
yield this.flush()
} catch (d) {
if (!(e=>(e=>{
switch (typeof e) {
case "string":
return e;
case "object":
return e.message ? "string" != typeof e.message ? "" : e.message : "";
default:
return ""
}
}
)(e).includes("send() called without any data"))(d))
throw d
}
const n = this.timeline.last;
if (n && n.endReasonType === e.PlayActivityEndReasonType.EXITED_APPLICATION)
return this.timeline.pop()
}
))
}
exit(s=0) {
return __awaiter$1(this, void 0, void 0, (function*() {
return this.stop(s, e.PlayActivityEndReasonType.EXITED_APPLICATION)
}
))
}
pause(s=0) {
return __awaiter$1(this, void 0, void 0, (function*() {
return this.stop(s, e.PlayActivityEndReasonType.PLAYBACK_MANUALLY_PAUSED)
}
))
}
pingTimedMetadata(s, n, d=this._previousDescriptor()) {
return __awaiter$1(this, void 0, void 0, (function*() {
yield this._addToTimeline(Object.assign(Object.assign({}, d), {
position: s,
endReasonType: e.PlayActivityEndReasonType.NOT_APPLICABLE,
eventType: pt.PLAY_END,
itemType: yt.TIMED_METADATA_PING,
timedMetadata: n
}))
}
))
}
play(e, s=0) {
return __awaiter$1(this, void 0, void 0, (function*() {
const n = this.timeline.length > 0;
if (void 0 === e) {
if (!n)
return;
const e = this._previousDescriptor();
e.eventType === pt.PLAY_END && delete e.endReasonType;
const s = Object.assign(Object.assign({}, this.sanitizePreviousDescriptor(e)), {
eventType: pt.PLAY_START
});
return this._addToTimeline(s)
}
if (n) {
const e = this._previousDescriptor();
if (this._machine.matches("playing") && !(({id: e, reporting: s=!0, eventType: n})=>("-1" === e || !s) && n === pt.PLAY_END)(e))
return Promise.reject(new Error("The play() method was called without a previous stop() or pause() call."))
}
const d = Object.assign(Object.assign({}, e), {
eventType: pt.PLAY_START,
position: s
});
return this._addToTimeline(d)
}
))
}
scrub(s=0, n=e.PlayActivityEndReasonType.SCRUB_BEGIN) {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = this._previousDescriptor()
, d = Object.assign(Object.assign({}, this.sanitizePreviousDescriptor(e)), {
eventType: pt.PLAY_END,
endReasonType: n,
position: s
});
return this._addToTimeline(d)
}
))
}
skip(s, n=e.PlayActivityEndReasonType.TRACK_SKIPPED_FORWARDS, d=0) {
return __awaiter$1(this, void 0, void 0, (function*() {
return yield this.stop(d, n),
this.play(s)
}
))
}
stop(s=0, n=e.PlayActivityEndReasonType.NATURAL_END_OF_TRACK) {
return __awaiter$1(this, void 0, void 0, (function*() {
let d = this._previousDescriptor();
if (d.endReasonType === e.PlayActivityEndReasonType.EXITED_APPLICATION && (yield this.timeline.pop(),
empty(this._cookieJar, "amupaee"),
d = this._previousDescriptor()),
this._machine.matches("playing")) {
const e = Object.assign(Object.assign({}, this.sanitizePreviousDescriptor(d)), {
eventType: pt.PLAY_END,
endReasonType: n,
position: s,
timedMetadata: this._timedMetadataTracker.currentValue
});
return this._addToTimeline(e)
}
return Promise.reject(new Error("A play stop() method was called without a previous play() descriptor"))
}
))
}
build(e, s) {
if (void 0 === e && void 0 === s && Ri.warn("You are calling build() from a stateful PAF client. Please, use a stateless client or exit(), pause(), play(), scrub(), skip() or stop() instead."),
void 0 === e) {
if (0 === this.timeline.length)
throw new Error("build() called without a play activity descriptor");
e = this.timeline.last
}
if (void 0 === s) {
if (void 0 === (s = this.timeline.before(e)) && e.eventType === pt.PLAY_END)
throw new Error("Cannot build() for PLAY_END descriptors without previous descriptors");
s = null != s && s
}
return this._paf.build(Object.assign(Object.assign({}, e), {
timedMetadata: this.timedMetadata
}), s)
}
addForPlayParams(e, s, n, d=0, h={}) {
const p = this.buildDescriptorForPlayParams(e, s, n, d, h);
return this._addToTimeline(p)
}
buildDescriptorForPlayParams(e, s, n, d=0, h={}) {
const p = "stream" === e.format ? yt.STREAM : yt.ITUNES_STORE_CONTENT;
return Object.assign(Object.assign(Object.assign({}, e), {
container: n,
duration: d,
eventType: s,
itemType: p
}), h)
}
flush() {
return this.sender.flush()
}
_addToTimeline(e) {
return __awaiter$1(this, void 0, void 0, (function*() {
const s = Object.assign(Object.assign({}, e), {
timestamp: Date.now()
})
, n = this.timeline.length > 0 && this.timeline.last;
yield this.timeline.add(s);
const d = this.build(s, n);
yield this.send(d)
}
))
}
_previousDescriptor() {
const e = this.timeline.last;
if (void 0 === e)
throw new Error("A method was called without a previous descriptor");
return exceptFields(e, "timestamp")
}
buildForPlayParams(e, s, n, d=0, h={}, p=!1) {
return Ri.warn("You are using buildsForPlayParams from a stateful PlayActivity. Please, use StatelessPlayActivity instead"),
this._paf.buildForPlayParams(e, s, n, d, h, p)
}
send(e) {
const s = ensureArray(e);
return s.forEach(e=>this._machine.send(e)),
this.sender.send(s)
}
sanitizePreviousDescriptor(e) {
let s = function deepClone(e) {
if ("object" != typeof e || null === e)
throw new TypeError("Source is not an Object");
const s = Array.isArray(e) ? [] : {};
for (const n in e)
hasOwn(e, n) && ("object" == typeof e[n] && null !== e[n] ? s[n] = deepClone(e[n]) : s[n] = e[n]);
return s
}(e);
return s.itemType === yt.TIMED_METADATA_PING && (s = exceptFields(s, "itemType")),
s
}
}
e.version = "2.2150.6";
const Di = e.version.split(".")
, Ni = Di[0]
, Li = Di[Di.length - 1];
Di[0] = "3",
Di[Di.length - 1] = Li + "-prerelease",
Di[0] = Ni,
Di[Di.length - 1] = Li,
e.version = Di.join(".");
const Bind = ()=>(e,s,n)=>{
if (void 0 === n || "function" != typeof n.value)
throw new TypeError(`Only methods can be decorated with @Bind, but ${s} is not a method.`);
return {
configurable: !0,
get() {
const e = n.value.bind(this);
return Object.defineProperty(this, s, {
value: e,
configurable: !0,
writable: !0
}),
e
}
}
}
;
const xi = {
af: 48,
sq: 1,
ar: 34,
eu: 1,
bg: 49,
be: 1,
ca: 42,
zh: 19,
"zh-tw": 18,
"zh-cn": 19,
"zh-hk": 45,
"zh-sg": 19,
hr: 41,
cs: 22,
da: 11,
nl: 10,
"nl-be": 65,
en: 1,
"en-us": 1,
"en-eg": 26,
"en-au": 27,
"en-gb": 2,
"en-ca": 6,
"en-nz": 27,
"en-ie": 26,
"en-za": 26,
"en-jm": 26,
"en-bz": 26,
"en-tt": 26,
"en-001": 26,
et: 30,
fo: 1,
fa: 59,
fi: 12,
fr: 3,
"fr-ca": 5,
gd: 2,
de: 4,
"de-ch": 57,
el: 23,
he: 36,
hi: 50,
hu: 21,
is: 31,
id: 37,
it: 7,
ja: 9,
ko: 13,
lv: 33,
lt: 32,
mk: 1,
mt: 1,
no: 14,
nb: 14,
nn: 14,
pl: 20,
"pt-br": 15,
pt: 24,
rm: 1,
ro: 39,
ru: 16,
sr: 1,
sk: 40,
sl: 52,
es: 8,
"es-mx": 28,
"es-419": 44,
sv: 17,
th: 35,
ts: 1,
tn: 1,
tr: 25,
uk: 29,
ur: 55,
ve: 1,
vi: 43,
xh: 1,
yi: 1,
zu: 56,
ms: 38,
iw: 36,
lo: 46,
tl: 47,
kk: 51,
ta: 53,
te: 54,
bn: 58,
ga: 60,
ht: 61,
la: 62,
pa: 63,
sa: 64
};
function getLanguages() {
if ("undefined" == typeof navigator)
return [];
if (navigator.languages)
return navigator.languages;
const e = navigator.language || navigator.userLanguage;
return e ? [e] : []
}
const Ui = new RegExp("^https://([a-z0-9]+-)?" + ("js-cdn.music.apple.com" + "/musickit/v3/".replace(/v3/, "(v2|v3)")).replace(/[\.\/]/g, "\\$&"),"i")
, $i = /^([a-z]+:)?\/\//;
function findScript(e) {
return isNodeEnvironment$1() || !e ? null : document.querySelector(`script[src*="${e}"]`)
}
function determineCdnBasePrefix() {
for (const e of "undefined" != typeof document && document.querySelectorAll ? Array.from(document.querySelectorAll("script[src]")) : []) {
const s = Ui.exec(e.src);
if (s)
return s[1] || ""
}
return ""
}
function determineCdnBaseHost() {
if (isNodeEnvironment$1())
return "";
return `//${determineCdnBasePrefix()}js-cdn.music.apple.com`
}
function getHlsJsCdnConfig() {
const e = {
hls: "",
rtc: ""
};
if (isNodeEnvironment$1())
return e;
const s = determineCdnBaseHost();
let n = "2.141.0";
return n = createLocalStorageFlag("mk-hlsjs-version").get() || n,
e.hls = `http://localhost:9000/apple-hls.js`,
e.rtc = `https:${s}/hls.js/${n}/rtc.js/rtc.min.js`,
e
}
function cdnBaseURL(e, s=window) {
if (isNodeEnvironment$1())
return "";
if (s.localStorage.mkCDNBaseURLOverride)
return s.localStorage.mkCDNBaseURLOverride;
const n = findScript(e);
return n ? n.getAttribute("src").replace(new RegExp(e + "$"), "") : determineCdnBaseHost() + "/musickit/v3/"
}
function loadScript(e, s) {
return new Promise((n,d)=>{
isNodeEnvironment$1() && d("Dynamic script loading is unsupported in Node environments.");
if (findScript(e))
return n();
const h = document.createElement("script");
let p;
if (s && Object.keys(s).forEach(e=>{
h.setAttribute(e, s[e])
}
),
h.onload = ()=>{
n()
}
,
h.onerror = e=>{
d(e)
}
,
$i.test(e))
p = e;
else {
p = `${cdnBaseURL(e)}${e}`
}
h.src = p,
document.head.appendChild(h)
}
)
}
const ji = new Logger("sk-debug");
class AuthBridgeApp extends class {
constructor() {
this._targetOrigin = "*"
}
init(e, s) {
var n;
this._receiveWindow = e,
this._sendWindow = s,
this.handleMessage = this.handleMessage.bind(this),
null === (n = this._receiveWindow) || void 0 === n || n.addEventListener("message", this.handleMessage)
}
sendMessage(e, s) {
const n = {
action: "mediakit:" + e,
data: s
};
this._sendWindow && this._sendWindow.postMessage(JSON.stringify(n), this._targetOrigin)
}
handleMessage(e) {
if (!this._isOriginAllowed(e.origin))
return;
let s;
try {
s = JSON.parse(e.data)
} catch (bt) {}
if (!s || !this._isNamespacedData(s))
return;
"*" === this._targetOrigin && (this._targetOrigin = e.origin),
ji.debug("auth-bridge: handleMessage", s);
const n = s.action.replace("mediakit:", "");
this[n] ? this[n](s.data) : ji.debug("auth-bridge: unsupported method", n)
}
_isOriginAllowed(e) {
if (!e)
return !1;
const [s,n] = e.split("://");
let d = "";
return n && (d = n.split(":")[0]),
"https" === s && !!d && d.endsWith(".apple.com")
}
_isNamespacedData(e) {
return e.action && -1 !== e.action.indexOf("mediakit:")
}
}
{
constructor() {
super(),
this.whenFrameInited = new Promise(e=>this._frameInitResolve = e),
this.whenAuthCompleted = new Promise(e=>this._authUpdateResolve = e),
this.frame = document.createElement("iframe"),
this.frame.src = this._getIframeSrc(),
this.frame.style.display = "none",
document.body.appendChild(this.frame),
this.init(window, this.frame.contentWindow)
}
requestAuthUpdate() {
this.whenFrameInited.then(()=>this.sendMessage("requestAuthUpdate"))
}
setCookieItem(e, s) {
this.whenFrameInited.then(()=>this.sendMessage("setCookieItem", {
name: e,
value: s
}))
}
clearAuth() {
this.whenFrameInited.then(()=>this.sendMessage("clearAuth"))
}
frameInit() {
var e;
null === (e = this._frameInitResolve) || void 0 === e || e.call(this),
this.requestAuthUpdate()
}
updateAuth(e) {
if ((null == e ? void 0 : e.enabled) && (null == e ? void 0 : e.cookies)) {
const s = e.cookies;
Object.keys(s).forEach(e=>{
var n;
const d = null !== (n = s[e]) && void 0 !== n ? n : "";
d ? setCookie(e, d, "/", 7) : removeCookie(e)
}
)
}
this._authUpdateResolve && (this._authUpdateResolve(),
this._authUpdateResolve = void 0)
}
authClearedFromOtherFrame() {
ji.warn("Override auth-bridge/app's authClearedFromOtherFrame to trigger app-specific sign out behavior")
}
_getIframeSrc() {
let e = determineCdnBasePrefix();
return e && (e = "?env=" + e.substring(0, e.length - 1)),
"https://mediaauth.apple.com/auth-bridge/" + e
}
}
const Bi = new Set(["apps", "books", "music", "podcasts", "tv"])
, Ki = /\.apple\.com$/;
function getCommerceHostname(e, s) {
!s && "undefined" != typeof location && location.hostname && (s = location);
let n = e + ".itunes.apple.com";
if (!s)
return n;
const d = function(e) {
if (!e || !Ki.test(e))
return;
const s = e.split(".");
let n = s[s.length - 3];
const d = n;
if (n && n.includes("-")) {
const e = n.split("-");
n = e[e.length - 1]
}
return Bi.has(n) ? d : void 0
}(s.hostname);
return d && (n = `${e}.${d}.apple.com`),
n
}
var Fi;
function buildQueryParams(e={
app: Fi.APP,
p: Fi.P
}) {
return void 0 === e.app && (e.app = Fi.APP),
void 0 === e.p && (e.p = Fi.P),
Object.keys(e).map(s=>`${encodeURIComponent(s)}=${encodeURIComponent(e[s])}`).join("&")
}
!function(e) {
e.APP = "music",
e.P = "subscribe"
}(Fi || (Fi = {}));
const Vi = {
2: "com.apple.onboarding.tvapp",
0: "com.apple.onboarding.applemusic"
}
, Hi = {
2: "pltvcid",
0: "pldfltcid"
}
, zi = {
"com.apple.onboarding.tvapp": 5,
"com.apple.onboarding.applemusic": 3
};
var qi;
!function(e) {
e[e.ParseError = -32700] = "ParseError",
e[e.InvalidRequest = -32600] = "InvalidRequest",
e[e.MethodNotFound = -32601] = "MethodNotFound",
e[e.InvalidParams = -32602] = "InvalidParams",
e[e.InternalError = -32603] = "InternalError"
}(qi || (qi = {}));
class Dispatch {
constructor(e={}) {
this._registry = {},
this._sequence = 0,
this.handle = e=>{
e.data && "2.0" === e.data.jsonrpc && ("*" !== this.origin && this.origin !== e.origin || (e.data.method && this.destination ? this.handleRequest(e.data).then(e=>{
this.send(this.destination, e)
}
) : (hasOwn(e.data, "result") || e.data.error) && this.handleResponse(e.data)))
}
,
this.destination = e.destination,
this.methods = e.methods || {},
this.origin = e.origin || "*",
e.source && (this.source = e.source)
}
get source() {
return this._source
}
set source(e) {
if (!e && this._source)
return this._source.removeEventListener("message", this.handle),
void (this._source = void 0);
e.addEventListener("message", this.handle),
this._source = e
}
apply(e, s) {
if (!this.destination)
throw new Error("No destination");
const n = this._sequence++
, d = new Promise((e,s)=>{
this._registry[n] = {
resolve: e,
reject: s
}
}
);
return this.send(this.destination, {
jsonrpc: "2.0",
id: n,
method: e,
params: s
}),
d
}
call(e, ...s) {
return this.apply(e, s)
}
handleRequest(e) {
return __awaiter$2(this, void 0, void 0, (function*() {
const s = {
jsonrpc: "2.0",
id: e.id
}
, n = this.methods[e.method];
if (!n)
return Object.assign(s, {
error: {
code: qi.MethodNotFound,
message: "Method not found"
}
});
try {
const d = yield n.apply(void 0, ensureArray(e.params));
return Object.assign(s, {
result: d
})
} catch (F) {
return Object.assign(s, {
error: {
code: F.code || qi.InternalError,
message: F.message
}
})
}
}
))
}
handleResponse(e) {
const s = this._registry[e.id];
delete this._registry[e.id],
s && (e.error ? s.reject(Object.assign(Error(), e.error)) : s.resolve(e.result))
}
send(e, s) {
e.postMessage(s, e.window === e ? this.origin : void 0)
}
}
var Wi;
function validateToken(e) {
var s;
if ("string" != typeof e)
return !1;
const n = e.match(/[a-zA-Z0-9=\/+]{32,}==$/);
return null !== (s = n && n.length > 0) && void 0 !== s && s
}
!function(e) {
e[e.UNAVAILABLE = -1] = "UNAVAILABLE",
e[e.NOT_DETERMINED = 0] = "NOT_DETERMINED",
e[e.DENIED = 1] = "DENIED",
e[e.RESTRICTED = 2] = "RESTRICTED",
e[e.AUTHORIZED = 3] = "AUTHORIZED"
}(Wi || (Wi = {}));
const Yi = `https://${getCommerceHostname("buy")}/commerce/account/authenticateMusicKitRequest`
, Gi = "https://authorize.music.apple.com"
, Qi = /^https?:\/\/(.+\.)*(apple\.com|apps\.mzstatic\.com)(\/[\w\d]+)*$/;
var Ji, Xi, Zi, es;
!function(e) {
e[e.AUTHORIZE = 0] = "AUTHORIZE",
e[e.SUBSCRIBE = 1] = "SUBSCRIBE"
}(Ji || (Ji = {}));
class ServiceSetupView {
constructor(e, s={}) {
var n;
if (this.developerToken = e,
this.authenticateMethod = "GET",
this.target = "apple-music-service-view",
this.deeplinkParameters = s && s.deeplinkParameters || {},
this.iconURL = s && s.iconURL,
this.authenticateMethod = s && s.authenticateMethod || "GET",
this.isServiceView && window.opener !== window) {
const e = "undefined" != typeof sessionStorage ? sessionStorage.getItem("ac") : void 0
, s = null != e ? new URL(e).origin : void 0;
s && (this.dispatch = new Dispatch({
destination: null !== (n = window.opener) && void 0 !== n ? n : void 0,
origin: s,
source: window
}))
}
}
get isServiceView() {
return /(authorize\.(.+\.)*apple\.com)/i.test(window.location.hostname) || window && window.name === this.target || !1
}
focus() {
this._window && window.focus && this._window.focus()
}
load(e={
action: Ji.AUTHORIZE
}) {
return __awaiter$1(this, void 0, void 0, (function*() {
return e.action === Ji.SUBSCRIBE ? this._subscribeAction(e.parameters) : this._authorizeAction(e.parameters)
}
))
}
present(e="", s) {
const {height: n, left: d, top: h, width: p} = this._calculateClientDimensions()
, y = {
height: 650,
menubar: "no",
resizable: "no",
scrollbars: "no",
status: "no",
toolbar: "no",
width: 650
}
, m = Object.assign(Object.assign(Object.assign({}, y), {
left: p / 2 - y.width / 2 + d,
top: n / 2 - y.height / 2 + h
}), s)
, g = Object.keys(m).map(e=>`${e}=${m[e]}`).join(",");
return /trident|msie/i.test(navigator.userAgent) ? (this._window = window.open(window.location.href, this.target, g) || void 0,
this._window.location.href = e) : this._window = window.open(e, this.target, g) || void 0,
/\bedge\b/i.test(navigator.userAgent) && (this._window.opener = self),
this.focus(),
this._window
}
_authorizeAction(e={}) {
var s;
return __awaiter$1(this, void 0, void 0, (function*() {
let n, d;
const h = (null === (s = window.location) || void 0 === s ? void 0 : s.href) || "";
return "GET" === this.authenticateMethod ? d = `${Gi}/woa?${buildQueryParams(Object.assign(Object.assign({}, this.deeplinkParameters), {
a: btoa(this._thirdPartyInfo()),
referrer: h
}))}` : (n = this._buildFormElement(Yi),
document.body.appendChild(n)),
new Promise((s,h)=>{
const p = this.present(d);
this.dispatch = new Dispatch({
methods: {
authorize(e, n, d) {
validateToken(e) ? s({
restricted: n && "1" === n,
userToken: e,
cid: d
}) : h(Wi.NOT_DETERMINED)
},
close() {},
decline() {
h(Wi.DENIED)
},
switchUserId() {
h(Wi.NOT_DETERMINED)
},
thirdPartyInfo: ()=>this._thirdPartyInfo(this.developerToken, Object.assign(Object.assign({}, this.deeplinkParameters), e)),
unavailable() {
h(Wi.UNAVAILABLE)
}
},
origin: Gi,
source: window,
destination: p
}),
n && n.submit()
}
)
}
))
}
_buildFormElement(e, s=this.target, n=this.developerToken) {
const d = document.createElement("form");
d.setAttribute("method", "post"),
d.setAttribute("action", e),
d.setAttribute("target", s),
d.style.display = "none";
const h = document.createElement("input");
h.setAttribute("name", "jwtToken"),
h.setAttribute("value", n),
d.appendChild(h);
const p = document.createElement("input");
p.setAttribute("name", "isWebPlayer"),
p.setAttribute("value", "true"),
d.appendChild(p);
const y = document.createElement("input");
return y.setAttribute("name", "LogoURL"),
y.setAttribute("value", ""),
d.appendChild(y),
d
}
_calculateClientDimensions(e=window) {
return {
height: e.innerHeight ? e.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height,
left: e.screenLeft ? e.screenLeft : screen.availLeft || screen.left,
top: e.screenTop ? e.screenTop : screen.availTop || screen.top,
width: e.innerWidth ? e.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width
}
}
_subscribeAction(e={}) {
return __awaiter$1(this, void 0, void 0, (function*() {
return Object.assign(e, this.deeplinkParameters),
new Promise((s,n)=>{
const d = "https://authorize.music.apple.com/upsell?" + buildQueryParams(e);
this.present(d),
window.addEventListener("message", ({data: e, origin: d, source: h})=>{
const {closeWindow: p, launchClient: y} = "string" == typeof e ? JSON.parse(e) : e;
d && !Qi.test(d) || (y ? 0 === y.supported ? n("Unable to subscribe on this platform.") : s(y) : n("Subscribe action error."))
}
)
}
)
}
))
}
_thirdPartyInfo(e=this.developerToken, s) {
var n;
let d = this.iconURL;
const h = window.location.host || document.referrer
, p = [...[].slice.call(document.querySelectorAll('link[rel="apple-music-app-icon"]')), ...[].slice.call(document.querySelectorAll('link[rel="apple-touch-icon-precomposed"]')), ...[].slice.call(document.querySelectorAll('link[rel="apple-touch-icon"]'))];
if (p && p[0] && p[0].href) {
const e = p.find(e=>!!e.sizes && "120x120" === e.sizes.value);
d = null !== (n = null == e ? void 0 : e.href) && void 0 !== n ? n : p[0].href
}
return JSON.stringify({
thirdPartyIconURL: d,
thirdPartyName: h,
thirdPartyParameters: s,
thirdPartyToken: e
})
}
}
!function(e) {
e.ID = "us",
e.LANGUAGE_TAG = "en-gb"
}(Xi || (Xi = {}));
class Storefront {
constructor(e, s, n) {
this.id = e,
this.attributes = s,
this.type = "storefronts",
this.href = n || `/v1/${this.type}/${e}`
}
static inferFromLanguages(e, s=getLanguages()) {
return __awaiter$1(this, void 0, void 0, (function*() {
const n = yield function(e, s="https://api.music.apple.com/v1") {
return __awaiter$1(this, void 0, void 0, (function*() {
const n = new Headers({
Authorization: "Bearer " + e
})
, d = yield fetch(s + "/storefronts", {
headers: n
})
, h = yield d.json();
return h.errors ? Promise.reject(h.errors) : h.data
}
))
}(e)
, d = n.map(e=>e.id)
, h = s[0] || "en-US"
, [p,y] = h.toLowerCase().split(/-|_/)
, m = d.includes(y) ? y : "us";
return n.find(e=>e.id === m)
}
))
}
}
!function(e) {
e.DEFAULT_CID = "pldfltcid",
e.TV_CID = "pltvcid",
e.RESTRICTIONS_ENABLED = "itre",
e.STOREFRONT_COUNTRY_CODE = "itua",
e.USER_TOKEN = "media-user-token"
}(Zi || (Zi = {})),
function(e) {
e.authorizationStatusDidChange = "authorizationStatusDidChange",
e.authorizationStatusWillChange = "authorizationStatusWillChange",
e.eligibleForSubscribeView = "eligibleForSubscribeView",
e.needsGDPRDidChange = "needsGDPRDidChange",
e.storefrontCountryCodeDidChange = "storefrontCountryCodeDidChange",
e.storefrontIdentifierDidChange = "storefrontIdentifierDidChange",
e.userTokenDidChange = "userTokenDidChange"
}(es || (es = {})),
Zi.DEFAULT_CID;
let ts = !1;
ts = !0;
const is = "https://" + getCommerceHostname("buy")
, ss = `https://${getCommerceHostname("play")}/WebObjects/MZPlay.woa/wa`;
class StoreKit extends Notifications {
constructor(e, s) {
super([es.authorizationStatusDidChange, es.authorizationStatusWillChange, es.eligibleForSubscribeView, es.needsGDPRDidChange, es.storefrontCountryCodeDidChange, es.userTokenDidChange, es.storefrontIdentifierDidChange]),
this.developerToken = e,
this.apiBase = "https://api.music.apple.com/v1",
this.iTunesBuyBase = is,
this.meParameters = {},
this.persist = "localstorage",
this.playBase = ss,
this.prefix = "music",
this.realm = 0,
this.storage = window.localStorage,
this._authorizationStatus = Wi.NOT_DETERMINED,
this._dispatchedSubscribeView = !1,
this._me = null,
this._cids = {},
this._gdprVersion = -1,
this._needsGDPR = void 0,
this._dynamicUserToken = getCookie(Zi.USER_TOKEN),
s && (s.apiBase && (this.apiBase = s.apiBase),
s.deeplink && (this.deeplinkParameters = s.deeplink),
s.meParameters && (this.meParameters = s.meParameters),
s.persist && (this.persist = s.persist),
s.prefix && (this.prefix = s.prefix),
void 0 !== s.realm && (this.realm = s.realm),
this.bundleId = Vi[this.realm]),
this.cidNamespace = Hi[this.realm],
this._developerToken = new DeveloperToken(e),
this._serviceSetupView = new ServiceSetupView(e,{
authenticateMethod: s && s.authenticateMethod,
iconURL: s && s.iconURL,
deeplinkParameters: this.deeplinkParameters
}),
this.storagePrefix = `${this.prefix}.${this._developerToken.teamId}`.toLocaleLowerCase();
const n = this._getStorageItem(Zi.USER_TOKEN);
this.userToken = n || void 0,
this.developerToken && this.userTokenIsValid && (this._restrictedEnabled = this.restrictedEnabled,
this.shouldDisplayPrivacyLink(this.bundleId).catch(()=>{}
)),
this._storefrontCountryCode = this.storefrontCountryCode,
this.whenAuthCompleted = Promise.resolve(),
isNodeEnvironment$1() || (this._processLocationHash(window.location.hash),
"cookie" !== this.persist || (null == s ? void 0 : s.disableAuthBridge) || (this.authBridgeApp = new AuthBridgeApp,
this.authBridgeApp.authClearedFromOtherFrame = this.revokeUserToken.bind(this),
this.whenAuthCompleted = this.authBridgeApp.whenAuthCompleted.then(()=>{
this.userToken = this._getStorageItem(Zi.USER_TOKEN) || void 0
}
)))
}
get authorizationStatus() {
return this._authorizationStatus
}
set authorizationStatus(e) {
this._authorizationStatus !== e && (this._getIsActiveSubscription.updateCache(void 0),
this.dispatchEvent(es.authorizationStatusWillChange, {
authorizationStatus: this._authorizationStatus,
newAuthorizationStatus: e
}),
this._authorizationStatus = e,
this.dispatchEvent(es.authorizationStatusDidChange, {
authorizationStatus: e
}))
}
get cid() {
if (!this._cids[this.cidNamespace]) {
const e = this._getStorageItem(this.cidNamespace);
this._cids[this.cidNamespace] = e || void 0
}
return this._cids[this.cidNamespace]
}
set cid(e) {
e ? this._setStorageItem(this.cidNamespace, e) : this._removeStorageItem(this.cidNamespace),
this._cids[this.cidNamespace] = e
}
eligibleForSubscribeView() {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = yield this.hasMusicSubscription();
return (!this.hasAuthorized || this.hasAuthorized && !e) && !this._dispatchedSubscribeView
}
))
}
get hasAuthorized() {
return this.authorizationStatus > Wi.DENIED
}
get logoutURL() {
return this.iTunesBuyBase + "/account/web/logout"
}
get parentalControls() {
return this._parentalControls
}
set parentalControls(e) {
this._parentalControls = e,
e && (0 === this.realm ? this.restrictedEnabled = e.musicParentalControlsEnabled : 2 === this.realm && e.videoContentRestrictions && (this.authorizationStatus = Wi.RESTRICTED))
}
get _pldfltcid() {
return this._cids[Zi.DEFAULT_CID]
}
set _pldfltcid(e) {
this._cids[Zi.DEFAULT_CID] = e
}
get privacyAcknowledgements() {
return this._privacyAcknowledgements
}
set privacyAcknowledgements(e) {
if (this._privacyAcknowledgements = e,
!e)
return this._gdprVersion = -1,
void (this._needsGDPR = void 0);
this.bundleId && (this._gdprVersion = e[this.bundleId] || 0,
this._needsGDPR = this._gdprVersion < (zi[this.bundleId] || 0),
this._needsGDPR && this.dispatchEvent(es.needsGDPRDidChange, {
GDPRVersion: this._gdprVersion,
needsGDPR: this._needsGDPR
}))
}
get restrictedEnabled() {
if (this.userToken && "boolean" != typeof this._restrictedEnabled) {
const e = this._getStorageItem(Zi.RESTRICTIONS_ENABLED);
if (e)
this._restrictedEnabled = "0" !== e;
else if (this._storefrontCountryCode) {
const e = ["br", "ch", "gt", "hu", "id", "in", "it", "kr", "la", "lt", "my", "ru", "sg", "tr"];
this._restrictedEnabled = -1 !== e.indexOf(this._storefrontCountryCode) || void 0
}
}
return this._restrictedEnabled
}
set restrictedEnabled(e) {
this.userToken && void 0 !== e && this._setStorageItem(Zi.RESTRICTIONS_ENABLED, e ? "1" : "0"),
this._restrictedEnabled = e,
e && (this.authorizationStatus = Wi.RESTRICTED)
}
get storefrontCountryCode() {
if (!this._storefrontCountryCode) {
const e = this._getStorageItem(Zi.STOREFRONT_COUNTRY_CODE);
this._storefrontCountryCode = (null == e ? void 0 : e.toLowerCase()) || Xi.ID
}
return this._storefrontCountryCode
}
set storefrontCountryCode(e) {
e && this.userToken ? this._setStorageItem(Zi.STOREFRONT_COUNTRY_CODE, e) : this._removeStorageItem(Zi.STOREFRONT_COUNTRY_CODE),
this._storefrontCountryCode = e,
this.dispatchEvent(es.storefrontCountryCodeDidChange, {
storefrontCountryCode: e
})
}
get storefrontIdentifier() {
return this._storefrontIdentifier
}
set storefrontIdentifier(e) {
this._storefrontIdentifier = e,
this.dispatchEvent(es.storefrontIdentifierDidChange, {
storefrontIdentifier: e
})
}
runTokenValidations(e, s=!0) {
e && validateToken(e) ? (s && this._setStorageItem(Zi.USER_TOKEN, e),
this.authorizationStatus = this.restrictedEnabled ? Wi.RESTRICTED : Wi.AUTHORIZED) : (this._removeStorageItem(Zi.USER_TOKEN),
this.authorizationStatus = Wi.NOT_DETERMINED)
}
wrapDynamicUserTokenForChanges(e, s=invoke(e)) {
if ("function" != typeof e)
return e;
let n = s;
return ()=>{
const s = invoke(e);
return n !== s && (n = s,
this.runTokenValidations(s, !1),
this.dispatchEvent(es.userTokenDidChange, {
userToken: s
})),
s || ""
}
}
get dynamicUserToken() {
return this._dynamicUserToken
}
set dynamicUserToken(e) {
const s = invoke(e);
this._dynamicUserToken = this.wrapDynamicUserTokenForChanges(e, s),
this.runTokenValidations(s, "function" != typeof e),
this.dispatchEvent(es.userTokenDidChange, {
userToken: s
})
}
get userToken() {
return invoke(this.dynamicUserToken)
}
set userToken(e) {
this.dynamicUserToken = e
}
get userTokenIsValid() {
return validateToken(this.userToken)
}
deeplinkURL(e={}) {
return "https://finance-app.itunes.apple.com/deeplink?" + buildQueryParams(e = Object.assign(Object.assign({}, this.deeplinkParameters || {}), e))
}
itunesDeeplinkURL(e={
p: "browse"
}) {
return "https://itunes.apple.com/deeplink?" + buildQueryParams(e = Object.assign(Object.assign({}, this.deeplinkParameters || {}), e))
}
pldfltcid() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (!this._cids[Zi.DEFAULT_CID])
try {
yield this.infoRefresh()
} catch (e) {
return
}
return this._cids[Zi.DEFAULT_CID]
}
))
}
renewUserToken() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (!this.userToken)
return this.requestUserToken();
const e = new Headers({
Authorization: "Bearer " + this.developerToken,
Accept: "application/json",
"Content-Type": "application/json",
"X-Apple-Music-User-Token": "" + this.userToken
})
, s = yield fetch(this.playBase + "/renewMusicToken", {
method: "POST",
headers: e
});
if (401 === s.status)
return yield this.revokeUserToken(),
Promise.reject(new Error("Renew token"));
const n = yield s.json();
return n["music-token"] && (this.userToken = n["music-token"]),
this.userToken
}
))
}
requestStorefrontCountryCode() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (this.authorizationStatus <= Wi.DENIED)
return Promise.reject("Not authorized: " + this.authorizationStatus);
const e = new Headers({
Authorization: "Bearer " + this.developerToken,
"Music-User-Token": this.userToken || ""
})
, s = yield fetch(this.apiBase + "/me/storefront", {
headers: e
});
if (s && !s.ok)
return this._reset(),
Promise.reject("Storefront Country Code error.");
const n = yield s.json();
if (n.errors)
return Promise.reject(n.errors);
const [d] = n.data;
return d && d.id ? (this.storefrontCountryCode = d.id,
this.storefrontCountryCode) : Promise.reject("Storefront Country Code error.")
}
))
}
requestStorefrontIdentifier() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (!this.storefrontIdentifier) {
const e = yield Storefront.inferFromLanguages(this.developerToken);
this.storefrontIdentifier = e.id
}
return this.storefrontIdentifier
}
))
}
requestUserToken() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (this._serviceSetupView.isServiceView)
return this.userToken || "";
try {
const e = yield this._serviceSetupView.load({
action: Ji.AUTHORIZE
});
this.cid = e.cid,
this.userToken = e.userToken,
this.restrictedEnabled = e.restricted
} catch (e) {
return this._reset(),
this.authorizationStatus = e,
Promise.reject(e)
}
return this.userToken
}
))
}
revokeUserToken() {
var e;
return __awaiter$1(this, void 0, void 0, (function*() {
try {
yield this._webPlayerLogout()
} catch (s) {}
null === (e = this.authBridgeApp) || void 0 === e || e.clearAuth(),
this.dispatchEvent(es.authorizationStatusWillChange, {
authorizationStatus: this.authorizationStatus,
newAuthorizationStatus: Wi.NOT_DETERMINED
}),
this._reset(),
this.dispatchEvent(es.authorizationStatusDidChange, {
authorizationStatus: this.authorizationStatus
}),
this.dispatchEvent(es.userTokenDidChange, {
userToken: this.userToken
})
}
))
}
setCids(e) {
this._cids = Object.assign(Object.assign({}, this._cids), e),
Object.keys(this._cids).forEach(e=>{
this._setStorageItem(e, this._cids[e])
}
)
}
shouldDisplayPrivacyLink(e) {
return __awaiter$1(this, void 0, void 0, (function*() {
return void 0 !== this._needsGDPR || (yield this.me()),
this._needsGDPR
}
))
}
hasMusicSubscription() {
return __awaiter$1(this, void 0, void 0, (function*() {
return !!this.hasAuthorized && this._getIsActiveSubscription()
}
))
}
_getIsActiveSubscription() {
var e;
return __awaiter$1(this, void 0, void 0, (function*() {
const s = yield this.me();
return !!(null === (e = s.subscription) || void 0 === e ? void 0 : e.active)
}
))
}
resetSubscribeViewEligibility() {
this._dispatchedSubscribeView = !1
}
presentSubscribeViewForEligibleUsers(e={}, s=!0) {
return __awaiter$1(this, void 0, void 0, (function*() {
const n = yield this.eligibleForSubscribeView();
if (!this._serviceSetupView.isServiceView && n) {
if (!s)
return this.dispatchEvent(es.eligibleForSubscribeView, e),
void (this._dispatchedSubscribeView = !0);
try {
const e = yield this._serviceSetupView.load({
action: Ji.SUBSCRIBE
});
return this._dispatchedSubscribeView = !0,
e
} catch (d) {
return this.revokeUserToken()
}
}
}
))
}
infoRefresh() {
return __awaiter$1(this, void 0, void 0, (function*() {
if (this.authorizationStatus <= Wi.DENIED)
return Promise.reject("Not authorized: " + this.authorizationStatus);
const e = new Headers({
Authorization: "Bearer " + this.developerToken,
"Music-User-Token": this.userToken || ""
});
try {
const s = yield fetch(this.iTunesBuyBase + "/account/web/infoRefresh", {
credentials: "include",
headers: e
})
, n = yield s.json();
this.setCids(n)
} catch (s) {}
}
))
}
me() {
return this.authorizationStatus <= Wi.DENIED ? Promise.reject("Not authorized: " + this.authorizationStatus) : (this._me || (this._me = new Promise((e,s)=>__awaiter$1(this, void 0, void 0, (function*() {
const n = new Headers({
Authorization: "Bearer " + this.developerToken,
"Music-User-Token": this.userToken || ""
})
, d = addQueryParamsToURL(this.apiBase + "/me/account", Object.assign({
meta: "subscription"
}, this.meParameters))
, h = yield fetch(d, {
headers: n
});
if (h && !h.ok)
return 2 !== this.realm && this._reset(),
s("Account error.");
let p = yield h.json();
if (p.errors)
return s(p.errors);
const {data: y, meta: m} = p;
if (!m || !m.subscription)
return s("Account error.");
this.storefrontCountryCode = m.subscription.storefront;
const g = {
meta: m,
subscription: m.subscription
};
y && y.length && (g.attributes = y[0].attributes);
try {
let s = yield fetch(this.iTunesBuyBase + "/account/web/info", {
credentials: "include",
headers: n
});
if (p = yield s.json(),
this.parentalControls = p.parentalControlsData,
this.privacyAcknowledgements = p.privacyAcknowledgement,
isEmpty(this.privacyAcknowledgements || {})) {
try {
yield this.infoRefresh()
} catch (v) {
e(g)
}
s = yield fetch(this.iTunesBuyBase + "/account/web/info", {
credentials: "include",
headers: n
}),
p = yield s.json(),
this.parentalControls = p.parentalControlsData,
this.privacyAcknowledgements = p.privacyAcknowledgement
}
g.info = p
} catch (bt) {
console.warn("Failed to fetch privacyAcknowledgements", bt)
}
return e(g)
}
))).then(e=>{
var s;
return this._getIsActiveSubscription.updateCache((null === (s = e.subscription) || void 0 === s ? void 0 : s.active) || !1),
this._me = null,
e
}
).catch(e=>(this._me = null,
Promise.reject(e)))),
this._me)
}
musicSubscriptionOffers(e, s=getLanguages()) {
return __awaiter$1(this, void 0, void 0, (function*() {
let n;
if (this.hasAuthorized) {
n = (yield this.me()).info.storeFrontISO3A
} else {
if (!e) {
const n = yield Storefront.inferFromLanguages(this.developerToken, s);
e = null == n ? void 0 : n.id
}
n = e && Je[e.toUpperCase()] || "USA"
}
const d = function(e="en-US") {
const s = xi[e.toLowerCase()];
if (s)
return s;
if (e.includes("-")) {
const s = e.split("-")[0]
, n = xi[s.toLowerCase()];
if (n)
return n
}
return xi["en-us"]
}(s[0])
, h = Ve[n];
if (!d || !h)
return [];
const p = new Headers({
"X-Apple-Store-Front": `${h}-${d},8`
});
this.userToken && (p.set("Authorization", "Bearer " + this.developerToken),
p.set("Music-User-Token", this.userToken));
const y = yield fetch(this.iTunesBuyBase + "/commerce/web/subscription/offers/music", {
headers: p
});
if (!y.ok)
return Promise.reject(y.status);
return (yield y.json()).offers
}
))
}
_getStorageItem(e) {
if (e)
return "cookie" === this.persist ? getCookie(e) : "localstorage" === this.persist ? this.storage.getItem(`${this.storagePrefix}.${e}`) : void 0
}
_processLocationHash(e) {
const s = /^\#([a-zA-Z0-9+\/]{200,}={0,2})$/;
if (s.test(e)) {
const d = e.replace(s, "$1");
try {
const {itre: e, musicUserToken: s, cid: n} = JSON.parse(atob(d));
this.restrictedEnabled = e && "1" === e,
this.userToken = s,
this.cid = n
} catch (n) {}
history.replaceState(null, document.title, " ")
}
}
_removeStorageItem(e) {
if ("cookie" === this.persist)
this._removeCookieFromDomains(e);
else if ("localstorage" === this.persist)
return this.storage.removeItem(`${this.storagePrefix}.${e}`)
}
_removeCookieFromDomains(e, s=window) {
removeCookie(e);
const {hostname: n} = s.location
, d = n.split(".");
if (d.length && (d.shift(),
d.length > 2))
for (let h = d.length; h > 2; h--) {
const n = d.join(".");
d.shift(),
removeCookie(e, s, n)
}
}
_reset(e=Wi.NOT_DETERMINED) {
this._authorizationStatus = e,
this._cids = {},
this._dispatchedSubscribeView = !1,
this._restrictedEnabled = void 0,
this._storefrontCountryCode = void 0,
this._getIsActiveSubscription.updateCache(void 0),
Object.keys(Hi).forEach(e=>{
this._removeStorageItem(Hi[e])
}
),
this._removeStorageItem(Zi.RESTRICTIONS_ENABLED),
this._removeStorageItem(Zi.USER_TOKEN),
this._removeStorageItem(Zi.STOREFRONT_COUNTRY_CODE),
this._dynamicUserToken = void 0,
this._me = null,
this.privacyAcknowledgements = void 0
}
_setStorageItem(e, s) {
var n;
return "cookie" === this.persist ? (null === (n = this.authBridgeApp) || void 0 === n || n.setCookieItem(e, s),
setCookie(e, s, "/", 180)) : "localstorage" === this.persist ? this.storage.setItem(`${this.storagePrefix}.${e}`, s) : void 0
}
_webPlayerLogout() {
return __awaiter$1(this, void 0, void 0, (function*() {
const e = new Headers({
Authorization: "Bearer " + this.developerToken,
Accept: "application/json",
"Content-Type": "application/json",
"X-Apple-Music-User-Token": "" + this.userToken
});
e.delete("X-Apple-Music-User-Token"),
e.append("Music-User-Token", this.userToken || "");
const s = yield fetch(this.logoutURL, {
method: "POST",
headers: e,
credentials: "include"
});
return s && !s.ok ? Promise.reject(s.status) : s.json()
}
))
}
}
!function(e, s, n, d) {
var h, p = arguments.length, y = p < 3 ? s : null === d ? d = Object.getOwnPropertyDescriptor(s, n) : d;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate)
y = Reflect.decorate(e, s, n, d);
else
for (var m = e.length - 1; m >= 0; m--)
(h = e[m]) && (y = (p < 3 ? h(y) : p > 3 ? h(s, n, y) : h(s, n)) || y);
p > 3 && y && Object.defineProperty(s, n, y)
}([((e=300)=>(s,n,d)=>{
if (void 0 === d || "function" != typeof d.value)
throw new TypeError(`Only methods can be decorated with @CachedResult, but ${n} is not a method.`);
return {
configurable: !0,
get() {
const s = d.value
, h = 1e3 * e;
let p, y = -1;
function cachedResultMethod(...e) {
return __awaiter$2(this, void 0, void 0, (function*() {
const n = Date.now();
return (void 0 === p || -1 === y || y > 0 && n > y + h) && (y = n,
p = yield s.apply(this, e)),
p
}
))
}
return cachedResultMethod.updateCache = function(e) {
y = Date.now(),
p = e
}
,
cachedResultMethod.getCachedValue = ()=>p,
Object.defineProperty(this, n, {
value: cachedResultMethod,
configurable: !0,
writable: !0
}),
cachedResultMethod
}
}
}
)(900), __metadata$1("design:type", Function), __metadata$1("design:paramtypes", []), __metadata$1("design:returntype", Promise)], StoreKit.prototype, "_getIsActiveSubscription", null);
const rs = {
audioTrackAdded: "audioTrackAdded",
audioTrackChanged: "audioTrackChanged",
audioTrackRemoved: "audioTrackRemoved",
bufferedProgressDidChange: "bufferedProgressDidChange",
drmUnsupported: "drmUnsupported",
forcedTextTrackChanged: "forcedTextTrackChanged",
mediaCanPlay: "mediaCanPlay",
mediaElementCreated: "mediaElementCreated",
mediaPlaybackError: "mediaPlaybackError",
nowPlayingItemDidChange: "nowPlayingItemDidChange",
nowPlayingItemWillChange: "nowPlayingItemWillChange",
metadataDidChange: "metadataDidChange",
playbackBitrateDidChange: "playbackBitrateDidChange",
playbackDurationDidChange: "playbackDurationDidChange",
playbackProgressDidChange: "playbackProgressDidChange",
playbackRateDidChange: "playbackRateDidChange",
playbackStateDidChange: "playbackStateDidChange",
playbackStateWillChange: "playbackStateWillChange",
playbackTargetAvailableDidChange: "playbackTargetAvailableDidChange",
playbackTargetIsWirelessDidChange: "playbackTargetIsWirelessDidChange",
playbackTimeDidChange: "playbackTimeDidChange",
playbackVolumeDidChange: "playbackVolumeDidChange",
playerTypeDidChange: "playerTypeDidChange",
presentationModeDidChange: "presentationModeDidChange",
primaryPlayerDidChange: "primaryPlayerDidChange",
textTrackAdded: "textTrackAdded",
textTrackChanged: "textTrackChanged",
textTrackRemoved: "textTrackRemoved",
timedMetadataDidChange: "timedMetadataDidChange"
}
, ns = {
configured: "musickitconfigured",
loaded: "musickitloaded",
audioTrackAdded: rs.audioTrackAdded,
audioTrackChanged: rs.audioTrackChanged,
audioTrackRemoved: rs.audioTrackRemoved,
authorizationStatusDidChange: es.authorizationStatusDidChange,
authorizationStatusWillChange: es.authorizationStatusWillChange,
bufferedProgressDidChange: rs.bufferedProgressDidChange,
capabilitiesChanged: "capabilitiesChanged",
autoplayEnabledDidChange: "autoplayEnabledDidChange",
drmUnsupported: rs.drmUnsupported,
eligibleForSubscribeView: es.eligibleForSubscribeView,
forcedTextTrackChanged: rs.forcedTextTrackChanged,
mediaCanPlay: rs.mediaCanPlay,
mediaElementCreated: rs.mediaElementCreated,
mediaItemStateDidChange: k.mediaItemStateDidChange,
mediaItemStateWillChange: k.mediaItemStateWillChange,
mediaPlaybackError: rs.mediaPlaybackError,
mediaSkipAvailable: "mediaSkipAvailable",
mediaRollEntered: "mediaRollEntered",
mediaUpNext: "mediaUpNext",
metadataDidChange: rs.metadataDidChange,
needsGDPRDidChange: "needsGDPRDidChange",
nowPlayingItemDidChange: rs.nowPlayingItemDidChange,
nowPlayingItemWillChange: rs.nowPlayingItemWillChange,
playbackBitrateDidChange: rs.playbackBitrateDidChange,
playbackDurationDidChange: rs.playbackDurationDidChange,
playbackProgressDidChange: rs.playbackProgressDidChange,
playbackRateDidChange: rs.playbackRateDidChange,
playbackStateDidChange: rs.playbackStateDidChange,
playbackStateWillChange: rs.playbackStateWillChange,
playbackTargetAvailableDidChange: rs.playbackTargetAvailableDidChange,
playbackTargetIsWirelessDidChange: rs.playbackTargetIsWirelessDidChange,
playbackTimeDidChange: rs.playbackTimeDidChange,
playbackVolumeDidChange: rs.playbackVolumeDidChange,
playerTypeDidChange: rs.playerTypeDidChange,
presentationModeDidChange: rs.presentationModeDidChange,
primaryPlayerDidChange: rs.primaryPlayerDidChange,
queueIsReady: "queueIsReady",
queueItemsDidChange: "queueItemsDidChange",
queueItemForStartPosition: "queueItemForStartPosition",
queuePositionDidChange: "queuePositionDidChange",
shuffleModeDidChange: "shuffleModeDidChange",
repeatModeDidChange: "repeatModeDidChange",
storefrontCountryCodeDidChange: es.storefrontCountryCodeDidChange,
storefrontIdentifierDidChange: es.storefrontIdentifierDidChange,
textTrackAdded: rs.textTrackAdded,
textTrackChanged: rs.textTrackChanged,
textTrackRemoved: rs.textTrackRemoved,
timedMetadataDidChange: rs.timedMetadataDidChange,
userTokenDidChange: es.userTokenDidChange,
webComponentsLoaded: "musickitwebcomponentsloaded"
};
var as, ds;
function formattedSeconds(e) {
return {
hours: Math.floor(e / 3600),
minutes: Math.floor(e % 3600 / 60)
}
}
e.PlaybackStates = void 0,
(as = e.PlaybackStates || (e.PlaybackStates = {}))[as.none = 0] = "none",
as[as.loading = 1] = "loading",
as[as.playing = 2] = "playing",
as[as.paused = 3] = "paused",
as[as.stopped = 4] = "stopped",
as[as.ended = 5] = "ended",
as[as.seeking = 6] = "seeking",
as[as.waiting = 8] = "waiting",
as[as.stalled = 9] = "stalled",
as[as.completed = 10] = "completed",
e.PresentationMode = void 0,
(ds = e.PresentationMode || (e.PresentationMode = {}))[ds.pictureinpicture = 0] = "pictureinpicture",
ds[ds.inline = 1] = "inline";
const ls = "mk-player-tsid"
, cs = ["exitFullscreen", "webkitExitFullscreen", "mozCancelFullScreen", "msExitFullscreen"]
, us = ["fullscreenElement", "webkitFullscreenElement", "mozFullScreenElement", "msFullscreenElement"]
, hs = ["requestFullscreen", "webkitRequestFullscreen", "mozRequestFullScreen", "msRequestFullscreen"]
, noop = ()=>Promise.resolve()
, ps = (e=>{
if (void 0 === e)
return noop;
const s = cs.find(s=>"function" == typeof e.prototype[s]);
return "string" != typeof s ? noop : (e=self.document)=>{
var n;
return null === (n = null == e ? void 0 : e[s]) || void 0 === n ? void 0 : n.call(e)
}
}
)(HTMLDocument)
, ys = (e=>{
if (void 0 === e)
return ()=>!1;
const s = us.find(s=>s in e.prototype);
return "string" != typeof s ? ()=>!1 : (e=self.document)=>!!e[s]
}
)(HTMLDocument)
, ms = (e=>{
if (void 0 === e)
return noop;
const s = hs.find(s=>"function" == typeof e.prototype[s]);
return "string" != typeof s ? noop : e=>null == e ? void 0 : e[s]()
}
)(HTMLElement);
class Fullscreen {
constructor(e) {
this.player = e
}
exit() {
return __awaiter$3(this, void 0, void 0, (function*() {
if (this.isInFullscreen())
return this.stopDispatchingEvents(()=>this.exitFullscreen())
}
))
}
request(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
if (void 0 !== e)
return this.stopDispatchingEvents(()=>this.requestFullscreenForElement(e))
}
))
}
stopDispatchingEvents(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
return this.player.windowHandlers.stopListeningToVisibilityChanges(e)
}
))
}
exitFullscreen() {
return ps()
}
isInFullscreen() {
return ys()
}
requestFullscreenForElement(e) {
return ms(e)
}
}
class UnsupportedSeeker {
constructor() {
this.ended = !1
}
start() {
O.warn("seeker.start is not supported in this playback method")
}
end() {
O.warn("seeker.end is not supported in this playback method")
}
seekToTime(e) {
return O.warn("seekToTime is not supported in this playback method"),
Promise.resolve()
}
}
class PlayerSeeker {
constructor(e) {
this._ended = !1,
this._lastSeekedTime = -1,
this._startTime = -1,
O.debug("seeker: new"),
this._player = e
}
get ended() {
return this._ended
}
get isEngagedInPlayback() {
return this._player.isEngagedInPlayback
}
get stillPlayingSameItem() {
return this._currentItem === this._player.nowPlayingItem
}
end() {
O.debug("seeker: end"),
-1 !== this._startTime ? this._ended ? O.warn("seeker: Cannot end the same seeker twice.") : (this.dispatchStartEvent(),
this.dispatchEndEvent()) : O.warn("seeker: Cannot end a seeker before starting it.")
}
seekToTime(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
var s;
if (O.debug("seeker: seekToTime", e),
!this.ended)
return this.stillPlayingSameItem || (this._currentItem = this._player.nowPlayingItem,
this._startTime = 0),
this._lastSeekedTime = e,
s = this._player.seekToTime(e),
__awaiter$2(void 0, void 0, void 0, (function*() {
try {
return yield s
} catch (bt) {
if ("cancelled" !== bt.message)
throw bt
}
}
));
O.warn("seeker: Cannot seek once the seeker has ended")
}
))
}
start() {
O.debug("seeker: start"),
-1 === this._startTime ? (this._currentItem = this._player.nowPlayingItem,
this._startTime = this._player.currentPlaybackTime,
this._lastSeekedTime = this._startTime) : O.warn("seeker: Cannot start same seeker twice")
}
dispatch(e, s) {
this.isEngagedInPlayback ? (O.debug("seeker: dispatch", e),
this._player.dispatch(e, s)) : O.debug("seeker: do not dispatch because isEngagedInPlayback", this.isEngagedInPlayback)
}
dispatchStartEvent() {
this.stillPlayingSameItem || (this._startTime = 0,
this._lastSeekedTime = 0),
this.dispatch(et.playbackScrub, {
position: this._startTime
})
}
dispatchEndEvent() {
this._ended = !0,
this.dispatch(et.playbackScrub, {
position: this._lastSeekedTime,
endReasonType: e.PlayActivityEndReasonType.SCRUB_END
})
}
}
const {visibilityChangeEvent: gs, visibilityState: fs, unloadEventName: vs} = (()=>{
let e = "visibilitychange"
, s = "visibilityState";
void 0 !== document.mozHidden ? (e = "mozvisibilitychange",
s = "mozVisibilityState") : void 0 !== document.msHidden ? (e = "msvisibilitychange",
s = "msVisibilityState") : document.webkitHidden && (e = "webkitvisibilitychange",
s = "webkitVisibilityState");
return {
visibilityChangeEvent: e,
visibilityState: s,
unloadEventName: "onpagehide"in window ? "pagehide" : "unload"
}
}
)();
class WindowHandlers {
constructor(e, s=Fe) {
this.browser = s,
this.dispatchVisibilityChanges = !0,
this.player = e
}
activate(e=self, s=self.document) {
s.addEventListener(gs, this.visibilityChanged),
e.addEventListener("storage", this.storage, !1),
e.addEventListener(vs, this.windowUnloaded)
}
deactivate() {
document.removeEventListener(gs, this.visibilityChanged),
window.removeEventListener("storage", this.storage),
window.addEventListener(vs, this.windowUnloaded)
}
stopListeningToVisibilityChanges(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
this.dispatchVisibilityChanges = !1;
const s = yield e();
return this.dispatchVisibilityChanges = !0,
s
}
))
}
dispatch(e, s={}) {
this.player.dispatch(e, s)
}
storage({key: e, newValue: s}) {
e === ls && this.player.tsidChanged(s)
}
visibilityChanged(e) {
const s = e.target[fs];
O.log("dc visibilityState", s, e, ys()),
this.browser.isiOS && this.dispatchVisibilityChanges && ("hidden" === s ? this.dispatch(et.playerExit, {
position: this.player.currentPlaybackTime
}) : "visible" === s && this.dispatch(et.playerActivate))
}
windowUnloaded() {
this.player.isPlaying && this.dispatch(et.playerExit, {
position: this.player.currentPlaybackTime
})
}
}
__decorate$2([Bind(), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", [Object]), __metadata$2("design:returntype", void 0)], WindowHandlers.prototype, "storage", null),
__decorate$2([Bind(), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", [Event]), __metadata$2("design:returntype", void 0)], WindowHandlers.prototype, "visibilityChanged", null),
__decorate$2([Bind(), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", []), __metadata$2("design:returntype", void 0)], WindowHandlers.prototype, "windowUnloaded", null);
const {bufferedProgressDidChange: _s, mediaCanPlay: bs, mediaElementCreated: Ts, mediaPlaybackError: Es, nowPlayingItemDidChange: ks, nowPlayingItemWillChange: Ss, metadataDidChange: Ps, primaryPlayerDidChange: Is, playbackDurationDidChange: As, playbackProgressDidChange: ws, playbackStateDidChange: Rs, playbackRateDidChange: Os, playbackStateWillChange: Cs, playbackTargetAvailableDidChange: Ms, playbackTargetIsWirelessDidChange: Ds, playbackTimeDidChange: Ns, playbackVolumeDidChange: Ls} = rs
, xs = ["canplay", "durationchange", "ended", "error", "loadedmetadata", "loadstart", "pause", "play", "playing", "progress", "ratechange", "seeked", "seeking", "timeupdate", "volumechange", "waiting"]
, {ended: Us, loading: $s, paused: js, playing: Bs, seeking: Ks, stopped: Fs, waiting: Vs} = e.PlaybackStates;
class BasePlayer {
constructor(s) {
this.privateEnabled = !1,
this.siriInitiated = !1,
this.previewOnly = !1,
this._currentBufferedProgress = 0,
this._paused = !1,
this._playbackState = e.PlaybackStates.none,
this._stopped = !1,
this._playbackDidStart = !1,
this._currentPlaybackProgress = 0,
this._hasSmartPlayed = !1,
this._isPrimaryPlayer = !0,
this._playbackTargetAvailable = !1,
this._playbackTargetIsWireless = !1,
this._serial = Date.now().toString(),
this._isDestroyed = !1,
this._dispatcher = s.services.dispatcher,
this._timing = s.services.timing,
this._context = s.context || {},
this.privateEnabled = s.privateEnabled || !1,
this.siriInitiated = s.siriInitiated || !1,
this._bitrateCalculator = s.services.bitrateCalculator,
this.windowHandlers = new WindowHandlers(this),
this.fullscreen = new Fullscreen(this),
localStorage.setItem(ls, this._serial)
}
get bitrate() {
return this._bitrateCalculator.bitrate
}
get currentBufferedProgress() {
return this._currentBufferedProgress
}
set currentBufferedProgress(e) {
this._currentBufferedProgress !== e && (this._currentBufferedProgress = e,
this._dispatcher.publish(_s, {
progress: e
}))
}
get _currentDuration() {
return this._targetElement.duration
}
get _currentTime() {
var e;
const s = this._targetElement.currentTime
, n = this._buffer;
return s - (null !== (e = null == n ? void 0 : n.currentTimestampOffset) && void 0 !== e ? e : 0)
}
get currentPlaybackDuration() {
const s = this.nowPlayingItem
, n = (null == s ? void 0 : s.playbackType) === e.PlaybackType.encryptedFull || (null == s ? void 0 : s.playbackType) === e.PlaybackType.unencryptedFull
, d = null == s ? void 0 : s.playbackDuration;
return n && d ? this._timing.time(d / 1e3) : this._timing.time(this._currentDuration)
}
get currentPlaybackTime() {
const e = void 0 === this.nowPlayingItem || void 0 === this.nowPlayingItem.playEvent || this._hasSmartPlayed ? this._currentTime : this.nowPlayingItem.playEvent.playCursorInSeconds;
return this._timing.time(e)
}
get currentPlaybackTimeRemaining() {
return this.currentPlaybackDuration - this.currentPlaybackTime
}
get currentPlaybackProgress() {
return this._currentPlaybackProgress || 0
}
set currentPlaybackProgress(e) {
this._currentPlaybackProgress !== e && (this._currentPlaybackProgress = e,
this._dispatcher.publish(ws, {
progress: e
}))
}
get formattedCurrentPlaybackDuration() {
return formattedSeconds(this.currentPlaybackDuration)
}
get hasMediaElement() {
return this._targetElement instanceof HTMLElement && null !== this._targetElement.parentNode
}
get isEngagedInPlayback() {
return !this._stopped && !this.isPaused()
}
get isPlaying() {
return this.playbackState === Bs
}
get isPrimaryPlayer() {
return this._isPrimaryPlayer
}
set isPrimaryPlayer(e) {
e !== this._isPrimaryPlayer && (this._isPrimaryPlayer = e,
this._isPrimaryPlayer ? localStorage.setItem(ls, this._serial) : (this._dispatcher.publish(Is, {
target: this
}),
this.pause({
userInitiated: !1
})))
}
get isReady() {
return 0 !== this._targetElement.readyState
}
get nowPlayingItem() {
return this._nowPlayingItem
}
set nowPlayingItem(e) {
this._hasSmartPlayed = !1;
const s = this._dispatcher;
if (void 0 === e)
return this._nowPlayingItem = e,
void s.publish(ks, {
item: e
});
const n = this._nowPlayingItem
, d = this._buffer;
(null == n ? void 0 : n.isEqual(e)) || (s.publish(Ss, {
item: e
}),
this.isPlaying && (null == d ? void 0 : d.currentItem) !== e && this._pauseMedia(),
n && (O.debug("setting state to ended on ", n.title),
n.state = D.ended,
n.endMonitoringStateDidChange(),
n.endMonitoringStateWillChange()),
this._nowPlayingItem = e,
O.debug("setting state to playing on ", e.title),
e.state = D.playing,
e && e.info && this._setTargetElementTitle(e.info),
s.publish(ks, {
item: e
}),
s.publish(As, {
currentTarget: this._targetElement,
duration: this.currentPlaybackDuration,
target: this._targetElement,
type: "durationchange"
}))
}
get playbackRate() {
return this._targetElement.playbackRate
}
set playbackRate(e) {
this._targetElement.playbackRate = e
}
get playbackState() {
return this._playbackState
}
set playbackState(e) {
const s = this._playbackState;
if (e === s)
return;
const n = {
oldState: s,
state: e,
nowPlayingItem: this.nowPlayingItem ? {
id: this.nowPlayingItem.id,
type: this.nowPlayingItem.type
} : void 0
};
O.debug("BasePlayer.playbackState is changing", n),
this._dispatcher.publish(Cs, n),
this._playbackState = e,
this._dispatcher.publish(Rs, n)
}
get playbackTargetAvailable() {
return void 0 !== window.WebKitPlaybackTargetAvailabilityEvent && this._playbackTargetAvailable
}
set playbackTargetAvailable(e) {
e !== this._playbackTargetAvailable && (this._playbackTargetAvailable = e,
this._dispatcher.publish(Ms, {
available: e
}))
}
get playbackTargetIsWireless() {
return void 0 !== window.WebKitPlaybackTargetAvailabilityEvent && this._playbackTargetIsWireless
}
set playbackTargetIsWireless(e) {
e !== this._playbackTargetIsWireless && (this._playbackTargetIsWireless = e,
this._dispatcher.publish(Ds, {
playing: e
}))
}
get volume() {
return this._targetElement.volume
}
set volume(e) {
this._targetElement.volume = e
}
get isDestroyed() {
return this._isDestroyed
}
clearNextManifest() {
var e;
null === (e = this._buffer) || void 0 === e || e.clearNextManifest()
}
initialize() {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("BasePlayer.initialize"),
this.isPlayerSupported() ? (yield this.initializeMediaElement(),
yield this.initializeExtension(),
this.initializeEventHandlers(),
this._dispatcher.publish(Ts, this._targetElement)) : O.warn("{this.constructor.name} not supported")
}
))
}
initializeEventHandlers() {
if (this.windowHandlers.activate(),
!this.hasMediaElement)
return;
const e = this._targetElement;
window.WebKitPlaybackTargetAvailabilityEvent && (e.addEventListener("webkitplaybacktargetavailabilitychanged", e=>{
this.playbackTargetAvailable = "available" === e.availability
}
),
e.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", e=>{
this.playbackTargetIsWireless = e.target === this._targetElement && !this.playbackTargetIsWireless
}
)),
xs.forEach(s=>e.addEventListener(s, this)),
this.dispatch(et.playerActivate, {
isPlaying: this.isPlaying
})
}
removeEventHandlers() {
xs.forEach(e=>this._targetElement.removeEventListener(e, this)),
this.windowHandlers.deactivate()
}
isPaused() {
return this._paused
}
exitFullscreen() {
return this.fullscreen.exit()
}
requestFullscreen(e) {
return this.fullscreen.request(e)
}
seekToTime(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
const s = this._buffer;
if (s) {
O.debug("Doing buffer seek to", e);
if (!(yield s.seek(e)))
return
} else
O.debug("Doing media element seek to", e),
this._targetElement.currentTime = e
}
))
}
newSeeker() {
var e;
return null === (e = this._seeker) || void 0 === e || e.end(),
this._seeker = new PlayerSeeker(this),
this._seeker
}
stop(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("BasePlayer.stop", e),
yield this._waitForPendingPlay(),
this.isPlaying && this.dispatch(et.playbackStop, Object.assign({
position: this.currentPlaybackTime,
startPosition: this._initialBufferPosition || 0
}, e)),
yield this.stopMediaAndCleanup()
}
))
}
stopMediaAndCleanup(e=Fs) {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("stopMediaAndCleanup"),
yield this._stopMediaElement(),
this._stopped = !0,
this._paused = !1,
this.nowPlayingItem = void 0,
this._initialBufferPosition = void 0,
this.playbackState = e
}
))
}
_calculatePlaybackProgress() {
this.currentPlaybackProgress = Math.round(100 * (this.currentPlaybackTime / this.currentPlaybackDuration || 0)) / 100
}
destroy() {
var e, s;
if (O.debug("BasePlayer.destroy"),
this._isDestroyed = !0,
!this.hasMediaElement)
return;
const n = this._targetElement;
null === (e = this.extension) || void 0 === e || e.destroy(n),
this.removeEventHandlers(),
this.cleanupElement(),
null === (s = n.parentNode) || void 0 === s || s.removeChild(n)
}
handleEvent(s) {
return __awaiter$3(this, void 0, void 0, (function*() {
switch ("timeupdate" !== s.type && O.debug("BasePlayer.handleEvent: ", s.type, s, this.isPaused(), this._stopped),
s.type) {
case "canplay":
this._dispatcher.publish(bs, s),
this.handleSmartPlay(),
this._playbackState !== e.PlaybackStates.waiting || this._targetElement.paused || (this.playbackState = e.PlaybackStates.playing);
break;
case "durationchange":
this._targetElement.duration !== 1 / 0 && (s.duration = this.currentPlaybackDuration,
this._dispatcher.publish(As, s),
this._calculatePlaybackProgress());
break;
case "ended":
{
if (O.debug('media element "ended" event'),
this.isElementCleaned()) {
O.debug('media element already cleaned, ignoring "ended" event');
break
}
const s = this._targetElement.currentTime;
yield this.stopMediaAndCleanup(Us),
this.dispatch(et.playbackStop, {
position: s,
endReasonType: e.PlayActivityEndReasonType.NATURAL_END_OF_TRACK
});
break
}
case "error":
O.error("Playback Error", s),
this._dispatcher.publish(Es, new MKError(MKError.MEDIA_PLAYBACK,"Playback Error"));
break;
case "loadedmetadata":
this._dispatcher.publish(Ps, s);
break;
case "loadstart":
this.playbackState = $s;
break;
case "pause":
this.playbackState = this._stopped ? Fs : js;
break;
case "play":
case "playing":
this._paused = !1,
this._stopped = !1,
this.isPrimaryPlayer = !0,
this.playbackState = Bs;
break;
case "progress":
{
const e = this._targetElement.buffered;
this.handleBufferStart(),
1 === e.length && 0 === e.start(0) && (this.currentBufferedProgress = Math.round(e.end(0) / this.currentPlaybackDuration * 100));
break
}
case "ratechange":
this._dispatcher.publish(Os, s);
break;
case "seeked":
this._stopped ? this.playbackState = Fs : this._paused ? this.playbackState = js : this.playbackState !== Us && (this.playbackState = Bs);
break;
case "seeking":
this.playbackState === js ? this._paused = !0 : this.playbackState === Fs && (this._stopped = !0),
this.playbackState !== Us && (this.playbackState = Ks);
break;
case "timeupdate":
{
this._dispatcher.publish(Ns, {
currentPlaybackDuration: this.currentPlaybackDuration,
currentPlaybackTime: this.currentPlaybackTime,
currentPlaybackTimeRemaining: this.currentPlaybackTimeRemaining
}),
this._calculatePlaybackProgress();
const e = this._buffer;
e && (e.currentTime = this.currentPlaybackTime);
break
}
case "volumechange":
this._dispatcher.publish(Ls, s);
break;
case "waiting":
this.playbackState = Vs
}
}
))
}
handleBufferStart() {
const {_targetElement: e} = this;
void 0 !== this._initialBufferPosition || e.paused || 0 === e.buffered.length || (this._initialBufferPosition = e.buffered.start(0),
O.debug("BasePlayer.handleBufferStart: setting initial buffer position ", this._initialBufferPosition))
}
handleSmartPlay() {
if (!this._targetElement || !this.nowPlayingItem)
return;
const e = this.nowPlayingItem;
e && e.playEvent && !e.playEvent.isDone && !this._hasSmartPlayed && (O.debug("BasePlayer.handleSmartPlay is resuming playCursor"),
this._targetElement.currentTime = e.playEvent.playCursorInSeconds),
this._hasSmartPlayed = !0
}
pause(e={}) {
return __awaiter$3(this, void 0, void 0, (function*() {
yield this._waitForPendingPlay(),
this.isPlaying && (yield this._pauseMedia(),
this._paused = !0,
this.dispatch(et.playbackPause, Object.assign({
position: this.currentPlaybackTime
}, e)))
}
))
}
play(e=!0) {
return __awaiter$3(this, void 0, void 0, (function*() {
if (O.debug("BasePlayer.play()"),
this.nowPlayingItem)
try {
const afterPlay = ()=>{
O.debug("BasePlayer.play dispatching playbackPlay"),
this.dispatch(et.playbackPlay, {
userInitiated: e,
position: this.currentPlaybackTime
})
}
;
yield this._playMedia(afterPlay)
} catch (bt) {
return void ("NotAllowedError" !== bt.name && "NotSupportedError" !== bt.name || O.error("BasePlayer.play() rejected due to", bt))
}
}
))
}
preload() {
return this._loadMedia()
}
showPlaybackTargetPicker() {
this.playbackTargetAvailable && this._targetElement.webkitShowPlaybackTargetPicker()
}
dispatch(e, s={}) {
void 0 === s.item && (s.item = this.nowPlayingItem),
void 0 === s.position && (s.position = this.currentPlaybackTime),
s.isPlaying = this.isPlaying,
this._dispatcher.publish(e, s)
}
tsidChanged(e) {
void 0 !== e && "" !== e && (this.isPrimaryPlayer = e === this._serial)
}
_waitForPendingPlay() {
return __awaiter$3(this, void 0, void 0, (function*() {
if (this._playPromise)
try {
yield this._playPromise
} catch (bt) {
O.error("BasePlayer._waitForPendingPlay playPromise rejected", bt)
} finally {
this._playPromise = void 0
}
}
))
}
_loadMedia() {
return O.debug("BasePlayer._loadMedia", this._targetElement),
this._targetElement.load(),
Promise.resolve()
}
_pauseMedia() {
return this._targetElement.pause(),
Promise.resolve()
}
_playAssetURL(e, s) {
O.debug("BasePlayer._playAssetURL", e),
this._targetElement.src = e;
const n = this._loadMedia();
return s ? (O.debug("BasePlayer.loadOnly"),
n) : this._playMedia()
}
playItemFromUnencryptedSource(e, s, n) {
return (null == n ? void 0 : n.startTime) && (e += "#t=" + n.startTime),
this._playAssetURL(e, s)
}
_playMedia(e=n) {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("BasePlayer._playMedia", this._targetElement, this.extension);
const s = this._targetElement.play().then(e=>(this._playbackDidStart = !0,
e));
this._playPromise = s.then(e),
yield s
}
))
}
_setTargetElementTitle(e) {
this.hasMediaElement && (this._targetElement.title = e)
}
_licenseError() {
this._playPromise = void 0
}
_stopMediaElement() {
return __awaiter$3(this, void 0, void 0, (function*() {
this.hasMediaElement && (this._targetElement.pause(),
this.cleanupElement())
}
))
}
cleanupElement() {
const e = this._targetElement;
e && !this.isElementCleaned() && (e.currentTime = 0,
e.removeAttribute("src"),
e.removeAttribute("title"))
}
isElementCleaned() {
const e = this._targetElement;
return !e || 0 === e.currentTime && "" === e.src && "" === e.title
}
}
__decorate$2([AsyncDebounce(250), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", [Number]), __metadata$2("design:returntype", Promise)], BasePlayer.prototype, "seekToTime", null);
const Hs = {
app: {},
features: {},
urls: {}
};
var zs, qs, Ws;
function restoreSelectedTrack(e, s) {
O.debug("MEDIA_TRACKS restoreSelectedTrack");
const n = e.getPersistedTrack()
, d = e.fields
, h = s.currentTrack;
if (!n)
return void O.debug("MEDIA_TRACKS no persisted track");
if (h && trackEquals(h, n, d))
return void O.debug("MEDIA_TRACKS persisted track is equal to current track, not setting");
const p = s.tracks;
if (p && p.length)
for (let y = 0; y < p.length; y++) {
const e = p[y];
if (O.debug(`MEDIA_TRACKS testing track ${e.label} against persisted track ${JSON.stringify(n)}`),
trackEquals(e, n, d)) {
O.debug("MEDIA_TRACKS found matching track " + e.label),
s.currentTrack = e;
break
}
}
}
function trackEquals(e, s, n) {
let d = !0;
for (let h = 0; h < n.length; h++) {
const p = n[h];
if (e[p] !== s[p]) {
d = !1;
break
}
}
return d
}
!function(e) {
e.playbackLicenseError = "playbackLicenseError",
e.playbackSessionError = "playbackSessionError",
e.manifestParsed = "manifestParsed",
e.audioCodecIdentified = "audioCodecIdentified",
e.audioTracksSwitched = "audioTracksSwitched",
e.audioTracksUpdated = "audioTracksUpdated",
e.textTracksSwitched = "textTracksSwitched",
e.textTracksUpdated = "textTracksUpdated",
e.levelUpdated = "levelUpdated"
}(zs || (zs = {})),
function(e) {
e.MP4 = "audio/mp4",
e.AVC1 = "video/mp4"
}(qs || (qs = {})),
function(e) {
e.WIDEVINE = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
e.PLAYREADY = "com.microsoft.playready",
e.FAIRPLAY = "com.apple.streamingkeydelivery"
}(Ws || (Ws = {}));
class TrackPersistence {
constructor(e, s) {
this.storageKey = e,
this.fields = s
}
getPersistedTrack() {
if (!window || !window.localStorage)
return !1;
const e = window.localStorage.getItem(this.storageKey) || "";
try {
return JSON.parse(e)
} catch (bt) {
return O.warn("MEDIA_TRACK could not parse persisted value " + e),
!1
}
}
setPersistedTrack(e) {
if (!window || !window.localStorage)
return;
if (O.debug(`MEDIA_TRACK setPersistedTrack ${e.language},${e.label},${e.kind} with keys ${this.fields}`),
!e)
return void window.localStorage.setItem(this.storageKey, "");
const s = JSON.stringify(this.extractFieldValuesFromTrack(e));
O.debug("MEDIA_TRACK Extracted values " + s),
window.localStorage.setItem(this.storageKey, s)
}
extractFieldValuesFromTrack(e) {
const s = {};
return this.fields.forEach(n=>{
const d = e[n];
null == d && O.warn(`MEDIA_TRACK No value for field ${n} on track ${JSON.stringify(e)}`),
s[n] = d
}
),
s
}
}
const {audioTrackAdded: Ys, audioTrackChanged: Gs, audioTrackRemoved: Qs} = rs
, {audioTracksSwitched: Js, audioTracksUpdated: Xs} = zs;
class AudioTrackManager {
constructor(e, s, n) {
if (this.mediaElement = e,
this.dispatcher = s,
this.extensionTracks = n,
this._extensionTracks = [],
this.trackPersistence = new TrackPersistence("mk-audio-track",["label", "language", "kind"]),
this.extensionTracks) {
O.debug("MEDIA_TRACK Initializing audio track manager for hls track events"),
this.onExtensionAudioTracksUpdated = this.onExtensionAudioTracksUpdated.bind(this),
this.onExtensionAudioTrackSwitched = this.onExtensionAudioTrackSwitched.bind(this);
const e = this.extensionTracks;
e.addEventListener(Xs, this.onExtensionAudioTracksUpdated),
e.addEventListener(Js, this.onExtensionAudioTrackSwitched)
} else {
if (!e.audioTracks)
return;
O.debug("MEDIA_TRACK Initializing audio track manager for native track events"),
this.onAudioTrackAdded = this.onAudioTrackAdded.bind(this),
this.onAudioTrackChanged = this.onAudioTrackChanged.bind(this),
this.onAudioTrackRemoved = this.onAudioTrackRemoved.bind(this),
e.audioTracks.addEventListener("addtrack", this.onAudioTrackAdded),
e.audioTracks.addEventListener("change", this.onAudioTrackChanged),
e.audioTracks.addEventListener("removetrack", this.onAudioTrackRemoved)
}
}
get currentTrack() {
return this.tracks.find(e=>e.enabled)
}
set currentTrack(e) {
e && (O.debug("MEDIA_TRACK Setting audio track " + e.label),
this.extensionTracks ? (O.debug(`MEDIA_TRACK Setting track on extension ${e.id}-${e.label}`),
this.extensionTracks.audioTrack = e) : (O.debug("MEDIA_TRACK disabling all audio tracks"),
Array.from(this.mediaElement.audioTracks).forEach(s=>{
s !== e && (s.enabled = !1)
}
),
O.debug("MEDIA_TRACK enabling", e),
e.enabled = !0),
this.trackPersistence.setPersistedTrack(e))
}
get tracks() {
return this.extensionTracks ? this._extensionTracks || this.extensionTracks.audioTracks || [] : Array.from(this.mediaElement.audioTracks)
}
destroy() {
if (this.extensionTracks) {
const e = this.extensionTracks;
e.removeEventListener(Xs, this.onExtensionAudioTracksUpdated),
e.removeEventListener(Js, this.onExtensionAudioTrackSwitched)
} else {
if (!this.mediaElement.audioTracks)
return;
this.mediaElement.audioTracks.removeEventListener("addtrack", this.onAudioTrackAdded),
this.mediaElement.audioTracks.removeEventListener("change", this.onAudioTrackChanged),
this.mediaElement.audioTracks.removeEventListener("removetrack", this.onAudioTrackRemoved)
}
}
restoreSelectedTrack() {
return restoreSelectedTrack(this.trackPersistence, this)
}
onExtensionAudioTracksUpdated(e) {
O.debug("MEDIA_TRACK Extension audio tracks updated " + JSON.stringify(e)),
this._extensionTracks = e,
this.restoreSelectedTrack(),
this.dispatcher.publish(Ys, e)
}
onExtensionAudioTrackSwitched(e) {
if (O.debug("MEDIA_TRACK Extension audio track switched " + JSON.stringify(e)),
this._extensionTracks) {
const preserveSelectedTrack = s=>{
s.enabled = e.selectedId === s.id
}
;
this._extensionTracks.forEach(preserveSelectedTrack)
}
this.dispatcher.publish(Gs, e)
}
onAudioTrackAdded(e) {
!function(e, s, n) {
const d = s.getPersistedTrack();
d && trackEquals(e, d, s.fields) && (O.debug("MEDIA_TRACK onTrackAdded with track that matches persisted track " + e.label),
n.currentTrack = e)
}(e.track, this.trackPersistence, this),
this.dispatcher.publish(Ys, e)
}
onAudioTrackChanged(e) {
this.dispatcher.publish(Gs, e)
}
onAudioTrackRemoved(e) {
this.dispatcher.publish(Qs, e)
}
}
const Zs = document.createElement("video")
, er = []
, tr = [];
function deferPlayback() {
fillAvailableElements("audio", tr),
fillAvailableElements("video", er),
O.debug(`dom-helpers: defer playback called. There are ${er.length} available video elements and ${tr.length} available audio elements.`)
}
function fillAvailableElements(e, s) {
let n = 100 - s.length;
for (; n > 0; ) {
const d = document.createElement(e);
d.load(),
s.push(d),
n--
}
}
var ir = createCommonjsModule((function(e, s) {
Object.defineProperty(s, "__esModule", {
value: !0
}),
s.isValidPercentValue = function(e) {
return "number" == typeof e && e >= 0 && e <= 100
}
,
s.isValidAlignSetting = function(e) {
return "string" == typeof e && ["start", "center", "end", "left", "right", "middle"].includes(e)
}
,
s.isValidDirectionSetting = function(e) {
return "string" == typeof e && ["", "rl", "lr"].includes(e)
}
,
s.isValidLineAndPositionSetting = function(e) {
return "number" == typeof e || "auto" === e
}
,
s.isValidLineAlignSetting = function(e) {
return "string" == typeof e && ["start", "center", "end"].includes(e)
}
,
s.isValidPositionAlignSetting = function(e) {
return "string" == typeof e && ["line-left", "center", "line-right", "auto", "left", "start", "middle", "end", "right"].includes(e)
}
,
s.isValidScrollSetting = function(e) {
return ["", "up"].includes(e)
}
}
));
unwrapExports(ir),
ir.isValidPercentValue,
ir.isValidAlignSetting,
ir.isValidDirectionSetting,
ir.isValidLineAndPositionSetting,
ir.isValidLineAlignSetting,
ir.isValidPositionAlignSetting,
ir.isValidScrollSetting;
var sr = createCommonjsModule((function(e, s) {
Object.defineProperty(s, "__esModule", {
value: !0
});
const n = {
"&": "&",
"<": "<",
">": ">",
"": "",
"": "",
" ": " "
}
, d = {
c: "span",
i: "i",
b: "b",
u: "u",
ruby: "ruby",
rt: "rt",
v: "span",
lang: "span"
}
, h = {
v: "title",
lang: "lang"
}
, p = {
rt: "ruby"
}
, y = {
"text-combine-upright": "-webkit-text-combine:horizontal; text-orientation: mixed;"
};
class ParserUtility {
static parseTimeStamp(e) {
function computeSeconds(e) {
const [s,n,d,h] = e.map(e=>e ? parseInt("" + e) : 0);
return 3600 * s + 60 * n + d + h / 1e3
}
const s = /^(\d+):(\d{2})(:\d{2})?\.(\d{3})/.exec(e);
return s ? s[3] ? computeSeconds([s[1], s[2], s[3].substring(1), s[4]]) : parseInt(s[1]) > 59 ? computeSeconds([s[1], s[2], null, s[4]]) : computeSeconds([null, s[1], s[2], s[4]]) : null
}
static parseContent(e, s, m) {
let g = s.text;
function nextToken() {
if (!g)
return null;
const e = /^([^<]*)(<[^>]+>?)?/.exec(g);
return s = e[1] ? e[1] : e[2],
g = g.substr(s.length),
s;
var s
}
function unescape1(e) {
return n[e]
}
function unescape(e) {
return e.replace(/&(amp|lt|gt|lrm|rlm|nbsp);/g, unescape1)
}
function shouldAdd(e, s) {
return !p[s.dataset.localName] || p[s.dataset.localName] === e.dataset.localName
}
function createElement(s, n, p) {
const g = d[s];
if (!g)
return null;
const v = e.document.createElement(g);
v.dataset.localName = g;
const _ = h[s];
if (_ && p && (v[_] = p.trim()),
n)
if (m[n]) {
const e = function(e) {
let s = "";
for (const n in e)
s += y[n] ? y[n] : n + ":" + e[n] + ";";
return s
}(m[n]);
v.setAttribute("style", e)
} else
console.info(`WebVTT: parseContent: Style referenced, but no style defined for '${n}'!`);
return v
}
const v = e.document.createElement("div")
, _ = [];
let b, T, E = v;
for (; null !== (b = nextToken()); )
if ("<" !== b[0])
E.appendChild(e.document.createTextNode(unescape(b)));
else {
if ("/" === b[1]) {
_.length && _[_.length - 1] === b.substr(2).replace(">", "") && (_.pop(),
E = E.parentNode);
continue
}
const s = ParserUtility.parseTimeStamp(b.substr(1, b.length - 2));
let n;
if (s) {
n = e.document.createProcessingInstruction("timestamp", s.toString()),
E.appendChild(n);
continue
}
if (T = /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/.exec(b),
!T)
continue;
if (n = createElement(T[1], T[2], T[3]),
!n)
continue;
if (!shouldAdd(E, n))
continue;
T[2],
_.push(T[1]),
E.appendChild(n),
E = n
}
return v
}
}
s.default = ParserUtility
}
));
unwrapExports(sr);
var rr = createCommonjsModule((function(e, s) {
var n = Y && Y.__decorate || function(e, s, n, d) {
var h, p = arguments.length, y = p < 3 ? s : null === d ? d = Object.getOwnPropertyDescriptor(s, n) : d;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate)
y = Reflect.decorate(e, s, n, d);
else
for (var m = e.length - 1; m >= 0; m--)
(h = e[m]) && (y = (p < 3 ? h(y) : p > 3 ? h(s, n, y) : h(s, n)) || y);
return p > 3 && y && Object.defineProperty(s, n, y),
y
}
;
Object.defineProperty(s, "__esModule", {
value: !0
});
let d = class {
constructor(e, s, n) {
this._id = "",
this._pauseOnExit = !1,
this._region = null,
this._vertical = "",
this._snapToLines = !0,
this._line = "auto",
this._lineAlign = "start",
this._position = "auto",
this._positionAlign = "auto",
this._size = 100,
this._align = "center",
this.hasBeenReset = !1,
this._startTime = e,
this._endTime = s,
this._text = n
}
get id() {
return this._id
}
set id(e) {
this._id = "" + e
}
get pauseOnExit() {
return this._pauseOnExit
}
set pauseOnExit(e) {
this._pauseOnExit = !!e
}
get startTime() {
return this._startTime
}
set startTime(e) {
if ("number" != typeof e)
throw new TypeError("Start time must be set to a number: " + e);
this._startTime = e,
this.hasBeenReset = !0
}
get endTime() {
return this._endTime
}
set endTime(e) {
if ("number" != typeof e)
throw new TypeError("End time must be set to a number: " + e);
this._endTime = e,
this.hasBeenReset = !0
}
get text() {
return this._text
}
set text(e) {
this._text = "" + e,
this.hasBeenReset = !0
}
get region() {
return this._region
}
set region(e) {
this._region = e,
this.hasBeenReset = !0
}
get vertical() {
return this._vertical
}
set vertical(e) {
if (!ir.isValidDirectionSetting(e))
throw new SyntaxError("An invalid or illegal string was specified for vertical: " + e);
this._vertical = e,
this.hasBeenReset = !0
}
get snapToLines() {
return this._snapToLines
}
set snapToLines(e) {
this._snapToLines = !!e,
this.hasBeenReset = !0
}
get line() {
return this._line
}
set line(e) {
if (!ir.isValidLineAndPositionSetting(e))
throw new SyntaxError("An invalid number or illegal string was specified for line: " + e);
this._line = e,
this.hasBeenReset = !0
}
get lineAlign() {
return this._lineAlign
}
set lineAlign(e) {
if (!ir.isValidLineAlignSetting(e))
throw new SyntaxError("An invalid or illegal string was specified for lineAlign: " + e);
this._lineAlign = e,
this.hasBeenReset = !0
}
get position() {
return this._position
}
set position(e) {
if (!ir.isValidLineAndPositionSetting(e))
throw new Error("Position must be between 0 and 100 or auto: " + e);
this._position = e,
this.hasBeenReset = !0
}
get positionAlign() {
return this._positionAlign
}
set positionAlign(e) {
if (!ir.isValidPositionAlignSetting(e))
throw new SyntaxError("An invalid or illegal string was specified for positionAlign: " + e);
this._positionAlign = e,
this.hasBeenReset = !0
}
get size() {
return this._size
}
set size(e) {
if (e < 0 || e > 100)
throw new Error("Size must be between 0 and 100: " + e);
this._size = e,
this.hasBeenReset = !0
}
get align() {
return this._align
}
set align(e) {
if (!ir.isValidAlignSetting(e))
throw new SyntaxError("An invalid or illegal string was specified for align: " + e);
this._align = e,
this.hasBeenReset = !0
}
getCueAsHTML() {
return sr.default.parseContent(window, this, {})
}
static create(e) {
if (!e.hasOwnProperty("startTime") || !e.hasOwnProperty("endTime") || !e.hasOwnProperty("text"))
throw new Error("You must at least have start time, end time, and text.");
const s = new this(e.startTime,e.endTime,e.text);
return Object.keys(e).forEach(n=>{
s.hasOwnProperty(n) && (s[n] = e[n])
}
),
s
}
static fromJSON(e) {
return this.create(JSON.parse(e))
}
toJSON() {
const e = {};
return Object.keys(this).forEach(s=>{
this.hasOwnProperty(s) && "getCueAsHTML" !== s && "hasBeenReset" !== s && "displayState" !== s && (e[s] = this[s])
}
),
e
}
}
;
d = n([function(e) {
let s = e;
"undefined" != typeof window && null != window.VTTCue && (s = window.VTTCue,
s.create = e.create,
s.fromJSON = e.fromJSON,
s.prototype.toJSON = e.prototype.toJSON);
return s
}
], d),
s.VTTCue = d
}
));
unwrapExports(rr),
rr.VTTCue;
var nr = createCommonjsModule((function(e, s) {
var n = Y && Y.__decorate || function(e, s, n, d) {
var h, p = arguments.length, y = p < 3 ? s : null === d ? d = Object.getOwnPropertyDescriptor(s, n) : d;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate)
y = Reflect.decorate(e, s, n, d);
else
for (var m = e.length - 1; m >= 0; m--)
(h = e[m]) && (y = (p < 3 ? h(y) : p > 3 ? h(s, n, y) : h(s, n)) || y);
return p > 3 && y && Object.defineProperty(s, n, y),
y
}
;
Object.defineProperty(s, "__esModule", {
value: !0
});
let d = class {
constructor() {
this._id = "",
this._lines = 3,
this._regionAnchorX = 0,
this._regionAnchorY = 100,
this._scroll = "",
this._viewportAnchorX = 0,
this._viewportAnchorY = 100,
this._width = 100
}
get id() {
return this._id
}
set id(e) {
if ("string" != typeof e)
throw new Error("ID must be a string.");
this._id = e
}
get lines() {
return this._lines
}
set lines(e) {
if ("number" != typeof e)
throw new TypeError("Lines must be set to a number.");
this._lines = e
}
get regionAnchorX() {
return this._regionAnchorX
}
set regionAnchorX(e) {
if (!ir.isValidPercentValue(e))
throw new TypeError("RegionAnchorX must be between 0 and 100.");
this._regionAnchorX = e
}
get regionAnchorY() {
return this._regionAnchorY
}
set regionAnchorY(e) {
if (!ir.isValidPercentValue(e))
throw new TypeError("RegionAnchorY must be between 0 and 100.");
this._regionAnchorY = e
}
get scroll() {
return this._scroll
}
set scroll(e) {
if ("string" == typeof e) {
const s = e.toLowerCase();
if (ir.isValidScrollSetting(s))
return void (this._scroll = s)
}
throw new SyntaxError("An invalid or illegal string was specified.")
}
get viewportAnchorX() {
return this._viewportAnchorX
}
set viewportAnchorX(e) {
if (!ir.isValidPercentValue(e))
throw new TypeError("ViewportAnchorX must be between 0 and 100.");
this._viewportAnchorX = e
}
get viewportAnchorY() {
return this._viewportAnchorY
}
set viewportAnchorY(e) {
if (!ir.isValidPercentValue(e))
throw new TypeError("ViewportAnchorY must be between 0 and 100.");
this._viewportAnchorY = e
}
get width() {
return this._width
}
set width(e) {
if (!ir.isValidPercentValue(e))
throw new TypeError("Width must be between 0 and 100.");
this._lines = e
}
toJSON() {
const e = {};
return Object.keys(this).forEach(s=>{
this.hasOwnProperty(s) && (e[s] = this[s])
}
),
e
}
static create(e) {
const s = new this;
return Object.keys(e).forEach(n=>{
s.hasOwnProperty(n) && (s[n] = e[n])
}
),
s
}
static fromJSON(e) {
return this.create(JSON.parse(e))
}
}
;
d = n([function(e) {
let s = e;
"undefined" != typeof window && null != window.VTTRegion && (s = window.VTTRegion,
s.create = e.create,
s.fromJSON = e.fromJSON,
s.prototype.toJSON = e.prototype.toJSON);
return s
}
], d),
s.VTTRegion = d
}
));
unwrapExports(nr),
nr.VTTRegion;
var ar = createCommonjsModule((function(e, s) {
Object.defineProperty(s, "__esModule", {
value: !0
}),
s.VTTCue = rr.VTTCue,
s.VTTRegion = nr.VTTRegion;
class ParsingError extends Error {
constructor(e, s) {
super(),
this.name = "ParsingError",
this.code = "number" == typeof e ? e : e.code,
s ? this.message = s : e instanceof ParsingError && (this.message = e.message)
}
}
s.ParsingError = ParsingError,
ParsingError.Errors = {
BadSignature: new ParsingError(0,"Malformed WebVTT signature."),
BadTimeStamp: new ParsingError(1,"Malformed time stamp.")
};
class Settings {
constructor() {
this.values = {}
}
set(e, s) {
this.get(e) || "" === s || (this.values[e] = s)
}
get(e, s, n) {
return "object" == typeof s && "string" == typeof n ? this.has(e) ? this.values[e] : s[n] : this.has(e) ? this.values[e] : s
}
has(e) {
return e in this.values
}
alt(e, s, n) {
for (let d = 0; d < n.length; ++d)
if (s === n[d]) {
this.set(e, s);
break
}
}
integer(e, s) {
/^-?\d+$/.test(s) && this.set(e, parseInt(s, 10))
}
percent(e, s) {
if (s.match(/^([\d]{1,3})(\.[\d]*)?%$/))
try {
const n = parseFloat(s);
if (n >= 0 && n <= 100)
return this.set(e, n),
!0
} catch (Ra) {
return !1
}
return !1
}
}
class WebVTTParser {
constructor(e, s, n) {
this.window = e,
this.state = "INITIAL",
this.styleCollector = "",
this.buffer = "",
this.decoder = s || new TextDecoder("utf8"),
this.regionList = [],
this.onStylesParsedCallback = n,
this._styles = {}
}
static StringDecoder() {
return {
decode: e=>{
if (!e)
return "";
if ("string" != typeof e)
throw new Error("Error - expected string data.");
return decodeURIComponent(encodeURIComponent(e))
}
}
}
reportOrThrowError(e) {
if (!(e instanceof ParsingError && "function" == typeof this.onparsingerror))
throw e;
this.onparsingerror(e)
}
parseOptions(e, s, n, d) {
const h = d ? e.split(d) : [e];
for (const p of h) {
if ("string" != typeof p)
continue;
const e = p.split(n);
if (2 !== e.length)
continue;
s(e[0], e[1])
}
}
parseCue(e, s, n) {
const d = e
, consumeTimeStamp = ()=>{
const s = sr.default.parseTimeStamp(e);
if (null === s)
throw new ParsingError(ParsingError.Errors.BadTimeStamp,"Malformed timestamp: " + d);
return e = e.replace(/^[^\sa-zA-Z-]+/, ""),
s
}
, skipWhitespace = ()=>{
e = e.replace(/^\s+/, "")
}
;
if (skipWhitespace(),
s.startTime = consumeTimeStamp(),
skipWhitespace(),
"--\x3e" !== e.substr(0, 3))
throw new ParsingError(ParsingError.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '--\x3e'): " + d);
e = e.substr(3),
skipWhitespace(),
s.endTime = consumeTimeStamp(),
skipWhitespace(),
((e,s)=>{
const d = new Settings;
this.parseOptions(e, (e,s)=>{
let h, p;
switch (e) {
case "region":
for (let h = n.length - 1; h >= 0; h--)
if (n[h].id === s) {
d.set(e, n[h].region);
break
}
break;
case "vertical":
d.alt(e, s, ["rl", "lr"]);
break;
case "line":
h = s.split(","),
p = h[0],
d.integer(e, p),
d.percent(e, p) && d.set("snapToLines", !1),
d.alt(e, p, ["auto"]),
2 === h.length && d.alt("lineAlign", h[1], ["start", "center", "end"]);
break;
case "position":
if (h = s.split(","),
d.percent(e, h[0]),
2 === h.length) {
let e = ["line-left", "line-right", "center", "auto", "left", "start", "middle", "end", "right"];
d.alt("positionAlign", h[1], e)
}
break;
case "size":
d.percent(e, s);
break;
case "align":
let y = ["start", "center", "end", "left", "right", "middle"];
d.alt(e, s, y)
}
}
, /:/, /\s/),
s.region = d.get("region", null),
s.vertical = d.get("vertical", ""),
s.line = d.get("line", void 0 === s.line ? "auto" : s.line),
s.lineAlign = d.get("lineAlign", "start"),
s.snapToLines = d.get("snapToLines", !0),
s.size = d.get("size", 100);
let h = d.get("align", "center");
s.align = "middle" === h ? "center" : h,
s.position = d.get("position", "auto");
let p = d.get("positionAlign", {
start: "start",
left: "start",
center: "center",
right: "end",
end: "end"
}, s.align);
s.positionAlign = {
start: "start",
"line-left": "start",
left: "start",
center: "center",
middle: "center",
"line-right": "end",
right: "end",
end: "end"
}[p]
}
)(e, s)
}
parseRegion(e) {
const s = new Settings;
if (this.parseOptions(e, (e,n)=>{
switch (e) {
case "id":
s.set(e, n);
break;
case "width":
s.percent(e, n);
break;
case "lines":
s.integer(e, n);
break;
case "regionanchor":
case "viewportanchor":
{
const d = n.split(",");
if (2 !== d.length)
break;
const h = new Settings;
if (h.percent("x", d[0]),
h.percent("y", d[1]),
!h.has("x") || !h.has("y"))
break;
s.set(e + "X", h.get("x")),
s.set(e + "Y", h.get("y"));
break
}
case "scroll":
s.alt(e, n, ["up"])
}
}
, /=/, /\s/),
s.has("id")) {
const e = new nr.VTTRegion;
e.width = s.get("width", 100),
e.lines = s.get("lines", 3),
e.regionAnchorX = s.get("regionanchorX", 0),
e.regionAnchorY = s.get("regionanchorY", 100),
e.viewportAnchorX = s.get("viewportanchorX", 0),
e.viewportAnchorY = s.get("viewportanchorY", 100),
e.scroll = s.get("scroll", ""),
this.onregion && this.onregion(e),
this.regionList.push({
id: s.get("id"),
region: e
})
}
}
parseStyle(e) {
const parseStyles = e=>{
const s = {}
, n = e.split(";");
for (let d = 0; d < n.length; d++)
if (n[d].includes(":")) {
const e = n[d].split(":", 2)
, h = e[0].trim()
, p = e[1].trim();
"" !== h && "" !== p && (s[h] = p)
}
return s
}
, s = e.split("}");
s.pop();
for (const n of s) {
let e = null
, s = null;
const d = n.split("{");
d[0] && (e = d[0].trim()),
d[1] && (s = parseStyles(d[1])),
e && s && (this._styles[e] = s)
}
this.onStylesParsedCallback && this.onStylesParsedCallback(this._styles)
}
parseHeader(e) {
this.parseOptions(e, (function(e, s) {
switch (e) {
case "Region":
this.parseRegion(s)
}
}
), /:/)
}
parse(e) {
e && (this.buffer += this.decoder.decode(e, {
stream: !0
}));
const collectNextLine = ()=>{
const e = this.buffer;
let s = 0;
const calculateBreakPosition = (e,s)=>{
const n = {
start: -1,
length: -1
};
if ("\r" === e[s])
n.start = s,
n.length = 1;
else if ("\n" === e[s])
n.start = s,
n.length = 1;
else if ("<" === e[s] && s + 1 < e.length && "b" === e[s + 1] && s + 2 < e.length && "r" === e[s + 2]) {
let d = s + 2;
for (; d < e.length && ">" !== e[d++]; )
;
n.start = s,
n.length = d - s
}
return n
}
;
let n = {
start: e.length,
length: 0
};
for (; s < e.length; ) {
const d = calculateBreakPosition(e, s);
if (d.length > 0) {
n = d;
break
}
++s
}
const d = e.substr(0, n.start);
return this.buffer = e.substr(n.start + n.length),
d
}
;
try {
let e;
if ("INITIAL" === this.state) {
if (!/\r\n|\n/.test(this.buffer))
return this;
e = collectNextLine();
const s = /^()?WEBVTT([ \t].*)?$/.exec(e);
if (!s || !s[0])
throw new ParsingError(ParsingError.Errors.BadSignature);
this.state = "HEADER"
}
let s = !1;
for (; this.buffer; ) {
if (!/\r\n|\n/.test(this.buffer))
return this;
switch (s ? s = !1 : e = collectNextLine(),
this.state) {
case "HEADER":
e.includes(":") ? this.parseHeader(e) : e || (this.state = "ID");
continue;
case "NOTE":
e || (this.state = "ID");
continue;
case "STYLE":
e ? this.styleCollector += e : (this.parseStyle(this.styleCollector),
this.state = "ID",
this.styleCollector = "");
continue;
case "ID":
if (/^NOTE($|[ \t])/.test(e)) {
this.state = "NOTE";
break
}
if (/^STYLE($|[ \t])/.test(e)) {
this.state = "STYLE";
break
}
if (!e)
continue;
if (this.cue = new rr.VTTCue(0,0,""),
this.state = "CUE",
!e.includes("--\x3e")) {
this.cue.id = e;
continue
}
case "CUE":
try {
this.parseCue(e, this.cue, this.regionList)
} catch (bt) {
this.reportOrThrowError(bt),
this.cue = null,
this.state = "BADCUE";
continue
}
this.state = "CUETEXT";
continue;
case "CUETEXT":
{
const n = e.includes("--\x3e");
if (!e || n) {
s = !0,
this.oncue && this.oncue(this.cue),
this.cue = null,
this.state = "ID";
continue
}
this.cue.text && (this.cue.text += "\n"),
this.cue.text += e;
continue
}
case "BADCUE":
e || (this.state = "ID");
continue
}
}
} catch (bt) {
this.reportOrThrowError(bt),
"CUETEXT" === this.state && this.cue && this.oncue && this.oncue(this.cue),
this.cue = null,
this.state = "INITIAL" === this.state ? "BADWEBVTT" : "BADCUE"
}
return this
}
flush() {
try {
if (this.buffer += this.decoder.decode(),
(this.cue || "HEADER" === this.state) && (this.buffer += "\n\n",
this.parse()),
"INITIAL" === this.state)
throw new ParsingError(ParsingError.Errors.BadSignature)
} catch (bt) {
this.reportOrThrowError(bt)
}
return this.onflush && this.onflush(),
this
}
styles() {
return this._styles
}
}
s.default = WebVTTParser,
s.WebVTTParser = WebVTTParser
}
));
unwrapExports(ar),
ar.VTTCue,
ar.VTTRegion,
ar.ParsingError,
ar.WebVTTParser;
var or = createCommonjsModule((function(e, s) {
Object.defineProperty(s, "__esModule", {
value: !0
}),
s.VTTCue = rr.VTTCue;
const n = [/^(::cue\()(\..*)(\))/, /^(::cue\()(#.*)(\))/, /^(::cue\()(c|i|b|u|ruby|rt|v|lang)(\))/]
, d = [[1470, 1470], [1472, 1472], [1475, 1475], [1478, 1478], [1488, 1514], [1520, 1524], [1544, 1544], [1547, 1547], [1549, 1549], [1563, 1563], [1566, 1610], [1645, 1647], [1649, 1749], [1765, 1766], [1774, 1775], [1786, 1805], [1807, 1808], [1810, 1839], [1869, 1957], [1969, 1969], [1984, 2026], [2036, 2037], [2042, 2042], [2048, 2069], [2074, 2074], [2084, 2084], [2088, 2088], [2096, 2110], [2112, 2136], [2142, 2142], [2208, 2208], [2210, 2220], [8207, 8207], [64285, 64285], [64287, 64296], [64298, 64310], [64312, 64316], [64318, 64318], [64320, 64321], [64323, 64324], [64326, 64449], [64467, 64829], [64848, 64911], [64914, 64967], [65008, 65020], [65136, 65140], [65142, 65276], [67584, 67589], [67592, 67592], [67594, 67637], [67639, 67640], [67644, 67644], [67647, 67669], [67671, 67679], [67840, 67867], [67872, 67897], [67903, 67903], [67968, 68023], [68030, 68031], [68096, 68096], [68112, 68115], [68117, 68119], [68121, 68147], [68160, 68167], [68176, 68184], [68192, 68223], [68352, 68405], [68416, 68437], [68440, 68466], [68472, 68479], [68608, 68680], [126464, 126467], [126469, 126495], [126497, 126498], [126500, 126500], [126503, 126503], [126505, 126514], [126516, 126519], [126521, 126521], [126523, 126523], [126530, 126530], [126535, 126535], [126537, 126537], [126539, 126539], [126541, 126543], [126545, 126546], [126548, 126548], [126551, 126551], [126553, 126553], [126555, 126555], [126557, 126557], [126559, 126559], [126561, 126562], [126564, 126564], [126567, 126570], [126572, 126578], [126580, 126583], [126585, 126588], [126590, 126590], [126592, 126601], [126603, 126619], [126625, 126627], [126629, 126633], [126635, 126651], [1114109, 1114109]];
class StyleBox {
applyStyles(e, s) {
s = s || this.div;
for (const n in e)
e.hasOwnProperty(n) && (s.style[n] = e[n])
}
formatStyle(e, s) {
return 0 === e ? "0" : e + s
}
}
s.StyleBox = StyleBox;
class CueStyleBox extends StyleBox {
constructor(e, s, n, d, h) {
super(),
this.cue = s;
let p = {
textAlign: {
start: "left",
"line-left": "left",
left: "left",
center: "center",
middle: "center",
"line-right": "right",
right: "right",
end: "right"
}[s.positionAlign] || s.align,
whiteSpace: "pre-line",
position: "absolute"
};
p.direction = this.determineBidi(this.cueDiv),
p.writingMode = this.directionSettingToWritingMode(s.vertical),
p.unicodeBidi = "plaintext",
this.div = e.document.createElement("div"),
this.applyStyles(p),
p = {
backgroundColor: d.backgroundColor,
display: "inline-block"
},
this.parseOpacity(p.backgroundColor) && (p.padding = "5px",
p.borderRadius = "5px"),
this.backgroundDiv = e.document.createElement("div"),
this.applyStyles(p, this.backgroundDiv),
p = {
color: n.color,
backgroundColor: n.backgroundColor,
textShadow: n.textShadow,
fontSize: n.fontSize,
fontFamily: n.fontFamily,
position: "relative",
left: "0",
right: "0",
top: "0",
bottom: "0",
display: "inline-block",
textOrientation: "upright"
},
p.writingMode = this.directionSettingToWritingMode(s.vertical),
p.unicodeBidi = "plaintext",
this.cueDiv = sr.default.parseContent(e, s, h),
this.applyStyles(p, this.cueDiv),
this.backgroundDiv.appendChild(this.cueDiv),
this.div.appendChild(this.backgroundDiv);
let y = 0;
if ("number" == typeof s.position) {
let e = s.positionAlign || s.align;
if (e)
switch (e) {
case "start":
case "left":
y = s.position;
break;
case "center":
case "middle":
y = s.position - s.size / 2;
break;
case "end":
case "right":
y = s.position - s.size
}
}
"" === s.vertical ? this.applyStyles({
left: this.formatStyle(y, "%"),
width: this.formatStyle(s.size, "%")
}) : this.applyStyles({
top: this.formatStyle(y, "%"),
height: this.formatStyle(s.size, "%")
})
}
determineBidi(e) {
let s, n = [], h = "";
if (!e || !e.childNodes)
return "ltr";
function pushNodes(e, s) {
for (let n = s.childNodes.length - 1; n >= 0; n--)
e.push(s.childNodes[n])
}
function nextTextNode(e) {
if (!e || !e.length)
return null;
let s = e.pop()
, n = s.textContent || s.innerText;
if (n) {
const s = /^.*(\n|\r)/.exec(n);
return s ? (e.length = 0,
s[0]) : n
}
return "ruby" === s.tagName ? nextTextNode(e) : s.childNodes ? (pushNodes(e, s),
nextTextNode(e)) : void 0
}
function isContainedInCharacterList(e, s) {
for (const n of s)
if (e >= n[0] && e <= n[1])
return !0;
return !1
}
for (pushNodes(n, e); h = nextTextNode(n); )
for (let e = 0; e < h.length; e++)
if (s = h.charCodeAt(e),
isContainedInCharacterList(s, d))
return "rtl";
return "ltr"
}
parseOpacity(e) {
if (!e || "string" != typeof e)
return null;
const s = (e = e.replace(/ /g, "").replace("rgba(", "").replace(")", "")).split(",");
return s && s.length >= 4 ? s[3] : null
}
directionSettingToWritingMode(e) {
return "" === e ? "horizontal-tb" : "lr" === e ? "vertical-lr" : "vertical-rl"
}
move(e) {
this.applyStyles({
top: this.formatStyle(e.top, "px"),
bottom: this.formatStyle(e.bottom, "px"),
left: this.formatStyle(e.left, "px"),
right: this.formatStyle(e.right, "px"),
height: this.formatStyle(e.height, "px"),
width: this.formatStyle(e.width, "px")
})
}
}
s.CueStyleBox = CueStyleBox;
class BoxPosition {
constructor(e) {
var s;
let n, d, h, p, y, m;
if (e instanceof CueStyleBox && e.cue ? (s = e.cue) && "" !== s.vertical ? this.property = "width" : this.property = "height" : e instanceof BoxPosition && (this.property = e.property || "height"),
e instanceof CueStyleBox && e.div) {
h = e.div.offsetHeight,
p = e.div.offsetWidth,
y = e.div.offsetTop;
const s = e.div.firstChild;
if (m = s ? s.getBoundingClientRect() : e.div.getBoundingClientRect(),
n = m && m[this.property] || null,
s && s.firstChild) {
const e = s.firstChild;
if (e && "string" == typeof e.textContent) {
d = n / this.calculateNewLines(e.textContent)
}
}
} else
e instanceof BoxPosition && (m = e);
this.left = m.left,
this.right = m.right,
this.top = m.top || y,
this.height = m.height || h,
this.bottom = m.bottom || y + (m.height || h),
this.width = m.width || p,
this.lineHeight = null !== n ? n : m.lineHeight,
this.singleLineHeight = null !== d ? d : m.singleLineHeight,
this.singleLineHeight || (this.singleLineHeight = 41)
}
calculateNewLines(e) {
let s = 1;
for (let n = 0; n < e.length; n++)
"\n" === e[n] && s++;
return s
}
move(e, s) {
switch (s = void 0 !== s ? s : this.singleLineHeight,
e) {
case "+x":
this.left += s,
this.right += s;
break;
case "-x":
this.left -= s,
this.right -= s;
break;
case "+y":
this.top += s,
this.bottom += s;
break;
case "-y":
this.top -= s,
this.bottom -= s
}
}
overlaps(e) {
return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top
}
overlapsAny(e) {
for (const s of e)
if (this.overlaps(s))
return !0;
return !1
}
within(e) {
return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right
}
moveIfOutOfBounds(e, s) {
switch (s) {
case "+x":
this.left < e.left && (this.left = e.left,
this.right = this.left + this.width);
break;
case "-x":
this.right > e.right && (this.right = e.right,
this.left = this.right - this.width);
break;
case "+y":
this.top < e.top && (this.top = e.top,
this.bottom = this.top + this.height);
break;
case "-y":
this.bottom > e.bottom && (this.bottom = e.bottom,
this.top = this.bottom - this.height)
}
}
toCSSCompatValues(e) {
return {
top: this.top - e.top,
bottom: e.bottom - this.bottom,
left: this.left - e.left,
right: e.right - this.right,
height: this.height,
width: this.width
}
}
static getSimpleBoxPosition(e) {
let s = null;
e instanceof StyleBox && e.div ? s = e.div : e instanceof HTMLElement && (s = e);
let n = s.offsetHeight || 0
, d = s.offsetWidth || 0
, h = s.offsetTop || 0
, p = h + n
, y = s.getBoundingClientRect();
const {left: m, right: g} = y;
return y.top && (h = y.top),
y.height && (n = y.height),
y.width && (d = y.width),
y.bottom && (p = y.bottom),
{
left: m,
right: g,
top: h,
height: n,
bottom: p,
width: d
}
}
static getBoxPosition(e, s) {
if (e && e.length > 0) {
let n = 0
, d = e[0][s];
for (let h = 0; h < e.length; h++)
s in ["top", "right"] ? e[h][s] > d && (n = h,
d = e[h][s]) : s in ["bottom", "left"] && e[h][s] < d && (n = h,
d = e[h][s]);
return e[n]
}
return null
}
static moveToMinimumDistancePlacement(e, s, n) {
"height" === e.property ? "+y" === s ? (e.top = n.topMostBoxPosition.bottom + 0,
e.bottom = e.top + e.height) : "-y" === s && (e.bottom = n.bottomMostBoxPosition.top - 0,
e.top = e.bottom - e.height) : "width" === e.property && ("+x" === s ? (e.left = n.rightMostBoxPosition.right + 0,
e.right = e.left + e.width) : "-x" === s && (e.right = n.leftMostBoxPosition.left - 0,
e.left = e.right - e.width))
}
static moveBoxToLinePosition(e, s, n) {
const d = e.cue;
let h, p = new BoxPosition(e), y = function(e) {
if ("number" == typeof e.line && (e.snapToLines || e.line >= 0 && e.line <= 100))
return e.line;
if (!e.track || !e.track.textTrackList || !e.track.textTrackList.mediaElement)
return -1;
let s = 0;
const n = e.track
, d = n.textTrackList;
for (let h = 0; h < d.length && d[h] !== n; h++)
"showing" === d[h].mode && s++;
return -1 * ++s
}(d), m = [];
if (d.snapToLines) {
let e = 0;
switch (d.vertical) {
case "":
m = ["+y", "-y"],
h = "height";
break;
case "rl":
m = ["+x", "-x"],
h = "width";
break;
case "lr":
m = ["-x", "+x"],
h = "width"
}
const n = p.lineHeight
, g = s[h] + n
, v = m[0];
if (y < 0) {
let h = 0;
switch (d.vertical) {
case "":
h = s.height - n - .05 * s.height;
break;
case "rl":
case "lr":
h = -s.width + n + .05 * s.width
}
e = h,
m = m.reverse()
} else {
switch (d.vertical) {
case "":
e = n * Math.round(y);
break;
case "rl":
e = s.width - n * Math.round(y);
break;
case "lr":
e = n * Math.round(y)
}
Math.abs(e) > g && (e = e < 0 ? -1 : 1,
e *= Math.ceil(g / n) * n)
}
p.move(v, e)
} else {
const n = "" === d.vertical ? s.height : s.width
, h = p.lineHeight / n * 100;
switch (d.lineAlign) {
case "center":
y -= h / 2;
break;
case "end":
y -= h
}
switch (d.vertical) {
case "":
e.applyStyles({
top: e.formatStyle(y, "%")
});
break;
case "rl":
e.applyStyles({
right: e.formatStyle(y, "%")
});
break;
case "lr":
e.applyStyles({
left: e.formatStyle(y, "%")
})
}
m = ["+y", "-y", "+x", "-x"],
"+y" === d.axis ? m = ["+y", "-y", "+x", "-x"] : "-y" === d.axis && (m = ["-y", "+y", "+x", "-x"]),
p = new BoxPosition(e)
}
const g = function(e, d) {
let h;
for (let p = 0; p < d.length; p++) {
e.moveIfOutOfBounds(s, d[p]);
let y = 0
, m = !1;
for (; e.overlapsAny(n) && !(y > 9); )
m ? e.move(d[p]) : (n && n.length > 0 && (h || (h = {
topMostBoxPosition: BoxPosition.getBoxPosition(n, "top"),
bottomMostBoxPosition: BoxPosition.getBoxPosition(n, "bottom"),
leftMostBoxPosition: BoxPosition.getBoxPosition(n, "left"),
rightMostBoxPosition: BoxPosition.getBoxPosition(n, "right")
}),
BoxPosition.moveToMinimumDistancePlacement(e, d[p], h)),
m = !0),
y++
}
return e
}(p, m);
e.move(g.toCSSCompatValues(s))
}
}
s.BoxPosition = BoxPosition;
class WebVTTRenderer {
constructor(e, s, n=!0) {
if (!e)
return null;
this.window = e,
this.overlay = s,
this.loggingEnabled = n,
this.foregroundStyleOptions = {
fontFamily: "Helvetica",
fontSize: "36px",
color: "rgba(255, 255, 255, 1)",
textShadow: "",
backgroundColor: "rgba(0, 0, 0, 0)"
},
this.backgroundStyleOptions = {
backgroundColor: "rgba(0, 0, 0, 0.5)"
},
this.globalStyleCollection = {};
const d = e.document.createElement("div");
d.style.position = "absolute",
d.style.left = "0",
d.style.right = "0",
d.style.top = "0",
d.style.bottom = "0",
d.style.margin = "1.5%",
this.paddedOverlay = d,
s.appendChild(this.paddedOverlay),
this.initSubtitleCSS()
}
initSubtitleCSS() {
const e = [new rr.VTTCue(0,0,"String to init CSS - Won't be visible to user")];
this.paddedOverlay.style.opacity = "0",
this.processCues(e),
this.processCues([]),
this.paddedOverlay.style.opacity = "1"
}
convertCueToDOMTree(e) {
return e ? sr.default.parseContent(this.window, e, this.globalStyleCollection) : null
}
setStyles(e) {
function applyStyles(e, s, n) {
for (const d in s)
s.hasOwnProperty(d) && (!0 === n && void 0 !== e[d] || !1 === n) && (e[d] = s[d])
}
for (const s in e) {
let d = !1
, h = null;
"::cue" === s ? (h = this.foregroundStyleOptions,
d = !0) : "::-webkit-media-text-track-display" === s && (h = this.backgroundStyleOptions,
d = !0);
const p = e[s];
if (!0 === d)
applyStyles(h, p, d);
else
for (let e = 0; e < n.length; e++) {
const h = n[e].exec(s);
if (h && 4 === h.length) {
const e = h[2]
, s = {};
applyStyles(s, p, d),
this.globalStyleCollection[e] = s
}
}
}
this.initSubtitleCSS(),
this.loggingEnabled && (console.log("WebVTTRenderer setStyles foregroundStyleOptions: " + JSON.stringify(this.foregroundStyleOptions)),
console.log("WebVTTRenderer setStyles backgroundStyleOptions: " + JSON.stringify(this.backgroundStyleOptions)),
console.log("WebVTTRenderer setStyles globalStyleCollection: " + JSON.stringify(this.globalStyleCollection)))
}
processCues(e) {
if (!e)
return;
for (; this.paddedOverlay.firstChild; )
this.paddedOverlay.removeChild(this.paddedOverlay.firstChild);
if (!function(e) {
for (let s = 0; s < e.length; s++)
if (e[s].hasBeenReset || !e[s].displayState)
return !0;
return !1
}(e)) {
for (let s = 0; s < e.length; s++)
this.paddedOverlay.appendChild(e[s].displayState);
return
}
const s = []
, n = BoxPosition.getSimpleBoxPosition(this.paddedOverlay);
e.length > 1 && (e = function(e) {
const s = [];
let n = 0;
for (let d = 0; d < e.length; d++) {
let h = e[d];
if ("number" != typeof h.line)
return e;
n += h.line,
s.push(h)
}
return n /= e.length,
n > 50 ? (s.forEach((function(e) {
e.axis = "-y"
}
)),
s.sort((e,s)=>s.line - e.line)) : (s.forEach((function(e) {
e.axis = "+y"
}
)),
s.sort((e,s)=>e.line - s.line)),
s
}(e));
for (let d = 0; d < e.length; d++) {
let h = e[d]
, p = new CueStyleBox(this.window,h,this.foregroundStyleOptions,this.backgroundStyleOptions,this.globalStyleCollection);
this.paddedOverlay.appendChild(p.div),
BoxPosition.moveBoxToLinePosition(p, n, s),
h.displayState = p.div,
s.push(BoxPosition.getSimpleBoxPosition(p))
}
}
setSize(e, s) {
e && (this.overlay.style.width = e + "px"),
s && (this.overlay.style.height = s + "px")
}
getOverlay() {
return this.overlay
}
}
s.default = WebVTTRenderer,
s.WebVTTRenderer = WebVTTRenderer
}
));
unwrapExports(or),
or.VTTCue,
or.StyleBox,
or.CueStyleBox,
or.BoxPosition,
or.WebVTTRenderer;
var dr = createCommonjsModule((function(e, s) {
function __export(e) {
for (var n in e)
s.hasOwnProperty(n) || (s[n] = e[n])
}
Object.defineProperty(s, "__esModule", {
value: !0
}),
__export(ar),
__export(or)
}
));
unwrapExports(dr);
var lr = dr.WebVTTRenderer;
class TrackManagerStub {
get currentTrack() {
return {}
}
set currentTrack(e) {}
get tracks() {
return []
}
destroy() {}
restoreSelectedTrack() {}
}
const {audioTrackAdded: cr, audioTrackChanged: ur, forcedTextTrackChanged: hr, textTrackAdded: pr, textTrackChanged: yr, textTrackRemoved: mr} = rs
, {textTracksSwitched: gr, textTracksUpdated: fr} = zs;
class TextTrackManager {
constructor(e, s, n) {
this.mediaElement = e,
this.dispatcher = s,
this.extensionTracks = n,
this._tracks = [],
this.trackPersistence = new TrackPersistence("mk-text-track",["label", "language", "kind"]);
const d = this.trackPersistence.getPersistedTrack();
if (this._tracks.push({
id: -2,
label: "Off",
language: "",
kind: "subtitles",
mode: !d || this.isTrackOff(d) ? "showing" : "disabled"
}),
this.extensionTracks) {
O.debug("MEDIA_TRACK Initializing text track manager for HLS.js track events");
const s = e.parentElement;
this.renderer = new lr(window,s,!1),
this.renderer.setStyles({
"::cue": {
fontSize: "calc(1vw + 1em)"
}
}),
this.onExtensionTextTracksAdded = this.onExtensionTextTracksAdded.bind(this),
this.onExtensionTextTrackSwitched = this.onExtensionTextTrackSwitched.bind(this),
this.onCueChange = this.onCueChange.bind(this);
const n = this.extensionTracks;
n.addEventListener(fr, this.onExtensionTextTracksAdded),
n.addEventListener(gr, this.onExtensionTextTrackSwitched)
} else
O.debug("MEDIA_TRACK Initializing text track manager for native track events"),
this.onTextTrackAdded = this.onTextTrackAdded.bind(this),
this.onTextTrackChanged = this.onTextTrackChanged.bind(this),
this.onTextTrackRemoved = this.onTextTrackRemoved.bind(this),
this.onPlayStart = this.onPlayStart.bind(this),
e.textTracks.addEventListener("addtrack", this.onTextTrackAdded),
e.textTracks.addEventListener("change", this.onTextTrackChanged),
e.textTracks.addEventListener("removetrack", this.onTextTrackRemoved),
e.addEventListener("playing", this.onPlayStart);
this.onAudioTrackAddedOrChanged = debounce(this.onAudioTrackAddedOrChanged.bind(this)),
s.subscribe(ur, this.onAudioTrackAddedOrChanged),
s.subscribe(cr, this.onAudioTrackAddedOrChanged)
}
get currentTrack() {
return this.tracks.find(e=>"showing" === e.mode)
}
set currentTrack(e) {
if (!e)
return;
let s;
this.trackPersistence.setPersistedTrack(e),
this.extensionTracks ? (O.debug("MEDIA_TRACK Setting track on extension " + e.label),
"Off" === e.label ? (this.clearCurrentlyPlayingTrack(),
s = this.extensionTracks.selectForcedTrack(),
void 0 === s && this.onExtensionTextTrackSwitched({
track: e
})) : this.extensionTracks.textTrack = e) : (O.debug("MEDIA_TRACK Setting track on element " + e.label),
this._tracks.forEach(s=>{
s !== e && "showing" === s.mode && (s.mode = "disabled")
}
),
e && (O.debug("MEDIA_TRACK setting track mode to showing for " + e.label),
this.isTrackOff(e) ? (this._tracks[0].mode = "showing",
s = this.selectNativeForcedTrack(this.mediaElement.audioTracks)) : e.mode = "showing")),
this.dispatcher.publish(rs.forcedTextTrackChanged, s)
}
get tracks() {
return this._tracks
}
destroy() {
if (this.clearCurrentlyPlayingTrack(),
this.extensionTracks) {
const e = this.extensionTracks;
e.removeEventListener(fr, this.onExtensionTextTracksAdded),
e.removeEventListener(gr, this.onExtensionTextTrackSwitched)
} else
this.mediaElement.textTracks.removeEventListener("addtrack", this.onTextTrackAdded),
this.mediaElement.textTracks.removeEventListener("change", this.onTextTrackChanged),
this.mediaElement.textTracks.removeEventListener("removetrack", this.onTextTrackRemoved),
this.mediaElement.removeEventListener("playing", this.onPlayStart);
this.dispatcher.unsubscribe(ur, this.onAudioTrackAddedOrChanged),
this.dispatcher.unsubscribe(cr, this.onAudioTrackAddedOrChanged)
}
restoreSelectedTrack() {
return restoreSelectedTrack(this.trackPersistence, this)
}
onExtensionTextTracksAdded(e) {
O.debug("MEDIA_TRACK Extension text tracks updated " + JSON.stringify(e)),
this._tracks.push(...e),
this.restoreSelectedTrack(),
this.dispatcher.publish(pr, e)
}
onExtensionTextTrackSwitched(e) {
O.debug("MEDIA_TRACKS Extension text track switched " + e),
this.handleVTT(e);
const s = e.track;
if (this._tracks) {
const preserveSelectedTrack = n=>{
e.track ? s.forced && "Off" === n.label || "Off" === s.label && "Off" === n.label ? n.mode = "showing" : n.mode = e.track.persistentID === n.id ? "showing" : "disabled" : n.mode = "Off" === n.label ? "showing" : "disabled"
}
;
this._tracks.forEach(preserveSelectedTrack)
}
this.dispatcher.publish(yr, e)
}
handleVTT(e) {
const s = e && e.track && e.track.id;
if (void 0 !== s && s >= 0) {
const e = this.filterSelectableTextTracks(this.mediaElement.textTracks)[s];
this.onNativeTrackChange(e)
} else
this.clearCurrentlyPlayingTrack()
}
onAudioTrackAddedOrChanged(e, s) {
if (O.debug("MEDIA_TRACKS text track manager detects audio track change"),
this.shouldForceSubtitle())
if (this.extensionTracks) {
O.debug("MEDIA_TRACKS selecting forced text track via extension");
const e = this.extensionTracks.selectForcedTrack();
e ? this.dispatcher.publish(hr, e) : this.clearCurrentlyPlayingTrack()
} else
O.debug("MEDIA_TRACKS selecting forced text track natively"),
this.currentTrack = this._tracks[0]
}
onTextTrackAdded(e) {
this._tracks.push(e.track),
this.dispatcher.publish(pr, e)
}
onPlayStart() {
this.restoreSelectedTrack()
}
onTextTrackRemoved(e) {
this.dispatcher.publish(mr, e)
}
onTextTrackChanged(e) {
const s = this.findNativeSelectedTextTrack();
let n = this.trackPersistence.getPersistedTrack();
if (n || (n = this._tracks[0]),
s && !trackEquals(s, n, this.trackPersistence.fields))
if (this.isTrackOff(n) && "forced" !== s.kind)
this.currentTrack = n;
else {
const e = this.findNativeTrack(n);
e && (this.currentTrack = e)
}
else
this.dispatcher.publish(yr, e)
}
findNativeSelectedTextTrack() {
for (let e = 0; e < this.mediaElement.textTracks.length; e++) {
const s = this.mediaElement.textTracks[e];
if ("showing" === s.mode)
return s
}
}
findNativeTrack(e) {
for (let s = 0; s < this.mediaElement.textTracks.length; s++) {
const n = this.mediaElement.textTracks[s];
if (trackEquals(n, e, this.trackPersistence.fields))
return n
}
}
selectNativeForcedTrack(e) {
for (let s = 0; s < e.length; s++) {
const n = e[s];
if (n.enabled) {
const e = this.findNativeForcedTrack(n);
return e && "showing" !== e.mode && (e.mode = "showing"),
e
}
}
}
findNativeForcedTrack(e) {
const s = this.mediaElement.textTracks;
for (let n = 0; n < s.length; n++) {
const d = s[n];
if ("forced" === d.kind && d.language === e.language)
return d
}
}
onNativeTrackChange(e) {
this.clearCurrentlyPlayingTrack(),
this._currentlyPlayingTrack = e,
e.addEventListener("cuechange", this.onCueChange)
}
clearCurrentlyPlayingTrack() {
var e;
void 0 !== this._currentlyPlayingTrack && ("string" == typeof (e = this._currentlyPlayingTrack).id && "removeEventListener"in e) && (this._currentlyPlayingTrack.removeEventListener("cuechange", this.onCueChange),
this.renderer.processCues({}),
delete this._currentlyPlayingTrack)
}
onCueChange(e) {
const s = e && e.target && e.target.activeCues;
s && this.renderer.processCues(s)
}
filterSelectableTextTracks(e) {
const s = [];
for (let n = 0; n < e.length; n++) {
const d = e[n];
("captions" === d.kind || "subtitles" === d.kind || "metadata" === d.kind && d.customTextTrackCueRenderer) && s.push(d)
}
return s
}
shouldForceSubtitle() {
O.debug("MEDIA_TRACKS Determining whether to select forced text track");
const e = this.trackPersistence.getPersistedTrack();
return !e || this.isTrackOff(e)
}
isTrackOff(e) {
return "Off" === e.label || "Auto" === e.label
}
}
const vr = {
"picture-in-picture": e.PresentationMode.pictureinpicture,
inline: e.PresentationMode.inline
}
, _r = {};
_r[e.PresentationMode.pictureinpicture] = "picture-in-picture",
_r[e.PresentationMode.inline] = "inline";
const {presentationModeDidChange: br} = rs
, {playbackLicenseError: Tr} = zs
, {stopped: Er} = e.PlaybackStates;
class VideoPlayer extends BasePlayer {
constructor(e) {
super(e),
this.mediaPlayerType = "video",
this._textTrackManager = new TrackManagerStub,
this._audioTrackManager = new TrackManagerStub,
this.userInitiated = !1,
this.restrictPlatforms = !("restrict-platforms"in Hs.features) || Hs.features["restrict-platforms"],
this.pipEventHandler = this.pipEventHandler.bind(this)
}
get audioTracks() {
return this._audioTrackManager.tracks
}
get containerElement() {
return this._context.videoContainerElement ? this._context.videoContainerElement : document.getElementById("apple-music-video-container")
}
get currentAudioTrack() {
return this._audioTrackManager.currentTrack
}
set currentAudioTrack(e) {
this._audioTrackManager.currentTrack = e
}
get currentTextTrack() {
return this._textTrackManager.currentTrack
}
set currentTextTrack(e) {
this._textTrackManager.currentTrack = e
}
get _targetElement() {
return this.video || Object.assign({}, document.createElement("video"))
}
get textTracks() {
return this._textTrackManager.tracks
}
initializeExtension() {
return __awaiter$3(this, void 0, void 0, (function*() {
this.restrictPlatforms && Fe.isAndroid ? O.warn("videoPlayer.initializeExtension Not supported on the current platform") : this.video || O.warn("videoPlayer.initializeExtension No video element, not initializing extension")
}
))
}
onPlaybackLicenseError(e) {
this._licenseError(),
this._dispatcher.publish(Tr, e)
}
setupTrackManagers(e) {
var s, n, d, h;
null === (n = null === (s = this._textTrackManager) || void 0 === s ? void 0 : s.destroy) || void 0 === n || n.call(s),
this._textTrackManager = new TextTrackManager(this._targetElement,this._dispatcher,e),
null === (h = null === (d = this._audioTrackManager) || void 0 === d ? void 0 : d.destroy) || void 0 === h || h.call(d),
this._audioTrackManager = new AudioTrackManager(this._targetElement,this._dispatcher,e)
}
destroy() {
this._textTrackManager.destroy(),
this._audioTrackManager.destroy(),
super.destroy()
}
initializeEventHandlers() {
const e = Object.create(null, {
initializeEventHandlers: {
get: ()=>super.initializeEventHandlers
}
});
return __awaiter$3(this, void 0, void 0, (function*() {
e.initializeEventHandlers.call(this),
this.hasMediaElement && (this._targetElement.addEventListener("webkitpresentationmodechanged", this.pipEventHandler),
this._targetElement.addEventListener("enterpictureinpicture", this.pipEventHandler),
this._targetElement.addEventListener("leavepictureinpicture", this.pipEventHandler))
}
))
}
removeEventHandlers() {
if (super.removeEventHandlers(),
!this.hasMediaElement)
return;
const {_targetElement: e} = this;
e.removeEventListener("webkitpresentationmodechanged", this.pipEventHandler),
e.removeEventListener("enterpictureinpicture", this.pipEventHandler),
e.removeEventListener("leavepictureinpicture", this.pipEventHandler)
}
initializeMediaElement() {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("videoPlayer.initializeMediaElement Initializing media element");
const e = this.containerElement;
e ? (this.video = function() {
let e = er.pop();
return e ? O.debug(`dom-helpers: retrieving video tag, ${er.length} remain`) : (O.debug("dom-helpers: no available video tags, creating one"),
e = document.createElement("video")),
e
}(),
this.video.autoplay = !1,
this.video.controls = !1,
this.video.playsInline = !0,
this.video.id = "apple-music-video-player",
e.appendChild(this.video)) : O.warn("videoPlayer.initializeMediaElement No video element; no container defined")
}
))
}
isPlayerSupported() {
return Browser.supportsEs6()
}
_stopMediaElement() {
const e = Object.create(null, {
_stopMediaElement: {
get: ()=>super._stopMediaElement
}
});
return __awaiter$3(this, void 0, void 0, (function*() {
yield e._stopMediaElement.call(this),
this.destroy()
}
))
}
pipEventHandler(s) {
switch (s.type) {
case "enterpictureinpicture":
this._dispatcher.publish(br, {
mode: e.PresentationMode.pictureinpicture
});
break;
case "leavepictureinpicture":
this._dispatcher.publish(br, {
mode: e.PresentationMode.inline
});
break;
case "webkitpresentationmodechanged":
{
const e = this._targetElement;
this._dispatcher.publish(br, {
mode: this._translateStringToPresentationMode(e.webkitPresentationMode)
});
break
}
}
}
playItemFromEncryptedSource(s, n=!1, d) {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("videoPlayer.playItemFromEncryptedSource", s, n),
this.playbackState !== Er ? (s.playbackType = e.PlaybackType.encryptedFull,
this.nowPlayingItem = s,
s.state = D.loading,
this.userInitiated = n,
this.playHlsStream(s.assetURL, s)) : O.debug("video-player.playItemFromEncryptedSource aborting playback because player is stopped")
}
))
}
playItemFromUnencryptedSource(e, s, n) {
return __awaiter$3(this, void 0, void 0, (function*() {
if (O.debug("videoPlayer.playItemFromUnencryptedSource", e, s),
this.playbackState === Er)
return void O.debug("videoPlayer.playItemFromUnencryptedSource aborting playback because player is stopped");
const [n] = e.split("?");
return n.endsWith("m3u") || n.endsWith("m3u8") ? void this.playHlsStream(e) : this._playAssetURL(e, s)
}
))
}
setPresentationMode(s) {
return __awaiter$3(this, void 0, void 0, (function*() {
const n = this._targetElement;
if (n.webkitSupportsPresentationMode && "function" == typeof n.webkitSetPresentationMode)
return n.webkitSetPresentationMode(this._translatePresentationModeToString(s));
if (n.requestPictureInPicture && document.exitPictureInPicture) {
if (s === e.PresentationMode.pictureinpicture)
return n.requestPictureInPicture();
if (s === e.PresentationMode.inline)
return document.exitPictureInPicture()
}
}
))
}
_translateStringToPresentationMode(s) {
let n = vr[s];
return void 0 === n && (O.warn(`videoPlayer._translateStringToPresentationMode ${s} is not a valid presentation mode, setting to inline`),
n = e.PresentationMode.inline),
n
}
_translatePresentationModeToString(e) {
let s = _r[e];
return void 0 === s && (O.warn(`videoPlayer._translatePresentationModeToString ${e} is not a valid presentation mode, setting to inline`),
s = "inline"),
s
}
setNextSeamlessItem(e) {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
}
var kr;
__decorate$2([Bind(), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", [Object]), __metadata$2("design:returntype", void 0)], VideoPlayer.prototype, "onPlaybackLicenseError", null),
function(e) {
e.NONE = "none",
e.FAIRPLAY = "com.apple.fps",
e.PLAYREADY = "com.microsoft.playready",
e.WIDEVINE = "com.widevine.alpha"
}(kr || (kr = {}));
const hasSessionStorage = ()=>"undefined" != typeof window && window.sessionStorage;
function findMediaKeySystemAccess(e, s) {
return __awaiter$3(this, void 0, void 0, (function*() {
for (let d = 0; d < e.length; d++)
try {
const n = e[d];
return [n, yield navigator.requestMediaKeySystemAccess(n, s)]
} catch (n) {}
return []
}
))
}
let Sr;
const {NONE: Pr, FAIRPLAY: Ir, WIDEVINE: Ar, PLAYREADY: wr} = kr;
function supportsDrm() {
if (!Sr)
throw new Error("findKeySystemPreference has not been invoked");
return Sr !== Pr
}
function potentialKeySystemsForAccess() {
return hasSessionStorage() && "true" === window.sessionStorage.getItem("mk-playready-cbcs-unsupported") ? [Ar] : Hs.features["prefer-playready"] ? [wr, Ar] : [Ar, wr]
}
function findKeySystemPreference() {
var e, s;
return __awaiter$3(this, void 0, void 0, (function*() {
if (!Ke) {
if (null === (e = window.WebKitMediaKeys) || void 0 === e ? void 0 : e.isTypeSupported(Ir + ".1_0", qs.AVC1))
Sr = Ir;
else if (null === (s = window.MSMediaKeys) || void 0 === s ? void 0 : s.isTypeSupported(wr, qs.AVC1))
Sr = wr;
else {
const e = Zs;
if (hasMediaKeySupport() && e.canPlayType('video/mp4;codecs="avc1.42E01E"') && e.canPlayType('audio/mp4;codecs="mp4a.40.2"')) {
const e = [{
videoCapabilities: [{
contentType: 'video/mp4;codecs="avc1.42E01E"',
robustness: "SW_SECURE_CRYPTO"
}],
audioCapabilities: [{
contentType: 'audio/mp4;codecs="mp4a.40.2"'
}]
}]
, s = potentialKeySystemsForAccess()
, [n] = yield findMediaKeySystemAccess(s, e);
Sr = n
}
}
return Sr = null != Sr ? Sr : Pr,
Sr
}
Sr = Pr
}
))
}
function hasMediaKeySupport() {
return !!(navigator && navigator.requestMediaKeySystemAccess && window.MediaKeys && window.MediaKeySystemAccess)
}
let Rr = {
developerToken: "developerTokenNotSet",
musicUserToken: "musicUserTokenNotSet"
};
function createHlsOffersLicenseChallengeBody(e) {
return {
"adam-id": e.id,
id: 1
}
}
function createLicenseChallengeBody(e, s, n, d, h) {
let p;
const y = {
challenge: n.challenge || Ye(n.licenseChallenge),
"key-system": d,
uri: n.keyuri
};
return p = s.isUTS ? Object.assign(Object.assign({}, y), function(e, s="start") {
return {
"extra-server-parameters": e.keyServerQueryParameters,
"license-action": s
}
}(s, e)) : s.isLiveRadioStation ? Object.assign(Object.assign({}, y), {
event: "beats1"
}) : s.hasOffersHlsUrl ? {
"license-requests": [Object.assign(Object.assign({}, y), createHlsOffersLicenseChallengeBody(s))]
} : Object.assign(Object.assign({}, y), function(e, s=!1) {
return {
adamId: e.songId,
isLibrary: e.isCloudItem,
"user-initiated": s
}
}(s, h)),
p
}
class License {
fetch(e) {
const s = {
Authorization: "Bearer " + Rr.developerToken,
Accept: "application/json",
"Content-Type": "application/json",
"X-Apple-Music-User-Token": "" + Rr.musicUserToken
};
this.keySystem === kr.WIDEVINE && (s["X-Apple-Renewal"] = !0);
const n = new Headers(s);
return fetch(this.licenseUrl, {
method: "POST",
body: JSON.stringify(e),
headers: n
})
}
reset() {
this.licenseUrl = void 0,
this.playableItem = void 0,
this.data = void 0,
this.initiated = void 0,
this.keySystem = void 0,
this.startResponse = void 0
}
start(e, s, n, d, h=!1) {
var p, y;
return __awaiter$3(this, void 0, void 0, (function*() {
this.licenseUrl = e,
this.playableItem = s,
this.data = n,
this.keySystem = d,
this.initiated = h;
const m = n.isRenewalRequest ? "renew" : "start"
, g = createLicenseChallengeBody(m, s, n, d, h);
s.hasOffersHlsUrl && (this.licenseUrl += "/" + m),
this.startResponse = this.fetch(g);
try {
const e = yield this.startResponse;
if (!e.ok) {
let s;
try {
s = yield e.json()
} catch (bt) {}
this.processJsonError(s)
}
const s = yield e.json()
, n = (null === (p = s["license-responses"]) || void 0 === p ? void 0 : p.length) ? s["license-responses"][0] : s;
return n.status = null !== (y = n.status) && void 0 !== y ? y : n.errorCode,
0 !== n.status && this.processJsonError(n),
n
} catch (F) {
throw this.startResponse = void 0,
F
}
}
))
}
processJsonError(e) {
let s = new MKError(MKError.MEDIA_LICENSE,"Error acquiring license");
if ((null == e ? void 0 : e.errorCode) && (e.status = e.errorCode),
e && 0 !== e.status) {
if (!e.message)
switch (e.status) {
case -1004:
e.message = MKError.DEVICE_LIMIT;
break;
default:
e.message = MKError.MEDIA_LICENSE
}
s = MKError.serverError(e),
s.data = e,
s.errorCode === MKError.PLAYREADY_CBC_ENCRYPTION_ERROR && hasSessionStorage() && window.sessionStorage.setItem("mk-playready-cbcs-unsupported", "true")
}
throw s
}
stop() {
return __awaiter$3(this, void 0, void 0, (function*() {
if (this.startResponse)
try {
yield this.startResponse
} catch (F) {}
if (!this.playableItem || !this.data)
return;
if (!this.playableItem.isUTS)
return;
const e = createLicenseChallengeBody("stop", this.playableItem, this.data, this.keySystem, this.initiated)
, s = this.fetch(e);
this.reset();
try {
yield s
} catch (F) {
O.warn("license.stop request error", F)
}
}
))
}
}
const Or = /max-age=(\d+)/i;
class KeySession extends Notifications {
constructor() {
super([zs.playbackLicenseError, zs.playbackSessionError]),
this.initiated = !0,
this.isLibrary = !1,
this.keySystem = kr.FAIRPLAY,
this.mediaKeySessions = {},
this._storage = window.sessionStorage,
this.boundDispatchKeyError = this.dispatchKeyError.bind(this),
this.boundDispatchSessionError = this.dispatchSessionError.bind(this),
this.boundHandleSessionCreation = this.handleSessionCreation.bind(this),
this.boundStartLicenseSession = this.startLicenseSession.bind(this),
this.license = new License
}
get extID() {
if (this.extURI)
return this.extURI.replace("data:;base64,", "")
}
get isFairplay() {
return this.keySystem === kr.FAIRPLAY
}
get isPlayReady() {
return this.keySystem === kr.PLAYREADY
}
get isWidevine() {
return this.keySystem === kr.WIDEVINE
}
acquirePlaybackLicense(e, s, n, d) {
return __awaiter$3(this, void 0, void 0, (function*() {
if (!this.keyServerURL || !this.developerToken || !this.userToken)
return;
const {keyServerURL: n, keySystem: h} = this;
try {
return yield this.license.start(n, d.item, {
challenge: s,
keyuri: e
}, h, this.initiated)
} catch (bt) {
this.dispatchEvent(zs.playbackLicenseError, bt)
}
}
))
}
startLicenseSession(e) {
let s;
O.debug("Starting License Session", e);
const {message: n, target: d, messageType: h} = e;
if (this.keySystem !== kr.FAIRPLAY && "license-request" !== h)
return void O.debug("not making license request for", h);
if (this.isPlayReady) {
const e = String.fromCharCode.apply(null, new Uint16Array(n.buffer || n));
s = (new DOMParser).parseFromString(e, "application/xml").getElementsByTagName("Challenge")[0].childNodes[0].nodeValue
} else
s = Ye(new Uint8Array(n));
const p = d.extURI || this.extURI
, y = this.mediaKeySessions[p];
if (y)
return this.acquirePlaybackLicense(p, s, this.initiated, y).then(e=>this.handleLicenseJson(e, d, p));
O.debug("no key session info, aborting license request")
}
setKeyURLs(e) {
this.keyCertURL = e[this.isFairplay ? "hls-key-cert-url" : "widevine-cert-url"],
this.keyServerURL = e["hls-key-server-url"]
}
dispatchKeyError(e) {
console.error(MKError.MEDIA_KEY + " error in dispatchKeyError:", e),
this.dispatchEvent(zs.playbackSessionError, new MKError(MKError.MEDIA_KEY,e))
}
dispatchSessionError(e) {
this.dispatchEvent(zs.playbackSessionError, new MKError(MKError.MEDIA_SESSION,e))
}
loadCertificateBuffer() {
return __awaiter$3(this, void 0, void 0, (function*() {
if (!this.keyCertURL)
return Promise.reject(new MKError(MKError.MEDIA_SESSION,"No certificate URL"));
const e = document.createElement("a");
e.href = this.keyCertURL;
const s = Date.now()
, n = `${e.hostname}${e.pathname}`.replace(/[^a-z0-9.]/gi, ".")
, d = this._storage.getItem(n)
, h = parseInt(this._storage.getItem("com.ai.mk.vmcc.exp") || "", 10);
if (d && h && h > s) {
const e = new Uint8Array(d.length);
for (let s = d.length; s--; )
e[s] = d.charCodeAt(s);
return e.buffer
}
const p = yield fetch(`${this.keyCertURL}?t=${Date.now()}`)
, y = p.headers.get("cache-control");
let m = 86400;
if (y && Or.test(y)) {
const e = y.match(Or);
e && e[1] && (m = parseInt(e[1], 10))
}
const g = yield p.arrayBuffer()
, v = String.fromCharCode.apply(String, new Uint8Array(g));
return /^\<\?xml/.test(v) ? Promise.reject(new MKError(MKError.MEDIA_CERTIFICATE,"Invalid certificate.")) : (this._storage.setItem(n, v),
this._storage.setItem("com.ai.mk.vmcc.exp", (s + 1e3 * m).toString()),
g)
}
))
}
handleSessionCreation(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
return this.createSession(e).catch(e=>{
this.dispatchSessionError(e)
}
)
}
))
}
handleLicenseJson(e, s, n) {
return __awaiter$3(this, void 0, void 0, (function*() {
if (O.debug(`updating session ${s.sessionId} with license response`, e),
null == e ? void 0 : e.license) {
const n = ze(e.license);
try {
yield s.update(n)
} catch (bt) {
O.error("Failed to updated media keys", bt),
this.dispatchKeyError(bt)
}
}
}
))
}
addMediaKeySessionInfo(e, s, n) {
const d = this.mediaKeySessions[e];
d ? (O.debug(`keySession info exists for ${n.title}, making existing session ${d.session.sessionId} the old session`),
d.oldSession = d.session,
d.session = s) : (O.debug("creating key session info for " + n.title),
this.mediaKeySessions[e] = {
session: s,
item: n
})
}
}
__decorate$2([Bind(), __metadata$2("design:type", Function), __metadata$2("design:paramtypes", [Object]), __metadata$2("design:returntype", void 0)], KeySession.prototype, "startLicenseSession", null);
class FairplayEncryptedSession extends KeySession {
constructor() {
super(...arguments),
this._mediaKeySessions = {},
this._mediaKeySessionRenewals = {}
}
attachMedia(e, s) {
return __awaiter$3(this, void 0, void 0, (function*() {
this.keySystem = s.keySystem,
this._keySystemAccess = s,
e.addEventListener("encrypted", this.boundHandleSessionCreation, !1)
}
))
}
detachMedia(e) {
e.removeEventListener("encrypted", this.boundHandleSessionCreation);
const s = this._mediaKeySessions
, n = this._mediaKeySessionRenewals;
Object.values(s).forEach(e=>{
e.removeEventListener("message", this.boundStartLicenseSession),
asAsync(e.close())
}
),
this._mediaKeySessions = {},
Object.values(n).forEach(e=>clearTimeout(e)),
this._mediaKeySessionRenewals = {}
}
createSession(e) {
return __awaiter$3(this, void 0, void 0, (function*() {
O.debug("Encrypted createSession", e);
const s = this._keySystemAccess;
if (!s)
return;
const {initData: n, target: d, initDataType: h} = e;
this._mediaKeysPromise || (this._mediaKeysPromise = new Promise((e,n)=>__awaiter$3(this, void 0, void 0, (function*() {
const n = yield s.createMediaKeys()
, h = yield this.loadCertificateBuffer();
yield n.setServerCertificate(h),
yield d.setMediaKeys(n),
e(n)
}
))));
const p = yield this._mediaKeysPromise
, y = new Uint8Array(n)
, m = String.fromCharCode.apply(void 0, Array.from(y))
, g = p.createSession();
g.extURI = this.extURI || m,
yield g.generateRequest(h, n),
this._mediaKeySessions[g.sessionId] = g,
g.addEventListener("message", this.boundStartLicenseSession)
}
))
}
handleLicenseJson(e, s, n) {
const d = Object.create(null, {
handleLicenseJson: {
get: ()=>super.handleLicenseJson
}
});
return __awaiter$3(this, void 0, void 0, (function*() {
if (!e)
return;
yield d.handleLicenseJson.call(this, e, s, n);
const h = e["renew-after"];
if (e.license && h) {
const e = this._mediaKeySessionRenewals
, n = e[s.sessionId];
n && clearTimeout(n);
const d = setTimeout(()=>s.update(qe("renew")), 1e3 * h);
e[s.sessionId] = d
}
}
))
}
loadKeys(e) {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
clearSessions() {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
}
const Cr = /^(?:.*)(skd:\/\/.+)$/i;
class WebKitSession extends KeySession {
attachMedia(e, s) {
return this.target = e,
e.addEventListener("webkitneedkey", this.boundHandleSessionCreation, !1),
e.addEventListener("webkitkeyerror", this.boundDispatchKeyError),
e
}
detachMedia(e) {
e && (e.removeEventListener("webkitneedkey", this.boundHandleSessionCreation, !1),
e.removeEventListener("webkitkeyerror", this.boundDispatchKeyError))
}
destroy() {
O.debug("FPS destroy"),
this.detachMedia(this.target),
this.session && (this.session.removeEventListener("webkitkeyerror", this.boundDispatchKeyError),
this.session.removeEventListener("webkitkeymessage", this.boundStartLicenseSession))
}
createSession(e) {
O.debug("FPS createSession", e);
const {initData: s, target: n} = e
, {item: d} = this;
if (!d)
return O.error("Cannot createSession without item"),
Promise.resolve();
const h = this._extractAssetId(s);
if (O.debug("extURI", h),
!n.webkitKeys) {
const e = new window.WebKitMediaKeys(this.keySystem);
n.webkitSetMediaKeys(e)
}
return this.loadCertificateBuffer().then(e=>{
const p = this._concatInitDataIdAndCertificate(s, h, e)
, y = "VIDEO" === n.tagName ? qs.AVC1 : qs.MP4
, m = n.webkitKeys.createSession(y, p);
this.addMediaKeySessionInfo(h, m, d),
this.session = m,
m.extURI = h,
m.addEventListener("webkitkeyerror", this.boundDispatchKeyError),
m.addEventListener("webkitkeymessage", this.boundStartLicenseSession)
}
)
}
_extractAssetId(e) {
let s = String.fromCharCode.apply(null, new Uint16Array(e.buffer || e));
const n = s.match(Cr);
return n && n.length >= 2 && (s = n[1]),
O.debug("Extracted assetId from EXT-X-KEY URI", s),
s
}
_concatInitDataIdAndCertificate(e, s, n) {
"string" == typeof s && (s = We(s)),
n = new Uint8Array(n);
let d = 0;
const h = new ArrayBuffer(e.byteLength + 4 + s.byteLength + 4 + n.byteLength)
, p = new DataView(h);
new Uint8Array(h,d,e.byteLength).set(e),
d += e.byteLength,
p.setUint32(d, s.byteLength, !0),
d += 4;
const y = new Uint8Array(h,d,s.byteLength);
y.set(s),
d += y.byteLength,
p.setUint32(d, n.byteLength, !0),
d += 4;
return new Uint8Array(h,d,n.byteLength).set(n),
new Uint8Array(h,0,h.byteLength)
}
loadKeys(e) {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
clearSessions() {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
}
class MSSession extends KeySession {
attachMedia(e, s) {
return this.keySystem = s.keySystem,
e.addEventListener("msneedkey", this.boundHandleSessionCreation, !1),
e.addEventListener("mskeyerror", this.boundDispatchKeyError),
e
}
detachMedia(e) {
e.removeEventListener("msneedkey", this.boundHandleSessionCreation, !1),
e.removeEventListener("mskeyerror", this.boundDispatchKeyError)
}
createSession(e) {
const {initData: s, target: n} = e;
if (!n.msKeys) {
const e = new MSMediaKeys(this.keySystem);
n.msSetMediaKeys(e)
}
const d = n.msKeys.createSession(qs.MP4, s);
return d.addEventListener("mskeyerror", this.dispatchKeyError),
d.addEventListener("mskeymessage", this.startLicenseSession.bind(this)),
d
}
loadKeys(e) {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
clearSessions() {
return __awaiter$3(this, void 0, void 0, (function*() {}
))
}
}
const Mr = new Logger
, Dr = {
[kr.WIDEVINE]: Ws.WIDEVINE,
[kr.FAIRPLAY]: Ws.FAIRPLAY,
[kr.PLAYREADY]: Ws.PLAYREADY
}
, Nr = [0, 0, 1, 222, 112, 115, 115, 104, 0, 0, 0, 0, 154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149, 0, 0, 1, 190]
, Lr = [190, 1, 0, 0, 1, 0, 1, 0, 180, 1];
function concatenate(e, ...s) {
let n = 0;
for (const p of s)
n += p.length;
const d = new e(n);
let h = 0;
for (const p of s)
d.set(p, h),
h += p.length;
return d
}
const {WIDEVINE: xr, PLAYREADY: Ur} = kr
, $r = {};
$r[xr] = e=>{
Mr.debug("generating Widevine pssh for keyId");
const s = new Uint8Array([0, 0, 0, 52, 112, 115, 115, 104, 0, 0, 0, 0, 237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237, 0, 0, 0, 20, 8, 1, 18, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
for (let n = 0; n < e.length; n++)
s[s.length - 16 + n] = e[n];
return Mr.debug("generatePSSH", s),
s
}
,
$r[Ur] = e=>{
Mr.debug("generating Playready pssh for keyId"),
(e=>{
const swap = (e,s,n)=>{
const d = e[s];
e[s] = e[n],
e[n] = d
}
;
swap(e, 0, 3),
swap(e, 1, 2),
swap(e, 4, 5),
swap(e, 6, 7)
}
)(e);
const s = Ye(e)
, n = '
${this._explanation}
` } get hasOKButtonAction() { return !!this._okButtonActionURL || !!this._okButtonAction } get message() { return `