UNPKG

bitcore-wallet-client

Version:
160 lines 7 kB
'use strict'; 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