import * as Google from "expo-auth-session/providers/google"; import { router } from "expo-router"; import { useCallback, useEffect } from "react"; import { Image, Text, View, Alert } from "react-native"; import { icons } from "@/constants"; import { googleAuth } from "@/lib/auth"; import { useSession } from "@/lib/session"; import { CustomButton } from "./custom-button"; type OAuthProps = { title: string; }; export const OAuth = ({ title }: OAuthProps) => { const { setSession } = useSession(); const [request, response, promptAsync] = Google.useIdTokenAuthRequest({ clientId: process.env.EXPO_PUBLIC_GOOGLE_AUTH_WEB_CLIENT_ID, iosClientId: process.env.EXPO_PUBLIC_GOOGLE_AUTH_IOS_CLIENT_ID, androidClientId: process.env.EXPO_PUBLIC_GOOGLE_AUTH_ANDROID_CLIENT_ID, }); useEffect(() => { if (response?.type !== "success") return; const idToken = response.params?.id_token; if (!idToken) { Alert.alert("Google sign-in failed", "No token returned. Try again."); return; } void (async () => { try { await setSession(await googleAuth(idToken)); router.replace("/"); } catch (err: any) { console.error("OAuth error", err); Alert.alert( "Google sign-in failed", err?.message || "Please try again.", ); } })(); }, [response, setSession]); const handleGoogleOAuth = useCallback(() => { void promptAsync(); }, [promptAsync]); return ( Or ( Google logo )} bgVariant="outline" textVariant="primary" onPress={handleGoogleOAuth} disabled={!request} /> ); };