OsuWebRequests

simple wrapper for making osu related sequential web requests

Verzia zo dňa 06.03.2022. Pozri najnovšiu verziu.

Tento skript by nemal byť nainštalovaný priamo. Je to knižnica pre ďalšie skripty, ktorú by mali používať cez meta príkaz // @require https://update.greatest.deepsurf.us/scripts/441005/1024922/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).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();
        });
    }
}