@atzentis/auth-expo 0.0.16 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/LICENSE +1 -1
- package/README.md +195 -31
- package/dist/index.d.ts +1270 -9
- package/dist/index.js +2660 -2
- package/dist/index.js.map +1 -1
- package/package.json +64 -10
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAYO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["/**\n * @atzentis/auth-expo - React Native/Expo integration for Atzentis Auth SDK\n *\n * Provides:\n * - Secure token storage via expo-secure-store\n * - Native device signal collection\n * - OAuth deep linking handler\n * - Push notification token management\n * - Phone sign-in screen\n */\n\n// Placeholder — services and hooks added in P11\nexport const VERSION = \"0.0.1\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/layouts/auth-container.tsx","../src/providers/auth-provider.tsx","../src/hooks/use-auth-client.ts","../src/hooks/queries/use-session.ts","../src/ui/components/auth-gate.tsx","../src/ui/components/error-feedback.tsx","../src/ui/components/form-input.tsx","../src/ui/components/form-password-input.tsx","../src/hooks/use-auth-localization.ts","../src/ui/components/oauth-button.tsx","../src/ui/components/protected-screen.tsx","../src/ui/components/success-feedback.tsx","../src/ui/components/submit-button.tsx","../src/ui/screens/auth/email-verification-screen.tsx","../src/hooks/mutations/use-request-password-reset.ts","../src/ui/screens/auth/forgot-password-screen.tsx","../src/hooks/mutations/use-login.ts","../src/ui/screens/auth/login-screen.tsx","../src/ui/screens/auth/magic-link-screen.tsx","../src/ui/screens/auth/phone-login-screen.tsx","../src/hooks/mutations/use-reset-password.ts","../src/ui/screens/auth/reset-password-screen.tsx","../src/hooks/mutations/use-signup.ts","../src/ui/screens/auth/signup-screen.tsx","../src/ui/screens/auth/two-factor-screen.tsx","../src/ui/screens/auth/auth-view.tsx","../src/hooks/queries/use-user.ts","../src/ui/screens/settings/change-email-screen.tsx","../src/ui/screens/settings/change-password-screen.tsx","../src/ui/screens/settings/delete-account-screen.tsx","../src/ui/screens/settings/sessions-screen.tsx","../src/ui/screens/settings/two-factor-settings-screen.tsx","../src/ui/screens/settings/update-avatar-screen.tsx","../src/ui/screens/settings/update-name-screen.tsx","../src/ui/screens/settings/update-username-screen.tsx","../src/ui/screens/organizations/organization-members-screen.tsx","../src/ui/screens/organizations/organization-switcher-screen.tsx","../src/hooks/use-auth-redirect.ts","../src/hooks/use-biometric.ts","../src/hooks/mutations/use-logout.ts","../src/index.ts"],"names":["defaultAuthLocalization","jsx","View","styles","StyleSheet","jsxs","Text","forwardRef","TextInput","use","authKeys","useRouter","Fragment","Host","Button","useState","useMutation","RequestFailedError","useEffect","useCallback","useQueryClient","useForm","zodResolver","Controller","NotImplementedError","useQuery","ActivityIndicator","Haptics2","Alert","ScrollView","Platform","Pressable","ActionSheetIOS","FlatList","RefreshControl"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode } from \"react\";\nimport { KeyboardAvoidingView, Platform, ScrollView, StyleSheet, View } from \"react-native\";\n\ntype AuthContainerProps = {\n children: ReactNode;\n};\n\n/**\n * Root layout for auth screens. Handles keyboard avoidance, safe area insets,\n * and centering content on tablets.\n */\nexport function AuthContainer({ children }: AuthContainerProps) {\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n style={styles.flex}\n >\n <ScrollView\n contentInsetAdjustmentBehavior=\"automatic\"\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.scrollContent}\n >\n <View style={styles.container}>{children}</View>\n </ScrollView>\n </KeyboardAvoidingView>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: { flex: 1 },\n scrollContent: { flexGrow: 1, justifyContent: \"center\" },\n container: {\n flex: 1,\n justifyContent: \"center\",\n paddingHorizontal: 24,\n gap: 16,\n maxWidth: 440,\n alignSelf: \"center\",\n width: \"100%\",\n },\n});\n","import type { AuthLocalization } from \"@atzentis/auth-locales\";\n\nimport { en as defaultAuthLocalization } from \"@atzentis/auth-locales\";\nimport { expoClient } from \"@better-auth/expo/client\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { createAuthClient } from \"better-auth/react\";\nimport { getLocales } from \"expo-localization\";\nimport * as SecureStore from \"expo-secure-store\";\nimport React, { useMemo } from \"react\";\n\ntype AuthProviderProps = {\n baseURL: string;\n children: React.ReactNode;\n locales?: Record<string, AuthLocalization>;\n localization?: Partial<AuthLocalization>;\n queryClient?: QueryClient;\n scheme: string;\n storagePrefix?: string;\n};\n\nconst AuthClientContext = React.createContext<ReturnType<typeof createAuthClient> | null>(null);\nconst LocalizationContext = React.createContext<{\n localization: AuthLocalization;\n localizeErrors: boolean;\n}>({\n localization: defaultAuthLocalization,\n localizeErrors: true,\n});\n\nexport { AuthClientContext, LocalizationContext };\n\nexport function AuthProvider({\n baseURL,\n children,\n locales,\n localization: localizationOverride,\n queryClient: externalQueryClient,\n scheme,\n storagePrefix,\n}: AuthProviderProps) {\n const queryClient = useMemo(\n () => externalQueryClient ?? new QueryClient(),\n [externalQueryClient],\n );\n\n const authClient = useMemo(\n () =>\n createAuthClient({\n baseURL,\n plugins: [\n expoClient({\n scheme,\n storagePrefix: storagePrefix ?? scheme,\n storage: SecureStore,\n }),\n ],\n }),\n [baseURL, scheme, storagePrefix],\n );\n\n const resolvedLocalization = useMemo(() => {\n const deviceLocales = getLocales();\n const langCode = deviceLocales[0]?.languageCode ?? \"en\";\n\n const base = locales?.[langCode] ?? defaultAuthLocalization;\n if (localizationOverride) {\n return { ...base, ...localizationOverride };\n }\n return base;\n }, [locales, localizationOverride]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <AuthClientContext value={authClient}>\n <LocalizationContext value={{ localization: resolvedLocalization, localizeErrors: true }}>\n {children}\n </LocalizationContext>\n </AuthClientContext>\n </QueryClientProvider>\n );\n}\n","import { InvalidConfigError } from \"@atzentis/auth-sdk\";\nimport { use } from \"react\";\nimport { AuthClientContext } from \"../providers/auth-provider\";\n\n/**\n * Returns the Better Auth client instance from the nearest `AuthProvider`.\n *\n * @throws {InvalidConfigError} If called outside of an `AuthProvider`.\n * @returns The configured Better Auth client with expo plugin.\n */\nexport function useAuthClient() {\n const client = use(AuthClientContext);\n if (!client) {\n throw new InvalidConfigError({\n message: \"useAuthClient must be used within an AuthProvider\",\n });\n }\n return client;\n}\n","import { authKeys } from \"@atzentis/auth-sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\n/**\n * Query hook for the current session.\n *\n * Fetches via `client.getSession()` and extracts the session object.\n * Data is cached for 5 minutes (`staleTime`). Returns `null` when not authenticated.\n *\n * @returns A TanStack `UseQueryResult<Session | null>`.\n */\nexport function useSession() {\n const client = useAuthClient();\n\n return useQuery({\n queryKey: authKeys.session(),\n queryFn: async () => {\n const response = await client.getSession();\n if (response.error) return null;\n return response.data?.session ?? null;\n },\n staleTime: 5 * 60 * 1000,\n });\n}\n","import type { ReactNode } from \"react\";\nimport { useSession } from \"../../hooks/queries/use-session\";\n\nexport type AuthGateProps = {\n children: ReactNode;\n fallback?: ReactNode;\n};\n\nexport function AuthGate({ children, fallback = null }: AuthGateProps) {\n const { data: session } = useSession();\n return <>{session ? children : fallback}</>;\n}\n","import { AlertCircle } from \"lucide-react-native\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\ntype ErrorFeedbackProps = {\n message: string;\n};\n\n/**\n * Displays an error message with a red alert icon.\n * Used in auth screens to show validation or API errors.\n */\nexport function ErrorFeedback({ message }: ErrorFeedbackProps) {\n return (\n <View style={styles.container} accessibilityRole=\"alert\" accessibilityLiveRegion=\"polite\">\n <AlertCircle size={16} />\n <Text style={styles.text}>{message}</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n padding: 12,\n borderRadius: 8,\n backgroundColor: \"rgba(239, 68, 68, 0.1)\",\n },\n text: { fontSize: 14, color: \"#ef4444\", flex: 1 },\n});\n","import { forwardRef } from \"react\";\nimport { Text, TextInput, type TextInputProps, View } from \"react-native\";\n\ntype FormInputProps = Omit<TextInputProps, \"onChangeText\" | \"value\"> & {\n error?: string;\n label?: string;\n onChangeText?: (text: string) => void;\n value?: string;\n};\n\n/**\n * Form text input with optional label and error display.\n * Designed for react-hook-form Controller render prop.\n */\nexport const FormInput = forwardRef<TextInput, FormInputProps>(\n ({ error, label, style, ...props }, ref) => {\n return (\n <View style={{ gap: 4 }}>\n {label && (\n <Text style={{ fontSize: 14, fontWeight: \"500\", color: \"#1f2937\" }}>{label}</Text>\n )}\n <TextInput\n ref={ref}\n style={[\n {\n borderWidth: 1,\n borderColor: error ? \"#ef4444\" : \"#d1d5db\",\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 12,\n fontSize: 16,\n color: \"#1f2937\",\n backgroundColor: \"#ffffff\",\n minHeight: 44,\n },\n style,\n ]}\n placeholderTextColor=\"#9ca3af\"\n {...props}\n />\n {error && <Text style={{ fontSize: 12, color: \"#ef4444\" }}>{error}</Text>}\n </View>\n );\n },\n);\nFormInput.displayName = \"FormInput\";\n","import { Eye, EyeOff } from \"lucide-react-native\";\nimport { forwardRef, useState } from \"react\";\nimport { Pressable, Text, TextInput, type TextInputProps, View } from \"react-native\";\n\ntype FormPasswordInputProps = Omit<TextInputProps, \"onChangeText\" | \"value\"> & {\n error?: string;\n label?: string;\n onChangeText?: (text: string) => void;\n value?: string;\n};\n\n/**\n * Form password input with show/hide toggle, optional label and error display.\n * Designed for react-hook-form Controller render prop.\n */\nexport const FormPasswordInput = forwardRef<TextInput, FormPasswordInputProps>(\n ({ error, label, style, ...props }, ref) => {\n const [visible, setVisible] = useState(false);\n\n return (\n <View style={{ gap: 4 }}>\n {label && (\n <Text style={{ fontSize: 14, fontWeight: \"500\", color: \"#1f2937\" }}>{label}</Text>\n )}\n <View style={{ position: \"relative\" }}>\n <TextInput\n ref={ref}\n secureTextEntry={!visible}\n style={[\n {\n borderWidth: 1,\n borderColor: error ? \"#ef4444\" : \"#d1d5db\",\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 12,\n paddingRight: 44,\n fontSize: 16,\n color: \"#1f2937\",\n backgroundColor: \"#ffffff\",\n minHeight: 44,\n },\n style,\n ]}\n placeholderTextColor=\"#9ca3af\"\n {...props}\n />\n <Pressable\n onPress={() => setVisible((v) => !v)}\n accessibilityRole=\"button\"\n accessibilityLabel={visible ? \"Hide password\" : \"Show password\"}\n style={{\n position: \"absolute\",\n right: 8,\n top: 0,\n bottom: 0,\n justifyContent: \"center\",\n alignItems: \"center\",\n width: 32,\n }}\n >\n {visible ? <EyeOff size={20} /> : <Eye size={20} />}\n </Pressable>\n </View>\n {error && <Text style={{ fontSize: 12, color: \"#ef4444\" }}>{error}</Text>}\n </View>\n );\n },\n);\nFormPasswordInput.displayName = \"FormPasswordInput\";\n","import { use } from \"react\";\nimport { LocalizationContext } from \"../providers/auth-provider\";\n\n/**\n * Returns the resolved auth localization strings and the `localizeErrors` flag\n * from the nearest `AuthProvider`.\n *\n * @returns `{ localization, localizeErrors }` — use `localization.SIGN_IN` etc. inside SDK screens.\n */\nexport function useAuthLocalization() {\n return use(LocalizationContext);\n}\n","import { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\nimport { useAuthClient } from \"../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\n\ntype OAuthProvider = \"google\" | \"apple\" | \"github\";\n\nexport type OAuthButtonProps = {\n onError?: (error: Error) => void;\n onSuccess?: () => void;\n provider: OAuthProvider;\n};\n\nexport function OAuthButton({ onError, onSuccess, provider }: OAuthButtonProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const queryClient = useQueryClient();\n\n const oauthMutation = useMutation({\n mutationFn: async () => {\n const response = await client.signIn.social({ provider });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? \"OAuth sign-in failed\" });\n }\n return response.data;\n },\n onSuccess: (data) => {\n // Handle redirect case (OAuth requires redirect)\n if (\"url\" in data && data.url) {\n // In a real app, this would handle OAuth redirect\n // For now, just invalidate session cache\n queryClient.invalidateQueries({ queryKey: authKeys.session() });\n }\n // Handle direct auth case (if applicable)\n if (\"user\" in data && data.user) {\n queryClient.setQueryData(authKeys.user(), data.user);\n }\n },\n });\n\n const handlePress = useCallback(() => {\n oauthMutation.mutate(undefined, {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n onError: (error: Error) => {\n if (onError) {\n onError(error);\n }\n },\n });\n }, [oauthMutation, router, onSuccess, onError]);\n\n const label = `${L.CONTINUE_WITH} ${provider.charAt(0).toUpperCase()}${provider.slice(1)}`;\n const loadingLabel = L.SIGNING_IN;\n\n return (\n <Host matchContents>\n <Button onPress={handlePress} label={oauthMutation.isPending ? loadingLabel : label} />\n </Host>\n );\n}\n","import { useRouter } from \"expo-router\";\nimport type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport { useSession } from \"../../hooks/queries/use-session\";\n\nexport type ProtectedScreenProps = {\n children: ReactNode;\n fallback?: ReactNode;\n};\n\nexport function ProtectedScreen({ children, fallback = null }: ProtectedScreenProps) {\n const { data: session, isLoading } = useSession();\n const router = useRouter();\n\n useEffect(() => {\n if (!isLoading && !session) {\n router.replace(\"/sign-in\");\n }\n }, [session, isLoading, router]);\n\n if (isLoading) return <>{fallback}</>;\n if (!session) return null;\n\n return <>{children}</>;\n}\n","import { CheckCircle2 } from \"lucide-react-native\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\ntype SuccessFeedbackProps = {\n message: string;\n};\n\n/**\n * Displays a success message with a green checkmark icon.\n */\nexport function SuccessFeedback({ message }: SuccessFeedbackProps) {\n return (\n <View style={styles.container} accessibilityRole=\"alert\" accessibilityLiveRegion=\"polite\">\n <CheckCircle2 size={16} />\n <Text style={styles.text}>{message}</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n padding: 12,\n borderRadius: 8,\n backgroundColor: \"rgba(34, 197, 94, 0.1)\",\n },\n text: { fontSize: 14, color: \"#22c55e\", flex: 1 },\n});\n","import { Button, Host } from \"@expo/ui/swift-ui\";\nimport * as Haptics from \"expo-haptics\";\n\ntype SubmitButtonProps = {\n label: string;\n loading: boolean;\n loadingLabel: string;\n onPress: () => void;\n disabled?: boolean;\n};\n\n/**\n * Submit button with loading state and optional haptic feedback.\n * Uses @expo/ui Button for native appearance inside Host wrapper.\n */\nexport function SubmitButton({\n label,\n loading,\n loadingLabel,\n onPress,\n disabled = false,\n}: SubmitButtonProps) {\n const isDisabled = disabled || loading;\n\n const handlePress = () => {\n if (isDisabled) return;\n if (process.env.EXPO_OS === \"ios\") {\n Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);\n }\n onPress();\n };\n\n return (\n <Host matchContents style={{ opacity: isDisabled ? 0.5 : 1 }}>\n <Button onPress={handlePress} label={loading ? loadingLabel : label} />\n </Host>\n );\n}\n","import { RequestFailedError } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { ActivityIndicator, Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type EmailVerificationScreenProps = {\n onSuccess?: () => void;\n token?: string;\n};\n\ntype VerificationStatus = \"loading\" | \"success\" | \"error\" | \"no_token\";\n\n/** Auto-verifies an email address using the `token` prop from a deep-link URL. */\nexport function EmailVerificationScreen({ onSuccess, token }: EmailVerificationScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const [status, setStatus] = useState<VerificationStatus>(token ? \"loading\" : \"no_token\");\n\n const verifyMutation = useMutation({\n mutationFn: async (verifyToken: string) => {\n const response = await client.verifyEmail?.({ query: { token: verifyToken } });\n if (response?.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response?.data;\n },\n });\n\n // Auto-verify when token is present\n // biome-ignore lint/correctness/useExhaustiveDependencies: Only run once on mount\n useEffect(() => {\n if (!token) return;\n setStatus(\"loading\");\n verifyMutation.mutate(token, {\n onSuccess: () => {\n setStatus(\"success\");\n setTimeout(() => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n }, 2000);\n },\n onError: () => {\n setStatus(\"error\");\n },\n });\n }, [token]);\n\n const handleRetry = useCallback(() => {\n if (!token) return;\n setStatus(\"loading\");\n verifyMutation.mutate(token, {\n onSuccess: () => {\n setStatus(\"success\");\n setTimeout(() => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n }, 2000);\n },\n onError: () => {\n setStatus(\"error\");\n },\n });\n }, [token, verifyMutation, router, onSuccess]);\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.EMAIL_VERIFICATION}\n </Text>\n </View>\n\n {status === \"loading\" && (\n <View style={{ alignItems: \"center\", gap: 16 }}>\n <ActivityIndicator size=\"large\" />\n <Text style={{ fontSize: 16, color: \"#6b7280\" }}>{L.EMAIL_VERIFICATION_CHECKING}</Text>\n </View>\n )}\n\n {status === \"success\" && (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={L.EMAIL_VERIFICATION_SUCCESS} />\n <Text style={{ fontSize: 14, color: \"#6b7280\", textAlign: \"center\" }}>\n {L.REDIRECTING}\n </Text>\n </View>\n )}\n\n {status === \"error\" && (\n <View style={{ gap: 16 }}>\n <ErrorFeedback message={verifyMutation.error?.message ?? L.REQUEST_FAILED} />\n <Host matchContents>\n <Button onPress={handleRetry} label={L.VERIFY} />\n </Host>\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n\n {status === \"no_token\" && (\n <View style={{ gap: 16 }}>\n <ErrorFeedback message={L.REQUEST_FAILED} />\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import { RequestFailedError } from \"@atzentis/auth-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\ntype RequestPasswordResetInput = {\n email: string;\n redirectTo?: string;\n};\n\n/**\n * Mutation hook for requesting a password reset email.\n */\nexport function useRequestPasswordReset() {\n const client = useAuthClient();\n\n return useMutation({\n mutationFn: async (data: RequestPasswordResetInput) => {\n try {\n await client.requestPasswordReset({\n email: data.email,\n redirectTo: data.redirectTo,\n });\n return true;\n } catch (error) {\n const message =\n error instanceof Error && error.message ? error.message : \"Password reset request failed\";\n throw new RequestFailedError({ message: message });\n }\n },\n });\n}\n","import type { ForgotPasswordFormData } from \"@atzentis/auth-sdk\";\nimport { forgotPasswordSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useRequestPasswordReset } from \"../../../hooks/mutations/use-request-password-reset\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type ForgotPasswordScreenProps = {\n onSuccess?: () => void;\n};\n\n/** Screen for requesting a password-reset email with a 60-second resend cooldown. */\nexport function ForgotPasswordScreen({ onSuccess }: ForgotPasswordScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const forgotMutation = useRequestPasswordReset();\n const [emailSent, setEmailSent] = useState(false);\n const [cooldown, setCooldown] = useState(0);\n\n const form = useForm<ForgotPasswordFormData>({\n resolver: zodResolver(forgotPasswordSchema),\n defaultValues: { email: \"\" },\n mode: \"onChange\",\n });\n\n const handleSubmit = useCallback(\n (data: ForgotPasswordFormData) => {\n forgotMutation.mutate(\n { email: data.email },\n {\n onSuccess: () => {\n setEmailSent(true);\n setCooldown(60);\n if (onSuccess) {\n onSuccess();\n }\n },\n },\n );\n },\n [forgotMutation, onSuccess],\n );\n\n const handleResend = useCallback(() => {\n if (cooldown > 0) return;\n const email = form.getValues(\"email\") as string;\n forgotMutation.mutate({ email }, { onSuccess: () => setCooldown(60) });\n }, [forgotMutation, cooldown, form]);\n\n useEffect(() => {\n if (cooldown <= 0) return;\n const timer = setTimeout(() => setCooldown((c) => c - 1), 1000);\n return () => clearTimeout(timer);\n }, [cooldown]);\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.FORGOT_PASSWORD}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.FORGOT_PASSWORD_DESCRIPTION}</Text>\n </View>\n\n {!emailSent ? (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"email\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.EMAIL_PLACEHOLDER}\n placeholder={L.EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n keyboardType=\"email-address\"\n editable={!forgotMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {forgotMutation.error && <ErrorFeedback message={forgotMutation.error.message} />}\n\n <SubmitButton\n label={L.FORGOT_PASSWORD_ACTION}\n loading={forgotMutation.isPending}\n loadingLabel={L.SENDING}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n ) : (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={`${L.FORGOT_PASSWORD_EMAIL} ${form.getValues(\"email\")}`} />\n\n <Host matchContents>\n <Button\n onPress={handleResend}\n label={cooldown > 0 ? `${L.RESEND} (${cooldown}s)` : L.RESEND}\n />\n </Host>\n\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\ntype LoginInput = {\n email: string;\n password: string;\n};\n\n/**\n * Mutation hook for email/password login.\n *\n * On success, writes the returned user and session into the TanStack Query cache\n * via the `authKeys` factory so that `useUser` and `useSession` update immediately.\n *\n * @returns A TanStack `UseMutationResult` — call `.mutate({ email, password })` to sign in.\n */\nexport function useLogin() {\n const client = useAuthClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (data: LoginInput) => {\n const response = await client.signIn.email(data);\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? \"Login failed\" });\n }\n return response.data;\n },\n onSuccess: (data) => {\n if (data?.user) {\n queryClient.setQueryData(authKeys.user(), data.user);\n // BA 1.5: session is implicit from user auth state\n queryClient.invalidateQueries({ queryKey: authKeys.session() });\n }\n },\n });\n}\n","import type { CredentialLoginFormData } from \"@atzentis/auth-sdk\";\nimport { credentialLoginSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useLogin } from \"../../../hooks/mutations/use-login\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { FormPasswordInput } from \"../../components/form-password-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type LoginScreenProps = {\n biometricAvailable?: boolean;\n onBiometricPress?: () => void;\n onSuccess?: () => void;\n};\n\n/** Email/password login screen with optional biometric button (iOS only). */\nexport function LoginScreen({\n biometricAvailable = false,\n onBiometricPress,\n onSuccess,\n}: LoginScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const loginMutation = useLogin();\n\n const form = useForm<CredentialLoginFormData>({\n resolver: zodResolver(credentialLoginSchema),\n defaultValues: { identity: \"\", password: \"\" },\n mode: \"onChange\",\n });\n\n const onSubmit = useCallback(\n (data: CredentialLoginFormData) => {\n loginMutation.mutate(\n { email: data.identity, password: data.password },\n {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n },\n );\n },\n [loginMutation, router, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.SIGN_IN}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.SIGN_IN_DESCRIPTION}</Text>\n </View>\n\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"identity\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.SIGN_IN_USERNAME_PLACEHOLDER}\n placeholder={L.EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n keyboardType=\"email-address\"\n editable={!loginMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"password\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.PASSWORD}\n placeholder={L.PASSWORD_PLACEHOLDER}\n editable={!loginMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n </View>\n\n {loginMutation.error && <ErrorFeedback message={loginMutation.error.message} />}\n\n <SubmitButton\n label={L.SIGN_IN_ACTION}\n loading={loginMutation.isPending}\n loadingLabel={L.SIGNING_IN}\n onPress={form.handleSubmit(onSubmit)}\n />\n\n {biometricAvailable && process.env.EXPO_OS === \"ios\" && onBiometricPress && (\n <Host matchContents>\n <Button onPress={onBiometricPress} />\n </Host>\n )}\n\n <View style={{ flexDirection: \"row\", justifyContent: \"space-between\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.push(\"/signup\")} label={L.DONT_HAVE_AN_ACCOUNT} />\n </Host>\n <Host matchContents>\n <Button\n onPress={() => router.push(\"/forgot-password\")}\n label={L.FORGOT_PASSWORD_LINK}\n />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import type { MagicLinkFormData } from \"@atzentis/auth-sdk\";\nimport { NotImplementedError, magicLinkSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type MagicLinkScreenProps = {\n onSuccess?: () => void;\n token?: string;\n};\n\ntype MagicLinkStep =\n | { step: \"email\" }\n | { step: \"sent\"; email: string }\n | { step: \"verifying\"; token: string }\n | { step: \"success\" }\n | { step: \"error\"; message: string };\n\n/** Magic-link login screen: sends link via email, then auto-verifies when a `token` prop is provided. */\nexport function MagicLinkScreen({ onSuccess, token }: MagicLinkScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const client = useAuthClient();\n const [state, setState] = useState<MagicLinkStep>(\n token ? { step: \"verifying\", token } : { step: \"email\" },\n );\n const [cooldown, setCooldown] = useState(0);\n\n const form = useForm<MagicLinkFormData>({\n resolver: zodResolver(magicLinkSchema),\n defaultValues: { email: \"\" },\n mode: \"onChange\",\n });\n\n const sendMutation = useMutation({\n mutationFn: async (_data: MagicLinkFormData) => {\n // Magic link not available in Better Auth 1.5\n throw new NotImplementedError({ feature: \"Magic link authentication\" });\n },\n });\n\n const verifyMutation = useMutation({\n mutationFn: async (_verifyToken: string) => {\n // Magic link not available in Better Auth 1.5\n throw new NotImplementedError({ feature: \"Magic link verification\" });\n },\n });\n\n const handleSend = useCallback(\n (data: MagicLinkFormData) => {\n sendMutation.mutate(data, {\n onSuccess: () => {\n setState({ step: \"sent\", email: data.email });\n setCooldown(60);\n },\n });\n },\n [sendMutation],\n );\n\n // Auto-verify when token is present\n // biome-ignore lint/correctness/useExhaustiveDependencies: Only run on step change\n useEffect(() => {\n if (state.step === \"verifying\") {\n verifyMutation.mutate(state.token, {\n onSuccess: () => {\n setState({ step: \"success\" });\n setTimeout(() => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n }, 2000);\n },\n onError: (err) => {\n setState({ step: \"error\", message: err.message });\n },\n });\n }\n }, [state.step]);\n\n useEffect(() => {\n if (cooldown <= 0) return;\n const timer = setTimeout(() => setCooldown((c) => c - 1), 1000);\n return () => clearTimeout(timer);\n }, [cooldown]);\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.MAGIC_LINK}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.MAGIC_LINK_DESCRIPTION}</Text>\n </View>\n\n {state.step === \"email\" && (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"email\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.EMAIL_PLACEHOLDER}\n placeholder={L.EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n keyboardType=\"email-address\"\n editable={!sendMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {sendMutation.error && <ErrorFeedback message={sendMutation.error.message} />}\n\n <SubmitButton\n label={L.MAGIC_LINK_ACTION}\n loading={sendMutation.isPending}\n loadingLabel={L.SENDING}\n onPress={form.handleSubmit(handleSend)}\n />\n </View>\n )}\n\n {state.step === \"sent\" && (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={`${L.MAGIC_LINK_EMAIL} ${state.email}`} />\n <Text style={{ fontSize: 14, color: \"#6b7280\", textAlign: \"center\" }}>\n {L.MAGIC_LINK_HINT}\n </Text>\n <Host matchContents>\n <Button\n onPress={() => {\n if (cooldown <= 0) {\n sendMutation.mutate(\n { email: state.email },\n { onSuccess: () => setCooldown(60) },\n );\n }\n }}\n label={cooldown > 0 ? `${L.RESEND} (${cooldown}s)` : L.RESEND}\n />\n </Host>\n </View>\n )}\n\n {state.step === \"verifying\" && (\n <View style={{ alignItems: \"center\", gap: 8 }}>\n <Text style={{ fontSize: 16, color: \"#6b7280\" }}>{L.VERIFYING}</Text>\n </View>\n )}\n\n {state.step === \"success\" && <SuccessFeedback message={L.REDIRECTING} />}\n\n {state.step === \"error\" && (\n <View style={{ gap: 16 }}>\n <ErrorFeedback message={state.message} />\n <Host matchContents>\n <Button onPress={() => setState({ step: \"email\" })} label={L.GO_BACK} />\n </Host>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import type { OtpVerifyFormData, PhoneLoginFormData } from \"@atzentis/auth-sdk\";\nimport { NotImplementedError, otpVerifySchema, phoneLoginSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type PhoneLoginScreenProps = {\n onSuccess?: () => void;\n};\n\ntype PhoneStep = { step: 1 } | { step: 2; phoneNumber: string; countryCode: string };\n\n/** Two-step phone login screen: collect phone number, then verify the OTP code sent via SMS. */\nexport function PhoneLoginScreen({ onSuccess }: PhoneLoginScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const client = useAuthClient();\n const [state, setState] = useState<PhoneStep>({ step: 1 });\n const [cooldown, setCooldown] = useState(0);\n\n const phoneForm = useForm<PhoneLoginFormData>({\n resolver: zodResolver(phoneLoginSchema),\n defaultValues: { countryCode: \"+1\", phoneNumber: \"\" },\n mode: \"onChange\",\n });\n\n const otpForm = useForm<OtpVerifyFormData>({\n resolver: zodResolver(otpVerifySchema),\n defaultValues: { code: \"\" },\n mode: \"onChange\",\n });\n\n const sendOtpMutation = useMutation({\n mutationFn: async (_data: PhoneLoginFormData) => {\n // Phone number authentication not available in Better Auth 1.5\n throw new NotImplementedError({ feature: \"Phone number authentication\" });\n },\n });\n\n const verifyOtpMutation = useMutation({\n mutationFn: async (_data: { phoneNumber: string; code: string }) => {\n // Phone number authentication not available in Better Auth 1.5\n throw new NotImplementedError({ feature: \"Phone number verification\" });\n },\n });\n\n const handleSendOtp = useCallback(\n (data: PhoneLoginFormData) => {\n sendOtpMutation.mutate(data, {\n onSuccess: () => {\n setState({ step: 2, phoneNumber: data.phoneNumber, countryCode: data.countryCode });\n setCooldown(60);\n },\n });\n },\n [sendOtpMutation],\n );\n\n const handleVerifyOtp = useCallback(\n (data: OtpVerifyFormData) => {\n if (state.step !== 2) return;\n verifyOtpMutation.mutate(\n { phoneNumber: `${state.countryCode}${state.phoneNumber}`, code: data.code },\n {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n },\n );\n },\n [verifyOtpMutation, state, router, onSuccess],\n );\n\n const handleResend = useCallback(() => {\n if (state.step !== 2 || cooldown > 0) return;\n sendOtpMutation.mutate(\n { countryCode: state.countryCode, phoneNumber: state.phoneNumber },\n { onSuccess: () => setCooldown(60) },\n );\n }, [sendOtpMutation, state, cooldown]);\n\n useEffect(() => {\n if (cooldown <= 0) return;\n const timer = setTimeout(() => setCooldown((c) => c - 1), 1000);\n return () => clearTimeout(timer);\n }, [cooldown]);\n\n const error = sendOtpMutation.error || verifyOtpMutation.error;\n const isPending = sendOtpMutation.isPending || verifyOtpMutation.isPending;\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.SIGN_IN}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.PHONE_NUMBER_PLACEHOLDER}</Text>\n </View>\n\n {state.step === 1 ? (\n <View style={{ gap: 16 }}>\n <Controller\n control={phoneForm.control}\n name=\"countryCode\"\n render={({ field: { onChange, value }, fieldState: { error: fieldError } }) => (\n <FormInput\n label={L.COUNTRY_CODE}\n placeholder=\"+1\"\n keyboardType=\"phone-pad\"\n editable={!isPending}\n onChangeText={onChange}\n value={value}\n error={fieldError?.message}\n />\n )}\n />\n\n <Controller\n control={phoneForm.control}\n name=\"phoneNumber\"\n render={({\n field: { onChange, onBlur, value },\n fieldState: { error: fieldError },\n }) => (\n <FormInput\n label={L.PHONE_NUMBER_PLACEHOLDER}\n placeholder={L.PHONE_NUMBER_PLACEHOLDER}\n keyboardType=\"phone-pad\"\n editable={!isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={fieldError?.message}\n />\n )}\n />\n\n {error && <ErrorFeedback message={error.message} />}\n\n <SubmitButton\n label={L.SEND_VERIFICATION_CODE}\n loading={sendOtpMutation.isPending}\n loadingLabel={L.SENDING_VERIFICATION_CODE}\n onPress={phoneForm.handleSubmit(handleSendOtp)}\n />\n </View>\n ) : (\n <View style={{ gap: 16 }}>\n <Controller\n control={otpForm.control}\n name=\"code\"\n render={({\n field: { onChange, onBlur, value },\n fieldState: { error: fieldError },\n }) => (\n <FormInput\n label={L.ONE_TIME_PASSWORD}\n placeholder=\"000000\"\n keyboardType=\"number-pad\"\n maxLength={6}\n editable={!isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={fieldError?.message}\n />\n )}\n />\n\n {error && <ErrorFeedback message={error.message} />}\n\n <SubmitButton\n label={L.VERIFY}\n loading={verifyOtpMutation.isPending}\n loadingLabel={L.VERIFYING}\n onPress={otpForm.handleSubmit(handleVerifyOtp)}\n />\n\n <View style={{ flexDirection: \"row\", justifyContent: \"space-between\" }}>\n <Host matchContents>\n <Button onPress={() => setState({ step: 1 })} label={L.GO_BACK} />\n </Host>\n <Host matchContents>\n <Button\n onPress={handleResend}\n label={cooldown > 0 ? `${L.RESEND} (${cooldown}s)` : L.RESEND}\n />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import { RequestFailedError } from \"@atzentis/auth-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\ntype ResetPasswordInput = {\n newPassword: string;\n token: string;\n};\n\n/**\n * Mutation hook for resetting a password using a token from the reset email.\n */\nexport function useResetPassword() {\n const client = useAuthClient();\n\n return useMutation({\n mutationFn: async (data: ResetPasswordInput) => {\n const response = await client.resetPassword(data);\n if (response.error) {\n throw new RequestFailedError({\n message: response.error.message ?? \"Password reset failed\",\n });\n }\n return true;\n },\n });\n}\n","import type { ResetPasswordFormData } from \"@atzentis/auth-sdk\";\nimport { resetPasswordSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useResetPassword } from \"../../../hooks/mutations/use-reset-password\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormPasswordInput } from \"../../components/form-password-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type ResetPasswordScreenProps = {\n onSuccess?: () => void;\n token?: string;\n};\n\n/** Token-based password reset screen; shows an error state when no token is provided. */\nexport function ResetPasswordScreen({ onSuccess, token }: ResetPasswordScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const resetMutation = useResetPassword();\n\n const form = useForm<ResetPasswordFormData>({\n resolver: zodResolver(resetPasswordSchema),\n defaultValues: { newPassword: \"\", confirmPassword: \"\" },\n mode: \"onChange\",\n });\n\n const handleSubmit = useCallback(\n (data: ResetPasswordFormData) => {\n if (!token) return;\n resetMutation.mutate(\n { newPassword: data.newPassword, token },\n {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/login\");\n }\n },\n },\n );\n },\n [resetMutation, token, router, onSuccess],\n );\n\n if (!token) {\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.RESET_PASSWORD}\n </Text>\n </View>\n <ErrorFeedback message={L.REQUEST_FAILED} />\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n }\n\n if (resetMutation.isSuccess) {\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <SuccessFeedback message={L.RESET_PASSWORD_SUCCESS} />\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.replace(\"/login\")} label={L.SIGN_IN} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n }\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.RESET_PASSWORD}\n </Text>\n </View>\n\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"newPassword\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.NEW_PASSWORD}\n placeholder={L.PASSWORD_PLACEHOLDER}\n editable={!resetMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"confirmPassword\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.CONFIRM_NEW_PASSWORD}\n placeholder={L.CONFIRM_PASSWORD_PLACEHOLDER}\n editable={!resetMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n </View>\n\n {resetMutation.error && <ErrorFeedback message={resetMutation.error.message} />}\n\n <SubmitButton\n label={L.RESET_PASSWORD_ACTION}\n loading={resetMutation.isPending}\n loadingLabel={L.LOADING}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\ntype SignupInput = {\n email: string;\n name: string;\n password: string;\n};\n\n/**\n * Mutation hook for email/password signup.\n *\n * On success, writes the returned user and session into the TanStack Query cache\n * via the `authKeys` factory so that `useUser` and `useSession` update immediately.\n *\n * @returns A TanStack `UseMutationResult` — call `.mutate({ email, name, password })` to register.\n */\nexport function useSignup() {\n const client = useAuthClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (data: SignupInput) => {\n const response = await client.signUp.email(data);\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? \"Signup failed\" });\n }\n return response.data;\n },\n onSuccess: (data) => {\n if (data?.user) {\n queryClient.setQueryData(authKeys.user(), data.user);\n // BA 1.5: session is implicit from user auth state\n queryClient.invalidateQueries({ queryKey: authKeys.session() });\n }\n },\n });\n}\n","import type { SignupFormData } from \"@atzentis/auth-sdk\";\nimport { signupSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useSignup } from \"../../../hooks/mutations/use-signup\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { FormPasswordInput } from \"../../components/form-password-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type SignupScreenProps = {\n onSuccess?: () => void;\n};\n\n/** Email/password registration screen with name, email, and password fields. */\nexport function SignupScreen({ onSuccess }: SignupScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const signupMutation = useSignup();\n\n const form = useForm<SignupFormData>({\n resolver: zodResolver(signupSchema),\n defaultValues: {\n email: \"\",\n name: \"\",\n password: \"\",\n acceptTerms: true,\n },\n mode: \"onChange\",\n });\n\n const onSubmit = useCallback(\n (data: SignupFormData) => {\n signupMutation.mutate(data, {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n });\n },\n [signupMutation, router, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.SIGN_UP}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.SIGN_UP_DESCRIPTION}</Text>\n </View>\n\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"name\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.NAME_PLACEHOLDER}\n placeholder={L.NAME_PLACEHOLDER}\n autoCapitalize=\"words\"\n editable={!signupMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"email\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.EMAIL_PLACEHOLDER}\n placeholder={L.EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n keyboardType=\"email-address\"\n editable={!signupMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"password\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.PASSWORD}\n placeholder={L.PASSWORD_PLACEHOLDER}\n editable={!signupMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n </View>\n\n {signupMutation.error && <ErrorFeedback message={signupMutation.error.message} />}\n\n <SubmitButton\n label={L.SIGN_UP_ACTION}\n loading={signupMutation.isPending}\n loadingLabel={L.SIGNING_UP}\n onPress={form.handleSubmit(onSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.push(\"/login\")} label={L.ALREADY_HAVE_AN_ACCOUNT} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import type { BackupCodeFormData, TotpFormData } from \"@atzentis/auth-sdk\";\nimport { NotImplementedError, backupCodeSchema, totpSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type TwoFactorScreenProps = {\n onSuccess?: () => void;\n};\n\ntype TwoFactorMode = \"totp\" | \"backup\";\n\n/** TOTP/backup-code verification screen shown after initial credentials are accepted. */\nexport function TwoFactorScreen({ onSuccess }: TwoFactorScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const client = useAuthClient();\n const [mode, setMode] = useState<TwoFactorMode>(\"totp\");\n\n const totpForm = useForm<TotpFormData>({\n resolver: zodResolver(totpSchema),\n defaultValues: { code: \"\" },\n mode: \"onChange\",\n });\n\n const backupForm = useForm<BackupCodeFormData>({\n resolver: zodResolver(backupCodeSchema),\n defaultValues: { backupCode: \"\" },\n mode: \"onChange\",\n });\n\n const verifyMutation = useMutation({\n mutationFn: async (_data: { code?: string; backupCode?: string }) => {\n // BA 1.5: two-factor verification not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Two-factor verification\" });\n },\n });\n\n const handleTotpSubmit = useCallback(\n (data: TotpFormData) => {\n verifyMutation.mutate(\n { code: data.code },\n {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n },\n );\n },\n [verifyMutation, router, onSuccess],\n );\n\n const handleBackupSubmit = useCallback(\n (data: BackupCodeFormData) => {\n verifyMutation.mutate(\n { backupCode: data.backupCode },\n {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/(app)\");\n }\n },\n },\n );\n },\n [verifyMutation, router, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.TWO_FACTOR_PROMPT}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.TWO_FACTOR_DESCRIPTION}</Text>\n </View>\n\n <View style={{ flexDirection: \"row\", gap: 8 }}>\n <Host matchContents>\n <Button onPress={() => setMode(\"totp\")} label={L.USE_AUTHENTICATOR} />\n </Host>\n <Host matchContents>\n <Button onPress={() => setMode(\"backup\")} label={L.USE_BACKUP_CODE} />\n </Host>\n </View>\n\n {mode === \"totp\" ? (\n <View style={{ gap: 16 }}>\n <Controller\n control={totpForm.control}\n name=\"code\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.ENTER_TOTP_CODE}\n placeholder=\"000000\"\n keyboardType=\"number-pad\"\n maxLength={6}\n editable={!verifyMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {verifyMutation.error && <ErrorFeedback message={verifyMutation.error.message} />}\n\n <SubmitButton\n label={L.TWO_FACTOR_ACTION}\n loading={verifyMutation.isPending}\n loadingLabel={L.VERIFYING}\n onPress={totpForm.handleSubmit(handleTotpSubmit)}\n />\n </View>\n ) : (\n <View style={{ gap: 16 }}>\n <Controller\n control={backupForm.control}\n name=\"backupCode\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.BACKUP_CODE_PLACEHOLDER}\n placeholder={L.BACKUP_CODE_PLACEHOLDER}\n autoCapitalize=\"none\"\n editable={!verifyMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {verifyMutation.error && <ErrorFeedback message={verifyMutation.error.message} />}\n\n <SubmitButton\n label={L.TWO_FACTOR_ACTION}\n loading={verifyMutation.isPending}\n loadingLabel={L.VERIFYING}\n onPress={backupForm.handleSubmit(handleBackupSubmit)}\n />\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { EmailVerificationScreen } from \"./email-verification-screen\";\nimport { ForgotPasswordScreen } from \"./forgot-password-screen\";\nimport { LoginScreen } from \"./login-screen\";\nimport { MagicLinkScreen } from \"./magic-link-screen\";\nimport { PhoneLoginScreen } from \"./phone-login-screen\";\nimport { ResetPasswordScreen } from \"./reset-password-screen\";\nimport { SignupScreen } from \"./signup-screen\";\nimport { TwoFactorScreen } from \"./two-factor-screen\";\n\n/**\n * Available auth screen routes.\n */\nexport type AuthRoute =\n | \"login\"\n | \"signup\"\n | \"phone-login\"\n | \"magic-link\"\n | \"forgot-password\"\n | \"reset-password\"\n | \"verify-email\"\n | \"two-factor\";\n\nexport type AuthViewProps = {\n /** Which auth screen to render. Defaults to \"login\". */\n route?: AuthRoute;\n /** Called on successful authentication. */\n onSuccess?: () => void;\n /** Token for deep link screens (reset-password, verify-email, magic-link). */\n token?: string;\n /** Whether biometric auth is available (login screen only). */\n biometricAvailable?: boolean;\n /** Handler for biometric button press (login screen only). */\n onBiometricPress?: () => void;\n /** Fallback content when route doesn't match. */\n fallback?: ReactNode;\n};\n\n/**\n * AuthView — Route-based renderer for auth screens.\n *\n * Maps a route name to the appropriate auth screen component.\n * For use with expo-router layouts or custom navigation.\n *\n * @example\n * // In app/(auth)/[...slug].tsx:\n * import { AuthView } from \"@atzentis/auth-expo\";\n *\n * export default function AuthRoute() {\n * const { slug } = useLocalSearchParams();\n * const route = (slug as string[])?.[0] ?? \"login\";\n * const params = useLocalSearchParams();\n * return (\n * <AuthView\n * route={route}\n * token={params.token as string}\n * onSuccess={() => router.replace(\"/(app)\")}\n * />\n * );\n * }\n */\nexport function AuthView({\n route = \"login\",\n onSuccess,\n token,\n biometricAvailable,\n onBiometricPress,\n fallback = null,\n}: AuthViewProps) {\n switch (route) {\n case \"login\":\n return (\n <LoginScreen\n onSuccess={onSuccess}\n biometricAvailable={biometricAvailable}\n onBiometricPress={onBiometricPress}\n />\n );\n\n case \"signup\":\n return <SignupScreen onSuccess={onSuccess} />;\n\n case \"phone-login\":\n return <PhoneLoginScreen onSuccess={onSuccess} />;\n\n case \"magic-link\":\n return <MagicLinkScreen onSuccess={onSuccess} token={token} />;\n\n case \"forgot-password\":\n return <ForgotPasswordScreen onSuccess={onSuccess} />;\n\n case \"reset-password\":\n return <ResetPasswordScreen onSuccess={onSuccess} token={token} />;\n\n case \"verify-email\":\n return <EmailVerificationScreen onSuccess={onSuccess} token={token} />;\n\n case \"two-factor\":\n return <TwoFactorScreen onSuccess={onSuccess} />;\n\n default:\n return <>{fallback}</>;\n }\n}\n","import { authKeys } from \"@atzentis/auth-sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\n/**\n * Query hook for the current authenticated user.\n *\n * Fetches via `client.getSession()` and extracts the user object.\n * Data is cached for 5 minutes (`staleTime`). Returns `null` when not authenticated.\n *\n * @returns A TanStack `UseQueryResult<User | null>`.\n */\nexport function useUser() {\n const client = useAuthClient();\n\n return useQuery({\n queryKey: authKeys.user(),\n queryFn: async () => {\n const response = await client.getSession();\n if (response.error) return null;\n return response.data?.user ?? null;\n },\n staleTime: 5 * 60 * 1000,\n });\n}\n","import type { ChangeEmailFormData } from \"@atzentis/auth-sdk\";\nimport { RequestFailedError, changeEmailSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useUser } from \"../../../hooks/queries/use-user\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type ChangeEmailScreenProps = {\n onSuccess?: () => void;\n redirectUrl?: string;\n};\n\n/** Settings screen for changing the account email address; sends a verification link with a resend cooldown. */\nexport function ChangeEmailScreen({ onSuccess, redirectUrl }: ChangeEmailScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const { data: user } = useUser();\n const [emailSent, setEmailSent] = useState(false);\n const [cooldown, setCooldown] = useState(0);\n\n const form = useForm<ChangeEmailFormData>({\n resolver: zodResolver(changeEmailSchema),\n defaultValues: { email: \"\" },\n mode: \"onChange\",\n });\n\n const sendMutation = useMutation({\n mutationFn: async (data: ChangeEmailFormData) => {\n const response = await client.changeEmail({\n newEmail: data.email,\n callbackURL: redirectUrl,\n });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const handleSubmit = useCallback(\n (data: ChangeEmailFormData) => {\n sendMutation.mutate(data, {\n onSuccess: () => {\n setEmailSent(true);\n setCooldown(60);\n onSuccess?.();\n },\n });\n },\n [sendMutation, onSuccess],\n );\n\n const handleResend = useCallback(() => {\n if (cooldown > 0) return;\n const email = form.getValues(\"email\") as string;\n sendMutation.mutate({ email }, { onSuccess: () => setCooldown(60) });\n }, [sendMutation, cooldown, form]);\n\n useEffect(() => {\n if (cooldown <= 0) return;\n const timer = setTimeout(() => setCooldown((c) => c - 1), 1000);\n return () => clearTimeout(timer);\n }, [cooldown]);\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.CHANGE_EMAIL}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.CHANGE_EMAIL_DESCRIPTION}</Text>\n </View>\n\n {user?.email && (\n <View style={{ paddingVertical: 8 }}>\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>{L.CURRENT_EMAIL}</Text>\n <Text style={{ fontSize: 16, color: \"#6b7280\" }}>{user.email}</Text>\n </View>\n )}\n\n {!emailSent ? (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"email\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.NEW_EMAIL_PLACEHOLDER}\n placeholder={L.EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n keyboardType=\"email-address\"\n editable={!sendMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {sendMutation.error && <ErrorFeedback message={sendMutation.error.message} />}\n\n <SubmitButton\n label={L.CHANGE_EMAIL}\n loading={sendMutation.isPending}\n loadingLabel={L.SENDING}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n ) : (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={L.CHANGE_EMAIL_SENT} />\n\n <Host matchContents>\n <Button\n onPress={handleResend}\n label={cooldown > 0 ? `${L.RESEND} (${cooldown}s)` : L.RESEND}\n />\n </Host>\n\n <View style={{ alignItems: \"center\" }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import type { ChangePasswordFormData } from \"@atzentis/auth-sdk\";\nimport { RequestFailedError, changePasswordSchema } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormPasswordInput } from \"../../components/form-password-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type ChangePasswordScreenProps = {\n onSuccess?: () => void;\n};\n\n/** Settings screen for changing the current user's password (requires current password). */\nexport function ChangePasswordScreen({ onSuccess }: ChangePasswordScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const [showSuccess, setShowSuccess] = useState(false);\n\n const form = useForm<ChangePasswordFormData>({\n resolver: zodResolver(changePasswordSchema),\n defaultValues: { currentPassword: \"\", newPassword: \"\", confirmPassword: \"\" },\n mode: \"onChange\",\n });\n\n const changeMutation = useMutation({\n mutationFn: async (data: ChangePasswordFormData) => {\n const response = await client.changePassword({\n currentPassword: data.currentPassword,\n newPassword: data.newPassword,\n });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const handleSubmit = useCallback(\n (data: ChangePasswordFormData) => {\n changeMutation.mutate(data, {\n onSuccess: () => {\n form.reset();\n setShowSuccess(true);\n setTimeout(() => setShowSuccess(false), 3000);\n onSuccess?.();\n },\n });\n },\n [changeMutation, form, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.CHANGE_PASSWORD}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.CHANGE_PASSWORD_DESCRIPTION}</Text>\n </View>\n\n {showSuccess ? (\n <SuccessFeedback message={L.CHANGE_PASSWORD_SUCCESS} />\n ) : (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"currentPassword\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.CURRENT_PASSWORD}\n placeholder={L.CURRENT_PASSWORD}\n editable={!changeMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"newPassword\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.NEW_PASSWORD}\n placeholder={L.NEW_PASSWORD}\n editable={!changeMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n <Controller\n control={form.control}\n name=\"confirmPassword\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormPasswordInput\n label={L.CONFIRM_NEW_PASSWORD}\n placeholder={L.CONFIRM_NEW_PASSWORD}\n editable={!changeMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {changeMutation.error && <ErrorFeedback message={changeMutation.error.message} />}\n\n <SubmitButton\n label={L.CHANGE_PASSWORD}\n loading={changeMutation.isPending}\n loadingLabel={L.CHANGING_PASSWORD}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import { RequestFailedError } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { Text, TextInput, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type DeleteAccountScreenProps = {\n confirmationPhrase?: string;\n onSuccess?: () => void;\n};\n\n/** Destructive settings screen for permanent account deletion; requires typing a confirmation phrase and password. */\nexport function DeleteAccountScreen({\n confirmationPhrase = \"delete my account\",\n onSuccess,\n}: DeleteAccountScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const [phrase, setPhrase] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const phraseMatches = phrase === confirmationPhrase;\n\n const deleteMutation = useMutation({\n mutationFn: async (pw: string) => {\n const response = await client.deleteUser({ password: pw });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const handleDelete = useCallback(() => {\n if (!phraseMatches || !password) return;\n deleteMutation.mutate(password, {\n onSuccess: () => {\n if (onSuccess) {\n onSuccess();\n } else {\n router.replace(\"/sign-in\");\n }\n },\n });\n }, [phraseMatches, password, deleteMutation, onSuccess, router]);\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#dc2626\" }}>\n {L.DELETE_ACCOUNT}\n </Text>\n <Text style={{ fontSize: 14, color: \"#dc2626\" }}>{L.DELETE_ACCOUNT_WARNING}</Text>\n </View>\n\n <View style={{ gap: 16 }}>\n <View style={{ gap: 4 }}>\n <Text style={{ fontSize: 14, color: \"#374151\" }}>\n {L.TYPE_TO_CONFIRM.replace(\"{{phrase}}\", confirmationPhrase)}\n </Text>\n <TextInput\n value={phrase}\n onChangeText={setPhrase}\n placeholder={confirmationPhrase}\n editable={!deleteMutation.isPending}\n autoCapitalize=\"none\"\n style={{\n borderWidth: 1,\n borderColor: phraseMatches ? \"#16a34a\" : \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n </View>\n\n {phraseMatches && (\n <View style={{ gap: 4 }}>\n <Text style={{ fontSize: 14, color: \"#374151\" }}>{L.PASSWORD}</Text>\n <TextInput\n value={password}\n onChangeText={setPassword}\n placeholder={L.PASSWORD_PLACEHOLDER}\n secureTextEntry\n editable={!deleteMutation.isPending}\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n </View>\n )}\n\n {deleteMutation.error && <ErrorFeedback message={deleteMutation.error.message} />}\n\n <Host matchContents>\n <Button\n onPress={handleDelete}\n label={deleteMutation.isPending ? L.DELETING_ACCOUNT : L.DELETE}\n />\n </Host>\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import type { AuthLocalization } from \"@atzentis/auth-locales\";\nimport { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\nimport { ActivityIndicator, Alert, FlatList, RefreshControl, Text, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport type { BetterAuthSession } from \"../../../types/better-auth\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type SessionsScreenProps = {\n onSuccess?: () => void;\n};\n\nfunction formatLastActive(dateStr: string | Date | undefined, L: AuthLocalization): string {\n if (!dateStr) return \"\";\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 1) return L.JUST_NOW;\n if (diffMin < 60) return L.MINUTES_AGO.replace(\"{{n}}\", String(diffMin));\n const diffHrs = Math.floor(diffMin / 60);\n if (diffHrs < 24) return L.HOURS_AGO.replace(\"{{n}}\", String(diffHrs));\n const diffDays = Math.floor(diffHrs / 24);\n return L.DAYS_AGO.replace(\"{{n}}\", String(diffDays));\n}\n\n/** Settings screen listing all active sessions with individual revoke and revoke-all-others actions. */\nexport function SessionsScreen({ onSuccess }: SessionsScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const queryClient = useQueryClient();\n\n const sessionsQuery = useQuery({\n queryKey: authKeys.sessions(),\n queryFn: async () => {\n const response = await client.listSessions();\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return (response.data ?? []) as BetterAuthSession[];\n },\n });\n\n const revokeMutation = useMutation({\n mutationFn: async (sessionToken: string) => {\n const response = await client.revokeSession({ token: sessionToken });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.sessions() });\n },\n });\n\n const revokeAllMutation = useMutation({\n mutationFn: async () => {\n const response = await client.revokeOtherSessions();\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.sessions() });\n onSuccess?.();\n },\n });\n\n const handleRevoke = useCallback(\n (token: string) => {\n Alert.alert(L.REVOKE_SESSION, L.ARE_YOU_SURE, [\n { text: L.CANCEL, style: \"cancel\" },\n {\n text: L.CONFIRM,\n style: \"destructive\",\n onPress: () => revokeMutation.mutate(token),\n },\n ]);\n },\n [L, revokeMutation],\n );\n\n const handleRevokeAll = useCallback(() => {\n Alert.alert(L.REVOKE_ALL_OTHER_SESSIONS, L.ARE_YOU_SURE, [\n { text: L.CANCEL, style: \"cancel\" },\n {\n text: L.CONFIRM,\n style: \"destructive\",\n onPress: () => revokeAllMutation.mutate(),\n },\n ]);\n }, [L, revokeAllMutation]);\n\n const sessions = sessionsQuery.data ?? [];\n // @ts-expect-error - was used for disabled prop before @expo/ui Button API change\n const _isPending = revokeMutation.isPending || revokeAllMutation.isPending;\n\n return (\n <AuthContainer>\n <View style={{ gap: 24, flex: 1 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.SESSIONS}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.SESSIONS_DESCRIPTION}</Text>\n </View>\n\n {sessionsQuery.isLoading && <ActivityIndicator size=\"large\" />}\n\n {sessionsQuery.error && <ErrorFeedback message={sessionsQuery.error.message} />}\n\n {!sessionsQuery.isLoading && sessions.length === 0 && (\n <Text style={{ textAlign: \"center\", color: \"#6b7280\" }}>{L.NO_OTHER_SESSIONS}</Text>\n )}\n\n {sessions.length > 0 && (\n <FlatList\n data={sessions}\n keyExtractor={(item) => item.token ?? item.id}\n refreshControl={\n <RefreshControl\n refreshing={sessionsQuery.isRefetching}\n onRefresh={() => sessionsQuery.refetch()}\n />\n }\n renderItem={({ item }) => (\n <View\n style={{\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: \"#f3f4f6\",\n }}\n >\n <View style={{ flex: 1, gap: 2 }}>\n <Text style={{ fontSize: 16, fontWeight: \"600\", color: \"#1f2937\" }}>\n {item.userAgent ?? L.UNKNOWN}\n </Text>\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>\n {item.ipAddress ?? \"\"}\n {item.updatedAt ? ` · ${formatLastActive(item.updatedAt, L)}` : \"\"}\n </Text>\n {item.current && (\n <Text style={{ fontSize: 11, fontWeight: \"600\", color: \"#16a34a\" }}>\n {L.CURRENT_DEVICE}\n </Text>\n )}\n </View>\n {!item.current && (\n <Host matchContents>\n <Button\n onPress={() => handleRevoke(item.token ?? item.id)}\n label={L.REVOKE_SESSION}\n />\n </Host>\n )}\n </View>\n )}\n ListFooterComponent={\n sessions.length > 1 ? (\n <View style={{ marginTop: 16 }}>\n <Host matchContents>\n <Button onPress={handleRevokeAll} label={L.REVOKE_ALL_OTHER_SESSIONS} />\n </Host>\n </View>\n ) : null\n }\n />\n )}\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import { NotImplementedError } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport * as Haptics from \"expo-haptics\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { ActivityIndicator, Alert, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { useUser } from \"../../../hooks/queries/use-user\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type TwoFactorSettingsScreenProps = {\n onSuccess?: () => void;\n};\n\ntype TwoFactorStep =\n | { step: \"idle\" }\n | { step: \"confirm-password\" }\n | { step: \"setup\"; totpURI: string; secret: string }\n | { step: \"verify\"; totpURI: string; secret: string }\n | { step: \"backup\"; backupCodes: string[] }\n | { step: \"disabling\" };\n\n/** Settings screen for enabling or disabling TOTP two-factor authentication; shows the secret, verify step, and backup codes. */\nexport function TwoFactorSettingsScreen({ onSuccess }: TwoFactorSettingsScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const { data: user } = useUser();\n const [state, setState] = useState<TwoFactorStep>({ step: \"idle\" });\n const [totpCode, setTotpCode] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [copied, setCopied] = useState(false);\n\n const setupMutation = useMutation<{ totpURI: string; secret: string }, Error, string>({\n mutationFn: async (_pw: string) => {\n // Two-factor setup not fully available in Better Auth 1.5 SDK wrapper\n throw new NotImplementedError({ feature: \"Two-factor setup\" });\n },\n });\n\n const verifyMutation = useMutation<{ backupCodes: string[] }, Error, string>({\n mutationFn: async (_code: string) => {\n // Two-factor verification not fully available in Better Auth 1.5 SDK wrapper\n throw new NotImplementedError({ feature: \"Two-factor verification\" });\n },\n });\n\n const disableMutation = useMutation<void, Error, string>({\n mutationFn: async (_pw: string) => {\n // Two-factor disable not fully available in Better Auth 1.5 SDK wrapper\n throw new NotImplementedError({ feature: \"Two-factor disable\" });\n },\n });\n\n const handleEnable = useCallback(() => {\n if (!password) return;\n setupMutation.mutate(password, {\n onSuccess: (data) => {\n setPassword(\"\");\n setState({\n step: \"setup\",\n totpURI: data?.totpURI ?? \"\",\n secret: data?.secret ?? \"\",\n });\n },\n });\n }, [password, setupMutation]);\n\n const handleVerify = useCallback(() => {\n if (totpCode.length !== 6) return;\n verifyMutation.mutate(totpCode, {\n onSuccess: (data) => {\n const codes = data?.backupCodes ?? [];\n setState({ step: \"backup\", backupCodes: codes });\n onSuccess?.();\n },\n });\n }, [totpCode, verifyMutation, onSuccess]);\n\n const handleCopyBackupCodes = useCallback(async () => {\n if (state.step !== \"backup\") return;\n try {\n await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Haptics may fail on non-iOS\n }\n }, [state]);\n\n const handleDisable = useCallback(() => {\n Alert.alert(L.DISABLE_TWO_FACTOR, L.CONFIRM_DISABLE_2FA, [\n { text: L.CANCEL, style: \"cancel\" },\n {\n text: L.DISABLE,\n style: \"destructive\",\n onPress: () => setState({ step: \"disabling\" }),\n },\n ]);\n }, [L]);\n\n const handleConfirmDisable = useCallback(() => {\n if (!password) return;\n disableMutation.mutate(password, {\n onSuccess: () => {\n setState({ step: \"idle\" });\n setPassword(\"\");\n onSuccess?.();\n },\n });\n }, [password, disableMutation, onSuccess]);\n\n // BA 1.5: twoFactorEnabled not available on user object, default to false\n const isEnabled = (user as Record<string, unknown> | undefined)?.twoFactorEnabled === true;\n const isPending =\n setupMutation.isPending || verifyMutation.isPending || disableMutation.isPending;\n const error = setupMutation.error ?? verifyMutation.error ?? disableMutation.error;\n\n return (\n <AuthContainer>\n <ScrollView contentContainerStyle={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.TWO_FACTOR_PROMPT}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.TWO_FACTOR_DESCRIPTION}</Text>\n </View>\n\n {/* Idle state — show enable or disable */}\n {state.step === \"idle\" && !isEnabled && (\n <View style={{ gap: 16 }}>\n <Text style={{ textAlign: \"center\", color: \"#6b7280\" }}>\n {L.STATUS}: {L.DISABLED}\n </Text>\n <Host matchContents style={{ opacity: isPending ? 0.5 : 1 }}>\n <Button\n onPress={() => {\n if (isPending) return;\n setState({ step: \"confirm-password\" });\n }}\n label={L.ENABLE_TWO_FACTOR}\n />\n </Host>\n </View>\n )}\n\n {/* Password confirmation before enabling 2FA */}\n {state.step === \"confirm-password\" && (\n <View style={{ gap: 16 }}>\n <Text style={{ fontSize: 14, color: \"#374151\", textAlign: \"center\" }}>\n {L.PASSWORD}\n </Text>\n <TextInput\n value={password}\n onChangeText={setPassword}\n placeholder={L.PASSWORD}\n secureTextEntry\n editable={!setupMutation.isPending}\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n {setupMutation.isPending && <ActivityIndicator size=\"small\" />}\n <Host matchContents style={{ opacity: setupMutation.isPending ? 0.5 : 1 }}>\n <Button\n onPress={() => {\n if (setupMutation.isPending) return;\n handleEnable();\n }}\n label={setupMutation.isPending ? L.LOADING : L.ENABLE_TWO_FACTOR}\n />\n </Host>\n <Host matchContents>\n <Button\n onPress={() => {\n setState({ step: \"idle\" });\n setPassword(\"\");\n }}\n label={L.CANCEL}\n />\n </Host>\n </View>\n )}\n\n {state.step === \"idle\" && isEnabled && (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={`${L.STATUS}: ${L.ENABLED}`} />\n <Host matchContents>\n <Button onPress={handleDisable} label={L.DISABLE_TWO_FACTOR} />\n </Host>\n </View>\n )}\n\n {/* Setup step — show secret */}\n {state.step === \"setup\" && (\n <View style={{ gap: 16, alignItems: \"center\" }}>\n <Text style={{ fontSize: 14, color: \"#374151\", textAlign: \"center\" }}>\n {L.SCAN_QR_CODE}\n </Text>\n <View\n style={{\n width: 200,\n height: 200,\n backgroundColor: \"#f3f4f6\",\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 8,\n }}\n >\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>{L.SCAN_QR_CODE}</Text>\n </View>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 12, color: \"#6b7280\" }}>{L.MANUAL_ENTRY_CODE}</Text>\n <Text\n style={{\n fontFamily: \"monospace\",\n fontSize: 16,\n fontWeight: \"600\",\n color: \"#1f2937\",\n letterSpacing: 2,\n }}\n >\n {state.secret}\n </Text>\n </View>\n <Host matchContents>\n <Button\n onPress={() =>\n setState({\n step: \"verify\",\n totpURI: state.totpURI,\n secret: state.secret,\n })\n }\n label={L.NEXT}\n />\n </Host>\n </View>\n )}\n\n {/* Verify step — enter TOTP code */}\n {state.step === \"verify\" && (\n <View style={{ gap: 16 }}>\n <Text style={{ fontSize: 14, color: \"#374151\", textAlign: \"center\" }}>\n {L.ENTER_CODE_TO_VERIFY}\n </Text>\n <TextInput\n value={totpCode}\n onChangeText={setTotpCode}\n placeholder={L.ENTER_TOTP_CODE}\n keyboardType=\"number-pad\"\n maxLength={6}\n editable={!verifyMutation.isPending}\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 24,\n textAlign: \"center\",\n letterSpacing: 8,\n fontFamily: \"monospace\",\n }}\n />\n {verifyMutation.isPending && <ActivityIndicator size=\"small\" />}\n <Host matchContents>\n <Button onPress={handleVerify} label={L.TWO_FACTOR_ACTION} />\n </Host>\n </View>\n )}\n\n {/* Backup codes step */}\n {state.step === \"backup\" && (\n <View style={{ gap: 16 }}>\n <SuccessFeedback message={L.TWO_FACTOR_SETUP_SUCCESS} />\n <Text style={{ fontSize: 14, color: \"#374151\", textAlign: \"center\" }}>\n {L.BACKUP_CODES_DESCRIPTION}\n </Text>\n <View\n style={{\n backgroundColor: \"#f9fafb\",\n borderRadius: 8,\n padding: 16,\n gap: 8,\n }}\n >\n {state.backupCodes.map((code) => (\n <Text\n key={code}\n style={{\n fontFamily: \"monospace\",\n fontSize: 16,\n textAlign: \"center\",\n color: \"#1f2937\",\n }}\n >\n {code}\n </Text>\n ))}\n </View>\n <Host matchContents>\n <Button\n onPress={handleCopyBackupCodes}\n label={copied ? L.BACKUP_CODES_COPIED : L.COPY_BACKUP_CODES}\n />\n </Host>\n <Host matchContents>\n <Button onPress={() => setState({ step: \"idle\" })} label={L.FINISH} />\n </Host>\n </View>\n )}\n\n {/* Disabling step — password confirmation */}\n {state.step === \"disabling\" && (\n <View style={{ gap: 16 }}>\n <Text style={{ fontSize: 14, color: \"#374151\", textAlign: \"center\" }}>\n {L.CONFIRM_DISABLE_2FA}\n </Text>\n <TextInput\n value={password}\n onChangeText={setPassword}\n placeholder={L.PASSWORD}\n secureTextEntry\n editable={!disableMutation.isPending}\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n {disableMutation.isPending && <ActivityIndicator size=\"small\" />}\n <Host matchContents>\n <Button onPress={handleConfirmDisable} label={L.DISABLE_TWO_FACTOR} />\n </Host>\n <Host matchContents>\n <Button onPress={() => setState({ step: \"idle\" })} label={L.CANCEL} />\n </Host>\n </View>\n )}\n\n {error && <ErrorFeedback message={error.message} />}\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </ScrollView>\n </AuthContainer>\n );\n}\n","import { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport * as ImagePicker from \"expo-image-picker\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport {\n ActionSheetIOS,\n ActivityIndicator,\n Alert,\n Image,\n Platform,\n Pressable,\n Text,\n View,\n} from \"react-native\";\nimport { useUser } from \"../../../hooks/queries/use-user\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type UpdateAvatarScreenProps = {\n onSuccess?: () => void;\n};\n\nconst AVATAR_SIZE = 120;\n\nfunction getInitials(name?: string | null): string {\n if (!name) return \"?\";\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n\n/** Settings screen for uploading or removing the current user's avatar using the image library. */\nexport function UpdateAvatarScreen({ onSuccess }: UpdateAvatarScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const queryClient = useQueryClient();\n const { data: user } = useUser();\n const [selectedUri, setSelectedUri] = useState<string | null>(null);\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n\n const uploadMutation = useMutation({\n mutationFn: async (imageUri: string) => {\n const response = await client.updateUser({ image: imageUri });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const deleteMutation = useMutation({\n mutationFn: async () => {\n const response = await client.updateUser({ image: \"\" });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const handlePickImage = useCallback(async () => {\n const result = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: \"images\" as ImagePicker.MediaType,\n allowsEditing: true,\n aspect: [1, 1],\n quality: 0.8,\n });\n if (!result.canceled && result.assets[0]) {\n setSelectedUri(result.assets[0].uri);\n }\n }, []);\n\n const handleDelete = useCallback(() => {\n deleteMutation.mutate(undefined, {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.user() });\n setSuccessMessage(L.AVATAR_DELETED);\n setTimeout(() => setSuccessMessage(null), 3000);\n onSuccess?.();\n },\n });\n }, [deleteMutation, queryClient, L, onSuccess]);\n\n const showActionSheet = useCallback(() => {\n const handleAction = (buttonIndex: number) => {\n if (buttonIndex === 1) {\n handlePickImage();\n } else if (buttonIndex === 2) {\n handleDelete();\n }\n };\n\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n options: [L.CANCEL, L.CLICK_TO_UPLOAD, L.DELETE_AVATAR],\n cancelButtonIndex: 0,\n destructiveButtonIndex: 2,\n },\n handleAction,\n );\n } else {\n Alert.alert(L.AVATAR, undefined, [\n { text: L.CLICK_TO_UPLOAD, onPress: () => handleAction(1) },\n { text: L.DELETE_AVATAR, style: \"destructive\", onPress: () => handleAction(2) },\n { text: L.CANCEL, style: \"cancel\" },\n ]);\n }\n }, [L, handlePickImage, handleDelete]);\n\n const handleUpload = useCallback(() => {\n if (!selectedUri) return;\n uploadMutation.mutate(selectedUri, {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.user() });\n setSelectedUri(null);\n setSuccessMessage(L.AVATAR_UPDATED);\n setTimeout(() => setSuccessMessage(null), 3000);\n onSuccess?.();\n },\n });\n }, [selectedUri, uploadMutation, queryClient, L, onSuccess]);\n\n const displayUri = selectedUri ?? user?.image;\n const isPending = uploadMutation.isPending || deleteMutation.isPending;\n const error = uploadMutation.error ?? deleteMutation.error;\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.AVATAR}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.AVATAR_DESCRIPTION}</Text>\n </View>\n\n {successMessage ? (\n <SuccessFeedback message={successMessage} />\n ) : (\n <View style={{ gap: 16, alignItems: \"center\" }}>\n <Pressable onPress={showActionSheet} disabled={isPending}>\n {displayUri ? (\n <Image\n source={{ uri: displayUri }}\n style={{\n width: AVATAR_SIZE,\n height: AVATAR_SIZE,\n borderRadius: AVATAR_SIZE / 2,\n }}\n />\n ) : (\n <View\n style={{\n width: AVATAR_SIZE,\n height: AVATAR_SIZE,\n borderRadius: AVATAR_SIZE / 2,\n backgroundColor: \"#e5e7eb\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <Text style={{ fontSize: 36, fontWeight: \"700\", color: \"#6b7280\" }}>\n {getInitials(user?.name)}\n </Text>\n </View>\n )}\n </Pressable>\n\n {isPending && <ActivityIndicator size=\"small\" />}\n\n {selectedUri && (\n <Host matchContents>\n <Button onPress={handleUpload} label={L.UPLOAD_AVATAR} />\n </Host>\n )}\n\n {error && <ErrorFeedback message={error.message} />}\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import type { UpdateNameFormData } from \"@atzentis/auth-sdk\";\nimport { RequestFailedError, updateNameSchema } from \"@atzentis/auth-sdk\";\nimport { authKeys } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useUser } from \"../../../hooks/queries/use-user\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type UpdateNameScreenProps = {\n onSuccess?: () => void;\n};\n\n/** Settings screen for updating the current user's display name. */\nexport function UpdateNameScreen({ onSuccess }: UpdateNameScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n const client = useAuthClient();\n const queryClient = useQueryClient();\n const { data: user } = useUser();\n const [showSuccess, setShowSuccess] = useState(false);\n\n const form = useForm<UpdateNameFormData>({\n resolver: zodResolver(updateNameSchema),\n defaultValues: { name: user?.name ?? \"\" },\n mode: \"onChange\",\n });\n\n const updateMutation = useMutation({\n mutationFn: async (data: UpdateNameFormData) => {\n const response = await client.updateUser({ name: data.name });\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? L.REQUEST_FAILED });\n }\n return response.data;\n },\n });\n\n const handleSubmit = useCallback(\n (data: UpdateNameFormData) => {\n updateMutation.mutate(data, {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.user() });\n setShowSuccess(true);\n setTimeout(() => setShowSuccess(false), 3000);\n onSuccess?.();\n },\n });\n },\n [updateMutation, queryClient, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.UPDATE_NAME}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.UPDATE_NAME_DESCRIPTION}</Text>\n </View>\n\n {showSuccess ? (\n <SuccessFeedback message={L.NAME_UPDATED} />\n ) : (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"name\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.NAME}\n placeholder={L.NAME_PLACEHOLDER}\n editable={!updateMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {updateMutation.error && <ErrorFeedback message={updateMutation.error.message} />}\n\n <SubmitButton\n label={L.SAVE}\n loading={updateMutation.isPending}\n loadingLabel={L.LOADING}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import type { UpdateUsernameFormData } from \"@atzentis/auth-sdk\";\nimport { NotImplementedError, updateUsernameSchema } from \"@atzentis/auth-sdk\";\nimport { authKeys } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Text, View } from \"react-native\";\nimport { useUser } from \"../../../hooks/queries/use-user\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { FormInput } from \"../../components/form-input\";\nimport { SubmitButton } from \"../../components/submit-button\";\nimport { SuccessFeedback } from \"../../components/success-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type UpdateUsernameScreenProps = {\n onSuccess?: () => void;\n};\n\n/** Settings screen for updating the account username with server-side validation. */\nexport function UpdateUsernameScreen({ onSuccess }: UpdateUsernameScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const _client = useAuthClient();\n const queryClient = useQueryClient();\n const { data: _user } = useUser();\n const [showSuccess, setShowSuccess] = useState(false);\n\n const form = useForm<UpdateUsernameFormData>({\n resolver: zodResolver(updateUsernameSchema),\n // BA 1.5: username not available on user object\n defaultValues: { username: \"\" },\n mode: \"onChange\",\n });\n\n const updateMutation = useMutation({\n mutationFn: async (_data: UpdateUsernameFormData) => {\n // BA 1.5: username not supported in updateUser API\n throw new NotImplementedError({ feature: \"Username updates\" });\n },\n });\n\n const handleSubmit = useCallback(\n (data: UpdateUsernameFormData) => {\n updateMutation.mutate(data, {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: authKeys.user() });\n setShowSuccess(true);\n setTimeout(() => setShowSuccess(false), 3000);\n onSuccess?.();\n },\n });\n },\n [updateMutation, queryClient, onSuccess],\n );\n\n return (\n <AuthContainer>\n <View style={{ gap: 24 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.CHANGE_USERNAME}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.CHANGE_USERNAME_DESCRIPTION}</Text>\n </View>\n\n {showSuccess ? (\n <SuccessFeedback message={L.USERNAME_UPDATED} />\n ) : (\n <View style={{ gap: 16 }}>\n <Controller\n control={form.control}\n name=\"username\"\n render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => (\n <FormInput\n label={L.USERNAME}\n placeholder={L.USERNAME_PLACEHOLDER}\n autoCapitalize=\"none\"\n editable={!updateMutation.isPending}\n onChangeText={onChange}\n onBlur={onBlur}\n value={value}\n error={error?.message}\n />\n )}\n />\n\n {updateMutation.error && <ErrorFeedback message={updateMutation.error.message} />}\n\n <SubmitButton\n label={L.SAVE}\n loading={updateMutation.isPending}\n loadingLabel={L.LOADING}\n onPress={form.handleSubmit(handleSubmit)}\n />\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n )}\n </View>\n </AuthContainer>\n );\n}\n","import { NotImplementedError } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport {\n ActionSheetIOS,\n ActivityIndicator,\n Alert,\n FlatList,\n Platform,\n RefreshControl,\n Text,\n TextInput,\n View,\n} from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport type { BetterAuthMember } from \"../../../types/better-auth\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type OrganizationMembersScreenProps = {\n organizationId: string;\n isAdmin?: boolean;\n onSuccess?: () => void;\n};\n\n/** Screen displaying organization members with role management and removal actions (admin only). */\nexport function OrganizationMembersScreen({\n organizationId,\n isAdmin = false,\n onSuccess,\n}: OrganizationMembersScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const client = useAuthClient();\n const queryClient = useQueryClient();\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const membersQuery = useQuery<BetterAuthMember[]>({\n queryKey: [\"organizations\", organizationId, \"members\"],\n queryFn: async () => {\n // BA 1.5: organization methods not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Organization member management\" });\n },\n });\n\n const updateRoleMutation = useMutation<void, Error, { memberId: string; role: string }>({\n mutationFn: async (_memberId_role: { memberId: string; role: string }) => {\n // BA 1.5: organization methods not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Organization role updates\" });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: [\"organizations\", organizationId, \"members\"],\n });\n },\n });\n\n const removeMutation = useMutation<void, Error, string>({\n mutationFn: async (_memberId: string) => {\n // BA 1.5: organization methods not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Organization member removal\" });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: [\"organizations\", organizationId, \"members\"],\n });\n onSuccess?.();\n },\n });\n\n const showMemberActionSheet = useCallback(\n (callback: (buttonIndex: number) => void) => {\n const options = [L.ADMIN, L.MEMBER, L.REMOVE_MEMBER, L.CANCEL];\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n options,\n cancelButtonIndex: 3,\n destructiveButtonIndex: 2,\n },\n callback,\n );\n } else {\n Alert.alert(L.MANAGE_ROLE, undefined, [\n { text: L.ADMIN, onPress: () => callback(0) },\n { text: L.MEMBER, onPress: () => callback(1) },\n { text: L.REMOVE_MEMBER, style: \"destructive\", onPress: () => callback(2) },\n { text: L.CANCEL, style: \"cancel\" },\n ]);\n }\n },\n [L],\n );\n\n const handleMemberAction = useCallback(\n (member: BetterAuthMember) => {\n if (!isAdmin) return;\n\n showMemberActionSheet((buttonIndex) => {\n const roleMap: Record<number, string> = { 0: \"admin\", 1: \"member\" };\n if (buttonIndex === 2) {\n Alert.alert(L.REMOVE_MEMBER, L.CONFIRM_REMOVE_MEMBER, [\n { text: L.CANCEL, style: \"cancel\" },\n {\n text: L.REMOVE,\n style: \"destructive\",\n onPress: () => removeMutation.mutate(member.id),\n },\n ]);\n } else if (roleMap[buttonIndex]) {\n updateRoleMutation.mutate({\n memberId: member.id,\n role: roleMap[buttonIndex],\n });\n }\n });\n },\n [isAdmin, L, removeMutation, updateRoleMutation, showMemberActionSheet],\n );\n\n const allMembers = membersQuery.data ?? [];\n const filteredMembers = searchQuery\n ? allMembers.filter(\n (m) =>\n (m.user?.name ?? \"\").toLowerCase().includes(searchQuery.toLowerCase()) ||\n (m.user?.email ?? \"\").toLowerCase().includes(searchQuery.toLowerCase()),\n )\n : allMembers;\n\n // @ts-expect-error - was used for disabled prop before @expo/ui Button API change\n const _isPending = updateRoleMutation.isPending || removeMutation.isPending;\n const error = updateRoleMutation.error ?? removeMutation.error;\n\n return (\n <AuthContainer>\n <View style={{ gap: 24, flex: 1 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>{L.MEMBERS}</Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.MEMBERS_SUBTITLE}</Text>\n </View>\n\n {allMembers.length > 10 && (\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={L.MEMBER_EMAIL_PLACEHOLDER}\n autoCapitalize=\"none\"\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n )}\n\n {membersQuery.isLoading && <ActivityIndicator size=\"large\" />}\n\n {membersQuery.error && <ErrorFeedback message={membersQuery.error.message} />}\n\n {!membersQuery.isLoading && filteredMembers.length === 0 && (\n <Text style={{ textAlign: \"center\", color: \"#6b7280\" }}>{L.NO_MEMBERS}</Text>\n )}\n\n {filteredMembers.length > 0 && (\n <FlatList\n data={filteredMembers}\n keyExtractor={(item) => item.id}\n refreshControl={\n <RefreshControl\n refreshing={membersQuery.isRefetching}\n onRefresh={() => membersQuery.refetch()}\n />\n }\n renderItem={({ item }) => {\n const isOwner = item.role === \"owner\";\n return (\n <View\n style={{\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: \"#f3f4f6\",\n }}\n >\n <View style={{ flex: 1, gap: 2 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Text\n style={{\n fontSize: 16,\n fontWeight: isOwner ? \"700\" : \"500\",\n color: \"#1f2937\",\n }}\n >\n {item.user?.name ?? L.UNKNOWN}\n </Text>\n {isOwner && (\n <Text style={{ fontSize: 11, fontWeight: \"600\", color: \"#f59e0b\" }}>\n {L.OWNER}\n </Text>\n )}\n </View>\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>{item.user?.email ?? \"\"}</Text>\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>\n {L.ROLE}: {item.role}\n </Text>\n </View>\n {isAdmin && !isOwner && (\n <Host matchContents>\n <Button onPress={() => handleMemberAction(item)} label={L.MANAGE_ROLE} />\n </Host>\n )}\n </View>\n );\n }}\n />\n )}\n\n {error && <ErrorFeedback message={error.message} />}\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import { NotImplementedError } from \"@atzentis/auth-sdk\";\nimport { Button, Host } from \"@expo/ui/swift-ui\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"expo-router\";\nimport { useCallback, useState } from \"react\";\nimport { ActivityIndicator, FlatList, RefreshControl, Text, TextInput, View } from \"react-native\";\nimport { useAuthClient } from \"../../../hooks/use-auth-client\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport type { BetterAuthOrganization } from \"../../../types/better-auth\";\nimport { ErrorFeedback } from \"../../components/error-feedback\";\nimport { AuthContainer } from \"../../layouts/auth-container\";\n\nexport type OrganizationSwitcherScreenProps = {\n currentOrgId?: string;\n onSwitch?: (orgId: string) => void;\n};\n\n/** Screen listing all organizations the user belongs to; selecting one sets it as the active organization. */\nexport function OrganizationSwitcherScreen({\n currentOrgId,\n onSwitch,\n}: OrganizationSwitcherScreenProps) {\n const { localization: L } = useAuthLocalization();\n const router = useRouter();\n // @ts-expect-error - stub for BA 1.5 compat\n const client = useAuthClient();\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const orgsQuery = useQuery<BetterAuthOrganization[]>({\n queryKey: [\"organizations\", \"list\"],\n queryFn: async () => {\n // BA 1.5: organization methods not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Organization listing\" });\n },\n });\n\n const setActiveMutation = useMutation<void, Error, string>({\n mutationFn: async (_orgId: string) => {\n // BA 1.5: organization methods not available in SDK wrapper\n throw new NotImplementedError({ feature: \"Organization switching\" });\n },\n });\n\n const handleSelect = useCallback(\n (orgId: string) => {\n setActiveMutation.mutate(orgId, {\n onSuccess: () => {\n onSwitch?.(orgId);\n router.back();\n },\n });\n },\n [setActiveMutation, onSwitch, router],\n );\n\n const allOrgs = orgsQuery.data ?? [];\n const filteredOrgs = searchQuery\n ? allOrgs.filter((org) => (org.name ?? \"\").toLowerCase().includes(searchQuery.toLowerCase()))\n : allOrgs;\n\n return (\n <AuthContainer>\n <View style={{ gap: 24, flex: 1 }}>\n <View style={{ gap: 4, alignItems: \"center\" }}>\n <Text style={{ fontSize: 24, fontWeight: \"700\", color: \"#1f2937\" }}>\n {L.ORGANIZATIONS}\n </Text>\n <Text style={{ fontSize: 14, color: \"#6b7280\" }}>{L.SELECT_ORGANIZATION}</Text>\n </View>\n\n {allOrgs.length > 5 && (\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={L.SEARCH_ORGANIZATIONS}\n autoCapitalize=\"none\"\n style={{\n borderWidth: 1,\n borderColor: \"#d1d5db\",\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n }}\n />\n )}\n\n {orgsQuery.isLoading && <ActivityIndicator size=\"large\" />}\n\n {orgsQuery.error && <ErrorFeedback message={orgsQuery.error.message} />}\n\n {!orgsQuery.isLoading && filteredOrgs.length === 0 && (\n <Text style={{ textAlign: \"center\", color: \"#6b7280\" }}>{L.NO_ORGANIZATIONS}</Text>\n )}\n\n {filteredOrgs.length > 0 && (\n <FlatList\n data={filteredOrgs}\n keyExtractor={(item) => item.id}\n refreshControl={\n <RefreshControl\n refreshing={orgsQuery.isRefetching}\n onRefresh={() => orgsQuery.refetch()}\n />\n }\n renderItem={({ item }) => {\n const isCurrent = item.id === currentOrgId;\n return (\n <View\n style={{\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: \"#f3f4f6\",\n }}\n >\n <View style={{ flex: 1, gap: 2 }}>\n <Text\n style={{\n fontSize: 16,\n fontWeight: isCurrent ? \"700\" : \"500\",\n color: \"#1f2937\",\n }}\n >\n {item.name}\n </Text>\n {item.members && (\n <Text style={{ fontSize: 12, color: \"#9ca3af\" }}>\n {L.MEMBER_COUNT.replace(\"{{count}}\", String(item.members.length ?? 0))}\n </Text>\n )}\n </View>\n {isCurrent ? (\n <Text style={{ fontSize: 14, color: \"#16a34a\", fontWeight: \"600\" }}>✓</Text>\n ) : (\n <Host matchContents>\n <Button onPress={() => handleSelect(item.id)} label={L.SELECT_ORGANIZATION} />\n </Host>\n )}\n </View>\n );\n }}\n />\n )}\n\n <View style={{ alignItems: \"center\", marginTop: 8 }}>\n <Host matchContents>\n <Button onPress={() => router.back()} label={L.GO_BACK} />\n </Host>\n </View>\n </View>\n </AuthContainer>\n );\n}\n","import { useRouter } from \"expo-router\";\nimport { useCallback } from \"react\";\n\nexport function useAuthRedirect() {\n const router = useRouter();\n\n const redirectToSignIn = useCallback(\n (returnUrl?: string) => {\n if (returnUrl) {\n router.replace(`/sign-in?returnUrl=${encodeURIComponent(returnUrl)}`);\n } else {\n router.replace(\"/sign-in\");\n }\n },\n [router],\n );\n\n const redirectToSignUp = useCallback(\n (returnUrl?: string) => {\n if (returnUrl) {\n router.replace(`/sign-up?returnUrl=${encodeURIComponent(returnUrl)}`);\n } else {\n router.replace(\"/sign-up\");\n }\n },\n [router],\n );\n\n return { redirectToSignIn, redirectToSignUp };\n}\n","import { RequestFailedError } from \"@atzentis/auth-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport * as LocalAuthentication from \"expo-local-authentication\";\n\ntype BiometricAvailability = {\n hasHardware: boolean;\n isEnrolled: boolean;\n supportedTypes: number[];\n};\n\n/**\n * Hook for biometric authentication (Face ID / Touch ID / fingerprint).\n *\n * @returns An object with:\n * - `checkAvailability` — async function that resolves with `{ hasHardware, isEnrolled, supportedTypes }`.\n * - `authenticate` — TanStack mutation that accepts a `promptMessage` string and triggers the system biometric prompt.\n *\n * @example\n * ```tsx\n * const { checkAvailability, authenticate } = useBiometric();\n * const available = await checkAvailability();\n * if (available.isEnrolled) {\n * authenticate.mutate(\"Authenticate to sign in\");\n * }\n * ```\n */\nexport function useBiometric() {\n const checkAvailability = async (): Promise<BiometricAvailability> => {\n const hasHardware = await LocalAuthentication.hasHardwareAsync();\n const isEnrolled = await LocalAuthentication.isEnrolledAsync();\n const supportedTypes = await LocalAuthentication.supportedAuthenticationTypesAsync();\n return { hasHardware, isEnrolled, supportedTypes };\n };\n\n const authenticate = useMutation({\n mutationFn: async (promptMessage: string) => {\n const result = await LocalAuthentication.authenticateAsync({\n promptMessage,\n fallbackLabel: \"\",\n cancelLabel: \"Cancel\",\n });\n if (!result.success) {\n throw new RequestFailedError({ message: result.error ?? \"BIOMETRIC_FAILED_ERROR\" });\n }\n return result;\n },\n });\n\n return { checkAvailability, authenticate };\n}\n","import { RequestFailedError, authKeys } from \"@atzentis/auth-sdk\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useAuthClient } from \"../use-auth-client\";\n\n/**\n * Mutation hook for signing out the current user.\n *\n * On success, sets user and session cache to `null` and invalidates all\n * session-related queries so the UI reflects the signed-out state immediately.\n *\n * @returns A TanStack `UseMutationResult` — call `.mutate()` with no arguments to sign out.\n */\nexport function useLogout() {\n const client = useAuthClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async () => {\n const response = await client.signOut();\n if (response.error) {\n throw new RequestFailedError({ message: response.error.message ?? \"Logout failed\" });\n }\n return response.data;\n },\n onSuccess: () => {\n queryClient.setQueryData(authKeys.user(), null);\n queryClient.setQueryData(authKeys.session(), null);\n queryClient.invalidateQueries({ queryKey: authKeys.sessions() });\n },\n });\n}\n","/**\n * @atzentis/auth-expo - React Native/Expo integration for Atzentis Auth SDK\n */\n\n// Layouts\nexport { AuthContainer } from \"./ui/layouts\";\n\n// Components\nexport {\n AuthGate,\n ErrorFeedback,\n FormInput,\n FormPasswordInput,\n OAuthButton,\n ProtectedScreen,\n SuccessFeedback,\n SubmitButton,\n} from \"./ui/components\";\nexport type { AuthGateProps, OAuthButtonProps, ProtectedScreenProps } from \"./ui/components\";\n\n// Screens\nexport {\n AuthView,\n ChangeEmailScreen,\n ChangePasswordScreen,\n DeleteAccountScreen,\n EmailVerificationScreen,\n ForgotPasswordScreen,\n LoginScreen,\n MagicLinkScreen,\n OrganizationMembersScreen,\n OrganizationSwitcherScreen,\n PhoneLoginScreen,\n ResetPasswordScreen,\n SessionsScreen,\n SignupScreen,\n TwoFactorScreen,\n TwoFactorSettingsScreen,\n UpdateAvatarScreen,\n UpdateNameScreen,\n UpdateUsernameScreen,\n} from \"./ui/screens\";\nexport type {\n AuthRoute,\n AuthViewProps,\n ChangeEmailScreenProps,\n ChangePasswordScreenProps,\n DeleteAccountScreenProps,\n EmailVerificationScreenProps,\n ForgotPasswordScreenProps,\n LoginScreenProps,\n MagicLinkScreenProps,\n OrganizationMembersScreenProps,\n OrganizationSwitcherScreenProps,\n PhoneLoginScreenProps,\n ResetPasswordScreenProps,\n SessionsScreenProps,\n SignupScreenProps,\n TwoFactorScreenProps,\n TwoFactorSettingsScreenProps,\n UpdateAvatarScreenProps,\n UpdateNameScreenProps,\n UpdateUsernameScreenProps,\n} from \"./ui/screens\";\n\n// Hooks\nexport {\n useAuthClient,\n useAuthLocalization,\n useAuthRedirect,\n useBiometric,\n useLogin,\n useLogout,\n useRequestPasswordReset,\n useResetPassword,\n useSession,\n useSignup,\n useUser,\n} from \"./hooks\";\n\n// Provider\nexport { AuthProvider } from \"./providers\";\n\nexport const VERSION = \"0.1.0\";\n"]}
|