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