Duffer Derek

Current Path : /var/www/podio-api-client/src/http/
Upload File :
Current File : /var/www/podio-api-client/src/http/HttpClient.ts

import axios, { AxiosError } from 'axios';
import { HttpRequest, HttpResponse } from '../types/http.type';
import PodioErrorFactory from '../utils/PodioErrorFactory';

/**
 * Common class for handling all the Http client requests
 */
export default class HttpClient {
  /**
   * Podio API base url
   *
   * @type {string}
   */
  readonly base_url: string = 'https://api.podio.com';

  /**
   * @type {Request}
   */
  request: HttpRequest;

  /**
   * Assign values to the private variable
   * @constructor
   * @param requestObj
   */
  constructor(requestData: HttpRequest) {
    this.request = requestData;
  }

  /**
   * Http call
   *
   * @returns Promise<HttpResponse>
   */
  async call<ResponseType = any>(): Promise<HttpResponse<ResponseType>> {
    try {
      let response = await axios({ ...this.request, baseURL: this.base_url });

      let responseData: HttpResponse = {
        status: response.status,
        statusText: response.statusText,
        headers: response.headers,
        request: response.request,
        data: response.data,
        response: response,
      };

      return responseData;
    } catch (e) {
      if (e instanceof AxiosError) {
        let statusCode = e.response?.status ?? 0;
        let errorMessage = e.response?.data?.error_description ?? e.message;
        let podioErrorData = e.response?.data?.request ?? undefined;

        let errorClass = PodioErrorFactory.getError(statusCode);
        throw new errorClass(errorMessage, podioErrorData, statusCode);
      }

      throw e;
    }
  }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists