{
  "version": 3,
  "sources": ["../src/passkeys/index.ts"],
  "sourcesContent": [
    "import type { Wallet } from \"@passkeys/core\";\nimport { base64 } from \"@scure/base\";\nimport {\n  Chain,\n  EVMChains,\n  filterSupportedChains,\n  prepareNetworkSwitch,\n  SKConfig,\n  SwapKitError,\n  WalletOption,\n} from \"@swapkit/helpers\";\nimport type { SolanaProvider } from \"@swapkit/toolboxes/solana\";\nimport { Transaction } from \"@swapkit/utxo-signer\";\nimport { createWallet, getWalletSupportedChains } from \"@swapkit/wallet-core\";\nimport {\n  AddressPurpose,\n  BitcoinNetworkType,\n  type GetAddressOptions,\n  type GetAddressResponse,\n  getAddress,\n  type SignTransactionOptions,\n  signTransaction as satsSignTransaction,\n} from \"sats-connect\";\nimport { match } from \"ts-pattern\";\n\nasync function getPasskeyWallet() {\n  const appId = SKConfig.get(\"apiKeys\").passkeys;\n  const { createWallet } = await import(\"@passkeys/core\");\n\n  return createWallet({\n    appId: appId.length > 0 ? appId : undefined,\n    providers: { bitcoin: true, ethereum: true, solana: true },\n  });\n}\n\nfunction getWalletMethods({ wallet, chain: paramChain }: { wallet: Wallet; chain: Chain }) {\n  return match(paramChain)\n    .with(Chain.Bitcoin, async (chain) => {\n      const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n      const provider = await wallet.getProvider(\"bitcoin\");\n\n      if (!provider) {\n        throw new SwapKitError(\"wallet_passkeys_not_found\");\n      }\n\n      let address = \"\";\n\n      const getProvider = () => Promise.resolve(provider);\n\n      const getAddressOptions: GetAddressOptions = {\n        getProvider,\n        onCancel: () => {\n          throw new SwapKitError(\"wallet_passkeys_request_canceled\");\n        },\n        onFinish: (response: GetAddressResponse) => {\n          if (!response.addresses[0]) throw new SwapKitError(\"wallet_passkeys_no_address\");\n          address = response.addresses[0].address;\n        },\n        payload: {\n          message: \"Address for receiving and sending payments\",\n          network: { type: BitcoinNetworkType.Mainnet },\n          purposes: [AddressPurpose.Payment],\n        },\n      };\n\n      // TODO: Towan - probably not needed ?\n      await getAddress(getAddressOptions);\n\n      async function signTransaction(tx: InstanceType<typeof Transaction>) {\n        let signedTx: InstanceType<typeof Transaction> | undefined;\n        const psbtBytes = tx.toPSBT(0);\n        const psbtBase64Str = base64.encode(psbtBytes);\n        const inputCount = tx.inputsLength;\n\n        const signPsbtOptions: SignTransactionOptions = {\n          getProvider,\n          onCancel: () => {\n            throw new SwapKitError(\"wallet_passkeys_signature_canceled\");\n          },\n          onFinish: (response) => {\n            signedTx = Transaction.fromPSBT(base64.decode(response.psbtBase64));\n          },\n          payload: {\n            broadcast: false,\n            inputsToSign: [{ address: address, signingIndexes: Array.from({ length: inputCount }, (_, i) => i) }],\n            message: \"Sign transaction\",\n            network: { type: BitcoinNetworkType.Mainnet },\n            psbtBase64: psbtBase64Str,\n          },\n        };\n\n        await satsSignTransaction(signPsbtOptions);\n        if (!signedTx) throw new SwapKitError(\"wallet_passkeys_sign_transaction_error\");\n        return signedTx;\n      }\n\n      const signer = { getAddress: () => Promise.resolve(address), signTransaction };\n      const toolbox = await getUtxoToolbox(chain, { signer });\n\n      return { ...toolbox, address };\n    })\n    .with(...EVMChains, async (chain) => {\n      const { getProvider, getEvmToolboxAsync } = await import(\"@swapkit/toolboxes/evm\");\n      const { BrowserProvider } = await import(\"ethers\");\n\n      const walletProvider = await wallet.getProvider(\"ethereum\");\n      if (!walletProvider) {\n        throw new SwapKitError(\"wallet_passkeys_not_found\");\n      }\n\n      const jsonRpcProvider = await getProvider(chain);\n      const browserProvider = new BrowserProvider(walletProvider, \"any\");\n\n      await browserProvider.send(\"eth_requestAccounts\", []);\n\n      const signer = await browserProvider.getSigner();\n      const address = await signer.getAddress();\n      const toolbox = await getEvmToolboxAsync(chain, { provider: jsonRpcProvider, signer });\n\n      return { ...prepareNetworkSwitch({ chain, provider: browserProvider, toolbox }), address };\n    })\n    .with(Chain.Solana, async () => {\n      const { getSolanaToolbox } = await import(\"@swapkit/toolboxes/solana\");\n      const provider = (await wallet.getProvider(\"solana\")) as any as SolanaProvider;\n      const providerConnection = await provider.connect();\n      const address = providerConnection.publicKey.toString();\n      const toolbox = await getSolanaToolbox({ signer: provider });\n\n      const disconnect = async () => {\n        await provider.disconnect();\n      };\n\n      return { ...toolbox, address, disconnect };\n    })\n    .otherwise((chain) => {\n      throw new SwapKitError(\"wallet_passkeys_chain_not_supported\", { chain });\n    });\n}\n\nexport const passkeysWallet = createWallet({\n  connect: ({ addChain, walletType, supportedChains }) =>\n    async function connectPasskeys(chains: Chain[], paramWallet?: Wallet) {\n      const wallet = paramWallet || (await getPasskeyWallet());\n\n      if (!wallet) throw new SwapKitError(\"wallet_passkeys_instance_missing\");\n      const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n      await Promise.all(\n        filteredChains.map(async (chain) => {\n          try {\n            const walletData = await getWalletMethods({ chain, wallet });\n\n            const { address, ...walletMethods } = walletData;\n\n            addChain({\n              ...walletMethods,\n              address,\n              chain,\n              disconnect: wallet.disconnect,\n              walletType: WalletOption.PASSKEYS,\n            });\n          } catch (error) {\n            console.error(`Failed to connect ${chain} wallet:`, error);\n            throw error;\n          }\n        }),\n      );\n\n      return true;\n    },\n  directSigningSupport: {\n    ...Object.fromEntries(EVMChains.map((chain) => [chain, true])),\n    [Chain.Bitcoin]: true,\n    [Chain.Solana]: true,\n  },\n  name: \"connectPasskeys\",\n  supportedChains: [...EVMChains, Chain.Bitcoin, Chain.Solana],\n  walletType: WalletOption.PASSKEYS,\n});\n\nexport const PASSKEYS_SUPPORTED_CHAINS = getWalletSupportedChains(passkeysWallet);\nexport * from \"@passkeys/core\";\nexport * from \"@passkeys/react\";\n"
  ],
  "mappings": "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",
  "debugId": "EFB88740DF5F724464756E2164756E21",
  "names": []
}