import { Chain, ChainToChainId, filterSupportedChains, SKConfig, WalletOption } from "@swapkit/helpers"; import { createWallet, getWalletSupportedChains } from "@swapkit/wallet-core"; import { getWalletMethods } from "./signer"; export const coinbaseWallet = createWallet({ connect: ({ addChain, walletType, supportedChains }) => async function connectCoinbaseWallet(chains: Chain[]) { const { createCoinbaseWalletSDK } = await import("@coinbase/wallet-sdk"); const filteredChains = filterSupportedChains({ chains, supportedChains, walletType }); const coinbaseConfig = SKConfig.get("integrations").coinbase || { appName: "Swapkit Playground" }; const coinbaseSdk = createCoinbaseWalletSDK({ ...coinbaseConfig, appChainIds: filteredChains.map((chain) => Number(ChainToChainId[chain])), }); await Promise.all( filteredChains.map(async (chain) => { const walletMethods = await getWalletMethods({ chain, coinbaseSdk }); addChain({ ...walletMethods, chain, walletType }); }), ); return true; }, directSigningSupport: { [Chain.Arbitrum]: true, [Chain.Avalanche]: true, [Chain.Base]: true, [Chain.BinanceSmartChain]: true, [Chain.Ethereum]: true, [Chain.Optimism]: true, [Chain.Polygon]: true, [Chain.XLayer]: true, }, name: "connectCoinbaseWallet", supportedChains: [ Chain.Arbitrum, Chain.Avalanche, Chain.Base, Chain.BinanceSmartChain, Chain.Ethereum, Chain.Optimism, Chain.Polygon, Chain.XLayer, ], walletType: WalletOption.COINBASE_MOBILE, }); export const COINBASE_SUPPORTED_CHAINS = getWalletSupportedChains(coinbaseWallet);