@avalabs/avalanche-module 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { TxType, parseManifest, RpcMethod, Environment, NetworkVMType, 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 R from 'big.js';
4
+ import I 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
8
  import { object, string, record, number, z as z$1, boolean } from 'zod';
9
9
  import { TokenUnit } from '@avalabs/core-utils-sdk';
10
- import Wt from 'crypto';
11
- import { utils, Utxo } from '@avalabs/avalanchejs';
10
+ import Zt from 'crypto';
11
+ import { utils, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
12
12
 
13
- var ht=Object.defineProperty;var gt=(e,t,a)=>t in e?ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var w=(e,t,a)=>(gt(e,typeof t!="symbol"?t+"":t,a),a),le=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var g=(e,t,a)=>(le(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)=>(le(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var pe={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 me(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var he=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ge=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function q(e,t,a="tx"){return `${e}/${a}/${t}`}function I({amount:e,decimals:t}){return e===void 0?new R(0):new R(e/10**t)}function xe({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(c=>c.addresses)||[]),l=new Set(e.emittedUtxos.flatMap(c=>c.addresses)||[]),s=ft({tx:e,isTestnet:o,networkToken:a,froms:i}),p=Tt({tx:e,isTestnet:o,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:[...l.values()].join(","),isSender:d,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:s.toString()}],gasUsed:p.toString(),explorerLink:q(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function ft({tx:e,isTestnet:t,networkToken:a,froms:n}){let r=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",i=e.emittedUtxos.filter(c=>c.asset.assetId===L(!!t)&&!c.addresses.some(u=>n.has(u))).reduce((c,u)=>c.add(u.asset.amount),new R(0)),l=e.value.find(c=>c.assetId===L(!!t))?.amount,s=i.gt(new R(0))?i:l?new R(l):new R(0)??new R(0),p=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(c=>c.asset.assetId===L(!!t)&&(e.txType==="ImportTx"&&c.consumedOnChainId===p||e.txType==="ExportTx"&&c.consumedOnChainId!==p)).reduce((c,u)=>c.add(u.amount),new R(0)),d=o?s:r?m:e.amountStaked.length===0?ye(e.value,!!t):ye(e.amountStaked,!!t);return I({amount:d?.toNumber(),decimals:a.decimals})}function Tt({tx:e,isTestnet:t,networkToken:a}){let n=e.amountBurned?.filter(r=>r.assetId===L(!!t)).reduce((r,o)=>r.add(o.amount),new R(0));return I({amount:n?.toNumber(),decimals:a.decimals})}function ye(e,t){return e.filter(a=>a.assetId===L(t)).reduce((a,n)=>a.add(n.amount),new R(0))}function L(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function fe({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(c=>c.addresses)||[]),l=new Set(e.emittedUtxos.flatMap(c=>c.addresses)||[]),s=vt({tx:e,isTestnet:o,networkToken:a}),p=At({isTestnet:o,tx:e,totalAmountCreated:s,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:[...l.values()].join(","),isSender:d,timestamp:e.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:s.toString()}],gasUsed:p.toString(),explorerLink:q(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function vt({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(s=>s.asset.assetId===te(!!t)&&(e.txType==="ImportTx"&&s.consumedOnChainId===r||e.txType==="ExportTx"&&s.consumedOnChainId!==r)).reduce((s,p)=>s.add(p.asset.amount),new R(0)),i=e.amountCreated.filter(s=>s.assetId===te(!!t)).reduce((s,p)=>s.add(p.amount),new R(0));return I({amount:(n?o:i).toNumber(),decimals:a.decimals})}function At({isTestnet:e,tx:t,totalAmountCreated:a,networkToken:n}){let o=t.amountUnlocked.filter(i=>i.assetId===te(!!e)).reduce((i,l)=>i.add(l.amount),new R(0)).minus(a);return I({amount:o.toNumber(),decimals:n.decimals})}function te(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var ve=async({address:e,nextPageToken:t,offset:a,network:n,glacierService:r})=>{let{isTestnet:o,networkToken:i,explorerUrl:l,chainId:s}=n;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let m=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:bt(e),network:o?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return he(m)&&(d=m.transactions.map(c=>xe({tx:c,isTestnet:o,address:e,networkToken:i,explorerUrl:l,chainId:s}))),ge(m)&&(d=m.transactions.map(c=>fe({tx:c,isTestnet:o,address:e,networkToken:i,explorerUrl:l,chainId:s}))),{transactions:d,nextPageToken:m.nextPageToken}},bt=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Ct={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},St={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Pe=e=>{switch(e){case Environment.PRODUCTION:return Ct;case Environment.DEV:return St}};var z=class extends Error{constructor(){super(...arguments);w(this,"message","Glacier is unhealthy. Try again later.");}},K=class{constructor({glacierApiUrl:t}){w(this,"glacierSdk");w(this,"isGlacierHealthy",!0);w(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 z&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof z&&this.setGlacierToUnhealthy(),a}}};var be=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:n=H.exponential()})=>{let r=0,o=0,i;for(;o<a;){o>0&&await Rt(r);try{let s=await e(o);if(t(s))return s}catch(s){i=s;}r=n(o),o++;}let l=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(l)},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 ae=e=>be({operation:t=>e(t>0),maxRetries:2,backoffPolicy:H.constant(1),isSuccess:t=>t?.status?.error_code!==429});function Ce(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function ne(e){let t,a=0;for(t=0;t<e.length;t++){let n=Ce(e[t]??"");a=a+65027/n;}return (""+a).slice(0,16)}var se=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 Se=getBasicCoingeckoHttp(),D,E,G=class{constructor({storage:t,proxyApiUrl:a}){S(this,D,void 0);S(this,E,void 0);w(this,"transformSimplePriceResponse",(t,a=[VsCurrencyType.USD])=>{let n={};return Object.keys(t).forEach(r=>{let o=t[r];n[r]={},a.forEach(i=>{n[r]={[i]:{price:o?.[i],change24:o?.[`${i}_24h_change`],vol24:o?.[`${i}_24h_vol`],marketCap:o?.[`${i}_market_cap`]}};});}),n});B(this,D,t),B(this,E,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${t?`${ne(t)}-${a.toString()}`:`${a.toString()}`}`;if(n=g(this,D)?.get?.(o),n)return n;try{n=await ae(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return g(this,D)?.set?.(o,n),n}async getPricesByAddresses(t,a,n=VsCurrencyType.USD){let r,i=`getPricesWithMarketDataByAddresses-${`${ne(t)}-${a}-${n}`}`;if(r=g(this,D)?.get?.(i),r)return r;try{r=await ae(l=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:n,useCoingeckoProxy:l}));}catch{r=void 0;}return g(this,D)?.set?.(i,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:n=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?se(g(this,E)).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(Se,{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:i=!1,useCoingeckoProxy:l=!1,shouldThrow:s=!0}){if(l){let p=await se(g(this,E)).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(i)}});return this.transformSimplePriceResponse(p,a)}return simplePrice(Se,{coinIds:t,currencies:a,marketCap:n,vol24:r,change24:o,lastUpdated:i,shouldThrow:s})}};D=new WeakMap,E=new WeakMap;var Ht="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Xt="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Re=object({date:string(),usd:record(number())});new Zodios(Ht,[{method:"get",path:"",alias:"getExchangeRates",response:Re}]);new Zodios(Xt,[{method:"get",path:"",alias:"getExchangeRates",response:Re}]);var De=e=>Object.keys(e).includes("unlockedUnstaked"),we=e=>Object.keys(e).includes("locked");function Y(e){let t=Object.values(e).reduce(function(a,n){let r=n.reduce(function(o,i){let l=Number(i.amount);return o+l},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:i})=>{let l=t.decimals,s={},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 x=p[h];if(!x||!x.length){s[h]=0;continue}x.forEach(v=>{let f=(s[h]??0)+Number(v.amount);s[h]=f;});}let m=new TokenUnit(s.unlockedUnstaked?s.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new TokenUnit(Y(e),t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:c.toSubUnit(),balanceInCurrency:u,balanceDisplayValue:c.toDisplay(),balanceCurrencyDisplayValue:u?.toFixed(2),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:y(l,s.lockedStaked),lockedStakeable:y(l,s.lockedStakeable),lockedPlatform:y(l,s.lockedPlatform),atomicMemoryLocked:y(l,s.atomicMemoryLocked),atomicMemoryUnlocked:y(l,s.atomicMemoryUnlocked),unlockedUnstaked:y(l,s.unlockedUnstaked),unlockedStaked:y(l,s.unlockedStaked),pendingStaked:y(l,s.pendingStaked)},marketCap:n,vol24:r,change24:o,coingeckoId:i}};var Ue=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:o,coingeckoId:i})=>{let l=t.decimals,s={},p={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let h in p){let x=p[h];if(!x||!x.length){s[h]=0;continue}x.forEach(v=>{let f=(s[h]??0)+Number(v.amount);s[h]=f;});}let m=new TokenUnit(s.unlocked?s.unlocked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new TokenUnit(Y(e),t.decimals,t.symbol),u=a!==void 0?c.mul(a):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:a,balance:c.toSubUnit(),balanceInCurrency:u?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:c.toDisplay(),balanceCurrencyDisplayValue:u?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{unlocked:y(l,s.unlocked),locked:y(l,s.locked),atomicMemoryUnlocked:y(l,s.atomicMemoryUnlocked),atomicMemoryLocked:y(l,s.atomicMemoryLocked)},marketCap:n,vol24:r,change24:o}};var _e=async({addresses:e,currency:t,network:a,glacierService:n,tokenService:r})=>{if(!n.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),l=e[0]??"",s=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,c=await n.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(T=>T.balances),u=p?await r.getSimplePrice({coinIds:[p],currencies:[i]}):{},h=u?.[p??""]?.[i]?.price??void 0,x=u?.[p??""]?.[i]?.marketCap??void 0,v=u?.[p??""]?.[i]?.vol24??void 0,A=u?.[p??""]?.[i]?.change24??void 0,f;return De(c)?(f=Ee({balance:c,networkToken:s,priceInCurrency:h,marketCap:x,vol24:v,change24:A,coingeckoId:p??""}),{[l]:{[s.symbol]:f}}):we(c)?(f=Ue({balance:c,networkToken:s,priceInCurrency:h,marketCap:x,vol24:v,change24:A,coingeckoId:p??""}),{[l]:{[s.symbol]:f}}):Promise.reject("Incorrect type balance was returned from glacier")};function Le({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,n=Wt.createHash("sha256").update(a).digest("base64");return "avax:"+Ot(n).substring(0,32)}var Ot=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Ge=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 $t=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")])]),Fe=e=>$t.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,i=Buffer.from(r,"utf-8").toString("hex"),l={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:o},s={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:s,signingData:l});return "error"in p?{error:p.error}:"signedData"in p?{result:p.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Jt=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()}),Oe=e=>Jt.safeParse(e);var ie=({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 zt=e=>e.type===TxType.AddPermissionlessDelegator,Kt=e=>e.type===TxType.AddPermissionlessValidator,Yt=e=>e.type===TxType.Export,Zt=e=>e.type===TxType.Import,ea=e=>e.type===TxType.Base,ta=e=>e.type===TxType.AddSubnetValidator,aa=e=>e.type===TxType.CreateChain,na=e=>e.type===TxType.CreateSubnet,ra=e=>e.type===TxType.RemoveSubnetValidator,Ke=e=>zt(e)||Kt(e)||ta(e)||ra(e),Ye=e=>Yt(e)||Zt(e),Ze=e=>ea(e),et=e=>aa(e),tt=e=>na(e);var oa=process.env.GLACIER_API_KEY,nt=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:i,externalIndices:l,internalIndices:s,utxos:p}=r.data,m=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(o),c=t.isTestnet??!1,u=ie({isTestnet:c}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.invalidRequest("No active account found")};let x=Je({utxoHexes:p,vm:m}),v=x.length?x:await Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:c,url:n,token:oa}),A;if(i==="C")A=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:v,fromAddress:h});else {let lt=utils.unpackWithManager(m,d),$=e.context?.xpubXP;if(!$||typeof $!="string")return {error:rpcErrors.invalidParams("Request should have xpubXP in context")};let pt=await at({indices:l??[],chainAlias:i,isChange:!1,isTestnet:c,xpubXP:$}),mt=await at({indices:s??[],chainAlias:i,isChange:!0,isTestnet:c,xpubXP:$}),dt=[...new Set([h,...pt,...mt])].map(ut=>utils.parse(ut)[2]);A=await Avalanche.createAvalancheUnsignedTx({tx:lt,utxos:v,provider:u,fromAddressBytes:dt});}let f=await Avalanche.parseAvalancheTx(A,u,h),T=Qe(f),ot=ze(f);if(f.type==="unknown"||T===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let it={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(A.toJSON()),data:f,vm:m},ct={title:ot,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},transactionDetails:Ye(T)?T:void 0,stakingDetails:Ke(T)?T:void 0,chainDetails:Ze(T)?T:void 0,blockchainDetails:et(T)?T:void 0,subnetDetails:tt(T)?T:void 0,networkFeeSelector:!1},Z=await a.requestApproval({request:e,displayData:ct,signingData:it});return "error"in Z?{error:Z.error}:{result:await ia(u,Z,m)}}catch(o){return console.error(o),{error:rpcErrors.internal("Unable to create transaction")}}},ia=async(e,t,a)=>{if("txHash"in t)return t.txHash;let{txID:n}=await e.issueTxHex(t.signedData,a);return n},at=async({indices:e,chainAlias:t,isChange:a,isTestnet:n,xpubXP:r})=>{if(a&&t!=="X")return [];let o=ie({isTestnet:n});return e.map(i=>Avalanche.getAddressFromXpub(r,i,o,t,a))};var V,W,O,_,st=class{constructor({approvalController:t,environment:a}){S(this,V,void 0);S(this,W,void 0);S(this,O,void 0);S(this,_,void 0);let{glacierApiUrl:n,proxyApiUrl:r}=Pe(a);B(this,V,new K({glacierApiUrl:n})),B(this,W,r),B(this,O,n),B(this,_,t);}getAddress({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r}){return Ge({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r})}getBalances({addresses:t,network:a,storage:n,currency:r}){let o=new G({storage:n,proxyApiUrl:g(this,W)});return _e({addresses:t,currency:r,network:a,glacierService:g(this,V),tokenService:o})}getManifest(){let t=parseManifest(pe);return t.success?t.data:void 0}getNetworkFee(t){return me()}getTransactionHistory({network:t,address:a,nextPageToken:n,offset:r}){return ve({network:t,address:a,nextPageToken:n,offset:r,glacierService:g(this,V)})}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,_)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return nt({request:t,network:a,approvalController:g(this,_),glacierApiUrl:g(this,O)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return Le({blockchainId:t,isTestnet:a})}};V=new WeakMap,W=new WeakMap,O=new WeakMap,_=new WeakMap;var Vr=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,_r=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
13
+ var Pt=Object.defineProperty;var Ct=(e,t,a)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var N=(e,t,a)=>(Ct(e,typeof t!="symbol"?t+"":t,a),a),Re=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var y=(e,t,a)=>(Re(e,t,"read from private field"),a?a.call(e):t.get(e)),R=(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,n)=>(Re(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var De={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 Ie(){return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0}}var Ee=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,Ue=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function ae(e,t,a="tx"){return `${e}/${a}/${t}`}function M({amount:e,decimals:t}){return e===void 0?new I(0):new I(e/10**t)}function Ve({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(c=>c.addresses)||[]),l=new Set(e.emittedUtxos.flatMap(c=>c.addresses)||[]),s=Bt({tx:e,isTestnet:o,networkToken:a,froms:i}),p=Rt({tx:e,isTestnet:o,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:[...l.values()].join(","),isSender:d,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:s.toString()}],gasUsed:p.toString(),explorerLink:ae(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function Bt({tx:e,isTestnet:t,networkToken:a,froms:n}){let r=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",i=e.emittedUtxos.filter(c=>c.asset.assetId===$(!!t)&&!c.addresses.some(u=>n.has(u))).reduce((c,u)=>c.add(u.asset.amount),new I(0)),l=e.value.find(c=>c.assetId===$(!!t))?.amount,s=i.gt(new I(0))?i:l?new I(l):new I(0)??new I(0),p=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(c=>c.asset.assetId===$(!!t)&&(e.txType==="ImportTx"&&c.consumedOnChainId===p||e.txType==="ExportTx"&&c.consumedOnChainId!==p)).reduce((c,u)=>c.add(u.amount),new I(0)),d=o?s:r?m:e.amountStaked.length===0?Me(e.value,!!t):Me(e.amountStaked,!!t);return M({amount:d?.toNumber(),decimals:a.decimals})}function Rt({tx:e,isTestnet:t,networkToken:a}){let n=e.amountBurned?.filter(r=>r.assetId===$(!!t)).reduce((r,o)=>r.add(o.amount),new I(0));return M({amount:n?.toNumber(),decimals:a.decimals})}function Me(e,t){return e.filter(a=>a.assetId===$(t)).reduce((a,n)=>a.add(n.amount),new I(0))}function $(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function _e({tx:e,address:t,networkToken:a,chainId:n,explorerUrl:r,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(c=>c.addresses)||[]),l=new Set(e.emittedUtxos.flatMap(c=>c.addresses)||[]),s=It({tx:e,isTestnet:o,networkToken:a}),p=wt({isTestnet:o,tx:e,totalAmountCreated:s,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:[...l.values()].join(","),isSender:d,timestamp:e.timestamp*1e3,tokens:[{decimal:a.decimals.toString(),name:a.name,symbol:a.symbol,type:TokenType.NATIVE,amount:s.toString()}],gasUsed:p.toString(),explorerLink:ae(r??"",e.txHash,"tx"),txType:e.txType,chainId:n.toString()}}function It({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(s=>s.asset.assetId===Te(!!t)&&(e.txType==="ImportTx"&&s.consumedOnChainId===r||e.txType==="ExportTx"&&s.consumedOnChainId!==r)).reduce((s,p)=>s.add(p.asset.amount),new I(0)),i=e.amountCreated.filter(s=>s.assetId===Te(!!t)).reduce((s,p)=>s.add(p.amount),new I(0));return M({amount:(n?o:i).toNumber(),decimals:a.decimals})}function wt({isTestnet:e,tx:t,totalAmountCreated:a,networkToken:n}){let o=t.amountUnlocked.filter(i=>i.assetId===Te(!!e)).reduce((i,l)=>i.add(l.amount),new I(0)).minus(a);return M({amount:o.toNumber(),decimals:n.decimals})}function Te(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Ge=async({address:e,nextPageToken:t,offset:a,network:n,glacierService:r})=>{let{isTestnet:o,networkToken:i,explorerUrl:l,chainId:s}=n;if(!r.isHealthy())return {transactions:[],nextPageToken:""};let m=await r.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Et(e),network:o?Network.FUJI:Network.MAINNET,pageSize:a,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return Ee(m)&&(d=m.transactions.map(c=>Ve({tx:c,isTestnet:o,address:e,networkToken:i,explorerUrl:l,chainId:s}))),Ue(m)&&(d=m.transactions.map(c=>_e({tx:c,isTestnet:o,address:e,networkToken:i,explorerUrl:l,chainId:s}))),{transactions:d,nextPageToken:m.nextPageToken}},Et=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Ut={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Mt={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Fe=e=>{switch(e){case Environment.PRODUCTION:return Ut;case Environment.DEV:return Mt}};var se=class extends Error{constructor(){super(...arguments);N(this,"message","Glacier is unhealthy. Try again later.");}},oe=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 se&&this.setGlacierToUnhealthy(),a}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(a){throw a instanceof se&&this.setGlacierToUnhealthy(),a}}};var je=async({operation:e,isSuccess:t,maxRetries:a=10,backoffPolicy:n=J.exponential()})=>{let r=0,o=0,i;for(;o<a;){o>0&&await _t(r);try{let s=await e(o);if(t(s))return s}catch(s){i=s;}r=n(o),o++;}let l=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(l)},J=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return a=>t*1e3}static constantMs(t){return a=>t}};function _t(e){return new Promise(t=>setTimeout(t,e))}var ke=e=>je({operation:t=>e(t>0),maxRetries:2,backoffPolicy:J.constant(1),isSuccess:t=>t?.status?.error_code!==429});function We(e){let t,a=0;for(t=0;t<e.length;t++)a+=e.charCodeAt(t)*(t+1);return a}function ve(e){let t,a=0;for(t=0;t<e.length;t++){let n=We(e[t]??"");a=a+65027/n;}return (""+a).slice(0,16)}var Pe=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 Oe=getBasicCoingeckoHttp(),w,V,z=class{constructor({storage:t,proxyApiUrl:a}){R(this,w,void 0);R(this,V,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(i=>{n[r]={[i]:{price:o?.[i],change24:o?.[`${i}_24h_change`],vol24:o?.[`${i}_24h_vol`],marketCap:o?.[`${i}_market_cap`]}};});}),n});D(this,w,t),D(this,V,a);}async getSimplePrice({coinIds:t=[],currencies:a=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${t?`${ve(t)}-${a.toString()}`:`${a.toString()}`}`;if(n=y(this,w)?.get?.(o),n)return n;try{n=await ke(i=>this.simplePrice({coinIds:t,currencies:a,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return y(this,w)?.set?.(o,n),n}async getPricesByAddresses(t,a,n=VsCurrencyType.USD){let r,i=`getPricesWithMarketDataByAddresses-${`${ve(t)}-${a}-${n}`}`;if(r=y(this,w)?.get?.(i),r)return r;try{r=await ke(l=>this.fetchPricesByAddresses({assetPlatformId:a,tokenAddresses:t,currency:n,useCoingeckoProxy:l}));}catch{r=void 0;}return y(this,w)?.set?.(i,r),r}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:a,currency:n=VsCurrencyType.USD,useCoingeckoProxy:r=!1}){return r?Pe(y(this,V)).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(Oe,{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:i=!1,useCoingeckoProxy:l=!1,shouldThrow:s=!0}){if(l){let p=await Pe(y(this,V)).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(i)}});return this.transformSimplePriceResponse(p,a)}return simplePrice(Oe,{coinIds:t,currencies:a,marketCap:n,vol24:r,change24:o,lastUpdated:i,shouldThrow:s})}};w=new WeakMap,V=new WeakMap;var Jt="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Qt="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",$e=object({date:string(),usd:record(number())});new Zodios(Jt,[{method:"get",path:"",alias:"getExchangeRates",response:$e}]);new Zodios(Qt,[{method:"get",path:"",alias:"getExchangeRates",response:$e}]);var Je=e=>Object.keys(e).includes("unlockedUnstaked"),Qe=e=>Object.keys(e).includes("locked");function ie(e){let t=Object.values(e).reduce(function(a,n){let r=n.reduce(function(o,i){let l=Number(i.amount);return o+l},0);return a+r},0);return BigInt(t)}function T(e,t){return t===void 0?0:t/10**e}var Ke=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:o,coingeckoId:i})=>{let l=t.decimals,s={},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 g=p[h];if(!g||!g.length){s[h]=0;continue}g.forEach(A=>{let x=(s[h]??0)+Number(A.amount);s[h]=x;});}let m=new TokenUnit(s.unlockedUnstaked?s.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new TokenUnit(ie(e),t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:a,balance:c.toSubUnit(),balanceInCurrency:u,balanceDisplayValue:c.toDisplay(),balanceCurrencyDisplayValue:u?.toFixed(2),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:T(l,s.lockedStaked),lockedStakeable:T(l,s.lockedStakeable),lockedPlatform:T(l,s.lockedPlatform),atomicMemoryLocked:T(l,s.atomicMemoryLocked),atomicMemoryUnlocked:T(l,s.atomicMemoryUnlocked),unlockedUnstaked:T(l,s.unlockedUnstaked),unlockedStaked:T(l,s.unlockedStaked),pendingStaked:T(l,s.pendingStaked)},marketCap:n,vol24:r,change24:o,coingeckoId:i}};var Ze=({balance:e,networkToken:t,priceInCurrency:a,marketCap:n,vol24:r,change24:o,coingeckoId:i})=>{let l=t.decimals,s={},p={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let h in p){let g=p[h];if(!g||!g.length){s[h]=0;continue}g.forEach(A=>{let x=(s[h]??0)+Number(A.amount);s[h]=x;});}let m=new TokenUnit(s.unlocked?s.unlocked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new TokenUnit(ie(e),t.decimals,t.symbol),u=a!==void 0?c.mul(a):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:a,balance:c.toSubUnit(),balanceInCurrency:u?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:c.toDisplay(),balanceCurrencyDisplayValue:u?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{unlocked:T(l,s.unlocked),locked:T(l,s.locked),atomicMemoryUnlocked:T(l,s.atomicMemoryUnlocked),atomicMemoryLocked:T(l,s.atomicMemoryLocked)},marketCap:n,vol24:r,change24:o}};var at=async({addresses:e,currency:t,network:a,glacierService:n,tokenService:r})=>{if(!n.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),l=e[0]??"",s=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,c=await n.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(f=>f.balances),u=p?await r.getSimplePrice({coinIds:[p],currencies:[i]}):{},h=u?.[p??""]?.[i]?.price??void 0,g=u?.[p??""]?.[i]?.marketCap??void 0,A=u?.[p??""]?.[i]?.vol24??void 0,k=u?.[p??""]?.[i]?.change24??void 0,x;return Je(c)?(x=Ke({balance:c,networkToken:s,priceInCurrency:h,marketCap:g,vol24:A,change24:k,coingeckoId:p??""}),{[l]:{[s.symbol]:x}}):Qe(c)?(x=Ze({balance:c,networkToken:s,priceInCurrency:h,marketCap:g,vol24:A,change24:k,coingeckoId:p??""}),{[l]:{[s.symbol]:x}}):Promise.reject("Incorrect type balance was returned from glacier")};function nt({blockchainId:e,isTestnet:t}){let a=t?"fuji"+e:e,n=Zt.createHash("sha256").update(a).digest("base64");return "avax:"+ea(n).substring(0,32)}var ea=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var ot=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 ta=z$1.union([z$1.tuple([z$1.string()]).describe("message to sign"),z$1.tuple([z$1.string().describe("message to sign"),z$1.number().nonnegative().describe("account index")])]),it=e=>ta.safeParse(e);var lt=async({request:e,network:t,approvalController:a})=>{let n=it(e.params);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams("Params are invalid")};let[r,o]=n.data,i=Buffer.from(r,"utf-8").toString("hex"),l={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:o},s={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:s,signingData:l});return "error"in p?{error:p.error}:"signedData"in p?{result:p.signedData}:{error:rpcErrors.internal("No signed data returned")}};var na=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=>na.safeParse(e);var Y=({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var ut=({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 ce=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 ht=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 sa=e=>e.type===TxType.AddPermissionlessDelegator,oa=e=>e.type===TxType.AddPermissionlessValidator,ia=e=>e.type===TxType.Export,ca=e=>e.type===TxType.Import,la=e=>e.type===TxType.Base,pa=e=>e.type===TxType.AddSubnetValidator,ma=e=>e.type===TxType.CreateChain,da=e=>e.type===TxType.CreateSubnet,ua=e=>e.type===TxType.RemoveSubnetValidator,le=e=>sa(e)||oa(e)||pa(e)||ua(e),pe=e=>ia(e)||ca(e),me=e=>la(e),de=e=>ma(e),ue=e=>da(e);var ga=process.env.GLACIER_API_KEY,yt=async({request:e,network:t,approvalController:a,glacierApiUrl:n})=>{let r=pt(e.params);if(!r.success)return {error:rpcErrors.invalidParams("Params are invalid")};try{let{transactionHex:o,chainAlias:i,externalIndices:l,internalIndices:s,utxos:p}=r.data,m=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(o),c=t.isTestnet??!1,u=Y({isTestnet:c}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.invalidRequest("No active account found")};let g=ut({utxoHexes:p,vm:m}),A=g.length?g:await Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:c,url:n,token:ga}),k;if(i==="C")k=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:A,fromAddress:h});else {let q=utils.unpackWithManager(m,d),C=e.context?.xpubXP;if(!C||typeof C!="string")return {error:rpcErrors.invalidParams("Request should have xpubXP in context")};let ye=await gt({indices:l??[],chainAlias:i,isChange:!1,isTestnet:c,xpubXP:C}),xe=await gt({indices:s??[],chainAlias:i,isChange:!0,isTestnet:c,xpubXP:C}),vt=[...new Set([h,...ye,...xe])].map(At=>utils.parse(At)[2]);k=await Avalanche.createAvalancheUnsignedTx({tx:q,utxos:A,provider:u,fromAddressBytes:vt});}let x=await Avalanche.parseAvalancheTx(k,u,h),f=ce(x),j=ht(x);if(x.type==="unknown"||f===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let v={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(k.toJSON()),data:x,vm:m},ge={title:j,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},transactionDetails:pe(f)?f:void 0,stakingDetails:le(f)?f:void 0,chainDetails:me(f)?f:void 0,blockchainDetails:de(f)?f:void 0,subnetDetails:ue(f)?f:void 0,networkFeeSelector:!1},W=await a.requestApproval({request:e,displayData:ge,signingData:v});return "error"in W?{error:W.error}:{result:await ya(u,W,m)}}catch(o){return console.error(o),{error:rpcErrors.internal("Unable to create transaction")}}},ya=async(e,t,a)=>{if("txHash"in t)return t.txHash;let{txID:n}=await e.issueTxHex(t.signedData,a);return n},gt=async({indices:e,chainAlias:t,isChange:a,isTestnet:n,xpubXP:r})=>{if(a&&t!=="X")return [];let o=Y({isTestnet:n});return e.map(i=>Avalanche.getAddressFromXpub(r,i,o,t,a))};var xa=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),xt=e=>xa.safeParse(e);var ka=process.env.GLACIER_API_KEY,Tt=async({request:e,network:t,approvalController:a,glacierApiUrl:n})=>{let r=xt(e.params);if(!r.success)return console.error("invalid params",r.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:o,chainAlias:i,from:l}=r.data,s=Avalanche.getVmByChainAlias(i),p=utils.hexToBuffer(o),m=t.isTestnet??!1,d=Y({isTestnet:m}),c=utils.unpackWithManager(s,p),u=await Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:m,url:n,token:ka}),h;try{let C=utils.getManagerForVM(s).unpack(p,avaxSerial.SignedTx),ye=await Avalanche.createAvalancheUnsignedTx({tx:c,utxos:u,provider:d,credentials:C.getCredentials()});h=c.getSigIndices().map((xe,Be)=>new Credential(Avalanche.populateCredential(xe,{unsignedTx:ye,credentialIndex:Be})));}catch{h=c.getSigIndices().map(C=>new Credential(Avalanche.populateCredential(C)));}let g=await Avalanche.createAvalancheUnsignedTx({tx:c,provider:d,credentials:h,utxos:u}),A=utils.addressesFromBytes([utils.parse(l)[2]])[0];if(!A)return {error:rpcErrors.invalidRequest("Missing signer address")};let k=g.getSigIndicesForAddress(A);if(!k)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let x=g.getSigIndices();if(!k.some(([q,C])=>x[q]?.includes(C)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let j=await Avalanche.parseAvalancheTx(g,d,l),v=ce(j);if(j.type==="unknown"||v===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let ge={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:j,vm:s,unsignedTxJson:JSON.stringify(g.toJSON()),ownSignatureIndices:k},W={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},transactionDetails:pe(v)?v:void 0,stakingDetails:le(v)?v:void 0,chainDetails:me(v)?v:void 0,blockchainDetails:de(v)?v:void 0,subnetDetails:ue(v)?v:void 0},O=await a.requestApproval({request:e,displayData:W,signingData:ge});return "error"in O?{error:O.error}:"signedData"in O?{result:O.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var X,te,F,U,kt=class{constructor({approvalController:t,environment:a}){R(this,X,void 0);R(this,te,void 0);R(this,F,void 0);R(this,U,void 0);let{glacierApiUrl:n,proxyApiUrl:r}=Fe(a);D(this,X,new oe({glacierApiUrl:n})),D(this,te,r),D(this,F,n),D(this,U,t);}getAddress({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r}){return ot({accountIndex:t,xpubXP:a,isTestnet:n,walletType:r})}getBalances({addresses:t,network:a,storage:n,currency:r}){let o=new z({storage:n,proxyApiUrl:y(this,te)});return at({addresses:t,currency:r,network:a,glacierService:y(this,X),tokenService:o})}getManifest(){let t=parseManifest(De);return t.success?t.data:void 0}getNetworkFee(t){return Ie()}getTransactionHistory({network:t,address:a,nextPageToken:n,offset:r}){return Ge({network:t,address:a,nextPageToken:n,offset:r,glacierService:y(this,X)})}getTokens(t){return Promise.resolve([])}async onRpcRequest(t,a){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return lt({request:t,network:a,approvalController:y(this,U)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return Tt({request:t,network:a,approvalController:y(this,U),glacierApiUrl:y(this,F)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return yt({request:t,network:a,approvalController:y(this,U),glacierApiUrl:y(this,F)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:a}){return nt({blockchainId:t,isTestnet:a})}};X=new WeakMap,te=new WeakMap,F=new WeakMap,U=new WeakMap;var ss=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,os=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
14
14
 
15
- export { st as AvalancheModule, zt as isAddPermissionlessDelegatorTx, Kt as isAddPermissionlessValidatorTx, ta as isAddSubnetValidatorTx, ea as isBaseTx, et as isBlockchainDetails, Ze as isChainDetails, aa as isCreateChainTx, na as isCreateSubnetTx, Ye as isExportImportTxDetails, Yt as isExportTx, Zt as isImportTx, ra as isRemoveSubnetValidatorTx, Ke as isStakingDetails, tt as isSubnetDetails, _r as isTokenWithBalanceAVM, Vr as isTokenWithBalancePVM };
15
+ export { kt as AvalancheModule, sa as isAddPermissionlessDelegatorTx, oa as isAddPermissionlessValidatorTx, pa as isAddSubnetValidatorTx, la as isBaseTx, de as isBlockchainDetails, me as isChainDetails, ma as isCreateChainTx, da as isCreateSubnetTx, pe as isExportImportTxDetails, ia as isExportTx, ca as isImportTx, ua as isRemoveSubnetValidatorTx, le as isStakingDetails, ue as isSubnetDetails, os as isTokenWithBalanceAVM, ss as isTokenWithBalancePVM };
16
16
  //# sourceMappingURL=out.js.map
17
17
  //# sourceMappingURL=index.js.map