@avalabs/avalanche-module 1.8.1 → 1.9.1
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 +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.js
CHANGED
|
@@ -9,10 +9,10 @@ import { TokenUnit } from '@avalabs/core-utils-sdk';
|
|
|
9
9
|
import _r from 'crypto';
|
|
10
10
|
import { utils, PVM, AVM, avaxSerial, Credential, Utxo } from '@avalabs/avalanchejs';
|
|
11
11
|
|
|
12
|
-
var pr=Object.defineProperty;var dr=(e,t,r)=>t in e?pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(dr(e,typeof t!="symbol"?t+"":t,r),r),it=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(it(e,t,"read from private field"),r?r.call(e):t.get(e)),R=(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);},B=(e,t,r,a)=>(it(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var ct={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 D=async({isTestnet:e})=>e?Avalanche.JsonRpcProvider.getDefaultFujiProvider():Avalanche.JsonRpcProvider.getDefaultMainnetProvider();async function mt({isTestnet:e,vmName:t}){let r=await D({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 ut=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ht=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function Ae(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 ft({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(m=>m.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(m=>m.addresses)||[]),c=fr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=xr({tx:e,isTestnet:o,networkToken:r}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,d=s.has(p);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.values()].join(","),to:[...i.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:Ae(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function fr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(m=>m.asset.assetId===re(!!t)&&!m.addresses.some(h=>a.has(h))).reduce((m,h)=>m.add(h.asset.amount),new E(0)),i=e.value.find(m=>m.assetId===re(!!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(m=>m.asset.assetId===re(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===l||e.txType==="ExportTx"&&m.consumedOnChainId!==l)).reduce((m,h)=>m.add(h.amount),new E(0)),d=o?c:n?p:e.amountStaked.length===0?gt(e.value,!!t):gt(e.amountStaked,!!t);return F({amount:d?.toNumber(),decimals:r.decimals})}function xr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===re(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function gt(e,t){return e.filter(r=>r.assetId===re(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function re(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function xt({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:d}=Tr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),m=Ar({isTestnet:o,tx:e,networkToken:r}),h=l?p.toString():d?p.minus(m).toString():p.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.values()].join(","),to:[...i.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:m.toString(),explorerLink:Ae(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({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(d=>d.asset.assetId===ne(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,m)=>d.add(m.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===ne(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new E(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===ne(!!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 Ar({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ne(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),n=t.amountCreated.filter(s=>s.assetId===ne(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function ne(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var At=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,d=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Ir(e),network:p,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return ut(d)&&(m=d.transactions.map(h=>ft({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),ht(d)&&(m=d.transactions.map(h=>xt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:m,nextPageToken:d.nextPageToken}},Ir=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Dr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Sr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},It=e=>{switch(e){case Environment.PRODUCTION:return Dr;case Environment.DEV:return Sr}};var De=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Se=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});}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 De&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof De&&this.setGlacierToUnhealthy(),r}}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=oe.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Pr(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)},oe=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Pr(e){return new Promise(t=>setTimeout(t,e))}var we=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:oe.constant(1),isSuccess:t=>t?.status?.error_code!==429});function Dt(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Ee(e){let t,r=0;for(t=0;t<e.length;t++){let a=Dt(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 ie=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 kt=getBasicCoingeckoHttp(),M,W,le=class{constructor({storage:t,proxyApiUrl:r}){R(this,M,void 0);R(this,W,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});B(this,M,t),B(this,W,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Ee(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await we(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-${`${Ee(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(s),n)return n;try{n=await we(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 ie(A(this,W)).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(kt,{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 ie(A(this,W)).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(kt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};M=new WeakMap,W=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}),x=(e,t,r="horizontal")=>({label:e,alignment:r,type:DetailItemType.TEXT,value:t});var pe=(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 Pt=e=>Object.keys(e).includes("unlockedUnstaked"),bt=e=>Object.keys(e).includes("locked");function ke(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 Nt=({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 y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(I=>{if(I.assetId!==i)return;let S=(c[f]??0n)+BigInt(I.amount);c[f]=S;});}let p=new TokenUnit(c.unlockedUnstaked?c.unlockedUnstaked:0n,t.decimals,t.symbol),d=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ke(e),t.decimals,t.symbol),h=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:m.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:p.toSubUnit(),availableInCurrency:d,availableDisplayValue:p.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:s}};var Rt=({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 y=l[f];if(!y||!y.length){c[f]=0n;continue}y.forEach(I=>{if(I.assetId!==i)return;let S=(c[f]??0n)+BigInt(I.amount);c[f]=S;});}let p=new TokenUnit(c.unlocked?c.unlocked:0n,t.decimals,t.symbol),d=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ke(e),t.decimals,t.symbol),h=r!==void 0?m.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:m.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:p.toSubUnit(),availableInCurrency:d,availableDisplayValue:p.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 Et=async({addresses:e,currency:t,network:r,glacierService:a,tokenService:n})=>{let o=await D({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,d=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,m=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:d,network:m,addresses:e.join(",")}).then(Z=>Z.balances),f=p?await n.getSimplePrice({coinIds:[p],currencies:[i]}):{},y=f?.[p??""]?.[i]?.price??void 0,I=f?.[p??""]?.[i]?.marketCap??void 0,C=f?.[p??""]?.[i]?.vol24??void 0,S=f?.[p??""]?.[i]?.change24??void 0,b;return Pt(h)?(b=Nt({balance:h,networkToken:l,priceInCurrency:y,marketCap:I,vol24:C,change24:S,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):bt(h)?(b=Rt({balance:h,networkToken:l,priceInCurrency:y,marketCap:I,vol24:C,change24:S,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):Promise.reject("Incorrect type balance was returned from glacier")};function Mt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=_r.createHash("sha256").update(r).digest("base64");return "avax:"+Ur(a).substring(0,32)}var Ur=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Ut=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 D({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 Or=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")])]),Ft=e=>Or.safeParse(e);var Xt=async({request:e,network:t,approvalController:r})=>{let a=Ft(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} requests you 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 Hr=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()}),Ht=e=>Hr.safeParse(e);var Wt=({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 Pe=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 $t=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";case TxType.ConvertSubnetToL1:return "Convert Subnet to L1";case TxType.DisableL1Validator:return "Disable L1 Validator";case TxType.IncreaseL1ValidatorBalance:return "Increase L1 Validator Balance";case TxType.RegisterL1Validator:return "Register L1 Validator";case TxType.SetL1ValidatorWeight:return "Set L1 Validator Weight";default:return "Sign Message"}};var Me=async({indices:e,chainAlias:t,isChange:r,isTestnet:a,xpubXP:n})=>{if(!n||r&&t!=="X")return [];let o=await D({isTestnet:a});return e.map(s=>Avalanche.getAddressFromXpub(n,s,o,t,r))};var Le=e=>e.type===TxType.AddPermissionlessDelegator,_e=e=>e.type===TxType.AddPermissionlessValidator,Ue=e=>e.type===TxType.Export,Fe=e=>e.type===TxType.Import,$r=e=>e.type===TxType.Base,Oe=e=>e.type===TxType.AddSubnetValidator,jr=e=>e.type===TxType.CreateChain,qr=e=>e.type===TxType.CreateSubnet,Xe=e=>e.type===TxType.RemoveSubnetValidator,jt=e=>e.type===TxType.ConvertSubnetToL1,qt=e=>e.type===TxType.DisableL1Validator,Jt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Kt=e=>e.type===TxType.RegisterL1Validator,zt=e=>e.type===TxType.SetL1ValidatorWeight,Ao=e=>Le(e)||_e(e)||Oe(e)||Xe(e),vo=e=>Ue(e)||Fe(e),Yt=e=>$r(e),Zt=e=>jr(e),Qt=e=>qr(e);var w=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(w||{});function be(e){return e===Avalanche.MainnetContext.pBlockchainID}var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:c}=e,l=[T("Node ID",n),be(c)?x("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",i,9,t),V("Start Date",o),V("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 Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:c,subnetID:l,signature:p,publicKey:d}=e,m=[T("Node ID",n),be(l)?x("Subnet ID","Primary Network"):T("Subnet ID",l)];return d&&p&&m.push(T("Public Key",d),T("Proof",p)),m.push(u("Stake Amount",c,9,t),x("Delegation Fee",`${o/1e4} %`),V("Start Date",s),V("End Date",i)),r.push({title:"Staking Details",items:m}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,c=[T("Subnet ID",i),T("Node ID",n),V("Start Date",o),V("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 $e=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),pe("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:p,nodeId:d,remainingBalanceOwners:m,deactivationOwners:h},f)=>{let y=[T("Node ID",d),u("Balance",l,9,t),u("Stake",p,9,t)];h.length>0&&y.push(x(`${h.length>1?"Owners":"Owner"} Able to Deactivate`,h.join(`
|
|
13
|
-
`),"vertical")),m.length>0&&
|
|
14
|
-
`),"vertical")),r.push({title:f===0?"Validators":void 0,items:
|
|
15
|
-
`),"vertical"),x("Signature Threshold",`${n}/${o.length}`,"vertical")]}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ye=(e,t)=>{let r=[],{txFee:a,chainID:n,chainName:o,vmID:s,genesisData:i}=e,c=[x("Blockchain name",o,"vertical"),x("Blockchain ID",n,"vertical"),x("Virtual Machine ID",s,"vertical"),x("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 Ze=(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 Qe=(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 et=(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 tt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ce=(e,t)=>{if(Yt(e))return Ke(e,t);if(Ue(e))return je(e,t);if(Fe(e))return qe(e,t);if(Qt(e))return ze(e,t);if(Le(e))return He(e,t);if(_e(e))return Ge(e,t);if(Zt(e))return Ye(e,t);if(Oe(e))return We(e,t);if(Xe(e))return Je(e,t);if(jt(e))return $e(e,t);if(qt(e))return Ze(e,t);if(Jt(e))return Qe(e,t);if(Kt(e))return et(e,t);if(zt(e))return tt(e,t)};var Qr=process.env.GLACIER_API_KEY,tr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Ht(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,d=Avalanche.getVmByChainAlias(i),m=utils.hexToBuffer(s),h=t.isTestnet??!1,f=await D({isTestnet:h}),y=e.context?.currentAddress;if(!y||typeof y!="string")return {error:rpcErrors.invalidRequest("No active account found")};let I=Wt({utxoHexes:p,vm:d}),C=I.length?I:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:h?Network.FUJI:Network.MAINNET,url:a,token:Qr,headers:X(n)}),S;if(i==="C")S=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:m,vm:d,utxos:C,fromAddress:y});else {let te=utils.unpackWithManager(d,m),N=e.context?.xpubXP;if(N!==void 0&&typeof N!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let Re=await Me({indices:c??[],chainAlias:i,isChange:!1,isTestnet:h,xpubXP:N}),Be=await Me({indices:l??[],chainAlias:i,isChange:!0,isTestnet:h,xpubXP:N}),lr=[...new Set([y,...Re,...Be])].map(mr=>utils.parse(mr)[2]);S=await Avalanche.createAvalancheUnsignedTx({tx:te,utxos:C,provider:f,fromAddressBytes:lr});}let b=await Avalanche.parseAvalancheTx(S,f,y),Z=Pe(b),Q=$t(b);if(b.type==="unknown"||Z===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let xe={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(S.toJSON()),data:b,vm:d,externalIndices:c,internalIndices:l},ye=Ce(Z,t.networkToken.symbol);if(ye===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Te={title:Q,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:ye,networkFeeSelector:!1},ee=await r.requestApproval({request:e,displayData:Te,signingData:xe});if("error"in ee)return {error:ee.error};let _=await ea(f,ee,d);return ta({provider:f,txHash:_,vm:d,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:e.requestId}),{result:_}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},ea=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ta=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(i){console.error(i),i instanceof Error&&i.message.startsWith("Max retry exceeded.")||n(t,o);}};var ra=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),rr=e=>ra.safeParse(e);var oa=process.env.GLACIER_API_KEY,or=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=rr(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),d=t.isTestnet??!1,m=await D({isTestnet:d}),h=utils.unpackWithManager(l,p),f=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:d?Network.FUJI:Network.MAINNET,url:a,token:oa,headers:X(n)}),y;try{let N=utils.getManagerForVM(l).unpack(p,avaxSerial.SignedTx),Re=await Avalanche.createAvalancheUnsignedTx({tx:h,utxos:f,provider:m,credentials:N.getCredentials()});y=h.getSigIndices().map((Be,st)=>new Credential(Avalanche.populateCredential(Be,{unsignedTx:Re,credentialIndex:st})));}catch{y=h.getSigIndices().map(N=>new Credential(Avalanche.populateCredential(N)));}let I=await Avalanche.createAvalancheUnsignedTx({tx:h,provider:m,credentials:y,utxos:f}),C=utils.addressesFromBytes([utils.parse(c)[2]])[0];if(!C)return {error:rpcErrors.invalidRequest("Missing signer address")};let S=I.getSigIndicesForAddress(C);if(!S)return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let b=I.getSigIndices();if(!S.some(([te,N])=>b[te]?.includes(N)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Q=await Avalanche.parseAvalancheTx(I,m,c),xe=Pe(Q);if(Q.type==="unknown"||xe===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let ye={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Q,vm:l,unsignedTxJson:JSON.stringify(I.toJSON()),ownSignatureIndices:S},Te=Ce(xe,t.networkToken.symbol);if(Te===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let ee={title:"Sign Transaction",dAppInfo:{name:e.dappInfo.name,action:`${e.dappInfo.name} requests you to sign the following transaction`,logoUri:e.dappInfo.icon},network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:Te},_=await r.requestApproval({request:e,displayData:ee,signingData:ye});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var at=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ge=({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 ir=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=at(e)?ge(e).AVM:void 0,o=at(e)?ge(e).CoreEth:void 0,s=await D({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 K,fe,z,L,Y,cr=class{constructor({approvalController:t,environment:r,appInfo:a}){R(this,K,void 0);R(this,fe,void 0);R(this,z,void 0);R(this,L,void 0);R(this,Y,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=It(r);B(this,Y,a),B(this,K,new Se({glacierApiUrl:n,headers:X(a)})),B(this,fe,o),B(this,z,n),B(this,L,t);}getProvider(t){return D({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Ut({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new le({storage:a,proxyApiUrl:A(this,fe)});return Et({addresses:t,currency:n,network:r,glacierService:A(this,K),tokenService:o})}getManifest(){let t=parseManifest(ct);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return mt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return At({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,K)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ge(t)}async deriveAddress(t){return ir({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Xt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return or({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return tr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return Mt({blockchainId:t,isTestnet:r})}};K=new WeakMap,fe=new WeakMap,z=new WeakMap,L=new WeakMap,Y=new WeakMap;var Oi=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Xi=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
|
|
12
|
+
var pr=Object.defineProperty;var dr=(e,t,r)=>t in e?pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var U=(e,t,r)=>(dr(e,typeof t!="symbol"?t+"":t,r),r),it=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var A=(e,t,r)=>(it(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)=>(it(e,t,"write to private field"),a?a.call(e,r):t.set(e,r),r);var ct={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 mt({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 ut=e=>e.chainInfo.chainName===PrimaryNetworkChainName.P_CHAIN,ht=e=>e.chainInfo.chainName===PrimaryNetworkChainName.X_CHAIN;function Ae(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 ft({tx:e,address:t,networkToken:r,chainId:a,explorerUrl:n,isTestnet:o}){let s=new Set(e.consumedUtxos.flatMap(m=>m.addresses)||[]),i=new Set(e.emittedUtxos.flatMap(m=>m.addresses)||[]),c=fr({tx:e,isTestnet:o,networkToken:r,froms:s}),l=yr({tx:e,isTestnet:o,networkToken:r}),p=t.toLowerCase().startsWith("p-")?t.slice(2):t,d=s.has(p);return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.values()].join(","),to:[...i.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:Ae(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function fr({tx:e,isTestnet:t,networkToken:r,froms:a}){let n=["ImportTx","ExportTx"].includes(e.txType),o=e.txType==="BaseTx",s=e.emittedUtxos.filter(m=>m.asset.assetId===re(!!t)&&!m.addresses.some(h=>a.has(h))).reduce((m,h)=>m.add(h.asset.amount),new E(0)),i=e.value.find(m=>m.assetId===re(!!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(m=>m.asset.assetId===re(!!t)&&(e.txType==="ImportTx"&&m.consumedOnChainId===l||e.txType==="ExportTx"&&m.consumedOnChainId!==l)).reduce((m,h)=>m.add(h.amount),new E(0)),d=o?c:n?p:e.amountStaked.length===0?gt(e.value,!!t):gt(e.amountStaked,!!t);return F({amount:d?.toNumber(),decimals:r.decimals})}function yr({tx:e,isTestnet:t,networkToken:r}){let a=e.amountBurned?.filter(n=>n.assetId===re(!!t)).reduce((n,o)=>n.add(o.amount),new E(0));return F({amount:a?.toNumber(),decimals:r.decimals})}function gt(e,t){return e.filter(r=>r.assetId===re(t)).reduce((r,a)=>r.add(a.amount),new E(0))}function re(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}function yt({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:d}=Tr({tx:e,isTestnet:o,networkToken:r,chainAddress:c,isImportExport:l}),m=Ar({isTestnet:o,tx:e,networkToken:r}),h=l?p.toString():d?p.minus(m).toString():p.toString();return {hash:e.txHash,isContractCall:!1,isIncoming:!d,isOutgoing:d,from:[...s.values()].join(","),to:[...i.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:m.toString(),explorerLink:Ae(n??"",e.txHash,"tx"),txType:e.txType,chainId:a.toString()}}function Tr({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(d=>d.asset.assetId===ne(!!t)&&(e.txType==="ImportTx"&&d.consumedOnChainId===l||e.txType==="ExportTx"&&d.consumedOnChainId!==l)).reduce((d,m)=>d.add(m.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===ne(!!t)&&l.addresses.includes(a)).reduce((l,p)=>l.add(p.asset.amount),new E(0)),s=e.emittedUtxos.filter(l=>l.asset.assetId===ne(!!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 Ar({isTestnet:e,tx:t,networkToken:r}){let a=t.amountUnlocked.filter(s=>s.assetId===ne(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),n=t.amountCreated.filter(s=>s.assetId===ne(!!e)).reduce((s,i)=>s.add(i.amount),new E(0)),o=a.minus(n);return F({amount:o.toNumber(),decimals:r.decimals})}function ne(e){return e?Avalanche.FujiContext.avaxAssetID:Avalanche.MainnetContext.avaxAssetID}var At=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,d=await n.listLatestPrimaryNetworkTransactions({addresses:e,blockchainId:Dr(e),network:p,pageSize:r,pageToken:t,sortOrder:SortOrder.DESC}),m=[];return ut(d)&&(m=d.transactions.map(h=>ft({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),ht(d)&&(m=d.transactions.map(h=>yt({tx:h,isTestnet:o,address:e,networkToken:s,explorerUrl:i,chainId:c}))),{transactions:m,nextPageToken:d.nextPageToken}},Dr=e=>e.split(",")[0]?.toLowerCase().startsWith("p-")?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN;var Ir={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Sr={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Dt=e=>{switch(e){case Environment.PRODUCTION:return Ir;case Environment.DEV:return Sr}};var Ie=class extends Error{constructor(){super(...arguments);U(this,"message","Glacier is unhealthy. Try again later.");}},Se=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});}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 Ie&&this.setGlacierToUnhealthy(),r}}async getChainBalance(t){try{return this.glacierSdk.primaryNetworkBalances.getBalancesByAddresses(t)}catch(r){throw r instanceof Ie&&this.setGlacierToUnhealthy(),r}}};var O=async({operation:e,isSuccess:t,maxRetries:r=10,backoffPolicy:a=oe.exponential()})=>{let n=0,o=0,s;for(;o<r;){o>0&&await Pr(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)},oe=class{static exponential(){return t=>Math.pow(2,t)*1e3}static constant(t){return r=>t*1e3}static constantMs(t){return r=>t}};function Pr(e){return new Promise(t=>setTimeout(t,e))}var Be=e=>O({operation:t=>e(t>0),maxRetries:2,backoffPolicy:oe.constant(1),isSuccess:t=>t?.status?.error_code!==429});function It(e){let t,r=0;for(t=0;t<e.length;t++)r+=e.charCodeAt(t)*(t+1);return r}function Ee(e){let t,r=0;for(t=0;t<e.length;t++){let a=It(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 ie=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 kt=getBasicCoingeckoHttp(),M,W,le=class{constructor({storage:t,proxyApiUrl:r}){w(this,M,void 0);w(this,W,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});R(this,M,t),R(this,W,r);}async getSimplePrice({coinIds:t=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${t?`${Ee(t)}-${r.toString()}`:`${r.toString()}`}`;if(a=A(this,M)?.get?.(o),a)return a;try{a=await Be(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-${`${Ee(t)}-${r}-${a}`}`;if(n=A(this,M)?.get?.(s),n)return n;try{n=await Be(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 ie(A(this,W)).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(kt,{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 ie(A(this,W)).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(kt,{coinIds:t,currencies:r,marketCap:a,vol24:n,change24:o,lastUpdated:s,shouldThrow:c})}};M=new WeakMap,W=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 pe=(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 Pt=e=>Object.keys(e).includes("unlockedUnstaked"),bt=e=>Object.keys(e).includes("locked");function ke(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 Nt=({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),d=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ke(e),t.decimals,t.symbol),h=r?m.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {...t,type:TokenType.NATIVE,priceInCurrency:r,balance:m.toSubUnit(),balanceInCurrency:h,balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:h?.toFixed(2),available:p.toSubUnit(),availableInCurrency:d,availableDisplayValue:p.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:s}};var wt=({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),d=r?p.mul(r).toDisplay({fixedDp:2,asNumber:!0}):void 0,m=new TokenUnit(ke(e),t.decimals,t.symbol),h=r!==void 0?m.mul(r):void 0;return {...t,coingeckoId:s,type:TokenType.NATIVE,priceInCurrency:r,balance:m.toSubUnit(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceDisplayValue:m.toDisplay(),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),available:p.toSubUnit(),availableInCurrency:d,availableDisplayValue:p.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 Et=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,d=r.vmName===NetworkVMType.PVM?BlockchainId.P_CHAIN:BlockchainId.X_CHAIN,m=r.isTestnet?Network.FUJI:Network.MAINNET,h=await a.getChainBalance({blockchainId:d,network:m,addresses:e.join(",")}).then(Z=>Z.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 Pt(h)?(b=Nt({balance:h,networkToken:l,priceInCurrency:x,marketCap:D,vol24:C,change24:S,coingeckoId:p??"",avaxAssetId:o.getContext().avaxAssetID}),{[c]:{[l.symbol]:b}}):bt(h)?(b=wt({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 Mt({blockchainId:e,isTestnet:t}){let r=t?"fuji"+e:e,a=_r.createHash("sha256").update(r).digest("base64");return "avax:"+Ur(a).substring(0,32)}var Ur=e=>e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");var Ut=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 Or=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")])]),Ft=e=>Or.safeParse(e);var Xt=async({request:e,network:t,approvalController:r})=>{let a=Ft(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 Hr=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()}),Ht=e=>Hr.safeParse(e);var Wt=({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 Pe=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 $t=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 Me=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 Le=e=>e.type===TxType.AddPermissionlessDelegator,_e=e=>e.type===TxType.AddPermissionlessValidator,Ue=e=>e.type===TxType.Export,Fe=e=>e.type===TxType.Import,$r=e=>e.type===TxType.Base,Oe=e=>e.type===TxType.AddSubnetValidator,jr=e=>e.type===TxType.CreateChain,qr=e=>e.type===TxType.CreateSubnet,Xe=e=>e.type===TxType.RemoveSubnetValidator,jt=e=>e.type===TxType.ConvertSubnetToL1,qt=e=>e.type===TxType.DisableL1Validator,Jt=e=>e.type===TxType.IncreaseL1ValidatorBalance,Kt=e=>e.type===TxType.RegisterL1Validator,zt=e=>e.type===TxType.SetL1ValidatorWeight,Ao=e=>Le(e)||_e(e)||Oe(e)||Xe(e),vo=e=>Ue(e)||Fe(e),Yt=e=>$r(e),Zt=e=>jr(e),Qt=e=>qr(e);var B=(a=>(a.AVM="X-Chain",a.PVM="P-Chain",a.EVM="C-Chain",a))(B||{});function be(e){return e===Avalanche.MainnetContext.pBlockchainID}var He=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,stake:i,subnetID:c}=e,l=[T("Node ID",n),be(c)?y("Subnet ID","Primary Network"):T("Subnet ID",c),u("Stake Amount",i,9,t),V("Start Date",o),V("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 Ge=(e,t)=>{let r=[],{txFee:a,nodeID:n,delegationFee:o,start:s,end:i,stake:c,subnetID:l,signature:p,publicKey:d}=e,m=[T("Node ID",n),be(l)?y("Subnet ID","Primary Network"):T("Subnet ID",l)];return d&&p&&m.push(T("Public Key",d),T("Proof",p)),m.push(u("Stake Amount",c,9,t),y("Delegation Fee",`${o/1e4} %`),V("Start Date",s),V("End Date",i)),r.push({title:"Staking Details",items:m}),a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var We=(e,t)=>{let r=[],{txFee:a,nodeID:n,start:o,end:s,subnetID:i}=e,c=[T("Subnet ID",i),T("Node ID",n),V("Start Date",o),V("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 $e=(e,t)=>{let r=[],{txFee:a,chainID:n,managerAddress:o,subnetID:s,validators:i}=e,c=[T("Subnet ID",s),T("Chain ID",n),pe("Manager Address",o)];return r.push({title:"L1 Details",items:c}),i.forEach(({balance:l,stake:p,nodeId:d,remainingBalanceOwners:m,deactivationOwners:h},f)=>{let x=[T("Node ID",d),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")),m.length>0&&x.push(y(`${m.length>1?"Owners":"Owner"} of the Remaining Balance`,m.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 je=(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 qe=(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 Je=(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 Ke=(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=>[pe("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 ze=(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 Ye=(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 Ze=(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 Qe=(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 et=(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 tt=(e,t)=>{let r=[],{txFee:a}=e;return a&&r.push({title:"Network Fee",items:[u("Fee Amount",a,9,t)]}),r};var Ce=(e,t)=>{if(Yt(e))return Ke(e,t);if(Ue(e))return je(e,t);if(Fe(e))return qe(e,t);if(Qt(e))return ze(e,t);if(Le(e))return He(e,t);if(_e(e))return Ge(e,t);if(Zt(e))return Ye(e,t);if(Oe(e))return We(e,t);if(Xe(e))return Je(e,t);if(jt(e))return $e(e,t);if(qt(e))return Ze(e,t);if(Jt(e))return Qe(e,t);if(Kt(e))return et(e,t);if(zt(e))return tt(e,t)};var Qr=process.env.GLACIER_API_KEY,tr=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=Ht(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,d=Avalanche.getVmByChainAlias(i),m=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=Wt({utxoHexes:p,vm:d}),C=D.length?D:await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:h?Network.FUJI:Network.MAINNET,url:a,token:Qr,headers:X(n)}),S;if(i==="C")S=await Avalanche.createAvalancheEvmUnsignedTx({txBytes:m,vm:d,utxos:C,fromAddress:x});else {let te=utils.unpackWithManager(d,m),N=e.context?.xpubXP;if(N!==void 0&&typeof N!="string")return {error:rpcErrors.invalidParams("xpubXP must be a string")};let we=await Me({indices:c??[],chainAlias:i,isChange:!1,isTestnet:h,xpubXP:N}),Re=await Me({indices:l??[],chainAlias:i,isChange:!0,isTestnet:h,xpubXP:N}),lr=[...new Set([x,...we,...Re])].map(mr=>utils.parse(mr)[2]);S=await Avalanche.createAvalancheUnsignedTx({tx:te,utxos:C,provider:f,fromAddressBytes:lr});}let b=await Avalanche.parseAvalancheTx(S,f,x),Z=Pe(b),Q=$t(b);if(b.type==="unknown"||Z===void 0)return {error:rpcErrors.internal("Unable to parse transaction data. Unsupported tx type")};let ye={type:RpcMethod.AVALANCHE_SEND_TRANSACTION,unsignedTxJson:JSON.stringify(S.toJSON()),data:b,vm:d,externalIndices:c,internalIndices:l},xe=Ce(Z,t.networkToken.symbol);if(xe===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let Te={title:Q,network:{chainId:t.chainId,name:t.chainName,logoUri:t.logoUri},details:xe,networkFeeSelector:!1},ee=await r.requestApproval({request:e,displayData:Te,signingData:ye});if("error"in ee)return {error:ee.error};let _=await ea(f,ee,d);return ta({provider:f,txHash:_,vm:d,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:e.requestId}),{result:_}}catch(s){return console.error(s),{error:rpcErrors.internal({message:"Unable to create transaction",data:{cause:s}})}}},ea=async(e,t,r)=>{if("txHash"in t)return t.txHash;let{txID:a}=await e.issueTxHex(t.signedData,r);return a},ta=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(i){console.error(i),i instanceof Error&&i.message.startsWith("Max retry exceeded.")||n(t,o);}};var ra=z$1.object({from:z$1.string().describe("Avalanche receiving address"),transactionHex:z$1.string(),chainAlias:z$1.enum(["X","P","C"])}),rr=e=>ra.safeParse(e);var oa=process.env.GLACIER_API_KEY,or=async({request:e,network:t,approvalController:r,glacierApiUrl:a,appInfo:n})=>{let o=rr(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),d=t.isTestnet??!1,m=await I({isTestnet:d}),h=utils.unpackWithManager(l,p),f=await Avalanche.getUtxosByTxFromGlacier({transactionHex:s,chainAlias:i,network:d?Network.FUJI:Network.MAINNET,url:a,token:oa,headers:X(n)}),x;try{let N=utils.getManagerForVM(l).unpack(p,avaxSerial.SignedTx),we=await Avalanche.createAvalancheUnsignedTx({tx:h,utxos:f,provider:m,credentials:N.getCredentials()});x=h.getSigIndices().map((Re,st)=>new Credential(Avalanche.populateCredential(Re,{unsignedTx:we,credentialIndex:st})));}catch{x=h.getSigIndices().map(N=>new Credential(Avalanche.populateCredential(N)));}let D=await Avalanche.createAvalancheUnsignedTx({tx:h,provider:m,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(([te,N])=>b[te]?.includes(N)))return {error:rpcErrors.invalidRequest("This account has nothing to sign")};let Q=await Avalanche.parseAvalancheTx(D,m,c),ye=Pe(Q);if(Q.type==="unknown"||ye===void 0)return {error:rpcErrors.invalidParams("Unable to parse transaction data. Unsupported tx type")};let xe={type:RpcMethod.AVALANCHE_SIGN_TRANSACTION,data:Q,vm:l,unsignedTxJson:JSON.stringify(D.toJSON()),ownSignatureIndices:S},Te=Ce(ye,t.networkToken.symbol);if(Te===void 0)return {error:rpcErrors.internal("Unable to parse transaction display data. Unsupported tx type")};let ee={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:Te},_=await r.requestApproval({request:e,displayData:ee,signingData:xe});return "error"in _?{error:_.error}:"signedData"in _?{result:_.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}};var at=e=>"derivationPathType"in e&&"accountIndex"in e&&typeof e.accountIndex=="number"&&typeof e.derivationPathType=="string";var ge=({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 ir=async e=>{let{approvalController:t,network:r,secretId:a}=e,n=at(e)?ge(e).AVM:void 0,o=at(e)?ge(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 K,fe,z,L,Y,cr=class{constructor({approvalController:t,environment:r,appInfo:a}){w(this,K,void 0);w(this,fe,void 0);w(this,z,void 0);w(this,L,void 0);w(this,Y,void 0);let{glacierApiUrl:n,proxyApiUrl:o}=Dt(r);R(this,Y,a),R(this,K,new Se({glacierApiUrl:n,headers:X(a)})),R(this,fe,o),R(this,z,n),R(this,L,t);}getProvider(t){return I({isTestnet:!!t.isTestnet})}getAddress({accountIndex:t,xpubXP:r,walletType:a,network:n}){return Ut({accountIndex:t,xpubXP:r,walletType:a,network:n})}getBalances({addresses:t,network:r,storage:a,currency:n}){let o=new le({storage:a,proxyApiUrl:A(this,fe)});return Et({addresses:t,currency:n,network:r,glacierService:A(this,K),tokenService:o})}getManifest(){let t=parseManifest(ct);return t.success?t.data:void 0}getNetworkFee(t){let{isTestnet:r,vmName:a}=t;return mt({isTestnet:!!r,vmName:a})}getTransactionHistory({network:t,address:r,nextPageToken:a,offset:n}){return At({network:t,address:r,nextPageToken:a,offset:n,glacierService:A(this,K)})}getTokens(t){return Promise.resolve([])}buildDerivationPath(t){return ge(t)}async deriveAddress(t){return ir({...t,approvalController:A(this,L)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.AVALANCHE_SIGN_MESSAGE:return Xt({request:t,network:r,approvalController:A(this,L)});case RpcMethod.AVALANCHE_SIGN_TRANSACTION:return or({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});case RpcMethod.AVALANCHE_SEND_TRANSACTION:return tr({request:t,network:r,approvalController:A(this,L),glacierApiUrl:A(this,z),appInfo:A(this,Y)});default:return {error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}static getHashedBlockchainId({blockchainId:t,isTestnet:r}){return Mt({blockchainId:t,isTestnet:r})}};K=new WeakMap,fe=new WeakMap,z=new WeakMap,L=new WeakMap,Y=new WeakMap;var Oi=e=>"balancePerType"in e&&"unlockedUnstaked"in e.balancePerType,Xi=e=>"balancePerType"in e&&"unlocked"in e.balancePerType;
|
|
16
16
|
|
|
17
17
|
export { cr as AvalancheModule, Le as isAddPermissionlessDelegatorTx, _e as isAddPermissionlessValidatorTx, Oe as isAddSubnetValidatorTx, $r as isBaseTx, Zt as isBlockchainDetails, Yt as isChainDetails, jt as isConvertSubnetToL1Tx, jr as isCreateChainTx, qr as isCreateSubnetTx, qt as isDisableL1ValidatorTx, vo as isExportImportTxDetails, Ue as isExportTx, Fe as isImportTx, Jt as isIncreaseL1ValidatorBalanceTx, Kt as isRegisterL1ValidatorTx, Xe as isRemoveSubnetValidatorTx, zt as isSetL1ValidatorWeightTx, Ao as isStakingDetails, Qt as isSubnetDetails, Xi as isTokenWithBalanceAVM, Oi as isTokenWithBalancePVM };
|
|
18
18
|
//# sourceMappingURL=out.js.map
|