@avalabs/avalanche-module 3.3.0 → 3.4.0

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
@@ -17,16 +17,16 @@ declare class AvalancheModule implements Module {
17
17
  buildDerivationPath(params: BuildDerivationPathParams): Pick<Partial<Record<_avalabs_vm_module_types.NetworkVMType, string>>, _avalabs_vm_module_types.NetworkVMType.AVM | _avalabs_vm_module_types.NetworkVMType.CoreEth>;
18
18
  deriveAddress(params: DeriveAddressParams): Promise<DeriveAddressResponse>;
19
19
  onRpcRequest(request: RpcRequest, network: Network): Promise<{
20
+ error: _metamask_rpc_errors.JsonRpcError<{
21
+ cause: unknown;
22
+ }>;
23
+ result?: undefined;
24
+ } | {
20
25
  error: _avalabs_vm_module_types.RpcError;
21
26
  result?: undefined;
22
27
  } | {
23
28
  result: string;
24
29
  error?: undefined;
25
- } | {
26
- error: _metamask_rpc_errors.JsonRpcError<{
27
- cause: unknown;
28
- }>;
29
- result?: undefined;
30
30
  }>;
31
31
  static getHashedBlockchainId({ blockchainId, isTestnet }: {
32
32
  blockchainId: string;
package/dist/index.d.ts CHANGED
@@ -17,16 +17,16 @@ declare class AvalancheModule implements Module {
17
17
  buildDerivationPath(params: BuildDerivationPathParams): Pick<Partial<Record<_avalabs_vm_module_types.NetworkVMType, string>>, _avalabs_vm_module_types.NetworkVMType.AVM | _avalabs_vm_module_types.NetworkVMType.CoreEth>;
18
18
  deriveAddress(params: DeriveAddressParams): Promise<DeriveAddressResponse>;
19
19
  onRpcRequest(request: RpcRequest, network: Network): Promise<{
20
+ error: _metamask_rpc_errors.JsonRpcError<{
21
+ cause: unknown;
22
+ }>;
23
+ result?: undefined;
24
+ } | {
20
25
  error: _avalabs_vm_module_types.RpcError;
21
26
  result?: undefined;
22
27
  } | {
23
28
  result: string;
24
29
  error?: undefined;
25
- } | {
26
- error: _metamask_rpc_errors.JsonRpcError<{
27
- cause: unknown;
28
- }>;
29
- result?: undefined;
30
30
  }>;
31
31
  static getHashedBlockchainId({ blockchainId, isTestnet }: {
32
32
  blockchainId: string;
package/dist/index.js CHANGED
@@ -6,14 +6,14 @@ import L from 'big.js';
6
6
  import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
7
7
  import { z, object, string, record, number } from 'zod';
8
8
  import { TokenUnit } from '@avalabs/core-utils-sdk';
9
- import Zr from 'crypto';
9
+ import ea from 'crypto';
10
10
  import { utils, PVM, AVM, Utxo, evmSerial, avaxSerial, Credential } from '@avalabs/avalanchejs';
11
11
 
12
- var Dr=Object.defineProperty;var Sr=(e,t,r)=>t in e?Dr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var O=(e,t,r)=>(Sr(e,typeof t!="symbol"?t+"":t,r),r),xt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(xt(e,t,"read from private field"),r?r.call(e):t.get(e)),w=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},R=(e,t,r,a)=>(xt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var yt={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a","avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd","avax:Rr9hnPVPxuUvrdCul-vjEsU1zmqKqRDo","avax:Sj7NVE3jXTbJvwFAiu7OEUo_8g8ctXMG","avax:imji8papUf2EhV3le337w1vgFauqkJg-","avax:8AJTpRj3SAqv1e80Mtl9em08LhvKEbkl","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function Tt({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),s=Math.min(1,Math.max(n*2,.3)),i=1+o,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 kt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,Dt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function Y(e,t,r="tx"){return `${e}/${r}/${t}`}function X({amount:e,decimals:t}){return e===void 0?new L(0):new L(e/10**t)}function Pt({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=Nr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=wr({tx:e,isTestnet:o,networkToken:r}),m=t.toLowerCase().startsWith("p-")?t.slice(2):t,p=s.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:Y(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Nr({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===de(!!t)&&!d.addresses.some(h=>a.has(h))).reduce((d,h)=>d.add(h.asset.amount),new L(0)),i=e.value.find(d=>d.assetId===de(!!t))?.amount,c=s.gt(new L(0))?s:i?new L(i):new L(0)??new L(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(d=>d.asset.assetId===de(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,h)=>d.add(h.amount),new L(0)),p=o?c:n?m:e.amountStaked.length===0?St(e.value,!!t):St(e.amountStaked,!!t);return X({amount:p?.toNumber(),decimals:r.decimals})}function wr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===de(!!t)).reduce((n,o)=>n.add(o.amount),new L(0));return X({amount:a?.toNumber(),decimals:r.decimals})}function St(e,t){return e.filter(r=>r.assetId===de(t)).reduce((r,a)=>r.add(a.amount),new L(0))}function de(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function bt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(f=>f.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(f=>f.addresses)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:m,isSender:p}=Vr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),d=Br({isTestnet:o,tx:e,networkToken:r}),h=l?m.toString():p?m.minus(d).toString():m.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:h}],gasUsed:d.toString(),explorerLink:Y(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Vr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,m=e.emittedUtxos.filter(p=>p.asset.assetId===ge(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===l||e.txType==="ExportTx"&&p.consumedOnChainId!==l)).reduce((p,d)=>p.add(d.asset.amount),new L(0));return {amount:X({amount:m.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===ge(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new L(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===ge(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new L(0)),i=o.gte(s),c=i?o.minus(s):s.minus(o);return {amount:X({amount:c.toNumber(),decimals:r.decimals}),isSender:i}}function Br({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ge(!!e)).reduce((s,i)=>s.add(i.amount),new L(0)),n=t.amountCreated.filter(s=>s.assetId===ge(!!e)).reduce((s,i)=>s.add(i.amount),new L(0)),o=a.minus(n);return X({amount:o.toNumber(),decimals:r.decimals})}function ge(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var wt=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 m=a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Mr(e),network:m,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return kt(p)&&(d=p.transactions.map(h=>Pt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),Dt(p)&&(d=p.transactions.map(h=>bt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:d,nextPageToken:p.nextPageToken}},Mr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Lr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Ur={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Vt=e=>{switch(e){case Environment.PRODUCTION:return Lr;case Environment.DEV:return Ur}};var G=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=Q.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await _r(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 _r(e){return new Promise(t=>setTimeout(t,e))}var Oe=e=>G({operation:t=>e(t>0),maxRetries:2,backoffPolicy:Q.constant(1),isSuccess:t=>t?.status?.error_code!==429});function Bt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Xe(e){let t,r=0;for(t=0;t<e.length;t++){let a=Bt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function H(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 he=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return H([`${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 H([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var Fr=z.array(z.object({internalId:z.string(),id:z.string(),symbol:z.string(),name:z.string(),image:z.string().optional().nullable(),current_price:z.number().optional().nullable(),price_change_percentage_24h:z.number().optional().nullable(),market_cap:z.number().optional().nullable(),total_volume:z.number().optional().nullable(),platforms:z.record(z.string(),z.string())})),Ne=class{constructor(t){this.proxyApiUrl=t;}watchlistToken(t){let r=new URLSearchParams(t);return H([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Fr)}};var Mt=getBasicCoingeckoHttp(),U,W,fe=class{constructor({storage:t,proxyApiUrl:r}){w(this,U,void 0);w(this,W,void 0);O(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(s=>{a[n]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),a});R(this,U,t),R(this,W,r);}async getWatchlistDataForToken({tokenDetails:t,currency:r=VsCurrencyType.USD}){let n=(await new Ne(A(this,W)).watchlistToken({tokens:t.symbol,currency:r})).filter(o=>t.isNative?o.internalId===`NATIVE-${t.symbol.toLowerCase()}`:o.platforms[t.caip2Id]===t.address)[0];return n?{priceInCurrency:n.current_price??0,change24:n.price_change_percentage_24h??0,marketCap:n.market_cap??0,vol24:n.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Xe(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,U)?.get?.(o),a)return a;try{a=await Oe(s=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{a=void 0;}return A(this,U)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${Xe(t)}-${r}-${a}`}`;if(n=A(this,U)?.get?.(s),n)return n;try{n=await Oe(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:i}));}catch(i){console.error(i),n=void 0;}return A(this,U)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new he(A(this,W)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(Mt,{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 he(A(this,W)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(Mt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};U=new WeakMap,W=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),x=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var V=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t}),Ge=(e,t)=>({label:e,type:DetailItemType.DATA,value:t}),N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t}),we=(e,t)=>({label:e,type:DetailItemType.NETWORK,value:t});var j=({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 Lt=process.env.GLACIER_API_KEY;var $=()=>Lt;var Jr={rltoken:$()},xe=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={...Jr,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var Re=class extends Error{constructor(){super(...arguments);O(this,"message","Glacier is unhealthy. Try again later.");}},Ve=class{constructor({glacierApiUrl:t,headers:r}){O(this,"glacierSdk");O(this,"isGlacierHealthy",!0);O(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r},xe);}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 Re&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof Re&&this.setGlacierToUnhealthy(),r}}};var Ut=e=>Object.keys(e).includes("unlockedUnstaked"),_t=e=>Object.keys(e).includes("locked");function Be(e,t){let r=Object.values(e).reduce(function(a,n){let o=n.reduce(function(s,i){if(i.assetId!==t)return s;let c=Number(i.amount);return s+c},0);return a+o},0);return BigInt(r)}var Ot=({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 f in l){let y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(k=>{if(k.assetId!==i)return;let C=(c[f]??0n)+BigInt(k.amount);c[f]=C;});}let m=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),p=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(Be(e,i),t.decimals,t.symbol),h=r?d.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:m.toSubUnit(),availableInCurrency:p,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:p?.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 Gt=({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 f in l){let y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(k=>{if(k.assetId!==i)return;let C=(c[f]??0n)+BigInt(k.amount);c[f]=C;});}let m=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),p=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(Be(e,i),t.decimals,t.symbol),h=r!==void 0?d.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:p,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:p?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var qt=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await I({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,m=r.pricingProviders?.coingecko.nativeTokenId,p=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:p,network:d,addresses:e.join(",")}).then(k=>k.balances),f=await n.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:i}),y;return Ut(h)?(y=Ot({balance:h,networkToken:l,priceInCurrency:f.priceInCurrency??void 0,marketCap:f.marketCap??void 0,vol24:f.vol24??void 0,change24:f.change24??void 0,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:y}}):_t(h)?(y=Gt({balance:h,networkToken:l,priceInCurrency:f.priceInCurrency??void 0,marketCap:f.marketCap??void 0,vol24:f.vol24??void 0,change24:f.change24??void 0,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:y}}):Promise.reject("Incorrect type balance was returned from glacier")};function jt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=Zr.createHash("sha256").update(r).digest("base64");return "avax:"+ea(a).substring(0,32)}var ea=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Kt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),s;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(s,"X"),[NetworkVMType.PVM]:o.getAddress(s,"P")}};var ra=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),zt=e=>ra.safeParse(e);var Qt=async({request:e,network:t,approvalController:r})=>{let a=zt(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 na=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()}),Zt=e=>na.safeParse(e);var Ee=({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 Me=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddPermissionlessValidator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator: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 tr=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 He=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n,externalXPAddresses:o})=>{if(r&&t!=="X")return [];if(n){let s=await I({isTestnet:a});return e.map(i=>Avalanche.getAddressFromXpub(n,i,s,t,r))}return o&&Array.isArray(o)?e.map(i=>o.find(c=>c.index===i)).filter(i=>i!==void 0).map(i=>i.address):[]};var We=e=>e.type===TxType.AddPermissionlessDelegator,qe=e=>e.type===TxType.AddPermissionlessValidator,je=e=>e.type===TxType.Export,$e=e=>e.type===TxType.Import,ia=e=>e.type===TxType.Base,Je=e=>e.type===TxType.AddSubnetValidator,ca=e=>e.type===TxType.CreateChain,la=e=>e.type===TxType.CreateSubnet,Ke=e=>e.type===TxType.RemoveSubnetValidator,rr=e=>e.type===TxType.ConvertSubnetToL1,ar=e=>e.type===TxType.DisableL1Validator,nr=e=>e.type===TxType.IncreaseL1ValidatorBalance,or=e=>e.type===TxType.RegisterL1Validator,sr=e=>e.type===TxType.SetL1ValidatorWeight,es=e=>We(e)||qe(e)||Je(e)||Ke(e),ts=e=>je(e)||$e(e),ir=e=>ia(e),cr=e=>ca(e),lr=e=>la(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});var ze=({tx:e,symbol:t,network:r,signerAccount:a})=>{let n=[],{txFee:o,nodeID:s,start:i,end:c,stake:l}=e,m={items:[V("Account",a),we("Network",{name:r.chainName,logoUri:r.logoUri})]};n.push(m);let p=[T("Node",s),u("Stake Amount",l,9,t),N("Start",i),N("End",c)];return n.push({title:"Staking Details",items:p}),o&&n.push({title:"Network Fee",items:[u("Fee Amount",o,9,t)]}),n};var Ye=({tx:e,symbol:t,network:r,signerAccount:a})=>{let n=[],{txFee:o,nodeID:s,delegationFee:i,start:c,end:l,stake:m}=e,p={items:[V("Account",a),we("Network",{name:r.chainName,logoUri:r.logoUri})]};n.push(p);let d=[T("Node",s)];return d.push(u("Stake Amount",m,9,t),x("Delegation Fee",`${i/1e4} %`),N("Start",c),N("End",l)),n.push({title:"Staking Details",items:d}),o&&n.push({title:"Network Fee",items:[u("Fee Amount",o,9,t)]}),n};var Qe=(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 Ze=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),V("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:m,nodeId:p,remainingBalanceOwners:d,deactivationOwners:h},f)=>{let y=[T("Node ID",p),u("Balance",l,9,t),u("Stake",m,9,t)];h.length>0&&y.push(x(`${h.length>1?"Owners":"Owner"} Able to Deactivate`,h.join(`
12
+ var Sr=Object.defineProperty;var Pr=(e,t,r)=>t in e?Sr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var O=(e,t,r)=>(Pr(e,typeof t!="symbol"?t+"":t,r),r),yt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(yt(e,t,"read from private field"),r?r.call(e):t.get(e)),w=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},R=(e,t,r,a)=>(yt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var At={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/avalanche-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a","avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd","avax:Rr9hnPVPxuUvrdCul-vjEsU1zmqKqRDo","avax:Sj7NVE3jXTbJvwFAiu7OEUo_8g8ctXMG","avax:imji8papUf2EhV3le337w1vgFauqkJg-","avax:8AJTpRj3SAqv1e80Mtl9em08LhvKEbkl","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function vt({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),s=Math.min(1,Math.max(n*2,.3)),i=1+o,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 Dt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,St=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function Q(e,t,r="tx"){return `${e}/${r}/${t}`}function X({amount:e,decimals:t}){return e===void 0?new L(0):new L(e/10**t)}function bt({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=wr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=Rr({tx:e,isTestnet:o,networkToken:r}),m=t.toLowerCase().startsWith("p-")?t.slice(2):t,p=s.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:Q(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function wr({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===ue(!!t)&&!d.addresses.some(h=>a.has(h))).reduce((d,h)=>d.add(h.asset.amount),new L(0)),i=e.value.find(d=>d.assetId===ue(!!t))?.amount,c=s.gt(new L(0))?s:i?new L(i):new L(0)??new L(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(d=>d.asset.assetId===ue(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,h)=>d.add(h.amount),new L(0)),p=o?c:n?m:e.amountStaked.length===0?Pt(e.value,!!t):Pt(e.amountStaked,!!t);return X({amount:p?.toNumber(),decimals:r.decimals})}function Rr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===ue(!!t)).reduce((n,o)=>n.add(o.amount),new L(0));return X({amount:a?.toNumber(),decimals:r.decimals})}function Pt(e,t){return e.filter(r=>r.assetId===ue(t)).reduce((r,a)=>r.add(a.amount),new L(0))}function ue(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Ct({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(f=>f.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(f=>f.addresses)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:m,isSender:p}=Br({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),d=Er({isTestnet:o,tx:e,networkToken:r}),h=l?m.toString():p?m.minus(d).toString():m.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!p,isOutgoing:p,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:p,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:h}],gasUsed:d.toString(),explorerLink:Q(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Br({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,m=e.emittedUtxos.filter(p=>p.asset.assetId===he(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===l||e.txType==="ExportTx"&&p.consumedOnChainId!==l)).reduce((p,d)=>p.add(d.asset.amount),new L(0));return {amount:X({amount:m.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===he(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new L(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===he(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new L(0)),i=o.gte(s),c=i?o.minus(s):s.minus(o);return {amount:X({amount:c.toNumber(),decimals:r.decimals}),isSender:i}}function Er({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===he(!!e)).reduce((s,i)=>s.add(i.amount),new L(0)),n=t.amountCreated.filter(s=>s.assetId===he(!!e)).reduce((s,i)=>s.add(i.amount),new L(0)),o=a.minus(n);return X({amount:o.toNumber(),decimals:r.decimals})}function he(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Rt=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 m=a.isTestnet?Network.FUJI:Network.MAINNET,p=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Lr(e),network:m,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return Dt(p)&&(d=p.transactions.map(h=>bt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),St(p)&&(d=p.transactions.map(h=>Ct({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:d,nextPageToken:p.nextPageToken}},Lr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Ur={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},_r={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Bt=e=>{switch(e){case Environment.PRODUCTION:return Ur;case Environment.DEV:return _r}};var G=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=Z.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Fr(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)},Z=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 Fr(e){return new Promise(t=>setTimeout(t,e))}var Xe=e=>G({operation:t=>e(t>0),maxRetries:2,backoffPolicy:Z.constant(1),isSuccess:t=>t?.status?.error_code!==429});function Et(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Ge(e){let t,r=0;for(t=0;t<e.length;t++){let a=Et(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function H(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 fe=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return H([`${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 H([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var Or=z.array(z.object({internalId:z.string(),id:z.string(),symbol:z.string(),name:z.string(),image:z.string().optional().nullable(),current_price:z.number().optional().nullable(),price_change_percentage_24h:z.number().optional().nullable(),market_cap:z.number().optional().nullable(),total_volume:z.number().optional().nullable(),platforms:z.record(z.string(),z.string())})),we=class{constructor(t){this.proxyApiUrl=t;}watchlistToken(t){let r=new URLSearchParams(t);return H([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Or)}};var Lt=getBasicCoingeckoHttp(),U,W,xe=class{constructor({storage:t,proxyApiUrl:r}){w(this,U,void 0);w(this,W,void 0);O(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(s=>{a[n]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),a});R(this,U,t),R(this,W,r);}async getWatchlistDataForToken({tokenDetails:t,currency:r=VsCurrencyType.USD}){let n=(await new we(A(this,W)).watchlistToken({tokens:t.symbol,currency:r})).filter(o=>t.isNative?o.internalId===`NATIVE-${t.symbol.toLowerCase()}`:o.platforms[t.caip2Id]===t.address)[0];return n?{priceInCurrency:n.current_price??0,change24:n.price_change_percentage_24h??0,marketCap:n.market_cap??0,vol24:n.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Ge(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,U)?.get?.(o),a)return a;try{a=await Xe(s=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{a=void 0;}return A(this,U)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${Ge(t)}-${r}-${a}`}`;if(n=A(this,U)?.get?.(s),n)return n;try{n=await Xe(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:i}));}catch(i){console.error(i),n=void 0;}return A(this,U)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new fe(A(this,W)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(Lt,{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 fe(A(this,W)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(Lt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};U=new WeakMap,W=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),x=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var V=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t}),He=(e,t)=>({label:e,type:DetailItemType.DATA,value:t}),N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t}),Re=(e,t)=>({label:e,type:DetailItemType.NETWORK,value:t});var $=({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 Ut=process.env.GLACIER_API_KEY;var j=()=>Ut;var Kr={rltoken:j()},ye=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={...Kr,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var J=(e,t)=>({message:`${e}${t instanceof Error?`: ${t.message}`:""}`,data:{cause:t}});var Ve=class extends Error{constructor(){super(...arguments);O(this,"message","Glacier is unhealthy. Try again later.");}},Be=class{constructor({glacierApiUrl:t,headers:r}){O(this,"glacierSdk");O(this,"isGlacierHealthy",!0);O(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r},ye);}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(r){throw r instanceof Ve&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof Ve&&this.setGlacierToUnhealthy(),r}}};var _t=e=>Object.keys(e).includes("unlockedUnstaked"),Ft=e=>Object.keys(e).includes("locked");function Ee(e,t){let r=Object.values(e).reduce(function(a,n){let o=n.reduce(function(s,i){if(i.assetId!==t)return s;let c=Number(i.amount);return s+c},0);return a+o},0);return BigInt(r)}var Xt=({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 f in l){let y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(k=>{if(k.assetId!==i)return;let C=(c[f]??0n)+BigInt(k.amount);c[f]=C;});}let m=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),p=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(Ee(e,i),t.decimals,t.symbol),h=r?d.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:m.toSubUnit(),availableInCurrency:p,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:p?.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 Ht=({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 f in l){let y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(k=>{if(k.assetId!==i)return;let C=(c[f]??0n)+BigInt(k.amount);c[f]=C;});}let m=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),p=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(Ee(e,i),t.decimals,t.symbol),h=r!==void 0?d.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:p,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:p?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var $t=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await I({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,m=r.pricingProviders?.coingecko.nativeTokenId,p=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:p,network:d,addresses:e.join(",")}).then(k=>k.balances),f=await n.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:i}),y;return _t(h)?(y=Xt({balance:h,networkToken:l,priceInCurrency:f.priceInCurrency??void 0,marketCap:f.marketCap??void 0,vol24:f.vol24??void 0,change24:f.change24??void 0,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:y}}):Ft(h)?(y=Ht({balance:h,networkToken:l,priceInCurrency:f.priceInCurrency??void 0,marketCap:f.marketCap??void 0,vol24:f.vol24??void 0,change24:f.change24??void 0,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:y}}):Promise.reject("Incorrect type balance was returned from glacier")};function jt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=ea.createHash("sha256").update(r).digest("base64");return "avax:"+ta(a).substring(0,32)}var ta=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var zt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),s;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(s,"X"),[NetworkVMType.PVM]:o.getAddress(s,"P")}};var aa=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),Yt=e=>aa.safeParse(e);var Zt=async({request:e,network:t,approvalController:r})=>{let a=Yt(e.params);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams(J("Params are invalid",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 oa=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()}),er=e=>oa.safeParse(e);var Me=({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 Le=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddPermissionlessValidator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator: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 rr=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 We=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n,externalXPAddresses:o})=>{if(r&&t!=="X")return [];if(n){let s=await I({isTestnet:a});return e.map(i=>Avalanche.getAddressFromXpub(n,i,s,t,r))}return o&&Array.isArray(o)?e.map(i=>o.find(c=>c.index===i)).filter(i=>i!==void 0).map(i=>i.address):[]};var qe=e=>e.type===TxType.AddPermissionlessDelegator,$e=e=>e.type===TxType.AddPermissionlessValidator,je=e=>e.type===TxType.Export,Je=e=>e.type===TxType.Import,ca=e=>e.type===TxType.Base,Ke=e=>e.type===TxType.AddSubnetValidator,la=e=>e.type===TxType.CreateChain,pa=e=>e.type===TxType.CreateSubnet,ze=e=>e.type===TxType.RemoveSubnetValidator,ar=e=>e.type===TxType.ConvertSubnetToL1,nr=e=>e.type===TxType.DisableL1Validator,or=e=>e.type===TxType.IncreaseL1ValidatorBalance,sr=e=>e.type===TxType.RegisterL1Validator,ir=e=>e.type===TxType.SetL1ValidatorWeight,ns=e=>qe(e)||$e(e)||Ke(e)||ze(e),os=e=>je(e)||Je(e),cr=e=>ca(e),lr=e=>la(e),pr=e=>pa(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});var Ye=({tx:e,symbol:t,network:r,signerAccount:a})=>{let n=[],{txFee:o,nodeID:s,start:i,end:c,stake:l}=e,m={items:[V("Account",a),Re("Network",{name:r.chainName,logoUri:r.logoUri})]};n.push(m);let p=[T("Node",s),u("Stake Amount",l,9,t),N("Start",i),N("End",c)];return n.push({title:"Staking Details",items:p}),o&&n.push({title:"Network Fee",items:[u("Fee Amount",o,9,t)]}),n};var Qe=({tx:e,symbol:t,network:r,signerAccount:a})=>{let n=[],{txFee:o,nodeID:s,delegationFee:i,start:c,end:l,stake:m}=e,p={items:[V("Account",a),Re("Network",{name:r.chainName,logoUri:r.logoUri})]};n.push(p);let d=[T("Node",s)];return d.push(u("Stake Amount",m,9,t),x("Delegation Fee",`${i/1e4} %`),N("Start",c),N("End",l)),n.push({title:"Staking Details",items:d}),o&&n.push({title:"Network Fee",items:[u("Fee Amount",o,9,t)]}),n};var Ze=(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 et=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),V("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:m,nodeId:p,remainingBalanceOwners:d,deactivationOwners:h},f)=>{let y=[T("Node ID",p),u("Balance",l,9,t),u("Stake",m,9,t)];h.length>0&&y.push(x(`${h.length>1?"Owners":"Owner"} Able to Deactivate`,h.join(`
13
13
  `),"vertical")),d.length>0&&y.push(x(`${d.length>1?"Owners":"Owner"} of the Remaining Balance`,d.join(`
14
- `),"vertical")),r.push({title:f===0?"Validators":void 0,items:y});}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,destination:s,type:i}=e;return r.push({title:"Transaction Details",items:[x("Source Chain",`Avalanche ${B[o]}`),x("Target Chain",`Avalanche ${B[s]}`),x("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 tt=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,source:s,type:i}=e;return r.push({title:"Transaction Details",items:[x("Source Chain",`Avalanche ${B[s]}`),x("Destination Chain",`Avalanche ${B[o]}`),x("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 rt=(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 at=(e,t)=>{let r=[],{txFee:a,chain:n,outputs:o,memo:s}=e;return r.push({title:"Chain Details",items:[x("Active chain",`Avalanche ${B[n]}`)]}),o.forEach((i,c)=>{let l=i.owners.flatMap(m=>[V("To",m),u("Amount",i.amount,9,t)]);i.owners.length>1&&l.push(x("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 nt=(e,t)=>{let r=[],{txFee:a,threshold:n,controlKeys:o}=e;return r.push({title:"Subnet Details",items:[x(o.length>1?"Owners":"Owner",o.join(`
15
- `),"vertical"),x("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ma=e=>{try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(t){return console.error("Failed to format genesis data:",t),e}},ot=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,c=[x("Blockchain name",o,"vertical"),x("Blockchain ID",n,"vertical"),x("Virtual Machine ID",s,"vertical"),Ge("Genesis Data",ma(i))];return r.push({title:"Blockchain Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var st=(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 it=(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 ct=(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 lt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Le=(e,t,r)=>{if(ir(e))return at(e,t);if(je(e))return et(e,t);if($e(e))return tt(e,t);if(lr(e))return nt(e,t);if(We(e)){if(!r)throw new Error("context (network, signerAccount) is required for AddPermissionlessDelegator");return ze({tx:e,symbol:t,network:r.network,signerAccount:r.signerAccount})}else if(qe(e)){if(!r)throw new Error("context (network, signerAccount) is required for AddPermissionlessValidator");return Ye({tx:e,symbol:t,network:r.network,signerAccount:r.signerAccount})}else {if(cr(e))return ot(e,t);if(Je(e))return Qe(e,t);if(Ke(e))return rt(e,t);if(rr(e))return Ze(e,t);if(ar(e))return st(e,t);if(nr(e))return it(e,t);if(or(e))return ct(e,t);if(sr(e))return lt(e,t)}};var da=z.object({currentAddress:z.string({required_error:"No active account found"}),currentEvmAddress:z.string().optional(),xpubXP:z.string({invalid_type_error:"xpubXP must be a string"}).optional()}),ua=z.object({account:z.object({xpAddress:z.string({required_error:"XP address is required",invalid_type_error:"XP address must be a string"}),evmAddress:z.string().optional(),xpubXP:z.string({invalid_type_error:"xpubXP must be a string"}).optional(),externalXPAddresses:z.array(z.object({index:z.number(),address:z.string()}))})}),ga=e=>({xpAddress:e.currentAddress,evmAddress:e.currentEvmAddress,xpubXP:e.xpubXP,externalXPAddresses:[]}),ha=e=>e.account,fa=e=>e!=null&&typeof e=="object"&&"account"in e&&e.account!=null&&typeof e.account=="object",Ue=e=>{if(!e)return {success:!1,error:"Missing Avalanche transaction context"};if(fa(e)){let{success:n,data:o,error:s}=ua.safeParse(e);return n?{success:!0,data:ha(o)}:{success:!1,error:s.errors[0]?.message||"Invalid or missing Avalanche transaction context"}}let{success:t,data:r,error:a}=da.safeParse(e);return t?{success:!0,data:ga(r)}:{success:!1,error:a.errors[0]?.message||"Invalid or missing Avalanche transaction context"}};var mr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Zt(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:m}=o.data,p=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(s),h=t.isTestnet??!1,f=await I({isTestnet:h}),y=Ue(e.context);if(!y.success)return {error:rpcErrors.invalidParams(y.error)};let{xpAddress:k,xpubXP:E,externalXPAddresses:C}=y.data,ie=Ee({utxoHexes:m,vm:p}),K=ie.length?ie:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:h?Network.FUJI:Network.MAINNET,url:a,token:$(),headers:j(n)}),z;if(i==="C")z=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:p,utxos:K,fromAddress:k});else {let me=utils.unpackWithManager(p,d);if(E!==void 0&&typeof E!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Fe=await He({indices:c??[],chainAlias:i,isChange:!1,isTestnet:h,xpubXP:E,externalXPAddresses:C}),vr=await He({indices:l??[],chainAlias:i,isChange:!0,isTestnet:h,xpubXP:E,externalXPAddresses:C}),Ir=[...new Set([k,...Fe,...vr])].map(kr=>utils.parse(kr)[2]);z=await Avalanche.createAvalancheUnsignedTx({tx:me,utxos:K,provider:f,fromAddressBytes:Ir});}let ce=await Avalanche.parseAvalancheTx(z,f,k),ke=Me(ce),le=tr(ce);if(ce.type==="unknown"||ke===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let De={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(z.toJSON()),data:ce,vm:p,externalIndices:c,internalIndices:l},Se=Le(ke,t.networkToken.symbol,{network:t,signerAccount:k});if(Se===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Pe={title:le,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Se,networkFeeSelector:!1},pe=await r.requestApproval({request:e,displayData:Pe,signingData:De});if("error"in pe)return {error:pe.error};let M;try{M=await Ta(f,pe,p);}catch(me){return {error:rpcErrors.internal({message:"Unable to broadcast transaction",data:{cause:me}})}}return va({explorerUrl:t.explorerUrl??"",provider:f,txHash:M,vm:p,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:e}),{result:M}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},Ta=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},va=async({explorerUrl:e,provider:t,txHash:r,vm:a,onTransactionPending:n,onTransactionConfirmed:o,onTransactionReverted:s,request:i})=>{let l=Y(e,r);try{n({txHash:r,request:i,explorerLink:l}),a===PVM?(await G({operation:()=>t.getApiP().getTxStatus({txID:r}),isSuccess:p=>["Committed","Dropped"].includes(p.status),maxRetries:7})).status==="Committed"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):a===AVM?(await G({operation:()=>t.getApiX().getTxStatus({txID:r}),isSuccess:p=>["Accepted","Rejected"].includes(p.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):(await G({operation:()=>t.getApiC().getAtomicTxStatus(r),isSuccess:p=>["Accepted","Dropped"].includes(p.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i});}catch(m){console.error(m),m instanceof Error&&m.message.startsWith("Max retry exceeded.")||s({txHash:r,request:i});}};var Ia=z.object({from:z.string().optional().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),utxos:z.string().array().optional()}),dr=e=>Ia.safeParse(e);var fr=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 m=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:m.getCredentials(),utxos:r}),s=c.getSigIndices().map((p,d)=>new Credential(Avalanche.populateCredential(p,{unsignedTx:i,credentialIndex:d})));}catch{s=c.getSigIndices().map(m=>new Credential(Avalanche.populateCredential(m)));}return Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:s,utxos:r})};var yr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=dr(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,m=Avalanche.getVmByChainAlias(i),p=t.isTestnet??!1,d=await I({isTestnet:p}),h=Ue(e.context);if(!h.success)return {error:rpcErrors.invalidParams(h.error)};let{xpAddress:f,evmAddress:y}=h.data,k=Ee({utxoHexes:l,vm:m}),E=k.length?k:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:p?Network.FUJI:Network.MAINNET,url:a,token:$(),headers:j(n)}),C=await fr({txBytes:utils.hexToBuffer(s),vm:m,utxos:E,currentAddress:f,currentEvmAddress:y,provider:d}),ie=utils.addressesFromBytes([utils.parse(c??f)[2]])[0];if(!ie)return {error:rpcErrors.invalidRequest("Missing signer address")};let K=C.getSigIndicesForAddress(ie);if(!K)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let z=C.getSigIndices();if(!K.some(([me,Fe])=>z[me]?.includes(Fe)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let ke=c??f,le=await Avalanche.parseAvalancheTx(C,d,c??f),De=Me(le);if(le.type==="unknown"||De===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Se={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:le,vm:m,unsignedTxJson:JSON.stringify(C.toJSON()),ownSignatureIndices:K},Pe=Le(De,t.networkToken.symbol,{network:t,signerAccount:ke});if(Pe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let pe={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:Pe},M=await r.requestApproval({request:e,displayData:pe,signingData:Se});return "error"in M?{error:M.error}:"signedData"in M?{result:M.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ut=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ve=({accountIndex:e,derivationPathType:t,addressIndex:r=0})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");if(r!==void 0&&r<0)throw rpcErrors.invalidParams("Address index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/${r}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/${r}`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var Ar=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ut(e)?ve(e).AVM:void 0,o=ut(e)?ve(e).CoreEth:void 0,s=await I({isTestnet:!!r.isTestnet}),i=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}).catch(()=>null),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}).catch(()=>null),l=c?{[NetworkVMType.CoreEth]:s.getAddress(Buffer.from(c,"hex"),"C")}:{},m=i?{[NetworkVMType.AVM]:s.getAddress(Buffer.from(i,"hex"),"X"),[NetworkVMType.PVM]:s.getAddress(Buffer.from(i,"hex"),"P")}:{};return {...l,...m}};var ne,Ie,oe,F,se,Tr=class{constructor({approvalController:t,environment:r,appInfo:a}){w(this,ne,void 0);w(this,Ie,void 0);w(this,oe,void 0);w(this,F,void 0);w(this,se,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=Vt(r);R(this,se,a),R(this,ne,new Ve({glacierApiUrl:n,headers:j(a)})),R(this,Ie,o),R(this,oe,n),R(this,F,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Kt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new fe({storage:a,proxyApiUrl:A(this,Ie)});return qt({addresses:t,currency:n,network:r,glacierService:A(this,ne),tokenService:o})}getManifest(){let t=parseManifest(yt);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return Tt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return wt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,ne)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ve(t)}async deriveAddress(t){return Ar({...t,approvalController:A(this,F)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Qt({request:t,network:r,approvalController:A(this,F)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return yr({request:t,network:r,approvalController:A(this,F),glacierApiUrl:A(this,oe),appInfo:A(this,se)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return mr({request:t,network:r,approvalController:A(this,F),glacierApiUrl:A(this,oe),appInfo:A(this,se)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return jt({blockchainId:t,isTestnet:r})}};ne=new WeakMap,Ie=new WeakMap,oe=new WeakMap,F=new WeakMap,se=new WeakMap;var Nc=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,wc=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
14
+ `),"vertical")),r.push({title:f===0?"Validators":void 0,items:y});}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var tt=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,destination:s,type:i}=e;return r.push({items:[x("Source Chain",`Avalanche ${B[o]}`),x("Target Chain",`Avalanche ${B[s]}`)]}),r.push({items:[x("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 rt=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,source:s,type:i}=e;return r.push({items:[x("Source Chain",`Avalanche ${B[s]}`),x("Destination Chain",`Avalanche ${B[o]}`)]}),r.push({items:[x("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 at=(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 nt=(e,t)=>{let r=[],{txFee:a,chain:n,outputs:o,memo:s}=e;return r.push({title:"Chain Details",items:[x("Active chain",`Avalanche ${B[n]}`)]}),o.forEach((i,c)=>{let l=i.owners.flatMap(m=>[V("To",m),u("Amount",i.amount,9,t)]);i.owners.length>1&&l.push(x("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 ot=(e,t)=>{let r=[],{txFee:a,threshold:n,controlKeys:o}=e;return r.push({title:"Subnet Details",items:[x(o.length>1?"Owners":"Owner",o.join(`
15
+ `),"vertical"),x("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var da=e=>{try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(t){return console.error("Failed to format genesis data:",t),e}},st=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,c=[x("Blockchain name",o,"vertical"),x("Blockchain ID",n,"vertical"),x("Virtual Machine ID",s,"vertical"),He("Genesis Data",da(i))];return r.push({title:"Blockchain Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var it=(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 ct=(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 lt=(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 pt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ue=(e,t,r)=>{if(cr(e))return nt(e,t);if(je(e))return tt(e,t);if(Je(e))return rt(e,t);if(pr(e))return ot(e,t);if(qe(e)){if(!r)throw new Error("context (network, signerAccount) is required for AddPermissionlessDelegator");return Ye({tx:e,symbol:t,network:r.network,signerAccount:r.signerAccount})}else if($e(e)){if(!r)throw new Error("context (network, signerAccount) is required for AddPermissionlessValidator");return Qe({tx:e,symbol:t,network:r.network,signerAccount:r.signerAccount})}else {if(lr(e))return st(e,t);if(Ke(e))return Ze(e,t);if(ze(e))return at(e,t);if(ar(e))return et(e,t);if(nr(e))return it(e,t);if(or(e))return ct(e,t);if(sr(e))return lt(e,t);if(ir(e))return pt(e,t)}};var ua=z.object({currentAddress:z.string({required_error:"No active account found"}),currentEvmAddress:z.string().optional(),xpubXP:z.string({invalid_type_error:"xpubXP must be a string"}).optional()}),ga=z.object({account:z.object({xpAddress:z.string({required_error:"XP address is required",invalid_type_error:"XP address must be a string"}),evmAddress:z.string().optional(),xpubXP:z.string({invalid_type_error:"xpubXP must be a string"}).optional(),externalXPAddresses:z.array(z.object({index:z.number(),address:z.string()}))})}),ha=e=>({xpAddress:e.currentAddress,evmAddress:e.currentEvmAddress,xpubXP:e.xpubXP,externalXPAddresses:[]}),fa=e=>e.account,xa=e=>e!=null&&typeof e=="object"&&"account"in e&&e.account!=null&&typeof e.account=="object",_e=e=>{if(!e)return {success:!1,error:"Missing Avalanche transaction context"};if(xa(e)){let{success:n,data:o,error:s}=ga.safeParse(e);return n?{success:!0,data:fa(o)}:{success:!1,error:s.errors[0]?.message||"Invalid or missing Avalanche transaction context"}}let{success:t,data:r,error:a}=ua.safeParse(e);return t?{success:!0,data:ha(r)}:{success:!1,error:a.errors[0]?.message||"Invalid or missing Avalanche transaction context"}};var dr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=er(e.params);if(!o.success)return {error:rpcErrors.invalidParams(J("Transaction params are invalid",o.error))};try{let{transactionHex:s,chainAlias:i,externalIndices:c,internalIndices:l,utxos:m}=o.data,p=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(s),h=t.isTestnet??!1,f=await I({isTestnet:h}),y=_e(e.context);if(!y.success)return {error:rpcErrors.invalidParams(y.error)};let{xpAddress:k,xpubXP:E,externalXPAddresses:C}=y.data,ce=Me({utxoHexes:m,vm:p}),z=ce.length?ce:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:h?Network.FUJI:Network.MAINNET,url:a,token:j(),headers:$(n)}),Y;if(i==="C")Y=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:p,utxos:z,fromAddress:k});else {let de=utils.unpackWithManager(p,d);if(E!==void 0&&typeof E!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Oe=await We({indices:c??[],chainAlias:i,isChange:!1,isTestnet:h,xpubXP:E,externalXPAddresses:C}),Ir=await We({indices:l??[],chainAlias:i,isChange:!0,isTestnet:h,xpubXP:E,externalXPAddresses:C}),kr=[...new Set([k,...Oe,...Ir])].map(Dr=>utils.parse(Dr)[2]);Y=await Avalanche.createAvalancheUnsignedTx({tx:de,utxos:z,provider:f,fromAddressBytes:kr});}let le=await Avalanche.parseAvalancheTx(Y,f,k),De=Le(le),pe=rr(le);if(le.type==="unknown"||De===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let Se={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(Y.toJSON()),data:le,vm:p,externalIndices:c,internalIndices:l},Pe=Ue(De,t.networkToken.symbol,{network:t,signerAccount:k});if(Pe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let be={title:pe,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Pe,networkFeeSelector:!1},me=await r.requestApproval({request:e,displayData:be,signingData:Se});if("error"in me)return {error:me.error};let M;try{M=await va(f,me,p);}catch(de){return {error:rpcErrors.internal(J("Unable to broadcast transaction",de))}}return Ia({explorerUrl:t.explorerUrl??"",provider:f,txHash:M,vm:p,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:e}),{result:M}}catch(s){return console.error(s),{error:rpcErrors.internal(J("Unable to create transaction",s))}}},va=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},Ia=async({explorerUrl:e,provider:t,txHash:r,vm:a,onTransactionPending:n,onTransactionConfirmed:o,onTransactionReverted:s,request:i})=>{let l=Q(e,r);try{n({txHash:r,request:i,explorerLink:l}),a===PVM?(await G({operation:()=>t.getApiP().getTxStatus({txID:r}),isSuccess:p=>["Committed","Dropped"].includes(p.status),maxRetries:7})).status==="Committed"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):a===AVM?(await G({operation:()=>t.getApiX().getTxStatus({txID:r}),isSuccess:p=>["Accepted","Rejected"].includes(p.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):(await G({operation:()=>t.getApiC().getAtomicTxStatus(r),isSuccess:p=>["Accepted","Dropped"].includes(p.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i});}catch(m){console.error(m),m instanceof Error&&m.message.startsWith("Max retry exceeded.")||s({txHash:r,request:i});}};var ka=z.object({from:z.string().optional().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"]),utxos:z.string().array().optional()}),ur=e=>ka.safeParse(e);var xr=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 m=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:m.getCredentials(),utxos:r}),s=c.getSigIndices().map((p,d)=>new Credential(Avalanche.populateCredential(p,{unsignedTx:i,credentialIndex:d})));}catch{s=c.getSigIndices().map(m=>new Credential(Avalanche.populateCredential(m)));}return Avalanche.createAvalancheUnsignedTx({tx:c,provider:o,credentials:s,utxos:r})};var Ar=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=ur(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,m=Avalanche.getVmByChainAlias(i),p=t.isTestnet??!1,d=await I({isTestnet:p}),h=_e(e.context);if(!h.success)return {error:rpcErrors.invalidParams(h.error)};let{xpAddress:f,evmAddress:y}=h.data,k=Me({utxoHexes:l,vm:m}),E=k.length?k:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:p?Network.FUJI:Network.MAINNET,url:a,token:j(),headers:$(n)}),C=await xr({txBytes:utils.hexToBuffer(s),vm:m,utxos:E,currentAddress:f,currentEvmAddress:y,provider:d}),ce=utils.addressesFromBytes([utils.parse(c??f)[2]])[0];if(!ce)return {error:rpcErrors.invalidRequest("Missing signer address")};let z=C.getSigIndicesForAddress(ce);if(!z)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Y=C.getSigIndices();if(!z.some(([de,Oe])=>Y[de]?.includes(Oe)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let De=c??f,pe=await Avalanche.parseAvalancheTx(C,d,c??f),Se=Le(pe);if(pe.type==="unknown"||Se===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Pe={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:pe,vm:m,unsignedTxJson:JSON.stringify(C.toJSON()),ownSignatureIndices:z},be=Ue(Se,t.networkToken.symbol,{network:t,signerAccount:De});if(be===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let me={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:be},M=await r.requestApproval({request:e,displayData:me,signingData:Pe});return "error"in M?{error:M.error}:"signedData"in M?{result:M.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var gt=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var Ie=({accountIndex:e,derivationPathType:t,addressIndex:r=0})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");if(r!==void 0&&r<0)throw rpcErrors.invalidParams("Address index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/${r}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/${r}`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var Tr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=gt(e)?Ie(e).AVM:void 0,o=gt(e)?Ie(e).CoreEth:void 0,s=await I({isTestnet:!!r.isTestnet}),i=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}).catch(()=>null),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}).catch(()=>null),l=c?{[NetworkVMType.CoreEth]:s.getAddress(Buffer.from(c,"hex"),"C")}:{},m=i?{[NetworkVMType.AVM]:s.getAddress(Buffer.from(i,"hex"),"X"),[NetworkVMType.PVM]:s.getAddress(Buffer.from(i,"hex"),"P")}:{};return {...l,...m}};var oe,ke,se,F,ie,vr=class{constructor({approvalController:t,environment:r,appInfo:a}){w(this,oe,void 0);w(this,ke,void 0);w(this,se,void 0);w(this,F,void 0);w(this,ie,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=Bt(r);R(this,ie,a),R(this,oe,new Be({glacierApiUrl:n,headers:$(a)})),R(this,ke,o),R(this,se,n),R(this,F,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return zt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new xe({storage:a,proxyApiUrl:A(this,ke)});return $t({addresses:t,currency:n,network:r,glacierService:A(this,oe),tokenService:o})}getManifest(){let t=parseManifest(At);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return vt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return Rt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,oe)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return Ie(t)}async deriveAddress(t){return Tr({...t,approvalController:A(this,F)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Zt({request:t,network:r,approvalController:A(this,F)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return Ar({request:t,network:r,approvalController:A(this,F),glacierApiUrl:A(this,se),appInfo:A(this,ie)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return dr({request:t,network:r,approvalController:A(this,F),glacierApiUrl:A(this,se),appInfo:A(this,ie)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return jt({blockchainId:t,isTestnet:r})}};oe=new WeakMap,ke=new WeakMap,se=new WeakMap,F=new WeakMap,ie=new WeakMap;var Bc=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Ec=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
16
16
 
17
- export { Tr as AvalancheModule, We as isAddPermissionlessDelegatorTx, qe as isAddPermissionlessValidatorTx, Je as isAddSubnetValidatorTx, ia as isBaseTx, cr as isBlockchainDetails, ir as isChainDetails, rr as isConvertSubnetToL1Tx, ca as isCreateChainTx, la as isCreateSubnetTx, ar as isDisableL1ValidatorTx, ts as isExportImportTxDetails, je as isExportTx, $e as isImportTx, nr as isIncreaseL1ValidatorBalanceTx, or as isRegisterL1ValidatorTx, Ke as isRemoveSubnetValidatorTx, sr as isSetL1ValidatorWeightTx, es as isStakingDetails, lr as isSubnetDetails, wc as isTokenWithBalanceAVM, Nc as isTokenWithBalancePVM };
17
+ export { vr as AvalancheModule, qe as isAddPermissionlessDelegatorTx, $e as isAddPermissionlessValidatorTx, Ke as isAddSubnetValidatorTx, ca as isBaseTx, lr as isBlockchainDetails, cr as isChainDetails, ar as isConvertSubnetToL1Tx, la as isCreateChainTx, pa as isCreateSubnetTx, nr as isDisableL1ValidatorTx, os as isExportImportTxDetails, je as isExportTx, Je as isImportTx, or as isIncreaseL1ValidatorBalanceTx, sr as isRegisterL1ValidatorTx, ze as isRemoveSubnetValidatorTx, ir as isSetL1ValidatorWeightTx, ns as isStakingDetails, pr as isSubnetDetails, Ec as isTokenWithBalanceAVM, Bc as isTokenWithBalancePVM };
18
18
  //# sourceMappingURL=out.js.map
19
19
  //# sourceMappingURL=index.js.map