@avalabs/evm-module 1.4.1 → 1.4.2
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 +16 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -8,22 +8,22 @@ var ethers = require('ethers');
|
|
|
8
8
|
var coreUtilsSdk = require('@avalabs/core-utils-sdk');
|
|
9
9
|
var coreChainsSdk = require('@avalabs/core-chains-sdk');
|
|
10
10
|
var coreEtherscanSdk = require('@avalabs/core-etherscan-sdk');
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
11
|
+
var un = require('lodash.startcase');
|
|
12
|
+
var Yt = require('@openzeppelin/contracts/build/contracts/ERC20.json');
|
|
13
|
+
var tt = require('@blockaid/client');
|
|
14
|
+
var qt = require('xss');
|
|
15
15
|
var zod = require('zod');
|
|
16
16
|
var glacierSdk = require('@avalabs/glacier-sdk');
|
|
17
17
|
var coreCoingeckoSdk = require('@avalabs/core-coingecko-sdk');
|
|
18
18
|
|
|
19
19
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
20
|
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
21
|
+
var un__default = /*#__PURE__*/_interopDefault(un);
|
|
22
|
+
var Yt__default = /*#__PURE__*/_interopDefault(Yt);
|
|
23
|
+
var tt__default = /*#__PURE__*/_interopDefault(tt);
|
|
24
|
+
var qt__default = /*#__PURE__*/_interopDefault(qt);
|
|
25
25
|
|
|
26
|
-
async function Re({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 Kr=process.env.GLACIER_API_KEY,A=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:a=2e3}=t,o=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},Zr(n,Kr),new ethers.Network(r,e));return o.pollingInterval=a,o},Xr=["glacier-api.avax.network","proxy-api.avax.network"];function Zr(t,e){let r=new URL(t);if(e&&Xr.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var Je={LOW:1n,MEDIUM:4n,HIGH:6n},Ye=500000000n,Qr=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function yt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:s,proxyApiUrl:a}){let o=await A({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!a)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(Qr(t))try{let E=await en(o);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let c=await o.getBlock("latest",!1);if(!c)throw rpcErrors.rpcErrors.internal("There is no block");let i=c.baseFeePerGas;if(!i)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await tn(a,s),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(i,0,""),u=BigInt("1000000000"),d=m.mul(p).add(u).toSubUnit(),g=Ye*Je.LOW,y=Ye*Je.MEDIUM,v=Ye*Je.HIGH;return {baseFee:d,low:{maxFeePerGas:d+g,maxPriorityFeePerGas:g},medium:{maxFeePerGas:d+y,maxPriorityFeePerGas:y},high:{maxFeePerGas:d+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function en(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 tn(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let s=await n.json();return s[e]??s.default}catch{return 1.5}}function j(t,e,r="tx"){return `${t}/${r}/${e}`}var ht=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:s})=>{let a=t.from.toLowerCase()===s.toLowerCase(),o=parseInt(t.timeStamp)*1e3,c=e.decimals,l=new coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,{from:m,to:u,gasPrice:d,gasUsed:g,hash:y}=t,v=j(n,y);return {isIncoming:!a,isOutgoing:a,isContractCall:an(t),timestamp:o,hash:y,isSender:a,from:m,to:u,tokens:[{decimal:c.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:g,gasPrice:d,chainId:r.toString(),txType:p,explorerLink:v}};function an(t){return t.input!=="0x"}function kt({tx:t,address:e,explorerUrl:r,chainId:n}){let s=t.from.toLowerCase()===e.toLowerCase(),a=parseInt(t.timeStamp)*1e3,c=new coreUtilsSdk.TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:i,to:l,gasPrice:p,gasUsed:m,hash:u,tokenDecimal:d,tokenName:g,tokenSymbol:y}=t,v=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,E=j(r,u);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:a,hash:u,isSender:s,from:i,to:l,tokens:[{decimal:d,name:g,symbol:y,type:vmModuleTypes.TokenType.ERC20,amount:c}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:v,explorerLink:E}}var Et=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:s,nextPageToken:a,offset:o})=>{let c=a?JSON.parse(a):void 0,i=c?.page||1,l=c?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!t,{page:i,offset:o}):[]).map(y=>ht({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!t,void 0,{page:i,offset:o}):[]).map(y=>kt({tx:y,address:s,explorerUrl:r,chainId:n})),u=m.map(y=>y.hash),d=p.filter(y=>!u.includes(y.hash)),g={queries:[],page:i+1};return p.length&&g.queries.push("normal"),m.length&&g.queries.push("erc20"),{transactions:[...d,...m],nextPageToken:g.queries.length?JSON.stringify(g):""}};var vt=t=>t===1||t===5||t===4||t===11155111;var Pt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,a)=>{let o=!e&&!r&&!n,c=mn(t.method?.methodName),i=s.toLowerCase(),l=c.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===i,m=o&&t.to.address.toLowerCase()===i,u=c==="Market Buy Orders With Eth"||c==="Buy NFT",d=c==="Approve",g=c.toLowerCase().includes("transfer"),y=c.toLowerCase().includes("airdrop"),v=c.toLowerCase().includes("unwrap"),E=c==="Fill Order",T=!!a[0]&&Rt(a[0].type)&&a[0].from?.address.toLowerCase()===i,k=!!a[0]&&Rt(a[0].type)&&a[0].to?.address.toLowerCase()===i;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:u?vmModuleTypes.TransactionType.NFT_BUY:d?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 Rt(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var mn=(t="")=>t.includes("(")?pn__default.default(t.split("(",1)[0]):t;var St=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let a=t===vmModuleTypes.TransactionType.TRANSFER,o=t===vmModuleTypes.TransactionType.SEND,c=t===vmModuleTypes.TransactionType.RECEIVE,i=e?.from?.address,l=e?.to?.address;a&&r&&r[0]&&(i=r[0].from.address,l=r[0].to.address),a&&n&&n[0]&&(i=n[0].from.address,l=n[0].to.address);let p=o||a&&i.toLowerCase()===s.toLowerCase(),m=c||a&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:i===s,from:i,to:l}};async function It(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var un="https://ipfs.io";function q(t,e=un){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function fn(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function xt(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 fn(q(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var yn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function At(t,e="256"){let r=q(t);return `${yn}/width=${e},fit/${r}`}var Nt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let a=[];if(t.value!=="0"){let o=s.decimals,i=new coreUtilsSdk.TokenUnit(t.value,s.decimals,s.symbol).toDisplay();a.push({decimal:o.toString(),name:s.name,symbol:s.symbol,amount:i,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(o=>{let c=o.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(o.value,c,o.erc20Token.symbol).toDisplay();a.push({decimal:c.toString(),name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let c=o.erc721Token,i=await Ct(c.tokenUri,c.metadata.imageUri);a.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,amount:"1",imageUri:i,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let c=o.erc1155Token,i=await Ct(c.tokenUri,c.metadata.imageUri);a.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",amount:o.value,imageUri:i,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),a},Ct=async(t,e)=>{if(e)return e.startsWith("ipfs://")?q(e):e;{let[r,n]=await It(xt(t));return n?"":r.image?At(r.image):""}};var _t=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],H=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(H||{});var Bt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let a=await Nt(t,r),o=Pt(t,s,a),{isOutgoing:c,isIncoming:i,isSender:l,from:p,to:m}=St(o,t,s),{blockTimestamp:u,txHash:d,gasPrice:g,gasUsed:y}=t.nativeTransaction,v=j(e,d);return {isContractCall:!_t.includes(o),isIncoming:i,isOutgoing:c,isSender:l,timestamp:u*1e3,hash:d,from:p,to:m,tokens:a,gasPrice:g,gasUsed:y,chainId:n.toString(),txType:o,explorerLink:v}};var Dt=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:s,offset:a,glacierService:o})=>{try{let c=await o.listTransactions({chainId:t.toString(),address:n,pageToken:s,pageSize:a});return {transactions:(await Promise.all(c.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>Bt({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(m=>m)))).filter(p=>p.tokens.find(m=>Number(m.amount)!==0)),nextPageToken:c.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var Ut=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:a,offset:o,glacierService:c})=>vt(t)?Et({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:a,offset:o}):c.isHealthy()?Dt({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:a,offset:o,glacierService:c}):{transactions:[],nextPageToken:""};var Gt={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 Se=async({from:t,provider:e})=>e.getTransactionCount(t);var Ie=t=>{if(t.data)try{let r=new ethers.Interface(jt__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&kn(n)?n:void 0}catch{return}};function kn(t){return Object.values(H).includes(t)}function Ft(t,e,r){return new ethers.ethers.Contract(t,jt__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var xe=new Map,Mt=(t,e,r)=>(xe.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s,approvalLimit:a})=>{let o=xe.get(t);if(!o)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:c,displayData:i}=o,l={...c,data:{...c.data,maxFeePerGas:n??c.data.maxFeePerGas,maxPriorityFeePerGas:s??c.data.maxPriorityFeePerGas}},p={...i};if(typeof a=="string"){if(!a.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let u=i.tokenApprovals;bn(u),Rn(c.data.data);let d=u.approvals[0];l.data.data=Ft(d.token.address,d.spenderAddress,a),p.tokenApprovals={approvals:[{...d,value:a}],isEditable:!0};}let m={signingData:l,displayData:p};return xe.set(t,m),m},cleanup:()=>xe.delete(t)});function bn(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 Rn(t){if((!t||t==="0x"?null:Ie({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Vt=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:s},provider:a})=>{let o=await a.getTransactionCount(t);return Number(await a.estimateGas({from:t,to:e,nonce:o,data:r,value:n,accessList:s}))};var Xe=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Ce=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),J=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Ze=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var Ne=(t,e,r,{isSimulationSuccessful:n,balanceChange:s,tokenApprovals:a,alert:o})=>{let{dappInfo:c}=t,i=Ie(r),l="Approve Transaction";i==="approve"&&(l="Token Spend Approval");let p=[Ce("Website",c),J("From",r.from)];r.to&&p.push(J("To",r.to)),i&&p.push(Xe("Type",i)),r.data&&p.push(Ze("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:o,balanceChange:s,tokenApprovals:a,isSimulationSuccessful:n},u={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:u}};var et="DUMMY_API_KEY",Lt=async({proxyApiUrl:t,chainId:e,params:r,domain:n,withGasEstimation:s})=>{let a=new Qe__default.default({baseURL:t+"/proxy/blockaid/",apiKey:et}),o=["validation","simulation"];return s&&o.push("gas_estimation"),a.evm.transactionBulk.scan({chain:e.toString(),options:o,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}})},Ht=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new Qe__default.default({baseURL:t+"/proxy/blockaid/",apiKey:et}).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}}),Ot=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new Qe__default.default({baseURL:t+"/proxy/blockaid/",apiKey:et}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var qt=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,jt__default.default.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=Wt__default.default(s[0]),o=Wt__default.default(s[1]),c=parseInt(s[2]),i={type:vmModuleTypes.TokenType.ERC20,name:a,chainId:e,symbol:o,decimals:c,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(jt__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,i.decimals,i.symbol).toDisplay(),usdPrice:void 0}],token:i}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:i,spenderAddress:m.spender,value:m.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function O(t){return !("type"in t)}function _e(t){return t.type===vmModuleTypes.TokenType.ERC20}function Jt(t){return typeof t.to=="string"}function Yt(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function An(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function wn(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function tt(t){return An(t)?t.ins.length===0&&t.outs.length===0:wn(t)?t.approvals.length===0:!1}var U={[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 Kt=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:s,proxyApiUrl:a})=>{let o;try{o=await Ht({proxyApiUrl:a,chainId:n,params:r,domain:e});}catch(c){console.error("simulateTransaction error",c);}return rt({rpcMethod:t,params:r,chainId:n,provider:s,simulationResult:o})},rt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:s})=>{let a,o,c,i=!1,l;if(s){let{validation:p,simulation:m,gas_estimation:u}=s;!p||p.result_type==="Error"||p.result_type==="Warning"?a=U[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=U[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(i=!0,c=Xt(t,m.account_summary.exposures),o=Zt(m.account_summary.assets_diffs)),u?.status==="Success"&&(l=Number(u.estimate));}if(!i&&Jt(e)){let p=await qt(e,r,n);o=p.balanceChange,c=p.tokenApprovals;}return {alert:a,balanceChange:o,tokenApprovals:c,isSimulationSuccessful:i,estimatedGasLimit:l}},Xt=(t,e)=>{let r=[];for(let s of e){let a=Qt(s.asset);if(a)for(let[o,c]of Object.entries(s.spenders))if(c.exposure.length===0)r.push({token:a,spenderAddress:o,logoUri:a.logoUri});else for(let i of c.exposure)"raw_value"in i?r.push({token:a,spenderAddress:o,value:i.raw_value,usdPrice:i.usd_price,logoUri:a.logoUri}):r.push({token:a,spenderAddress:o,logoUri:i.logo_url,usdPrice:i.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},Zt=t=>{let e=zt(t,"in"),r=zt(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},zt=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,s="address"in n?Qt(n):Dn(n);if(!s)return;let a=r[e].map(o=>{let c;if("value"in o&&o.value)if("decimals"in s){let i=coreUtilsSdk.numberToBN(o.value,s.decimals);c=coreUtilsSdk.balanceToDisplayValue(i,s.decimals);}else ethers.isHexString(o.value)&&(c=parseInt(o.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(c="1");return c?{displayValue:c,usdPrice:o.usd_price}:void 0}).filter(o=>o!==void 0);return {token:s,items:a}}).filter(r=>r!==void 0),Qt=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},Dn=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),er=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:a})=>{let o,c,i;try{let{validation:l,simulation:p}=await Ot({proxyApiUrl:a,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?o=U[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(o=U[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(i=Xt(t.method,p.account_summary.exposures),c=Zt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=U[vmModuleTypes.AlertType.WARNING];}return {alert:o,balanceChange:c,tokenApprovals:i}};var z=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 Gn=zod.z.tuple([z]),tr=t=>Gn.safeParse(t);var De=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{if((await t.waitForTransaction(e))?.status===1)return r(e,s),!0}catch(a){console.error(a);}return n(e,s),!1};var Ue=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var rr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,error:o,success:c}=tr(s);if(!c)return console.error("invalid params",o),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o}})};let[i]=a,l=await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let E=await Vt({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value,accessList:i.accessList},provider:l});i.gas="0x"+E.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let E=await Se({from:i.from,provider:l});i.nonce=String(E);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await Kt({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:t.dappInfo.url,provider:l}),{displayData:m,signingData:u}=Ne(t,e,i,p),{updateTx:d,cleanup:g}=Mt(t.requestId,u,m),y=await r.requestApproval({request:t,displayData:m,signingData:u,updateTx:d});if(g(),"error"in y)return {error:y.error};let v;try{v=await Ue(l,y);}catch(E){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return De({provider:l,txHash:v,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:v}};async function nr(t,e){let r=t.map(async(a,o)=>({index:o,result:await e(a)})),s=(await Promise.allSettled(r)).filter(a=>a.status==="fulfilled").map(a=>a).find(a=>a.value.result);return s?t[s.value.index]:void 0}function K(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function X(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?r[s.id]=s.value:r[s.id]={error:s.reason};}return r},{}))}var nt=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=me.exponential()})=>{let s=0,a=0,o;for(;a<r;){a>0&&await Fn(s);try{let i=await t(a);if(e(i))return i}catch(i){o=i;}s=n(a),a++;}let c=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(c)},me=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Fn(t){return new Promise(e=>setTimeout(e,t))}var at=t=>nt({operation:e=>t(e>0),maxRetries:2,backoffPolicy:me.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ar(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ot(t){let e,r=0;for(e=0;e<t.length;e++){let n=ar(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function Z(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 de=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return Z([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return Z([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var or=coreCoingeckoSdk.getBasicCoingeckoHttp(),G,Q,ee=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let a=e[s];n[s]={},r.forEach(o=>{n[s]={[o]:{price:a?.[o],change24:a?.[`${o}_24h_change`],vol24:a?.[`${o}_24h_vol`],marketCap:a?.[`${o}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,G,e),chunkTKL4UUHE_cjs.d(this,Q,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ot(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,G)?.get?.(a),n)return n;try{n=await at(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,G)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${ot(e)}-${r}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,G)?.get?.(o),s)return s;try{s=await at(c=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:c}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,G)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new de(chunkTKL4UUHE_cjs.b(this,Q)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):coreCoingeckoSdk.simpleTokenPrice(or,{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:s=!1,change24:a=!1,lastUpdated:o=!1,useCoingeckoProxy:c=!1,shouldThrow:i=!0}){if(c){let l=await new de(chunkTKL4UUHE_cjs.b(this,Q)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:a,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(or,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:a,lastUpdated:o,shouldThrow:i})}};G=new WeakMap,Q=new WeakMap;var Jn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Yn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",sr=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Fe=async()=>{try{return await Z([Jn],sr)}catch{return await Z([Yn],sr)}};var st=({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 x,re,W,fe,Me=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,x,void 0);chunkTKL4UUHE_cjs.c(this,re,void 0);chunkTKL4UUHE_cjs.c(this,W,void 0);chunkTKL4UUHE_cjs.c(this,fe,void 0);chunkTKL4UUHE_cjs.d(this,x,e),chunkTKL4UUHE_cjs.d(this,re,r),chunkTKL4UUHE_cjs.d(this,W,n),chunkTKL4UUHE_cjs.d(this,fe,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=await A({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,x).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,x).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,x).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.nativeTokenId,o=chunkTKL4UUHE_cjs.b(this,x).networkToken,c=new ee({storage:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),i=a?await c.getSimplePrice({coinIds:[a],currencies:[n]}):{},l=i?.[a??""]?.[n]?.price??void 0,p=i?.[a??""]?.[n]?.marketCap??void 0,m=i?.[a??""]?.[n]?.vol24??void 0,u=i?.[a??""]?.[n]?.change24??void 0,d=await s.getBalance(r),g=new coreUtilsSdk.TokenUnit(d,o.decimals,o.symbol),y=l!==void 0?g.mul(l):void 0;return {...o,coingeckoId:a??"",type:vmModuleTypes.TokenType.NATIVE,balance:d,balanceDisplayValue:g.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:u}}async listErc20Balances({chainId:e,address:r,currency:n}){let s=await A({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,x).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,x).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,x).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.assetPlatformId,o=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.nativeTokenId,c=await Re({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),i=c.map(E=>E.address),l=[...c,...chunkTKL4UUHE_cjs.b(this,fe)].filter(_e),p=async E=>{let S=await new ethers.ethers.Contract(E.address,jt__default.default.abi,s).balanceOf?.(r)||0n;return {...E,balance:S}},m=l.map(E=>K(p(E),E.address)),u=await X(m),d=new ee({storage:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),g=a&&await d.getPricesByAddresses(i,a,n)||{},y=Object.keys(u),v={};for(let E=0;E<y.length;E++){let T=y[E];if(T===void 0)continue;let k=u[T];if(k===void 0||"error"in k){v[T]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let S=g?.[o??""]?.[n]?.price??void 0,ve=g?.[o??""]?.[n]?.marketCap??void 0,I=g?.[o??""]?.[n]?.vol24??void 0,je=g?.[o??""]?.[n]?.change24??void 0,be=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),le=S!==void 0?be.mul(S):void 0;v[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:be.toDisplay(),balanceInCurrency:le?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:le?.toDisplay({fixedDp:2}),priceInCurrency:S,marketCap:ve,change24:je,vol24:I,reputation:null};}return v}async listNftBalances(){return {}}};x=new WeakMap,re=new WeakMap,W=new WeakMap,fe=new WeakMap;var lr=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:s=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:a=[],storage:o,balanceServices:c=[]})=>{let i=r.chainId,l=[...c,new Me({network:r,storage:o,proxyApiUrl:n,customTokens:a})],p=await nr(l,u=>u.isNetworkSupported(r.chainId)),m={};if(p){let u=[],d=[],g=[];t.forEach(T=>{s.includes(vmModuleTypes.TokenType.NATIVE)&&u.push(K(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:i}),T)),s.includes(vmModuleTypes.TokenType.ERC20)&&d.push(K(p.listErc20Balances({customTokens:a.filter(_e),currency:e.toUpperCase(),chainId:i,address:T,pageSize:100}),T)),(s.includes(vmModuleTypes.TokenType.ERC721)||s.includes(vmModuleTypes.TokenType.ERC1155))&&g.push(K(p.listNftBalances({chainId:i,address:T}),T));});let y=await X(u),v=await X(d),E=await X(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 S=k.symbol;m[T]={[S]: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(u=>{m[u]={error:"unsupported network"};});return m};var Xn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Zn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},mr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Xn;case vmModuleTypes.Environment.DEV:return Zn}};var ea="https://ipfs.io";function dr(t,e=ea){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var ta="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ur(t,e="256"){let r=dr(t);return `${ta}/width=${e},fit/${r}`}var B=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ve=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),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(s){throw s instanceof B&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(s){throw s instanceof B&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:s}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,c=new coreUtilsSdk.TokenUnit(o.balance,o.decimals,o.symbol),i=o.price?.value,l=i!==void 0?c.mul(i):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:o.logoUri,balance:c.toSubUnit(),balanceDisplayValue:c.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:i,coingeckoId:s??""}}catch(a){throw a instanceof B&&this.setGlacierToUnhealthy(),a}}async listErc721Balances({chainId:e,address:r}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...a.erc721TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof B&&this.setGlacierToUnhealthy(),a}while(n);return s}async listErc1155Balances({chainId:e,address:r}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...a.erc1155TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof B&&this.setGlacierToUnhealthy(),a}while(n);return s}async listNftBalances({chainId:e,address:r}){let s=(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(o=>[`${o.address}-${o.tokenId}`,{address:o.address,description:o.metadata.description??"",logoUri:o.metadata.imageUri??"",logoSmall:ur(o.metadata.imageUri??""),name:o.metadata.name??"",symbol:o.metadata.symbol??"",tokenId:o.tokenId,tokenUri:o.tokenUri,collectionName:"Unkown",balance:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(o.balance):1,balanceDisplayValue:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?o.balance:"1",type:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?o.metadata.attributes:o.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:s}){try{let a=[],o;do{let c=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});a.push(...oa(c.erc20TokenBalances,Number(e))),o=c.nextPageToken;}while(o);return [...aa(s),...a].reduce((c,i)=>({...c,[i.address.toLowerCase()]:i}),{})}catch(a){throw a instanceof B&&this.setGlacierToUnhealthy(),a}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:s})}catch(a){throw a instanceof B&&this.setGlacierToUnhealthy(),a}}},aa=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})),oa=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),s=n.toDisplay(),a=r.balanceValue?.value.toString(),o=r.price?.value,c=o!==void 0?n.mul(o).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:s,balanceInCurrency:c,priceInCurrency:o,reputation:r.tokenReputation,type:vmModuleTypes.TokenType.ERC20}});var it=t=>{let e="";e+=`Domain
|
|
26
|
+
async function Re({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 Qr=process.env.GLACIER_API_KEY,A=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:a=2e3}=t,o=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},tn(n,Qr),new ethers.Network(r,e));return o.pollingInterval=a,o},en=["glacier-api.avax.network","proxy-api.avax.network"];function tn(t,e){let r=new URL(t);if(e&&en.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var ze={LOW:1n,MEDIUM:4n,HIGH:6n},Ke=500000000n,rn=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function Tt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:s,proxyApiUrl:a}){let o=await A({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!a)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(rn(t))try{let E=await nn(o);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 o.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 an(a,s),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(c,0,""),d=BigInt("1000000000"),u=m.mul(p).add(d).toSubUnit(),g=Ke*ze.LOW,y=Ke*ze.MEDIUM,v=Ke*ze.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 nn(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 an(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let s=await n.json();return s[e]??s.default}catch{return 1.5}}function j(t,e,r="tx"){return `${t}/${r}/${e}`}var Et=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:s})=>{let a=t.from.toLowerCase()===s.toLowerCase(),o=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:cn(t),timestamp:o,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 cn(t){return t.input!=="0x"}function bt({tx:t,address:e,explorerUrl:r,chainId:n}){let s=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=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,E=j(r,d);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:a,hash:d,isSender:s,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 Rt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:s,nextPageToken:a,offset:o})=>{let i=a?JSON.parse(a):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!t,{page:c,offset:o}):[]).map(y=>Et({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!t,void 0,{page:c,offset:o}):[]).map(y=>bt({tx:y,address:s,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 Pt=t=>t===1||t===5||t===4||t===11155111;var xt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,a)=>{let o=!e&&!r&&!n,i=fn(t.method?.methodName),c=s.toLowerCase(),l=i.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===c,m=o&&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]&&It(a[0].type)&&a[0].from?.address.toLowerCase()===c,k=!!a[0]&&It(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 It(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var fn=(t="")=>t.includes("(")?un__default.default(t.split("(",1)[0]):t;var At=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let a=t===vmModuleTypes.TransactionType.TRANSFER,o=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=o||a&&c.toLowerCase()===s.toLowerCase(),m=i||a&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===s,from:c,to:l}};async function wt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var gn="https://ipfs.io";function q(t,e=gn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function hn(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Ct(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 hn(q(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Tn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Nt(t,e="256"){let r=q(t);return `${Tn}/width=${e},fit/${r}`}var Dt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let a=[];if(t.value!=="0"){let o=s.decimals,c=new coreUtilsSdk.TokenUnit(t.value,s.decimals,s.symbol).toDisplay();a.push({decimal:o.toString(),name:s.name,symbol:s.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();a.push({decimal:i.toString(),name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let i=o.erc721Token,c=await Bt(i.tokenUri,i.metadata.imageUri);a.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,amount:"1",imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let i=o.erc1155Token,c=await Bt(i.tokenUri,i.metadata.imageUri);a.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",amount:o.value,imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),a},Bt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?q(e):e;{let[r,n]=await wt(Ct(t));return n?"":r.image?Nt(r.image):""}};var Ut=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],H=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(H||{});var Gt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let a=await Dt(t,r),o=xt(t,s,a),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=At(o,t,s),{blockTimestamp:d,txHash:u,gasPrice:g,gasUsed:y}=t.nativeTransaction,v=j(e,u);return {isContractCall:!Ut.includes(o),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:o,explorerLink:v}};var Ft=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:s,offset:a,glacierService:o})=>{try{let i=await o.listTransactions({chainId:t.toString(),address:n,pageToken:s,pageSize:a});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>Gt({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 Mt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:a,offset:o,glacierService:i})=>Pt(t)?Rt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:a,offset:o}):i.isHealthy()?Ft({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:a,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var Vt={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 Se=async({from:t,provider:e})=>e.getTransactionCount(t);var Ie=t=>{if(t.data)try{let r=new ethers.Interface(Yt__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&bn(n)?n:void 0}catch{return}};function bn(t){return Object.values(H).includes(t)}function Lt(t,e,r){return new ethers.ethers.Contract(t,Yt__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var xe=new Map,Ht=(t,e,r)=>(xe.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s,approvalLimit:a})=>{let o=xe.get(t);if(!o)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=o,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:s??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;Sn(d),In(i.data.data);let u=d.approvals[0];l.data.data=Lt(u.token.address,u.spenderAddress,a),p.tokenApprovals={approvals:[{...u,value:a}],isEditable:!0};}let m={signingData:l,displayData:p};return xe.set(t,m),m},cleanup:()=>xe.delete(t)});function Sn(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 In(t){if((!t||t==="0x"?null:Ie({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Ot=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:s},provider:a})=>{let o=await a.getTransactionCount(t);return Number(await a.estimateGas({from:t,to:e,nonce:o,data:r,value:n,accessList:s}))};var Qe=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Ce=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),J=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var et=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var Ne=(t,e,r,{isSimulationSuccessful:n,balanceChange:s,tokenApprovals:a,alert:o})=>{let{dappInfo:i}=t,c=Ie(r),l="Approve Transaction";c==="approve"&&(l="Token Spend Approval");let p=[Ce("Website",i),J("From",r.from)];r.to&&p.push(J("To",r.to)),c&&p.push(Qe("Type",c)),r.data&&p.push(et("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:o,balanceChange:s,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 rt="DUMMY_API_KEY",Wt=async({proxyApiUrl:t,chainId:e,params:r,domain:n,withGasEstimation:s})=>{let a=new tt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:rt}),o=["validation","simulation"];return s&&o.push("gas_estimation"),a.evm.transactionBulk.scan({chain:e.toString(),options:o,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}})},$t=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new tt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:rt}).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}}),jt=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new tt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:rt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var zt=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,Yt__default.default.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),a=qt__default.default(s[0]),o=qt__default.default(s[1]),i=parseInt(s[2]),c={type:vmModuleTypes.TokenType.ERC20,name:a,chainId:e,symbol:o,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(Yt__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 O(t){return !("type"in t)}function _e(t){return t.type===vmModuleTypes.TokenType.ERC20}function Kt(t){return typeof t.to=="string"}function Xt(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function Nn(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function _n(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function nt(t){return Nn(t)?t.ins.length===0&&t.outs.length===0:_n(t)?t.approvals.length===0:!1}var U={[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 Qt=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:s,proxyApiUrl:a})=>{let o;try{o=await $t({proxyApiUrl:a,chainId:n,params:r,domain:e});}catch(i){console.error("simulateTransaction error",i);}return at({rpcMethod:t,params:r,chainId:n,provider:s,simulationResult:o})},at=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:s})=>{let a,o,i,c=!1,l;if(s){let{validation:p,simulation:m,gas_estimation:d}=s;!p||p.result_type==="Error"||p.result_type==="Warning"?a=U[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=U[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(c=!0,i=er(t,m.account_summary.exposures),o=tr(m.account_summary.assets_diffs)),d?.status==="Success"&&(l=Number(d.estimate));}if(!c&&Kt(e)){let p=await zt(e,r,n);o=p.balanceChange,i=p.tokenApprovals;}return {alert:a,balanceChange:o,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},er=(t,e)=>{let r=[];for(let s of e){let a=rr(s.asset);if(a)for(let[o,i]of Object.entries(s.spenders))if(i.exposure.length===0)r.push({token:a,spenderAddress:o,logoUri:a.logoUri});else for(let c of i.exposure)"raw_value"in c?r.push({token:a,spenderAddress:o,value:c.raw_value,usdPrice:c.usd_price,logoUri:a.logoUri}):r.push({token:a,spenderAddress:o,logoUri:c.logo_url,usdPrice:c.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},tr=t=>{let e=Zt(t,"in"),r=Zt(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},Zt=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,s="address"in n?rr(n):Fn(n);if(!s)return;let a=r[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in s){let c=coreUtilsSdk.numberToBN(o.value,s.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,s.decimals);}else ethers.isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:o.usd_price}:void 0}).filter(o=>o!==void 0);return {token:s,items:a}}).filter(r=>r!==void 0),rr=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},Fn=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),nr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:a})=>{let o,i,c;try{let{validation:l,simulation:p}=await jt({proxyApiUrl:a,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?o=U[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(o=U[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=er(t.method,p.account_summary.exposures),i=tr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=U[vmModuleTypes.AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}};var z=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 Vn=zod.z.tuple([z]),ar=t=>Vn.safeParse(t);var De=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{if((await t.waitForTransaction(e))?.status===1)return r(e,s),!0}catch(a){console.error(a);}return n(e,s),!1};var Ue=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var or=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,error:o,success:i}=ar(s);if(!i)return console.error("invalid params",o),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o}})};let[c]=a,l=await A({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 Ot({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 Se({from:c.from,provider:l});c.nonce=String(E);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await Qt({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l}),{displayData:m,signingData:d}=Ne(t,e,c,p),{updateTx:u,cleanup:g}=Ht(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 Ue(l,y);}catch(E){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return De({provider:l,txHash:v,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:v}};async function sr(t,e){let r=t.map(async(a,o)=>({index:o,result:await e(a)})),s=(await Promise.allSettled(r)).filter(a=>a.status==="fulfilled").map(a=>a).find(a=>a.value.result);return s?t[s.value.index]:void 0}function K(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function X(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?r[s.id]=s.value:r[s.id]={error:s.reason};}return r},{}))}var ot=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=pe.exponential()})=>{let s=0,a=0,o;for(;a<r;){a>0&&await Ln(s);try{let c=await t(a);if(e(c))return c}catch(c){o=c;}s=n(a),a++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},pe=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Ln(t){return new Promise(e=>setTimeout(e,t))}var st=t=>ot({operation:e=>t(e>0),maxRetries:2,backoffPolicy:pe.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ir(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function it(t){let e,r=0;for(e=0;e<t.length;e++){let n=ir(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function Z(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 me=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return Z([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return Z([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var cr=coreCoingeckoSdk.getBasicCoingeckoHttp(),G,Q,ee=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let a=e[s];n[s]={},r.forEach(o=>{n[s]={[o]:{price:a?.[o],change24:a?.[`${o}_24h_change`],vol24:a?.[`${o}_24h_vol`],marketCap:a?.[`${o}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,G,e),chunkTKL4UUHE_cjs.d(this,Q,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${it(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,G)?.get?.(a),n)return n;try{n=await st(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,G)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${it(e)}-${r}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,G)?.get?.(o),s)return s;try{s=await st(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,G)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new me(chunkTKL4UUHE_cjs.b(this,Q)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):coreCoingeckoSdk.simpleTokenPrice(cr,{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:s=!1,change24:a=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new me(chunkTKL4UUHE_cjs.b(this,Q)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:a,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(cr,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:a,lastUpdated:o,shouldThrow:c})}};G=new WeakMap,Q=new WeakMap;var Kn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Xn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",lr=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Fe=async()=>{try{return await Z([Kn],lr)}catch{return await Z([Xn],lr)}};var ct=({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 x,re,W,ue,Me=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,x,void 0);chunkTKL4UUHE_cjs.c(this,re,void 0);chunkTKL4UUHE_cjs.c(this,W,void 0);chunkTKL4UUHE_cjs.c(this,ue,void 0);chunkTKL4UUHE_cjs.d(this,x,e),chunkTKL4UUHE_cjs.d(this,re,r),chunkTKL4UUHE_cjs.d(this,W,n),chunkTKL4UUHE_cjs.d(this,ue,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=await A({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,x).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,x).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,x).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.nativeTokenId,o=chunkTKL4UUHE_cjs.b(this,x).networkToken,i=new ee({storage:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),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 s.getBalance(r),g=new coreUtilsSdk.TokenUnit(u,o.decimals,o.symbol),y=l!==void 0?g.mul(l):void 0;return {...o,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 s=await A({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,x).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,x).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,x).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.assetPlatformId,o=chunkTKL4UUHE_cjs.b(this,x).pricingProviders?.coingecko.nativeTokenId,i=await Re({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,ue)].filter(_e),p=async E=>{let S=await new ethers.ethers.Contract(E.address,Yt__default.default.abi,s).balanceOf?.(r)||0n;return {...E,balance:S}},m=l.map(E=>K(p(E),E.address)),d=await X(m),u=new ee({storage:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,W)}),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 S=g?.[o??""]?.[n]?.price??void 0,ve=g?.[o??""]?.[n]?.marketCap??void 0,I=g?.[o??""]?.[n]?.vol24??void 0,qe=g?.[o??""]?.[n]?.change24??void 0,be=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),ce=S!==void 0?be.mul(S):void 0;v[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:be.toDisplay(),balanceInCurrency:ce?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ce?.toDisplay({fixedDp:2}),priceInCurrency:S,marketCap:ve,change24:qe,vol24:I,reputation:null};}return v}async listNftBalances(){return {}}};x=new WeakMap,re=new WeakMap,W=new WeakMap,ue=new WeakMap;var dr=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:s=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:a=[],storage:o,balanceServices:i=[]})=>{let c=r.chainId,l=[...i,new Me({network:r,storage:o,proxyApiUrl:n,customTokens:a})],p=await sr(l,d=>d.isNetworkSupported(r.chainId)),m={};if(p){let d=[],u=[],g=[];t.forEach(T=>{s.includes(vmModuleTypes.TokenType.NATIVE)&&d.push(K(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),s.includes(vmModuleTypes.TokenType.ERC20)&&u.push(K(p.listErc20Balances({customTokens:a.filter(_e),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(s.includes(vmModuleTypes.TokenType.ERC721)||s.includes(vmModuleTypes.TokenType.ERC1155))&&g.push(K(p.listNftBalances({chainId:c,address:T}),T));});let y=await X(d),v=await X(u),E=await X(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 S=k.symbol;m[T]={[S]: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 ea={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ta={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},fr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return ea;case vmModuleTypes.Environment.DEV:return ta}};var na="https://ipfs.io";function yr(t,e=na){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var aa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function gr(t,e="256"){let r=yr(t);return `${aa}/width=${e},fit/${r}`}var _=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},ca=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Ve=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=>!ca.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(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:s}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(o.balance,o.decimals,o.symbol),c=o.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:o.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(a){throw a instanceof _&&this.setGlacierToUnhealthy(),a}}async listErc721Balances({chainId:e,address:r}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...a.erc721TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof _&&this.setGlacierToUnhealthy(),a}while(n);return s}async listErc1155Balances({chainId:e,address:r}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...a.erc1155TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof _&&this.setGlacierToUnhealthy(),a}while(n);return s}async listNftBalances({chainId:e,address:r}){let s=(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(o=>[`${o.address}-${o.tokenId}`,{address:o.address,description:o.metadata.description??"",logoUri:o.metadata.imageUri??"",logoSmall:gr(o.metadata.imageUri??""),name:o.metadata.name??"",symbol:o.metadata.symbol??"",tokenId:o.tokenId,tokenUri:o.tokenUri,collectionName:"Unkown",balance:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(o.balance):1,balanceDisplayValue:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?o.balance:"1",type:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?o.metadata.attributes:o.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:s}){try{let a=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});a.push(...pa(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...la(s),...a].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(a){throw a instanceof _&&this.setGlacierToUnhealthy(),a}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:s})}catch(a){throw a instanceof _&&this.setGlacierToUnhealthy(),a}}},la=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})),pa=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),s=n.toDisplay(),a=r.balanceValue?.value.toString(),o=r.price?.value,i=o!==void 0?n.mul(o).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:s,balanceInCurrency:i,priceInCurrency:o,reputation:r.tokenReputation,type:vmModuleTypes.TokenType.ERC20}});var lt=t=>{let e="";e+=`Domain
|
|
27
27
|
`;for(let r in t.domain)e+=` ${r}: ${$(String(t.domain[r]))}
|
|
28
28
|
`;e+=`
|
|
29
29
|
Message
|
|
@@ -34,20 +34,20 @@ Message
|
|
|
34
34
|
`;}else Array.isArray(t.message[r])?(e+=` ${r}:
|
|
35
35
|
`,t.message[r].forEach((n,s)=>{e+=` ${s}:
|
|
36
36
|
`;for(let a in n)Array.isArray(n[a])?(e+=` ${a}:
|
|
37
|
-
`,n[a].forEach((o,
|
|
37
|
+
`,n[a].forEach((o,i)=>{e+=` ${i}: ${$(o)}
|
|
38
38
|
`;})):e+=` ${a}: ${$(String(n[a]))}
|
|
39
39
|
`;})):e+=` ${r}: ${$(String(t.message[r]))}
|
|
40
|
-
`;return e},
|
|
40
|
+
`;return e},Er=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
41
41
|
`,e+=`${$(String(r.value))}
|
|
42
42
|
|
|
43
|
-
`;}),e},$=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 ge=zod.z.string().describe("message"),N=zod.z.string().describe("address");var kr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([N,ge])});var Er=zod.z.object({name:zod.z.string(),type:zod.z.string()}),ne=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Er)}).catchall(zod.z.array(Er)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),lt=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(),pt=ne.or(lt),vr=zod.z.union([zod.z.string().describe("data string"),ne]),br=zod.z.union([zod.z.string().describe("data string"),pt]),Rr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([N,br])}),Pr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([N,br])}),Sr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([N,vr])}),Ir=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([N,vr])});var xr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([ge,N]),zod.z.tuple([ge,N,zod.z.string().optional().describe("password")])])});var ca=zod.z.discriminatedUnion("method",[xr,kr,Rr,Pr,Sr,Ir]).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 s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:pt.parse(o),address:s,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 s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:ne.parse(o),address:s,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function Ar(t){return ca.safeParse(t)}var wr=t=>lt.safeParse(t).success,_c=t=>ne.safeParse(t).success;var Cr=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 Nr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=Ar({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:c}=s.data,i;(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(i=Cr(o));let l,p,m,u;if(i&&!i.isValid&&(u={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:i.error.toString()}}),a===vmModuleTypes.RpcMethod.ETH_SIGN)l={type:a,account:c,data:o},p=o,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:c,data:o},p=ethers.toUtf8String(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:c,data:o},p=wr(o)?hr(o):it(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:c,data:o};let{types:v,primaryType:E,...T}=o;p=it(T);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let d=await er({request:t,proxyApiUrl:n,accountAddress:c,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:c,details:[{title:"Message",items:[p]}],disclaimer:m,alert:d?.alert??u,balanceChange:d?.balanceChange,tokenApprovals:d?.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 _r=async(t,e)=>{try{return {result:await(await A({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 Dr=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 se,He=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,se,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${r}&chain_ids=${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,se).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,se)}};se=new WeakMap;var C,Oe=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,C,void 0);chunkTKL4UUHE_cjs.d(this,C,new He(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,C).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let a=(await chunkTKL4UUHE_cjs.b(this,C).getChainList()).find(v=>v.community_id===e)?.id;if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,C).getChainInfo({chainId:a});if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let c=o.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,C).getTokenBalance({address:r,chainId:a,tokenId:c}),l=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),p=l.toDisplay(),u=(await Fe()).usd[n.toLowerCase()],d=u?u*i.price:void 0,g=d?l.mul(d).toDisplay({fixedDp:2}):void 0,y=d?l.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:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:y,balanceCurrencyDisplayValue:g,priceInCurrency:d}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let a=(await chunkTKL4UUHE_cjs.b(this,C).getChainList()).find(l=>l.community_id===e)?.id;if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,C).getChainInfo({chainId:a});if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let c=await chunkTKL4UUHE_cjs.b(this,C).getTokensBalanceOnChain({chainId:a,address:r}),i={};for(let l of c){if(l.id===o.native_token_id)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=(await Fe()).usd[n.toLowerCase()],g=d?d*l.price:void 0,y=g?p.mul(g).toDisplay({fixedDp:2}):void 0,v=g?p.mul(g).toDisplay({fixedDp:2,asNumber:!0}):void 0;i[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:y,balanceDisplayValue:m,balanceInCurrency:v,priceInCurrency:g,type:vmModuleTypes.TokenType.ERC20,reputation:null};}return i}async listNftBalances(){return {}}};C=new WeakMap;var ha=zod.z.tuple([z,z]).rest(z).refine(t=>dt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>dt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>ka(t,"nonce")||Ta(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ta(t,e){return !dt(t,e)}function ka(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function dt(t,e){return new Set(t.map(n=>n[e])).size===1}var Mr=t=>ha.safeParse(t);var Vr=async(t,e)=>{if(t[0].nonce)return;let r=await Se({from:t[0].from,provider:e});return Promise.all(t.map(async(n,s)=>{n.nonce=String(r+s);}))};var We=new Map,Lr=(t,e,r)=>(We.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s},a)=>{let o=We.get(t);if(!o)throw rpcErrors.rpcErrors.resourceNotFound();let{signingRequests:c}=o,l={signingRequests:c.map((p,m)=>{if(a===void 0||a===m){let{signingData:u}=p;return {signingData:{...u,data:{...u.data,maxFeePerGas:n??u.data.maxFeePerGas,maxPriorityFeePerGas:s??u.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return We.set(t,l),l},cleanup:()=>We.delete(t)});var Or=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:a,populateMissingGas:o})=>{let c;try{c=await Lt({proxyApiUrl:s,chainId:n,params:r,domain:e,withGasEstimation:o});}catch(d){return console.error("simulateTransactionBatch error",d),{isSimulationSuccessful:!1,alert:U[vmModuleTypes.AlertType.WARNING],scans:[]}}let i=await Promise.all(c.map(async(d,g)=>{let y=r[g],v=await rt({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:d});return o&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=i.every(d=>d.isSimulationSuccessful),p=va(i),m=Ra(i),u=ba(i);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:u,scans:i.map(d=>(d.tokenApprovals&&(d.tokenApprovals.isEditable=!1),d))}},va=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)},ba=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(s=>{let a=r.approvals.find(o=>s.token.address===o.token.address&&s.spenderAddress===o.spenderAddress);if(!a){r.approvals.push({...s});return}a.value=s.value,a.usdPrice=s.usdPrice;}),r),{approvals:[],isEditable:!1});return Pa(e,t),tt(e)?void 0:e},Ra=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(s=>{let a=Hr(r.ins,s);a?a.items.push(...s.items):r.ins.push(s);}),n.outs.forEach(s=>{let a=Hr(r.outs,s);a?a.items.push(...s.items):r.outs.push({...s});})),r),{ins:[],outs:[]});return tt(e)?void 0:e},Hr=(t,e)=>t.find(r=>O(r.token)&&O(e.token)?r.token.symbol===e.token.symbol:!O(r.token)&&!O(e.token)?r.token.address===e.token.address:!1),Pa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!O(a.token)&&!O(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(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var Wr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,success:o,error:c}=Mr(s);if(!o)return console.error("invalid params",c),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:c}})};let i=await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Vr(a,i);}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:u,tokenApprovals:d,scans:g}=await Or({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:a,dAppUrl:t.dappInfo.url,provider:i,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:[Ce("Website",t.dappInfo),J("From",a[0].from)]}],network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},isSimulationSuccessful:u,balanceChange:m,alert:p,tokenApprovals:d,networkFeeSelector:!0},E=g.map(I=>Ne(t,e,I.transaction,I)),{cleanup:T,updateTx:k}=Lr(t.requestId,E,v),S=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in S)return {error:S.error};if(S.result.length!==a.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${S.result.length}`})};let ve=[];for(let[I,je]of S.result.entries()){let be=I===S.result.length-1,le=await Ue(i,je),qr=De({provider:i,txHash:le,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!be&&!await qr)return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};ve.push(le);}return {result:ve}};var ce,Ee,_,L,jr=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,ce,void 0);chunkTKL4UUHE_cjs.c(this,Ee,void 0);chunkTKL4UUHE_cjs.c(this,_,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=mr(r);chunkTKL4UUHE_cjs.d(this,ce,new Ve({glacierApiUrl:s,headers:st(n)})),chunkTKL4UUHE_cjs.d(this,Ee,new Oe({proxyApiUrl:a})),chunkTKL4UUHE_cjs.d(this,_,a),chunkTKL4UUHE_cjs.d(this,L,e);}getProvider(e){return A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Dr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:a,tokenTypes:o}){return lr({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_),customTokens:s,balanceServices:[chunkTKL4UUHE_cjs.b(this,ce),chunkTKL4UUHE_cjs.b(this,Ee)],storage:a,tokenTypes:o})}getManifest(){let e=vmModuleTypes.parseManifest(Gt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:a,caipId:o}=e;return yt({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:a?.multicall,caipId:o,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:a}=e,{chainId:o,isTestnet:c,networkToken:i,explorerUrl:l=""}=r;return Ut({chainId:o,isTestnet:c,networkToken:i,explorerUrl:l,address:n,nextPageToken:s,offset:a,glacierService:chunkTKL4UUHE_cjs.b(this,ce)})}getTokens(e){let{chainId:r}=e;return Re({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return rr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Yt(chunkTKL4UUHE_cjs.b(this,L))?Wr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_)}):{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 Nr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,_)});default:return Ia(e.method)?_r(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ce=new WeakMap,Ee=new WeakMap,_=new WeakMap,L=new WeakMap;var Ia=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
43
|
+
`;}),e},$=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 ye=zod.z.string().describe("message"),C=zod.z.string().describe("address");var br=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([C,ye])});var Rr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),ne=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Rr)}).catchall(zod.z.array(Rr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),mt=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(),dt=ne.or(mt),Pr=zod.z.union([zod.z.string().describe("data string"),ne]),Sr=zod.z.union([zod.z.string().describe("data string"),dt]),Ir=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([C,Sr])}),xr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([C,Sr])}),Ar=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([C,Pr])}),wr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([C,Pr])});var Cr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([ye,C]),zod.z.tuple([ye,C,zod.z.string().optional().describe("password")])])});var ua=zod.z.discriminatedUnion("method",[Cr,br,Ir,xr,Ar,wr]).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 s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:dt.parse(o),address:s,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 s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:ne.parse(o),address:s,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function Nr(t){return ua.safeParse(t)}var _r=t=>mt.safeParse(t).success,Mc=t=>ne.safeParse(t).success;var Br=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 Dr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=Nr({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:i}=s.data,c;(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Br(o));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:o},p=o,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:o},p=ethers.toUtf8String(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:o},p=_r(o)?Er(o):lt(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:o};let{types:v,primaryType:E,...T}=o;p=lt(T);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let u=await nr({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 Ur=async(t,e)=>{try{return {result:await(await A({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 Fr=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 se,He=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,se,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${r}&chain_ids=${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,se).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,se)}};se=new WeakMap;var B,Te,ft,We=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,Te);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.d(this,B,new He(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,B).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:s,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,Te,ft).call(this,e),o=s.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,B).getTokenBalance({address:r,chainId:a,tokenId:o}),c=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await Fe()).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:s,chainIdString:a}=await chunkTKL4UUHE_cjs.e(this,Te,ft).call(this,e),o=await chunkTKL4UUHE_cjs.b(this,B).getTokensBalanceOnChain({chainId:a,address:r}),i={},c=await Fe();for(let l of o){if(l.id===s.native_token_id||l.is_core===!1)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=c.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;i[l.id]={chainId:s.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 i}async listNftBalances(){return {}}};B=new WeakMap,Te=new WeakSet,ft=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,B).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let s=await chunkTKL4UUHE_cjs.b(this,B).getChainInfo({chainId:n});if(!s)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:s,chainIdString:n}};var ba=zod.z.tuple([z,z]).rest(z).refine(t=>yt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>yt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Pa(t,"nonce")||Ra(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ra(t,e){return !yt(t,e)}function Pa(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function yt(t,e){return new Set(t.map(n=>n[e])).size===1}var Hr=t=>ba.safeParse(t);var Or=async(t,e)=>{if(t[0].nonce)return;let r=await Se({from:t[0].from,provider:e});return Promise.all(t.map(async(n,s)=>{n.nonce=String(r+s);}))};var $e=new Map,Wr=(t,e,r)=>($e.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s},a)=>{let o=$e.get(t);if(!o)throw rpcErrors.rpcErrors.resourceNotFound();let{signingRequests:i}=o,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:s??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return $e.set(t,l),l},cleanup:()=>$e.delete(t)});var jr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:a,populateMissingGas:o})=>{let i;try{i=await Wt({proxyApiUrl:s,chainId:n,params:r,domain:e,withGasEstimation:o});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:U[vmModuleTypes.AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,g)=>{let y=r[g],v=await at({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:u});return o&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=Ia(c),m=Aa(c),d=xa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},Ia=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)},xa=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(s=>{let a=r.approvals.find(o=>s.token.address===o.token.address&&s.spenderAddress===o.spenderAddress);if(!a){r.approvals.push({...s});return}a.value=s.value,a.usdPrice=s.usdPrice;}),r),{approvals:[],isEditable:!1});return wa(e,t),nt(e)?void 0:e},Aa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(s=>{let a=$r(r.ins,s);a?a.items.push(...s.items):r.ins.push(s);}),n.outs.forEach(s=>{let a=$r(r.outs,s);a?a.items.push(...s.items):r.outs.push({...s});})),r),{ins:[],outs:[]});return nt(e)?void 0:e},$r=(t,e)=>t.find(r=>O(r.token)&&O(e.token)?r.token.symbol===e.token.symbol:!O(r.token)&&!O(e.token)?r.token.address===e.token.address:!1),wa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!O(a.token)&&!O(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(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var qr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,success:o,error:i}=Hr(s);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Or(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 jr({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:[Ce("Website",t.dappInfo),J("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=>Ne(t,e,I.transaction,I)),{cleanup:T,updateTx:k}=Wr(t.requestId,E,v),S=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in S)return {error:S.error};if(S.result.length!==a.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${S.result.length}`})};let ve=[];for(let[I,qe]of S.result.entries()){let be=I===S.result.length-1,ce=await Ue(c,qe),zr=De({provider:c,txHash:ce,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!be&&!await zr)return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};ve.push(ce);}return {result:ve}};var ie,Ee,N,L,Yr=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,ie,void 0);chunkTKL4UUHE_cjs.c(this,Ee,void 0);chunkTKL4UUHE_cjs.c(this,N,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=fr(r);chunkTKL4UUHE_cjs.d(this,ie,new Ve({glacierApiUrl:s,headers:ct(n)})),chunkTKL4UUHE_cjs.d(this,Ee,new We({proxyApiUrl:a})),chunkTKL4UUHE_cjs.d(this,N,a),chunkTKL4UUHE_cjs.d(this,L,e);}getProvider(e){return A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Fr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:a,tokenTypes:o}){return dr({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N),customTokens:s,balanceServices:[chunkTKL4UUHE_cjs.b(this,ie),chunkTKL4UUHE_cjs.b(this,Ee)],storage:a,tokenTypes:o})}getManifest(){let e=vmModuleTypes.parseManifest(Vt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:a,caipId:o}=e;return Tt({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:a?.multicall,caipId:o,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:a}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return Mt({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:a,glacierService:chunkTKL4UUHE_cjs.b(this,ie)})}getTokens(e){let{chainId:r}=e;return Re({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return or({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Xt(chunkTKL4UUHE_cjs.b(this,L))?qr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N)}):{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 Dr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,N)});default:return Na(e.method)?Ur(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ie=new WeakMap,Ee=new WeakMap,N=new WeakMap,L=new WeakMap;var Na=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
44
44
|
|
|
45
45
|
exports.ERC20TransactionType = H;
|
|
46
|
-
exports.EvmModule =
|
|
47
|
-
exports.NonContractCallTypes =
|
|
46
|
+
exports.EvmModule = Yr;
|
|
47
|
+
exports.NonContractCallTypes = Ut;
|
|
48
48
|
exports.addIdToPromise = K;
|
|
49
|
-
exports.isTypedData =
|
|
50
|
-
exports.isTypedDataV1 =
|
|
49
|
+
exports.isTypedData = Mc;
|
|
50
|
+
exports.isTypedDataV1 = _r;
|
|
51
51
|
exports.settleAllIdPromises = X;
|
|
52
52
|
//# sourceMappingURL=out.js.map
|
|
53
53
|
//# sourceMappingURL=index.cjs.map
|