mapdash/frontend
aaverbitskiy b6b9c27cb0 auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers
Backend (main.py + auth.py):
- Validate Bearer JWT against the intense-sale realm JWKS (RS256, issuer
  checked, aud skipped). Missing/invalid token = anonymous, never an error,
  so the public map keeps working when Keycloak is down.
- Anonymous truncation: /api/meta hides brand/manager/status facets;
  /api/bookings blanks brand/company_name/manager/task_id/task_status
  (bars stay, one neutral colour); /api/map keeps occupied_now but empties
  booking details. Hidden facet filters are ignored for anonymous callers.
- boards stay visible to all (physical inventory: address/city/dimension).

Frontend (keycloak-js):
- Silent SSO (check-sso) — anonymous by default, Войти/Выйти button.
- Bearer token attached + refreshed on every API call.
- Anonymous UI hides Brand/Manager/Status filters, Brand/Company toggles,
  appearance menu, collisions and labels; board detail panel (Planfix
  deep-links) gated to managers.

Test manager: user / 1234567890 (realm role `manager`).
2026-08-14 11:05:47 +00:00
..
public auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers 2026-08-14 11:05:47 +00:00
src auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers 2026-08-14 11:05:47 +00:00
index.html auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers 2026-08-14 11:05:47 +00:00
package-lock.json auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers 2026-08-14 11:05:47 +00:00
package.json auth: Keycloak OIDC — anonymous (truncated) vs manager (full) tiers 2026-08-14 11:05:47 +00:00
tsconfig.json frontend: Vite+TypeScript scaffold (types, api) — not wired to static yet 2026-07-17 15:41:13 +00:00
vite.config.ts frontend: full modular migration (collisions/dropdown/timeline/styles), staged at /next/, prod unchanged 2026-07-17 16:17:00 +00:00