UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1 lines 3.58 kB
{"version":3,"file":"injectedWeb3SolanaProviders.mjs","names":["#instance","#initialize","#initialized","#wallets","#isSolanaWallet","#hasSignMessage"],"sources":["../../../src/internal/clerk-js/injectedWeb3SolanaProviders.ts"],"sourcesContent":["import type { SolanaWalletAdapterWallet } from '@solana/wallet-standard';\nimport type { Wallet } from '@wallet-standard/core';\n\n//https://eips.ethereum.org/EIPS/eip-4361\n\nclass InjectedWeb3SolanaProviders {\n #wallets: readonly Wallet[] | undefined = undefined;\n #initialized: boolean = false;\n static #instance: InjectedWeb3SolanaProviders | null = null;\n\n private constructor() {}\n\n async #initialize() {\n if (this.#initialized) {\n return;\n }\n this.#initialized = true;\n const wallets = await import('@wallet-standard/core').then(mod => mod.getWallets());\n this.#wallets = wallets.get();\n\n wallets.on('register', () => {\n this.#wallets = wallets.get();\n });\n wallets.on('unregister', () => {\n this.#wallets = wallets.get();\n });\n }\n\n #isSolanaWallet(wallet: Wallet): wallet is SolanaWalletAdapterWallet {\n return wallet.chains?.some(chain => chain.startsWith('solana:')) ?? false;\n }\n\n #hasSignMessage(wallet: Wallet): boolean {\n return 'solana:signMessage' in wallet.features;\n }\n\n public static getInstance(): InjectedWeb3SolanaProviders {\n if (!InjectedWeb3SolanaProviders.#instance) {\n InjectedWeb3SolanaProviders.#instance = new InjectedWeb3SolanaProviders();\n }\n return InjectedWeb3SolanaProviders.#instance;\n }\n\n get = async (walletName: string): Promise<SolanaWalletAdapterWallet | undefined> => {\n await this.#initialize();\n const wallet = (this.#wallets || []).find(\n w => w.name === walletName && this.#isSolanaWallet(w) && this.#hasSignMessage(w),\n );\n if (wallet && this.#isSolanaWallet(wallet)) {\n return wallet;\n }\n\n if (typeof window === 'undefined') {\n return undefined;\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 const fallbackProvider = (window as any).solana;\n if (\n fallbackProvider &&\n typeof fallbackProvider.connect === 'function' &&\n typeof fallbackProvider.signMessage === 'function'\n ) {\n return fallbackProvider as SolanaWalletAdapterWallet;\n }\n return undefined;\n };\n}\n\nexport const getInjectedWeb3SolanaProviders = () => InjectedWeb3SolanaProviders.getInstance();\n"],"mappings":";AAKA,IAAM,8BAAN,MAAM,4BAA4B;CAChC,WAA0C;CAC1C,eAAwB;CACxB,OAAOA,YAAgD;CAEvD,AAAQ,cAAc,CAAC;CAEvB,MAAMC,cAAc;EAClB,IAAI,KAAKC,cACP;EAEF,KAAKA,eAAe;EACpB,MAAM,UAAU,MAAM,OAAO,iCAAwB,CAAC,MAAK,QAAO,IAAI,WAAW,CAAC;EAClF,KAAKC,WAAW,QAAQ,IAAI;EAE5B,QAAQ,GAAG,kBAAkB;GAC3B,KAAKA,WAAW,QAAQ,IAAI;EAC9B,CAAC;EACD,QAAQ,GAAG,oBAAoB;GAC7B,KAAKA,WAAW,QAAQ,IAAI;EAC9B,CAAC;CACH;CAEA,gBAAgB,QAAqD;EACnE,OAAO,OAAO,QAAQ,MAAK,UAAS,MAAM,WAAW,SAAS,CAAC,KAAK;CACtE;CAEA,gBAAgB,QAAyB;EACvC,OAAO,wBAAwB,OAAO;CACxC;CAEA,OAAc,cAA2C;EACvD,IAAI,CAAC,4BAA4BH,WAC/B,4BAA4BA,YAAY,IAAI,4BAA4B;EAE1E,OAAO,4BAA4BA;CACrC;CAEA,MAAM,OAAO,eAAuE;EAClF,MAAM,KAAKC,YAAY;EACvB,MAAM,UAAU,KAAKE,YAAY,CAAC,EAAC,CAAE,MACnC,MAAK,EAAE,SAAS,cAAc,KAAKC,gBAAgB,CAAC,KAAK,KAAKC,gBAAgB,CAAC,CACjF;EACA,IAAI,UAAU,KAAKD,gBAAgB,MAAM,GACvC,OAAO;EAGT,IAAI,OAAO,WAAW,aACpB;EAKF,MAAM,mBAAoB,OAAe;EACzC,IACE,oBACA,OAAO,iBAAiB,YAAY,cACpC,OAAO,iBAAiB,gBAAgB,YAExC,OAAO;CAGX;AACF;AAEA,MAAa,uCAAuC,4BAA4B,YAAY"}