{"version":3,"file":"createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs","names":["addNetwork: AddNetwork","payload: RequestAddChainPayload","getActiveNetworkId: GetActiveNetworkId","switchActiveNetwork: switchActiveNetwork","UserRejectedError","NetworkSwitchingUnavailableError","networkData","UnrecognizedNetworkError","NetworkNotAddedError","WalletProviderEnum","chain: Chain","addNetworkWrapped: EvmWalletProvider['addNetwork']","connect: EvmWalletProvider['connect']","disconnect: EvmWalletProvider['disconnect']","getConnectedAddresses: EvmWalletProvider['getConnectedAddresses']","signMessage: EvmWalletProvider['signMessage']","chain","terminate: EvmWalletProvider['terminate']","evmConfirmTransaction","evmExecuteSwapTransaction","evmTransferAmount"],"sources":["../src/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.ts","../src/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.ts","../src/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.ts"],"sourcesContent":["import type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n  EIP1193Provider,\n  EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\n// source: https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_addethereumchain/\ntype RequestAddChainPayload = {\n  /**\n   * An array of one or more URLs pointing to block explorer sites for the chain.\n   */\n  blockExplorerUrls?: string[];\n  /**\n   * The chain ID as a 0x-prefixed hexadecimal string, per the eth_chainId method.\n   * MetaMask compares this chain ID value with the eth_chainId return value.\n   * If these values aren't identical, MetaMask rejects the request.\n   */\n  chainId: string;\n  /**\n   * A human-readable name for the chain.\n   */\n  chainName: string;\n  /**\n   * An array of one or more URLs pointing to icons that can be used to visually identify the chain.\n   */\n  iconUrls?: string[];\n  /**\n   * An object containing information about the native currency of the chain.\n   */\n  nativeCurrency: {\n    /**\n     * A non-negative integer representing the number of decimals the native currency uses.\n     */\n    decimals: number;\n    /**\n     * A human-readable name of the native currency.\n     */\n    name: string;\n    /**\n     * A human-readable symbol of the native currency.\n     */\n    symbol: string;\n  };\n  /**\n   * An array of one or more URLs pointing to RPC endpoints that can be used to communicate with the chain.\n   * At least one item is required.\n   */\n  rpcUrls: string[];\n};\n\ntype AddNetwork = ExtendParameters<\n  EvmWalletProvider['addNetwork'],\n  {\n    eip1193: EIP1193Provider;\n  }\n>;\n\n/**\n * Allows requesting that the eip1193 provider adds a network to its list of available networks.\n * @not-instrumented\n */\nexport const addNetwork: AddNetwork = async ({ eip1193, networkData }) => {\n  const chainId = toHex(parseInt(networkData.networkId));\n\n  const payload: RequestAddChainPayload = {\n    blockExplorerUrls: networkData.blockExplorerUrls,\n    chainId,\n    chainName: networkData.displayName,\n    iconUrls: [networkData.iconUrl],\n    nativeCurrency: networkData.nativeCurrency,\n    rpcUrls: networkData.rpcUrls.http,\n  };\n\n  await eip1193.request({\n    method: 'wallet_addEthereumChain',\n    params: [payload],\n  });\n};\n","import type {\n  EIP1193Provider,\n  EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\ntype GetActiveNetworkId = (args: {\n  eip1193: EIP1193Provider;\n}) => ReturnType<EvmWalletProvider['getActiveNetworkId']>;\n\n/** @not-instrumented */\nexport const getActiveNetworkId: GetActiveNetworkId = async ({ eip1193 }) => {\n  const chainIdHex = (await eip1193.request({\n    method: 'eth_chainId',\n    params: [],\n  })) as string;\n\n  return { networkId: `${parseInt(chainIdHex, 16)}` };\n};\n","// Sources:\n// https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_switchethereumchain/\n// https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain\n\nconst isRecord = (value: unknown) =>\n  typeof value === 'object' && value !== null;\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isUnrecognizedChainError = (error: object) => {\n  const isCode4902 = 'code' in error && error.code === 4902;\n\n  const hasUnrecognizedChainMessage =\n    'message' in error &&\n    typeof error.message === 'string' &&\n    error.message.toLowerCase().includes('unrecognized chain');\n\n  const isOriginalErrorCode4902 =\n    'data' in error &&\n    isRecord(error.data) &&\n    'originalError' in error.data &&\n    isRecord(error.data.originalError) &&\n    'code' in error.data.originalError &&\n    error.data.originalError.code === 4902;\n\n  return isCode4902 || hasUnrecognizedChainMessage || isOriginalErrorCode4902;\n};\n","import {\n  type DynamicClient,\n  NetworkNotAddedError,\n  NetworkSwitchingUnavailableError,\n  UnrecognizedNetworkError,\n  UserRejectedError,\n  getNetworksData,\n} from '@dynamic-labs-sdk/client';\nimport type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n  EIP1193Provider,\n  EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\nimport { isUnrecognizedChainError } from '../isUnrecognizedChainError';\n\ntype switchActiveNetwork = ExtendParameters<\n  EvmWalletProvider['switchActiveNetwork'],\n  {\n    client: DynamicClient;\n    eip1193: EIP1193Provider;\n    walletProviderKey: string;\n  }\n>;\n\n/** @not-instrumented */\nexport const switchActiveNetwork: switchActiveNetwork = async ({\n  networkId,\n  client,\n  eip1193,\n  walletProviderKey,\n}) => {\n  const chainId = toHex(parseInt(networkId));\n\n  try {\n    await eip1193.request({\n      method: 'wallet_switchEthereumChain',\n      params: [{ chainId }],\n    });\n  } catch (error) {\n    // We declare this error here to DRY it from being created in 2 different points below\n    const userRejectedError = new UserRejectedError({\n      action: 'switch wallet active network',\n    });\n\n    if (typeof error === 'string' && error.includes('rejected')) {\n      throw userRejectedError;\n    }\n\n    if (typeof error !== 'object' || error === null) {\n      throw error;\n    }\n\n    if (\n      'details' in error &&\n      Array.isArray(error.details) &&\n      error.details.includes(\n        // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n        '\"wallet_switchEthereumChain\" not implemented'\n      )\n    ) {\n      throw new NetworkSwitchingUnavailableError({\n        originalError: error,\n        walletProviderKey,\n      });\n    }\n\n    // Bear in mind: the unrecognized chain error also contains 'rejected' in message,\n    // so it needs to be checked for before the rejection error itself.\n    if (isUnrecognizedChainError(error)) {\n      const networkData = getNetworksData(client).find(\n        (networkData) =>\n          networkData.networkId === networkId && networkData.chain === 'EVM'\n      );\n\n      if (!networkData) {\n        throw new UnrecognizedNetworkError({\n          networkId,\n          originalError: error,\n          walletProviderKey,\n        });\n      }\n\n      throw new NetworkNotAddedError({\n        networkData,\n        networkId,\n        originalError: error,\n        walletProviderKey,\n      });\n    } else if (\n      'message' in error &&\n      typeof error.message === 'string' &&\n      error.message.includes('rejected')\n    ) {\n      throw userRejectedError;\n    } else {\n      throw error;\n    }\n  }\n};\n","/* eslint-disable custom-rules/require-client-param */\nimport type { Chain, DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n  createWalletProviderEventEmitter,\n  formatWalletProviderGroupKey,\n  formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { isHex, getAddress as viemGetAddress } from 'viem';\n\nimport type {\n  EIP1193Provider,\n  EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../evmExecuteSwapTransaction';\nimport { evmTransferAmount } from '../evmTransferAmount';\nimport { addNetwork } from './addNetwork';\nimport { getActiveNetworkId } from './getActiveNetworkId/getActiveNetworkId';\nimport { switchActiveNetwork } from './switchActiveNetwork';\n\ntype CreateWalletProviderFromEIP1193ProviderParams = {\n  displayName: string;\n  eip1193: EIP1193Provider;\n  icon: string;\n  walletProviderType?: WalletProviderEnum;\n};\n\n/** @not-instrumented */\nexport const createWalletProviderFromEIP1193Provider = (\n  {\n    eip1193,\n    icon,\n    displayName,\n    walletProviderType = WalletProviderEnum.BrowserExtension,\n  }: CreateWalletProviderFromEIP1193ProviderParams,\n  client: DynamicClient\n): EvmWalletProvider => {\n  const chain: Chain = 'EVM';\n\n  const key = formatWalletProviderKey({\n    chain,\n    displayName,\n    walletProviderType,\n  });\n\n  const addNetworkWrapped: EvmWalletProvider['addNetwork'] = async ({\n    networkData,\n  }) => addNetwork({ eip1193, networkData });\n\n  const connect: EvmWalletProvider['connect'] = async () => {\n    const addresses = (await eip1193.request({\n      method: 'eth_requestAccounts',\n      params: [],\n    })) as string[];\n\n    const formattedAddresses = addresses.map((address) =>\n      viemGetAddress(address)\n    );\n\n    return {\n      addresses: formattedAddresses.map((address) => ({\n        address,\n      })),\n    };\n  };\n\n  const disconnect: EvmWalletProvider['disconnect'] = async () => {\n    await eip1193.request({\n      method: 'wallet_revokePermissions',\n      params: [\n        {\n          eth_accounts: {},\n        },\n      ],\n    });\n  };\n\n  const getConnectedAddresses: EvmWalletProvider['getConnectedAddresses'] =\n    async () => {\n      const addresses = (await eip1193.request({\n        method: 'eth_accounts',\n        params: [],\n      })) as string[];\n\n      const formattedAddresses = addresses.map((address) =>\n        viemGetAddress(address)\n      );\n\n      return {\n        addresses: formattedAddresses,\n      };\n    };\n\n  const signMessage: EvmWalletProvider['signMessage'] = async ({\n    message,\n    walletAccount,\n  }) => {\n    const params = [message];\n\n    if (walletAccount) {\n      params.push(walletAccount.address);\n    }\n\n    const signedMessage = await eip1193.request({\n      method: 'personal_sign',\n      params,\n    });\n\n    return {\n      signature: signedMessage as string,\n    };\n  };\n\n  const { getEventEmitter, cleanupEventEmitter } =\n    createWalletProviderEventEmitter({\n      removeEventListeners: () => {\n        eip1193.removeAllListeners();\n      },\n\n      setupEventListeners: ({\n        handleAccountsChanged,\n        handleDisconnected,\n        handleNetworkChanged,\n      }) => {\n        eip1193.on('accountsChanged', (addresses) => {\n          handleAccountsChanged({ addresses });\n        });\n\n        eip1193.on('disconnected', () => {\n          handleDisconnected();\n        });\n\n        eip1193.on('chainChanged', (chain) => {\n          const networkId = isHex(chain)\n            ? parseInt(chain, 16).toString()\n            : chain.toString();\n\n          handleNetworkChanged({ networkId });\n        });\n      },\n    });\n\n  const terminate: EvmWalletProvider['terminate'] = async () => {\n    cleanupEventEmitter();\n  };\n\n  return {\n    addNetwork: addNetworkWrapped,\n    chain,\n    confirmTransaction: (args) => evmConfirmTransaction(args, client),\n    connect,\n    disconnect,\n    get events() {\n      return getEventEmitter();\n    },\n    executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n    getActiveNetworkId: () => getActiveNetworkId({ eip1193 }),\n    getConnectedAddresses,\n    groupKey: formatWalletProviderGroupKey(displayName),\n    key,\n    metadata: { displayName, icon },\n    request: eip1193.request.bind(eip1193),\n    signMessage,\n    switchActiveNetwork: ({ networkId }) =>\n      switchActiveNetwork({\n        client,\n        eip1193,\n        networkId,\n        walletProviderKey: key,\n      }),\n    terminate,\n    transferAmount: (args) => evmTransferAmount(args, client),\n    walletProviderType,\n  };\n};\n"],"mappings":"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"}