@avalabs/avalanche-module 1.9.2 → 1.9.4
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 +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -4,16 +4,16 @@ import { Avalanche } from '@avalabs/core-wallets-sdk';
|
|
|
4
4
|
import { Network, SortOrder, BlockchainId, Glacier, PrimaryNetworkChainName, FetchHttpRequest } from '@avalabs/glacier-sdk';
|
|
5
5
|
import E from 'big.js';
|
|
6
6
|
import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
7
|
-
import { object, string, record, number, z
|
|
7
|
+
import { object, string, record, number, z } from 'zod';
|
|
8
8
|
import { TokenUnit } from '@avalabs/core-utils-sdk';
|
|
9
|
-
import
|
|
9
|
+
import Hr from 'crypto';
|
|
10
10
|
import { utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
|
|
11
11
|
|
|
12
|
-
var hr=Object.defineProperty;var gr=(e,t,r)=>t in e?hr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(gr(e,typeof t!="symbol"?t+"":t,r),r),lt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(lt(e,t,"read from private field"),r?r.call(e):t.get(e)),w=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},R=(e,t,r,a)=>(lt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var pt={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.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","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function dt({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),i=Math.min(1,Math.max(n*2,.3)),s=1+o,c=1+i;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*s))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*c))/100n},isFixedFee:!1}}var gt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ft=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function De(e,t,r="tx"){return `${e}/${r}/${t}`}function F({amount:e,decimals:t}){return e===void 0?new E(0):new E(e/10**t)}function xt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(p=>p.addresses)||[]),s=new Set(e.emittedUtxos.flatMap(p=>p.addresses)||[]),c=Tr({tx:e,isTestnet:o,networkToken:r,froms:i}),l=Ar({tx:e,isTestnet:o,networkToken:r}),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:[...s.values()].join(","),isSender:d,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:De(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",i=e.emittedUtxos.filter(p=>p.asset.assetId===ae(!!t)&&!p.addresses.some(h=>a.has(h))).reduce((p,h)=>p.add(h.asset.amount),new E(0)),s=e.value.find(p=>p.assetId===ae(!!t))?.amount,c=i.gt(new E(0))?i:s?new E(s):new E(0)??new E(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,m=e.emittedUtxos.filter(p=>p.asset.assetId===ae(!!t)&&(e.txType==="ImportTx"&&p.consumedOnChainId===l||e.txType==="ExportTx"&&p.consumedOnChainId!==l)).reduce((p,h)=>p.add(h.amount),new E(0)),d=o?c:n?m:e.amountStaked.length===0?yt(e.value,!!t):yt(e.amountStaked,!!t);return F({amount:d?.toNumber(),decimals:r.decimals})}function Ar({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===ae(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function yt(e,t){return e.filter(r=>r.assetId===ae(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function ae(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Tt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let i=new Set(e.consumedUtxos.flatMap(f=>f.addresses)||[]),s=new Set(e.emittedUtxos.flatMap(f=>f.addresses)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:m,isSender:d}=Dr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),p=Ir({isTestnet:o,tx:e,networkToken:r}),h=l?m.toString():d?m.minus(p).toString():m.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...i.values()].join(","),to:[...s.values()].join(","),isSender:d,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:h}],gasUsed:p.toString(),explorerLink:De(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Dr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,m=e.emittedUtxos.filter(d=>d.asset.assetId===oe(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,p)=>d.add(p.asset.amount),new E(0));return {amount:F({amount:m.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===oe(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new E(0)),i=e.emittedUtxos.filter(l=>l.asset.assetId===oe(!!t)&&l.addresses.includes(a)).reduce((l,m)=>l.add(m.asset.amount),new E(0)),s=o.gte(i),c=s?o.minus(i):i.minus(o);return {amount:F({amount:c.toNumber(),decimals:r.decimals}),isSender:s}}function Ir({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(i=>i.assetId===oe(!!e)).reduce((i,s)=>i.add(s.amount),new E(0)),n=t.amountCreated.filter(i=>i.assetId===oe(!!e)).reduce((i,s)=>i.add(s.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function oe(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Dt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:i,explorerUrl:s,chainId:c}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let m=a.isTestnet?Network.FUJI:Network.MAINNET,d=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:kr(e),network:m,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),p=[];return gt(d)&&(p=d.transactions.map(h=>xt({tx:h,isTestnet:o,address:e,networkToken:i,explorerUrl:s,chainId:c}))),ft(d)&&(p=d.transactions.map(h=>Tt({tx:h,isTestnet:o,address:e,networkToken:i,explorerUrl:s,chainId:c}))),{transactions:p,nextPageToken:d.nextPageToken}},kr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Pr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},br={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},St=e=>{switch(e){case Environment.PRODUCTION:return Pr;case Environment.DEV:return br}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=ie.exponential()})=>{let n=0,o=0,i;for(;o<r;){o>0&&await Cr(n);try{let c=await e(o);if(t(c))return c}catch(c){i=c;}n=a(o),o++;}let s=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(s)},ie=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Cr(e){return new Promise(t=>setTimeout(t,e))}var Me=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:ie.constant(1),isSuccess:t=>t?.status?.error_code!==429});function kt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Le(e){let t,r=0;for(t=0;t<e.length;t++){let a=kt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function se(e,t){let r=await fetch(...e);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let a=await r.json();return t.parse(a)}var ce=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return se([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:r,...a}=t,n=new URLSearchParams(a);return se([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var bt=getBasicCoingeckoHttp(),M,$,pe=class{constructor({storage:t,proxyApiUrl:r}){w(this,M,void 0);w(this,$,void 0);U(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(i=>{a[n]={[i]:{price:o?.[i],change24:o?.[`${i}_24h_change`],vol24:o?.[`${i}_24h_vol`],marketCap:o?.[`${i}_market_cap`]}};});}),a});R(this,M,t),R(this,$,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Le(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await Me(i=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{a=void 0;}return A(this,M)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,i=`getPricesWithMarketDataByAddresses-${`${Le(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(i),n)return n;try{n=await Me(s=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:s}));}catch(s){console.error(s),n=void 0;}return A(this,M)?.set?.(i,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new ce(A(this,$)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(bt,{assetPlatformId:t,tokenAddresses:r,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD],marketCap:a=!1,vol24:n=!1,change24:o=!1,lastUpdated:i=!1,useCoingeckoProxy:s=!1,shouldThrow:c=!0}){if(s){let l=await new ce(A(this,$)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:i});return this.transformSimplePriceResponse(l,r)}return simplePrice(bt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:i,shouldThrow:c})}};M=new WeakMap,$=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),y=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var de=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var V=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var X=({name:e,version:t})=>{switch(e){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":e,"x-application-version":t};case AppName.OTHER:return}};var Ct=process.env.GLACIER_API_KEY;var G=()=>Ct;var _r={rltoken:G()},ue=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={..._r,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var ke=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Pe=class{constructor({glacierApiUrl:t,headers:r}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r},ue);}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(r){throw r instanceof ke&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof ke&&this.setGlacierToUnhealthy(),r}}};var Nt=e=>Object.keys(e).includes("unlockedUnstaked"),Vt=e=>Object.keys(e).includes("locked");function be(e){let t=Object.values(e).reduce(function(r,a){let n=a.reduce(function(o,i){let s=Number(i.amount);return o+s},0);return r+n},0);return BigInt(t)}var Rt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:i,avaxAssetId:s})=>{let c={},l={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 f in l){let x=l[f];if(!x||!x.length){c[f]=0n;continue}x.forEach(D=>{if(D.assetId!==s)return;let S=(c[f]??0n)+BigInt(D.amount);c[f]=S;});}let m=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),d=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(be(e),t.decimals,t.symbol),h=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{lockedStaked:c.lockedStaked,lockedStakeable:c.lockedStakeable,lockedPlatform:c.lockedPlatform,atomicMemoryLocked:c.atomicMemoryLocked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,unlockedUnstaked:c.unlockedUnstaked,unlockedStaked:c.unlockedStaked,pendingStaked:c.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:i}};var Et=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:i,avaxAssetId:s})=>{let c={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let f in l){let x=l[f];if(!x||!x.length){c[f]=0n;continue}x.forEach(D=>{if(D.assetId!==s)return;let S=(c[f]??0n)+BigInt(D.amount);c[f]=S;});}let m=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),d=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,p=new TokenUnit(be(e),t.decimals,t.symbol),h=r!==void 0?p.mul(r):void 0;return {...t,coingeckoId:i,type:TokenType.NATIVE,priceInCurrency:r,balance:p.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:p.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:m.toSubUnit(),availableInCurrency:d,availableDisplayValue:m.toDisplay(),availableCurrencyDisplayValue:d?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var _t=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await I({isTestnet:!!r.isTestnet});if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let s=t.toLowerCase(),c=e[0]??"",l=r.networkToken,m=r.pricingProviders?.coingecko.nativeTokenId,d=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,p=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:d,network:p,addresses:e.join(",")}).then(Z=>Z.balances),f=m?await n.getSimplePrice({coinIds:[m],currencies:[s]}):{},x=f?.[m??""]?.[s]?.price??void 0,D=f?.[m??""]?.[s]?.marketCap??void 0,C=f?.[m??""]?.[s]?.vol24??void 0,S=f?.[m??""]?.[s]?.change24??void 0,b;return Nt(h)?(b=Rt({balance:h,networkToken:l,priceInCurrency:x,marketCap:D,vol24:C,change24:S,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Vt(h)?(b=Et({balance:h,networkToken:l,priceInCurrency:x,marketCap:D,vol24:C,change24:S,coingeckoId:m??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Promise.reject("Incorrect type balance was returned from glacier")};function Ut({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=Gr.createHash("sha256").update(r).digest("base64");return "avax:"+Hr(a).substring(0,32)}var Hr=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Xt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),i;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{i=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{i=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(i,"X"),[NetworkVMType.PVM]:o.getAddress(i,"P")}};var $r=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")])]),Gt=e=>$r.safeParse(e);var Wt=async({request:e,network:t,approvalController:r})=>{let a=Gt(e.params);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let[n,o]=a.data,i=Buffer.from(n,"utf-8").toString("hex"),s={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:i,accountIndex:o},c={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} is requesting to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},l=await r.requestApproval({request:e,displayData:c,signingData:s});return "error"in l?{error:l.error}:"signedData"in l?{result:l.signedData}:{error:rpcErrors.internal("No signed data returned")}};var qr=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()}),$t=e=>qr.safeParse(e);var qt=({utxoHexes:e=[],vm:t})=>{try{let r=utils.getManagerForVM(t).getDefaultCodec();return e.map(a=>{let n=utils.hexToBuffer(a);return Utxo.fromBytes(n,r)[0]})}catch{return []}};var Ce=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator:case TxType.AddPermissionlessValidator:return e;case TxType.ConvertSubnetToL1:case TxType.SetL1ValidatorWeight:case TxType.DisableL1Validator:case TxType.IncreaseL1ValidatorBalance:case TxType.RegisterL1Validator:return {...e,chain:e.chain};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 Kt=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Do you want to add this delegator?";case TxType.AddPermissionlessValidator:return "Do you want to add this validator?";case TxType.Export:return "Do you approve this export?";case TxType.Import:return "Do you approve this import?";case TxType.Base:return "Do you approve this transaction?";case TxType.AddSubnetValidator:return "Do you want to add this subnet validator?";case TxType.CreateChain:return "Do you want to create this chain?";case TxType.CreateSubnet:return "Do you want to create this subnet?";case TxType.RemoveSubnetValidator:return "Do you want to remove this subnet validator?";case TxType.ConvertSubnetToL1:return "Do you want to convert this subnet?";case TxType.DisableL1Validator:return "Do you want to disable this validator?";case TxType.IncreaseL1ValidatorBalance:return "Do you want to increase this validator balance?";case TxType.RegisterL1Validator:return "Do you want to register this validator?";case TxType.SetL1ValidatorWeight:return "Do you want to set this validator weight?";default:return "Sign Message"}};var _e=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await I({isTestnet:a});return e.map(i=>Avalanche.getAddressFromXpub(n,i,o,t,r))};var Ue=e=>e.type===TxType.AddPermissionlessDelegator,Fe=e=>e.type===TxType.AddPermissionlessValidator,Oe=e=>e.type===TxType.Export,Xe=e=>e.type===TxType.Import,zr=e=>e.type===TxType.Base,Ge=e=>e.type===TxType.AddSubnetValidator,Yr=e=>e.type===TxType.CreateChain,Qr=e=>e.type===TxType.CreateSubnet,He=e=>e.type===TxType.RemoveSubnetValidator,Jt=e=>e.type===TxType.ConvertSubnetToL1,zt=e=>e.type===TxType.DisableL1Validator,Yt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Qt=e=>e.type===TxType.RegisterL1Validator,Zt=e=>e.type===TxType.SetL1ValidatorWeight,Bo=e=>Ue(e)||Fe(e)||Ge(e)||He(e),Eo=e=>Oe(e)||Xe(e),er=e=>zr(e),tr=e=>Yr(e),rr=e=>Qr(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});function Ne(e){return e===Avalanche.MainnetContext.pBlockchainID}var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:i,stake:s,subnetID:c}=e,l=[T("Node ID",n),Ne(c)?y("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",s,9,t),V("Start Date",o),V("End Date",i)];return r.push({title:"Staking Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var $e=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:i,end:s,stake:c,subnetID:l,signature:m,publicKey:d}=e,p=[T("Node ID",n),Ne(l)?y("Subnet ID","Primary Network"):T("Subnet ID",l)];return d&&m&&p.push(T("Public Key",d),T("Proof",m)),p.push(u("Stake Amount",c,9,t),y("Delegation Fee",`${o/1e4} %`),V("Start Date",i),V("End Date",s)),r.push({title:"Staking Details",items:p}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var je=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:i,subnetID:s}=e,c=[T("Subnet ID",s),T("Node ID",n),V("Start Date",o),V("End Date",i)];return r.push({title:"Staking Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var qe=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:i,validators:s}=e,c=[T("Subnet ID",i),T("Chain ID",n),de("Manager Address",o)];return r.push({title:"L1 Details",items:c}),s.forEach(({balance:l,stake:m,nodeId:d,remainingBalanceOwners:p,deactivationOwners:h},f)=>{let x=[T("Node ID",d),u("Balance",l,9,t),u("Stake",m,9,t)];h.length>0&&x.push(y(`${h.length>1?"Owners":"Owner"} Able to Deactivate`,h.join(`
|
|
13
|
-
`),"vertical")),
|
|
14
|
-
`),"vertical")),r.push({title:f===0?"Validators":void 0,items:x});}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ke=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,destination:
|
|
15
|
-
`),"vertical"),y("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ze=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:i,genesisData:s}=e,c=[y("Blockchain name",o,"vertical"),y("Blockchain ID",n,"vertical"),y("Virtual Machine ID",i,"vertical"),y("Genesis Data",s,"vertical")];return r.push({title:"Blockchain Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[T("Validation ID",n)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var tt=(e,t)=>{let r=[],{txFee:a,balance:n,validationId:o}=e,i=[T("Validation ID",o),u("Increase by amount",n,9,t)];return r.push({title:"L1 Details",items:i}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var rt=(e,t)=>{let r=[],{txFee:a,balance:n}=e,o=[u("Initial balance",n,9,t)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var at=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ve=(e,t)=>{if(er(e))return Ye(e,t);if(Oe(e))return Ke(e,t);if(Xe(e))return Je(e,t);if(rr(e))return Qe(e,t);if(Ue(e))return We(e,t);if(Fe(e))return $e(e,t);if(tr(e))return Ze(e,t);if(Ge(e))return je(e,t);if(He(e))return ze(e,t);if(Jt(e))return qe(e,t);if(zt(e))return et(e,t);if(Yt(e))return tt(e,t);if(Qt(e))return rt(e,t);if(Zt(e))return at(e,t)};var nr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=$t(e.params);if(!o.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};try{let{transactionHex:i,chainAlias:s,externalIndices:c,internalIndices:l,utxos:m}=o.data,d=Avalanche.getVmByChainAlias(s),p=utils.hexToBuffer(i),h=t.isTestnet??!1,f=await I({isTestnet:h}),x=e.context?.currentAddress;if(!x||typeof x!="string")return {error:rpcErrors.invalidRequest("No active account found")};let D=qt({utxoHexes:m,vm:d}),C=D.length?D:await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:s,network:h?Network.FUJI:Network.MAINNET,url:a,token:G(),headers:X(n)}),S;if(s==="C")S=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:p,vm:d,utxos:C,fromAddress:x});else {let re=utils.unpackWithManager(d,p),N=e.context?.xpubXP;if(N!==void 0&&typeof N!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Be=await _e({indices:c??[],chainAlias:s,isChange:!1,isTestnet:h,xpubXP:N}),Ee=await _e({indices:l??[],chainAlias:s,isChange:!0,isTestnet:h,xpubXP:N}),dr=[...new Set([x,...Be,...Ee])].map(ur=>utils.parse(ur)[2]);S=await Avalanche.createAvalancheUnsignedTx({tx:re,utxos:C,provider:f,fromAddressBytes:dr});}let b=await Avalanche.parseAvalancheTx(S,f,x),Z=Ce(b),ee=Kt(b);if(b.type==="unknown"||Z===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let Te={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(S.toJSON()),data:b,vm:d,externalIndices:c,internalIndices:l},Ae=Ve(Z,t.networkToken.symbol);if(Ae===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let ve={title:ee,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Ae,networkFeeSelector:!1},te=await r.requestApproval({request:e,displayData:ve,signingData:Te});if("error"in te)return {error:te.error};let _=await na(f,te,d);return oa({provider:f,txHash:_,vm:d,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:e.requestId}),{result:_}}catch(i){return console.error(i),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:i}})}}},na=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},oa=async({provider:e,txHash:t,vm:r,onTransactionConfirmed:a,onTransactionReverted:n,requestId:o})=>{try{r===PVM?(await O({operation:()=>e.getApiP().getTxStatus({txID:t}),isSuccess:c=>["Committed","Dropped"].includes(c.status),maxRetries:7})).status==="Committed"?a(t,o):n(t,o):r===AVM?(await O({operation:()=>e.getApiX().getTxStatus({txID:t}),isSuccess:c=>["Accepted","Rejected"].includes(c.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o):(await O({operation:()=>e.getApiC().getAtomicTxStatus(t),isSuccess:c=>["Accepted","Dropped"].includes(c.status),maxRetries:7})).status==="Accepted"?a(t,o):n(t,o);}catch(s){console.error(s),s instanceof Error&&s.message.startsWith("Max retry exceeded.")||n(t,o);}};var ia=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),or=e=>ia.safeParse(e);var cr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=or(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:i,chainAlias:s,from:c}=o.data,l=Avalanche.getVmByChainAlias(s),m=utils.hexToBuffer(i),d=t.isTestnet??!1,p=await I({isTestnet:d}),h=utils.unpackWithManager(l,m),f=await Avalanche.getUtxosByTxFromGlacier({transactionHex:i,chainAlias:s,network:d?Network.FUJI:Network.MAINNET,url:a,token:G(),headers:X(n)}),x;try{let N=utils.getManagerForVM(l).unpack(m,avaxSerial.SignedTx),Be=await Avalanche.createAvalancheUnsignedTx({tx:h,utxos:f,provider:p,credentials:N.getCredentials()});x=h.getSigIndices().map((Ee,ct)=>new Credential(Avalanche.populateCredential(Ee,{unsignedTx:Be,credentialIndex:ct})));}catch{x=h.getSigIndices().map(N=>new Credential(Avalanche.populateCredential(N)));}let D=await Avalanche.createAvalancheUnsignedTx({tx:h,provider:p,credentials:x,utxos:f}),C=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!C)return {error:rpcErrors.invalidRequest("Missing signer address")};let S=D.getSigIndicesForAddress(C);if(!S)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let b=D.getSigIndices();if(!S.some(([re,N])=>b[re]?.includes(N)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let ee=await Avalanche.parseAvalancheTx(D,p,c),Te=Ce(ee);if(ee.type==="unknown"||Te===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let Ae={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:ee,vm:l,unsignedTxJson:JSON.stringify(D.toJSON()),ownSignatureIndices:S},ve=Ve(Te,t.networkToken.symbol);if(ve===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let te={title:"Do you approve this transaction?",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following transaction`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:ve},_=await r.requestApproval({request:e,displayData:te,signingData:Ae});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ot=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ye=({accountIndex:e,derivationPathType:t})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/0'/0/${e}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var pr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ot(e)?ye(e).AVM:void 0,o=ot(e)?ye(e).CoreEth:void 0,i=await I({isTestnet:!!r.isTestnet}),s=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}),l=Buffer.from(s,"hex"),m=Buffer.from(c,"hex");return {[NetworkVMType.CoreEth]:i.getAddress(m,"C"),[NetworkVMType.AVM]:i.getAddress(l,"X"),[NetworkVMType.PVM]:i.getAddress(l,"P")}};var z,xe,Y,L,Q,mr=class{constructor({approvalController:t,environment:r,appInfo:a}){w(this,z,void 0);w(this,xe,void 0);w(this,Y,void 0);w(this,L,void 0);w(this,Q,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=St(r);R(this,Q,a),R(this,z,new Pe({glacierApiUrl:n,headers:X(a)})),R(this,xe,o),R(this,Y,n),R(this,L,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Xt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new pe({storage:a,proxyApiUrl:A(this,xe)});return _t({addresses:t,currency:n,network:r,glacierService:A(this,z),tokenService:o})}getManifest(){let t=parseManifest(pt);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return dt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return Dt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,z)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ye(t)}async deriveAddress(t){return pr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Wt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return cr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,Y),appInfo:A(this,Q)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return nr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,Y),appInfo:A(this,Q)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return Ut({blockchainId:t,isTestnet:r})}};z=new WeakMap,xe=new WeakMap,Y=new WeakMap,L=new WeakMap,Q=new WeakMap;var Zs=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,ec=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
|
|
12
|
+
var hr=Object.defineProperty;var gr=(e,t,r)=>t in e?hr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(gr(e,typeof t!="symbol"?t+"":t,r),r),lt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(lt(e,t,"read from private field"),r?r.call(e):t.get(e)),w=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r);},V=(e,t,r,a)=>(lt(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var pt={name:"Avalanche",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.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","avax:N5PeRoKwDDREF0awn2GPsb9sHnGRzdEX"],namespaces:["avax"]},cointype:"9000",permissions:{rpc:{dapps:!0,methods:["avalanche_sendTransaction","avalanche_signTransaction","avalanche_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var I=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function dt({isTestnet:e,vmName:t}){let r=await I({isTestnet:e});if(t===NetworkVMType.AVM)return {baseFee:BigInt(1e6),low:{maxFeePerGas:BigInt(1e6)},medium:{maxFeePerGas:BigInt(1e6)},high:{maxFeePerGas:BigInt(1e6)},isFixedFee:!0};let{price:a}=await r.getApiP().getFeeState(),n=100/Number(a)/100,o=Math.min(1,Math.max(n,.15)),s=Math.min(1,Math.max(n*2,.3)),i=1+o,c=1+s;return {baseFee:a,low:{maxFeePerGas:a},medium:{maxFeePerGas:a*BigInt(Math.round(100*i))/100n},high:{maxFeePerGas:a*BigInt(Math.round(100*c))/100n},isFixedFee:!1}}var gt=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ft=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function $(e,t,r="tx"){return `${e}/${r}/${t}`}function F({amount:e,decimals:t}){return e===void 0?new E(0):new E(e/10**t)}function xt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(d=>d.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(d=>d.addresses)||[]),c=Tr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=Ar({tx:e,isTestnet:o,networkToken:r}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,m=s.has(p);return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:m,timestamp:e.blockTimestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:c.toString()}],gasUsed:l.toString(),explorerLink:$(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(d=>d.asset.assetId===ne(!!t)&&!d.addresses.some(h=>a.has(h))).reduce((d,h)=>d.add(h.asset.amount),new E(0)),i=e.value.find(d=>d.assetId===ne(!!t))?.amount,c=s.gt(new E(0))?s:i?new E(i):new E(0)??new E(0),l=t?Avalanche.FujiContext.pBlockchainID:Avalanche.MainnetContext.pBlockchainID,p=e.emittedUtxos.filter(d=>d.asset.assetId===ne(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,h)=>d.add(h.amount),new E(0)),m=o?c:n?p:e.amountStaked.length===0?yt(e.value,!!t):yt(e.amountStaked,!!t);return F({amount:m?.toNumber(),decimals:r.decimals})}function Ar({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===ne(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function yt(e,t){return e.filter(r=>r.assetId===ne(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function ne(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function Tt({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(f=>f.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(f=>f.addresses)||[]),c=t.toLowerCase().startsWith("x-")?t.slice(2):t,l=["ImportTx","ExportTx"].includes(e.txType),{amount:p,isSender:m}=Dr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),d=Ir({isTestnet:o,tx:e,networkToken:r}),h=l?p.toString():m?p.minus(d).toString():p.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!m,isOutgoing:m,from:[...s.values()].join(","),to:[...i.values()].join(","),isSender:m,timestamp:e.timestamp*1e3,tokens:[{decimal:r.decimals.toString(),name:r.name,symbol:r.symbol,type:TokenType.NATIVE,amount:h}],gasUsed:d.toString(),explorerLink:$(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Dr({tx:e,isTestnet:t,networkToken:r,chainAddress:a,isImportExport:n}){if(n){let l=t?Avalanche.FujiContext.xBlockchainID:Avalanche.MainnetContext.xBlockchainID,p=e.emittedUtxos.filter(m=>m.asset.assetId===se(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===l||e.txType==="ExportTx"&&m.consumedOnChainId!==l)).reduce((m,d)=>m.add(d.asset.amount),new E(0));return {amount:F({amount:p.toNumber(),decimals:r.decimals}),isSender:!0}}let o=e.consumedUtxos.filter(l=>l.asset.assetId===se(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new E(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===se(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new E(0)),i=o.gte(s),c=i?o.minus(s):s.minus(o);return {amount:F({amount:c.toNumber(),decimals:r.decimals}),isSender:i}}function Ir({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===se(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),n=t.amountCreated.filter(s=>s.assetId===se(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function se(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var Dt=async({address:e,nextPageToken:t,offset:r,network:a,glacierService:n})=>{let{isTestnet:o,networkToken:s,explorerUrl:i,chainId:c}=a;if(!n.isHealthy())return {transactions:[],nextPageToken:""};let p=a.isTestnet?Network.FUJI:Network.MAINNET,m=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:kr(e),network:p,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),d=[];return gt(m)&&(d=m.transactions.map(h=>xt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),ft(m)&&(d=m.transactions.map(h=>Tt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:d,nextPageToken:m.nextPageToken}},kr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Pr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},br={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},St=e=>{switch(e){case Environment.PRODUCTION:return Pr;case Environment.DEV:return br}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=ie.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Cr(n);try{let c=await e(o);if(t(c))return c}catch(c){s=c;}n=a(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},ie=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Cr(e){return new Promise(t=>setTimeout(t,e))}var Me=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:ie.constant(1),isSuccess:t=>t?.status?.error_code!==429});function kt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Le(e){let t,r=0;for(t=0;t<e.length;t++){let a=kt(e[t]??"");r=r+65027/a;}return (""+r).slice(0,16)}async function ce(e,t){let r=await fetch(...e);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let a=await r.json();return t.parse(a)}var le=class{constructor(t){this.proxyApiUrl=t;}simplePrice(t){let r=new URLSearchParams(t);return ce([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(t){let{id:r,...a}=t,n=new URLSearchParams(a);return ce([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${n}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var bt=getBasicCoingeckoHttp(),M,j,me=class{constructor({storage:t,proxyApiUrl:r}){w(this,M,void 0);w(this,j,void 0);U(this,"transformSimplePriceResponse",(t,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(t).forEach(n=>{let o=t[n];a[n]={},r.forEach(s=>{a[n]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),a});V(this,M,t),V(this,j,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Le(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await Me(s=>this.simplePrice({coinIds:t,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{a=void 0;}return A(this,M)?.set?.(o,a),a}async getPricesByAddresses(t,r,a=VsCurrencyType.USD){let n,s=`getPricesWithMarketDataByAddresses-${`${Le(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(s),n)return n;try{n=await Me(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:t,currency:a,useCoingeckoProxy:i}));}catch(i){console.error(i),n=void 0;}return A(this,M)?.set?.(s,n),n}async fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:n=!1}){if(n){let o=await new le(A(this,j)).simplePriceByContractAddresses({id:t,contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[a])}return simpleTokenPrice(bt,{assetPlatformId:t,tokenAddresses:r,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD],marketCap:a=!1,vol24:n=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new le(A(this,j)).simplePrice({ids:t,vs_currencies:r,include_market_cap:a,include_24hr_vol:n,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(bt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};M=new WeakMap,j=new WeakMap;object({date:string(),usd:record(number())});var u=(e,t,r,a)=>({label:e,type:DetailItemType.CURRENCY,value:t,maxDecimals:r,symbol:a}),y=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var ue=(e,t)=>({label:e,type:DetailItemType.ADDRESS,value:t});var T=(e,t)=>({label:e,type:DetailItemType.NODE_ID,value:t});var R=(e,t)=>({label:e,type:DetailItemType.DATE,value:t});var X=({name:e,version:t})=>{switch(e){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":e,"x-application-version":t};case AppName.OTHER:return}};var Ct=process.env.GLACIER_API_KEY;var H=()=>Ct;var _r={rltoken:H()},he=class extends FetchHttpRequest{constructor(t){super(t);}request(t){let r={..._r,...t.query||{}},a={...t,query:Object.keys(r).length>0?r:void 0};return super.request(a)}};var ke=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Pe=class{constructor({glacierApiUrl:t,headers:r}){U(this,"glacierSdk");U(this,"isGlacierHealthy",!0);U(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:t,HEADERS:r},he);}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async listLatestPrimaryNetworkTransactions(t){try{return this.glacierSdk.primaryNetworkTransactions.listLatestPrimaryNetworkTransactions(t)}catch(r){throw r instanceof ke&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof ke&&this.setGlacierToUnhealthy(),r}}};var Nt=e=>Object.keys(e).includes("unlockedUnstaked"),Rt=e=>Object.keys(e).includes("locked");function be(e){let t=Object.values(e).reduce(function(r,a){let n=a.reduce(function(o,s){let i=Number(s.amount);return o+i},0);return r+n},0);return BigInt(t)}var Vt=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s,avaxAssetId:i})=>{let c={},l={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 f in l){let x=l[f];if(!x||!x.length){c[f]=0n;continue}x.forEach(D=>{if(D.assetId!==i)return;let S=(c[f]??0n)+BigInt(D.amount);c[f]=S;});}let p=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(be(e),t.decimals,t.symbol),h=r?d.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{lockedStaked:c.lockedStaked,lockedStakeable:c.lockedStakeable,lockedPlatform:c.lockedPlatform,atomicMemoryLocked:c.atomicMemoryLocked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,unlockedUnstaked:c.unlockedUnstaked,unlockedStaked:c.unlockedStaked,pendingStaked:c.pendingStaked},marketCap:a,vol24:n,change24:o,coingeckoId:s}};var Et=({balance:e,networkToken:t,priceInCurrency:r,marketCap:a,vol24:n,change24:o,coingeckoId:s,avaxAssetId:i})=>{let c={},l={unlocked:e.unlocked,locked:e.locked,atomicMemoryUnlocked:e.atomicMemoryUnlocked,atomicMemoryLocked:e.atomicMemoryLocked};for(let f in l){let x=l[f];if(!x||!x.length){c[f]=0n;continue}x.forEach(D=>{if(D.assetId!==i)return;let S=(c[f]??0n)+BigInt(D.amount);c[f]=S;});}let p=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),m=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,d=new TokenUnit(be(e),t.decimals,t.symbol),h=r!==void 0?d.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:d.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:d.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:p.toSubUnit(),availableInCurrency:m,availableDisplayValue:p.toDisplay(),availableCurrencyDisplayValue:m?.toFixed(2),utxos:e,balancePerType:{unlocked:c.unlocked,locked:c.locked,atomicMemoryUnlocked:c.atomicMemoryUnlocked,atomicMemoryLocked:c.atomicMemoryLocked},marketCap:a,vol24:n,change24:o}};var _t=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await I({isTestnet:!!r.isTestnet});if(!a.isHealthy())return Promise.reject("Glacier is unhealthy. Try again later.");let i=t.toLowerCase(),c=e[0]??"",l=r.networkToken,p=r.pricingProviders?.coingecko.nativeTokenId,m=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,d=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:m,network:d,addresses:e.join(",")}).then(ee=>ee.balances),f=p?await n.getSimplePrice({coinIds:[p],currencies:[i]}):{},x=f?.[p??""]?.[i]?.price??void 0,D=f?.[p??""]?.[i]?.marketCap??void 0,C=f?.[p??""]?.[i]?.vol24??void 0,S=f?.[p??""]?.[i]?.change24??void 0,b;return Nt(h)?(b=Vt({balance:h,networkToken:l,priceInCurrency:x,marketCap:D,vol24:C,change24:S,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Rt(h)?(b=Et({balance:h,networkToken:l,priceInCurrency:x,marketCap:D,vol24:C,change24:S,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Promise.reject("Incorrect type balance was returned from glacier")};function Ut({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=Hr.createHash("sha256").update(r).digest("base64");return "avax:"+Gr(a).substring(0,32)}var Gr=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Xt=async({accountIndex:e,xpubXP:t,walletType:r,network:a})=>{let n=!!a?.isTestnet;if(t===void 0)throw rpcErrors.invalidParams("xpubXP is required to get address");let o=await I({isTestnet:n}),s;switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:{s=Avalanche.getAddressPublicKeyFromXpub(t,e);break}case WalletType.LedgerLive:case WalletType.Seedless:{s=Buffer.from(t,"hex");break}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}return {[NetworkVMType.AVM]:o.getAddress(s,"X"),[NetworkVMType.PVM]:o.getAddress(s,"P")}};var $r=z.union([z.tuple([z.string()]).describe("message to sign"),z.tuple([z.string().describe("message to sign"),z.number().nonnegative().describe("account index")])]),Ht=e=>$r.safeParse(e);var Wt=async({request:e,network:t,approvalController:r})=>{let a=Ht(e.params);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let[n,o]=a.data,s=Buffer.from(n,"utf-8").toString("hex"),i={type:RpcMethod.AVALANCHE_SIGN_MESSAGE,data:s,accountIndex:o},c={title:"Sign Message",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} is requesting to sign the following message`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:[{title:"Message",items:[n]}]},l=await r.requestApproval({request:e,displayData:c,signingData:i});return "error"in l?{error:l.error}:"signedData"in l?{result:l.signedData}:{error:rpcErrors.internal("No signed data returned")}};var qr=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()}),$t=e=>qr.safeParse(e);var qt=({utxoHexes:e=[],vm:t})=>{try{let r=utils.getManagerForVM(t).getDefaultCodec();return e.map(a=>{let n=utils.hexToBuffer(a);return Utxo.fromBytes(n,r)[0]})}catch{return []}};var Ce=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:case TxType.AddSubnetValidator:case TxType.CreateChain:case TxType.CreateSubnet:case TxType.RemoveSubnetValidator:case TxType.AddPermissionlessValidator:return e;case TxType.ConvertSubnetToL1:case TxType.SetL1ValidatorWeight:case TxType.DisableL1Validator:case TxType.IncreaseL1ValidatorBalance:case TxType.RegisterL1Validator:return {...e,chain:e.chain};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 Kt=e=>{switch(e.type){case TxType.AddPermissionlessDelegator:return "Do you want to add this delegator?";case TxType.AddPermissionlessValidator:return "Do you want to add this validator?";case TxType.Export:return "Do you approve this export?";case TxType.Import:return "Do you approve this import?";case TxType.Base:return "Do you approve this transaction?";case TxType.AddSubnetValidator:return "Do you want to add this subnet validator?";case TxType.CreateChain:return "Do you want to create this chain?";case TxType.CreateSubnet:return "Do you want to create this subnet?";case TxType.RemoveSubnetValidator:return "Do you want to remove this subnet validator?";case TxType.ConvertSubnetToL1:return "Do you want to convert this subnet?";case TxType.DisableL1Validator:return "Do you want to disable this validator?";case TxType.IncreaseL1ValidatorBalance:return "Do you want to increase this validator balance?";case TxType.RegisterL1Validator:return "Do you want to register this validator?";case TxType.SetL1ValidatorWeight:return "Do you want to set this validator weight?";default:return "Sign Message"}};var _e=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await I({isTestnet:a});return e.map(s=>Avalanche.getAddressFromXpub(n,s,o,t,r))};var Ue=e=>e.type===TxType.AddPermissionlessDelegator,Fe=e=>e.type===TxType.AddPermissionlessValidator,Oe=e=>e.type===TxType.Export,Xe=e=>e.type===TxType.Import,zr=e=>e.type===TxType.Base,He=e=>e.type===TxType.AddSubnetValidator,Yr=e=>e.type===TxType.CreateChain,Qr=e=>e.type===TxType.CreateSubnet,Ge=e=>e.type===TxType.RemoveSubnetValidator,Jt=e=>e.type===TxType.ConvertSubnetToL1,zt=e=>e.type===TxType.DisableL1Validator,Yt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Qt=e=>e.type===TxType.RegisterL1Validator,Zt=e=>e.type===TxType.SetL1ValidatorWeight,Bo=e=>Ue(e)||Fe(e)||He(e)||Ge(e),Eo=e=>Oe(e)||Xe(e),er=e=>zr(e),tr=e=>Yr(e),rr=e=>Qr(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});function Ne(e){return e===Avalanche.MainnetContext.pBlockchainID}var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:c}=e,l=[T("Node ID",n),Ne(c)?y("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",i,9,t),R("Start Date",o),R("End Date",s)];return r.push({title:"Staking Details",items:l}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var $e=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:c,subnetID:l,signature:p,publicKey:m}=e,d=[T("Node ID",n),Ne(l)?y("Subnet ID","Primary Network"):T("Subnet ID",l)];return m&&p&&d.push(T("Public Key",m),T("Proof",p)),d.push(u("Stake Amount",c,9,t),y("Delegation Fee",`${o/1e4} %`),R("Start Date",s),R("End Date",i)),r.push({title:"Staking Details",items:d}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var je=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,c=[T("Subnet ID",i),T("Node ID",n),R("Start Date",o),R("End Date",s)];return r.push({title:"Staking Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var qe=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),ue("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:p,nodeId:m,remainingBalanceOwners:d,deactivationOwners:h},f)=>{let x=[T("Node ID",m),u("Balance",l,9,t),u("Stake",p,9,t)];h.length>0&&x.push(y(`${h.length>1?"Owners":"Owner"} Able to Deactivate`,h.join(`
|
|
13
|
+
`),"vertical")),d.length>0&&x.push(y(`${d.length>1?"Owners":"Owner"} of the Remaining Balance`,d.join(`
|
|
14
|
+
`),"vertical")),r.push({title:f===0?"Validators":void 0,items:x});}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ke=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,destination:s,type:i}=e;return r.push({title:"Transaction Details",items:[y("Source Chain",`Avalanche ${B[o]}`),y("Target Chain",`Avalanche ${B[s]}`),y("Transaction Type",i?(i[0]||"").toUpperCase()+i.slice(1):""),u("Amount",n,9,t)]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Je=(e,t)=>{let r=[],{txFee:a,amount:n,chain:o,source:s,type:i}=e;return r.push({title:"Transaction Details",items:[y("Source Chain",`Avalanche ${B[s]}`),y("Destination Chain",`Avalanche ${B[o]}`),y("Transaction Type",i?(i[0]||"").toUpperCase()+i.slice(1):""),u("Amount",n,9,t)]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var ze=(e,t)=>{let r=[],{txFee:a,nodeID:n,subnetID:o}=e,s=[T("Node ID",n),T("Subnet ID",o)];return r.push({title:"Staking Details",items:s}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ye=(e,t)=>{let r=[],{txFee:a,chain:n,outputs:o,memo:s}=e;return r.push({title:"Chain Details",items:[y("Active chain",`Avalanche ${B[n]}`)]}),o.forEach((i,c)=>{let l=i.owners.flatMap(p=>[ue("To",p),u("Amount",i.amount,9,t)]);i.owners.length>1&&l.push(y("Threshold",i.threshold.toString())),r.push({title:c===0?"Balance Change":void 0,items:l});}),n!==PVM&&s&&r.push({title:"Memo",items:[s]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Qe=(e,t)=>{let r=[],{txFee:a,threshold:n,controlKeys:o}=e;return r.push({title:"Subnet Details",items:[y(o.length>1?"Owners":"Owner",o.join(`
|
|
15
|
+
`),"vertical"),y("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ze=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,c=[y("Blockchain name",o,"vertical"),y("Blockchain ID",n,"vertical"),y("Virtual Machine ID",s,"vertical"),y("Genesis Data",i,"vertical")];return r.push({title:"Blockchain Details",items:c}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var et=(e,t)=>{let r=[],{txFee:a,validationId:n}=e,o=[T("Validation ID",n)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var tt=(e,t)=>{let r=[],{txFee:a,balance:n,validationId:o}=e,s=[T("Validation ID",o),u("Increase by amount",n,9,t)];return r.push({title:"L1 Details",items:s}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var rt=(e,t)=>{let r=[],{txFee:a,balance:n}=e,o=[u("Initial balance",n,9,t)];return r.push({title:"L1 Details",items:o}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var at=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Re=(e,t)=>{if(er(e))return Ye(e,t);if(Oe(e))return Ke(e,t);if(Xe(e))return Je(e,t);if(rr(e))return Qe(e,t);if(Ue(e))return We(e,t);if(Fe(e))return $e(e,t);if(tr(e))return Ze(e,t);if(He(e))return je(e,t);if(Ge(e))return ze(e,t);if(Jt(e))return qe(e,t);if(zt(e))return et(e,t);if(Yt(e))return tt(e,t);if(Qt(e))return rt(e,t);if(Zt(e))return at(e,t)};var nr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=$t(e.params);if(!o.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};try{let{transactionHex:s,chainAlias:i,externalIndices:c,internalIndices:l,utxos:p}=o.data,m=Avalanche.getVmByChainAlias(i),d=utils.hexToBuffer(s),h=t.isTestnet??!1,f=await I({isTestnet:h}),x=e.context?.currentAddress;if(!x||typeof x!="string")return {error:rpcErrors.invalidRequest("No active account found")};let D=qt({utxoHexes:p,vm:m}),C=D.length?D:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:h?Network.FUJI:Network.MAINNET,url:a,token:H(),headers:X(n)}),S;if(i==="C")S=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:d,vm:m,utxos:C,fromAddress:x});else {let ae=utils.unpackWithManager(m,d),N=e.context?.xpubXP;if(N!==void 0&&typeof N!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Be=await _e({indices:c??[],chainAlias:i,isChange:!1,isTestnet:h,xpubXP:N}),Ee=await _e({indices:l??[],chainAlias:i,isChange:!0,isTestnet:h,xpubXP:N}),dr=[...new Set([x,...Be,...Ee])].map(ur=>utils.parse(ur)[2]);S=await Avalanche.createAvalancheUnsignedTx({tx:ae,utxos:C,provider:f,fromAddressBytes:dr});}let b=await Avalanche.parseAvalancheTx(S,f,x),ee=Ce(b),te=Kt(b);if(b.type==="unknown"||ee===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let Ae={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(S.toJSON()),data:b,vm:m,externalIndices:c,internalIndices:l},ve=Re(ee,t.networkToken.symbol);if(ve===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let De={title:te,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:ve,networkFeeSelector:!1},re=await r.requestApproval({request:e,displayData:De,signingData:Ae});if("error"in re)return {error:re.error};let _=await na(f,re,m);return oa({explorerUrl:t.explorerUrl??"",provider:f,txHash:_,vm:m,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:e}),{result:_}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},na=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},oa=async({explorerUrl:e,provider:t,txHash:r,vm:a,onTransactionPending:n,onTransactionConfirmed:o,onTransactionReverted:s,request:i})=>{let l=$(e,r);try{n({txHash:r,request:i}),a===PVM?(await O({operation:()=>t.getApiP().getTxStatus({txID:r}),isSuccess:m=>["Committed","Dropped"].includes(m.status),maxRetries:7})).status==="Committed"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):a===AVM?(await O({operation:()=>t.getApiX().getTxStatus({txID:r}),isSuccess:m=>["Accepted","Rejected"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i}):(await O({operation:()=>t.getApiC().getAtomicTxStatus(r),isSuccess:m=>["Accepted","Dropped"].includes(m.status),maxRetries:7})).status==="Accepted"?o({txHash:r,explorerLink:l,request:i}):s({txHash:r,request:i});}catch(p){console.error(p),p instanceof Error&&p.message.startsWith("Max retry exceeded.")||s({txHash:r,request:i});}};var sa=z.object({from:z.string().describe("Avalanche receiving address"),transactionHex:z.string(),chainAlias:z.enum(["X","P","C"])}),or=e=>sa.safeParse(e);var cr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=or(e.params);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Params are invalid")};let{transactionHex:s,chainAlias:i,from:c}=o.data,l=Avalanche.getVmByChainAlias(i),p=utils.hexToBuffer(s),m=t.isTestnet??!1,d=await I({isTestnet:m}),h=utils.unpackWithManager(l,p),f=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:m?Network.FUJI:Network.MAINNET,url:a,token:H(),headers:X(n)}),x;try{let N=utils.getManagerForVM(l).unpack(p,avaxSerial.SignedTx),Be=await Avalanche.createAvalancheUnsignedTx({tx:h,utxos:f,provider:d,credentials:N.getCredentials()});x=h.getSigIndices().map((Ee,ct)=>new Credential(Avalanche.populateCredential(Ee,{unsignedTx:Be,credentialIndex:ct})));}catch{x=h.getSigIndices().map(N=>new Credential(Avalanche.populateCredential(N)));}let D=await Avalanche.createAvalancheUnsignedTx({tx:h,provider:d,credentials:x,utxos:f}),C=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!C)return {error:rpcErrors.invalidRequest("Missing signer address")};let S=D.getSigIndicesForAddress(C);if(!S)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let b=D.getSigIndices();if(!S.some(([ae,N])=>b[ae]?.includes(N)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let te=await Avalanche.parseAvalancheTx(D,d,c),Ae=Ce(te);if(te.type==="unknown"||Ae===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let ve={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:te,vm:l,unsignedTxJson:JSON.stringify(D.toJSON()),ownSignatureIndices:S},De=Re(Ae,t.networkToken.symbol);if(De===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let re={title:"Do you approve this transaction?",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following transaction`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:De},_=await r.requestApproval({request:e,displayData:re,signingData:ve});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var ot=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var xe=({accountIndex:e,derivationPathType:t})=>{if(e<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(t){case"bip44":return {[NetworkVMType.AVM]:`m/44'/9000'/0'/0/${e}`,[NetworkVMType.CoreEth]:`m/44'/60'/0'/0/${e}`};case"ledger_live":return {[NetworkVMType.AVM]:`m/44'/9000'/${e}'/0/0`,[NetworkVMType.CoreEth]:`m/44'/60'/${e}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${t}`)}};var pr=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=ot(e)?xe(e).AVM:void 0,o=ot(e)?xe(e).CoreEth:void 0,s=await I({isTestnet:!!r.isTestnet}),i=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:n}),c=await t.requestPublicKey({curve:"secp256k1",secretId:a,derivationPath:o}),l=Buffer.from(i,"hex"),p=Buffer.from(c,"hex");return {[NetworkVMType.CoreEth]:s.getAddress(p,"C"),[NetworkVMType.AVM]:s.getAddress(l,"X"),[NetworkVMType.PVM]:s.getAddress(l,"P")}};var Y,Te,Q,L,Z,mr=class{constructor({approvalController:t,environment:r,appInfo:a}){w(this,Y,void 0);w(this,Te,void 0);w(this,Q,void 0);w(this,L,void 0);w(this,Z,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=St(r);V(this,Z,a),V(this,Y,new Pe({glacierApiUrl:n,headers:X(a)})),V(this,Te,o),V(this,Q,n),V(this,L,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Xt({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new me({storage:a,proxyApiUrl:A(this,Te)});return _t({addresses:t,currency:n,network:r,glacierService:A(this,Y),tokenService:o})}getManifest(){let t=parseManifest(pt);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return dt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return Dt({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,Y)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return xe(t)}async deriveAddress(t){return pr({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Wt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return cr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,Q),appInfo:A(this,Z)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return nr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,Q),appInfo:A(this,Z)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return Ut({blockchainId:t,isTestnet:r})}};Y=new WeakMap,Te=new WeakMap,Q=new WeakMap,L=new WeakMap,Z=new WeakMap;var ec=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,tc=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
|
|
16
16
|
|
|
17
|
-
export { mr as AvalancheModule, Ue as isAddPermissionlessDelegatorTx, Fe as isAddPermissionlessValidatorTx,
|
|
17
|
+
export { mr as AvalancheModule, Ue as isAddPermissionlessDelegatorTx, Fe as isAddPermissionlessValidatorTx, He as isAddSubnetValidatorTx, zr as isBaseTx, tr as isBlockchainDetails, er as isChainDetails, Jt as isConvertSubnetToL1Tx, Yr as isCreateChainTx, Qr as isCreateSubnetTx, zt as isDisableL1ValidatorTx, Eo as isExportImportTxDetails, Oe as isExportTx, Xe as isImportTx, Yt as isIncreaseL1ValidatorBalanceTx, Qt as isRegisterL1ValidatorTx, Ge as isRemoveSubnetValidatorTx, Zt as isSetL1ValidatorWeightTx, Bo as isStakingDetails, rr as isSubnetDetails, tc as isTokenWithBalanceAVM, ec as isTokenWithBalancePVM };
|
|
18
18
|
//# sourceMappingURL=out.js.map
|
|
19
19
|
//# sourceMappingURL=index.js.map
|