require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/ethereum-network.types.cjs`),r=require(`../utils/caseInsensitive.utils.cjs`),i=require(`../utils/getContractAddress.cjs`),a=require(`../../error-handling/logger.cjs`),o=require(`../utils/create-provider.cjs`),s=require(`../../data-structures/AccountActions/AccountActions.cjs`);require(`../utils/index.cjs`);let c=require(`ethers`);var l=({contract:e,func:t,args:n,callDataString:r,invokeWallet:a,value:o})=>{let s=new Uint8Array,l=r?c.ethers.getBytesCopy(r):new Uint8Array;if(typeof e==`object`){if(s=c.ethers.getBytesCopy(i.getContractAddress(e)),r?.length&&r?.length>0)throw Error(`If function and args are providedm no calldata is needed`);t&&n&&!r&&(l=c.ethers.getBytesCopy(e.interface.encodeFunctionData(t,n)))}else s=c.ethers.getBytesCopy(e);let u=c.ethers.getBytesCopy(new Uint8Array([+!!a])),d=c.ethers.zeroPadValue(c.ethers.toBeHex(o??0n),16),f=c.ethers.concat([s,u,d,l]);return c.ethers.hexlify(f)},u=async(e,n,r,i,a,o)=>{let l=r?await s.AccountActions.signTypedDataFromPrivateKey(e,r,{name:`Emporium`,version:`1.0.0`,chainId:e,verifyingContract:n},{EmporiumSignature:[{name:`message`,type:`uint256`}]},{message:a}):void 0,{v:u,r:d,s:f}=l?c.ethers.Signature.from(l):{v:0,r:c.ethers.ZeroHash,s:c.ethers.ZeroHash};return c.ethers.AbiCoder.defaultAbiCoder().encode([`tuple(uint8 v,bytes32 r, bytes32 s, uint256 message, address signerAddress, bytes[] ops)`],[{v:u,r:d,s:f,message:a??0n,signerAddress:o??t.zeroAddress,ops:i}])},d=(e,t,n,r)=>l(e?{contract:e,func:`transfer`,args:[t,n],invokeWallet:r}:{contract:t,value:n,invokeWallet:r}),f=(e,a,o,s,c)=>{let l=e.getContractWithFetcher(a,n.ContractType.HinkalContract);return o.map((o,u)=>d(r.caseInsensitiveEqual(o,t.zeroAddress)?void 0:e.getContractWithFetcher(a,n.ContractType.ERC20Contract,o),c??i.getContractAddress(l),s[u],!0))},p=(e,t,n,r)=>l({contract:e,func:`approve`,args:[t,n],invokeWallet:r}),m=(e,i,a,o,s,c,l,u)=>{let f=[];for(let s=0;s<a.length;s+=1){let c=a[s],u=r.caseInsensitiveEqual(c,t.zeroAddress)?void 0:e.getContractWithFetcher(i,n.ContractType.ERC20Contract,c);f.push(d(u,l,o[s],!1))}if(u)for(let a=0;a<s.length;a+=1){let o=s[a];if(!r.caseInsensitiveEqual(o,t.zeroAddress)){let t=e.getContractWithFetcher(i,n.ContractType.ERC20Contract,o);f.push(p(t,u,c[a],!0))}}return f},h=(e,n,i,a,o,s,c,u)=>{let d=[],f=[o],p=[s];u.nativeFee>0n&&!r.caseInsensitiveEqual(o,t.zeroAddress)&&(f.push(t.zeroAddress),p.push(u.nativeFee));let h=m(e,n,f,p,[o],[c],i,a);d.push(...h);let g=u.nativeFee;return r.caseInsensitiveEqual(o,t.zeroAddress)&&(g+=c),d.push(l({contract:a,callDataString:u.calldata,value:g>0n?g:void 0,invokeWallet:!0})),d},g=`0xef0100`,_=async(e,t)=>{try{let n=o.createJsonRpcProvider(e),r=await n.getCode(t);if(r===`0x`||!r)return{delegated:!1,implementation:void 0,nonce:void 0};if(r.toLowerCase().startsWith(g)&&r.length===48){let e=`0x${r.slice(8)}`,i=await n.getTransactionCount(t);return{delegated:!0,implementation:c.ethers.getAddress(e),nonce:i}}else throw Error(`checkEOAWithDelegation: It is a contract`)}catch(e){throw a.Logger.error(`checkEOAWithDelegation error`,{error:e}),e}},v=n=>{let{hinkalWalletAddress:i}=e.networkRegistry[n].contractData;if(!i||r.caseInsensitiveEqual(i,t.zeroAddress))throw Error(`Hinkal Wallet Address is not set`);return i},y=async(t,n)=>{if(t===e.chainIds.localhost||!n)return;let{delegated:i,implementation:a}=await _(t,s.AccountActions.getSignerAddressFromPrivateKey(t,n)),o=v(t);if(!i||!r.caseInsensitiveEqual(a,o)){let e=await s.AccountActions.authorizeDelegation(t,n,o);return{v:e.signature.v.toString(),r:e.signature.r,s:e.signature.s,nonce:e.nonce.toString(),address:o,chainId:String(t)}}};exports.checkEOAWithDelegation=_,exports.createApproveEmporiumOp=p,exports.createLifiBridgeOps=h,exports.createTransaferEmporiumOpsBatch=f,exports.createTransferToEmporiumOp=d,exports.emporiumOp=l,exports.encodeEmporiumMetadata=u,exports.generateFundAndApproveOps=m,exports.getAuthorizationDataIfNeeded=y;