/* tslint:disable */
/* eslint-disable */
/**
 * Commander Spellbook API
 * API for Commander Spellbook, the combo database engine for Magic: The Gathering
 *
 * The version of the OpenAPI document: 5.4.10
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import * as runtime from '../runtime.js';
import {
    type TokenObtainPair,
    TokenObtainPairFromJSON,
    TokenObtainPairToJSON,
} from '../models/TokenObtainPair.js';
import {
    type TokenObtainPairRequest,
    TokenObtainPairRequestFromJSON,
    TokenObtainPairRequestToJSON,
} from '../models/TokenObtainPairRequest.js';
import {
    type TokenRefresh,
    TokenRefreshFromJSON,
    TokenRefreshToJSON,
} from '../models/TokenRefresh.js';
import {
    type TokenRefreshRequest,
    TokenRefreshRequestFromJSON,
    TokenRefreshRequestToJSON,
} from '../models/TokenRefreshRequest.js';
import {
    type TokenVerifyRequest,
    TokenVerifyRequestFromJSON,
    TokenVerifyRequestToJSON,
} from '../models/TokenVerifyRequest.js';

export interface TokenCreateRequest {
    tokenObtainPairRequest?: TokenObtainPairRequest;
}

export interface TokenRefreshCreateRequest {
    tokenRefreshRequest: TokenRefreshRequest;
}

export interface TokenVerifyCreateRequest {
    tokenVerifyRequest: TokenVerifyRequest;
}

/**
 * 
 */
export class TokenApi extends runtime.BaseAPI {

    /**
     * Creates request options for tokenCreate without sending the request
     */
    async tokenCreateRequestOpts(requestParameters: TokenCreateRequest): Promise<runtime.RequestOpts> {
        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';


        let urlPath = `/token/`;

        return {
            path: urlPath,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TokenObtainPairRequestToJSON(requestParameters['tokenObtainPairRequest']),
        };
    }

    /**
     * Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials.
     */
    async tokenCreateRaw(requestParameters: TokenCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TokenObtainPair>> {
        const requestOptions = await this.tokenCreateRequestOpts(requestParameters);
        const response = await this.request(requestOptions, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => TokenObtainPairFromJSON(jsonValue));
    }

    /**
     * Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials.
     */
    async tokenCreate(requestParameters: TokenCreateRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TokenObtainPair> {
        const response = await this.tokenCreateRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Creates request options for tokenRefreshCreate without sending the request
     */
    async tokenRefreshCreateRequestOpts(requestParameters: TokenRefreshCreateRequest): Promise<runtime.RequestOpts> {
        if (requestParameters['tokenRefreshRequest'] == null) {
            throw new runtime.RequiredError(
                'tokenRefreshRequest',
                'Required parameter "tokenRefreshRequest" was null or undefined when calling tokenRefreshCreate().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';


        let urlPath = `/token/refresh/`;

        return {
            path: urlPath,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TokenRefreshRequestToJSON(requestParameters['tokenRefreshRequest']),
        };
    }

    /**
     * Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid.
     */
    async tokenRefreshCreateRaw(requestParameters: TokenRefreshCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TokenRefresh>> {
        const requestOptions = await this.tokenRefreshCreateRequestOpts(requestParameters);
        const response = await this.request(requestOptions, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => TokenRefreshFromJSON(jsonValue));
    }

    /**
     * Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid.
     */
    async tokenRefreshCreate(requestParameters: TokenRefreshCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TokenRefresh> {
        const response = await this.tokenRefreshCreateRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Creates request options for tokenVerifyCreate without sending the request
     */
    async tokenVerifyCreateRequestOpts(requestParameters: TokenVerifyCreateRequest): Promise<runtime.RequestOpts> {
        if (requestParameters['tokenVerifyRequest'] == null) {
            throw new runtime.RequiredError(
                'tokenVerifyRequest',
                'Required parameter "tokenVerifyRequest" was null or undefined when calling tokenVerifyCreate().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';


        let urlPath = `/token/verify/`;

        return {
            path: urlPath,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TokenVerifyRequestToJSON(requestParameters['tokenVerifyRequest']),
        };
    }

    /**
     * Takes a token and indicates if it is valid.  This view provides no information about a token\'s fitness for a particular use.
     */
    async tokenVerifyCreateRaw(requestParameters: TokenVerifyCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        const requestOptions = await this.tokenVerifyCreateRequestOpts(requestParameters);
        const response = await this.request(requestOptions, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Takes a token and indicates if it is valid.  This view provides no information about a token\'s fitness for a particular use.
     */
    async tokenVerifyCreate(requestParameters: TokenVerifyCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.tokenVerifyCreateRaw(requestParameters, initOverrides);
    }

}
