@paciolan/cybersource-sdk
Version:
CyberSource REST API Typescript SDK
165 lines (164 loc) • 7.39 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthenticationHeader = void 0;
const MerchantConfig_1 = __importDefault(require("./MerchantConfig"));
const Constants = __importStar(require("../util/Constants"));
const Logger = __importStar(require("../logging/Logger"));
const Authorization = __importStar(require("./Authorization"));
const PayloadDigest = __importStar(require("../payloadDigest/DigestGenerator"));
const querystring = __importStar(require("querystring"));
// Code added by Infosys dev team
class AuthenticationHeader {
constructor() {
this.constants = Constants;
}
/**
* This method will set the merchantConfig object global
* @param configObject merchantConfiguration properties.
*/
setConfiguration(configObject) {
this.merchantConfig = new MerchantConfig_1.default(configObject);
this.constants = Constants;
if (this.merchantConfig.getIntermediateHost()) {
if (this.merchantConfig
.getIntermediateHost()
.startsWith(this.constants.HTTP_URL_PREFIX) ||
this.merchantConfig.getIntermediateHost().startsWith('http://')) {
this.basePath = this.merchantConfig.getIntermediateHost();
}
else {
this.basePath =
this.constants.HTTP_URL_PREFIX +
this.merchantConfig.getIntermediateHost();
}
}
else {
this.basePath =
this.constants.HTTP_URL_PREFIX + this.merchantConfig.getRequestHost();
}
this.logger = Logger.getLogger(this.merchantConfig, 'ApiClient');
}
/**
* This method is to generate headers for http and jwt authentication.
*/
callAuthenticationHeader(httpMethod, requestTarget, requestBody, headerParams) {
var _a, _b, _c;
this.merchantConfig.setRequestTarget(requestTarget);
this.merchantConfig.setRequestType(httpMethod);
this.merchantConfig.setRequestJsonData(requestBody);
this.logger.info('Authentication Type : ' + this.merchantConfig.getAuthenticationType());
this.logger.info(this.constants.REQUEST_TYPE + ' : ' + httpMethod.toUpperCase());
var token = Authorization.getToken(this.merchantConfig, this.logger);
if (((_a = this.merchantConfig.getAuthenticationType()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) ===
this.constants.JWT) {
token = 'Bearer ' + token;
headerParams['Authorization'] = token;
this.logger.info(this.constants.AUTHORIZATION + ' : ' + token);
}
else if (((_b = this.merchantConfig.getAuthenticationType()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) ===
this.constants.HTTP) {
var date = new Date(Date.now()).toUTCString();
if (httpMethod.toLowerCase() === this.constants.POST ||
httpMethod.toLowerCase() === this.constants.PATCH ||
httpMethod.toLowerCase() === this.constants.PUT) {
var digest = PayloadDigest.generateDigest(this.merchantConfig, this.logger);
digest = this.constants.SIGNATURE_ALGORITHAM + digest;
this.logger.info(this.constants.DIGEST + ' : ' + digest);
headerParams['digest'] = digest;
}
headerParams['v-c-merchant-id'] = this.merchantConfig.getMerchantID();
headerParams['date'] = date;
headerParams['host'] = this.merchantConfig.getRequestHost();
headerParams['signature'] = token;
headerParams['User-Agent'] = this.constants.USER_AGENT_VALUE;
this.logger.info('v-c-merchant-id : ' + this.merchantConfig.getMerchantID());
this.logger.info('date : ' + date);
this.logger.info('host : ' + this.merchantConfig.getRequestHost());
this.logger.info('signature : ' + token);
this.logger.info('User-Agent : ' + headerParams['User-Agent']);
this.logger.info(this.constants.END_TRANSACTION);
}
else if (((_c = this.merchantConfig.getAuthenticationType()) === null || _c === void 0 ? void 0 : _c.toLowerCase()) ===
this.constants.OAUTH) {
token = 'Bearer ' + token;
headerParams['Authorization'] = token;
// this.logger.info(this.constants.AUTHORIZATION + ' : ' + token);
}
return headerParams;
}
/**
* Build request target required for the signature generation
*/
buildRequestTarget(path, pathParams, queryParams) {
if (!path.match(/^\//)) {
path = '/' + path;
}
var _this = this;
var requestTarget = path.replace(/\{([\w-]+)\}/g, function (fullMatch, key) {
var value;
if (pathParams.hasOwnProperty(key)) {
value = _this.paramToString(pathParams[key]);
}
else {
value = fullMatch;
}
return encodeURIComponent(value);
});
// added by infosys team, to generate requestTarget with queryParams
if (Object.keys(queryParams).length !== 0) {
var queryFlag = false;
var queryArray = {};
Object.keys(queryParams).forEach(function (prop) {
var val = queryParams[prop];
if (val !== undefined) {
queryArray[prop] = val;
queryFlag = true;
}
});
if (queryFlag)
requestTarget = requestTarget + '?' + querystring.stringify(queryArray);
}
return requestTarget;
}
/**
* Returns a string representation for an actual parameter.
* @param param The actual parameter.
* @returns The string representation of <code>param</code>.
*/
paramToString(param) {
if (param == undefined || param == null) {
return '';
}
if (param instanceof Date) {
return param.toJSON();
}
return param.toString();
}
}
exports.AuthenticationHeader = AuthenticationHeader;