L'historique des scans ne se mettait pas à jour après un POST sur
/api/discovery : le Server Component restait servi depuis le cache
route de Next.
- discovery-launcher : appelle router.refresh() après un scan
réussi pour invalider le cache et re-rendre la page parent.
- scans/page.tsx + hosts/page.tsx : déclare `dynamic = 'force-dynamic'`
et `revalidate = 0`. Sans ça, Next pouvait statifier ces routes au
build (mode standalone) puisque la fonction getX() ne fait pas
appel à un signal dynamique.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Le dossier public/ étant vide n'était pas tracké par git, donc
absent après clone sur une machine Linux. Le COPY runner échouait
sur 'failed to compute cache key: "/app/public": not found'.
- Ajoute public/.gitkeep pour versionner le dossier
- Ajoute `mkdir -p /app/public` dans le stage builder en filet
de sécurité si le dossier disparaît à nouveau
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Le parent docker-compose.yml fixe `network_mode: host` ; combiné
avec une déclaration `networks:` dans l'override, Compose refuse
le projet (mutuellement exclusifs). On utilise `!reset null` pour
supprimer la clé héritée et permettre l'usage du réseau bridge
personnalisé. Requiert Compose v2.24+.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sans binaryTargets explicites, Prisma ne génère l'engine que pour
la plateforme du builder, ce qui fait échouer le runtime sur les
containers Alpine arm64 (Raspberry Pi, Apple Silicon en émulation).
Ajout des cibles linux-musl-openssl-3.0.x et
linux-musl-arm64-openssl-3.0.x en plus de "native".
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
L'entrypoint utilise `npx prisma` et `npx tsx` mais les symlinks
correspondants vivent dans node_modules/.bin, qui n'était pas
copié depuis le builder. Résultat : `sh: prisma: not found` au
démarrage. On ajoute la copie de .bin ; les symlinks vers les
paquets non copiés deviendront dangling sans impact (on utilise
uniquement prisma et tsx au runtime).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
bonjour-service exige un `type` dans BrowserConfig ; il n'existe pas
d'option pour écouter "tous les services". Le scanner instancie
maintenant un browser par type mDNS courant en homelab (http, ssh,
smb, airplay, googlecast, homekit, ipp, etc.) et agrège les
annonces par IP via une fonction `ingest` partagée.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Le combo `map -> satisfies DiscoveryResult -> filter (r is …)` ne
passait pas le typecheck strict de Next : le type littéral produit
par `satisfies` n'était pas considéré sous-type valide du prédicat.
`flatMap<DiscoveryResult>` retourne [] quand la ligne ne matche pas,
ce qui évite la nullité intermédiaire et respecte la propriété
optionnelle `macAddress?: string`.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SQLite ne supporte pas les enums Prisma. Les 6 enums (HostStatus,
HostSource, Protocol, PortState, ScanType, ScanStatus) sont
convertis en champs String avec valeurs par défaut littérales et
documentation inline des valeurs autorisées. La validation reste
assurée par Zod côté app.
Adapte aussi les mappings statusVariant des pages hosts/scans
en Record<string, BadgeVariant> avec fallback 'default'.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Compose nettoyé en deux profils isolés (sqlite, postgres) avec
healthcheck HTTP et network_mode host pour la découverte LAN.
- Override docker-compose.bridge.yml pour les environnements où
host mode n'est pas disponible (macOS/Windows).
- Entrypoint tolérant : fallback prisma db push quand aucune
migration n'existe encore.
- Dockerfile robuste sans package-lock.json (npm install fallback).
- .env.docker.example et docker/README.md pour un démarrage en
une commande.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Le script docker/entrypoint.sh :
- Attend PostgreSQL (netcat sur host:port extrait de DATABASE_URL)
- Cree le dossier /app/data si SQLite
- Applique les migrations via prisma migrate deploy
- Execute le seed si RUN_SEED=true (non bloquant)
- Demarre server.js (mode standalone Next)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
La cle experimental.serverComponentsExternalPackages est depreciee depuis
Next 15 au profit de serverExternalPackages au niveau racine de la config.
Meme comportement, moins de warnings au build.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Le module src/lib/utils/logger.ts configure un transport pino-pretty
en developpement, mais le paquet manquait du package.json. Resultat:
crash au premier import du logger (donc au boot du serveur Next en dev).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Prisma ne supporte pas env() pour le champ `provider` d'un datasource
(uniquement pour `url`). Le schéma utilise maintenant `provider = "sqlite"`
en statique, et deux scripts npm (`db:use-sqlite` / `db:use-postgres`)
réécrivent le fichier pour basculer entre les deux moteurs.
Sans ce fix, `prisma generate` échoue au boot.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>