bitcore-wallet-service
Version:
A service for Mutisig HD Bitcoin Wallets
311 lines • 13.4 kB
JavaScript
;
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.TransakService = void 0;
const _ = __importStar(require("lodash"));
const request = __importStar(require("request"));
const config_1 = __importDefault(require("../config"));
const clienterror_1 = require("../lib/errors/clienterror");
const server_1 = require("../lib/server");
class TransakService {
constructor() {
this.request = request;
}
transakGetKeys(req) {
if (!config_1.default.transak)
throw new Error('Transak 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.transak[env].api,
API_KEY: config_1.default.transak[env].apiKey,
SECRET_KEY: config_1.default.transak[env].secretKey,
WIDGET_API: config_1.default.transak[env].widgetApi
};
return keys;
}
transakGetAccessToken(req) {
return new Promise((resolve, reject) => {
const keys = this.transakGetKeys(req);
const API = keys.API;
const API_KEY = keys.API_KEY;
const SECRET_KEY = keys.SECRET_KEY;
const headers = {
'Content-Type': 'application/json',
'api-secret': SECRET_KEY,
};
req.body = {
apiKey: API_KEY
};
const URL = API + '/partners/api/v2/refresh-token';
this.request.post(URL, {
headers,
body: req.body,
json: true
}, (err, data) => {
if (err) {
return reject(err.body ? err.body : err);
}
else {
return resolve(data.body ? data.body : data);
}
});
});
}
transakGetCryptoCurrencies(req) {
return new Promise((resolve, reject) => {
const keys = this.transakGetKeys(req);
const API = keys.API;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
};
const URL = API + '/api/v2/currencies/crypto-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);
}
});
});
}
transakGetFiatCurrencies(req) {
return new Promise((resolve, reject) => {
const keys = this.transakGetKeys(req);
const API = keys.API;
const API_KEY = keys.API_KEY;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
};
const URL = API + `/api/v2/currencies/fiat-currencies?apiKey=${API_KEY}`;
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);
}
});
});
}
transakGetQuote(req) {
return new Promise((resolve, reject) => {
const keys = this.transakGetKeys(req);
const API = keys.API;
const API_KEY = keys.API_KEY;
if (!(0, server_1.checkRequired)(req.body, ['fiatCurrency', 'cryptoCurrency', 'network', 'paymentMethod'])) {
return reject(new clienterror_1.ClientError("Transak's request missing arguments"));
}
const headers = {
Accept: 'application/json',
};
let qs = [];
qs.push('partnerApiKey=' + API_KEY);
qs.push('fiatCurrency=' + req.body.fiatCurrency);
qs.push('cryptoCurrency=' + req.body.cryptoCurrency);
qs.push('isBuyOrSell=BUY');
qs.push('network=' + req.body.network);
qs.push('paymentMethod=' + req.body.paymentMethod);
if (req.body.fiatAmount)
qs.push('fiatAmount=' + req.body.fiatAmount);
if (req.body.cryptoAmount)
qs.push('cryptoAmount=' + req.body.cryptoAmount);
const URL = API + `/api/v2/currencies/price?${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);
}
});
});
}
transakGetSignedPaymentUrl(req) {
const appRequiredParams = [
'walletAddress',
'redirectURL',
'fiatAmount',
'fiatCurrency',
'network',
'cryptoCurrencyCode',
'partnerOrderId',
'partnerCustomerId',
];
const requiredParams = req.body.context === 'web' ? [] : appRequiredParams;
const keys = this.transakGetKeys(req);
const API_KEY = keys.API_KEY;
const WIDGET_API = keys.WIDGET_API;
if (!(0, server_1.checkRequired)(req.body, requiredParams)) {
throw new clienterror_1.ClientError("Transak's request missing arguments");
}
const headers = {
'Content-Type': 'application/json'
};
let qs = [];
if (req.body.walletAddress)
qs.push('walletAddress=' + encodeURIComponent(req.body.walletAddress));
if (req.body.disableWalletAddressForm)
qs.push('disableWalletAddressForm=' + encodeURIComponent(req.body.disableWalletAddressForm));
if (req.body.redirectURL)
qs.push('redirectURL=' + encodeURIComponent(req.body.redirectURL));
if (req.body.exchangeScreenTitle)
qs.push('exchangeScreenTitle=' + encodeURIComponent(req.body.exchangeScreenTitle));
if (req.body.fiatAmount)
qs.push('fiatAmount=' + encodeURIComponent(req.body.fiatAmount));
if (req.body.fiatCurrency)
qs.push('fiatCurrency=' + encodeURIComponent(req.body.fiatCurrency));
if (req.body.network)
qs.push('network=' + encodeURIComponent(req.body.network));
if (req.body.paymentMethod)
qs.push('paymentMethod=' + encodeURIComponent(req.body.paymentMethod));
if (req.body.cryptoCurrencyCode)
qs.push('cryptoCurrencyCode=' + encodeURIComponent(req.body.cryptoCurrencyCode));
if (req.body.cryptoCurrencyList)
qs.push('cryptoCurrencyList=' + encodeURIComponent(req.body.cryptoCurrencyList));
if (req.body.hideExchangeScreen)
qs.push('hideExchangeScreen=' + encodeURIComponent(req.body.hideExchangeScreen));
if (req.body.themeColor)
qs.push('themeColor=' + encodeURIComponent(req.body.themeColor));
if (req.body.hideMenu)
qs.push('hideMenu=' + encodeURIComponent(req.body.hideMenu));
if (req.body.partnerOrderId)
qs.push('partnerOrderId=' + encodeURIComponent(req.body.partnerOrderId));
if (req.body.partnerCustomerId)
qs.push('partnerCustomerId=' + encodeURIComponent(req.body.partnerCustomerId));
if (req.body.environment)
qs.push('environment=' + encodeURIComponent(req.body.environment));
if (req.body.widgetHeight)
qs.push('widgetHeight=' + encodeURIComponent(req.body.widgetHeight));
if (req.body.widgetWidth)
qs.push('widgetWidth=' + encodeURIComponent(req.body.widgetWidth));
if (req.body.productsAvailed)
qs.push('productsAvailed=' + encodeURIComponent(req.body.productsAvailed));
if (req.body.defaultFiatAmount)
qs.push('defaultFiatAmount=' + encodeURIComponent(req.body.defaultFiatAmount));
if (req.body.countryCode)
qs.push('countryCode=' + encodeURIComponent(req.body.countryCode));
if (req.body.excludeFiatCurrencies)
qs.push('excludeFiatCurrencies=' + encodeURIComponent(req.body.excludeFiatCurrencies));
if (req.body.defaultNetwork)
qs.push('defaultNetwork=' + encodeURIComponent(req.body.defaultNetwork));
if (req.body.networks)
qs.push('networks=' + encodeURIComponent(req.body.networks));
if (req.body.defaultPaymentMethod)
qs.push('defaultPaymentMethod=' + encodeURIComponent(req.body.defaultPaymentMethod));
if (req.body.disablePaymentMethods)
qs.push('disablePaymentMethods=' + encodeURIComponent(req.body.disablePaymentMethods));
if (req.body.defaultCryptoAmount)
qs.push('defaultCryptoAmount=' + encodeURIComponent(req.body.defaultCryptoAmount));
if (req.body.cryptoAmount)
qs.push('cryptoAmount=' + encodeURIComponent(req.body.cryptoAmount));
if (req.body.defaultCryptoCurrency)
qs.push('defaultCryptoCurrency=' + encodeURIComponent(req.body.defaultCryptoCurrency));
if (req.body.isFeeCalculationHidden)
qs.push('isFeeCalculationHidden=' + encodeURIComponent(req.body.isFeeCalculationHidden));
if (req.body.walletAddressesData)
qs.push('walletAddressesData=' + encodeURIComponent(req.body.walletAddressesData));
if (req.body.email)
qs.push('email=' + encodeURIComponent(req.body.email));
if (req.body.userData)
qs.push('userData=' + encodeURIComponent(req.body.userData));
if (req.body.isAutoFillUserData)
qs.push('isAutoFillUserData=' + encodeURIComponent(req.body.isAutoFillUserData));
const URL_SEARCH = `?apiKey=${API_KEY}&${qs.join('&')}`;
const urlWithSignature = `${WIDGET_API}${URL_SEARCH}`;
return { urlWithSignature };
}
transakGetOrderDetails(req) {
return new Promise(async (resolve, reject) => {
const env = _.cloneDeep(req.body.env);
const keys = this.transakGetKeys(req);
const API = keys.API;
if (!(0, server_1.checkRequired)(req.body, ['orderId'])) {
return reject(new clienterror_1.ClientError("Transak's request missing arguments"));
}
let accessToken;
if (req.body.accessToken) {
accessToken = req.body.accessToken;
}
else {
try {
const accessTokenData = await this.transakGetAccessToken({ body: env });
accessToken = accessTokenData?.data?.accessToken;
}
catch (err) {
return reject(err?.body ? err.body : err);
}
}
const headers = {
Accept: 'application/json',
'access-token': accessToken,
};
const URL = API + `/partners/api/v2/order/${req.body.orderId}`;
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.TransakService = TransakService;
//# sourceMappingURL=transak.js.map