bitcore-wallet-service
Version:
A service for Mutisig HD Bitcoin Wallets
189 lines • 7.16 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.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