verifik
Version:
This library is a wrap of the official API found in docs.verifik.co
90 lines (71 loc) • 2.23 kB
JavaScript
const axios = require('axios');
let _axios = null;
let privateKey = null;
const brazil = require('./brazil_features_list');
const chile = require('./chile_features_list');
const colombia = require('./colombia_features_list');
const costaRica = require('./costa_rica_features_list');
const mexico = require('./mexico_features_list');
const panama = require('./panama_features_list');
const peru = require('./peru_features_list');
const spain = require('./spain_features_list');
const venezuela = require('./venezuela_features_list');
const features = {
list: [],
mapping: {
...brazil.mapping,
...chile.mapping,
...colombia.mapping,
...costaRica.mapping,
...mexico.mapping,
...panama.mapping,
...peru.mapping,
...spain.mapping,
...venezuela.mapping,
},
}
const setKey = (key) => {
privateKey = key;
}
const getKey = () => {
return privateKey;
}
const getAxiosInstance = () => {
_axios = axios.create({
baseURL: 'https://api.verifik.co',
});
_axios.defaults.headers.common['Content-Type'] = 'application/json';
_axios.defaults.headers.common['Authorization'] = `JWT ${getKey()}`;
return _axios;
}
/**
* request Endpoint
* @param {String} endpoint
* @param {Object} params
* @returns mixed
*/
const requestEndpoint = async (endpoint, params) => {
const _axios = getAxiosInstance();
const feature = features.mapping[endpoint];
for (const dependency of feature.dependencies) {
if (dependency.required && !params[dependency.field]) {
throw new Error(`Missing required field: ${dependency.field}`);
}
if (dependency.enum && !dependency.enum.includes(params[dependency.field])) {
throw new Error(`Invalid value for field ${dependency.field}: ${params[dependency.field]}`);
}
}
let queryString = `/${feature.url}?`;
for (const param in params) {
queryString += `${param}=${params[param]}&`;
}
const response = await _axios.get(queryString);
return response.data;
};
module.exports = {
url: 'https://api.verifik.co',
setKey,
getKey,
getAxiosInstance,
requestEndpoint,
};