{"version":3,"file":"web3.mjs","names":["identifiers","generateWeb3Signature: GenerateSignature"],"sources":["../../../../src/internal/clerk-js/web3.ts"],"sourcesContent":["import type { SolanaWalletAdapterWallet } from '@solana/wallet-standard';\n\nimport { buildErrorThrower, ClerkRuntimeError } from '@/error';\n\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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"}