{
  "version": 3,
  "sources": ["../src/coinbase/index.ts", "../src/coinbase/signer.ts"],
  "sourcesContent": [
    "import { Chain, ChainToChainId, filterSupportedChains, SKConfig, WalletOption } from \"@swapkit/helpers\";\nimport { createWallet, getWalletSupportedChains } from \"@swapkit/wallet-core\";\n\nimport { getWalletMethods } from \"./signer\";\n\nexport const coinbaseWallet = createWallet({\n  connect: ({ addChain, walletType, supportedChains }) =>\n    async function connectCoinbaseWallet(chains: Chain[]) {\n      const { createCoinbaseWalletSDK } = await import(\"@coinbase/wallet-sdk\");\n\n      const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n      const coinbaseConfig = SKConfig.get(\"integrations\").coinbase || { appName: \"Swapkit Playground\" };\n\n      const coinbaseSdk = createCoinbaseWalletSDK({\n        ...coinbaseConfig,\n        appChainIds: filteredChains.map((chain) => Number(ChainToChainId[chain])),\n      });\n\n      await Promise.all(\n        filteredChains.map(async (chain) => {\n          const walletMethods = await getWalletMethods({ chain, coinbaseSdk });\n\n          addChain({ ...walletMethods, chain, walletType });\n        }),\n      );\n\n      return true;\n    },\n  directSigningSupport: {\n    [Chain.Arbitrum]: true,\n    [Chain.Avalanche]: true,\n    [Chain.Base]: true,\n    [Chain.BinanceSmartChain]: true,\n    [Chain.Ethereum]: true,\n    [Chain.Optimism]: true,\n    [Chain.Polygon]: true,\n    [Chain.XLayer]: true,\n  },\n  name: \"connectCoinbaseWallet\",\n  supportedChains: [\n    Chain.Arbitrum,\n    Chain.Avalanche,\n    Chain.Base,\n    Chain.BinanceSmartChain,\n    Chain.Ethereum,\n    Chain.Optimism,\n    Chain.Polygon,\n    Chain.XLayer,\n  ],\n  walletType: WalletOption.COINBASE_MOBILE,\n});\n\nexport const COINBASE_SUPPORTED_CHAINS = getWalletSupportedChains(coinbaseWallet);\n",
    "import type { CoinbaseWalletProvider } from \"@coinbase/wallet-sdk\";\nimport type { createCoinbaseWalletSDK } from \"@coinbase/wallet-sdk/dist/createCoinbaseWalletSDK.js\";\nimport { Chain, SwapKitError } from \"@swapkit/helpers\";\nimport type { Provider, TypedDataDomain, TypedDataField } from \"ethers\";\n\nasync function getCoinbaseMobileSigner(walletProvider: CoinbaseWalletProvider, provider?: Provider) {\n  const { AbstractSigner } = await import(\"ethers\");\n\n  class CoinbaseMobileSigner extends AbstractSigner {\n    #coinbaseProvider: CoinbaseWalletProvider;\n\n    constructor(coinbaseProvider: CoinbaseWalletProvider, provider?: Provider) {\n      super(provider);\n      this.#coinbaseProvider = coinbaseProvider;\n    }\n\n    async getAddress() {\n      const accounts = await this.#coinbaseProvider.request<string[]>({ method: \"eth_requestAccounts\" });\n\n      if (!accounts[0]) throw new SwapKitError(\"wallet_coinbase_no_accounts\");\n\n      return accounts[0];\n    }\n\n    async signTransaction() {\n      return await this.#coinbaseProvider.request<string>({ method: \"eth_signTransaction\" });\n    }\n\n    async signMessage(message: string | Uint8Array) {\n      return await this.#coinbaseProvider.request<string>({\n        method: \"personal_sign\",\n        params: [message, await this.getAddress()],\n      });\n    }\n\n    async signTypedData(\n      domain: TypedDataDomain,\n      types: Record<string, TypedDataField[]>,\n      value: Record<string, unknown>,\n      explicitPrimaryType?: string,\n    ) {\n      const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n      const { TypedDataEncoder } = await import(\"ethers\");\n      const address = await this.getAddress();\n\n      const { EIP712Domain: _, ...filteredTypes } = types;\n      const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n\n      const payload = {\n        domain,\n        message: value,\n        primaryType,\n        types: { EIP712Domain: buildEIP712DomainType(domain), ...filteredTypes },\n      };\n\n      return await this.#coinbaseProvider.request<string>({\n        method: \"eth_signTypedData_v4\",\n        params: [address, JSON.stringify(payload)],\n      });\n    }\n\n    connect(provider: Provider) {\n      return new CoinbaseMobileSigner(this.#coinbaseProvider, provider);\n    }\n  }\n\n  return new CoinbaseMobileSigner(walletProvider, provider);\n}\n\nexport const getWalletMethods = async ({\n  chain,\n  coinbaseSdk,\n}: {\n  chain: Chain;\n  coinbaseSdk: ReturnType<typeof createCoinbaseWalletSDK>;\n}) => {\n  switch (chain) {\n    case Chain.Ethereum:\n    case Chain.Avalanche:\n    case Chain.Arbitrum:\n    case Chain.Optimism:\n    case Chain.Polygon:\n    case Chain.Base:\n    case Chain.BinanceSmartChain: {\n      const walletProvider = coinbaseSdk.getProvider() as CoinbaseWalletProvider;\n      const { getEvmToolboxAsync, getProvider } = await import(\"@swapkit/toolboxes/evm\");\n\n      const provider = await getProvider(chain);\n      const signer = await getCoinbaseMobileSigner(walletProvider, provider);\n      const toolbox = await getEvmToolboxAsync(chain, { provider, signer });\n      const address = await signer.getAddress();\n\n      return { ...toolbox, address };\n    }\n\n    default:\n      throw new SwapKitError(\"wallet_coinbase_chain_not_supported\", { chain });\n  }\n};\n"
  ],
  "mappings": "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",
  "debugId": "C803DBD074B38F3364756E2164756E21",
  "names": []
}