koneksi-ts-sdk
Version:
A JS/TS SDK for interacting with Koneksi API services
71 lines (70 loc) • 2.45 kB
JavaScript
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);
}
}