mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-26 17:41:30 +02:00
Users reported long delays between finishing browser authentication and the client connecting. Logs could not attribute the time: the PKCE and device flows were silent between issuing the auth URL and returning the token, and nothing recorded when the GUI issued the Up request after WaitSSOLogin completed. Add log lines covering the full chain: PKCE callback arrival and token exchange duration, device-flow polling and approval timing, GUI-side brackets around WaitSSOLogin and Up, daemon-side Up arrival and WaitSSOLogin return, and a frontend stall detector that reports when webview timers were suspended (macOS App Nap / hidden-window throttling), which delays the WaitSSOLogin-to-Up handoff.
65 lines
2.8 KiB
TypeScript
65 lines
2.8 KiB
TypeScript
import React from "react";
|
|
import ReactDOM from "react-dom/client";
|
|
import "./globals.css";
|
|
import { HashRouter, Navigate, Route, Routes } from "react-router-dom";
|
|
import SessionExpirationDialog from "@/modules/session/SessionExpirationDialog.tsx";
|
|
import UpdateInProgressDialog from "@/modules/auto-update/UpdateInProgressDialog.tsx";
|
|
import WelcomeDialog from "@/modules/welcome/WelcomeDialog.tsx";
|
|
import ErrorDialog from "@/modules/error/ErrorDialog.tsx";
|
|
import { AppLayout } from "@/layouts/AppLayout.tsx";
|
|
import { MainPage } from "@/modules/main/MainPage.tsx";
|
|
import { SettingsPage } from "@/modules/settings/SettingsPage.tsx";
|
|
import { SkeletonTheme } from "react-loading-skeleton";
|
|
import "react-loading-skeleton/dist/skeleton.css";
|
|
import { welcome } from "@/lib/welcome";
|
|
import LoginWaitingForBrowserDialog from "@/modules/login/LoginWaitingForBrowserDialog.tsx";
|
|
import { initI18n } from "@/lib/i18n";
|
|
import { initPlatform } from "@/lib/platform";
|
|
import { initLogForwarding } from "@/lib/logs";
|
|
import { initStallWatch } from "@/lib/stallwatch";
|
|
|
|
// Must run first so even init-time logs reach the Go log pipeline.
|
|
initLogForwarding();
|
|
|
|
initStallWatch();
|
|
|
|
welcome();
|
|
|
|
Promise.all([
|
|
initI18n().catch((e) => {
|
|
console.error("i18n init failed:", e);
|
|
}),
|
|
initPlatform().catch((e) => {
|
|
console.error("platform init failed:", e);
|
|
}),
|
|
]).finally(() => {
|
|
ReactDOM.createRoot(document.getElementById("root")!).render(
|
|
<React.StrictMode>
|
|
<SkeletonTheme baseColor={"#25282d"} highlightColor={"#33373e"}>
|
|
<HashRouter>
|
|
<Routes>
|
|
<Route path={"dialog"}>
|
|
<Route
|
|
path={"browser-login"}
|
|
element={<LoginWaitingForBrowserDialog />}
|
|
/>
|
|
<Route path={"install-progress"} element={<UpdateInProgressDialog />} />
|
|
<Route
|
|
path={"session-expiration"}
|
|
element={<SessionExpirationDialog />}
|
|
/>
|
|
<Route path={"welcome"} element={<WelcomeDialog />} />
|
|
<Route path={"error"} element={<ErrorDialog />} />
|
|
</Route>
|
|
<Route element={<AppLayout />}>
|
|
<Route index element={<MainPage />} />
|
|
<Route path={"settings"} element={<SettingsPage />} />
|
|
<Route path={"*"} element={<Navigate to={"/"} replace />} />
|
|
</Route>
|
|
</Routes>
|
|
</HashRouter>
|
|
</SkeletonTheme>
|
|
</React.StrictMode>,
|
|
);
|
|
});
|