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