![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.quebec/private_html/src/pages/ |
import '@/styles/globals.css';
import type { AppProps } from 'next/app';
import { SessionProvider, useSession } from 'next-auth/react';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import ErrorBoundary from '@/components/ErrorBoundary';
import { ThemeProvider } from '@/context/ThemeContext';
import ThemeCustomizer from '@/components/ThemeCustomizer';
import Layout from '@/components/Layout';
// import { ChakraProvider } from '@chakra-ui/react';
import { Toaster } from 'react-hot-toast';
import { registerServiceWorker } from '@/utils/serviceWorker';
import Head from 'next/head';
import AuthenticatedWebSocketProvider from '@/components/AuthenticatedWebSocketProvider';
import { PublicNotificationProvider } from '@/context/PublicNotificationContext';
import { LanguageProvider } from '@/context/LanguageContext';
import CaseUpdateBanner from '@/components/CaseUpdateBanner';
import SmartEngagement from '@/components/SmartEngagement';
import { setupAutoSessionCleanup } from '@/utils/auto-session-cleanup';
// import IncomingCallNotification from '@/components/IncomingCallNotification'; // Removed for now
// import SimpleVideoCall from '@/components/SimpleVideoCall'; // Removed for now
// Suppress CSS warnings in browser console
const suppressCssWarnings = () => {
if (typeof window !== 'undefined') {
const originalWarn = console.warn;
const originalError = console.error;
const cssWarningPatterns = [
/Unknown property/,
/Unknown pseudo-class/,
/Unknown pseudo-element/,
/Error in parsing value/,
/Ruleset ignored due to bad selector/,
/Declaration dropped/,
/:host selector/,
/-moz-/,
/-webkit-/,
/-ms-/,
/Error in parsing value for 'transition'/,
/Image with src.*has either width or height modified/,
/Facebook SDK is being shimmed/,
/A resource is blocked by OpaqueResponseBlocking/,
/The Notification permission may only be requested/,
/ReferenceError: a is not defined/,
/HMR.*Invalid message/,
/Firefox can't establish a connection/,
/Download the React DevTools/,
/Current user role:/,
/Role type:/,
/Role comparison with/,
/Show all roles:/,
/Full session user object:/,
/Final grouped navigation:/,
/useImpersonation - Session state changed/,
/๐ Impersonation check:/,
/๐ Starting impersonation request/,
/๐ Effective role for impersonation:/,
/๐ Current session:/,
/๐ Response received:/,
/โ Impersonation failed:/,
/[WebSocket] ๐ Connection effect triggered/,
/[WebSocket] ๐ Connecting immediately/,
/[WebSocket] ๐ Connecting for user:/,
/[WebSocket] ๐งน Cleanup completed/,
/[WebSocket] โ Connection error/,
/[WebSocket] ๐ Disconnected/,
/[WebSocket] ๐ Reconnecting/,
/[WebSocket] ๐ Connection already exists/,
/[WebSocket] Ready State Check/,
/[WebSocket] โ
Connected for/,
/[WebSocket] ๐ Received ping/,
/\[WebSocket\].*/,
/\[AdminDashboard\].*/,
/\[GroupChat\].*/,
/Private chat WebSocket/,
/Direct message WebSocket/,
/๐ก WebSocket/,
/๐ก Sent.*signal via WebSocket/,
/โ
Impersonation event logged:/,
/\[IMPERSONATE\].*/,
/โ
Impersonation success/,
/โ Impersonation error:/,
/๐ง Unique constraint violation/,
/โ Retry failed:/,
/โ ๏ธ Error cleaning up expired sessions/,
/โ ๏ธ Found existing active session/,
/๐ App - Refreshing session on page load/,
/Refreshing page data due to server-side change/,
/๐จ Performance issues detected:/,
/Too many WebSocket connections/,
/๐ WebSocket connections:/,
/๐ Performance Report/,
/๐จ Last render time:/,
/๐พ Memory usage:/,
/โฐ Active timers:/,
/โ ๏ธ Slow render detected/,
/โฐ High number of active timers/
];
console.warn = function(...args) {
const message = args.join(' ');
if (cssWarningPatterns.some(pattern => pattern.test(message))) {
return; // Suppress CSS warnings
}
originalWarn.apply(console, args);
};
console.error = function(...args) {
const message = args.join(' ');
if (cssWarningPatterns.some(pattern => pattern.test(message))) {
return; // Suppress CSS errors
}
originalError.apply(console, args);
};
// Suppress unhandled reference errors
window.addEventListener('error', (event) => {
if (event.error && event.error.message &&
(event.error.message.includes('a is not defined') ||
event.error.message.includes('ReferenceError'))) {
event.preventDefault();
return false;
}
});
}
};
// Disable the default Next.js loading indicator
NProgress.configure({ showSpinner: false });
function SessionRefresh() {
const { data: session, update } = useSession();
useEffect(() => {
// Refresh session on page load to ensure impersonation state is current
if (session?.user) {
update({ trigger: 'update' });
}
}, []); // Only run once on mount
return null;
}
function App({ Component, pageProps: { session, ...pageProps } }: AppProps) {
const router = useRouter();
useEffect(() => {
registerServiceWorker();
}, []);
useEffect(() => {
suppressCssWarnings();
// Setup automatic session cleanup for invalid cookies
setupAutoSessionCleanup({
autoRedirect: false, // Don't auto-redirect, let NextAuth handle it
onCleanup: () => {
console.log('๐งน Invalid session cookie cleared');
}
});
}, []);
useEffect(() => {
const handleStart = () => NProgress.start();
const handleStop = () => NProgress.done();
router.events.on('routeChangeStart', handleStart);
router.events.on('routeChangeComplete', handleStop);
router.events.on('routeChangeError', handleStop);
return () => {
router.events.off('routeChangeStart', handleStart);
router.events.off('routeChangeComplete', handleStop);
router.events.off('routeChangeError', handleStop);
};
}, [router]);
return (
<ErrorBoundary>
<SessionProvider session={session}>
<SessionRefresh />
<ThemeProvider>
<LanguageProvider>
<PublicNotificationProvider>
<AuthenticatedWebSocketProvider>
<Head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
{/* Removed preload tags to avoid unused resource warnings */}
</Head>
<CaseUpdateBanner />
<ThemeCustomizer />
<Layout>
<Component {...pageProps} />
</Layout>
<SmartEngagement />
{/* Video call removed for now */}
{/* Video call removed for now */}
<Toaster />
</AuthenticatedWebSocketProvider>
</PublicNotificationProvider>
</LanguageProvider>
</ThemeProvider>
</SessionProvider>
</ErrorBoundary>
);
}
export default App;