OsuWebRequests

simple wrapper for making osu related sequential web requests

Verze ze dne 06. 03. 2022. Zobrazit nejnovější verzi.

Tento skript by neměl být instalován přímo. Jedná se o knihovnu, kterou by měly jiné skripty využívat pomocí meta příkazu // @require https://update.greasyfork.org/scripts/441005/1024904/OsuWebRequests.js

class Request {
    constructor(url, params, callback) {
        this.url = new URL(url);
        this.url.search = new URLSearchParams(params).toString();
        this.callback = callback;
    }

    send(cb) {
        fetch(this.url, { credentials: "include" }).then(res => {
            cb();
            this.callback(res);
        }).catch(err => {
            cb();
            console.log(err);
        });
    }
}

class Web {
    base = "https://osu.ppy.sh";

    constructor(apiKey = null) {
        this.key = apiKey;
        this.requests = [];
    }

    get(path, params, cb) {
        const req = new Request(`${this.base}${path}`, params, cb);
        this.queue(req);
    }

    api(path, params, cb) {
        params.k = this.key;
        const req = new Request(`${this.base}/api${path}`, params, cb);
        this.queue(req);
    }

    queue(req) {
        this.requests.push(req);
        if (this.requests.length === 1) {
            this.next();
        }
    }

    next() {
        if (this.requests.length === 0) {
            return;
        }
        const req = this.requests[0];
        req.send(() => {
            this.requests.shift();
            this.next();
        });
    }
}