@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
1 lines • 3.51 kB
Source Map (JSON)
{"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"}