import axios, { AxiosInstance } from "axios"; import { APIResponse } from "./APIResponse"; import { APIOptions } from "./APIOptions"; import { AccessTokenResponse } from "./AccessTokenResponse"; import { SwychAxiosInstance } from "./SwychAxiosInstance"; // tslint:disable: no-console export class BaseAPI { private instance: SwychAxiosInstance; constructor(private options: APIOptions) {} public async initialize() { this.instance = await SwychAxiosInstance.newInstance( this.options, this.getAccessToken.bind(this) ); } public getAxiosInstance(): AxiosInstance { return this.instance.getAxiosInstance(); } async getAccessToken(): Promise> { const req = axios.get(`${this.options.baseUrl}/access-token`, { headers: { "Swych-Secret-Id": this.options.apiKey, "Swych-Secret-Key": this.options.secretKey } }); return this.executeRequest(req); } async executeRequest(req: any): Promise> { try { const response = await req; const { data } = response; const { error, code, message } = data; if (error) { return { error: { error, code, message } }; } delete data.error; return { response: data }; } catch (ex) { return this.getError(ex); } } getError(ex: any): APIResponse { const { response } = ex; if (response) { const { data } = response; if (data) { const { error } = data; if (error) { return { error }; } } } return { error: [ { message: ex.error || ex } ] }; } }