@avalabs/evm-module 1.8.0 → 1.9.0
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 +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { z as z$1, object, string, record, number } from 'zod';
|
|
|
14
14
|
import { Glacier, Erc1155Token, Erc721Token } from '@avalabs/glacier-sdk';
|
|
15
15
|
import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
16
16
|
|
|
17
|
-
async function Ie({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var ln=process.env.GLACIER_API_KEY,w=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:o,pollingInterval:a=2e3}=t,s=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:o},mn(n,ln),new Network(r,e));return s.pollingInterval=a,s},pn=["glacier-api.avax.network","proxy-api.avax.network"];function mn(t,e){let r=new URL(t);if(e&&pn.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var tt={LOW:1n,MEDIUM:4n,HIGH:6n},rt=500000000n,dn=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function Rt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:o,proxyApiUrl:a}){let s=await w({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!a)throw rpcErrors.internal("Proxy API URL is needed");if(dn(t))try{let E=await un(s);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await s.getBlock("latest",!1);if(!i)throw rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await fn(a,o),p=new TokenUnit(l,0,""),m=new TokenUnit(c,0,""),d=BigInt("1000000000"),u=m.mul(p).add(d).toSubUnit(),g=rt*tt.LOW,y=rt*tt.MEDIUM,v=rt*tt.HIGH;return {baseFee:u,low:{maxFeePerGas:u+g,maxPriorityFeePerGas:g},medium:{maxFeePerGas:u+y,maxPriorityFeePerGas:y},high:{maxFeePerGas:u+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function un(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function fn(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let o=await n.json();return o[e]??o.default}catch{return 1.5}}function J(t,e,r="tx"){return `${t}/${r}/${e}`}var It=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:o})=>{let a=t.from.toLowerCase()===o.toLowerCase(),s=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=a?TransactionType.SEND:TransactionType.RECEIVE,{from:m,to:d,gasPrice:u,gasUsed:g,hash:y}=t,v=J(n,y);return {isIncoming:!a,isOutgoing:a,isContractCall:hn(t),timestamp:s,hash:y,isSender:a,from:m,to:d,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:g,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:v}};function hn(t){return t.input!=="0x"}function At({tx:t,address:e,explorerUrl:r,chainId:n}){let o=t.from.toLowerCase()===e.toLowerCase(),a=parseInt(t.timeStamp)*1e3,i=new TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:m,hash:d,tokenDecimal:u,tokenName:g,tokenSymbol:y}=t,v=o?TransactionType.SEND:TransactionType.RECEIVE,E=J(r,d);return {isIncoming:!o,isOutgoing:o,isContractCall:!1,timestamp:a,hash:d,isSender:o,from:c,to:l,tokens:[{decimal:u,name:g,symbol:y,type:TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:v,explorerLink:E}}var wt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:o,nextPageToken:a,offset:s})=>{let i=a?JSON.parse(a):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await getNormalTxs(o,!t,{page:c,offset:s}):[]).map(y=>It({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:o})),m=(l.includes("erc20")?await getErc20Txs(o,!t,void 0,{page:c,offset:s}):[]).map(y=>At({tx:y,address:o,explorerUrl:r,chainId:n})),d=m.map(y=>y.hash),u=p.filter(y=>!d.includes(y.hash)),g={queries:[],page:c+1};return p.length&&g.queries.push("normal"),m.length&&g.queries.push("erc20"),{transactions:[...u,...m],nextPageToken:g.queries.length?JSON.stringify(g):""}};var Ct=t=>t===1||t===5||t===4||t===11155111;var Bt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},o,a)=>{let s=!e&&!r&&!n,i=Pn(t.method?.methodName),c=o.toLowerCase(),l=i.toLowerCase().includes("swap"),p=s&&t.from.address.toLowerCase()===c,m=s&&t.to.address.toLowerCase()===c,d=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",g=i.toLowerCase().includes("transfer"),y=i.toLowerCase().includes("airdrop"),v=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",T=!!a[0]&&Nt(a[0].type)&&a[0].from?.address.toLowerCase()===c,k=!!a[0]&&Nt(a[0].type)&&a[0].to?.address.toLowerCase()===c;return l?TransactionType.SWAP:p?TransactionType.SEND:m?TransactionType.RECEIVE:d?TransactionType.NFT_BUY:u?TransactionType.APPROVE:T?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:g?TransactionType.TRANSFER:y?TransactionType.AIRDROP:v?TransactionType.UNWRAP:E?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Nt(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var Pn=(t="")=>t.includes("(")?bn(t.split("(",1)[0]):t;var _t=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},o)=>{let a=t===TransactionType.TRANSFER,s=t===TransactionType.SEND,i=t===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;a&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),a&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=s||a&&c.toLowerCase()===o.toLowerCase(),m=i||a&&l.toLowerCase()===o.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===o,from:c,to:l}};async function Ut(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Sn="https://ipfs.io";function z(t,e=Sn){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function In(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Ft(t){let e={};if(t)if(t.startsWith("data:application/json;base64,")){let r=t.substring(29);try{let n=Buffer.from(r,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await In(z(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var xn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Gt(t,e="256"){let r=z(t);return `${xn}/width=${e},fit/${r}`}var Lt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},o)=>{let a=[];if(t.value!=="0"){let s=o.decimals,c=new TokenUnit(t.value,o.decimals,o.symbol).toDisplay();a.push({decimal:s.toString(),name:o.name,symbol:o.symbol,amount:c,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new TokenUnit(s.value,i,s.erc20Token.symbol).toDisplay();a.push({decimal:i.toString(),name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:l,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let i=s.erc721Token,c=await Vt(i.tokenUri,i.metadata.imageUri);a.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,amount:"1",imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let i=s.erc1155Token,c=await Vt(i.tokenUri,i.metadata.imageUri);a.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",amount:s.value,imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:TokenType.ERC1155});})),a},Vt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?z(e):e;{let[r,n]=await Ut(Ft(t));return n?"":r.image?Gt(r.image):""}};var Ht=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],O=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(O||{});var $t=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:o})=>{let a=await Lt(t,r),s=Bt(t,o,a),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=_t(s,t,o),{blockTimestamp:d,txHash:u,gasPrice:g,gasUsed:y}=t.nativeTransaction,v=J(e,u);return {isContractCall:!Ht.includes(s),isIncoming:c,isOutgoing:i,isSender:l,timestamp:d*1e3,hash:u,from:p,to:m,tokens:a,gasPrice:g,gasUsed:y,chainId:n.toString(),txType:s,explorerLink:v}};var Ot=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:o,offset:a,glacierService:s})=>{try{let i=await s.listTransactions({chainId:t.toString(),address:n,pageToken:o,pageSize:a});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>$t({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(m=>m)))).filter(p=>p.tokens.find(m=>Number(m.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var Wt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:o,nextPageToken:a,offset:s,glacierService:i})=>Ct(t)?wt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:o,nextPageToken:a,offset:s}):i.isHealthy()?Ot({networkToken:r,explorerUrl:n,chainId:t,address:o,nextPageToken:a,offset:s,glacierService:i}):{transactions:[],nextPageToken:""};var jt={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var Ae=async({from:t,provider:e})=>e.getTransactionCount(t);var we=t=>{if(t.data)try{let r=new Interface(er.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Dn(n)?n:void 0}catch{return}};function Dn(t){return Object.values(O).includes(t)}function qt(t,e,r){return new ethers.Contract(t,er.abi).interface.encodeFunctionData("approve",[e,r])}var Ce=new Map,Jt=(t,e,r)=>(Ce.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:o,approvalLimit:a})=>{let s=Ce.get(t);if(!s)throw rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=s,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:o??i.data.maxPriorityFeePerGas}},p={...c};if(typeof a=="string"){if(!a.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let d=c.tokenApprovals;_n(d),Un(i.data.data);let u=d.approvals[0];l.data.data=qt(u.token.address,u.spenderAddress,a),p.tokenApprovals={approvals:[{...u,value:a}],isEditable:!0};}let m={signingData:l,displayData:p};return Ce.set(t,m),m},cleanup:()=>Ce.delete(t)});function _n(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function Un(t){if((!t||t==="0x"?null:we({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var zt=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:o},provider:a})=>{let s=await a.getTransactionCount(t);return Number(await a.estimateGas({from:t,to:e,nonce:s,data:r,value:n,accessList:o}))};var ot=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),Be=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),Y=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var st=(t,e)=>({label:t,type:DetailItemType.DATA,value:e});var _e=(t,e,r,{isSimulationSuccessful:n,balanceChange:o,tokenApprovals:a,alert:s})=>{let{dappInfo:i}=t,c=we(r),l="Approve Transaction";c==="approve"&&(l="Token Spend Approval");let p=[Be("Website",i),Y("From",r.from)];r.to&&p.push(Y("To",r.to)),c&&p.push(ot("Type",c)),r.data&&p.push(st("Data",r.data));let m={title:l,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:s,balanceChange:o,tokenApprovals:a,isSimulationSuccessful:n},d={type:RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:m,signingData:d}};var ct="DUMMY_API_KEY",Yt=async({proxyApiUrl:t,chainId:e,params:r,domain:n,withGasEstimation:o})=>{let a=new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}),s=["validation","simulation"];return o&&s.push("gas_estimation"),a.evm.transactionBulk.scan({chain:e.toString(),options:s,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}})},Kt=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),Xt=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:o})=>new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:o&&o.length>0?{domain:o}:{non_dapp:!0}});var tr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,er.abi,r),o=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=Zt(o[0]),s=Zt(o[1]),i=parseInt(o[2]),c={type:TokenType.ERC20,name:a,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.Interface(er.abi),p=l.getFunction(t.data.slice(0,10)),m=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(m.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:m.spender,value:m.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function W(t){return !("type"in t)}function Ue(t){return t.type===TokenType.ERC20}function rr(t){return typeof t.to=="string"}function nr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function Ln(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function Hn(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function lt(t){return Ln(t)?t.ins.length===0&&t.outs.length===0:Hn(t)?t.approvals.length===0:!1}var M={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var or=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:o,proxyApiUrl:a})=>{let s;try{s=await Kt({proxyApiUrl:a,chainId:n,params:r,domain:e});}catch(i){console.error("simulateTransaction error",i);}return pt({rpcMethod:t,params:r,chainId:n,provider:o,simulationResult:s})},pt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:o})=>{let a,s,i,c=!1,l;if(o){let{validation:p,simulation:m,gas_estimation:d}=o;!p||p.result_type==="Error"||p.result_type==="Warning"?a=M[AlertType.WARNING]:p.result_type==="Malicious"&&(a=M[AlertType.DANGER]),m?.status==="Success"&&(c=!0,i=sr(t,m.account_summary),s=ir(m.account_summary.assets_diffs)),d?.status==="Success"&&(l=Number(d.estimate));}if(!c&&rr(e)){let p=await tr(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:a,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},qn=t=>t.trace_type==="ExposureTrace",Jn=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,zn=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>qn(r)?{[Jn(r.spender,r.asset.address)]:r}:e,{}),sr=(t,e)=>{let{traces:r}=e,n=zn(r),o=Object.entries(n).map(([s,i])=>{let c=cr(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,usd_price:m}}=i;l.value=p,l.usdPrice=`${m}`;}if(i.type==="ERC721ExposureTrace"){let{exposed:{usd_price:p,amount:m}}=i;l.value=`${m}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return o.length===0?void 0:{isEditable:o.length===1&&o[0]?.token.type===TokenType.ERC20&&t===RpcMethod.ETH_SEND_TRANSACTION,approvals:o}},ir=t=>{let e=ar(t,"in"),r=ar(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},ar=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,o="address"in n?cr(n):Yn(n);if(!o)return;let a=r[e].map(s=>{let i;if("value"in s&&s.value)if("decimals"in o){let c=numberToBN(s.value,o.decimals);i=balanceToDisplayValue(c,o.decimals);}else isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in o&&o.type===TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:s.usd_price}:void 0}).filter(s=>s!==void 0);return {token:o,items:a}}).filter(r=>r!==void 0),cr=t=>{let e;return t.type==="ERC20"?e={type:TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},Yn=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),lr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:o,proxyApiUrl:a})=>{let s,i,c;try{let{validation:l,simulation:p}=await Xt({proxyApiUrl:a,chainId:n,accountAddress:r,data:o,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?s=M[AlertType.WARNING]:l.result_type==="Malicious"&&(s=M[AlertType.DANGER]),p?.status==="Success"&&(c=sr(t.method,p.account_summary),i=ir(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=M[AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var X=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42).optional(),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional().or(z$1.number().optional()),accessList:z$1.array(z$1.object({address:z$1.string().startsWith("0x"),storageKeys:z$1.array(z$1.string())})).optional()});var Xn=z$1.tuple([X]),pr=t=>Xn.safeParse(t);var Ge=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:o})=>{try{if((await t.waitForTransaction(e))?.status===1)return r(e,o),!0}catch(a){console.error(a);}return n(e,o),!1};var Me=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var mr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,error:s,success:i}=pr(o);if(!i)return console.error("invalid params",s),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[c]=a,l=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let E=await zt({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+E.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let E=await Ae({from:c.from,provider:l});c.nonce=String(E);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let p=await or({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l}),{displayData:m,signingData:d}=_e(t,e,c,p),{updateTx:u,cleanup:g}=Jt(t.requestId,d,m),y=await r.requestApproval({request:t,displayData:m,signingData:d,updateTx:u});if(g(),"error"in y)return {error:y.error};let v;try{v=await Me(l,y);}catch(E){return {error:rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return Ge({provider:l,txHash:v,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:v}};async function dr(t,e){let r=t.map(async(a,s)=>({index:s,result:await e(a)})),o=(await Promise.allSettled(r)).filter(a=>a.status==="fulfilled").map(a=>a).find(a=>a.value.result);return o?t[o.value.index]:void 0}function Z(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function Q(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let o=n.value;o.status==="fulfilled"?r[o.id]=o.value:r[o.id]={error:o.reason};}return r},{}))}var mt=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=ue.exponential()})=>{let o=0,a=0,s;for(;a<r;){a>0&&await Zn(o);try{let c=await t(a);if(e(c))return c}catch(c){s=c;}o=n(a),a++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},ue=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Zn(t){return new Promise(e=>setTimeout(e,t))}var dt=t=>mt({operation:e=>t(e>0),maxRetries:2,backoffPolicy:ue.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ur(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ut(t){let e,r=0;for(e=0;e<t.length;e++){let n=ur(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function _(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var fe=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return _([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,o=new URLSearchParams(n);return _([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var yr=getBasicCoingeckoHttp(),V,ee,te=class{constructor({storage:e,proxyApiUrl:r}){c(this,V,void 0);c(this,ee,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(o=>{let a=e[o];n[o]={},r.forEach(s=>{n[o]={[s]:{price:a?.[s],change24:a?.[`${s}_24h_change`],vol24:a?.[`${s}_24h_vol`],marketCap:a?.[`${s}_market_cap`]}};});}),n});d(this,V,e),d(this,ee,r);}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ut(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,V)?.get?.(a),n)return n;try{n=await dt(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return b(this,V)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let o,s=`getPricesWithMarketDataByAddresses-${`${ut(e)}-${r}-${n}`}`;if(o=b(this,V)?.get?.(s),o)return o;try{o=await dt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),o=void 0;}return b(this,V)?.set?.(s,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let a=await new fe(b(this,ee)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(a,[n])}return simpleTokenPrice(yr,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:o=!1,change24:a=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new fe(b(this,ee)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:a,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(yr,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:a,lastUpdated:s,shouldThrow:c})}};V=new WeakMap,ee=new WeakMap;var sa="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",ia="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",gr=object({date:string(),usd:record(number())}),Le=async()=>{try{return await _([sa],gr)}catch{return await _([ia],gr)}};var ft=({name:t,version:e})=>{switch(t){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case AppName.OTHER:return}};var A,ne,j,ge,He=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:o}){c(this,A,void 0);c(this,ne,void 0);c(this,j,void 0);c(this,ge,void 0);d(this,A,e),d(this,ne,r),d(this,j,n),d(this,ge,o);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:b(this,A).chainName,rpcUrl:b(this,A).rpcUrl,multiContractAddress:b(this,A).utilityAddresses?.multicall}),a=b(this,A).pricingProviders?.coingecko.nativeTokenId,s=b(this,A).networkToken,i=new te({storage:b(this,ne),proxyApiUrl:b(this,j)}),c=a?await i.getSimplePrice({coinIds:[a],currencies:[n]}):{},l=c?.[a??""]?.[n]?.price??void 0,p=c?.[a??""]?.[n]?.marketCap??void 0,m=c?.[a??""]?.[n]?.vol24??void 0,d=c?.[a??""]?.[n]?.change24??void 0,u=await o.getBalance(r),g=new TokenUnit(u,s.decimals,s.symbol),y=l!==void 0?g.mul(l):void 0;return {...s,coingeckoId:a??"",type:TokenType.NATIVE,balance:u,balanceDisplayValue:g.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:d}}async listErc20Balances({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:b(this,A).chainName,rpcUrl:b(this,A).rpcUrl,multiContractAddress:b(this,A).utilityAddresses?.multicall}),a=b(this,A).pricingProviders?.coingecko.assetPlatformId,s=b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await Ie({chainId:Number(e),proxyApiUrl:b(this,j)}),c=i.map(E=>E.address),l=[...i,...b(this,ge)].filter(Ue),p=async E=>{let I=await new ethers.Contract(E.address,er.abi,o).balanceOf?.(r)||0n;return {...E,balance:I}},m=l.map(E=>Z(p(E),E.address)),d=await Q(m),u=new te({storage:b(this,ne),proxyApiUrl:b(this,j)}),g=a&&await u.getPricesByAddresses(c,a,n)||{},y=Object.keys(d),v={};for(let E=0;E<y.length;E++){let T=y[E];if(T===void 0)continue;let k=d[T];if(k===void 0||"error"in k){v[T]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let I=g?.[s??""]?.[n]?.price??void 0,Re=g?.[s??""]?.[n]?.marketCap??void 0,x=g?.[s??""]?.[n]?.vol24??void 0,Qe=g?.[s??""]?.[n]?.change24??void 0,Se=new TokenUnit(k.balance,k.decimals,k.symbol),pe=I!==void 0?Se.mul(I):void 0;v[k.address.toLowerCase()]={...k,type:TokenType.ERC20,balance:k.balance,balanceDisplayValue:Se.toDisplay(),balanceInCurrency:pe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:pe?.toDisplay({fixedDp:2}),priceInCurrency:I,marketCap:Re,change24:Qe,vol24:x,reputation:null};}return v}async listNftBalances(){return {}}};A=new WeakMap,ne=new WeakMap,j=new WeakMap,ge=new WeakMap;var kr=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:o=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:a=[],storage:s,balanceServices:i=[]})=>{let c=r.chainId,l=[...i,new He({network:r,storage:s,proxyApiUrl:n,customTokens:a})],p=await dr(l,d=>d.isNetworkSupported(r.chainId)),m={};if(p){let d=[],u=[],g=[];t.forEach(T=>{o.includes(TokenType.NATIVE)&&d.push(Z(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),o.includes(TokenType.ERC20)&&u.push(Z(p.listErc20Balances({customTokens:a.filter(Ue),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(o.includes(TokenType.ERC721)||o.includes(TokenType.ERC1155))&&g.push(Z(p.listNftBalances({chainId:c,address:T}),T));});let y=await Q(d),v=await Q(u),E=await Q(g);Object.keys(y).forEach(T=>{let k=y[T];if(!k||"error"in k){m[T]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let I=k.symbol;m[T]={[I]:k};}),Object.keys(v).forEach(T=>{let k=v[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listErc20Balances failed: ${k.error}`}:m[T]={...m[T],...k};}),Object.keys(E).forEach(T=>{let k=E[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listNftBalances failed: ${k.error}`}:m[T]={...m[T],...k};});}else t.forEach(d=>{m[d]={error:"unsupported network"};});return m};var pa={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ma={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},vr=t=>{switch(t){case Environment.PRODUCTION:return pa;case Environment.DEV:return ma}};var ua="https://ipfs.io";function br(t,e=ua){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var fa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function $e(t,e="256"){let r=br(t);return `${fa}/width=${e},fit/${r}`}var U=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},Ta=[ChainId.ETHEREUM_HOMESTEAD],Oe=class{constructor({glacierApiUrl:e,headers:r}){a(this,"glacierSdk");a(this,"isGlacierHealthy",!0);a(this,"supportedChainIds",[]);a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e,HEADERS:r}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!Ta.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(o){throw o instanceof U&&this.setGlacierToUnhealthy(),o}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(o){throw o instanceof U&&this.setGlacierToUnhealthy(),o}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:o}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(s.balance,s.decimals,s.symbol),c=s.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:TokenType.NATIVE,logoUri:s.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:o??""}}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}async listErc721Balances({chainId:e,address:r}){let n,o=[];do try{let a=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});o.push(...a.erc721TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}while(n);return o}async listErc1155Balances({chainId:e,address:r}){let n,o=[];do try{let a=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});o.push(...a.erc1155TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}while(n);return o}async listNftBalances({chainId:e,address:r}){let o=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(a=>a.status==="fulfilled").flatMap(a=>a.value.map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:$e(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,collectionName:"Unkown",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:{description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(o)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:o}){try{let a=[],s;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});a.push(...Ea(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...ka(o),...a].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:o}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:o})}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}},ka=t=>t.map(e=>({...e,decimals:e.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),Ea=(t,e)=>t.map(r=>{let n=new TokenUnit(r.balance,r.decimals,r.symbol),o=n.toDisplay(),a=r.balanceValue?.value.toString(),s=r.price?.value,i=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:a,balanceDisplayValue:o,balanceInCurrency:i,priceInCurrency:s,reputation:r.tokenReputation,type:TokenType.ERC20}});var yt=t=>{let e="";e+=`Domain
|
|
17
|
+
async function xe({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var ln=process.env.GLACIER_API_KEY,w=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:o,pollingInterval:a=2e3}=t,s=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:o},mn(n,ln),new Network(r,e));return s.pollingInterval=a,s},pn=["glacier-api.avax.network","proxy-api.avax.network"];function mn(t,e){let r=new URL(t);if(e&&pn.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var rt={LOW:1n,MEDIUM:4n,HIGH:6n},nt=500000000n,dn=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function Rt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:o,proxyApiUrl:a}){let s=await w({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!a)throw rpcErrors.internal("Proxy API URL is needed");if(dn(t))try{let E=await un(s);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await s.getBlock("latest",!1);if(!i)throw rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await fn(a,o),p=new TokenUnit(l,0,""),m=new TokenUnit(c,0,""),d=BigInt("1000000000"),u=m.mul(p).add(d).toSubUnit(),g=nt*rt.LOW,y=nt*rt.MEDIUM,v=nt*rt.HIGH;return {baseFee:u,low:{maxFeePerGas:u+g,maxPriorityFeePerGas:g},medium:{maxFeePerGas:u+y,maxPriorityFeePerGas:y},high:{maxFeePerGas:u+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function un(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function fn(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let o=await n.json();return o[e]??o.default}catch{return 1.5}}function J(t,e,r="tx"){return `${t}/${r}/${e}`}var It=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:o})=>{let a=t.from.toLowerCase()===o.toLowerCase(),s=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=a?TransactionType.SEND:TransactionType.RECEIVE,{from:m,to:d,gasPrice:u,gasUsed:g,hash:y}=t,v=J(n,y);return {isIncoming:!a,isOutgoing:a,isContractCall:hn(t),timestamp:s,hash:y,isSender:a,from:m,to:d,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:g,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:v}};function hn(t){return t.input!=="0x"}function At({tx:t,address:e,explorerUrl:r,chainId:n}){let o=t.from.toLowerCase()===e.toLowerCase(),a=parseInt(t.timeStamp)*1e3,i=new TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:m,hash:d,tokenDecimal:u,tokenName:g,tokenSymbol:y}=t,v=o?TransactionType.SEND:TransactionType.RECEIVE,E=J(r,d);return {isIncoming:!o,isOutgoing:o,isContractCall:!1,timestamp:a,hash:d,isSender:o,from:c,to:l,tokens:[{decimal:u,name:g,symbol:y,type:TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:v,explorerLink:E}}var wt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:o,nextPageToken:a,offset:s})=>{let i=a?JSON.parse(a):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await getNormalTxs(o,!t,{page:c,offset:s}):[]).map(y=>It({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:o})),m=(l.includes("erc20")?await getErc20Txs(o,!t,void 0,{page:c,offset:s}):[]).map(y=>At({tx:y,address:o,explorerUrl:r,chainId:n})),d=m.map(y=>y.hash),u=p.filter(y=>!d.includes(y.hash)),g={queries:[],page:c+1};return p.length&&g.queries.push("normal"),m.length&&g.queries.push("erc20"),{transactions:[...u,...m],nextPageToken:g.queries.length?JSON.stringify(g):""}};var Ct=t=>t===1||t===5||t===4||t===11155111;var Bt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},o,a)=>{let s=!e&&!r&&!n,i=Pn(t.method?.methodName),c=o.toLowerCase(),l=i.toLowerCase().includes("swap"),p=s&&t.from.address.toLowerCase()===c,m=s&&t.to.address.toLowerCase()===c,d=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",g=i.toLowerCase().includes("transfer"),y=i.toLowerCase().includes("airdrop"),v=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",T=!!a[0]&&Nt(a[0].type)&&a[0].from?.address.toLowerCase()===c,k=!!a[0]&&Nt(a[0].type)&&a[0].to?.address.toLowerCase()===c;return l?TransactionType.SWAP:p?TransactionType.SEND:m?TransactionType.RECEIVE:d?TransactionType.NFT_BUY:u?TransactionType.APPROVE:T?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:g?TransactionType.TRANSFER:y?TransactionType.AIRDROP:v?TransactionType.UNWRAP:E?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Nt(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var Pn=(t="")=>t.includes("(")?bn(t.split("(",1)[0]):t;var _t=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},o)=>{let a=t===TransactionType.TRANSFER,s=t===TransactionType.SEND,i=t===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;a&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),a&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=s||a&&c.toLowerCase()===o.toLowerCase(),m=i||a&&l.toLowerCase()===o.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===o,from:c,to:l}};async function Ut(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Sn="https://ipfs.io";function z(t,e=Sn){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function In(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Ft(t){let e={};if(t)if(t.startsWith("data:application/json;base64,")){let r=t.substring(29);try{let n=Buffer.from(r,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await In(z(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var xn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Gt(t,e="256"){let r=z(t);return `${xn}/width=${e},fit/${r}`}var Lt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},o)=>{let a=[];if(t.value!=="0"){let s=o.decimals,c=new TokenUnit(t.value,o.decimals,o.symbol).toDisplay();a.push({decimal:s.toString(),name:o.name,symbol:o.symbol,amount:c,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new TokenUnit(s.value,i,s.erc20Token.symbol).toDisplay();a.push({decimal:i.toString(),name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:l,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let i=s.erc721Token,c=await Vt(i.tokenUri,i.metadata.imageUri);a.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,amount:"1",imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let i=s.erc1155Token,c=await Vt(i.tokenUri,i.metadata.imageUri);a.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",amount:s.value,imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:TokenType.ERC1155});})),a},Vt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?z(e):e;{let[r,n]=await Ut(Ft(t));return n?"":r.image?Gt(r.image):""}};var Ht=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],O=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(O||{});var $t=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:o})=>{let a=await Lt(t,r),s=Bt(t,o,a),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=_t(s,t,o),{blockTimestamp:d,txHash:u,gasPrice:g,gasUsed:y}=t.nativeTransaction,v=J(e,u);return {isContractCall:!Ht.includes(s),isIncoming:c,isOutgoing:i,isSender:l,timestamp:d*1e3,hash:u,from:p,to:m,tokens:a,gasPrice:g,gasUsed:y,chainId:n.toString(),txType:s,explorerLink:v}};var Ot=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:o,offset:a,glacierService:s})=>{try{let i=await s.listTransactions({chainId:t.toString(),address:n,pageToken:o,pageSize:a});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>$t({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(m=>m)))).filter(p=>p.tokens.find(m=>Number(m.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var Wt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:o,nextPageToken:a,offset:s,glacierService:i})=>Ct(t)?wt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:o,nextPageToken:a,offset:s}):i.isHealthy()?Ot({networkToken:r,explorerUrl:n,chainId:t,address:o,nextPageToken:a,offset:s,glacierService:i}):{transactions:[],nextPageToken:""};var jt={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var we=async({from:t,provider:e})=>e.getTransactionCount(t);var Ce=t=>{if(t.data)try{let r=new Interface(er.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Dn(n)?n:void 0}catch{return}};function Dn(t){return Object.values(O).includes(t)}function qt(t,e,r){return new ethers.Contract(t,er.abi).interface.encodeFunctionData("approve",[e,r])}var De=new Map,Jt=(t,e,r)=>(De.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:o,approvalLimit:a})=>{let s=De.get(t);if(!s)throw rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=s,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:o??i.data.maxPriorityFeePerGas}},p={...c};if(typeof a=="string"){if(!a.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let d=c.tokenApprovals;_n(d),Un(i.data.data);let u=d.approvals[0];l.data.data=qt(u.token.address,u.spenderAddress,a),p.tokenApprovals={approvals:[{...u,value:a}],isEditable:!0};}let m={signingData:l,displayData:p};return De.set(t,m),m},cleanup:()=>De.delete(t)});function _n(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function Un(t){if((!t||t==="0x"?null:Ce({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var zt=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:o},provider:a})=>{let s=await a.getTransactionCount(t);return Number(await a.estimateGas({from:t,to:e,nonce:s,data:r,value:n,accessList:o}))};var de=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),_e=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),Y=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var st=(t,e)=>({label:t,type:DetailItemType.DATA,value:e});var Ue=(t,e,r,{isSimulationSuccessful:n,balanceChange:o,tokenApprovals:a,alert:s})=>{let{dappInfo:i}=t,c=Ce(r),l="Approve Transaction";c==="approve"&&(l="Token Spend Approval");let p=[_e("Website",i),Y("From",r.from)];r.to&&p.push(Y("To",r.to)),c&&p.push(de("Type",c)),r.data&&p.push(st("Data",r.data));let m={title:l,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:s,balanceChange:o,tokenApprovals:a,isSimulationSuccessful:n},d={type:RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:m,signingData:d}};var ct="DUMMY_API_KEY",Yt=async({proxyApiUrl:t,chainId:e,params:r,domain:n,withGasEstimation:o})=>{let a=new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}),s=["validation","simulation"];return o&&s.push("gas_estimation"),a.evm.transactionBulk.scan({chain:e.toString(),options:s,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}})},Kt=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),Xt=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:o})=>new it({baseURL:t+"/proxy/blockaid/",apiKey:ct}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:o&&o.length>0?{domain:o}:{non_dapp:!0}});var tr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,er.abi,r),o=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=Zt(o[0]),s=Zt(o[1]),i=parseInt(o[2]),c={type:TokenType.ERC20,name:a,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.Interface(er.abi),p=l.getFunction(t.data.slice(0,10)),m=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(m.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:m.spender,value:m.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function W(t){return !("type"in t)}function Fe(t){return t.type===TokenType.ERC20}function rr(t){return typeof t.to=="string"}function nr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function Ln(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function Hn(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function lt(t){return Ln(t)?t.ins.length===0&&t.outs.length===0:Hn(t)?t.approvals.length===0:!1}var M={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var or=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:o,proxyApiUrl:a})=>{let s;try{s=await Kt({proxyApiUrl:a,chainId:n,params:r,domain:e});}catch(i){console.error("simulateTransaction error",i);}return pt({rpcMethod:t,params:r,chainId:n,provider:o,simulationResult:s})},pt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:o})=>{let a,s,i,c=!1,l;if(o){let{validation:p,simulation:m,gas_estimation:d}=o;!p||p.result_type==="Error"||p.result_type==="Warning"?a=M[AlertType.WARNING]:p.result_type==="Malicious"&&(a=M[AlertType.DANGER]),m?.status==="Success"&&(c=!0,i=sr(t,m.account_summary),s=ir(m.account_summary.assets_diffs)),d?.status==="Success"&&(l=Number(d.estimate));}if(!c&&rr(e)){let p=await tr(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:a,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},qn=t=>t.trace_type==="ExposureTrace",Jn=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,zn=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>qn(r)?{[Jn(r.spender,r.asset.address)]:r}:e,{}),sr=(t,e)=>{let{traces:r}=e,n=zn(r),o=Object.entries(n).map(([s,i])=>{let c=cr(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,usd_price:m}}=i;l.value=p,l.usdPrice=`${m}`;}if(i.type==="ERC721ExposureTrace"){let{exposed:{usd_price:p,amount:m}}=i;l.value=`${m}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return o.length===0?void 0:{isEditable:o.length===1&&o[0]?.token.type===TokenType.ERC20&&t===RpcMethod.ETH_SEND_TRANSACTION,approvals:o}},ir=t=>{let e=ar(t,"in"),r=ar(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},ar=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,o="address"in n?cr(n):Yn(n);if(!o)return;let a=r[e].map(s=>{let i;if("value"in s&&s.value)if("decimals"in o){let c=numberToBN(s.value,o.decimals);i=balanceToDisplayValue(c,o.decimals);}else isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in o&&o.type===TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:s.usd_price}:void 0}).filter(s=>s!==void 0);return {token:o,items:a}}).filter(r=>r!==void 0),cr=t=>{let e;return t.type==="ERC20"?e={type:TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},Yn=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),lr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:o,proxyApiUrl:a})=>{let s,i,c;try{let{validation:l,simulation:p}=await Xt({proxyApiUrl:a,chainId:n,accountAddress:r,data:o,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?s=M[AlertType.WARNING]:l.result_type==="Malicious"&&(s=M[AlertType.DANGER]),p?.status==="Success"&&(c=sr(t.method,p.account_summary),i=ir(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=M[AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var X=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42).optional(),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional().or(z$1.number().optional()),accessList:z$1.array(z$1.object({address:z$1.string().startsWith("0x"),storageKeys:z$1.array(z$1.string())})).optional()});var Xn=z$1.tuple([X]),pr=t=>Xn.safeParse(t);var Me=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:o})=>{try{if((await t.waitForTransaction(e))?.status===1)return r(e,o),!0}catch(a){console.error(a);}return n(e,o),!1};var Ve=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var mr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,error:s,success:i}=pr(o);if(!i)return console.error("invalid params",s),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[c]=a,l=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let E=await zt({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+E.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let E=await we({from:c.from,provider:l});c.nonce=String(E);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let p=await or({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l}),{displayData:m,signingData:d}=Ue(t,e,c,p),{updateTx:u,cleanup:g}=Jt(t.requestId,d,m),y=await r.requestApproval({request:t,displayData:m,signingData:d,updateTx:u});if(g(),"error"in y)return {error:y.error};let v;try{v=await Ve(l,y);}catch(E){return {error:rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return Me({provider:l,txHash:v,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:v}};async function dr(t,e){let r=t.map(async(a,s)=>({index:s,result:await e(a)})),o=(await Promise.allSettled(r)).filter(a=>a.status==="fulfilled").map(a=>a).find(a=>a.value.result);return o?t[o.value.index]:void 0}function Z(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function Q(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let o=n.value;o.status==="fulfilled"?r[o.id]=o.value:r[o.id]={error:o.reason};}return r},{}))}var mt=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=fe.exponential()})=>{let o=0,a=0,s;for(;a<r;){a>0&&await Zn(o);try{let c=await t(a);if(e(c))return c}catch(c){s=c;}o=n(a),a++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},fe=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Zn(t){return new Promise(e=>setTimeout(e,t))}var dt=t=>mt({operation:e=>t(e>0),maxRetries:2,backoffPolicy:fe.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ur(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ut(t){let e,r=0;for(e=0;e<t.length;e++){let n=ur(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function _(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var ye=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return _([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,o=new URLSearchParams(n);return _([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var yr=getBasicCoingeckoHttp(),V,ee,te=class{constructor({storage:e,proxyApiUrl:r}){c(this,V,void 0);c(this,ee,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(o=>{let a=e[o];n[o]={},r.forEach(s=>{n[o]={[s]:{price:a?.[s],change24:a?.[`${s}_24h_change`],vol24:a?.[`${s}_24h_vol`],marketCap:a?.[`${s}_market_cap`]}};});}),n});d(this,V,e),d(this,ee,r);}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ut(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,V)?.get?.(a),n)return n;try{n=await dt(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return b(this,V)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let o,s=`getPricesWithMarketDataByAddresses-${`${ut(e)}-${r}-${n}`}`;if(o=b(this,V)?.get?.(s),o)return o;try{o=await dt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),o=void 0;}return b(this,V)?.set?.(s,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let a=await new ye(b(this,ee)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(a,[n])}return simpleTokenPrice(yr,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:o=!1,change24:a=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new ye(b(this,ee)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:a,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(yr,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:a,lastUpdated:s,shouldThrow:c})}};V=new WeakMap,ee=new WeakMap;var sa="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",ia="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",gr=object({date:string(),usd:record(number())}),He=async()=>{try{return await _([sa],gr)}catch{return await _([ia],gr)}};var ft=({name:t,version:e})=>{switch(t){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case AppName.OTHER:return}};var A,ne,j,he,$e=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:o}){c(this,A,void 0);c(this,ne,void 0);c(this,j,void 0);c(this,he,void 0);d(this,A,e),d(this,ne,r),d(this,j,n),d(this,he,o);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:b(this,A).chainName,rpcUrl:b(this,A).rpcUrl,multiContractAddress:b(this,A).utilityAddresses?.multicall}),a=b(this,A).pricingProviders?.coingecko.nativeTokenId,s=b(this,A).networkToken,i=new te({storage:b(this,ne),proxyApiUrl:b(this,j)}),c=a?await i.getSimplePrice({coinIds:[a],currencies:[n]}):{},l=c?.[a??""]?.[n]?.price??void 0,p=c?.[a??""]?.[n]?.marketCap??void 0,m=c?.[a??""]?.[n]?.vol24??void 0,d=c?.[a??""]?.[n]?.change24??void 0,u=await o.getBalance(r),g=new TokenUnit(u,s.decimals,s.symbol),y=l!==void 0?g.mul(l):void 0;return {...s,coingeckoId:a??"",type:TokenType.NATIVE,balance:u,balanceDisplayValue:g.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:d}}async listErc20Balances({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:b(this,A).chainName,rpcUrl:b(this,A).rpcUrl,multiContractAddress:b(this,A).utilityAddresses?.multicall}),a=b(this,A).pricingProviders?.coingecko.assetPlatformId,s=b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await xe({chainId:Number(e),proxyApiUrl:b(this,j)}),c=i.map(E=>E.address),l=[...i,...b(this,he)].filter(Fe),p=async E=>{let I=await new ethers.Contract(E.address,er.abi,o).balanceOf?.(r)||0n;return {...E,balance:I}},m=l.map(E=>Z(p(E),E.address)),d=await Q(m),u=new te({storage:b(this,ne),proxyApiUrl:b(this,j)}),g=a&&await u.getPricesByAddresses(c,a,n)||{},y=Object.keys(d),v={};for(let E=0;E<y.length;E++){let T=y[E];if(T===void 0)continue;let k=d[T];if(k===void 0||"error"in k){v[T]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let I=g?.[s??""]?.[n]?.price??void 0,Se=g?.[s??""]?.[n]?.marketCap??void 0,x=g?.[s??""]?.[n]?.vol24??void 0,et=g?.[s??""]?.[n]?.change24??void 0,Ie=new TokenUnit(k.balance,k.decimals,k.symbol),pe=I!==void 0?Ie.mul(I):void 0;v[k.address.toLowerCase()]={...k,type:TokenType.ERC20,balance:k.balance,balanceDisplayValue:Ie.toDisplay(),balanceInCurrency:pe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:pe?.toDisplay({fixedDp:2}),priceInCurrency:I,marketCap:Se,change24:et,vol24:x,reputation:null};}return v}async listNftBalances(){return {}}};A=new WeakMap,ne=new WeakMap,j=new WeakMap,he=new WeakMap;var kr=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:o=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:a=[],storage:s,balanceServices:i=[]})=>{let c=r.chainId,l=[...i,new $e({network:r,storage:s,proxyApiUrl:n,customTokens:a})],p=await dr(l,d=>d.isNetworkSupported(r.chainId)),m={};if(p){let d=[],u=[],g=[];t.forEach(T=>{o.includes(TokenType.NATIVE)&&d.push(Z(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),o.includes(TokenType.ERC20)&&u.push(Z(p.listErc20Balances({customTokens:a.filter(Fe),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(o.includes(TokenType.ERC721)||o.includes(TokenType.ERC1155))&&g.push(Z(p.listNftBalances({chainId:c,address:T}),T));});let y=await Q(d),v=await Q(u),E=await Q(g);Object.keys(y).forEach(T=>{let k=y[T];if(!k||"error"in k){m[T]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let I=k.symbol;m[T]={[I]:k};}),Object.keys(v).forEach(T=>{let k=v[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listErc20Balances failed: ${k.error}`}:m[T]={...m[T],...k};}),Object.keys(E).forEach(T=>{let k=E[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listNftBalances failed: ${k.error}`}:m[T]={...m[T],...k};});}else t.forEach(d=>{m[d]={error:"unsupported network"};});return m};var pa={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ma={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},vr=t=>{switch(t){case Environment.PRODUCTION:return pa;case Environment.DEV:return ma}};var ua="https://ipfs.io";function br(t,e=ua){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var fa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Oe(t,e="256"){let r=br(t);return `${fa}/width=${e},fit/${r}`}var U=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},Ta=[ChainId.ETHEREUM_HOMESTEAD],We=class{constructor({glacierApiUrl:e,headers:r}){a(this,"glacierSdk");a(this,"isGlacierHealthy",!0);a(this,"supportedChainIds",[]);a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e,HEADERS:r}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!Ta.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(o){throw o instanceof U&&this.setGlacierToUnhealthy(),o}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(o){throw o instanceof U&&this.setGlacierToUnhealthy(),o}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:o}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(s.balance,s.decimals,s.symbol),c=s.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:TokenType.NATIVE,logoUri:s.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:o??""}}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}async listErc721Balances({chainId:e,address:r}){let n,o=[];do try{let a=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});o.push(...a.erc721TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}while(n);return o}async listErc1155Balances({chainId:e,address:r}){let n,o=[];do try{let a=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});o.push(...a.erc1155TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}while(n);return o}async listNftBalances({chainId:e,address:r}){let o=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(a=>a.status==="fulfilled").flatMap(a=>a.value.map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:Oe(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,collectionName:"Unkown",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:{description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(o)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:o}){try{let a=[],s;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});a.push(...Ea(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...ka(o),...a].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:o}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:o})}catch(a){throw a instanceof U&&this.setGlacierToUnhealthy(),a}}},ka=t=>t.map(e=>({...e,decimals:e.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),Ea=(t,e)=>t.map(r=>{let n=new TokenUnit(r.balance,r.decimals,r.symbol),o=n.toDisplay(),a=r.balanceValue?.value.toString(),s=r.price?.value,i=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:a,balanceDisplayValue:o,balanceInCurrency:i,priceInCurrency:s,reputation:r.tokenReputation,type:TokenType.ERC20}});var yt=t=>{let e="";e+=`Domain
|
|
18
18
|
`;for(let r in t.domain)e+=` ${r}: ${q(String(t.domain[r]))}
|
|
19
19
|
`;e+=`
|
|
20
20
|
Message
|
|
@@ -31,7 +31,7 @@ Message
|
|
|
31
31
|
`;return e},Ir=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
32
32
|
`,e+=`${q(String(r.value))}
|
|
33
33
|
|
|
34
|
-
`;}),e},q=t=>{let e={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 t.split("").map(r=>e[r]||r).join("")};var Te=z$1.string().describe("message"),D=z$1.string().describe("address");var Ar=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([D,Te])});var wr=z$1.object({name:z$1.string(),type:z$1.string()}),ae=z$1.object({types:z$1.object({EIP712Domain:z$1.array(wr)}).catchall(z$1.array(wr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),ht=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(),Tt=ae.or(ht),Cr=z$1.union([z$1.string().describe("data string"),ae]),Dr=z$1.union([z$1.string().describe("data string"),Tt]),Nr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([D,Dr])}),Br=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([D,Dr])}),_r=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([D,Cr])}),Ur=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([D,Cr])});var Fr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Te,D]),z$1.tuple([Te,D,z$1.string().optional().describe("password")])])});var Pa=z$1.discriminatedUnion("method",[Fr,Ar,Nr,Br,_r,Ur]).transform((t,e)=>{let{method:r,params:n}=t;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 o=n[0],a=n[1];if(typeof a!="string")return {data:a,address:o,method:r};try{let s=JSON.parse(a);return {data:Tt.parse(s),address:o,method:r}}catch{return e.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 o=n[0],a=n[1];if(typeof a!="string")return {data:a,address:o,method:r};try{let s=JSON.parse(a);return {data:ae.parse(s),address:o,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Gr(t){return Pa.safeParse(t)}var Mr=t=>ht.safeParse(t).success,nl=t=>ae.safeParse(t).success;var Vr=t=>{try{let{EIP712Domain:e,...r}=t.types;return TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Lr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let o=Gr({method:t.method,params:t.params});if(!o.success)return console.error("invalid params",o.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:o.error}})};let{method:a,data:s,address:i}=o.data,c;(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Vr(s));let l,p,m,d;if(c&&!c.isValid&&(d={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===RpcMethod.ETH_SIGN)l={type:a,account:i,data:s},p=s,m="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(a===RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:s},p=toUtf8String(s);else if(a===RpcMethod.SIGN_TYPED_DATA||a===RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:s},p=Mr(s)?Ir(s):yt(s);else if(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:s};let{types:v,primaryType:E,...T}=s;p=yt(T);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let u=await lr({request:t,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:a,params:t.params},dAppUrl:t.dappInfo.url}),g={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[p]}],disclaimer:m,alert:u?.alert??d,balanceChange:u?.balanceChange,tokenApprovals:u?.tokenApprovals},y=await r.requestApproval({request:t,displayData:g,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Hr=async(t,e)=>{try{return {result:await(await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Or=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var Wr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var je=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var Jr=async t=>{let{secretId:e,approvalController:r}=t,n=Wr(t)?je(t).EVM:void 0,o=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${o}`)}};var ie,qe=class{constructor(e){this.baseUrl=e;c(this,ie,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(o=>o.community_id).some(o=>o===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let o=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(o.ok)return await o.json();throw new Error(`${o.status}:${o.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,ie).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,ie,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,ie)}async getNftList({address:e,chainId:r}){return _([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Fa)}};ie=new WeakMap;var _a=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),Ua=_a.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()})),Fa=z$1.array(Ua);var N,ce,ze,Ke,Yr,Ye=class{constructor({proxyApiUrl:e}){c(this,ce);c(this,Ke);c(this,N,void 0);d(this,N,new qe(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,N).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:o,chainIdString:a}=await e(this,ce,ze).call(this,e$1),s=o.native_token_id,i=await b(this,N).getTokenBalance({address:r,chainId:a,tokenId:s}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await Le()).usd[n.toLowerCase()],d=m?m*i.price:void 0,u=d?c.mul(d).toDisplay({fixedDp:2}):void 0,g=d?c.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:o,chainIdString:a}=await e(this,ce,ze).call(this,e$1),s=await b(this,N).getTokensBalanceOnChain({chainId:a,address:r}),i=await Le(),c={};for(let l of s){if(l.id===o.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=i.usd[n.toLowerCase()],u=d?d*l.price:void 0,g=u?p.mul(u).toDisplay({fixedDp:2}):void 0,y=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:o.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:m,balanceInCurrency:y,priceInCurrency:u,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e$1,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await e(this,ce,ze).call(this,e$1),o=await b(this,N).getNftList({chainId:n,address:r});return e(this,Ke,Yr).call(this,o)}};N=new WeakMap,ce=new WeakSet,ze=async function(e){let n=(await b(this,N).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await b(this,N).getChainInfo({chainId:n});if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:o,chainIdString:n}},Ke=new WeakSet,Yr=function(e){return e.reduce((r,n)=>({...r,[`${n.contract_id}-${n.id}`]:{address:n.contract_id,description:n.description??"",logoUri:n.thumbnail_url,logoSmall:$e(n.content),name:n.name,symbol:"",tokenId:`${n.inner_id}`,tokenUri:n.detail_url,collectionName:n.collection_name,balance:BigInt(n.amount),balanceDisplayValue:`${n.amount}`,type:n.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{description:n.description??"",properties:""}}}),{})};var Ma=z$1.tuple([X,X]).rest(X).refine(t=>vt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>vt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>La(t,"nonce")||Va(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Va(t,e){return !vt(t,e)}function La(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function vt(t,e){return new Set(t.map(n=>n[e])).size===1}var Kr=t=>Ma.safeParse(t);var Xr=async(t,e)=>{if(t[0].nonce)return;let r=await Ae({from:t[0].from,provider:e});return Promise.all(t.map(async(n,o)=>{n.nonce=String(r+o);}))};var Xe=new Map,Zr=(t,e,r)=>(Xe.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:o},a)=>{let s=Xe.get(t);if(!s)throw rpcErrors.resourceNotFound();let{signingRequests:i}=s,l={signingRequests:i.map((p,m)=>{if(a===void 0||a===m){let{signingData:d}=p;return {signingData:{...d,data:{...d.data,maxFeePerGas:n??d.data.maxFeePerGas,maxPriorityFeePerGas:o??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return Xe.set(t,l),l},cleanup:()=>Xe.delete(t)});var en=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:o,provider:a,populateMissingGas:s})=>{let i;try{i=await Yt({proxyApiUrl:o,chainId:n,params:r,domain:e,withGasEstimation:s});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:M[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,g)=>{let y=r[g],v=await pt({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:u});return s&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=$a(c),m=Wa(c),d=Oa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},$a=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},Oa=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(o=>{let a=r.approvals.find(s=>o.token.address===s.token.address&&o.spenderAddress===s.spenderAddress);if(!a){r.approvals.push({...o});return}a.value=o.value,a.usdPrice=o.usdPrice;}),r),{approvals:[],isEditable:!1});return ja(e,t),lt(e)?void 0:e},Wa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(o=>{let a=Qr(r.ins,o);a?a.items.push(...o.items):r.ins.push(o);}),n.outs.forEach(o=>{let a=Qr(r.outs,o);a?a.items.push(...o.items):r.outs.push({...o});})),r),{ins:[],outs:[]});return lt(e)?void 0:e},Qr=(t,e)=>t.find(r=>W(r.token)&&W(e.token)?r.token.symbol===e.token.symbol:!W(r.token)&&!W(e.token)?r.token.address===e.token.address:!1),ja=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!W(a.token)&&!W(r.token)&&a.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(a=>a.spenderAddress!==r.spenderAddress&&r.token.address!==a.token.address);else {let a=n.tokenApprovals.approvals.find(s=>s.spenderAddress===r.spenderAddress&&s.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var tn=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,success:s,error:i}=Kr(o);if(!s)return console.error("invalid params",i),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Xr(a,c);}catch(x){return console.error("Unable to calculate nonce",x),{error:rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:x}})}}let l=a.every(x=>Number(x.gas)>0),{alert:p,balanceChange:m,isSimulationSuccessful:d,tokenApprovals:u,scans:g}=await en({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:a,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l});if(!g.every(({transaction:x})=>Number(x.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let v={title:"Approve Transaction Batch",details:[{title:"Transaction Details",items:[Be("Website",t.dappInfo),Y("From",a[0].from)]}],network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},isSimulationSuccessful:d,balanceChange:m,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=g.map(x=>_e(t,e,x.transaction,x)),{cleanup:T,updateTx:k}=Zr(t.requestId,E,v),I=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in I)return {error:I.error};if(I.result.length!==a.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${I.result.length}`})};let Re=[];for(let[x,Qe]of I.result.entries()){let Se=x===I.result.length-1,pe=await Me(c,Qe),an=Ge({provider:c,txHash:pe,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!Se&&!await an)return {error:rpcErrors.internal({message:`Transaction ${x+1} failed! Batch execution stopped`})};Re.push(pe);}return {result:Re}};var le,Pe,B,F,nn=class{constructor({approvalController:e,environment:r,appInfo:n}){c(this,le,void 0);c(this,Pe,void 0);c(this,B,void 0);c(this,F,void 0);let{glacierApiUrl:o,proxyApiUrl:a}=vr(r);d(this,le,new Oe({glacierApiUrl:o,headers:ft(n)})),d(this,Pe,new Ye({proxyApiUrl:a})),d(this,B,a),d(this,F,e);}getProvider(e){return w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Or({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return je(e)}deriveAddress(e){return Jr({...e,approvalController:b(this,F)})}getBalances({addresses:e,network:r,currency:n,customTokens:o,storage:a,tokenTypes:s}){return kr({addresses:e,currency:n,network:r,proxyApiUrl:b(this,B),customTokens:o,balanceServices:[b(this,le),b(this,Pe)],storage:a,tokenTypes:s})}getManifest(){let e=parseManifest(jt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:o,utilityAddresses:a,caipId:s}=e;return Rt({chainId:r,chainName:n,rpcUrl:o,multiContractAddress:a?.multicall,caipId:s,proxyApiUrl:b(this,B)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:o,offset:a}=e,{chainId:s,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return Wt({chainId:s,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:o,offset:a,glacierService:b(this,le)})}getTokens(e){let{chainId:r}=e;return Ie({chainId:r,proxyApiUrl:b(this,B)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return mr({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return nr(b(this,F))?tn({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};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 Lr({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)});default:return Ja(e.method)?Hr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};le=new WeakMap,Pe=new WeakMap,B=new WeakMap,F=new WeakMap;var Ja=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
34
|
+
`;}),e},q=t=>{let e={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 t.split("").map(r=>e[r]||r).join("")};var ke=z$1.string().describe("message"),D=z$1.string().describe("address");var Ar=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([D,ke])});var wr=z$1.object({name:z$1.string(),type:z$1.string()}),ae=z$1.object({types:z$1.object({EIP712Domain:z$1.array(wr)}).catchall(z$1.array(wr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),ht=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(),Tt=ae.or(ht),Cr=z$1.union([z$1.string().describe("data string"),ae]),Dr=z$1.union([z$1.string().describe("data string"),Tt]),Nr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([D,Dr])}),Br=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([D,Dr])}),_r=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([D,Cr])}),Ur=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([D,Cr])});var Fr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([ke,D]),z$1.tuple([ke,D,z$1.string().optional().describe("password")])])});var Pa=z$1.discriminatedUnion("method",[Fr,Ar,Nr,Br,_r,Ur]).transform((t,e)=>{let{method:r,params:n}=t;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 o=n[0],a=n[1];if(typeof a!="string")return {data:a,address:o,method:r};try{let s=JSON.parse(a);return {data:Tt.parse(s),address:o,method:r}}catch{return e.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 o=n[0],a=n[1];if(typeof a!="string")return {data:a,address:o,method:r};try{let s=JSON.parse(a);return {data:ae.parse(s),address:o,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Gr(t){return Pa.safeParse(t)}var Mr=t=>ht.safeParse(t).success,nl=t=>ae.safeParse(t).success;var Vr=t=>{try{let{EIP712Domain:e,...r}=t.types;return TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Lr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let o=Gr({method:t.method,params:t.params});if(!o.success)return console.error("invalid params",o.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:o.error}})};let{method:a,data:s,address:i}=o.data,c;(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Vr(s));let l,p,m,d;if(c&&!c.isValid&&(d={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===RpcMethod.ETH_SIGN)l={type:a,account:i,data:s},p=s,m="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(a===RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:s},p=toUtf8String(s);else if(a===RpcMethod.SIGN_TYPED_DATA||a===RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:s},p=Mr(s)?Ir(s):yt(s);else if(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:s};let{types:v,primaryType:E,...T}=s;p=yt(T);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let u=await lr({request:t,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:a,params:t.params},dAppUrl:t.dappInfo.url}),g={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[de("Message",p,"vertical")]}],disclaimer:m,alert:u?.alert??d,balanceChange:u?.balanceChange,tokenApprovals:u?.tokenApprovals},y=await r.requestApproval({request:t,displayData:g,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Hr=async(t,e)=>{try{return {result:await(await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Or=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var Wr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var qe=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var Jr=async t=>{let{secretId:e,approvalController:r}=t,n=Wr(t)?qe(t).EVM:void 0,o=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${o}`)}};var ie,Je=class{constructor(e){this.baseUrl=e;c(this,ie,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(o=>o.community_id).some(o=>o===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let o=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(o.ok)return await o.json();throw new Error(`${o.status}:${o.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,ie).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,ie,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,ie)}async getNftList({address:e,chainId:r}){return _([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Fa)}};ie=new WeakMap;var _a=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),Ua=_a.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()})),Fa=z$1.array(Ua);var N,ce,Ye,Xe,Yr,Ke=class{constructor({proxyApiUrl:e}){c(this,ce);c(this,Xe);c(this,N,void 0);d(this,N,new Je(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,N).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:o,chainIdString:a}=await e(this,ce,Ye).call(this,e$1),s=o.native_token_id,i=await b(this,N).getTokenBalance({address:r,chainId:a,tokenId:s}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await He()).usd[n.toLowerCase()],d=m?m*i.price:void 0,u=d?c.mul(d).toDisplay({fixedDp:2}):void 0,g=d?c.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:o,chainIdString:a}=await e(this,ce,Ye).call(this,e$1),s=await b(this,N).getTokensBalanceOnChain({chainId:a,address:r}),i=await He(),c={};for(let l of s){if(l.id===o.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=i.usd[n.toLowerCase()],u=d?d*l.price:void 0,g=u?p.mul(u).toDisplay({fixedDp:2}):void 0,y=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:o.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:m,balanceInCurrency:y,priceInCurrency:u,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e$1,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await e(this,ce,Ye).call(this,e$1),o=await b(this,N).getNftList({chainId:n,address:r});return e(this,Xe,Yr).call(this,o)}};N=new WeakMap,ce=new WeakSet,Ye=async function(e){let n=(await b(this,N).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await b(this,N).getChainInfo({chainId:n});if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:o,chainIdString:n}},Xe=new WeakSet,Yr=function(e){return e.reduce((r,n)=>({...r,[`${n.contract_id}-${n.id}`]:{address:n.contract_id,description:n.description??"",logoUri:n.thumbnail_url,logoSmall:Oe(n.content),name:n.name,symbol:"",tokenId:`${n.inner_id}`,tokenUri:n.detail_url,collectionName:n.collection_name,balance:BigInt(n.amount),balanceDisplayValue:`${n.amount}`,type:n.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{description:n.description??"",properties:""}}}),{})};var Ma=z$1.tuple([X,X]).rest(X).refine(t=>vt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>vt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>La(t,"nonce")||Va(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Va(t,e){return !vt(t,e)}function La(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function vt(t,e){return new Set(t.map(n=>n[e])).size===1}var Kr=t=>Ma.safeParse(t);var Xr=async(t,e)=>{if(t[0].nonce)return;let r=await we({from:t[0].from,provider:e});return Promise.all(t.map(async(n,o)=>{n.nonce=String(r+o);}))};var Ze=new Map,Zr=(t,e,r)=>(Ze.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:o},a)=>{let s=Ze.get(t);if(!s)throw rpcErrors.resourceNotFound();let{signingRequests:i}=s,l={signingRequests:i.map((p,m)=>{if(a===void 0||a===m){let{signingData:d}=p;return {signingData:{...d,data:{...d.data,maxFeePerGas:n??d.data.maxFeePerGas,maxPriorityFeePerGas:o??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return Ze.set(t,l),l},cleanup:()=>Ze.delete(t)});var en=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:o,provider:a,populateMissingGas:s})=>{let i;try{i=await Yt({proxyApiUrl:o,chainId:n,params:r,domain:e,withGasEstimation:s});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:M[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,g)=>{let y=r[g],v=await pt({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:u});return s&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=$a(c),m=Wa(c),d=Oa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},$a=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},Oa=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(o=>{let a=r.approvals.find(s=>o.token.address===s.token.address&&o.spenderAddress===s.spenderAddress);if(!a){r.approvals.push({...o});return}a.value=o.value,a.usdPrice=o.usdPrice;}),r),{approvals:[],isEditable:!1});return ja(e,t),lt(e)?void 0:e},Wa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(o=>{let a=Qr(r.ins,o);a?a.items.push(...o.items):r.ins.push(o);}),n.outs.forEach(o=>{let a=Qr(r.outs,o);a?a.items.push(...o.items):r.outs.push({...o});})),r),{ins:[],outs:[]});return lt(e)?void 0:e},Qr=(t,e)=>t.find(r=>W(r.token)&&W(e.token)?r.token.symbol===e.token.symbol:!W(r.token)&&!W(e.token)?r.token.address===e.token.address:!1),ja=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!W(a.token)&&!W(r.token)&&a.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(a=>a.spenderAddress!==r.spenderAddress&&r.token.address!==a.token.address);else {let a=n.tokenApprovals.approvals.find(s=>s.spenderAddress===r.spenderAddress&&s.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var tn=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,success:s,error:i}=Kr(o);if(!s)return console.error("invalid params",i),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Xr(a,c);}catch(x){return console.error("Unable to calculate nonce",x),{error:rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:x}})}}let l=a.every(x=>Number(x.gas)>0),{alert:p,balanceChange:m,isSimulationSuccessful:d,tokenApprovals:u,scans:g}=await en({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:a,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l});if(!g.every(({transaction:x})=>Number(x.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let v={title:"Approve Transaction Batch",details:[{title:"Transaction Details",items:[_e("Website",t.dappInfo),Y("From",a[0].from)]}],network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},isSimulationSuccessful:d,balanceChange:m,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=g.map(x=>Ue(t,e,x.transaction,x)),{cleanup:T,updateTx:k}=Zr(t.requestId,E,v),I=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in I)return {error:I.error};if(I.result.length!==a.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${I.result.length}`})};let Se=[];for(let[x,et]of I.result.entries()){let Ie=x===I.result.length-1,pe=await Ve(c,et),an=Me({provider:c,txHash:pe,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!Ie&&!await an)return {error:rpcErrors.internal({message:`Transaction ${x+1} failed! Batch execution stopped`})};Se.push(pe);}return {result:Se}};var le,Re,B,F,nn=class{constructor({approvalController:e,environment:r,appInfo:n}){c(this,le,void 0);c(this,Re,void 0);c(this,B,void 0);c(this,F,void 0);let{glacierApiUrl:o,proxyApiUrl:a}=vr(r);d(this,le,new We({glacierApiUrl:o,headers:ft(n)})),d(this,Re,new Ke({proxyApiUrl:a})),d(this,B,a),d(this,F,e);}getProvider(e){return w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Or({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return qe(e)}deriveAddress(e){return Jr({...e,approvalController:b(this,F)})}getBalances({addresses:e,network:r,currency:n,customTokens:o,storage:a,tokenTypes:s}){return kr({addresses:e,currency:n,network:r,proxyApiUrl:b(this,B),customTokens:o,balanceServices:[b(this,le),b(this,Re)],storage:a,tokenTypes:s})}getManifest(){let e=parseManifest(jt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:o,utilityAddresses:a,caipId:s}=e;return Rt({chainId:r,chainName:n,rpcUrl:o,multiContractAddress:a?.multicall,caipId:s,proxyApiUrl:b(this,B)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:o,offset:a}=e,{chainId:s,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return Wt({chainId:s,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:o,offset:a,glacierService:b(this,le)})}getTokens(e){let{chainId:r}=e;return xe({chainId:r,proxyApiUrl:b(this,B)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return mr({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return nr(b(this,F))?tn({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};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 Lr({request:e,network:r,approvalController:b(this,F),proxyApiUrl:b(this,B)});default:return Ja(e.method)?Hr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};le=new WeakMap,Re=new WeakMap,B=new WeakMap,F=new WeakMap;var Ja=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
35
35
|
|
|
36
36
|
export { O as ERC20TransactionType, nn as EvmModule, Ht as NonContractCallTypes, Z as addIdToPromise, nl as isTypedData, Mr as isTypedDataV1, Q as settleAllIdPromises };
|
|
37
37
|
//# sourceMappingURL=out.js.map
|