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.
117 lines (116 loc) • 4.81 kB
JavaScript
import { generateSourceID } from "../../utils/data/generation";
import { isEntityEndpoint } from "../../utils/api/endpointUtils";
import { DateTimeHelper } from "../dateTimeHelper";
import qs from "qs";
import { HeaderKeys } from "../../constant/constant";
class AxiosHelper {
static bearer = (token) => `Bearer ${token}`;
static getAxiosConfig = (token, baseURL, lang, installationId) => {
const config = {
headers: {
[]: "application/json",
[]: lang,
[]: installationId,
[]: "1",
[]: "1",
[]: "true",
},
baseURL: baseURL,
withCredentials: true,
};
if (token && config.headers) {
config.headers.Authorization = AxiosHelper.bearer(token);
}
return config;
};
static getAuthAxiosConfig = (baseURL, lang, installationId) => {
const config = {
headers: {
[]: "application/x-www-form-urlencoded",
[]: lang,
[]: installationId,
[]: "1",
[]: "1",
[]: "true",
},
baseURL: baseURL,
};
return config;
};
static addAxiosConfigHeader = (config, key, value) => {
if (!config.headers)
config.headers = {};
config.headers[key] = value;
};
static injectBaseHeaders = async (req, context, cookiesHelper) => {
const token = await cookiesHelper.getAccessToken();
const userId = await cookiesHelper.getUserId();
const lang = context.getLang();
const iid = await cookiesHelper.getIID();
if (token && !req.headers.has(HeaderKeys.Authorization)) {
req.headers.set(HeaderKeys.Authorization, AxiosHelper.bearer(token));
}
req.headers.set(HeaderKeys.SourceID, generateSourceID(userId ?? 0));
if (lang)
req.headers.set(HeaderKeys.Language, lang);
if (iid)
req.headers.set(HeaderKeys.InstallationID, iid);
if (!req.baseURL)
req.baseURL = context.getBaseUrl();
req.headers.set(HeaderKeys.TimeZone, DateTimeHelper.getClientTimeZone());
await AxiosHelper.injectGeoCoordinates(req, context.getGeoHelper());
return req;
};
static injectBaseBodyProperties = (req) => {
try {
if (req.data) {
if (typeof req.data == "string") {
const baseResult = qs.parse(req.data);
baseResult.time_zone = DateTimeHelper.getClientTimeZone();
baseResult.time_zone_name = DateTimeHelper.getClientTimeZoneName();
req.data = qs.stringify(baseResult);
}
else if (typeof req.data == "object") {
const baseResult = req.data;
baseResult.time_zone = DateTimeHelper.getClientTimeZone();
baseResult.time_zone_name = DateTimeHelper.getClientTimeZoneName();
}
}
}
catch (error) {
console.error("Error parsing request data:", error);
}
finally {
return req;
}
};
static getLimitedToken = async (authService, cookiesHelper) => {
const installationId = (await cookiesHelper.getIID()) ?? "";
const res = await authService.generateLimitedToken({ installationId });
return res.data?.data?.access_token ?? null;
};
static getLimitedAuthHeaders = async (authService, cookiesHelper) => {
const token = await AxiosHelper.getLimitedToken(authService, cookiesHelper);
return token
? { [HeaderKeys.Authorization]: AxiosHelper.bearer(token) }
: undefined;
};
static injectLimitedToken = async (req, authService, cookiesHelper) => {
const headers = await AxiosHelper.getLimitedAuthHeaders(authService, cookiesHelper);
if (headers) {
req.headers.set(HeaderKeys.Authorization, headers.Authorization);
}
return req;
};
static injectGeoCoordinates = async (req, geoHelper) => {
if (!isEntityEndpoint(req.url))
return req;
const geoCoordinates = await geoHelper.getGeoCoordinates();
if (req.data && typeof req.data === "object") {
const data = req.data;
data.geo_coordinates = geoCoordinates;
}
return req;
};
}
export { AxiosHelper };