@avalabs/evm-module 1.6.2 → 1.7.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 +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -6
- package/dist/index.d.ts +4 -6
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/provider/index.d.cts +1 -1
- package/dist/provider/index.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -23,7 +23,7 @@ var er__default = /*#__PURE__*/_interopDefault(er);
|
|
|
23
23
|
var it__default = /*#__PURE__*/_interopDefault(it);
|
|
24
24
|
var Zt__default = /*#__PURE__*/_interopDefault(Zt);
|
|
25
25
|
|
|
26
|
-
async function xe({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.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 coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:o},mn(n,ln),new ethers.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===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.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.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.rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await fn(a,o),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.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 xt=({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 coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.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:vmModuleTypes.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 coreUtilsSdk.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?vmModuleTypes.TransactionType.SEND:vmModuleTypes.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:vmModuleTypes.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 coreEtherscanSdk.getNormalTxs(o,!t,{page:c,offset:s}):[]).map(y=>xt({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:o})),m=(l.includes("erc20")?await coreEtherscanSdk.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]&&Dt(a[0].type)&&a[0].from?.address.toLowerCase()===c,k=!!a[0]&&Dt(a[0].type)&&a[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:d?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:T?vmModuleTypes.TransactionType.NFT_SEND:k?vmModuleTypes.TransactionType.NFT_RECEIVE:g?vmModuleTypes.TransactionType.TRANSFER:y?vmModuleTypes.TransactionType.AIRDROP:v?vmModuleTypes.TransactionType.UNWRAP:E?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function Dt(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Pn=(t="")=>t.includes("(")?bn__default.default(t.split("(",1)[0]):t;var _t=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},o)=>{let a=t===vmModuleTypes.TransactionType.TRANSFER,s=t===vmModuleTypes.TransactionType.SEND,i=t===vmModuleTypes.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 coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function xn(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 xn(z(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var In="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Gt(t,e="256"){let r=z(t);return `${In}/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 coreUtilsSdk.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:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new coreUtilsSdk.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:vmModuleTypes.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:vmModuleTypes.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:vmModuleTypes.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=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.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 ethers.Interface(er__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Nn(n)?n:void 0}catch{return}};function Nn(t){return Object.values(O).includes(t)}function qt(t,e,r){return new ethers.ethers.Contract(t,er__default.default.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.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.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.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.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:vmModuleTypes.DetailItemType.TEXT,value:e}),Be=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),Y=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var st=(t,e)=>({label:t,type:vmModuleTypes.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:vmModuleTypes.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__default.default({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__default.default({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__default.default({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.ethers.Contract(t.to,er__default.default.abi,r),o=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=Zt__default.default(o[0]),s=Zt__default.default(o[1]),i=parseInt(o[2]),c={type:vmModuleTypes.TokenType.ERC20,name:a,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(er__default.default.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 coreUtilsSdk.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===vmModuleTypes.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={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.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[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=M[vmModuleTypes.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===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.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=coreUtilsSdk.numberToBN(s.value,o.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,o.decimals);}else ethers.isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in o&&o.type===vmModuleTypes.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:vmModuleTypes.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:vmModuleTypes.TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:vmModuleTypes.TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:vmModuleTypes.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[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(s=M[vmModuleTypes.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[vmModuleTypes.AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var X=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42).optional(),data:zod.z.string().optional(),value:zod.z.string().startsWith("0x").optional(),gas:zod.z.string().startsWith("0x").optional(),gasPrice:zod.z.string().startsWith("0x").optional(),maxFeePerGas:zod.z.string().startsWith("0x").optional(),maxPriorityFeePerGas:zod.z.string().startsWith("0x").optional(),nonce:zod.z.string().optional(),chainId:zod.z.string().optional().or(zod.z.number().optional()),accessList:zod.z.array(zod.z.object({address:zod.z.string().startsWith("0x"),storageKeys:zod.z.array(zod.z.string())})).optional()});var Xn=zod.z.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.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.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.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.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"}}],vmModuleTypes.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"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var yr=coreCoingeckoSdk.getBasicCoingeckoHttp(),V,ee,te=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,V,void 0);chunkTKL4UUHE_cjs.c(this,ee,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.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});chunkTKL4UUHE_cjs.d(this,V,e),chunkTKL4UUHE_cjs.d(this,ee,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ut(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.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 chunkTKL4UUHE_cjs.b(this,V)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,s=`getPricesWithMarketDataByAddresses-${`${ut(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.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 chunkTKL4UUHE_cjs.b(this,V)?.set?.(s,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let a=await new fe(chunkTKL4UUHE_cjs.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 coreCoingeckoSdk.simpleTokenPrice(yr,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.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(chunkTKL4UUHE_cjs.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 coreCoingeckoSdk.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=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Le=async()=>{try{return await _([sa],gr)}catch{return await _([ia],gr)}};var ft=({name:t,version:e})=>{switch(t){case vmModuleTypes.AppName.CORE_MOBILE_IOS:case vmModuleTypes.AppName.CORE_MOBILE_ANDROID:case vmModuleTypes.AppName.CORE_WEB:case vmModuleTypes.AppName.CORE_EXTENSION:case vmModuleTypes.AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};var A,ne,j,ge,He=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:o}){chunkTKL4UUHE_cjs.c(this,A,void 0);chunkTKL4UUHE_cjs.c(this,ne,void 0);chunkTKL4UUHE_cjs.c(this,j,void 0);chunkTKL4UUHE_cjs.c(this,ge,void 0);chunkTKL4UUHE_cjs.d(this,A,e),chunkTKL4UUHE_cjs.d(this,ne,r),chunkTKL4UUHE_cjs.d(this,j,n),chunkTKL4UUHE_cjs.d(this,ge,o);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,s=chunkTKL4UUHE_cjs.b(this,A).networkToken,i=new te({storage:chunkTKL4UUHE_cjs.b(this,ne),proxyApiUrl:chunkTKL4UUHE_cjs.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 coreUtilsSdk.TokenUnit(u,s.decimals,s.symbol),y=l!==void 0?g.mul(l):void 0;return {...s,coingeckoId:a??"",type:vmModuleTypes.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:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.assetPlatformId,s=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await xe({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,j)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,ge)].filter(Ue),p=async E=>{let x=await new ethers.ethers.Contract(E.address,er__default.default.abi,o).balanceOf?.(r)||0n;return {...E,balance:x}},m=l.map(E=>Z(p(E),E.address)),d=await Q(m),u=new te({storage:chunkTKL4UUHE_cjs.b(this,ne),proxyApiUrl:chunkTKL4UUHE_cjs.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 x=g?.[s??""]?.[n]?.price??void 0,Re=g?.[s??""]?.[n]?.marketCap??void 0,I=g?.[s??""]?.[n]?.vol24??void 0,Qe=g?.[s??""]?.[n]?.change24??void 0,Se=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),pe=x!==void 0?Se.mul(x):void 0;v[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:Se.toDisplay(),balanceInCurrency:pe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:pe?.toDisplay({fixedDp:2}),priceInCurrency:x,marketCap:Re,change24:Qe,vol24:I,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=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.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(vmModuleTypes.TokenType.NATIVE)&&d.push(Z(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),o.includes(vmModuleTypes.TokenType.ERC20)&&u.push(Z(p.listErc20Balances({customTokens:a.filter(Ue),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(o.includes(vmModuleTypes.TokenType.ERC721)||o.includes(vmModuleTypes.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 x=k.symbol;m[T]={[x]: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 vmModuleTypes.Environment.PRODUCTION:return pa;case vmModuleTypes.Environment.DEV:return ma}};var ua="https://ipfs.io";function br(t,e=ua){if(!t)return "";try{return coreUtilsSdk.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);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ta=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Oe=class{constructor({glacierApiUrl:e,headers:r}){chunkTKL4UUHE_cjs.a(this,"glacierSdk");chunkTKL4UUHE_cjs.a(this,"isGlacierHealthy",!0);chunkTKL4UUHE_cjs.a(this,"supportedChainIds",[]);chunkTKL4UUHE_cjs.a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new glacierSdk.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 coreUtilsSdk.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:vmModuleTypes.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===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(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:vmModuleTypes.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 coreUtilsSdk.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:vmModuleTypes.TokenType.ERC20}});var yt=t=>{let e="";e+=`Domain
|
|
26
|
+
async function Ie({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.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 coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:o},mn(n,ln),new ethers.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===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.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.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.rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await fn(a,o),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.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 coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.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:vmModuleTypes.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 coreUtilsSdk.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?vmModuleTypes.TransactionType.SEND:vmModuleTypes.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:vmModuleTypes.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 coreEtherscanSdk.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 coreEtherscanSdk.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?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:d?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:T?vmModuleTypes.TransactionType.NFT_SEND:k?vmModuleTypes.TransactionType.NFT_RECEIVE:g?vmModuleTypes.TransactionType.TRANSFER:y?vmModuleTypes.TransactionType.AIRDROP:v?vmModuleTypes.TransactionType.UNWRAP:E?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function Nt(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Pn=(t="")=>t.includes("(")?bn__default.default(t.split("(",1)[0]):t;var _t=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},o)=>{let a=t===vmModuleTypes.TransactionType.TRANSFER,s=t===vmModuleTypes.TransactionType.SEND,i=t===vmModuleTypes.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 coreUtilsSdk.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 coreUtilsSdk.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:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new coreUtilsSdk.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:vmModuleTypes.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:vmModuleTypes.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:vmModuleTypes.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=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.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 ethers.Interface(er__default.default.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.ethers.Contract(t,er__default.default.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.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.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.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.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:vmModuleTypes.DetailItemType.TEXT,value:e}),Be=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),Y=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var st=(t,e)=>({label:t,type:vmModuleTypes.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:vmModuleTypes.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__default.default({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__default.default({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__default.default({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.ethers.Contract(t.to,er__default.default.abi,r),o=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=Zt__default.default(o[0]),s=Zt__default.default(o[1]),i=parseInt(o[2]),c={type:vmModuleTypes.TokenType.ERC20,name:a,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(er__default.default.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 coreUtilsSdk.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===vmModuleTypes.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={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.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[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=M[vmModuleTypes.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===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.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=coreUtilsSdk.numberToBN(s.value,o.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,o.decimals);}else ethers.isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in o&&o.type===vmModuleTypes.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:vmModuleTypes.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:vmModuleTypes.TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:vmModuleTypes.TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:vmModuleTypes.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[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(s=M[vmModuleTypes.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[vmModuleTypes.AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var X=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42).optional(),data:zod.z.string().optional(),value:zod.z.string().startsWith("0x").optional(),gas:zod.z.string().startsWith("0x").optional(),gasPrice:zod.z.string().startsWith("0x").optional(),maxFeePerGas:zod.z.string().startsWith("0x").optional(),maxPriorityFeePerGas:zod.z.string().startsWith("0x").optional(),nonce:zod.z.string().optional(),chainId:zod.z.string().optional().or(zod.z.number().optional()),accessList:zod.z.array(zod.z.object({address:zod.z.string().startsWith("0x"),storageKeys:zod.z.array(zod.z.string())})).optional()});var Xn=zod.z.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.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.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.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.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"}}],vmModuleTypes.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"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var yr=coreCoingeckoSdk.getBasicCoingeckoHttp(),V,ee,te=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,V,void 0);chunkTKL4UUHE_cjs.c(this,ee,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.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});chunkTKL4UUHE_cjs.d(this,V,e),chunkTKL4UUHE_cjs.d(this,ee,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ut(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.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 chunkTKL4UUHE_cjs.b(this,V)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,s=`getPricesWithMarketDataByAddresses-${`${ut(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.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 chunkTKL4UUHE_cjs.b(this,V)?.set?.(s,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let a=await new fe(chunkTKL4UUHE_cjs.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 coreCoingeckoSdk.simpleTokenPrice(yr,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.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(chunkTKL4UUHE_cjs.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 coreCoingeckoSdk.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=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Le=async()=>{try{return await _([sa],gr)}catch{return await _([ia],gr)}};var ft=({name:t,version:e})=>{switch(t){case vmModuleTypes.AppName.CORE_MOBILE_IOS:case vmModuleTypes.AppName.CORE_MOBILE_ANDROID:case vmModuleTypes.AppName.CORE_WEB:case vmModuleTypes.AppName.CORE_EXTENSION:case vmModuleTypes.AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};var A,ne,j,ge,He=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:o}){chunkTKL4UUHE_cjs.c(this,A,void 0);chunkTKL4UUHE_cjs.c(this,ne,void 0);chunkTKL4UUHE_cjs.c(this,j,void 0);chunkTKL4UUHE_cjs.c(this,ge,void 0);chunkTKL4UUHE_cjs.d(this,A,e),chunkTKL4UUHE_cjs.d(this,ne,r),chunkTKL4UUHE_cjs.d(this,j,n),chunkTKL4UUHE_cjs.d(this,ge,o);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let o=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,s=chunkTKL4UUHE_cjs.b(this,A).networkToken,i=new te({storage:chunkTKL4UUHE_cjs.b(this,ne),proxyApiUrl:chunkTKL4UUHE_cjs.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 coreUtilsSdk.TokenUnit(u,s.decimals,s.symbol),y=l!==void 0?g.mul(l):void 0;return {...s,coingeckoId:a??"",type:vmModuleTypes.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:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.assetPlatformId,s=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await Ie({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,j)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,ge)].filter(Ue),p=async E=>{let I=await new ethers.ethers.Contract(E.address,er__default.default.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:chunkTKL4UUHE_cjs.b(this,ne),proxyApiUrl:chunkTKL4UUHE_cjs.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 coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),pe=I!==void 0?Se.mul(I):void 0;v[k.address.toLowerCase()]={...k,type:vmModuleTypes.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=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.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(vmModuleTypes.TokenType.NATIVE)&&d.push(Z(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),o.includes(vmModuleTypes.TokenType.ERC20)&&u.push(Z(p.listErc20Balances({customTokens:a.filter(Ue),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(o.includes(vmModuleTypes.TokenType.ERC721)||o.includes(vmModuleTypes.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 vmModuleTypes.Environment.PRODUCTION:return pa;case vmModuleTypes.Environment.DEV:return ma}};var ua="https://ipfs.io";function br(t,e=ua){if(!t)return "";try{return coreUtilsSdk.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);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ta=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Oe=class{constructor({glacierApiUrl:e,headers:r}){chunkTKL4UUHE_cjs.a(this,"glacierSdk");chunkTKL4UUHE_cjs.a(this,"isGlacierHealthy",!0);chunkTKL4UUHE_cjs.a(this,"supportedChainIds",[]);chunkTKL4UUHE_cjs.a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new glacierSdk.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 coreUtilsSdk.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:vmModuleTypes.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===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(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:vmModuleTypes.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 coreUtilsSdk.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:vmModuleTypes.TokenType.ERC20}});var yt=t=>{let e="";e+=`Domain
|
|
27
27
|
`;for(let r in t.domain)e+=` ${r}: ${q(String(t.domain[r]))}
|
|
28
28
|
`;e+=`
|
|
29
29
|
Message
|
|
@@ -37,10 +37,10 @@ Message
|
|
|
37
37
|
`,n[a].forEach((s,i)=>{e+=` ${i}: ${q(s)}
|
|
38
38
|
`;})):e+=` ${a}: ${q(String(n[a]))}
|
|
39
39
|
`;})):e+=` ${r}: ${q(String(t.message[r]))}
|
|
40
|
-
`;return e},
|
|
40
|
+
`;return e},Ir=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
41
41
|
`,e+=`${q(String(r.value))}
|
|
42
42
|
|
|
43
|
-
`;}),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=zod.z.string().describe("message"),N=zod.z.string().describe("address");var Ar=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([N,Te])});var wr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),ae=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(wr)}).catchall(zod.z.array(wr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),ht=zod.z.array(zod.z.object({type:zod.z.string(),name:zod.z.string(),value:zod.z.union([zod.z.string(),zod.z.number(),zod.z.boolean(),zod.z.object({}).passthrough(),zod.z.array(zod.z.unknown()),zod.z.null()])})).nonempty(),Tt=ae.or(ht),Cr=zod.z.union([zod.z.string().describe("data string"),ae]),Nr=zod.z.union([zod.z.string().describe("data string"),Tt]),Dr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([N,Nr])}),Br=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([N,Nr])}),_r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([N,Cr])}),Ur=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([N,Cr])});var Fr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Te,N]),zod.z.tuple([Te,N,zod.z.string().optional().describe("password")])])});var Pa=zod.z.discriminatedUnion("method",[Fr,Ar,Dr,Br,_r,Ur]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let 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:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:{let 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:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.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 ethers.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.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:o.error}})};let{method:a,data:s,address:i}=o.data,c;(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Vr(s));let l,p,m,d;if(c&&!c.isValid&&(d={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===vmModuleTypes.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===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:s},p=ethers.toUtf8String(s);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:s},p=Mr(s)?xr(s):yt(s);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.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.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.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.rpcErrors.internal(n)}}};var Or=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(e,t)};case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getEvmAddressFromPubKey(n)}}default:throw rpcErrors.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.rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.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 {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${o}`)}};var ie,qe=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.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(chunkTKL4UUHE_cjs.b(this,ie).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,ie,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.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=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),Ua=_a.merge(zod.z.object({contract_id:zod.z.string(),description:zod.z.string().nullable(),content_type:zod.z.string().nullable(),content:zod.z.string(),thumbnail_url:zod.z.string(),total_supply:zod.z.number(),detail_url:zod.z.string(),collection_id:zod.z.string(),is_core:zod.z.boolean(),inner_id:zod.z.string(),collection_name:zod.z.string(),contract_name:zod.z.string(),amount:zod.z.number(),usd_price:zod.z.number().optional(),is_erc721:zod.z.boolean().optional(),is_erc1155:zod.z.boolean().optional()})),Fa=zod.z.array(Ua);var D,ce,ze,Ke,Yr,Ye=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ce);chunkTKL4UUHE_cjs.c(this,Ke);chunkTKL4UUHE_cjs.c(this,D,void 0);chunkTKL4UUHE_cjs.d(this,D,new qe(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,D).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:o,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),s=o.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,D).getTokenBalance({address:r,chainId:a,tokenId:s}),c=new coreUtilsSdk.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:vmModuleTypes.TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:o,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),s=await chunkTKL4UUHE_cjs.b(this,D).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 coreUtilsSdk.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:vmModuleTypes.TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e,address:r}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),o=await chunkTKL4UUHE_cjs.b(this,D).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,Ke,Yr).call(this,o)}};D=new WeakMap,ce=new WeakSet,ze=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,D).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,D).getChainInfo({chainId:n});if(!o)throw rpcErrors.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?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:n.description??"",properties:""}}}),{})};var Ma=zod.z.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.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[vmModuleTypes.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={[vmModuleTypes.AlertType.INFO]:0,[vmModuleTypes.AlertType.WARNING]:1,[vmModuleTypes.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.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(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let l=a.every(I=>Number(I.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:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.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(I=>_e(t,e,I.transaction,I)),{cleanup:T,updateTx:k}=Zr(t.requestId,E,v),x=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in x)return {error:x.error};if(x.result.length!==a.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${x.result.length}`})};let Re=[];for(let[I,Qe]of x.result.entries()){let Se=I===x.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.rpcErrors.internal({message:`Transaction ${I+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}){chunkTKL4UUHE_cjs.c(this,le,void 0);chunkTKL4UUHE_cjs.c(this,Pe,void 0);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.c(this,F,void 0);let{glacierApiUrl:o,proxyApiUrl:a}=vr(r);chunkTKL4UUHE_cjs.d(this,le,new Oe({glacierApiUrl:o,headers:ft(n)})),chunkTKL4UUHE_cjs.d(this,Pe,new Ye({proxyApiUrl:a})),chunkTKL4UUHE_cjs.d(this,B,a),chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.b(this,B),customTokens:o,balanceServices:[chunkTKL4UUHE_cjs.b(this,le),chunkTKL4UUHE_cjs.b(this,Pe)],storage:a,tokenTypes:s})}getManifest(){let e=vmModuleTypes.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:chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.b(this,le)})}getTokens(e){let{chainId:r}=e;return xe({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return mr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return nr(chunkTKL4UUHE_cjs.b(this,F))?tn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)}):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case vmModuleTypes.RpcMethod.PERSONAL_SIGN:case vmModuleTypes.RpcMethod.ETH_SIGN:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:return Lr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});default:return Ja(e.method)?Hr(e,r):{error:rpcErrors.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);
|
|
43
|
+
`;}),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=zod.z.string().describe("message"),D=zod.z.string().describe("address");var Ar=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([D,Te])});var wr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),ae=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(wr)}).catchall(zod.z.array(wr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),ht=zod.z.array(zod.z.object({type:zod.z.string(),name:zod.z.string(),value:zod.z.union([zod.z.string(),zod.z.number(),zod.z.boolean(),zod.z.object({}).passthrough(),zod.z.array(zod.z.unknown()),zod.z.null()])})).nonempty(),Tt=ae.or(ht),Cr=zod.z.union([zod.z.string().describe("data string"),ae]),Dr=zod.z.union([zod.z.string().describe("data string"),Tt]),Nr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([D,Dr])}),Br=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([D,Dr])}),_r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([D,Cr])}),Ur=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([D,Cr])});var Fr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Te,D]),zod.z.tuple([Te,D,zod.z.string().optional().describe("password")])])});var Pa=zod.z.discriminatedUnion("method",[Fr,Ar,Nr,Br,_r,Ur]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let 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:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:{let 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:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.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 ethers.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.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:o.error}})};let{method:a,data:s,address:i}=o.data,c;(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Vr(s));let l,p,m,d;if(c&&!c.isValid&&(d={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===vmModuleTypes.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===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:s},p=ethers.toUtf8String(s);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:s},p=Mr(s)?Ir(s):yt(s);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.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.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.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.rpcErrors.internal(n)}}};var Or=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(e,t)};case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getEvmAddressFromPubKey(n)}}default:throw rpcErrors.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.rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.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 {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${o}`)}};var ie,qe=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.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(chunkTKL4UUHE_cjs.b(this,ie).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,ie,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.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=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),Ua=_a.merge(zod.z.object({contract_id:zod.z.string(),description:zod.z.string().nullable(),content_type:zod.z.string().nullable(),content:zod.z.string(),thumbnail_url:zod.z.string(),total_supply:zod.z.number(),detail_url:zod.z.string(),collection_id:zod.z.string(),is_core:zod.z.boolean(),inner_id:zod.z.string(),collection_name:zod.z.string(),contract_name:zod.z.string(),amount:zod.z.number(),usd_price:zod.z.number().optional(),is_erc721:zod.z.boolean().optional(),is_erc1155:zod.z.boolean().optional()})),Fa=zod.z.array(Ua);var N,ce,ze,Ke,Yr,Ye=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ce);chunkTKL4UUHE_cjs.c(this,Ke);chunkTKL4UUHE_cjs.c(this,N,void 0);chunkTKL4UUHE_cjs.d(this,N,new qe(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,N).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:o,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),s=o.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,N).getTokenBalance({address:r,chainId:a,tokenId:s}),c=new coreUtilsSdk.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:vmModuleTypes.TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:o,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),s=await chunkTKL4UUHE_cjs.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 coreUtilsSdk.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:vmModuleTypes.TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e,address:r}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await chunkTKL4UUHE_cjs.e(this,ce,ze).call(this,e),o=await chunkTKL4UUHE_cjs.b(this,N).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,Ke,Yr).call(this,o)}};N=new WeakMap,ce=new WeakSet,ze=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,N).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,N).getChainInfo({chainId:n});if(!o)throw rpcErrors.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?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:n.description??"",properties:""}}}),{})};var Ma=zod.z.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.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[vmModuleTypes.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={[vmModuleTypes.AlertType.INFO]:0,[vmModuleTypes.AlertType.WARNING]:1,[vmModuleTypes.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.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.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.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.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.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}){chunkTKL4UUHE_cjs.c(this,le,void 0);chunkTKL4UUHE_cjs.c(this,Pe,void 0);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.c(this,F,void 0);let{glacierApiUrl:o,proxyApiUrl:a}=vr(r);chunkTKL4UUHE_cjs.d(this,le,new Oe({glacierApiUrl:o,headers:ft(n)})),chunkTKL4UUHE_cjs.d(this,Pe,new Ye({proxyApiUrl:a})),chunkTKL4UUHE_cjs.d(this,B,a),chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.b(this,B),customTokens:o,balanceServices:[chunkTKL4UUHE_cjs.b(this,le),chunkTKL4UUHE_cjs.b(this,Pe)],storage:a,tokenTypes:s})}getManifest(){let e=vmModuleTypes.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:chunkTKL4UUHE_cjs.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:chunkTKL4UUHE_cjs.b(this,le)})}getTokens(e){let{chainId:r}=e;return Ie({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return mr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return nr(chunkTKL4UUHE_cjs.b(this,F))?tn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)}):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case vmModuleTypes.RpcMethod.PERSONAL_SIGN:case vmModuleTypes.RpcMethod.ETH_SIGN:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:return Lr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});default:return Ja(e.method)?Hr(e,r):{error:rpcErrors.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);
|
|
44
44
|
|
|
45
45
|
exports.ERC20TransactionType = O;
|
|
46
46
|
exports.EvmModule = nn;
|