bitcore-wallet-client
Version:
Client for bitcore-wallet-service
160 lines • 7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BulkClient = void 0;
const preconditions_1 = require("preconditions");
const api_1 = require("./api");
const common_1 = require("./common");
const request_1 = require("./request");
const $ = (0, preconditions_1.singleton)();
class BulkClient extends request_1.Request {
constructor(url, opts) {
super(url, opts);
}
_populateAuth(headers, signingParams) {
if (this.credentials && this.credentials.length) {
headers['x-identities'] = this.credentials
.map(cred => cred.copayerId)
.join(',');
headers['x-signature'] = this._signRequest(Object.assign(Object.assign({}, signingParams), { privKey: this.credentials[0].requestPrivKey }));
}
}
checkStateOfMultipleCredentials(failureMessage, opts) {
if (!opts)
opts = {};
if (this.credentials && this.credentials.length > 0) {
$.checkState(this.credentials.every(cred => {
return (cred &&
(opts.ignoreIncomplete || cred.isComplete()) &&
cred.requestPrivKey == this.credentials[0].requestPrivKey);
}), failureMessage || 'All credentials must be complete');
}
}
getStatusAll(credentials, opts, cb) {
if (!cb) {
cb = opts;
opts = {};
}
this.setCredentials(credentials);
var qs = [];
qs.push('includeExtendedInfo=' + (opts.includeExtendedInfo ? '1' : '0'));
qs.push('twoStep=' + (opts.twoStep ? '1' : '0'));
qs.push('serverMessageArray=1');
qs.push('silentFailure=' + (opts.silentFailure ? '1' : '0'));
let wallets = opts.wallets;
if (wallets) {
Object.keys(wallets).forEach(copayerId => {
if (wallets[copayerId].tokenAddresses) {
wallets[copayerId].tokenAddresses.forEach(address => {
qs.push(`${copayerId}:tokenAddress=` + address);
});
}
if (wallets[copayerId].multisigContractAddress) {
qs.push(`${copayerId}:multisigContractAddress=` +
wallets[copayerId].multisigContractAddress);
qs.push(`${copayerId}:network=` +
this.credentials.find(cred => cred.copayerId == copayerId).network);
}
});
}
this.checkStateOfMultipleCredentials('Failed state: this.credentials at <getStatusAll()>', { ignoreIncomplete: opts.ignoreIncomplete });
return this.get('/v1/wallets/all/?' + qs.join('&'), (err, results) => {
if (err || !results)
return cb(err, results);
[].concat(results).forEach(result => {
if (result.success) {
var status = result.status;
var walletId = result.walletId;
var c = this.credentials.find(cred => cred.walletId == walletId);
if (c && status.wallet.status == 'pending') {
result.wallet.secret = api_1.API._buildSecret(c.walletId, c.walletPrivKey, c.coin, c.network);
}
if (c)
this._processStatus(status, c);
}
});
return cb(null, results);
});
}
_processStatus(status, c) {
var processCustomData = (data, c) => {
const copayers = data.wallet.copayers;
if (!copayers)
return;
const me = copayers.find(copayer => copayer.id == c.copayerId);
if (!me || !me.customData)
return;
var customData;
try {
customData = JSON.parse(common_1.Utils.decryptMessage(me.customData, c.personalEncryptingKey));
}
catch (e) { }
if (!customData)
return;
data.customData = customData;
if (!c.walletPrivKey && customData.walletPrivKey)
c.addWalletPrivateKey(customData.walletPrivKey);
};
processCustomData(status, c);
this._processWallet(status.wallet, c);
this._processTxps(status.pendingTxps, c);
}
_processWallet(wallet, c) {
var encryptingKey = c.sharedEncryptingKey;
var name = common_1.Utils.decryptMessageNoThrow(wallet.name, encryptingKey);
if (name != wallet.name) {
wallet.encryptedName = wallet.name;
}
wallet.name = name;
for (const copayer of wallet.copayers || []) {
var name = common_1.Utils.decryptMessageNoThrow(copayer.name, encryptingKey);
if (name != copayer.name) {
copayer.encryptedName = copayer.name;
}
copayer.name = name;
for (const access of copayer.requestPubKeys || []) {
if (!access.name)
return;
var name = common_1.Utils.decryptMessageNoThrow(access.name, encryptingKey);
if (name != access.name) {
access.encryptedName = access.name;
}
access.name = name;
}
}
}
_processTxps(txps, c) {
if (!txps)
return;
const encryptingKey = c.sharedEncryptingKey;
for (const txp of [].concat(txps)) {
txp.encryptedMessage = txp.message;
txp.message =
common_1.Utils.decryptMessageNoThrow(txp.message, encryptingKey) || null;
txp.creatorName = common_1.Utils.decryptMessageNoThrow(txp.creatorName, encryptingKey);
for (const action of txp.actions || []) {
action.copayerName = common_1.Utils.decryptMessageNoThrow(action.copayerName, encryptingKey);
action.comment = common_1.Utils.decryptMessageNoThrow(action.comment, encryptingKey);
}
for (const output of txp.outputs || []) {
output.encryptedMessage = output.message;
output.message =
common_1.Utils.decryptMessageNoThrow(output.message, encryptingKey) || null;
}
txp.hasUnconfirmedInputs = (txp.inputs || []).some(input => input.confirmations == 0);
this._processTxNotes(txp.note, c);
}
}
_processTxNotes(notes, c) {
if (!notes)
return;
var encryptingKey = c.sharedEncryptingKey;
for (const note of [].concat(notes)) {
note.encryptedBody = note.body;
note.body = common_1.Utils.decryptMessageNoThrow(note.body, encryptingKey);
note.encryptedEditedByName = note.editedByName;
note.editedByName = common_1.Utils.decryptMessageNoThrow(note.editedByName, encryptingKey);
}
}
}
exports.BulkClient = BulkClient;
//# sourceMappingURL=bulkclient.js.map