{"version":3,"sources":["jsdelivr-header.js","/npm/sslcommerz-nodejs@1.0.8/sslcommerz.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,MAAM,OAAS,QAAQ,UACjB,IAAM,QAAQ,OAEpB,MAAM,WAMF,WAAA,CAAY,GACR,KAAK,WAAa,KAAK,uBAAmD,IAAzB,EAAO,eAAwC,EAAO,eACvG,KAAK,SAAW,EAAO,SACvB,KAAK,aAAe,EAAO,aAC3B,KAAK,WAAa,WAAa,KAAK,WAAa,uCACjD,KAAK,eAAiB,WAAa,KAAK,WAAa,wDACrD,KAAK,gBAAkB,WAAa,KAAK,WAAa,gEAC1D,CAMA,sBAAM,CAAiB,GAGnB,OAFA,EAAoB,SAAI,KAAK,SAC7B,EAAwB,aAAI,KAAK,aAC1B,KAAK,KAAK,KAAK,WAAY,EACtC,CAMA,uBAAM,CAAkB,GACpB,IAAI,EAAa,EAAU,WACvB,EAAc,EAAU,YAC5B,EAAa,EAAW,MAAM,KAC9B,EAAa,EAAW,OACxB,OAAO,KAAK,GAAW,SAAQ,IAC3B,GAAG,EAAW,SAAS,GAAK,CACxB,IAAI,EAAQ,EAAW,QAAQ,GAC/B,EAAW,GAAS,EAAW,GAAS,IAAM,EAAU,GAAO,GACnE,KAEJ,IAAI,EAAgB,gBAAgB,OAAO,WAAW,OAAO,OAAO,KAAK,cAAc,OAAO,OAAO,IACrG,EAAW,KAAK,GAChB,EAAa,EAAW,OACxB,IAAI,EAAmB,GAMvB,OALA,OAAO,KAAK,GAAY,SAAQ,IAC5B,GAAsB,EAAW,EAAI,IAEzC,EAAqB,EAAmB,MAAM,GAAI,GAChC,OAAO,WAAW,OAAO,OAAO,GAAoB,OAAO,SAC1D,CAMvB,CAMA,gCAAM,CAA2B,GAC7B,IAAI,EAAQ,CACR,OAAQ,EACR,SAAU,KAAK,SACf,aAAc,KAAK,aACnB,OAAQ,QAEZ,OAAO,KAAK,IAAI,KAAK,eAAgB,EACzC,CAQA,iBAAM,CAAY,EAAqB,EAAe,GAClD,IAAI,EAAQ,CACR,aAAc,EACd,SAAU,KAAK,SACf,aAAc,KAAK,aACnB,cAAe,EACf,eAAgB,GAEpB,OAAO,KAAK,IAAI,KAAK,gBAAiB,EAC1C,CAMA,mBAAM,CAAc,GAChB,IAAI,EAAQ,CACR,cAAe,EACf,SAAU,KAAK,SACf,aAAc,KAAK,cAEvB,OAAO,KAAK,IAAI,KAAK,gBAAiB,EAC1C,CAMA,gCAAM,CAA2B,GAC7B,IAAI,EAAQ,CACR,WAAY,EACZ,SAAU,KAAK,SACf,aAAc,KAAK,cAEvB,OAAO,KAAK,IAAI,KAAK,gBAAiB,EAC1C,CAMA,2BAAM,CAAsB,GACxB,IAAI,EAAQ,CACR,QAAS,EACT,SAAU,KAAK,SACf,aAAc,KAAK,cAEvB,OAAO,KAAK,IAAI,KAAK,gBAAiB,EAC1C,CACA,iBAAA,CAAkB,GACd,OAAG,EACQ,UAGA,WAEf,CACA,aAAM,CAAQ,EAAQ,EAAK,EAAW,GAClC,IACI,IAAI,EAAS,CACT,OAAQ,GAAU,MAClB,KAAO,EACP,aAAc,QAElB,EAAO,aAAe,QAAwB,EAC9C,EAAO,KAAO,QAAwB,EAEtC,aADuB,IAAI,EAAK,IAChB,IACpB,CAAE,MAAM,GACJ,OAAO,EAAM,SAAS,IAC1B,CACJ,CACA,SAAM,CAAI,EAAK,GACX,IAAI,EAAc,GAClB,OAAO,KAAK,GAAO,SAAQ,IACvB,EAAY,KAAK,CAAC,EAAK,EAAM,IAAM,IAEvC,MAAM,EAAY,IAAI,gBAAgB,GACtC,OAAO,KAAK,QAAQ,MAAO,EAAK,EAAW,KAC/C,CACA,UAAM,CAAK,EAAK,GACZ,OAAO,KAAK,QAAQ,OAAQ,EAAK,KAAM,EAC3C,EAGJ,OAAO,QAAU","file":"/npm/sslcommerz-nodejs@1.0.8/sslcommerz.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/sslcommerz-nodejs@1.0.8/sslcommerz.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\r\nconst crypto = require('crypto');\r\nconst got = require('got');\r\n\r\nclass SSLCommerz{\r\n    /**\r\n     * @constructor init SSLCommerz class\r\n     * @param {object} config\r\n     * @example config = { isSandboxMode: true, store_id: 'myid', store_passwd: 'mypasswd'} \r\n     */\r\n    constructor(config){\r\n        this.store_mode = this.setSSLCommerzMode((typeof config.isSandboxMode === 'undefined') ? true : config.isSandboxMode);\r\n        this.store_id = config.store_id;\r\n        this.store_passwd = config.store_passwd;\r\n        this.submit_url = 'https://' + this.store_mode + '.sslcommerz.com/gwprocess/v4/api.php';\r\n        this.validation_url = 'https://' + this.store_mode + '.sslcommerz.com/validator/api/validationserverAPI.php';\r\n        this.transaction_url = 'https://' + this.store_mode + '.sslcommerz.com/validator/api/merchantTransIDvalidationAPI.php'\r\n    }\r\n    /**\r\n     * @function init_transaction get/create transaction request, POST Request \r\n     * @param {object} post_body check sslcommerz docs for all post_body params \r\n     * @returns {Promise} Response from SSLCommerz \r\n     */\r\n    async init_transaction(post_body){\r\n        post_body['store_id'] = this.store_id;\r\n        post_body['store_passwd'] = this.store_passwd;\r\n        return this.post(this.submit_url, post_body);\r\n    }\r\n     /**\r\n     * @function hash_validate_ipn validate verify_sign with verify key hash resolved as promise\r\n     * @param {object} post_body check sslcommerz docs for all post_body params \r\n     * @returns {Promise} Boolean to match verify_sign and generated MD5 hash\r\n     */\r\n    async hash_validate_ipn(post_body){\r\n        let verify_key = post_body.verify_key;\r\n        let verify_sign = post_body.verify_sign;\r\n        verify_key = verify_key.split(',');\r\n        verify_key = verify_key.sort();\r\n        Object.keys(post_body).forEach(key => {\r\n            if(verify_key.includes(key)){\r\n                let index = verify_key.indexOf(key);\r\n                verify_key[index] = verify_key[index] + '=' + post_body[key] + '&';\r\n            }\r\n        });\r\n        let hashed_passwd = 'store_passwd='+crypto.createHash('md5').update(this.store_passwd).digest('hex')+'&';\r\n        verify_key.push(hashed_passwd);\r\n        verify_key = verify_key.sort();\r\n        let before_verify_hash='';\r\n        Object.keys(verify_key).forEach(key => {\r\n            before_verify_hash += verify_key[key];\r\n        });\r\n        before_verify_hash = before_verify_hash.slice(0, -1);\r\n        let verify_hash = crypto.createHash('md5').update(before_verify_hash).digest('hex');\r\n        if(verify_hash === verify_sign){\r\n            return true;\r\n        }\r\n        else{\r\n            return false\r\n        }\r\n    }\r\n    /**\r\n     * @function validate_transaction_order validate order/transaction \r\n     * @param {string} validation_id val_id, sslcommerz docs \r\n     * @returns {Promise} Response from SSLCommerz\r\n     */\r\n    async validate_transaction_order(validation_id){\r\n        let query = {\r\n            val_id: validation_id,\r\n            store_id: this.store_id,\r\n            store_passwd: this.store_passwd,\r\n            format: 'json'\r\n        }\r\n        return this.get(this.validation_url, query);\r\n    }\r\n    /**\r\n     *@function init_refund create a refund process \r\n     * @param {string} bank_transaction_id bank_tran_id check sslcommerz docs\r\n     * @param {number} refund_amount  refund_amount check sslcommerz docs\r\n     * @param {string} refund_remarks refund_remarks check sslcommerz docs\r\n     * @returns {Promise} Response from SSLCommerz\r\n     */\r\n    async init_refund(bank_transaction_id, refund_amount, refund_remarks){\r\n        let query = {\r\n            bank_tran_id: bank_transaction_id,\r\n            store_id: this.store_id,\r\n            store_passwd: this.store_passwd,\r\n            refund_amount: refund_amount,\r\n            refund_remarks: refund_remarks\r\n        }\r\n        return this.get(this.transaction_url, query);\r\n    }\r\n    /**\r\n     * @function refund_status get refund status by refund_reference_id, GET\r\n     * @param {string} refund_reference_id reund_ref_id check sslcommerz docs\r\n     * @returns {Promise} Response from SSLCommerz\r\n     */\r\n    async refund_status(refund_reference_id){\r\n        let query = {\r\n            refund_ref_id: refund_reference_id,\r\n            store_id: this.store_id,\r\n            store_passwd: this.store_passwd\r\n        }\r\n        return this.get(this.transaction_url, query);\r\n    }\r\n    /**\r\n     * @function transaction_status_session get transaction status by sessionkey\r\n     * @param {string} sessionkey sessionkey check sslcommerz docs\r\n     * @returns {Promise} Response from SSLCommerz\r\n     */\r\n    async transaction_status_session(sessionkey){\r\n        let query = {\r\n            sessionkey: sessionkey,\r\n            store_id: this.store_id,\r\n            store_passwd: this.store_passwd\r\n        }\r\n        return this.get(this.transaction_url, query);\r\n    }\r\n    /**\r\n     * @function transaction_status_id get transaction status by transaction_id \r\n     * @param {string} transaction_id tran_id check sslcommerz docs\r\n     * @returns {Promise} Response from SSLCommerz\r\n     */\r\n    async transaction_status_id(transaction_id){\r\n        let query = {\r\n            tran_id: transaction_id,\r\n            store_id: this.store_id,\r\n            store_passwd: this.store_passwd\r\n        }\r\n        return this.get(this.transaction_url, query);\r\n    }\r\n    setSSLCommerzMode(isSandboxMode){\r\n        if(isSandboxMode){\r\n            return 'sandbox';\r\n        }\r\n        else{\r\n            return 'securepay';\r\n        }\r\n    }\r\n    async request(method, url, urlParams, post_body){\r\n        try{\r\n            let params = {\r\n                method: method || 'GET',\r\n                form:  post_body ,\r\n                responseType: 'json'\r\n            };\r\n            params.searchParams = urlParams ? urlParams : undefined;\r\n            params.form = post_body ? post_body : undefined;\r\n            const response = await got(url, params);\r\n            return response.body;\r\n        } catch(error){\r\n            return error.response.body;\r\n        }\r\n    }\r\n    async get(url, query) {\r\n        let queryParams = [];\r\n        Object.keys(query).forEach(key => {\r\n            queryParams.push([key, query[key]]);\r\n        });\r\n        const urlParams = new URLSearchParams(queryParams);\r\n        return this.request('GET', url, urlParams, null);\r\n    }\r\n    async post(url, post_body){\r\n        return this.request('POST', url, null, post_body);\r\n    }\r\n}\r\n\r\nmodule.exports = SSLCommerz;"]}