{"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"}