diff --git a/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/6-congrats/page.tsx b/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/6-congrats/page.tsx index 6a383460c9..6fcc40a53f 100644 --- a/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/6-congrats/page.tsx +++ b/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/6-congrats/page.tsx @@ -1,13 +1,15 @@ "use client"; -import { useEffect, useRef, useState } from "react"; +import { useBackendAPI } from "@/lib/autogpt-server-api/context"; import { cn } from "@/lib/utils"; import { useRouter } from "next/navigation"; -import { useOnboarding } from "../../../../providers/onboarding/onboarding-provider"; import * as party from "party-js"; +import { useEffect, useRef, useState } from "react"; +import { useOnboarding } from "../../../../providers/onboarding/onboarding-provider"; export default function Page() { const { completeStep } = useOnboarding(7, "AGENT_INPUT"); const router = useRouter(); + const api = useBackendAPI(); const [showText, setShowText] = useState(false); const [showSubtext, setShowSubtext] = useState(false); const divRef = useRef(null); @@ -31,10 +33,28 @@ export default function Page() { setShowSubtext(true); }, 500); - const timer2 = setTimeout(() => { - // Mark CONGRATS as complete - /onboarding page will handle adding agent to library and redirect + const timer2 = setTimeout(async () => { completeStep("CONGRATS"); - router.push("/onboarding"); + + try { + const onboarding = await api.getUserOnboarding(); + if (onboarding?.selectedStoreListingVersionId) { + try { + const libraryAgent = await api.addMarketplaceAgentToLibrary( + onboarding.selectedStoreListingVersionId, + ); + router.replace(`/library/agents/${libraryAgent.id}`); + } catch (error) { + console.error("Failed to add agent to library:", error); + router.replace("/library"); + } + } else { + router.replace("/library"); + } + } catch (error) { + console.error("Failed to get onboarding data:", error); + router.replace("/library"); + } }, 3000); return () => { @@ -42,7 +62,7 @@ export default function Page() { clearTimeout(timer1); clearTimeout(timer2); }; - }, [completeStep, router]); + }, [completeStep, router, api]); return (
diff --git a/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/page.tsx b/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/page.tsx index c7a726f55f..f404c62d75 100644 --- a/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/page.tsx +++ b/autogpt_platform/frontend/src/app/(no-navbar)/onboarding/page.tsx @@ -26,24 +26,6 @@ export default function OnboardingPage() { return; } - // Handle CONGRATS - add agent to library and redirect - if (onboarding.completedSteps.includes("CONGRATS")) { - if (onboarding.selectedStoreListingVersionId) { - try { - const libraryAgent = await api.addMarketplaceAgentToLibrary( - onboarding.selectedStoreListingVersionId, - ); - router.replace(`/library/agents/${libraryAgent.id}`); - } catch (error) { - console.error("Failed to add agent to library:", error); - router.replace("/library"); - } - } else { - router.replace("/library"); - } - return; - } - // Redirect to appropriate step based on completed steps if (onboarding.completedSteps.includes("AGENT_INPUT")) { router.push("/onboarding/5-run"); diff --git a/autogpt_platform/frontend/src/app/(platform)/login/actions.ts b/autogpt_platform/frontend/src/app/(platform)/login/actions.ts new file mode 100644 index 0000000000..4d1cbef8a7 --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/login/actions.ts @@ -0,0 +1,67 @@ +"use server"; + +import BackendAPI from "@/lib/autogpt-server-api"; +import { getServerSupabase } from "@/lib/supabase/server/getServerSupabase"; +import { verifyTurnstileToken } from "@/lib/turnstile"; +import { environment } from "@/services/environment"; +import { loginFormSchema } from "@/types/auth"; +import * as Sentry from "@sentry/nextjs"; +import { shouldShowOnboarding } from "../../api/helpers"; + +export async function login( + email: string, + password: string, + turnstileToken?: string, +) { + try { + const parsed = loginFormSchema.safeParse({ email, password }); + + if (!parsed.success) { + return { + success: false, + error: "Invalid email or password", + }; + } + + const captchaOk = await verifyTurnstileToken(turnstileToken ?? "", "login"); + if (!captchaOk && !environment.isVercelPreview()) { + return { + success: false, + error: "CAPTCHA verification failed. Please try again.", + }; + } + + const supabase = await getServerSupabase(); + if (!supabase) { + return { + success: false, + error: "Authentication service unavailable", + }; + } + + const { error } = await supabase.auth.signInWithPassword(parsed.data); + if (error) { + return { + success: false, + error: error.message, + }; + } + + const api = new BackendAPI(); + await api.createUser(); + + const onboarding = await shouldShowOnboarding(); + + return { + success: true, + onboarding, + next: onboarding ? "/onboarding" : "/", + }; + } catch (err) { + Sentry.captureException(err); + return { + success: false, + error: "Failed to login. Please try again.", + }; + } +} diff --git a/autogpt_platform/frontend/src/app/(platform)/login/page.tsx b/autogpt_platform/frontend/src/app/(platform)/login/page.tsx index c15a3b5b02..e0aa59416a 100644 --- a/autogpt_platform/frontend/src/app/(platform)/login/page.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/login/page.tsx @@ -20,6 +20,7 @@ export default function LoginPage() { turnstile, captchaKey, isLoading, + isGoogleLoading, isCloudEnv, isUserLoading, showNotAllowedModal, @@ -100,6 +101,7 @@ export default function LoginPage() {