{"version":3,"file":"injectedWeb3SolanaProviders-DRQuwtHF.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,QAAOA,WAAgD;CAEvD,AAAQ,cAAc;CAEtB,OAAMC,aAAc;AAClB,MAAI,MAAKC,YACP;AAEF,QAAKA,cAAe;EACpB,MAAM,UAAU,MAAM,OAAO,sBAAyB,MAAK,QAAO,IAAI,YAAY,CAAC;AACnF,QAAKC,UAAW,QAAQ,KAAK;AAE7B,UAAQ,GAAG,kBAAkB;AAC3B,SAAKA,UAAW,QAAQ,KAAK;IAC7B;AACF,UAAQ,GAAG,oBAAoB;AAC7B,SAAKA,UAAW,QAAQ,KAAK;IAC7B;;CAGJ,gBAAgB,QAAqD;AACnE,SAAO,OAAO,QAAQ,MAAK,UAAS,MAAM,WAAW,UAAU,CAAC,IAAI;;CAGtE,gBAAgB,QAAyB;AACvC,SAAO,wBAAwB,OAAO;;CAGxC,OAAc,cAA2C;AACvD,MAAI,CAAC,6BAA4BH,SAC/B,8BAA4BA,WAAY,IAAI,6BAA6B;AAE3E,SAAO,6BAA4BA;;CAGrC,MAAM,OAAO,eAAuE;AAClF,QAAM,MAAKC,YAAa;EACxB,MAAM,UAAU,MAAKE,WAAY,EAAE,EAAE,MACnC,MAAK,EAAE,SAAS,cAAc,MAAKC,eAAgB,EAAE,IAAI,MAAKC,eAAgB,EAAE,CACjF;AACD,MAAI,UAAU,MAAKD,eAAgB,OAAO,CACxC,QAAO;AAGT,MAAI,OAAO,WAAW,YACpB;EAKF,MAAM,mBAAoB,OAAe;AACzC,MACE,oBACA,OAAO,iBAAiB,YAAY,cACpC,OAAO,iBAAiB,gBAAgB,WAExC,QAAO;;;AAMb,MAAa,uCAAuC,4BAA4B,aAAa"}