{"version":3,"file":"injectedWeb3EthProviders-Cp_aXKsI.mjs","names":["#instance","#onAnnouncement","#providers","#providerIdMap"],"sources":["../../src/internal/clerk-js/injectedWeb3EthProviders.ts"],"sourcesContent":["//https://eips.ethereum.org/EIPS/eip-6963\n\nimport type { MetamaskWeb3Provider, OKXWalletWeb3Provider } from '../../types';\n\ninterface EIP6963ProviderInfo {\n  walletId: string;\n  uuid: string;\n  name: string;\n  icon: string;\n}\n\ninterface EIP1193Provider {\n  isStatus?: boolean;\n  host?: string;\n  path?: string;\n  sendAsync?: (\n    request: { method: string; params?: [] },\n    callback: (error: Error | null, response: unknown) => void,\n  ) => void; // For sending asynchronous requests\n  send?: (request: { method: string; params?: [] }, callback: (error: Error | null, response: unknown) => void) => void; // For sending synchronous requests\n  request: (request: { method: string; params?: string[] }) => Promise<string>; // Standard method for sending requests per EIP-1193\n}\n\ninterface EIP6963ProviderDetail {\n  info: EIP6963ProviderInfo;\n  provider: EIP1193Provider;\n}\n\ntype EIP6963AnnounceProviderEvent = CustomEvent<EIP6963ProviderDetail>;\ntype InjectedWeb3EthProvider = MetamaskWeb3Provider | OKXWalletWeb3Provider;\n\nclass InjectedWeb3EthProviders {\n  #providers: EIP6963ProviderDetail[] = [];\n  #providerIdMap: Record<InjectedWeb3EthProvider, string> = {\n    metamask: 'MetaMask',\n    okx_wallet: 'OKX Wallet',\n  } as const;\n  static #instance: InjectedWeb3EthProviders | null = null;\n\n  private constructor() {\n    if (typeof window === 'undefined') {\n      return;\n    }\n    window.addEventListener('eip6963:announceProvider', this.#onAnnouncement as EventListener);\n    window.dispatchEvent(new Event('eip6963:requestProvider'));\n  }\n\n  public static getInstance(): InjectedWeb3EthProviders {\n    if (!InjectedWeb3EthProviders.#instance) {\n      InjectedWeb3EthProviders.#instance = new InjectedWeb3EthProviders();\n    }\n    return InjectedWeb3EthProviders.#instance;\n  }\n\n  get = (provider: InjectedWeb3EthProvider) => {\n    const ethProvider = this.#providers.find(p => p.info.name === this.#providerIdMap[provider])?.provider;\n    if (ethProvider !== undefined) {\n      return ethProvider;\n    }\n\n    // In case we weren't able to find the requested provider, fallback to the\n    // global injected provider instead, if any, to allow the user to continue\n    // the flow rather than blocking it\n    // @ts-expect-error missing types\n    return window.ethereum;\n  };\n\n  #onAnnouncement = (event: EIP6963AnnounceProviderEvent) => {\n    if (this.#providers.some(p => p.info.uuid === event.detail.info.uuid)) {\n      return;\n    }\n    this.#providers.push(event.detail);\n  };\n}\n\nexport const getInjectedWeb3EthProviders = () => InjectedWeb3EthProviders.getInstance();\n"],"mappings":";AA+BA,IAAM,2BAAN,MAAM,yBAAyB;CAC7B,aAAsC,EAAE;CACxC,iBAA0D;EACxD,UAAU;EACV,YAAY;EACb;CACD,QAAOA,WAA6C;CAEpD,AAAQ,cAAc;AACpB,MAAI,OAAO,WAAW,YACpB;AAEF,SAAO,iBAAiB,4BAA4B,MAAKC,eAAiC;AAC1F,SAAO,cAAc,IAAI,MAAM,0BAA0B,CAAC;;CAG5D,OAAc,cAAwC;AACpD,MAAI,CAAC,0BAAyBD,SAC5B,2BAAyBA,WAAY,IAAI,0BAA0B;AAErE,SAAO,0BAAyBA;;CAGlC,OAAO,aAAsC;EAC3C,MAAM,cAAc,MAAKE,UAAW,MAAK,MAAK,EAAE,KAAK,SAAS,MAAKC,cAAe,UAAU,EAAE;AAC9F,MAAI,gBAAgB,OAClB,QAAO;AAOT,SAAO,OAAO;;CAGhB,mBAAmB,UAAwC;AACzD,MAAI,MAAKD,UAAW,MAAK,MAAK,EAAE,KAAK,SAAS,MAAM,OAAO,KAAK,KAAK,CACnE;AAEF,QAAKA,UAAW,KAAK,MAAM,OAAO;;;AAItC,MAAa,oCAAoC,yBAAyB,aAAa"}