@avalabs/avalanche-module 0.7.0 → 0.7.3

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
@@ -1,16 +1,13 @@
1
1
  import * as _metamask_rpc_errors from '@metamask/rpc-errors';
2
2
  import * as _avalabs_vm_module_types_dist_rpc from '@avalabs/vm-module-types/dist/rpc';
3
3
  import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
4
- import { Module, ApprovalController, Environment, Network, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
4
+ import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
5
5
  import { Avalanche } from '@avalabs/core-wallets-sdk';
6
6
  import { z } from 'zod';
7
7
 
8
8
  declare class AvalancheModule implements Module {
9
9
  #private;
10
- constructor({ approvalController, environment, }: {
11
- approvalController: ApprovalController;
12
- environment: Environment;
13
- });
10
+ constructor({ approvalController, environment, appInfo }: ConstructorParams);
14
11
  getProvider(network: Network): Avalanche.JsonRpcProvider;
15
12
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
16
13
  getBalances({ addresses, network, storage, currency }: GetBalancesParams): Promise<GetBalancesResponse>;
package/dist/index.d.ts CHANGED
@@ -1,16 +1,13 @@
1
1
  import * as _metamask_rpc_errors from '@metamask/rpc-errors';
2
2
  import * as _avalabs_vm_module_types_dist_rpc from '@avalabs/vm-module-types/dist/rpc';
3
3
  import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
4
- import { Module, ApprovalController, Environment, Network, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
4
+ import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
5
5
  import { Avalanche } from '@avalabs/core-wallets-sdk';
6
6
  import { z } from 'zod';
7
7
 
8
8
  declare class AvalancheModule implements Module {
9
9
  #private;
10
- constructor({ approvalController, environment, }: {
11
- approvalController: ApprovalController;
12
- environment: Environment;
13
- });
10
+ constructor({ approvalController, environment, appInfo }: ConstructorParams);
14
11
  getProvider(network: Network): Avalanche.JsonRpcProvider;
15
12
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
16
13
  getBalances({ addresses, network, storage, currency }: GetBalancesParams): Promise<GetBalancesResponse>;
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
- import { TxType, parseManifest, RpcMethod, Environment, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
1
+ import { TxType, parseManifest, RpcMethod, Environment, AppName, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
2
2
  import { rpcErrors } from '@metamask/rpc-errors';
3
3
  import { Network, SortOrder, BlockchainId, Glacier, PrimaryNetworkChainName } from '@avalabs/glacier-sdk';
4
4
  import R from 'big.js';
5
5
  import { Avalanche } from '@avalabs/core-wallets-sdk';
6
6
  import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
7
- import { object, string, record, number, z } from 'zod';
7
+ import { object, string, record, number, z as z$1 } from 'zod';
8
8
  import { TokenUnit } from '@avalabs/core-utils-sdk';
9
- import ca from 'crypto';
9
+ import ma from 'crypto';
10
10
  import { utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
11
11
 
12
- var Vt=Object.defineProperty;var Ut=(e,t,a)=>t in e?Vt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var V=(e,t,a)=>(Ut(e,typeof t!="symbol"?t+"":t,a),a),He=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var f=(e,t,a)=>(He(e,t,"read from private field"),a?a.call(e):t.get(e)),I=(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);},D=(e,t,a,r)=>(He(e,t,"write to private field"),r?r.call(e,a):t.set(e,a),a);var Fe={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 Oe(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var We=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,Je=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function pe(e,t,a="tx"){return `${e}/${a}/${t}`}function X({amount:e,decimals:t}){return e===void 0?new R(0):new R(e/10**t)}function Ke({tx:e,address:t,networkToken:a,chainId:r,explorerUrl:n,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),o=Xt({tx:e,isTestnet:s,networkToken:a,froms:i}),p=Gt({tx:e,isTestnet:s,networkToken:a}),m=t.toLowerCase().startsWith("p-")?t.slice(2):t,d=i.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...i.values()].join(","),to:[...c.values()].join(","),isSender:d,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:o.toString()}],gasUsed:p.toString(),explorerLink:pe(n??"",e.txHash,"tx"),txType:e.txType,chainId:r.toString()}}function Xt({tx:e,isTestnet:t,networkToken:a,froms:r}){let n=["ImportTx","ExportTx"].includes(e.txType),s=e.txType==="BaseTx",i=e.emittedUtxos.filter(l=>l.asset.assetId===Z(!!t)&&!l.addresses.some(u=>r.has(u))).reduce((l,u)=>l.add(u.asset.amount),new R(0)),c=e.value.find(l=>l.assetId===Z(!!t))?.amount,o=i.gt(new R(0))?i:c?new R(c):new R(0)??new R(0),p=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(l=>l.asset.assetId===Z(!!t)&&(e.txType==="ImportTx"&&l.consumedOnChainId===p||e.txType==="ExportTx"&&l.consumedOnChainId!==p)).reduce((l,u)=>l.add(u.amount),new R(0)),d=s?o:n?m:e.amountStaked.length===0?qe(e.value,!!t):qe(e.amountStaked,!!t);return X({amount:d?.toNumber(),decimals:a.decimals})}function Gt({tx:e,isTestnet:t,networkToken:a}){let r=e.amountBurned?.filter(n=>n.assetId===Z(!!t)).reduce((n,s)=>n.add(s.amount),new R(0));return X({amount:r?.toNumber(),decimals:a.decimals})}function qe(e,t){return e.filter(a=>a.assetId===Z(t)).reduce((a,r)=>a.add(r.amount),new R(0))}function Z(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function ze({tx:e,address:t,networkToken:a,chainId:r,explorerUrl:n,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),o=Ft({tx:e,isTestnet:s,networkToken:a}),p=Ot({isTestnet:s,tx:e,totalAmountCreated:o,networkToken:a}),m=t.toLowerCase().startsWith("x-")?t.slice(2):t,d=i.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...i.values()].join(","),to:[...c.values()].join(","),isSender:d,timestamp:e.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:o.toString()}],gasUsed:p.toString(),explorerLink:pe(n??"",e.txHash,"tx"),txType:e.txType,chainId:r.toString()}}function Ft({tx:e,isTestnet:t,networkToken:a}){let r=["ImportTx","ExportTx"].includes(e.txType),n=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,s=e.emittedUtxos.filter(o=>o.asset.assetId===Ce(!!t)&&(e.txType==="ImportTx"&&o.consumedOnChainId===n||e.txType==="ExportTx"&&o.consumedOnChainId!==n)).reduce((o,p)=>o.add(p.asset.amount),new R(0)),i=e.amountCreated.filter(o=>o.assetId===Ce(!!t)).reduce((o,p)=>o.add(p.amount),new R(0));return X({amount:(r?s:i).toNumber(),decimals:a.decimals})}function Ot({isTestnet:e,tx:t,totalAmountCreated:a,networkToken:r}){let s=t.amountUnlocked.filter(i=>i.assetId===Ce(!!e)).reduce((i,c)=>i.add(c.amount),new R(0)).minus(a);return X({amount:s.toNumber(),decimals:r.decimals})}function Ce(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Qe=async({address:e,nextPageToken:t,offset:a,network:r,glacierService:n})=>{let{isTestnet:s,networkToken:i,explorerUrl:c,chainId:o}=r;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let m=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:$t(e),network:s?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return We(m)&&(d=m.transactions.map(l=>Ke({tx:l,isTestnet:s,address:e,networkToken:i,explorerUrl:c,chainId:o}))),Je(m)&&(d=m.transactions.map(l=>ze({tx:l,isTestnet:s,address:e,networkToken:i,explorerUrl:c,chainId:o}))),{transactions:d,nextPageToken:m.nextPageToken}},$t=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Wt={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Jt={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},tt=e=>{switch(e){case Environment.PRODUCTION:return Wt;case Environment.DEV:return Jt}};var ue=class extends Error{constructor(){super(...arguments);V(this,"message","Glacier is unhealthy. Try again later.");}},he=class{constructor({glacierApiUrl:t}){V(this,"glacierSdk");V(this,"isGlacierHealthy",!0);V(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t});}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 ue&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof ue&&this.setGlacierToUnhealthy(),a}}};var U=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:r=Q.exponential()})=>{let n=0,s=0,i;for(;s<a;){s>0&&await Kt(n);try{let o=await e(s);if(t(o))return o}catch(o){i=o;}n=r(s),s++;}let c=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(c)},Q=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function Kt(e){return new Promise(t=>setTimeout(t,e))}var be=e=>U({operation:t=>e(t>0),maxRetries:2,backoffPolicy:Q.constant(1),isSuccess:t=>t?.status?.error_code!==429});function at(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function Ie(e){let t,a=0;for(t=0;t<e.length;t++){let r=at(e[t]??"");a=a+65027/r;}return (""+a).slice(0,16)}async function ge(e,t){let a=await fetch(...e);if(!a.ok)throw new Error(`Request failed with status ${a.status}`);let r=await a.json();return t.parse(r)}var ee=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let a=new URLSearchParams(t);return ge([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:a,...r}=t,n=new URLSearchParams(r);return ge([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${a}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],SimplePriceResponseSchema)}};var nt=getBasicCoingeckoHttp(),B,G,ae=class{constructor({storage:t,proxyApiUrl:a}){I(this,B,void 0);I(this,G,void 0);V(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let r={};return Object.keys(t).forEach(n=>{let s=t[n];r[n]={},a.forEach(i=>{r[n]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),r});D(this,B,t),D(this,G,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let r,s=`getSimplePrice-${t?`${Ie(t)}-${a.toString()}`:`${a.toString()}`}`;if(r=f(this,B)?.get?.(s),r)return r;try{r=await be(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{r=void 0;}return f(this,B)?.set?.(s,r),r}async getPricesByAddresses(t,a,r=VsCurrencyType.USD){let n,i=`getPricesWithMarketDataByAddresses-${`${Ie(t)}-${a}-${r}`}`;if(n=f(this,B)?.get?.(i),n)return n;try{n=await be(c=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:r,useCoingeckoProxy:c}));}catch{n=void 0;}return f(this,B)?.set?.(i,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:r=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){return n?new ee(f(this,G)).simplePriceByContractAddresses({id:t,contract_addresses:a,vs_currencies:[r],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(nt,{assetPlatformId:t,tokenAddresses:a,currencies:[r],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD],marketCap:r=!1,vol24:n=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:c=!1,shouldThrow:o=!0}){if(c){let p=await new ee(f(this,G)).simplePrice({ids:t,vs_currencies:a,include_market_cap:r,include_24hr_vol:n,include_24hr_change:s,include_last_updated_at:i});return this.transformSimplePriceResponse(p,a)}return simplePrice(nt,{coinIds:t,currencies:a,marketCap:r,vol24:n,change24:s,lastUpdated:i,shouldThrow:o})}};B=new WeakMap,G=new WeakMap;object({date:string(),usd:record(number())});var w=(e,t,a,r)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:a,symbol:r}),g=(e,t,a="horizontal")=>({label:e,alignment:a,type:DetailItemType.TEXT,value:t});var De=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t}),v=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var N=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var rt=e=>Object.keys(e).includes("unlockedUnstaked"),st=e=>Object.keys(e).includes("locked");function ye(e){let t=Object.values(e).reduce(function(a,r){let n=r.reduce(function(s,i){let c=Number(i.amount);return s+c},0);return a+n},0);return BigInt(t)}function T(e,t){return t===void 0?0:t/10**e}var it=({balance:e,networkToken:t,priceInCurrency:a,marketCap:r,vol24:n,change24:s,coingeckoId:i})=>{let c=t.decimals,o={},p={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 h in p){let y=p[h];if(!y||!y.length){o[h]=0;continue}y.forEach(k=>{let x=(o[h]??0)+Number(k.amount);o[h]=x;});}let m=new TokenUnit(o.unlockedUnstaked?o.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,l=new TokenUnit(ye(e),t.decimals,t.symbol),u=a?l.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:l.toSubUnit(),balanceInCurrency:u,balanceDisplayValue:l.toDisplay(),balanceCurrencyDisplayValue:u?.toFixed(2),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:T(c,o.lockedStaked),lockedStakeable:T(c,o.lockedStakeable),lockedPlatform:T(c,o.lockedPlatform),atomicMemoryLocked:T(c,o.atomicMemoryLocked),atomicMemoryUnlocked:T(c,o.atomicMemoryUnlocked),unlockedUnstaked:T(c,o.unlockedUnstaked),unlockedStaked:T(c,o.unlockedStaked),pendingStaked:T(c,o.pendingStaked)},marketCap:r,vol24:n,change24:s,coingeckoId:i}};var lt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:r,vol24:n,change24:s,coingeckoId:i})=>{let c=t.decimals,o={},p={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let h in p){let y=p[h];if(!y||!y.length){o[h]=0;continue}y.forEach(k=>{let x=(o[h]??0)+Number(k.amount);o[h]=x;});}let m=new TokenUnit(o.unlocked?o.unlocked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,l=new TokenUnit(ye(e),t.decimals,t.symbol),u=a!==void 0?l.mul(a):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:a,balance:l.toSubUnit(),balanceInCurrency:u?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:l.toDisplay(),balanceCurrencyDisplayValue:u?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{unlocked:T(c,o.unlocked),locked:T(c,o.locked),atomicMemoryUnlocked:T(c,o.atomicMemoryUnlocked),atomicMemoryLocked:T(c,o.atomicMemoryLocked)},marketCap:r,vol24:n,change24:s}};var dt=async({addresses:e,currency:t,network:a,glacierService:r,tokenService:n})=>{if(!r.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),c=e[0]??"",o=a.networkToken,p=a.pricingProviders?.coingecko.nativeTokenId,m=a.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=a.isTestnet?Network.FUJI:Network.MAINNET,l=await r.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(q=>q.balances),u=p?await n.getSimplePrice({coinIds:[p],currencies:[i]}):{},h=u?.[p??""]?.[i]?.price??void 0,y=u?.[p??""]?.[i]?.marketCap??void 0,k=u?.[p??""]?.[i]?.vol24??void 0,A=u?.[p??""]?.[i]?.change24??void 0,x;return rt(l)?(x=it({balance:l,networkToken:o,priceInCurrency:h,marketCap:y,vol24:k,change24:A,coingeckoId:p??""}),{[c]:{[o.symbol]:x}}):st(l)?(x=lt({balance:l,networkToken:o,priceInCurrency:h,marketCap:y,vol24:k,change24:A,coingeckoId:p??""}),{[c]:{[o.symbol]:x}}):Promise.reject("Incorrect type balance was returned from glacier")};function ut({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,r=ca.createHash("sha256").update(a).digest("base64");return "avax:"+la(r).substring(0,32)}var la=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var yt=async({accountIndex:e,isTestnet:t,xpubXP:a,walletType:r})=>{if(a===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let n=t?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),s;switch(r){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: ${r}`)}return {[NetworkVMType.AVM]:n.getAddress(s,"X"),[NetworkVMType.PVM]:n.getAddress(s,"P")}};var pa=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),ft=e=>pa.safeParse(e);var Tt=async({request:e,network:t,approvalController:a})=>{let r=ft(e.params);if(!r.success)return console.error("invalid params",r.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:r.error}})};let[n,s]=r.data,i=Buffer.from(n,"utf-8").toString("hex"),c={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:s},o={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},p=await a.requestApproval({request:e,displayData:o,signingData:c});return "error"in p?{error:p.error}:"signedData"in p?{result:p.signedData}:{error:rpcErrors.internal("No signed data returned")}};var da=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()}),At=e=>da.safeParse(e);var E=({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var Pt=({utxoHexes:e=[],vm:t})=>{try{let a=utils.getManagerForVM(t).getDefaultCodec();return e.map(r=>{let n=utils.hexToBuffer(r);return Utxo.fromBytes(n,a)[0]})}catch{return []}};var fe=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 St=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 Be=async({indices:e,chainAlias:t,isChange:a,isTestnet:r,xpubXP:n})=>{if(!n||a&&t!=="X")return [];let s=E({isTestnet:r});return e.map(i=>Avalanche.getAddressFromXpub(n,i,s,t,a))};var we=e=>e.type===TxType.AddPermissionlessDelegator,Ne=e=>e.type===TxType.AddPermissionlessValidator,Ee=e=>e.type===TxType.Export,Me=e=>e.type===TxType.Import,ga=e=>e.type===TxType.Base,Ve=e=>e.type===TxType.AddSubnetValidator,ya=e=>e.type===TxType.CreateChain,fa=e=>e.type===TxType.CreateSubnet,Ue=e=>e.type===TxType.RemoveSubnetValidator,Er=e=>we(e)||Ne(e)||Ve(e)||Ue(e),Mr=e=>Ee(e)||Me(e),Ct=e=>ga(e),bt=e=>ya(e),It=e=>fa(e);function _e(e){return e===Avalanche.MainnetContext.pBlockchainID}var xe=(e,t)=>{let a=[];if(Ct(e)){let{chain:n,outputs:s,memo:i}=e;a.push({title:"Chain Details",items:[g("Active chain",`Avalanche ${j[n]}`)]}),s.forEach((c,o)=>{let p=c.owners.flatMap(m=>[De("To",m),w("Amount",c.amount,9,t)]);c.owners.length>1&&p.push(g("Threshold",c.threshold.toString())),a.push({title:o===0?"Balance Change":void 0,items:p});}),n!==PVM&&i&&a.push({title:"Memo",items:[i]});}else if(Ee(e)){let{amount:n,chain:s,destination:i,type:c}=e;a.push({title:"Transaction Details",items:[g("Source Chain",`Avalanche ${j[s]}`),g("Target Chain",`Avalanche ${j[i]}`),g("Transaction Type",c?(c[0]||"").toUpperCase()+c.slice(1):""),w("Amount",n,9,t)]});}else if(Me(e)){let{amount:n,chain:s,source:i,type:c}=e;a.push({title:"Transaction Details",items:[g("Source Chain",`Avalanche ${j[i]}`),g("Destination Chain",`Avalanche ${j[s]}`),g("Transaction Type",c?(c[0]||"").toUpperCase()+c.slice(1):""),w("Amount",n,9,t)]});}else if(It(e)){let{threshold:n,controlKeys:s}=e;a.push({title:"Subnet Details",items:[g(s.length>1?"Owners":"Owner",s.join(`
13
- `),"vertical"),g("Signature Threshold",`${n}/${s.length}`,"vertical")]});}else if(we(e)){let{nodeID:n,start:s,end:i,stake:c,subnetID:o}=e,p=[v("Node ID",n),_e(o)?g("Subnet ID","Primary Network"):v("Subnet ID",o),w("Stake Amount",c,9,t),N("Start Date",s),N("End Date",i)];a.push({title:"Staking Details",items:p});}else if(Ne(e)){let{nodeID:n,delegationFee:s,start:i,end:c,stake:o,subnetID:p,signature:m,publicKey:d}=e,l=[v("Node ID",n),_e(p)?g("Subnet ID","Primary Network"):v("Subnet ID",p)];d&&m&&l.push(v("Public Key",d),v("Proof",m)),l.push(w("Stake Amount",o,9,t),g("Delegation Fee",`${s/1e4} %`),N("Start Date",i),N("End Date",c)),a.push({title:"Staking Details",items:l});}else if(bt(e)){let{chainID:n,chainName:s,vmID:i,genesisData:c}=e,o=[g("Blockchain name",s,"vertical"),g("Blockchain ID",n,"vertical"),g("Virtual Machine ID",i,"vertical"),g("Genesis Data",c,"vertical")];a.push({title:"Blockchain Details",items:o});}else if(Ve(e)){let{nodeID:n,start:s,end:i,subnetID:c}=e,o=[v("Subnet ID",c),v("Node ID",n),N("Start Date",s),N("End Date",i)];a.push({title:"Staking Details",items:o});}else if(Ue(e)){let{nodeID:n,subnetID:s}=e,i=[v("Node ID",n),v("Subnet ID",s)];a.push({title:"Staking Details",items:i});}let{txFee:r}=e;return r&&a.push({title:"Network Fee",items:[w("Fee Amount",r,9,t)]}),a},j=(r=>(r.AVM="X Chain",r.PVM="P Chain",r.EVM="C Chain",r))(j||{});var Pa=process.env.GLACIER_API_KEY,Dt=async({request:e,network:t,approvalController:a,glacierApiUrl:r})=>{let n=At(e.params);if(!n.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:n.error}})};try{let{transactionHex:s,chainAlias:i,externalIndices:c,internalIndices:o,utxos:p}=n.data,m=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(s),l=t.isTestnet??!1,u=E({isTestnet:l}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.invalidRequest("No active account found")};let y=Pt({utxoHexes:p,vm:m}),k=y.length?y:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,isTestnet:l,url:r,token:Pa}),A;if(i==="C")A=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:k,fromAddress:h});else {let Y=utils.unpackWithManager(m,d),S=e.context?.xpubXP;if(S!==void 0&&typeof S!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let ve=await Be({indices:c??[],chainAlias:i,isChange:!1,isTestnet:l,xpubXP:S}),Pe=await Be({indices:o??[],chainAlias:i,isChange:!0,isTestnet:l,xpubXP:S}),Et=[...new Set([h,...ve,...Pe])].map(Mt=>utils.parse(Mt)[2]);A=await Avalanche.createAvalancheUnsignedTx({tx:Y,utxos:k,provider:u,fromAddressBytes:Et});}let x=await Avalanche.parseAvalancheTx(A,u,h),q=fe(x),K=St(x);if(x.type==="unknown"||q===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let le={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(A.toJSON()),data:x,vm:m,externalIndices:c,internalIndices:o},Ae=xe(q,t.networkToken.symbol),ke={title:K,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Ae,networkFeeSelector:!1},z=await a.requestApproval({request:e,displayData:ke,signingData:le});if("error"in z)return {error:z.error};let M=await Sa(u,z,m);return Ca({provider:u,txHash:M,vm:m,onTransactionConfirmed:a.onTransactionConfirmed,onTransactionReverted:a.onTransactionReverted,requestId:e.requestId}),{result:M}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},Sa=async(e,t,a)=>{if("txHash"in t)return t.txHash;let{txID:r}=await e.issueTxHex(t.signedData,a);return r},Ca=async({provider:e,txHash:t,vm:a,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{a===PVM?(await U({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:o=>["Committed","Dropped"].includes(o.status),maxRetries:7})).status==="Committed"?r(t,s):n(t,s):a===AVM?(await U({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:o=>["Accepted","Rejected"].includes(o.status),maxRetries:7})).status==="Accepted"?r(t,s):n(t,s):(await U({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:o=>["Accepted","Dropped"].includes(o.status),maxRetries:7})).status==="Accepted"?r(t,s):n(t,s);}catch(c){console.error(c),c instanceof Error&&c.message.startsWith("Max retry exceeded.")||n(t,s);}};var ba=z.object({from:z.string().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"])}),Rt=e=>ba.safeParse(e);var Ra=process.env.GLACIER_API_KEY,wt=async({request:e,network:t,approvalController:a,glacierApiUrl:r})=>{let n=Rt(e.params);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:s,chainAlias:i,from:c}=n.data,o=Avalanche.getVmByChainAlias(i),p=utils.hexToBuffer(s),m=t.isTestnet??!1,d=E({isTestnet:m}),l=utils.unpackWithManager(o,p),u=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,isTestnet:m,url:r,token:Ra}),h;try{let S=utils.getManagerForVM(o).unpack(p,avaxSerial.SignedTx),ve=await Avalanche.createAvalancheUnsignedTx({tx:l,utxos:u,provider:d,credentials:S.getCredentials()});h=l.getSigIndices().map((Pe,Ge)=>new Credential(Avalanche.populateCredential(Pe,{unsignedTx:ve,credentialIndex:Ge})));}catch{h=l.getSigIndices().map(S=>new Credential(Avalanche.populateCredential(S)));}let y=await Avalanche.createAvalancheUnsignedTx({tx:l,provider:d,credentials:h,utxos:u}),k=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!k)return {error:rpcErrors.invalidRequest("Missing signer address")};let A=y.getSigIndicesForAddress(k);if(!A)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let x=y.getSigIndices();if(!A.some(([Y,S])=>x[Y]?.includes(S)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let K=await Avalanche.parseAvalancheTx(y,d,c),le=fe(K);if(K.type==="unknown"||le===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Ae={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:K,vm:o,unsignedTxJson:JSON.stringify(y.toJSON()),ownSignatureIndices:A},ke=xe(le,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:ke},M=await a.requestApproval({request:e,displayData:z,signingData:Ae});return "error"in M?{error:M.error}:"signedData"in M?{result:M.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var W,ce,J,L,Nt=class{constructor({approvalController:t,environment:a}){I(this,W,void 0);I(this,ce,void 0);I(this,J,void 0);I(this,L,void 0);let{glacierApiUrl:r,proxyApiUrl:n}=tt(a);D(this,W,new he({glacierApiUrl:r})),D(this,ce,n),D(this,J,r),D(this,L,t);}getProvider(t){return E({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:a,isTestnet:r,walletType:n}){return yt({accountIndex:t,xpubXP:a,isTestnet:r,walletType:n})}getBalances({addresses:t,network:a,storage:r,currency:n}){let s=new ae({storage:r,proxyApiUrl:f(this,ce)});return dt({addresses:t,currency:n,network:a,glacierService:f(this,W),tokenService:s})}getManifest(){let t=parseManifest(Fe);return t.success?t.data:void 0}getNetworkFee(t){return Oe()}getTransactionHistory({network:t,address:a,nextPageToken:r,offset:n}){return Qe({network:t,address:a,nextPageToken:r,offset:n,glacierService:f(this,W)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,a){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Tt({request:t,network:a,approvalController:f(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return wt({request:t,network:a,approvalController:f(this,L),glacierApiUrl:f(this,J)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return Dt({request:t,network:a,approvalController:f(this,L),glacierApiUrl:f(this,J)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return ut({blockchainId:t,isTestnet:a})}};W=new WeakMap,ce=new WeakMap,J=new WeakMap,L=new WeakMap;var Vs=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Us=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
12
+ var Lt=Object.defineProperty;var Ht=(e,t,a)=>t in e?Lt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var U=(e,t,a)=>(Ht(e,typeof t!="symbol"?t+"":t,a),a),je=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var y=(e,t,a)=>(je(e,t,"read from private field"),a?a.call(e):t.get(e)),C=(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);},I=(e,t,a,r)=>(je(e,t,"write to private field"),r?r.call(e,a):t.set(e,a),a);var $e={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 Ke=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ze=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function de(e,t,a="tx"){return `${e}/${a}/${t}`}function X({amount:e,decimals:t}){return e===void 0?new R(0):new R(e/10**t)}function Ze({tx:e,address:t,networkToken:a,chainId:r,explorerUrl:n,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(p=>p.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(p=>p.addresses)||[]),c=Ot({tx:e,isTestnet:s,networkToken:a,froms:i}),l=Ft({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:c.toString()}],gasUsed:l.toString(),explorerLink:de(n??"",e.txHash,"tx"),txType:e.txType,chainId:r.toString()}}function Ot({tx:e,isTestnet:t,networkToken:a,froms:r}){let n=["ImportTx","ExportTx"].includes(e.txType),s=e.txType==="BaseTx",i=e.emittedUtxos.filter(p=>p.asset.assetId===ee(!!t)&&!p.addresses.some(d=>r.has(d))).reduce((p,d)=>p.add(d.asset.amount),new R(0)),o=e.value.find(p=>p.assetId===ee(!!t))?.amount,c=i.gt(new R(0))?i:o?new R(o):new R(0)??new R(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,u=e.emittedUtxos.filter(p=>p.asset.assetId===ee(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===l||e.txType==="ExportTx"&&p.consumedOnChainId!==l)).reduce((p,d)=>p.add(d.amount),new R(0)),m=s?c:n?u:e.amountStaked.length===0?Ye(e.value,!!t):Ye(e.amountStaked,!!t);return X({amount:m?.toNumber(),decimals:a.decimals})}function Ft({tx:e,isTestnet:t,networkToken:a}){let r=e.amountBurned?.filter(n=>n.assetId===ee(!!t)).reduce((n,s)=>n.add(s.amount),new R(0));return X({amount:r?.toNumber(),decimals:a.decimals})}function Ye(e,t){return e.filter(a=>a.assetId===ee(t)).reduce((a,r)=>a.add(r.amount),new R(0))}function ee(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Qe({tx:e,address:t,networkToken:a,chainId:r,explorerUrl:n,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(p=>p.addresses)||[]),o=new Set(e.emittedUtxos.flatMap(p=>p.addresses)||[]),c=$t({tx:e,isTestnet:s,networkToken:a}),l=Wt({isTestnet:s,tx:e,totalAmountCreated:c,networkToken:a}),u=t.toLowerCase().startsWith("x-")?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.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:de(n??"",e.txHash,"tx"),txType:e.txType,chainId:r.toString()}}function $t({tx:e,isTestnet:t,networkToken:a}){let r=["ImportTx","ExportTx"].includes(e.txType),n=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,s=e.emittedUtxos.filter(c=>c.asset.assetId===De(!!t)&&(e.txType==="ImportTx"&&c.consumedOnChainId===n||e.txType==="ExportTx"&&c.consumedOnChainId!==n)).reduce((c,l)=>c.add(l.asset.amount),new R(0)),i=e.amountCreated.filter(c=>c.assetId===De(!!t)).reduce((c,l)=>c.add(l.amount),new R(0));return X({amount:(r?s:i).toNumber(),decimals:a.decimals})}function Wt({isTestnet:e,tx:t,totalAmountCreated:a,networkToken:r}){let s=t.amountUnlocked.filter(i=>i.assetId===De(!!e)).reduce((i,o)=>i.add(o.amount),new R(0)).minus(a);return X({amount:s.toNumber(),decimals:r.decimals})}function De(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var at=async({address:e,nextPageToken:t,offset:a,network:r,glacierService:n})=>{let{isTestnet:s,networkToken:i,explorerUrl:o,chainId:c}=r;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let u=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:qt(e),network:s?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return Ke(u)&&(m=u.transactions.map(p=>Ze({tx:p,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:c}))),ze(u)&&(m=u.transactions.map(p=>Qe({tx:p,isTestnet:s,address:e,networkToken:i,explorerUrl:o,chainId:c}))),{transactions:m,nextPageToken:u.nextPageToken}},qt=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Kt={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},zt={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},nt=e=>{switch(e){case Environment.PRODUCTION:return Kt;case Environment.DEV:return zt}};var ge=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},ye=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 ge&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof ge&&this.setGlacierToUnhealthy(),a}}};var V=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:r=te.exponential()})=>{let n=0,s=0,i;for(;s<a;){s>0&&await Zt(n);try{let c=await e(s);if(t(c))return c}catch(c){i=c;}n=r(s),s++;}let o=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(o)},te=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function Zt(e){return new Promise(t=>setTimeout(t,e))}var Re=e=>V({operation:t=>e(t>0),maxRetries:2,backoffPolicy:te.constant(1),isSuccess:t=>t?.status?.error_code!==429});function st(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 r=st(e[t]??"");a=a+65027/r;}return (""+a).slice(0,16)}async function fe(e,t){let a=await fetch(...e);if(!a.ok)throw new Error(`Request failed with status ${a.status}`);let r=await a.json();return t.parse(r)}var ae=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let a=new URLSearchParams(t);return fe([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:a,...r}=t,n=new URLSearchParams(r);return fe([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${a}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],SimplePriceResponseSchema)}};var ot=getBasicCoingeckoHttp(),B,G,ne=class{constructor({storage:t,proxyApiUrl:a}){C(this,B,void 0);C(this,G,void 0);U(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let r={};return Object.keys(t).forEach(n=>{let s=t[n];r[n]={},a.forEach(i=>{r[n]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),r});I(this,B,t),I(this,G,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let r,s=`getSimplePrice-${t?`${Be(t)}-${a.toString()}`:`${a.toString()}`}`;if(r=y(this,B)?.get?.(s),r)return r;try{r=await Re(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{r=void 0;}return y(this,B)?.set?.(s,r),r}async getPricesByAddresses(t,a,r=VsCurrencyType.USD){let n,i=`getPricesWithMarketDataByAddresses-${`${Be(t)}-${a}-${r}`}`;if(n=y(this,B)?.get?.(i),n)return n;try{n=await Re(o=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:r,useCoingeckoProxy:o}));}catch{n=void 0;}return y(this,B)?.set?.(i,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:r=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){return n?new ae(y(this,G)).simplePriceByContractAddresses({id:t,contract_addresses:a,vs_currencies:[r],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(ot,{assetPlatformId:t,tokenAddresses:a,currencies:[r],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD],marketCap:r=!1,vol24:n=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:o=!1,shouldThrow:c=!0}){if(o){let l=await new ae(y(this,G)).simplePrice({ids:t,vs_currencies:a,include_market_cap:r,include_24hr_vol:n,include_24hr_change:s,include_last_updated_at:i});return this.transformSimplePriceResponse(l,a)}return simplePrice(ot,{coinIds:t,currencies:a,marketCap:r,vol24:n,change24:s,lastUpdated:i,shouldThrow:c})}};B=new WeakMap,G=new WeakMap;object({date:string(),usd:record(number())});var w=(e,t,a,r)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:a,symbol:r}),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 N=(e,t)=>({label:e,type:DetailItemType.DATE,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 it=e=>Object.keys(e).includes("unlockedUnstaked"),ct=e=>Object.keys(e).includes("locked");function xe(e){let t=Object.values(e).reduce(function(a,r){let n=r.reduce(function(s,i){let o=Number(i.amount);return s+o},0);return a+n},0);return BigInt(t)}var pt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:r,vol24:n,change24:s,coingeckoId:i})=>{let o={},c={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 c){let g=c[d];if(!g||!g.length){o[d]=0n;continue}g.forEach(f=>{let A=(o[d]??0n)+BigInt(f.amount);o[d]=A;});}let l=new TokenUnit(o.unlockedUnstaked?o.unlockedUnstaked:0n,t.decimals,t.symbol),u=a?l.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(xe(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:l.toSubUnit(),availableInCurrency:u,availableDisplayValue:l.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:r,vol24:n,change24:s,coingeckoId:i}};var dt=({balance:e,networkToken:t,priceInCurrency:a,marketCap:r,vol24:n,change24:s,coingeckoId:i})=>{let o={},c={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let d in c){let g=c[d];if(!g||!g.length){o[d]=0n;continue}g.forEach(f=>{let A=(o[d]??0n)+BigInt(f.amount);o[d]=A;});}let l=new TokenUnit(o.unlocked?o.unlocked:0n,t.decimals,t.symbol),u=a?l.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(xe(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:l.toSubUnit(),availableInCurrency:u,availableDisplayValue:l.toDisplay(),availableCurrencyDisplayValue:u?.toFixed(2),utxos:e,balancePerType:{unlocked:o.unlocked,locked:o.locked,atomicMemoryUnlocked:o.atomicMemoryUnlocked,atomicMemoryLocked:o.atomicMemoryLocked},marketCap:r,vol24:n,change24:s}};var gt=async({addresses:e,currency:t,network:a,glacierService:r,tokenService:n})=>{if(!r.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),o=e[0]??"",c=a.networkToken,l=a.pricingProviders?.coingecko.nativeTokenId,u=a.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,m=a.isTestnet?Network.FUJI:Network.MAINNET,p=await r.getChainBalance({blockchainId:u,network:m,addresses:e.join(",")}).then(D=>D.balances),d=l?await n.getSimplePrice({coinIds:[l],currencies:[i]}):{},g=d?.[l??""]?.[i]?.price??void 0,f=d?.[l??""]?.[i]?.marketCap??void 0,T=d?.[l??""]?.[i]?.vol24??void 0,A=d?.[l??""]?.[i]?.change24??void 0,x;return it(p)?(x=pt({balance:p,networkToken:c,priceInCurrency:g,marketCap:f,vol24:T,change24:A,coingeckoId:l??""}),{[o]:{[c.symbol]:x}}):ct(p)?(x=dt({balance:p,networkToken:c,priceInCurrency:g,marketCap:f,vol24:T,change24:A,coingeckoId:l??""}),{[o]:{[c.symbol]:x}}):Promise.reject("Incorrect type balance was returned from glacier")};function yt({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,r=ma.createHash("sha256").update(a).digest("base64");return "avax:"+da(r).substring(0,32)}var da=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Tt=async({accountIndex:e,isTestnet:t,xpubXP:a,walletType:r})=>{if(a===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let n=t?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),s;switch(r){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: ${r}`)}return {[NetworkVMType.AVM]:n.getAddress(s,"X"),[NetworkVMType.PVM]:n.getAddress(s,"P")}};var ua=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=>ua.safeParse(e);var vt=async({request:e,network:t,approvalController:a})=>{let r=At(e.params);if(!r.success)return console.error("invalid params",r.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:r.error}})};let[n,s]=r.data,i=Buffer.from(n,"utf-8").toString("hex"),o={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:s},c={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},l=await a.requestApproval({request:e,displayData:c,signingData:o});return "error"in l?{error:l.error}:"signedData"in l?{result:l.signedData}:{error:rpcErrors.internal("No signed data returned")}};var ga=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()}),Pt=e=>ga.safeParse(e);var E=({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var St=({utxoHexes:e=[],vm:t})=>{try{let a=utils.getManagerForVM(t).getDefaultCodec();return e.map(r=>{let n=utils.hexToBuffer(r);return Utxo.fromBytes(n,a)[0]})}catch{return []}};var Te=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 Ee=async({indices:e,chainAlias:t,isChange:a,isTestnet:r,xpubXP:n})=>{if(!n||a&&t!=="X")return [];let s=E({isTestnet:r});return e.map(i=>Avalanche.getAddressFromXpub(n,i,s,t,a))};var Me=e=>e.type===TxType.AddPermissionlessDelegator,Ue=e=>e.type===TxType.AddPermissionlessValidator,Ve=e=>e.type===TxType.Export,_e=e=>e.type===TxType.Import,xa=e=>e.type===TxType.Base,Le=e=>e.type===TxType.AddSubnetValidator,Ta=e=>e.type===TxType.CreateChain,Aa=e=>e.type===TxType.CreateSubnet,He=e=>e.type===TxType.RemoveSubnetValidator,Hn=e=>Me(e)||Ue(e)||Le(e)||He(e),Xn=e=>Ve(e)||_e(e),Dt=e=>xa(e),Rt=e=>Ta(e),Bt=e=>Aa(e);function Xe(e){return e===Avalanche.MainnetContext.pBlockchainID}var Ae=(e,t)=>{let a=[];if(Dt(e)){let{chain:n,outputs:s,memo:i}=e;a.push({title:"Chain Details",items:[h("Active chain",`Avalanche ${W[n]}`)]}),s.forEach((o,c)=>{let l=o.owners.flatMap(u=>[we("To",u),w("Amount",o.amount,9,t)]);o.owners.length>1&&l.push(h("Threshold",o.threshold.toString())),a.push({title:c===0?"Balance Change":void 0,items:l});}),n!==PVM&&i&&a.push({title:"Memo",items:[i]});}else if(Ve(e)){let{amount:n,chain:s,destination:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${W[s]}`),h("Target Chain",`Avalanche ${W[i]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),w("Amount",n,9,t)]});}else if(_e(e)){let{amount:n,chain:s,source:i,type:o}=e;a.push({title:"Transaction Details",items:[h("Source Chain",`Avalanche ${W[i]}`),h("Destination Chain",`Avalanche ${W[s]}`),h("Transaction Type",o?(o[0]||"").toUpperCase()+o.slice(1):""),w("Amount",n,9,t)]});}else if(Bt(e)){let{threshold:n,controlKeys:s}=e;a.push({title:"Subnet Details",items:[h(s.length>1?"Owners":"Owner",s.join(`
13
+ `),"vertical"),h("Signature Threshold",`${n}/${s.length}`,"vertical")]});}else if(Me(e)){let{nodeID:n,start:s,end:i,stake:o,subnetID:c}=e,l=[k("Node ID",n),Xe(c)?h("Subnet ID","Primary Network"):k("Subnet ID",c),w("Stake Amount",o,9,t),N("Start Date",s),N("End Date",i)];a.push({title:"Staking Details",items:l});}else if(Ue(e)){let{nodeID:n,delegationFee:s,start:i,end:o,stake:c,subnetID:l,signature:u,publicKey:m}=e,p=[k("Node ID",n),Xe(l)?h("Subnet ID","Primary Network"):k("Subnet ID",l)];m&&u&&p.push(k("Public Key",m),k("Proof",u)),p.push(w("Stake Amount",c,9,t),h("Delegation Fee",`${s/1e4} %`),N("Start Date",i),N("End Date",o)),a.push({title:"Staking Details",items:p});}else if(Rt(e)){let{chainID:n,chainName:s,vmID:i,genesisData:o}=e,c=[h("Blockchain name",s,"vertical"),h("Blockchain ID",n,"vertical"),h("Virtual Machine ID",i,"vertical"),h("Genesis Data",o,"vertical")];a.push({title:"Blockchain Details",items:c});}else if(Le(e)){let{nodeID:n,start:s,end:i,subnetID:o}=e,c=[k("Subnet ID",o),k("Node ID",n),N("Start Date",s),N("End Date",i)];a.push({title:"Staking Details",items:c});}else if(He(e)){let{nodeID:n,subnetID:s}=e,i=[k("Node ID",n),k("Subnet ID",s)];a.push({title:"Staking Details",items:i});}let{txFee:r}=e;return r&&a.push({title:"Network Fee",items:[w("Fee Amount",r,9,t)]}),a},W=(r=>(r.AVM="X Chain",r.PVM="P Chain",r.EVM="C Chain",r))(W||{});var Sa=process.env.GLACIER_API_KEY,wt=async({request:e,network:t,approvalController:a,glacierApiUrl:r,appInfo:n})=>{let s=Pt(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:c,internalIndices:l,utxos:u}=s.data,m=Avalanche.getVmByChainAlias(o),p=utils.hexToBuffer(i),d=t.isTestnet??!1,g=E({isTestnet:d}),f=e.context?.currentAddress;if(!f||typeof f!="string")return {error:rpcErrors.invalidRequest("No active account found")};let T=St({utxoHexes:u,vm:m}),A=T.length?T:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,isTestnet:d,url:r,token:Sa,headers:_(n)}),x;if(o==="C")x=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:p,vm:m,utxos:A,fromAddress:f});else {let Q=utils.unpackWithManager(m,p),P=e.context?.xpubXP;if(P!==void 0&&typeof P!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Ie=await Ee({indices:c??[],chainAlias:o,isChange:!1,isTestnet:d,xpubXP:P}),Se=await Ee({indices:l??[],chainAlias:o,isChange:!0,isTestnet:d,xpubXP:P}),Vt=[...new Set([f,...Ie,...Se])].map(_t=>utils.parse(_t)[2]);x=await Avalanche.createAvalancheUnsignedTx({tx:Q,utxos:A,provider:g,fromAddressBytes:Vt});}let D=await Avalanche.parseAvalancheTx(x,g,f),ve=Te(D),Y=bt(D);if(D.type==="unknown"||ve===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let me={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(x.toJSON()),data:D,vm:m,externalIndices:c,internalIndices:l},Pe=Ae(ve,t.networkToken.symbol),Ce={title:Y,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Pe,networkFeeSelector:!1},Z=await a.requestApproval({request:e,displayData:Ce,signingData:me});if("error"in Z)return {error:Z.error};let M=await ba(g,Z,m);return Da({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:r}=await e.issueTxHex(t.signedData,a);return r},Da=async({provider:e,txHash:t,vm:a,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{a===PVM?(await V({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:c=>["Committed","Dropped"].includes(c.status),maxRetries:7})).status==="Committed"?r(t,s):n(t,s):a===AVM?(await V({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:c=>["Accepted","Rejected"].includes(c.status),maxRetries:7})).status==="Accepted"?r(t,s):n(t,s):(await V({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:c=>["Accepted","Dropped"].includes(c.status),maxRetries:7})).status==="Accepted"?r(t,s):n(t,s);}catch(o){console.error(o),o instanceof Error&&o.message.startsWith("Max retry exceeded.")||n(t,s);}};var Ra=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),Nt=e=>Ra.safeParse(e);var Na=process.env.GLACIER_API_KEY,Mt=async({request:e,network:t,approvalController:a,glacierApiUrl:r,appInfo:n})=>{let s=Nt(e.params);if(!s.success)return console.error("invalid params",s.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:i,chainAlias:o,from:c}=s.data,l=Avalanche.getVmByChainAlias(o),u=utils.hexToBuffer(i),m=t.isTestnet??!1,p=E({isTestnet:m}),d=utils.unpackWithManager(l,u),g=await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:o,isTestnet:m,url:r,token:Na,headers:_(n)}),f;try{let P=utils.getManagerForVM(l).unpack(u,avaxSerial.SignedTx),Ie=await Avalanche.createAvalancheUnsignedTx({tx:d,utxos:g,provider:p,credentials:P.getCredentials()});f=d.getSigIndices().map((Se,Fe)=>new Credential(Avalanche.populateCredential(Se,{unsignedTx:Ie,credentialIndex:Fe})));}catch{f=d.getSigIndices().map(P=>new Credential(Avalanche.populateCredential(P)));}let T=await Avalanche.createAvalancheUnsignedTx({tx:d,provider:p,credentials:f,utxos:g}),A=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!A)return {error:rpcErrors.invalidRequest("Missing signer address")};let x=T.getSigIndicesForAddress(A);if(!x)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let D=T.getSigIndices();if(!x.some(([Q,P])=>D[Q]?.includes(P)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Y=await Avalanche.parseAvalancheTx(T,p,c),me=Te(Y);if(Y.type==="unknown"||me===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Pe={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Y,vm:l,unsignedTxJson:JSON.stringify(T.toJSON()),ownSignatureIndices:x},Ce=Ae(me,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:Pe});return "error"in M?{error:M.error}:"signedData"in M?{result:M.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var q,pe,K,H,z,Ut=class{constructor({approvalController:t,environment:a,appInfo:r}){C(this,q,void 0);C(this,pe,void 0);C(this,K,void 0);C(this,H,void 0);C(this,z,void 0);let{glacierApiUrl:n,proxyApiUrl:s}=nt(a);I(this,z,r),I(this,q,new ye({glacierApiUrl:n,headers:_(r)})),I(this,pe,s),I(this,K,n),I(this,H,t);}getProvider(t){return E({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:a,isTestnet:r,walletType:n}){return Tt({accountIndex:t,xpubXP:a,isTestnet:r,walletType:n})}getBalances({addresses:t,network:a,storage:r,currency:n}){let s=new ne({storage:r,proxyApiUrl:y(this,pe)});return gt({addresses:t,currency:n,network:a,glacierService:y(this,q),tokenService:s})}getManifest(){let t=parseManifest($e);return t.success?t.data:void 0}getNetworkFee(t){return We()}getTransactionHistory({network:t,address:a,nextPageToken:r,offset:n}){return at({network:t,address:a,nextPageToken:r,offset:n,glacierService:y(this,q)})}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,H)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return Mt({request:t,network:a,approvalController:y(this,H),glacierApiUrl:y(this,K),appInfo:y(this,z)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return wt({request:t,network:a,approvalController:y(this,H),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 yt({blockchainId:t,isTestnet:a})}};q=new WeakMap,pe=new WeakMap,K=new WeakMap,H=new WeakMap,z=new WeakMap;var Os=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Fs=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
14
14
 
15
- export { Nt as AvalancheModule, we as isAddPermissionlessDelegatorTx, Ne as isAddPermissionlessValidatorTx, Ve as isAddSubnetValidatorTx, ga as isBaseTx, bt as isBlockchainDetails, Ct as isChainDetails, ya as isCreateChainTx, fa as isCreateSubnetTx, Mr as isExportImportTxDetails, Ee as isExportTx, Me as isImportTx, Ue as isRemoveSubnetValidatorTx, Er as isStakingDetails, It as isSubnetDetails, Us as isTokenWithBalanceAVM, Vs as isTokenWithBalancePVM };
15
+ export { Ut as AvalancheModule, Me as isAddPermissionlessDelegatorTx, Ue as isAddPermissionlessValidatorTx, Le as isAddSubnetValidatorTx, xa as isBaseTx, Rt as isBlockchainDetails, Dt as isChainDetails, Ta as isCreateChainTx, Aa as isCreateSubnetTx, Xn as isExportImportTxDetails, Ve as isExportTx, _e as isImportTx, He as isRemoveSubnetValidatorTx, Hn as isStakingDetails, Bt as isSubnetDetails, Fs as isTokenWithBalanceAVM, Os as isTokenWithBalancePVM };
16
16
  //# sourceMappingURL=out.js.map
17
17
  //# sourceMappingURL=index.js.map