"use client"; /** * 根级 Client Providers 包装 * * 把所有功能 Provider 串起来: * AuthProvider → UserProvider → PaymentProvider → ChatProvider → PrivateRoomProvider * + AuthStatusChecker(启动时一次:派发 AuthInit) * + OAuthSessionSync (持续监听 NextAuth session → auth machine) * + UserAuthSync (auth 登录态恢复后 hydrate user machine) * + ChatAuthSync (持续监听 auth loginStatus → chat machine) * * 它们始终挂载,保证各页面直接 `use*State()` / `use*Dispatch()` 即可, * 无需在每个页面单独包裹。 */ import type { ReactNode } from "react"; import { ViewportCssVarsProvider } from "@/providers/viewport-css-vars-provider"; import { AppNavigationGuard } from "@/router/app-navigation-guard"; import { AuthProvider } from "@/stores/auth/auth-context"; import { AuthStatusChecker } from "@/stores/auth/auth-status-checker"; import { OAuthSessionSync } from "@/stores/auth/oauth-session-sync"; import { ChatProvider } from "@/stores/chat/chat-context"; import { PaymentProvider } from "@/stores/payment"; import { PrivateRoomProvider } from "@/stores/private-room"; import { ChatAuthSync, PaymentSuccessSync, UserAuthSync, } from "@/stores/sync"; import { UserProvider } from "@/stores/user/user-context"; export interface RootProvidersProps { children: ReactNode; } export function RootProviders({ children }: RootProvidersProps) { return ( {/* AuthStatusChecker 必须在 AuthProvider 内部(依赖 useAuthDispatch), * 必须在 UserProvider/ChatProvider 外部(它们可能在 init 完成前就 mount) */} {/* OAuthSessionSync 同样依赖 AuthProvider 上下文 */} {children}
); }