require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../types/external-action.types.cjs`),n=require(`../../types/admin.types.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/utils/token-check.utils.cjs`),a=require(`../../functions/utils/create-provider.cjs`),o=require(`../../functions/pre-transaction/constructAdminData.cjs`),s=require(`../AccountActions/AccountActions.cjs`),c=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../constants/index.cjs`);const u=require(`../../API/admin-calls.cjs`);require(`../AccountActions/index.cjs`);const d=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);let f=require(`@solana/web3.js`);var p=async(e,t)=>{let{addressLookupTableAccount:n,instructionLists:r}=JSON.parse(t).data,i=await Promise.all(n.map(async t=>{let n=await e.getAddressLookupTable(new f.PublicKey(t));if(!n.value)throw Error(`Failed to fetch lookup table: ${t}`);return n.value}));if(r.length===0)throw Error(`No instructions found`);return{instructions:r.map(e=>new f.TransactionInstruction({keys:e.accounts.map(e=>({pubkey:new f.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable})),programId:new f.PublicKey(e.programId),data:Buffer.from(e.data,`base64`)})),lookupTableAccounts:i}},m=async(e,t)=>{let n=f.VersionedTransaction.deserialize(Buffer.from(t,`base64`)),r=await Promise.all(n.message.addressTableLookups.map(async({accountKey:t})=>{let n=await e.getAddressLookupTable(t);if(!n.value)throw Error(`Failed to fetch lookup table: ${t.toBase58()}`);return n.value})),{instructions:i}=f.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r});return{instructions:i,lookupTableAccounts:r}},h=async(n,r,i,o)=>{let c=s.AccountActions.getAddressFromSubAccount(n,i);if(!c)throw Error(`Public account address is not available`);let{fetchRpcUrl:l}=e.networkRegistry[n];if(!l)throw Error(`RPC URL not found for the specified chain ID`);let u=a.createCustomSolanaConnection(l),d=new f.PublicKey(c),{instructions:h,lookupTableAccounts:g}=o===t.ExternalActionId.Lifi?await m(u,r):await p(u,r);return{connection:u,walletPublicKey:d,instructions:h,lookupTableAccounts:g}},g=async(e,a,s,p,m,g,_,v,y)=>{let b=i.validateAndGetChainId(a),x=g===t.ExternalActionId.Lifi,[{connection:S,walletPublicKey:C,instructions:w,lookupTableAccounts:T},E,D]=await Promise.all([h(b,p,m,g),x?Promise.resolve(null):e.getRandomRelay(b),e.getEthereumAddressByChain(b)]),O=w;if(!x){if(!E)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let e=a[1],n=s[1]*(v??await l.getFeeStructure(b,_,a.map(e=>e.erc20TokenAddress),t.ExternalActionId.Emporium)).variableRate/10000n,{instructions:i}=await d.buildSolanaTransferInstructions(S,C,new f.PublicKey(E),e,n);O=[...w,...i]}let k=await c.sendProxyV0Transaction({connection:S,chainId:b,subAccount:m,payerPublicKey:C,instructions:O,lookupTableAccounts:T}),A=x?n.AdminTransactionType.PublicBridgeSwap:n.AdminTransactionType.PublicSwap;return u.emitTxPublicData(o.constructAdminData(y??A,b,a.map(e=>e.erc20TokenAddress),s,D,a)),k};exports.hinkalSolanaProxySwap=g;