'use client'; import { useEffect, useState } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; export default function MicrosoftCallbackPage() { const router = useRouter(); const searchParams = useSearchParams(); const [status, setStatus] = useState('Processing authentication...'); const [error, setError] = useState(null); const [errorDetails, setErrorDetails] = useState(null); useEffect(() => { async function handleCallback() { try { // Extract code and state from URL const code = searchParams.get('code'); const state = searchParams.get('state'); const errorMsg = searchParams.get('error'); const errorDescription = searchParams.get('error_description'); if (errorMsg) { setError(`Authentication error: ${errorMsg}`); if (errorDescription) { // URL decode the error description const decodedErrorDescription = decodeURIComponent(errorDescription); setErrorDetails(decodedErrorDescription); console.error('Auth error details:', decodedErrorDescription); } return; } if (!code || !state) { setError('Missing required parameters'); return; } setStatus('Authentication successful. Exchanging code for tokens...'); // Send code to our API to exchange for tokens const response = await fetch('/api/courrier/microsoft/callback', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ code, state }), }); const data = await response.json(); if (!response.ok) { setError(data.error || 'Failed to process authentication'); if (data.details) { setErrorDetails(data.details); } return; } setStatus('Account connected successfully!'); // Redirect back to email client after a short delay setTimeout(() => { router.push('/courrier'); }, 2000); } catch (err) { setError('An unexpected error occurred'); console.error('Callback processing error:', err); } } handleCallback(); }, [router, searchParams]); return (

Microsoft Account Connection

{error ? (

Error

{error}

{errorDetails && (

{errorDetails}

)}
) : (

{status}

)}
); }