import React from 'react'; import { ErrorBoundary } from '@/components/ErrorBoundary'; import { ProtectedRoute } from '@/components/auth/ProtectedRoute'; import { LazySharedPlaylistPage, LazyLogin, LazyRegister, LazyForgotPassword, LazyVerifyEmail, LazyResetPassword, LazyDashboard, LazyChat, LazyChatJoin, LazyLibrary, LazyProfile, LazySettings, LazySessions, LazyNotFound, LazyServerError, LazyUserProfile, LazyRoles, LazyTrackDetail, LazyPlaylistRoutes, LazyMarketplace, LazySearch, LazyNotifications, LazyAnalytics, LazyWebhooks, LazyAdminDashboard, LazyAdminModeration, LazyAdminPlatform, LazyAdminTransfers, LazyDesignSystemDemo, LazySocial, LazyFeed, LazyDiscover, LazySellerDashboard, LazyWishlist, LazyPurchases, LazyProductDetail, LazyCheckoutComplete, LazyQueue, LazyDeveloper, LazyGear, LazyLive, LazyGoLive, LazyListenTogether, LazyCloud, LazySubscription, LazyDistribution, } from '@/components/ui/LazyComponent'; import { PublicRoute } from './PublicRoute'; import { ProtectedLayoutRoute } from './ProtectedLayoutRoute'; import { DashboardLayout } from '@/components/layout/DashboardLayout'; import type { RouteEntry } from './types'; function wrapPublic(element: React.ReactNode): React.ReactNode { return ( {element} ); } function wrapProtected(element: React.ReactNode): React.ReactNode { return ( {element} ); } export function getPublicRoutes(): RouteEntry[] { return [ { path: '/login', element: wrapPublic() }, { path: '/register', element: wrapPublic() }, { path: '/forgot-password', element: wrapPublic() }, { path: '/verify-email', element: wrapPublic() }, { path: '/reset-password', element: wrapPublic() }, ]; } export function getPublicStandaloneRoutes(): RouteEntry[] { return [ { path: '/design-system', element: }, { path: '/u/:username', element: }, { path: '/playlists/shared/:token', element: ( ), }, ]; } export function getProtectedRoutes(): RouteEntry[] { return [ { path: '/dashboard', element: wrapProtected() }, { path: '/marketplace', element: wrapProtected() }, { path: '/marketplace/products/:id', element: wrapProtected() }, { path: '/sell', element: wrapProtected( {}} />) }, { path: '/wishlist', element: wrapProtected() }, { path: '/purchases', element: wrapProtected() }, { path: '/checkout/complete', element: wrapProtected() }, { path: '/chat/join/:token', element: wrapProtected() }, { path: '/chat', element: wrapProtected() }, { path: '/library', element: wrapProtected() }, { path: '/profile', element: wrapProtected() }, { path: '/settings', element: wrapProtected() }, { path: '/settings/sessions', element: wrapProtected() }, { path: '/admin/roles', element: wrapProtected() }, { path: '/tracks/:id', element: wrapProtected() }, { path: '/playlists/*', element: wrapProtected() }, { path: '/search', element: wrapProtected() }, { path: '/notifications', element: wrapProtected() }, { path: '/analytics', element: wrapProtected() }, { path: '/webhooks', element: wrapProtected() }, { path: '/admin', element: wrapProtected() }, { path: '/admin/moderation', element: wrapProtected() }, { path: '/admin/platform', element: wrapProtected() }, { path: '/admin/transfers', element: wrapProtected() }, { path: '/social', element: wrapProtected() }, { path: '/feed', element: wrapProtected() }, { path: '/discover', element: wrapProtected() }, { path: '/queue', element: wrapProtected() }, { path: '/developer', element: wrapProtected() }, // Gear: connected to backend inventory API { path: '/gear', element: wrapProtected() }, // Live: connected to backend live streams API { path: '/live/go-live', element: wrapProtected() }, { path: '/live', element: wrapProtected() }, // Co-listening (v0.10.7 F481) { path: '/listen-together/:sessionId', element: wrapProtected() }, // Cloud: connected to backend cloud storage API { path: '/cloud', element: wrapProtected() }, // v0.12.1: Subscription Plans & Management { path: '/subscription', element: wrapProtected() }, // v0.12.2: Distribution to External Platforms { path: '/distribution', element: wrapProtected() }, ]; } export function getErrorRoutes(): RouteEntry[] { return [ { path: '/404', element: }, { path: '/500', element: }, ]; }