@avalabs/evm-module 3.13.0 → 3.13.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 CHANGED
@@ -43,12 +43,14 @@ Message
43
43
  `;}),t},"beautifySimpleMessage"),ye=chunkVYIKXRYZ_cjs.a(e=>{let t={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return e.split("").map(r=>t[r]||r).join("")},"toUnicodeBold");var Qe=zod.z.string().describe("message"),q=zod.z.string().describe("address");var Fn=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([q,Qe])});var Mn=zod.z.object({name:zod.z.string(),type:zod.z.string()}),we=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Mn)}).catchall(zod.z.array(Mn)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),mr=zod.z.array(zod.z.object({type:zod.z.string(),name:zod.z.string(),value:zod.z.union([zod.z.string(),zod.z.number(),zod.z.boolean(),zod.z.object({}).passthrough(),zod.z.array(zod.z.unknown()),zod.z.null()])})).nonempty(),dr=we.or(mr),Ln=zod.z.union([zod.z.string().describe("data string"),we]),Gn=zod.z.union([zod.z.string().describe("data string"),dr]),Vn=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([q,Gn])}),Hn=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([q,Gn])}),On=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([q,Ln])}),$n=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([q,Ln])});var Wn=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Qe,q]),zod.z.tuple([Qe,q,zod.z.string().optional().describe("password")])])});var go=zod.z.discriminatedUnion("method",[Wn,Fn,Vn,Hn,On,$n]).transform((e,t)=>{let{method:r,params:n}=e;switch(r){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let a=n[0],i=n[1];if(typeof i!="string")return {data:i,address:a,method:r};try{let s=JSON.parse(i);return {data:dr.parse(s),address:a,method:r}}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:{let a=n[0],i=n[1];if(typeof i!="string")return {data:i,address:a,method:r};try{let s=JSON.parse(i);return {data:we.parse(s),address:a,method:r}}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function jn(e){return go.safeParse(e)}chunkVYIKXRYZ_cjs.a(jn,"parseRequestParams");var qn=chunkVYIKXRYZ_cjs.a(e=>mr.safeParse(e).success,"isTypedDataV1"),wd=chunkVYIKXRYZ_cjs.a(e=>we.safeParse(e).success,"isTypedData");var zn=chunkVYIKXRYZ_cjs.a(e=>{try{let{EIP712Domain:t,...r}=e.types;return ethers.TypedDataEncoder.getPayload(e.domain,r,e.message),{isValid:!0}}catch(t){return {isValid:!1,error:t}}},"isTypedDataValid");var Kn=chunkVYIKXRYZ_cjs.a(async({request:e,network:t,approvalController:r,blockaid:n})=>{let a=jn({method:e.method,params:e.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams(j("Params are invalid",a.error))};let{method:i,data:s,address:c}=a.data,l;(i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(l=zn(s));let p,m,u;if(l&&!l.isValid&&(u={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:l.error.toString()}}),i===vmModuleTypes.RpcMethod.ETH_SIGN)p={type:i,account:c,data:s},m=s;else if(i===vmModuleTypes.RpcMethod.PERSONAL_SIGN)p={type:i,account:c,data:s},m=ethers.toUtf8String(s);else if(i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)p={type:i,account:c,data:s},m=qn(s)?Bn(s):lr(s);else if(i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||i===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){p={type:i,account:c,data:s};let{types:P,primaryType:v,...w}=s;m=lr(w);}if(!p||!m)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let f=await In({request:e,accountAddress:c,chainId:t.chainId,data:{method:i,params:e.params},dAppUrl:e.dappInfo.url,blockaid:n}),y=Ne(e),g=y?await ae({declaration:y,rpcUrl:t.rpcUrl,chainId:t.chainId,chainName:t.chainName,customRpcHeaders:t.customRpcHeaders}):void 0,k={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},account:c,details:[{title:"Message",items:[V("Message",m,"vertical")]},...g?[Se(g)]:[]],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},T=await r.requestApproval({request:e,displayData:k,signingData:p});return "error"in T?{error:T.error}:"signedData"in T?{result:T.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}},"ethSign");var Yn=chunkVYIKXRYZ_cjs.a(async(e,t)=>{try{return {result:await(await M({chainId:t.chainId,chainName:t.chainName,rpcUrl:t.rpcUrl,pollingInterval:1e3,customRpcHeaders:t.customRpcHeaders})).send(e.method,e.params)}}catch(r){let n=r.info?.error??r.error;return n&&typeof n.code=="number"?{error:n}:{error:rpcErrors.rpcErrors.internal(r.message)}}},"forwardToRpcNode");var Xn=chunkVYIKXRYZ_cjs.a(async({accountIndex:e,xpub:t,walletType:r})=>{switch(r){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(t,e)};case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{let n=Buffer.from(t,"hex");return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getEvmAddressFromPubKey(n)}}default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}},"getAddress");function Be(e,t){return e.then(r=>({id:t,status:"fulfilled",value:r})).catch(r=>({id:t,status:"rejected",reason:r}))}chunkVYIKXRYZ_cjs.a(Be,"addIdToPromise");async function Ue(e){return await Promise.allSettled(e).then(t=>t.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}chunkVYIKXRYZ_cjs.a(Ue,"settleAllIdPromises");var Ro={"ERC-20":vmModuleTypes.TokenType.ERC20,"ERC-721":vmModuleTypes.TokenType.ERC721,"ERC-1155":vmModuleTypes.TokenType.ERC1155,"NON-ERC":vmModuleTypes.TokenType.NONERC,SPL:vmModuleTypes.TokenType.SPL},Eo=zod.z.string().transform((e,t)=>{let r=Ro[e];return r||(t.addIssue({code:zod.z.ZodIssueCode.custom,message:`Unknown contractType: ${e}`}),zod.z.NEVER)}),Po=zod.z.object({address:zod.z.string(),chainId:zod.z.number(),contractType:Eo,decimals:zod.z.number(),internalId:zod.z.string().nullish(),isNative:zod.z.boolean(),logoUri:zod.z.string().nullish(),name:zod.z.string(),symbol:zod.z.string(),caip2Id:zod.z.string().nullish(),color:zod.z.string().nullish()}),Io=zod.z.array(zod.z.unknown()).transform(e=>e.flatMap(t=>{let r=Po.safeParse(t);return r.success?[r.data]:[]}));async function wt({chainId:e,proxyApiUrl:t}){return (await G([`${t}/tokens?evmChainId=${e}`],Io)).map(n=>({...n,type:n.contractType}))}chunkVYIKXRYZ_cjs.a(wt,"getTokens");var F,Fe,he,nt,Me,gr=class gr{constructor({network:t,storage:r,proxyApiUrl:n,customTokens:a,fetch:i}){chunkVYIKXRYZ_cjs.d(this,F,void 0);chunkVYIKXRYZ_cjs.d(this,Fe,void 0);chunkVYIKXRYZ_cjs.d(this,he,void 0);chunkVYIKXRYZ_cjs.d(this,nt,void 0);chunkVYIKXRYZ_cjs.d(this,Me,void 0);chunkVYIKXRYZ_cjs.e(this,F,t),chunkVYIKXRYZ_cjs.e(this,Fe,r),chunkVYIKXRYZ_cjs.e(this,he,n),chunkVYIKXRYZ_cjs.e(this,nt,a),chunkVYIKXRYZ_cjs.e(this,Me,i);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:t,address:r,currency:n}){let a=await M({chainId:t,chainName:chunkVYIKXRYZ_cjs.c(this,F).chainName,rpcUrl:chunkVYIKXRYZ_cjs.c(this,F).rpcUrl,multiContractAddress:chunkVYIKXRYZ_cjs.c(this,F).utilityAddresses?.multicall,customRpcHeaders:chunkVYIKXRYZ_cjs.c(this,F).customRpcHeaders}),i=chunkVYIKXRYZ_cjs.c(this,F).pricingProviders?.coingecko.nativeTokenId,s=chunkVYIKXRYZ_cjs.c(this,F).networkToken,c=new ne({storage:chunkVYIKXRYZ_cjs.c(this,Fe),proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,he),fetch:chunkVYIKXRYZ_cjs.c(this,Me)}),l=i?await c.getSimplePrice({coinIds:[i],currencies:[n]}):{},p=l?.[i??""]?.[n]?.price??void 0,m=l?.[i??""]?.[n]?.marketCap??void 0,u=l?.[i??""]?.[n]?.vol24??void 0,f=l?.[i??""]?.[n]?.change24??void 0,y=await a.getBalance(r),g=new coreUtilsSdk.TokenUnit(y,s.decimals,s.symbol),k=p!==void 0?g.mul(p):void 0;return {...s,coingeckoId:i??"",type:vmModuleTypes.TokenType.NATIVE,balance:y,balanceDisplayValue:g.toDisplay(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:m,vol24:u,change24:f}}async listErc20Balances({chainId:t,address:r,currency:n,customTokensOnly:a=!1}){let i=await M({chainId:t,chainName:chunkVYIKXRYZ_cjs.c(this,F).chainName,rpcUrl:chunkVYIKXRYZ_cjs.c(this,F).rpcUrl,multiContractAddress:chunkVYIKXRYZ_cjs.c(this,F).utilityAddresses?.multicall,customRpcHeaders:chunkVYIKXRYZ_cjs.c(this,F).customRpcHeaders}),s=chunkVYIKXRYZ_cjs.c(this,F).pricingProviders?.coingecko.assetPlatformId,c=chunkVYIKXRYZ_cjs.c(this,F).pricingProviders?.coingecko.nativeTokenId,l=a?[]:await wt({chainId:Number(t),proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,he)}),p=l.map(v=>v.address),m=[...l,...chunkVYIKXRYZ_cjs.c(this,nt)].filter(Pt),u=chunkVYIKXRYZ_cjs.a(async v=>{let x=await new ethers.ethers.Contract(v.address,Tn__default.default.abi,i).balanceOf?.(r)||0n;return {...v,balance:x}},"getTokenWithBalance"),f=m.map(v=>Be(u(v),v.address)),y=await Ue(f),g=new ne({storage:chunkVYIKXRYZ_cjs.c(this,Fe),proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,he),fetch:chunkVYIKXRYZ_cjs.c(this,Me)}),k=s&&await g.getPricesByAddresses(p,s,n)||{},T=Object.keys(y),P={};for(let v=0;v<T.length;v++){let w=T[v];if(w===void 0)continue;let N=y[w];if(N===void 0||"error"in N){P[w]={error:`rpcService:getTokenWithBalance failed: ${N?.error??"unknown error"}`};continue}let x=k?.[c??""]?.[n]?.price??void 0,pe=k?.[c??""]?.[n]?.marketCap??void 0,I=k?.[c??""]?.[n]?.vol24??void 0,A=k?.[c??""]?.[n]?.change24??void 0,B=new coreUtilsSdk.TokenUnit(N.balance,N.decimals,N.symbol),We=x!==void 0?B.mul(x):void 0;P[N.address.toLowerCase()]={...N,type:vmModuleTypes.TokenType.ERC20,balance:N.balance,balanceDisplayValue:B.toDisplay(),balanceInCurrency:We?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:We?.toDisplay({fixedDp:2}),priceInCurrency:x,marketCap:pe,change24:A,vol24:I,reputation:null};}return P}async listNftBalances(){return {}}};F=new WeakMap,Fe=new WeakMap,he=new WeakMap,nt=new WeakMap,Me=new WeakMap,chunkVYIKXRYZ_cjs.a(gr,"RpcService");var _t=gr;async function ea(e,t){let r=e.map(async(i,s)=>({index:s,result:await t(i)})),a=(await Promise.allSettled(r)).filter(i=>i.status==="fulfilled").map(i=>i).find(i=>i.value.result);return a?e[a.value.index]:void 0}chunkVYIKXRYZ_cjs.a(ea,"findAsync");var ta=chunkVYIKXRYZ_cjs.a(async({addresses:e,currency:t,network:r,proxyApiUrl:n,tokenTypes:a=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:i=[],customTokensOnly:s=!1,storage:c,balanceServices:l=[],tokenService:p,fetch:m})=>{let u=r.chainId,f=new _t({network:r,storage:c,proxyApiUrl:n,customTokens:i,fetch:m}),y=s?[f]:[...l,f],g=s?[vmModuleTypes.TokenType.ERC20]:a,k=await ea(y,P=>P.isNetworkSupported(r.chainId)),T={};if(k){let P=[],v=[],w=[];e.forEach(I=>{g.includes(vmModuleTypes.TokenType.NATIVE)&&P.push(Be(k.getNativeBalance({address:I,currency:t.toUpperCase(),chainId:u}).then(async A=>{if(A.symbol==="AVAX"){let B=await p.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:t.toUpperCase()});return {...A,priceInCurrency:B.priceInCurrency,marketCap:B.marketCap,vol24:B.vol24,change24:B.change24}}return A}),I)),g.includes(vmModuleTypes.TokenType.ERC20)&&v.push(Be(k.listErc20Balances({customTokens:i.filter(Pt),customTokensOnly:s,currency:t.toUpperCase(),chainId:u,address:I,pageSize:100}),I)),(g.includes(vmModuleTypes.TokenType.ERC721)||g.includes(vmModuleTypes.TokenType.ERC1155))&&w.push(Be(k.listNftBalances({chainId:u,address:I}),I));});let N=await Ue(P),x=await Ue(v),pe=await Ue(w);Object.keys(N).forEach(I=>{let A=N[I];if(!A||"error"in A){T[I]={error:`getNativeBalance failed: ${A?.error??"unknown error"}`};return}let B=A.symbol;T[I]={[B]:A};}),Object.keys(x).forEach(I=>{let A=x[I];!A||"error"in A&&typeof A.error!="string"?T[I]={...T[I],error:"listErc20Balances failed: unknown error"}:"error"in A&&typeof A.error=="string"?T[I]={...T[I],error:`listErc20Balances failed: ${A.error}`}:T[I]={...T[I],...A};}),Object.keys(pe).forEach(I=>{let A=pe[I];!A||"error"in A&&typeof A.error!="string"?T[I]={...T[I],error:"listNftBalances failed: unknown error"}:"error"in A&&typeof A.error=="string"?T[I]={...T[I],error:`listNftBalances failed: ${A.error}`}:T[I]={...T[I],...A};});}else e.forEach(P=>{T[P]={error:"unsupported network"};});return T},"getBalances");var yr={LOW:1n,MEDIUM:4n,HIGH:6n},hr=500000000n,xo=chunkVYIKXRYZ_cjs.a(e=>e===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||e===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID,"isCChain"),aa=137,sa=80002,Co=chunkVYIKXRYZ_cjs.a(e=>e===aa||e===sa,"isPolygon"),No={[aa]:"https://gasstation.polygon.technology/v2",[sa]:"https://gasstation.polygon.technology/amoy"};function Te(e){return BigInt(Math.round(e*1e9))}chunkVYIKXRYZ_cjs.a(Te,"gweiToWei");async function wo(e){let t=No[e];if(!t)throw new Error(`No gas station URL for Polygon chain ${e}`);let r=await fetch(t);if(!r.ok)throw new Error(`Polygon Gas Station returned ${r.status}`);let n=await r.json();return {baseFee:Te(n.estimatedBaseFee),low:{maxFeePerGas:Te(n.safeLow.maxFee),maxPriorityFeePerGas:Te(n.safeLow.maxPriorityFee)},medium:{maxFeePerGas:Te(n.standard.maxFee),maxPriorityFeePerGas:Te(n.standard.maxPriorityFee)},high:{maxFeePerGas:Te(n.fast.maxFee),maxPriorityFeePerGas:Te(n.fast.maxPriorityFee)},isFixedFee:!1,displayDecimals:9}}chunkVYIKXRYZ_cjs.a(wo,"getPolygonGasStationFees");async function oa({chainId:e,chainName:t,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:i,customRpcHeaders:s}){let c=await M({chainId:e,chainName:t,rpcUrl:r,multiContractAddress:n,customRpcHeaders:s});if(!i)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(xo(e))try{let v=await _o(c);return {...v,baseFee:v.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}if(Co(e))try{return await wo(e)}catch{console.error("Polygon Gas Station call failed, falling back to generic fee fetching");}let l=await c.getBlock("latest",!1);if(!l)throw rpcErrors.rpcErrors.internal("There is no block");let p=l.baseFeePerGas;if(!p)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let m=await Do(i,a),u=new coreUtilsSdk.TokenUnit(m,0,""),f=new coreUtilsSdk.TokenUnit(p,0,""),y=BigInt("1000000000"),g=f.mul(u).add(y).toSubUnit(),k=hr*yr.LOW,T=hr*yr.MEDIUM,P=hr*yr.HIGH;return {baseFee:g,low:{maxFeePerGas:g+k,maxPriorityFeePerGas:k},medium:{maxFeePerGas:g+T,maxPriorityFeePerGas:T},high:{maxFeePerGas:g+P,maxPriorityFeePerGas:P},isFixedFee:!1,displayDecimals:9}}chunkVYIKXRYZ_cjs.a(oa,"getNetworkFee");async function _o(e){let t=await e.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(t.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(t.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(t.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.fast.maxPriorityFeePerGas)}}}chunkVYIKXRYZ_cjs.a(_o,"suggestPriceOptions");async function Do(e,t){if(!t)return 1.5;try{let n=await fetch(`${e}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[t]??a.default}catch{return 1.5}}chunkVYIKXRYZ_cjs.a(Do,"getGasMultiplier");function ca(e){return e===vmModuleTypes.TokenType.ERC721||e===vmModuleTypes.TokenType.ERC1155}chunkVYIKXRYZ_cjs.a(ca,"isNftTokenType");function Tr(e){let{txType:t,isSender:r,walletAddress:n,tokens:a}=e;if(a.length===0)return t;let i=n.toLowerCase(),s=a.some(m=>ca(m.type)&&m.to?.address?.toLowerCase()===i),c=a.some(m=>ca(m.type)&&m.from?.address?.toLowerCase()===i),l=t===vmModuleTypes.TransactionType.RECEIVE||t===vmModuleTypes.TransactionType.UNKNOWN||t===vmModuleTypes.TransactionType.TRANSFER||t===vmModuleTypes.TransactionType.AIRDROP,p=t===vmModuleTypes.TransactionType.SEND||t===vmModuleTypes.TransactionType.UNKNOWN||t===vmModuleTypes.TransactionType.TRANSFER||t===vmModuleTypes.TransactionType.AIRDROP;return !r&&s&&l?vmModuleTypes.TransactionType.NFT_RECEIVE:r&&c&&p?vmModuleTypes.TransactionType.NFT_SEND:t}chunkVYIKXRYZ_cjs.a(Tr,"convertTransactionType");var la=chunkVYIKXRYZ_cjs.a(({nativeTransaction:e,erc20Transfers:t,erc721Transfers:r,erc1155Transfers:n},a,i)=>{let s=!t&&!r&&!n,c=Uo(e.method?.methodName),l=a.toLowerCase(),p=c.toLowerCase().includes("swap"),m=s&&e.from.address.toLowerCase()===l,u=s&&e.to.address.toLowerCase()===l,f=c==="Market Buy Orders With Eth"||c==="Buy NFT",y=c==="Approve",g=c.toLowerCase().includes("transfer"),k=c.toLowerCase().includes("airdrop"),T=c.toLowerCase().includes("unwrap"),P=c==="Fill Order",v;p?v=vmModuleTypes.TransactionType.SWAP:m?v=vmModuleTypes.TransactionType.SEND:u?v=vmModuleTypes.TransactionType.RECEIVE:f?v=vmModuleTypes.TransactionType.NFT_BUY:y?v=vmModuleTypes.TransactionType.APPROVE:g?v=vmModuleTypes.TransactionType.TRANSFER:k?v=vmModuleTypes.TransactionType.AIRDROP:T?v=vmModuleTypes.TransactionType.UNWRAP:P?v=vmModuleTypes.TransactionType.FILL_ORDER:v=vmModuleTypes.TransactionType.UNKNOWN;let w=e.from.address.toLowerCase()===l;return Tr({txType:v,isSender:w,walletAddress:a,tokens:i})},"getTxType"),Uo=chunkVYIKXRYZ_cjs.a((e="")=>e.includes("(")?Bo__default.default(e.split("(",1)[0]):e,"parseRawMethod");function pa({tx:e,networkToken:t,explorerUrl:r,chainId:n,address:a}){let i=e.from_address.toLowerCase()===a.toLowerCase(),s=new Date(e.block_timestamp).getTime(),c=Lo(e.category),l=!Fo.has(e.category),p=Ho(e,t,a),m=se(r,e.hash);return c=Tr({txType:c,isSender:i,walletAddress:a,tokens:p}),{isContractCall:l,isIncoming:!i,isOutgoing:i,isSender:i,timestamp:s,hash:e.hash,from:e.from_address,to:e.to_address??"",tokens:p,gasPrice:e.gas_price,gasUsed:e.receipt_gas_used,chainId:n.toString(),txType:c,method:e.method_label??void 0,explorerLink:m}}chunkVYIKXRYZ_cjs.a(pa,"convertMoralisTransaction");var Fo=new Set(["send","receive","token send","token receive"]),Mo={send:vmModuleTypes.TransactionType.SEND,receive:vmModuleTypes.TransactionType.RECEIVE,"token send":vmModuleTypes.TransactionType.SEND,"token receive":vmModuleTypes.TransactionType.RECEIVE,"nft send":vmModuleTypes.TransactionType.NFT_SEND,"nft receive":vmModuleTypes.TransactionType.NFT_RECEIVE,"token swap":vmModuleTypes.TransactionType.SWAP,"nft purchase":vmModuleTypes.TransactionType.NFT_BUY,"nft sale":vmModuleTypes.TransactionType.NFT_SEND,airdrop:vmModuleTypes.TransactionType.AIRDROP,mint:vmModuleTypes.TransactionType.NFT_BUY,burn:vmModuleTypes.TransactionType.UNKNOWN,deposit:vmModuleTypes.TransactionType.UNKNOWN,withdraw:vmModuleTypes.TransactionType.UNKNOWN,borrow:vmModuleTypes.TransactionType.UNKNOWN,"contract interaction":vmModuleTypes.TransactionType.UNKNOWN};function Lo(e){return Mo[e]??vmModuleTypes.TransactionType.UNKNOWN}chunkVYIKXRYZ_cjs.a(Lo,"getMoralisTransactionType");function ce(e){if(!(e==null||e===""))return {address:e}}chunkVYIKXRYZ_cjs.a(ce,"getTransferAddress");function Dt(e){return e?.trim()??""}chunkVYIKXRYZ_cjs.a(Dt,"trimOrEmpty");function Go(e){let t=e.trim().toLowerCase();return !t.startsWith("0x")||t.length<12?e.trim():`${t.slice(0,6)}\u2026${t.slice(-4)}`}chunkVYIKXRYZ_cjs.a(Go,"shortenHexAddress");function Vo(e){let t=Dt(e.token_symbol);if(t!=="")return t;let r=Dt(e.token_name);return r!==""?r:Go(e.address)}chunkVYIKXRYZ_cjs.a(Vo,"getErc20DisplaySymbol");function Ho(e,t,r){let n=[],a=e.native_transfers.map(s=>Oo(s,t)),i=e.erc20_transfers.map(s=>$o(s));n.push(...a,...i);for(let s of e.nft_transfers)n.push(Wo(s));return n.length===0&&n.push(jo(e,t,r)),n}chunkVYIKXRYZ_cjs.a(Ho,"buildTokens");function Oo(e,t){let r=Dt(e.token_symbol)||t.symbol,n=new coreUtilsSdk.TokenUnit(e.value,t.decimals,r);return {decimal:t.decimals.toString(),name:t.name,symbol:r,amount:n.toDisplay(),from:ce(e.from_address),to:ce(e.to_address),type:vmModuleTypes.TokenType.NATIVE}}chunkVYIKXRYZ_cjs.a(Oo,"buildNativeToken");function $o(e){let t=Number(e.token_decimals),r=Vo(e),n=new coreUtilsSdk.TokenUnit(e.value,t,r),a=Dt(e.token_name)||r;return {decimal:e.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:ce(e.from_address),to:ce(e.to_address),type:vmModuleTypes.TokenType.ERC20,address:e.address}}chunkVYIKXRYZ_cjs.a($o,"buildErc20Token");function Wo(e){let t=e.contract_type==="ERC1155"?vmModuleTypes.TokenType.ERC1155:vmModuleTypes.TokenType.ERC721;return {name:"",symbol:"",amount:e.amount,collectableTokenId:e.token_id,from:ce(e.from_address),to:ce(e.to_address),type:t,address:e.token_address}}chunkVYIKXRYZ_cjs.a(Wo,"buildNftToken");function jo(e,t,r){let n=new coreUtilsSdk.TokenUnit(e.value,t.decimals,t.symbol),i=e.from_address.toLowerCase()===r.toLowerCase()?`-${n.toDisplay()}`:n.toDisplay();return {decimal:t.decimals.toString(),name:t.name,symbol:t.symbol,amount:i,from:ce(e.from_address),to:ce(e.to_address),type:vmModuleTypes.TokenType.NATIVE}}chunkVYIKXRYZ_cjs.a(jo,"buildFallbackNativeToken");var qo="https://proxy-api.avax.network/proxy/moralis-evm";async function ma({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}){try{let s=`0x${e.toString(16)}`,c=new URLSearchParams({chain:s,limit:(i??25).toString()});a&&c.set("cursor",a);let l=`${qo}/wallets/${n}/history?${c.toString()}`,p=await fetch(l);if(!p.ok)return {transactions:[],nextPageToken:""};let m=await p.json();return Array.isArray(m.result)?{transactions:m.result.filter(f=>f.receipt_status==="1").map(f=>pa({tx:f,networkToken:t,explorerUrl:r,chainId:e,address:n})),nextPageToken:m.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}chunkVYIKXRYZ_cjs.a(ma,"getTransactionsFromMoralis");var zo=new Set([1,4,5,11155111,8453,42161,10]);function da(e){return zo.has(e)}chunkVYIKXRYZ_cjs.a(da,"isMoralisSupportedChain");var ua=chunkVYIKXRYZ_cjs.a((e,{nativeTransaction:t,erc20Transfers:r,erc721Transfers:n},a)=>{let i=e===vmModuleTypes.TransactionType.TRANSFER,s=e===vmModuleTypes.TransactionType.SEND||e===vmModuleTypes.TransactionType.NFT_SEND,c=e===vmModuleTypes.TransactionType.RECEIVE||e===vmModuleTypes.TransactionType.NFT_RECEIVE,l=t?.from?.address,p=t?.to?.address;i&&r&&r[0]&&(l=r[0].from.address,p=r[0].to.address),i&&n&&n[0]&&(l=n[0].from.address,p=n[0].to.address);let m=s||i&&l.toLowerCase()===a.toLowerCase(),u=c||i&&p.toLowerCase()===a.toLowerCase();return {isOutgoing:m,isIncoming:u,isSender:l===a,from:l,to:p}},"getSenderInfo");async function ga(e){try{return e.then(t=>[t,null]).catch(t=>[null,t])}catch(t){return Promise.resolve([null,t])}}chunkVYIKXRYZ_cjs.a(ga,"resolve");var Yo="https://ipfs.io";function Le(e,t=Yo){if(!e)return "";try{return coreUtilsSdk.ipfsResolver(e,t)}catch{return e}}chunkVYIKXRYZ_cjs.a(Le,"ipfsResolverWithFallback");async function Jo(e,t=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),t),fetch(e,{signal:r.signal})}chunkVYIKXRYZ_cjs.a(Jo,"fetchWithTimeout");async function fa(e){let t={};if(e)if(e.startsWith("data:application/json;base64,")){let r=e.substring(29);try{let n=Buffer.from(r,"base64").toString();t=JSON.parse(n);}catch{t={};}}else t=await Jo(Le(e)).then(r=>r.json()).catch(()=>({}));else return {};return t}chunkVYIKXRYZ_cjs.a(fa,"getNftMetadata");var Xo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ya(e,t="256"){let r=Le(e);return `${Xo}/width=${t},fit/${r}`}chunkVYIKXRYZ_cjs.a(ya,"getSmallImageForNFT");var ka=chunkVYIKXRYZ_cjs.a(async({nativeTransaction:e,erc20Transfers:t,erc721Transfers:r,erc1155Transfers:n},a)=>{let i=[];if(e.value!=="0"){let s=a.decimals,l=new coreUtilsSdk.TokenUnit(e.value,a.decimals,a.symbol).toDisplay();i.push({decimal:s.toString(),name:a.name,symbol:a.symbol,amount:l,from:e.from,to:e.to,type:vmModuleTypes.TokenType.NATIVE});}return t?.forEach(s=>{let c=s.erc20Token.decimals,p=new coreUtilsSdk.TokenUnit(s.value,c,s.erc20Token.symbol).toDisplay();i.push({decimal:c.toString(),address:s.erc20Token.address,name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:p,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let c=s.erc721Token,l=await Ta(c.tokenUri,c.metadata.imageUri);i.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,address:s.erc721Token.address,amount:"1",imageUri:l,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let c=s.erc1155Token,l=await Ta(c.tokenUri,c.metadata.imageUri);i.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",address:s.erc1155Token.address,amount:s.value,imageUri:l,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),i},"getTokens"),Ta=chunkVYIKXRYZ_cjs.a(async(e,t)=>{if(t)return t.startsWith("ipfs://")?Le(t):t;{let[r,n]=await ga(fa(e));return n?"":r.image?ya(r.image):""}},"getImageUri");var ba=chunkVYIKXRYZ_cjs.a(async({transactions:e,explorerUrl:t,networkToken:r,chainId:n,address:a})=>{let i=await ka(e,r),s=la(e,a,i),{isOutgoing:c,isIncoming:l,isSender:p,from:m,to:u}=ua(s,e,a),{blockTimestamp:f,txHash:y,gasPrice:g,gasUsed:k}=e.nativeTransaction,T=se(t,y);return {isContractCall:!nn.includes(s),isIncoming:l,isOutgoing:c,isSender:p,timestamp:f*1e3,hash:y,from:m,to:u,tokens:i,gasPrice:g,gasUsed:k,chainId:n.toString(),txType:s,explorerLink:T}},"convertTransaction");var va=chunkVYIKXRYZ_cjs.a(async({chainId:e,explorerUrl:t,networkToken:r,address:n,nextPageToken:a,offset:i,glacierService:s})=>{try{let c=await s.listTransactions({chainId:e.toString(),address:n,pageToken:a,pageSize:i});return {transactions:(await Promise.all(c.transactions.filter(m=>m.nativeTransaction.txStatus==="1").map(m=>ba({transactions:m,explorerUrl:t,networkToken:r,chainId:e,address:n}).then(u=>u)))).filter(m=>m.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:c.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}},"getTransactionsFromGlacier");async function Ra({client:e,chainId:t,networkToken:r,explorerUrl:n,address:a,nextPageToken:i,offset:s=25}){try{let c=Zo(i),[l,p,m]=await Promise.all([e.listNormalTransactions(a,{page:c,offset:s}),e.listErc20Transfers(a,{page:c,offset:s}),e.listInternalTransactions(a,{page:c,offset:s})]),u=new Map;for(let g of l){if(g.isError!=="0"||g.txreceipt_status!=="1")continue;let k=vr(u,g),T=Qo(g,r);T&&k.tokens.push(T);}for(let g of p)vr(u,g).tokens.push(ti(g));for(let g of m){if(g.isError!=="0")continue;let k=vr(u,g),T=ei(g,r);T&&k.tokens.push(T);}let f=Array.from(u.values()).map(g=>ri(g,a,n,r,t)).sort((g,k)=>k.timestamp-g.timestamp),y=[l,p,m].some(g=>g.length===s);return {transactions:f,nextPageToken:y?String(c+1):""}}catch{return {transactions:[],nextPageToken:""}}}chunkVYIKXRYZ_cjs.a(Ra,"getTransactionsFromHyperEvm");function Zo(e){let t=Number(e);return Number.isSafeInteger(t)&&t>0?t:1}chunkVYIKXRYZ_cjs.a(Zo,"getPage");function vr(e,t){let r=e.get(t.hash);if(r)return r;let n={hash:t.hash,timestamp:Number(t.timeStamp)*1e3,from:t.from,to:t.to,gasPrice:"gasPrice"in t?t.gasPrice:void 0,gasUsed:t.gasUsed,isContractCall:"input"in t&&t.input!=="0x",tokens:[]};return e.set(t.hash,n),n}chunkVYIKXRYZ_cjs.a(vr,"getAggregate");function Qo(e,t){if(e.value!=="0")return {decimal:String(t.decimals),name:t.name,symbol:t.symbol,amount:new coreUtilsSdk.TokenUnit(e.value,t.decimals,t.symbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:vmModuleTypes.TokenType.NATIVE}}chunkVYIKXRYZ_cjs.a(Qo,"nativeToken");function ei(e,t){if(e.value!=="0")return {decimal:String(t.decimals),name:t.name,symbol:t.symbol,amount:new coreUtilsSdk.TokenUnit(e.value,t.decimals,t.symbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:vmModuleTypes.TokenType.NATIVE}}chunkVYIKXRYZ_cjs.a(ei,"internalToken");function ti(e){return {decimal:e.tokenDecimal,name:e.tokenName,symbol:e.tokenSymbol,amount:new coreUtilsSdk.TokenUnit(e.value,Number(e.tokenDecimal),e.tokenSymbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:vmModuleTypes.TokenType.ERC20,address:e.contractAddress}}chunkVYIKXRYZ_cjs.a(ti,"erc20Token");function ri(e,t,r,n,a){let i=t.toLowerCase(),s=e.tokens.some(m=>m.to?.address.toLowerCase()===i),c=e.tokens.some(m=>m.from?.address.toLowerCase()===i),l=e.from.toLowerCase()===i||c,p=s&&c?vmModuleTypes.TransactionType.SWAP:l?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE;return {isContractCall:e.isContractCall||s&&c,isIncoming:s&&!c,isOutgoing:c,isSender:l,timestamp:e.timestamp,hash:e.hash,from:e.from,to:e.to,tokens:e.tokens.length>0?e.tokens:[{decimal:String(n.decimals),name:n.name,symbol:n.symbol,amount:"0",type:vmModuleTypes.TokenType.NATIVE}],gasPrice:e.gasPrice,gasUsed:e.gasUsed,chainId:a.toString(),txType:p,explorerLink:se(r,e.hash)}}chunkVYIKXRYZ_cjs.a(ri,"toTransaction");var ni=999,Ea=chunkVYIKXRYZ_cjs.a(async({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i,glacierService:s,hyperEvmEtherscanClient:c})=>e===ni?c?Ra({client:c,chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}):{transactions:[],nextPageToken:""}:da(e)?ma({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}):s.isHealthy()?va({networkToken:t,explorerUrl:r,chainId:e,address:n,nextPageToken:a,offset:i,glacierService:s}):{transactions:[],nextPageToken:""},"getTransactionHistory");var si="https://ipfs.io";function Pa(e,t=si){if(!e)return "";try{return coreUtilsSdk.ipfsResolver(e,t)}catch{return e}}chunkVYIKXRYZ_cjs.a(Pa,"ipfsResolverWithFallback");var oi="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ft(e,t="256"){let r=Pa(e);return `${oi}/width=${t},fit/${r}`}chunkVYIKXRYZ_cjs.a(Ft,"getSmallImageForNFT");var Ge,Z,Er=class Er{constructor(t,r){this.baseUrl=t;chunkVYIKXRYZ_cjs.d(this,Ge,[]);chunkVYIKXRYZ_cjs.d(this,Z,void 0);chunkVYIKXRYZ_cjs.e(this,Z,r??fetch);}async isNetworkSupported(t){return (await this.getChainList()).some(n=>n.community_id===t)}async getChainInfo({chainId:t}){return (await this.getChainList()).find(n=>n.id===t)}async getTokenBalance({chainId:t,address:r,tokenId:n}){let a=await chunkVYIKXRYZ_cjs.c(this,Z).call(this,`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${t}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:t,address:r}){let n=await chunkVYIKXRYZ_cjs.c(this,Z).call(this,`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${t}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:t,address:r}){let n=await(chunkVYIKXRYZ_cjs.c(this,Z)??globalThis.fetch)(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${t}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(chunkVYIKXRYZ_cjs.c(this,Ge).length===0){let t=await chunkVYIKXRYZ_cjs.c(this,Z).call(this,`${this.baseUrl}/v1/chain/list`);if(t.ok)chunkVYIKXRYZ_cjs.e(this,Ge,await t.json());else throw new Error(`${t.status}:${t.statusText}`)}return chunkVYIKXRYZ_cjs.c(this,Ge)}async getNftList({address:t,chainId:r}){return G([`${this.baseUrl}/v1/user/nft_list?id=${t}&chain_id=${r}`],pi,chunkVYIKXRYZ_cjs.c(this,Z))}};Ge=new WeakMap,Z=new WeakMap,chunkVYIKXRYZ_cjs.a(Er,"DeBank");var Mt=Er,ci=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),li=ci.merge(zod.z.object({contract_id:zod.z.string(),description:zod.z.string().nullable(),content_type:zod.z.string().nullable(),content:zod.z.string(),thumbnail_url:zod.z.string(),total_supply:zod.z.number(),detail_url:zod.z.string(),collection_id:zod.z.string(),is_core:zod.z.boolean(),inner_id:zod.z.string(),collection_name:zod.z.string(),contract_name:zod.z.string(),amount:zod.z.number(),usd_price:zod.z.number().optional(),is_erc721:zod.z.boolean().optional(),is_erc1155:zod.z.boolean().optional()})),pi=zod.z.array(li);var z,Ve,Gt,Ht,Aa,Ir=class Ir{constructor({proxyApiUrl:t,fetch:r}){chunkVYIKXRYZ_cjs.d(this,Ve);chunkVYIKXRYZ_cjs.d(this,Ht);chunkVYIKXRYZ_cjs.d(this,z,void 0);chunkVYIKXRYZ_cjs.e(this,z,new Mt(`${t}/proxy/debank`,r));}async isNetworkSupported(t){return chunkVYIKXRYZ_cjs.c(this,z).isNetworkSupported(t)}async getNativeBalance({chainId:t,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:i}=await chunkVYIKXRYZ_cjs.f(this,Ve,Gt).call(this,t),s=a.native_token_id,c=await chunkVYIKXRYZ_cjs.c(this,z).getTokenBalance({address:r,chainId:i,tokenId:s}),l=new coreUtilsSdk.TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),u=(await ut()).usd[n.toLowerCase()],f=u?u*c.price:void 0,y=f?l.mul(f).toDisplay({fixedDp:2}):void 0,g=f?l.mul(f).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:g,balanceCurrencyDisplayValue:y,priceInCurrency:f}}async listErc20Balances({chainId:t,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:i}=await chunkVYIKXRYZ_cjs.f(this,Ve,Gt).call(this,t),s=await chunkVYIKXRYZ_cjs.c(this,z).getTokensBalanceOnChain({chainId:i,address:r}),c=await ut(),l={};for(let p of s){if(p.id===a.native_token_id||p.is_core===!1)continue;let m=new coreUtilsSdk.TokenUnit(p.raw_amount,p.decimals,p.symbol),u=m.toDisplay(),f=c.usd[n.toLowerCase()],y=f?f*p.price:void 0,g=y?m.mul(y).toDisplay({fixedDp:2}):void 0,k=y?m.mul(y).toDisplay({fixedDp:2,asNumber:!0}):void 0;l[p.id]={chainId:a.community_id,address:p.id,name:p.name,symbol:p.symbol,decimals:p.decimals,logoUri:p.logo_url,balance:m.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:u,balanceInCurrency:k,priceInCurrency:y,type:vmModuleTypes.TokenType.ERC20,reputation:null};}return l}async listNftBalances({chainId:t,address:r}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await chunkVYIKXRYZ_cjs.f(this,Ve,Gt).call(this,t),a=await chunkVYIKXRYZ_cjs.c(this,z).getNftList({chainId:n,address:r});return chunkVYIKXRYZ_cjs.f(this,Ht,Aa).call(this,a,t)}};z=new WeakMap,Ve=new WeakSet,Gt=chunkVYIKXRYZ_cjs.a(async function(t){let n=(await chunkVYIKXRYZ_cjs.c(this,z).getChainList()).find(i=>i.community_id===t)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+t);let a=await chunkVYIKXRYZ_cjs.c(this,z).getChainInfo({chainId:n});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+t);return {chainInfo:a,chainIdString:n}},"#getChainInfo"),Ht=new WeakSet,Aa=chunkVYIKXRYZ_cjs.a(function(t,r){return t.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:Ft(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:glacierSdk.NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})},"#mapNftList"),chunkVYIKXRYZ_cjs.a(Ir,"DeBankService");var Vt=Ir;var Sr=class Sr extends Error{constructor(){super(...arguments);chunkVYIKXRYZ_cjs.b(this,"message","Glacier is unhealthy. Try again later.");}};chunkVYIKXRYZ_cjs.a(Sr,"GlacierUnhealthyError");var Q=Sr,fi=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],xr=class xr{constructor({glacierApiUrl:t,headers:r}){chunkVYIKXRYZ_cjs.b(this,"glacierSdk");chunkVYIKXRYZ_cjs.b(this,"isGlacierHealthy",!0);chunkVYIKXRYZ_cjs.b(this,"supportedChainIds",[]);chunkVYIKXRYZ_cjs.b(this,"isHealthy",chunkVYIKXRYZ_cjs.a(()=>this.isGlacierHealthy,"isHealthy"));this.glacierSdk=new glacierSdk.Glacier({BASE:t,HEADERS:r},ze),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(t){return (await this.getSupportedChainIds()).some(n=>n===t.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let t=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=t.chains.map(r=>r.chainId).filter(r=>!fi.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:t,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:t,chainId:r,tokenId:n});}catch(a){throw a instanceof Q&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:t,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:t,chainId:r,tokenId:n})}catch(a){throw a instanceof Q&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:t,address:r,currency:n,coingeckoId:a}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:t.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,c=new coreUtilsSdk.TokenUnit(s.balance,s.decimals,s.symbol),l=s.price?.value,p=l!==void 0?c.mul(l):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:s.logoUri,balance:c.toSubUnit(),balanceDisplayValue:c.toDisplay(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),priceInCurrency:l,coingeckoId:a??""}}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}async listErc721Balances({chainId:t,address:r}){let n,a=[];do try{let i=await this.glacierSdk.evmBalances.listErc721Balances({chainId:t,address:r,pageSize:100,pageToken:n});a.push(...i.erc721TokenBalances),n=i.nextPageToken;}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}while(n);return a}async listErc1155Balances({chainId:t,address:r}){let n,a=[];do try{let i=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:t,address:r,pageSize:100,pageToken:n});a.push(...i.erc1155TokenBalances),n=i.nextPageToken;}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}while(n);return a}async listNftBalances({chainId:t,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:t.toString(),address:r}),this.listErc1155Balances({chainId:t.toString(),address:r})])).filter(i=>i.status==="fulfilled").flatMap(i=>i.value.filter(s=>s.ercType===glacierSdk.Erc721Token.ercType.ERC_721||BigInt(s.balance)>0n).map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:Ft(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,chainId:t,collectionName:"Unknown",balance:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:s.metadata.indexStatus,description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:t,address:r,currency:n,customTokens:a}){try{let i=[],s;do{let c=await this.glacierSdk.evmBalances.listErc20Balances({chainId:t.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});i.push(...hi(c.erc20TokenBalances,Number(t))),s=c.nextPageToken;}while(s);return [...yi(a),...i].reduce((c,l)=>({...c,[l.address.toLowerCase()]:l}),{})}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}async listTransactions({chainId:t,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:t,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}};chunkVYIKXRYZ_cjs.a(xr,"EvmGlacierService");var Ot=xr,yi=chunkVYIKXRYZ_cjs.a(e=>e.map(t=>({...t,decimals:t.decimals??18,type:vmModuleTypes.TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),"convertErc20TokenToTokenWithBalance"),hi=chunkVYIKXRYZ_cjs.a((e,t)=>e.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),i=r.balanceValue?.value.toString(),s=r.price?.value,c=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:t,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:i,balanceDisplayValue:a,balanceInCurrency:c,priceInCurrency:s,reputation:r.tokenReputation,type:vmModuleTypes.TokenType.ERC20}}),"convertErc20TokenWithBalanceToTokenWithBalance");var Ca=zod.z.object({blockNumber:zod.z.string(),timeStamp:zod.z.string(),hash:zod.z.string(),nonce:zod.z.string(),blockHash:zod.z.string(),transactionIndex:zod.z.string(),from:zod.z.string(),to:zod.z.string(),value:zod.z.string(),gas:zod.z.string(),gasPrice:zod.z.string(),isError:zod.z.string(),txreceipt_status:zod.z.string(),input:zod.z.string(),contractAddress:zod.z.string(),cumulativeGasUsed:zod.z.string(),gasUsed:zod.z.string(),confirmations:zod.z.string()}),Na=zod.z.object({blockNumber:zod.z.string(),timeStamp:zod.z.string(),hash:zod.z.string(),nonce:zod.z.string(),blockHash:zod.z.string(),from:zod.z.string(),contractAddress:zod.z.string(),to:zod.z.string(),value:zod.z.string(),tokenName:zod.z.string(),tokenSymbol:zod.z.string(),tokenDecimal:zod.z.string(),transactionIndex:zod.z.string(),gas:zod.z.string(),gasPrice:zod.z.string(),gasUsed:zod.z.string(),cumulativeGasUsed:zod.z.string(),input:zod.z.string(),confirmations:zod.z.string()}),wa=zod.z.object({blockNumber:zod.z.string(),timeStamp:zod.z.string(),hash:zod.z.string(),from:zod.z.string(),to:zod.z.string(),value:zod.z.string(),contractAddress:zod.z.string(),input:zod.z.string(),type:zod.z.string(),gas:zod.z.string(),gasUsed:zod.z.string(),traceId:zod.z.string(),isError:zod.z.string(),errCode:zod.z.string()});var Ti=chunkVYIKXRYZ_cjs.a(e=>{if(e)return e;if(typeof globalThis.fetch=="function")return globalThis.fetch.bind(globalThis);throw new Error("HyperEvmEtherscanClient requires a fetch implementation")},"resolveFetch"),ct,lt,Oe,$t,Cr=class Cr{constructor({proxyApiUrl:t,fetch:r}){chunkVYIKXRYZ_cjs.d(this,Oe);chunkVYIKXRYZ_cjs.d(this,ct,void 0);chunkVYIKXRYZ_cjs.d(this,lt,void 0);chunkVYIKXRYZ_cjs.e(this,ct,`${t}/proxy/etherscan/hyperevm/api`),chunkVYIKXRYZ_cjs.e(this,lt,Ti(r));}listNormalTransactions(t,r){return chunkVYIKXRYZ_cjs.f(this,Oe,$t).call(this,"txlist",t,Ca,r)}listErc20Transfers(t,r){return chunkVYIKXRYZ_cjs.f(this,Oe,$t).call(this,"tokentx",t,Na,r)}listInternalTransactions(t,r){return chunkVYIKXRYZ_cjs.f(this,Oe,$t).call(this,"txlistinternal",t,wa,r)}};ct=new WeakMap,lt=new WeakMap,Oe=new WeakSet,$t=chunkVYIKXRYZ_cjs.a(async function(t,r,n,a){let i=new URLSearchParams({module:"account",action:t,address:r,page:(a?.page??1).toString(),offset:(a?.offset??25).toString(),sort:"desc"}),s=await chunkVYIKXRYZ_cjs.c(this,lt).call(this,`${chunkVYIKXRYZ_cjs.c(this,ct)}?${i.toString()}`);if(!s.ok)throw new Error(`HyperEVM explorer request failed: ${s.status} ${s.statusText}`);let c=await s.json(),l=zod.z.object({status:zod.z.string(),message:zod.z.string(),result:zod.z.union([zod.z.array(n),zod.z.string()])}).parse(c);if(Array.isArray(l.result))return l.result;if(l.status==="0"&&l.message==="No transactions found")return [];throw new Error(l.result)},"#list"),chunkVYIKXRYZ_cjs.a(Cr,"HyperEvmEtherscanClient");var Wt=Cr;var $e,pt,le,K,ke,W,mt,Nr=class Nr{constructor({approvalController:t,environment:r,appInfo:n,runtime:a}){chunkVYIKXRYZ_cjs.d(this,$e,void 0);chunkVYIKXRYZ_cjs.d(this,pt,void 0);chunkVYIKXRYZ_cjs.d(this,le,void 0);chunkVYIKXRYZ_cjs.d(this,K,void 0);chunkVYIKXRYZ_cjs.d(this,ke,void 0);chunkVYIKXRYZ_cjs.d(this,W,void 0);chunkVYIKXRYZ_cjs.d(this,mt,void 0);let{glacierApiUrl:i,proxyApiUrl:s}=Or(r);chunkVYIKXRYZ_cjs.e(this,W,a),chunkVYIKXRYZ_cjs.e(this,$e,new Ot({glacierApiUrl:i,headers:Zt(n)})),chunkVYIKXRYZ_cjs.e(this,pt,new Vt({proxyApiUrl:s,fetch:chunkVYIKXRYZ_cjs.c(this,W)?.fetch})),chunkVYIKXRYZ_cjs.e(this,le,s),chunkVYIKXRYZ_cjs.e(this,mt,new Wt({proxyApiUrl:s,fetch:chunkVYIKXRYZ_cjs.c(this,W)?.fetch})),chunkVYIKXRYZ_cjs.e(this,K,t),chunkVYIKXRYZ_cjs.e(this,ke,new bi__default.default({baseURL:s+"/proxy/blockaid/",apiKey:Vr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}updateRuntimeParams(t){chunkVYIKXRYZ_cjs.e(this,W,{...chunkVYIKXRYZ_cjs.c(this,W),...t,features:{...chunkVYIKXRYZ_cjs.c(this,W)?.features,...t.features}});}getProvider(t){return M({chainId:t.chainId,chainName:t.chainName,rpcUrl:t.rpcUrl,multiContractAddress:t.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:t.customRpcHeaders})}getAddress({accountIndex:t,xpub:r,walletType:n}){return Xn({accountIndex:t,xpub:r,walletType:n})}buildDerivationPath(t){return Pe(t)}deriveAddress(t){return Zr({...t,approvalController:chunkVYIKXRYZ_cjs.c(this,K)})}deriveAddresses(t){return Qr({...t,approvalController:chunkVYIKXRYZ_cjs.c(this,K)})}getBalances({addresses:t,network:r,currency:n,customTokens:a,storage:i,tokenTypes:s,customTokensOnly:c}){let l=new ne({storage:i,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,le),fetch:chunkVYIKXRYZ_cjs.c(this,W)?.fetch});return ta({addresses:t,currency:n,network:r,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,le),customTokens:a,customTokensOnly:c,balanceServices:[chunkVYIKXRYZ_cjs.c(this,$e),chunkVYIKXRYZ_cjs.c(this,pt)],storage:i,tokenTypes:s,tokenService:l,fetch:chunkVYIKXRYZ_cjs.c(this,W)?.fetch})}getManifest(){let t=vmModuleTypes.parseManifest(Gr);return t.success?t.data:void 0}getNetworkFee(t){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:i,caipId:s,customRpcHeaders:c}=t;return oa({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:i?.multicall,caipId:s,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,le),customRpcHeaders:c})}getTransactionHistory(t){let{network:r,address:n,nextPageToken:a,offset:i}=t,{chainId:s,networkToken:c,explorerUrl:l=""}=r;return Ea({chainId:s,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:i,glacierService:chunkVYIKXRYZ_cjs.c(this,$e),hyperEvmEtherscanClient:chunkVYIKXRYZ_cjs.c(this,mt)})}getTokens(t){let{chainId:r}=t;return wt({chainId:r,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,le)})}async onRpcRequest(t,r){switch(t.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Dn({request:t,network:r,approvalController:chunkVYIKXRYZ_cjs.c(this,K),blockaid:chunkVYIKXRYZ_cjs.c(this,ke),eercEnabled:chunkVYIKXRYZ_cjs.c(this,W)?.features?.encryptedERCs===!0});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dn(chunkVYIKXRYZ_cjs.c(this,K))?xn({request:t,network:r,approvalController:chunkVYIKXRYZ_cjs.c(this,K),blockaid:chunkVYIKXRYZ_cjs.c(this,ke)}):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${t.method} requires BatchApprovalController`)};case vmModuleTypes.RpcMethod.AVALANCHE_DECLARE_AGENT_IDENTITY:return Jr({request:t,network:r});case vmModuleTypes.RpcMethod.PERSONAL_SIGN:case vmModuleTypes.RpcMethod.ETH_SIGN:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:return Kn({request:t,network:r,approvalController:chunkVYIKXRYZ_cjs.c(this,K),blockaid:chunkVYIKXRYZ_cjs.c(this,ke)});default:return vi(t.method)?Yn(t,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}};$e=new WeakMap,pt=new WeakMap,le=new WeakMap,K=new WeakMap,ke=new WeakMap,W=new WeakMap,mt=new WeakMap,chunkVYIKXRYZ_cjs.a(Nr,"EvmModule");var Da=Nr,vi=chunkVYIKXRYZ_cjs.a(e=>e.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(e),"shouldForwardToRpcNode");
44
44
 
45
45
  exports.ERC20TransactionType = J;
46
+ exports.EercOperation = cn;
46
47
  exports.EvmModule = Da;
47
48
  exports.NonContractCallTypes = nn;
48
49
  exports.TransactionKind = or;
49
50
  exports.addIdToPromise = Be;
50
51
  exports.isTypedData = wd;
51
52
  exports.isTypedDataV1 = qn;
53
+ exports.parseEercTransaction = ln;
52
54
  exports.settleAllIdPromises = Ue;
53
55
  //# sourceMappingURL=out.js.map
54
56
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -574,4 +574,25 @@ declare function addIdToPromise<T>(promise: Promise<T>, id: string): Promise<IdP
574
574
  */
575
575
  declare function settleAllIdPromises<T>(promises: Promise<IdPromise<T>>[]): Promise<Record<Id, T | Error>>;
576
576
 
577
- export { ERC20TransactionType, EvmModule, IdPromise, NonContractCallTypes, RequiredBy, TransactionBatchParams, TransactionKind, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, settleAllIdPromises };
577
+ declare enum EercOperation {
578
+ REGISTER = "register",
579
+ DEPOSIT = "deposit",
580
+ TRANSFER = "transfer",
581
+ WITHDRAW = "withdraw",
582
+ PRIVATE_MINT = "privateMint",
583
+ SET_AUDITOR_PUBLIC_KEY = "setAuditorPublicKey"
584
+ }
585
+ /**
586
+ * Recognizes an eERC (Encrypted ERC) transaction by matching its 4-byte function
587
+ * selector against the bundled eERC ABI. Recognition is interface-based and
588
+ * address-agnostic (there is no canonical eERC contract registry) and performs no
589
+ * network calls. A selector match is a decode hint, not a trust signal.
590
+ */
591
+ declare const parseEercTransaction: (transaction: {
592
+ data?: string;
593
+ value?: string;
594
+ }) => {
595
+ operation: EercOperation;
596
+ } | undefined;
597
+
598
+ export { ERC20TransactionType, EercOperation, EvmModule, IdPromise, NonContractCallTypes, RequiredBy, TransactionBatchParams, TransactionKind, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, parseEercTransaction, settleAllIdPromises };
package/dist/index.d.ts CHANGED
@@ -574,4 +574,25 @@ declare function addIdToPromise<T>(promise: Promise<T>, id: string): Promise<IdP
574
574
  */
575
575
  declare function settleAllIdPromises<T>(promises: Promise<IdPromise<T>>[]): Promise<Record<Id, T | Error>>;
576
576
 
577
- export { ERC20TransactionType, EvmModule, IdPromise, NonContractCallTypes, RequiredBy, TransactionBatchParams, TransactionKind, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, settleAllIdPromises };
577
+ declare enum EercOperation {
578
+ REGISTER = "register",
579
+ DEPOSIT = "deposit",
580
+ TRANSFER = "transfer",
581
+ WITHDRAW = "withdraw",
582
+ PRIVATE_MINT = "privateMint",
583
+ SET_AUDITOR_PUBLIC_KEY = "setAuditorPublicKey"
584
+ }
585
+ /**
586
+ * Recognizes an eERC (Encrypted ERC) transaction by matching its 4-byte function
587
+ * selector against the bundled eERC ABI. Recognition is interface-based and
588
+ * address-agnostic (there is no canonical eERC contract registry) and performs no
589
+ * network calls. A selector match is a decode hint, not a trust signal.
590
+ */
591
+ declare const parseEercTransaction: (transaction: {
592
+ data?: string;
593
+ value?: string;
594
+ }) => {
595
+ operation: EercOperation;
596
+ } | undefined;
597
+
598
+ export { ERC20TransactionType, EercOperation, EvmModule, IdPromise, NonContractCallTypes, RequiredBy, TransactionBatchParams, TransactionKind, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, parseEercTransaction, settleAllIdPromises };
package/dist/index.js CHANGED
@@ -33,6 +33,6 @@ Message
33
33
 
34
34
  `;}),t},"beautifySimpleMessage"),ye=a(e=>{let t={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return e.split("").map(r=>t[r]||r).join("")},"toUnicodeBold");var Qe=z$1.string().describe("message"),q=z$1.string().describe("address");var Fn=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([q,Qe])});var Mn=z$1.object({name:z$1.string(),type:z$1.string()}),we=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Mn)}).catchall(z$1.array(Mn)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),mr=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),dr=we.or(mr),Ln=z$1.union([z$1.string().describe("data string"),we]),Gn=z$1.union([z$1.string().describe("data string"),dr]),Vn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([q,Gn])}),Hn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([q,Gn])}),On=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([q,Ln])}),$n=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([q,Ln])});var Wn=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Qe,q]),z$1.tuple([Qe,q,z$1.string().optional().describe("password")])])});var go=z$1.discriminatedUnion("method",[Wn,Fn,Vn,Hn,On,$n]).transform((e,t)=>{let{method:r,params:n}=e;switch(r){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let a=n[0],i=n[1];if(typeof i!="string")return {data:i,address:a,method:r};try{let s=JSON.parse(i);return {data:dr.parse(s),address:a,method:r}}catch{return t.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let a=n[0],i=n[1];if(typeof i!="string")return {data:i,address:a,method:r};try{let s=JSON.parse(i);return {data:we.parse(s),address:a,method:r}}catch{return t.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function jn(e){return go.safeParse(e)}a(jn,"parseRequestParams");var qn=a(e=>mr.safeParse(e).success,"isTypedDataV1"),wd=a(e=>we.safeParse(e).success,"isTypedData");var zn=a(e=>{try{let{EIP712Domain:t,...r}=e.types;return TypedDataEncoder.getPayload(e.domain,r,e.message),{isValid:!0}}catch(t){return {isValid:!1,error:t}}},"isTypedDataValid");var Kn=a(async({request:e,network:t,approvalController:r,blockaid:n})=>{let a=jn({method:e.method,params:e.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(j("Params are invalid",a.error))};let{method:i,data:s,address:c}=a.data,l;(i===RpcMethod.SIGN_TYPED_DATA_V3||i===RpcMethod.SIGN_TYPED_DATA_V4)&&(l=zn(s));let p,m,u;if(l&&!l.isValid&&(u={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:l.error.toString()}}),i===RpcMethod.ETH_SIGN)p={type:i,account:c,data:s},m=s;else if(i===RpcMethod.PERSONAL_SIGN)p={type:i,account:c,data:s},m=toUtf8String(s);else if(i===RpcMethod.SIGN_TYPED_DATA||i===RpcMethod.SIGN_TYPED_DATA_V1)p={type:i,account:c,data:s},m=qn(s)?Bn(s):lr(s);else if(i===RpcMethod.SIGN_TYPED_DATA_V3||i===RpcMethod.SIGN_TYPED_DATA_V4){p={type:i,account:c,data:s};let{types:P,primaryType:v,...w}=s;m=lr(w);}if(!p||!m)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await In({request:e,accountAddress:c,chainId:t.chainId,data:{method:i,params:e.params},dAppUrl:e.dappInfo.url,blockaid:n}),y=Ne(e),g=y?await ae({declaration:y,rpcUrl:t.rpcUrl,chainId:t.chainId,chainName:t.chainName,customRpcHeaders:t.customRpcHeaders}):void 0,k={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},account:c,details:[{title:"Message",items:[V("Message",m,"vertical")]},...g?[Se(g)]:[]],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},T=await r.requestApproval({request:e,displayData:k,signingData:p});return "error"in T?{error:T.error}:"signedData"in T?{result:T.signedData}:{error:rpcErrors.internal("No signed data returned")}},"ethSign");var Yn=a(async(e,t)=>{try{return {result:await(await M({chainId:t.chainId,chainName:t.chainName,rpcUrl:t.rpcUrl,pollingInterval:1e3,customRpcHeaders:t.customRpcHeaders})).send(e.method,e.params)}}catch(r){let n=r.info?.error??r.error;return n&&typeof n.code=="number"?{error:n}:{error:rpcErrors.internal(r.message)}}},"forwardToRpcNode");var Xn=a(async({accountIndex:e,xpub:t,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(t,e)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(t,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}},"getAddress");function Be(e,t){return e.then(r=>({id:t,status:"fulfilled",value:r})).catch(r=>({id:t,status:"rejected",reason:r}))}a(Be,"addIdToPromise");async function Ue(e){return await Promise.allSettled(e).then(t=>t.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}a(Ue,"settleAllIdPromises");var Ro={"ERC-20":TokenType.ERC20,"ERC-721":TokenType.ERC721,"ERC-1155":TokenType.ERC1155,"NON-ERC":TokenType.NONERC,SPL:TokenType.SPL},Eo=z$1.string().transform((e,t)=>{let r=Ro[e];return r||(t.addIssue({code:z$1.ZodIssueCode.custom,message:`Unknown contractType: ${e}`}),z$1.NEVER)}),Po=z$1.object({address:z$1.string(),chainId:z$1.number(),contractType:Eo,decimals:z$1.number(),internalId:z$1.string().nullish(),isNative:z$1.boolean(),logoUri:z$1.string().nullish(),name:z$1.string(),symbol:z$1.string(),caip2Id:z$1.string().nullish(),color:z$1.string().nullish()}),Io=z$1.array(z$1.unknown()).transform(e=>e.flatMap(t=>{let r=Po.safeParse(t);return r.success?[r.data]:[]}));async function wt({chainId:e,proxyApiUrl:t}){return (await G([`${t}/tokens?evmChainId=${e}`],Io)).map(n=>({...n,type:n.contractType}))}a(wt,"getTokens");var F,Fe,he,nt,Me,gr=class gr{constructor({network:t,storage:r,proxyApiUrl:n,customTokens:a,fetch:i}){d(this,F,void 0);d(this,Fe,void 0);d(this,he,void 0);d(this,nt,void 0);d(this,Me,void 0);e(this,F,t),e(this,Fe,r),e(this,he,n),e(this,nt,a),e(this,Me,i);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:t,address:r,currency:n}){let a=await M({chainId:t,chainName:c(this,F).chainName,rpcUrl:c(this,F).rpcUrl,multiContractAddress:c(this,F).utilityAddresses?.multicall,customRpcHeaders:c(this,F).customRpcHeaders}),i=c(this,F).pricingProviders?.coingecko.nativeTokenId,s=c(this,F).networkToken,c$1=new ne({storage:c(this,Fe),proxyApiUrl:c(this,he),fetch:c(this,Me)}),l=i?await c$1.getSimplePrice({coinIds:[i],currencies:[n]}):{},p=l?.[i??""]?.[n]?.price??void 0,m=l?.[i??""]?.[n]?.marketCap??void 0,u=l?.[i??""]?.[n]?.vol24??void 0,f=l?.[i??""]?.[n]?.change24??void 0,y=await a.getBalance(r),g=new TokenUnit(y,s.decimals,s.symbol),k=p!==void 0?g.mul(p):void 0;return {...s,coingeckoId:i??"",type:TokenType.NATIVE,balance:y,balanceDisplayValue:g.toDisplay(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:m,vol24:u,change24:f}}async listErc20Balances({chainId:t,address:r,currency:n,customTokensOnly:a$1=!1}){let i=await M({chainId:t,chainName:c(this,F).chainName,rpcUrl:c(this,F).rpcUrl,multiContractAddress:c(this,F).utilityAddresses?.multicall,customRpcHeaders:c(this,F).customRpcHeaders}),s=c(this,F).pricingProviders?.coingecko.assetPlatformId,c$1=c(this,F).pricingProviders?.coingecko.nativeTokenId,l=a$1?[]:await wt({chainId:Number(t),proxyApiUrl:c(this,he)}),p=l.map(v=>v.address),m=[...l,...c(this,nt)].filter(Pt),u=a(async v=>{let x=await new ethers.Contract(v.address,Tn.abi,i).balanceOf?.(r)||0n;return {...v,balance:x}},"getTokenWithBalance"),f=m.map(v=>Be(u(v),v.address)),y=await Ue(f),g=new ne({storage:c(this,Fe),proxyApiUrl:c(this,he),fetch:c(this,Me)}),k=s&&await g.getPricesByAddresses(p,s,n)||{},T=Object.keys(y),P={};for(let v=0;v<T.length;v++){let w=T[v];if(w===void 0)continue;let N=y[w];if(N===void 0||"error"in N){P[w]={error:`rpcService:getTokenWithBalance failed: ${N?.error??"unknown error"}`};continue}let x=k?.[c$1??""]?.[n]?.price??void 0,pe=k?.[c$1??""]?.[n]?.marketCap??void 0,I=k?.[c$1??""]?.[n]?.vol24??void 0,A=k?.[c$1??""]?.[n]?.change24??void 0,B=new TokenUnit(N.balance,N.decimals,N.symbol),We=x!==void 0?B.mul(x):void 0;P[N.address.toLowerCase()]={...N,type:TokenType.ERC20,balance:N.balance,balanceDisplayValue:B.toDisplay(),balanceInCurrency:We?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:We?.toDisplay({fixedDp:2}),priceInCurrency:x,marketCap:pe,change24:A,vol24:I,reputation:null};}return P}async listNftBalances(){return {}}};F=new WeakMap,Fe=new WeakMap,he=new WeakMap,nt=new WeakMap,Me=new WeakMap,a(gr,"RpcService");var _t=gr;async function ea(e,t){let r=e.map(async(i,s)=>({index:s,result:await t(i)})),a=(await Promise.allSettled(r)).filter(i=>i.status==="fulfilled").map(i=>i).find(i=>i.value.result);return a?e[a.value.index]:void 0}a(ea,"findAsync");var ta=a(async({addresses:e,currency:t,network:r,proxyApiUrl:n,tokenTypes:a=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:i=[],customTokensOnly:s=!1,storage:c,balanceServices:l=[],tokenService:p,fetch:m})=>{let u=r.chainId,f=new _t({network:r,storage:c,proxyApiUrl:n,customTokens:i,fetch:m}),y=s?[f]:[...l,f],g=s?[TokenType.ERC20]:a,k=await ea(y,P=>P.isNetworkSupported(r.chainId)),T={};if(k){let P=[],v=[],w=[];e.forEach(I=>{g.includes(TokenType.NATIVE)&&P.push(Be(k.getNativeBalance({address:I,currency:t.toUpperCase(),chainId:u}).then(async A=>{if(A.symbol==="AVAX"){let B=await p.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:t.toUpperCase()});return {...A,priceInCurrency:B.priceInCurrency,marketCap:B.marketCap,vol24:B.vol24,change24:B.change24}}return A}),I)),g.includes(TokenType.ERC20)&&v.push(Be(k.listErc20Balances({customTokens:i.filter(Pt),customTokensOnly:s,currency:t.toUpperCase(),chainId:u,address:I,pageSize:100}),I)),(g.includes(TokenType.ERC721)||g.includes(TokenType.ERC1155))&&w.push(Be(k.listNftBalances({chainId:u,address:I}),I));});let N=await Ue(P),x=await Ue(v),pe=await Ue(w);Object.keys(N).forEach(I=>{let A=N[I];if(!A||"error"in A){T[I]={error:`getNativeBalance failed: ${A?.error??"unknown error"}`};return}let B=A.symbol;T[I]={[B]:A};}),Object.keys(x).forEach(I=>{let A=x[I];!A||"error"in A&&typeof A.error!="string"?T[I]={...T[I],error:"listErc20Balances failed: unknown error"}:"error"in A&&typeof A.error=="string"?T[I]={...T[I],error:`listErc20Balances failed: ${A.error}`}:T[I]={...T[I],...A};}),Object.keys(pe).forEach(I=>{let A=pe[I];!A||"error"in A&&typeof A.error!="string"?T[I]={...T[I],error:"listNftBalances failed: unknown error"}:"error"in A&&typeof A.error=="string"?T[I]={...T[I],error:`listNftBalances failed: ${A.error}`}:T[I]={...T[I],...A};});}else e.forEach(P=>{T[P]={error:"unsupported network"};});return T},"getBalances");var yr={LOW:1n,MEDIUM:4n,HIGH:6n},hr=500000000n,xo=a(e=>e===ChainId.AVALANCHE_TESTNET_ID||e===ChainId.AVALANCHE_MAINNET_ID,"isCChain"),aa=137,sa=80002,Co=a(e=>e===aa||e===sa,"isPolygon"),No={[aa]:"https://gasstation.polygon.technology/v2",[sa]:"https://gasstation.polygon.technology/amoy"};function Te(e){return BigInt(Math.round(e*1e9))}a(Te,"gweiToWei");async function wo(e){let t=No[e];if(!t)throw new Error(`No gas station URL for Polygon chain ${e}`);let r=await fetch(t);if(!r.ok)throw new Error(`Polygon Gas Station returned ${r.status}`);let n=await r.json();return {baseFee:Te(n.estimatedBaseFee),low:{maxFeePerGas:Te(n.safeLow.maxFee),maxPriorityFeePerGas:Te(n.safeLow.maxPriorityFee)},medium:{maxFeePerGas:Te(n.standard.maxFee),maxPriorityFeePerGas:Te(n.standard.maxPriorityFee)},high:{maxFeePerGas:Te(n.fast.maxFee),maxPriorityFeePerGas:Te(n.fast.maxPriorityFee)},isFixedFee:!1,displayDecimals:9}}a(wo,"getPolygonGasStationFees");async function oa({chainId:e,chainName:t,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:i,customRpcHeaders:s}){let c=await M({chainId:e,chainName:t,rpcUrl:r,multiContractAddress:n,customRpcHeaders:s});if(!i)throw rpcErrors.internal("Proxy API URL is needed");if(xo(e))try{let v=await _o(c);return {...v,baseFee:v.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}if(Co(e))try{return await wo(e)}catch{console.error("Polygon Gas Station call failed, falling back to generic fee fetching");}let l=await c.getBlock("latest",!1);if(!l)throw rpcErrors.internal("There is no block");let p=l.baseFeePerGas;if(!p)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let m=await Do(i,a),u=new TokenUnit(m,0,""),f=new TokenUnit(p,0,""),y=BigInt("1000000000"),g=f.mul(u).add(y).toSubUnit(),k=hr*yr.LOW,T=hr*yr.MEDIUM,P=hr*yr.HIGH;return {baseFee:g,low:{maxFeePerGas:g+k,maxPriorityFeePerGas:k},medium:{maxFeePerGas:g+T,maxPriorityFeePerGas:T},high:{maxFeePerGas:g+P,maxPriorityFeePerGas:P},isFixedFee:!1,displayDecimals:9}}a(oa,"getNetworkFee");async function _o(e){let t=await e.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(t.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(t.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(t.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(t.fast.maxPriorityFeePerGas)}}}a(_o,"suggestPriceOptions");async function Do(e,t){if(!t)return 1.5;try{let n=await fetch(`${e}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[t]??a.default}catch{return 1.5}}a(Do,"getGasMultiplier");function ca(e){return e===TokenType.ERC721||e===TokenType.ERC1155}a(ca,"isNftTokenType");function Tr(e){let{txType:t,isSender:r,walletAddress:n,tokens:a}=e;if(a.length===0)return t;let i=n.toLowerCase(),s=a.some(m=>ca(m.type)&&m.to?.address?.toLowerCase()===i),c=a.some(m=>ca(m.type)&&m.from?.address?.toLowerCase()===i),l=t===TransactionType.RECEIVE||t===TransactionType.UNKNOWN||t===TransactionType.TRANSFER||t===TransactionType.AIRDROP,p=t===TransactionType.SEND||t===TransactionType.UNKNOWN||t===TransactionType.TRANSFER||t===TransactionType.AIRDROP;return !r&&s&&l?TransactionType.NFT_RECEIVE:r&&c&&p?TransactionType.NFT_SEND:t}a(Tr,"convertTransactionType");var la=a(({nativeTransaction:e,erc20Transfers:t,erc721Transfers:r,erc1155Transfers:n},a,i)=>{let s=!t&&!r&&!n,c=Uo(e.method?.methodName),l=a.toLowerCase(),p=c.toLowerCase().includes("swap"),m=s&&e.from.address.toLowerCase()===l,u=s&&e.to.address.toLowerCase()===l,f=c==="Market Buy Orders With Eth"||c==="Buy NFT",y=c==="Approve",g=c.toLowerCase().includes("transfer"),k=c.toLowerCase().includes("airdrop"),T=c.toLowerCase().includes("unwrap"),P=c==="Fill Order",v;p?v=TransactionType.SWAP:m?v=TransactionType.SEND:u?v=TransactionType.RECEIVE:f?v=TransactionType.NFT_BUY:y?v=TransactionType.APPROVE:g?v=TransactionType.TRANSFER:k?v=TransactionType.AIRDROP:T?v=TransactionType.UNWRAP:P?v=TransactionType.FILL_ORDER:v=TransactionType.UNKNOWN;let w=e.from.address.toLowerCase()===l;return Tr({txType:v,isSender:w,walletAddress:a,tokens:i})},"getTxType"),Uo=a((e="")=>e.includes("(")?Bo(e.split("(",1)[0]):e,"parseRawMethod");function pa({tx:e,networkToken:t,explorerUrl:r,chainId:n,address:a}){let i=e.from_address.toLowerCase()===a.toLowerCase(),s=new Date(e.block_timestamp).getTime(),c=Lo(e.category),l=!Fo.has(e.category),p=Ho(e,t,a),m=se(r,e.hash);return c=Tr({txType:c,isSender:i,walletAddress:a,tokens:p}),{isContractCall:l,isIncoming:!i,isOutgoing:i,isSender:i,timestamp:s,hash:e.hash,from:e.from_address,to:e.to_address??"",tokens:p,gasPrice:e.gas_price,gasUsed:e.receipt_gas_used,chainId:n.toString(),txType:c,method:e.method_label??void 0,explorerLink:m}}a(pa,"convertMoralisTransaction");var Fo=new Set(["send","receive","token send","token receive"]),Mo={send:TransactionType.SEND,receive:TransactionType.RECEIVE,"token send":TransactionType.SEND,"token receive":TransactionType.RECEIVE,"nft send":TransactionType.NFT_SEND,"nft receive":TransactionType.NFT_RECEIVE,"token swap":TransactionType.SWAP,"nft purchase":TransactionType.NFT_BUY,"nft sale":TransactionType.NFT_SEND,airdrop:TransactionType.AIRDROP,mint:TransactionType.NFT_BUY,burn:TransactionType.UNKNOWN,deposit:TransactionType.UNKNOWN,withdraw:TransactionType.UNKNOWN,borrow:TransactionType.UNKNOWN,"contract interaction":TransactionType.UNKNOWN};function Lo(e){return Mo[e]??TransactionType.UNKNOWN}a(Lo,"getMoralisTransactionType");function ce(e){if(!(e==null||e===""))return {address:e}}a(ce,"getTransferAddress");function Dt(e){return e?.trim()??""}a(Dt,"trimOrEmpty");function Go(e){let t=e.trim().toLowerCase();return !t.startsWith("0x")||t.length<12?e.trim():`${t.slice(0,6)}\u2026${t.slice(-4)}`}a(Go,"shortenHexAddress");function Vo(e){let t=Dt(e.token_symbol);if(t!=="")return t;let r=Dt(e.token_name);return r!==""?r:Go(e.address)}a(Vo,"getErc20DisplaySymbol");function Ho(e,t,r){let n=[],a=e.native_transfers.map(s=>Oo(s,t)),i=e.erc20_transfers.map(s=>$o(s));n.push(...a,...i);for(let s of e.nft_transfers)n.push(Wo(s));return n.length===0&&n.push(jo(e,t,r)),n}a(Ho,"buildTokens");function Oo(e,t){let r=Dt(e.token_symbol)||t.symbol,n=new TokenUnit(e.value,t.decimals,r);return {decimal:t.decimals.toString(),name:t.name,symbol:r,amount:n.toDisplay(),from:ce(e.from_address),to:ce(e.to_address),type:TokenType.NATIVE}}a(Oo,"buildNativeToken");function $o(e){let t=Number(e.token_decimals),r=Vo(e),n=new TokenUnit(e.value,t,r),a=Dt(e.token_name)||r;return {decimal:e.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:ce(e.from_address),to:ce(e.to_address),type:TokenType.ERC20,address:e.address}}a($o,"buildErc20Token");function Wo(e){let t=e.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:e.amount,collectableTokenId:e.token_id,from:ce(e.from_address),to:ce(e.to_address),type:t,address:e.token_address}}a(Wo,"buildNftToken");function jo(e,t,r){let n=new TokenUnit(e.value,t.decimals,t.symbol),i=e.from_address.toLowerCase()===r.toLowerCase()?`-${n.toDisplay()}`:n.toDisplay();return {decimal:t.decimals.toString(),name:t.name,symbol:t.symbol,amount:i,from:ce(e.from_address),to:ce(e.to_address),type:TokenType.NATIVE}}a(jo,"buildFallbackNativeToken");var qo="https://proxy-api.avax.network/proxy/moralis-evm";async function ma({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}){try{let s=`0x${e.toString(16)}`,c=new URLSearchParams({chain:s,limit:(i??25).toString()});a&&c.set("cursor",a);let l=`${qo}/wallets/${n}/history?${c.toString()}`,p=await fetch(l);if(!p.ok)return {transactions:[],nextPageToken:""};let m=await p.json();return Array.isArray(m.result)?{transactions:m.result.filter(f=>f.receipt_status==="1").map(f=>pa({tx:f,networkToken:t,explorerUrl:r,chainId:e,address:n})),nextPageToken:m.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}a(ma,"getTransactionsFromMoralis");var zo=new Set([1,4,5,11155111,8453,42161,10]);function da(e){return zo.has(e)}a(da,"isMoralisSupportedChain");var ua=a((e,{nativeTransaction:t,erc20Transfers:r,erc721Transfers:n},a)=>{let i=e===TransactionType.TRANSFER,s=e===TransactionType.SEND||e===TransactionType.NFT_SEND,c=e===TransactionType.RECEIVE||e===TransactionType.NFT_RECEIVE,l=t?.from?.address,p=t?.to?.address;i&&r&&r[0]&&(l=r[0].from.address,p=r[0].to.address),i&&n&&n[0]&&(l=n[0].from.address,p=n[0].to.address);let m=s||i&&l.toLowerCase()===a.toLowerCase(),u=c||i&&p.toLowerCase()===a.toLowerCase();return {isOutgoing:m,isIncoming:u,isSender:l===a,from:l,to:p}},"getSenderInfo");async function ga(e){try{return e.then(t=>[t,null]).catch(t=>[null,t])}catch(t){return Promise.resolve([null,t])}}a(ga,"resolve");var Yo="https://ipfs.io";function Le(e,t=Yo){if(!e)return "";try{return ipfsResolver(e,t)}catch{return e}}a(Le,"ipfsResolverWithFallback");async function Jo(e,t=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),t),fetch(e,{signal:r.signal})}a(Jo,"fetchWithTimeout");async function fa(e){let t={};if(e)if(e.startsWith("data:application/json;base64,")){let r=e.substring(29);try{let n=Buffer.from(r,"base64").toString();t=JSON.parse(n);}catch{t={};}}else t=await Jo(Le(e)).then(r=>r.json()).catch(()=>({}));else return {};return t}a(fa,"getNftMetadata");var Xo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ya(e,t="256"){let r=Le(e);return `${Xo}/width=${t},fit/${r}`}a(ya,"getSmallImageForNFT");var ka=a(async({nativeTransaction:e,erc20Transfers:t,erc721Transfers:r,erc1155Transfers:n},a)=>{let i=[];if(e.value!=="0"){let s=a.decimals,l=new TokenUnit(e.value,a.decimals,a.symbol).toDisplay();i.push({decimal:s.toString(),name:a.name,symbol:a.symbol,amount:l,from:e.from,to:e.to,type:TokenType.NATIVE});}return t?.forEach(s=>{let c=s.erc20Token.decimals,p=new TokenUnit(s.value,c,s.erc20Token.symbol).toDisplay();i.push({decimal:c.toString(),address:s.erc20Token.address,name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:p,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let c=s.erc721Token,l=await Ta(c.tokenUri,c.metadata.imageUri);i.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,address:s.erc721Token.address,amount:"1",imageUri:l,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let c=s.erc1155Token,l=await Ta(c.tokenUri,c.metadata.imageUri);i.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",address:s.erc1155Token.address,amount:s.value,imageUri:l,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:TokenType.ERC1155});})),i},"getTokens"),Ta=a(async(e,t)=>{if(t)return t.startsWith("ipfs://")?Le(t):t;{let[r,n]=await ga(fa(e));return n?"":r.image?ya(r.image):""}},"getImageUri");var ba=a(async({transactions:e,explorerUrl:t,networkToken:r,chainId:n,address:a})=>{let i=await ka(e,r),s=la(e,a,i),{isOutgoing:c,isIncoming:l,isSender:p,from:m,to:u}=ua(s,e,a),{blockTimestamp:f,txHash:y,gasPrice:g,gasUsed:k}=e.nativeTransaction,T=se(t,y);return {isContractCall:!nn.includes(s),isIncoming:l,isOutgoing:c,isSender:p,timestamp:f*1e3,hash:y,from:m,to:u,tokens:i,gasPrice:g,gasUsed:k,chainId:n.toString(),txType:s,explorerLink:T}},"convertTransaction");var va=a(async({chainId:e,explorerUrl:t,networkToken:r,address:n,nextPageToken:a,offset:i,glacierService:s})=>{try{let c=await s.listTransactions({chainId:e.toString(),address:n,pageToken:a,pageSize:i});return {transactions:(await Promise.all(c.transactions.filter(m=>m.nativeTransaction.txStatus==="1").map(m=>ba({transactions:m,explorerUrl:t,networkToken:r,chainId:e,address:n}).then(u=>u)))).filter(m=>m.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:c.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}},"getTransactionsFromGlacier");async function Ra({client:e,chainId:t,networkToken:r,explorerUrl:n,address:a,nextPageToken:i,offset:s=25}){try{let c=Zo(i),[l,p,m]=await Promise.all([e.listNormalTransactions(a,{page:c,offset:s}),e.listErc20Transfers(a,{page:c,offset:s}),e.listInternalTransactions(a,{page:c,offset:s})]),u=new Map;for(let g of l){if(g.isError!=="0"||g.txreceipt_status!=="1")continue;let k=vr(u,g),T=Qo(g,r);T&&k.tokens.push(T);}for(let g of p)vr(u,g).tokens.push(ti(g));for(let g of m){if(g.isError!=="0")continue;let k=vr(u,g),T=ei(g,r);T&&k.tokens.push(T);}let f=Array.from(u.values()).map(g=>ri(g,a,n,r,t)).sort((g,k)=>k.timestamp-g.timestamp),y=[l,p,m].some(g=>g.length===s);return {transactions:f,nextPageToken:y?String(c+1):""}}catch{return {transactions:[],nextPageToken:""}}}a(Ra,"getTransactionsFromHyperEvm");function Zo(e){let t=Number(e);return Number.isSafeInteger(t)&&t>0?t:1}a(Zo,"getPage");function vr(e,t){let r=e.get(t.hash);if(r)return r;let n={hash:t.hash,timestamp:Number(t.timeStamp)*1e3,from:t.from,to:t.to,gasPrice:"gasPrice"in t?t.gasPrice:void 0,gasUsed:t.gasUsed,isContractCall:"input"in t&&t.input!=="0x",tokens:[]};return e.set(t.hash,n),n}a(vr,"getAggregate");function Qo(e,t){if(e.value!=="0")return {decimal:String(t.decimals),name:t.name,symbol:t.symbol,amount:new TokenUnit(e.value,t.decimals,t.symbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:TokenType.NATIVE}}a(Qo,"nativeToken");function ei(e,t){if(e.value!=="0")return {decimal:String(t.decimals),name:t.name,symbol:t.symbol,amount:new TokenUnit(e.value,t.decimals,t.symbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:TokenType.NATIVE}}a(ei,"internalToken");function ti(e){return {decimal:e.tokenDecimal,name:e.tokenName,symbol:e.tokenSymbol,amount:new TokenUnit(e.value,Number(e.tokenDecimal),e.tokenSymbol).toDisplay(),from:{address:e.from},to:{address:e.to},type:TokenType.ERC20,address:e.contractAddress}}a(ti,"erc20Token");function ri(e,t,r,n,a){let i=t.toLowerCase(),s=e.tokens.some(m=>m.to?.address.toLowerCase()===i),c=e.tokens.some(m=>m.from?.address.toLowerCase()===i),l=e.from.toLowerCase()===i||c,p=s&&c?TransactionType.SWAP:l?TransactionType.SEND:TransactionType.RECEIVE;return {isContractCall:e.isContractCall||s&&c,isIncoming:s&&!c,isOutgoing:c,isSender:l,timestamp:e.timestamp,hash:e.hash,from:e.from,to:e.to,tokens:e.tokens.length>0?e.tokens:[{decimal:String(n.decimals),name:n.name,symbol:n.symbol,amount:"0",type:TokenType.NATIVE}],gasPrice:e.gasPrice,gasUsed:e.gasUsed,chainId:a.toString(),txType:p,explorerLink:se(r,e.hash)}}a(ri,"toTransaction");var ni=999,Ea=a(async({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i,glacierService:s,hyperEvmEtherscanClient:c})=>e===ni?c?Ra({client:c,chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}):{transactions:[],nextPageToken:""}:da(e)?ma({chainId:e,networkToken:t,explorerUrl:r,address:n,nextPageToken:a,offset:i}):s.isHealthy()?va({networkToken:t,explorerUrl:r,chainId:e,address:n,nextPageToken:a,offset:i,glacierService:s}):{transactions:[],nextPageToken:""},"getTransactionHistory");var si="https://ipfs.io";function Pa(e,t=si){if(!e)return "";try{return ipfsResolver(e,t)}catch{return e}}a(Pa,"ipfsResolverWithFallback");var oi="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ft(e,t="256"){let r=Pa(e);return `${oi}/width=${t},fit/${r}`}a(Ft,"getSmallImageForNFT");var Ge,Z,Er=class Er{constructor(t,r){this.baseUrl=t;d(this,Ge,[]);d(this,Z,void 0);e(this,Z,r??fetch);}async isNetworkSupported(t){return (await this.getChainList()).some(n=>n.community_id===t)}async getChainInfo({chainId:t}){return (await this.getChainList()).find(n=>n.id===t)}async getTokenBalance({chainId:t,address:r,tokenId:n}){let a=await c(this,Z).call(this,`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${t}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:t,address:r}){let n=await c(this,Z).call(this,`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${t}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:t,address:r}){let n=await(c(this,Z)??globalThis.fetch)(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${t}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(c(this,Ge).length===0){let t=await c(this,Z).call(this,`${this.baseUrl}/v1/chain/list`);if(t.ok)e(this,Ge,await t.json());else throw new Error(`${t.status}:${t.statusText}`)}return c(this,Ge)}async getNftList({address:t,chainId:r}){return G([`${this.baseUrl}/v1/user/nft_list?id=${t}&chain_id=${r}`],pi,c(this,Z))}};Ge=new WeakMap,Z=new WeakMap,a(Er,"DeBank");var Mt=Er,ci=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),li=ci.merge(z$1.object({contract_id:z$1.string(),description:z$1.string().nullable(),content_type:z$1.string().nullable(),content:z$1.string(),thumbnail_url:z$1.string(),total_supply:z$1.number(),detail_url:z$1.string(),collection_id:z$1.string(),is_core:z$1.boolean(),inner_id:z$1.string(),collection_name:z$1.string(),contract_name:z$1.string(),amount:z$1.number(),usd_price:z$1.number().optional(),is_erc721:z$1.boolean().optional(),is_erc1155:z$1.boolean().optional()})),pi=z$1.array(li);var z,Ve,Gt,Ht,Aa,Ir=class Ir{constructor({proxyApiUrl:t,fetch:r}){d(this,Ve);d(this,Ht);d(this,z,void 0);e(this,z,new Mt(`${t}/proxy/debank`,r));}async isNetworkSupported(t){return c(this,z).isNetworkSupported(t)}async getNativeBalance({chainId:t,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:i}=await f(this,Ve,Gt).call(this,t),s=a.native_token_id,c$1=await c(this,z).getTokenBalance({address:r,chainId:i,tokenId:s}),l=new TokenUnit(c$1.raw_amount,c$1.decimals,c$1.symbol),p=l.toDisplay(),u=(await ut()).usd[n.toLowerCase()],f$1=u?u*c$1.price:void 0,y=f$1?l.mul(f$1).toDisplay({fixedDp:2}):void 0,g=f$1?l.mul(f$1).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c$1.name,symbol:c$1.symbol,decimals:c$1.decimals,type:TokenType.NATIVE,logoUri:c$1.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:g,balanceCurrencyDisplayValue:y,priceInCurrency:f$1}}async listErc20Balances({chainId:t,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:i}=await f(this,Ve,Gt).call(this,t),s=await c(this,z).getTokensBalanceOnChain({chainId:i,address:r}),c$1=await ut(),l={};for(let p of s){if(p.id===a.native_token_id||p.is_core===!1)continue;let m=new TokenUnit(p.raw_amount,p.decimals,p.symbol),u=m.toDisplay(),f=c$1.usd[n.toLowerCase()],y=f?f*p.price:void 0,g=y?m.mul(y).toDisplay({fixedDp:2}):void 0,k=y?m.mul(y).toDisplay({fixedDp:2,asNumber:!0}):void 0;l[p.id]={chainId:a.community_id,address:p.id,name:p.name,symbol:p.symbol,decimals:p.decimals,logoUri:p.logo_url,balance:m.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:u,balanceInCurrency:k,priceInCurrency:y,type:TokenType.ERC20,reputation:null};}return l}async listNftBalances({chainId:t,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await f(this,Ve,Gt).call(this,t),a=await c(this,z).getNftList({chainId:n,address:r});return f(this,Ht,Aa).call(this,a,t)}};z=new WeakMap,Ve=new WeakSet,Gt=a(async function(t){let n=(await c(this,z).getChainList()).find(i=>i.community_id===t)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+t);let a=await c(this,z).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+t);return {chainInfo:a,chainIdString:n}},"#getChainInfo"),Ht=new WeakSet,Aa=a(function(t,r){return t.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:Ft(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})},"#mapNftList"),a(Ir,"DeBankService");var Vt=Ir;var Sr=class Sr extends Error{constructor(){super(...arguments);b(this,"message","Glacier is unhealthy. Try again later.");}};a(Sr,"GlacierUnhealthyError");var Q=Sr,fi=[ChainId.ETHEREUM_HOMESTEAD],xr=class xr{constructor({glacierApiUrl:t,headers:r}){b(this,"glacierSdk");b(this,"isGlacierHealthy",!0);b(this,"supportedChainIds",[]);b(this,"isHealthy",a(()=>this.isGlacierHealthy,"isHealthy"));this.glacierSdk=new Glacier({BASE:t,HEADERS:r},ze),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(t){return (await this.getSupportedChainIds()).some(n=>n===t.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let t=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=t.chains.map(r=>r.chainId).filter(r=>!fi.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:t,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:t,chainId:r,tokenId:n});}catch(a){throw a instanceof Q&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:t,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:t,chainId:r,tokenId:n})}catch(a){throw a instanceof Q&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:t,address:r,currency:n,coingeckoId:a}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:t.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,c=new TokenUnit(s.balance,s.decimals,s.symbol),l=s.price?.value,p=l!==void 0?c.mul(l):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:TokenType.NATIVE,logoUri:s.logoUri,balance:c.toSubUnit(),balanceDisplayValue:c.toDisplay(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),priceInCurrency:l,coingeckoId:a??""}}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}async listErc721Balances({chainId:t,address:r}){let n,a=[];do try{let i=await this.glacierSdk.evmBalances.listErc721Balances({chainId:t,address:r,pageSize:100,pageToken:n});a.push(...i.erc721TokenBalances),n=i.nextPageToken;}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}while(n);return a}async listErc1155Balances({chainId:t,address:r}){let n,a=[];do try{let i=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:t,address:r,pageSize:100,pageToken:n});a.push(...i.erc1155TokenBalances),n=i.nextPageToken;}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}while(n);return a}async listNftBalances({chainId:t,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:t.toString(),address:r}),this.listErc1155Balances({chainId:t.toString(),address:r})])).filter(i=>i.status==="fulfilled").flatMap(i=>i.value.filter(s=>s.ercType===Erc721Token.ercType.ERC_721||BigInt(s.balance)>0n).map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:Ft(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,chainId:t,collectionName:"Unknown",balance:s.ercType===Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===Erc721Token.ercType.ERC_721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:s.metadata.indexStatus,description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:t,address:r,currency:n,customTokens:a}){try{let i=[],s;do{let c=await this.glacierSdk.evmBalances.listErc20Balances({chainId:t.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});i.push(...hi(c.erc20TokenBalances,Number(t))),s=c.nextPageToken;}while(s);return [...yi(a),...i].reduce((c,l)=>({...c,[l.address.toLowerCase()]:l}),{})}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}async listTransactions({chainId:t,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:t,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(i){throw i instanceof Q&&this.setGlacierToUnhealthy(),i}}};a(xr,"EvmGlacierService");var Ot=xr,yi=a(e=>e.map(t=>({...t,decimals:t.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),"convertErc20TokenToTokenWithBalance"),hi=a((e,t)=>e.map(r=>{let n=new TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),i=r.balanceValue?.value.toString(),s=r.price?.value,c=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:t,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:i,balanceDisplayValue:a,balanceInCurrency:c,priceInCurrency:s,reputation:r.tokenReputation,type:TokenType.ERC20}}),"convertErc20TokenWithBalanceToTokenWithBalance");var Ca=z$1.object({blockNumber:z$1.string(),timeStamp:z$1.string(),hash:z$1.string(),nonce:z$1.string(),blockHash:z$1.string(),transactionIndex:z$1.string(),from:z$1.string(),to:z$1.string(),value:z$1.string(),gas:z$1.string(),gasPrice:z$1.string(),isError:z$1.string(),txreceipt_status:z$1.string(),input:z$1.string(),contractAddress:z$1.string(),cumulativeGasUsed:z$1.string(),gasUsed:z$1.string(),confirmations:z$1.string()}),Na=z$1.object({blockNumber:z$1.string(),timeStamp:z$1.string(),hash:z$1.string(),nonce:z$1.string(),blockHash:z$1.string(),from:z$1.string(),contractAddress:z$1.string(),to:z$1.string(),value:z$1.string(),tokenName:z$1.string(),tokenSymbol:z$1.string(),tokenDecimal:z$1.string(),transactionIndex:z$1.string(),gas:z$1.string(),gasPrice:z$1.string(),gasUsed:z$1.string(),cumulativeGasUsed:z$1.string(),input:z$1.string(),confirmations:z$1.string()}),wa=z$1.object({blockNumber:z$1.string(),timeStamp:z$1.string(),hash:z$1.string(),from:z$1.string(),to:z$1.string(),value:z$1.string(),contractAddress:z$1.string(),input:z$1.string(),type:z$1.string(),gas:z$1.string(),gasUsed:z$1.string(),traceId:z$1.string(),isError:z$1.string(),errCode:z$1.string()});var Ti=a(e=>{if(e)return e;if(typeof globalThis.fetch=="function")return globalThis.fetch.bind(globalThis);throw new Error("HyperEvmEtherscanClient requires a fetch implementation")},"resolveFetch"),ct,lt,Oe,$t,Cr=class Cr{constructor({proxyApiUrl:t,fetch:r}){d(this,Oe);d(this,ct,void 0);d(this,lt,void 0);e(this,ct,`${t}/proxy/etherscan/hyperevm/api`),e(this,lt,Ti(r));}listNormalTransactions(t,r){return f(this,Oe,$t).call(this,"txlist",t,Ca,r)}listErc20Transfers(t,r){return f(this,Oe,$t).call(this,"tokentx",t,Na,r)}listInternalTransactions(t,r){return f(this,Oe,$t).call(this,"txlistinternal",t,wa,r)}};ct=new WeakMap,lt=new WeakMap,Oe=new WeakSet,$t=a(async function(t,r,n,a){let i=new URLSearchParams({module:"account",action:t,address:r,page:(a?.page??1).toString(),offset:(a?.offset??25).toString(),sort:"desc"}),s=await c(this,lt).call(this,`${c(this,ct)}?${i.toString()}`);if(!s.ok)throw new Error(`HyperEVM explorer request failed: ${s.status} ${s.statusText}`);let c$1=await s.json(),l=z$1.object({status:z$1.string(),message:z$1.string(),result:z$1.union([z$1.array(n),z$1.string()])}).parse(c$1);if(Array.isArray(l.result))return l.result;if(l.status==="0"&&l.message==="No transactions found")return [];throw new Error(l.result)},"#list"),a(Cr,"HyperEvmEtherscanClient");var Wt=Cr;var $e,pt,le,K,ke,W,mt,Nr=class Nr{constructor({approvalController:t,environment:r,appInfo:n,runtime:a}){d(this,$e,void 0);d(this,pt,void 0);d(this,le,void 0);d(this,K,void 0);d(this,ke,void 0);d(this,W,void 0);d(this,mt,void 0);let{glacierApiUrl:i,proxyApiUrl:s}=Or(r);e(this,W,a),e(this,$e,new Ot({glacierApiUrl:i,headers:Zt(n)})),e(this,pt,new Vt({proxyApiUrl:s,fetch:c(this,W)?.fetch})),e(this,le,s),e(this,mt,new Wt({proxyApiUrl:s,fetch:c(this,W)?.fetch})),e(this,K,t),e(this,ke,new bi({baseURL:s+"/proxy/blockaid/",apiKey:Vr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}updateRuntimeParams(t){e(this,W,{...c(this,W),...t,features:{...c(this,W)?.features,...t.features}});}getProvider(t){return M({chainId:t.chainId,chainName:t.chainName,rpcUrl:t.rpcUrl,multiContractAddress:t.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:t.customRpcHeaders})}getAddress({accountIndex:t,xpub:r,walletType:n}){return Xn({accountIndex:t,xpub:r,walletType:n})}buildDerivationPath(t){return Pe(t)}deriveAddress(t){return Zr({...t,approvalController:c(this,K)})}deriveAddresses(t){return Qr({...t,approvalController:c(this,K)})}getBalances({addresses:t,network:r,currency:n,customTokens:a,storage:i,tokenTypes:s,customTokensOnly:c$1}){let l=new ne({storage:i,proxyApiUrl:c(this,le),fetch:c(this,W)?.fetch});return ta({addresses:t,currency:n,network:r,proxyApiUrl:c(this,le),customTokens:a,customTokensOnly:c$1,balanceServices:[c(this,$e),c(this,pt)],storage:i,tokenTypes:s,tokenService:l,fetch:c(this,W)?.fetch})}getManifest(){let t=parseManifest(Gr);return t.success?t.data:void 0}getNetworkFee(t){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:i,caipId:s,customRpcHeaders:c$1}=t;return oa({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:i?.multicall,caipId:s,proxyApiUrl:c(this,le),customRpcHeaders:c$1})}getTransactionHistory(t){let{network:r,address:n,nextPageToken:a,offset:i}=t,{chainId:s,networkToken:c$1,explorerUrl:l=""}=r;return Ea({chainId:s,networkToken:c$1,explorerUrl:l,address:n,nextPageToken:a,offset:i,glacierService:c(this,$e),hyperEvmEtherscanClient:c(this,mt)})}getTokens(t){let{chainId:r}=t;return wt({chainId:r,proxyApiUrl:c(this,le)})}async onRpcRequest(t,r){switch(t.method){case RpcMethod.ETH_SEND_TRANSACTION:return Dn({request:t,network:r,approvalController:c(this,K),blockaid:c(this,ke),eercEnabled:c(this,W)?.features?.encryptedERCs===!0});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dn(c(this,K))?xn({request:t,network:r,approvalController:c(this,K),blockaid:c(this,ke)}):{error:rpcErrors.methodNotSupported(`Method ${t.method} requires BatchApprovalController`)};case RpcMethod.AVALANCHE_DECLARE_AGENT_IDENTITY:return Jr({request:t,network:r});case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Kn({request:t,network:r,approvalController:c(this,K),blockaid:c(this,ke)});default:return vi(t.method)?Yn(t,r):{error:rpcErrors.methodNotSupported(`Method ${t.method} not supported`)}}}};$e=new WeakMap,pt=new WeakMap,le=new WeakMap,K=new WeakMap,ke=new WeakMap,W=new WeakMap,mt=new WeakMap,a(Nr,"EvmModule");var Da=Nr,vi=a(e=>e.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(e),"shouldForwardToRpcNode");
35
35
 
36
- export { J as ERC20TransactionType, Da as EvmModule, nn as NonContractCallTypes, or as TransactionKind, Be as addIdToPromise, wd as isTypedData, qn as isTypedDataV1, Ue as settleAllIdPromises };
36
+ export { J as ERC20TransactionType, cn as EercOperation, Da as EvmModule, nn as NonContractCallTypes, or as TransactionKind, Be as addIdToPromise, wd as isTypedData, qn as isTypedDataV1, ln as parseEercTransaction, Ue as settleAllIdPromises };
37
37
  //# sourceMappingURL=out.js.map
38
38
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avalabs/evm-module",
3
- "version": "3.13.0",
3
+ "version": "3.13.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ava-labs/core-vm-modules",
@@ -31,7 +31,7 @@
31
31
  "lodash.startcase": "4.4.0",
32
32
  "xss": "1.0.13",
33
33
  "zod": "3.23.8",
34
- "@avalabs/vm-module-types": "3.13.0"
34
+ "@avalabs/vm-module-types": "3.13.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@typechain/ethers-v6": "0.5.0",