UNPKG

@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
/* 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;