/* tslint:disable */
/* eslint-disable */
/**
 * Admin API
 * The Admin API is used to manage the ApeCloud platform. 
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: support@apecloud.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import type { Configuration } from '../configuration';
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
import globalAxios from 'axios';
// Some imports not used depending on template conditions
// @ts-ignore
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base';
// @ts-ignore
import type { APIErrorResponse } from '../models';
// @ts-ignore
import type { Apikey } from '../models';
// @ts-ignore
import type { ApikeyCreate } from '../models';
// @ts-ignore
import type { ApikeyList } from '../models';
// @ts-ignore
import type { ApikeyWithSK } from '../models';
// @ts-ignore
import type { Password } from '../models';
// @ts-ignore
import type { UpdateAuthenticatedUserPasswordRequest } from '../models';
// @ts-ignore
import type { User } from '../models';
// @ts-ignore
import type { UserAuthorization } from '../models';
// @ts-ignore
import type { UserCreate } from '../models';
// @ts-ignore
import type { UserList } from '../models';
// @ts-ignore
import type { UserUpdate } from '../models';
/**
 * UserApi - axios parameter creator
 * @export
 */
export const UserApiAxiosParamCreator = function (configuration?: Configuration) {
    return {
        /**
         * Create a new user
         * @summary Create a new user
         * @param {UserCreate} userCreate 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createUser: async (userCreate: UserCreate, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'userCreate' is not null or undefined
            assertParamExists('createUser', 'userCreate', userCreate)
            const localVarPath = `/admin/v1/users`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(userCreate, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Create apikey of the authenticated user
         * @summary Create apikey of the authenticated user
         * @param {ApikeyCreate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createUserApikey: async (body: ApikeyCreate, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'body' is not null or undefined
            assertParamExists('createUserApikey', 'body', body)
            const localVarPath = `/admin/v1/user/apikeys`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * delete apikey
         * @summary Delete apikey
         * @param {string} keyName Name of the Apikey
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteApikey: async (keyName: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'keyName' is not null or undefined
            assertParamExists('deleteApikey', 'keyName', keyName)
            const localVarPath = `/admin/v1/user/apikey/{keyName}`
                .replace(`{${"keyName"}}`, encodeURIComponent(String(keyName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * delete user
         * @summary delete user
         * @param {string} userID ID of the user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteUser: async (userID: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'userID' is not null or undefined
            assertParamExists('deleteUser', 'userID', userID)
            const localVarPath = `/admin/v1/users/{userID}`
                .replace(`{${"userID"}}`, encodeURIComponent(String(userID)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Get authenticated login user info
         * @summary Get authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getAuthenticatedUser: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            const localVarPath = `/admin/v1/user`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Get user roles in multiple organizations
         * @summary Get user roles in multiple organizations
         * @param {string} userID ID of the user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getUserAuthorization: async (userID: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'userID' is not null or undefined
            assertParamExists('getUserAuthorization', 'userID', userID)
            const localVarPath = `/admin/v1/users/{userID}/authorization`
                .replace(`{${"userID"}}`, encodeURIComponent(String(userID)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * List users
         * @summary List users
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listUsers: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            const localVarPath = `/admin/v1/users`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * partially update the specified apikey
         * @summary Update apikey information
         * @param {string} keyName Name of the apikey
         * @param {ApikeyCreate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchAPIkey: async (keyName: string, body: ApikeyCreate, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'keyName' is not null or undefined
            assertParamExists('patchAPIkey', 'keyName', keyName)
            // verify required parameter 'body' is not null or undefined
            assertParamExists('patchAPIkey', 'body', body)
            const localVarPath = `/admin/v1/user/apikey/{keyName}`
                .replace(`{${"keyName"}}`, encodeURIComponent(String(keyName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * partially update the specified User. If you want to update phone number, you must request /api/v1/user/phone-verification-code first.
         * @summary Update user information
         * @param {UserUpdate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchAuthenticatedUser: async (body: UserUpdate, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'body' is not null or undefined
            assertParamExists('patchAuthenticatedUser', 'body', body)
            const localVarPath = `/admin/v1/user`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Update the information of the specified user
         * @summary Update the information of the specified user
         * @param {string} userID ID of the user
         * @param {UserUpdate} userUpdate 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchUser: async (userID: string, userUpdate: UserUpdate, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'userID' is not null or undefined
            assertParamExists('patchUser', 'userID', userID)
            // verify required parameter 'userUpdate' is not null or undefined
            assertParamExists('patchUser', 'userUpdate', userUpdate)
            const localVarPath = `/admin/v1/users/{userID}`
                .replace(`{${"userID"}}`, encodeURIComponent(String(userID)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(userUpdate, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Get apikeys of the authenticated user
         * @summary Get apikeys of the authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        readUserApikeys: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            const localVarPath = `/admin/v1/user/apikeys`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Update current authenticated user password.
         * @summary Update current authenticated user password
         * @param {UpdateAuthenticatedUserPasswordRequest} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateAuthenticatedUserPassword: async (body: UpdateAuthenticatedUserPasswordRequest, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'body' is not null or undefined
            assertParamExists('updateAuthenticatedUserPassword', 'body', body)
            const localVarPath = `/admin/v1/user/password`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Update user password
         * @summary Update user password
         * @param {string} userID ID of the user
         * @param {Password} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateUserPassword: async (userID: string, body: Password, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'userID' is not null or undefined
            assertParamExists('updateUserPassword', 'userID', userID)
            // verify required parameter 'body' is not null or undefined
            assertParamExists('updateUserPassword', 'body', body)
            const localVarPath = `/admin/v1/users/{userID}/password`
                .replace(`{${"userID"}}`, encodeURIComponent(String(userID)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


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

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
    }
};

/**
 * UserApi - functional programming interface
 * @export
 */
export const UserApiFp = function(configuration?: Configuration) {
    const localVarAxiosParamCreator = UserApiAxiosParamCreator(configuration)
    return {
        /**
         * Create a new user
         * @summary Create a new user
         * @param {UserCreate} userCreate 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async createUser(userCreate: UserCreate, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<User>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.createUser(userCreate, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.createUser']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Create apikey of the authenticated user
         * @summary Create apikey of the authenticated user
         * @param {ApikeyCreate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async createUserApikey(body: ApikeyCreate, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApikeyWithSK>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.createUserApikey(body, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.createUserApikey']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * delete apikey
         * @summary Delete apikey
         * @param {string} keyName Name of the Apikey
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async deleteApikey(keyName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteApikey(keyName, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.deleteApikey']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * delete user
         * @summary delete user
         * @param {string} userID ID of the user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async deleteUser(userID: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteUser(userID, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.deleteUser']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Get authenticated login user info
         * @summary Get authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async getAuthenticatedUser(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<User>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.getAuthenticatedUser(options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.getAuthenticatedUser']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Get user roles in multiple organizations
         * @summary Get user roles in multiple organizations
         * @param {string} userID ID of the user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async getUserAuthorization(userID: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<UserAuthorization>>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.getUserAuthorization(userID, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.getUserAuthorization']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * List users
         * @summary List users
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async listUsers(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserList>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.listUsers(options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.listUsers']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * partially update the specified apikey
         * @summary Update apikey information
         * @param {string} keyName Name of the apikey
         * @param {ApikeyCreate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async patchAPIkey(keyName: string, body: ApikeyCreate, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Apikey>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.patchAPIkey(keyName, body, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.patchAPIkey']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * partially update the specified User. If you want to update phone number, you must request /api/v1/user/phone-verification-code first.
         * @summary Update user information
         * @param {UserUpdate} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async patchAuthenticatedUser(body: UserUpdate, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<User>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.patchAuthenticatedUser(body, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.patchAuthenticatedUser']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Update the information of the specified user
         * @summary Update the information of the specified user
         * @param {string} userID ID of the user
         * @param {UserUpdate} userUpdate 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async patchUser(userID: string, userUpdate: UserUpdate, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<User>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.patchUser(userID, userUpdate, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.patchUser']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Get apikeys of the authenticated user
         * @summary Get apikeys of the authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async readUserApikeys(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApikeyList>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.readUserApikeys(options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.readUserApikeys']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Update current authenticated user password.
         * @summary Update current authenticated user password
         * @param {UpdateAuthenticatedUserPasswordRequest} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async updateAuthenticatedUserPassword(body: UpdateAuthenticatedUserPasswordRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.updateAuthenticatedUserPassword(body, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.updateAuthenticatedUserPassword']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Update user password
         * @summary Update user password
         * @param {string} userID ID of the user
         * @param {Password} body 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async updateUserPassword(userID: string, body: Password, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.updateUserPassword(userID, body, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['UserApi.updateUserPassword']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
    }
};

/**
 * UserApi - factory interface
 * @export
 */
export const UserApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
    const localVarFp = UserApiFp(configuration)
    return {
        /**
         * Create a new user
         * @summary Create a new user
         * @param {UserApiCreateUserRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createUser(requestParameters: UserApiCreateUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User> {
            return localVarFp.createUser(requestParameters.userCreate, options).then((request) => request(axios, basePath));
        },
        /**
         * Create apikey of the authenticated user
         * @summary Create apikey of the authenticated user
         * @param {UserApiCreateUserApikeyRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createUserApikey(requestParameters: UserApiCreateUserApikeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<ApikeyWithSK> {
            return localVarFp.createUserApikey(requestParameters.body, options).then((request) => request(axios, basePath));
        },
        /**
         * delete apikey
         * @summary Delete apikey
         * @param {UserApiDeleteApikeyRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteApikey(requestParameters: UserApiDeleteApikeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.deleteApikey(requestParameters.keyName, options).then((request) => request(axios, basePath));
        },
        /**
         * delete user
         * @summary delete user
         * @param {UserApiDeleteUserRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteUser(requestParameters: UserApiDeleteUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.deleteUser(requestParameters.userID, options).then((request) => request(axios, basePath));
        },
        /**
         * Get authenticated login user info
         * @summary Get authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getAuthenticatedUser(options?: RawAxiosRequestConfig): AxiosPromise<User> {
            return localVarFp.getAuthenticatedUser(options).then((request) => request(axios, basePath));
        },
        /**
         * Get user roles in multiple organizations
         * @summary Get user roles in multiple organizations
         * @param {UserApiGetUserAuthorizationRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getUserAuthorization(requestParameters: UserApiGetUserAuthorizationRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<UserAuthorization>> {
            return localVarFp.getUserAuthorization(requestParameters.userID, options).then((request) => request(axios, basePath));
        },
        /**
         * List users
         * @summary List users
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listUsers(options?: RawAxiosRequestConfig): AxiosPromise<UserList> {
            return localVarFp.listUsers(options).then((request) => request(axios, basePath));
        },
        /**
         * partially update the specified apikey
         * @summary Update apikey information
         * @param {UserApiPatchAPIkeyRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchAPIkey(requestParameters: UserApiPatchAPIkeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<Apikey> {
            return localVarFp.patchAPIkey(requestParameters.keyName, requestParameters.body, options).then((request) => request(axios, basePath));
        },
        /**
         * partially update the specified User. If you want to update phone number, you must request /api/v1/user/phone-verification-code first.
         * @summary Update user information
         * @param {UserApiPatchAuthenticatedUserRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchAuthenticatedUser(requestParameters: UserApiPatchAuthenticatedUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User> {
            return localVarFp.patchAuthenticatedUser(requestParameters.body, options).then((request) => request(axios, basePath));
        },
        /**
         * Update the information of the specified user
         * @summary Update the information of the specified user
         * @param {UserApiPatchUserRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        patchUser(requestParameters: UserApiPatchUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User> {
            return localVarFp.patchUser(requestParameters.userID, requestParameters.userUpdate, options).then((request) => request(axios, basePath));
        },
        /**
         * Get apikeys of the authenticated user
         * @summary Get apikeys of the authenticated user
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        readUserApikeys(options?: RawAxiosRequestConfig): AxiosPromise<ApikeyList> {
            return localVarFp.readUserApikeys(options).then((request) => request(axios, basePath));
        },
        /**
         * Update current authenticated user password.
         * @summary Update current authenticated user password
         * @param {UserApiUpdateAuthenticatedUserPasswordRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateAuthenticatedUserPassword(requestParameters: UserApiUpdateAuthenticatedUserPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.updateAuthenticatedUserPassword(requestParameters.body, options).then((request) => request(axios, basePath));
        },
        /**
         * Update user password
         * @summary Update user password
         * @param {UserApiUpdateUserPasswordRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateUserPassword(requestParameters: UserApiUpdateUserPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.updateUserPassword(requestParameters.userID, requestParameters.body, options).then((request) => request(axios, basePath));
        },
    };
};

/**
 * UserApi - interface
 * @export
 * @interface UserApi
 */
export interface UserApiInterface {
    /**
     * Create a new user
     * @summary Create a new user
     * @param {UserApiCreateUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    createUser(requestParameters: UserApiCreateUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User>;

    /**
     * Create apikey of the authenticated user
     * @summary Create apikey of the authenticated user
     * @param {UserApiCreateUserApikeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    createUserApikey(requestParameters: UserApiCreateUserApikeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<ApikeyWithSK>;

    /**
     * delete apikey
     * @summary Delete apikey
     * @param {UserApiDeleteApikeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    deleteApikey(requestParameters: UserApiDeleteApikeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * delete user
     * @summary delete user
     * @param {UserApiDeleteUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    deleteUser(requestParameters: UserApiDeleteUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * Get authenticated login user info
     * @summary Get authenticated user
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    getAuthenticatedUser(options?: RawAxiosRequestConfig): AxiosPromise<User>;

    /**
     * Get user roles in multiple organizations
     * @summary Get user roles in multiple organizations
     * @param {UserApiGetUserAuthorizationRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    getUserAuthorization(requestParameters: UserApiGetUserAuthorizationRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<UserAuthorization>>;

    /**
     * List users
     * @summary List users
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    listUsers(options?: RawAxiosRequestConfig): AxiosPromise<UserList>;

    /**
     * partially update the specified apikey
     * @summary Update apikey information
     * @param {UserApiPatchAPIkeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    patchAPIkey(requestParameters: UserApiPatchAPIkeyRequest, options?: RawAxiosRequestConfig): AxiosPromise<Apikey>;

    /**
     * partially update the specified User. If you want to update phone number, you must request /api/v1/user/phone-verification-code first.
     * @summary Update user information
     * @param {UserApiPatchAuthenticatedUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    patchAuthenticatedUser(requestParameters: UserApiPatchAuthenticatedUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User>;

    /**
     * Update the information of the specified user
     * @summary Update the information of the specified user
     * @param {UserApiPatchUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    patchUser(requestParameters: UserApiPatchUserRequest, options?: RawAxiosRequestConfig): AxiosPromise<User>;

    /**
     * Get apikeys of the authenticated user
     * @summary Get apikeys of the authenticated user
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    readUserApikeys(options?: RawAxiosRequestConfig): AxiosPromise<ApikeyList>;

    /**
     * Update current authenticated user password.
     * @summary Update current authenticated user password
     * @param {UserApiUpdateAuthenticatedUserPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    updateAuthenticatedUserPassword(requestParameters: UserApiUpdateAuthenticatedUserPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * Update user password
     * @summary Update user password
     * @param {UserApiUpdateUserPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApiInterface
     */
    updateUserPassword(requestParameters: UserApiUpdateUserPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

}

/**
 * Request parameters for createUser operation in UserApi.
 * @export
 * @interface UserApiCreateUserRequest
 */
export interface UserApiCreateUserRequest {
    /**
     * 
     * @type {UserCreate}
     * @memberof UserApiCreateUser
     */
    readonly userCreate: UserCreate
}

/**
 * Request parameters for createUserApikey operation in UserApi.
 * @export
 * @interface UserApiCreateUserApikeyRequest
 */
export interface UserApiCreateUserApikeyRequest {
    /**
     * 
     * @type {ApikeyCreate}
     * @memberof UserApiCreateUserApikey
     */
    readonly body: ApikeyCreate
}

/**
 * Request parameters for deleteApikey operation in UserApi.
 * @export
 * @interface UserApiDeleteApikeyRequest
 */
export interface UserApiDeleteApikeyRequest {
    /**
     * Name of the Apikey
     * @type {string}
     * @memberof UserApiDeleteApikey
     */
    readonly keyName: string
}

/**
 * Request parameters for deleteUser operation in UserApi.
 * @export
 * @interface UserApiDeleteUserRequest
 */
export interface UserApiDeleteUserRequest {
    /**
     * ID of the user
     * @type {string}
     * @memberof UserApiDeleteUser
     */
    readonly userID: string
}

/**
 * Request parameters for getUserAuthorization operation in UserApi.
 * @export
 * @interface UserApiGetUserAuthorizationRequest
 */
export interface UserApiGetUserAuthorizationRequest {
    /**
     * ID of the user
     * @type {string}
     * @memberof UserApiGetUserAuthorization
     */
    readonly userID: string
}

/**
 * Request parameters for patchAPIkey operation in UserApi.
 * @export
 * @interface UserApiPatchAPIkeyRequest
 */
export interface UserApiPatchAPIkeyRequest {
    /**
     * Name of the apikey
     * @type {string}
     * @memberof UserApiPatchAPIkey
     */
    readonly keyName: string

    /**
     * 
     * @type {ApikeyCreate}
     * @memberof UserApiPatchAPIkey
     */
    readonly body: ApikeyCreate
}

/**
 * Request parameters for patchAuthenticatedUser operation in UserApi.
 * @export
 * @interface UserApiPatchAuthenticatedUserRequest
 */
export interface UserApiPatchAuthenticatedUserRequest {
    /**
     * 
     * @type {UserUpdate}
     * @memberof UserApiPatchAuthenticatedUser
     */
    readonly body: UserUpdate
}

/**
 * Request parameters for patchUser operation in UserApi.
 * @export
 * @interface UserApiPatchUserRequest
 */
export interface UserApiPatchUserRequest {
    /**
     * ID of the user
     * @type {string}
     * @memberof UserApiPatchUser
     */
    readonly userID: string

    /**
     * 
     * @type {UserUpdate}
     * @memberof UserApiPatchUser
     */
    readonly userUpdate: UserUpdate
}

/**
 * Request parameters for updateAuthenticatedUserPassword operation in UserApi.
 * @export
 * @interface UserApiUpdateAuthenticatedUserPasswordRequest
 */
export interface UserApiUpdateAuthenticatedUserPasswordRequest {
    /**
     * 
     * @type {UpdateAuthenticatedUserPasswordRequest}
     * @memberof UserApiUpdateAuthenticatedUserPassword
     */
    readonly body: UpdateAuthenticatedUserPasswordRequest
}

/**
 * Request parameters for updateUserPassword operation in UserApi.
 * @export
 * @interface UserApiUpdateUserPasswordRequest
 */
export interface UserApiUpdateUserPasswordRequest {
    /**
     * ID of the user
     * @type {string}
     * @memberof UserApiUpdateUserPassword
     */
    readonly userID: string

    /**
     * 
     * @type {Password}
     * @memberof UserApiUpdateUserPassword
     */
    readonly body: Password
}

/**
 * UserApi - object-oriented interface
 * @export
 * @class UserApi
 * @extends {BaseAPI}
 */
export class UserApi extends BaseAPI implements UserApiInterface {
    /**
     * Create a new user
     * @summary Create a new user
     * @param {UserApiCreateUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public createUser(requestParameters: UserApiCreateUserRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).createUser(requestParameters.userCreate, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Create apikey of the authenticated user
     * @summary Create apikey of the authenticated user
     * @param {UserApiCreateUserApikeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public createUserApikey(requestParameters: UserApiCreateUserApikeyRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).createUserApikey(requestParameters.body, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * delete apikey
     * @summary Delete apikey
     * @param {UserApiDeleteApikeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public deleteApikey(requestParameters: UserApiDeleteApikeyRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).deleteApikey(requestParameters.keyName, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * delete user
     * @summary delete user
     * @param {UserApiDeleteUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public deleteUser(requestParameters: UserApiDeleteUserRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).deleteUser(requestParameters.userID, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Get authenticated login user info
     * @summary Get authenticated user
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public getAuthenticatedUser(options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).getAuthenticatedUser(options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Get user roles in multiple organizations
     * @summary Get user roles in multiple organizations
     * @param {UserApiGetUserAuthorizationRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public getUserAuthorization(requestParameters: UserApiGetUserAuthorizationRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).getUserAuthorization(requestParameters.userID, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * List users
     * @summary List users
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public listUsers(options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).listUsers(options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * partially update the specified apikey
     * @summary Update apikey information
     * @param {UserApiPatchAPIkeyRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public patchAPIkey(requestParameters: UserApiPatchAPIkeyRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).patchAPIkey(requestParameters.keyName, requestParameters.body, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * partially update the specified User. If you want to update phone number, you must request /api/v1/user/phone-verification-code first.
     * @summary Update user information
     * @param {UserApiPatchAuthenticatedUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public patchAuthenticatedUser(requestParameters: UserApiPatchAuthenticatedUserRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).patchAuthenticatedUser(requestParameters.body, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Update the information of the specified user
     * @summary Update the information of the specified user
     * @param {UserApiPatchUserRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public patchUser(requestParameters: UserApiPatchUserRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).patchUser(requestParameters.userID, requestParameters.userUpdate, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Get apikeys of the authenticated user
     * @summary Get apikeys of the authenticated user
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public readUserApikeys(options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).readUserApikeys(options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Update current authenticated user password.
     * @summary Update current authenticated user password
     * @param {UserApiUpdateAuthenticatedUserPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public updateAuthenticatedUserPassword(requestParameters: UserApiUpdateAuthenticatedUserPasswordRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).updateAuthenticatedUserPassword(requestParameters.body, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Update user password
     * @summary Update user password
     * @param {UserApiUpdateUserPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof UserApi
     */
    public updateUserPassword(requestParameters: UserApiUpdateUserPasswordRequest, options?: RawAxiosRequestConfig) {
        return UserApiFp(this.configuration).updateUserPassword(requestParameters.userID, requestParameters.body, options).then((request) => request(this.axios, this.basePath));
    }
}

