{"version":3,"file":"windowInjected.cjs","names":["DYNAMIC_ICONIC_SPRITE_URL","name","createWalletProviderFromEIP1193Provider","WalletProviderPriority","packageName","packageVersion"],"sources":["../src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts","../src/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.ts","../src/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.ts","../src/exports/windowInjected.ts"],"sourcesContent":["import { DYNAMIC_ICONIC_SPRITE_URL } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\nimport type {\n  EvmWalletDetectionResult,\n  KnownEvmWalletFlags,\n} from '../../windowInjected.types';\n\ntype ProviderWithFlags = EIP1193Provider & KnownEvmWalletFlags;\n\ntype DetectEvmWalletFromProviderParams = {\n  provider: EIP1193Provider;\n};\n\nconst getSpriteIcon = (name: string): string =>\n  `${DYNAMIC_ICONIC_SPRITE_URL}#${name}`;\n\n/**\n * Detects wallet identity from provider flags using hardcoded checks.\n *\n * This is essential for wallet app in-app browsers where the wallet injects\n * its provider with identifying flags (e.g., isMetaMask, isCoinbaseWallet).\n *\n * The order of checks matters - more specific flags should be checked first\n * to avoid false positives (e.g., some MetaMask forks also set isMetaMask).\n *\n * @param params.provider - The EIP-1193 provider to detect\n * @returns Detection result with displayName and icon, or null if unknown\n  * @not-instrumented\n */\n \nexport const detectEvmWalletFromProvider = ({\n  provider,\n}: DetectEvmWalletFromProviderParams): EvmWalletDetectionResult | null => {\n  const p = provider as ProviderWithFlags;\n\n  // Check more specific flags first to avoid false positives\n  // Many wallets set isMetaMask for compatibility, so check their unique flags first\n\n  if (p.isCoinbaseWallet) {\n    return {\n      displayName: 'Coinbase Wallet',\n      icon: getSpriteIcon('coinbasewallet'),\n    };\n  }\n\n  if (p.isBraveWallet) {\n    return {\n      displayName: 'Brave Wallet',\n      icon: getSpriteIcon('brave'),\n    };\n  }\n\n  if (p.isPhantom) {\n    return {\n      displayName: 'Phantom',\n      icon: getSpriteIcon('phantom'),\n    };\n  }\n\n  if (p.isRabby) {\n    return {\n      displayName: 'Rabby Wallet',\n      icon: getSpriteIcon('rabby'),\n    };\n  }\n\n  if (p.isTrust) {\n    return {\n      displayName: 'Trust Wallet',\n      icon: getSpriteIcon('trust'),\n    };\n  }\n\n  if (p.isFrame) {\n    return {\n      displayName: 'Frame',\n      icon: getSpriteIcon('frame'),\n    };\n  }\n\n  if (p.isOkxWallet) {\n    return {\n      displayName: 'OKX Wallet',\n      icon: getSpriteIcon('okx'),\n    };\n  }\n\n  if (p.isZerion) {\n    return {\n      displayName: 'Zerion',\n      icon: getSpriteIcon('zerion'),\n    };\n  }\n\n  // MetaMask check comes last because many wallets set isMetaMask for compatibility\n  if (p.isMetaMask) {\n    return {\n      displayName: 'MetaMask',\n      icon: getSpriteIcon('metamask'),\n    };\n  }\n\n  // Unknown wallet - don't register\n  return null;\n};\n","import { getAllProvidersFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\n\n// eslint-disable-next-line custom-rules/ban-ethereum-eth-terms -- window.ethereum is the standard EIP-1193 injection point\nconst EVM_PROVIDER_LOCATOR = 'ethereum';\n\n/**\n * Gets all EIP-1193 providers from window.ethereum and window.ethereum.providers.\n *\n * This function collects all injected EVM providers from the window object,\n * handling both single provider and multi-provider (EIP-5749) scenarios.\n *\n * This is particularly important for wallet app in-app browsers (e.g., MetaMask\n * mobile, Trust Wallet, Coinbase Wallet) which inject their provider into\n * window.ethereum rather than announcing via EIP-6963.\n *\n * @returns Array of all detected EIP-1193 providers\n  * @not-instrumented\n */\nexport const getEvmInjectedProviders = (): EIP1193Provider[] => {\n  const providers = getAllProvidersFromWindow<EIP1193Provider>(\n    EVM_PROVIDER_LOCATOR\n  );\n\n  // Filter to only include objects that look like EIP-1193 providers\n  return providers.filter(isEIP1193Provider);\n};\n\n// eslint-disable-next-line custom-rules/one-function-per-file\nconst isEIP1193Provider = (provider: unknown): provider is EIP1193Provider => {\n  if (typeof provider !== 'object' || provider === null) {\n    return false;\n  }\n\n  const p = provider as Record<string, unknown>;\n\n  // Must have request method - the core EIP-1193 requirement\n  return typeof p.request === 'function';\n};\n","import {\n  WalletProviderPriority,\n  getDefaultClient,\n  getWalletProviderRegistry,\n  hasExtension,\n  registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { detectEvmWalletFromProvider } from '../utils/detectEvmWalletFromProvider';\nimport { getEvmInjectedProviders } from '../utils/getEvmInjectedProviders';\n\nexport const EVM_WINDOW_INJECTED_EXTENSION_KEY = 'evmWindowInjected';\n\n/**\n * Adds the EVM window injected extension to the Dynamic client.\n *\n * This extension enables integration with wallets that are injected into window.ethereum\n * but don't support EIP-6963. The primary use case is **wallet app in-app browsers**\n * (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase Wallet browser),\n * which typically inject their provider into window.ethereum rather than announcing\n * via EIP-6963.\n *\n * Also useful as a fallback for:\n * - Older browser extension wallets that predate EIP-6963\n * - Safari or certain mobile browsers with limited EIP-6963 support\n *\n * Wallet providers registered via this extension have lower priority than EIP-6963\n * providers, so if a wallet supports both, the EIP-6963 version will be used.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n  * @not-instrumented\n */\nexport const addEvmWindowInjectedExtension = (client = getDefaultClient()) => {\n  if (\n    hasExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client)\n  ) {\n    return;\n  }\n\n  registerExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client);\n  registerEvmNetworkProviderBuilder(client);\n\n  const walletProviderRegistry = getWalletProviderRegistry(client);\n  const providers = getEvmInjectedProviders();\n\n  providers.forEach((provider) => {\n    const walletInfo = detectEvmWalletFromProvider({ provider });\n\n    if (!walletInfo) {\n      return;\n    }\n\n    const walletProvider = createWalletProviderFromEIP1193Provider(\n      {\n        displayName: walletInfo.displayName,\n        eip1193: provider,\n        icon: walletInfo.icon,\n      },\n      client\n    );\n\n    walletProviderRegistry.register({\n      priority: WalletProviderPriority.WINDOW_INJECT,\n      walletProvider,\n    });\n  });\n};\n","/**\n * EVM Window Injected Extension\n *\n * Provides support for wallets that are injected into window.ethereum rather than\n * announcing via EIP-6963. This is primarily needed for **wallet app in-app\n * browsers** (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase\n * Wallet browser).\n *\n * @example\n * ```typescript\n * import { addEIP6963Extension } from '@dynamic-labs-sdk/evm/eip6963';\n * import { addEvmWindowInjectedExtension } from '@dynamic-labs-sdk/evm/window-injected';\n *\n * // Add both extensions - EIP-6963 takes priority, window injected is fallback\n * addEIP6963Extension(client);\n * addEvmWindowInjectedExtension(client);\n * ```\n */\nimport { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n  name as packageName,\n  version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addEvmWindowInjectedExtension } from '../windowInjected/addEvmWindowInjectedExtension';\n"],"mappings":";;;;;;;AAcA,MAAM,iBAAiB,WACrB,GAAGA,wDAA0B,GAAGC;;;;;;;;;;;;;;AAgBlC,MAAa,+BAA+B,EAC1C,eACwE;CACxE,MAAM,IAAI;AAKV,KAAI,EAAE,iBACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,iBAAiB;EACtC;AAGH,KAAI,EAAE,cACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,UACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,UAAU;EAC/B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,YACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,MAAM;EAC3B;AAGH,KAAI,EAAE,SACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,SAAS;EAC9B;AAIH,KAAI,EAAE,WACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,WAAW;EAChC;AAIH,QAAO;;;;;ACnGT,MAAM,uBAAuB;;;;;;;;;;;;;;AAe7B,MAAa,gCAAmD;AAM9D,qEAJE,qBACD,CAGgB,OAAO,kBAAkB;;AAI5C,MAAM,qBAAqB,aAAmD;AAC5E,KAAI,OAAO,aAAa,YAAY,aAAa,KAC/C,QAAO;AAMT,QAAO,OAHG,SAGM,YAAY;;;;;ACzB9B,MAAa,oCAAoC;;;;;;;;;;;;;;;;;;;;AAqBjD,MAAa,iCAAiC,8DAA2B,KAAK;AAC5E,qDACe,EAAE,cAAc,mCAAmC,EAAE,OAAO,CAEzE;AAGF,sDAAkB,EAAE,cAAc,mCAAmC,EAAE,OAAO;AAC9E,6DAAkC,OAAO;CAEzC,MAAM,sFAAmD,OAAO;AAGhE,CAFkB,yBAAyB,CAEjC,SAAS,aAAa;EAC9B,MAAM,aAAa,4BAA4B,EAAE,UAAU,CAAC;AAE5D,MAAI,CAAC,WACH;EAGF,MAAM,iBAAiBC,wFACrB;GACE,aAAa,WAAW;GACxB,SAAS;GACT,MAAM,WAAW;GAClB,EACD,OACD;AAED,yBAAuB,SAAS;GAC9B,UAAUC,qDAAuB;GACjC;GACD,CAAC;GACF;;;;;;;;;;;;;;;;;;;;;;;mEC3CiBC,iDAAaC,mDAAe"}