ggez-banking-sdk
Version:
A Node.js package to handle GGEZ Banking API endpoints, Simplify the process of managing CRUD operations with this efficient and easy-to-use package.
76 lines (75 loc) • 2.77 kB
JavaScript
import axios from "axios";
import { AxiosHelper } from "../../helper/api/axiosHelper";
import { ResponseHelper } from "../../helper/api/responseHelper";
import { HeaderKeys } from "../../constant/constant";
class BaseService {
context;
cookiesHelper;
axiosInstance;
errorHandler;
constructor(data) {
this.context = data.context;
this.cookiesHelper = data.cookiesHelper;
this.errorHandler = data.errorHandler;
this.axiosInstance = axios.create();
this.axiosInstance.interceptors.request.use((req) => this.onRequest(req));
this.axiosInstance.interceptors.response.use((res) => this.onResponse(res), (err) => this.onError(err));
}
// #region "Interceptors Handlers"
async onRequest(req) {
await AxiosHelper.injectBaseHeaders(req, this.context, this.cookiesHelper);
AxiosHelper.injectBaseBodyProperties(req);
return req;
}
onResponse(res) {
return ResponseHelper.onResponse(res);
}
onError(err) {
this.errorHandler(err);
return ResponseHelper.onError(err);
}
// #endregion
// #region "HTTP Methods"
async GET(url, options) {
const response = await this.axiosInstance.get(url, this.buildConfig(options));
return ResponseHelper.getApiResponse(response);
}
async POST(url, data, options) {
const response = await this.axiosInstance.post(url, data, this.buildConfig(options));
return ResponseHelper.getApiResponse(response);
}
async PUT(url, data, options) {
const response = await this.axiosInstance.put(url, data, this.buildConfig(options));
return ResponseHelper.getApiResponse(response);
}
async DELETE(url, options) {
const response = await this.axiosInstance.delete(url, this.buildConfig(options));
return ResponseHelper.getApiResponse(response);
}
// #endregion
// #region "Helpers"
resolveURL(path = "") {
const p = path.toString().trim();
const normalized = p && !p.startsWith("/") ? `/${p}` : p;
return `${this.endpoint}${normalized}`;
}
// Precedence: caller `headers` > flag-derived headers; interceptor wins over both.
buildConfig(options) {
if (!options)
return {};
const { flags, headers, ...rest } = options;
return {
...rest,
headers: { ...this.buildFlagHeaders(flags), ...headers },
};
}
buildFlagHeaders(flags) {
const headers = {};
if (flags?.showSensitiveData)
headers[HeaderKeys.ShowSensitiveData] = "1";
if (flags?.showCustomField)
headers[HeaderKeys.ShowCustomField] = "1";
return headers;
}
}
export { BaseService };