@avalabs/avalanche-module 1.5.0 → 1.6.1

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.
package/dist/index.js CHANGED
@@ -9,11 +9,11 @@ import { TokenUnit } from '@avalabs/core-utils-sdk';
9
9
  import _r from 'crypto';
10
10
  import { utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
11
11
 
12
- var pr=Object.defineProperty;var dr=(e,t,r)=>t in e?pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(dr(e,typeof t!="symbol"?t+"":t,r),r),nt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(nt(e,t,"read from private field"),r?r.call(e):t.get(e)),V=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},R=(e,t,r,a)=>(nt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var ot={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a","avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd","avax:Rr9hnPVPxuUvrdCul-vjEsU1zmqKqRDo","avax:Sj7NVE3jXTbJvwFAiu7OEUo_8g8ctXMG","avax:imji8papUf2EhV3le337w1vgFauqkJg-","avax:8AJTpRj3SAqv1e80Mtl9em08LhvKEbkl","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function st({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),s=Math.min(1,Math.max(n*2,.3)),i=1+o,l=1+s;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*i))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*l))/100n},isFixedFee:!1}}var mt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,pt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function ye(e,t,r="tx"){return `${e}/${r}/${t}`}function F({amount:e,decimals:t}){return e===void 0?new E(0):new E(e/10**t)}function ut({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(m=>m.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(m=>m.addresses)||[]),l=fr({tx:e,isTestnet:o,networkToken:r,froms:s}),c=xr({tx:e,isTestnet:o,networkToken:r}),g=t.toLowerCase().startsWith("p-")?t.slice(2):t,p=s.has(g);return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:l.toString()}],gasUsed:c.toString(),explorerLink:ye(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function fr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(m=>m.asset.assetId===te(!!t)&&!m.addresses.some(d=>a.has(d))).reduce((m,d)=>m.add(d.asset.amount),new E(0)),i=e.value.find(m=>m.assetId===te(!!t))?.amount,l=s.gt(new E(0))?s:i?new E(i):new E(0)??new E(0),c=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,g=e.emittedUtxos.filter(m=>m.asset.assetId===te(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===c||e.txType==="ExportTx"&&m.consumedOnChainId!==c)).reduce((m,d)=>m.add(d.amount),new E(0)),p=o?l:n?g:e.amountStaked.length===0?dt(e.value,!!t):dt(e.amountStaked,!!t);return F({amount:p?.toNumber(),decimals:r.decimals})}function xr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===te(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function dt(e,t){return e.filter(r=>r.assetId===te(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function te(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function ht({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(x=>x.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(x=>x.addresses)||[]),l=t.toLowerCase().startsWith("x-")?t.slice(2):t,c=["ImportTx","ExportTx"].includes(e.txType),{amount:g,isSender:p}=Tr({tx:e,isTestnet:o,networkToken:r,chainAddress:l,isImportExport:c}),m=Ar({isTestnet:o,tx:e,networkToken:r}),d=c?g.toString():p?g.minus(m).toString():g.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:d}],gasUsed:m.toString(),explorerLink:ye(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let c=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,g=e.emittedUtxos.filter(p=>p.asset.assetId===ae(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===c||e.txType==="ExportTx"&&p.consumedOnChainId!==c)).reduce((p,m)=>p.add(m.asset.amount),new E(0));return {amount:F({amount:g.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(a)).reduce((c,g)=>c.add(g.asset.amount),new E(0)),s=e.emittedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(a)).reduce((c,g)=>c.add(g.asset.amount),new E(0)),i=o.gte(s),l=i?o.minus(s):s.minus(o);return {amount:F({amount:l.toNumber(),decimals:r.decimals}),isSender:i}}function Ar({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ae(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),n=t.amountCreated.filter(s=>s.assetId===ae(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function ae(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var xt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:s,explorerUrl:i,chainId:l}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let g=a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Ir(e),network:g,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return mt(p)&&(m=p.transactions.map(d=>ut({tx:d,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:l}))),pt(p)&&(m=p.transactions.map(d=>ht({tx:d,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:l}))),{transactions:m,nextPageToken:p.nextPageToken}},Ir=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Sr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Dr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Tt=e=>{switch(e){case Environment.PRODUCTION:return Sr;case Environment.DEV:return Dr}};var ve=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Ie=class{constructor({glacierApiUrl:t,headers:r}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(r){throw r instanceof ve&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof ve&&this.setGlacierToUnhealthy(),r}}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=ne.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Pr(n);try{let l=await e(o);if(t(l))return l}catch(l){s=l;}n=a(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},ne=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Pr(e){return new Promise(t=>setTimeout(t,e))}var Be=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:ne.constant(1),isSuccess:t=>t?.status?.error_code!==429});function At(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function we(e){let t,r=0;for(t=0;t<e.length;t++){let a=At(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function oe(e,t){let r=await fetch(...e);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let a=await r.json();return t.parse(a)}var ie=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return oe([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:r,...a}=t,n=new URLSearchParams(a);return oe([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var It=getBasicCoingeckoHttp(),M,W,ce=class{constructor({storage:t,proxyApiUrl:r}){V(this,M,void 0);V(this,W,void 0);U(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(s=>{a[n]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),a});R(this,M,t),R(this,W,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${we(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await Be(s=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{a=void 0;}return A(this,M)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${we(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(s),n)return n;try{n=await Be(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:i}));}catch(i){console.error(i),n=void 0;}return A(this,M)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new ie(A(this,W)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(It,{assetPlatformId:t,tokenAddresses:r,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD],marketCap:a=!1,vol24:n=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:l=!0}){if(i){let c=await new ie(A(this,W)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(c,r)}return simplePrice(It,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:l})}};M=new WeakMap,W=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),f=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var me=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t}),y=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var X=({name:e,version:t})=>{switch(e){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":e,"x-application-version":t};case AppName.OTHER:return}};var St=e=>Object.keys(e).includes("unlockedUnstaked"),Dt=e=>Object.keys(e).includes("locked");function Se(e){let t=Object.values(e).reduce(function(r,a){let n=a.reduce(function(o,s){let i=Number(s.amount);return o+i},0);return r+n},0);return BigInt(t)}var Pt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s})=>{let i={},l={unlockedUnstaked:e.unlockedUnstaked,unlockedStaked:e.unlockedStaked,pendingStaked:e.pendingStaked,lockedStaked:e.lockedStaked,lockedStakeable:e.lockedStakeable,lockedPlatform:e.lockedPlatform,atomicMemoryLocked:e.atomicMemoryLocked,atomicMemoryUnlocked:e.atomicMemoryUnlocked};for(let d in l){let x=l[d];if(!x||!x.length){i[d]=0n;continue}x.forEach(T=>{let b=(i[d]??0n)+BigInt(T.amount);i[d]=b;});}let c=new TokenUnit(i.unlockedUnstaked?i.unlockedUnstaked:0n,t.decimals,t.symbol),g=r?c.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(Se(e),t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:m,balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:m?.toFixed(2),available:c.toSubUnit(),availableInCurrency:g,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:g?.toFixed(2),utxos:e,balancePerType:{lockedStaked:i.lockedStaked,lockedStakeable:i.lockedStakeable,lockedPlatform:i.lockedPlatform,atomicMemoryLocked:i.atomicMemoryLocked,atomicMemoryUnlocked:i.atomicMemoryUnlocked,unlockedUnstaked:i.unlockedUnstaked,unlockedStaked:i.unlockedStaked,pendingStaked:i.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:s}};var Ct=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s})=>{let i={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let d in l){let x=l[d];if(!x||!x.length){i[d]=0n;continue}x.forEach(T=>{let b=(i[d]??0n)+BigInt(T.amount);i[d]=b;});}let c=new TokenUnit(i.unlocked?i.unlocked:0n,t.decimals,t.symbol),g=r?c.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(Se(e),t.decimals,t.symbol),m=r!==void 0?p.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:m?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:m?.toDisplay({fixedDp:2}),available:c.toSubUnit(),availableInCurrency:g,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:g?.toFixed(2),utxos:e,balancePerType:{unlocked:i.unlocked,locked:i.locked,atomicMemoryUnlocked:i.atomicMemoryUnlocked,atomicMemoryLocked:i.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var Rt=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let s=t.toLowerCase(),i=e[0]??"",l=r.networkToken,c=r.pricingProviders?.coingecko.nativeTokenId,g=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,p=r.isTestnet?Network.FUJI:Network.MAINNET,m=await a.getChainBalance({blockchainId:g,network:p,addresses:e.join(",")}).then(w=>w.balances),d=c?await n.getSimplePrice({coinIds:[c],currencies:[s]}):{},x=d?.[c??""]?.[s]?.price??void 0,T=d?.[c??""]?.[s]?.marketCap??void 0,P=d?.[c??""]?.[s]?.vol24??void 0,b=d?.[c??""]?.[s]?.change24??void 0,k;return St(m)?(k=Pt({balance:m,networkToken:l,priceInCurrency:x,marketCap:T,vol24:P,change24:b,coingeckoId:c??""}),{[i]:{[l.symbol]:k}}):Dt(m)?(k=Ct({balance:m,networkToken:l,priceInCurrency:x,marketCap:T,vol24:P,change24:b,coingeckoId:c??""}),{[i]:{[l.symbol]:k}}):Promise.reject("Incorrect type balance was returned from glacier")};function Bt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=_r.createHash("sha256").update(r).digest("base64");return "avax:"+Ur(a).substring(0,32)}var Ur=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Mt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),s;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(s,"X"),[NetworkVMType.PVM]:o.getAddress(s,"P")}};var Or=z$1.union([z$1.tuple([z$1.string()]).describe("message to sign"),z$1.tuple([z$1.string().describe("message to sign"),z$1.number().nonnegative().describe("account index")])]),Lt=e=>Or.safeParse(e);var Ut=async({request:e,network:t,approvalController:r})=>{let a=Lt(e.params);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let[n,o]=a.data,s=Buffer.from(n,"utf-8").toString("hex"),i={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:s,accountIndex:o},l={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},c=await r.requestApproval({request:e,displayData:l,signingData:i});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Hr=z$1.object({transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"]),externalIndices:z$1.number().array().optional(),internalIndices:z$1.number().array().optional(),utxos:z$1.string().array().optional()}),Ft=e=>Hr.safeParse(e);var Xt=({utxoHexes:e=[],vm:t})=>{try{let r=utils.getManagerForVM(t).getDefaultCodec();return e.map(a=>{let n=utils.hexToBuffer(a);return Utxo.fromBytes(n,r)[0]})}catch{return []}};var De=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator:case TxType.AddPermissionlessValidator:return e;case TxType.ConvertSubnetToL1:case TxType.SetL1ValidatorWeight:case TxType.DisableL1Validator:case TxType.IncreaseL1ValidatorBalance:case TxType.RegisterL1Validator:return {...e,chain:e.chain};case TxType.Export:return {...e,type:TxType.Export,chain:e.chain,destination:e.destination};case TxType.Import:return {...e,type:TxType.Import,chain:e.chain,source:e.source};case TxType.Base:return {...e,type:TxType.Base,chain:e.chain};default:return}};var Ht=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Add Delegator";case TxType.AddPermissionlessValidator:return "Add Validator";case TxType.Export:return "Approve Export";case TxType.Import:return "Approve Import";case TxType.Base:return "Approve Transaction";case TxType.AddSubnetValidator:return "Add Subnet Validator";case TxType.CreateChain:return "Approve Create Chain";case TxType.CreateSubnet:return "Approve Create Subnet";case TxType.RemoveSubnetValidator:return "Remove Subnet Validator";case TxType.ConvertSubnetToL1:return "Convert Subnet to L1";case TxType.DisableL1Validator:return "Disable L1 Validator";case TxType.IncreaseL1ValidatorBalance:return "Increase L1 Validator Balance";case TxType.RegisterL1Validator:return "Register L1 Validator";case TxType.SetL1ValidatorWeight:return "Set L1 Validator Weight";default:return "Sign Message"}};var Ee=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await I({isTestnet:a});return e.map(s=>Avalanche.getAddressFromXpub(n,s,o,t,r))};var Me=e=>e.type===TxType.AddPermissionlessDelegator,Le=e=>e.type===TxType.AddPermissionlessValidator,_e=e=>e.type===TxType.Export,Ue=e=>e.type===TxType.Import,$r=e=>e.type===TxType.Base,Fe=e=>e.type===TxType.AddSubnetValidator,jr=e=>e.type===TxType.CreateChain,qr=e=>e.type===TxType.CreateSubnet,Oe=e=>e.type===TxType.RemoveSubnetValidator,Gt=e=>e.type===TxType.ConvertSubnetToL1,Wt=e=>e.type===TxType.DisableL1Validator,$t=e=>e.type===TxType.IncreaseL1ValidatorBalance,jt=e=>e.type===TxType.RegisterL1Validator,qt=e=>e.type===TxType.SetL1ValidatorWeight,To=e=>Me(e)||Le(e)||Fe(e)||Oe(e),Ao=e=>_e(e)||Ue(e),Jt=e=>$r(e),Kt=e=>jr(e),zt=e=>qr(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});function ke(e){return e===Avalanche.MainnetContext.pBlockchainID}var Xe=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:l}=e,c=[y("Node ID",n),ke(l)?f("Subnet ID","Primary Network"):y("Subnet ID",l),u("Stake Amount",i,9,t),N("Start Date",o),N("End Date",s)];return r.push({title:"Staking Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:l,subnetID:c,signature:g,publicKey:p}=e,m=[y("Node ID",n),ke(c)?f("Subnet ID","Primary Network"):y("Subnet ID",c)];return p&&g&&m.push(y("Public Key",p),y("Proof",g)),m.push(u("Stake Amount",l,9,t),f("Delegation Fee",`${o/1e4} %`),N("Start Date",s),N("End Date",i)),r.push({title:"Staking Details",items:m}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,l=[y("Subnet ID",i),y("Node ID",n),N("Start Date",o),N("End Date",s)];return r.push({title:"Staking Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,l=[y("Subnet ID",s),y("Chain ID",n),me("Manager Address",o)];return r.push({title:"L1 Details",items:l}),i.forEach(({balance:c,stake:g,nodeId:p,remainingBalanceOwners:m,deactivationOwners:d},x)=>{let T=[y("Node ID",p),u("Balance",c,9,t),u("Stake",g,9,t)];d.length>0&&T.push(f(`${d.length>1?"Owners":"Owner"} Able to Deactivate`,d.join(`
12
+ var pr=Object.defineProperty;var dr=(e,t,r)=>t in e?pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(dr(e,typeof t!="symbol"?t+"":t,r),r),ot=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(ot(e,t,"read from private field"),r?r.call(e):t.get(e)),V=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},R=(e,t,r,a)=>(ot(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var it={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a","avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd","avax:Rr9hnPVPxuUvrdCul-vjEsU1zmqKqRDo","avax:Sj7NVE3jXTbJvwFAiu7OEUo_8g8ctXMG","avax:imji8papUf2EhV3le337w1vgFauqkJg-","avax:8AJTpRj3SAqv1e80Mtl9em08LhvKEbkl","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function ct({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),s=Math.min(1,Math.max(n*2,.3)),i=1+o,l=1+s;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*i))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*l))/100n},isFixedFee:!1}}var pt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,dt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function ye(e,t,r="tx"){return `${e}/${r}/${t}`}function F({amount:e,decimals:t}){return e===void 0?new E(0):new E(e/10**t)}function ht({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(m=>m.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(m=>m.addresses)||[]),l=fr({tx:e,isTestnet:o,networkToken:r,froms:s}),c=xr({tx:e,isTestnet:o,networkToken:r}),g=t.toLowerCase().startsWith("p-")?t.slice(2):t,p=s.has(g);return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:l.toString()}],gasUsed:c.toString(),explorerLink:ye(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function fr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(m=>m.asset.assetId===te(!!t)&&!m.addresses.some(d=>a.has(d))).reduce((m,d)=>m.add(d.asset.amount),new E(0)),i=e.value.find(m=>m.assetId===te(!!t))?.amount,l=s.gt(new E(0))?s:i?new E(i):new E(0)??new E(0),c=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,g=e.emittedUtxos.filter(m=>m.asset.assetId===te(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===c||e.txType==="ExportTx"&&m.consumedOnChainId!==c)).reduce((m,d)=>m.add(d.amount),new E(0)),p=o?l:n?g:e.amountStaked.length===0?ut(e.value,!!t):ut(e.amountStaked,!!t);return F({amount:p?.toNumber(),decimals:r.decimals})}function xr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===te(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function ut(e,t){return e.filter(r=>r.assetId===te(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function te(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function gt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(x=>x.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(x=>x.addresses)||[]),l=t.toLowerCase().startsWith("x-")?t.slice(2):t,c=["ImportTx","ExportTx"].includes(e.txType),{amount:g,isSender:p}=Tr({tx:e,isTestnet:o,networkToken:r,chainAddress:l,isImportExport:c}),m=Ar({isTestnet:o,tx:e,networkToken:r}),d=c?g.toString():p?g.minus(m).toString():g.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:d}],gasUsed:m.toString(),explorerLink:ye(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let c=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,g=e.emittedUtxos.filter(p=>p.asset.assetId===ae(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===c||e.txType==="ExportTx"&&p.consumedOnChainId!==c)).reduce((p,m)=>p.add(m.asset.amount),new E(0));return {amount:F({amount:g.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(a)).reduce((c,g)=>c.add(g.asset.amount),new E(0)),s=e.emittedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(a)).reduce((c,g)=>c.add(g.asset.amount),new E(0)),i=o.gte(s),l=i?o.minus(s):s.minus(o);return {amount:F({amount:l.toNumber(),decimals:r.decimals}),isSender:i}}function Ar({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ae(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),n=t.amountCreated.filter(s=>s.assetId===ae(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function ae(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var yt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:s,explorerUrl:i,chainId:l}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let g=a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Ir(e),network:g,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return pt(p)&&(m=p.transactions.map(d=>ht({tx:d,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:l}))),dt(p)&&(m=p.transactions.map(d=>gt({tx:d,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:l}))),{transactions:m,nextPageToken:p.nextPageToken}},Ir=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Sr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Dr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},At=e=>{switch(e){case Environment.PRODUCTION:return Sr;case Environment.DEV:return Dr}};var ve=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Ie=class{constructor({glacierApiUrl:t,headers:r}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(r){throw r instanceof ve&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof ve&&this.setGlacierToUnhealthy(),r}}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=ne.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Pr(n);try{let l=await e(o);if(t(l))return l}catch(l){s=l;}n=a(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},ne=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Pr(e){return new Promise(t=>setTimeout(t,e))}var Be=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:ne.constant(1),isSuccess:t=>t?.status?.error_code!==429});function vt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function we(e){let t,r=0;for(t=0;t<e.length;t++){let a=vt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function oe(e,t){let r=await fetch(...e);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let a=await r.json();return t.parse(a)}var ie=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return oe([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:r,...a}=t,n=new URLSearchParams(a);return oe([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var St=getBasicCoingeckoHttp(),M,W,ce=class{constructor({storage:t,proxyApiUrl:r}){V(this,M,void 0);V(this,W,void 0);U(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(s=>{a[n]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),a});R(this,M,t),R(this,W,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${we(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await Be(s=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{a=void 0;}return A(this,M)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${we(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(s),n)return n;try{n=await Be(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:i}));}catch(i){console.error(i),n=void 0;}return A(this,M)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new ie(A(this,W)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(St,{assetPlatformId:t,tokenAddresses:r,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD],marketCap:a=!1,vol24:n=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:l=!0}){if(i){let c=await new ie(A(this,W)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(c,r)}return simplePrice(St,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:l})}};M=new WeakMap,W=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),f=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var me=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t}),y=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var X=({name:e,version:t})=>{switch(e){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":e,"x-application-version":t};case AppName.OTHER:return}};var Dt=e=>Object.keys(e).includes("unlockedUnstaked"),kt=e=>Object.keys(e).includes("locked");function Se(e){let t=Object.values(e).reduce(function(r,a){let n=a.reduce(function(o,s){let i=Number(s.amount);return o+i},0);return r+n},0);return BigInt(t)}var bt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s})=>{let i={},l={unlockedUnstaked:e.unlockedUnstaked,unlockedStaked:e.unlockedStaked,pendingStaked:e.pendingStaked,lockedStaked:e.lockedStaked,lockedStakeable:e.lockedStakeable,lockedPlatform:e.lockedPlatform,atomicMemoryLocked:e.atomicMemoryLocked,atomicMemoryUnlocked:e.atomicMemoryUnlocked};for(let d in l){let x=l[d];if(!x||!x.length){i[d]=0n;continue}x.forEach(T=>{let b=(i[d]??0n)+BigInt(T.amount);i[d]=b;});}let c=new TokenUnit(i.unlockedUnstaked?i.unlockedUnstaked:0n,t.decimals,t.symbol),g=r?c.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(Se(e),t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:m,balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:m?.toFixed(2),available:c.toSubUnit(),availableInCurrency:g,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:g?.toFixed(2),utxos:e,balancePerType:{lockedStaked:i.lockedStaked,lockedStakeable:i.lockedStakeable,lockedPlatform:i.lockedPlatform,atomicMemoryLocked:i.atomicMemoryLocked,atomicMemoryUnlocked:i.atomicMemoryUnlocked,unlockedUnstaked:i.unlockedUnstaked,unlockedStaked:i.unlockedStaked,pendingStaked:i.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:s}};var Nt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s})=>{let i={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let d in l){let x=l[d];if(!x||!x.length){i[d]=0n;continue}x.forEach(T=>{let b=(i[d]??0n)+BigInt(T.amount);i[d]=b;});}let c=new TokenUnit(i.unlocked?i.unlocked:0n,t.decimals,t.symbol),g=r?c.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(Se(e),t.decimals,t.symbol),m=r!==void 0?p.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:m?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:m?.toDisplay({fixedDp:2}),available:c.toSubUnit(),availableInCurrency:g,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:g?.toFixed(2),utxos:e,balancePerType:{unlocked:i.unlocked,locked:i.locked,atomicMemoryUnlocked:i.atomicMemoryUnlocked,atomicMemoryLocked:i.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var Bt=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let s=t.toLowerCase(),i=e[0]??"",l=r.networkToken,c=r.pricingProviders?.coingecko.nativeTokenId,g=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,p=r.isTestnet?Network.FUJI:Network.MAINNET,m=await a.getChainBalance({blockchainId:g,network:p,addresses:e.join(",")}).then(w=>w.balances),d=c?await n.getSimplePrice({coinIds:[c],currencies:[s]}):{},x=d?.[c??""]?.[s]?.price??void 0,T=d?.[c??""]?.[s]?.marketCap??void 0,P=d?.[c??""]?.[s]?.vol24??void 0,b=d?.[c??""]?.[s]?.change24??void 0,k;return Dt(m)?(k=bt({balance:m,networkToken:l,priceInCurrency:x,marketCap:T,vol24:P,change24:b,coingeckoId:c??""}),{[i]:{[l.symbol]:k}}):kt(m)?(k=Nt({balance:m,networkToken:l,priceInCurrency:x,marketCap:T,vol24:P,change24:b,coingeckoId:c??""}),{[i]:{[l.symbol]:k}}):Promise.reject("Incorrect type balance was returned from glacier")};function wt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=_r.createHash("sha256").update(r).digest("base64");return "avax:"+Ur(a).substring(0,32)}var Ur=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Lt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),s;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(s,"X"),[NetworkVMType.PVM]:o.getAddress(s,"P")}};var Or=z$1.union([z$1.tuple([z$1.string()]).describe("message to sign"),z$1.tuple([z$1.string().describe("message to sign"),z$1.number().nonnegative().describe("account index")])]),_t=e=>Or.safeParse(e);var Ft=async({request:e,network:t,approvalController:r})=>{let a=_t(e.params);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let[n,o]=a.data,s=Buffer.from(n,"utf-8").toString("hex"),i={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:s,accountIndex:o},l={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},c=await r.requestApproval({request:e,displayData:l,signingData:i});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Hr=z$1.object({transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"]),externalIndices:z$1.number().array().optional(),internalIndices:z$1.number().array().optional(),utxos:z$1.string().array().optional()}),Ot=e=>Hr.safeParse(e);var Ht=({utxoHexes:e=[],vm:t})=>{try{let r=utils.getManagerForVM(t).getDefaultCodec();return e.map(a=>{let n=utils.hexToBuffer(a);return Utxo.fromBytes(n,r)[0]})}catch{return []}};var De=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator:case TxType.AddPermissionlessValidator:return e;case TxType.ConvertSubnetToL1:case TxType.SetL1ValidatorWeight:case TxType.DisableL1Validator:case TxType.IncreaseL1ValidatorBalance:case TxType.RegisterL1Validator:return {...e,chain:e.chain};case TxType.Export:return {...e,type:TxType.Export,chain:e.chain,destination:e.destination};case TxType.Import:return {...e,type:TxType.Import,chain:e.chain,source:e.source};case TxType.Base:return {...e,type:TxType.Base,chain:e.chain};default:return}};var Gt=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Add Delegator";case TxType.AddPermissionlessValidator:return "Add Validator";case TxType.Export:return "Approve Export";case TxType.Import:return "Approve Import";case TxType.Base:return "Approve Transaction";case TxType.AddSubnetValidator:return "Add Subnet Validator";case TxType.CreateChain:return "Approve Create Chain";case TxType.CreateSubnet:return "Approve Create Subnet";case TxType.RemoveSubnetValidator:return "Remove Subnet Validator";case TxType.ConvertSubnetToL1:return "Convert Subnet to L1";case TxType.DisableL1Validator:return "Disable L1 Validator";case TxType.IncreaseL1ValidatorBalance:return "Increase L1 Validator Balance";case TxType.RegisterL1Validator:return "Register L1 Validator";case TxType.SetL1ValidatorWeight:return "Set L1 Validator Weight";default:return "Sign Message"}};var Ee=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await I({isTestnet:a});return e.map(s=>Avalanche.getAddressFromXpub(n,s,o,t,r))};var Me=e=>e.type===TxType.AddPermissionlessDelegator,Le=e=>e.type===TxType.AddPermissionlessValidator,_e=e=>e.type===TxType.Export,Ue=e=>e.type===TxType.Import,$r=e=>e.type===TxType.Base,Fe=e=>e.type===TxType.AddSubnetValidator,jr=e=>e.type===TxType.CreateChain,qr=e=>e.type===TxType.CreateSubnet,Oe=e=>e.type===TxType.RemoveSubnetValidator,Wt=e=>e.type===TxType.ConvertSubnetToL1,$t=e=>e.type===TxType.DisableL1Validator,jt=e=>e.type===TxType.IncreaseL1ValidatorBalance,qt=e=>e.type===TxType.RegisterL1Validator,Jt=e=>e.type===TxType.SetL1ValidatorWeight,To=e=>Me(e)||Le(e)||Fe(e)||Oe(e),Ao=e=>_e(e)||Ue(e),Kt=e=>$r(e),zt=e=>jr(e),Yt=e=>qr(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});function ke(e){return e===Avalanche.MainnetContext.pBlockchainID}var Xe=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:l}=e,c=[y("Node ID",n),ke(l)?f("Subnet ID","Primary Network"):y("Subnet ID",l),u("Stake Amount",i,9,t),N("Start Date",o),N("End Date",s)];return r.push({title:"Staking Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:l,subnetID:c,signature:g,publicKey:p}=e,m=[y("Node ID",n),ke(c)?f("Subnet ID","Primary Network"):y("Subnet ID",c)];return p&&g&&m.push(y("Public Key",p),y("Proof",g)),m.push(u("Stake Amount",l,9,t),f("Delegation Fee",`${o/1e4} %`),N("Start Date",s),N("End Date",i)),r.push({title:"Staking Details",items:m}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,l=[y("Subnet ID",i),y("Node ID",n),N("Start Date",o),N("End Date",s)];return r.push({title:"Staking Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,l=[y("Subnet ID",s),y("Chain ID",n),me("Manager Address",o)];return r.push({title:"L1 Details",items:l}),i.forEach(({balance:c,stake:g,nodeId:p,remainingBalanceOwners:m,deactivationOwners:d},x)=>{let T=[y("Node ID",p),u("Balance",c,9,t),u("Stake",g,9,t)];d.length>0&&T.push(f(`${d.length>1?"Owners":"Owner"} Able to Deactivate`,d.join(`
13
13
  `),"vertical")),m.length>0&&T.push(f(`${m.length>1?"Owners":"Owner"} of the Remaining Balance`,m.join(`
14
14
  `),"vertical")),r.push({title:x===0?"Validators":void 0,items:T});}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var $e=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,destination:s,type:i}=e;return r.push({title:"Transaction Details",items:[f("Source Chain",`Avalanche ${B[o]}`),f("Target Chain",`Avalanche ${B[s]}`),f("Transaction Type",i?(i[0]||"").toUpperCase()+i.slice(1):""),u("Amount",n,9,t)]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var je=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,source:s,type:i}=e;return r.push({title:"Transaction Details",items:[f("Source Chain",`Avalanche ${B[s]}`),f("Destination Chain",`Avalanche ${B[o]}`),f("Transaction Type",i?(i[0]||"").toUpperCase()+i.slice(1):""),u("Amount",n,9,t)]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var qe=(e,t)=>{let r=[],{txFee:a,nodeID:n,subnetID:o}=e,s=[y("Node ID",n),y("Subnet ID",o)];return r.push({title:"Staking Details",items:s}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Je=(e,t)=>{let r=[],{txFee:a,chain:n,outputs:o,memo:s}=e;return r.push({title:"Chain Details",items:[f("Active chain",`Avalanche ${B[n]}`)]}),o.forEach((i,l)=>{let c=i.owners.flatMap(g=>[me("To",g),u("Amount",i.amount,9,t)]);i.owners.length>1&&c.push(f("Threshold",i.threshold.toString())),r.push({title:l===0?"Balance Change":void 0,items:c});}),n!==PVM&&s&&r.push({title:"Memo",items:[s]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ke=(e,t)=>{let r=[],{txFee:a,threshold:n,controlKeys:o}=e;return r.push({title:"Subnet Details",items:[f(o.length>1?"Owners":"Owner",o.join(`
15
- `),"vertical"),f("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ze=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,l=[f("Blockchain name",o,"vertical"),f("Blockchain ID",n,"vertical"),f("Virtual Machine ID",s,"vertical"),f("Genesis Data",i,"vertical")];return r.push({title:"Blockchain Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ye=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[y("Validation ID",n)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ze=(e,t)=>{let r=[],{txFee:a,balance:n,validationId:o}=e,s=[y("Validation ID",o),u("Increase by amount",n,9,t)];return r.push({title:"L1 Details",items:s}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Qe=(e,t)=>{let r=[],{txFee:a,balance:n}=e,o=[u("Initial balance",n,9,t)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Pe=(e,t)=>{if(Jt(e))return Je(e,t);if(_e(e))return $e(e,t);if(Ue(e))return je(e,t);if(zt(e))return Ke(e,t);if(Me(e))return Xe(e,t);if(Le(e))return He(e,t);if(Kt(e))return ze(e,t);if(Fe(e))return Ge(e,t);if(Oe(e))return qe(e,t);if(Gt(e))return We(e,t);if(Wt(e))return Ye(e,t);if($t(e))return Ze(e,t);if(jt(e))return Qe(e,t);if(qt(e))return et(e,t)};var Qr=process.env.GLACIER_API_KEY,Zt=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Ft(e.params);if(!o.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};try{let{transactionHex:s,chainAlias:i,externalIndices:l,internalIndices:c,utxos:g}=o.data,p=Avalanche.getVmByChainAlias(i),m=utils.hexToBuffer(s),d=t.isTestnet??!1,x=await I({isTestnet:d}),T=e.context?.currentAddress;if(!T||typeof T!="string")return {error:rpcErrors.invalidRequest("No active account found")};let P=Xt({utxoHexes:g,vm:p}),b=P.length?P:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:d?Network.FUJI:Network.MAINNET,url:a,token:Qr,headers:X(n)}),k;if(i==="C")k=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:m,vm:p,utxos:b,fromAddress:T});else {let ee=utils.unpackWithManager(p,m),C=e.context?.xpubXP;if(C!==void 0&&typeof C!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Ve=await Ee({indices:l??[],chainAlias:i,isChange:!1,isTestnet:d,xpubXP:C}),Re=await Ee({indices:c??[],chainAlias:i,isChange:!0,isTestnet:d,xpubXP:C}),lr=[...new Set([T,...Ve,...Re])].map(mr=>utils.parse(mr)[2]);k=await Avalanche.createAvalancheUnsignedTx({tx:ee,utxos:b,provider:x,fromAddressBytes:lr});}let w=await Avalanche.parseAvalancheTx(k,x,T),Ne=De(w),Z=Ht(w);if(w.type==="unknown"||Ne===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ge={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(k.toJSON()),data:w,vm:p,externalIndices:l,internalIndices:c},fe=Pe(Ne,t.networkToken.symbol);if(fe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let xe={title:Z,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:fe,networkFeeSelector:!1},Q=await r.requestApproval({request:e,displayData:xe,signingData:ge});if("error"in Q)return {error:Q.error};let _=await ea(x,Q,p);return ta({provider:x,txHash:_,vm:p,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:e.requestId}),{result:_}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},ea=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ta=async({provider:e,txHash:t,vm:r,onTransactionConfirmed:a,onTransactionReverted:n,requestId:o})=>{try{r===PVM?(await O({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:l=>["Committed","Dropped"].includes(l.status),maxRetries:7})).status==="Committed"?a(t,o):n(t,o):r===AVM?(await O({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:l=>["Accepted","Rejected"].includes(l.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o):(await O({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:l=>["Accepted","Dropped"].includes(l.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o);}catch(i){console.error(i),i instanceof Error&&i.message.startsWith("Max retry exceeded.")||n(t,o);}};var ra=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),Qt=e=>ra.safeParse(e);var oa=process.env.GLACIER_API_KEY,rr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Qt(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:s,chainAlias:i,from:l}=o.data,c=Avalanche.getVmByChainAlias(i),g=utils.hexToBuffer(s),p=t.isTestnet??!1,m=await I({isTestnet:p}),d=utils.unpackWithManager(c,g),x=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:p?Network.FUJI:Network.MAINNET,url:a,token:oa,headers:X(n)}),T;try{let C=utils.getManagerForVM(c).unpack(g,avaxSerial.SignedTx),Ve=await Avalanche.createAvalancheUnsignedTx({tx:d,utxos:x,provider:m,credentials:C.getCredentials()});T=d.getSigIndices().map((Re,at)=>new Credential(Avalanche.populateCredential(Re,{unsignedTx:Ve,credentialIndex:at})));}catch{T=d.getSigIndices().map(C=>new Credential(Avalanche.populateCredential(C)));}let P=await Avalanche.createAvalancheUnsignedTx({tx:d,provider:m,credentials:T,utxos:x}),b=utils.addressesFromBytes([utils.parse(l)[2]])[0];if(!b)return {error:rpcErrors.invalidRequest("Missing signer address")};let k=P.getSigIndicesForAddress(b);if(!k)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let w=P.getSigIndices();if(!k.some(([ee,C])=>w[ee]?.includes(C)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Z=await Avalanche.parseAvalancheTx(P,m,l),ge=De(Z);if(Z.type==="unknown"||ge===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let fe={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Z,vm:c,unsignedTxJson:JSON.stringify(P.toJSON()),ownSignatureIndices:k},xe=Pe(ge,t.networkToken.symbol);if(xe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Q={title:"Sign Transaction",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following transaction`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:xe},_=await r.requestApproval({request:e,displayData:Q,signingData:fe});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ar=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var Ce=({accountIndex:e,derivationPathType:t})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var sr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ar(e)?Ce(e).AVM:void 0,o=await I({isTestnet:!!r.isTestnet}),s=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),i=Buffer.from(s,"hex");return {[NetworkVMType.AVM]:o.getAddress(i,"X"),[NetworkVMType.PVM]:o.getAddress(i,"P")}};var K,he,z,L,Y,cr=class{constructor({approvalController:t,environment:r,appInfo:a}){V(this,K,void 0);V(this,he,void 0);V(this,z,void 0);V(this,L,void 0);V(this,Y,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=Tt(r);R(this,Y,a),R(this,K,new Ie({glacierApiUrl:n,headers:X(a)})),R(this,he,o),R(this,z,n),R(this,L,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Mt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new ce({storage:a,proxyApiUrl:A(this,he)});return Rt({addresses:t,currency:n,network:r,glacierService:A(this,K),tokenService:o})}getManifest(){let t=parseManifest(ot);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return st({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return xt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,K)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return Ce(t)}async deriveAddress(t){return sr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Ut({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return rr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return Zt({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return Bt({blockchainId:t,isTestnet:r})}};K=new WeakMap,he=new WeakMap,z=new WeakMap,L=new WeakMap,Y=new WeakMap;var Fs=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Os=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
15
+ `),"vertical"),f("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ze=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,l=[f("Blockchain name",o,"vertical"),f("Blockchain ID",n,"vertical"),f("Virtual Machine ID",s,"vertical"),f("Genesis Data",i,"vertical")];return r.push({title:"Blockchain Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ye=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[y("Validation ID",n)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ze=(e,t)=>{let r=[],{txFee:a,balance:n,validationId:o}=e,s=[y("Validation ID",o),u("Increase by amount",n,9,t)];return r.push({title:"L1 Details",items:s}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Qe=(e,t)=>{let r=[],{txFee:a,balance:n}=e,o=[u("Initial balance",n,9,t)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Pe=(e,t)=>{if(Kt(e))return Je(e,t);if(_e(e))return $e(e,t);if(Ue(e))return je(e,t);if(Yt(e))return Ke(e,t);if(Me(e))return Xe(e,t);if(Le(e))return He(e,t);if(zt(e))return ze(e,t);if(Fe(e))return Ge(e,t);if(Oe(e))return qe(e,t);if(Wt(e))return We(e,t);if($t(e))return Ye(e,t);if(jt(e))return Ze(e,t);if(qt(e))return Qe(e,t);if(Jt(e))return et(e,t)};var Qr=process.env.GLACIER_API_KEY,Qt=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Ot(e.params);if(!o.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};try{let{transactionHex:s,chainAlias:i,externalIndices:l,internalIndices:c,utxos:g}=o.data,p=Avalanche.getVmByChainAlias(i),m=utils.hexToBuffer(s),d=t.isTestnet??!1,x=await I({isTestnet:d}),T=e.context?.currentAddress;if(!T||typeof T!="string")return {error:rpcErrors.invalidRequest("No active account found")};let P=Ht({utxoHexes:g,vm:p}),b=P.length?P:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:d?Network.FUJI:Network.MAINNET,url:a,token:Qr,headers:X(n)}),k;if(i==="C")k=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:m,vm:p,utxos:b,fromAddress:T});else {let ee=utils.unpackWithManager(p,m),C=e.context?.xpubXP;if(C!==void 0&&typeof C!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Ve=await Ee({indices:l??[],chainAlias:i,isChange:!1,isTestnet:d,xpubXP:C}),Re=await Ee({indices:c??[],chainAlias:i,isChange:!0,isTestnet:d,xpubXP:C}),lr=[...new Set([T,...Ve,...Re])].map(mr=>utils.parse(mr)[2]);k=await Avalanche.createAvalancheUnsignedTx({tx:ee,utxos:b,provider:x,fromAddressBytes:lr});}let w=await Avalanche.parseAvalancheTx(k,x,T),Ne=De(w),Z=Gt(w);if(w.type==="unknown"||Ne===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ge={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(k.toJSON()),data:w,vm:p,externalIndices:l,internalIndices:c},fe=Pe(Ne,t.networkToken.symbol);if(fe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let xe={title:Z,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:fe,networkFeeSelector:!1},Q=await r.requestApproval({request:e,displayData:xe,signingData:ge});if("error"in Q)return {error:Q.error};let _=await ea(x,Q,p);return ta({provider:x,txHash:_,vm:p,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:e.requestId}),{result:_}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},ea=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ta=async({provider:e,txHash:t,vm:r,onTransactionConfirmed:a,onTransactionReverted:n,requestId:o})=>{try{r===PVM?(await O({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:l=>["Committed","Dropped"].includes(l.status),maxRetries:7})).status==="Committed"?a(t,o):n(t,o):r===AVM?(await O({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:l=>["Accepted","Rejected"].includes(l.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o):(await O({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:l=>["Accepted","Dropped"].includes(l.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o);}catch(i){console.error(i),i instanceof Error&&i.message.startsWith("Max retry exceeded.")||n(t,o);}};var ra=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),er=e=>ra.safeParse(e);var oa=process.env.GLACIER_API_KEY,ar=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=er(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:s,chainAlias:i,from:l}=o.data,c=Avalanche.getVmByChainAlias(i),g=utils.hexToBuffer(s),p=t.isTestnet??!1,m=await I({isTestnet:p}),d=utils.unpackWithManager(c,g),x=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:p?Network.FUJI:Network.MAINNET,url:a,token:oa,headers:X(n)}),T;try{let C=utils.getManagerForVM(c).unpack(g,avaxSerial.SignedTx),Ve=await Avalanche.createAvalancheUnsignedTx({tx:d,utxos:x,provider:m,credentials:C.getCredentials()});T=d.getSigIndices().map((Re,nt)=>new Credential(Avalanche.populateCredential(Re,{unsignedTx:Ve,credentialIndex:nt})));}catch{T=d.getSigIndices().map(C=>new Credential(Avalanche.populateCredential(C)));}let P=await Avalanche.createAvalancheUnsignedTx({tx:d,provider:m,credentials:T,utxos:x}),b=utils.addressesFromBytes([utils.parse(l)[2]])[0];if(!b)return {error:rpcErrors.invalidRequest("Missing signer address")};let k=P.getSigIndicesForAddress(b);if(!k)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let w=P.getSigIndices();if(!k.some(([ee,C])=>w[ee]?.includes(C)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Z=await Avalanche.parseAvalancheTx(P,m,l),ge=De(Z);if(Z.type==="unknown"||ge===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let fe={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Z,vm:c,unsignedTxJson:JSON.stringify(P.toJSON()),ownSignatureIndices:k},xe=Pe(ge,t.networkToken.symbol);if(xe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Q={title:"Sign Transaction",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following transaction`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:xe},_=await r.requestApproval({request:e,displayData:Q,signingData:fe});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var nr=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var Ce=({accountIndex:e,derivationPathType:t})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var sr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=nr(e)?Ce(e).AVM:void 0,o=await I({isTestnet:!!r.isTestnet}),s=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),i=Buffer.from(s,"hex");return {[NetworkVMType.CoreEth]:o.getAddress(i,"C"),[NetworkVMType.AVM]:o.getAddress(i,"X"),[NetworkVMType.PVM]:o.getAddress(i,"P")}};var K,he,z,L,Y,cr=class{constructor({approvalController:t,environment:r,appInfo:a}){V(this,K,void 0);V(this,he,void 0);V(this,z,void 0);V(this,L,void 0);V(this,Y,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=At(r);R(this,Y,a),R(this,K,new Ie({glacierApiUrl:n,headers:X(a)})),R(this,he,o),R(this,z,n),R(this,L,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Lt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new ce({storage:a,proxyApiUrl:A(this,he)});return Bt({addresses:t,currency:n,network:r,glacierService:A(this,K),tokenService:o})}getManifest(){let t=parseManifest(it);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return ct({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return yt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,K)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return Ce(t)}async deriveAddress(t){return sr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Ft({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return ar({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return Qt({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return wt({blockchainId:t,isTestnet:r})}};K=new WeakMap,he=new WeakMap,z=new WeakMap,L=new WeakMap,Y=new WeakMap;var Fs=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Os=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
16
16
 
17
- export { cr as AvalancheModule, Me as isAddPermissionlessDelegatorTx, Le as isAddPermissionlessValidatorTx, Fe as isAddSubnetValidatorTx, $r as isBaseTx, Kt as isBlockchainDetails, Jt as isChainDetails, Gt as isConvertSubnetToL1Tx, jr as isCreateChainTx, qr as isCreateSubnetTx, Wt as isDisableL1ValidatorTx, Ao as isExportImportTxDetails, _e as isExportTx, Ue as isImportTx, $t as isIncreaseL1ValidatorBalanceTx, jt as isRegisterL1ValidatorTx, Oe as isRemoveSubnetValidatorTx, qt as isSetL1ValidatorWeightTx, To as isStakingDetails, zt as isSubnetDetails, Os as isTokenWithBalanceAVM, Fs as isTokenWithBalancePVM };
17
+ export { cr as AvalancheModule, Me as isAddPermissionlessDelegatorTx, Le as isAddPermissionlessValidatorTx, Fe as isAddSubnetValidatorTx, $r as isBaseTx, zt as isBlockchainDetails, Kt as isChainDetails, Wt as isConvertSubnetToL1Tx, jr as isCreateChainTx, qr as isCreateSubnetTx, $t as isDisableL1ValidatorTx, Ao as isExportImportTxDetails, _e as isExportTx, Ue as isImportTx, jt as isIncreaseL1ValidatorBalanceTx, qt as isRegisterL1ValidatorTx, Oe as isRemoveSubnetValidatorTx, Jt as isSetL1ValidatorWeightTx, To as isStakingDetails, Yt as isSubnetDetails, Os as isTokenWithBalanceAVM, Fs as isTokenWithBalancePVM };
18
18
  //# sourceMappingURL=out.js.map
19
19
  //# sourceMappingURL=index.js.map