import React from 'react'; import ReactDOM from 'react-dom/client'; import { ProvideAuth } from './context/auth'; import 'react-toastify/dist/ReactToastify.css'; import './index.css'; import AppRoutes from './AppRoutes'; import { BrowserRouter } from 'react-router'; import { client } from '../../types/gen/client.gen'; import { getConfig } from '../../types/gen/sdk.gen'; import { getToken } from './Utils'; import { toast } from 'react-toastify'; import * as Sentry from '@sentry/react'; client.setConfig({ auth: () => getToken(), baseUrl: '/api', // openapi-ts si to z nějakého důvodu neumí převzít z api.yml }); // Sentry se inicializuje až podle runtime konfigurace ze serveru (bez DSN zůstává vypnuté). // Klient je statický build, takže DSN nejde zapéct při buildu — server ho zná z env. getConfig().then(({ data }) => { if (data?.sentry.dsn) { Sentry.init({ dsn: data.sentry.dsn, environment: data.sentry.environment, enableLogs: true, }); } }).catch(() => { /* config endpoint nedostupný — běžíme bez Sentry */ }); // Interceptor na vyhození toasteru při chybě client.interceptors.response.use(async response => { // TODO opravit - login je zatím výjimka, voláme ho "naprázdno" abychom zjistili, zda nás nepřihlásily trusted headers if (!response.ok && !response.url.includes("/login")) { const json = await response.json(); toast.error(json.error, { theme: "colored" }); // Serverové chyby hlásíme do Sentry; 4xx jsou očekávané (chyby uživatele) if (response.status >= 500) { Sentry.captureMessage(`API ${response.status}: ${new URL(response.url).pathname} — ${json.error}`, 'error'); } } return response; }); const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render(

Něco se pokazilo 😕

Chyba byla nahlášena. Zkuste stránku načíst znovu.

}>
);