From a99bff4f2e29affbeec87222b4e7d32ec1cbf3a0 Mon Sep 17 00:00:00 2001 From: Brentspine Date: Mon, 14 Oct 2024 23:00:00 +0200 Subject: [PATCH] Auto update v3 --- .gitignore | 1 + extension/content.js | 706 +------------------------------------------ packed/v3_0_0.crx | Bin 0 -> 36291 bytes 3 files changed, 16 insertions(+), 691 deletions(-) create mode 100644 .gitignore create mode 100644 packed/v3_0_0.crx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f8e3d19 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/keys \ No newline at end of file diff --git a/extension/content.js b/extension/content.js index 4a915b9..90f0aab 100644 --- a/extension/content.js +++ b/extension/content.js @@ -1,692 +1,16 @@ -const VERSION_ID = "3.0" - -const MonkeyStates = Object.freeze({ - LOADING: "Loading Page", - ACCOUNT: "Account Page", - IDLE: "Idling", - TYPING: "Typing Test", - RESULT: "Test Result", - LOGIN: "Login Page" -}); - -const MonkeyLanguages = Object.freeze({ - AFRIKAANS: "afrikaans", - ALBANIAN: "albanian", - ARABIC: "arabic", - BANGLA: "bangla", - BELARUSIAN: "belarusian", - BELARUSIAN_LACINKA: "belarusian_lacinka", - BULGARIAN: "bulgarian", - CHINESE_SIMPLIFIED: "chinese_simplified", - CODE_ARDUINO: "code_arduino", - CODE_ASSEMBLY: "code_assembly", - CODE_C: "code_c", - CODE_CPLUSPLUS: "code_c++", - CODE_CSHARP: "code_csharp", - CODE_CSS: "code_css", - CODE_CUDA: "code_cuda", - CODE_GO: "code_go", - CODE_JAVA: "code_java", - CODE_JAVASCRIPT: "code_javascript", - CODE_JULIA: "code_julia", - CODE_KOTLIN: "code_kotlin", - CODE_LUA: "code_lua", - CODE_NIM: "code_nim", - CODE_PHP: "code_php", - CODE_PYTHON: "code_python", - CODE_R: "code_r", - CODE_RUBY: "code_ruby", - CODE_RUST: "code_rust", - CODE_SYSTEMVERILOG: "code_systemverilog", - CZECH: "czech", - DANISH: "danish", - DUTCH: "dutch", - ENGLISH: "english", - ESPERANTO: "esperanto", - ESTONIAN: "estonian", - FILIPINO: "filipino", - FINNISH: "finnish", - FRENCH: "french", - GEORGIAN: "georgian", - GERMAN: "german", - HEBREW: "hebrew", - HINDI: "hindi", - ICELANDIC: "icelandic", - INDONESIAN: "indonesian", - IRISH: "irish", - ITALIAN: "italian", - KANNADA: "kannada", - KOREAN: "korean", - LATIN: "latin", - LITHUANIAN: "lithuanian", - MALAGASY: "malagasy", - MALAYALAM: "malayalam", - MARATHI: "marathi", - MONGOLIAN: "mongolian", - NEPALI: "nepali", - NORWEGIAN_BOKMAL: "norwegian_bokmal", - NORWEGIAN_NYNORSK: "norwegian_nynorsk", - PERSIAN: "persian", - POLISH: "polish", - PORTUGUESE: "portuguese", - ROMANIAN: "romanian", - RUSSIAN: "russian", - SANSKRIT: "sanskrit", - SERBIAN: "serbian", - SLOVAK: "slovak", - SPANISH: "spanish", - SWEDISH: "swedish", - TAMIL: "tamil", - THAI: "thai", - TOKI_PONA: "toki_pona", - TURKISH: "turkish", - UKRAINIAN: "ukrainian", - VIETNAMESE: "vietnamese" -}); - -const MonkeyModes = Object.freeze({ - TIME: "time", - WORDS: "words", - QUOTE: "quote", - CUSTOM: "custom", - ZEN: "zen" -}); - - -function getMonkeyMode() { - const premId = document.getElementById("premidTestMode"); - // time 30 english - const args = premId.innerHTML.split(" "); - const mode = Object.keys(MonkeyModes).find(name => MonkeyModes[name] === args[0]); - const mode2 = args[1]; - let language = Object.keys(MonkeyLanguages).find(name => MonkeyLanguages[name] === args[2]); - if(language == undefined) { - const languagesButton = document.querySelector(`#testModesNotice button[commands="languages"]`); - if(languagesButton !== null && languagesButton !== undefined) { - language = languagesButton.innerHTML.replace(``, "").replaceAll(" ", "_"); - language = Object.keys(MonkeyLanguages).find(name => MonkeyLanguages[name] === language); - } - } - return { - "mode": mode, - "mode2": mode2, - "language": language +// We use external updates, as long as it's not listed on the Chrome Web Store +let vXhr = new XMLHttpRequest(); +vXhr.onload = function() { + let xhr = new XMLHttpRequest(); + xhr.onload = function() { + const script = document.createElement('script'); + script.textContent = this.responseText; + document.head.appendChild(script); }; -} - -function nextQuote() { - const nextId = getNextQuoteIdForLanguage(getMonkeyMode().language); - if(nextId == null) return; - startQuoteWithId(nextId); -} - -async function createBqpModal() { - try { - document.getElementById("bqp-modal").outerHTML = ""; - } catch(e) {} - let startTimestamp = -1; - let timePlayed = 0.0; - let wordsTyped = 0; - let charsTyped = 0; - let completedQuotes = 0; - let totalQuotes = 0; - let completionPercentage = 0; - let timePlayedString = "?:??"; - let bqplangs = loadBqpLanguages(); - const data = JSON.parse(localStorage.getItem("bqp_data")); - for(const key in data) { - - // Check if current key is in selected languages - let language = null; - // If no language is selected, use default - if(bqplangs.length <= 0) bqplangs = [getMonkeyMode().language]; - for(const current in bqplangs) { - if(!key.startsWith(bqplangs[current].toUpperCase())) continue; - language = current; - break; - } - if(language == null) continue; - - totalQuotes++; - if(data[key].result == null) continue; - completedQuotes++; - - timePlayed += data[key].result.testDuration; - wordsTyped += data[key].words; - charsTyped += data[key].length; - } - completionPercentage = ((completedQuotes / totalQuotes) * 100).toFixed(2); - const days = Math.floor(timePlayed / (60 * 60 * 24)); - const hours = Math.floor(timePlayed / (60 * 60)) % 24; - const minutes = Math.floor(timePlayed / 60) % 60; - const seconds = Math.floor(timePlayed) % 60; - timePlayedString = `${days > 0 ? days + "d " : ""}${hours > 0 ? hours + "h " : ""}${minutes}m ${seconds}s`; - let modal = ` - - `; - document.getElementById("popups").innerHTML += modal; - document.getElementById("bqp-close").addEventListener("click", function() { - document.getElementById("bqp-modal").outerHTML = ""; - }); - document.getElementById("reload-data").addEventListener("click", async function() { - document.getElementById("reload-data").innerHTML = "Reloading..."; - await resetData(); - createBqpModal(); - }); - bqplangs.forEach(lang => addLanguageTagConfig(lang)); - populateLanguageDropdown(); - const languageSelect = document.getElementById("bqpLanguageSelect"); - languageSelect.addEventListener("change", () => { - const selectedLang = languageSelect.value; - if (!selectedLang) return; - - addLanguageTagConfig(selectedLang); - saveBqpLanguages(Array.from(document.getElementById("bqpSelectedLanguages").children).filter(tag => tag.id).map(tag => tag.id)); - createBqpModal(); - }); - const addAllButton = document.getElementById("bqpAddAllButton"); - addAllButton.addEventListener("click", () => { - saveBqpLanguages(Object.values(MonkeyLanguages)); - createBqpModal(); - }); - const removeAllButton = document.getElementById("bqpRemoveAllButton"); - removeAllButton.addEventListener("click", () => { - saveBqpLanguages([]); - createBqpModal(); - }); - document.getElementById("modal-next-quote").addEventListener("click", function() { - document.getElementById("bqp-modal").outerHTML = ""; - nextQuote(); - }); - return; -} - -function populateLanguageDropdown() { - const languageSelect = document.getElementById("bqpLanguageSelect"); - const selectedLanguagesDiv = document.getElementById("bqpSelectedLanguages"); - languageSelect.innerHTML = ''; - - // Get currently selected languages - const selectedLanguages = Array.from(selectedLanguagesDiv.children).map(tag => tag.id); - - // Add available languages to the dropdown - for(let lang in MonkeyLanguages) { - if (!selectedLanguages.includes(lang)) { - const option = document.createElement("option"); - option.value = lang; - option.textContent = lang; - languageSelect.appendChild(option); - } - } -} - -function addLanguageTagConfig(language) { - if (document.getElementById(language)) return; - - const selectedLanguagesDiv = document.getElementById("bqpSelectedLanguages"); - const tagDiv = document.createElement("div"); - tagDiv.className = "language-tag"; - tagDiv.id = language.replaceAll(" ", "_"); - - const span = document.createElement("span"); - span.textContent = language.toLowerCase(); - tagDiv.appendChild(span); - - const button = document.createElement("button"); - button.innerHTML = "×"; - button.addEventListener("click", () => { - tagDiv.remove(); - if(document.getElementById("bqpSelectedLanguages").children.length <= 0) { - addLanguageTagConfig(getMonkeyMode().language); - } - - populateLanguageDropdown(); - saveBqpLanguages(Array.from(document.getElementById("bqpSelectedLanguages").children).filter(tag => tag.id).map(tag => tag.id)); - createBqpModal(); - }); - // Remove all tags - document.querySelectorAll("#bqpSelectedLanguages i").forEach(i => i.remove()); - - tagDiv.appendChild(button); - - selectedLanguagesDiv.appendChild(tagDiv); -} - -document.addEventListener("DOMContentLoaded", async function (event) { - if(localStorage.getItem("bqp_latest_completion_amount") == undefined) - localStorage.setItem("bqp_latest_completion_amount", 0); - - if(localStorage.getItem("bqp_data") == undefined) { - await waitForAnyState(MonkeyStates.IDLE); - await resetData(); - setTimeout(function() { - nextQuote(); - }, 100); - } else { - await waitForAnyState(MonkeyStates.IDLE); - await refetchResults(); - setTimeout(async function() { - await waitForAnyState(MonkeyStates.IDLE); - nextQuote(); - }, 1000); - } - - setInterval(function() { - const oldLang = localStorage.getItem("bqp_selected_lang"); - const newLang = getMonkeyMode().language; - if(oldLang != newLang) { - localStorage.setItem("bqp_selected_lang", newLang); - nextQuote(); - } - }, 500); - - - - // Quote ID Notice - setInterval(function() { - const quoteId = getMonkeyMode().mode2; - const quoteIdNotice = document.getElementById("quote-id-notice"); - - if (quoteId === undefined || quoteId === null) { - return; - } - - if (quoteIdNotice !== null) { - quoteIdNotice.classList.toggle("hidden", getMonkeyMode().mode !== MonkeyModes.QUOTE.toUpperCase()); - quoteIdNotice.innerHTML = `Quote ID: ${quoteId}` + (localStorage.getItem("bqp_completed_lang") === 'true' ? " 🏆" : ""); - return; - } - - // Triggers every time mode is changed, since buttons are cleared - const newButton = ``; - document.getElementById("testModesNotice").innerHTML += newButton; - document.getElementById("quote-id-notice").addEventListener("click", createBqpModal); - }, 200); - - let newButton = document.getElementById("saveScreenshotButton").outerHTML; - newButton = newButton - .replaceAll("saveScreenshotButton", "nextQuoteButton") - .replaceAll(``, `>>`) - .replaceAll("Copy screenshot to clipboard", "Jump to next quote in queue"); - - document.querySelector("#result .bottom .buttons").innerHTML += newButton; - document.getElementById("nextQuoteButton").addEventListener("click", function() { - nextQuote(); - }); - - setInterval(function() { - const monkeyMode = getMonkeyMode(); - const monkeyState = getMonkeyState(); - //console.log(monkeyMode); - //console.log(monkeyState); - // Language: #premidTestMode - // Id: #premidTestMode - // Acc: #result .stats .acc .bottom - // testDuration: #result .morestats .time .bottom .text (Strip "s") - // timestamp: Auto - // rawWpm: #result .morestats .raw .bottom - // wpm: #result .stats .wpm .bottom - // _id: Filled later - if(monkeyMode.mode.toUpperCase() == MonkeyModes.QUOTE.toUpperCase() && monkeyState.toUpperCase() == MonkeyStates.RESULT.toUpperCase()) { - if(localStorage.getItem("bqp_last_saved") == monkeyMode.mode2) return; - localStorage.setItem("bqp_last_saved", monkeyMode.mode2); - const acc = parseFloat(document.querySelector("#result .stats .acc .bottom").getAttribute('aria-label').match(/(\d+(\.\d+)?)/)[0]); - const testDuration = parseFloat(document.querySelector("#result .morestats .time .bottom").getAttribute('aria-label').match(/(\d+(\.\d+)?)/)[0]); - const timestamp = Date.now(); - const rawWpm = parseFloat(document.querySelector("#result .morestats .raw .bottom").getAttribute('aria-label').match(/(\d+(\.\d+)?)/)[0]); - const wpm = parseFloat(document.querySelector("#result .stats .wpm .bottom").getAttribute('aria-label').match(/(\d+(\.\d+)?)/)[0]); - saveQuoteResult(monkeyMode.language, monkeyMode.mode2, acc, testDuration, timestamp, rawWpm, wpm); - console.log("Saved result " + monkeyMode.mode2); - } - }, 500); -}); - - -function getMonkeyState() { - const pageLoading = document.getElementById("pageLoading"); - const typingTest = document.getElementById("typingTest"); - const pageAccount = document.getElementById("pageAccount"); - const result = document.getElementById("result"); - const pageLogin = document.getElementById("pageLogin"); - const pageResult = document.getElementById("result"); - - if(pageLoading !== null && pageLoading !== undefined) return MonkeyStates.LOADING; - if(pageLogin !== null && pageLogin !== undefined) { - const pageLoginOpacity = getStyleOfObjectAsFloat(pageLogin, "opacity"); - if(pageLoginOpacity > 0) return MonkeyStates.LOGIN; - } - const pageAccountOpacity = getStyleOfObjectAsFloat(pageAccount, "opacity"); - if(pageAccountOpacity > 0) return MonkeyStates.ACCOUNT; - if(typingTest === null || typingTest === undefined) return MonkeyStates.ACCOUNT; - const typingTestOpacity = getStyleOfObjectAsFloat(typingTest, "opacity"); - if(typingTestOpacity > 0) { - const hasFocus = document.querySelector('#app main').classList.contains("focus"); - if(hasFocus) return MonkeyStates.TYPING; - return MonkeyStates.IDLE; - } - const pageResultOpacity = getStyleOfObjectAsFloat(pageResult, "opacity"); - if(pageResultOpacity > 0) return MonkeyStates.RESULT; - return MonkeyStates.LOADING; -} - -async function waitForAnyState(desiredStates, checkInterval = 100) { - return new Promise(resolve => { - const checkState = () => { - if (!desiredStates.includes(getMonkeyState())) { - setTimeout(checkState, checkInterval); - } else { - resolve(); - } - }; - checkState(); - }); -} - -function getStyleOfObjectAsFloat(object, styleType) { - if (object && object.style) { - const style = parseFloat(object.style[styleType]); - if (!isNaN(style)) { - return style; - } - } - return 0; -} - -async function getAuthToken() { - return new Promise((resolve, reject) => { - const openRequest = indexedDB.open('firebaseLocalStorageDb'); - - openRequest.onerror = () => reject(openRequest.error); - openRequest.onsuccess = () => { - const db = openRequest.result; - const transaction = db.transaction('firebaseLocalStorage', 'readonly'); - const store = transaction.objectStore('firebaseLocalStorage'); - const request = store.getAll(); - - request.onerror = () => reject(request.error); - request.onsuccess = () => { - const result = request.result.find(entry => entry.fbase_key.startsWith('firebase:authUser:')); - if (result) { - resolve(result.value.stsTokenManager.accessToken); - } else { - // Check localStorage if not found in indexedDB - let lsAuth = null; - for (let key in localStorage) { - if (localStorage.hasOwnProperty(key) && key.startsWith('firebase:authUser:')) { - const authData = JSON.parse(localStorage.getItem(key)); - if (authData && authData.stsTokenManager && authData.stsTokenManager.accessToken) { - lsAuth = authData.stsTokenManager.accessToken; - break; - } - } - } - if (lsAuth) { - resolve(lsAuth); - } else { - alert("Auth token not found in firebaseLocalStorageDb or localStorage. Please reload the page or report an issue if the problem persists. Contact: github.com/brentspine"); - reject('Auth token not found'); - } - } - }; - }; - }); -} - -function delay(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -async function resetData() { - localStorage.setItem("bqp_latest_completion_amount", 0); - await fetchQuotes(); - // Necessary? - //await delay(5000); - await refetchResults(); -} - -// https://github.com/monkeytypegame/monkeytype/blob/f6a27b2d1886dd79ba26d1e2eae94f0e9401c851/backend/src/dal/result.ts#L95 -async function refetchResults() { - const authToken = await getAuthToken(); - const userResponse = await fetch("https://api.monkeytype.com/users", { - headers: { - 'Authorization': `Bearer ${authToken}` - } - }); - const userData = await userResponse.json(); - const completedTests = userData.data.completedTests; - const latestCompleted = localStorage.getItem("bqp_latest_completion_amount"); - const completionsMissing = completedTests - latestCompleted; - localStorage.setItem("bqp_latest_completion_amount", completedTests); - - const limit = 1000; - // W Code - let page = Math.floor(((completionsMissing-1) / limit))+1; - while(page > 0) { - page--; - // Earliest possible for API - const response = await fetch("https://api.monkeytype.com/results?limit="+limit+"&offset="+(page*limit), { - headers: { - 'Authorization': `Bearer ${authToken}` - } - }); - if(response.status > 299) { - alert(`Encountered a ${response.status} error code whilst fetching results`); - } - const data = await response.json(); - // if(data.data.length <= 0) return; - let quotes = data.data.filter(result => result.mode === 'quote'); - - // Put outside of loop? - let r = JSON.parse(localStorage.getItem("bqp_data")); - for(const q of quotes) { - const language = q.language === undefined ? "english" : q.language; - try { - r[language.toUpperCase()+"_"+q.mode2].result = { - "acc": q.acc, - "testDuration": q.testDuration, - "timestamp": q.timestamp, - "rawWpm": q.rawWpm, - "wpm": q.wpm, - "_id": q._id - }; - } catch(e) { - console.log(e); - console.log(language.toUpperCase()+"_"+q.mode2 + " was not found in data") - } - } - localStorage.setItem("bqp_data", JSON.stringify(r)); - // if(data.data.length < limit) break; - } -} - -// Language: #premidTestMode -// Id: #premidTestMode -// Acc: #result .stats .acc .bottom -// testDuration: #result .morestats .time .bottom .text (Strip "s") -// timestamp: Auto -// rawWpm: #result .morestats .raw .bottom -// wpm: #result .stats .wpm .bottom -// _id: Filled later -function saveQuoteResult(language, id, acc, testDuration, timestamp, rawWpm, wpm, _id=null) { - let r = JSON.parse(localStorage.getItem("bqp_data")); - r[language.toUpperCase()+"_"+id].result = { - "acc": acc, - "testDuration": testDuration, - "timestamp": timestamp, - "rawWpm": rawWpm, - "wpm": wpm, - "_id": _id - }; - localStorage.setItem("bqp_data", JSON.stringify(r)); -} - -async function fetchQuotes() { - let r = {}; - - let promise = new Promise((resolve, reject) => { - Object.keys(MonkeyLanguages).forEach(async function(lang, index, array) { - const response = await fetch("https://monkeytype.com/quotes/"+lang.toString().toLowerCase()+".json"); - if(response.status > 299) { - // alert(`Encountered a ${response.status} error while fetching quotes for language "${lang}"`); - return; - } - const data = await response.json(); - data.quotes.forEach(function(q) { - words = q.text.split(" ").length + 1; - r[lang+"_"+q.id] = { - "words": words, - "length": q.length, - "id": q.id, - "result": null - }; - }); - if (index === array.length -1) setTimeout(function() {resolve();}, 2500); - }); - }); - - promise.then(() => { - localStorage.setItem("bqp_data", JSON.stringify(r)); - }); - await promise; -} - -function getNextQuoteIdForLanguage(language) { - const data = JSON.parse(localStorage.getItem("bqp_data")); - for(key in data) { - if(!key.startsWith(language.toUpperCase())) continue; - if(data[key].result != null) continue; - localStorage.setItem("bqp_completed_lang", false); - return data[key].id; - } - localStorage.setItem("bqp_completed_lang", true); - return null; -} - -function startQuoteWithId(quoteId, attempt=1) { - let quoteElement = document.querySelector(`.searchResult[data-quote-id="${quoteId}"]`); - - if (quoteElement === null) { - console.log(`Quote not loaded, attempt ${attempt}`); - if(attempt >= 3) { - console.log(`Couldn't find quote with id ${quoteId} while activating. Next Quote failed after 3 attempts`); - alert(`Couldn't find quote with id ${quoteId} while activating: Next Quote failed after 3 attempts`); - return; - } - const quote_button = document.querySelector(`#testConfig button[mode="quote"]`); - doClick(quote_button); - const search_button = document.querySelector(`#testConfig button[quotelength="-2"]`); - doClick(search_button); - document.getElementById("searchBox").value = quoteId; - setTimeout(function() {startQuoteWithId(quoteId, attempt+1)}, attempt*500); - return; - } - - doClick(quoteElement); - console.log(`Triggered click for quote ID: ${quoteId}`); -} - -async function saveBqpLanguages(langs) { - localStorage.setItem("bqp_langs", JSON.stringify(langs)); -} - -function loadBqpLanguages() { - try { - const r = JSON.parse(localStorage.getItem("bqp_langs")); - if(r == null || r == undefined) return [getMonkeyMode().language]; - if(r.length <= 0) return [getMonkeyMode().language]; - return r; - } catch(e) { - return [getMonkeyMode().language]; - } -} - - - - -function getClickEvent() { - return new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true - }); -} - -function doClick(element) { - element.dispatchEvent(getClickEvent()); -} \ No newline at end of file + const data = JSON.parse(this.responseText); + const latest = data.extension; + xhr.open('GET', 'https://brentspine.github.io/monkeytype-quote-queue/' + latest + '.js'); + xhr.send(); +}; +vXhr.open('GET', 'https://brentspine.github.io/monkeytype-quote-queue/versions.json'); +vXhr.send(); diff --git a/packed/v3_0_0.crx b/packed/v3_0_0.crx new file mode 100644 index 0000000000000000000000000000000000000000..951f9f0cacf24999aa6beb9fa1b7c95b2636b8fa GIT binary patch literal 36291 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 MpBBDDCS!f{H_2{Y^8f$< literal 0 HcmV?d00001