UNPKG

koneksi-ts-sdk

Version:

A JS/TS SDK for interacting with Koneksi API services

71 lines (70 loc) 2.45 kB
import axios from "axios"; export class HttpClient { constructor(config) { this.config = config; this.client = axios.create({ baseURL: config.baseURL, headers: { "Content-Type": "application/json", "Client-ID": config.clientId, "Client-Secret": config.clientSecret, }, }); this.client.interceptors.request.use((config) => { config.headers["Client-ID"] = this.config.clientId; config.headers["Client-Secret"] = this.config.clientSecret; return config; }, (error) => { return Promise.reject(error); }); this.client.interceptors.response.use((response) => response, (error) => { if (error.response) { const { status, data } = error.response; const errorMessage = data?.message || data?.error || `HTTP ${status}`; throw new Error(errorMessage); } else if (error.request) { throw new Error("No response received from server"); } else { throw new Error(error.message || "Request failed"); } }); } async get(url, config) { const response = await this.client.get(url, config); return response.data; } async post(url, data, config) { const response = await this.client.post(url, data, config); return response.data; } async put(url, data, config) { const response = await this.client.put(url, data, config); return response.data; } async delete(url, config) { const response = await this.client.delete(url, config); return response.data; } async uploadFile(url, formData, config) { const uploadConfig = { ...config, headers: { ...config?.headers, "Content-Type": "multipart/form-data", }, onUploadProgress: config?.onProgress, }; const response = await this.client.post(url, formData, uploadConfig); return response.data; } async downloadFile(url, config) { const downloadConfig = { ...config, responseType: "arraybuffer", }; const response = await this.client.get(url, downloadConfig); return Buffer.from(response.data); } }