UNPKG

bitcore-wallet-service

Version:
189 lines 7.16 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.Client = void 0; const requestStream = __importStar(require("request")); const request = __importStar(require("request-promise-native")); const url_1 = require("url"); const logger_1 = __importDefault(require("../../logger")); const bitcoreLib = require('bitcore-lib'); const secp256k1 = require('secp256k1'); class Client { constructor(params) { Object.assign(this, params); } getMessage(params) { const { method, url, payload = {} } = params; const parsedUrl = new url_1.URL(url); return [method, parsedUrl.pathname + parsedUrl.search, JSON.stringify(payload)].join('|'); } sign(params) { const message = this.getMessage(params); const privateKey = this.authKey.bn.toBuffer({ size: 32 }); const messageHash = bitcoreLib.crypto.Hash.sha256sha256(Buffer.from(message)); return Buffer.from(secp256k1.ecdsaSign(messageHash, privateKey).signature).toString('hex'); } async register(params) { const { payload } = params; const { baseUrl = this.baseUrl } = payload; const url = `${baseUrl}/wallet`; const signature = this.sign({ method: 'POST', url, payload }); return request.post(url, { headers: { 'x-signature': signature }, body: payload, json: true }); } async getBalance(params) { const { payload, pubKey, tokenAddress, multisigContractAddress } = params; let query = ''; let apiUrl = `${this.baseUrl}/wallet/${pubKey}/balance`; if (tokenAddress) { query = `?tokenAddress=${tokenAddress}`; } if (multisigContractAddress) { apiUrl = `${this.baseUrl}/address/${multisigContractAddress}/balance`; } const url = apiUrl + query; const signature = this.sign({ method: 'GET', url, payload }); return request.get(url, { headers: { 'x-signature': signature }, body: payload, json: true }); } async getCheckData(params) { const { payload, pubKey } = params; const url = `${this.baseUrl}/wallet/${pubKey}/check`; logger_1.default.debug('WALLET CHECK'); const signature = this.sign({ method: 'GET', url, payload }); return request.get(url, { headers: { 'x-signature': signature }, body: payload, json: true }); } async getAddressTxos(params) { const { unspent, address } = params; const args = unspent ? `?unspent=${unspent}` : ''; const url = `${this.baseUrl}/address/${address}${args}`; return request.get(url, { json: true }); } async getTx(params) { const { txid } = params; const url = `${this.baseUrl}/tx/${txid}`; return request.get(url, { json: true }); } async getCoins(params) { const { payload, pubKey, includeSpent } = params; var extra = ''; if (includeSpent) { extra = `?includeSpent=${includeSpent}`; } const url = `${this.baseUrl}/wallet/${pubKey}/utxos${extra}`; logger_1.default.debug('GET UTXOS: %o', url); const signature = this.sign({ method: 'GET', url, payload }); return request.get(url, { headers: { 'x-signature': signature }, body: payload, json: true }); } async getCoinsForTx(params) { const { txId } = params; const url = `${this.baseUrl}/tx/${txId}/coins`; logger_1.default.debug('GET COINS FOR TX: %o', url); return request.get(url, { json: true }); } listTransactions(params) { const { pubKey, startBlock, startDate, endBlock, endDate, includeMempool, tokenAddress, multisigContractAddress } = params; let query = ''; let apiUrl = `${this.baseUrl}/wallet/${pubKey}/transactions?`; if (startBlock) { query += `startBlock=${startBlock}&`; } if (endBlock) { query += `endBlock=${endBlock}&`; } if (tokenAddress) { query += `tokenAddress=${tokenAddress}&`; } if (multisigContractAddress) { apiUrl = `${this.baseUrl}/ethmultisig/transactions/${multisigContractAddress}?`; } if (includeMempool) { query += 'includeMempool=true'; } const url = apiUrl + query; const signature = this.sign({ method: 'GET', url }); logger_1.default.debug('List transactions %o', url); return requestStream.get(url, { headers: { 'x-signature': signature }, json: true }); } async importAddresses(params) { const { payload, pubKey } = params; const url = `${this.baseUrl}/wallet/${pubKey}`; logger_1.default.debug('addAddresses: %o %o', url, payload); const signature = this.sign({ method: 'POST', url, payload }); const h = { 'x-signature': signature }; if (params.reprocess) { h['x-reprocess'] = params.reprocess; } return request.post(url, { headers: h, body: payload, json: true }); } async broadcast(params) { const { payload } = params; const url = `${this.baseUrl}/tx/send`; logger_1.default.debug('Broadcast %o', url); return request.post(url, { body: payload, json: true }); } } exports.Client = Client; //# sourceMappingURL=client.js.map