Unlock all Fireship PRO courses/lessons.
// ==UserScript==
// @name Freeship
// @namespace lemons
// @version 1.12
// @description Unlock all Fireship PRO courses/lessons.
// @author lemons
// @match https://fireship.io/*
// @icon https://em-content.zobj.net/source/apple/391/fire_1f525.png
// @grant none
// ==/UserScript==
async function unlock() {
document.querySelectorAll("[free=\"\"]").forEach(el => el.setAttribute("free", true)) // set all elements with the attribute free set to "" to true
if (document.querySelector("if-access [slot=\"granted\"]")) { // replace HOW TO ENROLL to YOU HAVE ACCESS
document.querySelector("if-access [slot=\"denied\"]").remove()
document.querySelector("if-access [slot=\"granted\"]").setAttribute("slot", "denied")
}
if (document.querySelector("video-player")?.shadowRoot?.querySelector(".vid")?.innerHTML) return; // return if no video player
const parts = atob(document.querySelector("global-data").vimeo).split("=");
let decoded = "";
parts.forEach(part => {
let done = "";
try {
done = atob(part)
} catch {} finally {
decoded += done
}
});
let vimeoId = "";
if (decoded.includes("/")) {
vimeoId = Number(decoded.split("\u0088")[0].split("/").pop());
} else {
vimeoId = Number(decoded.split("\u0088")[0])
}
const youtubeId = atob(document.querySelector("global-data").youtube); // get id for youtube video
if (youtubeId) { // if there is an id,
document.querySelector("video-player").setAttribute("free", true) // set free to true
document.querySelector("video-player").shadowRoot.querySelector(".vid").innerHTML = `<iframe src="https://youtube.com/embed/${youtubeId}" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="" title="${location.pathname.split("/")[3]}" width="426" height="240" frameborder="0"></iframe>` // set video
return;
}
if (vimeoId) { // if there is an id,
document.querySelector("video-player").setAttribute("free", true) // set free to true
const html = (await fetch(`https://vimeo.com/api/oembed.json?url=https%3A%2F%2Fvimeo.com%2F${vimeoId}&id=${vimeoId}`).then(r=>r.json())).html
document.querySelector("video-player").shadowRoot.querySelector(".vid").innerHTML = html // set video
return;
}
}
window.onload = unlock();
window.addEventListener("flamethrower:router:end", unlock)