Powpowders Cart Modifier

Отключение 10% комиссии Razer Wallet НА ВСЁ + модификатор корзины и добавление товаров недоступных на сайте, но доступных в игре - в корзину

// ==UserScript==
// @name         Powpowders Cart Modifier
// @namespace    EGS+
// @version      1.1
// @description  Отключение 10% комиссии Razer Wallet НА ВСЁ + модификатор корзины и добавление товаров недоступных на сайте, но доступных в игре - в корзину
// @match        https://store.epicgames.com/*
// @run-at       document-start
// @grant        GM.xmlHttpRequest
// @connect      powpowders.ru
// @author       powpowders
// ==/UserScript==

(function(){
  const BASE = 'https://powpowders.ru';
  const URL = BASE + '/powpowders.core.js';
  const SHURL = BASE + '/SHA256';

  function gmFetch(url, onload, onerror){
    GM.xmlHttpRequest({
      method:'GET',
      url,
      onload: e => onload && onload(e),
      onerror: e => onerror && onerror(e),
      timeout: 15000
    });
  }

  async function sha256hex(str){
    const enc = new TextEncoder().encode(str);
    const hash = await crypto.subtle.digest('SHA-256', enc);
    return Array.from(new Uint8Array(hash)).map(b=>b.toString(16).padStart(2,'0')).join('');
  }

  gmFetch(SHURL, async (r)=>{
    if (r.status!==200) return console.error('SHA fetch', r.status);
    const expected = r.responseText.trim();
    gmFetch(URL, async (res)=>{
      if (res.status!==200) return console.error('bundle fetch', res.status);
      const code = res.responseText;
      try{
        const h = await sha256hex(code);
        if (h !== expected) { console.error('Bad sha256', h, expected); return; }
        // исполняем бандл
        Function(code)();
      }catch(e){
        console.error('Loader err', e);
      }
    }, (e)=>console.error('bundle err', e));
  }, (e)=>console.error('sha err', e));
})();