const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/tx-confirmation.constants.cjs`);require(`../../constants/index.cjs`);const n=require(`../../data-structures/crypto-keys/keys.cjs`),r=require(`./time.utils.cjs`);require(`../../data-structures/crypto-keys/index.cjs`);const i=require(`../../error-handling/customErrors/ErrorWithIndex.cjs`),a=require(`./solanaMint.utils.cjs`),o=require(`../../error-handling/logger.cjs`),s=require(`./token-check.utils.cjs`),c=require(`../../error-handling/get-error.message.cjs`);require(`../../error-handling/index.cjs`);const l=require(`../pre-transaction/sendV0Transaction.cjs`);require(`../pre-transaction/index.cjs`);const u=require(`./getRecipientInfoFromUserKeys.cjs`),d=require(`./getUtxosFromReceipt.utils.cjs`),f=require(`./getUtxosFromReceiptSolana.cjs`),p=require(`./tx-confirmation.utils.cjs`);var m=async(t,n,r,i,o,s,c)=>{let{hinkalIdl:u}=e.networkRegistry[t].contractData;if(!u)throw Error(`No IDL configured for Solana program on this network`);let d=r.getSolanaProgram(u);await d.provider.connection.confirmTransaction(n,`finalized`);let p=await l.fetchSolanaTransaction(d.provider.connection,n,`finalized`);if(!p)throw Error(`Could not fetch Solana transaction for signature ${n}`);let{compressedAddress:m}=a.formatMintAddress(c),h=f.getUtxosFromReceiptSolana(p,d,i,m)[0];if(!h)throw Error(`Could not find recipient UTXO in Solana tx for claimable transfer`);return{chainId:t,senderAddress:s,recipientAddress:o.recipientAddress,utxo:h}},h=async(e,n,r,i,a,o,s)=>{let c=d.getUtxosFromReceipt(await p.waitForEthereumTransactionConfirmation(e,n,{evmTimeoutMs:t.RELAYER_TX_CONFIRMATION_TIMEOUT}),r,e,s,i)[0];if(!c)throw Error(`Could not find recipient UTXO in EVM txHash for claimable transfer`);return{chainId:e,senderAddress:o,recipientAddress:a.recipientAddress,utxo:c}},g=(e,t,r,i,a)=>{if(e.recipientInfo)return{recipientInfo:e.recipientInfo};let o=t-r,s=i+BigInt(o),c=a.userKeys.getClaimableSignatureFromNonce(s),l=new n.UserKeys(c),d=l.getShieldedPrivateKey();return{recipientInfo:u.getRecipientInfoFromUserKeys(l),recipientKeys:l,recipientShieldedPrivateKey:d,claimableSignature:c}},_=async(n,a,l,u,d,f,_,v)=>{if(l.length===0)return{pendingEnclaveUtxos:[],txHashes:[],failedRecipientErrorMessage:void 0};if(l.length!==u.length)throw Error(`recipients and allocations length mismatch`);let y=s.validateAndGetChainId([a]),b=await n.getEthereumAddressByChain(y),x=l.map((e,t)=>({recipient:e,recipientInfo:u[t]?.recipientInfo})),S=x.filter(e=>!!e.recipientInfo),C=x.filter(e=>!e.recipientInfo),w=[],T=[],E,D=[...S,...C];for(let s=0;s<D.length;s+=1)try{let i=D[s],o=!!i.recipientInfo,{recipientInfo:c,recipientKeys:l,recipientShieldedPrivateKey:u,claimableSignature:x}=g(i,s,S.length,d,n),C=await n.transfer([a],[-i.recipient.amount],c,f,_,v);if(T.push(C),o)await p.waitForTransactionConfirmation(a.chainId,C,{solanaCommitment:`finalized`,evmTimeoutMs:t.RELAYER_TX_CONFIRMATION_TIMEOUT});else{if(!l||!u)throw Error(`Missing recipient keys for fallback claimable transfer`);let t=e.isSolanaLike(y)?await m(y,C,n,l,i.recipient,b,a.erc20TokenAddress):await h(y,C,n,u,i.recipient,b,a.erc20TokenAddress);w.push({...t,claimableSignature:x})}s<D.length-1&&(await r.waitLittle(2e3),await n.resetMerkleTreesIfNecessary([a.chainId]))}catch(e){o.Logger.log(`Error in transferClaimableUtxos loop`,{error:e,index:s}),E=new i.ErrorWithIndex(s,c.getErrorMessage(e)),T.push(``);break}return{pendingEnclaveUtxos:w,txHashes:T,failedRecipientErrorMessage:E}};exports.transferClaimableUtxos=_;