UNPKG

btcnano-wallet-client

Version:
2 lines 2.4 MB
!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){var d=a("./lib");b.exports=d,d.errors=a("./lib/errors")},{"./lib":10,"./lib/errors":8}],2:[function(a,b,c){(function(c,d){"use strict";function e(a){a=a||{},this.verbose=!!a.verbose,this.request=a.request||f,this.baseUrl=a.baseUrl||z;var b=o.parse(this.baseUrl);this.basePath=b.path,this.baseHost=b.protocol+"//"+b.host,this.payProHttp=null,this.doNotVerifyPayPro=a.doNotVerifyPayPro,this.timeout=a.timeout||5e4,this.verbose?u.setLevel("debug"):u.setLevel("info")}var f,g=a("lodash"),h=a("preconditions").singleton(),i=a("util"),j=a("async"),k=a("events"),l=a("bitcore-lib"),m=a("bitcore-mnemonic"),n=a("sjcl"),o=a("url"),p=a("querystring");a("json-stable-stringify");f=a(c&&!c.browser?"request":"browser-request");var q=a("./common"),r=q.Constants,s=(q.Defaults,q.Utils),t=a("./paypro"),u=a("./log"),v=a("./credentials"),w=a("./verifier"),x=a("../package.json"),y=a("./errors"),z="http://localhost:3232/bws/api";i.inherits(e,k.EventEmitter),e.privateKeyEncryptionOpts={iter:1e4},e.prototype.initNotifications=function(a){u.warn("DEPRECATED: use initialize() instead."),this.initialize({},a)},e.prototype.initialize=function(a,b){h.checkState(this.credentials);var c=this;return c.notificationIncludeOwn=!!a.notificationIncludeOwn,c._initNotifications(a),b()},e.prototype.dispose=function(a){var b=this;return b._disposeNotifications(),a()},e.prototype._fetchLatestNotifications=function(a,b){var c=this;b=b||function(){};var d={lastNotificationId:c.lastNotificationId,includeOwn:c.notificationIncludeOwn};c.lastNotificationId||(d.timeSpan=a+1),c.getNotifications(d,function(a,d){return a?(u.warn("Error receiving notifications."),u.debug(a),b(a)):(d.length>0&&(c.lastNotificationId=g.last(d).id),g.each(d,function(a){c.emit("notification",a)}),b())})},e.prototype._initNotifications=function(a){var b=this;a=a||{};var c=a.notificationIntervalSeconds||5;b.notificationsIntervalId=setInterval(function(){b._fetchLatestNotifications(c,function(a){a&&(a instanceof y.NOT_FOUND||a instanceof y.NOT_AUTHORIZED)&&b._disposeNotifications()})},1e3*c)},e.prototype._disposeNotifications=function(){var a=this;a.notificationsIntervalId&&(clearInterval(a.notificationsIntervalId),a.notificationsIntervalId=null)},e.prototype.setNotificationsInterval=function(a){var b=this;b._disposeNotifications(),a>0&&b._initNotifications({notificationIntervalSeconds:a})},e._encryptMessage=function(a,b){return a?s.encryptMessage(a,b):null},e._decryptMessage=function(a,b){if(!a)return"";try{return s.decryptMessage(a,b)}catch(c){return"<ECANNOTDECRYPT>"}},e.prototype._processTxNotes=function(a){var b=this;if(a){var c=b.credentials.sharedEncryptingKey;g.each([].concat(a),function(a){a.encryptedBody=a.body,a.body=e._decryptMessage(a.body,c),a.encryptedEditedByName=a.editedByName,a.editedByName=e._decryptMessage(a.editedByName,c)})}},e.prototype._processTxps=function(a){var b=this;if(a){var c=b.credentials.sharedEncryptingKey;g.each([].concat(a),function(a){a.encryptedMessage=a.message,a.message=e._decryptMessage(a.message,c)||null,a.creatorName=e._decryptMessage(a.creatorName,c),g.each(a.actions,function(a){a.copayerName=e._decryptMessage(a.copayerName,c),a.comment=e._decryptMessage(a.comment,c)}),g.each(a.outputs,function(a){a.encryptedMessage=a.message,a.message=e._decryptMessage(a.message,c)||null}),a.hasUnconfirmedInputs=g.any(a.inputs,function(a){return 0==a.confirmations}),b._processTxNotes(a.note)})}},e._parseError=function(a){if(a){if(g.isString(a))try{a=JSON.parse(a)}catch(b){a={error:a}}var c;return a.code?y[a.code]?(c=new y[a.code],a.message&&(c.message=a.message)):c=new Error(a.code+": "+a.message):c=new Error(a.error||a),u.error(c),c}},e._signRequest=function(a,b,c,d){var e=[a.toLowerCase(),b,JSON.stringify(c)].join("|");return s.signMessage(e,d)},e.prototype.seedFromRandom=function(a){h.checkArgument(arguments.length<=1,"DEPRECATED: only 1 argument accepted."),h.checkArgument(g.isUndefined(a)||g.isObject(a),"DEPRECATED: argument should be an options object."),a=a||{},this.credentials=v.create(a.network||"livenet")};var A;e.prototype.validateKeyDerivation=function(a,b){function c(a,b){var c="m/0/0",d="Lorem ipsum dolor sit amet, ne amet urbanitas percipitur vim, libris disputando his ne, et facer suavitate qui. Ei quidam laoreet sea. Cu pro dico aliquip gubergren, in mundi postea usu. Ad labitur posidonium interesset duo, est et doctus molestie adipiscing.",e=a.derive(c).privateKey,f=s.signMessage(d,e),g=b.derive(c).publicKey;return s.verifyMessage(d,f,g)}function d(){var a="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",b=m(a).toHDPrivateKey();if("xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu"!=b.toString())return!1;if(b=b.derive("m/44'/0'/0'"),"xprv9xpXFhFpqdQK3TmytPBqXtGSwS3DLjojFhTGht8gwAAii8py5X6pxeBnQ6ehJiyJ6nDjWGJfZ95WxByFXVkDxHXrqu53WCRGypk2ttuqncb"!=b.toString())return!1;var d=l.HDPublicKey.fromString("xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj");return c(b,d)}function e(){var b;try{b=g.getMnemonic()}catch(d){}var e;if(b&&(!g.mnemonicHasPassphrase||a.passphrase)){var f=new m(b);e=f.toHDPrivateKey(a.passphrase,g.network)}e||(e=new l.HDPrivateKey(g.xPrivKey)),e=e.derive(g.getBaseAddressDerivationPath());var h=new l.HDPublicKey(g.xPubKey);return c(e,h)}var f=this;a=a||{};var g=f.credentials,h=!0;A||a.skipDeviceValidation||(h=d(),A=!0);var i=g.canSign()&&!g.isPrivKeyEncrypted()?e():!0;return f.keyDerivationOk=h&&i,b(null,f.keyDerivationOk)},e.prototype.seedFromRandomWithMnemonic=function(a){h.checkArgument(arguments.length<=1,"DEPRECATED: only 1 argument accepted."),h.checkArgument(g.isUndefined(a)||g.isObject(a),"DEPRECATED: argument should be an options object."),a=a||{},this.credentials=v.createWithMnemonic(a.network||"livenet",a.passphrase,a.language||"en",a.account||0)},e.prototype.getMnemonic=function(){return this.credentials.getMnemonic()},e.prototype.mnemonicHasPassphrase=function(){return this.credentials.mnemonicHasPassphrase},e.prototype.clearMnemonic=function(){return this.credentials.clearMnemonic()},e.prototype.seedFromExtendedPrivateKey=function(a,b){b=b||{},this.credentials=v.fromExtendedPrivateKey(a,b.account||0,b.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)},e.prototype.seedFromMnemonic=function(a,b){h.checkArgument(g.isUndefined(b)||g.isObject(b),"DEPRECATED: second argument should be an options object."),b=b||{},this.credentials=v.fromMnemonic(b.network||"livenet",a,b.passphrase,b.account||0,b.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)},e.prototype.seedFromExtendedPublicKey=function(a,b,c,d){h.checkArgument(g.isUndefined(d)||g.isObject(d)),d=d||{},this.credentials=v.fromExtendedPublicKey(a,b,c,d.account||0,d.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)},e.prototype["export"]=function(a){h.checkState(this.credentials),a=a||{};var b,c=v.fromObj(this.credentials);return a.noSign&&c.setNoSign(),b=JSON.stringify(c.toObj())},e.prototype["import"]=function(a){try{var b=v.fromObj(JSON.parse(a));this.credentials=b}catch(c){throw new y.INVALID_BACKUP}},e.prototype._import=function(a){h.checkState(this.credentials);var b=this;b.openWallet(function(c,d){return c?c instanceof y.NOT_AUTHORIZED||b.isPrivKeyExternal()?a(c):(u.info("Copayer not found, trying to add access"),void b.addAccess({},function(c){return c?a(new y.WALLET_DOES_NOT_EXIST):void b.openWallet(a)})):a(null,d)})},e.prototype.importFromMnemonic=function(a,b,c){u.debug("Importing from 12 Words"),b=b||{};try{this.credentials=v.fromMnemonic(b.network||"livenet",a,b.passphrase,b.account||0,b.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)}catch(d){return u.info("Mnemonic error:",d),c(new y.INVALID_BACKUP)}this._import(c)},e.prototype.importFromExtendedPrivateKey=function(a,b,c){u.debug("Importing from Extended Private Key"),c||(c=b,b={},u.warn("DEPRECATED WARN: importFromExtendedPrivateKey should receive 3 parameters."));try{this.credentials=v.fromExtendedPrivateKey(a,b.account||0,b.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)}catch(d){return u.info("xPriv error:",d),c(new y.INVALID_BACKUP)}this._import(c)},e.prototype.importFromExtendedPublicKey=function(a,b,c,d,e){h.checkArgument(5==arguments.length,"DEPRECATED: should receive 5 arguments"),h.checkArgument(g.isUndefined(d)||g.isObject(d)),h.shouldBeFunction(e),d=d||{},u.debug("Importing from Extended Private Key");try{this.credentials=v.fromExtendedPublicKey(a,b,c,d.account||0,d.derivationStrategy||r.DERIVATION_STRATEGIES.BIP44)}catch(f){return u.info("xPriv error:",f),e(new y.INVALID_BACKUP)}this._import(e)},e.prototype.decryptBIP38PrivateKey=function(b,c,e,f){var g,h=a("bip38"),i=new h;try{g=i.decrypt(b,c)}catch(j){return f(new Error("Could not decrypt BIP38 private key",j))}var k=new l.PrivateKey(g),m=k.publicKey.toAddress().toString(),n=new d(m,"ascii"),o=l.crypto.Hash.sha256sha256(n).toString("hex").substring(0,8),p=l.encoding.Base58Check.decode(b).toString("hex").substring(6,14);return o!=p?f(new Error("Incorrect passphrase")):f(null,g)},e.prototype.getBalanceFromPrivateKey=function(a,b){var c=this,a=new l.PrivateKey(a),d=a.publicKey.toAddress();c.getUtxos({addresses:d.toString()},function(a,c){return a?b(a):b(null,g.sum(c,"satoshis"))})},e.prototype.buildTxFromPrivateKey=function(a,b,c,d){var e=this;c=c||{};var a=new l.PrivateKey(a),f=a.publicKey.toAddress();j.waterfall([function(a){e.getUtxos({addresses:f.toString()},function(b,c){return a(b,c)})},function(d,e){if(!g.isArray(d)||0==d.length)return e(new Error("No utxos found"));var f=c.fee||1e4,h=g.sum(d,"satoshis")-f;if(0>=h)return e(new y.INSUFFICIENT_FUNDS);var i;try{var j=l.Address.fromString(b);i=(new l.Transaction).from(d).to(j,h).fee(f).sign(a),i.serialize()}catch(k){return u.error("Could not build transaction from private key",k),e(new y.COULD_NOT_BUILD_TRANSACTION)}return e(null,i)}],d)},e.prototype.openWallet=function(a){h.checkState(this.credentials);var b=this;return b.credentials.isComplete()&&b.credentials.hasWalletInfo()?a(null,!0):void b._doGetRequest("/v2/wallets/?includeExtendedInfo=1",function(c,d){if(c)return a(c);var f=d.wallet;if(b._processStatus(d),!b.credentials.hasWalletInfo()){var h=g.find(f.copayers,{id:b.credentials.copayerId});b.credentials.addWalletInfo(f.id,f.name,f.m,f.n,h.name)}if("complete"!=f.status)return a();if(b.credentials.walletPrivKey){if(!w.checkCopayers(b.credentials,f.copayers))return a(new y.SERVER_COMPROMISED)}else u.warn("Could not verify copayers key (missing wallet Private Key)");return b.credentials.addPublicKeyRing(e._extractPublicKeyRing(f.copayers)),b.emit("walletCompleted",f),a(null,d)})},e.prototype._getHeaders=function(a,b,c){var d={"x-client-version":"bwc-"+x.version};if(this.credentials){var f,g=c._requestPrivKey||this.credentials.requestPrivKey;g&&(delete c._requestPrivKey,f=e._signRequest(a,b,c,g)),d["x-identity"]=this.credentials.copayerId,d["x-signature"]=f}return d},e.prototype._doRequest=function(a,b,c,d){var f=this.baseUrl+b,g={relUrl:this.basePath+b,headers:this._getHeaders(a,b,c),method:a,url:f,body:c,json:!0,withCredentials:!1,timeout:this.timeout};u.debug("Request Args",i.inspect(c,{depth:10})),this.request(g,function(a,b,c){return u.debug(i.inspect(c,{depth:10})),b?200!==b.statusCode?404===b.statusCode?d(new y.NOT_FOUND):b.statusCode?(u.error("HTTP Error:"+b.statusCode),d(c?e._parseError(c):new Error(b.statusCode))):d(new y.CONNECTION_ERROR):'{"error":"read ECONNRESET"}'===c?d(new y.ECONNRESET_ERROR(JSON.parse(c))):d(null,c,b.header):d(new y.CONNECTION_ERROR)})},e.prototype._doPostRequest=function(a,b,c){return this._doRequest("post",a,b,c)},e.prototype._doPutRequest=function(a,b,c){return this._doRequest("put",a,b,c)},e.prototype._doGetRequest=function(a,b){return a+=a.indexOf("?")>0?"&":"?",a+="r="+g.random(1e4,99999),this._doRequest("get",a,{},b)},e.prototype._doDeleteRequest=function(a,b){return this._doRequest("delete",a,{},b)},e._buildSecret=function(a,b,c){g.isString(b)&&(b=l.PrivateKey.fromString(b));var e=new d(a.replace(/-/g,""),"hex"),f=new l.encoding.Base58(e).toString();return g.padRight(f,22,"0")+b.toWIF()+("testnet"==c?"T":"L")},e.parseSecret=function(a){function b(a,b){var c=[];b.push(a.length);for(var d=0;d<b.length;)c.push(a.substring(0==d?0:b[d-1],b[d])),d++;return c}h.checkArgument(a);try{var c=b(a,[22,74]),d=c[0].replace(/0/g,""),e=l.encoding.Base58.decode(d).toString("hex"),f=b(e,[8,12,16,20]).join("-"),g=l.PrivateKey.fromString(c[1]),i=c[2];return{walletId:f,walletPrivKey:g,network:"T"==i?"testnet":"livenet"}}catch(j){throw new Error("Invalid secret")}},e.getRawTx=function(a){var b=s.buildTx(a);return b.uncheckedSerialize()},e.signTxp=function(a,b){var c=[],d={},e=new l.HDPrivateKey(b);g.each(a.inputs,function(a){h.checkState(a.path,"Input derivation path not available (signing transaction)"),d[a.path]||(d[a.path]=e.derive(a.path).privateKey,c.push(d[a.path]))});var f=s.buildTx(a),i=g.map(c,function(a,b){return f.getSignatures(a)});return i=g.map(g.sortBy(g.flatten(i),"inputIndex"),function(a){return a.signature.toDER().toString("hex")})},e.prototype._signTxp=function(a,b){var c=this.credentials.getDerivedXPrivKey(b);return e.signTxp(a,c)},e.prototype._getCurrentSignatures=function(a){var b=g.filter(a.actions,{type:"accept"});return g.map(b,function(a){return{signatures:a.signatures,xpub:a.xpub}})},e.prototype._addSignaturesToBitcoreTx=function(a,b,c,d){if(c.length!=a.inputs.length)throw new Error("Number of signatures does not match number of inputs");var e=0,f=new l.HDPublicKey(d);if(g.each(c,function(c){a.inputs[e];try{var d=l.crypto.Signature.fromString(c),g=f.derive(a.inputPaths[e]).publicKey,h={inputIndex:e,signature:d,sigtype:l.crypto.Signature.SIGHASH_ALL,publicKey:g};b.inputs[e].addSignature(b,h),e++}catch(i){}}),e!=a.inputs.length)throw new Error("Wrong signatures")},e.prototype._applyAllSignatures=function(a,b){var c=this;h.checkState("accepted"==a.status);var d=c._getCurrentSignatures(a);g.each(d,function(d){c._addSignaturesToBitcoreTx(a,b,d.signatures,d.xpub)})},e.prototype._doJoinWallet=function(a,b,c,d,e,f,i){h.shouldBeFunction(i);var j=this;f=f||{},f.customData=f.customData||{},f.customData.walletPrivKey=b.toString();var k=s.encryptMessage(JSON.stringify(f.customData),this.credentials.personalEncryptingKey),l=s.encryptMessage(e,this.credentials.sharedEncryptingKey),m={walletId:a,name:l,xPubKey:c,requestPubKey:d,customData:k};f.dryRun&&(m.dryRun=!0),g.isBoolean(f.supportBIP44AndP2PKH)&&(m.supportBIP44AndP2PKH=f.supportBIP44AndP2PKH);var n=s.getCopayerHash(m.name,m.xPubKey,m.requestPubKey);m.copayerSignature=s.signMessage(n,b);var o="/v2/wallets/"+a+"/copayers";this._doPostRequest(o,m,function(a,b){return a?i(a):(j._processWallet(b.wallet),i(null,b.wallet))})},e.prototype.isComplete=function(){return this.credentials&&this.credentials.isComplete()},e.prototype.isPrivKeyEncrypted=function(){return this.credentials&&this.credentials.isPrivKeyEncrypted()},e.prototype.isPrivKeyExternal=function(){return this.credentials&&this.credentials.hasExternalSource()},e.prototype.getPrivKeyExternalSourceName=function(){return this.credentials?this.credentials.getExternalSourceName():null},e.prototype.getKeys=function(a){return this.credentials.getKeys(a)},e.prototype.checkPassword=function(a){if(this.isPrivKeyEncrypted())try{var b=this.getKeys(a);return!!b.xPrivKey}catch(c){return!1}},e.prototype.canSign=function(){return this.credentials&&this.credentials.canSign()},e._extractPublicKeyRing=function(a){return g.map(a,function(a){var b=g.pick(a,["xPubKey","requestPubKey"]);return b.copayerName=a.name,b})},e.prototype.encryptPrivateKey=function(a,b){this.credentials.encryptPrivateKey(a,b||e.privateKeyEncryptionOpts)},e.prototype.decryptPrivateKey=function(a){return this.credentials.decryptPrivateKey(a)},e.prototype.getFeeLevels=function(a,b){var c=this;h.checkArgument(a||g.contains(["livenet","testnet"],a)),c._doGetRequest("/v1/feelevels/?network="+(a||"livenet"),function(a,c){return a?b(a):b(a,c)})},e.prototype.getVersion=function(a){this._doGetRequest("/v1/version/",a)},e.prototype._checkKeyDerivation=function(){var a=this.keyDerivationOk===!1;return a&&u.error("Key derivation for this device is not working as expected"),!a},e.prototype.createWallet=function(a,b,c,d,f,i){var j=this;if(!j._checkKeyDerivation())return i(new Error("Cannot create new wallet"));f&&h.shouldBeObject(f),f=f||{};var k=f.network||"livenet";if(!g.contains(["testnet","livenet"],k))return i(new Error("Invalid network"));if(j.credentials?u.info("Using existing keys"):(u.info("Generating new keys"),j.seedFromRandom({network:k})),k!=j.credentials.network)return i(new Error("Existing keys were created for a different network"));var m=f.walletPrivKey||new l.PrivateKey,n=j.credentials;n.addWalletPrivateKey(m.toString());var o=s.encryptMessage(a,n.sharedEncryptingKey),p={name:o,m:c,n:d,pubKey:new l.PrivateKey(m).toPublicKey().toString(),network:k,singleAddress:!!f.singleAddress,id:f.id};j._doPostRequest("/v2/wallets/",p,function(f,g){if(f)return i(f);var h=g.walletId;n.addWalletInfo(h,a,c,d,b);var k=e._buildSecret(n.walletId,n.walletPrivKey,n.network);j._doJoinWallet(h,m,n.xPubKey,n.requestPubKey,b,{},function(a,b){return a?i(a):i(null,d>1?k:null)})})},e.prototype.joinWallet=function(a,b,c,d){var f=this;if(d||(d=c,c={},u.warn("DEPRECATED WARN: joinWallet should receive 4 parameters.")),!f._checkKeyDerivation())return d(new Error("Cannot join wallet"));c=c||{};try{var g=e.parseSecret(a)}catch(h){return d(h)}f.credentials||f.seedFromRandom({network:g.network}),f.credentials.addWalletPrivateKey(g.walletPrivKey.toString()),f._doJoinWallet(g.walletId,g.walletPrivKey,f.credentials.xPubKey,f.credentials.requestPubKey,b,{dryRun:!!c.dryRun},function(a,e){return a?d(a):(c.dryRun||f.credentials.addWalletInfo(e.id,e.name,e.m,e.n,b),d(null,e))})},e.prototype.recreateWallet=function(a){h.checkState(this.credentials),h.checkState(this.credentials.isComplete()),h.checkState(this.credentials.walletPrivKey);var b=this;this.getStatus({includeExtendedInfo:!0},function(c){if(!c)return u.info("Wallet is already created"),a();var d=b.credentials,e=l.PrivateKey.fromString(d.walletPrivKey),f=d.walletId,g=d.derivationStrategy!=r.DERIVATION_STRATEGIES.BIP45,h=s.encryptMessage(d.walletName||"recovered wallet",d.sharedEncryptingKey),i={name:h,m:d.m,n:d.n,pubKey:e.toPublicKey().toString(),network:d.network,id:f,supportBIP44AndP2PKH:g};b._doPostRequest("/v2/wallets/",i,function(c,d){if(c)return c instanceof y.WALLET_ALREADY_EXISTS?b.addAccess({},function(c){return c?a(c):void b.openWallet(function(b){return a(b)})}):a(c);f||(f=d.walletId);var h=1;j.each(b.credentials.publicKeyRing,function(a,c){var d=a.copayerName||"copayer "+h++;b._doJoinWallet(f,e,a.xPubKey,a.requestPubKey,d,{supportBIP44AndP2PKH:g},function(a){return a&&a instanceof y.COPAYER_IN_WALLET?c():c(a)})},a)})})},e.prototype._processWallet=function(a){var b=this,c=b.credentials.sharedEncryptingKey,d=s.decryptMessage(a.name,c);d!=a.name&&(a.encryptedName=a.name),a.name=d,g.each(a.copayers,function(a){var b=s.decryptMessage(a.name,c);b!=a.name&&(a.encryptedName=a.name),a.name=b,g.each(a.requestPubKeys,function(a){if(a.name){var b=s.decryptMessage(a.name,c);b!=a.name&&(a.encryptedName=a.name),a.name=b}})})},e.prototype._processStatus=function(a){function b(a){var b=a.wallet.copayers;if(b){var d=g.find(b,{id:c.credentials.copayerId});if(d&&d.customData){var e;try{e=JSON.parse(s.decryptMessage(d.customData,c.credentials.personalEncryptingKey))}catch(f){u.warn("Could not decrypt customData:",d.customData)}e&&(a.customData=e,!c.credentials.walletPrivKey&&e.walletPrivKey&&c.credentials.addWalletPrivateKey(e.walletPrivKey))}}}var c=this;b(a),c._processWallet(a.wallet),c._processTxps(a.pendingTxps)},e.prototype.getNotifications=function(a,b){h.checkState(this.credentials);var c=this;a=a||{};var d="/v1/notifications/";a.lastNotificationId?d+="?notificationId="+a.lastNotificationId:a.timeSpan&&(d+="?timeSpan="+a.timeSpan),c._doGetRequest(d,function(d,e){if(d)return b(d);var f=g.filter(e,function(b){return a.includeOwn||b.creatorId!=c.credentials.copayerId});return b(null,f)})},e.prototype.getStatus=function(a,b){h.checkState(this.credentials),b||(b=a,a={},u.warn("DEPRECATED WARN: getStatus should receive 2 parameters."));var c=this;a=a||{};var d=[];d.push("includeExtendedInfo="+(a.includeExtendedInfo?"1":"0")),d.push("twoStep="+(a.twoStep?"1":"0")),c._doGetRequest("/v2/wallets/?"+d.join("&"),function(a,d){if(a)return b(a);if("pending"==d.wallet.status){var f=c.credentials;d.wallet.secret=e._buildSecret(f.walletId,f.walletPrivKey,f.network)}return c._processStatus(d),b(a,d)})},e.prototype.getPreferences=function(a){h.checkState(this.credentials),h.checkArgument(a);var b=this;b._doGetRequest("/v1/preferences/",function(b,c){return b?a(b):a(null,c)})},e.prototype.savePreferences=function(a,b){h.checkState(this.credentials),h.checkArgument(b);var c=this;c._doPutRequest("/v1/preferences/",a,b)},e.prototype.fetchPayPro=function(a,b){h.checkArgument(a).checkArgument(a.payProUrl),t.get({url:a.payProUrl,http:this.payProHttp},function(a,c){return a?b(a):b(null,c)})},e.prototype.getUtxos=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete()),a=a||{};var c="/v1/utxos/";a.addresses&&(c+="?"+p.stringify({addresses:[].concat(a.addresses).join(",")})),this._doGetRequest(c,b)},e.prototype._getCreateTxProposalArgs=function(a){var b=this,c=g.cloneDeep(a);return c.message=e._encryptMessage(a.message,this.credentials.sharedEncryptingKey)||null,c.payProUrl=a.payProUrl||null,g.each(c.outputs,function(a){a.message=e._encryptMessage(a.message,b.credentials.sharedEncryptingKey)||null}),c},e.prototype.createTxProposal=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete()),h.checkState(this.credentials.sharedEncryptingKey),h.checkArgument(a);var c=this,d=c._getCreateTxProposalArgs(a);c._doPostRequest("/v2/txproposals/",d,function(a,e){return a?b(a):(c._processTxps(e),w.checkProposalCreation(d,e,c.credentials.sharedEncryptingKey)?b(null,e):b(new y.SERVER_COMPROMISED))})},e.prototype.publishTxProposal=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete()),h.checkArgument(a).checkArgument(a.txp),h.checkState(parseInt(a.txp.version)>=3);var c=this,d=s.buildTx(a.txp),e=d.uncheckedSerialize(),f={proposalSignature:s.signMessage(e,c.credentials.requestPrivKey)},g="/v1/txproposals/"+a.txp.id+"/publish/";c._doPostRequest(g,f,function(a,d){return a?b(a):(c._processTxps(d),b(null,d))})},e.prototype.createAddress=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this;return b||(b=a,a={},u.warn("DEPRECATED WARN: createAddress should receive 2 parameters.")),c._checkKeyDerivation()?(a=a||{},void c._doPostRequest("/v3/addresses/",a,function(a,d){return a?b(a):w.checkAddress(c.credentials,d)?b(null,d):b(new y.SERVER_COMPROMISED)})):b(new Error("Cannot create new address for this wallet"))},e.prototype.getMainAddresses=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this;a=a||{};var d=[];a.limit&&d.push("limit="+a.limit),a.reverse&&d.push("reverse=1");var e="";d.length>0&&(e="?"+d.join("&"));var f="/v1/addresses/"+e;c._doGetRequest(f,function(d,e){if(d)return b(d);if(!a.doNotVerify){var f=g.any(e,function(a){return!w.checkAddress(c.credentials,a)});if(f)return b(new y.SERVER_COMPROMISED)}return b(null,e)})},e.prototype.getBalance=function(a,b){b||(b=a,a={},u.warn("DEPRECATED WARN: getBalance should receive 2 parameters."));a=a||{},h.checkState(this.credentials&&this.credentials.isComplete());var c="/v1/balance/";a.twoStep&&(c+="?twoStep=1"),this._doGetRequest(c,b)},e.prototype.getTxProposals=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this;c._doGetRequest("/v1/txproposals/",function(d,e){return d?b(d):(c._processTxps(e),void j.every(e,function(b,d){return a.doNotVerify?d(!0):void c.getPayPro(b,function(a,e){var f=w.checkTxProposal(c.credentials,b,{paypro:e});return d(f)})},function(d){if(!d)return b(new y.SERVER_COMPROMISED);var f;return f=a.forAirGapped?{txps:JSON.parse(JSON.stringify(e)),encryptedPkr:a.doNotEncryptPkr?null:s.encryptMessage(JSON.stringify(c.credentials.publicKeyRing),c.credentials.personalEncryptingKey),unencryptedPkr:a.doNotEncryptPkr?JSON.stringify(c.credentials.publicKeyRing):null,m:c.credentials.m,n:c.credentials.n}:e,b(null,f)}))})},e.prototype.getPayPro=function(a,b){var c=this;return!a.payProUrl||this.doNotVerifyPayPro?b():void t.get({url:a.payProUrl,http:c.payProHttp},function(a,c){return a?b(new Error("Cannot check transaction now:"+a)):b(null,c)})},e.prototype.signTxProposal=function(a,b,c){h.checkState(this.credentials&&this.credentials.isComplete()),h.checkArgument(a.creatorId),g.isFunction(b)&&(c=b,b=null);var d=this;if(!a.signatures){if(!d.canSign())return c(new y.MISSING_PRIVATE_KEY);if(d.isPrivKeyEncrypted()&&!b)return c(new y.ENCRYPTED_PRIVATE_KEY)}d.getPayPro(a,function(e,f){if(e)return c(e);var h=w.checkTxProposal(d.credentials,a,{paypro:f});if(!h)return c(new y.SERVER_COMPROMISED);var i=a.signatures;if(g.isEmpty(i))try{i=d._signTxp(a,b)}catch(j){return u.error("Error signing tx",j),c(j)}var k="/v1/txproposals/"+a.id+"/signatures/",l={signatures:i};d._doPostRequest(k,l,function(a,b){return a?c(a):(d._processTxps(b),c(null,b))})})},e.prototype.signTxProposalFromAirGapped=function(a,b,c,d,e){h.checkState(this.credentials);var f=this;if(!f.canSign())throw new y.MISSING_PRIVATE_KEY;if(f.isPrivKeyEncrypted()&&!e)throw new y.ENCRYPTED_PRIVATE_KEY;var i;try{i=JSON.parse(s.decryptMessage(b,f.credentials.personalEncryptingKey))}catch(j){throw new Error("Could not decrypt public key ring")}if(!g.isArray(i)||i.length!=d)throw new Error("Invalid public key ring");if(f.credentials.m=c,f.credentials.n=d,f.credentials.addressType=a.addressType,f.credentials.addPublicKeyRing(i),!w.checkTxProposalSignature(f.credentials,a))throw new Error("Fake transaction proposal");return f._signTxp(a,e)},e.signTxProposalFromAirGapped=function(a,b,c,d,f,h){h=h||{};var i=JSON.parse(c);if(!g.isArray(i)||i.length!=f)throw new Error("Invalid public key ring");var j=new e({baseUrl:"https://bws.example.com/bws/api",verbose:!1});if("xprv"===a.slice(0,4)||"tprv"===a.slice(0,4)){if("xprv"===a.slice(0,4)&&"testnet"==b.network)throw new Error("testnet HD keys must start with tprv");if("tprv"===a.slice(0,4)&&"livenet"==b.network)throw new Error("livenet HD keys must start with xprv");j.seedFromExtendedPrivateKey(a,{account:h.account,derivationStrategy:h.derivationStrategy})}else j.seedFromMnemonic(a,{network:b.network,passphrase:h.passphrase,account:h.account,derivationStrategy:h.derivationStrategy});if(j.credentials.m=d,j.credentials.n=f,j.credentials.addressType=b.addressType,j.credentials.addPublicKeyRing(i),!w.checkTxProposalSignature(j.credentials,b))throw new Error("Fake transaction proposal");return j._signTxp(b)},e.prototype.rejectTxProposal=function(a,b,c){h.checkState(this.credentials&&this.credentials.isComplete()),h.checkArgument(c);var d=this,f="/v1/txproposals/"+a.id+"/rejections/",g={reason:e._encryptMessage(b,d.credentials.sharedEncryptingKey)||""};d._doPostRequest(f,g,function(a,b){return a?c(a):(d._processTxps(b),c(null,b))})},e.prototype.broadcastRawTx=function(a,b){h.checkState(this.credentials),h.checkArgument(b);var c=this;a=a||{};var d="/v1/broadcast_raw/";c._doPostRequest(d,a,function(a,c){return a?b(a):b(null,c)})},e.prototype._doBroadcast=function(a,b){var c=this,d="/v1/txproposals/"+a.id+"/broadcast/";c._doPostRequest(d,{},function(a,d){return a?b(a):(c._processTxps(d),b(null,d))})},e.prototype.broadcastTxProposal=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this;c.getPayPro(a,function(d,e){if(e){var f=s.buildTx(a);c._applyAllSignatures(a,f),t.send({http:c.payProHttp,url:a.payProUrl,amountSat:a.amount,refundAddr:a.changeAddress.address,merchant_data:e.merchant_data,rawTx:f.serialize({disableSmallFees:!0,disableLargeFees:!0,disableDustOutputs:!0})},function(d,e,f){return d?b(d):void c._doBroadcast(a,function(a,c){return b(a,c,f)})})}else c._doBroadcast(a,b)})},e.prototype.removeTxProposal=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this,d="/v1/txproposals/"+a.id;c._doDeleteRequest(d,function(a){return b(a)})},e.prototype.getTxHistory=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this,d=[];a&&(a.skip&&d.push("skip="+a.skip),a.limit&&d.push("limit="+a.limit),a.includeExtendedInfo&&d.push("includeExtendedInfo=1"));var e="";d.length>0&&(e="?"+d.join("&"));var f="/v1/txhistory/"+e;c._doGetRequest(f,function(a,d){return a?b(a):(c._processTxps(d),b(null,d))})},e.prototype.getTx=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this,d="/v1/txproposals/"+a;this._doGetRequest(d,function(a,d){return a?b(a):(c._processTxps(d),b(null,d))})},e.prototype.startScan=function(a,b){h.checkState(this.credentials&&this.credentials.isComplete());var c=this,d={includeCopayerBranches:a.includeCopayerBranches};c._doPostRequest("/v1/addresses/scan",d,function(a){return b(a)})},e.prototype.addAccess=function(a,b){h.checkState(this.credentials&&this.credentials.canSign()),a=a||{};var c=new l.PrivateKey(a.generateNewKey?null:this.credentials.requestPrivKey),d=c.toPublicKey().toString(),e=new l.HDPrivateKey(this.credentials.xPrivKey).derive(this.credentials.getBaseAddressDerivationPath()),f=s.signRequestPubKey(d,e),g=this.credentials.copayerId,i=a.name?s.encryptMessage(a.name,this.credentials.sharedEncryptingKey):null,a={copayerId:g,requestPubKey:d,signature:f,name:i,restrictions:a.restrictions};this._doPutRequest("/v1/copayers/"+g+"/",a,function(a,d){return a?b(a):b(null,d.wallet,c)})},e.prototype.getTxNote=function(a,b){h.checkState(this.credentials);var c=this;a=a||{},c._doGetRequest("/v1/txnotes/"+a.txid+"/",function(a,d){return a?b(a):(c._processTxNotes(d),b(null,d))})},e.prototype.editTxNote=function(a,b){h.checkState(this.credentials),a=a||{},a.body&&(a.body=e._encryptMessage(a.body,this.credentials.sharedEncryptingKey)),this._doPutRequest("/v1/txnotes/"+a.txid+"/",a,function(a,c){return b(a)})},e.prototype.getTxNotes=function(a,b){h.checkState(this.credentials);var c=this;a=a||{};var d=[];g.isNumber(a.minTs)&&d.push("minTs="+a.minTs);var e="";d.length>0&&(e="?"+d.join("&")),c._doGetRequest("/v1/txnotes/"+e,function(a,d){return a?b(a):(c._processTxNotes(d),b(null,d))})},e.prototype.getFiatRate=function(a,b){h.checkState(this.credentials),h.checkArgument(b);var c=this,a=a||{},d=[];a.ts&&d.push("ts="+a.ts),a.provider&&d.push("provider="+a.provider);var e="";d.length>0&&(e="?"+d.join("&")),c._doGetRequest("/v1/fiatrates/"+a.code+"/"+e,function(a,c){return a?b(a):b(null,c)})},e.prototype.pushNotificationsSubscribe=function(a,b){var c="/v1/pushnotifications/subscriptions/";this._doPostRequest(c,a,function(a,c){return a?b(a):b(null,c)})},e.prototype.pushNotificationsUnsubscribe=function(a){var b="/v1/pushnotifications/subscriptions/";this._doDeleteRequest(b,function(b){return a(b?b:null)})},e.prototype.getSendMaxInfo=function(a,b){var c=this,d=[];a=a||{},a.feeLevel&&d.push("feeLevel="+a.feeLevel),a.feePerKb&&d.push("feePerKb="+a.feePerKb),a.excludeUnconfirmedUtxos&&d.push("excludeUnconfirmedUtxos=1"),a.returnInputs&&d.push("returnInputs=1");var e="";d.length>0&&(e="?"+d.join("&"));var f="/v1/sendmaxinfo/"+e;c._doGetRequest(f,function(a,c){return a?b(a):b(null,c)})},e.prototype._oldCopayDecrypt=function(a,b,c){ var d,e="@#$",f="%^#@";try{var g=a+e+b;d=n.decrypt(g,c)}catch(h){g=a+f+b;try{d=n.decrypt(g,c)}catch(h){u.debug(h)}}if(!d)return null;var i;try{i=JSON.parse(d)}catch(h){}return i},e.prototype.getWalletIdsFromOldCopay=function(a,b,c){var d=this._oldCopayDecrypt(a,b,c);if(!d)return null;var e=d.walletIds.concat(g.keys(d.focusedTimestamps));return g.uniq(e)},e.prototype.createWalletFromOldCopay=function(a,b,c,d){var e=this._oldCopayDecrypt(a,b,c);return e?e.publicKeyRing.copayersExtPubKeys.length!=e.opts.totalCopayers?d(new Error("Wallet is incomplete, cannot be imported")):(this.credentials=v.fromOldCopayWallet(e),void this.recreateWallet(d)):d(new Error("Could not decrypt"))},b.exports=e}).call(this,a("_process"),a("buffer").Buffer)},{"../package.json":575,"./common":5,"./credentials":7,"./errors":8,"./log":11,"./paypro":12,"./verifier":13,_process:392,async:14,bip38:15,"bitcore-lib":64,"bitcore-mnemonic":136,"browser-request":174,buffer:191,events:387,"json-stable-stringify":429,lodash:433,preconditions:434,querystring:396,request:439,sjcl:574,url:421,util:425}],3:[function(a,b,c){"use strict";var d={};d.SCRIPT_TYPES={P2SH:"P2SH",P2PKH:"P2PKH"},d.DERIVATION_STRATEGIES={BIP44:"BIP44",BIP45:"BIP45",BIP48:"BIP48"},d.PATHS={REQUEST_KEY:"m/1'/0",TXPROPOSAL_KEY:"m/1'/1",REQUEST_KEY_AUTH:"m/2"},d.BIP45_SHARED_INDEX=2147483647,d.UNITS={btc:{toSatoshis:1e8,full:{maxDecimals:8,minDecimals:8},"short":{maxDecimals:6,minDecimals:2}},bit:{toSatoshis:100,full:{maxDecimals:2,minDecimals:2},"short":{maxDecimals:0,minDecimals:0}}},b.exports=d},{}],4:[function(a,b,c){"use strict";var d={};d.DEFAULT_FEE_PER_KB=1e4,d.MIN_FEE_PER_KB=0,d.MAX_FEE_PER_KB=1e6,d.MAX_TX_FEE=1e8,b.exports=d},{}],5:[function(a,b,c){var d={};d.Constants=a("./constants"),d.Defaults=a("./defaults"),d.Utils=a("./utils"),b.exports=d},{"./constants":3,"./defaults":4,"./utils":6}],6:[function(a,b,c){(function(c){"use strict";function d(){}var e=a("lodash"),f=a("preconditions").singleton(),g=a("sjcl"),h=a("json-stable-stringify"),i=a("bitcore-lib"),j=i.Address,k=i.PrivateKey,l=i.PublicKey,m=i.crypto,n=(i.encoding,a("./constants")),o=a("./defaults");d.SJCL={},d.encryptMessage=function(a,b){var c=g.codec.base64.toBits(b);return g.encrypt(c,a,e.defaults({ks:128,iter:1},d.SJCL))},d.decryptMessage=function(a,b){try{var c=g.codec.base64.toBits(b);return g.decrypt(c,a)}catch(d){return a}},d.hashMessage=function(a){f.checkArgument(a);var b=new c(a),d=m.Hash.sha256sha256(b);return d=new i.encoding.BufferReader(d).readReverse()},d.signMessage=function(a,b){f.checkArgument(a);var c=new k(b),e=d.hashMessage(a);return m.ECDSA.sign(e,c,"little").toString()},d.verifyMessage=function(a,b,c){if(f.checkArgument(a),f.checkArgument(c),!b)return!1;var e=new l(c),g=d.hashMessage(a);try{var h=new m.Signature.fromString(b);return m.ECDSA.verify(g,h,e,"little")}catch(i){return!1}},d.privateKeyToAESKey=function(a){f.checkArgument(a&&e.isString(a)),f.checkArgument(i.PrivateKey.isValid(a),"The private key received is invalid");var b=i.PrivateKey.fromString(a);return i.crypto.Hash.sha256(b.toBuffer()).slice(0,16).toString("base64")},d.getCopayerHash=function(a,b,c){return[a,b,c].join("|")},d.getProposalHash=function(a){function b(a,b,c,d){return[a,b,c||"",d||""].join("|")}return arguments.length>1?b.apply(this,arguments):h(a)},d.deriveAddress=function(a,b,c,d,g){f.checkArgument(e.contains(e.values(n.SCRIPT_TYPES),a));var h,k=e.map(b,function(a){var b=new i.HDPublicKey(a.xPubKey);return b.derive(c).publicKey});switch(a){case n.SCRIPT_TYPES.P2SH:h=j.createMultisig(k,d,g);break;case n.SCRIPT_TYPES.P2PKH:f.checkState(e.isArray(k)&&1==k.length),h=j.fromPublicKey(k[0],g)}return{address:h.toString(),path:c,publicKeys:e.invoke(k,"toString")}},d.xPubToCopayerId=function(a){var b=g.hash.sha256.hash(a);return g.codec.hex.fromBits(b)},d.signRequestPubKey=function(a,b){var c=new i.HDPrivateKey(b).derive(n.PATHS.REQUEST_KEY_AUTH).privateKey;return d.signMessage(a,c)},d.verifyRequestPubKey=function(a,b,c){var e=new i.HDPublicKey(c).derive(n.PATHS.REQUEST_KEY_AUTH).publicKey;return d.verifyMessage(a,b,e.toString())},d.formatAmount=function(a,b,c){function d(a,b){var c=a.toString().split("."),d=(c[1]||"0").substring(0,b);return parseFloat(c[0]+"."+d)}function g(a,b,c,d){a=a.replace(".",c);var f=a.split(c),g=f[0],h=f[1];h=e.dropRightWhile(h,function(a,b){return"0"==a&&b>=d}).join("");var i=f.length>1?c+h:"";return g=g.replace(/\B(?=(\d{3})+(?!\d))/g,b),g+i}f.shouldBeNumber(a),f.checkArgument(e.contains(e.keys(n.UNITS),b)),c=c||{};var h=n.UNITS[b],i=c.fullPrecision?"full":"short",j=d(a/h.toSatoshis,h[i].maxDecimals).toFixed(h[i].maxDecimals);return g(j,c.thousandsSeparator||",",c.decimalSeparator||".",h[i].minDecimals)},d.buildTx=function(a){var b=new i.Transaction;switch(f.checkState(e.contains(e.values(n.SCRIPT_TYPES),a.addressType)),a.addressType){case n.SCRIPT_TYPES.P2SH:e.each(a.inputs,function(c){b.from(c,c.publicKeys,a.requiredSignatures)});break;case n.SCRIPT_TYPES.P2PKH:b.from(a.inputs)}if(a.toAddress&&a.amount&&!a.outputs?b.to(a.toAddress,a.amount):a.outputs&&e.each(a.outputs,function(a){f.checkState(a.script||a.toAddress,"Output should have either toAddress or script specified"),a.script?b.addOutput(new i.Transaction.Output({script:a.script,satoshis:a.amount})):b.to(a.toAddress,a.amount)}),b.fee(a.fee),b.change(a.changeAddress.address),b.outputs.length>1){var c=e.reject(a.outputOrder,function(a){return a>=b.outputs.length});f.checkState(b.outputs.length==c.length),b.sortOutputs(function(a){return e.map(c,function(b){return a[b]})})}var d=e.reduce(a.inputs,function(a,b){return+b.satoshis+a},0),g=e.reduce(b.outputs,function(a,b){return+b.satoshis+a},0);return f.checkState(d-g>=0),f.checkState(d-g<=o.MAX_TX_FEE),b},b.exports=d}).call(this,a("buffer").Buffer)},{"./constants":3,"./defaults":4,"bitcore-lib":64,buffer:191,"json-stable-stringify":429,lodash:433,preconditions:434,sjcl:574}],7:[function(a,b,c){(function(c){"use strict";function d(){this.version="1.0.0",this.derivationStrategy=l.DERIVATION_STRATEGIES.BIP44,this.account=0}function e(a){if(!g.contains(["livenet","testnet"],a))throw new Error("Invalid network")}var f=a("preconditions").singleton(),g=a("lodash"),h=a("bitcore-lib"),i=a("bitcore-mnemonic"),j=a("sjcl"),k=a("./common"),l=k.Constants,m=k.Utils,n=["network","xPrivKey","xPrivKeyEncrypted","xPubKey","requestPrivKey","requestPubKey","copayerId","publicKeyRing","walletId","walletName","m","n","walletPrivKey","personalEncryptingKey","sharedEncryptingKey","copayerName","externalSource","mnemonic","mnemonicEncrypted","entropySource","mnemonicHasPassphrase","derivationStrategy","account","addressType"];d.create=function(a){e(a);var b=new d;return b.network=a,b.xPrivKey=new h.HDPrivateKey(a).toString(),b._expand(),b};var o={en:i.Words.ENGLISH,es:i.Words.SPANISH,ja:i.Words.JAPANESE,zh:i.Words.CHINESE,fr:i.Words.FRENCH,it:i.Words.ITALIAN};d.createWithMnemonic=function(a,b,c,g,h){if(e(a),!o[c])throw new Error("Unsupported language");f.shouldBeNumber(g),h=h||{};for(var j=new i(o[c]);!i.isValid(j.toString());)j=new i(o[c]);var k=new d;return k.network=a,k.account=g,k.xPrivKey=j.toHDPrivateKey(b,a).toString(),k._expand(),k.mnemonic=j.phrase,k.mnemonicHasPassphrase=!!b,k},d.fromExtendedPrivateKey=function(a,b,c,e){f.shouldBeNumber(b),f.checkArgument(g.contains(g.values(l.DERIVATION_STRATEGIES),c)),e=e||{};var h=new d;return h.xPrivKey=a,h.account=b,h.derivationStrategy=c,h._expand(),h},d.fromMnemonic=function(a,b,c,h,j,k){e(a),f.shouldBeNumber(h),f.checkArgument(g.contains(g.values(l.DERIVATION_STRATEGIES),j)),k=k||{};var m=new i(b),n=new d;return n.xPrivKey=m.toHDPrivateKey(c,a).toString(),n.mnemonic=b,n.mnemonicHasPassphrase=!!c,n.account=h,n.derivationStrategy=j,n._expand(),n},d.fromExtendedPublicKey=function(a,b,e,i,j,k){f.checkArgument(e),f.shouldBeNumber(i),f.checkArgument(g.contains(g.values(l.DERIVATION_STRATEGIES),j)),k=k||{};var m=new c(e,"hex");f.checkArgument(m.length>=14,"At least 112 bits of entropy are needed");var n=new d;return n.xPubKey=a,n.entropySource=h.crypto.Hash.sha256sha256(m).toString("hex"),n.account=i,n.derivationStrategy=j,n.externalSource=b,n._expand(),n},d._getNetworkFromExtendedKey=function(a){return f.checkArgument(a&&g.isString(a)),"t"==a.charAt(0)?"testnet":"livenet"},d._xPubToCopayerId=function(a){var b=j.hash.sha256.hash(a);return j.codec.hex.fromBits(b)},d.prototype._hashFromEntropy=function(a,b){f.checkState(a);var d=new c(this.entropySource,"hex"),e=h.crypto.Hash.sha256hmac(d,new c(a));return e.slice(0,b)},d.prototype._expand=function(){f.checkState(this.xPrivKey||this.xPubKey&&this.entropySource);var a=d._getNetworkFromExtendedKey(this.xPrivKey||this.xPubKey);if(this.network?f.checkState(this.network==a):this.network=a,this.xPrivKey){var b=new h.HDPrivateKey.fromString(this.xPrivKey),c=b.derive(this.getBaseAddressDerivationPath());this.xPubKey=new h.HDPublicKey(c).toString();var e=b.derive(l.PATHS.REQUEST_KEY);this.requestPrivKey=e.privateKey.toString();var g=e.publicKey;this.requestPubKey=g.toString(),this.entropySource=h.crypto.Hash.sha256(e.privateKey.toBuffer()).toString("hex")}else{var i=this._hashFromEntropy("reqPrivKey",32),j=new h.PrivateKey(i.toString("hex"),a);this.requestPrivKey=j.toString(),this.requestPubKey=j.toPublicKey().toString()}this.personalEncryptingKey=this._hashFromEntropy("personalKey",16).toString("base64"),this.copayerId=d._xPubToCopayerId(this.xPubKey),this.publicKeyRing=[{xPubKey:this.xPubKey,requestPubKey:this.requestPubKey}]},d.fromObj=function(a){var b=new d;return g.each(n,function(c){b[c]=a[c]}),b.derivationStrategy=b.derivationStrategy||l.DERIVATION_STRATEGIES.BIP45,b.addressType=b.addressType||l.SCRIPT_TYPES.P2SH,b.account=b.account||0,f.checkState(b.xPrivKey||b.xPubKey||b.xPrivKeyEncrypted,"invalid input"),b},d.prototype.toObj=function(){var a=this,b={};return g.each(n,function(c){b[c]=a[c]}),b},d.prototype.getBaseAddressDerivationPath=function(){var a;switch(this.derivationStrategy){case l.DERIVATION_STRATEGIES.BIP45:return"m/45'";case l.DERIVATION_STRATEGIES.BIP44:a="44";break;case l.DERIVATION_STRATEGIES.BIP48:a="48"}var b="livenet"==this.network?"0":"1";return"m/"+a+"'/"+b+"'/"+this.account+"'"},d.prototype.getDerivedXPrivKey=function(a){var b=this.getBaseAddressDerivationPath(),c=this.getKeys(a).xPrivKey;return new h.HDPrivateKey(c,this.network).derive(b)},d.prototype.addWalletPrivateKey=function(a){this.walletPrivKey=a,this.sharedEncryptingKey=m.privateKeyToAESKey(a)},d.prototype.addWalletInfo=function(a,b,c,d,e){this.walletId=a,this.walletName=b,this.m=c,this.n=d,e&&(this.copayerName=e),"BIP44"==this.derivationStrategy&&1==d?this.addressType=l.SCRIPT_TYPES.P2PKH:this.addressType=l.SCRIPT_TYPES.P2SH,!this.xPrivKey&&this.externalSource&&d>1&&(this.derivationStrategy=l.DERIVATION_STRATEGIES.BIP48),1==d&&this.addPublicKeyRing([{xPubKey:this.xPubKey,requestPubKey:this.requestPubKey}])},d.prototype.hasWalletInfo=function(){return!!this.walletId},d.prototype.isPrivKeyEncrypted=function(){return!!this.xPrivKeyEncrypted&&!this.xPrivKey},d.prototype.encryptPrivateKey=function(a,b){if(this.xPrivKeyEncrypted)throw new Error("Private key already encrypted");if(!this.xPrivKey)throw new Error("No private key to encrypt");if(this.xPrivKeyEncrypted=j.encrypt(a,this.xPrivKey,b),!this.xPrivKeyEncrypted)throw new Error("Could not encrypt");this.mnemonic&&(this.mnemonicEncrypted=j.encrypt(a,this.mnemonic,b)),delete this.xPrivKey,delete this.mnemonic},d.prototype.decryptPrivateKey=function(a){if(!this.xPrivKeyEncrypted)throw new Error("Private key is not encrypted");try{this.xPrivKey=j.decrypt(a,this.xPrivKeyEncrypted),this.mnemonicEncrypted&&(this.mnemonic=j.decrypt(a,this.mnemonicEncrypted)),delete this.xPrivKeyEncrypted,delete this.mnemonicEncrypted}catch(b){throw new Error("Could not decrypt")}},d.prototype.getKeys=function(a){var b={};if(this.isPrivKeyEncrypted()){f.checkArgument(a,"Private keys are encrypted, a password is needed");try{b.xPrivKey=j.decrypt(a,this.xPrivKeyEncrypted),this.mnemonicEncrypted&&(b.mnemonic=j.decrypt(a,this.mnemonicEncrypted))}catch(c){throw new Error("Could not decrypt")}}else b.xPrivKey=this.xPrivKey,b.mnemonic=this.mnemonic;return b},d.prototype.addPublicKeyRing=function(a){this.publicKeyRing=g.clone(a)},d.prototype.canSign=function(){return!!this.xPrivKey||!!this.xPrivKeyEncrypted},d.prototype.setNoSign=function(){delete this.xPrivKey,delete this.xPrivKeyEncrypted,delete this.mnemonic,delete this.mnemonicEncrypted},d.prototype.isComplete=function(){return this.m&&this.n&&this.publicKeyRing&&this.publicKeyRing.length==this.n?!0:!1},d.prototype.hasExternalSource=function(){return"string"==typeof this.externalSource},d.prototype.getExternalSourceName=function(){return this.externalSource},d.prototype.getMnemonic=function(){if(this.mnemonicEncrypted&&!this.mnemonic)throw new Error("Credentials are encrypted");return this.mnemonic},d.prototype.clearMnemonic=function(){delete this.mnemonic,delete this.mnemonicEncrypted},d.fromOldCopayWallet=function(a){function b(a){var b=a.publicKeyRing.copayersExtPubKeys.sort().join(""),d=new c(b),e=new h.PrivateKey.fromBuffer(h.crypto.Hash.sha256(d));return e.toString()}var e=new d;e.derivationStrategy=l.DERIVATION_STRATEGIES.BIP45,e.xPrivKey=a.privateKey.extendedPrivateKeyString,e._expand(),e.addWalletPrivateKey(b(a)),e.addWalletInfo(a.opts.id,a.opts.name,a.opts.requiredCopayers,a.opts.totalCopayers);var f=g.map(a.publicKeyRing.copayersExtPubKeys,function(b){var c,d=b===e.xPubKey;if(d){var f=l.PATHS.REQUEST_KEY;c=new h.HDPrivateKey(e.xPrivKey).derive(f).hdPublicKey}else{var f=l.PATHS.REQUEST_KEY_AUTH;c=new h.HDPublicKey(b).derive(f)}var g=new h.HDPublicKey(b).derive("m/2147483646/0/0"),i=g.publicKey.toString("hex"),j=a.publicKeyRing.nicknameFor[i];return d&&(e.copayerName=j),{xPubKey:b,requestPubKey:c.publicKey.toString(),copayerName:j}});return e.addPublicKeyRing(f),e},b.exports=d}).call(this,a("buffer").Buffer)},{"./common":5,"bitcore-lib":64,"bitcore-mnemonic":136,buffer:191,lodash:433,preconditions:434,sjcl:574}],8:[function(a,b,c){"use strict";function d(a,b){return a.replace("{0}",b[0]).replace("{1}",b[1]).replace("{2}",b[2])}var e=a("lodash"),f=function(a,b){var c=function(){if(e.isString(b.message))this.message=d(b.message,arguments);else{if(!e.isFunction(b.message))throw new Error("Invalid error definition for "+b.name);this.message=b.message.apply(null,arguments)}this.stack=this.message+"\n"+(new Error).stack};return c.prototype=Object.create(a.prototype),c.prototype.name=a.prototype.name+b.name,a[b.name]=c,b.errors&&g(c,b.errors),c},g=function(a,b){e.each(b,function(b){f(a,b)})},h=function(a,b){return g(a,b),a},i={};i.Error=function(){this.message="Internal error",this.stack=this.message+"\n"+(new Error).stack},i.Error.prototype=Object.create(Error.prototype),i.Error.prototype.name="bwc.Error";var j=a("./spec");h(i.Error,j),b.exports=i.Error,b.exports.extend=function(a){return f(i.Error,a)}},{"./spec":9,lodash:433}],9:[function(a,b,c){"use strict";var d=[{name:"INVALID_BACKUP",message:"Invalid Backup"},{name:"WALLET_DOES_NOT_EXIST",message:"Wallet does not exist. Need to recreate"},{name:"MISSING_PRIVATE_KEY",message:"Missing private keys to sign"},{name:"ENCRYPTED_PRIVATE_KEY",message:"Private key is encrypted, cannot sign"},{name:"SERVER_COMPROMISED",message:"Server response could not be verified"},{name:"COULD_NOT_BUILD_TRANSACTION",message:"Could not build transaction"},{name:"INSUFFICIENT_FUNDS",message:"Insufficient funds"},{name:"CONNECTION_ERROR",message:"connection error"},{name:"NOT_FOUND",message:"not found"},{name:"ECONNRESET_ERROR",message:"ECONNRESET, body: {0}"},{name:"WALLET_ALREADY_EXISTS",message:"wallet already exists"},{name:"COPAYER_IN_WALLET",message:"copayer in wallet"},{name:"WALLET_FULL",message:"wallet is full"},{name:"WALLET_NOT_FOUND",message:"wallet not found"},{name:"INSUFFICIENT_FUNDS_FOR_FEE",message:"insufficient funds for fee"},{name:"LOCKED_FUNDS",message:"locked funds"},{name:"COPAYER_VOTED",message:"Copayer already voted on this transaction proposal"},{name:"NOT_AUTHORIZED",message:"not authorized"},{name:"UNAVAILABLE_UTXOS",message:"Unavailable unspent outputs"},{name:"TX_NOT_FOUND",message:"transaction proposal not found"}];b.exports=d},{}],10:[function(a,b,c){var d=b.exports=a("./api");d.Verifier=a("./verifier"),d.Utils=a("./common/utils"),d.sjcl=a("sjcl"),d.Bitcore=a("bitcore-lib")},{"./api":2,"./common/utils":6,"./verifier":13,"bitcore-lib":64,sjcl:574}],11:[function(a,b,c){var d=a("lodash"),e=function(a){this.name=a||"log",this.level=2};e.prototype.getLevels=function(){return f};var f={debug:0,info:1,log:2,warn:3,error:4,fatal:5};d.each(f,function(a,b){e.prototype[b]=function(){if(a>=f[this.level]){if(Error.stackTraceLimit&&"debug"==this.level){var c=Error.stackTraceLimit;Error.stackTraceLimit=2;var d;try{anerror()}catch(e){d=e.stack}var g=d.split("\n"),h=g[2];h=":"+h.substr(6),Error.stackTraceLimit=c}var i,j="["+b+(h||"")+"] "+arguments[0],i=[].slice.call(arguments,1);console[b]?(i.unshift(j),console[b].apply(console,i)):(i.length&&(j+=JSON.stringify(i)),console.log(j))}}}),e.prototype.setLevel=function(a){this.level=a};var g=new e("copay");new Error;g.setLevel("info"),b.exports=g},{lodash:433}],12:[function(a,b,c){(function(c,d){var e=a("preconditions").singleton(),f=a("bitcore-lib"),g=a("bitcore-payment-protocol"),h={};h._nodeRequest=function(b,c){b.agent=!1;var e=b.httpNode||a("http"===b.proto?"http":"https"),f="POST"==b.method?"post":"get";e[f](b,function(a){if(200!=a.statusCode)return c(new Error("HTTP Request Error"));var b=[];a.on("data",function(a){b.push(a)}),a.on("end",function(){return b=d.concat(b),c(null,b)})})},h._browserRequest=function(a,b){var c=(a.method||"GET").toUpperCase(),d=a.url,e=a;e.headers=e.headers||{},e.body=e.body||e.data||"";var f=a.xhr||new XMLHttpRequest;f.open(c,d,!0),Object.keys(e.headers).forEach(function(a){var b=e.headers[a];"Content-Length"!==a&&"Content-Transfer-Encoding"!==a&&f.setReque