const
crypto = require('crypto'),
https = require('https'),
CryptoJS = require("crypto-js"),
request = require("request"),
url = require('url'),
requestPromise = require("request-promise"),
endpoint = require("@runkit/runkit/json-endpoint/1.0.0");
//environment specific
const APP_MAC_ID = "d0625c4f2cc34b189379f3daeab8214e";//go fish app mac ID
const APP_MAC_KEY = "9rYblk4BojCV8X9fcauTrzpoxmoq1VItpO9TR9Au4Y8";//go fish app MAC KEY
const SERVER = "https://staging.lcp.points.com/v1";//prod is https://staging.lcp.points.com/v1
const LPID = "e4ea7481-a275-4656-a47d-26829756ecaa";//environment specific representing SWA
const APP_ID = "a76776a4-19b8-425e-916d-caec9848e613";//go fish app ID
function randomString(len, charSet) {
charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var randomString = '';
for (var i = 0; i < len; i++) {
var randomPoz = Math.floor(Math.random() * charSet.length);
randomString += charSet.substring(randomPoz, randomPoz + 1);
}
return randomString;
}
function getLCPAuthHeader(macId, macKey, method, urlString, data) {
var d = new Date();
var n = d.getTime() + "";
var ts = n.substring(0, n.length - 3);
var nonce = randomString(8);
var urlReader = url.parse(urlString);
var ext = "";
if ("GET" != method && data !== undefined) {
ext = CryptoJS.SHA1("application/json" + JSON.stringify(data));
}
macKey = macKey.replace(new RegExp("-", 'g'), "+").replace(new RegExp("_", 'g'), "/");
var normalizedRequestString = ts + "\n" + nonce + "\n" + method + "\n" + urlReader.pathname + "\n" + urlReader.hostname + "\n443\n" + ext + "\n";
var secret = CryptoJS.enc.Base64.parse(macKey);
var mac = CryptoJS.HmacSHA1(normalizedRequestString, secret).toString(CryptoJS.enc.Base64);
var header = "MAC id=\"" + macId + "\", ts=\"" + ts + "\", nonce=\"" + nonce + "\", ext=\"" + ext + "\", mac=\"" + mac + "\"";
return header;
}
exports.endpoint = async function(request, response) {
var body = [];
request.on('data', function(chunk) {
body.push(chunk);
}).on('end', async function() {
body = JSON.parse(Buffer.concat(body).toString());
var userMvRequest = {
memberId: "501811671",
firstName: "Feb",
lastName: "Points"
};
var userMvResponse = {
balance: 10000,
email: "mihnea@points.com"
}
var userMvDelegateRequest = {
memberValidation: userMvRequest,
memberValidationResponse: userMvResponse,
application: SERVER+"/apps/"+APP_ID
}
var authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/lps/"+LPID+"/mv-delegates/", userMvDelegateRequest);
var userMvDelegateResponse = await requestPromise({
uri: SERVER+'/lps/'+LPID+'/mv-delegates/',
method: 'POST',
headers: {
'Authorization': authHeader,
'Content-Type': 'application/json'
},
json: userMvDelegateRequest,
simple: false
});
var recipientMvRequest = {
memberId: "501811660",
firstName: "Jan",
lastName: "Points"
};
var recipientMvResponse = {
balance: 0,
email: "mihnea@points.com"
}
var recipientMvDelegateRequest = {
memberValidation: recipientMvRequest,
memberValidationResponse: recipientMvResponse,
application: SERVER+"/apps/"+APP_ID
}
authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/lps/"+LPID+"/mv-delegates/", recipientMvDelegateRequest);
var recipientMvDelegateResponse = await requestPromise({
uri: SERVER+'/lps/'+LPID+'/mv-delegates/',
method: 'POST',
headers: {
'Authorization': authHeader,
'Content-Type': 'application/json'
},
json: recipientMvDelegateRequest,
simple: false
});
var session = {
"referralCode": "GoFish"
};
var user = {
"firstName": userMvRequest.firstName,
"lastName": userMvRequest.lastName,
"email": userMvResponse.email,
"memberId": userMvRequest.memberId,
"balance": userMvResponse.balance,
"memberValidation":userMvDelegateResponse.memberValidation
};
var recipient = {
"firstName": recipientMvRequest.firstName,
"lastName": recipientMvRequest.lastName,
"email": recipientMvResponse.email,
"memberId": recipientMvRequest.memberId,
"balance": recipientMvResponse.balance,
"memberValidation":recipientMvDelegateResponse.memberValidation
};
var messageData = {
"offerTypes": ["FREE-TRANSFER"],
"session": session,
"user": user,
"recipient": recipient
};
authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/offer-sets/", messageData);
var offerSet = await requestPromise({
uri: SERVER+'/offer-sets/',
method: 'POST',
headers: {
'Authorization': authHeader,
'Content-Type': 'application/json'
},
json: messageData,
simple: false
});
var transferRequest = {
"clientUserAgent": "Mozilla/4.0…",
"clientIpAddress": "68.96.192.66",
"language": "en-US",
"offerSet": offerSet.links.self.href,
"orderDetails": {
"basePoints": 1000,
"offer": offerSet.offers[0].links.self.href,
"touchpoint": "storefront"
},
"recipient": recipient,
"session": session,
"type": "FREE-TRANSFER",
"user": user
};
authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/lps/"+LPID+"/transfer/", transferRequest);
var transfer = await requestPromise({
uri: SERVER+"/lps/"+LPID+"/transfer/",
method: 'POST',
headers: {
'Authorization': authHeader,
'Content-Type': 'application/json'
},
json: transferRequest,
simple: false
});
response.setHeader('content-type', 'application/json');
response.end(JSON.stringify(transfer));
});
}