mogultv/content/youtube/inject.js

925 lines
36 KiB
JavaScript

import {
e
} from '../../index-6137f488.js';
import {
e as e$2
} from '../../background.injected-3cca8ca2.js';
import {
n,
e as e$4
} from '../../get_stream_details-14cd00a5.js';
import {
d as dt,
t
} from '../../parse_token.util-ed270559.js';
import {
s
} from '../../router.interface-6cdbc015.js';
import {
e as e$3
} from '../../fetch_youtube-cfbafc47.js';
import {
e as e$1
} from '../../style-inject.es-a0e1a0ba.js';
function l(e) {
if (!e) return 0;
e = e.toLowerCase();
const t = /\((.+)\)/.exec(e);
if (!t) return 1;
const n = t[1].split(/\s/),
s = parseInt(n[0]);
return isNaN(s) ? 0 : n[1].startsWith("year") ? 12 * parseInt(n[0]) : parseInt(n[0])
}
function u(e, t) {
const n = t;
for (let t = 0; t < n.length; t++)
if (n[t][0] > e) return n[t - 1][1];
return n[n.length - 1][1]
}
function d(e, t, n, s) {
const r = t(e.authorExternalChannelId);
! function(e, t) {
(null == t ? void 0 : t.a) && (e.authorName = {
simpleText: t.a
});
}(e, r),
function(e, t) {
var n, s;
e.authorBadges || (e.authorBadges = []);
for (const r of e.authorBadges) {
const e = r.liveChatAuthorBadgeRenderer;
(null === (n = e.icon) || void 0 === n ? void 0 : n.iconType) ? e._mtvType = null === (s = e.icon) || void 0 === s ? void 0 : s.iconType.toLowerCase(): e.customThumbnail && (e._mtvType = "member"), "moderator" === e._mtvType && (delete e.icon, e._mtvType = "moderator", e.customThumbnail = {
thumbnails: [{
url: t,
width: 18,
height: 18
}]
});
}
}(e, s),
function(e, t, n) {
if ((null == n ? void 0 : n.b) && !(n.b <= 0))
for (const s of e.authorBadges) {
const e = s.liveChatAuthorBadgeRenderer;
if ("member" !== e._mtvType) continue;
const r = l(e.tooltip);
if (0 === r) continue;
const i = r + n.b,
o = `Member (${i} months)`,
a = u(i, t);
e.customThumbnail = a, delete e.icon, e.tooltip = o, e.accessibility.accessibilityData.label = o;
}
}(e, n, r);
}
const h = /[\s.,?!]/;
function f(e) {
const t = [];
let n = 0;
for (let s = 0; s < e.length - 1; s++) h.test(e[s]) !== h.test(e[s + 1]) && (t.push(e.substring(n, s + 1)), n = s + 1);
return t.push(e.substring(n)), t
}
function m(e) {
let t$1;
if (e.provider === t.Twitch) t$1 = `https://static-cdn.jtvnw.net/emoticons/v2/${e.id}/static/dark/1.0`;
else if (e.provider === t.FFZ) t$1 = `https://cdn.frankerfacez.com/emote/${e.id}/1`;
else {
if (e.provider !== t.BTTV) return;
t$1 = `https://cdn.betterttv.net/emote/${e.id}/1x`;
}
return {
emojiId: "mogultv-" + e.name + "-" + e.id,
image: {
thumbnails: [{
url: t$1
}],
accessibility: {
accessibilityData: {
label: e.name
}
}
},
isCustomEmoji: !0,
searchTerms: [e.name],
shortcuts: [":" + e.name + ":", e.name]
}
}
const g = ["#ff0000", "#009000", "#b22222", "#ff7f50", "#9acd32", "#ff4500", "#2e8b57", "#daa520", "#d2691e", "#5f9ea0", "#1e90ff", "#ff69b4", "#00ff7f", "#a244f9"];
class p {
constructor(e) {
this.gatewayService = e;
}
addAliasesToMessage(e) {
d(e, (e => this.gatewayService.getUserInfo(e)), this.gatewayService.badgeList, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV/TiiIVBzuIOGRonSyIijpqFYpQIdQKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxc3NSdJES/5cUWsR4cNyPd/ced+8AoVFhmhUaAzTdNtPJhJjNrYrdrwgjBGAaMZlZxpwkpeA7vu4R4OtdnGf5n/tz9Kl5iwEBkXiWGaZNvEE8tWkbnPeJI6wkq8TnxKMmXZD4keuKx2+ciy4LPDNiZtLzxBFisdjBSgezkqkRTxJHVU2nfCHrscp5i7NWqbHWPfkLw3l9ZZnrNIeRxCKWIEGEghrKqMBGnFadFAtp2k/4+Idcv0QuhVxlMHIsoAoNsusH/4Pf3VqFiXEvKZwAul4c5yMGdO8CzbrjfB87TvMECD4DV3rbX20AM5+k19ta9Ajo3wYurtuasgdc7gCDT4Zsyq4UpCkUCsD7GX1TDhi4BXrXvN5a+zh9ADLUVeoGODgERoqUve7z7p7O3v490+rvB3pIcqqJKL5aAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5QwEARQDdqq2HwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAGkSURBVDjLpdSxS5tBGMfx7+V9JamLGbSQNNAQdBBJhZKWLPkHxKmQEgd9xUFwCRQKHe1cKHSztCCmLyQlkriULu2kSyBQkCCCg0bQCJrhTSUxoW+8DuLRNPqq8aa7hx8f7nk4TpDXDCQfAC+9rTKCt4KctgcEnZKJ/pcYoRmG+oewz21Wdlb4+PvzvxFLvwlJD5vEx+Lomg5A6ahE/nTt/5hXd0Le+98x9WRKnUtHJSYKkxzLalfW5djSaKILOZCHqvZQDLIwMO8MPdOf4h/wq3Or3epAAuIRP6M/MEYMZyjY1zm6SCBC8XlBId+j3wj7wuiui+lcO6PVszxNu4lH93RiFHBrbsK+MAAnjRNnKBVaxq25u+qRQETt7bZNavfL9a2lQstMj08jhHB8idmtLF8b2atvdBUipaTVbqk2K7UKme0MrytvVEa/DWJumhi7c8QfvKD8p0zR/tV1O0FOk7dBblougE+Pl+6FKGijukGtWesZUZBZT5NcT2KdWT0hl8O2AK9ZT8M6xAZjzO8v3PFLkmVBTpsFuQgi2Nu/Ji3QXv0FPBynaffELJkAAAAASUVORK5CYII=");
}
}
var w = {
exports: {}
},
v = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof window.msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto);
if (v) {
var y = new Uint8Array(16);
w.exports = function() {
return v(y), y
};
} else {
var b = new Array(16);
w.exports = function() {
for (var e, t = 0; t < 16; t++) 0 == (3 & t) && (e = 4294967296 * Math.random()), b[t] = e >>> ((3 & t) << 3) & 255;
return b
};
}
for (var A = [], C = 0; C < 256; ++C) A[C] = (C + 256).toString(16).substr(1);
var I, M, R = function(e, t) {
var n = t || 0,
s = A;
return [s[e[n++]], s[e[n++]], s[e[n++]], s[e[n++]], "-", s[e[n++]], s[e[n++]], "-", s[e[n++]], s[e[n++]], "-", s[e[n++]], s[e[n++]], "-", s[e[n++]], s[e[n++]], s[e[n++]], s[e[n++]], s[e[n++]], s[e[n++]]].join("")
},
k = w.exports,
S = R,
T = 0,
x = 0;
var E = function(e, t, n) {
var s = t && n || 0,
r = t || [],
i = (e = e || {}).node || I,
o = void 0 !== e.clockseq ? e.clockseq : M;
if (null == i || null == o) {
var a = k();
null == i && (i = I = [1 | a[0], a[1], a[2], a[3], a[4], a[5]]), null == o && (o = M = 16383 & (a[6] << 8 | a[7]));
}
var c = void 0 !== e.msecs ? e.msecs : (new Date).getTime(),
l = void 0 !== e.nsecs ? e.nsecs : x + 1,
u = c - T + (l - x) / 1e4;
if (u < 0 && void 0 === e.clockseq && (o = o + 1 & 16383), (u < 0 || c > T) && void 0 === e.nsecs && (l = 0), l >= 1e4) throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
T = c, x = l, M = o;
var d = (1e4 * (268435455 & (c += 122192928e5)) + l) % 4294967296;
r[s++] = d >>> 24 & 255, r[s++] = d >>> 16 & 255, r[s++] = d >>> 8 & 255, r[s++] = 255 & d;
var h = c / 4294967296 * 1e4 & 268435455;
r[s++] = h >>> 8 & 255, r[s++] = 255 & h, r[s++] = h >>> 24 & 15 | 16, r[s++] = h >>> 16 & 255, r[s++] = o >>> 8 | 128, r[s++] = 255 & o;
for (var f = 0; f < 6; ++f) r[s + f] = i[f];
return t || S(r)
},
B = w.exports,
O = R;
var q = function(e, t, n) {
var s = t && n || 0;
"string" == typeof e && (t = "binary" === e ? new Array(16) : null, e = null);
var r = (e = e || {}).random || (e.rng || B)();
if (r[6] = 15 & r[6] | 64, r[8] = 63 & r[8] | 128, t)
for (var i = 0; i < 16; ++i) t[s + i] = r[i];
return t || O(r)
},
j = E,
L = q,
_ = L;
_.v1 = j, _.v4 = L;
var P = _;
const N = 100,
U = -1,
V = {
"-32601": "Method not found"
};
V[N] = "Invalid origin", V[U] = "Error";
class W {
constructor({
postMessage: e,
timeout: t = 3e3
} = {}) {
this.postMessage = e, this.timeout = t, this.pendingRequests = {}, this.callbackFunctions = {}, this.call = this.call.bind(this), this.resolve = this.resolve.bind(this), this.resolveRPCResponse = this.resolveRPCResponse.bind(this);
}
call(e, t, n = {}) {
const {
timeout: s = this.timeout
} = n, r = function() {
let e = null,
t = null;
const n = new Promise(((n, s) => (e = n, t = s, t)));
return n.resolve = e, n.reject = t, n
}(), i = [];
for (const e of Array.from(t || []))
if ("function" == typeof e) {
const t = {
_browserComms: !0,
_browserCommsGunCallback: !0,
callbackId: P.v4()
};
this.callbackFunctions[t.callbackId] = e, i.push(t);
} else i.push(e);
const o = function({
method: e,
params: t
}) {
if (null == t) throw new Error("Must provide params");
for (const e of Array.from(t))
if ("function" == typeof e) throw new Error("Functions are not allowed. Use RPCCallback instead.");
return {
_browserComms: !0,
id: P.v4(),
method: e,
params: t
}
}({
method: e,
params: i
});
this.pendingRequests[o.id] = {
reject: r.reject,
resolve: r.resolve,
isAcknowledged: !1
};
try {
this.postMessage(JSON.stringify(o), "*");
} catch (e) {
return r.reject(e), r
}
return setTimeout((() => {
if (!this.pendingRequests[o.id].isAcknowledged) return r.reject(new Error("Message Timeout"))
}), s), r
}
resolve(e) {
switch (!1) {
case !(!0 === e?.acknowledge):
return this.resolveRPCRequestAcknowledgement(e);
case !J(e):
return this.resolveRPCResponse(e);
case ! function(e) {
return e?.callbackId && null != e.params
}(e):
return this.resolveRPCCallbackResponse(e);
default:
throw new Error("Unknown response type")
}
}
resolveRPCResponse(e) {
const t = this.pendingRequests[e.id];
if (null == t) throw new Error("Request not found");
t.isAcknowledged = !0;
const {
result: n,
error: s
} = e;
return s ? t.reject(s.data || new Error(s.message)) : null != n ? t.resolve(n) : t.resolve(null), null
}
resolveRPCRequestAcknowledgement(e) {
const t = this.pendingRequests[e.id];
if (null == t) throw new Error("Request not found");
return t.isAcknowledged = !0, null
}
resolveRPCCallbackResponse(e) {
const t = this.callbackFunctions[e.callbackId];
if (null == t) throw new Error("Callback not found");
return t.apply(null, e.params), null
}
}
function Q({
params: e,
callbackId: t
}) {
return {
_browserComms: !0,
callbackId: t,
params: e
}
}
function D({
requestId: e,
result: t = null,
rPCError: n = null
}) {
return {
_browserComms: !0,
id: e,
result: t,
error: n
}
}
function F({
code: e,
data: t = null
}) {
return {
_browserComms: !0,
code: e,
message: V[e],
data: t
}
}
function K(e) {
return e?._browserComms
}
function J(e) {
return e?.id && (void 0 !== e.result || void 0 !== e.error)
}
const G = 1e4,
Z = "undefined" != typeof window ? window : self;
class z {
constructor(e = {}) {
const {
timeout: t,
shouldConnectToServiceWorker: n,
handshakeTimeout: s = G,
isParentValidFn: r = (() => !0)
} = e;
this.handshakeTimeout = s, this.isParentValidFn = r, this.isListening = !1;
const i = globalThis?.window?._browserCommsIsInAppBrowser || -1 !== navigator.userAgent.indexOf("/InAppBrowser");
this.hasParent = "undefined" != typeof window && window.self !== window.top || i, this.parent = globalThis?.window?.parent, this.client = new W({
timeout: t,
postMessage: (e, t) => {
if (i) {
let t = (() => {
try {
return JSON.parse(localStorage["portal:queue"])
} catch (e) {
return null
}
})();
return null == t && (t = []), t.push(e), localStorage["portal:queue"] = JSON.stringify(t), localStorage["portal:queue"]
}
return this.parent?.postMessage(e, t)
}
}), this.ready = n ? function() {
return new Promise(((e, t) => {
const n = setTimeout(e, 5e3);
return navigator?.serviceWorker?.ready.catch((function() {
return console.log("caught sw error"), null
})).then((t => {
const s = t?.active;
return s && (this.sw = new W({
timeout: this.timeout,
postMessage: (e, t) => {
const n = new MessageChannel;
if (n) return n.port1.onmessage = e => this.onMessage(e, {
isServiceWorker: !0
}), s.postMessage(e, [n.port2])
}
})), clearTimeout(n), e()
}))
}))
}() : Promise.resolve(!0), this.registeredMethods = {
ping: () => Object.keys(this.registeredMethods)
}, this.parentsRegisteredMethods = [], this.setParent = this.setParent.bind(this), this.setInAppBrowserWindow = this.setInAppBrowserWindow.bind(this), this.replyInAppBrowserWindow = this.replyInAppBrowserWindow.bind(this), this.onMessageInAppBrowserWindow = this.onMessageInAppBrowserWindow.bind(this), this.listen = this.listen.bind(this), this.close = this.close.bind(this), this.call = this.call.bind(this), this.onRequest = this.onRequest.bind(this), this.onMessage = this.onMessage.bind(this), this.on = this.on.bind(this);
}
setParent(e) {
this.parent = e, this.hasParent = !0;
}
setInAppBrowserWindow(e, t) {
this.iabWindow = e;
const n = -1 !== navigator.userAgent.indexOf("iPhone") ? "loadstop" : "loadstart";
return this.iabWindow.addEventListener(n, (() => {
this.iabWindow.executeScript({
code: "window._browserCommsIsInAppBrowser = true;"
}), clearInterval(this.iabInterval), this.iabInterval = setInterval((() => this.iabWindow.executeScript({
code: "localStorage.getItem('portal:queue');"
}, (e => {
try {
return (e = JSON.parse(e?.[0])) && e.length && this.iabWindow.executeScript({
code: "localStorage.setItem('portal:queue', '[]')"
}), e.map((e => t(e)))
} catch (t) {
return console.log(t, e)
}
}))), 100);
})), this.iabWindow.addEventListener("exit", (() => clearInterval(this.iabInterval)))
}
replyInAppBrowserWindow(e) {
const t = e.replace(/'/g, "'");
return this.iabWindow.executeScript({
code: `if(window._browserCommsOnMessage) window._browserCommsOnMessage('${t}')`
})
}
onMessageInAppBrowserWindow(e) {
return this.onMessage({
data: e,
source: {
postMessage: e => this.call("browser.reply", {
data: e
})
}
})
}
listen() {
this.isListening = !0, Z.addEventListener("message", this.onMessage), "undefined" != typeof window && null !== window && (window._browserCommsOnMessage = e => this.onMessage({
debug: !0,
data: (() => {
try {
return JSON.parse(e)
} catch (t) {
return console.log("error parsing", e), null
}
})()
})), this.clientValidation = this.client.call("ping", null, {
timeout: this.handshakeTimeout
}).then((e => {
this.hasParent && (this.parentsRegisteredMethods = this.parentsRegisteredMethods.concat(e));
})).catch((() => null)), this.swValidation = this.ready.then((() => this.sw?.call("ping", null, {
timeout: this.handshakeTimeout
}))).then((e => {
this.parentsRegisteredMethods = this.parentsRegisteredMethods.concat(e);
}));
}
close() {
return this.isListening = !0, Z.removeEventListener("message", this.onMessage)
}
async call(e, ...t) {
if (!this.isListening) return new Promise(((e, t) => t(new Error("Must call listen() before call()"))));
const n = (e, t) => {
const n = this.registeredMethods[e];
if (!n) throw new Error("Method not found");
return n.apply(null, t)
};
if (await this.ready, this.hasParent) {
let s = null;
await this.clientValidation;
if (!(-1 !== this.parentsRegisteredMethods.indexOf(e))) return n(e, t); {
const r = await this.client.call(e, t);
try {
if ("ping" === e) {
const s = n(e, t);
return (r || []).concat(s)
}
return r
} catch (r) {
try {
if (s = r, !this.sw) return n(e, t);
try {
const s = await this.sw.call(e, t);
if ("ping" === e) {
const r = n(e, t);
return (s || []).concat(r)
}
return s
} catch {
return n(e, t)
}
} catch (e) {
throw "Method not found" === e.message && s ? s : e
}
}
}
} else {
if (!this.sw) return n(e, t);
if (await this.swValidation, -1 === this.parentsRegisteredMethods.indexOf(e)) return n(e, t);
try {
const s = await this.sw.call(e, t);
if ("ping" === e) {
const r = n(e, t);
return (s || []).concat(r)
}
return s
} catch (s) {
return n(e, t)
}
}
}
async onRequest(e, t) {
const n = [];
for (const s of Array.from(t.params || [])) s?._browserCommsGunCallback ? (t => {
n.push(((...n) => e(Q({
params: n,
callbackId: t.callbackId
}))));
})(s) : n.push(s);
e(function({
requestId: e
}) {
return {
_browserComms: !0,
id: e,
acknowledge: !0
}
}({
requestId: t.id
}));
try {
const s = await this.call(t.method, ...Array.from(n));
return e(D({
requestId: t.id,
result: s
}))
} catch (n) {
return e(D({
requestId: t.id,
rPCError: F({
code: U,
data: n
})
}))
}
}
onMessage(e, {
isServiceWorker: t
} = {}) {
try {
const s = "string" == typeof e.data ? JSON.parse(e.data) : e.data;
if (!K(s)) return;
const r = function(t) {
return "undefined" != typeof window && null !== window ? e.source?.postMessage(JSON.stringify(t), "*") : e.ports[0].postMessage(JSON.stringify(t))
};
if (null != (n = s)?.id && null != n.method) return this.onRequest(r, s);
if (K(s)) {
let n;
if (this.isParentValidFn(e.origin)) return n = t ? this.sw : this.client, n.resolve(s);
if (J(s)) return n = t ? this.sw : this.client, n.resolve(D({
requestId: s.id,
rPCError: F({
code: N
})
}));
throw new Error("Invalid origin")
}
throw new Error("Unknown RPCEntity type")
} catch (e) {}
var n;
}
on(e, t) {
this.registeredMethods[e] = t;
}
}
class H {
constructor() {
this.call = (e, t) => this.browserComms.call(e, t), this.listen = () => {
this.browserComms.listen(), this.browserComms.on("context.getCredentials", this.getCredentials), this.browserComms.on("dom.setStyle", this.setStyle);
}, this.setStyle = ({
querySelector: e,
style: t
}) => {
const n = document.querySelector(e);
null == n || n.setAttribute("style", t);
}, this.getCredentials = () => this.credentials, this.setCredentials = e => {
this.credentials = e;
}, this.browserComms = new z, this.credentials = {};
}
}
class X {
constructor(e) {
this.gatewayService = e;
}
addTwitchEmotesToMessage(e) {
return function(e, t) {
const n = [];
for (const s of e.runs)
if ("string" == typeof s.text) {
const {
text: e
} = s;
let r = 0,
i = 0;
const o = f(e);
let a = !1;
for (const s of o) {
const o = t("🌝" === s ? "Kappa" : s);
o && (a = !0, r > 0 && n.push({
text: e.substring(i, r)
}), n.push({
emoji: o
}), i = r + s.length), r += s.length;
}
a ? n.push({
text: e.substring(i, r)
}) : n.push(s);
} else if ("🌝" === s.emoji.emojiId) {
const e = t("Kappa");
e && n.push({
emoji: e
});
} else n.push(s);
return e.runs = n, e
}(e, (e => this.gatewayService.getEmote(e)))
}
}
class Y extends e.exports.EventEmitter {
constructor(e) {
super(), this.backgroundService = e, this.badgeList = [], this.emoteCache = new Map, e.getLiveStorageValue("auth.token", dt).then((e => this.myUserInfo = e)), this.fetchUserInfo(), this.fetchEmotes(), this.fetchBadges(), setInterval((() => {
this.fetchUserInfo(), this.fetchEmotes(), this.fetchBadges();
}), 3e5);
}
async fetchBadges() {
const e = await this.backgroundService.fetch("/gateway/badges");
if (!s(e)) return;
const t = e.body.sort(((e, t) => e.months - t.months));
this.badgeList = t.map((e => [e.months, {
thumbnails: [{
url: e.url,
width: 16,
height: 16
}]
}])), this.emit("badges", this.badgeList);
}
async fetchEmotes() {
const e = await this.backgroundService.fetch("/gateway/emotes");
if (s(e)) {
this.emoteCache.clear();
for (const t of e.body) {
const e = m(t);
e && this.emoteCache.set(t.name, e);
}
this.emit("emotes", this.emoteCache);
}
}
async fetchUserInfo() {
const e = await this.backgroundService.fetch("/gateway/users");
s(e) && (this.infoCache = new Map(e.body), this.emit("users", this.infoCache));
}
getSerializedMetadata(e) {
const t = e.links.find((t => t.prv === e.prv)),
n = {
a: null == t ? void 0 : t.name,
b: e.meta.sub,
c: e.meta.col
};
return Object.values(n).filter((e => void 0 !== e)).length > 0 ? n : void 0
}
getUserInfo(e) {
var t, n, s;
if ((null === (n = null === (t = this.myUserInfo) || void 0 === t ? void 0 : t.value) || void 0 === n ? void 0 : n.sub) === e) {
const e = this.getSerializedMetadata(this.myUserInfo.value);
if (e) return e
}
return null === (s = this.infoCache) || void 0 === s ? void 0 : s.get(e)
}
getEmote(e) {
var t;
return null === (t = this.emoteCache) || void 0 === t ? void 0 : t.get(e)
}
}
/*!
* cookie
* Copyright(c) 2012-2014 Roman Shtylman
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/
var $ = function(e, t) {
if ("string" != typeof e) throw new TypeError("argument str must be a string");
for (var n = {}, s = t || {}, r = e.split(te), i = s.decode || ee, o = 0; o < r.length; o++) {
var a = r[o],
c = a.indexOf("=");
if (!(c < 0)) {
var l = a.substr(0, c).trim(),
u = a.substr(++c, a.length).trim();
'"' == u[0] && (u = u.slice(1, -1)), null == n[l] && (n[l] = ne(u, i));
}
}
return n
},
ee = decodeURIComponent,
te = /; */;
function ne(e, t) {
try {
return t(e)
} catch (t) {
return e
}
}
async function se(e, t, n) {
if (!window.ytcfg) return;
const s$1 = await e.fetch("/auth/token");
if (!s(s$1) || !s$1.body) return;
const r = {
sourceType: "google",
token: s$1.body
};
t.setCredentials(r);
const o = await e.fetch("/spore/fetch-extension-mappings", n);
if (s(o)) {
const e = o.body;
e && (null == e ? void 0 : e.length) > 0 && e.forEach((e => {
re(e, {
sourceType: "youtube"
});
}));
}
}
function re(e, {
sourceType: t,
retries: n = 15
}) {
if (!e) return;
if (n < 0) return;
const s = function(e) {
var t, n;
if (e.iframeQuerySelector) {
const s = document.querySelector(e.querySelector),
r = null !== (t = null == s ? void 0 : s.contentDocument) && void 0 !== t ? t : null === (n = null == s ? void 0 : s.contentWindow) || void 0 === n ? void 0 : n.document;
if (!r) return;
return r.querySelector(e.iframeQuerySelector)
}
return document.querySelector(e.querySelector)
}(e);
if (s) {
const t = document.createElement("iframe");
t.src = e.iframeUrl, t.setAttribute("key", e.slug), t.id = e.slug, "append" === e.domAction ? s.appendChild(t) : "replace" === e.domAction && s.replaceWith(t);
} else setTimeout((() => {
re(e, {
sourceType: t,
retries: n - 1
});
}), 250);
}
var ie;
async function oe(e, n) {
await customElements.whenDefined(e);
const s = customElements.get(e);
if (!s) return void console.warn(`Polymer: ${e} not found`);
const r = s.prototype[n.functionName];
s.prototype[n.functionName] = function(...e) {
if (n.ludwigOnly && !e$4()) return r.apply(this, e);
if (n.type === ie.OverrideFunction) try {
return n.function.apply(this, e)
} catch (e) {
console.error(JSON.stringify(n)), console.error(e);
}
if (n.type === ie.RunBefore) try {
n.function.apply(this, e);
} catch (e) {
console.error(e);
}
let s = r.apply(this, e);
if (n.type === ie.RunAfter) try {
s = n.function.apply(this, [s]);
} catch (e) {
console.error(e);
}
return s
};
}! function(e) {
e[e.OverrideFunction = 0] = "OverrideFunction", e[e.RunBefore = 1] = "RunBefore", e[e.RunAfter = 2] = "RunAfter";
}(ie || (ie = {}));
const ae = (e, t, {
LudwigOnly: n
}) => ({
functionName: e,
function: t,
ludwigOnly: n || !1,
type: ie.OverrideFunction
}),
ce = (e, t, {
LudwigOnly: n
}) => ({
functionName: e,
function: t,
ludwigOnly: n || !1,
type: ie.RunBefore
});
function le(e, n, s) {
oe("yt-live-chat-item-list-renderer", ce("handleAddChatItemAction_", (function(t) {
t.item.liveChatTextMessageRenderer && (e.addTwitchEmotesToMessage(t.item.liveChatTextMessageRenderer.message), n.addAliasesToMessage(t.item.liveChatTextMessageRenderer));
}), {
LudwigOnly: true
})), oe("yt-live-chat-text-input-field-renderer", ((e, t, {
LudwigOnly: n
}) => ({
functionName: e,
function: t,
ludwigOnly: n || !1,
type: ie.RunAfter
}))("calculateLiveChatRichMessageInput_", (function(e) {
var t;
if (!(null == e ? void 0 : e.textSegments)) return e;
for (const n of e.textSegments)
if (null === (t = n.emojiId) || void 0 === t ? void 0 : t.startsWith("mogultv")) {
const [, e] = n.emojiId.split("-");
delete n.emojiId, n.text = e;
} return e
}), {
LudwigOnly: true
})), s.on("emotes", (e => {
if (!e$4()) return;
const n = document.querySelector("yt-live-chat-item-list-renderer");
if (null == n ? void 0 : n.emojiManager) {
if (n.emojiManager._mogulTvLoaded) return;
n.emojiManager._mogulTvLoaded = !0, n.emojiManager.load([...e.values()]);
} else console.warn("Cannot find chat list");
}));
}
function ue(e) {
return e ? e._mtvType ? e._mtvType : e.icon ? e.icon.iconType.toLowerCase() : e.customThumbnail ? "member" : "" : ""
}
async function de(e) {
oe("yt-live-chat-author-badge-renderer", ae("computeType_", (e => ue(e.liveChatAuthorBadgeRenderer)), {
LudwigOnly: true
})), oe("yt-live-chat-author-chip", ae("computeAuthorType_", (function(t) {
var n, s;
const r = this.$["author-name"];
if (r) {
let t;
const i = null === (n = this.parentElement) || void 0 === n ? void 0 : n.parentElement,
o = null === (s = null == i ? void 0 : i.data) || void 0 === s ? void 0 : s.authorExternalChannelId;
if (o) {
const n = e.getUserInfo(o);
(null == n ? void 0 : n.c) && (t = n.c);
}
t || (t = function(e) {
const t = function(e) {
let t = 0;
if (0 === e.length) return 0;
for (let n = 0; n < e.length; n++) t = (t << 5) - t + e.charCodeAt(n), t |= 0;
return t
}(e);
return g[(t % g.length + g.length) % g.length]
}(this.authorName.simpleText)), r.style.color = t;
}
return function(e) {
if (!e) return "";
for (const t of e) {
if (!t.liveChatAuthorBadgeRenderer) continue;
const e = ue(t.liveChatAuthorBadgeRenderer);
if ("verified" !== e) return e
}
return ""
}(t)
}), {
LudwigOnly: true
}));
}
e$1("\n/* Make the masthead transparent unless we are hovering it */\nbody[data-mogul-theater-mode] #masthead-container {\n opacity: 0.1;\n transition: opacity .2s ease;\n}\n\nbody[data-mogul-theater-mode] #masthead-container:hover {\n opacity: 1;\n}\n\n\n@media screen and (min-width: 1014px) {\n /* Make chat fill screen vertically */\n body[data-mogul-theater-mode] #chat.ytd-watch-flexy {\n height: calc(100vh - 56px) !important;\n width: var(--ytd-watch-flexy-sidebar-width);\n position: absolute;\n top: 56px;\n right: 0;\n }\n\n body[data-mogul-theater-mode] #player-theater-container.ytd-watch-flexy {\n width: calc(100vw - var(--ytd-watch-flexy-sidebar-width) - var(--ytd-watch-flexy-scrollbar-width)) !important;\n max-width: calc(100vw - var(--ytd-watch-flexy-sidebar-width) - var(--ytd-watch-flexy-scrollbar-width)) !important;\n height: calc(100vh - 56px) !important;\n max-height: calc(100vh - 56px) !important;\n }\n}");
const he = null !== document.querySelector("yt-live-chat-app"),
fe = new e$2;
if (he) {
const e = new Y(fe),
t = new X(e),
n = new p(e);
me = fe, le(t, n, ge = e), async function(e) {
const t = await e.getLiveStorageValue("settings.chatBatching");
oe("yt-timed-continuation", ce("dataChanged_", (function() {
t.value && (this.data.timeoutMs /= 3 * Math.random() + 2);
}), {
LudwigOnly: !0
})), oe("yt-live-chat-renderer", ce("preprocessActions_", (function(e) {
const n = Object.getPrototypeOf(this.smoothedQueue_);
for (const e in n)
if (e.includes("emitSmoothedMessages")) {
n[e] = function() {
if (this.nextUpdateId_ = null, this.messageQueue_.length) {
let s = 1e4;
this.estimatedUpdateInterval_ && (s = this.estimatedUpdateInterval_ - Date.now() + this.lastUpdateTime_);
const r = this.messageQueue_.length < s / 80 ? 1 : Math.ceil(this.messageQueue_.length / (s / 80)),
i = this.messageQueue_.splice(0, r);
if (this.callback && this.callback(i[0]), this.messageQueue_.length) {
let i = 1;
t.value || (1 === r ? (i = s / this.messageQueue_.length, i *= Math.random() + .5, i = Math.min(1e3, i), i = Math.max(80, i)) : i = 80), this.nextUpdateId_ = window.setTimeout(n[e].bind(this), i);
}
}
};
break
} return e
}), {
LudwigOnly: !0
}));
}(me), de(ge);
} else {
!async function(e) {
async function n() {
const n = document.querySelector("ytd-watch-flexy"),
s = (null == n ? void 0 : n.hasAttribute("theater")) || !1,
r = (null == n ? void 0 : n.hasAttribute("fullscreen")) || !1,
i = await e.getStorage("settings.theaterMode"),
o = e$4(!1);
return s && !r && i && o
}
let s = await n();
setInterval((async () => {
await n() ? (document.body.setAttribute("data-mogul-theater-mode", ""), s || window.dispatchEvent(new Event("resize")), s = !0) : (s = !1, document.body.removeAttribute("data-mogul-theater-mode"));
}), 250);
}(fe), async function(e) {
if (!window.ytcfg) return;
const t = {
key: window.ytcfg.get("INNERTUBE_API_KEY"),
authUser: window.ytcfg.get("SESSION_INDEX"),
pageId: window.ytcfg.get("DELEGATED_SESSION_ID"),
href: window.location.href,
context: window.ytcfg.get("INNERTUBE_CONTEXT")
};
n = await e$3(Object.assign(Object.assign({}, t), {
cookies: $(document.cookie)
})), s = await e.fetch("/auth/@me"), (!n.success || !s.meta.isSuccess || n.data.id !== (null === (r = s.body) || void 0 === r ? void 0 : r.sub) || !(null === (i = s.body) || void 0 === i ? void 0 : i.googleId)) && await e.fetch("/auth/login", t);
var n, s, r, i;
}(fe);
const e = new H;
e.listen();
const s = setInterval((() => {
const t = n();
(null == t ? void 0 : t.channelId) && (clearInterval(s), se(fe, e, t.channelId));
}), 1e3);
setInterval((() => {
const e = document.querySelector("ytd-live-chat-frame iframe");
if (e && !e.src.includes("rVuDVKjClhIQSUGR")) {
const t = n();
e.src += `#rVuDVKjClhIQSUGR=${encodeURIComponent(JSON.stringify(t))}`;
}
}), 1e3);
}
var me, ge;