diff --git a/apps/web/src/app/auth/[provider]/success/oauth-success-callback.tsx b/apps/web/src/app/auth/[provider]/success/oauth-success-callback.tsx
index d28f85ad..823bb817 100644
--- a/apps/web/src/app/auth/[provider]/success/oauth-success-callback.tsx
+++ b/apps/web/src/app/auth/[provider]/success/oauth-success-callback.tsx
@@ -1,7 +1,8 @@
'use client'
import { sanitizeSearchParams } from '@agentic/platform-core'
-import { redirect, RedirectType, useSearchParams } from 'next/navigation'
+import { useSearchParams } from 'next/navigation'
+import { useRouter } from 'next/router'
import { useEffect } from 'react'
import {
@@ -22,6 +23,7 @@ export function OAuthSuccessCallback({
const code = searchParams.get('code')
const ctx = useUnauthenticatedAgentic()
const nextUrl = useNextUrl()
+ const router = useRouter()
useEffect(() => {
;(async function () {
@@ -40,15 +42,14 @@ export function OAuthSuccessCallback({
} catch (err) {
await toastError(err, { label: 'Auth error' })
- return redirect(
- `/login?${sanitizeSearchParams({ next: nextUrl }).toString()}`,
- RedirectType.replace
+ return router.replace(
+ `/login?${sanitizeSearchParams({ next: nextUrl }).toString()}`
)
}
- return redirect(nextUrl || '/app', RedirectType.replace)
+ return router.replace(nextUrl || '/app')
})()
- }, [code, ctx, nextUrl])
+ }, [code, ctx, nextUrl, router])
return
}
diff --git a/apps/web/src/app/login/login-form.tsx b/apps/web/src/app/login/login-form.tsx
index d4f26d47..8dce21fc 100644
--- a/apps/web/src/app/login/login-form.tsx
+++ b/apps/web/src/app/login/login-form.tsx
@@ -4,7 +4,7 @@ import { sanitizeSearchParams } from '@agentic/platform-core'
import { isValidEmail, isValidPassword } from '@agentic/platform-validators'
import { useForm } from '@tanstack/react-form'
import { Loader2Icon } from 'lucide-react'
-import { redirect, RedirectType } from 'next/navigation'
+import { useRouter } from 'next/router'
import { useCallback } from 'react'
import { z } from 'zod'
@@ -22,14 +22,15 @@ import { cn } from '@/lib/utils'
export function LoginForm() {
const ctx = useUnauthenticatedAgentic()
const nextUrl = useNextUrl()
+ const router = useRouter()
const onAuthWithGitHub = useCallback(async () => {
const redirectUri = `${globalThis.location.origin}/auth/github/success?${sanitizeSearchParams({ next: nextUrl }).toString()}`
const url = await ctx!.api.initAuthFlowWithGitHub({ redirectUri })
- redirect(url, RedirectType.push)
- }, [ctx, nextUrl])
+ void router.push(url)
+ }, [ctx, nextUrl, router])
const form = useForm({
defaultValues: {
@@ -58,7 +59,7 @@ export function LoginForm() {
return
}
- return redirect(nextUrl || '/app', RedirectType.push)
+ return router.push(nextUrl || '/app')
}
})
diff --git a/apps/web/src/app/logout/page.tsx b/apps/web/src/app/logout/page.tsx
index 43338fc9..a13d0259 100644
--- a/apps/web/src/app/logout/page.tsx
+++ b/apps/web/src/app/logout/page.tsx
@@ -1,6 +1,5 @@
'use client'
-// import { redirect, RedirectType } from 'next/navigation'
import { useEffect } from 'react'
import { useAuthenticatedAgentic } from '@/components/agentic-provider'
diff --git a/apps/web/src/app/marketplace/projects/[namespace]/[project-name]/marketplace-project-index.tsx b/apps/web/src/app/marketplace/projects/[namespace]/[project-name]/marketplace-project-index.tsx
index 0abf87e3..78d6b621 100644
--- a/apps/web/src/app/marketplace/projects/[namespace]/[project-name]/marketplace-project-index.tsx
+++ b/apps/web/src/app/marketplace/projects/[namespace]/[project-name]/marketplace-project-index.tsx
@@ -2,7 +2,8 @@
import { assert, omit, sanitizeSearchParams } from '@agentic/platform-core'
import { Loader2Icon } from 'lucide-react'
-import { redirect, useSearchParams } from 'next/navigation'
+import { useSearchParams } from 'next/navigation'
+import { useRouter } from 'next/router'
import { useCallback, useEffect, useRef, useState } from 'react'
import { useAgentic } from '@/components/agentic-provider'
@@ -22,6 +23,7 @@ export function MarketplaceProjectIndex({
const plan = searchParams.get('plan')
const [isLoadingStripeCheckoutForPlan, setIsLoadingStripeCheckoutForPlan] =
useState(null)
+ const router = useRouter()
// Load the public project
const {
@@ -70,7 +72,7 @@ export function MarketplaceProjectIndex({
)
if (!ctx.isAuthenticated) {
- return redirect(
+ return router.push(
`/signup?${sanitizeSearchParams({
next: `/marketplace/projects/${projectIdentifier}?checkout=true&plan=${pricingPlanSlug}`
}).toString()}`
@@ -94,9 +96,9 @@ export function MarketplaceProjectIndex({
setIsLoadingStripeCheckoutForPlan(null)
}
- redirect(checkoutSession.url)
+ return router.push(checkoutSession.url)
},
- [ctx, projectIdentifier, project]
+ [ctx, projectIdentifier, project, router]
)
const hasInitializedCheckoutFromSearchParams = useRef(false)
diff --git a/apps/web/src/app/signup/signup-form.tsx b/apps/web/src/app/signup/signup-form.tsx
index 8d2d3512..c455c02f 100644
--- a/apps/web/src/app/signup/signup-form.tsx
+++ b/apps/web/src/app/signup/signup-form.tsx
@@ -8,7 +8,7 @@ import {
} from '@agentic/platform-validators'
import { useForm } from '@tanstack/react-form'
import { Loader2Icon } from 'lucide-react'
-import { redirect, RedirectType } from 'next/navigation'
+import { useRouter } from 'next/router'
import { useCallback } from 'react'
import { z } from 'zod'
@@ -26,13 +26,14 @@ import { cn } from '@/lib/utils'
export function SignupForm() {
const ctx = useUnauthenticatedAgentic()
const nextUrl = useNextUrl()
+ const router = useRouter()
const onAuthWithGitHub = useCallback(async () => {
const redirectUri = `${globalThis.location.origin}/auth/github/success?${sanitizeSearchParams({ next: nextUrl }).toString()}`
const url = await ctx!.api.initAuthFlowWithGitHub({ redirectUri })
- redirect(url, RedirectType.push)
- }, [ctx, nextUrl])
+ return router.push(url)
+ }, [ctx, nextUrl, router])
const form = useForm({
defaultValues: {
@@ -71,7 +72,7 @@ export function SignupForm() {
return
}
- return redirect(nextUrl || '/app', RedirectType.push)
+ return router.push(nextUrl || '/app')
}
})
diff --git a/apps/web/src/components/agentic-provider.tsx b/apps/web/src/components/agentic-provider.tsx
index e561b242..eed42b36 100644
--- a/apps/web/src/components/agentic-provider.tsx
+++ b/apps/web/src/components/agentic-provider.tsx
@@ -5,12 +5,8 @@ import {
type AuthSession
} from '@agentic/platform-api-client'
import { sanitizeSearchParams } from '@agentic/platform-core'
-import {
- redirect,
- RedirectType,
- usePathname,
- useSearchParams
-} from 'next/navigation'
+import { usePathname, useSearchParams } from 'next/navigation'
+import { useRouter } from 'next/router'
import {
createContext,
type ReactNode,
@@ -131,10 +127,12 @@ export function useAgentic(): AgenticContextType | undefined {
export function useUnauthenticatedAgentic(): AgenticContextType | undefined {
const ctx = useAgentic()
const nextUrl = useNextUrl() || '/app'
+ const router = useRouter()
if (ctx && ctx.isAuthenticated) {
console.log('REQUIRES NO AUTHENTICATION: redirecting to', nextUrl)
- return redirect(nextUrl, RedirectType.replace)
+ void router.replace(nextUrl)
+ return
}
return ctx
@@ -143,21 +141,23 @@ export function useUnauthenticatedAgentic(): AgenticContextType | undefined {
export function useAuthenticatedAgentic(): AgenticContextType | undefined {
const ctx = useAgentic()
const pathname = usePathname()
+ const router = useRouter()
if (ctx && !ctx.isAuthenticated) {
if (pathname === '/logout') {
console.log('LOGOUT SUCCESS: redirecting to /')
- return redirect('/', RedirectType.replace)
+ void router.replace('/')
+ return
}
console.log('REQUIRES AUTHENTICATION: redirecting to /login', {
next: pathname
})
- return redirect(
- `/login?${sanitizeSearchParams({ next: pathname }).toString()}`,
- RedirectType.replace
+ void router.replace(
+ `/login?${sanitizeSearchParams({ next: pathname }).toString()}`
)
+ return
}
return ctx