edge-currency-plugins 3.8.9 → 3.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -74,7 +74,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
74
74
|
`],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[76066276],wrappedSegwitXPub:[76067358],segwitXPriv:[76066276],segwitXPub:[76067358],pubkeyHash:[71],scriptHash:[5],bech32:["vtc"]}}};var Kc=Object.defineProperty,Wc=Object.defineProperties,Eo=Object.getOwnPropertyDescriptors,ba=Object.getOwnPropertySymbols,Pf=Object.prototype.hasOwnProperty,Gc=Object.prototype.propertyIsEnumerable,Mo=(P,C,K)=>C in P?Kc(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Vc=(P,C)=>{for(var K in C||(C={}))Pf.call(C,K)&&Mo(P,K,C[K]);if(ba)for(var K of ba(C))Gc.call(C,K)&&Mo(P,K,C[K]);return P},qc=(P,C)=>Wc(P,Eo(C));const wa=qc(Vc({assetDisplayName:"Firo",chainDisplayName:"Firo",currencyCode:"FIRO",customFeeTemplate:Ze,memoOptions:it,pluginId:"zcoin",walletType:"wallet:zcoin",addressExplorer:"https://insight.zcoin.io/address/%s",blockExplorer:"https://insight.zcoin.io/block/%s",transactionExplorer:"https://insight.zcoin.io/tx/%s",denominations:[{name:"FIRO",multiplier:"100000000",symbol:"\u0192"},{name:"mFIRO",multiplier:"100000",symbol:"m\u0192"}]},Ft),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://firo-eusa1.edge.app","wss://blockbook.firo.org"],enableCustomServers:!1},displayName:"Firo",metaTokens:[]}),Xc={serverConfigs:[{type:"blockbook-nownode",uris:["https://firo-eusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://firobook.nownodes.io"]}],formats:["bip44","bip32"],uriPrefix:"firo",gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000",maximumFeeRate:nt(wa,1.39)}},So=[rt,cr,oo,Nr,Da,au,uo,Ka,mu,vo,es,ws,ks,rc,mo,Hs,Vs,la,_c,Bc,vf,wf,Tf,{currencyInfo:wa,engineInfo:Xc,coinInfo:{name:"zcoin",segwit:!1,coinType:136,prefixes:{messagePrefix:[`Zcoin Signed Message:
|
|
75
75
|
`],wif:[210],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[82],scriptHash:[7]}}}];function Jr(P){const C=So.find(K=>K.coinInfo.name===P);if(C==null)throw new Error("Could not find coin info "+P);return C.coinInfo}var zt=gr(3689);const l0=zt.WK,h0=zt.DE,xa=zt.k5,d0=zt.Dr,Bf=zt.ef,Cf=zt.GY,p0=zt.WM,v0=zt.Kz,g0=zt.uX,m0=zt.IK,y0=zt.gw,b0=zt.WU,w0=zt.G8,x0=zt.xQ,Ea=zt.D7,E0=zt.hi,Rf=zt.zU,M0=zt.dq,S0=zt.m$,k0=zt.MU,I0=zt.ID,_0=zt.k0,A0=zt.D4,T0=zt.kL,P0=zt.jx,O0=zt.A_,B0=zt.v1,Ff=zt.TL,C0=zt.Og,R0=zt.mq,F0=zt.ft,N0=zt.KU,Kn=zt.ZU,L0=zt.sF,D0=zt.ye,U0=zt.Xj,H0=zt.Rn,z0=zt.bo,j0=zt.KL,Zc=zt.rW,K0=zt.U3,Yc=zt.$Y,W0=zt.EJ,Nf=zt.XY,G0=zt.v7,$c=zt.up,V0=zt.h,q0=zt.Cx,ko=zt.Zz,Jc=zt.CU,kr=zt.ib,Qr=zt.eT,qi=zt._0,Er=zt.UR,Mn=zt.Up,X0=zt.y0,Xi=zt.A2,Br=zt.ql,Ma=zt.FX,Z0=zt.Jr,an=zt.zS,Qc=zt.pK,el=zt.ud,tl=zt.Zk,Y0=zt.Mf,rl=zt.U0,$0=zt.CX,J0=zt.l4,nl=zt.Jv,Q0=zt.T0,il=zt.z8,eh=zt.Gt,ol=zt.Fm,th=zt.b4,rh=zt.N2,nh=zt.K8,ih=zt.gB,Sa=zt.bd,oh=zt.z2,ah=zt.GG,sh=zt.V$,fh=zt.CC,uh=zt.dT,al=zt.uT,ch=zt._j,lh=zt.p4,hh=zt.W0,dh=zt.zk,ph=zt.AB,vh=zt.sn,gh=zt._u,mh=zt.Py,yh=zt.iu,bh=zt.l7,Lf=zt.JU,wh=zt.O6;class sl extends xa{constructor(C){super(C);const{networkFeeShortage:K}=C;this.networkFeeShortage=K}}function I(P){return function(K){if(K instanceof Error&&K.name===P)return K}}const O=I("InsufficientFundsError"),W={forceUseUtxo:mi,subtractFee:vs,accumulative:as};var Y=gr(8287).Buffer,ie=Object.defineProperty,ae=Object.defineProperties,he=Object.getOwnPropertyDescriptors,_e=Object.getOwnPropertySymbols,Ae=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable,Ge=(P,C,K)=>C in P?ie(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,et=(P,C)=>{for(var K in C||(C={}))Ae.call(C,K)&&Ge(P,K,C[K]);if(_e)for(var K of _e(C))Ce.call(C,K)&&Ge(P,K,C[K]);return P},Xe=(P,C)=>ae(P,he(C));let ft;const Et=()=>{if(ft!=null)return ft;const P=gr(3513);return(0,He.f0)(P),ft=(0,ct.dg)(P),console.log("loaded ECPair!"),ft};var at=(P=>(P.Airbitz="airbitz",P.Legacy="legacy",P.Segwit="segwit",P.WrappedSegwit="wrappedSegwit",P.ReplayProtection="replayProtection",P))(at||{}),kt=(P=>(P.p2pkh="p2pkh",P.p2sh="p2sh",P.p2wpkh="p2wpkh",P.p2wsh="p2wsh",P.p2tr="p2tr",P))(kt||{}),St=(P=>(P.p2wpkh="p2wpkh",P.p2wpkhp2sh="p2wpkhp2sh",P.p2wsh="p2wsh",P.p2pk="p2pk",P.p2pkh="p2pkh",P.p2sh="p2sh",P.p2tr="p2tr",P.replayProtection="replayprotection",P.replayProtectionP2SH="replayprotectionp2sh",P))(St||{});const Ut=T("p2wpkh","p2wpkhp2sh","p2wsh","p2pk","p2pkh","p2sh","p2tr","replayprotection","replayprotectionp2sh");var er=(P=>(P.Legacy="legacy",P.Segwit="segwit",P))(er||{}),Qt=(P=>(P.good="good",P.legacy="legacy",P.bad="bad",P))(Qt||{});function yr(P){switch(P){case 32:return"airbitz";case 44:return"legacy";case 49:return"wrappedSegwit";case 84:return"segwit";default:throw new Error("InvalidPurposeNumber")}}const or=(P,C)=>{const K=Jr(C.coin),de=ln({coinString:C.coin,prefixIndex:P}),ke=hl(K);if(ke.length>0){try{return Ot(C.address,ke),"good"}catch{}return Df(C.address,de,C.coin,void 0),"legacy"}return Df(C.address,de,C.coin,void 0),P===0?"good":"legacy"},Mr=P=>{const C=Zi(P.coin,K=>or(K,P),[`Could not determine address type of ${P.address}`]);return C!=null?C:"bad"},_r=(P,C)=>{const K=Zi(C,de=>{const ke=ln({coinString:C,prefixIndex:de});return Df(P,ke,C)},[`Could not determine address type of ${P}`]);if(K==null)throw new Error("Could not determine address type");return K};function vr(P){var C,K,de;const ke=P.seed.includes(" "),Fe=ke?ce.kw(P.seed):Y.from(P.seed,"base64"),Me=ln({coinString:P.coin,sigType:P.type,prefixIndex:0}),Oe=Jr(P.coin),ze=rp(P.type),Be=(C=P.coinType)!=null?C:Oe.coinType,We=(K=P.account)!=null?K:0,ut=((de=Oe.bip32FromSeedFunc)!=null?de:ne.CC)(Fe);return ut.network=Me,ze===32||!ke?ut.derive(0).toBase58():ut.deriveHardened(ze).deriveHardened(Be).deriveHardened(We).toBase58()}const Ir=(P,C)=>{var K;const de=ln({coinString:C.coin,sigType:C.type,prefixIndex:P});return((K=Jr(C.coin).bip32FromBase58Func)!=null?K:ne.n3)(C.xpriv,de).neutered().toBase58()},Sr=P=>{const C=Zi(P.coin,K=>Ir(K,P),["Invalid private key"]);if(C==null)throw Error("unable to convert xpriv to xpub");return C};function Vr(P){let C="0000";return C=He.Et.hash160(Y.from(P(""),"hex")).slice(0,4).toString("hex"),parseInt(C,16)}const sn=(P,C)=>C.changeIndex===Vr(P),Sn=(P,C)=>{var K;const de=Jr(C.coin),ke=ln({coinString:C.coin,sigType:C.type,prefixIndex:P});return((K=de.bip32FromBase58Func)!=null?K:ne.n3)(C.xpub,ke).derive(C.bip44ChangeIndex).derive(C.bip44AddressIndex).publicKey.toString("hex")},Rn=P=>{const C=Zi(P.coin,K=>Sn(K,P),["Invalid network version"]);if(C==null)throw Error("unable to derive pubkey from xpub");return C},kn=(P,C)=>{const K=Jr(C.coin),de=hl(K),ke=ln({coinString:C.coin,prefixIndex:P}),Fe=Ia(K.prefixes,P),Me=Df(C.address,ke,C.coin,C.addressType);let Oe;const ze=()=>{try{return Ot(C.address,de).scriptHash.toString("hex")}catch{}};switch(Me){case"p2pkh":if(Fe.cashaddr!=null){const We=ze();if(We!=null){const Ve=Eh({scriptHash:We,scriptType:"p2pkh",coin:C.coin});if(Ve==null)throw new Error(`unable to convert address ${C.address} to script pubkey`);return Ve}}Oe=He.KT.p2pkh;break;case"p2sh":if(Fe.cashaddr!=null){const We=ze();if(We!=null){const Ve=Eh({scriptHash:We,scriptType:"p2sh",coin:C.coin});if(Ve==null)throw new Error(`unable to convert address ${C.address} to script pubkey`);return Ve}}Oe=He.KT.p2sh;break;case"p2wpkh":Oe=He.KT.p2wpkh;break;case"p2wsh":Oe=He.KT.p2wsh;break;case"p2tr":Oe=He.KT.p2tr;break;default:throw new Error("invalid address type in address to script pubkey")}let Be;try{Be=Oe({address:C.address,network:ke,bs58DecodeFunc:K.bs58DecodeFunc,bs58EncodeFunc:K.bs58EncodeFunc}).output}catch(We){throw console.trace(We),We}if(Be==null)throw new Error("failed converting address to scriptPubkey");return Be.toString("hex")},en=P=>{const C=Zi(P.coin,K=>kn(K,P),["Invalid version or Network mismatch","Invalid prefix or Network mismatch",`InvalidArgument: ${P.address} has Mixed case`,`Could not determine address type of ${P.address}`]);if(C==null)throw new Error(`unable to convert address ${P.address} to script pubkey`);return C};function Lr(P){const C=ln({coinString:P.coin,prefixIndex:0}),K=ln({coinString:P.coin,prefixIndex:1}),de=Jr(P.coin),ke=de.prefixes,Fe=Ia(ke,0),Me=Ia(ke,1);let Oe,ze,Be;switch(P.addressType){case"p2pkh":Fe.cashaddr!=null&&(Oe=Ye(si({scriptPubkey:P.scriptPubkey,scriptType:"p2pkh",coin:P.coin}),Qe.pubkeyhash,Fe.cashaddr,P.includeCashaddrPrefix)),Me.cashaddr!=null&&(ze=Ye(si({scriptPubkey:P.scriptPubkey,scriptType:"p2pkh",coin:P.coin}),Qe.pubkeyhash,Me.cashaddr,P.includeCashaddrPrefix)),Be=He.KT.p2pkh;break;case"p2sh":Fe.cashaddr!=null&&(Oe=Ye(si({scriptPubkey:P.scriptPubkey,scriptType:"p2sh",coin:P.coin}),Qe.scripthash,Fe.cashaddr,P.includeCashaddrPrefix)),Me.cashaddr!=null&&(ze=Ye(si({scriptPubkey:P.scriptPubkey,scriptType:"p2sh",coin:P.coin}),Qe.scripthash,Me.cashaddr,P.includeCashaddrPrefix)),Be=He.KT.p2sh;break;case"p2wpkh":Be=He.KT.p2wpkh;break;case"p2wsh":Be=He.KT.p2wsh;break;case"p2tr":Be=He.KT.p2tr;break;default:throw new Error("invalid address type in address to script pubkey")}try{Oe=Oe!=null?Oe:Be({output:Y.from(P.scriptPubkey,"hex"),network:C,bs58DecodeFunc:de.bs58DecodeFunc,bs58EncodeFunc:de.bs58EncodeFunc}).address,ze=ze!=null?ze:Be({output:Y.from(P.scriptPubkey,"hex"),network:K,bs58DecodeFunc:de.bs58DecodeFunc,bs58EncodeFunc:de.bs58EncodeFunc}).address}catch(We){throw console.trace(We),We}if(Oe==null||ze==null)throw new Error("failed converting scriptPubkey to address");return{address:Oe,legacyAddress:ze}}function si(P){const C=ln({coinString:P.coin,prefixIndex:0});let K;switch(P.scriptType){case"p2pkh":K=He.KT.p2pkh;break;case"p2sh":K=He.KT.p2sh;break;case"p2wpkh":K=He.KT.p2wpkh;break;case"p2tr":K=He.KT.p2tr;break;default:throw new Error("invalid address type in address to script pubkey")}let de;try{de=K({output:Y.from(P.scriptPubkey,"hex"),network:C}).hash}catch(ke){throw console.trace(ke),ke}if(de==null)throw new Error("failed converting scriptPubkey to address");return de.toString("hex")}function Fn(P){var C,K,de,ke;const{scriptPubkey:Fe,coin:Me}=P;let Oe;Me!=null&&(Oe=ln({coinString:Me,prefixIndex:0}));const ze=He.KT.p2sh(Xe(et({},Oe!=null?{network:Oe}:{}),{redeem:{output:Y.from(Fe,"hex")}})),Be=(C=ze.output)==null?void 0:C.toString("hex"),We=(de=(K=ze.redeem)==null?void 0:K.output)==null?void 0:de.toString("hex"),Ve=(ke=ze.hash)==null?void 0:ke.toString("hex");if(Be==null||We==null)throw new Error("unable to convert script to p2sh");let ut=ze.address;if(Me!=null&&Ve!=null){const bt=Jr(Me).prefixes,yt=Ia(bt,0);yt.cashaddr!=null&&(ut=Ye(Ve,Qe.scripthash,yt.cashaddr))}return{scriptPubkey:Be,redeemScript:We,address:ut}}function Wn(P){let C;switch(P.scriptType){case"p2pkh":{if(C=He.KT.p2pkh({pubkey:Y.from(P.pubkey,"hex")}),C.output==null)throw new Error("failed converting pubkey to script pubkey");return{scriptPubkey:C.output.toString("hex")}}case"p2wpkhp2sh":return Fn({scriptPubkey:Wn({pubkey:P.pubkey,scriptType:"p2wpkh"}).scriptPubkey});case"p2wpkh":{if(C=He.KT.p2wpkh({pubkey:Y.from(P.pubkey,"hex")}),C.output==null)throw new Error("failed converting pubkey to script pubkey");return{scriptPubkey:C.output.toString("hex")}}case"p2tr":{if(C=He.KT.p2tr({pubkey:Y.from(P.pubkey,"hex")}),C.output==null)throw new Error("failed converting pubkey to script pubkey");return{scriptPubkey:C.output.toString("hex")}}case"replayprotection":{if(P.scriptTemplates==null)throw new Error("Missing replayProtection script template");const K=P.scriptTemplates.replayProtection(P.pubkey);return Fn({scriptPubkey:K})}default:throw new Error("invalid address type in pubkey to script pubkey")}}const fi=(P,C)=>{const K=_r(P,C);return Lr({scriptPubkey:en({address:P,coin:C}),addressType:K,coin:C}).address},Io=(P,C)=>{var K,de;const ke=Jr(C.coin),Fe=ln({coinString:C.coin,sigType:C.type,prefixIndex:P});return(de=((K=ke.bip32FromBase58Func)!=null?K:ne.n3)(C.xpriv,Fe).derive(C.bip44ChangeIndex).derive(C.bip44AddressIndex).privateKey)==null?void 0:de.toString("hex")},Nn=P=>{const C=Zi(P.coin,K=>Io(K,P),["Invalid network version"]);if(C==null)throw new Error("Failed to generate private key from xpriv");return C};function fl(P){const C=ln({coinString:P.coin,forWIF:!0,prefixIndex:0}),K=getCoinFromString(P.coin);return Et().fromPrivateKey(Y.from(P.privateKey,"hex"),{network:C}).toWIF(K.wifEncodeFunc)}const ul=(P,C)=>{const K=Jr(C.coin),de=ln({coinString:C.coin,forWIF:!0,prefixIndex:P}),Fe=Et().fromWIF(C.wifKey,de,K.bs58DecodeFunc);if(Fe.privateKey!=null)return{hex:Fe.privateKey.toString("hex"),compressed:Fe.compressed}},In=P=>{const C=Zi(P.coin,K=>ul(K,P),["Invalid network version"]);if(C==null)throw new Error("Failed to convert WIF key to private key");return C};function xh(P){const{hex:C,compressed:K}=P;return Et().fromPrivateKey(Y.from(C,"hex"),{compressed:K}).publicKey.toString("hex")}function cl(P,C){const de=Et().fromPrivateKey(Y.from(C,"hex"));if(de.privateKey==null)throw new Error("Address could not sign message");return Pe().sign(P,de.privateKey,de.compressed).toString("base64")}function ka(P){var C,K,de,ke,Fe,Me;const{log:Oe,outputSort:ze,memos:Be,memoIndex:We}=P;let Ve=4294967295;P.enableRbf&&(Ve-=2);let ut=He.ZX.SIGHASH_ALL;const st=Jr(P.coin);st.sighash!=null&&(ut=st.sighash);const bt=[],yt=[],Jt=[...[...P.utxos,...P.forceUseUtxo].filter(Ct=>!Ct.spent).reduce((Ct,jt)=>Ct.set(jt.id,jt),new Map).values()].sort((Ct,jt)=>Ct.blockHeight<=0&&jt.blockHeight>0?1:jt.blockHeight<=0&&Ct.blockHeight>0?-1:(0,ue.lt)(Ct.value,jt.value)?1:(0,ue.gt)(Ct.value,jt.value)?-1:0);for(const Ct of Jt){if(Ct.script==null)continue;const jt={hash:Y.from(Ct.txid,"hex").reverse(),index:Ct.vout,value:parseInt(Ct.value),script:Y.from(Ct.script,"hex"),scriptPubkey:Y.from(Ct.scriptPubkey,"hex"),scriptType:Ct.scriptType,sequence:Ve,sighashType:ut};switch(Ct.scriptType){case"p2pk":case"p2pkh":case"p2sh":case"replayprotection":case"replayprotectionp2sh":{jt.nonWitnessUtxo=jt.script;break}case"p2wpkh":case"p2wpkhp2sh":case"p2wsh":{jt.witnessUtxo={script:jt.script,value:parseInt(Ct.value)};break}default:throw new Error(`unknown script type ${Ct.scriptType}`)}Ct.redeemScript!=null&&(jt.redeemScript=Y.from(Ct.redeemScript,"hex"));let pt=!1;for(const Tt of P.forceUseUtxo)Tt.id===Ct.id&&(bt.push(jt),pt=!0);pt||yt.push(jt)}const Yt=[];for(const Ct of P.targets){if(Ct.value==null)continue;const jt=Ct.address==null?Ct.scriptPubkey:en({address:Ct.address,coin:st.name});jt!=null&&Yt.push({script:jt,value:Ct.value})}for(const Ct of Be){const jt=Ct.type==="text"?Y.from(Ct.value,"utf8"):Y.from(Ct.value,"hex"),pt=He.K$.compile([He.Ez.OP_RETURN,jt]).toString("hex");Yt.push({script:pt,value:0})}const lr=en({address:P.freshChangeAddress,coin:st.name}),Dt=(C=st.utxoPicker)!=null?C:W,gt=(P.forceUseUtxo.length>0?Dt.forceUseUtxo:(K=P.subtractFee)!=null&&K?Dt.subtractFee:Dt.accumulative)({utxos:yt,useUtxos:bt,targets:Yt,feeRate:P.feeRate,changeScript:lr});if(gt.outputs==null){const Ct=Cn(Yt),jt=Cn(gt.inputs),pt=gt.fee-(jt-Ct);throw new sl({tokenId:null,networkFee:gt.fee.toString(),networkFeeShortage:pt.toString()})}const xt=se(gt.inputs),_t=(()=>{switch(ze){case"bip69":return pe(gt.outputs);case"targets":return gt.outputs}})();if(We!=null){const Ct=_t.findIndex(jt=>jt.value===0);if(Ct!==-1){const jt=_t.splice(Ct,1);_t.splice(We,0,jt[0])}}const Ht=new He.iL;try{Ht.addInputs(xt),Ht.addOutputs(_t)}catch(Ct){throw Oe==null||Oe.error(`Failed makeTx: ${String(Ct)}`),Ct}return{inputs:xt,outputs:_t,changeUsed:gt.changeUsed,fee:gt.fee,psbtBase64:Ht.toBase64(),hex:(Me=(Fe=(ke=(de=Ht.data)==null?void 0:de.globalMap)==null?void 0:ke.unsignedTx)==null?void 0:Fe.toBuffer())==null?void 0:Me.toString("hex")}}async function ll(P){var C;const{maximumFeeRate:K}=P.feeInfo,de=K!=null?{maximumFeeRate:parseInt(K)}:{},ke=He.iL.fromBase64(P.psbtBase64,de),Fe=Jr(P.coin),Me=Et(),Oe=(Be,We,Ve)=>Me.fromPublicKey(Be).verify(We,Ve);for(let Be=0;Be<ke.inputCount;Be++){const We=(C=P.privateKeyEncodings[Be])!=null?C:P.privateKeyEncodings[P.privateKeyEncodings.length-1],{hex:Ve,compressed:ut}=We;ke.signInput(Be,Me.fromPrivateKey(Y.from(Ve,"hex"),{compressed:ut}),He.iL.DEFAULT_SIGHASHES,Fe.sighashFunction),ke.validateSignaturesOfInput(Be,Oe),ke.finalizeInput(Be)}const ze=ke.extractTransaction();return{id:ze.getId(Fe.txHashFunction),hex:ze.toHex()}}const ln=P=>{var C,K;const de=(C=P.sigType)!=null?C:"legacy",ke=(K=P.forWIF)!=null?K:!1,Fe=Jr(P.coinString);return tp(de,Fe.prefixes,Fe.segwit,ke,P.prefixIndex)},tp=(P,C,K,de,ke)=>{var Fe;let Me;const Oe=Ia(C,ke);switch(P){case"segwit":if(Oe.segwitXPub==null||Oe.segwitXPriv==null)throw new Error("segwit xpub prefix is undefined");Me={public:Oe.segwitXPub,private:Oe.segwitXPriv};break;case"wrappedSegwit":if(Oe.wrappedSegwitXPub==null||Oe.wrappedSegwitXPriv==null)throw new Error("wrapped segwit xpub prefix is undefined");Me={public:Oe.wrappedSegwitXPub,private:Oe.wrappedSegwitXPriv};break;case"legacy":case"airbitz":Me={public:Oe.legacyXPub,private:Oe.legacyXPriv};break;default:throw new Error("invalid bip43 purpose type")}const ze=(Fe=Oe.bech32)!=null?Fe:"";return de?{messagePrefix:Oe.messagePrefix,wif:Oe.wif,bip32:Me,bech32:ze,pubKeyHash:Oe.pubkeyHash,scriptHash:Oe.scriptHash}:{messagePrefix:Oe.messagePrefix,wif:128,bip32:Me,bech32:ze,pubKeyHash:Oe.pubkeyHash,scriptHash:Oe.scriptHash}},rp=P=>{switch(P){case"airbitz":return 32;case"legacy":return 44;case"wrappedSegwit":return 49;case"segwit":return 84;case"replayProtection":return 44}},Zi=(P,C,K=[])=>{const de=Jr(P).prefixes,ke=Object.values(de).reduce((Me,Oe)=>Math.max(Oe.length,Me),0);let Fe;for(let Me=0;Me<ke;Me++){try{Fe=C(Me)}catch(Oe){if(K.includes(Oe.message))continue;throw Oe}if(Fe!=null)break}return Fe},hl=P=>{var C;return(C=P.prefixes.cashaddr)!=null?C:[]},Df=(P,C,K,de)=>{if(de!=null)return de;const ke=Jr(K);try{return He.KT.p2pkh({address:P,network:C,bs58DecodeFunc:ke.bs58DecodeFunc,bs58EncodeFunc:ke.bs58EncodeFunc}),"p2pkh"}catch{}try{return He.KT.p2sh({address:P,network:C,bs58DecodeFunc:ke.bs58DecodeFunc,bs58EncodeFunc:ke.bs58EncodeFunc}),"p2sh"}catch{}try{return He.KT.p2wsh({address:P,network:C}),"p2wsh"}catch{}try{return He.KT.p2wpkh({address:P,network:C}),"p2wpkh"}catch{}try{return He.KT.p2tr({address:P,network:C}),"p2tr"}catch{}const Fe=hl(ke);if(Fe.length>0)try{return Ot(P,Fe).type===Qe.pubkeyhash?"p2pkh":"p2sh"}catch{}throw new Error(`Could not determine address type of ${P}`)},Ia=(P,C)=>{var K;return{messagePrefix:Ne(P.messagePrefix,C),wif:Ne(P.wif,C),legacyXPriv:Ne(P.legacyXPriv,C),legacyXPub:Ne(P.legacyXPub,C),wrappedSegwitXPriv:Ne(P.wrappedSegwitXPriv,C),wrappedSegwitXPub:Ne(P.wrappedSegwitXPub,C),segwitXPriv:Ne(P.segwitXPriv,C),segwitXPub:Ne(P.segwitXPub,C),pubkeyHash:Ne(P.pubkeyHash,C),scriptHash:Ne(P.scriptHash,C),bech32:Ne(P.bech32,C),cashaddr:je(((K=P.cashaddr)!=null?K:[])[C])}},Eh=P=>{const C=ln({coinString:P.coin,prefixIndex:0});let K;switch(P.scriptType){case"p2pkh":K=He.KT.p2pkh;break;case"p2sh":K=He.KT.p2sh;break;case"p2wpkh":K=He.KT.p2wpkh;break;case"p2tr":K=He.KT.p2tr;break;default:throw new Error("invalid address type in address to script pubkey")}let de;try{de=K({hash:Y.from(P.scriptHash,"hex"),network:C}).output}catch(ke){throw console.trace(ke),ke}if(de==null)throw new Error("failed converting scriptPubkey to address");return de.toString("hex")};var np=Object.defineProperty,Uf=Object.getOwnPropertySymbols,Mh=Object.prototype.hasOwnProperty,Sh=Object.prototype.propertyIsEnumerable,kh=(P,C,K)=>C in P?np(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,ip=(P,C)=>{for(var K in C||(C={}))Mh.call(C,K)&&kh(P,K,C[K]);if(Uf)for(var K of Uf(C))Sh.call(C,K)&&kh(P,K,C[K]);return P},op=(P,C)=>{var K={};for(var de in P)Mh.call(P,de)&&C.indexOf(de)<0&&(K[de]=P[de]);if(P!=null&&Uf)for(var de of Uf(P))C.indexOf(de)<0&&Sh.call(P,de)&&(K[de]=P[de]);return K};const Hf=P=>{const C=P,{scriptPubkey:K,used:de=!1}=C,ke=op(C,["scriptPubkey","used"]);return ip({scriptPubkey:K,used:de,lastQueriedBlockHeight:0,lastQuery:0,lastTouched:0},ke)},ap=E({id:p,txid:p,vout:m,value:p,scriptPubkey:p,script:p,redeemScript:b(p),scriptType:Ut,blockHeight:m,spent:S});var sp=Object.defineProperty,fp=Object.defineProperties,up=Object.getOwnPropertyDescriptors,Ih=Object.getOwnPropertySymbols,cp=Object.prototype.hasOwnProperty,lp=Object.prototype.propertyIsEnumerable,_h=(P,C,K)=>C in P?sp(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,hp=(P,C)=>{for(var K in C||(C={}))cp.call(C,K)&&_h(P,K,C[K]);if(Ih)for(var K of Ih(C))lp.call(C,K)&&_h(P,K,C[K]);return P},dp=(P,C)=>fp(P,up(C));const pp=T("bip32","bip44","bip49","bip84"),vp=E({utxos:b(M(ap)),subtractFee:b(S),CPFP:b(p)}),gp=E({lowFee:p,standardFeeLow:p,standardFeeHigh:p,highFee:p}),Ah=P=>E(dp(hp({},gp.shape),{lowFeeFudgeFactor:x(p,P==null?void 0:P.lowFeeFudgeFactor),standardFeeLowFudgeFactor:x(p,P==null?void 0:P.standardFeeLowFudgeFactor),standardFeeHighFudgeFactor:x(p,P==null?void 0:P.standardFeeHighFudgeFactor),highFeeFudgeFactor:x(p,P==null?void 0:P.highFeeFudgeFactor),standardFeeLowAmount:p,standardFeeHighAmount:p,maximumFeeRate:b(p,P==null?void 0:P.maximumFeeRate)})).withRest,mp=E({balance:p,addressBalances:E(p),lastSeenBlockHeight:m}),Th=E({blockbookServers:E(S)}),yp=E({nowNodesApiKey:b(p)}),dl=E({blockbookServers:x(M(p),[]),enableCustomServers:x(S,!1)}),bp=E({publicAddress:p}),wp=T("bip69","targets"),xp=E({enableRbf:b(S),forceChangeAddress:b(p),memoIndex:b(m),outputSort:b(wp,"bip69"),txOptions:b(vp),utxoSourceAddress:b(p)});var pl=gr(9939),Nt=gr(8405);const Xm=Nt.WK,Ep=Nt.DE,Mp=Nt.k5,Zm=Nt.Dr,Ym=Nt.ef,$m=Nt.GY,Jm=Nt.WM,Qm=Nt.Kz,e1=Nt.uX,t1=Nt.IK,r1=Nt.gw,n1=Nt.WU,i1=Nt.G8,o1=Nt.xQ,a1=Nt.D7,s1=Nt.hi,f1=Nt.mJ,u1=Nt.zU,c1=Nt.dq,l1=Nt.m$,h1=Nt.MU,d1=Nt.ID,p1=Nt.k0,v1=Nt.D4,g1=Nt.kL,m1=Nt.jx,y1=Nt.A_,b1=Nt.v1,w1=Nt.TL,x1=Nt.Og,E1=Nt.mq,M1=Nt.ft,S1=Nt.KU,k1=Nt.ZU,I1=Nt.sF,_1=Nt.ye,A1=Nt.Xj,T1=Nt.Rn,P1=Nt.bo,O1=Nt.KL,B1=Nt.rW,C1=Nt.U3,R1=Nt.$Y,F1=Nt.EJ,N1=Nt.XY,L1=Nt.v7,D1=Nt.up,U1=Nt.h,H1=Nt.Cx,z1=Nt.Zz,j1=Nt.CU,K1=Nt.ib,W1=Nt.eT,G1=Nt._0,V1=Nt.UR,q1=Nt.Up,X1=Nt.y0,Z1=Nt.A2,Y1=Nt.ql,$1=Nt.FX,J1=Nt.Jr,Q1=Nt.zS,ey=Nt.pK,ty=Nt.ud,ry=Nt.Zk,ny=Nt.Mf,iy=Nt.U0,oy=Nt.CX,ay=Nt.l4,sy=Nt.gU,fy=Nt.M3,uy=Nt.Xv,cy=Nt.vN,ly=Nt.g_,hy=Nt.BN,dy=Nt.Jv,py=Nt.T0,vy=Nt.z8,gy=Nt.Gt,my=Nt.Fm,yy=Nt.b4,by=Nt.N2,wy=Nt.K8,xy=Nt.gB,Ey=Nt.bd,My=Nt.z2,Sy=Nt.GG,ky=Nt.V$,Iy=Nt.CC,_y=Nt.dT,Ay=Nt.uT,Ty=Nt._j,Py=Nt.p4,Oy=Nt.W0,By=Nt.zk,Cy=Nt.AB,Ry=Nt.sn,Fy=Nt._u,Ny=Nt.Py,Ly=Nt.iu,Dy=Nt.l7,Uy=Nt.JU,Hy=Nt.O6,vl=P=>P.filter(C=>C!==void 0),Sp=P=>{const C={};for(const K in P)P[K]!==void 0&&(C[K]=P[K]);return C},_a=(P=Date.now())=>Math.round(P/1e3),kp="https://info1.edge.app",gl="fees.json",zy=999999999,zf=2,jy=200,Ky=6,Wy=2,Gy=1,Ip=(P,C,K,de)=>{const{highFeeFudgeFactor:ke="1",lowFeeFudgeFactor:Fe="1",standardFeeHighAmount:Me,standardFeeHighFudgeFactor:Oe="1",standardFeeLowAmount:ze,standardFeeLowFudgeFactor:Be="1"}=C;let{highFee:We,lowFee:Ve,standardFeeHigh:ut,standardFeeLow:st}=C;switch(We=(0,ue.round)((0,ue.mul)(We,ke),0),Ve=(0,ue.round)((0,ue.mul)(Ve,Fe),0),ut=(0,ue.round)((0,ue.mul)(ut,Oe),0),st=(0,ue.round)((0,ue.mul)(st,Be),0),K){case"low":return Ve;case"standard":{if((0,ue.gte)(P,Me))return ut;if((0,ue.lte)(P,ze))return st;const bt=(0,ue.sub)(Me,ze),yt=(0,ue.sub)(ut,st),Bt=(0,ue.sub)(P,ze),Jt=(0,ue.mul)(Bt,yt),Yt=(0,ue.div)(Jt,bt);return(0,ue.add)(st,Yt)}case"high":return We;case"custom":if(de==null||de==="0")throw new Error(`Invalid custom network fee: ${de}`);return de;default:throw new Error(`Invalid networkFeeOption: ${K}`)}},_p=E({fastestFee:m,halfHourFee:m,hourFee:m}),Ap=1.3,Tp=2,Pp=P=>{let C;try{C=_p(P)}catch{return null}const{fastestFee:K,halfHourFee:de}=C,ke=de.toString(),Fe=K.toString(),Me=Math.round(K*Ap).toString(),Oe=Math.round(K*Tp).toString();return{lowFee:ue.max(ke,zf.toString()),standardFeeLow:ue.max(Fe,zf.toString()),standardFeeHigh:ue.max(Me,zf.toString()),highFee:ue.max(Oe,zf.toString())}};var Op=Object.defineProperty,Bp=Object.defineProperties,Cp=Object.getOwnPropertyDescriptors,jf=Object.getOwnPropertySymbols,Ph=Object.prototype.hasOwnProperty,Oh=Object.prototype.propertyIsEnumerable,Bh=(P,C,K)=>C in P?Op(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,ml=(P,C)=>{for(var K in C||(C={}))Ph.call(C,K)&&Bh(P,K,C[K]);if(jf)for(var K of jf(C))Oh.call(C,K)&&Bh(P,K,C[K]);return P},yl=(P,C)=>Bp(P,Cp(C)),Rp=(P,C)=>{var K={};for(var de in P)Ph.call(P,de)&&C.indexOf(de)<0&&(K[de]=P[de]);if(P!=null&&jf)for(var de of jf(P))C.indexOf(de)<0&&Oh.call(P,de)&&(K[de]=P[de]);return K};const Fp=async P=>{const C=P,{disklet:K,pluginInfo:de}=C,ke=Rp(C,["disklet","pluginInfo"]),{currencyInfo:Fe,engineInfo:Me}=de,Oe=t(K),ze=await Np(Oe,Me.defaultFeeInfo);let Be=0,We;const Ve=async()=>{if(Date.now()-Be<=Me.feeUpdateInterval)return;const ut=await Up(yl(ml({},ke),{mempoolSpaceFeeInfoServer:Me.mempoolSpaceFeeInfoServer})),st=Sp(ut!=null?ut:{});Object.assign(ze,st),Be=Date.now(),await Lp(Oe,ze)};return{async start(){const ut=await Ch(yl(ml({},ke),{uri:`${kp}/v1/networkFees/${Fe.pluginId}`,cleaner:x(Ah(ze),null)}));Object.assign(ze,ut),await Ve(),We=setInterval(Ve,Me.feeUpdateInterval)},stop(){clearInterval(We)},async clearCache(){await Oe.delete(gl)},async getRate(ut){var st,bt,yt;const{spendTargets:Bt,networkFeeOption:Jt="standard",customNetworkFee:Yt={},otherParams:lr={}}=ut,Dt=(bt=(st=lr.paymentProtocolInfo)==null?void 0:st.merchant)==null?void 0:bt.requiredFeeRate;if(Dt!=null){const xt=ue.add(ue.mul(`${Dt}`,"1.5"),"1");return ue.toFixed(xt,0,0)}const Gt=((yt=Fe.customFeeTemplate)!=null?yt:[])[0];if(Gt==null)throw new Error("No custom fee template");return Ip(Dp(Bt),ze,Jt,Yt[Gt.key])},get feeInfo(){return ze}}},Np=async(P,C)=>{const K=await P.getJson(gl).catch(()=>{});return x(Ah(C),C)(K)},Lp=async(P,C)=>await P.setJson(gl,C),Dp=P=>P.reduce((C,{nativeAmount:K})=>{if(K==null)throw new Error(`Invalid spend target amount: ${K}`);return ue.add(C,K)},"0"),Ch=async P=>{const{uri:C,cleaner:K,io:de,log:ke}=P;try{const Fe=await de.fetch(C);if(!Fe.ok)throw new Error(`Error fetching fees from ${C}`);const Me=await Fe.json();return K(Me)}catch(Fe){return ke(Fe.message),null}},Up=async P=>{if(P.mempoolSpaceFeeInfoServer!=null){const C=await Ch(yl(ml({},P),{uri:P.mempoolSpaceFeeInfoServer,cleaner:Pp}));if(C!=null)return C}return{}};var Rh=gr(7007);class Fh extends Rh.EventEmitter{}var Ur=(P=>(P.SEEN_TX_CHECKPOINT="seen:tx:checkpoint",P.TRANSACTIONS="transactions",P.TRANSACTIONS_CHANGED="transactions:changed",P.WALLET_BALANCE_CHANGED="wallet:balance:changed",P.ADDRESS_BALANCE_CHANGED="address:balance:changed",P.BLOCK_HEIGHT_CHANGED="block:height:changed",P.NEW_ADDRESS_TRANSACTION="address:transaction:changed",P.ADDRESSES_CHECKED="addresses:checked",P.TXIDS_CHANGED="txids:changed",P.CONNECTION_OPEN="connection:open",P.CONNECTION_CLOSE="connection:close",P.CONNECTION_TIMER="connection:timer",P))(Ur||{});const Hp=P=>{const C=new Fh;return C.on("addresses:checked",P.onAddressesChecked),C.on("block:height:changed",(K,de)=>{P.onBlockHeightChanged(de)}),C.on("seen:tx:checkpoint",P.onSeenTxCheckpoint),C.on("transactions",P.onTransactions),C.on("transactions:changed",P.onTransactionsChanged),C.on("txids:changed",P.onTxidsChanged),C.on("wallet:balance:changed",P.onBalanceChanged),C};class Nh{constructor(){this._acquired=!1,this._waitingResolvers=[]}get acquired(){return this._acquired}async acquireAsync(){return this._acquired?await new Promise(C=>{this._waitingResolvers.push(C)}):(this._acquired=!0,await Promise.resolve())}tryAcquire(){return this._acquired?!1:(this._acquired=!0,!0)}release(){if(!this._acquired)throw new Error("Cannot release an unacquired lock");if(this._waitingResolvers.length>0){const C=this._waitingResolvers.shift();if(C==null)throw new Error("Cannot release null lock");C()}else this._acquired=!1}}const zp=P=>{for(const C of So)if(C.coinInfo.name===P)return C.engineInfo.formats;return[]},Zr=(P,C)=>{delete P[C]},Kf="metadata.json",Lh=async P=>{const{disklet:C,emitter:K,log:de}=P,ke=t(C),Fe=new Nh,Me={get state(){return Ve},clear:async()=>{await ke.delete(Kf);const ut=await Be();Object.assign(Ve,ut)}},Oe=async ut=>{const st=Object.values(Ve.addressBalances).reduce((bt,yt)=>(0,ue.add)(bt,yt),"0");Ve.balance=st,await We(Ve),K.emit(Ur.WALLET_BALANCE_CHANGED,ut,st)};K.on(Ur.ADDRESS_BALANCE_CHANGED,async(ut,st)=>{await Fe.acquireAsync();try{st.forEach(({scriptPubkey:bt,balance:yt})=>{yt==="0"?Zr(Ve.addressBalances,bt):Ve.addressBalances[bt]=yt}),await Oe(ut)}catch(bt){de.error(bt)}finally{Fe.release()}}),K.on(Ur.BLOCK_HEIGHT_CHANGED,async(ut,st)=>{st>Ve.lastSeenBlockHeight&&(Ve.lastSeenBlockHeight=st,await We(Ve))});const ze=async()=>{try{const ut=await ke.getJson(Kf);return mp(ut)}catch(ut){return de.error(ut),await Be()}},Be=async()=>{const ut={balance:"0",addressBalances:{},lastSeenBlockHeight:0};return await ke.setJson(Kf,ut),ut},We=async ut=>{await ke.setJson(Kf,ut)},Ve=await ze();return Me};var Dh=gr(5828);const jp=k(P=>Dh.xn.parse(p(P)),P=>Dh.xn.stringify(P).toLowerCase());function Kp(P){const C=p(P);if(!/^\d+$/.test(C))throw new Error("Expected an integer string");return C}function Wp(P,C){var K;const{memos:de=[]}=P,{displayName:ke,memoMaxLength:Fe,memoMaxValue:Me,memoOptions:Oe=[],multipleMemos:ze=!1,memoType:Be}=C,We=[...Oe];Be==="text"&&We.push({type:"text",maxLength:Fe}),Be==="number"&&We.push({type:"number",maxValue:Me}),Be==="hex"&&We.push({type:"hex",maxBytes:Fe==null?void 0:Fe/2});const{memoName:Ve="memo"}=(K=Oe[0])!=null?K:{};for(const ut of de){const st=We.filter(yt=>ut.type===yt.type);if(st.length<1)throw new Error(`${ke} ${Ve}: cannot be type ${ut.type}`);const bt=st.map(yt=>Gp(ut,yt)).find(yt=>yt!=null);if(bt!=null)throw new Error(`${ke} {memoName}: ${bt}`)}if(!ze&&de.length>1)throw new Error(`${ke} only supports one ${Ve}`)}function Gp(P,C){if(C.type==="text"&&C.maxLength!=null&&P.value.length>C.maxLength)return`cannot be longer than ${C.maxLength}`;if(C.type==="number"){const K=x(Kp)(P.value);if(K==null)return"is not a valid number";if(C.maxValue!=null&&(0,ue.gt)(K,C.maxValue))return`cannot be greater than ${C.maxValue}`}if(C.type==="hex"){const K=x(jp)(P.value);if(K==null)return"is not valid hexadecimal";if(C.maxBytes!=null&&K.length>C.maxBytes)return`cannot be longer than ${C.maxBytes} bytes`;if(C.minBytes!=null&&K.length<C.minBytes)return`cannot be shorter than ${C.minBytes} bytes`}}var Vp=Object.defineProperty,qp=Object.defineProperties,Xp=Object.getOwnPropertyDescriptors,Uh=Object.getOwnPropertySymbols,Zp=Object.prototype.hasOwnProperty,Yp=Object.prototype.propertyIsEnumerable,Hh=(P,C,K)=>C in P?Vp(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,$p=(P,C)=>{for(var K in C||(C={}))Zp.call(C,K)&&Hh(P,K,C[K]);if(Uh)for(var K of Uh(C))Yp.call(C,K)&&Hh(P,K,C[K]);return P},Jp=(P,C)=>qp(P,Xp(C));function Qp(P,C){var K,de;const{memoType:ke}=C,Fe=[];if(ke==="hex"||ke==="number"||ke==="text")for(const Oe of P.spendTargets)Oe.memo!=null?Fe.push({type:ke,value:Oe.memo}):Oe.uniqueIdentifier!=null?Fe.push({type:ke,value:Oe.uniqueIdentifier}):typeof((K=Oe.otherParams)==null?void 0:K.uniqueIdentifier)=="string"&&Fe.push({type:ke,value:Oe.otherParams.uniqueIdentifier});const Me=Jp($p({},P),{memos:(de=P.memos)!=null?de:Fe});return Wp(Me,C),Me}var Ln;(function(P){P.CountBase="COUNT_BASE",P.HashBase="HASH_BASE",P.RangeBase="RANGE_BASE"})(Ln||(Ln={}));function zh(P,C,K,de,ke,Fe,Me){try{var Oe=P[Fe](Me),ze=Oe.value}catch(Be){K(Be);return}Oe.done?C(ze):Promise.resolve(ze).then(de,ke)}function xr(P){return function(){var C=this,K=arguments;return new Promise(function(de,ke){var Fe=P.apply(C,K);function Me(ze){zh(Fe,de,ke,Me,Oe,"next",ze)}function Oe(ze){zh(Fe,de,ke,Me,Oe,"throw",ze)}Me(void 0)})}}function Wf(){return Wf=Object.assign||function(P){for(var C=1;C<arguments.length;C++){var K=arguments[C];for(var de in K)Object.prototype.hasOwnProperty.call(K,de)&&(P[de]=K[de])}return P},Wf.apply(this,arguments)}function ev(P){return Object.prototype.hasOwnProperty.call(P,"getJson")||Object.prototype.hasOwnProperty.call(P,"setJson")}function ui(P){return ev(P)?P:t(P)}function Gf(P,C){return P+"/"+Ml(C)}function _o(P,C,K){return Gf(P,C)+"/"+K+".json"}function bl(P){return P+"/config.json"}function wl(P,C){return xl.apply(this,arguments)}function xl(){return xl=xr(function*(P,C){return yield P.getJson(bl(C))}),xl.apply(this,arguments)}function xi(P,C,K){return El.apply(this,arguments)}function El(){return El=xr(function*(P,C,K){yield P.setJson(bl(C),K)}),El.apply(this,arguments)}function Ml(P){P===void 0&&(P="");var C=/^[a-z0-9_]*$/i,K=P.trim();if(!C.test(K))throw new Error("partitions may only contain alphanumeric and underscore characters");return K}function Sl(P){if(P==="")throw new Error("database name cannot be empty");var C=/^[a-z0-9_]*$/i,K=P.trim();if(!C.test(K))throw new Error("database name may only contain alphanumeric and underscore characters");return K}function kl(P,C){return Il.apply(this,arguments)}function Il(){return Il=xr(function*(P,C){return yield P.list("./").then(function(K){return K[C]==="folder"})}),Il.apply(this,arguments)}function _l(P){return Number.isInteger(P)&&P>=1}function Al(P,C){return Tl.apply(this,arguments)}function Tl(){return Tl=xr(function*(P,C){var K=ui(P),de=yield wl(K,C);if(de.type!==Ln.CountBase)throw new Error("Tried to open CountBase, but type is "+String(de.type));var ke={databaseName:C,insert:function(Me,Oe,ze){return xr(function*(){var Be=Ml(Me),We=!1,Ve=de.partitions[Be];Ve===void 0&&(Ve={length:0},We=!0);var ut=Ve.length;if(Number.isNaN(Oe)||Oe<0)throw new Error("index must be a Number greater than 0");if(Oe>ut)throw new Error("index is larger than next index in partition");Oe===ut&&(++Ve.length,We=!0);var st=Math.floor(Oe/de.bucketSize),bt=_o(C,Me,st),yt=yield K.getJson(bt).catch(function(){return[]}),Bt=Oe%de.bucketSize;yt[Bt]=ze,yield K.setJson(bt,yt),We&&(de.partitions[Be]=Ve),yield xi(K,C,de)})()},query:function(Me,Oe,ze){return xr(function*(){Oe===void 0&&(Oe=0),ze===void 0&&(ze=Oe);for(var Be=[],We=Math.floor(Oe/de.bucketSize);We<=Math.floor(ze/de.bucketSize);We++){var Ve=_o(C,Me,We);Be.push(K.getJson(Ve).catch(function(){return[]}))}for(var ut=yield Promise.all(Be),st=[],bt=Oe;bt<=ze;bt++){var yt=Math.floor(bt/de.bucketSize),Bt=bt%de.bucketSize,Jt=yt-Math.floor(Oe/de.bucketSize);st.push(ut[Jt][Bt])}return st})()},length:function(Me){var Oe,ze=Ml(Me),Be=de.partitions[ze];return(Oe=Be==null?void 0:Be.length)!=null?Oe:0},dumpData:function(){return xr(function*(){for(var Me={},Oe=0,ze=Object.keys(de.partitions);Oe<ze.length;Oe++){var Be=ze[Oe];Me[Be]=yield ke.query(Be,0,ke.length(Be)-1)}return{config:de,data:Me}})()}};return ke}),Tl.apply(this,arguments)}function tv(P,C){return Pl.apply(this,arguments)}function Pl(){return Pl=xr(function*(P,C){var K=ui(P),de=C.name,ke=C.bucketSize;if(!_l(ke))throw new Error("bucketSize must be a number greater than 0");var Fe=Sl(de),Me=yield kl(K,Fe);if(Me)throw new Error("database "+Fe+" already exists");var Oe={type:Ln.CountBase,bucketSize:Math.floor(ke),partitions:{}};return yield xi(K,Fe,Oe),yield Al(K,Fe)}),Pl.apply(this,arguments)}function rv(P,C){return Ol.apply(this,arguments)}function Ol(){return Ol=xr(function*(P,C){var K=ui(P);try{return yield tv(K,C)}catch(de){if(de instanceof Error&&!de.message.includes("already exists"))throw de;return yield Al(K,C.name)}}),Ol.apply(this,arguments)}function Bl(P,C){return Cl.apply(this,arguments)}function Cl(){return Cl=xr(function*(P,C){var K=ui(P),de=yield wl(K,C);if(de.type!==Ln.HashBase)throw new Error("Tried to open HashBase, but type is "+String(de.type));function ke(Oe,ze,Be){return Fe.apply(this,arguments)}function Fe(){return Fe=xr(function*(Oe,ze,Be){if(Be===void 0&&(Be=!1),ze.length===0)return[];for(var We=de.prefixSize,Ve=[],ut={},st=function(Ht){var Ct=ze[Ht];if(Ct.length<We)return"continue";var jt=Ct.substring(0,We);if(ut[jt]===void 0){var pt=_o(C,Oe,jt),Tt=K.getJson(pt).then(function(Zt){return ut[jt].bucketData=Zt},function(){});ut[jt]={bucketFetcher:Tt,bucketPath:pt,bucketData:{}},Ve.push(Tt)}},bt=0;bt<ze.length;bt++)var yt=st(bt);yield Promise.all(Ve);for(var Bt=[],Jt=new Set,Yt=0;Yt<ze.length;Yt++){var lr=ze[Yt].substring(0,We);Jt.add(lr);var Dt=ut[lr].bucketData,Gt=Dt[ze[Yt]];Be&&delete Dt[ze[Yt]],Bt.push(Gt)}var gt=Promise.resolve();if(Be){var xt=Array.from(Jt).map(function(){var _t=xr(function*(Ht){var Ct=ut[Ht],jt=Ct.bucketPath,pt=Ct.bucketData;return yield K.setJson(jt,pt)});return function(Ht){return _t.apply(this,arguments)}}());gt=Promise.all(xt)}return yield gt,Bt}),Fe.apply(this,arguments)}var Me={databaseName:C,insert:function(ze,Be,We){return xr(function*(){var Ve=de.prefixSize;if(Be.length<Ve)throw new Error("hash must be a string of length at least "+Ve);var ut=Be.substring(0,Ve),st=_o(C,ze,ut),bt=function(){var yt=xr(function*(Bt){var Jt;return Bt===void 0&&(Bt={}),yield K.setJson(st,Wf(Bt,(Jt={},Jt[Be]=We,Jt)))});return function(Jt){return yt.apply(this,arguments)}}();yield K.getJson(st).then(function(){var yt=xr(function*(Bt){return yield bt(Bt)});return function(Bt){return yt.apply(this,arguments)}}(),xr(function*(){return yield bt()}))})()},query:function(ze,Be){return xr(function*(){return yield ke(ze,Be)})()},delete:function(){var Oe=xr(function*(Be,We){return yield ke(Be,We,!0)});function ze(Be,We){return Oe.apply(this,arguments)}return ze}(),dumpData:function(ze){return xr(function*(){ze===void 0&&(ze="");var Be={},We=function(){var ut=xr(function*(st,bt){bt===void 0&&(bt="");var yt=yield st.list(),Bt=Object.keys(yt).map(function(){var Jt=xr(function*(Yt){if(!bl(C).includes(Yt)){var lr=yt[Yt];if(lr==="folder"){if(bt!=="")throw new Error("Unexpected partition hierarchy");return yield We(r(st,Yt),Yt)}if(lr==="file"){var Dt=yield st.getJson(Yt);Be[bt]=Wf({},Be[bt],Dt);return}throw new Error("Unknown listing type "+String(lr))}});return function(Yt){return Jt.apply(this,arguments)}}());yield Promise.all(Bt)});return function(bt,yt){return ut.apply(this,arguments)}}(),Ve=r(K,Gf(C,ze));return yield We(Ve,ze),{config:de,data:Be}})()}};return Me}),Cl.apply(this,arguments)}function nv(P,C){return Rl.apply(this,arguments)}function Rl(){return Rl=xr(function*(P,C){var K=ui(P),de=C.prefixSize,ke=Sl(C.name);if(!_l(de))throw new Error("prefixSize must be a number greater than 0");var Fe=yield kl(K,ke);if(Fe)throw new Error("database "+ke+" already exists");var Me={type:Ln.HashBase,prefixSize:de};return yield xi(K,ke,Me),yield Bl(K,ke)}),Rl.apply(this,arguments)}function Aa(P,C){return Fl.apply(this,arguments)}function Fl(){return Fl=xr(function*(P,C){var K=ui(P);try{return yield nv(K,C)}catch(de){if(de instanceof Error&&!de.message.includes("already exists"))throw de;return yield Bl(K,C.name)}}),Fl.apply(this,arguments)}function Nl(P,C){return Ll.apply(this,arguments)}function Ll(){return Ll=xr(function*(P,C){var K=ui(P);function de(Dt,Gt,gt,xt,_t,Ht){if(xt===void 0&&(xt=0),_t===void 0&&(_t=gt.length-1),Ht===void 0&&(Ht=!1),gt.length===0)return{found:!1,index:0};var Ct=xt,jt=_t,pt=0,Tt;if(!Number.isInteger(xt)||!Number.isInteger(_t)||xt<0||_t>gt.length-1||_t<xt)throw new Error("indices must be valid bucket index values and endIndex >= startIndex");for(;Ct<=jt;)if(pt=~~((Ct+jt)/2),Tt=gt[pt][Gt],Tt<Dt)Ct=pt+1;else if(Tt>Dt)jt=pt-1;else if(Ht){var Zt=pt===jt||gt[pt+1][Gt]!==Dt;if(Zt)return{found:!0,index:pt};Ct=pt+1}else{var Kt=pt===Ct||gt[pt-1][Gt]!==Dt;if(Kt)return{found:!0,index:pt};jt=pt-1}return{found:!1,index:Tt!=null&&Tt<Dt?pt+1:pt}}var ke=yield wl(K,C);if(ke.type!==Ln.RangeBase)throw new Error("Tried to open RangeBase, but type is "+String(ke.type));function Fe(Dt,Gt){return Me.apply(this,arguments)}function Me(){return Me=xr(function*(Dt,Gt){var gt=ke.rangeKey,xt=Gf(C,Dt),_t=yield K.list(xt),Ht;for(var Ct in _t)if(!/config\.json$/.test(Ct)){var jt=Ct.split("/"),pt=Number(jt[jt.length-1].split(".")[0]);Ht==null?Ht=pt:Gt?pt>Ht&&(Ht=pt):pt<Ht&&(Ht=pt)}if(Ht!=null){var Tt=yield yt(Dt,Ht),Zt=Gt?Tt.length-1:0;return Number(Tt[Zt][gt])}}),Me.apply(this,arguments)}function Oe(Dt,Gt,gt){return ze.apply(this,arguments)}function ze(){return ze=xr(function*(Dt,Gt,gt){var xt,_t=ke.rangeKey,Ht=ke.limits,Ct=Gt[_t],jt=(xt=Ht[Dt])!=null?xt:Ht[Dt]={};if(gt){var pt=Ct===jt.minRange,Tt=Ct===jt.maxRange;if(pt||Tt)return yield lr.query(Dt,Ct).then(function(qt){if(qt.length===0)return Fe(Dt,Tt).then(function(){var Vt=xr(function*(ir){return pt&&(jt.minRange=ir),Tt&&(jt.maxRange=ir),yield xi(K,C,ke)});return function(ir){return Vt.apply(this,arguments)}}())})}else{var Zt=jt.minRange,Kt=jt.maxRange;return(Zt==null||Ct<Zt)&&(jt.minRange=Ct),(Kt==null||Ct>Kt)&&(jt.maxRange=Ct),yield xi(K,C,ke)}}),ze.apply(this,arguments)}function Be(Dt,Gt,gt,xt){return We.apply(this,arguments)}function We(){return We=xr(function*(Dt,Gt,gt,xt){xt===void 0&&(xt=!1);var _t=ke.bucketSize,Ht=ke.rangeKey,Ct=ke.idKey,jt=Math.floor(Gt/_t),pt=yield yt(Dt,jt),Tt=de(Gt,Ht,pt);if(Tt.found){var Zt=de(Gt,Ht,pt,Tt.index,pt.length-1,!0),Kt=de(gt,Ct,pt,Tt.index,Zt.index);if(Kt.found)if(xt){var qt=pt.splice(Kt.index,1),Vt=qt[0];return yield Jt(Dt,jt,pt),yield Oe(Dt,Vt,!0),Vt}else return pt[Kt.index]}}),We.apply(this,arguments)}function Ve(Dt,Gt,gt){return ut.apply(this,arguments)}function ut(){return ut=xr(function*(Dt,Gt,gt){var xt=yield st(Dt),_t=[],Ht=gt;function Ct(pt){return jt.apply(this,arguments)}function jt(){return jt=xr(function*(pt){if(Gt===_t.length||pt===xt.length)return yield Promise.resolve();var Tt=yield yt(Dt,xt[pt]);if(Tt.length<=Ht)return Ht-=Tt.length,yield Ct(++pt);var Zt=Tt.length-Ht,Kt=Zt+_t.length-Gt,qt=Kt>0?Kt:0;return _t=[].concat(_t,Tt.slice(qt,Zt).reverse()),Ht=0,yield Ct(++pt)}),jt.apply(this,arguments)}return yield Ct(0),_t}),ut.apply(this,arguments)}function st(Dt){return bt.apply(this,arguments)}function bt(){return bt=xr(function*(Dt){var Gt=Gf(C,Dt),gt=yield K.list(Gt),xt={};for(var _t in gt)if(Object.hasOwnProperty.call(gt,_t)&>[_t]!=="folder"&&!/config\.json$/.test(_t)){var Ht=_t.split("/"),Ct=Number(Ht[Ht.length-1].split(".")[0]);xt[Ct]=!0}return Object.keys(xt).sort(function(jt,pt){return jt<pt?1:-1})}),bt.apply(this,arguments)}function yt(Dt,Gt){return Bt.apply(this,arguments)}function Bt(){return Bt=xr(function*(Dt,Gt){var gt=_o(C,Dt,Gt);return yield K.getJson(gt).catch(function(){return[]})}),Bt.apply(this,arguments)}function Jt(Dt,Gt,gt){return Yt.apply(this,arguments)}function Yt(){return Yt=xr(function*(Dt,Gt,gt){var xt=_o(C,Dt,Gt);return gt.length===0?yield K.delete(xt):yield K.setJson(xt,gt)}),Yt.apply(this,arguments)}var lr={rangeKey:ke.rangeKey,idKey:ke.idKey,databaseName:C,insert:function(Gt,gt){return xr(function*(){var xt,_t=ke.bucketSize,Ht=ke.rangeKey,Ct=ke.idKey;if(!(Object.prototype.hasOwnProperty.call(gt,Ht)&&Object.prototype.hasOwnProperty.call(gt,Ct)))throw new Error("data must have properties "+Ht+" and "+Ct);var jt=yield Be(Gt,gt[Ht],gt[Ct]);if(jt!=null)throw new Error("Cannot insert data because id already exists");var pt=Math.floor(gt[Ht]/_t);yield yt(Gt,pt).then(function(){var Zt=xr(function*(Kt){var qt=de(gt[Ht],Ht,Kt);if(!qt.found)Kt.splice(qt.index,0,gt);else{var Vt=de(gt[Ht],Ht,Kt,qt.index,Kt.length-1,!0),ir=de(gt[Ct],Ct,Kt,qt.index,Vt.index);Kt.splice(ir.index,0,gt)}return yield Jt(Gt,pt,Kt)});return function(Kt){return Zt.apply(this,arguments)}}(),xr(function*(){return yield Jt(Gt,pt,[gt])})),yield Oe(Gt,gt,!1);var Tt=(xt=ke.sizes[Gt])!=null?xt:0;ke.sizes[Gt]=Tt+1,yield xi(K,C,ke)})()},query:function(Gt,gt,xt){return xr(function*(){Gt===void 0&&(Gt="/"),xt===void 0&&(xt=gt);var _t=ke.bucketSize,Ht=ke.rangeKey,Ct=[];if(xt<gt)throw new Error("rangeStart must be larger than rangeEnd");for(var jt=Math.floor(gt/_t);jt<=Math.floor(xt/_t);jt++)Ct.push(yt(Gt,jt));var pt=yield Promise.all(Ct),Tt=[];if(pt.length===1){var Zt=de(gt,Ht,pt[0]),Kt=de(xt,Ht,pt[0],0,pt[0].length-1,!0);Tt=pt[0].slice(Zt.index,Kt.found?Kt.index+1:Kt.index)}else for(var qt=0;qt<pt.length;qt++)if(qt===0){var Vt=de(gt,Ht,pt[qt]);Tt=pt[qt].slice(Vt.index)}else if(qt===pt.length-1){var ir=de(xt,Ht,pt[qt],0,pt[qt].length-1,!0);Array.prototype.push.apply(Tt,pt[qt].slice(0,ir.found?ir.index+1:ir.index))}else Tt.push.apply(Tt,pt[qt]);return Tt})()},queryById:function(Gt,gt,xt){return xr(function*(){return yield Be(Gt,gt,xt)})()},queryByCount:function(Gt,gt,xt){return xr(function*(){return xt===void 0&&(xt=0),yield Ve(Gt,gt,xt)})()},delete:function(){var Dt=xr(function*(gt,xt,_t){return yield Be(gt,xt,_t,!0).then(function(){var Ht=xr(function*(Ct){var jt,pt=(jt=ke.sizes[gt])!=null?jt:0;return ke.sizes[gt]=pt-1,yield xi(K,C,ke).then(function(){return Ct})});return function(Ct){return Ht.apply(this,arguments)}}())});function Gt(gt,xt,_t){return Dt.apply(this,arguments)}return Gt}(),update:function(Gt,gt,xt){return xr(function*(){var _t=yield lr.delete(Gt,gt,xt[ke.idKey]);if(_t==null)throw new Error("Cannot update a non-existing element");yield lr.insert(Gt,xt)})()},min:function(Gt){var gt,xt;return(gt=(xt=ke.limits[Gt])==null?void 0:xt.minRange)!=null?gt:0},max:function(Gt){var gt,xt;return(gt=(xt=ke.limits[Gt])==null?void 0:xt.maxRange)!=null?gt:0},size:function(Gt){var gt;return(gt=ke.sizes[Gt])!=null?gt:0},dumpData:function(){return xr(function*(){for(var Gt={},gt=0,xt=Object.keys(ke.sizes);gt<xt.length;gt++){var _t,Ht=xt[gt],Ct=(_t=lr.min(Ht))!=null?_t:0;Gt[Ht]=yield lr.query(Ht,Ct,lr.max(Ht))}return{config:ke,data:Gt}})()}};return lr}),Ll.apply(this,arguments)}function iv(P,C){return Dl.apply(this,arguments)}function Dl(){return Dl=xr(function*(P,C){var K=ui(P),de=C.name,ke=C.bucketSize,Fe=C.rangeKey,Me=C.idKey,Oe=C.idPrefixLength,ze=Oe===void 0?1:Oe;if(!_l(ke))throw new Error("bucketSize must be a number greater than 0");var Be=Sl(de),We=yield kl(K,Be);if(We)throw new Error("database "+Be+" already exists");var Ve={type:Ln.RangeBase,bucketSize:Math.floor(ke),rangeKey:Fe,idKey:Me,idPrefixLength:ze,limits:{},sizes:{}};return yield xi(K,Be,Ve),yield Nl(K,Be)}),Dl.apply(this,arguments)}function jh(P,C){return Ul.apply(this,arguments)}function Ul(){return Ul=xr(function*(P,C){var K=ui(P);try{return yield iv(K,C)}catch(de){if(de instanceof Error&&!de.message.includes("already exists"))throw de;return yield Nl(K,C.name)}}),Ul.apply(this,arguments)}function Vy(P,C){return Hl.apply(this,arguments)}function Hl(){return Hl=xr(function*(P,C){var K=yield P.getText(C+"/config.json").then(function(ke){return JSON.parse(ke)});switch(K.type){case Ln.CountBase:return yield Al(P,C);case Ln.HashBase:return yield Bl(P,C);case Ln.RangeBase:return yield Nl(P,C);default:{var de=K==null?void 0:K.type;throw new Error("Unknown base type: "+de)}}}),Hl.apply(this,arguments)}var ov=function(P,C,K,de){function ke(Fe){return Fe instanceof K?Fe:new K(function(Me){Me(Fe)})}return new(K||(K=Promise))(function(Fe,Me){function Oe(We){try{Be(de.next(We))}catch(Ve){Me(Ve)}}function ze(We){try{Be(de.throw(We))}catch(Ve){Me(Ve)}}function Be(We){We.done?Fe(We.value):ke(We.value).then(Oe,ze)}Be((de=de.apply(P,C||[])).next())})};class av{constructor(C){if(this._maxConcurrency=C,this._queue=[],C<=0)throw new Error("semaphore must be initialized to a positive value");this._value=C}acquire(){const C=this.isLocked(),K=new Promise(de=>this._queue.push(de));return C||this._dispatch(),K}runExclusive(C){return ov(this,void 0,void 0,function*(){const[K,de]=yield this.acquire();try{return yield C(K)}finally{de()}})}isLocked(){return this._value<=0}release(){if(this._maxConcurrency>1)throw new Error("this method is unavailabel on semaphores with concurrency > 1; use the scoped release returned by acquire instead");if(this._currentReleaser){const C=this._currentReleaser;this._currentReleaser=void 0,C()}}_dispatch(){const C=this._queue.shift();if(!C)return;let K=!1;this._currentReleaser=()=>{K||(K=!0,this._value++,this._dispatch())},C([this._value--,this._currentReleaser])}}var sv=function(P,C,K,de){function ke(Fe){return Fe instanceof K?Fe:new K(function(Me){Me(Fe)})}return new(K||(K=Promise))(function(Fe,Me){function Oe(We){try{Be(de.next(We))}catch(Ve){Me(Ve)}}function ze(We){try{Be(de.throw(We))}catch(Ve){Me(Ve)}}function Be(We){We.done?Fe(We.value):ke(We.value).then(Oe,ze)}Be((de=de.apply(P,C||[])).next())})};class zl{constructor(){this._semaphore=new av(1)}acquire(){return sv(this,void 0,void 0,function*(){const[,C]=yield this._semaphore.acquire();return C})}runExclusive(C){return this._semaphore.runExclusive(()=>C())}isLocked(){return this._semaphore.isLocked()}release(){this._semaphore.release()}}var Kh=function(P,C,K,de){function ke(Fe){return Fe instanceof K?Fe:new K(function(Me){Me(Fe)})}return new(K||(K=Promise))(function(Fe,Me){function Oe(We){try{Be(de.next(We))}catch(Ve){Me(Ve)}}function ze(We){try{Be(de.throw(We))}catch(Ve){Me(Ve)}}function Be(We){We.done?Fe(We.value):ke(We.value).then(Oe,ze)}Be((de=de.apply(P,C||[])).next())})};function qy(P,C,K=new Error("timeout")){return{acquire:()=>new Promise((de,ke)=>Kh(this,void 0,void 0,function*(){let Fe=!1;setTimeout(()=>{Fe=!0,ke(K)},C);const Me=yield P.acquire();Fe?(Array.isArray(Me)?Me[1]:Me)():de(Me)})),runExclusive(de){return Kh(this,void 0,void 0,function*(){let ke=()=>{};try{const Fe=yield this.acquire();return Array.isArray(Fe)?(ke=Fe[1],yield de(Fe[0])):(ke=Fe,yield de())}finally{ke()}})},release(){P.release()},isLocked:()=>P.isLocked()}}const ci=P=>`${P.format}_${P.changeIndex}`,fv={name:"scriptPubkeyByPath",bucketSize:50},uv={name:"addressByScriptPubkey",prefixSize:4},cv={name:"lastUsedByFormatPath",prefixSize:2},lv={name:"txIdByBlockHeight",bucketSize:1e5,rangeKey:"blockHeight",idKey:"txid"},hv={name:"txById",prefixSize:2},dv={name:"txIdsByDate",bucketSize:30*24*60*60,rangeKey:"date",idKey:"txid"},pv={name:"utxoById",prefixSize:2},vv={name:"utxoIdsByScriptPubkey",prefixSize:4};var gv=Object.defineProperty,Wh=Object.getOwnPropertySymbols,mv=Object.prototype.hasOwnProperty,yv=Object.prototype.propertyIsEnumerable,Gh=(P,C,K)=>C in P?gv(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,jl=(P,C)=>{for(var K in C||(C={}))mv.call(C,K)&&Gh(P,K,C[K]);if(Wh)for(var K of Wh(C))yv.call(C,K)&&Gh(P,K,C[K]);return P};const Vh=async P=>{const C={addressByScriptPubkey:await Aa(P.storage,uv),scriptPubkeyByPath:await rv(P.storage,fv),lastUsedByFormatPath:await Aa(P.storage,cv)},K={txById:await Aa(P.storage,hv),txIdsByBlockHeight:await jh(P.storage,lv),txIdsByDate:await jh(P.storage,dv)},de={utxoById:await Aa(P.storage,pv),utxoIdsByScriptPubkey:await Aa(P.storage,vv)},ke=new zl,Fe=new zl,Me=new zl;return{async address(Oe){return await ke.runExclusive(async()=>await Oe(C))},async tx(Oe){return await Fe.runExclusive(async()=>await Oe(K))},async utxo(Oe){return await Me.runExclusive(async()=>await Oe(de))},all:jl(jl(jl({},C),K),de)}},bv="tables";async function qh(P){const C=(0,pl.my)(P.disklet,bv);let K=t(C),de=await Vh({storage:K}).catch(async Me=>{throw await K.delete("."),Me});const ke=Me=>{let Oe="0",ze={};for(const Be of Me.inputs)ze[Be.n.toString()]=Be;for(const Be of Me.ourIns){const We=ze[Be];Oe=ue.sub(Oe,We.amount)}ze={};for(const Be of Me.outputs)ze[Be.n.toString()]=Be;for(const Be of Me.ourOuts){const We=ze[Be];Oe=ue.add(Oe,We.amount)}return Oe};return{async clearAll(){await K.onFlush.next().value,await y(),await C.delete("."),K=t(C),de=await Vh({storage:K})},async dumpData(){const Me=Object.values(de.all);return await Promise.all(Me.map(async Oe=>({databaseName:Oe.databaseName,data:await Oe.dumpData()})))},async saveUtxo(Me){return await de.utxo(async Oe=>{const[ze=[]]=await Oe.utxoIdsByScriptPubkey.query("",[Me.scriptPubkey]);ze.includes(Me.id)||(ze.push(Me.id),await Oe.utxoIdsByScriptPubkey.insert("",Me.scriptPubkey,ze)),await Oe.utxoById.insert("",Me.id,Me)})},async removeUtxos(Me){return await de.utxo(async Oe=>{var ze;if(Me.length===0)return;const Be=(await Oe.utxoById.query("",Me)).filter(Ve=>Ve!=null),We={};for(const Ve of Be)We[Ve.scriptPubkey]=[...(ze=We[Ve.scriptPubkey])!=null?ze:[],Ve.id];for(const Ve of Object.keys(We)){const ut=We[Ve],[st=[]]=await Oe.utxoIdsByScriptPubkey.query("",[Ve]);for(const bt of ut)st.splice(st.indexOf(bt),1);st.length>0?await Oe.utxoIdsByScriptPubkey.insert("",Ve,st):await Oe.utxoIdsByScriptPubkey.delete("",[Ve])}await Oe.utxoById.delete("",Me)})},async fetchUtxos(Me){const{scriptPubkey:Oe,utxoIds:ze=[]}=Me;return await de.utxo(async Be=>{var We;if(Oe!=null){const[Ve]=await Be.utxoIdsByScriptPubkey.query("",[Oe]);if(Ve!=null&&ze.push(...Ve),ze.length===0)return[]}if(ze.length===0){const{data:Ve}=await Be.utxoById.dumpData("");return Object.values((We=Ve[""])!=null?We:{})}return await Be.utxoById.query("",ze)})},async saveTransaction(Me){const{scriptPubkeys:Oe=[],tx:ze}=Me;return await de.tx(async Be=>{const We=await Be.txById.query("",[ze.txid]).then(ut=>ut[0]).catch(ut=>{}),Ve=We!=null?We:ze;for(const ut of Oe){for(const st of Ve.inputs)st.scriptPubkey===ut&&(Ve.ourIns.includes(st.n.toString())||Ve.ourIns.push(st.n.toString()));for(const st of Ve.outputs)st.scriptPubkey===ut&&(Ve.ourOuts.includes(st.n.toString())||Ve.ourOuts.push(st.n.toString()));Ve.ourAmount=ke(Ve)}return Ve.blockHeight!==ze.blockHeight?(await Be.txIdsByBlockHeight.delete("",Ve.blockHeight,Ve.txid),Ve.blockHeight=ze.blockHeight,await Be.txIdsByBlockHeight.insert("",{txid:Ve.txid,blockHeight:Ve.blockHeight})):(await(await Be.txIdsByBlockHeight.query("",Ve.blockHeight)).reverse().map(({txid:st})=>st)).includes(Ve.txid)||await Be.txIdsByBlockHeight.insert("",{txid:Ve.txid,blockHeight:Ve.blockHeight}),await Be.txById.insert("",Ve.txid,Ve),We==null&&await Be.txIdsByDate.insert("",{txid:ze.txid,date:ze.date}),Ve})},numTransactions(){return de.all.txIdsByDate.size("")},async removeTransaction(Me){},async fetchTransactions(Me){const{blockHeightMax:Oe,txId:ze,options:Be}=Me;let{blockHeight:We}=Me;const Ve=[];return await de.tx(async ut=>{if(ze!=null){const st=await ut.txById.query("",[ze]);Ve.push(...st)}if(Oe!=null&&We==null&&(We=0),We!=null){const st=await(await ut.txIdsByBlockHeight.query("",We,Oe)).reverse().map(({txid:yt})=>yt),bt=await ut.txById.query("",st);Ve.push(...bt)}if(Be!=null){const{startEntries:st,startIndex:bt,startDate:yt=new Date(0),endDate:Bt=new Date}=Be;let Jt;st!=null&&bt!=null?Jt=await ut.txIdsByDate.queryByCount("",st,bt):Jt=await ut.txIdsByDate.query("",_a(yt.getTime()),_a(Bt.getTime()));const Yt=await Jt.reverse().map(({txid:Dt})=>Dt),lr=await ut.txById.query("",Yt);Ve.push(...lr.filter(Dt=>Dt!=null))}}),Ve},async saveAddress(Me){await de.address(async Oe=>{let ze;const[Be]=await Oe.addressByScriptPubkey.query("",[Me.scriptPubkey]);if(Me.path!=null){const[We]=await Oe.scriptPubkeyByPath.query(ci(Me.path),Me.path.addressIndex);if(We!=null&&We!==Me.scriptPubkey)throw new Error("Attempted to save address with an existing path, but different script pubkey");if(ze={path:Me.path,scriptPubkey:Me.scriptPubkey},Me.used||(Be==null?void 0:Be.used)===!0){let[Ve]=await Oe.lastUsedByFormatPath.query("",[ci(Me.path)]);Ve==null&&(Ve=-1),Ve<Me.path.addressIndex&&await Oe.lastUsedByFormatPath.insert("",ci(Me.path),Me.path.addressIndex)}}if(Be!=null){if(Me.lastQueriedBlockHeight>Be.lastQueriedBlockHeight&&(Be.lastQueriedBlockHeight=Me.lastQueriedBlockHeight),Me.lastQuery>Be.lastQuery&&(Be.lastQuery=Me.lastQuery),Me.lastTouched>Be.lastTouched&&(Be.lastTouched=Me.lastTouched),Me.balance!=null&&(Be.balance=Me.balance),Me.path!=null&&Be.path==null&&(Be.path=Me.path,ze={path:Be.path,scriptPubkey:Be.scriptPubkey}),Me.used&&!Be.used&&(Be.used=!0),Be.path!=null&&Be.used){let[We]=await Oe.lastUsedByFormatPath.query("",[ci(Be.path)]);We==null&&(We=-1),We<Be.path.addressIndex&&await Oe.lastUsedByFormatPath.insert("",ci(Be.path),Be.path.addressIndex)}await Oe.addressByScriptPubkey.insert("",Be.scriptPubkey,Be)}Be==null&&await Oe.addressByScriptPubkey.insert("",Me.scriptPubkey,Me),ze!=null&&await Oe.scriptPubkeyByPath.insert(ci(ze.path),ze.path.addressIndex,ze.scriptPubkey)})},numAddressesByFormatPath(Me){return de.all.scriptPubkeyByPath.length(ci(Me))},async lastUsedIndexByFormatPath(Me){const[Oe]=await de.address(async ze=>await ze.lastUsedByFormatPath.query("",[ci(Me)]));return Oe!=null?Oe:-1},async fetchAddress(Me){return await de.address(async Oe=>{if(typeof Me=="string"){const Ve=Me,[ut]=await Oe.addressByScriptPubkey.query("",[Ve]);return ut}const ze=Me,[Be]=await Oe.scriptPubkeyByPath.query(ci(ze),ze.addressIndex);if(Be==null)return;const[We]=await Oe.addressByScriptPubkey.query("",[Be]);return We})}}}var Kl=gr(8287).Buffer;const wv=P=>{var C;const K=P.otherParams;if(K==null)throw new Error("Invalid transaction data");if(K.psbt==null)throw new Error("Missing PSBT in edge transaction data");const de=K.psbt.inputs.map((Fe,Me)=>({amount:Fe.value.toString(),scriptPubkey:Kl.from(Fe.scriptPubkey).toString("hex"),sequence:Fe.sequence,n:Me,txId:Kl.from(Fe.hash).reverse().toString("hex"),outputIndex:Fe.index})),ke=K.psbt.outputs.map((Fe,Me)=>({amount:Fe.value.toString(),scriptPubkey:Kl.from(Fe.scriptPubkey).toString("hex"),n:Me}));return{txid:P.txid,hex:P.signedTx,blockHeight:P.blockHeight,date:P.date,fees:P.networkFee,inputs:de,outputs:ke,ourIns:[],ourOuts:[],ourAmount:(C=P.nativeAmount)!=null?C:"0"}},Ta=async P=>{const{tx:C,dataLayer:K,walletTools:de,pluginInfo:ke,walletId:Fe}=P,{currencyInfo:Me}=ke,Oe=[];for(const Be of C.ourOuts){const{scriptPubkey:We}=C.outputs[parseInt(Be)],Ve=await K.fetchAddress(We);if((Ve==null?void 0:Ve.path)!=null){const{address:ut}=de.scriptPubkeyToAddress({changePath:Ve.path,scriptPubkey:We});Oe.push(ut)}}let ze;try{const We=He.ZX.fromHex(C.hex).virtualSize();ze={satPerVByte:new(ge())(C.fees,10).div(new(ge())(We,10)).toNumber()}}catch{}return{blockHeight:C.blockHeight,confirmations:C.confirmations,currencyCode:Me.currencyCode,date:C.date,feeRateUsed:ze,isSend:(0,ue.lt)(C.ourAmount,"0"),memos:[],nativeAmount:C.ourAmount,networkFee:C.fees,networkFees:[{tokenId:null,nativeAmount:C.fees}],ourReceiveAddresses:Oe,signedTx:C.hex,tokenId:null,txid:C.txid,walletId:Fe}};var xv=Object.defineProperty,Ev=Object.defineProperties,Mv=Object.getOwnPropertyDescriptors,Xh=Object.getOwnPropertySymbols,Sv=Object.prototype.hasOwnProperty,kv=Object.prototype.propertyIsEnumerable,Zh=(P,C,K)=>C in P?xv(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Iv=(P,C)=>{for(var K in C||(C={}))Sv.call(C,K)&&Zh(P,K,C[K]);if(Xh)for(var K of Xh(C))kv.call(C,K)&&Zh(P,K,C[K]);return P},_v=(P,C)=>Ev(P,Mv(C));const Av=T("bip32","bip44","bip49"),Tv=b(Av,"bip32");function Wl(P,C=0){return k(K=>{if(K==null||typeof K!="object")throw new TypeError("Private keys must be objects");return E({coinType:b(m,C),format:Tv,imported:b(S),seed:p})(_v(Iv({},K),{seed:K[`${P}Key`]}))},K=>{const{coinType:de,format:ke,imported:Fe,seed:Me}=K;return{coinType:de,format:ke,imported:Fe,[`${P}Key`]:Me}})}const Yh=E({publicKeys:E({bip32:b(p),bip44:b(p),bip49:b(p),bip84:b(p)})}),Vf=(P,C)=>{const K=(()=>{switch(C){case"bip32":return["bip32"];case"bip44":return["bip44"];case"bip49":return["bip49","bip84"]}})(),de=P.formats;return K.filter(ke=>de.includes(ke))},$h=P=>{const C=[];for(const[K,de]of Object.entries(P.publicKeys))de!=null&&C.push(K);return C.includes("bip49")?"bip49":C.includes("bip44")?"bip44":(C.includes("bip32"),"bip32")},Jh=P=>C=>{const{coinInfo:K,engineInfo:de}=P,{id:ke,type:Fe}=C,Me=Wl(K.name,K.coinType),Oe=x(Yh)(C.keys);if(Oe!=null){const Be=Object.entries(Oe.publicKeys).filter(([,Ve])=>Ve!=null).map(([Ve])=>x(pp)(Ve)).filter(Ve=>Ve!=null);if(Be.length===0)throw new Error("Missing wallet public keys");const We=$h(Oe);return{id:ke,type:Fe,keys:{privateKeyFormat:We,walletFormats:Be,publicKey:Oe}}}const ze=x(Me)(C.keys);if(ze!=null){const Be=Fv({engineInfo:de,privateKey:ze,coin:K.name}),We=Vf(de,ze.format);return{id:ke,type:Fe,keys:{privateKeyFormat:ze.format,walletFormats:We,publicKey:{publicKeys:Be}}}}throw new Error("Either a public or private key are required")};var Pv=Object.defineProperty,Ov=Object.defineProperties,Bv=Object.getOwnPropertyDescriptors,Qh=Object.getOwnPropertySymbols,Cv=Object.prototype.hasOwnProperty,Rv=Object.prototype.propertyIsEnumerable,ed=(P,C,K)=>C in P?Pv(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,qf=(P,C)=>{for(var K in C||(C={}))Cv.call(C,K)&&ed(P,K,C[K]);if(Qh)for(var K of Qh(C))Rv.call(C,K)&&ed(P,K,C[K]);return P},Gl=(P,C)=>Ov(P,Bv(C));const Vl=P=>{switch(P){case at.Airbitz:return"bip32";case at.Legacy:return"bip44";case at.WrappedSegwit:return"bip49";case at.Segwit:return"bip84";case at.ReplayProtection:return"bip44"}},ql=P=>{switch(P){case at.Airbitz:case at.Legacy:return kt.p2pkh;case at.WrappedSegwit:return kt.p2sh;case at.Segwit:return kt.p2wpkh;case at.ReplayProtection:return kt.p2sh}},Xf=P=>{switch(P){case at.Airbitz:case at.Legacy:return St.p2pkh;case at.WrappedSegwit:return St.p2wpkhp2sh;case at.Segwit:return St.p2wpkh;case at.ReplayProtection:return St.replayProtection}},td=P=>en(qf({},P)),rd=(P,C)=>{const K=[0];return Ei(C)!==at.Airbitz&&K.push(1),P.scriptTemplates!=null&&P.scriptTemplates.replayProtection!=null&&K.push(Vr(P.scriptTemplates.replayProtection)),K},Yi=(P,C)=>C!=null&&C.replayProtection!=null&&sn(C.replayProtection,P)?at.ReplayProtection:Ei(P.format),Ei=P=>yr(parseInt(P.replace("bip",""))),nd=async P=>{const C="walletKeys.json";let K;try{const de=await P.walletLocalEncryptedDisklet.getText(C);K=JSON.parse(de)}catch{K=id(P),await P.walletLocalEncryptedDisklet.setText(C,JSON.stringify(K))}return K},id=P=>{const C={},K={seed:P.privateKey.seed,coinType:P.privateKey.coinType,coin:P.coin},de=Ei(P.privateKey.format);return de===at.Segwit||de===at.WrappedSegwit?(C[Vl(at.Segwit)]=vr(Gl(qf({},K),{type:at.Segwit})),C[Vl(at.WrappedSegwit)]=vr(Gl(qf({},K),{type:at.WrappedSegwit}))):C[Vl(de)]=vr(Gl(qf({},K),{type:de})),C},Fv=P=>{const{engineInfo:C,privateKey:K,coin:de}=P,ke={};for(const Fe of Vf(C,K.format)){const Me=id({coin:de,privateKey:K})[Fe];if(Me==null)throw new Error("Cannot derive xpub: no private key exists");ke[Fe]=Sr({coin:de,type:Ei(Fe),xpriv:Me})}return ke},Nv=P=>{const C={};try{In({wifKey:P.pathname,coin:P.coin}),C.privateKeys=[P.pathname]}catch{const de=Mr({address:P.pathname,coin:P.coin});if(de===Qt.bad)throw new Error("InvalidPublicAddressError");C.publicAddress=fi(P.pathname,P.coin),de===Qt.legacy&&(C.legacyAddress=P.pathname)}return C},Lv=P=>P.reduce((C,{spent:K,value:de})=>K?C:ue.add(C,de),"0"),Dv=async(P,C,K)=>{const de=C.inputs[K],ke=await P.fetchAddress(de.scriptPubkey);if(ke==null)throw new Error(`Cannot find address for ${de.scriptPubkey}`);if(ke.path==null)throw new Error("Address has no derivation path information");const Fe=ke.redeemScript,Me=Ei(ke.path.format),Oe=async()=>{switch(Me){case at.Airbitz:case at.Legacy:return{script:C.hex,scriptType:Fe!=null?St.p2sh:St.p2pkh};case at.WrappedSegwit:return{script:de.scriptPubkey,scriptType:St.p2wpkhp2sh};case at.Segwit:return{script:de.scriptPubkey,scriptType:St.p2wpkh};default:throw new Error(`Unknown purpose type ${Me}`)}},{script:ze,scriptType:Be}=await Oe();return{id:`${de.txId}_${de.outputIndex}`,txid:de.txId,vout:de.outputIndex,value:de.amount,scriptPubkey:de.scriptPubkey,script:ze,redeemScript:Fe,scriptType:Be,blockHeight:C.blockHeight,spent:!0}};var Uv=gr(1160),Xl=gr.n(Uv);function Hv(P){let C=0;const K=[];for(const de of P)C+=de.amount,K.push({publicAddress:de.address,nativeAmount:`${de.amount}`});return{nativeAmount:C,spendTargets:K}}async function zv(P,C,K){const ke=await K(P,{headers:{Accept:"application/payment-request","x-currency":C}});if(ke.status!==200){const yt=await ke.text();throw new Error(yt)}const Fe=await ke.json(),{outputs:Me,memo:Oe,paymentUrl:ze,paymentId:Be,requiredFeeRate:We}=Fe,{nativeAmount:Ve,spendTargets:ut}=Hv(Me),st=Xl()(ze,{}).hostname;return{nativeAmount:`${Ve}`,merchant:`{ ${JSON.stringify(Be)}, ${JSON.stringify(We)} }`,memo:Oe,domain:st,spendTargets:ut}}function jv(P,C){return{currency:C,transactions:[P]}}async function Kv(P,C,K){const ke=await P(C,{method:"POST",headers:{"Content-Type":"application/payment"},body:JSON.stringify(K)});if(ke.status!==200){const Me=await ke.text();throw new Error(Me)}return await ke.json()}var Wv=Object.defineProperty,Gv=Object.defineProperties,Vv=Object.getOwnPropertyDescriptors,od=Object.getOwnPropertySymbols,qv=Object.prototype.hasOwnProperty,Xv=Object.prototype.propertyIsEnumerable,ad=(P,C,K)=>C in P?Wv(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Zv=(P,C)=>{for(var K in C||(C={}))qv.call(C,K)&&ad(P,K,C[K]);if(od)for(var K of od(C))Xv.call(C,K)&&ad(P,K,C[K]);return P},Yv=(P,C)=>Gv(P,Vv(C));const $v=async(P,C,K)=>{const de=[],ke=K.inputs.map(Me=>`${Me.txId}_${Me.outputIndex}`),Fe=await C.fetchUtxos({utxoIds:ke});for(const Me of Fe)Me!=null&&de.push(Yv(Zv({},Me),{spent:!0}));for(const Me of K.outputs){const Oe=Me.scriptPubkey,ze=await C.fetchAddress(Oe);if(ze!=null){const Be=`${K.txid}_${Me.n}`,We=ze.path;if(We!=null){const Ve=ze.redeemScript,ut=Yi(We,P.scriptTemplates),st=[at.Airbitz,at.Legacy,at.ReplayProtection].includes(ut),bt=Xf(ut),yt=st?K.hex:ze.scriptPubkey,Bt={id:Be,txid:K.txid,vout:Me.n,value:Me.amount,scriptPubkey:Oe,script:yt,redeemScript:Ve,scriptType:bt,blockHeight:K.blockHeight,spent:!1};de.push(Bt)}}}return de},Jv=100,Qv=.05,eg=2,sd=8;var fd=gr(6579),tg=Object.defineProperty,rg=Object.defineProperties,ng=Object.getOwnPropertyDescriptors,ud=Object.getOwnPropertySymbols,ig=Object.prototype.hasOwnProperty,og=Object.prototype.propertyIsEnumerable,cd=(P,C,K)=>C in P?tg(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,ld=(P,C)=>{for(var K in C||(C={}))ig.call(C,K)&&cd(P,K,C[K]);if(ud)for(var K of ud(C))og.call(C,K)&&cd(P,K,C[K]);return P},ag=(P,C)=>rg(P,ng(C));const sg=(P=p)=>E({txid:p,vout:m,value:p,confirmations:b(m),coinbase:b(S),height:b(m),lockTime:b(m),address:b(P),path:b(p)}),Zl=(P=p)=>E({txid:p,hex:p,blockHeight:m,confirmations:m,blockTime:m,fees:p,vin:M(E({addresses:b(M(p),()=>[]),isAddress:b(S),n:m,sequence:b(m,0),txid:b(p),value:b(p,"0"),vout:b(m,0),coinbase:b(p),isOwn:b(S),hex:b(p),asm:b(p)})),vout:M(E({n:m,value:p,addresses:M(P),hex:b(p)}))}),fg=E({error:E({message:p})}),Gn=P=>C=>{const K=x(fg)(C);if(K!=null)throw new Error(`Blockbook Error: ${K.error.message}`);return P(C)},ug=()=>({method:"ping",params:void 0,cleaner:Gn(cg)}),cg=E({}),lg=()=>({method:"getInfo",params:{},cleaner:Gn(hg)}),hg=E({name:p,shortcut:p,decimals:m,version:p,bestHeight:m,bestHash:p,block0Hash:p,testnet:S,backend:x(E({version:p,subversion:p}))}),hd=(P,C=p)=>({method:"getAccountUtxo",params:{descriptor:B(C)(P)},cleaner:Gn(dg(C))}),dg=(P=p)=>M(sg(P)),dd=(P,C=p)=>({method:"getTransaction",params:{txid:P},cleaner:Gn(pg(C))}),pg=Zl,vg=P=>({method:"getTransactionSpecific",params:{txid:P},cleaner:Gn(g)}),gg=P=>({method:"sendTransaction",params:{hex:P},cleaner:Gn(pd)}),pd=E({result:p}),vd=(P,C=p,K={})=>{const de=B(C);return{method:"getAccountInfo",params:ag(ld({},ld({details:"basic",page:1,pageSize:100},K)),{descriptor:de(P)}),cleaner:Gn(mg(C))}},mg=(P=p)=>E({address:P,balance:p,totalReceived:p,totalSent:p,txs:m,unconfirmedBalance:p,unconfirmedTxs:m,txids:b(M(p),[]),transactions:b(M(Zl(P)),[]),page:b(m,NaN),totalPages:b(m,NaN),itemsOnPage:b(m,NaN)}),yg=()=>({method:"subscribeNewBlock",params:{},cleaner:Gn(bg)}),bg=E({height:m,hash:p}),wg=(P,C=p)=>{const K=B(C);return{method:"subscribeAddresses",params:{addresses:P.map(K)},cleaner:Gn(xg(C))}},xg=(P=p)=>E({address:P,tx:Zl(P)});class Zf{constructor(){this._resolve=()=>{},this._reject=()=>{},this._promise=new Promise((C,K)=>{this._reject=K,this._resolve=C})}get promise(){return this._promise}resolve(C){this._resolve(C)}reject(C){this._reject(C)}}function gd(P){const C=P.match(/%\{(\w|\d)+\}/g);return C!=null?C:[]}function Eg(P,C){const K=gd(P);for(const de of K){const ke=de.replace(/%|{|}/g,""),Fe=C[ke];if(Fe==null)throw new Error(`Missing key for connection URI ${P}`);P=P.replace(de,Fe)}return P}var Mg=gr(7689),$i=gr.n(Mg),hn=(P=>(P[P.CONNECTING=0]="CONNECTING",P[P.OPEN=1]="OPEN",P[P.CLOSING=2]="CLOSING",P[P.CLOSED=3]="CLOSED",P))(hn||{});function Sg(P,C){const K=new($i())(P,{headers:{"User-Agent":"NodeJS-WS-agent"}});return K.on("open",()=>{C.onOpen()}),K.on("message",de=>{C.onMessage(de.toString())}),K.on("error",de=>{C.onError(de)}),K.on("close",(de,ke)=>{C.onClose(de,ke)}),{get readyState(){switch(K.readyState){case $i().CONNECTING:return hn.CONNECTING;case $i().OPEN:return hn.OPEN;case $i().CLOSING:return hn.CLOSING;case $i().CLOSED:default:return hn.CLOSED}},disconnect(){K==null||K.readyState===$i().CLOSING||K.readyState===$i().CLOSED||(K.removeAllListeners(),K.close())},send(de){K.send(de)}}}class kg extends Rh.EventEmitter{}var Ji=(P=>(P.CONNECTION_OPEN="connection:open",P.CONNECTION_CLOSE="connection:close",P.CONNECTION_TIMER="connection:timer",P))(Ji||{});const md=3,Ig=1e3,_n=[];let yd;function bd(P){const C=_n.length===0;let K=!1;for(const de of _n)if(de.id===P.id&&de.action===P.action){de.updateFunc=P.updateFunc,K=!0;break}K||_n.push(P),C&&xd()}function wd(P){for(let C=0;C<_n.length;C++){const K=_n[C];if(P===K.id){_n.splice(C,1);break}}_n.length===0&&clearTimeout(yd)}function xd(){const P=md<_n.length?md:_n.length;for(let C=0;C<P;C++)if(_n.length>0){const K=_n.shift();K==null||K.updateFunc()}_n.length>0&&(yd=setTimeout(()=>{xd()},Ig))}function _g(P,C){if(window.WebSocket==null)throw Error("Native browser WebSocket does not exists");const K=new window.WebSocket(P);return K.onopen=()=>{C.onOpen()},K.onmessage=de=>{C.onMessage(de.data.toString())},K.onerror=de=>{C.onError(de)},K.onclose=de=>{C.onClose(de.code,de.reason)},{get readyState(){switch(K.readyState){case WebSocket.CONNECTING:return hn.CONNECTING;case WebSocket.OPEN:return hn.OPEN;case WebSocket.CLOSING:return hn.CLOSING;case WebSocket.CLOSED:default:return hn.CLOSED}},disconnect(){K==null||K.readyState===WebSocket.CLOSING||K.readyState===WebSocket.CLOSED||K.close()},send(de){K.send(de)}}}const Ed=500,Ag=5e4,Tg=5e3,Pg=E({subscribed:S}),Og=F(E({id:p,data:b(g),error:b(v(E({message:p}),E({connected:p})))})),Bg=P=>[Og(P)];function Cg(P,C){var K;let de;const{asResponse:ke=Bg,emitter:Fe,log:Me,queueSize:Oe=50,walletId:ze}=C;Me("makeSocket connects to",P);const Be="",We=ze+"=="+P,Ve={};let ut={},st=0,bt=0,yt=0,Bt=!1,Jt=!1;const Yt=1e3*((K=C.timeout)!=null?K:30);let lr,Dt;const Gt=Vt=>{lr==null&&(lr=Vt),Bt&&de!=null&&de.readyState===hn.OPEN?gt():Jt=!0,Me.error("handled error!",Vt)},gt=()=>{Me.warn("disconnecting from socket",P),clearTimeout(Dt),Bt=!1,de!=null&&de.disconnect(),wd(We)},xt=Vt=>{const ir=lr==null?new Error("Socket closed without error"):lr instanceof Error?lr:new Error(String(lr));Me.warn(`onSocketClose with server ${P}: ${Vt} ${ir.message}`),clearTimeout(Dt),Bt=!1,de=null,Jt=!1,lr=void 0;for(const sr of Object.values(ut))sr.generator.throw(ir).catch(wr=>{Me.error(wr.message)});ut={};try{Fe.emit(Ji.CONNECTION_CLOSE,P,ir)}catch(sr){Me.error(String(sr))}},_t=()=>{if(Me(`onSocketConnect with server ${P}`),Jt){de!=null&&de.disconnect();return}Bt=!0,bt=Date.now();try{Fe.emit(Ji.CONNECTION_OPEN,P)}catch(Vt){Gt(Vt)}for(const[Vt,ir]of Object.entries(ut))pt(Vt,ir);Ht(),Jt=!1},Ht=()=>{Me(`wakeUp socket with server ${P}`),bd({id:We,updateFunc:()=>{Ct().catch(Vt=>{throw new Error(`wake up error from: ${Vt.message}`)})}})},Ct=async()=>{if(Me(`doWakeUp socket with server ${P}`),yt=Date.now(),Bt&&Be!=null)for(;Object.keys(ut).length<Oe;){const Vt=await C.taskGeneratorFn(P),sr=(await Vt.next()).value;if(typeof sr=="boolean"){if(sr)continue;break}qt.submitTask(sr,Vt)}},jt=Vt=>{var ir;if(de!=null&&de.readyState===hn.OPEN&&Bt){const sr=Vt.method,wr={id:sr,method:Vt.method,params:(ir=Vt.params)!=null?ir:{}};Ve[sr]=Vt,de.send(JSON.stringify(wr))}},pt=(Vt,ir)=>{var sr;const wr=Date.now();if(de!=null&&de.readyState===hn.OPEN&&Bt&&!Jt){ir.startTime=wr;const Ar={id:Vt,method:ir.task.method,params:(sr=ir.task.params)!=null?sr:{}};de.send(JSON.stringify(Ar)+`
|
|
76
76
|
`)}},Tt=()=>{Me(`socket timer with server ${P} expired, check if healthCheck needed`);const Vt=Date.now()-Ed;bt+Ag<Vt&&(Me(`submitting healthCheck to server ${P}`),bt=Vt,C.healthCheck().then(()=>{Fe.emit(Ji.CONNECTION_TIMER,P,Vt)}).catch(ir=>Gt(ir)));for(const[ir,sr]of Object.entries(ut))sr.startTime+Yt<Vt&&(sr.generator.throw(new Error(`Timeout for request ${ir}`)).catch(wr=>{Me.error(wr.message)}),Zr(ut,ir));Ht(),Zt()},Zt=()=>{Me(`setupTimer with server ${P}`);let Vt=yt+Tg;for(const wr of Object.values(ut)){const Ar=wr.startTime+Yt;Ar<Vt&&(Vt=Ar)}const ir=Date.now()-Ed,sr=Vt<ir?0:Vt-ir;Dt=setTimeout(()=>Tt(),sr)},Kt=Vt=>{try{const ir=ke(Vt);for(const sr of ir)if(sr.id!=null){const wr=sr.id.toString(),Ar=Ve[wr];if(Ar!=null){const qr=x(Pg)(sr.data);if((qr==null?void 0:qr.subscribed)!=null){Ar.subscribed=!0,Ar.deferred.resolve(sr.data);continue}Ar.subscribed||Ar.deferred.reject();try{Ar.cb(Ar.cleaner(sr.data))}catch(Cr){throw console.log({uri:P,error:Cr,response:sr,subscription:Ar}),Cr}continue}const Rr=ut[wr];if(Rr!=null){Zr(ut,wr);const{error:qr}=sr;try{if(qr!=null){const Hr="message"in qr?qr.message:qr.connected;throw new Error(Hr)}let Cr;Rr.task.cleaner!=null?Cr=Rr.task.cleaner(sr.data):Cr=sr.data,Rr.generator.next(Cr).then(Hr=>{const Dn=Hr.value;typeof Dn!="boolean"&&qt.submitTask(Dn,Rr.generator)}).catch(Hr=>{Me.error(Hr.message)})}catch(Cr){console.log({uri:P,error:Cr,response:sr,request:Rr}),Rr.generator.throw(Cr).catch(Hr=>{Me.error(Hr.message)})}continue}throw new Error(`Unknown message id from incoming ws message: ${Vt}`)}}catch(ir){Gt(ir)}Ht()};Zt();const qt={get readyState(){var Vt;return(Vt=de==null?void 0:de.readyState)!=null?Vt:hn.CLOSED},async connect(){return de==null||de.disconnect(),await new Promise(Vt=>{const ir={onOpen:()=>{_t(),Vt()},onMessage:Kt,onError:wr=>{lr=wr},onClose:xt};let sr=P;(P.startsWith("wss:")||P.startsWith("ws:"))&&!P.endsWith("/")&&Xl()(P).pathname==="/"&&(sr=P+"/websocket"),sr=Eg(sr,C.initOptions),P.startsWith("electrumwss:")&&(sr=P.replace(/^electrumwss:/,"wss:")),P.startsWith("electrumws:")&&(sr=P.replace(/^electrumws:/,"ws:"));try{de=_g(sr,ir)}catch{de=Sg(sr,ir)}})},disconnect(){de==null||de.disconnect(),de=null,gt()},isConnected(){return(de==null?void 0:de.readyState)===hn.OPEN},submitTask:(Vt,ir)=>{const sr=(st++).toString(),wr={task:Vt,startTime:Date.now(),generator:ir};ut[sr]=wr,pt(sr,wr)},subscribe:jt};return qt}var Rg=Object.defineProperty,Fg=Object.defineProperties,Ng=Object.getOwnPropertyDescriptors,Md=Object.getOwnPropertySymbols,Lg=Object.prototype.hasOwnProperty,Dg=Object.prototype.propertyIsEnumerable,Ug=(P,C)=>(C=Symbol[P])?C:Symbol.for("Symbol."+P),Sd=(P,C,K)=>C in P?Rg(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Qi=(P,C)=>{for(var K in C||(C={}))Lg.call(C,K)&&Sd(P,K,C[K]);if(Md)for(var K of Md(C))Dg.call(C,K)&&Sd(P,K,C[K]);return P},kd=(P,C)=>Fg(P,Ng(C)),Hg=function(P,C){this[0]=P,this[1]=C},zg=(P,C,K)=>{var de=(Me,Oe,ze,Be)=>{try{var We=K[Me](Oe),Ve=(Oe=We.value)instanceof Hg,ut=We.done;Promise.resolve(Ve?Oe[0]:Oe).then(st=>Ve?de(Me==="return"?Me:"next",Oe[1]?{done:st.done,value:st.value}:st,ze,Be):ze({value:st,done:ut})).catch(st=>de("throw",st,ze,Be))}catch(st){Be(st)}},ke=Me=>Fe[Me]=Oe=>new Promise((ze,Be)=>de(Me,Oe,ze,Be)),Fe={};return K=K.apply(P,C),Fe[Ug("asyncIterator")]=()=>Fe,ke("next"),ke("throw"),ke("return"),Fe};function Id(P){var C;const{asAddress:K,asResponse:de,connectionUri:ke,engineEmitter:Fe,log:Me,taskGeneratorFn:Oe,socketEmitter:ze,walletId:Be}=P;Me(`makeBlockbook with uri ${ke}`);const We={isConnected:!1,async broadcastTx(st){return await We.promisifyWsMessage(gg(st.signedTx))},async connect(){Me(`connecting to blockbook socket with uri ${ke}`),!We.isConnected&&(await Ve.connect(),We.isConnected=Ve.isConnected())},async disconnect(){Me(`disconnecting from blockbook socket with uri ${ke}, currently connected: ${We.isConnected}`),We.isConnected&&(Ve.disconnect(),We.isConnected=!1)},async fetchAddress(st,bt={}){return await We.promisifyWsMessage(vd(st,K,bt))},async fetchAddressUtxos(st){return await We.promisifyWsMessage(hd(st))},async fetchInfo(){return await We.promisifyWsMessage(lg())},async fetchTransaction(st){return await We.promisifyWsMessage(dd(st))},async promisifyWsMessage(st){const bt=new Zf,Bt=function(){return zg(this,null,function*(){const Yt=yield Qi({},st);return bt.resolve(Yt),!1})}(),Jt=await Bt.next();if(Jt.done!==!0){const Yt=Jt.value;Ve.submitTask(Yt,Bt)}return await bt.promise},watchAddresses(st,bt){const yt=async Bt=>{Fe.emit(Ur.NEW_ADDRESS_TRANSACTION,ke,Bt)};Ve.subscribe(kd(Qi({},wg(st,K)),{cb:yt,deferred:bt,subscribed:!1}))},async watchBlocks(st){const bt=async yt=>{Fe.emit(Ur.BLOCK_HEIGHT_CHANGED,ke,yt.height)};Ve.subscribe(kd(Qi({},yg()),{cb:bt,deferred:st,subscribed:!1}))},addressQueryTask:function*(st,bt){return yield Qi({},vd(st,bt.asBlockbookAddress,{details:"txs",from:bt.lastQueriedBlockHeight,pageSize:Jv,page:bt.page}))},transactionQueryTask:function*(st){return yield Qi({},dd(st))},transactionSpecialQueryTask:function*(st){return yield Qi({},vg(st))},utxoListQueryTask:function*(st,bt){return yield Qi({},hd(st,bt.asBlockbookAddress))}},Ve=Cg(ke,{asResponse:de,healthCheck:(C=P.ping)!=null?C:ut,initOptions:P.initOptions,taskGeneratorFn:Oe,log:Me,emitter:ze,walletId:Be});async function ut(){await We.promisifyWsMessage(ug())}return We}const jg=E({tx_pos:m,value:m,tx_hash:p,height:m}),Xy=(P=asString)=>asObject({blockhash:asString,blocktime:asNumber,confirmations:asNumber,hash:asString,hex:asString,locktime:asNumber,size:asNumber,time:asNumber,txid:asString,version:asNumber,vin:asArray(asObject({scriptSig:asObject({asm:asString,hex:asString}),sequence:asNumber,txid:asString,vout:asNumber})),vout:asArray(asObject({n:asNumber,scriptPubKey:asObject({addresses:asArray(P),asm:asString,hex:asString,reqSigs:asNumber,type:asString}),value:asNumber}))}),Kg=E({error:E({message:p})}),Yf=P=>C=>{const K=x(Kg)(C);if(K!=null)throw new Error(`Electrum Error: ${K.error.message}`);return P(C)},Wg=()=>({method:"server.ping",params:void 0,cleaner:Yf(Gg)}),Gg=x(o),Vg=P=>({method:"blockchain.scripthash.listunspent",params:[P],cleaner:Yf(qg)}),qg=M(jg),Xg=P=>({method:"blockchain.scripthash.get_history",params:[P],cleaner:Yf(Zg)}),Zg=M(E({height:m,tx_hash:p})),Zy=(P,C=asString)=>({method:"blockchain.transaction.get",params:[P,!0],cleaner:Yf(Yg(C))}),Yg=null;var $g=gr(8287).Buffer,Jg=Object.defineProperty,_d=Object.getOwnPropertySymbols,Qg=Object.prototype.hasOwnProperty,em=Object.prototype.propertyIsEnumerable,tm=(P,C)=>(C=Symbol[P])?C:Symbol.for("Symbol."+P),Ad=(P,C,K)=>C in P?Jg(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Td=(P,C)=>{for(var K in C||(C={}))Qg.call(C,K)&&Ad(P,K,C[K]);if(_d)for(var K of _d(C))em.call(C,K)&&Ad(P,K,C[K]);return P},Pd=function(P,C){this[0]=P,this[1]=C},rm=(P,C,K)=>{var de=(Me,Oe,ze,Be)=>{try{var We=K[Me](Oe),Ve=(Oe=We.value)instanceof Pd,ut=We.done;Promise.resolve(Ve?Oe[0]:Oe).then(st=>Ve?de(Me==="return"?Me:"next",Oe[1]?{done:st.done,value:st.value}:st,ze,Be):ze({value:st,done:ut})).catch(st=>de("throw",st,ze,Be))}catch(st){Be(st)}},ke=Me=>Fe[Me]=Oe=>new Promise((ze,Be)=>de(Me,Oe,ze,Be)),Fe={};return K=K.apply(P,C),Fe[tm("asyncIterator")]=()=>Fe,ke("next"),ke("throw"),ke("return"),Fe};const nm=P=>{const C=F(E({id:p,result:g,error:b(v(E({message:p}),E({connected:p})))}))(P);return{id:C.id,data:C.result,error:C.error}},im=P=>p(P).trimEnd().split(`
|
|
77
|
-
`).map(nm);function om(P){const{asAddress:C,connectionUri:K,engineEmitter:de,initOptions:ke,log:Fe,taskGeneratorFn:Me,pluginInfo:Oe,socketEmitter:ze,walletId:Be}=P;Fe(`makeBlockbookElectrum with uri ${K}`);const We=ut=>{const st=en({address:ut,coin:Oe.coinInfo.name});return He.Et.sha256($g.from(st,"hex")).reverse().toString("hex")},Ve=Id({asAddress:C,asResponse:im,connectionUri:K,engineEmitter:de,initOptions:ke,log:Fe,taskGeneratorFn:function(ut){return rm(this,null,function*(){const st=Me(ut);let bt;for(;;){const yt=yield new Pd(st.next(bt)),Bt=yt.value;if((yt==null?void 0:yt.done)===!0)return yt.value;if(typeof Bt=="boolean")return Bt;if(Bt.method==="getAccountUtxo"){const Jt=Bt.params,Yt=C!=null?C(Jt.descriptor):Jt.descriptor,lr=We(Yt);bt=(yield Td({},Vg(lr))).map(gt=>({txid:gt.tx_hash,vout:gt.tx_pos,value:gt.value.toString(),height:gt.height}));continue}if(Bt.method==="getAccountInfo"){const Jt=Bt.params,Yt=C!=null?C(Jt.descriptor):Jt.descriptor,lr=We(Yt),Dt=yield Td({},Xg(lr));bt={address:Yt,balance:"0",totalReceived:"0",totalSent:"0",txs:Dt.length,unconfirmedBalance:"0",unconfirmedTxs:Dt.reduce((gt,xt)=>gt+xt.height>=0?1:0,0),txids:[],transactions:[],page:0,totalPages:1,itemsOnPage:0};continue}}})},ping:async()=>await Ve.promisifyWsMessage(Wg()),socketEmitter:ze,walletId:Be});return Ve.broadcastTx=async()=>{throw new Error("broadcastTx not supported for Electrum connections")},Ve.fetchAddress=async()=>{throw new Error("fetchAddress not supported for Electrum connections")},Ve.fetchAddressUtxos=async()=>{throw new Error("fetchAddressUtxos not supported for Electrum connections")},Ve.fetchInfo=async()=>{throw new Error("fetchInfo not supported for Electrum connections")},Ve.fetchTransaction=async()=>{throw new Error("fetchTransaction not supported for Electrum connections")},Ve.watchAddresses=async()=>{},Ve.watchBlocks=async()=>{},Ve}var $f=(P,C)=>(C=Symbol[P])?C:Symbol.for("Symbol."+P),Pa=function(P,C){this[0]=P,this[1]=C},am=(P,C,K)=>{var de=(Me,Oe,ze,Be)=>{try{var We=K[Me](Oe),Ve=(Oe=We.value)instanceof Pa,ut=We.done;Promise.resolve(Ve?Oe[0]:Oe).then(st=>Ve?de(Me==="return"?Me:"next",Oe[1]?{done:st.done,value:st.value}:st,ze,Be):ze({value:st,done:ut})).catch(st=>de("throw",st,ze,Be))}catch(st){Be(st)}},ke=Me=>Fe[Me]=Oe=>new Promise((ze,Be)=>de(Me,Oe,ze,Be)),Fe={};return K=K.apply(P,C),Fe[$f("asyncIterator")]=()=>Fe,ke("next"),ke("throw"),ke("return"),Fe},Mi=P=>{var C=P[$f("asyncIterator")],K=!1,de,ke={};return C==null?(C=P[$f("iterator")](),de=Fe=>ke[Fe]=Me=>C[Fe](Me)):(C=C.call(P),de=Fe=>ke[Fe]=Me=>{if(K){if(K=!1,Fe==="throw")throw Me;return Me}return K=!0,{done:!1,value:new Pa(new Promise(Oe=>{var ze=C[Fe](Me);if(!(ze instanceof Object))throw TypeError("Object expected");Oe(ze)}),1)}}),ke[$f("iterator")]=()=>ke,de("next"),"throw"in C?de("throw"):ke.throw=Fe=>{throw Fe},"return"in C&&de("return"),ke};function sm(P){const{engineEmitter:C,initOptions:K,io:de,log:ke,pluginInfo:Fe,pluginState:Me,walletInfo:Oe}=P,{serverConfigs:ze=[]}=Fe.engineInfo;ke("Making server states");const Be={};let We=!0,Ve=[],ut=0,st=setTimeout(()=>{},0);const bt=new kg;bt.on(Ji.CONNECTION_OPEN,gt=>{ut=0,ke(`${gt} ** Connected **`)}),bt.on(Ji.CONNECTION_CLOSE,(gt,xt)=>{Zr(Be,gt);const _t=xt!=null?` !! Connection ERROR !! ${xt.message}`:"";ke(`${gt} onClose ${_t}`),xt!=null&&Me.serverScoreDown(gt),Jt()}),bt.on(Ji.CONNECTION_TIMER,(gt,xt)=>{const _t=Date.now()-xt;ke(`${gt} returned healthCheck in ${_t}ms`),Me.serverScoreUp(gt,_t)}),C.on(Ur.NEW_ADDRESS_TRANSACTION,(gt,xt)=>{ke(`${gt} received received new transaction with id ${xt.tx.txid} to address ${xt.address}`);const _t=Be[gt];_t!=null&&_t.txids.add(xt.tx.txid)}),C.on(Ur.BLOCK_HEIGHT_CHANGED,(gt,xt)=>{ke(`${gt} block height changed to ${xt}`),Be[gt].blockHeight=xt});let yt;const Bt=gt=>({blockbook:gt,blockSubscriptionStatus:"unsubscribed",txids:new Set,addresses:new Set,blockHeight:0}),Jt=()=>{if(We){ke(`attempting server reconnect number ${ut}`);const gt=Math.max(5,ut++)*1e3;st=setTimeout(()=>{clearTimeout(st),Gt.refillServers()},gt)}},Yt=()=>{const gt=["wss:","ws:","electrumwss:","electrumws:"];Ve.length===0&&(Ve=Me.getLocalServers(sd,gt)),ke(`refillServers: Top ${sd} servers:`,Ve);let xt=1.25;for(;Object.keys(Be).length<eg;){let jt=function(){return am(this,null,function*(){if(_t==null||!(_t in Be))return!1;const pt=yt(_t);let Tt=yield new Pa(pt.next());for(;;){if((Tt==null?void 0:Tt.done)===!0)return Tt.value;const Zt=Tt.value;if(typeof Zt!="boolean"){const Kt=`${Zt.method} params: ${JSON.stringify(Zt.params)}`;ke(`${_t} nextTask: ${Kt}`)}try{const Kt=yield Zt;Tt=yield new Pa(pt.next(Kt))}catch(Kt){Tt=yield new Pa(pt.throw(Kt).catch(qt=>(ke.error(qt),{done:!0,value:!1})))}}})};if(Ve.length===0)break;const _t=Ve.shift();if(_t==null){Jt();break}if(Be[_t]!=null)continue;const Ht=(0,fd.parse)(_t);if(Ht.scheme==null||Ht.scheme.length<2||Ht.host==null)continue;if(xt-=xt>.5?.25:0,Math.random()>xt){Ve.push(_t);continue}let Ct;["electrumwss","electrumws"].includes(Ht.scheme)?Ct=om({asAddress:Fe.engineInfo.asBlockbookAddress,connectionUri:_t,engineEmitter:C,initOptions:K,log:ke,taskGeneratorFn:jt,pluginInfo:Fe,socketEmitter:bt,walletId:Oe.id}):Ct=Id({asAddress:Fe.engineInfo.asBlockbookAddress,connectionUri:_t,engineEmitter:C,initOptions:K,log:ke,taskGeneratorFn:jt,socketEmitter:bt,walletId:Oe.id}),Be[_t]=Bt(Ct),Ct.connect().then(async()=>{const pt=Date.now(),{bestHeight:Tt}=await Ct.fetchInfo();ke("height:",Tt),Be[_t].blockHeight=Tt,C.emit(Ur.BLOCK_HEIGHT_CHANGED,_t,Tt);const Zt=Date.now()-pt;Me.serverScoreUp(_t,Zt)}).catch(pt=>{ke.error(`${JSON.stringify(pt.message)}`)})}},lr=(gt,xt)=>{if(Be[gt]==null)throw new Error(`No blockbook connection with ${gt}`);const Ht=Date.now(),Ct=new Zf;return Ct.promise.then(jt=>{Me.serverScoreUp(gt,Date.now()-Ht),xt.resolve(jt)},jt=>{Me.serverScoreDown(gt),xt.reject(jt)}),Ct};function*Dt(gt,xt){if(Be[gt]==null)throw new Error(`No blockbook connection with ${gt}`);const Ht=Date.now();let Ct;try{Ct=yield*Mi(xt),Me.serverScoreUp(gt,Date.now()-Ht)}catch(jt){throw Me.serverScoreDown(gt),jt}return Ct}const Gt={async broadcastTx(gt){return await new Promise((xt,_t)=>{let Ht=!1,Ct=0;const jt=Object.keys(Be).filter(Tt=>Be[Tt].blockbook!=null)
|
|
77
|
+
`).map(nm);function om(P){const{asAddress:C,connectionUri:K,engineEmitter:de,initOptions:ke,log:Fe,taskGeneratorFn:Me,pluginInfo:Oe,socketEmitter:ze,walletId:Be}=P;Fe(`makeBlockbookElectrum with uri ${K}`);const We=ut=>{const st=en({address:ut,coin:Oe.coinInfo.name});return He.Et.sha256($g.from(st,"hex")).reverse().toString("hex")},Ve=Id({asAddress:C,asResponse:im,connectionUri:K,engineEmitter:de,initOptions:ke,log:Fe,taskGeneratorFn:function(ut){return rm(this,null,function*(){const st=Me(ut);let bt;for(;;){const yt=yield new Pd(st.next(bt)),Bt=yt.value;if((yt==null?void 0:yt.done)===!0)return yt.value;if(typeof Bt=="boolean")return Bt;if(Bt.method==="getAccountUtxo"){const Jt=Bt.params,Yt=C!=null?C(Jt.descriptor):Jt.descriptor,lr=We(Yt);bt=(yield Td({},Vg(lr))).map(gt=>({txid:gt.tx_hash,vout:gt.tx_pos,value:gt.value.toString(),height:gt.height}));continue}if(Bt.method==="getAccountInfo"){const Jt=Bt.params,Yt=C!=null?C(Jt.descriptor):Jt.descriptor,lr=We(Yt),Dt=yield Td({},Xg(lr));bt={address:Yt,balance:"0",totalReceived:"0",totalSent:"0",txs:Dt.length,unconfirmedBalance:"0",unconfirmedTxs:Dt.reduce((gt,xt)=>gt+xt.height>=0?1:0,0),txids:[],transactions:[],page:0,totalPages:1,itemsOnPage:0};continue}}})},ping:async()=>await Ve.promisifyWsMessage(Wg()),socketEmitter:ze,walletId:Be});return Ve.broadcastTx=async()=>{throw new Error("broadcastTx not supported for Electrum connections")},Ve.fetchAddress=async()=>{throw new Error("fetchAddress not supported for Electrum connections")},Ve.fetchAddressUtxos=async()=>{throw new Error("fetchAddressUtxos not supported for Electrum connections")},Ve.fetchInfo=async()=>{throw new Error("fetchInfo not supported for Electrum connections")},Ve.fetchTransaction=async()=>{throw new Error("fetchTransaction not supported for Electrum connections")},Ve.watchAddresses=async()=>{},Ve.watchBlocks=async()=>{},Ve}var $f=(P,C)=>(C=Symbol[P])?C:Symbol.for("Symbol."+P),Pa=function(P,C){this[0]=P,this[1]=C},am=(P,C,K)=>{var de=(Me,Oe,ze,Be)=>{try{var We=K[Me](Oe),Ve=(Oe=We.value)instanceof Pa,ut=We.done;Promise.resolve(Ve?Oe[0]:Oe).then(st=>Ve?de(Me==="return"?Me:"next",Oe[1]?{done:st.done,value:st.value}:st,ze,Be):ze({value:st,done:ut})).catch(st=>de("throw",st,ze,Be))}catch(st){Be(st)}},ke=Me=>Fe[Me]=Oe=>new Promise((ze,Be)=>de(Me,Oe,ze,Be)),Fe={};return K=K.apply(P,C),Fe[$f("asyncIterator")]=()=>Fe,ke("next"),ke("throw"),ke("return"),Fe},Mi=P=>{var C=P[$f("asyncIterator")],K=!1,de,ke={};return C==null?(C=P[$f("iterator")](),de=Fe=>ke[Fe]=Me=>C[Fe](Me)):(C=C.call(P),de=Fe=>ke[Fe]=Me=>{if(K){if(K=!1,Fe==="throw")throw Me;return Me}return K=!0,{done:!1,value:new Pa(new Promise(Oe=>{var ze=C[Fe](Me);if(!(ze instanceof Object))throw TypeError("Object expected");Oe(ze)}),1)}}),ke[$f("iterator")]=()=>ke,de("next"),"throw"in C?de("throw"):ke.throw=Fe=>{throw Fe},"return"in C&&de("return"),ke};function sm(P){const{engineEmitter:C,initOptions:K,io:de,log:ke,pluginInfo:Fe,pluginState:Me,walletInfo:Oe}=P,{serverConfigs:ze=[]}=Fe.engineInfo;ke("Making server states");const Be={};let We=!0,Ve=[],ut=0,st=setTimeout(()=>{},0);const bt=new kg;bt.on(Ji.CONNECTION_OPEN,gt=>{ut=0,ke(`${gt} ** Connected **`)}),bt.on(Ji.CONNECTION_CLOSE,(gt,xt)=>{Zr(Be,gt);const _t=xt!=null?` !! Connection ERROR !! ${xt.message}`:"";ke(`${gt} onClose ${_t}`),xt!=null&&Me.serverScoreDown(gt),Jt()}),bt.on(Ji.CONNECTION_TIMER,(gt,xt)=>{const _t=Date.now()-xt;ke(`${gt} returned healthCheck in ${_t}ms`),Me.serverScoreUp(gt,_t)}),C.on(Ur.NEW_ADDRESS_TRANSACTION,(gt,xt)=>{ke(`${gt} received received new transaction with id ${xt.tx.txid} to address ${xt.address}`);const _t=Be[gt];_t!=null&&_t.txids.add(xt.tx.txid)}),C.on(Ur.BLOCK_HEIGHT_CHANGED,(gt,xt)=>{ke(`${gt} block height changed to ${xt}`),Be[gt].blockHeight=xt});let yt;const Bt=gt=>({blockbook:gt,blockSubscriptionStatus:"unsubscribed",txids:new Set,addresses:new Set,blockHeight:0}),Jt=()=>{if(We){ke(`attempting server reconnect number ${ut}`);const gt=Math.max(5,ut++)*1e3;st=setTimeout(()=>{clearTimeout(st),Gt.refillServers()},gt)}},Yt=()=>{const gt=["wss:","ws:","electrumwss:","electrumws:"];Ve.length===0&&(Ve=Me.getLocalServers(sd,gt)),ke(`refillServers: Top ${sd} servers:`,Ve);let xt=1.25;for(;Object.keys(Be).length<eg;){let jt=function(){return am(this,null,function*(){if(_t==null||!(_t in Be))return!1;const pt=yt(_t);let Tt=yield new Pa(pt.next());for(;;){if((Tt==null?void 0:Tt.done)===!0)return Tt.value;const Zt=Tt.value;if(typeof Zt!="boolean"){const Kt=`${Zt.method} params: ${JSON.stringify(Zt.params)}`;ke(`${_t} nextTask: ${Kt}`)}try{const Kt=yield Zt;Tt=yield new Pa(pt.next(Kt))}catch(Kt){Tt=yield new Pa(pt.throw(Kt).catch(qt=>(ke.error(qt),{done:!0,value:!1})))}}})};if(Ve.length===0)break;const _t=Ve.shift();if(_t==null){Jt();break}if(Be[_t]!=null)continue;const Ht=(0,fd.parse)(_t);if(Ht.scheme==null||Ht.scheme.length<2||Ht.host==null)continue;if(xt-=xt>.5?.25:0,Math.random()>xt){Ve.push(_t);continue}let Ct;["electrumwss","electrumws"].includes(Ht.scheme)?Ct=om({asAddress:Fe.engineInfo.asBlockbookAddress,connectionUri:_t,engineEmitter:C,initOptions:K,log:ke,taskGeneratorFn:jt,pluginInfo:Fe,socketEmitter:bt,walletId:Oe.id}):Ct=Id({asAddress:Fe.engineInfo.asBlockbookAddress,connectionUri:_t,engineEmitter:C,initOptions:K,log:ke,taskGeneratorFn:jt,socketEmitter:bt,walletId:Oe.id}),Be[_t]=Bt(Ct),Ct.connect().then(async()=>{const pt=Date.now(),{bestHeight:Tt}=await Ct.fetchInfo();ke("height:",Tt),Be[_t].blockHeight=Tt,C.emit(Ur.BLOCK_HEIGHT_CHANGED,_t,Tt);const Zt=Date.now()-pt;Me.serverScoreUp(_t,Zt)}).catch(pt=>{ke.error(`${JSON.stringify(pt.message)}`)})}},lr=(gt,xt)=>{if(Be[gt]==null)throw new Error(`No blockbook connection with ${gt}`);const Ht=Date.now(),Ct=new Zf;return Ct.promise.then(jt=>{Me.serverScoreUp(gt,Date.now()-Ht),xt.resolve(jt)},jt=>{Me.serverScoreDown(gt),xt.reject(jt)}),Ct};function*Dt(gt,xt){if(Be[gt]==null)throw new Error(`No blockbook connection with ${gt}`);const Ht=Date.now();let Ct;try{Ct=yield*Mi(xt),Me.serverScoreUp(gt,Date.now()-Ht)}catch(jt){throw Me.serverScoreDown(gt),jt}return Ct}const Gt={async broadcastTx(gt){return await new Promise((xt,_t)=>{let Ht=!1,Ct=0;const jt=Object.keys(Be).filter(Tt=>Be[Tt].blockbook!=null),pt=jt.some(Tt=>Be[Tt].blockbook.isConnected);if(pt)for(const Tt of jt){const{blockbook:Zt}=Be[Tt];Zt!=null&&Zt.broadcastTx(gt).then(Kt=>{Ht||(Ht=!0,xt(Kt.result))}).catch(Kt=>{if(++Ct===jt.length){const qt=Kt!=null?`With error ${Kt.message}`:"";ke.error(`broadcastTx fail: ${JSON.stringify(gt)}
|
|
78
78
|
${qt}`),_t(Kt)}})}if(!pt){const{nowNodesApiKey:Tt}=K,Zt=ze.filter(Kt=>Kt.type==="blockbook-nownode").map(Kt=>Kt.uris).flat(1);if(Zt.length<1){_t(new Error("No available connections. Check your internet signal."));return}if(Tt==null){_t(new Error("Missing connection key for fallback servers."));return}for(const Kt of Zt)ke.warn("Falling back to NOWNode server broadcast over HTTP:",Kt),de.fetchCors(`${Kt}/api/v2/sendtx/`,{method:"POST",headers:{"api-key":Tt},body:gt.signedTx}).then(async qt=>{if(!qt.ok)throw new Error(`Failed to broadcast transaction via Blockbook: HTTP ${qt.status}`);const Vt=await qt.json();return Gn(pd)(Vt)}).then(qt=>{Ht||(Ht=!0,xt(qt.result))}).catch(qt=>{if(++Ct===Zt.length){const Vt=qt!=null?`With error ${qt.message}`:"";ke.error(`broadcastTx fail: ${JSON.stringify(gt)}
|
|
79
79
|
${Vt}`),_t(qt)}})}})},getBlockHeight(gt){return Be[gt].blockHeight},getServerList(){return Ve},getServerState(gt){return Be[gt]},refillServers(){ke("refilling servers..."),We=!0,bd({id:Oe.id,updateFunc:()=>{Yt()}})},setPickNextTaskCB(gt){yt=gt},setServerList(gt){Ve=gt},serverCanGetTx(gt,xt){const _t=Be[gt];if(_t==null)return!1;if(_t.txids.has(xt))return!0;for(const Ht of Object.values(Be))if(Ht.txids.has(xt))return!1;return!0},serverCanGetAddress(gt,xt){const _t=Be[gt];if(_t==null)return!1;if(_t.addresses.has(xt))return!0;for(const Ht of Object.values(Be))if(Ht.addresses.has(xt))return!1;return!0},serverIsAwareOfAddress(gt,xt){const _t=Be[gt];return _t==null?!1:!!_t.addresses.has(xt)},async stop(){We=!1,ke("stopping server states"),wd(Oe.id),clearTimeout(st);for(const gt of Object.keys(Be)){const xt=Be[gt],{blockbook:_t}=xt;_t!=null&&(await _t.disconnect(),Zr(Be,gt))}},watchAddresses(gt,xt,_t){const Ht=Be[gt];if(Ht==null)throw new Error(`No blockbook connection with ${gt}`);const{blockbook:Ct}=Ht;for(const pt of xt)Ht.addresses.add(pt);const jt=new Zf;jt.promise.catch(pt=>{for(const Tt of xt)Ht.addresses.delete(Tt);_t==null||_t.reject(pt)}),Ct.watchAddresses(Array.from(Ht.addresses),lr(gt,jt))},watchBlocks(gt){const xt=Be[gt];if(xt==null)throw new Error(`No blockbook connection with ${gt}`);const{blockbook:_t}=xt;xt.blockSubscriptionStatus="subscribing";const Ht=new Zf;Ht.promise.then(()=>{xt.blockSubscriptionStatus="subscribed"}).catch(()=>{xt.blockSubscriptionStatus="unsubscribed"}),_t.watchBlocks(lr(gt,Ht))},addressQueryTask:function*(gt,xt,_t){const Ht=Be[gt];if(Ht==null)throw new Error(`No blockbook connection with ${gt}`);return yield*Mi(Dt(gt,function*(){return yield*Mi(Ht.blockbook.addressQueryTask(xt,{asBlockbookAddress:Fe.engineInfo.asBlockbookAddress,lastQueriedBlockHeight:_t.lastQueriedBlockHeight,page:_t.page}))}()))},transactionQueryTask:function*(gt,xt){const _t=Be[gt];if(_t==null)throw new Error(`No blockbook connection with ${gt}`);return yield*Mi(Dt(gt,function*(){return yield*Mi(_t.blockbook.transactionQueryTask(xt))}()))},transactionSpecialQueryTask:function*(gt,xt){const _t=Be[gt];if(_t==null)throw new Error(`No blockbook connection with ${gt}`);return yield*Mi(Dt(gt,function*(){return _t.blockbook.transactionSpecialQueryTask(xt)}()))},utxoListQueryTask:function*(gt,xt){const _t=Be[gt];if(_t==null)throw new Error(`No blockbook connection with ${gt}`);return yield*Mi(Dt(gt,function*(){return yield*Mi(_t.blockbook.utxoListQueryTask(xt,{asBlockbookAddress:Fe.engineInfo.asBlockbookAddress}))}()))}};return Gt}var fm=Object.defineProperty,um=Object.defineProperties,cm=Object.getOwnPropertyDescriptors,Od=Object.getOwnPropertySymbols,lm=Object.prototype.hasOwnProperty,hm=Object.prototype.propertyIsEnumerable,Jf=(P,C)=>(C=Symbol[P])?C:Symbol.for("Symbol."+P),Bd=(P,C,K)=>C in P?fm(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Si=(P,C)=>{for(var K in C||(C={}))lm.call(C,K)&&Bd(P,K,C[K]);if(Od)for(var K of Od(C))hm.call(C,K)&&Bd(P,K,C[K]);return P},ki=(P,C)=>um(P,cm(C)),Kr=function(P,C){this[0]=P,this[1]=C},Ao=(P,C,K)=>{var de=(Me,Oe,ze,Be)=>{try{var We=K[Me](Oe),Ve=(Oe=We.value)instanceof Kr,ut=We.done;Promise.resolve(Ve?Oe[0]:Oe).then(st=>Ve?de(Me==="return"?Me:"next",Oe[1]?{done:st.done,value:st.value}:st,ze,Be):ze({value:st,done:ut})).catch(st=>de("throw",st,ze,Be))}catch(st){Be(st)}},ke=Me=>Fe[Me]=Oe=>new Promise((ze,Be)=>de(Me,Oe,ze,Be)),Fe={};return K=K.apply(P,C),Fe[Jf("asyncIterator")]=()=>Fe,ke("next"),ke("throw"),ke("return"),Fe},Vn=P=>{var C=P[Jf("asyncIterator")],K=!1,de,ke={};return C==null?(C=P[Jf("iterator")](),de=Fe=>ke[Fe]=Me=>C[Fe](Me)):(C=C.call(P),de=Fe=>ke[Fe]=Me=>{if(K){if(K=!1,Fe==="throw")throw Me;return Me}return K=!0,{done:!1,value:new Kr(new Promise(Oe=>{var ze=C[Fe](Me);if(!(ze instanceof Object))throw TypeError("Object expected");Oe(ze)}),1)}}),ke[Jf("iterator")]=()=>ke,de("next"),"throw"in C?de("throw"):ke.throw=Fe=>{throw Fe},"return"in C&&de("return"),ke};function Cd(P){const{dataLayer:C,initOptions:K,io:de,emitter:ke,engineOptions:Fe,pluginState:Me,pluginInfo:Oe,seenTxCheckpoint:ze,walletInfo:Be,walletTools:We}=P,{log:Ve}=Fe,{walletFormats:ut}=Be.keys,st={addressForTransactionsCache:{},addressForUtxosCache:{},addressSubscribeCache:{},blockbookUtxoCache:{},dataLayerUtxoCache:{},transactionSpecificUpdateCache:{},transactionUpdateCache:{}},bt=new Set,yt=()=>{for(const pt of bt)clearTimeout(pt);bt.clear()},Bt=()=>{for(const pt of Object.keys(st.addressForTransactionsCache))Zr(st.addressForTransactionsCache,pt);for(const pt of Object.keys(st.addressForUtxosCache))Zr(st.addressForUtxosCache,pt);for(const pt of Object.keys(st.addressSubscribeCache))Zr(st.addressSubscribeCache,pt);for(const pt of Object.keys(st.blockbookUtxoCache))Zr(st.blockbookUtxoCache,pt);for(const pt of Object.keys(st.dataLayerUtxoCache))Zr(st.dataLayerUtxoCache,pt);for(const pt of Object.keys(st.transactionSpecificUpdateCache))Zr(st.transactionSpecificUpdateCache,pt);for(const pt of Object.keys(st.transactionUpdateCache))Zr(st.transactionUpdateCache,pt)},Jt=2;let Yt=0,lr=0;const Dt=async()=>{if(lr>=1)return;const pt=Object.keys(st.addressSubscribeCache).length*Jt;if(Yt=Yt+1,pt===0)throw new Error("No addresses to process");const Tt=Yt/pt;(Tt-lr>Qv||Tt===1)&&(Ve(`processed changed, percent: ${Tt}, processedCount: ${Yt}, totalCount: ${pt}`),lr=Tt,_t.updateSeenTxCheckpoint(),ke.emit(Ur.ADDRESSES_CHECKED,Tt))},Gt=()=>{if(lr<1)return;const pt=_t.seenTxCheckpoint(),Tt=pt!=null?parseInt(pt):void 0;if(Tt==null||_t.maxSeenTxBlockHeight>Tt){const Zt=_t.maxSeenTxBlockHeight.toString();_t.emitter.emit(Ur.SEEN_TX_CHECKPOINT,Zt)}},gt=new Nh,xt=sm({engineEmitter:ke,initOptions:K,io:de,log:Ve,pluginInfo:Oe,pluginState:Me,walletInfo:Be}),_t={pluginInfo:Oe,walletInfo:Be,walletTools:We,dataLayer:C,emitter:ke,taskCache:st,pendingTimeouts:bt,updateProgressRatio:Dt,updateSeenTxCheckpoint:Gt,io:de,log:Ve,maxSeenTxBlockHeight:0,seenTxCheckpoint:ze,serverStates:xt,walletFormats:ut,lock:gt};xt.setPickNextTaskCB(pt=>pm(_t,pt));let Ht=!1;const Ct=async()=>{Ht||(Ht=!0,await jt(),await Qf(_t))};ke.on(Ur.BLOCK_HEIGHT_CHANGED,async(pt,Tt)=>{const Zt=await C.fetchTransactions({blockHeight:0});for(const Kt of Zt)Kt!=null&&(st.transactionUpdateCache[Kt.txid]={processing:!1})}),ke.on(Ur.NEW_ADDRESS_TRANSACTION,async(pt,Tt)=>{const Zt=st.addressSubscribeCache[Tt.address];if(Zt!=null){const{path:Kt}=Zt;st.addressForUtxosCache[Tt.address]={processing:!1,path:Kt},Fd(_t,{address:Tt.address,changePath:Kt,blockHeight:0,addressForTransactionsCache:st.addressForTransactionsCache}).catch(()=>{throw new Error("failed to add to transaction cache")}),Qf(_t).catch(qt=>{Ve(qt)})}});const jt=async()=>{const pt=[];for(const Tt of ut){const Zt=rd(Oe.engineInfo,Tt);for(const Kt of Zt){const qt=new Set,Vt={format:Tt,changeIndex:Kt},ir=C.numAddressesByFormatPath(Vt);for(let sr=0;sr<ir;sr++){const wr=await C.fetchAddress({format:Tt,changeIndex:Kt,addressIndex:sr});if(wr==null)throw new Error(`Missing data-layer address with '${Tt}/${Kt}/${sr}' path during initialization`);const{address:Ar}=We.scriptPubkeyToAddress({changePath:Vt,scriptPubkey:wr.scriptPubkey});qt.add(Ar),wr.balance!=null&&pt.push({scriptPubkey:wr.scriptPubkey,balance:wr.balance})}Yl(_t.taskCache,qt,{format:Tt,changeIndex:Kt})}}ke.emit(Ur.ADDRESS_BALANCE_CHANGED,Oe.currencyInfo.currencyCode,pt)};return{processedPercent:lr,async start(){Yt=0,lr=0,await Ct(),xt.refillServers()},async stop(){xt.stop(),Bt(),yt(),Ht=!1},async getFreshAddress({branch:pt=0,forceIndex:Tt}){const{privateKeyFormat:Zt}=Be.keys;Zt==="bip32"&&(pt=0);const{address:Kt,nativeBalance:qt="0",legacyAddress:Vt}=await Rd(_t,{forceIndex:Tt,changePath:{format:Zt,changeIndex:pt}}),ir={publicAddress:Kt,nativeBalance:qt,legacyAddress:Vt!==Kt?Vt:void 0,legacyNativeBalance:Vt!==Kt?qt:void 0},sr=Vf(Oe.engineInfo,Be.keys.privateKeyFormat).filter(wr=>wr!==Zt);for(const wr of sr)if(wr==="bip84"){const{address:Ar,nativeBalance:Rr="0"}=await Rd(_t,{forceIndex:Tt,changePath:{format:wr,changeIndex:pt}});ir.segwitAddress=Ar,ir.segwitNativeBalance=Rr}return ir},async deriveScriptAddress(pt){const{address:Tt}=await dm({walletTools:_t.walletTools,engineInfo:_t.pluginInfo.engineInfo,dataLayer:_t.dataLayer,taskCache:_t.taskCache,format:Be.keys.privateKeyFormat,script:pt});return{publicAddress:Tt}},async addGapLimitAddresses(pt){const Tt=pt.map(async Zt=>{const Kt=We.addressToScriptPubkey(Zt);await C.saveAddress(Hf({scriptPubkey:Kt,used:!0}))});await Promise.all(Tt),await Ct()},async broadcastTx(pt){return await xt.broadcastTx(pt),pt.txid},refillServers(){xt.refillServers()},getServerList(){return xt.getServerList()},setServerList(pt){xt.setServerList(pt)},async loadWifs(pt){for(const Tt of pt)for(const Zt of ut){const Kt={format:Zt,changeIndex:0},qt=ki(Si({},Kt),{addressIndex:0}),{scriptPubkey:Vt,redeemScript:ir}=We.getScriptPubkeyFromWif(Tt,Zt),{address:sr}=We.scriptPubkeyToAddress({changePath:qt,scriptPubkey:Vt});await C.saveAddress(Hf({scriptPubkey:Vt,redeemScript:ir,path:qt})),st.addressSubscribeCache[sr]={path:Kt,processing:!1}}},async processUtxos(pt){var Tt;const Zt=new Map,Kt=new Set;for(const qt of pt){const Vt=(Tt=Zt.get(qt.scriptPubkey))!=null?Tt:[];Zt.has(qt.scriptPubkey)||Zt.set(qt.scriptPubkey,Vt),Vt.push(qt),Kt.add(qt.id)}for(const[qt,Vt]of Zt.entries()){const wr=[...(await C.fetchUtxos({scriptPubkey:qt})).filter(Ar=>Ar!=null&&!Kt.has(Ar==null?void 0:Ar.id)),...Vt];await Ld(_t,{scriptPubkey:qt,utxos:wr})}}}}const dm=async P=>{const{walletTools:C,engineInfo:K,dataLayer:de,format:ke,taskCache:Fe,script:Me}=P;if(K.scriptTemplates==null)throw new Error(`cannot derive script address ${Me} without defined script template`);const Oe=K.scriptTemplates[Me],ze={format:ke,changeIndex:Vr(Oe),addressIndex:0},{address:Be,scriptPubkey:We,redeemScript:Ve}=C.getScriptAddress({path:ze,scriptTemplate:Oe});await de.saveAddress(Hf({scriptPubkey:We,redeemScript:Ve,path:ze}));const ut=new Set;return ut.add(Be),Yl(Fe,ut,{format:ze.format,changeIndex:ze.changeIndex}),{address:Be,scriptPubkey:We,redeemScript:Ve}},Rd=async(P,C)=>{var K;const{changePath:de,forceIndex:ke}=C,Fe=P.dataLayer.numAddressesByFormatPath(de),Me={format:de.format,changeIndex:de.changeIndex,addressIndex:Math.max(Fe-P.pluginInfo.engineInfo.gapLimit,0)};ke!=null&&(Me.addressIndex=ke);const Oe=await P.dataLayer.fetchAddress(Me),ze=(K=Oe==null?void 0:Oe.balance)!=null?K:"0",{scriptPubkey:Be}=Oe!=null?Oe:await P.walletTools.getScriptPubkey(Me);if(Be==null)throw new Error("Unknown address path");const We=P.walletTools.scriptPubkeyToAddress({changePath:Me,scriptPubkey:Be});return ki(Si({},We),{nativeBalance:ze})},Qf=async P=>{await P.lock.acquireAsync();try{for(const K of P.walletFormats){const de=rd(P.pluginInfo.engineInfo,K);for(const ke of de)await C({format:K,changeIndex:ke})}}finally{P.lock.release()}async function C(K){const de=new Set,ke=P.dataLayer.numAddressesByFormatPath(K);let Fe=await P.dataLayer.lastUsedIndexByFormatPath(K),Me=Fe+P.pluginInfo.engineInfo.gapLimit,Oe=ke;for(;Oe<=Me;){const ze=ki(Si({},K),{addressIndex:Oe}),{scriptPubkey:Be,redeemScript:We}=P.walletTools.getScriptPubkey(ze),{address:Ve}=P.walletTools.scriptPubkeyToAddress({changePath:ze,scriptPubkey:Be});await P.dataLayer.saveAddress(Hf({scriptPubkey:Be,redeemScript:We,path:ze})),de.add(Ve),Fe=await P.dataLayer.lastUsedIndexByFormatPath(K),Me=Fe+P.pluginInfo.engineInfo.gapLimit,Oe=P.dataLayer.numAddressesByFormatPath(K)}Yl(P.taskCache,de,K)}},Yl=(P,C,K)=>{C.forEach(de=>{P.addressSubscribeCache[de]={path:K,processing:!1}})},Fd=async(P,C)=>{var K;const{address:de,changePath:ke,addressForTransactionsCache:Fe}=C;let{blockHeight:Me}=C;const Oe=P.walletTools.addressToScriptPubkey(de);if(Me===0){const{lastQueriedBlockHeight:ze=0}=(K=await P.dataLayer.fetchAddress(Oe))!=null?K:{};Me=ze}Fe[de]={processing:!1,path:ke,page:1,blockHeight:Me}},Nd=P=>P.pluginInfo.engineInfo.txSpecificHandling!=null;function pm(P,C){return Ao(this,null,function*(){const{addressForTransactionsCache:K,addressForUtxosCache:de,addressSubscribeCache:ke,blockbookUtxoCache:Fe,dataLayerUtxoCache:Me,transactionSpecificUpdateCache:Oe,transactionUpdateCache:ze}=P.taskCache,Be=P.serverStates.getServerState(C);if(Be==null)return!1;if(Be.blockSubscriptionStatus==="unsubscribed")return P.serverStates.watchBlocks(C),!0;if(Object.keys(Me).length>0){for(const[We,Ve]of Object.entries(Me))if(!Ve.processing&&Ve.full)return Ve.processing=!0,yield new Kr(Ld(P,{scriptPubkey:We,utxos:Ve.utxos})),Zr(Me,We),!0}for(const[We,Ve]of Object.entries(Fe)){const ut=Ve.blockbookUtxo;if(!Ve.processing){const st=Yi(Ve.path,P.pluginInfo.engineInfo.scriptTemplates);if((st===at.Airbitz||st===at.Legacy||st===at.ReplayProtection)&&!P.serverStates.serverCanGetTx(C,ut.txid))return!1;Ve.processing=!0,Zr(Fe,We),yield*Vn(bm(P,{serverUri:C,cacheItem:Ve}))}}for(const[We,Ve]of Object.entries(de))!Ve.processing&&P.serverStates.serverCanGetAddress(C,We)&&(Ve.processing=!0,Zr(de,We),yield*Vn(ym(P,{address:We,cacheItem:Ve,serverState:Be,serverUri:C})));if(Object.keys(ke).length>0){const We=[],Ve=P.serverStates.getBlockHeight(C);for(const[ut,st]of Object.entries(ke)){const bt=!P.serverStates.serverIsAwareOfAddress(C,ut);bt&&We.push(ut),!st.processing&&(bt&&(de[ut]={processing:!1,path:st.path}),yield new Kr(Fd(P,{address:ut,changePath:st.path,blockHeight:Ve,addressForTransactionsCache:K})),st.processing=!0)}if(We.length>0)return P.serverStates.watchAddresses(C,We),!0}if(Object.keys(Oe).length>0){let We=!1;for(const[Ve,ut]of Object.entries(Oe))!ut.processing&&P.serverStates.serverCanGetTx(C,Ve)&&(We=!0,ut.processing=!0,Zr(Oe,Ve),yield*Vn(vm(P,{serverState:Be,serverUri:C,txId:Ve})));if(We)return!0}if(Object.keys(ze).length>0){let We=!1;for(const[Ve,ut]of Object.entries(ze))!ut.processing&&P.serverStates.serverCanGetTx(C,Ve)&&(We=!0,ut.processing=!0,Zr(ze,Ve),yield*Vn(gm(P,{serverState:Be,serverUri:C,txId:Ve})));if(We)return!0}for(const[We,Ve]of Object.entries(K))!Ve.processing&&P.serverStates.serverCanGetAddress(C,We)&&(Ve.processing=!0,Zr(K,We),yield*Vn(mm(P,{address:We,cacheItem:Ve,serverState:Be,serverUri:C})));return!1})}function vm(P,C){return Ao(this,null,function*(){const{serverState:K,serverUri:de,txId:ke}=C;try{const Fe=yield*Vn(P.serverStates.transactionSpecialQueryTask(de,ke));let Oe=(yield new Kr(P.dataLayer.fetchTransactions({txId:ke})))[0];if(Oe==null)return!0;P.pluginInfo.engineInfo.txSpecificHandling!=null&&(Oe=P.pluginInfo.engineInfo.txSpecificHandling(Oe,Fe));const ze=yield new Kr(P.dataLayer.saveTransaction({tx:Oe})),Be=yield new Kr(Ta({dataLayer:P.dataLayer,pluginInfo:P.pluginInfo,tx:ze,walletId:P.walletInfo.id,walletTools:P.walletTools}));return P.emitter.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:Be}]),K.txids.add(ke),!0}catch(Fe){return console.error(Fe),P.log("error while processing transaction specific update:",Fe),P.taskCache.transactionSpecificUpdateCache[ke]={processing:!1},!1}})}function gm(P,C){return Ao(this,null,function*(){const{serverState:K,serverUri:de,txId:ke}=C;try{const Fe=yield*Vn(P.serverStates.transactionQueryTask(de,ke));if(Fe.blockHeight<1)return!1;const Me=$l(P,{txResponse:Fe});for(const Ve of Me.inputs)yield new Kr(P.dataLayer.removeUtxos([`${Ve.txId}_${Ve.outputIndex}`]));const Oe=Me.outputs.map(Ve=>`${Me.txid}_${Ve.n}`),ze=yield new Kr(P.dataLayer.fetchUtxos({utxoIds:Oe}));for(const Ve of ze)Ve!=null&&(Ve.blockHeight=Me.blockHeight,yield new Kr(P.dataLayer.saveUtxo(Ve)));const Be=yield new Kr(P.dataLayer.saveTransaction({tx:Me})),We=yield new Kr(Ta({dataLayer:P.dataLayer,pluginInfo:P.pluginInfo,tx:Be,walletId:P.walletInfo.id,walletTools:P.walletTools}));return P.emitter.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:We}]),Nd(P)&&(P.taskCache.transactionSpecificUpdateCache[ke]={processing:!1}),K.txids.add(ke),!0}catch(Fe){return console.error(Fe),P.log("error while processing transaction update:",Fe),wm(P,()=>{P.taskCache.transactionUpdateCache[ke]={processing:!1}},1e4),!1}})}function mm(P,C){return Ao(this,null,function*(){const{address:K,cacheItem:de,serverState:ke,serverUri:Fe}=C,{page:Me=1,blockHeight:Oe}=de,ze=P.taskCache.addressForTransactionsCache,Be=P.walletTools.addressToScriptPubkey(K),We=yield new Kr(P.dataLayer.fetchAddress(Be));if(We==null)throw new Error(`could not find address with script pubkey ${Be}`);try{const Ve=yield*Vn(P.serverStates.addressQueryTask(Fe,K,{lastQueriedBlockHeight:We.lastQueriedBlockHeight,page:Me})),{transactions:ut=[],txs:st,unconfirmedTxs:bt,totalPages:yt}=Ve,Bt=st>0||bt>0;!We.used&&Bt&&Me===1&&(We.used=!0);const Jt=P.seenTxCheckpoint(),Yt=Jt!=null?parseInt(Jt):void 0;for(const lr of ut){const[Dt]=yield new Kr(P.dataLayer.fetchTransactions({txId:lr.txid})),Gt=$l(P,{txResponse:lr}),gt=yield new Kr(P.dataLayer.saveTransaction({tx:Gt,scriptPubkeys:[Be]})),xt=yield new Kr(Ta({dataLayer:P.dataLayer,pluginInfo:P.pluginInfo,tx:gt,walletId:P.walletInfo.id,walletTools:P.walletTools})),_t=Yt!=null&&Dt==null&&(Gt.blockHeight===0||Gt.blockHeight>Yt);P.emitter.emit(Ur.TRANSACTIONS,[{isNew:_t,transaction:xt}]),xt.blockHeight>P.maxSeenTxBlockHeight&&(P.maxSeenTxBlockHeight=xt.blockHeight),Nd(P)&&(P.taskCache.transactionSpecificUpdateCache[Gt.txid]={processing:!1})}return P.updateSeenTxCheckpoint(),Me<yt?(ze[K]=ki(Si({},de),{processing:!1,page:Me+1}),!0):(We.lastQueriedBlockHeight=Oe,yield new Kr(P.dataLayer.saveAddress(We)),yield new Kr(P.updateProgressRatio()),yield new Kr(Qf(P)),ke.addresses.add(K),!0)}catch(Ve){return console.error(Ve),P.log("error while processing address for transactions:",Ve),ze[K]=ki(Si({},de),{processing:!1}),!1}})}const $l=(P,C)=>{const{txResponse:K}=C;let de="0";const ke=K.vout.map(Me=>{var Oe;const ze=(Oe=Me.hex)!=null?Oe:x(Be=>td(Be),"unknown")({address:Me.addresses[0],coin:P.pluginInfo.coinInfo.name});return de=(0,ue.add)(de,Me.value),{n:Me.n,scriptPubkey:ze,amount:Me.value}}),Fe=K.vin.map(Me=>{var Oe;if(Me.coinbase!=null)return{amount:de,n:0,outputIndex:4294967295,scriptPubkey:"",sequence:Me.sequence,txId:"0000000000000000000000000000000000000000000000000000000000000000"};let ze="unknown";try{ze=td({address:Me.addresses[0],coin:P.pluginInfo.coinInfo.name})}catch(We){P.log.warn(`failed to get scriptPubkey from address ${Me.addresses[0]}: `,We)}return{txId:(Oe=Me.txid)!=null?Oe:"0000000000000000000000000000000000000000000000000000000000000000",outputIndex:Me.vout,n:Me.n,scriptPubkey:ze,sequence:Me.sequence,amount:Me.value}});return{txid:K.txid,hex:K.hex,blockHeight:K.blockHeight>0?K.blockHeight:0,date:K.blockTime,fees:K.fees,inputs:Fe,outputs:ke,ourIns:[],ourOuts:[],ourAmount:"0"}};function ym(P,C){return Ao(this,null,function*(){const{address:K,cacheItem:de,serverState:ke,serverUri:Fe}=C,{addressForUtxosCache:Me,blockbookUtxoCache:Oe,dataLayerUtxoCache:ze}=P.taskCache;try{const Be=yield*Vn(P.serverStates.utxoListQueryTask(Fe,K)),We=P.walletTools.addressToScriptPubkey(K),Ve=yield new Kr(P.dataLayer.fetchAddress(We));if(Ve==null||Ve.path==null)return!0;if(Be.length===0)return Dd(ze,de.path,We,0),!0;for(const ut of Be){const st=`${ut.txid}_${ut.vout}`;Oe[st]={blockbookUtxo:ut,processing:!1,requiredCount:Be.length,path:de.path,address:ki(Si({},Ve),{path:Ve.path})}}return ke.addresses.add(K),!0}catch(Be){return console.error(Be),P.log("error while processing address for UTXOs:",Be),Me[K]=ki(Si({},de),{processing:!1}),!1}})}const Ld=async(P,C)=>{const{utxos:K,scriptPubkey:de}=C,ke=Object.fromEntries([...K].map(Be=>[Be.id,Be])),Fe=[],Me=await P.dataLayer.fetchUtxos({scriptPubkey:de});let Oe="0";for(const Be of Me){if(Be==null)throw new Error("Unexpected undefined utxo when processing unspent transactions");Be.spent||(Oe=(0,ue.add)(Be.value,Oe)),ke[Be.id]==null&&Fe.push(Be.id)}await P.dataLayer.removeUtxos(Fe);let ze="0";for(const Be of Object.values(ke))Be.spent||(ze=(0,ue.add)(Be.value,ze)),await P.dataLayer.saveUtxo(Be);if(ze!==Oe){P.log("address balance changed:",{scriptPubkey:de,oldBalance:Oe,newBalance:ze}),P.emitter.emit(Ur.ADDRESS_BALANCE_CHANGED,P.pluginInfo.currencyInfo.currencyCode,[{scriptPubkey:de,balance:ze}]);const Be=await P.dataLayer.fetchAddress(de);if(Be==null)throw new Error("address not found when processing UTXO transactions");await P.dataLayer.saveAddress(ki(Si({},Be),{balance:ze,used:!0}))}await P.updateProgressRatio(),await Qf(P).catch(Be=>{throw P.log.error(Be),Be})};function bm(P,C){return Ao(this,null,function*(){const{serverUri:K,cacheItem:de}=C,{blockbookUtxoCache:ke,dataLayerUtxoCache:Fe}=P.taskCache,Me=Yi(de.path,P.pluginInfo.engineInfo.scriptTemplates),Oe=Xf(Me);let ze,Be;const We=()=>{var Ve;const ut={id:`${de.blockbookUtxo.txid}_${de.blockbookUtxo.vout}`,txid:de.blockbookUtxo.txid,vout:de.blockbookUtxo.vout,value:de.blockbookUtxo.value,scriptPubkey:de.address.scriptPubkey,script:ze,redeemScript:Be,scriptType:Oe,blockHeight:(Ve=de.blockbookUtxo.height)!=null?Ve:-1,spent:!1};Dd(Fe,de.path,de.address.scriptPubkey,de.requiredCount,ut)};switch(Me){case at.Airbitz:case at.Legacy:case at.ReplayProtection:Be=de.address.redeemScript;{const[Ve]=yield new Kr(P.dataLayer.fetchTransactions({txId:de.blockbookUtxo.txid}));if(Ve==null)try{const ut=yield*Vn(P.serverStates.transactionQueryTask(K,de.blockbookUtxo.txid));return ze=$l(P,{txResponse:ut}).hex,We(),!0}catch(ut){P.log("error while processing Blockbook UTXO:",ut);const st=`${de.blockbookUtxo.txid}_${de.blockbookUtxo.vout}`;return ke[st]={blockbookUtxo:de.blockbookUtxo,processing:!1,path:de.path,address:de.address,requiredCount:de.requiredCount},!1}else ze=Ve.hex}break;case at.WrappedSegwit:if(ze=de.address.scriptPubkey,de.address.redeemScript==null)throw new Error("Address redeem script not defined, but required for p2sh wrapped segwit utxo processing");Be=de.address.redeemScript;break;case at.Segwit:ze=de.address.scriptPubkey;break}return We(),!0})}const Dd=(P,C,K,de,ke)=>{var Fe;const Me=(Fe=P[K])!=null?Fe:{utxos:[],processing:!1,path:C,full:!1};ke!=null&&Me.utxos.push(ke),P[K]=Me,Me.full=Me.utxos.length>=de},wm=(P,C,K)=>{const de=setTimeout(()=>{P.pendingTimeouts.delete(de),C()},K);P.pendingTimeouts.add(de)};function Ud(P){const{pluginInfo:C,publicKey:K}=P,{engineInfo:de}=C,{name:ke}=C.coinInfo,Fe=K.publicKeys,Me={getPubkey(Oe){var ze;if(Fe[Oe.format]==null)throw new Error(`wallet tools: xpub with format ${Oe.format} does not exist`);return Rn({xpub:(ze=Fe[Oe.format])!=null?ze:"",coin:ke,type:Ei(Oe.format),bip44ChangeIndex:Oe.changeIndex,bip44AddressIndex:Oe.addressIndex})},getScriptPubkey(Oe){const ze=Yi(Oe,de.scriptTemplates),Be=Xf(ze);return Wn({pubkey:Me.getPubkey(Oe),scriptTemplates:de.scriptTemplates,scriptType:Be})},getScriptPubkeyFromWif(Oe,ze){const Be=Ei(ze),We=Xf(Be),Ve=In({wifKey:Oe,coin:ke});[at.Segwit,at.WrappedSegwit].includes(Be)&&!Ve.compressed&&(Ve.compressed=!0);const ut=xh(Ve);return Wn({pubkey:ut,scriptTemplates:de.scriptTemplates,scriptType:We})},getAddress(Oe){const ze=Yi(Oe,C.engineInfo.scriptTemplates),{scriptPubkey:Be}=Me.getScriptPubkey(Oe),We=ql(ze);return Lr({scriptPubkey:Be,addressType:We,coin:ke})},addressToScriptPubkey(Oe){return en({address:Oe,coin:ke})},scriptPubkeyToAddress(Oe){const{changePath:ze}=Oe,Be=Yi(ze,C.engineInfo.scriptTemplates),We=ql(Be);return Lr({scriptPubkey:Oe.scriptPubkey,addressType:We,coin:ke,includeCashaddrPrefix:C.coinInfo.includeCashaddrPrefix})},getPrivateKey(Oe){const{path:ze,xprivKeys:Be}=Oe,We=Be[ze.format];if(We==null)throw new Error(`wallet tools: xpriv with format ${ze.format} does not exist`);return Nn({xpriv:We,type:Ei(ze.format),coin:ke,bip44ChangeIndex:ze.changeIndex,bip44AddressIndex:ze.addressIndex})},getPrivateKeyEncodingFromWif(Oe){return In({wifKey:Oe,coin:ke})},getScriptAddress({path:Oe,scriptTemplate:ze}){const Be=Me.getPubkey(Oe),We=ze(Be),{address:Ve,scriptPubkey:ut,redeemScript:st}=Fn({coin:ke,scriptPubkey:We});if(Ve==null)throw new Error("Failed to derive address for script");return{address:Ve,scriptPubkey:ut,redeemScript:st}},signMessageBase64({path:Oe,message:ze,xprivKeys:Be}){const We=Me.getPrivateKey({path:Oe,xprivKeys:Be});return cl(ze,We)}};return Me}var Hd=gr(8287).Buffer,xm=Object.defineProperty,Em=Object.defineProperties,Mm=Object.getOwnPropertyDescriptors,zd=Object.getOwnPropertySymbols,Sm=Object.prototype.hasOwnProperty,km=Object.prototype.propertyIsEnumerable,jd=(P,C,K)=>C in P?xm(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Ii=(P,C)=>{for(var K in C||(C={}))Sm.call(C,K)&&jd(P,K,C[K]);if(zd)for(var K of zd(C))km.call(C,K)&&jd(P,K,C[K]);return P},_i=(P,C)=>Em(P,Mm(C));async function Im(P){const{pluginInfo:C,pluginDisklet:K,emitter:de,engineOptions:ke,io:Fe,pluginState:Me}=P,{walletLocalDisklet:Oe,walletLocalEncryptedDisklet:ze,log:Be}=ke,{currencyInfo:We,engineInfo:Ve,coinInfo:ut}=C,st=dl(ke.userSettings);Me.updateServers(st).catch(pt=>{Be.error(pt)});const bt=Wl(ut.name,ut.coinType),yt=x(bt),Bt=Jh(C)(P.walletInfo),{privateKeyFormat:Jt,publicKey:Yt,walletFormats:lr}=Bt.keys;if(!Ve.formats.includes(Jt)){const pt=`Wallet format is not supported: ${Jt}`;throw Be.error(pt),new Error(pt)}const Dt=Ud({pluginInfo:C,publicKey:Yt}),Gt=await Fp({disklet:K,pluginInfo:C,io:Fe,log:P.engineOptions.log}),gt=await Lh({disklet:Oe,emitter:de,log:Be}),xt=await qh({disklet:Oe});let _t;const Ht=(pt=>Tt=>(Tt!=null&&(pt=Tt),pt))();Ht(P.engineOptions.seenTxCheckpoint),de.on(Ur.SEEN_TX_CHECKPOINT,pt=>{Ht(pt)});const Ct=Cd(_i(Ii({},P),{dataLayer:xt,pluginState:Me,seenTxCheckpoint:Ht,walletTools:Dt,walletInfo:Bt})),jt={async accelerate(pt){var Tt;const{canReplaceByFee:Zt=!1}=We;if(!Zt||Jt==="bip32"||Jt==="bip44")return null;const Kt=pt.txid,[qt]=await xt.fetchTransactions({txId:Kt});if(qt==null||qt.inputs.every(Fr=>Fr.sequence>4294967293)||qt.blockHeight!==0)return null;const Vt=Pu(qt.hex),ir=Math.round(parseInt(qt.fees)/Vt*2),sr=qt.inputs,wr=await Promise.all(sr.map(async(Fr,zr)=>{const An=await Dv(xt,qt,zr);return An.spent=!1,An})),Ar=wr.reduce((Fr,zr)=>zr.value>Fr.value?zr:Fr),Rr=[],qr=[];let Cr;for(const Fr of qt.outputs){const zr=await xt.fetchAddress(Fr.scriptPubkey);if(zr==null){Rr.push({scriptPubkey:Fr.scriptPubkey,value:parseInt(Fr.amount)});continue}if(zr.path==null)throw new Error("Expecting path for address");const An=Yi(zr.path,Ve.scriptTemplates),eo=ql(An),{address:to}=Lr({scriptPubkey:zr.scriptPubkey,addressType:eo,coin:ut.name,redeemScript:zr.redeemScript});qr.push(to),zr.path.changeIndex===1?Cr=to:Rr.push({scriptPubkey:Fr.scriptPubkey,value:parseInt(Fr.amount)})}const Hr=Cr==null?await Ct.getFreshAddress({branch:1}):{publicAddress:Cr},Dn=(Tt=Hr.segwitAddress)!=null?Tt:Hr.publicAddress,Ai=vl(await xt.fetchUtxos({utxoIds:[]})).filter(Fr=>Fr.txid!==Kt),dn={utxos:[...wr,...Ai],forceUseUtxo:[Ar],targets:Rr,memos:pt.memos,feeRate:ir,coin:ut.name,currencyCode:We.currencyCode,enableRbf:!0,freshChangeAddress:Dn,subtractFee:!1,log:Be,outputSort:"bip69"},fn=(()=>{try{return ka(dn)}catch(Fr){const zr=O(Fr);if((zr==null?void 0:zr.networkFeeShortage)!=null){let An=parseInt(zr.networkFeeShortage);for(const eo of Rr){if(eo.value==null)continue;const to=Math.min(eo.value,An);eo.value-=to,An-=to}return ka(dn)}throw Fr}})();fn.changeUsed&&qr.push(Dn);const yn=fn.inputs.map(Fr=>Fr.scriptPubkey.toString("hex"));let pn="0";for(const Fr of fn.outputs){const zr=Fr.scriptPubkey.toString("hex");await xt.fetchAddress(zr)==null?pn=ue.sub(pn,Fr.value.toString()):yn.push(zr)}const qn=fn.fee.toString();pn=ue.sub(pn,qn);const tu={unsignedTx:fn.hex,psbt:{base64:fn.psbtBase64,inputs:fn.inputs,outputs:fn.outputs},ourScriptPubkeys:yn,replacedTxid:Kt};return _i(Ii({},pt),{blockHeight:0,currencyCode:We.currencyCode,date:_a(),feeRateUsed:{satPerVByte:ir},isSend:!0,nativeAmount:pn,networkFee:qn,otherParams:tu,ourReceiveAddresses:qr,parentNetworkFee:void 0,signedTx:"",txid:"",walletId:Bt.id})},async startEngine(){de.emit(Ur.WALLET_BALANCE_CHANGED,We.currencyCode,gt.state.balance),Me.addEngine(Ct),await Gt.start(),await Ct.start()},async killEngine(){await Ct.stop(),Gt.stop(),Me.removeEngine(Ct)},getBalance(pt){return gt.state.balance},getBlockHeight(){return gt.state.lastSeenBlockHeight},async addCustomToken(pt){return await Promise.resolve(void 0)},async addGapLimitAddresses(pt){return await Ct.addGapLimitAddresses(pt)},async broadcastTx(pt){var Tt,Zt;const{otherParams:Kt}=pt;if(((Tt=Kt==null?void 0:Kt.paymentProtocolInfo)==null?void 0:Tt.payment)!=null&&((Zt=Kt==null?void 0:Kt.paymentProtocolInfo)==null?void 0:Zt.paymentUrl)!=null&&typeof await Kv(Fe.fetch,Kt.paymentProtocolInfo.paymentUrl,Kt.paymentProtocolInfo.payment)>"u")throw new Error(`Error when sending to ${Kt.paymentProtocolInfo.paymentUrl}`);if(await Ct.broadcastTx(pt).catch(Vt=>{throw String(Vt).includes("Error: Blockbook Error: -26: dust")?new Ep:Vt})!==pt.txid)throw new Error("broadcast response txid does not match original");return pt},async changeUserSettings(pt){await Me.updateServers(dl(pt))},async disableTokens(pt){return await Promise.resolve(void 0)},async dumpData(){return{walletId:Bt.id.split(" - ")[0],walletType:Bt.type,data:{walletInfo:{pluginType:We.pluginId,privateKeyFormat:Jt,walletFormats:lr},metadataState:gt.state,storageState:await xt.dumpData(),pluginState:Me.dumpData()}}},async enableTokens(pt){return await Promise.resolve(void 0)},getDisplayPrivateSeed(pt){const Tt=yt(pt);return Tt==null?null:Tt.format==="bip32"?Hd.from(Tt.seed,"base64").toString("hex"):Tt.seed},getDisplayPublicSeed(){const pt=Yt.publicKeys;return Object.values(pt).filter(Tt=>Tt!=null).join(`
|
|
80
80
|
`)},async getFreshAddress(pt){const{forceIndex:Tt}=pt;return await Ct.getFreshAddress({forceIndex:Tt})},getNumTransactions(pt){return xt.numTransactions()},async getPaymentProtocolInfo(pt){return await zv(pt,We.currencyCode,Fe.fetch)},async getTransactions(pt){const Tt=vl(await xt.fetchTransactions({options:pt}));return await Promise.all(Tt.map(async Zt=>await Ta({walletId:Bt.id,tx:Zt,walletTools:Dt,dataLayer:xt,pluginInfo:C})))},async isAddressUsed(pt){const Tt=Dt.addressToScriptPubkey(pt),Zt=await xt.fetchAddress(Tt);if(Zt==null)throw new Error("Address not found in wallet");return Zt.used},async makeSpend(pt){var Tt,Zt,Kt,qt,Vt,ir,sr;const wr=_t!=null?_t:xt;_t!=null&&(_t=void 0),pt=Qp(pt,We);const{memos:Ar=[],spendTargets:Rr}=pt,qr=xp((Tt=pt.otherParams)!=null?Tt:{}),Cr=(Zt=qr.txOptions)!=null?Zt:{},{memoIndex:Hr,outputSort:Dn,utxoSourceAddress:Ai,forceChangeAddress:Ti}=qr;let dn;if(Ai!=null&&(dn=Dt.addressToScriptPubkey(Ai)),Cr.CPFP==null&&Rr.length<1)throw new Error("Need to provide Spend Targets");const fn=Rr.reduce((jr,{nativeAmount:bn})=>ue.add(jr,bn!=null?bn:"0"),"0"),yn=(Kt=Cr.utxos)!=null?Kt:vl(await wr.fetchUtxos({scriptPubkey:dn,utxoIds:[]}));if(ue.gt(fn,`${Lv(yn)}`)||yn.length===0)throw new Mp({tokenId:null});let pn=[];const qn=[];for(const jr of Rr){if(jr.publicAddress==null||jr.nativeAmount==null)throw new Error("Invalid spend target");if(((qt=jr.otherParams)==null?void 0:qt.script)!=null){const{script:bn}=jr.otherParams;if(bn.type==="replayProtection"){const{publicAddress:ro}=await Ct.deriveScriptAddress(bn.type);pn.push({address:ro,value:jr.nativeAmount==null?void 0:parseInt(jr.nativeAmount)})}}else{if(jr.publicAddress!=null){const bn=Dt.addressToScriptPubkey(jr.publicAddress);await wr.fetchAddress(bn)!=null&&qn.push(jr.publicAddress)}pn.push({address:jr.publicAddress,value:jr.nativeAmount==null?void 0:parseInt(jr.nativeAmount)})}}if(pn.length+Ar.length<1)throw new Error("Need to provide Spend Targets");const tu=await Ct.getFreshAddress({branch:1}),Fr=(Vt=Ti!=null?Ti:tu.segwitAddress)!=null?Vt:tu.publicAddress,zr=parseInt(await Gt.getRate(pt));let An;if(Cr.CPFP!=null){const[jr]=await wr.fetchTransactions({txId:Cr.CPFP});if(jr==null)throw new Error("transaction not found");const bn=[];for(const ro of jr.ourOuts){const[Ba]=await wr.fetchUtxos({utxoIds:[ro]});Ba!=null&&bn.push(Ba)}An=bn.reduce((ro,Ba)=>ue.gt(ro.value,Ba.value)?ro:Ba),pn=[]}const eo=We.canReplaceByFee===!0?(sr=(ir=pt.enableRbf)!=null?ir:qr.enableRbf)!=null?sr:!0:!1;Be.warn(`spend: Using fee rate ${zr} sat/B`);const to=Cr.subtractFee!=null?Cr.subtractFee:!1,Pi=ka({utxos:yn,forceUseUtxo:An!=null?[An]:[],targets:pn,memos:Ar,feeRate:zr,coin:ut.name,currencyCode:We.currencyCode,enableRbf:eo,freshChangeAddress:Fr,subtractFee:to,log:Be,memoIndex:Hr,outputSort:Dn});Pi.changeUsed&&qn.push(Fr);let Oa="0";const ep=Pi.inputs.map(jr=>jr.scriptPubkey.toString("hex"));for(const jr of Pi.outputs){const bn=jr.scriptPubkey.toString("hex");await wr.fetchAddress(bn)==null?Oa=ue.sub(Oa,jr.value.toString()):ep.push(bn)}const e0=Pi.fee.toString();Oa=ue.sub(Oa,e0);const Wm={unsignedTx:Pi.hex,psbt:{base64:Pi.psbtBase64,inputs:Pi.inputs,outputs:Pi.outputs},edgeSpendInfo:pt,ourScriptPubkeys:ep};return{blockHeight:0,currencyCode:We.currencyCode,date:_a(),feeRateUsed:{satPerVByte:zr},isSend:!0,memos:Ar,nativeAmount:Oa,networkFee:e0,networkFees:[{tokenId:null,nativeAmount:e0}],otherParams:Wm,ourReceiveAddresses:qn,signedTx:"",tokenId:null,txid:"",walletId:Bt.id}},async resyncBlockchain(){await jt.killEngine(),await xt.clearAll(),await Me.clearCache(),await gt.clear(),await Gt.clearCache(),await Me.refreshServers(),await jt.startEngine()},async saveTx(pt){var Tt,Zt;const Kt=(Tt=pt.otherParams)==null?void 0:Tt.replacedTxid;if(Kt!=null){const[ir]=await xt.fetchTransactions({txId:Kt});if(ir!=null){ir.blockHeight=-1,await xt.saveTransaction({tx:ir});const sr=await Ta({dataLayer:xt,pluginInfo:C,tx:ir,walletId:Bt.id,walletTools:Dt});de.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:sr}])}}const qt=wv(pt);await xt.saveTransaction({tx:qt,scriptPubkeys:(Zt=pt.otherParams)==null?void 0:Zt.ourScriptPubkeys});const Vt=await $v(Ve,xt,qt);await Ct.processUtxos(Vt)},async signMessage(pt,Tt,Zt){const Kt=bp(Zt.otherParams),{publicAddress:qt}=Kt,Vt=Dt.addressToScriptPubkey(qt),ir=await xt.fetchAddress(Vt);if((ir==null?void 0:ir.path)==null)throw new Error("Missing data-layer address to sign with");const sr=yt(Tt);if(sr==null)throw new Error("Cannot sign a message for a read-only wallet");const wr=await nd({privateKey:sr,walletLocalEncryptedDisklet:ze,coin:ut.name});return await Dt.signMessageBase64({path:ir==null?void 0:ir.path,message:pt,xprivKeys:wr})},async signTx(pt,Tt){var Zt,Kt,qt;const Vt=pt.otherParams;if(Vt==null)throw new Error("Invalid transaction data");const{psbt:ir,edgeSpendInfo:sr}=Vt;if(ir==null)throw new Error("Invalid transaction data");const wr=yt(Tt);if(wr==null)throw new Error("Cannot sign a transaction for a read-only wallet");const Ar=await nd({privateKey:wr,walletLocalEncryptedDisklet:ze,coin:ut.name}),Rr=await(async()=>(sr==null?void 0:sr.privateKeys)!=null?sr.privateKeys.map(Hr=>Dt.getPrivateKeyEncodingFromWif(Hr)):await Promise.all(ir.inputs.map(async({hash:Hr,index:Dn})=>{const Ai=Hd.from(Hr).reverse().toString("hex"),[Ti]=await xt.fetchTransactions({txId:Ai});if(Ti==null)throw new Error("Unable to find previous transaction data for input");const dn=Ti.outputs.find(qn=>qn.n===Dn);if(dn==null)throw new Error("Unable to find prevout in transaction");const{scriptPubkey:fn}=dn,yn=await xt.fetchAddress(fn);if(yn==null)throw new Error(`Address for scriptPubkey '${fn}' not found`);if(yn.path==null)throw new Error(`Invalid scriptPubkey ${yn.scriptPubkey}; Missing path`);return{hex:Dt.getPrivateKey({path:yn.path,xprivKeys:Ar}),compressed:!0}})))(),qr=await ll({coin:ut.name,feeInfo:Gt.feeInfo,privateKeyEncodings:Rr,psbtBase64:ir.base64});pt.txid=qr.id,pt.signedTx=qr.hex;const{paymentProtocolInfo:Cr}=(qt=(Kt=(Zt=pt.otherParams)==null?void 0:Zt.edgeSpendInfo)==null?void 0:Kt.otherParams)!=null?qt:{};if(Cr!=null){const Hr=jv(pt.signedTx,pt.currencyCode);pt.otherParams==null&&(pt.otherParams={}),Object.assign(pt.otherParams,{paymentProtocolInfo:_i(Ii({},Cr),{payment:Hr})})}return pt.date=_a(),pt},async sweepPrivateKeys(pt){var Tt;const Zt=Ve.formats,Kt={id:Bt.id,type:Bt.type,keys:{privateKeyFormat:Bt.keys.privateKeyFormat,walletFormats:Zt,publicKey:{publicKeys:{}}}},qt=(Tt=pt.privateKeys)!=null?Tt:[];if(qt.length<1)throw new Error("No private keys given");const Vt=(0,pl.cQ)(),ir=(0,pl.cQ)(),sr=new Fh,wr={disklet:Vt,emitter:sr,log:Be},Ar=await Lh(wr),Rr=await qh(wr),qr=Ud({pluginInfo:C,publicKey:Kt.keys.publicKey}),Cr=new Promise((Dn,Ai)=>{sr.on(Ur.ADDRESSES_CHECKED,async Ti=>{if(Ti===1)try{await Hr.stop();const dn=await Rr.fetchUtxos({utxoIds:[]});if(dn===null||dn.length<1)throw new Error("Private key has no funds");const fn=await this.getFreshAddress({tokenId:null}),yn=Ar.state.balance,pn={utxos:dn,subtractFee:!0};pt.spendTargets=[{publicAddress:fn.publicAddress,nativeAmount:yn}],pt.otherParams=_i(Ii({},pt.otherParams),{txOptions:pn}),_t=Rr;const qn=await jt.makeSpend(pt);Dn(qn)}catch(dn){Ai(dn)}})}),Hr=Cd(_i(Ii({},P),{dataLayer:Rr,emitter:sr,engineOptions:_i(Ii({},P.engineOptions),{walletLocalDisklet:Vt,walletLocalEncryptedDisklet:ir}),pluginInfo:_i(Ii({},C),{engineInfo:_i(Ii({},Ve),{gapLimit:0})}),seenTxCheckpoint:()=>"0",walletTools:qr,walletInfo:Kt}));return await Hr.loadWifs(qt),await Hr.start(),await Cr},otherMethods:{}};return jt}var Kd=gr(8287).Buffer;function _m(P,C){const{currencyInfo:K,engineInfo:de,coinInfo:ke}=C,Fe=Wl(ke.name,ke.coinType),Me=B(Fe),Oe=Jh(C);return{async checkPublicKey(Be){const We=x(Yh)(Be);if(We==null)return!1;const Ve=$h(We);return Vf(de,Ve).every(st=>We.publicKeys[st]!=null)},async createPrivateKey(Be,We){var Ve,ut,st,bt;const Bt={imported:!1,seed:ce.VF(Kd.from(P.random(32))),format:(ut=(Ve=We==null?void 0:We.format)!=null?Ve:de.formats[0])!=null?ut:"bip44",coinType:(bt=(st=We==null?void 0:We.coinType)!=null?st:ke.coinType)!=null?bt:0};return Me(Bt)},async importPrivateKey(Be,We){var Ve,ut,st,bt,yt;if(!ce.JB(Be))throw Kd.from(Be,"base64").length===32?new Error("Import for Airbitz seeds is unsupported."):new Error("Invalid mnemonic");const Jt={imported:!0,seed:Be,format:(st=(ut=We==null?void 0:We.format)!=null?ut:(Ve=de.formats)==null?void 0:Ve[0])!=null?st:"bip44",coinType:(yt=(bt=We==null?void 0:We.coinType)!=null?bt:ke.coinType)!=null?yt:0};return Me(Jt)},async derivePublicKey(Be){return Oe(Be).keys.publicKey},async parseUri(Be){const We=Be.toLocaleLowerCase().startsWith(`${ke.name}://`);We&&(Be=Be.replace("//",""));const Ve=Xl()(Be,{},!0),ut=Ve.protocol.replace(":","").toLowerCase();if(ut!==""&&ut!==K.pluginId&&ut!==de.uriPrefix&&ut!=="pay")throw new Error("InvalidUriError");const{pathname:st,query:bt}=Ve;if(st===""&&bt.r==null)throw new Error("InvalidUriError");const yt={};if(st!==""){const Yt=Nv({pathname:Ve.pathname,coin:ke.name});if(Yt==null)throw new Error("InvalidUriError");Object.assign(yt,Yt)}const Bt={};bt.label!=null&&(Bt.name=bt.label),bt.message!=null&&(Bt.notes=bt.message),bt.category!=null&&(Bt.category=bt.category),bt.r!=null&&(yt.paymentProtocolUrl=bt.r),We&&(Bt.gateway=!0),Object.assign(yt,{metadata:Bt});const Jt=K.denominations.find(({name:Yt})=>Yt===K.currencyCode);if(Jt!=null&&bt.amount!=null){const{multiplier:Yt="1"}=Jt,lr=ue.mul(bt.amount,Yt.toString());yt.currencyCode=K.currencyCode,yt.nativeAmount=ue.toFixed(lr,0,0)}return yt},async encodeUri(Be,We){var Ve,ut,st;let bt=Be.publicAddress;if(bt==="")throw new Error("InvalidPublicAddressError");((Ve=ke.prefixes.cashaddr)==null?void 0:Ve.some(Jt=>bt.startsWith(`${Jt}:`)))===!0&&(bt=bt.split(":")[1]);const yt=[];if(Be.nativeAmount!=null){const Jt=(ut=Be.currencyCode)!=null?ut:K.currencyCode,Yt=K.denominations.find(({name:Dt})=>Dt===Jt);if(Yt==null)throw new Error("InvalidDenominationError");const lr=ue.div(Be.nativeAmount,Yt.multiplier,8);yt.push(`amount=${lr}`)}Be.label!=null&&yt.push(`label=${Be.label}`),Be.message!=null&&yt.push(`message=${Be.message}`);const Bt=Be.metadata;return Bt!=null&&(Bt.name!=null&&yt.push(`label=${Bt.name}`),Bt.notes!=null&&yt.push(`message=${Bt.notes}`)),yt.length>0?fd.serialize({scheme:(st=de.uriPrefix)!=null?st:K.pluginId,path:bt,query:yt.join("&")}):bt},getSplittableTypes(Be){var We;const{keys:{format:Ve="bip32"}={}}=Be;return((We=de.forks)!=null?We:[]).filter(st=>zp(st).includes(Ve)).map(st=>`wallet:${st}`)}}}const Am=E({serverUrl:p,serverScore:m,responseTime:m,numResponseTimes:m}),Wd=E(Am),Tm=E({customServers:Wd,enableCustomServers:x(S,!1),internalServers:Wd}),To=999999999,eu=500,Jl=-100,Gd=-100,Vd=-10;class Pm{constructor(C){const{log:K,onDirtyServer:de=()=>{}}=C;this.log=K,this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now(),this.onDirtyServer=de}serverScoresLoad(C,K=[]){for(const de of K)if(C[de]===void 0){const ke={serverUrl:de,serverScore:0,responseTime:To,numResponseTimes:0};C[de]=ke}for(const de in C){const ke=C[de];let Fe=!1;for(const ze of K)if(ze===de){Fe=!0;break}let Me=ke.serverScore;Fe?Me<Vd&&(Me=Vd):Me>Gd&&(Me=Gd),this.scoresLastLoaded===0&&(Me=Math.min(Me,eu-100)),de.startsWith("ws")&&Me>0&&(Me=0,ke.responseTime=To),gd(de).length>0&&(Me=Me-(eu+Jl)),ke.serverScore=Me,this.onDirtyServer(de)}}clearServerScoreTimes(){this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now()}printServers(C){this.log("**** printServers ****");const K=[];for(const de in C)K.push(C[de]);K.sort((de,ke)=>ke.serverScore-de.serverScore);for(const de of K){const ke=de.serverScore.toString(),Fe=de.responseTime.toString(),Me=de.numResponseTimes.toString(),Oe=de.serverUrl;this.log(`ServerInfo ${ke} ${Fe}ms ${Me} ${Oe}`)}this.log("**************************")}serverScoreUp(C,K,de,ke=1){const Fe=C[K];Fe.serverScore+=ke,Fe.serverScore>eu&&(Fe.serverScore=eu),this.lastScoreUpTime=Date.now(),de!==0&&this.setResponseTime(C,K,de),this.log(`${K}: score UP to ${Fe.serverScore} ${de}ms`),this.onDirtyServer(K)}serverScoreDown(C,K,de=10){if(Date.now()-this.lastScoreUpTime>6e4){this.log(`${K}: score DOWN cancelled`);return}const Fe=C[K];Fe.serverScore-=de,Fe.serverScore<Jl&&(Fe.serverScore=Jl),Fe.numResponseTimes===0&&this.setResponseTime(C,K,9999),this.log(`${K}: score DOWN to ${Fe.serverScore}`),this.onDirtyServer(K)}setResponseTime(C,K,de){const ke=C[K];ke.numResponseTimes++;const Fe=ke.responseTime;let Me=0;To===Fe?Me=de:ke.numResponseTimes%10===0?Me=(Fe+de*4)/5:Me=(Fe+de)/2,ke.responseTime=Me,this.onDirtyServer(K)}getServers(C,K,de=[]){if(C==null||Object.keys(C).length===0)return[];let ke=[],Fe=[];for(const st in C){const bt=C[st];ke.push(bt),bt.responseTime===To&&bt.serverScore===0&&Fe.push(bt)}if(ke.length===0)return[];if(de.length>0){const st=bt=>{for(const yt of de)if(typeof yt=="string"&&bt.serverUrl.indexOf(yt)===0||yt instanceof RegExp&&yt.test(bt.serverUrl))return!0;return!1};ke=ke.filter(st),Fe=Fe.filter(st)}ke.sort((st,bt)=>bt.serverScore-st.serverScore);const Me=ke[0];let Oe=0,ze=0;for(let st=0;st<ke.length;st++){const bt=ke[st];bt.serverScore<Me.serverScore-100||bt.serverScore<5||bt.responseTime>=To||(Oe++,!(Oe<K)&&(Oe>=ke.length/2||(ze=st)))}let Be=ke.slice(0,ze);Be.sort((st,bt)=>st.responseTime-bt.responseTime),Be=Be.concat(ke.slice(ze));const We=[];let Ve=0,ut=0;for(const st of Be)if(Ve++,We.push(st.serverUrl),st.responseTime===To&&st.serverScore===0&&ut++,Ve>=K||Ve>=K/2&&ut===0&&Fe.length>=K-Ve)break;if(ut===0){for(const st of Fe)if(We.unshift(st.serverUrl),Ve++,Ve>=K)break}return We}removeServers(C,K){for(const de of K)delete C[de]}}var Om=Object.defineProperty,Bm=Object.defineProperties,Cm=Object.getOwnPropertyDescriptors,qd=Object.getOwnPropertySymbols,Rm=Object.prototype.hasOwnProperty,Fm=Object.prototype.propertyIsEnumerable,Xd=(P,C,K)=>C in P?Om(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,Nm=(P,C)=>{for(var K in C||(C={}))Rm.call(C,K)&&Xd(P,K,C[K]);if(qd)for(var K of qd(C))Fm.call(C,K)&&Xd(P,K,C[K]);return P},Lm=(P,C)=>Bm(P,Cm(C));const Ql="serverCache.json";function Dm(P){const{defaultSettings:C,log:K,pluginDisklet:de,pluginId:ke}=P;let Fe=[];const Me=t(de);let Oe={customServers:{},enableCustomServers:C.enableCustomServers,internalServers:{}},ze=!1;const Be=()=>{const yt=Oe.enableCustomServers?"customServers":"internalServers";return Oe[yt]},We=async()=>{ut.printServers(Be()),ze&&(await Me.setJson(Ql,Oe).catch(yt=>{K(`${ke} - ${JSON.stringify(yt.toString())}`)}),ze=!1,ut.scoresLastLoaded=Date.now(),K(`${ke} - Saved server cache`))},Ve=yt=>{ze=!0;for(const Bt of Fe)if(Bt.processedPercent===1&&Bt.getServerList().includes(yt)){We().catch(Yt=>{K(`${ke} - ${JSON.stringify(Yt.toString())}`)});return}},ut=new Pm({log:K,onDirtyServer:Ve}),st=async()=>{if(bt.infoPayload==null)return K.warn("info server list list empty"),[];const yt=Object.keys(bt.infoPayload.blockbookServers);return K.warn("info server list",yt),yt},bt={infoPayload:P.infoPayload,addEngine(yt){Fe.push(yt)},removeEngine(yt){Fe=Fe.filter(Bt=>Bt!==yt)},dumpData(){return{"pluginState.servers_":Be()}},async load(){try{Oe=Tm(await Me.getJson(Ql))}catch(yt){K(`${ke}: Failed to load server cache: ${JSON.stringify(yt)}`)}return bt.refreshServers().catch(yt=>{K(`${ke} - ${JSON.stringify(yt.toString())}`)}),this},serverScoreDown(yt){ut.serverScoreDown(Be(),yt)},serverScoreUp(yt,Bt){ut.serverScoreUp(Be(),yt,Bt)},async clearCache(){ut.clearServerScoreTimes(),ze=!0,await Me.delete(Ql)},getLocalServers(yt,Bt=[]){return ut.getServers(Be(),yt,Bt)},async refreshServers(yt){var Bt;const Jt=Be();let Yt;if(Oe.enableCustomServers)Yt=(Bt=yt!=null?yt:Object.keys(Oe.customServers))!=null?Bt:C.blockbookServers;else{const lr=await st();Yt=lr.length>0?lr:C.blockbookServers;const Dt=Object.keys(Jt).filter(Gt=>!Yt.includes(Gt));ut.removeServers(Jt,Dt)}ut.serverScoresLoad(Jt,Yt),await We();for(const lr of Fe)lr.refillServers()},async updateServers(yt){const Bt=()=>{const Dt=Object.keys(Oe.customServers),Gt=new Set(yt.blockbookServers),gt=new Set(Dt);if(Gt.size!==gt.size)return!1;for(const xt of yt.blockbookServers)if(!gt.has(xt))return!1;return!0};if(yt.enableCustomServers===Oe.enableCustomServers&&Bt())return;const Jt=yt.enableCustomServers&&yt.blockbookServers.length!==0,Yt=[],lr=[];for(const Dt of Fe)Yt.push(Dt),Dt.setServerList([]),lr.push(Dt.stop());await Promise.all(lr),ut.clearServerScoreTimes(),Oe=Lm(Nm({},Oe),{enableCustomServers:Jt,customServers:{}}),ze=!0,await We(),await bt.refreshServers(yt.blockbookServers);for(const Dt of Yt)await Dt.start()}};return bt}var Um=Object.defineProperty,Zd=Object.getOwnPropertySymbols,Hm=Object.prototype.hasOwnProperty,zm=Object.prototype.propertyIsEnumerable,Yd=(P,C,K)=>C in P?Um(P,C,{enumerable:!0,configurable:!0,writable:!0,value:K}):P[C]=K,jm=(P,C)=>{for(var K in C||(C={}))Hm.call(C,K)&&Yd(P,K,C[K]);if(Zd)for(var K of Zd(C))zm.call(C,K)&&Yd(P,K,C[K]);return P};let $d=!1;function Km(P,C){const{currencyInfo:K}=C,{initOptions:de,io:ke,log:Fe,nativeIo:Me,pluginDisklet:Oe}=P,ze=_m(ke,C),{defaultSettings:Be,pluginId:We,currencyCode:Ve}=K,ut=Dm({defaultSettings:dl(Be),currencyCode:Ve,infoPayload:x(Th)(P.infoPayload),io:ke,log:Fe,pluginId:We,pluginDisklet:Oe});if(!$d){const bt=Me["edge-currency-plugins"],yt=bt==null?void 0:bt.memletConfig;yt!=null?a(yt):a({maxMemoryUsage:50*1024*1024}),$d=!0}return{currencyInfo:K,async makeCurrencyEngine(bt,yt){const Bt=Hp(yt.callbacks),Jt={walletInfo:bt,pluginInfo:C,pluginDisklet:Oe,currencyTools:ze,initOptions:yp(de),io:ke,emitter:Bt,engineOptions:jm({},yt),pluginState:ut};return await Im(Jt)},async makeCurrencyTools(){return ut.load().catch(bt=>{throw bt}),ze},async updateInfoPayload(bt){try{ut.infoPayload=Th(bt)}catch{Fe.warn("invalid infoPayload",bt)}}}}var Jd;const Qd={};for(const P of So)Qd[P.currencyInfo.pluginId]=C=>Km(C,P);typeof window<"u"&&((Jd=window.addEdgeCorePlugins)==null||Jd.call(window,Qd));const Yy=null})()})();})();
|
|
@@ -375,13 +375,6 @@ var _constants = require('./constants');
|
|
|
375
375
|
uri => serverStatesCache[uri].blockbook != null
|
|
376
376
|
)
|
|
377
377
|
|
|
378
|
-
// If there are no blockbook instances, reject the promise
|
|
379
|
-
if (wsUris.length < 1) {
|
|
380
|
-
reject(new Error('Unexpected error. Missing WebSocket connections.'))
|
|
381
|
-
// Exit early if there are blockbook instances
|
|
382
|
-
return
|
|
383
|
-
}
|
|
384
|
-
|
|
385
378
|
// Determine if there are any connected blockbook instances
|
|
386
379
|
const isAnyBlockbookConnected = wsUris.some(
|
|
387
380
|
uri => serverStatesCache[uri].blockbook.isConnected
|
|
@@ -430,9 +423,7 @@ var _constants = require('./constants');
|
|
|
430
423
|
if (nowNodeUris.length < 1) {
|
|
431
424
|
// If no HTTP servers are available, and we had no connected blockbook
|
|
432
425
|
// instances, reject the promise with a message indicating no
|
|
433
|
-
// available connections.
|
|
434
|
-
// if we gotten to this point, but we just don't have any of those
|
|
435
|
-
// instances connected at this time.
|
|
426
|
+
// available connections.
|
|
436
427
|
reject(
|
|
437
428
|
new Error('No available connections. Check your internet signal.')
|
|
438
429
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "edge-currency-plugins",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.11",
|
|
4
4
|
"description": "Edge currency plugins to fetch and process wallet accounts, balances and transactions.",
|
|
5
5
|
"homepage": "https://edge.app/",
|
|
6
6
|
"repository": "https://github.com/EdgeApp/edge-currency-plugins",
|