@avalabs/avalanche-module 0.1.3 → 0.1.5

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,10 +1,11 @@
1
1
  import * as _metamask_rpc_errors from '@metamask/rpc-errors';
2
2
  import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
3
- import { Module, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM } from '@avalabs/vm-module-types';
3
+ import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, TransactionDetails, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
4
4
 
5
5
  declare class AvalancheModule implements Module {
6
6
  #private;
7
- constructor({ environment }: {
7
+ constructor({ approvalController, environment, }: {
8
+ approvalController: ApprovalController;
8
9
  environment: Environment;
9
10
  });
10
11
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
@@ -13,8 +14,12 @@ declare class AvalancheModule implements Module {
13
14
  getNetworkFee(_: Network): Promise<NetworkFees>;
14
15
  getTransactionHistory({ network, address, nextPageToken, offset }: GetTransactionHistory): Promise<_avalabs_vm_module_types_dist_transaction_history.TransactionHistoryResponse>;
15
16
  getTokens(_: Network): Promise<never[]>;
16
- onRpcRequest(request: RpcRequest, _network: Network): Promise<{
17
+ onRpcRequest(request: RpcRequest, network: Network): Promise<{
17
18
  error: _metamask_rpc_errors.JsonRpcError<_metamask_rpc_errors.OptionalDataWithOptionalCause>;
19
+ result?: undefined;
20
+ } | {
21
+ result: `0x${string}`;
22
+ error?: undefined;
18
23
  }>;
19
24
  static getHashedBlockchainId({ blockchainId, isTestnet }: {
20
25
  blockchainId: string;
@@ -25,4 +30,19 @@ declare class AvalancheModule implements Module {
25
30
  declare const isTokenWithBalancePVM: (token: TokenWithBalance) => token is TokenWithBalancePVM;
26
31
  declare const isTokenWithBalanceAVM: (token: TokenWithBalance) => token is TokenWithBalanceAVM;
27
32
 
28
- export { AvalancheModule, isTokenWithBalanceAVM, isTokenWithBalancePVM };
33
+ declare const isAddPermissionlessDelegatorTx: (tx: TxDetails) => tx is AddPermissionlessDelegatorTx;
34
+ declare const isAddPermissionlessValidatorTx: (tx: TxDetails) => tx is AddPermissionlessValidatorTx;
35
+ declare const isExportTx: (tx: TxDetails | TransactionDetails) => tx is ExportTx;
36
+ declare const isImportTx: (tx: TxDetails | TransactionDetails) => tx is ImportTx;
37
+ declare const isBaseTx: (tx: TxDetails) => tx is BaseTx;
38
+ declare const isAddSubnetValidatorTx: (tx: TxDetails) => tx is AddSubnetValidatorTx;
39
+ declare const isCreateChainTx: (tx: TxDetails) => tx is CreateChainTx;
40
+ declare const isCreateSubnetTx: (tx: TxDetails) => tx is CreateSubnetTx;
41
+ declare const isRemoveSubnetValidatorTx: (tx: TxDetails) => tx is RemoveSubnetValidatorTx;
42
+ declare const isStakingDetails: (tx: TxDetails) => tx is StakingDetails;
43
+ declare const isExportImportTxDetails: (tx: TxDetails | TransactionDetails) => tx is ExportImportTxDetails;
44
+ declare const isChainDetails: (tx: TxDetails) => tx is BaseTx;
45
+ declare const isBlockchainDetails: (tx: TxDetails) => tx is CreateChainTx;
46
+ declare const isSubnetDetails: (tx: TxDetails) => tx is CreateSubnetTx;
47
+
48
+ export { AvalancheModule, isAddPermissionlessDelegatorTx, isAddPermissionlessValidatorTx, isAddSubnetValidatorTx, isBaseTx, isBlockchainDetails, isChainDetails, isCreateChainTx, isCreateSubnetTx, isExportImportTxDetails, isExportTx, isImportTx, isRemoveSubnetValidatorTx, isStakingDetails, isSubnetDetails, isTokenWithBalanceAVM, isTokenWithBalancePVM };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import * as _metamask_rpc_errors from '@metamask/rpc-errors';
2
2
  import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
3
- import { Module, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM } from '@avalabs/vm-module-types';
3
+ import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TokenWithBalance, TokenWithBalancePVM, TokenWithBalanceAVM, TxDetails, AddPermissionlessDelegatorTx, AddPermissionlessValidatorTx, TransactionDetails, ExportTx, ImportTx, BaseTx, AddSubnetValidatorTx, CreateChainTx, CreateSubnetTx, RemoveSubnetValidatorTx, StakingDetails, ExportImportTxDetails } from '@avalabs/vm-module-types';
4
4
 
5
5
  declare class AvalancheModule implements Module {
6
6
  #private;
7
- constructor({ environment }: {
7
+ constructor({ approvalController, environment, }: {
8
+ approvalController: ApprovalController;
8
9
  environment: Environment;
9
10
  });
10
11
  getAddress({ accountIndex, xpubXP, isTestnet, walletType }: GetAddressParams): Promise<GetAddressResponse>;
@@ -13,8 +14,12 @@ declare class AvalancheModule implements Module {
13
14
  getNetworkFee(_: Network): Promise<NetworkFees>;
14
15
  getTransactionHistory({ network, address, nextPageToken, offset }: GetTransactionHistory): Promise<_avalabs_vm_module_types_dist_transaction_history.TransactionHistoryResponse>;
15
16
  getTokens(_: Network): Promise<never[]>;
16
- onRpcRequest(request: RpcRequest, _network: Network): Promise<{
17
+ onRpcRequest(request: RpcRequest, network: Network): Promise<{
17
18
  error: _metamask_rpc_errors.JsonRpcError<_metamask_rpc_errors.OptionalDataWithOptionalCause>;
19
+ result?: undefined;
20
+ } | {
21
+ result: `0x${string}`;
22
+ error?: undefined;
18
23
  }>;
19
24
  static getHashedBlockchainId({ blockchainId, isTestnet }: {
20
25
  blockchainId: string;
@@ -25,4 +30,19 @@ declare class AvalancheModule implements Module {
25
30
  declare const isTokenWithBalancePVM: (token: TokenWithBalance) => token is TokenWithBalancePVM;
26
31
  declare const isTokenWithBalanceAVM: (token: TokenWithBalance) => token is TokenWithBalanceAVM;
27
32
 
28
- export { AvalancheModule, isTokenWithBalanceAVM, isTokenWithBalancePVM };
33
+ declare const isAddPermissionlessDelegatorTx: (tx: TxDetails) => tx is AddPermissionlessDelegatorTx;
34
+ declare const isAddPermissionlessValidatorTx: (tx: TxDetails) => tx is AddPermissionlessValidatorTx;
35
+ declare const isExportTx: (tx: TxDetails | TransactionDetails) => tx is ExportTx;
36
+ declare const isImportTx: (tx: TxDetails | TransactionDetails) => tx is ImportTx;
37
+ declare const isBaseTx: (tx: TxDetails) => tx is BaseTx;
38
+ declare const isAddSubnetValidatorTx: (tx: TxDetails) => tx is AddSubnetValidatorTx;
39
+ declare const isCreateChainTx: (tx: TxDetails) => tx is CreateChainTx;
40
+ declare const isCreateSubnetTx: (tx: TxDetails) => tx is CreateSubnetTx;
41
+ declare const isRemoveSubnetValidatorTx: (tx: TxDetails) => tx is RemoveSubnetValidatorTx;
42
+ declare const isStakingDetails: (tx: TxDetails) => tx is StakingDetails;
43
+ declare const isExportImportTxDetails: (tx: TxDetails | TransactionDetails) => tx is ExportImportTxDetails;
44
+ declare const isChainDetails: (tx: TxDetails) => tx is BaseTx;
45
+ declare const isBlockchainDetails: (tx: TxDetails) => tx is CreateChainTx;
46
+ declare const isSubnetDetails: (tx: TxDetails) => tx is CreateSubnetTx;
47
+
48
+ export { AvalancheModule, isAddPermissionlessDelegatorTx, isAddPermissionlessValidatorTx, isAddSubnetValidatorTx, isBaseTx, isBlockchainDetails, isChainDetails, isCreateChainTx, isCreateSubnetTx, isExportImportTxDetails, isExportTx, isImportTx, isRemoveSubnetValidatorTx, isStakingDetails, isSubnetDetails, isTokenWithBalanceAVM, isTokenWithBalancePVM };
package/dist/index.js CHANGED
@@ -1,16 +1,18 @@
1
- import { parseManifest, Environment, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema } from '@avalabs/vm-module-types';
1
+ import { NetworkVMType, TxType, parseManifest, RpcMethod, Environment, WalletType, TokenType, RawSimplePriceResponseSchema, SimplePriceResponseSchema } 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
- import v from 'big.js';
4
+ import w 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
7
  import { Zodios } from '@zodios/core';
8
- import { string, boolean } from 'zod';
8
+ import { z, string, boolean } from 'zod';
9
9
  import { TokenUnit } from '@avalabs/core-utils-sdk';
10
- import Ye from 'crypto';
10
+ import Gt from 'crypto';
11
+ import { utils, Utxo } from '@avalabs/avalanchejs';
12
+ import { AVALANCHE_XP_NETWORK, ChainId, AVALANCHE_XP_TEST_NETWORK } from '@avalabs/core-chains-sdk';
11
13
 
12
- var we=Object.defineProperty;var Re=(e,t,n)=>t in e?we(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var b=(e,t,n)=>(Re(e,typeof t!="symbol"?t+"":t,n),n),K=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var y=(e,t,n)=>(K(e,t,"read from private field"),n?n.call(e):t.get(e)),C=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n);},B=(e,t,n,a)=>(K(e,t,"write to private field"),a?a.call(e,n):t.set(e,n),n);var z={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: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 Z(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var te=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ne=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function E(e,t,n="tx"){return `${e}/${n}/${t}`}function S({amount:e,decimals:t}){return e===void 0?new v(0):new v(e/10**t)}function re({tx:e,address:t,networkToken:n,chainId:a,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),o=Me({tx:e,isTestnet:s,networkToken:n,froms:i}),m=Ue({tx:e,isTestnet:s,networkToken:n}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,d=i.has(p);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:n.decimals.toString(),name:n.name,symbol:n.symbol,type:TokenType.NATIVE,amount:o.toString()}],gasUsed:m.toString(),explorerLink:E(r??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Me({tx:e,isTestnet:t,networkToken:n,froms:a}){let r=["ImportTx","ExportTx"].includes(e.txType),s=e.txType==="BaseTx",i=e.emittedUtxos.filter(l=>l.asset.assetId===I(!!t)&&!l.addresses.some(u=>a.has(u))).reduce((l,u)=>l.add(u.asset.amount),new v(0)),c=e.value.find(l=>l.assetId===I(!!t))?.amount,o=i.gt(new v(0))?i:c?new v(c):new v(0)??new v(0),m=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,p=e.emittedUtxos.filter(l=>l.asset.assetId===I(!!t)&&(e.txType==="ImportTx"&&l.consumedOnChainId===m||e.txType==="ExportTx"&&l.consumedOnChainId!==m)).reduce((l,u)=>l.add(u.amount),new v(0)),d=s?o:r?p:e.amountStaked.length===0?ae(e.value,!!t):ae(e.amountStaked,!!t);return S({amount:d?.toNumber(),decimals:n.decimals})}function Ue({tx:e,isTestnet:t,networkToken:n}){let a=e.amountBurned?.filter(r=>r.assetId===I(!!t)).reduce((r,s)=>r.add(s.amount),new v(0));return S({amount:a?.toNumber(),decimals:n.decimals})}function ae(e,t){return e.filter(n=>n.assetId===I(t)).reduce((n,a)=>n.add(a.amount),new v(0))}function I(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function oe({tx:e,address:t,networkToken:n,chainId:a,explorerUrl:r,isTestnet:s}){let i=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),o=Le({tx:e,isTestnet:s,networkToken:n}),m=Ee({isTestnet:s,tx:e,totalAmountCreated:o,networkToken:n}),p=t.toLowerCase().startsWith("x-")?t.slice(2):t,d=i.has(p);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:n.decimals.toString(),name:n.name,symbol:n.symbol,type:TokenType.NATIVE,amount:o.toString()}],gasUsed:m.toString(),explorerLink:E(r??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Le({tx:e,isTestnet:t,networkToken:n}){let a=["ImportTx","ExportTx"].includes(e.txType),r=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,s=e.emittedUtxos.filter(o=>o.asset.assetId===F(!!t)&&(e.txType==="ImportTx"&&o.consumedOnChainId===r||e.txType==="ExportTx"&&o.consumedOnChainId!==r)).reduce((o,m)=>o.add(m.asset.amount),new v(0)),i=e.amountCreated.filter(o=>o.assetId===F(!!t)).reduce((o,m)=>o.add(m.amount),new v(0));return S({amount:(a?s:i).toNumber(),decimals:n.decimals})}function Ee({isTestnet:e,tx:t,totalAmountCreated:n,networkToken:a}){let s=t.amountUnlocked.filter(i=>i.assetId===F(!!e)).reduce((i,c)=>i.add(c.amount),new v(0)).minus(n);return S({amount:s.toNumber(),decimals:a.decimals})}function F(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var ce=async({address:e,nextPageToken:t,offset:n,network:a,glacierService:r})=>{let{isTestnet:s,networkToken:i,explorerUrl:c,chainId:o}=a;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let p=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Xe(e),network:s?Network.FUJI:Network.MAINNET,pageSize:n,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return te(p)&&(d=p.transactions.map(l=>re({tx:l,isTestnet:s,address:e,networkToken:i,explorerUrl:c,chainId:o}))),ne(p)&&(d=p.transactions.map(l=>oe({tx:l,isTestnet:s,address:e,networkToken:i,explorerUrl:c,chainId:o}))),{transactions:d,nextPageToken:p.nextPageToken}},Xe=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Ge={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},De={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},me=e=>{switch(e){case Environment.PRODUCTION:return Ge;case Environment.DEV:return De}};var G=class extends Error{constructor(){super(...arguments);b(this,"message","Glacier is unhealthy. Try again later.");}},D=class{constructor({glacierApiUrl:t}){b(this,"glacierSdk");b(this,"isGlacierHealthy",!0);b(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(n){throw n instanceof G&&this.setGlacierToUnhealthy(),n}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(n){throw n instanceof G&&this.setGlacierToUnhealthy(),n}}};var pe=async({operation:e,isSuccess:t,maxRetries:n=10,backoffPolicy:a=N.exponential()})=>{let r=0,s=0,i;for(;s<n;){s>0&&await je(r);try{let o=await e(s);if(t(o))return o}catch(o){i=o;}r=a(s),s++;}let c=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(c)},N=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return n=>t*1e3}static constantMs(t){return n=>t}};function je(e){return new Promise(t=>setTimeout(t,e))}var W=e=>pe({operation:t=>e(t>0),maxRetries:2,backoffPolicy:N.constant(1),isSuccess:t=>t?.status?.error_code!==429});function de(e){let t,n=0;for(t=0;t<e.length;t++)n+=e.charCodeAt(t)*(t+1);return n}function O(e){let t,n=0;for(t=0;t<e.length;t++){let a=de(e[t]??"");n=n+65027/a;}return (""+n).slice(0,16)}var Q=e=>new Zodios(`${e}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var ue=getBasicCoingeckoHttp(),x,w,U=class{constructor({storage:t,proxyApiUrl:n}){C(this,x,void 0);C(this,w,void 0);b(this,"transformSimplePriceResponse",(t,n=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(r=>{let s=t[r];a[r]={},n.forEach(i=>{a[r]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),a});B(this,x,t),B(this,w,n);}async getSimplePrice({coinIds:t=[],currencies:n=[VsCurrencyType.USD]}){let a,s=`getSimplePrice-${t?`${O(t)}-${n.toString()}`:`${n.toString()}`}`;if(a=y(this,x)?.get?.(s),a)return a;try{a=await W(i=>this.simplePrice({coinIds:t,currencies:n,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{a=void 0;}return y(this,x)?.set?.(s,a),a}async getPricesByAddresses(t,n,a=VsCurrencyType.USD){let r,i=`getPricesWithMarketDataByAddresses-${`${O(t)}-${n}-${a}`}`;if(r=y(this,x)?.get?.(i),r)return r;try{r=await W(c=>this.fetchPricesByAddresses({assetPlatformId:n,tokenAddresses:t,currency:a,useCoingeckoProxy:c}));}catch{r=void 0;}return y(this,x)?.set?.(i,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:n,currency:a=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?Q(y(this,w)).simplePriceByContractAddresses(void 0,{params:{id:t},queries:{contract_addresses:n,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(ue,{assetPlatformId:t,tokenAddresses:n,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:n=[VsCurrencyType.USD],marketCap:a=!1,vol24:r=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:c=!1,shouldThrow:o=!0}){if(c){let m=await Q(y(this,w)).simplePrice(void 0,{queries:{ids:t?.join(","),vs_currencies:n.join(","),include_market_cap:String(a),include_24hr_vol:String(r),include_24hr_change:String(s),include_last_updated_at:String(i)}});return this.transformSimplePriceResponse(m,n)}return simplePrice(ue,{coinIds:t,currencies:n,marketCap:a,vol24:r,change24:s,lastUpdated:i,shouldThrow:o})}};x=new WeakMap,w=new WeakMap;var he=e=>Object.keys(e).includes("unlockedUnstaked"),ye=e=>Object.keys(e).includes("locked");function H(e){let t=Object.values(e).reduce(function(n,a){let r=a.reduce(function(s,i){let c=Number(i.amount);return s+c},0);return n+r},0);return BigInt(t)}function h(e,t){return t===void 0?0:t/10**e}var ge=({balance:e,networkToken:t,priceInCurrency:n,marketCap:a,vol24:r,change24:s,coingeckoId:i})=>{let c=t.decimals,o={},m={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 g in m){let A=m[g];if(!A||!A.length){o[g]=0;continue}A.forEach(P=>{let Se=(o[g]??0)+Number(P.amount);o[g]=Se;});}let p=new TokenUnit(o.unlockedUnstaked?o.unlockedUnstaked:0n,t.decimals,t.symbol),d=n?Number(p.mul(n).toDisplay(2)):void 0,l=p.toDisplay(),u=new TokenUnit(H(e),t.decimals,t.symbol),k=n?Number(u.mul(n).toDisplay(2)):void 0,T=u.toDisplay();return {...t,type:TokenType.NATIVE,priceInCurrency:n,balance:u.toSubUnit(),balanceInCurrency:k,balanceDisplayValue:T,balanceCurrencyDisplayValue:k?.toFixed(2),available:p.toSubUnit(),availableInCurrency:d,availableDisplayValue:l,availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:h(c,o.lockedStaked),lockedStakeable:h(c,o.lockedStakeable),lockedPlatform:h(c,o.lockedPlatform),atomicMemoryLocked:h(c,o.atomicMemoryLocked),atomicMemoryUnlocked:h(c,o.atomicMemoryUnlocked),unlockedUnstaked:h(c,o.unlockedUnstaked),unlockedStaked:h(c,o.unlockedStaked),pendingStaked:h(c,o.pendingStaked)},marketCap:a,vol24:r,change24:s,coingeckoId:i}};var fe=({balance:e,networkToken:t,priceInCurrency:n,marketCap:a,vol24:r,change24:s,coingeckoId:i})=>{let c=t.decimals,o={},m={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let k in m){let T=m[k];if(!T||!T.length){o[k]=0;continue}T.forEach(g=>{let P=(o[k]??0)+Number(g.amount);o[k]=P;});}let p=new TokenUnit(H(e),t.decimals,t.symbol),d=p.toDisplay(),l=n?p.mul(n).toDisplay(2):void 0,u=l?Number(l.replaceAll(",","")):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:n,balance:p.toSubUnit(),balanceInCurrency:u,balanceDisplayValue:d,balanceCurrencyDisplayValue:l,utxos:e,balancePerType:{unlocked:h(c,o.unlocked),locked:h(c,o.locked),atomicMemoryUnlocked:h(c,o.atomicMemoryUnlocked),atomicMemoryLocked:h(c,o.atomicMemoryLocked)},marketCap:a,vol24:r,change24:s}};var ve=async({addresses:e,currency:t,network:n,glacierService:a,tokenService:r})=>{if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),c=e[0]??"",o=n.networkToken,m=n.pricingProviders?.coingecko.nativeTokenId,p=n.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=n.isTestnet?Network.FUJI:Network.MAINNET,l=await a.getChainBalance({blockchainId:p,network:d,addresses:e.join(",")}).then(J=>J.balances),u=m?await r.getSimplePrice({coinIds:[m],currencies:[i]}):{},k=u?.[m??""]?.[i]?.price??void 0,T=u?.[m??""]?.[i]?.marketCap??void 0,g=u?.[m??""]?.[i]?.vol24??void 0,A=u?.[m??""]?.[i]?.change24??void 0,P;return he(l)?(P=ge({balance:l,networkToken:o,priceInCurrency:k,marketCap:T,vol24:g,change24:A,coingeckoId:m??""}),{[c]:{[o.symbol]:P}}):ye(l)?(P=fe({balance:l,networkToken:o,priceInCurrency:k,marketCap:T,vol24:g,change24:A,coingeckoId:m??""}),{[c]:{[o.symbol]:P}}):Promise.reject("Incorrect type balance was returned from glacier")};function xe({blockchainId:e,isTestnet:t}){let n=t?"fuji"+e:e,a=Ye.createHash("sha256").update(n).digest("base64");return "avax:"+et(a).substring(0,32)}var et=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Ce=async({accountIndex:e,isTestnet:t,xpubXP:n,walletType:a})=>{if(n===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let r=t?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),s;switch(a){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(n,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(n,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${a}`)}return {[NetworkVMType.AVM]:r.getAddress(s,"X"),[NetworkVMType.PVM]:r.getAddress(s,"P")}};var R,L,Be=class{constructor({environment:t}){C(this,R,void 0);C(this,L,void 0);let{glacierApiUrl:n,proxyApiUrl:a}=me(t);B(this,R,new D({glacierApiUrl:n})),B(this,L,a);}getAddress({accountIndex:t,xpubXP:n,isTestnet:a,walletType:r}){return Ce({accountIndex:t,xpubXP:n,isTestnet:a,walletType:r})}getBalances({addresses:t,network:n,storage:a,currency:r}){let s=new U({storage:a,proxyApiUrl:y(this,L)});return ve({addresses:t,currency:r,network:n,glacierService:y(this,R),tokenService:s})}getManifest(){let t=parseManifest(z);return t.success?t.data:void 0}getNetworkFee(t){return Z()}getTransactionHistory({network:t,address:n,nextPageToken:a,offset:r}){return ce({network:t,address:n,nextPageToken:a,offset:r,glacierService:y(this,R)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,n){switch(t.method){default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:n}){return xe({blockchainId:t,isTestnet:n})}};R=new WeakMap,L=new WeakMap;var Gn=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Dn=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
14
+ var yt=Object.defineProperty;var xt=(e,t,a)=>t in e?yt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var N=(e,t,a)=>(xt(e,typeof t!="symbol"?t+"":t,a),a),ue=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var g=(e,t,a)=>(ue(e,t,"read from private field"),a?a.call(e):t.get(e)),S=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a);},B=(e,t,a,n)=>(ue(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var he={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 ge(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var Te=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,fe=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function J(e,t,a="tx"){return `${e}/${a}/${t}`}function D({amount:e,decimals:t}){return e===void 0?new w(0):new w(e/10**t)}function Ae({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),i=kt({tx:e,isTestnet:o,networkToken:a,froms:s}),p=At({tx:e,isTestnet:o,networkToken:a}),m=t.toLowerCase().startsWith("p-")?t.slice(2):t,d=s.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.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:i.toString()}],gasUsed:p.toString(),explorerLink:J(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function kt({tx:e,isTestnet:t,networkToken:a,froms:n}){let r=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(l=>l.asset.assetId===X(!!t)&&!l.addresses.some(u=>n.has(u))).reduce((l,u)=>l.add(u.asset.amount),new w(0)),c=e.value.find(l=>l.assetId===X(!!t))?.amount,i=s.gt(new w(0))?s:c?new w(c):new w(0)??new w(0),p=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(l=>l.asset.assetId===X(!!t)&&(e.txType==="ImportTx"&&l.consumedOnChainId===p||e.txType==="ExportTx"&&l.consumedOnChainId!==p)).reduce((l,u)=>l.add(u.amount),new w(0)),d=o?i:r?m:e.amountStaked.length===0?ke(e.value,!!t):ke(e.amountStaked,!!t);return D({amount:d?.toNumber(),decimals:a.decimals})}function At({tx:e,isTestnet:t,networkToken:a}){let n=e.amountBurned?.filter(r=>r.assetId===X(!!t)).reduce((r,o)=>r.add(o.amount),new w(0));return D({amount:n?.toNumber(),decimals:a.decimals})}function ke(e,t){return e.filter(a=>a.assetId===X(t)).reduce((a,n)=>a.add(n.amount),new w(0))}function X(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function ve({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(l=>l.addresses)||[]),c=new Set(e.emittedUtxos.flatMap(l=>l.addresses)||[]),i=Pt({tx:e,isTestnet:o,networkToken:a}),p=Ct({isTestnet:o,tx:e,totalAmountCreated:i,networkToken:a}),m=t.toLowerCase().startsWith("x-")?t.slice(2):t,d=s.has(m);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.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:i.toString()}],gasUsed:p.toString(),explorerLink:J(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function Pt({tx:e,isTestnet:t,networkToken:a}){let n=["ImportTx","ExportTx"].includes(e.txType),r=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,o=e.emittedUtxos.filter(i=>i.asset.assetId===ne(!!t)&&(e.txType==="ImportTx"&&i.consumedOnChainId===r||e.txType==="ExportTx"&&i.consumedOnChainId!==r)).reduce((i,p)=>i.add(p.asset.amount),new w(0)),s=e.amountCreated.filter(i=>i.assetId===ne(!!t)).reduce((i,p)=>i.add(p.amount),new w(0));return D({amount:(n?o:s).toNumber(),decimals:a.decimals})}function Ct({isTestnet:e,tx:t,totalAmountCreated:a,networkToken:n}){let o=t.amountUnlocked.filter(s=>s.assetId===ne(!!e)).reduce((s,c)=>s.add(c.amount),new w(0)).minus(a);return D({amount:o.toNumber(),decimals:n.decimals})}function ne(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var be=async({address:e,nextPageToken:t,offset:a,network:n,glacierService:r})=>{let{isTestnet:o,networkToken:s,explorerUrl:c,chainId:i}=n;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let m=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:St(e),network:o?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return Te(m)&&(d=m.transactions.map(l=>Ae({tx:l,isTestnet:o,address:e,networkToken:s,explorerUrl:c,chainId:i}))),fe(m)&&(d=m.transactions.map(l=>ve({tx:l,isTestnet:o,address:e,networkToken:s,explorerUrl:c,chainId:i}))),{transactions:d,nextPageToken:m.nextPageToken}},St=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Bt={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},wt={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Be=e=>{switch(e){case Environment.PRODUCTION:return Bt;case Environment.DEV:return wt}};var K=class extends Error{constructor(){super(...arguments);N(this,"message","Glacier is unhealthy. Try again later.");}},Y=class{constructor({glacierApiUrl:t}){N(this,"glacierSdk");N(this,"isGlacierHealthy",!0);N(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 K&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof K&&this.setGlacierToUnhealthy(),a}}};var we=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:n=H.exponential()})=>{let r=0,o=0,s;for(;o<a;){o>0&&await Rt(r);try{let i=await e(o);if(t(i))return i}catch(i){s=i;}r=n(o),o++;}let c=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(c)},H=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function Rt(e){return new Promise(t=>setTimeout(t,e))}var re=e=>we({operation:t=>e(t>0),maxRetries:2,backoffPolicy:H.constant(1),isSuccess:t=>t?.status?.error_code!==429});function Ie(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function se(e){let t,a=0;for(t=0;t<e.length;t++){let n=Ie(e[t]??"");a=a+65027/n;}return (""+a).slice(0,16)}var ie=e=>new Zodios(`${e}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var Re=getBasicCoingeckoHttp(),I,U,j=class{constructor({storage:t,proxyApiUrl:a}){S(this,I,void 0);S(this,U,void 0);N(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let n={};return Object.keys(t).forEach(r=>{let o=t[r];n[r]={},a.forEach(s=>{n[r]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),n});B(this,I,t),B(this,U,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${t?`${se(t)}-${a.toString()}`:`${a.toString()}`}`;if(n=g(this,I)?.get?.(o),n)return n;try{n=await re(s=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return g(this,I)?.set?.(o,n),n}async getPricesByAddresses(t,a,n=VsCurrencyType.USD){let r,s=`getPricesWithMarketDataByAddresses-${`${se(t)}-${a}-${n}`}`;if(r=g(this,I)?.get?.(s),r)return r;try{r=await re(c=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:n,useCoingeckoProxy:c}));}catch{r=void 0;}return g(this,I)?.set?.(s,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:n=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?ie(g(this,U)).simplePriceByContractAddresses(void 0,{params:{id:t},queries:{contract_addresses:a,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(Re,{assetPlatformId:t,tokenAddresses:a,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD],marketCap:n=!1,vol24:r=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:c=!1,shouldThrow:i=!0}){if(c){let p=await ie(g(this,U)).simplePrice(void 0,{queries:{ids:t?.join(","),vs_currencies:a.join(","),include_market_cap:String(n),include_24hr_vol:String(r),include_24hr_change:String(o),include_last_updated_at:String(s)}});return this.transformSimplePriceResponse(p,a)}return simplePrice(Re,{coinIds:t,currencies:a,marketCap:n,vol24:r,change24:o,lastUpdated:s,shouldThrow:i})}};I=new WeakMap,U=new WeakMap;var Ne=e=>Object.keys(e).includes("unlockedUnstaked"),De=e=>Object.keys(e).includes("locked");function Z(e){let t=Object.values(e).reduce(function(a,n){let r=n.reduce(function(o,s){let c=Number(s.amount);return o+c},0);return a+r},0);return BigInt(t)}function y(e,t){return t===void 0?0:t/10**e}var Ee=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:o,coingeckoId:s})=>{let c=t.decimals,i={},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 k in p){let v=p[k];if(!v||!v.length){i[k]=0;continue}v.forEach(T=>{let f=(i[k]??0)+Number(T.amount);i[k]=f;});}let m=new TokenUnit(i.unlockedUnstaked?i.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?Number(m.mul(a).toDisplay(2)):void 0,l=m.toDisplay(),u=new TokenUnit(Z(e),t.decimals,t.symbol),x=a?Number(u.mul(a).toDisplay(2).replaceAll(",","")):void 0,h=u.toDisplay();return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:u.toSubUnit(),balanceInCurrency:x,balanceDisplayValue:h,balanceCurrencyDisplayValue:x?.toFixed(2),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:l,availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:y(c,i.lockedStaked),lockedStakeable:y(c,i.lockedStakeable),lockedPlatform:y(c,i.lockedPlatform),atomicMemoryLocked:y(c,i.atomicMemoryLocked),atomicMemoryUnlocked:y(c,i.atomicMemoryUnlocked),unlockedUnstaked:y(c,i.unlockedUnstaked),unlockedStaked:y(c,i.unlockedStaked),pendingStaked:y(c,i.pendingStaked)},marketCap:n,vol24:r,change24:o,coingeckoId:s}};var Ve=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:o,coingeckoId:s})=>{let c=t.decimals,i={},p={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let x in p){let h=p[x];if(!h||!h.length){i[x]=0;continue}h.forEach(k=>{let T=(i[x]??0)+Number(k.amount);i[x]=T;});}let m=new TokenUnit(Z(e),t.decimals,t.symbol),d=m.toDisplay(),l=a?m.mul(a).toDisplay(2):void 0,u=l?Number(l.replaceAll(",","")):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:a,balance:m.toSubUnit(),balanceInCurrency:u,balanceDisplayValue:d,balanceCurrencyDisplayValue:l,utxos:e,balancePerType:{unlocked:y(c,i.unlocked),locked:y(c,i.locked),atomicMemoryUnlocked:y(c,i.atomicMemoryUnlocked),atomicMemoryLocked:y(c,i.atomicMemoryLocked)},marketCap:n,vol24:r,change24:o}};var Le=async({addresses:e,currency:t,network:a,glacierService:n,tokenService:r})=>{if(!n.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let s=t.toLowerCase(),c=e[0]??"",i=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 n.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(R=>R.balances),u=p?await r.getSimplePrice({coinIds:[p],currencies:[s]}):{},x=u?.[p??""]?.[s]?.price??void 0,h=u?.[p??""]?.[s]?.marketCap??void 0,k=u?.[p??""]?.[s]?.vol24??void 0,v=u?.[p??""]?.[s]?.change24??void 0,T;return Ne(l)?(T=Ee({balance:l,networkToken:i,priceInCurrency:x,marketCap:h,vol24:k,change24:v,coingeckoId:p??""}),{[c]:{[i.symbol]:T}}):De(l)?(T=Ve({balance:l,networkToken:i,priceInCurrency:x,marketCap:h,vol24:k,change24:v,coingeckoId:p??""}),{[c]:{[i.symbol]:T}}):Promise.reject("Incorrect type balance was returned from glacier")};function Xe({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,n=Gt.createHash("sha256").update(a).digest("base64");return "avax:"+jt(n).substring(0,32)}var jt=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var je=async({accountIndex:e,isTestnet:t,xpubXP:a,walletType:n})=>{if(a===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let r=t?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),o;switch(n){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{o=Avalanche.getAddressPublicKeyFromXpub(a,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{o=Buffer.from(a,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${n}`)}return {[NetworkVMType.AVM]:r.getAddress(o,"X"),[NetworkVMType.PVM]:r.getAddress(o,"P")}};var Ft=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),Fe=e=>Ft.safeParse(e);var We=async({request:e,network:t,approvalController:a})=>{let n=Fe(e.params);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams("Params are invalid")};let[r,o]=n.data,s=Buffer.from(r,"utf-8").toString("hex"),c={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:s,accountIndex:o},i={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},messageDetails:r},p=await a.requestApproval({request:e,displayData:i,signingData:c});return "error"in p?{error:p.error}:{result:p.result}};var qt=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()}),Oe=e=>qt.safeParse(e);var le=({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var Je=({utxoHexes:e=[],vm:t})=>{try{let a=utils.getManagerForVM(t).getDefaultCodec();return e.map(n=>{let r=utils.hexToBuffer(n);return Utxo.fromBytes(r,a)[0]})}catch{return []}};var Qe=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 ze=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 Jt=e=>e.type===TxType.AddPermissionlessDelegator,Qt=e=>e.type===TxType.AddPermissionlessValidator,zt=e=>e.type===TxType.Export,Kt=e=>e.type===TxType.Import,Yt=e=>e.type===TxType.Base,Zt=e=>e.type===TxType.AddSubnetValidator,ea=e=>e.type===TxType.CreateChain,ta=e=>e.type===TxType.CreateSubnet,aa=e=>e.type===TxType.RemoveSubnetValidator,Ke=e=>Jt(e)||Qt(e)||Zt(e)||aa(e),Ye=e=>zt(e)||Kt(e),Ze=e=>Yt(e),et=e=>ea(e),tt=e=>ta(e);var nt=(e,t)=>{switch(e){case"P":return t.isTestnet?ra:na;case"X":return t.isTestnet?oa:sa;default:return t}},na={...AVALANCHE_XP_NETWORK,chainId:ChainId.AVALANCHE_P,isTestnet:!1,vmName:NetworkVMType.PVM,chainName:"Avalanche (P-Chain)",logoUri:"https://images.ctfassets.net/gcj8jwzm6086/42aMwoCLblHOklt6Msi6tm/1e64aa637a8cead39b2db96fe3225c18/pchain-square.svg",networkToken:{...AVALANCHE_XP_NETWORK.networkToken,logoUri:"https://glacier-api.avax.network/proxy/chain-assets/cb14a1f/chains/43114/token-logo.png"},explorerUrl:"https://subnets.avax.network/p-chain"},ra={...AVALANCHE_XP_TEST_NETWORK,chainId:ChainId.AVALANCHE_TEST_P,isTestnet:!0,vmName:NetworkVMType.PVM,chainName:"Avalanche (P-Chain)",logoUri:"https://images.ctfassets.net/gcj8jwzm6086/42aMwoCLblHOklt6Msi6tm/1e64aa637a8cead39b2db96fe3225c18/pchain-square.svg",networkToken:{...AVALANCHE_XP_TEST_NETWORK.networkToken,logoUri:"https://glacier-api.avax.network/proxy/chain-assets/cb14a1f/chains/43114/token-logo.png"},explorerUrl:"https://subnets-test.avax.network/p-chain"},sa={...AVALANCHE_XP_NETWORK,isTestnet:!1,chainId:ChainId.AVALANCHE_X,chainName:"Avalanche (X-Chain)",logoUri:"https://images.ctfassets.net/gcj8jwzm6086/5xiGm7IBR6G44eeVlaWrxi/1b253c4744a3ad21a278091e3119feba/xchain-square.svg",explorerUrl:"https://subnets.avax.network/x-chain"},oa={...AVALANCHE_XP_TEST_NETWORK,isTestnet:!0,chainId:ChainId.AVALANCHE_TEST_X,chainName:"Avalanche (X-Chain)",logoUri:"https://images.ctfassets.net/gcj8jwzm6086/5xiGm7IBR6G44eeVlaWrxi/1b253c4744a3ad21a278091e3119feba/xchain-square.svg",explorerUrl:"https://subnets-test.avax.network/x-chain"};var ca=process.env.GLACIER_API_KEY,st=async({request:e,network:t,approvalController:a,glacierApiUrl:n})=>{let r=Oe(e.params);if(!r.success)return {error:rpcErrors.invalidParams("Params are invalid")};try{let{transactionHex:o,chainAlias:s,externalIndices:c,internalIndices:i,utxos:p}=r.data,m=nt(s,t),d=Avalanche.getVmByChainAlias(s),l=utils.hexToBuffer(o),u=m.isTestnet??!1,x=le({isTestnet:u}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.invalidRequest("No active account found")};let k=Je({utxoHexes:p,vm:d}),v=k.length?k:await Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:s,isTestnet:u,url:n,token:ca}),T;if(s==="C")T=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:l,vm:d,utxos:v,fromAddress:h});else {let mt=utils.unpackWithManager(d,l),$=e.context?.xpubXP;if(!$||typeof $!="string")return {error:rpcErrors.invalidParams("Request should have xpubXP in context")};let dt=await rt({indices:c??[],chainAlias:s,isChange:!1,isTestnet:u,xpubXP:$}),ut=await rt({indices:i??[],chainAlias:s,isChange:!0,isTestnet:u,xpubXP:$}),ht=[...new Set([h,...dt,...ut])].map(gt=>utils.parse(gt)[2]);T=await Avalanche.createAvalancheUnsignedTx({tx:mt,utxos:v,provider:x,fromAddressBytes:ht});}let R=await Avalanche.parseAvalancheTx(T,x,h),f=Qe(R),ct=ze(R);if(R.type==="unknown"||f===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let lt={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(T.toJSON()),data:R,vm:d},pt={title:ct,network:{chainId:m.chainId,name:m.chainName,logoUri:m.logoUri},transactionDetails:Ye(f)?f:void 0,stakingDetails:Ke(f)?f:void 0,chainDetails:Ze(f)?f:void 0,blockchainDetails:et(f)?f:void 0,subnetDetails:tt(f)?f:void 0,networkFeeSelector:!1},te=await a.requestApproval({request:e,displayData:pt,signingData:lt});return "error"in te?{error:te.error}:{result:te.result}}catch(o){return console.error(o),{error:rpcErrors.internal("Unable to create transaction")}}},rt=async({indices:e,chainAlias:t,isChange:a,isTestnet:n,xpubXP:r})=>{if(a&&t!=="X")return [];let o=le({isTestnet:n});return e.map(s=>Avalanche.getAddressFromXpub(r,s,o,t,a))};var _,O,q,L,it=class{constructor({approvalController:t,environment:a}){S(this,_,void 0);S(this,O,void 0);S(this,q,void 0);S(this,L,void 0);let{glacierApiUrl:n,proxyApiUrl:r}=Be(a);B(this,_,new Y({glacierApiUrl:n})),B(this,O,r),B(this,q,n),B(this,L,t);}getAddress({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r}){return je({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r})}getBalances({addresses:t,network:a,storage:n,currency:r}){let o=new j({storage:n,proxyApiUrl:g(this,O)});return Le({addresses:t,currency:r,network:a,glacierService:g(this,_),tokenService:o})}getManifest(){let t=parseManifest(he);return t.success?t.data:void 0}getNetworkFee(t){return ge()}getTransactionHistory({network:t,address:a,nextPageToken:n,offset:r}){return be({network:t,address:a,nextPageToken:n,offset:r,glacierService:g(this,_)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,a){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return We({request:t,network:a,approvalController:g(this,L)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return st({request:t,network:a,approvalController:g(this,L),glacierApiUrl:g(this,q)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return Xe({blockchainId:t,isTestnet:a})}};_=new WeakMap,O=new WeakMap,q=new WeakMap,L=new WeakMap;var Dr=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Ur=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
13
15
 
14
- export { Be as AvalancheModule, Dn as isTokenWithBalanceAVM, Gn as isTokenWithBalancePVM };
16
+ export { it as AvalancheModule, Jt as isAddPermissionlessDelegatorTx, Qt as isAddPermissionlessValidatorTx, Zt as isAddSubnetValidatorTx, Yt as isBaseTx, et as isBlockchainDetails, Ze as isChainDetails, ea as isCreateChainTx, ta as isCreateSubnetTx, Ye as isExportImportTxDetails, zt as isExportTx, Kt as isImportTx, aa as isRemoveSubnetValidatorTx, Ke as isStakingDetails, tt as isSubnetDetails, Ur as isTokenWithBalanceAVM, Dr as isTokenWithBalancePVM };
15
17
  //# sourceMappingURL=out.js.map
16
18
  //# sourceMappingURL=index.js.map