{"version":3,"file":"injectedWeb3EthProviders.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,CAAC;CACvC,iBAA0D;EACxD,UAAU;EACV,YAAY;CACd;CACA,OAAOA,YAA6C;CAEpD,AAAQ,cAAc;EACpB,IAAI,OAAO,WAAW,aACpB;EAEF,OAAO,iBAAiB,4BAA4B,KAAKC,eAAgC;EACzF,OAAO,cAAc,IAAI,MAAM,yBAAyB,CAAC;CAC3D;CAEA,OAAc,cAAwC;EACpD,IAAI,CAAC,yBAAyBD,WAC5B,yBAAyBA,YAAY,IAAI,yBAAyB;EAEpE,OAAO,yBAAyBA;CAClC;CAEA,OAAO,aAAsC;EAC3C,MAAM,cAAc,KAAKE,WAAW,MAAK,MAAK,EAAE,KAAK,SAAS,KAAKC,eAAe,SAAS,CAAC,EAAE;EAC9F,IAAI,gBAAgB,QAClB,OAAO;EAOT,OAAO,OAAO;CAChB;CAEA,mBAAmB,UAAwC;EACzD,IAAI,KAAKD,WAAW,MAAK,MAAK,EAAE,KAAK,SAAS,MAAM,OAAO,KAAK,IAAI,GAClE;EAEF,KAAKA,WAAW,KAAK,MAAM,MAAM;CACnC;AACF;AAEA,MAAa,oCAAoC,yBAAyB,YAAY"}