Gumroad Region Lock Bypass on free items

Disable gumroad.com Region Lock

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Gumroad Region Lock Bypass on free items
// @namespace    DisableGumroadRegionLock
// @version      0.3
// @description  Disable gumroad.com Region Lock
// @author       Samu
// @match        https://*.gumroad.com/l/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
  'use strict';

  setTimeout(init, 1000);

  function init() {

    var warningButton = document.querySelector("article.product section div.warning[role='status']");
    var productId = document.head.querySelector("meta[content][property='product:retailer_item_id']");

    if (warningButton != undefined && productId?.content) {
      createCustomButton(productId.content, warningButton);
    } else {
      setTimeout(init, 100);
    }

  }

  function createCustomButton(id, container) {

    var url = "https://" + window.location.host + "/purchases";
    var button = document.createElement("button");
    button.classList.add("primary");
    button.textContent = "View Content";

    var errorMsg = "UserScript (Gumroad Region Lock Bypass): Could not fetch contentUrl, script might need update";

    button.addEventListener("click", () => {
      fetchContentUrl(url, id)
        .then(contentUrl => {
          if (contentUrl) {
            window.open(contentUrl, '_blank');
          } else {
            alert(errorMsg);
          }
        })
        .catch(e => alert(errorMsg));
    });

    container.innerHTML = "";
    container.appendChild(button);
  }

  function fetchContentUrl(url, id) {
    var randomString = (Math.random() + 1).toString(36).substring(2);
    return fetch(url, {
      method: "POST",
      body: new URLSearchParams({
        'line_items[0][permalink]': id,
        'line_items[0][perceived_price_cents]': +document.head.querySelector("meta[content][property='product:price:amount']").content,
        'email': `${randomString}@${randomString}.com`,
      }),
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
      }
    })
      .then(res => res.json())
      .then(res => {
        if (res?.success) {
          var content = res["line_items"][""];
          if (content?.success) {
            return content["content_url"];
          }
        }
        return null;
      });
  }

  //GM_addStyle(".i-want-this-container { display: block !important; }");
})();