Files
agent-helm/packages/web/vite.config.ts
Bjorn Blomberg 94259b3456
All checks were successful
build-and-push / build (push) Successful in 18s
release-client / build-release (push) Successful in 48s
auth: OIDC/lokal inloggning + device-flow för klienter, sessioner per användare
Ersätter den delade AGENT_HELM_TOKEN med en riktig auth-modell:

- Webben loggar in med lokala konton ELLER OIDC (Authentik/Keycloak/…), valt
  per server. Inloggning ger en HMAC-signerad cookie; WS autentiseras via cookien.
- Klienten (daemon) kopplas via device-flödet (RFC 8628-likt): `agent-helm connect`
  skriver ut en URL, du loggar in + godkänner i webben, och får ett klient-token
  som identifierar din användare. Token sparas i ~/.config/agent-helm/.
- Sessioner är per användare (web ser bara sina egna; admin ser alla). Flera
  klient-instanser = flera parallella sessioner; --new tvingar ny, annars resume.
- Identitet är utbytbar (lokal/OIDC) men device-flödet + sessionerna är alltid
  agent-helms egna → funkar för vem som helst som hostar detta, med eller utan IdP.
- Bootstrap-admin via env (engångs) eller first-run-setup i UI:t. Klient-creds
  kan listas/återkallas; minimal admin-UI (skapa användare, konfigurera OIDC).

Nya filer: server/store.ts (JSON-store, scrypt, cookies), server/oidc.ts
(auth-code+PKCE), web/lib/api.ts. Verifierat end-to-end lokalt (login → device
→ approve → daemon-WS → web ser sessionen; web utan cookie nekas).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U68YyHsxU91ecsen84WQV4
2026-06-29 01:21:29 +02:00

30 lines
1.0 KiB
TypeScript

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { fileURLToPath } from "node:url";
// Pekar @agent-helm/shared direkt på TS-källan och låter Vite transpilera den
// som vanlig app-kod (slipper bygg-steg för shared i den tunna slicen).
const sharedSrc = fileURLToPath(new URL("../shared/src/index.ts", import.meta.url));
const repoRoot = fileURLToPath(new URL("../../", import.meta.url));
export default defineConfig({
plugins: [vue()],
envDir: repoRoot,
resolve: {
alias: {
"@agent-helm/shared": sharedSrc,
},
},
server: {
host: true,
fs: { allow: [repoRoot] },
// Proxa API + WS till control-plane så dev körs same-origin (cookie-auth funkar).
// Webben ansluter WS till `${origin}/ws`; servern accepterar WS på valfri path.
proxy: {
"/api": { target: "http://localhost:8787", changeOrigin: true },
"/auth": { target: "http://localhost:8787", changeOrigin: true },
"/ws": { target: "ws://localhost:8787", ws: true },
},
},
});