UNPKG

bitcore-wallet-service

Version:
348 lines 13.8 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.ChangellyService = void 0; const crypto = __importStar(require("crypto")); const request = __importStar(require("request")); const config_1 = __importDefault(require("../config")); const clienterror_1 = require("../lib/errors/clienterror"); const errordefinitions_1 = require("../lib/errors/errordefinitions"); const logger_1 = __importDefault(require("../lib/logger")); const server_1 = require("../lib/server"); class ChangellyService { constructor() { this.request = request; } changellyGetKeysV2(req) { if (!config_1.default.changelly) { logger_1.default.warn('Changelly missing credentials'); throw new Error('ClientError: Service not configured.'); } else if (!config_1.default.changelly.v2) { logger_1.default.warn('Changelly v2 missing credentials'); throw new Error('ClientError: Service v2 not configured.'); } const keys = { API: config_1.default.changelly.v2.api, SECRET: config_1.default.changelly.v2.secret }; return keys; } changellySignRequestsV2(message, secret) { if (!message || !secret) throw new Error('Missing parameters to sign Changelly v2 request'); const privateKey = crypto.createPrivateKey({ key: Buffer.from(secret, 'hex'), format: 'der', type: 'pkcs8', }); const publicKey = crypto.createPublicKey(privateKey).export({ type: 'pkcs1', format: 'der' }); const signature = crypto.sign('sha256', Buffer.from(JSON.stringify(message)), privateKey); return { signature, publicKey }; } changellyGetCurrencies(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, ['id'])) { return reject(new clienterror_1.ClientError('changellyGetCurrencies request missing arguments')); } const message = { jsonrpc: '2.0', id: req.body.id, method: req.body.full ? 'getCurrenciesFull' : 'getCurrencies', params: {} }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } changellyGetPairsParams(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, ['id', 'coinFrom', 'coinTo'])) { return reject(new clienterror_1.ClientError('changellyGetPairsParams request missing arguments')); } const message = { id: req.body.id, jsonrpc: '2.0', method: 'getPairsParams', params: [ { from: req.body.coinFrom, to: req.body.coinTo } ] }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } changellyGetFixRateForAmount(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, ['id', 'coinFrom', 'coinTo', 'amountFrom'])) { return reject(new clienterror_1.ClientError('changellyGetFixRateForAmount request missing arguments')); } const message = { id: req.body.id, jsonrpc: '2.0', method: 'getFixRateForAmount', params: [ { from: req.body.coinFrom, to: req.body.coinTo, amountFrom: req.body.amountFrom } ] }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } changellyCreateFixTransaction(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, [ 'id', 'coinFrom', 'coinTo', 'amountFrom', 'addressTo', 'fixedRateId', 'refundAddress' ])) { return reject(new clienterror_1.ClientError('changellyCreateFixTransaction request missing arguments')); } const message = { id: req.body.id, jsonrpc: '2.0', method: 'createFixTransaction', params: { from: req.body.coinFrom, to: req.body.coinTo, address: req.body.addressTo, amountFrom: req.body.amountFrom, rateId: req.body.fixedRateId, refundAddress: req.body.refundAddress } }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } changellyGetTransactions(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, ['id', 'exchangeTxId'])) { return reject(new clienterror_1.ClientError('changellyGetTransactions request missing arguments')); } const message = { id: req.body.id, jsonrpc: '2.0', method: 'getTransactions', params: { id: req.body.exchangeTxId, limit: req.body.limit ?? 1, } }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } changellyGetStatus(req) { return new Promise((resolve, reject) => { let keys, headers; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { return reject(errordefinitions_1.Errors.UPGRADE_NEEDED.withMessage('Credentials expired, please update the app to continue using Changelly services.')); } if (!(0, server_1.checkRequired)(req.body, ['id', 'exchangeTxId'])) { return reject(new clienterror_1.ClientError('changellyGetStatus request missing arguments')); } const message = { jsonrpc: '2.0', id: req.body.id, method: 'getStatus', params: { id: req.body.exchangeTxId } }; const URL = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), }; this.request.post(URL, { headers, body: message, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } } exports.ChangellyService = ChangellyService; //# sourceMappingURL=changelly.js.map