UNPKG

bitcore-wallet-service

Version:
405 lines 17.7 kB
"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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __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.MoonpayService = void 0; const request = __importStar(require("request")); const config_1 = __importDefault(require("../config")); const clienterror_1 = require("../lib/errors/clienterror"); const server_1 = require("../lib/server"); const Bitcore = require('bitcore-lib'); class MoonpayService { constructor() { this.request = request; } moonpayGetKeys(req) { if (!config_1.default.moonpay) throw new Error('Moonpay missing credentials'); let env; env = req.body.env === 'production' ? 'production' : 'sandbox'; if (req.body.context === 'web') { env += 'Web'; } delete req.body.env; delete req.body.context; const keys = { API: config_1.default.moonpay[env].api, WIDGET_API: config_1.default.moonpay[env].widgetApi, SELL_WIDGET_API: config_1.default.moonpay[env].sellWidgetApi, API_KEY: config_1.default.moonpay[env].apiKey, SECRET_KEY: config_1.default.moonpay[env].secretKey }; return keys; } moonpayGetCurrencies(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const headers = { 'Content-Type': 'application/json' }; const URL = API + '/v3/currencies/'; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetQuote(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; if (!(0, server_1.checkRequired)(req.body, ['currencyAbbreviation', 'baseCurrencyAmount', 'baseCurrencyCode'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyAmount=' + req.body.baseCurrencyAmount); qs.push('baseCurrencyCode=' + req.body.baseCurrencyCode); if (req.body.extraFeePercentage) qs.push('extraFeePercentage=' + req.body.extraFeePercentage); if (req.body.paymentMethod) qs.push('paymentMethod=' + req.body.paymentMethod); if (req.body.areFeesIncluded) qs.push('areFeesIncluded=' + req.body.areFeesIncluded); const URL = API + `/v3/currencies/${req.body.currencyAbbreviation}/buy_quote/?${qs.join('&')}`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetSellQuote(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; if (!(0, server_1.checkRequired)(req.body, ['currencyAbbreviation', 'quoteCurrencyCode', 'baseCurrencyAmount'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); qs.push('quoteCurrencyCode=' + req.body.quoteCurrencyCode); qs.push('baseCurrencyAmount=' + req.body.baseCurrencyAmount); if (req.body.extraFeePercentage) qs.push('extraFeePercentage=' + req.body.extraFeePercentage); if (req.body.payoutMethod) qs.push('payoutMethod=' + req.body.payoutMethod); const URL = API + `/v3/currencies/${req.body.currencyAbbreviation}/sell_quote?${qs.join('&')}`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetCurrencyLimits(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; if (!(0, server_1.checkRequired)(req.body, ['currencyAbbreviation', 'baseCurrencyCode'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyCode=' + encodeURIComponent(req.body.baseCurrencyCode)); if (req.body.areFeesIncluded) qs.push('areFeesIncluded=' + encodeURIComponent(req.body.areFeesIncluded)); if (req.body.paymentMethod) qs.push('paymentMethod=' + encodeURIComponent(req.body.paymentMethod)); const URL = API + `/v3/currencies/${req.body.currencyAbbreviation}/limits/?${qs.join('&')}`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetSignedPaymentUrl(req) { const keys = this.moonpayGetKeys(req); const SECRET_KEY = keys.SECRET_KEY; const API_KEY = keys.API_KEY; const WIDGET_API = keys.WIDGET_API; if (!(0, server_1.checkRequired)(req.body, [ 'currencyCode', 'walletAddress', 'baseCurrencyCode', 'baseCurrencyAmount', 'externalTransactionId', 'redirectURL' ])) { throw new clienterror_1.ClientError("Moonpay's request missing arguments"); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); qs.push('currencyCode=' + encodeURIComponent(req.body.currencyCode)); qs.push('walletAddress=' + encodeURIComponent(req.body.walletAddress)); qs.push('baseCurrencyCode=' + encodeURIComponent(req.body.baseCurrencyCode)); qs.push('baseCurrencyAmount=' + encodeURIComponent(req.body.baseCurrencyAmount)); qs.push('externalTransactionId=' + encodeURIComponent(req.body.externalTransactionId)); qs.push('redirectURL=' + encodeURIComponent(req.body.redirectURL)); if (req.body.lockAmount) qs.push('lockAmount=' + encodeURIComponent(req.body.lockAmount)); if (req.body.showWalletAddressForm) qs.push('showWalletAddressForm=' + encodeURIComponent(req.body.showWalletAddressForm)); if (req.body.paymentMethod) qs.push('paymentMethod=' + encodeURIComponent(req.body.paymentMethod)); if (req.body.areFeesIncluded) qs.push('areFeesIncluded=' + encodeURIComponent(req.body.areFeesIncluded)); const URL_SEARCH = `?${qs.join('&')}`; const URLSignatureHash = Bitcore.crypto.Hash.sha256hmac(Buffer.from(URL_SEARCH), Buffer.from(SECRET_KEY)).toString('base64'); const urlWithSignature = `${WIDGET_API}${URL_SEARCH}&signature=${encodeURIComponent(URLSignatureHash)}`; return { urlWithSignature }; } moonpayGetSellSignedPaymentUrl(req) { const keys = this.moonpayGetKeys(req); const SECRET_KEY = keys.SECRET_KEY; const API_KEY = keys.API_KEY; const SELL_WIDGET_API = keys.SELL_WIDGET_API; if (!(0, server_1.checkRequired)(req.body, [ 'baseCurrencyCode', 'baseCurrencyAmount', 'externalTransactionId', 'redirectURL', ])) { throw new clienterror_1.ClientError("Moonpay's request missing arguments"); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyCode=' + encodeURIComponent(req.body.baseCurrencyCode)); qs.push('baseCurrencyAmount=' + encodeURIComponent(req.body.baseCurrencyAmount)); qs.push('externalTransactionId=' + encodeURIComponent(req.body.externalTransactionId)); qs.push('redirectURL=' + encodeURIComponent(req.body.redirectURL)); if (req.body.quoteCurrencyCode) qs.push('quoteCurrencyCode=' + encodeURIComponent(req.body.quoteCurrencyCode)); if (req.body.paymentMethod) qs.push('paymentMethod=' + encodeURIComponent(req.body.paymentMethod)); if (req.body.externalCustomerId) qs.push('externalCustomerId=' + encodeURIComponent(req.body.externalCustomerId)); if (req.body.refundWalletAddress) qs.push('refundWalletAddress=' + encodeURIComponent(req.body.refundWalletAddress)); if (req.body.lockAmount) qs.push('lockAmount=' + encodeURIComponent(req.body.lockAmount)); if (req.body.colorCode) qs.push('colorCode=' + encodeURIComponent(req.body.colorCode)); if (req.body.theme) qs.push('theme=' + encodeURIComponent(req.body.theme)); if (req.body.language) qs.push('language=' + encodeURIComponent(req.body.language)); if (req.body.email) qs.push('email=' + encodeURIComponent(req.body.email)); if (req.body.externalCustomerId) qs.push('externalCustomerId=' + encodeURIComponent(req.body.externalCustomerId)); if (req.body.showWalletAddressForm) qs.push('showWalletAddressForm=' + encodeURIComponent(req.body.showWalletAddressForm)); if (req.body.unsupportedRegionRedirectUrl) qs.push('unsupportedRegionRedirectUrl=' + encodeURIComponent(req.body.unsupportedRegionRedirectUrl)); if (req.body.skipUnsupportedRegionScreen) qs.push('skipUnsupportedRegionScreen=' + encodeURIComponent(req.body.skipUnsupportedRegionScreen)); const URL_SEARCH = `?${qs.join('&')}`; const URLSignatureHash = Bitcore.crypto.Hash.sha256hmac(Buffer.from(URL_SEARCH), Buffer.from(SECRET_KEY)).toString('base64'); const urlWithSignature = `${SELL_WIDGET_API}${URL_SEARCH}&signature=${encodeURIComponent(URLSignatureHash)}`; return { urlWithSignature }; } moonpayGetTransactionDetails(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; if (!(0, server_1.checkRequired)(req.body, ['transactionId']) && !(0, server_1.checkRequired)(req.body, ['externalId'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { 'Content-Type': 'application/json' }; let URL = ''; let qs = []; qs.push('apiKey=' + API_KEY); if (req.body.transactionId) { URL = API + `/v1/transactions/${req.body.transactionId}?${qs.join('&')}`; } else if (req.body.externalId) { URL = API + `/v1/transactions/ext/${req.body.externalId}?${qs.join('&')}`; } this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetSellTransactionDetails(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; if (!(0, server_1.checkRequired)(req.body, ['transactionId']) && !(0, server_1.checkRequired)(req.body, ['externalId'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { 'Content-Type': 'application/json' }; let URL = ''; let qs = []; qs.push('apiKey=' + API_KEY); if (req.body.transactionId) { URL = API + `/v3/sell_transactions/${req.body.transactionId}?${qs.join('&')}`; } else if (req.body.externalId) { URL = API + `/v3/sell_transactions/ext/${req.body.externalId}?${qs.join('&')}`; } this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayCancelSellTransaction(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const SECRET_KEY = keys.SECRET_KEY; if (!(0, server_1.checkRequired)(req.body, ['transactionId']) && !(0, server_1.checkRequired)(req.body, ['externalId'])) { return reject(new clienterror_1.ClientError("Moonpay's request missing arguments")); } const headers = { Authorization: 'Api-Key ' + SECRET_KEY, Accept: 'application/json' }; let URL = ''; if (req.body.transactionId) { URL = API + `/v3/sell_transactions/${req.body.transactionId}`; } else if (req.body.externalId) { URL = API + `/v3/sell_transactions/ext/${req.body.externalId}`; } this.request.delete(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } moonpayGetAccountDetails(req) { return new Promise((resolve, reject) => { const keys = this.moonpayGetKeys(req); const API = keys.API; const API_KEY = keys.API_KEY; const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('apiKey=' + API_KEY); const URL = API + `/v3/accounts/me?${qs.join('&')}`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ? err.body : err); } else { return resolve(data.body ? data.body : data); } }); }); } } exports.MoonpayService = MoonpayService; //# sourceMappingURL=moonpay.js.map