@avalabs/avalanche-module 1.10.0 → 1.10.2

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,10 +9,10 @@ import { TokenUnit } from '@avalabs/core-utils-sdk';
9
9
  import $r from 'crypto';
10
10
  import { utils, PVM, AVM, Utxo, evmSerial, avaxSerial, Credential } from '@avalabs/avalanchejs';
11
11
 
12
- var xr=Object.defineProperty;var yr=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(yr(e,typeof t!="symbol"?t+"":t,r),r),lt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(lt(e,t,"read from private field"),r?r.call(e):t.get(e)),R=(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);},w=(e,t,r,a)=>(lt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var pt={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 D=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function dt({isTestnet:e,vmName:t}){let r=await D({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,c=1+s;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*i))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*c))/100n},isFixedFee:!1}}var gt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ft=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function j(e,t,r="tx"){return `${e}/${r}/${t}`}function _({amount:e,decimals:t}){return e===void 0?new B(0):new B(e/10**t)}function yt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(d=>d.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(d=>d.addresses)||[]),c=Dr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=Ir({tx:e,isTestnet:o,networkToken:r}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,m=s.has(p);return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:m,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:j(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Dr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(d=>d.asset.assetId===oe(!!t)&&!d.addresses.some(g=>a.has(g))).reduce((d,g)=>d.add(g.asset.amount),new B(0)),i=e.value.find(d=>d.assetId===oe(!!t))?.amount,c=s.gt(new B(0))?s:i?new B(i):new B(0)??new B(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,p=e.emittedUtxos.filter(d=>d.asset.assetId===oe(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,g)=>d.add(g.amount),new B(0)),m=o?c:n?p:e.amountStaked.length===0?xt(e.value,!!t):xt(e.amountStaked,!!t);return _({amount:m?.toNumber(),decimals:r.decimals})}function Ir({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===oe(!!t)).reduce((n,o)=>n.add(o.amount),new B(0));return _({amount:a?.toNumber(),decimals:r.decimals})}function xt(e,t){return e.filter(r=>r.assetId===oe(t)).reduce((r,a)=>r.add(a.amount),new B(0))}function oe(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Tt({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)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:p,isSender:m}=kr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),d=Pr({isTestnet:o,tx:e,networkToken:r}),g=l?p.toString():m?p.minus(d).toString():p.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:m,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:g}],gasUsed:d.toString(),explorerLink:j(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function kr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,p=e.emittedUtxos.filter(m=>m.asset.assetId===ie(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===l||e.txType==="ExportTx"&&m.consumedOnChainId!==l)).reduce((m,d)=>m.add(d.asset.amount),new B(0));return {amount:_({amount:p.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===ie(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new B(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===ie(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new B(0)),i=o.gte(s),c=i?o.minus(s):s.minus(o);return {amount:_({amount:c.toNumber(),decimals:r.decimals}),isSender:i}}function Pr({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ie(!!e)).reduce((s,i)=>s.add(i.amount),new B(0)),n=t.amountCreated.filter(s=>s.assetId===ie(!!e)).reduce((s,i)=>s.add(i.amount),new B(0)),o=a.minus(n);return _({amount:o.toNumber(),decimals:r.decimals})}function ie(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Dt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:s,explorerUrl:i,chainId:c}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let p=a.isTestnet?Network.FUJI:Network.MAINNET,m=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Cr(e),network:p,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return gt(m)&&(d=m.transactions.map(g=>yt({tx:g,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),ft(m)&&(d=m.transactions.map(g=>Tt({tx:g,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:d,nextPageToken:m.nextPageToken}},Cr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Nr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Rr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},St=e=>{switch(e){case Environment.PRODUCTION:return Nr;case Environment.DEV:return Rr}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=q.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await wr(n);try{let c=await e(o);if(t(c))return c}catch(c){s=c;}n=a(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},q=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}static linearThenExponential(t,r){return a=>{if(a<t)return (a+1)*r;let n=a-t+1,o=t*r,s=2*r*(Math.pow(2,n)-1);return o+s}}};function wr(e){return new Promise(t=>setTimeout(t,e))}var Be=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:q.constant(1),isSuccess:t=>t?.status?.error_code!==429});function kt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Ee(e){let t,r=0;for(t=0;t<e.length;t++){let a=kt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function ce(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 le=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return ce([`${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 ce([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var bt=getBasicCoingeckoHttp(),E,K,me=class{constructor({storage:t,proxyApiUrl:r}){R(this,E,void 0);R(this,K,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});w(this,E,t),w(this,K,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Ee(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,E)?.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,E)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${Ee(t)}-${r}-${a}`}`;if(n=A(this,E)?.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,E)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new le(A(this,K)).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(bt,{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:c=!0}){if(i){let l=await new le(A(this,K)).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(l,r)}return simplePrice(bt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};E=new WeakMap,K=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 ue=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var F=({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 Ct=process.env.GLACIER_API_KEY;var X=()=>Ct;var Fr={rltoken:X()},he=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={...Fr,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var Ie=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Se=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},he);}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 Ie&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof Ie&&this.setGlacierToUnhealthy(),r}}};var Nt=e=>Object.keys(e).includes("unlockedUnstaked"),Rt=e=>Object.keys(e).includes("locked");function ke(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 Vt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s,avaxAssetId:i})=>{let c={},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 x in l){let y=l[x];if(!y||!y.length){c[x]=0n;continue}y.forEach(P=>{if(P.assetId!==i)return;let I=(c[x]??0n)+BigInt(P.amount);c[x]=I;});}let p=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(ke(e),t.decimals,t.symbol),g=r?d.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:g,balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:g?.toFixed(2),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{lockedStaked:c.lockedStaked,lockedStakeable:c.lockedStakeable,lockedPlatform:c.lockedPlatform,atomicMemoryLocked:c.atomicMemoryLocked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,unlockedUnstaked:c.unlockedUnstaked,unlockedStaked:c.unlockedStaked,pendingStaked:c.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:s}};var Et=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s,avaxAssetId:i})=>{let c={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let x in l){let y=l[x];if(!y||!y.length){c[x]=0n;continue}y.forEach(P=>{if(P.assetId!==i)return;let I=(c[x]??0n)+BigInt(P.amount);c[x]=I;});}let p=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(ke(e),t.decimals,t.symbol),g=r!==void 0?d.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:g?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:g?.toDisplay({fixedDp:2}),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var Ut=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await D({isTestnet:!!r.isTestnet});if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),c=e[0]??"",l=r.networkToken,p=r.pricingProviders?.coingecko.nativeTokenId,m=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=r.isTestnet?Network.FUJI:Network.MAINNET,g=await a.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(H=>H.balances),x=p?await n.getSimplePrice({coinIds:[p],currencies:[i]}):{},y=x?.[p??""]?.[i]?.price??void 0,P=x?.[p??""]?.[i]?.marketCap??void 0,C=x?.[p??""]?.[i]?.vol24??void 0,I=x?.[p??""]?.[i]?.change24??void 0,b;return Nt(g)?(b=Vt({balance:g,networkToken:l,priceInCurrency:y,marketCap:P,vol24:C,change24:I,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Rt(g)?(b=Et({balance:g,networkToken:l,priceInCurrency:y,marketCap:P,vol24:C,change24:I,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Promise.reject("Incorrect type balance was returned from glacier")};function _t({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=$r.createHash("sha256").update(r).digest("base64");return "avax:"+jr(a).substring(0,32)}var jr=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Xt=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 D({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 Kr=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),Ht=e=>Kr.safeParse(e);var Wt=async({request:e,network:t,approvalController:r})=>{let a=Ht(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},c={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} is requesting to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},l=await r.requestApproval({request:e,displayData:c,signingData:i});return "error"in l?{error:l.error}:"signedData"in l?{result:l.signedData}:{error:rpcErrors.internal("No signed data returned")}};var zr=z.object({transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),externalIndices:z.number().array().optional(),internalIndices:z.number().array().optional(),utxos:z.string().array().optional()}),$t=e=>zr.safeParse(e);var Pe=({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 be=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 qt=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Do you want to add this delegator?";case TxType.AddPermissionlessValidator:return "Do you want to add this validator?";case TxType.Export:return "Do you approve this export?";case TxType.Import:return "Do you approve this import?";case TxType.Base:return "Do you approve this transaction?";case TxType.AddSubnetValidator:return "Do you want to add this subnet validator?";case TxType.CreateChain:return "Do you want to create this chain?";case TxType.CreateSubnet:return "Do you want to create this subnet?";case TxType.RemoveSubnetValidator:return "Do you want to remove this subnet validator?";case TxType.ConvertSubnetToL1:return "Do you want to convert this subnet?";case TxType.DisableL1Validator:return "Do you want to disable this validator?";case TxType.IncreaseL1ValidatorBalance:return "Do you want to increase this validator balance?";case TxType.RegisterL1Validator:return "Do you want to register this validator?";case TxType.SetL1ValidatorWeight:return "Do you want to set this validator weight?";default:return "Sign Message"}};var Me=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await D({isTestnet:a});return e.map(s=>Avalanche.getAddressFromXpub(n,s,o,t,r))};var Le=e=>e.type===TxType.AddPermissionlessDelegator,Ue=e=>e.type===TxType.AddPermissionlessValidator,_e=e=>e.type===TxType.Export,Oe=e=>e.type===TxType.Import,Zr=e=>e.type===TxType.Base,Fe=e=>e.type===TxType.AddSubnetValidator,ea=e=>e.type===TxType.CreateChain,ta=e=>e.type===TxType.CreateSubnet,Xe=e=>e.type===TxType.RemoveSubnetValidator,Kt=e=>e.type===TxType.ConvertSubnetToL1,Jt=e=>e.type===TxType.DisableL1Validator,zt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Yt=e=>e.type===TxType.RegisterL1Validator,Qt=e=>e.type===TxType.SetL1ValidatorWeight,_o=e=>Le(e)||Ue(e)||Fe(e)||Xe(e),Oo=e=>_e(e)||Oe(e),Zt=e=>Zr(e),er=e=>ea(e),tr=e=>ta(e);var V=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(V||{});function Ce(e){return e===Avalanche.MainnetContext.pBlockchainID}var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:c}=e,l=[T("Node ID",n),Ce(c)?f("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",i,9,t),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 Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:c,subnetID:l,signature:p,publicKey:m}=e,d=[T("Node ID",n),Ce(l)?f("Subnet ID","Primary Network"):T("Subnet ID",l)];return m&&p&&d.push(T("Public Key",m),T("Proof",p)),d.push(u("Stake Amount",c,9,t),f("Delegation Fee",`${o/1e4} %`),N("Start Date",s),N("End Date",i)),r.push({title:"Staking Details",items:d}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,c=[T("Subnet ID",i),T("Node ID",n),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 $e=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),ue("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:p,nodeId:m,remainingBalanceOwners:d,deactivationOwners:g},x)=>{let y=[T("Node ID",m),u("Balance",l,9,t),u("Stake",p,9,t)];g.length>0&&y.push(f(`${g.length>1?"Owners":"Owner"} Able to Deactivate`,g.join(`
12
+ var xr=Object.defineProperty;var yr=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(yr(e,typeof t!="symbol"?t+"":t,r),r),lt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(lt(e,t,"read from private field"),r?r.call(e):t.get(e)),R=(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);},w=(e,t,r,a)=>(lt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var pt={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 D=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function dt({isTestnet:e,vmName:t}){let r=await D({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)),i=Math.min(1,Math.max(n*2,.3)),s=1+o,c=1+i;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*s))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*c))/100n},isFixedFee:!1}}var gt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ft=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function j(e,t,r="tx"){return `${e}/${r}/${t}`}function _({amount:e,decimals:t}){return e===void 0?new B(0):new B(e/10**t)}function yt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(d=>d.addresses)||[]),s=new Set(e.emittedUtxos.flatMap(d=>d.addresses)||[]),c=Dr({tx:e,isTestnet:o,networkToken:r,froms:i}),l=Ir({tx:e,isTestnet:o,networkToken:r}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,m=i.has(p);return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...s.values()].join(","),isSender:m,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:j(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Dr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",i=e.emittedUtxos.filter(d=>d.asset.assetId===oe(!!t)&&!d.addresses.some(g=>a.has(g))).reduce((d,g)=>d.add(g.asset.amount),new B(0)),s=e.value.find(d=>d.assetId===oe(!!t))?.amount,c=i.gt(new B(0))?i:s?new B(s):new B(0)??new B(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,p=e.emittedUtxos.filter(d=>d.asset.assetId===oe(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,g)=>d.add(g.amount),new B(0)),m=o?c:n?p:e.amountStaked.length===0?xt(e.value,!!t):xt(e.amountStaked,!!t);return _({amount:m?.toNumber(),decimals:r.decimals})}function Ir({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===oe(!!t)).reduce((n,o)=>n.add(o.amount),new B(0));return _({amount:a?.toNumber(),decimals:r.decimals})}function xt(e,t){return e.filter(r=>r.assetId===oe(t)).reduce((r,a)=>r.add(a.amount),new B(0))}function oe(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Tt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(x=>x.addresses)||[]),s=new Set(e.emittedUtxos.flatMap(x=>x.addresses)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:p,isSender:m}=kr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),d=Pr({isTestnet:o,tx:e,networkToken:r}),g=l?p.toString():m?p.minus(d).toString():p.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...s.values()].join(","),isSender:m,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:g}],gasUsed:d.toString(),explorerLink:j(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function kr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,p=e.emittedUtxos.filter(m=>m.asset.assetId===se(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===l||e.txType==="ExportTx"&&m.consumedOnChainId!==l)).reduce((m,d)=>m.add(d.asset.amount),new B(0));return {amount:_({amount:p.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===se(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new B(0)),i=e.emittedUtxos.filter(l=>l.asset.assetId===se(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new B(0)),s=o.gte(i),c=s?o.minus(i):i.minus(o);return {amount:_({amount:c.toNumber(),decimals:r.decimals}),isSender:s}}function Pr({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(i=>i.assetId===se(!!e)).reduce((i,s)=>i.add(s.amount),new B(0)),n=t.amountCreated.filter(i=>i.assetId===se(!!e)).reduce((i,s)=>i.add(s.amount),new B(0)),o=a.minus(n);return _({amount:o.toNumber(),decimals:r.decimals})}function se(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Dt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:i,explorerUrl:s,chainId:c}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let p=a.isTestnet?Network.FUJI:Network.MAINNET,m=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Cr(e),network:p,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return gt(m)&&(d=m.transactions.map(g=>yt({tx:g,isTestnet:o,address:e,networkToken:i,explorerUrl:s,chainId:c}))),ft(m)&&(d=m.transactions.map(g=>Tt({tx:g,isTestnet:o,address:e,networkToken:i,explorerUrl:s,chainId:c}))),{transactions:d,nextPageToken:m.nextPageToken}},Cr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Nr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Rr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},St=e=>{switch(e){case Environment.PRODUCTION:return Nr;case Environment.DEV:return Rr}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=q.exponential()})=>{let n=0,o=0,i;for(;o<r;){o>0&&await wr(n);try{let c=await e(o);if(t(c))return c}catch(c){i=c;}n=a(o),o++;}let s=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(s)},q=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}static linearThenExponential(t,r){return a=>{if(a<t)return (a+1)*r;let n=a-t+1,o=t*r,i=2*r*(Math.pow(2,n)-1);return o+i}}};function wr(e){return new Promise(t=>setTimeout(t,e))}var Be=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:q.constant(1),isSuccess:t=>t?.status?.error_code!==429});function kt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Ee(e){let t,r=0;for(t=0;t<e.length;t++){let a=kt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function ce(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 le=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return ce([`${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 ce([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var bt=getBasicCoingeckoHttp(),E,K,me=class{constructor({storage:t,proxyApiUrl:r}){R(this,E,void 0);R(this,K,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(i=>{a[n]={[i]:{price:o?.[i],change24:o?.[`${i}_24h_change`],vol24:o?.[`${i}_24h_vol`],marketCap:o?.[`${i}_market_cap`]}};});}),a});w(this,E,t),w(this,K,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Ee(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,E)?.get?.(o),a)return a;try{a=await Be(i=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{a=void 0;}return A(this,E)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,i=`getPricesWithMarketDataByAddresses-${`${Ee(t)}-${r}-${a}`}`;if(n=A(this,E)?.get?.(i),n)return n;try{n=await Be(s=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:s}));}catch(s){console.error(s),n=void 0;}return A(this,E)?.set?.(i,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new le(A(this,K)).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(bt,{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:i=!1,useCoingeckoProxy:s=!1,shouldThrow:c=!0}){if(s){let l=await new le(A(this,K)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:i});return this.transformSimplePriceResponse(l,r)}return simplePrice(bt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:i,shouldThrow:c})}};E=new WeakMap,K=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 ue=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var F=({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 Ct=process.env.GLACIER_API_KEY;var X=()=>Ct;var Fr={rltoken:X()},he=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={...Fr,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var Ie=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Se=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},he);}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 Ie&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof Ie&&this.setGlacierToUnhealthy(),r}}};var Nt=e=>Object.keys(e).includes("unlockedUnstaked"),Rt=e=>Object.keys(e).includes("locked");function ke(e,t){let r=Object.values(e).reduce(function(a,n){let o=n.reduce(function(i,s){if(s.assetId!==t)return i;let c=Number(s.amount);return i+c},0);return a+o},0);return BigInt(r)}var Vt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:i,avaxAssetId:s})=>{let c={},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 x in l){let y=l[x];if(!y||!y.length){c[x]=0n;continue}y.forEach(P=>{if(P.assetId!==s)return;let I=(c[x]??0n)+BigInt(P.amount);c[x]=I;});}let p=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(ke(e,s),t.decimals,t.symbol),g=r?d.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:g,balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:g?.toFixed(2),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{lockedStaked:c.lockedStaked,lockedStakeable:c.lockedStakeable,lockedPlatform:c.lockedPlatform,atomicMemoryLocked:c.atomicMemoryLocked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,unlockedUnstaked:c.unlockedUnstaked,unlockedStaked:c.unlockedStaked,pendingStaked:c.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:i}};var Et=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:i,avaxAssetId:s})=>{let c={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let x in l){let y=l[x];if(!y||!y.length){c[x]=0n;continue}y.forEach(P=>{if(P.assetId!==s)return;let I=(c[x]??0n)+BigInt(P.amount);c[x]=I;});}let p=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(ke(e,s),t.decimals,t.symbol),g=r!==void 0?d.mul(r):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:g?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:g?.toDisplay({fixedDp:2}),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var Ut=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await D({isTestnet:!!r.isTestnet});if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let s=t.toLowerCase(),c=e[0]??"",l=r.networkToken,p=r.pricingProviders?.coingecko.nativeTokenId,m=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=r.isTestnet?Network.FUJI:Network.MAINNET,g=await a.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(H=>H.balances),x=p?await n.getSimplePrice({coinIds:[p],currencies:[s]}):{},y=x?.[p??""]?.[s]?.price??void 0,P=x?.[p??""]?.[s]?.marketCap??void 0,C=x?.[p??""]?.[s]?.vol24??void 0,I=x?.[p??""]?.[s]?.change24??void 0,b;return Nt(g)?(b=Vt({balance:g,networkToken:l,priceInCurrency:y,marketCap:P,vol24:C,change24:I,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Rt(g)?(b=Et({balance:g,networkToken:l,priceInCurrency:y,marketCap:P,vol24:C,change24:I,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Promise.reject("Incorrect type balance was returned from glacier")};function _t({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=$r.createHash("sha256").update(r).digest("base64");return "avax:"+jr(a).substring(0,32)}var jr=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Xt=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 D({isTestnet:n}),i;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{i=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{i=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(i,"X"),[NetworkVMType.PVM]:o.getAddress(i,"P")}};var Kr=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),Ht=e=>Kr.safeParse(e);var Wt=async({request:e,network:t,approvalController:r})=>{let a=Ht(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,i=Buffer.from(n,"utf-8").toString("hex"),s={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:o},c={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} is requesting to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},l=await r.requestApproval({request:e,displayData:c,signingData:s});return "error"in l?{error:l.error}:"signedData"in l?{result:l.signedData}:{error:rpcErrors.internal("No signed data returned")}};var zr=z.object({transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),externalIndices:z.number().array().optional(),internalIndices:z.number().array().optional(),utxos:z.string().array().optional()}),$t=e=>zr.safeParse(e);var Pe=({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 be=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 qt=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Do you want to add this delegator?";case TxType.AddPermissionlessValidator:return "Do you want to add this validator?";case TxType.Export:return "Do you approve this export?";case TxType.Import:return "Do you approve this import?";case TxType.Base:return "Do you approve this transaction?";case TxType.AddSubnetValidator:return "Do you want to add this subnet validator?";case TxType.CreateChain:return "Do you want to create this chain?";case TxType.CreateSubnet:return "Do you want to create this subnet?";case TxType.RemoveSubnetValidator:return "Do you want to remove this subnet validator?";case TxType.ConvertSubnetToL1:return "Do you want to convert this subnet?";case TxType.DisableL1Validator:return "Do you want to disable this validator?";case TxType.IncreaseL1ValidatorBalance:return "Do you want to increase this validator balance?";case TxType.RegisterL1Validator:return "Do you want to register this validator?";case TxType.SetL1ValidatorWeight:return "Do you want to set this validator weight?";default:return "Sign Message"}};var Me=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await D({isTestnet:a});return e.map(i=>Avalanche.getAddressFromXpub(n,i,o,t,r))};var Le=e=>e.type===TxType.AddPermissionlessDelegator,Ue=e=>e.type===TxType.AddPermissionlessValidator,_e=e=>e.type===TxType.Export,Oe=e=>e.type===TxType.Import,Zr=e=>e.type===TxType.Base,Fe=e=>e.type===TxType.AddSubnetValidator,ea=e=>e.type===TxType.CreateChain,ta=e=>e.type===TxType.CreateSubnet,Xe=e=>e.type===TxType.RemoveSubnetValidator,Kt=e=>e.type===TxType.ConvertSubnetToL1,Jt=e=>e.type===TxType.DisableL1Validator,zt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Yt=e=>e.type===TxType.RegisterL1Validator,Qt=e=>e.type===TxType.SetL1ValidatorWeight,_o=e=>Le(e)||Ue(e)||Fe(e)||Xe(e),Oo=e=>_e(e)||Oe(e),Zt=e=>Zr(e),er=e=>ea(e),tr=e=>ta(e);var V=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(V||{});function Ce(e){return e===Avalanche.MainnetContext.pBlockchainID}var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:i,stake:s,subnetID:c}=e,l=[T("Node ID",n),Ce(c)?f("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",s,9,t),N("Start Date",o),N("End Date",i)];return r.push({title:"Staking Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:i,end:s,stake:c,subnetID:l,signature:p,publicKey:m}=e,d=[T("Node ID",n),Ce(l)?f("Subnet ID","Primary Network"):T("Subnet ID",l)];return m&&p&&d.push(T("Public Key",m),T("Proof",p)),d.push(u("Stake Amount",c,9,t),f("Delegation Fee",`${o/1e4} %`),N("Start Date",i),N("End Date",s)),r.push({title:"Staking Details",items:d}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:i,subnetID:s}=e,c=[T("Subnet ID",s),T("Node ID",n),N("Start Date",o),N("End Date",i)];return r.push({title:"Staking Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var $e=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:i,validators:s}=e,c=[T("Subnet ID",i),T("Chain ID",n),ue("Manager Address",o)];return r.push({title:"L1 Details",items:c}),s.forEach(({balance:l,stake:p,nodeId:m,remainingBalanceOwners:d,deactivationOwners:g},x)=>{let y=[T("Node ID",m),u("Balance",l,9,t),u("Stake",p,9,t)];g.length>0&&y.push(f(`${g.length>1?"Owners":"Owner"} Able to Deactivate`,g.join(`
13
13
  `),"vertical")),d.length>0&&y.push(f(`${d.length>1?"Owners":"Owner"} of the Remaining Balance`,d.join(`
14
- `),"vertical")),r.push({title:x===0?"Validators":void 0,items:y});}),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,destination:s,type:i}=e;return r.push({title:"Transaction Details",items:[f("Source Chain",`Avalanche ${V[o]}`),f("Target Chain",`Avalanche ${V[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 qe=(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 ${V[s]}`),f("Destination Chain",`Avalanche ${V[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 Ke=(e,t)=>{let r=[],{txFee:a,nodeID:n,subnetID:o}=e,s=[T("Node ID",n),T("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 ${V[n]}`)]}),o.forEach((i,c)=>{let l=i.owners.flatMap(p=>[ue("To",p),u("Amount",i.amount,9,t)]);i.owners.length>1&&l.push(f("Threshold",i.threshold.toString())),r.push({title:c===0?"Balance Change":void 0,items:l});}),n!==PVM&&s&&r.push({title:"Memo",items:[s]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ze=(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 Ye=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,c=[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:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Qe=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[T("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=[T("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 et=(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 tt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ne=(e,t)=>{if(Zt(e))return Je(e,t);if(_e(e))return je(e,t);if(Oe(e))return qe(e,t);if(tr(e))return ze(e,t);if(Le(e))return He(e,t);if(Ue(e))return Ge(e,t);if(er(e))return Ye(e,t);if(Fe(e))return We(e,t);if(Xe(e))return Ke(e,t);if(Kt(e))return $e(e,t);if(Jt(e))return Qe(e,t);if(zt(e))return Ze(e,t);if(Yt(e))return et(e,t);if(Qt(e))return tt(e,t)};var ar=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=$t(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:c,internalIndices:l,utxos:p}=o.data,m=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(s),g=t.isTestnet??!1,x=await D({isTestnet:g}),y=e.context?.currentAddress;if(!y||typeof y!="string")return {error:rpcErrors.invalidRequest("No active account found")};let P=Pe({utxoHexes:p,vm:m}),C=P.length?P:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:g?Network.FUJI:Network.MAINNET,url:a,token:X(),headers:F(n)}),I;if(i==="C")I=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:C,fromAddress:y});else {let W=utils.unpackWithManager(m,d),$=e.context?.xpubXP;if($!==void 0&&typeof $!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Ve=await Me({indices:c??[],chainAlias:i,isChange:!1,isTestnet:g,xpubXP:$}),hr=await Me({indices:l??[],chainAlias:i,isChange:!0,isTestnet:g,xpubXP:$}),gr=[...new Set([y,...Ve,...hr])].map(fr=>utils.parse(fr)[2]);I=await Avalanche.createAvalancheUnsignedTx({tx:W,utxos:C,provider:x,fromAddressBytes:gr});}let b=await Avalanche.parseAvalancheTx(I,x,y),H=be(b),ct=qt(b);if(b.type==="unknown"||H===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ae={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(I.toJSON()),data:b,vm:m,externalIndices:c,internalIndices:l},ne=Ne(H,t.networkToken.symbol);if(ne===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let we={title:ct,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:ne,networkFeeSelector:!1},G=await r.requestApproval({request:e,displayData:we,signingData:ae});if("error"in G)return {error:G.error};let Ae=await ia(x,G,m);return ca({explorerUrl:t.explorerUrl??"",provider:x,txHash:Ae,vm:m,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:e}),{result:Ae}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},ia=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ca=async({explorerUrl:e,provider:t,txHash:r,vm:a,onTransactionPending:n,onTransactionConfirmed:o,onTransactionReverted:s,request:i})=>{let l=j(e,r);try{n({txHash:r,request:i}),a===PVM?(await O({operation:()=>t.getApiP().getTxStatus({txID:r}),isSuccess:m=>["Committed","Dropped"].includes(m.status),maxRetries:7})).status==="Committed"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):a===AVM?(await O({operation:()=>t.getApiX().getTxStatus({txID:r}),isSuccess:m=>["Accepted","Rejected"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):(await O({operation:()=>t.getApiC().getAtomicTxStatus(r),isSuccess:m=>["Accepted","Dropped"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i});}catch(p){console.error(p),p instanceof Error&&p.message.startsWith("Max retry exceeded.")||s({txHash:r,request:i});}};var la=z.object({from:z.string().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),utxos:z.string().array().optional()}),nr=e=>la.safeParse(e);var cr=async({vm:e,txBytes:t,utxos:r,currentAddress:a,currentEvmAddress:n,provider:o})=>{let s,i,c=utils.unpackWithManager(e,t);if(evmSerial.isExportTx(c)){let l=c.ins[0]?.address.toHex();if(!n)throw rpcErrors.invalidRequest("Missing EVM address");if(l?.toLowerCase()!==n.toLowerCase())throw new Error("This account has nothing to sign");return Avalanche.createAvalancheEvmUnsignedTx({txBytes:t,vm:e,utxos:r,fromAddress:a})}try{let p=utils.getManagerForVM(e).unpack(t,avaxSerial.SignedTx);evmSerial.isImportTx(c)?i=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:t,vm:e,utxos:r,fromAddress:a}):i=await Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:p.getCredentials(),utxos:r}),s=c.getSigIndices().map((m,d)=>new Credential(Avalanche.populateCredential(m,{unsignedTx:i,credentialIndex:d})));}catch{s=c.getSigIndices().map(p=>new Credential(Avalanche.populateCredential(p)));}return Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:s,utxos:r})};var pr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=nr(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:s,chainAlias:i,from:c,utxos:l}=o.data,p=Avalanche.getVmByChainAlias(i),m=t.isTestnet??!1,d=await D({isTestnet:m}),g=e.context?.currentAddress,x=e.context?.currentEvmAddress;if(!g||typeof g!="string")return {error:rpcErrors.invalidRequest("No active account found")};let y=Pe({utxoHexes:l,vm:p}),P=y.length?y:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:m?Network.FUJI:Network.MAINNET,url:a,token:X(),headers:F(n)}),C=await cr({txBytes:utils.hexToBuffer(s),vm:p,utxos:P,currentAddress:g,currentEvmAddress:x,provider:d}),I=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!I)return {error:rpcErrors.invalidRequest("Missing signer address")};let b=C.getSigIndicesForAddress(I);if(!b)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let H=C.getSigIndices();if(!b.some(([$,Ve])=>H[$]?.includes(Ve)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let ae=await Avalanche.parseAvalancheTx(C,d,c),ne=be(ae);if(ae.type==="unknown"||ne===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let we={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:ae,vm:p,unsignedTxJson:JSON.stringify(C.toJSON()),ownSignatureIndices:b},G=Ne(ne,t.networkToken.symbol);if(G===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Ae={title:"Do you approve this 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:G},W=await r.requestApproval({request:e,displayData:Ae,signingData:we});return "error"in W?{error:W.error}:"signedData"in W?{result:W.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ot=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ye=({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}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var dr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ot(e)?ye(e).AVM:void 0,o=ot(e)?ye(e).CoreEth:void 0,s=await D({isTestnet:!!r.isTestnet}),i=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}),l=Buffer.from(i,"hex"),p=Buffer.from(c,"hex");return {[NetworkVMType.CoreEth]:s.getAddress(p,"C"),[NetworkVMType.AVM]:s.getAddress(l,"X"),[NetworkVMType.PVM]:s.getAddress(l,"P")}};var ee,Te,te,L,re,ur=class{constructor({approvalController:t,environment:r,appInfo:a}){R(this,ee,void 0);R(this,Te,void 0);R(this,te,void 0);R(this,L,void 0);R(this,re,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=St(r);w(this,re,a),w(this,ee,new Se({glacierApiUrl:n,headers:F(a)})),w(this,Te,o),w(this,te,n),w(this,L,t);}getProvider(t){return D({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Xt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new me({storage:a,proxyApiUrl:A(this,Te)});return Ut({addresses:t,currency:n,network:r,glacierService:A(this,ee),tokenService:o})}getManifest(){let t=parseManifest(pt);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return dt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return Dt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,ee)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ye(t)}async deriveAddress(t){return dr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Wt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return pr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,te),appInfo:A(this,re)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return ar({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,te),appInfo:A(this,re)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return _t({blockchainId:t,isTestnet:r})}};ee=new WeakMap,Te=new WeakMap,te=new WeakMap,L=new WeakMap,re=new WeakMap;var mc=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,dc=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
14
+ `),"vertical")),r.push({title:x===0?"Validators":void 0,items:y});}),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,destination:i,type:s}=e;return r.push({title:"Transaction Details",items:[f("Source Chain",`Avalanche ${V[o]}`),f("Target Chain",`Avalanche ${V[i]}`),f("Transaction Type",s?(s[0]||"").toUpperCase()+s.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,amount:n,chain:o,source:i,type:s}=e;return r.push({title:"Transaction Details",items:[f("Source Chain",`Avalanche ${V[i]}`),f("Destination Chain",`Avalanche ${V[o]}`),f("Transaction Type",s?(s[0]||"").toUpperCase()+s.slice(1):""),u("Amount",n,9,t)]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ke=(e,t)=>{let r=[],{txFee:a,nodeID:n,subnetID:o}=e,i=[T("Node ID",n),T("Subnet ID",o)];return r.push({title:"Staking Details",items:i}),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:i}=e;return r.push({title:"Chain Details",items:[f("Active chain",`Avalanche ${V[n]}`)]}),o.forEach((s,c)=>{let l=s.owners.flatMap(p=>[ue("To",p),u("Amount",s.amount,9,t)]);s.owners.length>1&&l.push(f("Threshold",s.threshold.toString())),r.push({title:c===0?"Balance Change":void 0,items:l});}),n!==PVM&&i&&r.push({title:"Memo",items:[i]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ze=(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 Ye=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:i,genesisData:s}=e,c=[f("Blockchain name",o,"vertical"),f("Blockchain ID",n,"vertical"),f("Virtual Machine ID",i,"vertical"),f("Genesis Data",s,"vertical")];return r.push({title:"Blockchain Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Qe=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[T("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,i=[T("Validation ID",o),u("Increase by amount",n,9,t)];return r.push({title:"L1 Details",items:i}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(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 tt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ne=(e,t)=>{if(Zt(e))return Je(e,t);if(_e(e))return je(e,t);if(Oe(e))return qe(e,t);if(tr(e))return ze(e,t);if(Le(e))return He(e,t);if(Ue(e))return Ge(e,t);if(er(e))return Ye(e,t);if(Fe(e))return We(e,t);if(Xe(e))return Ke(e,t);if(Kt(e))return $e(e,t);if(Jt(e))return Qe(e,t);if(zt(e))return Ze(e,t);if(Yt(e))return et(e,t);if(Qt(e))return tt(e,t)};var ar=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=$t(e.params);if(!o.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};try{let{transactionHex:i,chainAlias:s,externalIndices:c,internalIndices:l,utxos:p}=o.data,m=Avalanche.getVmByChainAlias(s),d=utils.hexToBuffer(i),g=t.isTestnet??!1,x=await D({isTestnet:g}),y=e.context?.currentAddress;if(!y||typeof y!="string")return {error:rpcErrors.invalidRequest("No active account found")};let P=Pe({utxoHexes:p,vm:m}),C=P.length?P:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:s,network:g?Network.FUJI:Network.MAINNET,url:a,token:X(),headers:F(n)}),I;if(s==="C")I=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:C,fromAddress:y});else {let W=utils.unpackWithManager(m,d),$=e.context?.xpubXP;if($!==void 0&&typeof $!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Ve=await Me({indices:c??[],chainAlias:s,isChange:!1,isTestnet:g,xpubXP:$}),hr=await Me({indices:l??[],chainAlias:s,isChange:!0,isTestnet:g,xpubXP:$}),gr=[...new Set([y,...Ve,...hr])].map(fr=>utils.parse(fr)[2]);I=await Avalanche.createAvalancheUnsignedTx({tx:W,utxos:C,provider:x,fromAddressBytes:gr});}let b=await Avalanche.parseAvalancheTx(I,x,y),H=be(b),ct=qt(b);if(b.type==="unknown"||H===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ae={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(I.toJSON()),data:b,vm:m,externalIndices:c,internalIndices:l},ne=Ne(H,t.networkToken.symbol);if(ne===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let we={title:ct,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:ne,networkFeeSelector:!1},G=await r.requestApproval({request:e,displayData:we,signingData:ae});if("error"in G)return {error:G.error};let Ae=await sa(x,G,m);return ca({explorerUrl:t.explorerUrl??"",provider:x,txHash:Ae,vm:m,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:e}),{result:Ae}}catch(i){return console.error(i),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:i}})}}},sa=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ca=async({explorerUrl:e,provider:t,txHash:r,vm:a,onTransactionPending:n,onTransactionConfirmed:o,onTransactionReverted:i,request:s})=>{let l=j(e,r);try{n({txHash:r,request:s}),a===PVM?(await O({operation:()=>t.getApiP().getTxStatus({txID:r}),isSuccess:m=>["Committed","Dropped"].includes(m.status),maxRetries:7})).status==="Committed"?o({txHash:r,explorerLink:l,request:s}):i({txHash:r,request:s}):a===AVM?(await O({operation:()=>t.getApiX().getTxStatus({txID:r}),isSuccess:m=>["Accepted","Rejected"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:s}):i({txHash:r,request:s}):(await O({operation:()=>t.getApiC().getAtomicTxStatus(r),isSuccess:m=>["Accepted","Dropped"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:s}):i({txHash:r,request:s});}catch(p){console.error(p),p instanceof Error&&p.message.startsWith("Max retry exceeded.")||i({txHash:r,request:s});}};var la=z.object({from:z.string().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),utxos:z.string().array().optional()}),nr=e=>la.safeParse(e);var cr=async({vm:e,txBytes:t,utxos:r,currentAddress:a,currentEvmAddress:n,provider:o})=>{let i,s,c=utils.unpackWithManager(e,t);if(evmSerial.isExportTx(c)){let l=c.ins[0]?.address.toHex();if(!n)throw rpcErrors.invalidRequest("Missing EVM address");if(l?.toLowerCase()!==n.toLowerCase())throw new Error("This account has nothing to sign");return Avalanche.createAvalancheEvmUnsignedTx({txBytes:t,vm:e,utxos:r,fromAddress:a})}try{let p=utils.getManagerForVM(e).unpack(t,avaxSerial.SignedTx);evmSerial.isImportTx(c)?s=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:t,vm:e,utxos:r,fromAddress:a}):s=await Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:p.getCredentials(),utxos:r}),i=c.getSigIndices().map((m,d)=>new Credential(Avalanche.populateCredential(m,{unsignedTx:s,credentialIndex:d})));}catch{i=c.getSigIndices().map(p=>new Credential(Avalanche.populateCredential(p)));}return Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:i,utxos:r})};var pr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=nr(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:i,chainAlias:s,from:c,utxos:l}=o.data,p=Avalanche.getVmByChainAlias(s),m=t.isTestnet??!1,d=await D({isTestnet:m}),g=e.context?.currentAddress,x=e.context?.currentEvmAddress;if(!g||typeof g!="string")return {error:rpcErrors.invalidRequest("No active account found")};let y=Pe({utxoHexes:l,vm:p}),P=y.length?y:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:s,network:m?Network.FUJI:Network.MAINNET,url:a,token:X(),headers:F(n)}),C=await cr({txBytes:utils.hexToBuffer(i),vm:p,utxos:P,currentAddress:g,currentEvmAddress:x,provider:d}),I=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!I)return {error:rpcErrors.invalidRequest("Missing signer address")};let b=C.getSigIndicesForAddress(I);if(!b)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let H=C.getSigIndices();if(!b.some(([$,Ve])=>H[$]?.includes(Ve)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let ae=await Avalanche.parseAvalancheTx(C,d,c),ne=be(ae);if(ae.type==="unknown"||ne===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let we={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:ae,vm:p,unsignedTxJson:JSON.stringify(C.toJSON()),ownSignatureIndices:b},G=Ne(ne,t.networkToken.symbol);if(G===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Ae={title:"Do you approve this 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:G},W=await r.requestApproval({request:e,displayData:Ae,signingData:we});return "error"in W?{error:W.error}:"signedData"in W?{result:W.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ot=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ye=({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}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var dr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ot(e)?ye(e).AVM:void 0,o=ot(e)?ye(e).CoreEth:void 0,i=await D({isTestnet:!!r.isTestnet}),s=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}),l=Buffer.from(s,"hex"),p=Buffer.from(c,"hex");return {[NetworkVMType.CoreEth]:i.getAddress(p,"C"),[NetworkVMType.AVM]:i.getAddress(l,"X"),[NetworkVMType.PVM]:i.getAddress(l,"P")}};var ee,Te,te,L,re,ur=class{constructor({approvalController:t,environment:r,appInfo:a}){R(this,ee,void 0);R(this,Te,void 0);R(this,te,void 0);R(this,L,void 0);R(this,re,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=St(r);w(this,re,a),w(this,ee,new Se({glacierApiUrl:n,headers:F(a)})),w(this,Te,o),w(this,te,n),w(this,L,t);}getProvider(t){return D({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Xt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new me({storage:a,proxyApiUrl:A(this,Te)});return Ut({addresses:t,currency:n,network:r,glacierService:A(this,ee),tokenService:o})}getManifest(){let t=parseManifest(pt);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return dt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return Dt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,ee)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ye(t)}async deriveAddress(t){return dr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Wt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return pr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,te),appInfo:A(this,re)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return ar({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,te),appInfo:A(this,re)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return _t({blockchainId:t,isTestnet:r})}};ee=new WeakMap,Te=new WeakMap,te=new WeakMap,L=new WeakMap,re=new WeakMap;var mc=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,dc=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
16
16
 
17
17
  export { ur as AvalancheModule, Le as isAddPermissionlessDelegatorTx, Ue as isAddPermissionlessValidatorTx, Fe as isAddSubnetValidatorTx, Zr as isBaseTx, er as isBlockchainDetails, Zt as isChainDetails, Kt as isConvertSubnetToL1Tx, ea as isCreateChainTx, ta as isCreateSubnetTx, Jt as isDisableL1ValidatorTx, Oo as isExportImportTxDetails, _e as isExportTx, Oe as isImportTx, zt as isIncreaseL1ValidatorBalanceTx, Yt as isRegisterL1ValidatorTx, Xe as isRemoveSubnetValidatorTx, Qt as isSetL1ValidatorWeightTx, _o as isStakingDetails, tr as isSubnetDetails, dc as isTokenWithBalanceAVM, mc as isTokenWithBalancePVM };
18
18
  //# sourceMappingURL=out.js.map