cashfree-sdk
Version:
This module contains all methods to help you integrate cashfree's payout solution
104 lines (91 loc) • 2.4 kB
JavaScript
//Payout constatns
const Utils = require('../utils');
const constants = require('constants');
var fs = require("fs")
var crypto = require("crypto")
let MPAEndpoint = "payout-gamma.cashfree.com";
let BearerToken = '';
let Expiry = '';
let ClientID = '';
let ClientSecret = '';
let PublicKey = '';
let initialize = function(env){
if(env == "PRODUCTION") this.MPAEndpoint = "payout-api.cashfree.com";
}
let setClientId = function(v){
this.ClientID = v;
}
let setClientSecret = function(v){
this.ClientSecret = v;
}
let setPublicKey = function(key, path) {
if (path) {
this.PublicKey = fs.readFileSync(path,'utf8')
} else {
this.PublicKey = key;
}
}
let generateCertificate = function() {
if (!this.PublicKey) {
return null;
}
var curTimeStamp = Date.now()/1000;
var message = this.ClientID + "." + curTimeStamp.toString();
let buffer = new Buffer(message);
let encrypted = crypto.publicEncrypt({
key: this.PublicKey,
padding: constants.RSA_PKCS1_OAEP_PADDING
}, buffer);
return encrypted.toString("base64");
}
let authorize = async function(){
var path = "/payout/v1/authorize";
var data = {};
var obj = {};
try {
var certificate = this.generateCertificate();
} catch(error) {
throw {
"status": "ERROR",
"message": "Couldn't generate certificate"
}
}
obj.headers = {
"Content-Type": 'application/json',
"X-Client-Id": this.ClientID,
"X-Client-Secret": this.ClientSecret
};
if (this.PublicKey) {
obj.headers["X-Cf-Signature"] = certificate;
}
obj.path = path;
obj.hostname = this.MPAEndpoint;
obj.data = data;
try {
var response = await Utils.doPost(obj);
} catch(error) {
throw error;
}
if(response.status == "ERROR"){
throw response;
}
this.BearerToken = response.data.token;
this.Expiry = parseInt(response.data.expiry);
return response
}
let checkToken = async function(){
var timeBuffer = 300;
var response = true;
if(this.BearerToken == "" || this.Expiry == "" || (this.Expiry-timeBuffer) < Date.now()/1000){
try {
response = await this.authorize();
} catch(error) {
throw error;
}
}
if (response.status === "ERROR") {
throw response;
}
return response;
}
module.exports = {MPAEndpoint, initialize, BearerToken, Expiry, setClientId, ClientID, ClientSecret, checkToken, setClientSecret, authorize, PublicKey, setPublicKey, generateCertificate};