@osu-tournament-rating/otr-api-client
Version: 
Client code for interacting with the o!TR API
1,245 lines (1,244 loc) • 213 kB
JavaScript
"use strict";
//----------------------
// <auto-generated>
//     Generated using the NSwag toolchain v14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaults = exports.OtrApiError = exports.OtrApiResponse = exports.VerificationStatus = exports.TournamentRejectionReason = exports.TournamentQuerySortType = exports.TeamType = exports.Team = exports.ScoringType = exports.ScoreRejectionReason = exports.ScoreGrade = exports.Ruleset = exports.Roles = exports.RatingAdjustmentType = exports.OperationType = exports.Mods = exports.MessagePriority = exports.MatchWarningFlags = exports.MatchRejectionReason = exports.MatchQuerySortType = exports.GameWarningFlags = exports.GameRejectionReason = exports.FilteringFailReason = exports.BeatmapRankedStatus = exports.AuthorizationPolicies = exports.AuditEntityType = exports.AuditActionType = exports.AdminNoteRouteTarget = exports.UsersWrapper = exports.TournamentsWrapper = exports.SearchWrapper = exports.PlayersWrapper = exports.PlatformStatsWrapper = exports.MeWrapper = exports.MatchesWrapper = exports.LeaderboardsWrapper = exports.GameScoresWrapper = exports.GamesWrapper = exports.FilteringWrapper = exports.ClientsWrapper = exports.BeatmapsWrapper = exports.AuthWrapper = exports.AuditWrapper = exports.AdminNotesWrapper = exports.OtrApiWrapperBase = void 0;
const axios_1 = __importDefault(require("axios"));
class OtrApiWrapperBase {
    constructor(configuration) {
        configuration !== null && configuration !== void 0 ? configuration : (configuration = exports.defaults);
        this.configuration = configuration;
        this.configuration.clientConfiguration = Object.assign(Object.assign(Object.assign({}, defaultAxiosClientConfiguration), this.configuration.clientConfiguration), { withCredentials: true });
    }
    getBaseUrl(..._) {
        return this.configuration.baseUrl;
    }
    /**
     * Exposes the underlying axios client for configuration
     */
    configureClient(configure) {
        return __awaiter(this, void 0, void 0, function* () {
            // @ts-expect-error
            return yield configure(this.instance);
        });
    }
}
exports.OtrApiWrapperBase = OtrApiWrapperBase;
class AdminNotesWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Create an admin note for an entity
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link AdminNotesCreateNoteRequestParams})
    * @return Returns the created admin note
    */
    createNote(params, cancelToken) {
        const { entityId, entity, body } = params;
        let url_ = this.baseUrl + "/api/v1/{entity}/{entityId}/notes";
        if (entityId === undefined || entityId === null)
            throw new Error("The parameter 'entityId' must be defined.");
        url_ = url_.replace("{entityId}", encodeURIComponent("" + entityId));
        if (entity === undefined || entity === null)
            throw new Error("The parameter 'entity' must be defined.");
        url_ = url_.replace("{entity}", encodeURIComponent("" + entity));
        url_ = url_.replace(/[?&]$/, "");
        const content_ = JSON.stringify(body);
        let options_ = {
            data: content_,
            method: "POST",
            url: url_,
            headers: {
                "Content-Type": "application/json-patch+json",
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processCreateNote(_response);
        });
    }
    processCreateNote(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("An entity matching the given id does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 400) {
            const _responseText = response.data;
            let result400 = null;
            let resultData400 = _responseText;
            result400 = JSON.parse(resultData400);
            return throwException("The authorized user does not exist", status, _responseText, _headers, result400);
        }
        else if (status === 201) {
            const _responseText = response.data;
            let result201 = null;
            let resultData201 = _responseText;
            result201 = JSON.parse(resultData201);
            return Promise.resolve(new OtrApiResponse(status, _headers, result201));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * List admin notes for an entity
    *
    * Requires Authorization:
    *
    * Policy: ApiKey
    * @param params Request parameters (see {@link AdminNotesListNotesRequestParams})
    * @return Returns all admin notes for the entity
    */
    listNotes(params, cancelToken) {
        const { entityId, entity } = params;
        let url_ = this.baseUrl + "/api/v1/{entity}/{entityId}/notes";
        if (entityId === undefined || entityId === null)
            throw new Error("The parameter 'entityId' must be defined.");
        url_ = url_.replace("{entityId}", encodeURIComponent("" + entityId));
        if (entity === undefined || entity === null)
            throw new Error("The parameter 'entity' must be defined.");
        url_ = url_.replace("{entity}", encodeURIComponent("" + entity));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processListNotes(_response);
        });
    }
    processListNotes(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("An entity matching the given id does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Update an admin note
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link AdminNotesUpdateNoteRequestParams})
    * @return Returns the updated admin note
    */
    updateNote(params, cancelToken) {
        const { noteId, entity, body } = params;
        let url_ = this.baseUrl + "/api/v1/{entity}/notes/{noteId}";
        if (noteId === undefined || noteId === null)
            throw new Error("The parameter 'noteId' must be defined.");
        url_ = url_.replace("{noteId}", encodeURIComponent("" + noteId));
        if (entity === undefined || entity === null)
            throw new Error("The parameter 'entity' must be defined.");
        url_ = url_.replace("{entity}", encodeURIComponent("" + entity));
        url_ = url_.replace(/[?&]$/, "");
        const content_ = JSON.stringify(body);
        let options_ = {
            data: content_,
            method: "PATCH",
            url: url_,
            headers: {
                "Content-Type": "application/json-patch+json",
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processUpdateNote(_response);
        });
    }
    processUpdateNote(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("An admin note matching the given noteId does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 403) {
            const _responseText = response.data;
            let result403 = null;
            let resultData403 = _responseText;
            result403 = JSON.parse(resultData403);
            return throwException("User is attempting to update a note which they do not own", status, _responseText, _headers, result403);
        }
        else if (status === 400) {
            const _responseText = response.data;
            let result400 = null;
            let resultData400 = _responseText;
            result400 = JSON.parse(resultData400);
            return throwException("The update was not successful", status, _responseText, _headers, result400);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Delete an admin note
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link AdminNotesDeleteNoteRequestParams})
    * @return The admin note was deleted
    */
    deleteNote(params, cancelToken) {
        const { noteId, entity } = params;
        let url_ = this.baseUrl + "/api/v1/{entity}/notes/{noteId}";
        if (noteId === undefined || noteId === null)
            throw new Error("The parameter 'noteId' must be defined.");
        url_ = url_.replace("{noteId}", encodeURIComponent("" + noteId));
        if (entity === undefined || entity === null)
            throw new Error("The parameter 'entity' must be defined.");
        url_ = url_.replace("{entity}", encodeURIComponent("" + entity));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "DELETE",
            url: url_,
            headers: {},
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processDeleteNote(_response);
        });
    }
    processDeleteNote(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("An admin note matching the given noteId does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 403) {
            const _responseText = response.data;
            let result403 = null;
            let resultData403 = _responseText;
            result403 = JSON.parse(resultData403);
            return throwException("User is attempting to delete a note which they do not own", status, _responseText, _headers, result403);
        }
        else if (status === 400) {
            const _responseText = response.data;
            let result400 = null;
            let resultData400 = _responseText;
            result400 = JSON.parse(resultData400);
            return throwException("The deletion was not successful", status, _responseText, _headers, result400);
        }
        else if (status === 204) {
            const _responseText = response.data;
            return Promise.resolve(new OtrApiResponse(status, _headers, null));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.AdminNotesWrapper = AdminNotesWrapper;
class AuditWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Get audits for a specific entity
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link AuditGetEntityAuditsRequestParams})
    * @return Returns a list of audits for the specified entity
    */
    getEntityAudits(params, cancelToken) {
        const { entityType, entityId } = params;
        let url_ = this.baseUrl + "/api/v1/audit/entity/{entityType}/{entityId}";
        if (entityType === undefined || entityType === null)
            throw new Error("The parameter 'entityType' must be defined.");
        url_ = url_.replace("{entityType}", encodeURIComponent("" + entityType));
        if (entityId === undefined || entityId === null)
            throw new Error("The parameter 'entityId' must be defined.");
        url_ = url_.replace("{entityId}", encodeURIComponent("" + entityId));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processGetEntityAudits(_response);
        });
    }
    processGetEntityAudits(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Get audits performed by a specific user
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link AuditGetUserAuditsRequestParams})
    * @return Returns a list of audits performed by the specified user
    */
    getUserAudits(params, cancelToken) {
        const { userId } = params;
        let url_ = this.baseUrl + "/api/v1/audit/user/{userId}";
        if (userId === undefined || userId === null)
            throw new Error("The parameter 'userId' must be defined.");
        url_ = url_.replace("{userId}", encodeURIComponent("" + userId));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processGetUserAudits(_response);
        });
    }
    processGetUserAudits(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.AuditWrapper = AuditWrapper;
class AuthWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Logs in to o!TR
    * @param params Request parameters (see {@link AuthLoginRequestParams})
    * @return OK
    */
    login(params, cancelToken) {
        const { redirectUri } = params;
        let url_ = this.baseUrl + "/api/v1/auth/login?";
        if (redirectUri === null)
            throw new Error("The parameter 'redirectUri' cannot be null.");
        else if (redirectUri !== undefined)
            url_ += "redirectUri=" + encodeURIComponent("" + redirectUri) + "&";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {},
            cancelToken,
            requiresAuthorization: false
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processLogin(_response);
        });
    }
    processLogin(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            return Promise.resolve(new OtrApiResponse(status, _headers, null));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Logs out from o!TR
    * @param params Request parameters (see {@link AuthLogoutRequestParams})
    * @return OK
    */
    logout(params, cancelToken) {
        const { redirectUri } = params;
        let url_ = this.baseUrl + "/api/v1/auth/logout?";
        if (redirectUri === null)
            throw new Error("The parameter 'redirectUri' cannot be null.");
        else if (redirectUri !== undefined)
            url_ += "redirectUri=" + encodeURIComponent("" + redirectUri) + "&";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {},
            cancelToken,
            requiresAuthorization: false
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processLogout(_response);
        });
    }
    processLogout(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            return Promise.resolve(new OtrApiResponse(status, _headers, null));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Authenticate using client credentials
    * @param params Request parameters (see {@link AuthAuthenticateClientRequestParams})
    * @return Returns client access credentials
    */
    authenticateClient(params, cancelToken) {
        const { clientId, clientSecret } = params;
        let url_ = this.baseUrl + "/api/v1/auth/token?";
        if (clientId === undefined || clientId === null)
            throw new Error("The parameter 'clientId' must be defined and cannot be null.");
        else
            url_ += "clientId=" + encodeURIComponent("" + clientId) + "&";
        if (clientSecret === undefined || clientSecret === null)
            throw new Error("The parameter 'clientSecret' must be defined and cannot be null.");
        else
            url_ += "clientSecret=" + encodeURIComponent("" + clientSecret) + "&";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "POST",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: false
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processAuthenticateClient(_response);
        });
    }
    processAuthenticateClient(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 401) {
            const _responseText = response.data;
            let result401 = null;
            let resultData401 = _responseText;
            result401 = JSON.parse(resultData401);
            return throwException("Could not authenticate", status, _responseText, _headers, result401);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.AuthWrapper = AuthWrapper;
class BeatmapsWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * List all beatmaps
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @return Returns all beatmaps
    */
    list(cancelToken) {
        let url_ = this.baseUrl + "/api/v1/beatmaps";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processList(_response);
        });
    }
    processList(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Get a beatmap
    *
    * Get a beatmap searching first by id, then by osu! id
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link BeatmapsGetRequestParams})
    * @return Returns a beatmap
    */
    get(params, cancelToken) {
        const { key } = params;
        let url_ = this.baseUrl + "/api/v1/beatmaps/{key}";
        if (key === undefined || key === null)
            throw new Error("The parameter 'key' must be defined.");
        url_ = url_.replace("{key}", encodeURIComponent("" + key));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processGet(_response);
        });
    }
    processGet(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("A beatmap matching the given key does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Enqueues a message to fetch beatmap data from the osu! API
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link BeatmapsFetchRequestParams})
    * @return The fetch request was accepted and queued for processing
    */
    fetch(params, cancelToken) {
        const { id, priority } = params;
        let url_ = this.baseUrl + "/api/v1/beatmaps/{id}/fetch?";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        if (priority === null)
            throw new Error("The parameter 'priority' cannot be null.");
        else if (priority !== undefined)
            url_ += "priority=" + encodeURIComponent("" + priority) + "&";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "POST",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processFetch(_response);
        });
    }
    processFetch(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 202) {
            const _responseText = response.data;
            let result202 = null;
            let resultData202 = _responseText;
            result202 = JSON.parse(resultData202);
            return Promise.resolve(new OtrApiResponse(status, _headers, result202));
        }
        else if (status === 400) {
            const _responseText = response.data;
            let result400 = null;
            let resultData400 = _responseText;
            result400 = JSON.parse(resultData400);
            return throwException("The provided beatmap ID is negative", status, _responseText, _headers, result400);
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.BeatmapsWrapper = BeatmapsWrapper;
class ClientsWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Create a new OAuth client
    *
    * Client secret is only returned from creation.
    * The user will have to reset the secret if they lose access.
    *
    * Requires Authorization:
    *
    * Claim(s): user
    * @return Returns created client credentials
    */
    create(cancelToken) {
        let url_ = this.baseUrl + "/api/v1/clients";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "POST",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processCreate(_response);
        });
    }
    processCreate(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Set the rate limit for a client
    *
    * Requires Authorization:
    *
    * Claim(s): admin
    * @param params Request parameters (see {@link ClientsPatchRateLimitRequestParams})
    * @return Returns the updated client
    */
    patchRateLimit(params, cancelToken) {
        const { id, body } = params;
        let url_ = this.baseUrl + "/api/v1/clients/{id}/ratelimit";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        url_ = url_.replace(/[?&]$/, "");
        const content_ = JSON.stringify(body);
        let options_ = {
            data: content_,
            method: "POST",
            url: url_,
            headers: {
                "Content-Type": "application/json-patch+json",
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processPatchRateLimit(_response);
        });
    }
    processPatchRateLimit(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("A client matching the given id does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.ClientsWrapper = ClientsWrapper;
class FilteringWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Filter a list of users based on the criteria as described in
    * API.DTOs.FilteringResultDTO
    *
    * Requires Authorization:
    *
    * Claim(s): user, client
    * @param params Request parameters (see {@link FilteringFilterRequestParams})
    * @return The filtering result
    */
    filter(params, cancelToken) {
        const { body } = params;
        let url_ = this.baseUrl + "/api/v1/filtering";
        url_ = url_.replace(/[?&]$/, "");
        const content_ = JSON.stringify(body);
        let options_ = {
            data: content_,
            method: "POST",
            url: url_,
            headers: {
                "Content-Type": "application/json-patch+json",
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processFilter(_response);
        });
    }
    processFilter(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 400) {
            const _responseText = response.data;
            let result400 = null;
            let resultData400 = _responseText;
            result400 = JSON.parse(resultData400);
            return throwException("The request body is invalid", status, _responseText, _headers, result400);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
    /**
    * Get a stored filter report by ID
    *
    * Requires Authorization:
    *
    * Policy: ApiKey
    * @param params Request parameters (see {@link FilteringGetFilterReportRequestParams})
    * @return The filter report
    */
    getFilterReport(params, cancelToken) {
        const { id } = params;
        let url_ = this.baseUrl + "/api/v1/filtering/{id}";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processGetFilterReport(_response);
        });
    }
    processGetFilterReport(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("The filter report was not found", status, _responseText, _headers, result404);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve(new OtrApiResponse(status, _headers, null));
    }
}
exports.FilteringWrapper = FilteringWrapper;
class GamesWrapper extends OtrApiWrapperBase {
    constructor(configuration) {
        super(configuration);
        this.jsonParseReviver = undefined;
        this.instance = axios_1.default.create(this.configuration.clientConfiguration);
        this.baseUrl = this.getBaseUrl("");
        if (this.configuration.postConfigureClientMethod) {
            this.configuration.postConfigureClientMethod(this.instance);
        }
    }
    /**
    * Get a game
    *
    * Requires Authorization:
    *
    * Claim(s): user, client
    * @param params Request parameters (see {@link GamesGetRequestParams})
    * @return Returns a game
    */
    get(params, cancelToken) {
        const { id, verified } = params;
        let url_ = this.baseUrl + "/api/v1/games/{id}?";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        if (verified === null)
            throw new Error("The parameter 'verified' cannot be null.");
        else if (verified !== undefined)
            url_ += "verified=" + encodeURIComponent("" + verified) + "&";
        url_ = url_.replace(/[?&]$/, "");
        let options_ = {
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken,
            requiresAuthorization: true
        };
        return this.instance.request(options_).catch((_error) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            }
            else {
                throw _error;
            }
        }).then((_response) => {
            return this.processGet(_response);
        });
    }
    processGet(response) {
        const status = response.status;
        let _headers = {};
        if (response.headers && typeof response.headers === "object") {
            for (const k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 404) {
            const _responseText = response.data;
            let result404 = null;
            let resultData404 = _responseText;
            result404 = JSON.parse(resultData404);
            return throwException("A game matching the given id does not exist", status, _responseText, _headers, result404);
        }
        else if (status === 200) {
            const _responseText = response.data;
            let result200 = null;
            let resultData200 = _responseText;
            result200 = JSON.parse(resultData200);
            return Promise.resolve(new OtrApiResponse(status, _headers, result200));
        }
        else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }