import axios, { AxiosInstance } from 'axios' import { APIResponse } from './APIResponse' import { APIOptions } from './APIOptions' import { AccessTokenResponse } from './AccessTokenResponse' import { PrimeTrustAxiosInstance } from './PrimeTrustAxiosInstance' export class BaseAPI { private instance: PrimeTrustAxiosInstance constructor(private options: APIOptions) { } public async initialize() { this.instance = await PrimeTrustAxiosInstance.newInstance( this.options, this.getAccessToken.bind(this), ) } public getAxiosInstance(): AxiosInstance { return this.instance.getAxiosInstance() } async getAccessToken(): Promise> { const req = axios.post( `${this.options.baseUrl}/auth/jwts`, { ttl: this.options.jwtTTL, }, { headers: { Authorization: `Basic ${this.options.authorization}` }, }, ) return await this.executeRequest(req) } async executeRequest(req: any): Promise> { try { const response = await req const { status, data } = response return { response: data, status } } catch (ex) { return this.getError(ex) } } getError(ex: any): APIResponse { const { response } = ex if (response) { const { status, data } = response if (data) { const { errors } = data if (errors) { return { status, errors } } } } let finalErrors: any[] const { error } = ex if (error) { finalErrors = [error] } else { finalErrors = [{ message: ex.message || ex, }] } return { status: -1, errors: finalErrors, } } }