Onlyfans "leak" finder

Checks some sites for OF "leaks"

// ==UserScript==
// @name         Onlyfans "leak" finder
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Checks some sites for OF "leaks"
// @author       You
// @match        https://onlyfans.com/*
// @match        *coomer.su/*
// @match        *fapello.com/*
// @grant        GM.xmlHttpRequest
// @license      Unlicense
// ==/UserScript==

(function() {
    'use strict';

    function getUsernameFromUrl() {
        const urlParts = window.location.pathname.split('/');
        const username = urlParts[1];
        return username;
    }

    function fetchUserProfileCoomer(username, retryCount = 0) {
        const apiUrl = `https://coomer.su/api/v1/onlyfans/user/${username}/profile`;

        GM.xmlHttpRequest({
            method: 'GET',
            url: apiUrl,
            onload: function(response) {
                if (response.status === 200) {
                    const data = JSON.parse(response.responseText);
                    const profileUrl = `https://coomer.su/onlyfans/user/${username}`;
                    addLinkToMenu(profileUrl, 'Coomer.su');
                } else if (response.status === 404) {
                    console.log(`User ${username} not found`);
                } else {
                    console.error('Network response was not ok:', response.status);
                    if (retryCount < 5) {
                        console.log(`Retrying... Attempt ${retryCount + 1}`);
                        setTimeout(() => fetchUserProfileCoomer(username, retryCount + 1), 1000);
                    } else {
                        console.error('Max retry attempts reached');
                    }
                }
            },
            onerror: function(error) {
                console.error('Error fetching data:', error);
            }
        });
    }

    function fetchUserProfileFapello(username, retryCount = 0) {
        const apiUrl = `https://fapello.com/${username}/`;

        GM.xmlHttpRequest({
            method: 'GET',
            url: apiUrl,
            onload: function(response) {
                if (response.finalUrl === apiUrl) {
                    const profileUrl = `https://fapello.com/${username}/`;
                    addLinkToMenu(profileUrl, 'Fapello');
                } else {
                    console.log(`Request was redirected`);
                }
            },
            onerror: function(error) {
                console.error('Error fetching data:', error);
                if (retryCount < 5) {
                    console.log(`Retrying... Attempt ${retryCount + 1}`);
                    setTimeout(() => fetchUserProfileFapello(username, retryCount + 1), 1000);
                } else {
                    console.error('Max retry attempts reached');
                }
            }
        });
    }

    function addLinkToMenu(link, displayText) {
        const menuElement = document.querySelector('.l-header__menu.m-native-custom-scrollbar.m-scrollbar-y.m-invisible-scrollbar');
        const aElement = document.createElement('a');
        aElement.setAttribute('href', link);
        aElement.textContent = displayText;
        aElement.style.marginRight = "10px";

        // Check if there are already links in the menu
        const existingLinks = menuElement.querySelectorAll('a');
        if (existingLinks.length > 0) {
            const lineBreak = document.createElement('br');
            menuElement.appendChild(lineBreak);
        }

        menuElement.appendChild(aElement);
    }

    function waitForElement(selector, callback) {
        const observer = new MutationObserver((mutations, observer) => {
            const element = document.querySelector(selector);
            if (element) {
                observer.disconnect();
                callback(element);
            }
        });

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

    const username = getUsernameFromUrl();
    waitForElement('.l-header__menu.m-native-custom-scrollbar.m-scrollbar-y.m-invisible-scrollbar', () => {
        fetchUserProfileCoomer(username);
        fetchUserProfileFapello(username);
    });
})();