@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.cjs CHANGED
@@ -3,38 +3,38 @@
3
3
  var vmModuleTypes = require('@avalabs/vm-module-types');
4
4
  var rpcErrors = require('@metamask/rpc-errors');
5
5
  var glacierSdk = require('@avalabs/glacier-sdk');
6
- var R = require('big.js');
6
+ var I = require('big.js');
7
7
  var coreWalletsSdk = require('@avalabs/core-wallets-sdk');
8
8
  var coreCoingeckoSdk = require('@avalabs/core-coingecko-sdk');
9
9
  var core = require('@zodios/core');
10
10
  var zod = require('zod');
11
11
  var coreUtilsSdk = require('@avalabs/core-utils-sdk');
12
- var Wt = require('crypto');
12
+ var Zt = require('crypto');
13
13
  var avalanchejs = require('@avalabs/avalanchejs');
14
14
 
15
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
16
 
17
- var R__default = /*#__PURE__*/_interopDefault(R);
18
- var Wt__default = /*#__PURE__*/_interopDefault(Wt);
17
+ var I__default = /*#__PURE__*/_interopDefault(I);
18
+ var Zt__default = /*#__PURE__*/_interopDefault(Zt);
19
19
 
20
- 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===glacierSdk.PrimaryNetworkChainName.P_CHAIN,ge=e=>e.chainInfo.chainName===glacierSdk.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__default.default(0):new R__default.default(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:vmModuleTypes.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__default.default(0)),l=e.value.find(c=>c.assetId===L(!!t))?.amount,s=i.gt(new R__default.default(0))?i:l?new R__default.default(l):new R__default.default(0)??new R__default.default(0),p=t?coreWalletsSdk.Avalanche.FujiContext.pBlockchainID:coreWalletsSdk.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__default.default(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__default.default(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__default.default(0))}function L(e){return e?coreWalletsSdk.Avalanche.FujiContext.avaxAssetID:coreWalletsSdk.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:vmModuleTypes.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?coreWalletsSdk.Avalanche.FujiContext.xBlockchainID:coreWalletsSdk.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__default.default(0)),i=e.amountCreated.filter(s=>s.assetId===te(!!t)).reduce((s,p)=>s.add(p.amount),new R__default.default(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__default.default(0)).minus(a);return I({amount:o.toNumber(),decimals:n.decimals})}function te(e){return e?coreWalletsSdk.Avalanche.FujiContext.avaxAssetID:coreWalletsSdk.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?glacierSdk.Network.FUJI:glacierSdk.Network.MAINNET,pageSize:a,pageToken:t,sortOrder:glacierSdk.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-")?glacierSdk.BlockchainId.P_CHAIN:glacierSdk.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 vmModuleTypes.Environment.PRODUCTION:return Ct;case vmModuleTypes.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 glacierSdk.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 core.Zodios(`${e}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:zod.string()},{name:"vs_currencies",type:"Query",schema:zod.string()},{name:"include_market_cap",type:"Query",schema:zod.string().optional()},{name:"include_24hr_vol",type:"Query",schema:zod.string().optional()},{name:"include_24hr_change",type:"Query",schema:zod.string().optional()},{name:"include_last_updated_at",type:"Query",schema:zod.string().optional()}],alias:"simplePrice",response:vmModuleTypes.RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:zod.string()},{name:"contract_addresses",type:"Query",schema:zod.string().array()},{name:"vs_currencies",type:"Query",schema:zod.string().array()},{name:"include_market_cap",type:"Query",schema:zod.boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:zod.boolean().optional()},{name:"include_24hr_change",type:"Query",schema:zod.boolean().optional()}],alias:"simplePriceByContractAddresses",response:vmModuleTypes.SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var Se=coreCoingeckoSdk.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=[coreCoingeckoSdk.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=[coreCoingeckoSdk.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=coreCoingeckoSdk.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=coreCoingeckoSdk.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}}):coreCoingeckoSdk.simpleTokenPrice(Se,{assetPlatformId:t,tokenAddresses:a,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[coreCoingeckoSdk.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 coreCoingeckoSdk.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=zod.object({date:zod.string(),usd:zod.record(zod.number())});new core.Zodios(Ht,[{method:"get",path:"",alias:"getExchangeRates",response:Re}]);new core.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 coreUtilsSdk.TokenUnit(s.unlockedUnstaked?s.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new coreUtilsSdk.TokenUnit(Y(e),t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:vmModuleTypes.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 coreUtilsSdk.TokenUnit(s.unlocked?s.unlocked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new coreUtilsSdk.TokenUnit(Y(e),t.decimals,t.symbol),u=a!==void 0?c.mul(a):void 0;return {...t,coingeckoId:i,type:vmModuleTypes.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===vmModuleTypes.NetworkVMType.PVM?glacierSdk.BlockchainId.P_CHAIN:glacierSdk.BlockchainId.X_CHAIN,d=a.isTestnet?glacierSdk.Network.FUJI:glacierSdk.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__default.default.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.rpcErrors.invalidParams("xpubXP is required to get address");let r=t?coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultFujiProvider():coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),o;switch(n){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:{o=coreWalletsSdk.Avalanche.getAddressPublicKeyFromXpub(a,e);break}case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{o=Buffer.from(a,"hex");break}default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported wallet type: ${n}`)}return {[vmModuleTypes.NetworkVMType.AVM]:r.getAddress(o,"X"),[vmModuleTypes.NetworkVMType.PVM]:r.getAddress(o,"P")}};var $t=zod.z.union([zod.z.tuple([zod.z.string()]).describe("message to sign"),zod.z.tuple([zod.z.string().describe("message to sign"),zod.z.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.rpcErrors.invalidParams("Params are invalid")};let[r,o]=n.data,i=Buffer.from(r,"utf-8").toString("hex"),l={type:vmModuleTypes.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.rpcErrors.internal("No signed data returned")}};var Jt=zod.z.object({transactionHex:zod.z.string(),chainAlias:zod.z.enum(["X","P","C"]),externalIndices:zod.z.number().array().optional(),internalIndices:zod.z.number().array().optional(),utxos:zod.z.string().array().optional()}),Oe=e=>Jt.safeParse(e);var ie=({isTestnet:e})=>e?coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultFujiProvider():coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var Je=({utxoHexes:e=[],vm:t})=>{try{let a=avalanchejs.utils.getManagerForVM(t).getDefaultCodec();return e.map(n=>{let r=avalanchejs.utils.hexToBuffer(n);return avalanchejs.Utxo.fromBytes(r,a)[0]})}catch{return []}};var Qe=e=>{switch(e.type){case vmModuleTypes.TxType.AddPermissionlessDelegator:case vmModuleTypes.TxType.AddSubnetValidator:case vmModuleTypes.TxType.CreateChain:case vmModuleTypes.TxType.CreateSubnet:case vmModuleTypes.TxType.RemoveSubnetValidator:case vmModuleTypes.TxType.AddPermissionlessValidator:return e;case vmModuleTypes.TxType.Export:return {...e,type:vmModuleTypes.TxType.Export,chain:e.chain,destination:e.destination};case vmModuleTypes.TxType.Import:return {...e,type:vmModuleTypes.TxType.Import,chain:e.chain,source:e.source};case vmModuleTypes.TxType.Base:return {...e,type:vmModuleTypes.TxType.Base,chain:e.chain};default:return}};var ze=e=>{switch(e.type){case vmModuleTypes.TxType.AddPermissionlessDelegator:return "Add Delegator";case vmModuleTypes.TxType.AddPermissionlessValidator:return "Add Validator";case vmModuleTypes.TxType.Export:return "Approve Export";case vmModuleTypes.TxType.Import:return "Approve Import";case vmModuleTypes.TxType.Base:return "Approve Transaction";case vmModuleTypes.TxType.AddSubnetValidator:return "Add Subnet Validator";case vmModuleTypes.TxType.CreateChain:return "Approve Create Chain";case vmModuleTypes.TxType.CreateSubnet:return "Approve Create Subnet";case vmModuleTypes.TxType.RemoveSubnetValidator:return "Remove Subnet Validator";default:return "Sign Message"}};var zt=e=>e.type===vmModuleTypes.TxType.AddPermissionlessDelegator,Kt=e=>e.type===vmModuleTypes.TxType.AddPermissionlessValidator,Yt=e=>e.type===vmModuleTypes.TxType.Export,Zt=e=>e.type===vmModuleTypes.TxType.Import,ea=e=>e.type===vmModuleTypes.TxType.Base,ta=e=>e.type===vmModuleTypes.TxType.AddSubnetValidator,aa=e=>e.type===vmModuleTypes.TxType.CreateChain,na=e=>e.type===vmModuleTypes.TxType.CreateSubnet,ra=e=>e.type===vmModuleTypes.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.rpcErrors.invalidParams("Params are invalid")};try{let{transactionHex:o,chainAlias:i,externalIndices:l,internalIndices:s,utxos:p}=r.data,m=coreWalletsSdk.Avalanche.getVmByChainAlias(i),d=avalanchejs.utils.hexToBuffer(o),c=t.isTestnet??!1,u=ie({isTestnet:c}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.rpcErrors.invalidRequest("No active account found")};let x=Je({utxoHexes:p,vm:m}),v=x.length?x:await coreWalletsSdk.Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:c,url:n,token:oa}),A;if(i==="C")A=await coreWalletsSdk.Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:v,fromAddress:h});else {let lt=avalanchejs.utils.unpackWithManager(m,d),$=e.context?.xpubXP;if(!$||typeof $!="string")return {error:rpcErrors.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=>avalanchejs.utils.parse(ut)[2]);A=await coreWalletsSdk.Avalanche.createAvalancheUnsignedTx({tx:lt,utxos:v,provider:u,fromAddressBytes:dt});}let f=await coreWalletsSdk.Avalanche.parseAvalancheTx(A,u,h),T=Qe(f),ot=ze(f);if(f.type==="unknown"||T===void 0)return {error:rpcErrors.rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let it={type:vmModuleTypes.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.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=>coreWalletsSdk.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=vmModuleTypes.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 vmModuleTypes.RpcMethod.AVALANCHE_SIGN_MESSAGE:return We({request:t,network:a,approvalController:g(this,_)});case vmModuleTypes.RpcMethod.AVALANCHE_SEND_TRANSACTION:return nt({request:t,network:a,approvalController:g(this,_),glacierApiUrl:g(this,O)});default:return {error:rpcErrors.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;
20
+ 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===glacierSdk.PrimaryNetworkChainName.P_CHAIN,Ue=e=>e.chainInfo.chainName===glacierSdk.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__default.default(0):new I__default.default(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:vmModuleTypes.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__default.default(0)),l=e.value.find(c=>c.assetId===$(!!t))?.amount,s=i.gt(new I__default.default(0))?i:l?new I__default.default(l):new I__default.default(0)??new I__default.default(0),p=t?coreWalletsSdk.Avalanche.FujiContext.pBlockchainID:coreWalletsSdk.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__default.default(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__default.default(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__default.default(0))}function $(e){return e?coreWalletsSdk.Avalanche.FujiContext.avaxAssetID:coreWalletsSdk.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:vmModuleTypes.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?coreWalletsSdk.Avalanche.FujiContext.xBlockchainID:coreWalletsSdk.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__default.default(0)),i=e.amountCreated.filter(s=>s.assetId===Te(!!t)).reduce((s,p)=>s.add(p.amount),new I__default.default(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__default.default(0)).minus(a);return M({amount:o.toNumber(),decimals:n.decimals})}function Te(e){return e?coreWalletsSdk.Avalanche.FujiContext.avaxAssetID:coreWalletsSdk.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?glacierSdk.Network.FUJI:glacierSdk.Network.MAINNET,pageSize:a,pageToken:t,sortOrder:glacierSdk.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-")?glacierSdk.BlockchainId.P_CHAIN:glacierSdk.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 vmModuleTypes.Environment.PRODUCTION:return Ut;case vmModuleTypes.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 glacierSdk.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 core.Zodios(`${e}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:zod.string()},{name:"vs_currencies",type:"Query",schema:zod.string()},{name:"include_market_cap",type:"Query",schema:zod.string().optional()},{name:"include_24hr_vol",type:"Query",schema:zod.string().optional()},{name:"include_24hr_change",type:"Query",schema:zod.string().optional()},{name:"include_last_updated_at",type:"Query",schema:zod.string().optional()}],alias:"simplePrice",response:vmModuleTypes.RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:zod.string()},{name:"contract_addresses",type:"Query",schema:zod.string().array()},{name:"vs_currencies",type:"Query",schema:zod.string().array()},{name:"include_market_cap",type:"Query",schema:zod.boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:zod.boolean().optional()},{name:"include_24hr_change",type:"Query",schema:zod.boolean().optional()}],alias:"simplePriceByContractAddresses",response:vmModuleTypes.SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var Oe=coreCoingeckoSdk.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=[coreCoingeckoSdk.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=[coreCoingeckoSdk.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=coreCoingeckoSdk.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=coreCoingeckoSdk.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}}):coreCoingeckoSdk.simpleTokenPrice(Oe,{assetPlatformId:t,tokenAddresses:a,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:a=[coreCoingeckoSdk.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 coreCoingeckoSdk.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=zod.object({date:zod.string(),usd:zod.record(zod.number())});new core.Zodios(Jt,[{method:"get",path:"",alias:"getExchangeRates",response:$e}]);new core.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 coreUtilsSdk.TokenUnit(s.unlockedUnstaked?s.unlockedUnstaked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new coreUtilsSdk.TokenUnit(ie(e),t.decimals,t.symbol),u=a?c.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:vmModuleTypes.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 coreUtilsSdk.TokenUnit(s.unlocked?s.unlocked:0n,t.decimals,t.symbol),d=a?m.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0,c=new coreUtilsSdk.TokenUnit(ie(e),t.decimals,t.symbol),u=a!==void 0?c.mul(a):void 0;return {...t,coingeckoId:i,type:vmModuleTypes.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===vmModuleTypes.NetworkVMType.PVM?glacierSdk.BlockchainId.P_CHAIN:glacierSdk.BlockchainId.X_CHAIN,d=a.isTestnet?glacierSdk.Network.FUJI:glacierSdk.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__default.default.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.rpcErrors.invalidParams("xpubXP is required to get address");let r=t?coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultFujiProvider():coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultMainnetProvider(),o;switch(n){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:{o=coreWalletsSdk.Avalanche.getAddressPublicKeyFromXpub(a,e);break}case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{o=Buffer.from(a,"hex");break}default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported wallet type: ${n}`)}return {[vmModuleTypes.NetworkVMType.AVM]:r.getAddress(o,"X"),[vmModuleTypes.NetworkVMType.PVM]:r.getAddress(o,"P")}};var ta=zod.z.union([zod.z.tuple([zod.z.string()]).describe("message to sign"),zod.z.tuple([zod.z.string().describe("message to sign"),zod.z.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.rpcErrors.invalidParams("Params are invalid")};let[r,o]=n.data,i=Buffer.from(r,"utf-8").toString("hex"),l={type:vmModuleTypes.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.rpcErrors.internal("No signed data returned")}};var na=zod.z.object({transactionHex:zod.z.string(),chainAlias:zod.z.enum(["X","P","C"]),externalIndices:zod.z.number().array().optional(),internalIndices:zod.z.number().array().optional(),utxos:zod.z.string().array().optional()}),pt=e=>na.safeParse(e);var Y=({isTestnet:e})=>e?coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultFujiProvider():coreWalletsSdk.Avalanche.JsonRpcProvider.getDefaultMainnetProvider();var ut=({utxoHexes:e=[],vm:t})=>{try{let a=avalanchejs.utils.getManagerForVM(t).getDefaultCodec();return e.map(n=>{let r=avalanchejs.utils.hexToBuffer(n);return avalanchejs.Utxo.fromBytes(r,a)[0]})}catch{return []}};var ce=e=>{switch(e.type){case vmModuleTypes.TxType.AddPermissionlessDelegator:case vmModuleTypes.TxType.AddSubnetValidator:case vmModuleTypes.TxType.CreateChain:case vmModuleTypes.TxType.CreateSubnet:case vmModuleTypes.TxType.RemoveSubnetValidator:case vmModuleTypes.TxType.AddPermissionlessValidator:return e;case vmModuleTypes.TxType.Export:return {...e,type:vmModuleTypes.TxType.Export,chain:e.chain,destination:e.destination};case vmModuleTypes.TxType.Import:return {...e,type:vmModuleTypes.TxType.Import,chain:e.chain,source:e.source};case vmModuleTypes.TxType.Base:return {...e,type:vmModuleTypes.TxType.Base,chain:e.chain};default:return}};var ht=e=>{switch(e.type){case vmModuleTypes.TxType.AddPermissionlessDelegator:return "Add Delegator";case vmModuleTypes.TxType.AddPermissionlessValidator:return "Add Validator";case vmModuleTypes.TxType.Export:return "Approve Export";case vmModuleTypes.TxType.Import:return "Approve Import";case vmModuleTypes.TxType.Base:return "Approve Transaction";case vmModuleTypes.TxType.AddSubnetValidator:return "Add Subnet Validator";case vmModuleTypes.TxType.CreateChain:return "Approve Create Chain";case vmModuleTypes.TxType.CreateSubnet:return "Approve Create Subnet";case vmModuleTypes.TxType.RemoveSubnetValidator:return "Remove Subnet Validator";default:return "Sign Message"}};var sa=e=>e.type===vmModuleTypes.TxType.AddPermissionlessDelegator,oa=e=>e.type===vmModuleTypes.TxType.AddPermissionlessValidator,ia=e=>e.type===vmModuleTypes.TxType.Export,ca=e=>e.type===vmModuleTypes.TxType.Import,la=e=>e.type===vmModuleTypes.TxType.Base,pa=e=>e.type===vmModuleTypes.TxType.AddSubnetValidator,ma=e=>e.type===vmModuleTypes.TxType.CreateChain,da=e=>e.type===vmModuleTypes.TxType.CreateSubnet,ua=e=>e.type===vmModuleTypes.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.rpcErrors.invalidParams("Params are invalid")};try{let{transactionHex:o,chainAlias:i,externalIndices:l,internalIndices:s,utxos:p}=r.data,m=coreWalletsSdk.Avalanche.getVmByChainAlias(i),d=avalanchejs.utils.hexToBuffer(o),c=t.isTestnet??!1,u=Y({isTestnet:c}),h=e.context?.currentAddress;if(!h||typeof h!="string")return {error:rpcErrors.rpcErrors.invalidRequest("No active account found")};let g=ut({utxoHexes:p,vm:m}),A=g.length?g:await coreWalletsSdk.Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:c,url:n,token:ga}),k;if(i==="C")k=await coreWalletsSdk.Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:A,fromAddress:h});else {let q=avalanchejs.utils.unpackWithManager(m,d),C=e.context?.xpubXP;if(!C||typeof C!="string")return {error:rpcErrors.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=>avalanchejs.utils.parse(At)[2]);k=await coreWalletsSdk.Avalanche.createAvalancheUnsignedTx({tx:q,utxos:A,provider:u,fromAddressBytes:vt});}let x=await coreWalletsSdk.Avalanche.parseAvalancheTx(k,u,h),f=ce(x),j=ht(x);if(x.type==="unknown"||f===void 0)return {error:rpcErrors.rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let v={type:vmModuleTypes.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.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=>coreWalletsSdk.Avalanche.getAddressFromXpub(r,i,o,t,a))};var xa=zod.z.object({from:zod.z.string().describe("Avalanche receiving address"),transactionHex:zod.z.string(),chainAlias:zod.z.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.rpcErrors.invalidParams("Params are invalid")};let{transactionHex:o,chainAlias:i,from:l}=r.data,s=coreWalletsSdk.Avalanche.getVmByChainAlias(i),p=avalanchejs.utils.hexToBuffer(o),m=t.isTestnet??!1,d=Y({isTestnet:m}),c=avalanchejs.utils.unpackWithManager(s,p),u=await coreWalletsSdk.Avalanche.getUtxosByTxFromGlacier({transactionHex:o,chainAlias:i,isTestnet:m,url:n,token:ka}),h;try{let C=avalanchejs.utils.getManagerForVM(s).unpack(p,avalanchejs.avaxSerial.SignedTx),ye=await coreWalletsSdk.Avalanche.createAvalancheUnsignedTx({tx:c,utxos:u,provider:d,credentials:C.getCredentials()});h=c.getSigIndices().map((xe,Be)=>new avalanchejs.Credential(coreWalletsSdk.Avalanche.populateCredential(xe,{unsignedTx:ye,credentialIndex:Be})));}catch{h=c.getSigIndices().map(C=>new avalanchejs.Credential(coreWalletsSdk.Avalanche.populateCredential(C)));}let g=await coreWalletsSdk.Avalanche.createAvalancheUnsignedTx({tx:c,provider:d,credentials:h,utxos:u}),A=avalanchejs.utils.addressesFromBytes([avalanchejs.utils.parse(l)[2]])[0];if(!A)return {error:rpcErrors.rpcErrors.invalidRequest("Missing signer address")};let k=g.getSigIndicesForAddress(A);if(!k)return {error:rpcErrors.rpcErrors.invalidRequest("This account has nothing to sign")};let x=g.getSigIndices();if(!k.some(([q,C])=>x[q]?.includes(C)))return {error:rpcErrors.rpcErrors.invalidRequest("This account has nothing to sign")};let j=await coreWalletsSdk.Avalanche.parseAvalancheTx(g,d,l),v=ce(j);if(j.type==="unknown"||v===void 0)return {error:rpcErrors.rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let ge={type:vmModuleTypes.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.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=vmModuleTypes.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 vmModuleTypes.RpcMethod.AVALANCHE_SIGN_MESSAGE:return lt({request:t,network:a,approvalController:y(this,U)});case vmModuleTypes.RpcMethod.AVALANCHE_SIGN_TRANSACTION:return Tt({request:t,network:a,approvalController:y(this,U),glacierApiUrl:y(this,F)});case vmModuleTypes.RpcMethod.AVALANCHE_SEND_TRANSACTION:return yt({request:t,network:a,approvalController:y(this,U),glacierApiUrl:y(this,F)});default:return {error:rpcErrors.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;
21
21
 
22
- exports.AvalancheModule = st;
23
- exports.isAddPermissionlessDelegatorTx = zt;
24
- exports.isAddPermissionlessValidatorTx = Kt;
25
- exports.isAddSubnetValidatorTx = ta;
26
- exports.isBaseTx = ea;
27
- exports.isBlockchainDetails = et;
28
- exports.isChainDetails = Ze;
29
- exports.isCreateChainTx = aa;
30
- exports.isCreateSubnetTx = na;
31
- exports.isExportImportTxDetails = Ye;
32
- exports.isExportTx = Yt;
33
- exports.isImportTx = Zt;
34
- exports.isRemoveSubnetValidatorTx = ra;
35
- exports.isStakingDetails = Ke;
36
- exports.isSubnetDetails = tt;
37
- exports.isTokenWithBalanceAVM = _r;
38
- exports.isTokenWithBalancePVM = Vr;
22
+ exports.AvalancheModule = kt;
23
+ exports.isAddPermissionlessDelegatorTx = sa;
24
+ exports.isAddPermissionlessValidatorTx = oa;
25
+ exports.isAddSubnetValidatorTx = pa;
26
+ exports.isBaseTx = la;
27
+ exports.isBlockchainDetails = de;
28
+ exports.isChainDetails = me;
29
+ exports.isCreateChainTx = ma;
30
+ exports.isCreateSubnetTx = da;
31
+ exports.isExportImportTxDetails = pe;
32
+ exports.isExportTx = ia;
33
+ exports.isImportTx = ca;
34
+ exports.isRemoveSubnetValidatorTx = ua;
35
+ exports.isStakingDetails = le;
36
+ exports.isSubnetDetails = ue;
37
+ exports.isTokenWithBalanceAVM = os;
38
+ exports.isTokenWithBalancePVM = ss;
39
39
  //# sourceMappingURL=out.js.map
40
40
  //# sourceMappingURL=index.cjs.map