UNPKG

recommendation-library

Version:

This will provide the recommendation when provided with tenant and country with other info

75 lines (69 loc) 3.37 kB
'use strict'; 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) } }