@aajsa/moyasar-client
Version:
A lightweight and type-safe TypeScript client for interacting with Moyasar Payment Gateway APIs.
46 lines (44 loc) • 1.32 kB
JavaScript
const require_env = require('./env.cjs');
//#region src/utils.ts
const routeHandler = (route, apiKey, fetchOptions, disableValidation) => {
return async (input) => {
const { body, query, params } = input ?? {};
const { method, path } = route;
try {
if (!disableValidation) {
route.input?.parse?.(body);
route.params?.parse?.(params);
route.query?.parse?.(query);
}
} catch (e) {
throw new Error(`Validation failed: ${e.message}`);
}
let url = require_env.apiUrl + path;
if (params) url = url.replace(/:([a-zA-Z0-9_]+)/g, (_, id) => {
return encodeURIComponent(params[id]);
});
if (query) {
const searchParams = new URLSearchParams();
for (const [k, v] of Object.entries(query)) if (v != null) searchParams.append(k, String(v));
if (searchParams.toString()) url += `?${searchParams.toString()}`;
}
const headers = {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Basic ${btoa(`${apiKey}:`)}`,
...fetchOptions?.headers
};
const config = {
...fetchOptions,
method,
headers,
body: body ? JSON.stringify(body) : void 0
};
const response = await fetch(url, config);
const data = await response.json();
if (response.ok) return data;
return data;
};
};
//#endregion
exports.routeHandler = routeHandler;