@cybersource/flex-sdk-node
Version:
Easily create keys for use in a Flex API integration and verifying Flex token contents
60 lines (47 loc) • 1.91 kB
JavaScript
/* Copyright (c) 2018 by CyberSource */
const request = require('request');
const { version } = require('../package.json');
const debug = require('debug')('flex-sdk-node');
const cgk = require('./cgk/cgkHeaders');
const vdp = require('./vdp/vdpHeaders');
const constants = require('./constants');
const encryptionTypes = Object.values(constants.encryptionType);
function generateRequestBody(options) {
if (!encryptionTypes.includes(options.encryptionType)) {
throw new Error(`Invalid encryptionType "${options.encryptionType}"`);
}
// required
const requestBody = { encryptionType: options.encryptionType };
// optional
if (options.targetOrigin) requestBody.targetOrigin = options.targetOrigin;
if (options.settings) requestBody.settings = options.settings;
return requestBody;
}
function keyRequest(config, options, callback) {
const body = generateRequestBody(options);
const bodyJson = JSON.stringify(body);
const headers = config.isVDP() ? vdp(config, bodyJson) : cgk(config, bodyJson);
headers.Accept = 'application/json';
headers['Content-Type'] = 'application/json';
headers['User-Agent'] = `Flex Server SDK/nodejs/${version}`;
const requestOptions = {
url: config.getUrl(),
method: 'POST',
json: true,
headers,
body,
};
if (config.proxy) requestOptions.proxy = config.proxy;
debug('keys request: %o', requestOptions);
debug('Signed headers for POST to %s generated: %o. Request payload: \n%o.', requestOptions.url, headers, body);
request(requestOptions, (error, response, key) => {
if (error) debug('error: %o', error);
else {
debug('keys response: status: %s %s', response.statusCode, response.statusMessage);
debug('keys response: body: %o', response.body);
debug('keys response: headers: %o', response.headers);
}
callback(error, response, key);
});
}
module.exports = keyRequest;