import type { Account, Chain, Client, Transport } from 'viem' import type { PublicActionsL2 as OpPublicActionsL2 } from 'viem/op-stack' import { publicActionsL2 as opPublicActionsL2 } from 'viem/op-stack' import type { BuildExecutingMessageParameters, BuildExecutingMessageReturnType, GetCrossDomainMessagesParameters, GetCrossDomainMessagesReturnType, GetCrossDomainMessageStatusParameters, GetCrossDomainMessageStatusReturnType, RelayCrossDomainMessageContractReturnType, RelayCrossDomainMessageParameters, SendCrossDomainMessageContractReturnType, SendCrossDomainMessageParameters, SendETHContractReturnType, SendETHParameters, SendSuperchainERC20ContractReturnType, SendSuperchainERC20Parameters, } from '@/actions/interop/index.js' import { buildExecutingMessage, estimateRelayCrossDomainMessageGas, estimateSendCrossDomainMessageGas, estimateSendETHGas, estimateSendSuperchainERC20Gas, getCrossDomainMessages, getCrossDomainMessageStatus, simulateRelayCrossDomainMessage, simulateSendCrossDomainMessage, simulateSendETH, simulateSendSuperchainERC20, } from '@/actions/interop/index.js' export type PublicInteropActionsL2< TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined, > = { buildExecutingMessage: ( parameters: BuildExecutingMessageParameters, ) => Promise estimateSendCrossDomainMessageGas: < TChainOverride extends Chain | undefined = undefined, >( parameters: SendCrossDomainMessageParameters< TChain, TAccount, TChainOverride >, ) => Promise estimateRelayCrossDomainMessageGas: < TChainOverride extends Chain | undefined = undefined, >( parameters: RelayCrossDomainMessageParameters< TChain, TAccount, TChainOverride >, ) => Promise estimateSendSuperchainERC20Gas: < TChainOverride extends Chain | undefined = undefined, >( parameters: SendSuperchainERC20Parameters, ) => Promise estimateSendETHGas: ( parameters: SendETHParameters, ) => Promise getCrossDomainMessages: ( parameters: GetCrossDomainMessagesParameters, ) => Promise getCrossDomainMessageStatus: ( parameters: GetCrossDomainMessageStatusParameters, ) => Promise simulateSendCrossDomainMessage: < TChainOverride extends Chain | undefined = undefined, >( parameters: SendCrossDomainMessageParameters< TChain, TAccount, TChainOverride >, ) => Promise simulateRelayCrossDomainMessage: < TChainOverride extends Chain | undefined = undefined, >( parameters: RelayCrossDomainMessageParameters< TChain, TAccount, TChainOverride >, ) => Promise simulateSendSuperchainERC20: < TChainOverride extends Chain | undefined = undefined, >( parameters: SendSuperchainERC20Parameters, ) => Promise simulateSendETH: ( parameters: SendETHParameters, ) => Promise } export type PublicActionsL2< TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined, > = OpPublicActionsL2 & { /** scoped interop actions */ interop: PublicInteropActionsL2 } export function publicActionsL2() { return < TTransport extends Transport, TChain extends Chain | undefined = Chain | undefined, TAccount extends Account | undefined = Account | undefined, >( client: Client, ): PublicActionsL2 => { return { ...opPublicActionsL2(), interop: { buildExecutingMessage: (args) => buildExecutingMessage(client, args), estimateSendCrossDomainMessageGas: (args) => estimateSendCrossDomainMessageGas(client, args), estimateRelayCrossDomainMessageGas: (args) => estimateRelayCrossDomainMessageGas(client, args), estimateSendSuperchainERC20Gas: (args) => estimateSendSuperchainERC20Gas(client, args), estimateSendETHGas: (args) => estimateSendETHGas(client, args), getCrossDomainMessages: (args) => getCrossDomainMessages(client, args), getCrossDomainMessageStatus: (args) => getCrossDomainMessageStatus(client, args), simulateSendCrossDomainMessage: (args) => simulateSendCrossDomainMessage(client, args), simulateRelayCrossDomainMessage: (args) => simulateRelayCrossDomainMessage(client, args), simulateSendSuperchainERC20: (args) => simulateSendSuperchainERC20(client, args), simulateSendETH: (args) => simulateSendETH(client, args), }, } as PublicActionsL2 } }