/* tslint:disable */ /** * Bandwidth * Bandwidth\'s Communication APIs * * The version of the OpenAPI document: 1.0.0 * Contact: letstalk@bandwidth.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 globalAxios from 'axios'; interface AWSv4Configuration { options?: { region?: string service?: string } credentials?: { accessKeyId?: string secretAccessKey?: string, sessionToken?: string } } export interface ConfigurationParameters { apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); username?: string; password?: string; clientId?: string; clientSecret?: string; accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); awsv4?: AWSv4Configuration; basePath?: string; serverIndex?: number; baseOptions?: any; formDataCtor?: new () => any; } export class Configuration { /** * parameter for apiKey security * @param name security name */ apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); /** * parameter for basic security */ username?: string; /** * parameter for basic security */ password?: string; /** * parameter for client ID */ clientId?: string; /** * parameter for client secret */ clientSecret?: string; /** * parameter for oauth2 security * @param name security name * @param scopes oauth2 scope */ accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); /** * temporary access token storage */ tempAccessToken?: string; /** * when the temporary access token expires */ tempAccessTokenExpiration?: number; /** * parameter for aws4 signature security * @param {Object} AWS4Signature - AWS4 Signature security * @param {string} options.region - aws region * @param {string} options.service - name of the service. * @param {string} credentials.accessKeyId - aws access key id * @param {string} credentials.secretAccessKey - aws access key * @param {string} credentials.sessionToken - aws session token * @memberof Configuration */ awsv4?: AWSv4Configuration; /** * override base path */ basePath?: string; /** * override server index */ serverIndex?: number; /** * base options for axios calls */ baseOptions?: any; /** * The FormData constructor that will be used to create multipart form data * requests. You can inject this here so that execution environments that * do not support the FormData class can still run the generated client. * * @type {new () => FormData} */ formDataCtor?: new () => any; constructor(param: ConfigurationParameters = {}) { this.apiKey = param.apiKey; this.username = param.username; this.password = param.password; this.clientId = param.clientId; this.clientSecret = param.clientSecret; this.tempAccessToken; this.tempAccessTokenExpiration; this.accessToken = param.accessToken ?? (async (name, scopes) => { const now = Math.floor(Date.now() / 1000); if (this.tempAccessToken && (!this.tempAccessTokenExpiration || this.tempAccessTokenExpiration > now + 60)) { return this.tempAccessToken; } else if (this.clientId && this.clientSecret) { const tokenRequestArgs = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, auth: { username: this.clientId || '', password: this.clientSecret || '' }, data: 'grant_type=client_credentials', url: 'https://api.bandwidth.com/api/v1/oauth2/token' }; const response = await globalAxios.request(tokenRequestArgs); this.tempAccessToken = response.data.access_token; this.tempAccessTokenExpiration = now + response.data.expires_in; return this.tempAccessToken!; } return undefined; }); this.awsv4 = param.awsv4; this.basePath = param.basePath; this.serverIndex = param.serverIndex; this.baseOptions = { ...param.baseOptions, headers: { ...param.baseOptions?.headers, 'User-Agent': "OpenAPI-Generator/8.1.2/typescript-axios" }, }; this.formDataCtor = param.formDataCtor; } /** * Check if the given MIME is a JSON MIME. * JSON MIME examples: * application/json * application/json; charset=UTF8 * APPLICATION/JSON * application/vnd.company+json * @param mime - MIME (Multipurpose Internet Mail Extensions) * @return True if the given MIME is JSON, false otherwise. */ public isJsonMime(mime: string): boolean { const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); } }