recommendation-library
Version:
This will provide the recommendation when provided with tenant and country with other info
75 lines (69 loc) • 3.37 kB
JavaScript
;
var axios = require('axios');
const _productRecommendationApiBaseURL = "https://recommendations-api.mat.cimpress.io/";
async function _getTokenPromise(_CLIENT_ID, _CLIENT_SECRET){
const body = { "grant_type":"client_credentials", "client_id": _CLIENT_ID,
"client_secret": _CLIENT_SECRET, "audience": "https://api.cimpress.io/" };
const URL = "https://oauth.cimpress.io/v2/token";
const headers = { "content-type": "application/json" };
return axios.post(URL, body, { headers: headers });
}
async function _getRecommendationsPromise(URL, tenant, token){
const headers = { "content-type": "application/json", "tenant": tenant, "Authorization": `Bearer ${token}`};
return axios.get(URL, { headers: headers});
}
async function _updateMetricPromise(URL, tenant, token, body){
const headers = { "content-type": "application/json", "tenant": tenant, "Authorization": `Bearer ${token}`};
return axios.post(URL, body, {headers: headers});
}
module.exports = {
/**
* @function
* @param {Object} payload - Tenant information and related data
* @param {Object} tokenBody - Info of tenant
*/
getRecommendations: async (payload, tokenBody) => {
let token, queryBody = payload, qry='', query;
if(tokenBody['tokenAvailable'] && tokenBody['tokenAvailable'] === true){
token = tokenBody['token'];
}else{
try{
const _CLIENT_ID = tokenBody['CLIENT_ID'];
const _CLIENT_SECRET = tokenBody['CLIENT_SECRET'];
let response = await _getTokenPromise(_CLIENT_ID, _CLIENT_SECRET);
token = response.data["access_token"];
}catch(error){
console.log("token generation error:: " + error);
};
}
if(!queryBody['lob'] || !queryBody['tenant'] || !queryBody['channels'] || !queryBody['countries'] || !queryBody['components']){
console.log("key fields missing, please check lob, tenant, channels, countries and components");
return;
}
for(const [key, value] of Object.entries(queryBody)){ qry = qry + `${key}=${value}&`; }
query = qry.slice(0, -1);
const URL = `${_productRecommendationApiBaseURL}recommendation?${query}`;
try{
let response = await _getRecommendationsPromise(URL, queryBody['tenant'], token);
if(typeof(Storage) !== 'undefined'){
sessionStorage.setItem('__prToken__', token);
sessionStorage.setItem('__prTenant__', queryBody['tenant']);
}else{
console.log("storage not found");
}
return response.data;
}catch(error){
console.log("error in getting recommendations:: " + JSON.stringify(error));
};
},
/**
* @function
* @param {Object} payload - Tenant information and related data
*/
updateMetric: (payload) => {
let token=payload['token'], body={};
for(const [key, value] of Object.entries(payload)){ if(key !== 'tenant' && key !== 'token'){ body[key]=value;}}
const URL = `${_productRecommendationApiBaseURL}metrics`;
return _updateMetricPromise(URL, payload['tenant'], token, body)
}
}