{"version":3,"file":"web3.mjs","names":[],"sources":["../../../src/internal/clerk-js/web3.ts"],"sourcesContent":["import type { SolanaWalletAdapterWallet } from '@solana/wallet-standard';\n\nimport { buildErrorThrower, ClerkRuntimeError } from '../../error';\nimport type { ModuleManager } from '../../moduleManager';\nimport type { GenerateSignature, Web3Provider } from '../../types';\nimport { clerkUnsupportedEnvironmentWarning } from './errors';\nimport { toHex } from './hex';\nimport { getInjectedWeb3EthProviders } from './injectedWeb3EthProviders';\nimport { getInjectedWeb3SolanaProviders } from './injectedWeb3SolanaProviders';\n\ntype GetWeb3IdentifierParams = {\n  provider: Web3Provider;\n  walletName?: string;\n};\n\n// '@solana/wallet-standard'\nconst StandardConnect = `standard:connect`;\nconst SolanaSignMessage = `solana:signMessage`;\n\ntype GenerateSignatureParams = {\n  identifier: string;\n  nonce: string;\n};\n\ntype GenerateSolanaSignatureParams = GenerateSignatureParams & {\n  walletName: string;\n};\n\nexport function createWeb3(moduleManager: ModuleManager) {\n  const errorThrower = buildErrorThrower({\n    packageName: '@clerk/shared',\n  });\n\n  async function getWeb3Identifier(params: GetWeb3IdentifierParams): Promise<string> {\n    const { provider, walletName } = params;\n    const walletProvider = await getWeb3Wallet(provider, walletName);\n\n    // TODO - core-3: Improve error handling for the case when the provider is not found\n    if (!walletProvider) {\n      // If a plugin for the requested provider is not found,\n      // the flow will fail as it has been the expected behavior so far.\n      return '';\n    }\n\n    if (provider === 'solana') {\n      const identifiers = await walletProvider.features[StandardConnect].connect();\n      return (identifiers && identifiers.accounts[0].address) || '';\n    }\n\n    // Ethereum providers\n    const identifiers = await walletProvider.request({ method: 'eth_requestAccounts' });\n    // @ts-ignore -- Provider SDKs may return unknown shape; use first address if present\n    return (identifiers && identifiers[0]) || '';\n  }\n\n  const generateWeb3Signature: GenerateSignature = async (params): Promise<string> => {\n    const { identifier, nonce, provider, walletName = '' } = params;\n    const wallet = await getWeb3Wallet(provider, walletName);\n\n    // TODO - core-3: Improve error handling for the case when the provider is not found\n    if (!wallet) {\n      // If a plugin for the requested provider is not found,\n      // the flow will fail as it has been the expected behavior so far.\n      return '';\n    }\n\n    if (provider === 'solana') {\n      try {\n        const solanaWallet = wallet as SolanaWalletAdapterWallet;\n        const walletAccount = solanaWallet.accounts.find(a => a.address === identifier);\n        if (!walletAccount) {\n          console.warn(`Wallet account with address ${identifier} not found`);\n          return '';\n        }\n        const signedMessages = await solanaWallet.features[SolanaSignMessage]?.signMessage({\n          account: walletAccount,\n          message: new TextEncoder().encode(nonce),\n        });\n        // Convert signature Uint8Array to base64 string\n        return signedMessages?.[0]?.signature ? btoa(String.fromCharCode(...signedMessages[0].signature)) : '';\n      } catch (err) {\n        if (err instanceof Error && err.message.includes('User rejected the request.')) {\n          throw new ClerkRuntimeError('Web3 signature request was rejected by the user.', {\n            code: 'web3_signature_request_rejected',\n          });\n        }\n        throw new ClerkRuntimeError('An error occurred while generating the Solana signature.', {\n          code: 'web3_solana_signature_generation_failed',\n          cause: err instanceof Error ? err : undefined,\n        });\n      }\n    }\n\n    return await wallet.request({\n      method: 'personal_sign',\n      params: [`0x${toHex(nonce)}`, identifier],\n    });\n  };\n\n  async function getMetamaskIdentifier(): Promise<string> {\n    return await getWeb3Identifier({ provider: 'metamask' });\n  }\n\n  async function getCoinbaseWalletIdentifier(): Promise<string> {\n    return await getWeb3Identifier({ provider: 'coinbase_wallet' });\n  }\n\n  async function getOKXWalletIdentifier(): Promise<string> {\n    return await getWeb3Identifier({ provider: 'okx_wallet' });\n  }\n\n  async function getBaseIdentifier(): Promise<string> {\n    return await getWeb3Identifier({ provider: 'base' });\n  }\n\n  async function getSolanaIdentifier(walletName: string): Promise<string> {\n    return await getWeb3Identifier({ provider: 'solana', walletName });\n  }\n\n  async function generateSignatureWithMetamask(params: GenerateSignatureParams): Promise<string> {\n    return await generateWeb3Signature({ ...params, provider: 'metamask' });\n  }\n\n  async function generateSignatureWithCoinbaseWallet(params: GenerateSignatureParams): Promise<string> {\n    return await generateWeb3Signature({ ...params, provider: 'coinbase_wallet' });\n  }\n\n  async function generateSignatureWithOKXWallet(params: GenerateSignatureParams): Promise<string> {\n    return await generateWeb3Signature({ ...params, provider: 'okx_wallet' });\n  }\n\n  async function generateSignatureWithBase(params: GenerateSignatureParams): Promise<string> {\n    return await generateWeb3Signature({ ...params, provider: 'base' });\n  }\n  async function generateSignatureWithSolana(params: GenerateSolanaSignatureParams): Promise<string> {\n    return await generateWeb3Signature({ ...params, provider: 'solana' });\n  }\n\n  async function getWeb3Wallet(provider: Web3Provider, walletName?: string) {\n    if (provider === 'coinbase_wallet') {\n      if (__BUILD_DISABLE_RHC__) {\n        clerkUnsupportedEnvironmentWarning('Coinbase Wallet');\n        return null;\n      }\n\n      const coinbaseModule = await moduleManager.import('@coinbase/wallet-sdk');\n      if (!coinbaseModule) {\n        return null;\n      }\n      const sdk = coinbaseModule.createCoinbaseWalletSDK({\n        appName:\n          (typeof window !== 'undefined' &&\n            // @ts-expect-error missing types\n            (window.Clerk as any)?.__internal_environment?.displayConfig?.applicationName) ||\n          (typeof document !== 'undefined' && document.title) ||\n          'Web3 Application',\n        preference: {\n          options: 'all',\n        },\n      });\n      return sdk.getProvider();\n    }\n\n    if (provider === 'base') {\n      if (__BUILD_DISABLE_RHC__) {\n        clerkUnsupportedEnvironmentWarning('Base');\n        return null;\n      }\n\n      try {\n        const baseModule = await moduleManager.import('@base-org/account');\n        if (!baseModule) {\n          return null;\n        }\n\n        const sdk = baseModule.createBaseAccountSDK({\n          appName:\n            (typeof window !== 'undefined' &&\n              // @ts-expect-error missing types\n              (window.Clerk as any)?.__internal_environment?.displayConfig?.applicationName) ||\n            (typeof document !== 'undefined' && document.title) ||\n            'Web3 Application',\n        });\n        return sdk.getProvider();\n      } catch {\n        return null;\n      }\n    }\n\n    if (provider === 'solana') {\n      if (!walletName || walletName.length === 0) {\n        errorThrower.throw('Wallet name must be provided to get Solana wallet provider');\n        return;\n      }\n      return await getInjectedWeb3SolanaProviders().get(walletName);\n    }\n\n    return getInjectedWeb3EthProviders().get(provider);\n  }\n\n  return {\n    getWeb3Identifier,\n    generateWeb3Signature,\n    getMetamaskIdentifier,\n    getCoinbaseWalletIdentifier,\n    getOKXWalletIdentifier,\n    getBaseIdentifier,\n    getSolanaIdentifier,\n    generateSignatureWithMetamask,\n    generateSignatureWithCoinbaseWallet,\n    generateSignatureWithOKXWallet,\n    generateSignatureWithBase,\n    generateSignatureWithSolana,\n  };\n}\n"],"mappings":"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"}