{"version":3,"file":"baseAccount.cjs","names":["DYNAMIC_ICONIC_SPRITE_URL","cachedProvider: BaseAccountSDKProvider | undefined","createWalletProviderFromEIP1193Provider","WalletProviderEnum","WalletProviderPriority","packageName","packageVersion"],"sources":["../src/utils/getEvmNetworkIds/getEvmNetworkIds.ts","../src/baseAccount/utils/getBaseAccountAppMetadata/getBaseAccountAppMetadata.ts","../src/baseAccount/createBaseAccountEvmWalletProvider/createBaseAccountEvmWalletProvider.ts","../src/baseAccount/addBaseAccountEvmExtension/addBaseAccountEvmExtension.ts","../src/exports/baseAccount.ts"],"sourcesContent":["import { type DynamicClient, getNetworksData } from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the numeric IDs of the EVM networks configured on the Dynamic\n * client. Generic helper available to any EVM extension that needs to\n * advertise the configured chain set to a third-party SDK (e.g. Base\n * Account, WalletConnect).\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @not-instrumented\n */\nexport const getEvmNetworkIds = (client: DynamicClient): number[] =>\n  getNetworksData(client).reduce<number[]>((networkIds, network) => {\n    if (network.chain !== 'EVM') return networkIds;\n    const networkId = Number.parseInt(network.networkId, 10);\n    if (!Number.isFinite(networkId)) return networkIds;\n    networkIds.push(networkId);\n    return networkIds;\n  }, []);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\ntype BaseAccountAppMetadata = {\n  appLogoUrl: string | undefined;\n  appName: string;\n};\n\n/**\n * Reads the customer-supplied app name and logo from the Dynamic client.\n * Mirrors the lookup used by `createSignClient` in `@dynamic-labs-sdk/wallet-connect`\n * — preferring `core.metadata` (set on the client) over project-settings fallbacks.\n *\n * Used by the Base Account EVM extension so callers do not have to repeat\n * values they already passed to `createDynamicClient`.\n *\n * @param client - The Dynamic client whose configuration drives the result.\n * @not-instrumented\n */\nexport const getBaseAccountAppMetadata = (\n  client: DynamicClient\n): BaseAccountAppMetadata => {\n  const core = getCore(client);\n  const generalSettings = client.projectSettings?.general;\n\n  return {\n    appLogoUrl:\n      core.metadata?.iconUrl ?? generalSettings?.appLogo ?? undefined,\n    appName: core.metadata?.name ?? generalSettings?.displayName ?? '',\n  };\n};\n","import { createBaseAccountSDK } from '@base-org/account';\nimport type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { DYNAMIC_ICONIC_SPRITE_URL } from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type {\n  EIP1193Provider,\n  EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { getEvmNetworkIds } from '../../utils/getEvmNetworkIds/getEvmNetworkIds';\nimport type { AddBaseAccountEvmExtensionOptions } from '../baseAccount.types';\nimport { getBaseAccountAppMetadata } from '../utils/getBaseAccountAppMetadata/getBaseAccountAppMetadata';\n\nconst BASE_ACCOUNT_DISPLAY_NAME = 'Base Account';\nconst BASE_ACCOUNT_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#base`;\n\ntype BaseAccountSDKProvider = ReturnType<\n  ReturnType<typeof createBaseAccountSDK>['getProvider']\n>;\n\n/**\n * Builds an `EvmWalletProvider` backed by `@base-org/account`. Used internally\n * by `addBaseAccountEvmExtension`; not part of the public API.\n *\n * The underlying `@base-org/account` SDK is constructed lazily on the first\n * EIP-1193 call. This avoids reading `client.projectSettings` (via\n * `getEvmNetworkIds`) at extension-registration time — which would throw if\n * the extension is added before `initializeClient` resolves project settings.\n *\n * Classification matches dynamic-auth's mapping for the popup-SDK flow:\n * `WalletProviderEnum.CustodialService`. The browser-extension path is owned\n * by `addEIP6963Extension` / `addEvmWindowInjectedExtension`.\n *\n * @param options - Optional Base Account preference.\n * @param client - The Dynamic client whose metadata + networks drive the SDK.\n * @not-instrumented\n */\nexport const createBaseAccountEvmWalletProvider = (\n  { preference }: AddBaseAccountEvmExtensionOptions,\n  client: DynamicClient\n): EvmWalletProvider => {\n  let cachedProvider: BaseAccountSDKProvider | undefined;\n\n  const getOrCreateProvider = (): BaseAccountSDKProvider => {\n    if (cachedProvider) {\n      return cachedProvider;\n    }\n    const { appName, appLogoUrl } = getBaseAccountAppMetadata(client);\n    cachedProvider = createBaseAccountSDK({\n      appChainIds: getEvmNetworkIds(client),\n      appLogoUrl,\n      appName,\n      preference,\n    }).getProvider();\n    return cachedProvider;\n  };\n\n  // EIP-1193 façade that defers SDK construction until first interaction and\n  // bridges the two `on` event vocabularies — `@base-org/account` emits the\n  // canonical `disconnect`, while our local `EIP1193Provider` consumer expects\n  // `disconnected`. We forward each event explicitly so the divergence is\n  // visible in source rather than smoothed over by a blanket cast.\n  const lazyEip1193: EIP1193Provider = {\n    on: (event, listener) => {\n      const provider = getOrCreateProvider();\n      if (event === 'accountsChanged') {\n        provider.on('accountsChanged', listener as (a: string[]) => void);\n      } else if (event === 'chainChanged') {\n        provider.on('chainChanged', listener as (c: string) => void);\n      } else {\n        provider.on('disconnect', () => (listener as () => void)());\n      }\n    },\n    removeAllListeners: () => cachedProvider?.removeAllListeners(),\n    request: <T = unknown>(args: { method: string; params: unknown[] }) =>\n      getOrCreateProvider().request(args) as Promise<T>,\n  };\n\n  return createWalletProviderFromEIP1193Provider(\n    {\n      displayName: BASE_ACCOUNT_DISPLAY_NAME,\n      eip1193: lazyEip1193,\n      icon: BASE_ACCOUNT_ICON,\n      walletProviderType: WalletProviderEnum.CustodialService,\n    },\n    client\n  );\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 type { AddBaseAccountEvmExtensionOptions } from '../baseAccount.types';\nimport { createBaseAccountEvmWalletProvider } from '../createBaseAccountEvmWalletProvider/createBaseAccountEvmWalletProvider';\n\nexport const BASE_ACCOUNT_EVM_EXTENSION_KEY = 'baseAccountEvm';\n\n/**\n * Adds Base Account (Coinbase Smart Wallet + EOA via popup/QR) as an available\n * wallet provider for EVM. App metadata (name, logo) and supported network IDs\n * are read from the Dynamic client by default, so no per-call configuration is\n * required for the basic case.\n *\n * The Coinbase Wallet **browser extension** path is already handled by\n * `addEIP6963Extension` and `addEvmWindowInjectedExtension`. This extension\n * fills the gap for users without an injected provider — Smart Wallet popups,\n * mobile EOA via QR/deeplink, and any platform where `window.ethereum` is\n * unavailable.\n *\n * Once installed, apps connect via the generic public lifecycle:\n * `connectWithWalletProvider`, `verifyWalletAccount`,\n * `connectAndVerifyWithWalletProvider`.\n *\n * @param [options] - Optional preference and network ID overrides.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @not-instrumented\n */\nexport const addBaseAccountEvmExtension = (\n  options: AddBaseAccountEvmExtensionOptions = {},\n  client = getDefaultClient()\n): void => {\n  if (hasExtension({ extensionKey: BASE_ACCOUNT_EVM_EXTENSION_KEY }, client)) {\n    return;\n  }\n\n  registerExtension(\n    { extensionKey: BASE_ACCOUNT_EVM_EXTENSION_KEY },\n    client\n  );\n  registerEvmNetworkProviderBuilder(client);\n\n  const walletProvider = createBaseAccountEvmWalletProvider(options, client);\n\n  getWalletProviderRegistry(client).register({\n    priority: WalletProviderPriority.WALLET_SDK,\n    walletProvider,\n  });\n};\n","import { 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 { addBaseAccountEvmExtension } from '../baseAccount/addBaseAccountEvmExtension';\nexport type { AddBaseAccountEvmExtensionOptions } from '../baseAccount/baseAccount.types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,MAAa,oBAAoB,yDACf,OAAO,CAAC,QAAkB,YAAY,YAAY;AAChE,KAAI,QAAQ,UAAU,MAAO,QAAO;CACpC,MAAM,YAAY,OAAO,SAAS,QAAQ,WAAW,GAAG;AACxD,KAAI,CAAC,OAAO,SAAS,UAAU,CAAE,QAAO;AACxC,YAAW,KAAK,UAAU;AAC1B,QAAO;GACN,EAAE,CAAC;;;;;;;;;;;;;;;ACCR,MAAa,6BACX,WAC2B;CAC3B,MAAM,kDAAe,OAAO;CAC5B,MAAM,kBAAkB,OAAO,iBAAiB;AAEhD,QAAO;EACL,YACE,KAAK,UAAU,WAAW,iBAAiB,WAAW;EACxD,SAAS,KAAK,UAAU,QAAQ,iBAAiB,eAAe;EACjE;;;;;ACfH,MAAM,4BAA4B;AAClC,MAAM,oBAAoB,GAAGA,wDAA0B;;;;;;;;;;;;;;;;;;AAuBvD,MAAa,sCACX,EAAE,cACF,WACsB;CACtB,IAAIC;CAEJ,MAAM,4BAAoD;AACxD,MAAI,eACF,QAAO;EAET,MAAM,EAAE,SAAS,eAAe,0BAA0B,OAAO;AACjE,+DAAsC;GACpC,aAAa,iBAAiB,OAAO;GACrC;GACA;GACA;GACD,CAAC,CAAC,aAAa;AAChB,SAAO;;AAwBT,QAAOC,wFACL;EACE,aAAa;EACb,SAnBiC;GACnC,KAAK,OAAO,aAAa;IACvB,MAAM,WAAW,qBAAqB;AACtC,QAAI,UAAU,kBACZ,UAAS,GAAG,mBAAmB,SAAkC;aACxD,UAAU,eACnB,UAAS,GAAG,gBAAgB,SAAgC;QAE5D,UAAS,GAAG,oBAAqB,UAAyB,CAAC;;GAG/D,0BAA0B,gBAAgB,oBAAoB;GAC9D,UAAuB,SACrB,qBAAqB,CAAC,QAAQ,KAAK;GACtC;EAMG,MAAM;EACN,oBAAoBC,8CAAmB;EACxC,EACD,OACD;;;;;AC3EH,MAAa,iCAAiC;;;;;;;;;;;;;;;;;;;;;AAsB9C,MAAa,8BACX,UAA6C,EAAE,EAC/C,8DAA2B,KAClB;AACT,qDAAiB,EAAE,cAAc,gCAAgC,EAAE,OAAO,CACxE;AAGF,sDACE,EAAE,cAAc,gCAAgC,EAChD,OACD;AACD,6DAAkC,OAAO;CAEzC,MAAM,iBAAiB,mCAAmC,SAAS,OAAO;AAE1E,8DAA0B,OAAO,CAAC,SAAS;EACzC,UAAUC,qDAAuB;EACjC;EACD,CAAC;;;;;mEC/CiBC,iDAAaC,mDAAe"}