@avalabs/avalanche-module 0.11.9 → 0.11.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -12,7 +12,7 @@ declare class AvalancheModule implements Module {
12
12
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
13
13
  getBalances({ addresses, network, storage, currency }: GetBalancesParams): Promise<GetBalancesResponse>;
14
14
  getManifest(): Manifest | undefined;
15
- getNetworkFee(_: Network): Promise<NetworkFees>;
15
+ getNetworkFee(network: Network): Promise<NetworkFees>;
16
16
  getTransactionHistory({ network, address, nextPageToken, offset }: GetTransactionHistory): Promise<_avalabs_vm_module_types_dist_transaction_history.TransactionHistoryResponse>;
17
17
  getTokens(_: Network): Promise<never[]>;
18
18
  onRpcRequest(request: RpcRequest, network: Network): Promise<{
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ declare class AvalancheModule implements Module {
12
12
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
13
13
  getBalances({ addresses, network, storage, currency }: GetBalancesParams): Promise<GetBalancesResponse>;
14
14
  getManifest(): Manifest | undefined;
15
- getNetworkFee(_: Network): Promise<NetworkFees>;
15
+ getNetworkFee(network: Network): Promise<NetworkFees>;
16
16
  getTransactionHistory({ network, address, nextPageToken, offset }: GetTransactionHistory): Promise<_avalabs_vm_module_types_dist_transaction_history.TransactionHistoryResponse>;
17
17
  getTokens(_: Network): Promise<never[]>;
18
18
  onRpcRequest(request: RpcRequest, network: Network): Promise<{
package/dist/index.js CHANGED
@@ -1,18 +1,18 @@
1
- import { TxType, parseManifest, RpcMethod, Environment, AppName, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
1
+ import { TxType, Environment, parseManifest, RpcMethod, NetworkVMType, AppName, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
2
2
  import { rpcErrors } from '@metamask/rpc-errors';
3
- import { Network, SortOrder, BlockchainId, Glacier, PrimaryNetworkChainName } from '@avalabs/glacier-sdk';
4
- import B from 'big.js';
3
+ import { info, utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
4
+ import { ChainId, AVALANCHE_P_DEV_NETWORK, AVALANCHE_XP_TEST_NETWORK, AVALANCHE_XP_NETWORK } from '@avalabs/core-chains-sdk';
5
5
  import { Avalanche } from '@avalabs/core-wallets-sdk';
6
+ import { Network, SortOrder, BlockchainId, Glacier, PrimaryNetworkChainName } from '@avalabs/glacier-sdk';
7
+ import N from 'big.js';
6
8
  import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
7
9
  import { object, string, record, number, z as z$1 } from 'zod';
8
10
  import { TokenUnit } from '@avalabs/core-utils-sdk';
9
- import pa from 'crypto';
10
- import { info, utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
11
- import { AVALANCHE_XP_TEST_NETWORK, AVALANCHE_XP_NETWORK } from '@avalabs/core-chains-sdk';
11
+ import xa from 'crypto';
12
12
 
13
- var _t=Object.defineProperty;var Lt=(e,t,a)=>t in e?_t(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var U=(e,t,a)=>(Lt(e,typeof t!="symbol"?t+"":t,a),a),Fe=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var y=(e,t,a)=>(Fe(e,t,"read from private field"),a?a.call(e):t.get(e)),S=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a);},C=(e,t,a,n)=>(Fe(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var je={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.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"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"]}},manifestVersion:"0.0"};async function We(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var Je=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,Ke=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function ge(e,t,a="tx"){return `${e}/${a}/${t}`}function V({amount:e,decimals:t}){return e===void 0?new B(0):new B(e/10**t)}function Ye({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(p=>p.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(p=>p.addresses)||[]),l=Gt({tx:e,isTestnet:s,networkToken:a,froms:i}),c=Ot({tx:e,isTestnet:s,networkToken:a}),d=t.toLowerCase().startsWith("p-")?t.slice(2):t,m=i.has(d);return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...o.values()].join(","),isSender:m,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:l.toString()}],gasUsed:c.toString(),explorerLink:ge(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function Gt({tx:e,isTestnet:t,networkToken:a,froms:n}){let r=["ImportTx","ExportTx"].includes(e.txType),s=e.txType==="BaseTx",i=e.emittedUtxos.filter(p=>p.asset.assetId===ee(!!t)&&!p.addresses.some(u=>n.has(u))).reduce((p,u)=>p.add(u.asset.amount),new B(0)),o=e.value.find(p=>p.assetId===ee(!!t))?.amount,l=i.gt(new B(0))?i:o?new B(o):new B(0)??new B(0),c=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,d=e.emittedUtxos.filter(p=>p.asset.assetId===ee(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===c||e.txType==="ExportTx"&&p.consumedOnChainId!==c)).reduce((p,u)=>p.add(u.amount),new B(0)),m=s?l:r?d:e.amountStaked.length===0?ze(e.value,!!t):ze(e.amountStaked,!!t);return V({amount:m?.toNumber(),decimals:a.decimals})}function Ot({tx:e,isTestnet:t,networkToken:a}){let n=e.amountBurned?.filter(r=>r.assetId===ee(!!t)).reduce((r,s)=>r.add(s.amount),new B(0));return V({amount:n?.toNumber(),decimals:a.decimals})}function ze(e,t){return e.filter(a=>a.assetId===ee(t)).reduce((a,n)=>a.add(n.amount),new B(0))}function ee(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Ze({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(g=>g.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(g=>g.addresses)||[]),l=t.toLowerCase().startsWith("x-")?t.slice(2):t,c=["ImportTx","ExportTx"].includes(e.txType),{amount:d,isSender:m}=jt({tx:e,isTestnet:s,networkToken:a,chainAddress:l,isImportExport:c}),p=Wt({isTestnet:s,tx:e,networkToken:a}),u=c?d.toString():m?d.minus(p).toString():d.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...o.values()].join(","),isSender:m,timestamp:e.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:u}],gasUsed:p.toString(),explorerLink:ge(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function jt({tx:e,isTestnet:t,networkToken:a,chainAddress:n,isImportExport:r}){if(r){let c=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,d=e.emittedUtxos.filter(m=>m.asset.assetId===ae(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===c||e.txType==="ExportTx"&&m.consumedOnChainId!==c)).reduce((m,p)=>m.add(p.asset.amount),new B(0));return {amount:V({amount:d.toNumber(),decimals:a.decimals}),isSender:!0}}let s=e.consumedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(n)).reduce((c,d)=>c.add(d.asset.amount),new B(0)),i=e.emittedUtxos.filter(c=>c.asset.assetId===ae(!!t)&&c.addresses.includes(n)).reduce((c,d)=>c.add(d.asset.amount),new B(0)),o=s.gte(i),l=o?s.minus(i):i.minus(s);return {amount:V({amount:l.toNumber(),decimals:a.decimals}),isSender:o}}function Wt({isTestnet:e,tx:t,networkToken:a}){let n=t.amountUnlocked.filter(i=>i.assetId===ae(!!e)).reduce((i,o)=>i.add(o.amount),new B(0)),r=t.amountCreated.filter(i=>i.assetId===ae(!!e)).reduce((i,o)=>i.add(o.amount),new B(0)),s=n.minus(r);return V({amount:s.toNumber(),decimals:a.decimals})}function ae(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var tt=async({address:e,nextPageToken:t,offset:a,network:n,glacierService:r})=>{let{isTestnet:s,networkToken:i,explorerUrl:o,chainId:l}=n;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let d=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:qt(e),network:s?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return Je(d)&&(m=d.transactions.map(p=>Ye({tx:p,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:l}))),Ke(d)&&(m=d.transactions.map(p=>Ze({tx:p,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:l}))),{transactions:m,nextPageToken:d.nextPageToken}},qt=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Jt={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Kt={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},nt=e=>{switch(e){case Environment.PRODUCTION:return Jt;case Environment.DEV:return Kt}};var fe=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Te=class{constructor({glacierApiUrl:t,headers:a}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:a});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(a){throw a instanceof fe&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof fe&&this.setGlacierToUnhealthy(),a}}};var _=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:n=ne.exponential()})=>{let r=0,s=0,i;for(;s<a;){s>0&&await Yt(r);try{let l=await e(s);if(t(l))return l}catch(l){i=l;}r=n(s),s++;}let o=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(o)},ne=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function Yt(e){return new Promise(t=>setTimeout(t,e))}var Re=e=>_({operation:t=>e(t>0),maxRetries:2,backoffPolicy:ne.constant(1),isSuccess:t=>t?.status?.error_code!==429});function rt(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function Be(e){let t,a=0;for(t=0;t<e.length;t++){let n=rt(e[t]??"");a=a+65027/n;}return (""+a).slice(0,16)}async function xe(e,t){let a=await fetch(...e);if(!a.ok)throw new Error(`Request failed with status ${a.status}`);let n=await a.json();return t.parse(n)}var re=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let a=new URLSearchParams(t);return xe([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:a,...n}=t,r=new URLSearchParams(n);return xe([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${a}?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],SimplePriceResponseSchema)}};var st=getBasicCoingeckoHttp(),w,G,oe=class{constructor({storage:t,proxyApiUrl:a}){S(this,w,void 0);S(this,G,void 0);U(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let n={};return Object.keys(t).forEach(r=>{let s=t[r];n[r]={},a.forEach(i=>{n[r]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),n});C(this,w,t),C(this,G,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let n,s=`getSimplePrice-${t?`${Be(t)}-${a.toString()}`:`${a.toString()}`}`;if(n=y(this,w)?.get?.(s),n)return n;try{n=await Re(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return y(this,w)?.set?.(s,n),n}async getPricesByAddresses(t,a,n=VsCurrencyType.USD){let r,i=`getPricesWithMarketDataByAddresses-${`${Be(t)}-${a}-${n}`}`;if(r=y(this,w)?.get?.(i),r)return r;try{r=await Re(o=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:n,useCoingeckoProxy:o}));}catch{r=void 0;}return y(this,w)?.set?.(i,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:n=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?new re(y(this,G)).simplePriceByContractAddresses({id:t,contract_addresses:a,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(st,{assetPlatformId:t,tokenAddresses:a,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD],marketCap:n=!1,vol24:r=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:o=!1,shouldThrow:l=!0}){if(o){let c=await new re(y(this,G)).simplePrice({ids:t,vs_currencies:a,include_market_cap:n,include_24hr_vol:r,include_24hr_change:s,include_last_updated_at:i});return this.transformSimplePriceResponse(c,a)}return simplePrice(st,{coinIds:t,currencies:a,marketCap:n,vol24:r,change24:s,lastUpdated:i,shouldThrow:l})}};w=new WeakMap,G=new WeakMap;object({date:string(),usd:record(number())});var N=(e,t,a,n)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:a,symbol:n}),h=(e,t,a="horizontal")=>({label:e,alignment:a,type:DetailItemType.TEXT,value:t});var we=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t}),k=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var E=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var L=({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 ot=e=>Object.keys(e).includes("unlockedUnstaked"),it=e=>Object.keys(e).includes("locked");function Ae(e){let t=Object.values(e).reduce(function(a,n){let r=n.reduce(function(s,i){let o=Number(i.amount);return s+o},0);return a+r},0);return BigInt(t)}var lt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:s,coingeckoId:i})=>{let o={},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 u in l){let g=l[u];if(!g||!g.length){o[u]=0n;continue}g.forEach(f=>{let A=(o[u]??0n)+BigInt(f.amount);o[u]=A;});}let c=new TokenUnit(o.unlockedUnstaked?o.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(Ae(e),t.decimals,t.symbol),p=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:m.toSubUnit(),balanceInCurrency:p,balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:p?.toFixed(2),available:c.toSubUnit(),availableInCurrency:d,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:o.lockedStaked,lockedStakeable:o.lockedStakeable,lockedPlatform:o.lockedPlatform,atomicMemoryLocked:o.atomicMemoryLocked,atomicMemoryUnlocked:o.atomicMemoryUnlocked,unlockedUnstaked:o.unlockedUnstaked,unlockedStaked:o.unlockedStaked,pendingStaked:o.pendingStaked},marketCap:n,vol24:r,change24:s,coingeckoId:i}};var mt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:s,coingeckoId:i})=>{let o={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let u in l){let g=l[u];if(!g||!g.length){o[u]=0n;continue}g.forEach(f=>{let A=(o[u]??0n)+BigInt(f.amount);o[u]=A;});}let c=new TokenUnit(o.unlocked?o.unlocked:0n,t.decimals,t.symbol),d=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(Ae(e),t.decimals,t.symbol),p=a!==void 0?m.mul(a):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:a,balance:m.toSubUnit(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),available:c.toSubUnit(),availableInCurrency:d,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{unlocked:o.unlocked,locked:o.locked,atomicMemoryUnlocked:o.atomicMemoryUnlocked,atomicMemoryLocked:o.atomicMemoryLocked},marketCap:n,vol24:r,change24:s}};var gt=async({addresses:e,currency:t,network:a,glacierService:n,tokenService:r})=>{if(!n.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),o=e[0]??"",l=a.networkToken,c=a.pricingProviders?.coingecko.nativeTokenId,d=a.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,m=a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.getChainBalance({blockchainId:d,network:m,addresses:e.join(",")}).then(R=>R.balances),u=c?await r.getSimplePrice({coinIds:[c],currencies:[i]}):{},g=u?.[c??""]?.[i]?.price??void 0,f=u?.[c??""]?.[i]?.marketCap??void 0,x=u?.[c??""]?.[i]?.vol24??void 0,A=u?.[c??""]?.[i]?.change24??void 0,T;return ot(p)?(T=lt({balance:p,networkToken:l,priceInCurrency:g,marketCap:f,vol24:x,change24:A,coingeckoId:c??""}),{[o]:{[l.symbol]:T}}):it(p)?(T=mt({balance:p,networkToken:l,priceInCurrency:g,marketCap:f,vol24:x,change24:A,coingeckoId:c??""}),{[o]:{[l.symbol]:T}}):Promise.reject("Incorrect type balance was returned from glacier")};function ht({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,n=pa.createHash("sha256").update(a).digest("base64");return "avax:"+ma(n).substring(0,32)}var ma=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var P=async({isTestnet:e})=>{let t=e?AVALANCHE_XP_TEST_NETWORK:AVALANCHE_XP_NETWORK,a=await new info.InfoApi(t.rpcUrl).getUpgradesInfo().catch(()=>{});return e?Avalanche.JsonRpcProvider.getDefaultFujiProvider(a):Avalanche.JsonRpcProvider.getDefaultMainnetProvider(a)};var xt=async({accountIndex:e,isTestnet:t,xpubXP:a,walletType:n})=>{if(a===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let r=await P({isTestnet:!!t}),s;switch(n){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(a,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(a,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${n}`)}return {[NetworkVMType.AVM]:r.getAddress(s,"X"),[NetworkVMType.PVM]:r.getAddress(s,"P")}};var ya=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")])]),At=e=>ya.safeParse(e);var vt=async({request:e,network:t,approvalController:a})=>{let n=At(e.params);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:n.error}})};let[r,s]=n.data,i=Buffer.from(r,"utf-8").toString("hex"),o={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:s},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:[r]}]},c=await a.requestApproval({request:e,displayData:l,signingData:o});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Ta=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()}),It=e=>Ta.safeParse(e);var St=({utxoHexes:e=[],vm:t})=>{try{let a=utils.getManagerForVM(t).getDefaultCodec();return e.map(n=>{let r=utils.hexToBuffer(n);return Utxo.fromBytes(r,a)[0]})}catch{return []}};var ke=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.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 Ct=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";default:return "Sign Message"}};var Ne=async({indices:e,chainAlias:t,isChange:a,isTestnet:n,xpubXP:r})=>{if(!r||a&&t!=="X")return [];let s=await P({isTestnet:n});return e.map(i=>Avalanche.getAddressFromXpub(r,i,s,t,a))};var Ee=e=>e.type===TxType.AddPermissionlessDelegator,Me=e=>e.type===TxType.AddPermissionlessValidator,Ue=e=>e.type===TxType.Export,Ve=e=>e.type===TxType.Import,ka=e=>e.type===TxType.Base,_e=e=>e.type===TxType.AddSubnetValidator,va=e=>e.type===TxType.CreateChain,Ia=e=>e.type===TxType.CreateSubnet,Le=e=>e.type===TxType.RemoveSubnetValidator,Wr=e=>Ee(e)||Me(e)||_e(e)||Le(e),$r=e=>Ue(e)||Ve(e),bt=e=>ka(e),Dt=e=>va(e),Rt=e=>Ia(e);function He(e){return e===Avalanche.MainnetContext.pBlockchainID}var ve=(e,t)=>{let a=[];if(bt(e)){let{chain:r,outputs:s,memo:i}=e;a.push({title:"Chain Details",items:[h("Active chain",`Avalanche ${$[r]}`)]}),s.forEach((o,l)=>{let c=o.owners.flatMap(d=>[we("To",d),N("Amount",o.amount,9,t)]);o.owners.length>1&&c.push(h("Threshold",o.threshold.toString())),a.push({title:l===0?"Balance Change":void 0,items:c});}),r!==PVM&&i&&a.push({title:"Memo",items:[i]});}else if(Ue(e)){let{amount:r,chain:s,destination:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${$[s]}`),h("Target Chain",`Avalanche ${$[i]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),N("Amount",r,9,t)]});}else if(Ve(e)){let{amount:r,chain:s,source:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${$[i]}`),h("Destination Chain",`Avalanche ${$[s]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),N("Amount",r,9,t)]});}else if(Rt(e)){let{threshold:r,controlKeys:s}=e;a.push({title:"Subnet Details",items:[h(s.length>1?"Owners":"Owner",s.join(`
14
- `),"vertical"),h("Signature Threshold",`${r}/${s.length}`,"vertical")]});}else if(Ee(e)){let{nodeID:r,start:s,end:i,stake:o,subnetID:l}=e,c=[k("Node ID",r),He(l)?h("Subnet ID","Primary Network"):k("Subnet ID",l),N("Stake Amount",o,9,t),E("Start Date",s),E("End Date",i)];a.push({title:"Staking Details",items:c});}else if(Me(e)){let{nodeID:r,delegationFee:s,start:i,end:o,stake:l,subnetID:c,signature:d,publicKey:m}=e,p=[k("Node ID",r),He(c)?h("Subnet ID","Primary Network"):k("Subnet ID",c)];m&&d&&p.push(k("Public Key",m),k("Proof",d)),p.push(N("Stake Amount",l,9,t),h("Delegation Fee",`${s/1e4} %`),E("Start Date",i),E("End Date",o)),a.push({title:"Staking Details",items:p});}else if(Dt(e)){let{chainID:r,chainName:s,vmID:i,genesisData:o}=e,l=[h("Blockchain name",s,"vertical"),h("Blockchain ID",r,"vertical"),h("Virtual Machine ID",i,"vertical"),h("Genesis Data",o,"vertical")];a.push({title:"Blockchain Details",items:l});}else if(_e(e)){let{nodeID:r,start:s,end:i,subnetID:o}=e,l=[k("Subnet ID",o),k("Node ID",r),E("Start Date",s),E("End Date",i)];a.push({title:"Staking Details",items:l});}else if(Le(e)){let{nodeID:r,subnetID:s}=e,i=[k("Node ID",r),k("Subnet ID",s)];a.push({title:"Staking Details",items:i});}let{txFee:n}=e;return n&&a.push({title:"Network Fee",items:[N("Fee Amount",n,9,t)]}),a},$=(n=>(n.AVM="X Chain",n.PVM="P Chain",n.EVM="C Chain",n))($||{});var Ra=process.env.GLACIER_API_KEY,Bt=async({request:e,network:t,approvalController:a,glacierApiUrl:n,appInfo:r})=>{let s=It(e.params);if(!s.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s.error}})};try{let{transactionHex:i,chainAlias:o,externalIndices:l,internalIndices:c,utxos:d}=s.data,m=Avalanche.getVmByChainAlias(o),p=utils.hexToBuffer(i),u=t.isTestnet??!1,g=await P({isTestnet:u}),f=e.context?.currentAddress;if(!f||typeof f!="string")return {error:rpcErrors.invalidRequest("No active account found")};let x=St({utxoHexes:d,vm:m}),A=x.length?x:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,isTestnet:u,url:n,token:Ra,headers:L(r)}),T;if(o==="C")T=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:p,vm:m,utxos:A,fromAddress:f});else {let Q=utils.unpackWithManager(m,p),I=e.context?.xpubXP;if(I!==void 0&&typeof I!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let be=await Ne({indices:l??[],chainAlias:o,isChange:!1,isTestnet:u,xpubXP:I}),De=await Ne({indices:c??[],chainAlias:o,isChange:!0,isTestnet:u,xpubXP:I}),Ut=[...new Set([f,...be,...De])].map(Vt=>utils.parse(Vt)[2]);T=await Avalanche.createAvalancheUnsignedTx({tx:Q,utxos:A,provider:g,fromAddressBytes:Ut});}let R=await Avalanche.parseAvalancheTx(T,g,f),Pe=ke(R),Y=Ct(R);if(R.type==="unknown"||Pe===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ue={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(T.toJSON()),data:R,vm:m,externalIndices:l,internalIndices:c},Se=ve(Pe,t.networkToken.symbol),Ce={title:Y,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Se,networkFeeSelector:!1},Z=await a.requestApproval({request:e,displayData:Ce,signingData:ue});if("error"in Z)return {error:Z.error};let M=await Ba(g,Z,m);return wa({provider:g,txHash:M,vm:m,onTransactionConfirmed:a.onTransactionConfirmed,onTransactionReverted:a.onTransactionReverted,requestId:e.requestId}),{result:M}}catch(i){return console.error(i),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:i}})}}},Ba=async(e,t,a)=>{if("txHash"in t)return t.txHash;let{txID:n}=await e.issueTxHex(t.signedData,a);return n},wa=async({provider:e,txHash:t,vm:a,onTransactionConfirmed:n,onTransactionReverted:r,requestId:s})=>{try{a===PVM?(await _({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:l=>["Committed","Dropped"].includes(l.status),maxRetries:7})).status==="Committed"?n(t,s):r(t,s):a===AVM?(await _({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:l=>["Accepted","Rejected"].includes(l.status),maxRetries:7})).status==="Accepted"?n(t,s):r(t,s):(await _({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:l=>["Accepted","Dropped"].includes(l.status),maxRetries:7})).status==="Accepted"?n(t,s):r(t,s);}catch(o){console.error(o),o instanceof Error&&o.message.startsWith("Max retry exceeded.")||r(t,s);}};var Na=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),wt=e=>Na.safeParse(e);var Ua=process.env.GLACIER_API_KEY,Et=async({request:e,network:t,approvalController:a,glacierApiUrl:n,appInfo:r})=>{let s=wt(e.params);if(!s.success)return console.error("invalid params",s.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:i,chainAlias:o,from:l}=s.data,c=Avalanche.getVmByChainAlias(o),d=utils.hexToBuffer(i),m=t.isTestnet??!1,p=await P({isTestnet:m}),u=utils.unpackWithManager(c,d),g=await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,isTestnet:m,url:n,token:Ua,headers:L(r)}),f;try{let I=utils.getManagerForVM(c).unpack(d,avaxSerial.SignedTx),be=await Avalanche.createAvalancheUnsignedTx({tx:u,utxos:g,provider:p,credentials:I.getCredentials()});f=u.getSigIndices().map((De,Oe)=>new Credential(Avalanche.populateCredential(De,{unsignedTx:be,credentialIndex:Oe})));}catch{f=u.getSigIndices().map(I=>new Credential(Avalanche.populateCredential(I)));}let x=await Avalanche.createAvalancheUnsignedTx({tx:u,provider:p,credentials:f,utxos:g}),A=utils.addressesFromBytes([utils.parse(l)[2]])[0];if(!A)return {error:rpcErrors.invalidRequest("Missing signer address")};let T=x.getSigIndicesForAddress(A);if(!T)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let R=x.getSigIndices();if(!T.some(([Q,I])=>R[Q]?.includes(I)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Y=await Avalanche.parseAvalancheTx(x,p,l),ue=ke(Y);if(Y.type==="unknown"||ue===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Se={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Y,vm:c,unsignedTxJson:JSON.stringify(x.toJSON()),ownSignatureIndices:T},Ce=ve(ue,t.networkToken.symbol),Z={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:Ce},M=await a.requestApproval({request:e,displayData:Z,signingData:Se});return "error"in M?{error:M.error}:"signedData"in M?{result:M.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var J,de,K,X,z,Mt=class{constructor({approvalController:t,environment:a,appInfo:n}){S(this,J,void 0);S(this,de,void 0);S(this,K,void 0);S(this,X,void 0);S(this,z,void 0);let{glacierApiUrl:r,proxyApiUrl:s}=nt(a);C(this,z,n),C(this,J,new Te({glacierApiUrl:r,headers:L(n)})),C(this,de,s),C(this,K,r),C(this,X,t);}getProvider(t){return P({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r}){return xt({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r})}getBalances({addresses:t,network:a,storage:n,currency:r}){let s=new oe({storage:n,proxyApiUrl:y(this,de)});return gt({addresses:t,currency:r,network:a,glacierService:y(this,J),tokenService:s})}getManifest(){let t=parseManifest(je);return t.success?t.data:void 0}getNetworkFee(t){return We()}getTransactionHistory({network:t,address:a,nextPageToken:n,offset:r}){return tt({network:t,address:a,nextPageToken:n,offset:r,glacierService:y(this,J)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,a){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return vt({request:t,network:a,approvalController:y(this,X)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return Et({request:t,network:a,approvalController:y(this,X),glacierApiUrl:y(this,K),appInfo:y(this,z)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return Bt({request:t,network:a,approvalController:y(this,X),glacierApiUrl:y(this,K),appInfo:y(this,z)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return ht({blockchainId:t,isTestnet:a})}};J=new WeakMap,de=new WeakMap,K=new WeakMap,X=new WeakMap,z=new WeakMap;var Js=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Ks=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
13
+ var Gt=Object.defineProperty;var Ft=(e,t,a)=>t in e?Gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var U=(e,t,a)=>(Ft(e,typeof t!="symbol"?t+"":t,a),a),ze=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var f=(e,t,a)=>(ze(e,t,"read from private field"),a?a.call(e):t.get(e)),S=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a);},b=(e,t,a,n)=>(ze(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var Ye={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.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"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"]}},manifestVersion:"0.0"};var k=async({isTestnet:e,isDevnet:t})=>{let a=t?AVALANCHE_P_DEV_NETWORK:e?AVALANCHE_XP_TEST_NETWORK:AVALANCHE_XP_NETWORK,n=await new info.InfoApi(a.rpcUrl).getUpgradesInfo().catch(()=>{});return t?Avalanche.JsonRpcProvider.getDefaultDevnetProvider(n):e?Avalanche.JsonRpcProvider.getDefaultFujiProvider(n):Avalanche.JsonRpcProvider.getDefaultMainnetProvider(n)};async function Ze({isTestnet:e,isDevnet:t,vmName:a}){let n=await k({isTestnet:e,isDevnet:t});if(a===NetworkVMType.AVM||!n.isEtnaEnabled())return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:r}=await n.getApiP().getFeeState(),s=100/Number(r)/100,i=Math.min(1,Math.max(s,.15)),o=Math.min(1,Math.max(s*2,.3)),l=1+i,c=1+o;return {baseFee:r,low:{maxFeePerGas:r},medium:{maxFeePerGas:r*BigInt(Math.round(100*l))/100n},high:{maxFeePerGas:r*BigInt(Math.round(100*c))/100n},isFixedFee:!1}}var tt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,at=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function he(e,t,a="tx"){return `${e}/${a}/${t}`}function _({amount:e,decimals:t}){return e===void 0?new N(0):new N(e/10**t)}function rt({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(p=>p.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(p=>p.addresses)||[]),l=zt({tx:e,isTestnet:s,networkToken:a,froms:i}),c=Yt({tx:e,isTestnet:s,networkToken:a}),u=t.toLowerCase().startsWith("p-")?t.slice(2):t,m=i.has(u);return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...o.values()].join(","),isSender:m,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:l.toString()}],gasUsed:c.toString(),explorerLink:he(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function zt({tx:e,isTestnet:t,networkToken:a,froms:n}){let r=["ImportTx","ExportTx"].includes(e.txType),s=e.txType==="BaseTx",i=e.emittedUtxos.filter(p=>p.asset.assetId===te(!!t)&&!p.addresses.some(d=>n.has(d))).reduce((p,d)=>p.add(d.asset.amount),new N(0)),o=e.value.find(p=>p.assetId===te(!!t))?.amount,l=i.gt(new N(0))?i:o?new N(o):new N(0)??new N(0),c=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,u=e.emittedUtxos.filter(p=>p.asset.assetId===te(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===c||e.txType==="ExportTx"&&p.consumedOnChainId!==c)).reduce((p,d)=>p.add(d.amount),new N(0)),m=s?l:r?u:e.amountStaked.length===0?nt(e.value,!!t):nt(e.amountStaked,!!t);return _({amount:m?.toNumber(),decimals:a.decimals})}function Yt({tx:e,isTestnet:t,networkToken:a}){let n=e.amountBurned?.filter(r=>r.assetId===te(!!t)).reduce((r,s)=>r.add(s.amount),new N(0));return _({amount:n?.toNumber(),decimals:a.decimals})}function nt(e,t){return e.filter(a=>a.assetId===te(t)).reduce((a,n)=>a.add(n.amount),new N(0))}function te(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function st({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(g=>g.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(g=>g.addresses)||[]),l=t.toLowerCase().startsWith("x-")?t.slice(2):t,c=["ImportTx","ExportTx"].includes(e.txType),{amount:u,isSender:m}=Qt({tx:e,isTestnet:s,networkToken:a,chainAddress:l,isImportExport:c}),p=ea({isTestnet:s,tx:e,networkToken:a}),d=c?u.toString():m?u.minus(p).toString():u.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...i.values()].join(","),to:[...o.values()].join(","),isSender:m,timestamp:e.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:d}],gasUsed:p.toString(),explorerLink:he(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function Qt({tx:e,isTestnet:t,networkToken:a,chainAddress:n,isImportExport:r}){if(r){let c=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,u=e.emittedUtxos.filter(m=>m.asset.assetId===ne(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===c||e.txType==="ExportTx"&&m.consumedOnChainId!==c)).reduce((m,p)=>m.add(p.asset.amount),new N(0));return {amount:_({amount:u.toNumber(),decimals:a.decimals}),isSender:!0}}let s=e.consumedUtxos.filter(c=>c.asset.assetId===ne(!!t)&&c.addresses.includes(n)).reduce((c,u)=>c.add(u.asset.amount),new N(0)),i=e.emittedUtxos.filter(c=>c.asset.assetId===ne(!!t)&&c.addresses.includes(n)).reduce((c,u)=>c.add(u.asset.amount),new N(0)),o=s.gte(i),l=o?s.minus(i):i.minus(s);return {amount:_({amount:l.toNumber(),decimals:a.decimals}),isSender:o}}function ea({isTestnet:e,tx:t,networkToken:a}){let n=t.amountUnlocked.filter(i=>i.assetId===ne(!!e)).reduce((i,o)=>i.add(o.amount),new N(0)),r=t.amountCreated.filter(i=>i.assetId===ne(!!e)).reduce((i,o)=>i.add(o.amount),new N(0)),s=n.minus(r);return _({amount:s.toNumber(),decimals:a.decimals})}function ne(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var T=e=>e.chainId===ChainId.AVALANCHE_DEVNET_P||e.chainId===43117||e.chainId===ChainId.AVALANCHE_DEVNET_X;var ct=async({address:e,nextPageToken:t,offset:a,network:n,glacierService:r})=>{let{isTestnet:s,networkToken:i,explorerUrl:o,chainId:l}=n;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let u=T(n)?Network.DEVNET:n.isTestnet?Network.FUJI:Network.MAINNET,m=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:aa(e),network:u,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),p=[];return tt(m)&&(p=m.transactions.map(d=>rt({tx:d,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:l}))),at(m)&&(p=m.transactions.map(d=>st({tx:d,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:l}))),{transactions:p,nextPageToken:m.nextPageToken}},aa=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var na={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ra={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},we=e=>{switch(e){case Environment.PRODUCTION:return na;case Environment.DEV:return ra}};var Te=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},xe=class{constructor({glacierApiUrl:t,headers:a}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:a});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(a){throw a instanceof Te&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof Te&&this.setGlacierToUnhealthy(),a}}};var L=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:n=re.exponential()})=>{let r=0,s=0,i;for(;s<a;){s>0&&await oa(r);try{let l=await e(s);if(t(l))return l}catch(l){i=l;}r=n(s),s++;}let o=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(o)},re=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function oa(e){return new Promise(t=>setTimeout(t,e))}var Ee=e=>L({operation:t=>e(t>0),maxRetries:2,backoffPolicy:re.constant(1),isSuccess:t=>t?.status?.error_code!==429});function pt(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function Me(e){let t,a=0;for(t=0;t<e.length;t++){let n=pt(e[t]??"");a=a+65027/n;}return (""+a).slice(0,16)}async function Ae(e,t){let a=await fetch(...e);if(!a.ok)throw new Error(`Request failed with status ${a.status}`);let n=await a.json();return t.parse(n)}var se=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let a=new URLSearchParams(t);return Ae([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:a,...n}=t,r=new URLSearchParams(n);return Ae([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${a}?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],SimplePriceResponseSchema)}};var mt=getBasicCoingeckoHttp(),w,F,ie=class{constructor({storage:t,proxyApiUrl:a}){S(this,w,void 0);S(this,F,void 0);U(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let n={};return Object.keys(t).forEach(r=>{let s=t[r];n[r]={},a.forEach(i=>{n[r]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),n});b(this,w,t),b(this,F,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let n,s=`getSimplePrice-${t?`${Me(t)}-${a.toString()}`:`${a.toString()}`}`;if(n=f(this,w)?.get?.(s),n)return n;try{n=await Ee(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return f(this,w)?.set?.(s,n),n}async getPricesByAddresses(t,a,n=VsCurrencyType.USD){let r,i=`getPricesWithMarketDataByAddresses-${`${Me(t)}-${a}-${n}`}`;if(r=f(this,w)?.get?.(i),r)return r;try{r=await Ee(o=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:n,useCoingeckoProxy:o}));}catch{r=void 0;}return f(this,w)?.set?.(i,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:n=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?new se(f(this,F)).simplePriceByContractAddresses({id:t,contract_addresses:a,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(mt,{assetPlatformId:t,tokenAddresses:a,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD],marketCap:n=!1,vol24:r=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:o=!1,shouldThrow:l=!0}){if(o){let c=await new se(f(this,F)).simplePrice({ids:t,vs_currencies:a,include_market_cap:n,include_24hr_vol:r,include_24hr_change:s,include_last_updated_at:i});return this.transformSimplePriceResponse(c,a)}return simplePrice(mt,{coinIds:t,currencies:a,marketCap:n,vol24:r,change24:s,lastUpdated:i,shouldThrow:l})}};w=new WeakMap,F=new WeakMap;object({date:string(),usd:record(number())});var E=(e,t,a,n)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:a,symbol:n}),h=(e,t,a="horizontal")=>({label:e,alignment:a,type:DetailItemType.TEXT,value:t});var Ve=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t}),P=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var M=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var H=({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"),ut=e=>Object.keys(e).includes("locked");function ve(e){let t=Object.values(e).reduce(function(a,n){let r=n.reduce(function(s,i){let o=Number(i.amount);return s+o},0);return a+r},0);return BigInt(t)}var ht=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:s,coingeckoId:i})=>{let o={},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 g=l[d];if(!g||!g.length){o[d]=0n;continue}g.forEach(y=>{let v=(o[d]??0n)+BigInt(y.amount);o[d]=v;});}let c=new TokenUnit(o.unlockedUnstaked?o.unlockedUnstaked:0n,t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ve(e),t.decimals,t.symbol),p=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:m.toSubUnit(),balanceInCurrency:p,balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:p?.toFixed(2),available:c.toSubUnit(),availableInCurrency:u,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:u?.toFixed(2),utxos:e,balancePerType:{lockedStaked:o.lockedStaked,lockedStakeable:o.lockedStakeable,lockedPlatform:o.lockedPlatform,atomicMemoryLocked:o.atomicMemoryLocked,atomicMemoryUnlocked:o.atomicMemoryUnlocked,unlockedUnstaked:o.unlockedUnstaked,unlockedStaked:o.unlockedStaked,pendingStaked:o.pendingStaked},marketCap:n,vol24:r,change24:s,coingeckoId:i}};var yt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:s,coingeckoId:i})=>{let o={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let d in l){let g=l[d];if(!g||!g.length){o[d]=0n;continue}g.forEach(y=>{let v=(o[d]??0n)+BigInt(y.amount);o[d]=v;});}let c=new TokenUnit(o.unlocked?o.unlocked:0n,t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ve(e),t.decimals,t.symbol),p=a!==void 0?m.mul(a):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:a,balance:m.toSubUnit(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),available:c.toSubUnit(),availableInCurrency:u,availableDisplayValue:c.toDisplay(),availableCurrencyDisplayValue:u?.toFixed(2),utxos:e,balancePerType:{unlocked:o.unlocked,locked:o.locked,atomicMemoryUnlocked:o.atomicMemoryUnlocked,atomicMemoryLocked:o.atomicMemoryLocked},marketCap:n,vol24:r,change24:s}};var xt=async({addresses:e,currency:t,network:a,glacierService:n,tokenService:r})=>{if(!n.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),o=e[0]??"",l=a.networkToken,c=a.pricingProviders?.coingecko.nativeTokenId,u=a.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,m=T(a)?Network.DEVNET:a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.getChainBalance({blockchainId:u,network:m,addresses:e.join(",")}).then(B=>B.balances),d=c?await r.getSimplePrice({coinIds:[c],currencies:[i]}):{},g=d?.[c??""]?.[i]?.price??void 0,y=d?.[c??""]?.[i]?.marketCap??void 0,A=d?.[c??""]?.[i]?.vol24??void 0,v=d?.[c??""]?.[i]?.change24??void 0,x;return dt(p)?(x=ht({balance:p,networkToken:l,priceInCurrency:g,marketCap:y,vol24:A,change24:v,coingeckoId:c??""}),{[o]:{[l.symbol]:x}}):ut(p)?(x=yt({balance:p,networkToken:l,priceInCurrency:g,marketCap:y,vol24:A,change24:v,coingeckoId:c??""}),{[o]:{[l.symbol]:x}}):Promise.reject("Incorrect type balance was returned from glacier")};function At({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,n=xa.createHash("sha256").update(a).digest("base64");return "avax:"+Aa(n).substring(0,32)}var Aa=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Pt=async({accountIndex:e,isTestnet:t,xpubXP:a,walletType:n})=>{if(a===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let r=await k({isTestnet:!!t}),s;switch(n){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(a,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(a,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${n}`)}return {[NetworkVMType.AVM]:r.getAddress(s,"X"),[NetworkVMType.PVM]:r.getAddress(s,"P")}};var ka=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")])]),It=e=>ka.safeParse(e);var St=async({request:e,network:t,approvalController:a})=>{let n=It(e.params);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:n.error}})};let[r,s]=n.data,i=Buffer.from(r,"utf-8").toString("hex"),o={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:s},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:[r]}]},c=await a.requestApproval({request:e,displayData:l,signingData:o});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Ia=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()}),bt=e=>Ia.safeParse(e);var Rt=({utxoHexes:e=[],vm:t})=>{try{let a=utils.getManagerForVM(t).getDefaultCodec();return e.map(n=>{let r=utils.hexToBuffer(n);return Utxo.fromBytes(r,a)[0]})}catch{return []}};var ke=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.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 Bt=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";default:return "Sign Message"}};var _e=async({indices:e,chainAlias:t,isChange:a,isTestnet:n,xpubXP:r})=>{if(!r||a&&t!=="X")return [];let s=await k({isTestnet:n});return e.map(i=>Avalanche.getAddressFromXpub(r,i,s,t,a))};var Le=e=>e.type===TxType.AddPermissionlessDelegator,He=e=>e.type===TxType.AddPermissionlessValidator,Xe=e=>e.type===TxType.Export,Ge=e=>e.type===TxType.Import,ba=e=>e.type===TxType.Base,Fe=e=>e.type===TxType.AddSubnetValidator,Da=e=>e.type===TxType.CreateChain,Ra=e=>e.type===TxType.CreateSubnet,Oe=e=>e.type===TxType.RemoveSubnetValidator,rs=e=>Le(e)||He(e)||Fe(e)||Oe(e),ss=e=>Xe(e)||Ge(e),Nt=e=>ba(e),wt=e=>Da(e),Et=e=>Ra(e);function je(e){return e===Avalanche.MainnetContext.pBlockchainID}var Pe=(e,t)=>{let a=[];if(Nt(e)){let{chain:r,outputs:s,memo:i}=e;a.push({title:"Chain Details",items:[h("Active chain",`Avalanche ${J[r]}`)]}),s.forEach((o,l)=>{let c=o.owners.flatMap(u=>[Ve("To",u),E("Amount",o.amount,9,t)]);o.owners.length>1&&c.push(h("Threshold",o.threshold.toString())),a.push({title:l===0?"Balance Change":void 0,items:c});}),r!==PVM&&i&&a.push({title:"Memo",items:[i]});}else if(Xe(e)){let{amount:r,chain:s,destination:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${J[s]}`),h("Target Chain",`Avalanche ${J[i]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),E("Amount",r,9,t)]});}else if(Ge(e)){let{amount:r,chain:s,source:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${J[i]}`),h("Destination Chain",`Avalanche ${J[s]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),E("Amount",r,9,t)]});}else if(Et(e)){let{threshold:r,controlKeys:s}=e;a.push({title:"Subnet Details",items:[h(s.length>1?"Owners":"Owner",s.join(`
14
+ `),"vertical"),h("Signature Threshold",`${r}/${s.length}`,"vertical")]});}else if(Le(e)){let{nodeID:r,start:s,end:i,stake:o,subnetID:l}=e,c=[P("Node ID",r),je(l)?h("Subnet ID","Primary Network"):P("Subnet ID",l),E("Stake Amount",o,9,t),M("Start Date",s),M("End Date",i)];a.push({title:"Staking Details",items:c});}else if(He(e)){let{nodeID:r,delegationFee:s,start:i,end:o,stake:l,subnetID:c,signature:u,publicKey:m}=e,p=[P("Node ID",r),je(c)?h("Subnet ID","Primary Network"):P("Subnet ID",c)];m&&u&&p.push(P("Public Key",m),P("Proof",u)),p.push(E("Stake Amount",l,9,t),h("Delegation Fee",`${s/1e4} %`),M("Start Date",i),M("End Date",o)),a.push({title:"Staking Details",items:p});}else if(wt(e)){let{chainID:r,chainName:s,vmID:i,genesisData:o}=e,l=[h("Blockchain name",s,"vertical"),h("Blockchain ID",r,"vertical"),h("Virtual Machine ID",i,"vertical"),h("Genesis Data",o,"vertical")];a.push({title:"Blockchain Details",items:l});}else if(Fe(e)){let{nodeID:r,start:s,end:i,subnetID:o}=e,l=[P("Subnet ID",o),P("Node ID",r),M("Start Date",s),M("End Date",i)];a.push({title:"Staking Details",items:l});}else if(Oe(e)){let{nodeID:r,subnetID:s}=e,i=[P("Node ID",r),P("Subnet ID",s)];a.push({title:"Staking Details",items:i});}let{txFee:n}=e;return n&&a.push({title:"Network Fee",items:[E("Fee Amount",n,9,t)]}),a},J=(n=>(n.AVM="X Chain",n.PVM="P Chain",n.EVM="C Chain",n))(J||{});var Va=process.env.GLACIER_API_KEY,Mt=async({request:e,network:t,approvalController:a,glacierApiUrl:n,appInfo:r})=>{let s=bt(e.params);if(!s.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s.error}})};try{let{transactionHex:i,chainAlias:o,externalIndices:l,internalIndices:c,utxos:u}=s.data,m=Avalanche.getVmByChainAlias(o),p=utils.hexToBuffer(i),d=t.isTestnet??!1,g=await k({isTestnet:d,isDevnet:T(t)}),y=e.context?.currentAddress;if(!y||typeof y!="string")return {error:rpcErrors.invalidRequest("No active account found")};let A=Rt({utxoHexes:u,vm:m}),v=A.length?A:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,network:T(t)?Network.DEVNET:d?Network.FUJI:Network.MAINNET,url:n,token:Va,headers:H(r)}),x;if(o==="C")x=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:p,vm:m,utxos:v,fromAddress:y});else {let ee=utils.unpackWithManager(m,p),C=e.context?.xpubXP;if(C!==void 0&&typeof C!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let De=await _e({indices:l??[],chainAlias:o,isChange:!1,isTestnet:d,xpubXP:C}),Re=await _e({indices:c??[],chainAlias:o,isChange:!0,isTestnet:d,xpubXP:C}),Ht=[...new Set([y,...De,...Re])].map(Xt=>utils.parse(Xt)[2]);x=await Avalanche.createAvalancheUnsignedTx({tx:ee,utxos:v,provider:g,fromAddressBytes:Ht});}let B=await Avalanche.parseAvalancheTx(x,g,y),Ce=ke(B),Z=Bt(B);if(B.type==="unknown"||Ce===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ge={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(x.toJSON()),data:B,vm:m,externalIndices:l,internalIndices:c},Se=Pe(Ce,t.networkToken.symbol),be={title:Z,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Se,networkFeeSelector:!1},Q=await a.requestApproval({request:e,displayData:be,signingData:ge});if("error"in Q)return {error:Q.error};let V=await Ua(g,Q,m);return _a({provider:g,txHash:V,vm:m,onTransactionConfirmed:a.onTransactionConfirmed,onTransactionReverted:a.onTransactionReverted,requestId:e.requestId}),{result:V}}catch(i){return console.error(i),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:i}})}}},Ua=async(e,t,a)=>{if("txHash"in t)return t.txHash;let{txID:n}=await e.issueTxHex(t.signedData,a);return n},_a=async({provider:e,txHash:t,vm:a,onTransactionConfirmed:n,onTransactionReverted:r,requestId:s})=>{try{a===PVM?(await L({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:l=>["Committed","Dropped"].includes(l.status),maxRetries:7})).status==="Committed"?n(t,s):r(t,s):a===AVM?(await L({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:l=>["Accepted","Rejected"].includes(l.status),maxRetries:7})).status==="Accepted"?n(t,s):r(t,s):(await L({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:l=>["Accepted","Dropped"].includes(l.status),maxRetries:7})).status==="Accepted"?n(t,s):r(t,s);}catch(o){console.error(o),o instanceof Error&&o.message.startsWith("Max retry exceeded.")||r(t,s);}};var La=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),Vt=e=>La.safeParse(e);var Ga=process.env.GLACIER_API_KEY,_t=async({request:e,network:t,approvalController:a,glacierApiUrl:n,appInfo:r})=>{let s=Vt(e.params);if(!s.success)return console.error("invalid params",s.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:i,chainAlias:o,from:l}=s.data,c=Avalanche.getVmByChainAlias(o),u=utils.hexToBuffer(i),m=t.isTestnet??!1,p=await k({isTestnet:m,isDevnet:T(t)}),d=utils.unpackWithManager(c,u),g=await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,network:T(t)?Network.DEVNET:m?Network.FUJI:Network.MAINNET,url:n,token:Ga,headers:H(r)}),y;try{let C=utils.getManagerForVM(c).unpack(u,avaxSerial.SignedTx),De=await Avalanche.createAvalancheUnsignedTx({tx:d,utxos:g,provider:p,credentials:C.getCredentials()});y=d.getSigIndices().map((Re,Ke)=>new Credential(Avalanche.populateCredential(Re,{unsignedTx:De,credentialIndex:Ke})));}catch{y=d.getSigIndices().map(C=>new Credential(Avalanche.populateCredential(C)));}let A=await Avalanche.createAvalancheUnsignedTx({tx:d,provider:p,credentials:y,utxos:g}),v=utils.addressesFromBytes([utils.parse(l)[2]])[0];if(!v)return {error:rpcErrors.invalidRequest("Missing signer address")};let x=A.getSigIndicesForAddress(v);if(!x)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let B=A.getSigIndices();if(!x.some(([ee,C])=>B[ee]?.includes(C)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Z=await Avalanche.parseAvalancheTx(A,p,l),ge=ke(Z);if(Z.type==="unknown"||ge===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Se={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Z,vm:c,unsignedTxJson:JSON.stringify(A.toJSON()),ownSignatureIndices:x},be=Pe(ge,t.networkToken.symbol),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:be},V=await a.requestApproval({request:e,displayData:Q,signingData:Se});return "error"in V?{error:V.error}:"signedData"in V?{result:V.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var K,ue,z,G,Y,Lt=class{constructor({approvalController:t,environment:a,appInfo:n}){S(this,K,void 0);S(this,ue,void 0);S(this,z,void 0);S(this,G,void 0);S(this,Y,void 0);let{glacierApiUrl:r,proxyApiUrl:s}=we(a);b(this,Y,n),b(this,K,new xe({glacierApiUrl:r,headers:H(n)})),b(this,ue,s),b(this,z,r),b(this,G,t);}getProvider(t){return k({isTestnet:!!t.isTestnet,isDevnet:T(t)})}getAddress({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r}){return Pt({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r})}getBalances({addresses:t,network:a,storage:n,currency:r}){let s=T(a)?we(Environment.DEV).proxyApiUrl:f(this,ue),i=new ie({storage:n,proxyApiUrl:s});return xt({addresses:t,currency:r,network:a,glacierService:f(this,K),tokenService:i})}getManifest(){let t=parseManifest(Ye);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:a,vmName:n}=t;return Ze({isTestnet:!!a,isDevnet:T(t),vmName:n})}getTransactionHistory({network:t,address:a,nextPageToken:n,offset:r}){return ct({network:t,address:a,nextPageToken:n,offset:r,glacierService:f(this,K)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,a){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return St({request:t,network:a,approvalController:f(this,G)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return _t({request:t,network:a,approvalController:f(this,G),glacierApiUrl:f(this,z),appInfo:f(this,Y)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return Mt({request:t,network:a,approvalController:f(this,G),glacierApiUrl:f(this,z),appInfo:f(this,Y)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return At({blockchainId:t,isTestnet:a})}};K=new WeakMap,ue=new WeakMap,z=new WeakMap,G=new WeakMap,Y=new WeakMap;var uo=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,go=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
15
15
 
16
- export { Mt as AvalancheModule, Ee as isAddPermissionlessDelegatorTx, Me as isAddPermissionlessValidatorTx, _e as isAddSubnetValidatorTx, ka as isBaseTx, Dt as isBlockchainDetails, bt as isChainDetails, va as isCreateChainTx, Ia as isCreateSubnetTx, $r as isExportImportTxDetails, Ue as isExportTx, Ve as isImportTx, Le as isRemoveSubnetValidatorTx, Wr as isStakingDetails, Rt as isSubnetDetails, Ks as isTokenWithBalanceAVM, Js as isTokenWithBalancePVM };
16
+ export { Lt as AvalancheModule, Le as isAddPermissionlessDelegatorTx, He as isAddPermissionlessValidatorTx, Fe as isAddSubnetValidatorTx, ba as isBaseTx, wt as isBlockchainDetails, Nt as isChainDetails, Da as isCreateChainTx, Ra as isCreateSubnetTx, ss as isExportImportTxDetails, Xe as isExportTx, Ge as isImportTx, Oe as isRemoveSubnetValidatorTx, rs as isStakingDetails, Et as isSubnetDetails, go as isTokenWithBalanceAVM, uo as isTokenWithBalancePVM };
17
17
  //# sourceMappingURL=out.js.map
18
18
  //# sourceMappingURL=index.js.map