9anime Auto Best Resolution

Automatcially select the highest resolution on vidstream/mycloud streams

// ==UserScript==
// @name         9anime Auto Best Resolution
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  Automatcially select the highest resolution on vidstream/mycloud streams
// @author       Discord: nvllptr
// @match        https://vidplay.online/*
// @match        https://vidstream.pro/*
// @match        https://vidstreamz.online/*
// @match        https://mcloud.to/*
// @match        https://vizcloud.co/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=9anime.to
// @grant        none
// @license      MIT
// ==/UserScript==

(async () => {
    'use strict';

    function waitForElement(selector, baseElement = document.body) {
        return new Promise(resolve => {
            if (baseElement.querySelector(selector)) {
                return resolve(baseElement.querySelector(selector));
            }

            const observer = new MutationObserver(mutations => {
                if (baseElement.querySelector(selector)) {
                    resolve(baseElement.querySelector(selector));
                    observer.disconnect();
                }
            });

            observer.observe(baseElement, {
                childList: true,
                subtree: true
            });
        });
    }

    // Once the settings button is loaded, we know the player is loaded
    const settingsButtonSelector = 'div.jw-icon.jw-icon-inline.jw-button-color.jw-reset.jw-icon-settings.jw-settings-submenu-button';
    await waitForElement(settingsButtonSelector);

    // Set the quality to the highest with the jwplayer api
    const player = jwplayer();
    // 0 = auto, 1 = highest
    player.on('firstFrame', () => player.setCurrentQuality(1));
})();