UNPKG

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
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 };