import "./components/ops-shell.js"; import "./components/home-dashboard.js"; import "./components/run-timeline.js"; import "./components/chat-simulator.js"; import "./components/conversation-inspector.js"; import "./components/conversations-crud.js"; import "./components/users-crud.js"; import "./components/products-crud.js"; import "./components/aliases-crud.js"; import "./components/recommendations-crud.js"; import "./components/quantities-crud.js"; import "./components/orders-crud.js"; import "./components/takeovers-crud.js"; import "./components/zone-map-editor.js"; import "./components/settings-crud.js"; import "./components/system-users-crud.js"; import "./components/audit-log.js"; import { connectSSE } from "./lib/sse.js"; import { initRouter } from "./lib/router.js"; (async function bootstrapShell() { // Gate de sesión: si no hay cookie válida, redirigimos a /login. // El HTML del shell carga sin auth, pero la data API exige cookie, así que // sin sesión todo el SPA quedaría con 401s vacíos. let user = null; try { const res = await fetch("/api/auth/me", { credentials: "include" }); if (res.ok) { const data = await res.json(); if (data?.ok) user = data.user; } } catch {} if (!user) { const next = encodeURIComponent(window.location.pathname + window.location.search); window.location.replace(`/login?next=${next}`); return; } window.__USER__ = user; connectSSE(); setTimeout(() => initRouter(), 0); })();