require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../types/ethereum-network.types.cjs`),n=require(`../../types/balances.types.cjs`),r=require(`../../types/events.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/getContractAddress.cjs`),a=require(`../../functions/utils/mutexes.utils.cjs`),o=require(`../../functions/utils/create-provider.cjs`),s=require(`../../functions/web3/events/balanceChangedHandler.cjs`),c=require(`../event-service/evm/ClientBlockchainEventEmitter.cjs`),l=require(`../event-service/solana/ClientSolanaBlockchainEventEmitter.cjs`);require(`../event-service/index.cjs`);const u=require(`../snapshot/SnapshotFetcherService.cjs`),d=require(`../snapshot/solana-snapshots/ClientSolanaCommitmentsSnapshotService.cjs`),f=require(`../snapshot/solana-snapshots/ClientSolanaNullifierSnapshotService.cjs`),p=require(`../snapshot/solana-snapshots/ClientSolanaAccessTokenSnapshotService.cjs`),m=require(`../snapshot/evm-snapshots/ClientAccessTokenSnapshotService.cjs`),h=require(`../snapshot/evm-snapshots/ClientCommitmentsSnapshotService.cjs`),g=require(`../snapshot/evm-snapshots/ClientNullifierSnapshotService.cjs`);require(`../snapshot/index.cjs`);let _=require(`@solana/web3.js`);var v=async(v,y)=>{let b=y??v.getSupportedChains();b.forEach(e=>{v.commitmentsSnapshotServiceByChain[e]?.intervalClear(),v.nullifierSnapshotServiceByChain[e]?.intervalClear(),v.accessTokenSnapshotServiceByChain[e]?.intervalClear()});let x=b.map(async y=>{let{maxPageSize:b,fetchRpcUrl:x,contractData:S}=e.networkRegistry[y],C,w;if(e.isSolanaLike(y)){let e=S.hinkalAddress;if(!x||!e)throw Error(`Fetch RPC URL or Solana program ID is not set`);C=new l.ClientSolanaBlockchainEventEmitter(y,o.createCustomSolanaConnection(x),new _.PublicKey(e),0,a.getChainBalanceFetchingMutex(y),b);let t=S.hinkalIdl;t&&C.setIdl(t);let n=new u.SnapshotFetcherService(y,e);v.commitmentsSnapshotServiceByChain[y]=new d.ClientSolanaCommitmentsSnapshotService(C,n),v.nullifierSnapshotServiceByChain[y]=new f.ClientSolanaNullifierSnapshotService(C,n),v.accessTokenSnapshotServiceByChain[y]=new p.ClientSolanaAccessTokenSnapshotService(C,n)}else{let e=v.getContractWithFetcherByChainId(y,t.ContractType.HinkalContract),n=v.getContractWithFetcherByChainId(y,t.ContractType.DepositOnChainUtxos),o=a.getChainBalanceFetchingMutex(y);C=new c.ClientBlockchainEventEmitter(r.EventCategory.MainContractEvents,y,e,0,o,b,n),w=new c.ClientBlockchainEventEmitter(r.EventCategory.AccessTokenContractEvents,y,v.getContractWithFetcherByChainId(y,t.ContractType.AccessTokenContract),0,o,b);let s=new u.SnapshotFetcherService(y,i.getContractAddress(e));v.commitmentsSnapshotServiceByChain[y]=new h.ClientCommitmentsSnapshotService(C,s),v.nullifierSnapshotServiceByChain[y]=new g.ClientNullifierSnapshotService(C,s),v.accessTokenSnapshotServiceByChain[y]=new m.ClientAccessTokenSnapshotService(w,s)}let T=v.commitmentsSnapshotServiceByChain[y],E=v.nullifierSnapshotServiceByChain[y],D=v.accessTokenSnapshotServiceByChain[y];if(!T||!E||!D)throw Error(`Missing snapshot service for chain ${y}`);await Promise.all([T.init(),E.init(),D.init()]),await Promise.all([C.init(),w?.init()]),v.merkleTreeHinkalByChain[y]=T.merkleTree,v.merkleTreeAccessTokenByChain[y]=D.merkleTree,v.nullifiersByChain[y]=E.nullifiers,v.encryptedOutputsByChain[y]=T.encryptedOutputs,C.onEventsProcessed=e=>{e>0&&s.balanceChangedHandler({updateType:n.PrivateBalanceUpdateType.FreshWithoutLoader,updateTokensListBefore:!0,chainIdToUpdate:y})}});await Promise.allSettled(x)};exports.resetMerkleTrees=v;