{
  "name": "usebitcoinauth",
  "type": "registry:hook",
  "dependencies": [
    "react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "providers-bitcoinauthprovider",
    "wallet-types-extended-user",
    "lib-types"
  ],
  "files": [
    {
      "path": "hooks/useBitcoinAuth.ts",
      "type": "registry:hook",
      "target": "<%- config.aliases.hooks %>/useBitcoinAuth.ts",
      "content": "import { useCallback, useEffect, useState } from \"react\";\nimport { useBitcoinAuthContext } from \"../components/providers/BitcoinAuthProvider.js\";\nimport type { WalletUserExtension } from \"../components/wallet/types/extended-user.js\";\nimport type { AuthError } from \"../lib/types.js\";\n\nexport function useBitcoinAuth() {\n\tconst context = useBitcoinAuthContext();\n\tconst [walletExtension, setWalletExtension] =\n\t\tuseState<WalletUserExtension | null>(null);\n\n\t// Extract commonly used values\n\tconst {\n\t\tuser,\n\t\tisAuthenticated,\n\t\tisLoading,\n\t\terror,\n\t\tcurrentStep,\n\t\tmode,\n\t\thasLocalBackup,\n\t\thasWalletCapabilities,\n\t\tlinkedProviders,\n\n\t\t// Actions\n\t\tsignIn,\n\t\tsignUp,\n\t\tsignOut,\n\t\tgenerateBackup,\n\t\timportBackup,\n\t\tvalidatePassword,\n\t\tlinkOAuth,\n\t\tcreateProfile,\n\t\tswitchProfile,\n\t\tsetStep,\n\t\tsetMode,\n\t\treset,\n\n\t\t// Config\n\t\tconfig,\n\n\t\t// Storage check methods\n\t\thasUnencryptedBackupInSession,\n\t\thasEncryptedBackupStored,\n\t\tisSessionBackupImported,\n\t} = context;\n\n\t// Helper methods with better ergonomics\n\tconst isReady = !isLoading;\n\tconst hasError = !!error;\n\tconst hasLinkedProviders = linkedProviders.length > 0;\n\n\t// Profile helpers\n\tconst profiles = user?.profiles || [];\n\tconst activeProfile = profiles.find((p) => p.id === user?.activeProfileId);\n\tconst profileCount = profiles.length;\n\n\t// Step helpers\n\tconst isSigningIn = mode === \"signin\";\n\tconst isSigningUp = mode === \"signup\";\n\tconst isLinking = mode === \"link\";\n\n\t// Wrapped actions with better error handling\n\tconst signInWithPassword = useCallback(\n\t\tasync (password: string) => {\n\t\t\ttry {\n\t\t\t\tawait signIn(password);\n\t\t\t\treturn { success: true };\n\t\t\t} catch (error) {\n\t\t\t\treturn { success: false, error: error as AuthError };\n\t\t\t}\n\t\t},\n\t\t[signIn],\n\t);\n\n\tconst signUpWithPassword = useCallback(\n\t\tasync (password: string) => {\n\t\t\ttry {\n\t\t\t\tawait signUp(password);\n\t\t\t\treturn { success: true };\n\t\t\t} catch (error) {\n\t\t\t\treturn { success: false, error: error as AuthError };\n\t\t\t}\n\t\t},\n\t\t[signUp],\n\t);\n\n\tconst importBackupFile = useCallback(\n\t\tasync (file: File) => {\n\t\t\ttry {\n\t\t\t\tawait importBackup(file);\n\t\t\t\treturn { success: true };\n\t\t\t} catch (error) {\n\t\t\t\treturn { success: false, error: error as AuthError };\n\t\t\t}\n\t\t},\n\t\t[importBackup],\n\t);\n\n\t// Load wallet extension when wallet capabilities are available\n\tuseEffect(() => {\n\t\tconst loadWalletExtension = async () => {\n\t\t\tif (hasWalletCapabilities && isAuthenticated) {\n\t\t\t\ttry {\n\t\t\t\t\tconst walletExt = await context.getWalletExtension();\n\t\t\t\t\tsetWalletExtension(walletExt);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn(\"Failed to load wallet extension:\", error);\n\t\t\t\t\tsetWalletExtension(null);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetWalletExtension(null);\n\t\t\t}\n\t\t};\n\n\t\tloadWalletExtension();\n\t}, [hasWalletCapabilities, isAuthenticated, context]);\n\n\treturn {\n\t\t// State\n\t\tuser,\n\t\tisAuthenticated,\n\t\tisLoading,\n\t\tisReady,\n\t\terror,\n\t\thasError,\n\t\tcurrentStep,\n\t\tmode,\n\t\thasLocalBackup,\n\t\thasWalletCapabilities,\n\t\twalletExtension,\n\t\tlinkedProviders,\n\t\thasLinkedProviders,\n\n\t\t// Profile state\n\t\tprofiles,\n\t\tactiveProfile,\n\t\tprofileCount,\n\n\t\t// Mode helpers\n\t\tisSigningIn,\n\t\tisSigningUp,\n\t\tisLinking,\n\n\t\t// Core actions\n\t\tsignIn: signInWithPassword,\n\t\tsignUp: signUpWithPassword,\n\t\tsignOut,\n\n\t\t// Backup actions\n\t\tgenerateBackup,\n\t\timportBackup: importBackupFile,\n\t\tvalidatePassword,\n\n\t\t// OAuth actions\n\t\tlinkOAuth,\n\n\t\t// Profile actions\n\t\tcreateProfile,\n\t\tswitchProfile,\n\n\t\t// Flow control\n\t\tsetStep,\n\t\tsetMode,\n\t\treset,\n\n\t\t// Raw actions (for advanced use)\n\t\tactions: context,\n\n\t\t// Config\n\t\tconfig,\n\n\t\t// Storage check methods\n\t\thasUnencryptedBackupInSession,\n\t\thasEncryptedBackupStored,\n\t\tisSessionBackupImported,\n\t};\n}\n"
    }
  ]
}