Fetch Intercept Userscript

A JS script that intercepts the fetch prototype and overrides it to intercept POST requests

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         Fetch Intercept Userscript
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  A JS script that intercepts the fetch prototype and overrides it to intercept POST requests
// @author       You
// @match        https://academy.cs.cmu.edu/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cmu.edu
// @grant        none
// ==/UserScript==



//add any desired link addresses to block to the list
const blockingRequests = []

//to call the fetch, click on the check button in the exercise
var originalFetch = window.fetch;
window.fetch = function(url, options){
    if (url == "https://backend.academy.cs.cmu.edu/api/v0/submission/points/"){
        const optionsBody = JSON.parse(options.body)
        let submissionID = optionsBody.submission_id;
        let fileVersion = optionsBody.file_version;

        const exercisePoints = 1; //change as needed to exercise max limit
        /*
        @param {number} submissionID a 4 digit number that is created upon submission(is in link)
        @param {number} points - a 1 digit number that represents the amount of points scored upon submission 
        | (NOTE - be very careful with setting it to high or to negative values - it can break the website/exercises)
        @param {string} score - string that can have 2 possiblities "PASS" or "FAIL"
        @param {arr} fileVersion - an array that contains 2 numbers that represent fileversion (should be kept the same)
        */
        let jsonDefined = {
            "submission_id": submissionID,
            "points": exercisePoints, 
            "score": "PASS",
            "file_version": fileVersion
        }
        options.body = JSON.stringify(jsonDefined);
        console.log(`Found submission url: ${url}, ${options.body}`);
     }
    //elif not blocked url  
    if (blockingRequests.some(blockedUrl => url.includes(blockedUrl))){
        console.log("Blocked Request in List:", url);
        return Promise.reject(new Error("Blocked Request."))
    }else{
        return originalFetch.apply(this, arguments)
    }
}