From 60074fb01509c8ac4ecb261778acf571ef008c9c Mon Sep 17 00:00:00 2001 From: Nicolas Fryder Date: Tue, 18 Aug 2026 10:05:40 +0200 Subject: [PATCH] =?UTF-8?q?feat(qualit=C3=A9):=20outillage=20de=20test=20c?= =?UTF-8?q?omplet,=20CI=20locale,=20annulation=20r=C3=A9elle=20des=20runs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le dépôt n'avait aucun test, aucun linter, aucune vérification de types. Outillage - ESLint 9 (flat config) sur api + les deux frontends, Ruff sur le Python - tsc --checkJs sur l'API (pas de TypeScript, juste la vérification) - Vitest : 401 tests JS ; pytest : 43 tests Python - Tests de mutation (Stryker), deux profils : logique pure et API complète - Hook pre-push `npm run check` (~17 s) — le déploiement Coolify est sur webhook, c'est donc la seule porte de qualité avant la mise en ligne - Workflow Forgejo Actions prêt (inerte tant qu'aucun runner n'est enregistré) Sécurité - Injection SQL authentifiée dans resolve-conflict : `field` était interpolé dans le SET sans allowlist - timingSafeEqual levait sur un jeton multi-octets (500 au lieu de 401) - setErrorHandler écrasait tous les 4xx en 500 - .env.example : ADMIN_JWT_SECRET et ADMIN_SEED_* n'étaient documentés nulle part alors que leur absence casse toute connexion admin Annulation réelle des crawl_run (migration 014) - L'API posait status='error' sans que le crawler en sache rien : le process continuait, et son UPDATE final ne matchait plus (run réussi affiché en erreur) - Protocole coopératif : drapeau cancel_requested lu à chaque lot, le crawler écrit lui-même status='cancelled' Cohérence géographique (migration 014) - Le trigger 013 supprimait les band_locations sans purger le point dénormalisé - L'édition admin de lat/lon n'atteignait jamais band_locations : la carte ignorait la correction. Override step_order = -1, dans une transaction Corrections - limit/offset NaN → 500 au lieu de 400 - OPTIONS sans `return reply` (Fastify poursuivait le cycle de vie) - listen() sans catch, cast ::text en dur sur les colonnes numériques - /admin/api/logs ne renvoyait pas sa pagination - a11y : sélecteur de langue annoncé comme liste vide (role=option manquant) Nettoyage - apps/web/quizz-site supprimé (sans rapport avec le projet) - Code mort : openModal(), LANG_NAMES, double import, variables inutilisées - .dockerignore ajoutés ; node_modules racine n'était pas gitignoré Co-Authored-By: Claude --- .forgejo/workflows/ci.yml | 75 + .githooks/pre-push | 32 + .gitignore | 16 +- README-CI.md | 134 + apps/admin/site/app.js | 22 +- apps/api/.dockerignore | 4 + .../014_run_cancellation_and_geo_sync.sql | 78 + apps/api/src/adminRoutes.js | 171 +- apps/api/src/app.js | 843 +++ apps/api/src/server.js | 816 +- apps/api/src/validate.js | 161 + apps/api/test/adminAuth.test.js | 132 + apps/api/test/adminRoutes.test.js | 388 + apps/api/test/adminRoutesCoverage.test.js | 433 ++ apps/api/test/cancellation.test.js | 252 + apps/api/test/harness.test.js | 145 + apps/api/test/helpers/fakePool.js | 110 + apps/api/test/helpers/testApp.js | 65 + apps/api/test/publicRoutes.test.js | 430 ++ apps/api/test/publicRoutesCoverage.test.js | 393 + apps/api/test/rateLimit.test.js | 126 + apps/api/test/validate.test.js | 220 + apps/crawler/src/db.py | 87 +- apps/crawler/src/flaresolverr.py | 3 +- apps/crawler/src/jobs.py | 66 +- apps/crawler/src/ma_http.py | 24 +- apps/crawler/src/main.py | 18 +- apps/crawler/src/scraper_band.py | 12 +- apps/crawler/tests/conftest.py | 12 + apps/crawler/tests/test_cancellation.py | 172 + apps/geocoder/.dockerignore | 9 + apps/geocoder/src/enqueue.py | 6 +- apps/geocoder/src/groq_worker.py | 15 +- apps/geocoder/src/worker.py | 10 +- apps/geocoder/tests/test_parser.py | 129 + apps/web/quizz-site/axolotl.jpeg | Bin 32226 -> 0 bytes apps/web/quizz-site/echidne.jpeg | Bin 43295 -> 0 bytes apps/web/quizz-site/index.html | 696 -- apps/web/quizz-site/poule-de-soie.jpeg | Bin 567384 -> 0 bytes apps/web/quizz-site/ratel.jpeg | Bin 84660 -> 0 bytes apps/web/quizz-site/saiga.jpeg | Bin 122266 -> 0 bytes apps/web/site/app.js | 3428 ++++----- apps/web/site/index.html | 26 +- apps/web/site/pure.js | 149 + apps/web/test/a11y.test.js | 96 + apps/web/test/pure.test.js | 339 + eslint.config.js | 103 + infra/.env.example | 44 +- jsconfig.json | 20 + package-lock.json | 6728 +++++++++++++++++ package.json | 43 + pyproject.toml | 41 + requirements-dev.txt | 9 + stryker.config.json | 41 + stryker.full.config.json | 43 + vitest.config.js | 45 + vitest.mutation.config.js | 23 + vitest.mutation.full.config.js | 18 + 58 files changed, 14084 insertions(+), 3417 deletions(-) create mode 100644 .forgejo/workflows/ci.yml create mode 100644 .githooks/pre-push create mode 100644 README-CI.md create mode 100644 apps/api/.dockerignore create mode 100644 apps/api/migrations/014_run_cancellation_and_geo_sync.sql create mode 100644 apps/api/src/app.js create mode 100644 apps/api/src/validate.js create mode 100644 apps/api/test/adminAuth.test.js create mode 100644 apps/api/test/adminRoutes.test.js create mode 100644 apps/api/test/adminRoutesCoverage.test.js create mode 100644 apps/api/test/cancellation.test.js create mode 100644 apps/api/test/harness.test.js create mode 100644 apps/api/test/helpers/fakePool.js create mode 100644 apps/api/test/helpers/testApp.js create mode 100644 apps/api/test/publicRoutes.test.js create mode 100644 apps/api/test/publicRoutesCoverage.test.js create mode 100644 apps/api/test/rateLimit.test.js create mode 100644 apps/api/test/validate.test.js create mode 100644 apps/crawler/tests/conftest.py create mode 100644 apps/crawler/tests/test_cancellation.py create mode 100644 apps/geocoder/.dockerignore create mode 100644 apps/geocoder/tests/test_parser.py delete mode 100644 apps/web/quizz-site/axolotl.jpeg delete mode 100644 apps/web/quizz-site/echidne.jpeg delete mode 100644 apps/web/quizz-site/index.html delete mode 100644 apps/web/quizz-site/poule-de-soie.jpeg delete mode 100644 apps/web/quizz-site/ratel.jpeg delete mode 100644 apps/web/quizz-site/saiga.jpeg create mode 100644 apps/web/site/pure.js create mode 100644 apps/web/test/a11y.test.js create mode 100644 apps/web/test/pure.test.js create mode 100644 eslint.config.js create mode 100644 jsconfig.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pyproject.toml create mode 100644 requirements-dev.txt create mode 100644 stryker.config.json create mode 100644 stryker.full.config.json create mode 100644 vitest.config.js create mode 100644 vitest.mutation.config.js create mode 100644 vitest.mutation.full.config.js diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml new file mode 100644 index 0000000..e2da28d --- /dev/null +++ b/.forgejo/workflows/ci.yml @@ -0,0 +1,75 @@ +# CI informative. +# +# Le déploiement reste piloté par le webhook Coolify (push → redeploy), CE +# WORKFLOW NE BLOQUE RIEN : il marque simplement le commit vert ou rouge dans +# Forgejo. La vraie porte de qualité est le hook `.githooks/pre-push` côté +# poste de dev (voir README-CI.md). +# +# ⚠ Prérequis : un runner Forgejo Actions (act_runner) enregistré sur le VPS. +# Sans runner, ce fichier est inerte — aucun job ne démarre et aucun statut +# n'apparaît. C'est le cas aujourd'hui : ce workflow est là pour le jour où +# un runner sera ajouté. +name: CI + +on: + push: + branches: [dev, main] + pull_request: + branches: [dev, main] + workflow_dispatch: + +jobs: + javascript: + runs-on: docker + container: + image: node:22-alpine + steps: + - uses: actions/checkout@v4 + + - name: Installer les dépendances + run: npm ci + + - name: ESLint + run: npm run lint + + - name: Vérification de types (tsc --checkJs) + run: npm run typecheck + + - name: Tests unitaires + a11y + run: npm run test + + - name: Audit des dépendances + run: npm run audit:js + continue-on-error: true # informatif : ne doit pas masquer un échec de test + + python: + runs-on: docker + container: + image: python:3.12-slim + steps: + - uses: actions/checkout@v4 + + - name: Installer l'outillage + run: pip install --no-cache-dir ruff pytest pip-audit + + - name: Ruff (lint + règles de sécurité bandit) + run: ruff check . + + - name: Tests du parseur de géocodage + run: cd apps/geocoder && python -m pytest tests -q + + - name: Audit des dépendances + run: pip-audit -r apps/crawler/requirements.txt -r apps/geocoder/requirements.txt + continue-on-error: true + + # Les tests de mutation prennent ~1 min : trop lents pour chaque push, mais + # utiles en revue. Déclenchement manuel uniquement. + mutation: + runs-on: docker + container: + image: node:22-alpine + if: github.event_name == 'workflow_dispatch' + steps: + - uses: actions/checkout@v4 + - run: npm ci + - run: npm run test:mutation diff --git a/.githooks/pre-push b/.githooks/pre-push new file mode 100644 index 0000000..b2fda5c --- /dev/null +++ b/.githooks/pre-push @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Porte de qualité locale — c'est ICI que la CI de ce projet se joue. +# +# Le déploiement Coolify se déclenche sur webhook à chaque push : rien ne +# s'interpose entre `git push` et la mise en ligne. Ce hook est donc le dernier +# filet avant que du code cassé parte en dev. +# +# Installation (une fois par clone) : npm run hooks:install +# Contournement ponctuel : git push --no-verify +# +set -e + +echo "▶ pre-push : porte de qualité (lint, types, tests)…" + +start=$(date +%s) + +if ! npm run --silent check; then + cat >&2 <<'MSG' + +✗ La porte de qualité a échoué — push interrompu. + + Corriger, ou pousser quand même en connaissance de cause : + git push --no-verify + + Correction automatique de la plupart des problèmes de style : + npm run lint:fix && npm run lint:py:fix +MSG + exit 1 +fi + +echo "✓ pre-push : tout est vert ($(( $(date +%s) - start ))s)" diff --git a/.gitignore b/.gitignore index 9057a64..95bc819 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,24 @@ infra/.venv/ infra/temp/ infra/geocode-enqueue.log +infra/.env + +# Node +node_modules/ apps/api/node_modules/ + +# Python __pycache__/ *.pyc *.pyo -infra/.env +.pytest_cache/ +.ruff_cache/ + +# Sorties d'outillage qualité +coverage/ +reports/ +.stryker-tmp/ + +# Session Claude Code (contient des secrets) .claude/ CLAUDE.md diff --git a/README-CI.md b/README-CI.md new file mode 100644 index 0000000..379d17b --- /dev/null +++ b/README-CI.md @@ -0,0 +1,134 @@ +# Qualité, tests et CI/CD + +## Le modèle en une phrase + +Coolify redéploie sur webhook à **chaque** push (`dev` → dev.metalfrom.eu, +`main` → metalfrom.eu). Rien ne s'interpose. La porte de qualité est donc +**locale**, dans le hook `pre-push`. + +``` +git push ──▶ [hook pre-push : npm run check] ──▶ Forgejo ──▶ webhook ──▶ Coolify redeploy + ↑ ~15 s, bloquant +``` + +## Installation (une fois par clone) + +```bash +npm install +npm run hooks:install # active .githooks/pre-push +pip install -r requirements-dev.txt +``` + +## Commandes et temps mesurés + +| Commande | Ce que ça fait | Froid | Incrémental | +|---|---|---|---| +| `npm run check` | **La porte** : ESLint + Ruff + tsc + tous les tests | ~15 s | — | +| `npm test` | 401 tests JS | 3,5 s | — | +| `npm run test:py` | 43 tests Python | 1 s | — | +| `npm run lint` / `lint:py` | ESLint / Ruff | 3 s / 1 s | — | +| `npm run typecheck` | `tsc --checkJs` sur l'API | 6 s | — | +| `npm run test:mutation` | Mutation, logique pure (352 mutants) | 34 s | ~5 s | +| `npm run test:mutation:full` | Mutation, toute l'API (1511 mutants) | 5 min | 13 s | +| `npm run check:full` | `check` + audits de dépendances + mutation complète | — | ~1 min | + +### Où passe le temps, et pourquoi c'est acceptable + +La commande de la boucle de développement, c'est `npm run check` : **17 s**, +et elle inclut déjà les 401 tests, ESLint, Ruff et tsc. C'est elle qui tourne +cent fois par jour. + +La mutation n'est pas une commande de boucle courte. Son coût se lit ainsi : + +- `test:mutation` (352 mutants) : 34 s à froid, ~5 s ensuite. Assez rapide pour + être lancée avant chaque commit qui touche la validation ou l'auth. +- `test:mutation:full` (1511 mutants) : 5 min **une seule fois** (clone neuf ou + après avoir modifié les quatre fichiers mutés d'un coup). Après une édition + normale d'un seul fichier : **13 s**, mesuré. + +Le fichier incrémental vit dans `reports/`, qui est gitignoré : un clone neuf +paie donc les 5 minutes une fois. C'est assumé — c'est un audit, pas un test. + +**Ce qui n'a délibérément pas été fait pour aller plus vite** : réduire encore +le périmètre muté. Descendre sous ~1500 mutants sur l'API reviendrait à ne plus +mesurer grand-chose, et un score de mutation flatteur obtenu en retirant les +mutants gênants est pire qu'une absence de score. + +## Ce que couvrent les tests + +| Batterie | Où | Approche | +|---|---|---| +| **Unitaires** | `apps/api/test/validate.test.js` | Validation pure : bbox, limit/offset, coordonnées, années, recherche | +| **Routes / intégration** | `publicRoutes*.test.js`, `adminRoutes*.test.js` | `fastify.inject()` + faux pool. Gating d'auth, allowlists de colonnes, forme du SQL, transactions | +| **Sécurité** | `adminAuth.test.js`, `rateLimit.test.js` | JWT forgé, `alg:none`, expiration, anti-énumération, verrouillage de compte, plafonds de débit par IP et par jeton | +| **Annulation** | `cancellation.test.js` + `apps/crawler/tests/test_cancellation.py` | Les deux moitiés du protocole coopératif | +| **Accessibilité** | `apps/web/test/a11y.test.js` | axe-core + jsdom sur le HTML statique | +| **Frontend** | `apps/web/test/pure.test.js` | Filtrage, tri, échappement HTML | +| **Méta** | `apps/api/test/harness.test.js` | Vérifie le faux pool lui-même | +| **Python** | `apps/geocoder/tests/`, `apps/crawler/tests/` | Parseur de localisations, annulation | +| **Mutation** | `stryker*.config.json` | 82 % (logique pure) / 65 % (API complète) | + +## Performance : les décisions et leurs mesures + +Le principe : **aucun test ne monte de conteneur, ne compile, ni ne touche le réseau.** + +Quatre optimisations, toutes mesurées (les intuitions non vérifiées se sont +révélées fausses au moins une fois) : + +1. **Une app Fastify par fichier de test, pas par cas.** + `buildServer()` coûte 14 ms. À raison d'une construction par `it()`, ces + 14 ms étaient multipliés par ~12 000 exécutions pendant un run de mutation. + Les tests partagent une app et reprogramment un pool via `pool.reset()` + (`test/helpers/testApp.js`). + +2. **Config Vitest dédiée à la mutation.** + Stryker recharge les fichiers de test à chaque mutant. En ne déclarant que + ceux qui couvrent le code muté (et surtout pas le test a11y, qui initialise + jsdom en ~2 s), le profil pur est passé de **1 min 23 à 34 s**. + +3. **Mutants `StringLiteral` exclus.** + Les handlers sont à ~80 % du SQL en template literals. Muter le contenu + d'une chaîne SQL ne mesure rien. Les retirer a fait passer le profil complet + de 7 min 50 à 5 min — et le score de 42 % à 65 %, parce que le bruit + disparaissait du dénominateur. + +4. **Plafonds de débit paramétrables.** + Conséquence du point 1 : une app partagée accumule l'état du limiteur. Les + valeurs réelles de production sont vérifiées séparément dans + `rateLimit.test.js`, pour que la paramétrisation ne crée pas d'angle mort. + +Ce qui a été **essayé et rejeté sur mesure** : le pool Vitest `threads` avec +`isolate: false`, réputé plus rapide, donne **18,8 s contre 3,5 s** ici (la +mise en place de jsdom est pénalisée). Le défaut (`forks`) est conservé. + +## Pourquoi deux profils de mutation + +La mutation prouve qu'un test **échoue** quand le code casse — la couverture ne +dit que « cette ligne a été exécutée ». + +- `test:mutation` (validate.js, adminAuth.js) : **82 %**. Logique pure, score + interprétable, assez rapide pour être lancé souvent. +- `test:mutation:full` (+ adminRoutes.js, app.js) : **65 %**. Les handlers de + route plafonnent structurellement plus bas — beaucoup de mutants portent sur + des messages de log ou des branches `catch` dont l'observable exact n'a pas + d'importance. Utile en audit, pas en boucle courte. + +Les seuils d'échec (70 % et 55 %) sont des cliquets anti-régression, pas des +objectifs. + +### Ce qui n'est pas couvert + +- Règles a11y exigeant un moteur de rendu (contraste, cibles tactiles) : jsdom + ne calcule pas de styles. À compléter par un audit Lighthouse manuel. +- `migrate.js` : s'exécute au démarrage du conteneur et appelle `process.exit`. +- Crawler et workers de géocodage : seuls le parseur et l'annulation sont + couverts, le reste est de l'I/O réseau et base. +- `apps/web/site/pure.js` est testé mais **exclu de la mutation** : il est + chargé via `fs` + `vm` (comme le fait le navigateur), donc l'instrumentation + Stryker ne l'atteindrait pas et afficherait un score faussement parfait. + +## Forgejo Actions + +`.forgejo/workflows/ci.yml` existe mais **ne tourne pas** : aucun runner +`act_runner` n'est enregistré sur le VPS. Le fichier est prêt si tu en ajoutes +un. Il est volontairement informatif — il ne bloque pas le déploiement. diff --git a/apps/admin/site/app.js b/apps/admin/site/app.js index 518c69b..fb1f702 100644 --- a/apps/admin/site/app.js +++ b/apps/admin/site/app.js @@ -168,7 +168,7 @@ function splitGenreElements(genreRows) { for (const { genre, total } of genreRows) { if (!genre) continue; const cleaned = genre.replace(/\([^)]*\)/g, ""); - const tokens = cleaned.split(/[\/;,]+/); + const tokens = cleaned.split(/[/;,]+/); for (const tok of tokens) { const kw = tok.trim(); if (kw.length < 3) continue; @@ -255,15 +255,23 @@ async function loadOverviewLive() { const runsHtml = live.active_runs.length ? live.active_runs.map(r => { const elapsed = Math.round((Date.now() - new Date(r.started_at)) / 60000); + // L'annulation est coopérative : le crawler ne s'arrête qu'au prochain + // point de contrôle. Tant qu'il n'a pas basculé le statut à + // 'cancelled', on affiche l'état intermédiaire au lieu de laisser + // croire que c'est déjà fait. + const pendingCancel = r.cancel_requested === true; return `
- ▶ ${esc(r.run_type)} + ▶ ${esc(r.run_type)}
${elapsed}min · ${r.bands_seen} vus · ${r.bands_new} nouveaux · ${r.bands_enriched} enrichis
+ ${pendingCancel ? `
⏳ Arrêt demandé${r.cancel_requested_by ? ` par ${esc(r.cancel_requested_by)}` : ""} — le crawler s'arrêtera au prochain lot
` : ""} ${r.error ? `
${esc(r.error)}
` : ""}
- + ${pendingCancel + ? `` + : ``}
`; }).join("") : `
Aucun run actif
`; @@ -341,7 +349,7 @@ async function loadOverviewLive() { } async function adminCancelRun(id) { - if (!confirm(`Annuler le run #${id} ?`)) return; + if (!confirm(`Demander l'arrêt du run #${id} ?\n\nLe crawler s'arrêtera à son prochain point de contrôle (quelques secondes à une minute selon le job).`)) return; try { await api(`/admin/api/crawl-runs/${id}/cancel`, { method: "POST", body: "{}" }); await loadOverviewLive(); @@ -356,6 +364,12 @@ async function adminCancelJob(id) { } catch (e) { alert(`Erreur : ${e.message}`); } } +// Ces deux handlers sont appelés depuis des attributs onclick= générés dans +// les templates ci-dessus : l'exposition sur `window` est explicite pour que le +// couplage reste visible (et que le linter ne les prenne pas pour du code mort). +window.adminCancelRun = adminCancelRun; +window.adminCancelJob = adminCancelJob; + // ------------------------------------------------------------------ // Groupes (Bands + Conflits fondus) // ------------------------------------------------------------------ diff --git a/apps/api/.dockerignore b/apps/api/.dockerignore new file mode 100644 index 0000000..536131c --- /dev/null +++ b/apps/api/.dockerignore @@ -0,0 +1,4 @@ +node_modules/ +test/ +coverage/ +.stryker-tmp/ diff --git a/apps/api/migrations/014_run_cancellation_and_geo_sync.sql b/apps/api/migrations/014_run_cancellation_and_geo_sync.sql new file mode 100644 index 0000000..f0473f1 --- /dev/null +++ b/apps/api/migrations/014_run_cancellation_and_geo_sync.sql @@ -0,0 +1,78 @@ +-- 014_run_cancellation_and_geo_sync.sql +-- +-- Deux corrections d'invariants qui rendaient des fonctionnalités cosmétiques. +-- +-- A) Annulation réelle des crawl_run +-- Avant : « Annuler » écrivait status='error' en base. Le crawler Python ne +-- lisait jamais cette colonne et continuait sa boucle jusqu'au bout. Pire, +-- son UPDATE final `WHERE id=%s AND status='running'` ne matchait plus, donc +-- un run mené à terme restait affiché en erreur. Le bouton ne faisait rien +-- d'autre que mentir. +-- Après : l'admin pose un DRAPEAU (cancel_requested) sans toucher au statut. +-- Le crawler le lit à chaque itération et s'arrête proprement, en écrivant +-- lui-même status='cancelled'. Le statut reflète donc toujours la réalité du +-- process. +-- +-- B) Désynchronisation du point principal +-- bands.lat/lon/geom est une dénormalisation du PREMIER lieu géocodé de +-- band_locations (voir _sync_band_point dans geocoder/worker.py). Le trigger +-- de la migration 013 supprime les band_locations quand location_text change, +-- mais laissait l'ancien point sur bands : la carte (qui lit band_locations) +-- n'affichait plus rien tandis que la liste et la heatmap (qui lisent bands) +-- continuaient de montrer l'ancienne ville, parfois pendant des jours. + +-- ------------------------------------------------------------------ +-- A) Annulation coopérative +-- ------------------------------------------------------------------ + +ALTER TABLE crawl_run ADD COLUMN IF NOT EXISTS cancel_requested BOOLEAN NOT NULL DEFAULT FALSE; +ALTER TABLE crawl_run ADD COLUMN IF NOT EXISTS cancel_requested_at TIMESTAMPTZ; +ALTER TABLE crawl_run ADD COLUMN IF NOT EXISTS cancel_requested_by TEXT; + +-- Le crawler interroge ce drapeau en boucle : index partiel pour que le +-- lookup reste un index-only scan même avec un historique de runs volumineux. +CREATE INDEX IF NOT EXISTS idx_crawl_run_cancel + ON crawl_run (id) + WHERE status = 'running' AND cancel_requested = TRUE; + +-- Note : on n'ajoute délibérément PAS de cancel_requested sur job_triggers. +-- Un job 'pending' se retire de la file (c'est ce que fait la route existante) ; +-- une fois réclamé par le crawler il n'existe plus qu'à travers le crawl_run +-- qu'il a créé, et c'est CE run qu'on annule. Deux drapeaux pour un seul état +-- réel, c'est exactement le genre de colonne qui finit morte. + +-- ------------------------------------------------------------------ +-- B) Le point principal suit la suppression des localisations +-- ------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION bands_geocode_dirty() RETURNS trigger AS $$ +BEGIN + IF TG_OP = 'UPDATE' AND OLD.location_text IS DISTINCT FROM NEW.location_text THEN + DELETE FROM band_locations WHERE ma_id = NEW.ma_id; + + -- Purge aussi le point dénormalisé : il décrivait l'ancienne localisation. + -- Cet UPDATE ne touche pas location_text, donc il ne redéclenche pas ce + -- trigger (défini AFTER UPDATE OF location_text) — pas de récursion. + UPDATE bands + SET lat = NULL, + lon = NULL, + geocoded_at = NULL, + geocode_provider = NULL, + geocode_query = NULL + WHERE ma_id = NEW.ma_id + AND (lat IS NOT NULL OR lon IS NOT NULL); + -- geom est recalculé (à NULL) par le trigger BEFORE bands_set_geom. + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +-- ------------------------------------------------------------------ +-- C) Localisation posée manuellement par un admin +-- ------------------------------------------------------------------ +-- Éditer lat/lon depuis le dashboard n'écrivait que sur bands : la carte, qui +-- clusterise depuis band_locations, ignorait totalement la correction. On +-- réserve step_order = -1 à l'override manuel, qui passe donc avant tous les +-- steps issus du parsing (tri step_order ASC) et devient le point principal. +COMMENT ON COLUMN band_locations.step_order IS + 'Ordre de l''étape dans location_text (0 = première). -1 = override manuel admin, prioritaire.'; diff --git a/apps/api/src/adminRoutes.js b/apps/api/src/adminRoutes.js index 67002f0..eddcab5 100644 --- a/apps/api/src/adminRoutes.js +++ b/apps/api/src/adminRoutes.js @@ -1,4 +1,5 @@ import { requireAdminSession, writeAuditLog } from "./adminAuth.js"; +import { pagination } from "./validate.js"; const BAND_SORT_COLUMNS = new Set([ "ma_id", "name", "country", "status", "genre", @@ -10,11 +11,8 @@ const BAND_EDITABLE_FIELDS = [ "themes", "location_text", "lat", "lon", ]; -function pagination(query) { - const page = Math.max(1, Number(query.page) || 1); - const pageSize = Math.min(200, Math.max(1, Number(query.pageSize) || 50)); - return { page, pageSize, offset: (page - 1) * pageSize }; -} +/** Sous-ensemble de BAND_EDITABLE_FIELDS stocke en colonne numerique. */ +const NUMERIC_BAND_FIELDS = new Set(["formed_year", "lat", "lon"]); export default async function adminRoutes(fastify, opts) { const { pool } = opts; @@ -268,34 +266,83 @@ export default async function adminRoutes(fastify, opts) { updates.lon = v; } - const before = await pool.query(`SELECT * FROM bands WHERE ma_id = $1 LIMIT 1`, [id]); - if (!before.rows.length) return reply.code(404).send({ ok: false, error: "not found" }); + // Transaction : l'edition, la pose de l'override de localisation et + // l'ecriture d'audit doivent reussir ou echouer ensemble. Sans ca, une + // coupure entre les deux laissait une modification sans trace d'audit. + const client = await pool.connect(); + try { + await client.query("BEGIN"); - const setCols = Object.keys(updates); - // Marque les champs édités comme verrouillés (ne seront plus écrasés par le crawler) - const newLocked = Object.fromEntries(setCols.map((c) => [c, true])); - const setSql = setCols.map((c, idx) => `${c} = $${idx + 2}`).join(", "); - const vals = [id, ...setCols.map((c) => updates[c])]; + const before = await client.query(`SELECT * FROM bands WHERE ma_id = $1 LIMIT 1`, [id]); + if (!before.rows.length) { + await client.query("ROLLBACK"); + return reply.code(404).send({ ok: false, error: "not found" }); + } - const after = await pool.query( - `UPDATE bands SET ${setSql}, - locked_fields = locked_fields || $${vals.length + 1}::jsonb, - crawler_pending = ( - SELECT jsonb_strip_nulls(jsonb_build_object(${ - setCols.map((c) => `'${c}', crawler_pending->'${c}'`).join(", ") - })) - FROM bands WHERE ma_id = $1 - ) - WHERE ma_id = $1 RETURNING *`, - [...vals, JSON.stringify(newLocked)] - ); + const setCols = Object.keys(updates); + // Marque les champs edites comme verrouilles (plus ecrases par le crawler) + const newLocked = Object.fromEntries(setCols.map((c) => [c, true])); + const setSql = setCols.map((c, idx) => `${c} = $${idx + 2}`).join(", "); + const vals = [id, ...setCols.map((c) => updates[c])]; - await writeAuditLog( - pool, req.adminUsername, "update", "bands", id, - before.rows[0], after.rows[0] - ); + const after = await client.query( + `UPDATE bands SET ${setSql}, + locked_fields = locked_fields || $${vals.length + 1}::jsonb, + crawler_pending = ( + SELECT jsonb_strip_nulls(jsonb_build_object(${ + setCols.map((c) => `'${c}', crawler_pending->'${c}'`).join(", ") + })) + FROM bands WHERE ma_id = $1 + ) + WHERE ma_id = $1 RETURNING *`, + [...vals, JSON.stringify(newLocked)] + ); - return { ok: true, item: after.rows[0] }; + // La carte clusterise depuis band_locations, jamais depuis bands. + // Corriger lat/lon ici ne deplacait donc aucun point : il faut poser un + // override dans band_locations. step_order = -1 le place avant tous les + // steps issus du parsing, ce qui en fait aussi le point principal. + const row = after.rows[0]; + if ("lat" in updates || "lon" in updates) { + if (row.lat != null && row.lon != null) { + await client.query( + `INSERT INTO band_locations + (ma_id, step_order, step_label, location_raw, is_country_only, + lat, lon, geocode_status, geocode_provider, geocode_confidence, updated_at) + VALUES ($1, -1, 'override admin', $2, FALSE, $3, $4, 'done', 'admin', 1.0, now()) + ON CONFLICT (ma_id, step_order, location_raw) DO UPDATE SET + lat = EXCLUDED.lat, + lon = EXCLUDED.lon, + geocode_status = 'done', + geocode_provider = 'admin', + geocode_confidence = 1.0, + geocode_error = NULL, + updated_at = now()`, + [id, row.location_text || "(coordonnees saisies manuellement)", row.lat, row.lon] + ); + } else { + // lat/lon effaces -> l'override n'a plus lieu d'etre. + await client.query( + `DELETE FROM band_locations WHERE ma_id = $1 AND step_order = -1`, [id] + ); + } + } + + await client.query( + `INSERT INTO admin_audit_log (admin_username, action, target_table, target_id, before_data, after_data) + VALUES ($1, $2, $3, $4, $5, $6)`, + [req.adminUsername, "update", "bands", String(id), + JSON.stringify(before.rows[0]), JSON.stringify(row)] + ); + + await client.query("COMMIT"); + return { ok: true, item: row }; + } catch (err) { + await client.query("ROLLBACK").catch(() => {}); + throw err; + } finally { + client.release(); + } } catch (err) { fastify.log.error(err); return reply.code(500).send({ ok: false, error: "Erreur mise à jour band" }); @@ -341,7 +388,9 @@ export default async function adminRoutes(fastify, opts) { LIMIT $${i} OFFSET $${i + 1} `, vals); - return { ok: true, items: r.rows }; + // page/pageSize etaient calcules mais jamais renvoyes : le client n'avait + // aucun moyen de savoir s'il restait des logs a charger. + return { ok: true, items: r.rows, page, pageSize }; } catch (err) { fastify.log.error(err); return reply.code(500).send({ ok: false, error: "Erreur logs" }); @@ -385,6 +434,12 @@ export default async function adminRoutes(fastify, opts) { if (!field || !["keep_mine", "accept_crawler"].includes(action)) { return reply.code(400).send({ ok: false, error: "field et action requis" }); } + // `field` est interpole dans le SET plus bas (impossible de parametrer un + // nom de colonne) : sans cette allowlist, un admin authentifie pouvait + // ecrire du SQL arbitraire via le corps de la requete. + if (!BAND_EDITABLE_FIELDS.includes(field)) { + return reply.code(400).send({ ok: false, error: `field non modifiable: ${field}` }); + } const before = await pool.query(`SELECT * FROM bands WHERE ma_id = $1`, [id]); if (!before.rows.length) return reply.code(404).send({ ok: false, error: "not found" }); @@ -396,7 +451,12 @@ export default async function adminRoutes(fastify, opts) { } else { // Applique la valeur du crawler, déverrouille le champ const crawlerVal = before.rows[0].crawler_pending?.[field]; - sql = `UPDATE bands SET ${field} = $2::text, locked_fields = locked_fields - $3, crawler_pending = crawler_pending - $3 WHERE ma_id = $1`; + // Le cast depend du type reel de la colonne : `::text` en dur cassait + // formed_year / lat / lon (erreur Postgres 42804). + const cast = NUMERIC_BAND_FIELDS.has(field) + ? (field === "formed_year" ? "::int" : "::double precision") + : "::text"; + sql = `UPDATE bands SET ${field} = $2${cast}, locked_fields = locked_fields - $3, crawler_pending = crawler_pending - $3 WHERE ma_id = $1`; vals = [id, crawlerVal, field]; } const after = await pool.query(sql + " RETURNING *", vals); @@ -663,7 +723,8 @@ export default async function adminRoutes(fastify, opts) { const [active_runs, pending_jobs, geo_queue, geo_processing, checkpoints] = await Promise.all([ pool.query(` SELECT id, run_type, countries, status, started_at, - bands_seen, bands_new, bands_updated, bands_enriched, error + bands_seen, bands_new, bands_updated, bands_enriched, error, + cancel_requested, cancel_requested_at, cancel_requested_by FROM crawl_run WHERE status = 'running' ORDER BY started_at DESC `), pool.query(` @@ -700,16 +761,40 @@ export default async function adminRoutes(fastify, opts) { try { const id = Number(req.params.id); if (!Number.isFinite(id)) return reply.code(400).send({ ok: false, error: "bad id" }); + // Annulation COOPERATIVE : on pose un drapeau et on laisse le statut a + // 'running'. Le crawler le lit a chaque lot et ecrit lui-meme + // status='cancelled' quand il s'est reellement arrete. + // + // Ecrire directement status='error' ici (l'ancien comportement) mentait + // deux fois : le process continuait a tourner, et son UPDATE final + // `WHERE status='running'` ne matchait plus. const r = await pool.query(` - UPDATE crawl_run SET status='error', finished_at=now(), error='annulé manuellement par admin' - WHERE id=$1 AND status='running' RETURNING id, run_type - `, [id]); - if (!r.rows.length) return reply.code(404).send({ ok: false, error: "Run non trouvé ou déjà terminé" }); + UPDATE crawl_run + SET cancel_requested = TRUE, + cancel_requested_at = now(), + cancel_requested_by = $2 + WHERE id = $1 AND status = 'running' AND cancel_requested = FALSE + RETURNING id, run_type + `, [id, req.adminUsername]); + + if (!r.rows.length) { + // Distinguer << deja demande >> de << run inexistant/termine >> : sinon + // double-cliquer sur Annuler affiche une erreur alarmante a tort. + const existing = await pool.query( + `SELECT status, cancel_requested FROM crawl_run WHERE id = $1`, [id] + ); + if (existing.rows.length && existing.rows[0].cancel_requested) { + return { ok: true, id, already_requested: true }; + } + return reply.code(404).send({ ok: false, error: "Run non trouvé ou déjà terminé" }); + } + await pool.query( `INSERT INTO crawl_log (level, message) VALUES ($1, $2)`, - ["warning", `[admin:${req.adminUsername}] run #${id} (${r.rows[0].run_type}) annulé manuellement`] + ["warning", `[admin:${req.adminUsername}] annulation demandee pour le run #${id} (${r.rows[0].run_type})`] ).catch(() => {}); - return { ok: true, id }; + await writeAuditLog(pool, req.adminUsername, "cancel_run", "crawl_run", id, null, { run_type: r.rows[0].run_type }); + return { ok: true, id, cancel_requested: true }; } catch (err) { fastify.log.error(err); return reply.code(500).send({ ok: false, error: "Erreur annulation run" }); @@ -727,7 +812,15 @@ export default async function adminRoutes(fastify, opts) { UPDATE job_triggers SET status='cancelled', finished_at=now() WHERE id=$1 AND status='pending' RETURNING id, job_type `, [id]); - if (!r.rows.length) return reply.code(404).send({ ok: false, error: "Job non trouvé ou déjà traité" }); + if (!r.rows.length) { + // Un job deja reclame par le crawler n'est plus annulable en tant que + // job : il n'existe plus que sous la forme du crawl_run qu'il a cree. + const existing = await pool.query(`SELECT status FROM job_triggers WHERE id = $1`, [id]); + const msg = existing.rows[0]?.status === "running" + ? "Job déjà démarré — annuler le run correspondant dans Vue d'ensemble" + : "Job non trouvé ou déjà traité"; + return reply.code(409).send({ ok: false, error: msg }); + } await pool.query( `INSERT INTO crawl_log (level, message) VALUES ($1, $2)`, ["warning", `[admin:${req.adminUsername}] job trigger #${id} (${r.rows[0].job_type}) annulé`] diff --git a/apps/api/src/app.js b/apps/api/src/app.js new file mode 100644 index 0000000..46a5985 --- /dev/null +++ b/apps/api/src/app.js @@ -0,0 +1,843 @@ +/** + * Construction de l'application Fastify. + * + * Séparé de server.js (qui se contente d'écouter) pour que les tests puissent + * instancier l'app avec un faux pool et l'interroger via `fastify.inject()`, + * sans ouvrir de port ni de connexion Postgres. + */ +import Fastify from "fastify"; +import rateLimit from "@fastify/rate-limit"; +import helmet from "@fastify/helmet"; +import cookie from "@fastify/cookie"; +import { timingSafeEqual } from "crypto"; +import { + ADMIN_COOKIE_NAME, + seedAdminUser, + signAdminSession, + isLockedOut, + recordLoginAttempt, + verifyPassword, + markLoginSuccess, + requireAdminSession, +} from "./adminAuth.js"; +import adminApiRoutes from "./adminRoutes.js"; +import { ValidationError, sanitizeSearchString, parseLimitOffset } from "./validate.js"; + +/** + * @param {object} [opts] + * @param {object|null} [opts.pool] pool pg (ou un double de test) + * @param {boolean} [opts.logger] + * @param {string} [opts.importToken] jeton Bearer de /admin/import + * @param {string[]} [opts.corsOrigins] + * @param {boolean} [opts.seedAdmin] false en test (évite un INSERT parasite) + * @param {number} [opts.globalRateLimitMax] requêtes/min, toutes routes + * @param {number} [opts.adminRateLimitMax] requêtes/min sur /admin/import + * @param {number} [opts.authRateLimitMax] requêtes/min sur /admin/auth/login + */ +export async function buildServer(opts = {}) { + const { + pool = null, + logger = false, + importToken = (process.env.BM_IMPORT_TOKEN || "").trim(), + corsOrigins = process.env.CORS_ORIGINS + ? process.env.CORS_ORIGINS.split(",").map((s) => s.trim()) + : ["https://metalfrom.eu", "https://www.metalfrom.eu"], + seedAdmin = true, + // Plafonds de débit paramétrables : les tests partagent une même instance + // d'app entre les cas (construire une app coûte ~14 ms, multipliées par des + // milliers d'exécutions en tests de mutation). Sans ça, l'état du limiteur + // s'accumulerait d'un test à l'autre et ferait échouer le 11e. Les valeurs + // par défaut restent celles de production, et sont testées explicitement + // dans apps/api/test/rateLimit.test.js. + globalRateLimitMax = 1000, + adminRateLimitMax = 10, + authRateLimitMax = 10, + } = opts; + + const fastify = Fastify({ + logger, + bodyLimit: 10485760, // 10 MB max pour éviter DoS mémoire + trustProxy: true // derrière Traefik (+ nginx pour /admin/*) : lit X-Forwarded-For + }); + + // Headers de sécurité + await fastify.register(helmet, { + contentSecurityPolicy: false, + crossOriginEmbedderPolicy: false + }); + + await fastify.register(cookie); + + // CORS middleware + fastify.addHook('onRequest', async (request, reply) => { + const origin = request.headers.origin; + const allowedOrigins = corsOrigins; + + if (allowedOrigins.includes(origin)) { + reply.header('Access-Control-Allow-Origin', origin); + } + + reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS'); + reply.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + reply.header('Access-Control-Allow-Credentials', 'true'); + + if (request.method === 'OPTIONS') { + // `return reply` est obligatoire : sans ça Fastify poursuit le cycle de vie + // et route quand même la requête OPTIONS vers un handler (ou un 404). + return reply.status(204).send(); + } + }); + + // Rate limiting global + await fastify.register(rateLimit, { + max: globalRateLimitMax, + timeWindow: '1 minute', + cache: 10000 + }); + + // Gestion d'erreurs globale + fastify.setErrorHandler((error, request, reply) => { + // Les erreurs 4xx (validation de schéma, rate-limit, payload trop gros…) ont + // un statusCode utile : l'écraser en 500 masquait la cause côté client et + // faisait passer des erreurs d'entrée pour des pannes serveur. + const status = Number(error.statusCode); + if (Number.isInteger(status) && status >= 400 && status < 500) { + return reply.status(status).send({ ok: false, error: error.message }); + } + fastify.log.error(error); + return reply.status(500).send({ + ok: false, + error: 'Une erreur est survenue' + }); + }); + + if (pool && seedAdmin) { + seedAdminUser(pool).catch((err) => fastify.log.error({ err }, "[admin] seed failed")); + } + + function requirePool() { + if (!pool) throw new Error("DATABASE_URL not set"); + return pool; + } + + function authBearer(req) { + const h = req.headers.authorization || ""; + const m = h.match(/^Bearer\s+(.+)$/i); + return m ? m[1] : null; + } + + function requireAdmin(req, reply) { + const provided = authBearer(req); + + if (!importToken || !provided) { + reply.code(401).send({ ok: false, error: "unauthorized" }); + return false; + } + + // Comparer les longueurs en OCTETS, pas en caractères : timingSafeEqual + // lève si les deux buffers diffèrent en taille, et un jeton multi-octets + // ("é" = 2 octets) passait le test de longueur de chaîne tout en produisant + // des buffers de tailles différentes → exception → 500 au lieu de 401. + const providedBuf = Buffer.from(provided, "utf8"); + const expectedBuf = Buffer.from(importToken, "utf8"); + if (providedBuf.length !== expectedBuf.length) { + reply.code(401).send({ ok: false, error: "unauthorized" }); + return false; + } + + const valid = timingSafeEqual(providedBuf, expectedBuf); + + if (!valid) { + reply.code(401).send({ ok: false, error: "unauthorized" }); + return false; + } + + return true; + } + + fastify.get("/", async () => { + return { ok: true, service: "BM API" }; + }); + + fastify.get("/api/health", async () => ({ ok: true })); + + fastify.get("/api/db", async (req, reply) => { + try { + const p = requirePool(); + const r = await p.query("SELECT now() as now, current_database() as db"); + return { ok: true, ...r.rows[0] }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur de connexion à la base de données' }); + } + }); + + fastify.get("/api/stats", async (req, reply) => { + try { + const p = requirePool(); + const q = ` + SELECT + count(*)::int as total, + count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded, + count(*) FILTER (WHERE geom IS NULL)::int as no_location, + count(*) FILTER (WHERE enriched = true)::int as enriched + FROM bands; + `; + const r = await p.query(q); + return { ok: true, ...r.rows[0] }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des stats' }); + } + }); + + fastify.get("/api/countries", async (req, reply) => { + try { + const p = requirePool(); + const q = ` + SELECT + country, + count(*)::int as total, + count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded, + count(*) FILTER (WHERE enriched = true)::int as enriched + FROM bands + GROUP BY country + ORDER BY total DESC; + `; + const r = await p.query(q); + return { ok: true, items: r.rows }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des pays' }); + } + }); + + fastify.get("/api/statuses", async (req, reply) => { + try { + const p = requirePool(); + const q = ` + SELECT + COALESCE(NULLIF(trim(status), ''), 'Unknown') as status, + count(*)::int as total, + count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded + FROM bands + GROUP BY 1 + ORDER BY total DESC; + `; + const r = await p.query(q); + return { ok: true, items: r.rows }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des statuts' }); + } + }); + + fastify.get("/api/clusters", async (req, reply) => { + try { + const p = requirePool(); + const { + bbox, + zoom, + countries, + status, + genre, + year_min, + year_max, + } = /** @type {Record} */ (req.query || {}); + + if (!bbox || !zoom) { + return reply.code(400).send({ ok: false, error: "bbox and zoom are required" }); + } + + const bboxParts = String(bbox).split(",").map(Number); + if (bboxParts.length !== 4) { + return reply.code(400).send({ ok: false, error: "bbox must have 4 values" }); + } + + const [minLon, minLat, maxLon, maxLat] = bboxParts; + const zoomLevel = Number(zoom); + + if ([minLon, minLat, maxLon, maxLat, zoomLevel].some(v => !Number.isFinite(v))) { + return reply.code(400).send({ ok: false, error: "Invalid bbox or zoom values" }); + } + + if (minLat < -90 || maxLat > 90 || minLon < -180 || maxLon > 180) { + return reply.code(400).send({ ok: false, error: "Coordinates out of range" }); + } + + if (minLon >= maxLon || minLat >= maxLat) { + return reply.code(400).send({ ok: false, error: "Invalid bbox bounds" }); + } + + if (zoomLevel < 0 || zoomLevel > 22) { + return reply.code(400).send({ ok: false, error: "Zoom level must be between 0 and 22" }); + } + + const cellSize = Math.max(0.01, 180 / Math.pow(2, zoomLevel)); + + // Source: band_locations (un point par localisation géocodée) JOIN bands. + const where = [ + "bl.geom IS NOT NULL", + "bl.geocode_status IN ('done','country_only')", + ]; + const vals = []; + let i = 1; + + where.push(`bl.geom && ST_MakeEnvelope($${i}, $${i+1}, $${i+2}, $${i+3}, 4326)`); + vals.push(minLon, minLat, maxLon, maxLat); + i += 4; + + if (countries) { + const cs = String(countries).split(",").map(s => s.trim().toUpperCase()).filter(Boolean); + if (cs.length > 100) { + return reply.code(400).send({ ok: false, error: "Max 100 pays simultanés" }); + } + if (cs.length) { + where.push(`b.country = ANY($${i}::text[])`); + vals.push(cs); + i++; + } + } + + if (status) { + const st = String(status).split(",").map(s => s.trim()).filter(Boolean); + if (st.length > 50) { + return reply.code(400).send({ ok: false, error: "Max 50 statuts simultanés" }); + } + if (st.length) { + where.push(`COALESCE(NULLIF(trim(b.status), ''), 'Unknown') = ANY($${i}::text[])`); + vals.push(st); + i++; + } + } + + if (genre) { + try { + const genreQuery = sanitizeSearchString(genre, 'Genre'); + where.push(`b.genre ILIKE $${i}`); + vals.push(`%${genreQuery}%`); + i++; + } catch (err) { + return reply.code(400).send({ ok: false, error: err.message }); + } + } + + if (year_min) { + const yearMin = Number(year_min); + if (!Number.isFinite(yearMin) || yearMin < 1800 || yearMin > 2100) { + return reply.code(400).send({ ok: false, error: 'year_min invalide' }); + } + where.push(`b.formed_year >= $${i}`); + vals.push(yearMin); + i++; + } + + if (year_max) { + const yearMax = Number(year_max); + if (!Number.isFinite(yearMax) || yearMax < 1800 || yearMax > 2100) { + return reply.code(400).send({ ok: false, error: 'year_max invalide' }); + } + where.push(`b.formed_year <= $${i}`); + vals.push(yearMax); + i++; + } + + const whereSql = where.join(" AND "); + + if (zoomLevel >= 12) { + const sql = ` + SELECT + b.ma_id, + b.name, + b.country, + COALESCE(NULLIF(trim(b.status), ''), 'Unknown') as status, + b.genre, + b.location_text, + b.formed_year, + bl.lat, + bl.lon, + bl.location_raw, + bl.step_order, + bl.step_label, + bl.is_country_only + FROM band_locations bl + JOIN bands b ON b.ma_id = bl.ma_id + WHERE ${whereSql} + ORDER BY bl.ma_id ASC, bl.step_order ASC + LIMIT 2000; + `; + const r = await p.query(sql, vals); + return { + ok: true, + type: "bands", + items: r.rows, + count: r.rows.length + }; + } + + const sql = ` + WITH grid_cells AS ( + SELECT + floor(ST_X(bl.geom) / $${i})::int as cell_x, + floor(ST_Y(bl.geom) / $${i})::int as cell_y, + b.ma_id, + b.name, + b.country, + COALESCE(NULLIF(trim(b.status), ''), 'Unknown') as status, + b.genre, + b.location_text, + b.formed_year, + bl.lat, + bl.lon, + bl.location_raw, + bl.step_label + FROM band_locations bl + JOIN bands b ON b.ma_id = bl.ma_id + WHERE ${whereSql} + ), + clusters AS ( + SELECT + cell_x, + cell_y, + count(*)::int as band_count, + avg(lat)::float8 as center_lat, + avg(lon)::float8 as center_lon, + array_agg(json_build_object( + 'ma_id', ma_id, + 'name', name, + 'country', country, + 'status', status, + 'genre', genre, + 'location_text', location_text, + 'formed_year', formed_year, + 'lat', lat, + 'lon', lon, + 'location_raw', location_raw, + 'step_label', step_label + ) ORDER BY name) as bands + FROM grid_cells + GROUP BY cell_x, cell_y + ) + SELECT + center_lat as lat, + center_lon as lon, + band_count as count, + CASE + WHEN band_count <= 5 THEN bands + ELSE bands[1:5] + END as sample_bands + FROM clusters + ORDER BY band_count DESC + LIMIT 1000; + `; + vals.push(cellSize); + + const r = await p.query(sql, vals); + return { + ok: true, + type: "clusters", + items: r.rows, + total_clusters: r.rows.length, + cell_size: cellSize, + zoom: zoomLevel + }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des clusters' }); + } + }); + + fastify.get("/api/bands", async (req, reply) => { + try { + const p = requirePool(); + const { + countries, + geocoded, + q, + status, + only_black, + limit, + offset, + } = /** @type {Record} */ (req.query || {}); + + let lim, off; + try { + ({ limit: lim, offset: off } = parseLimitOffset(limit, offset, { + defaultLimit: 1000, + maxLimit: 150000, + })); + } catch (err) { + if (err instanceof ValidationError) { + return reply.code(400).send({ ok: false, error: err.message }); + } + throw err; + } + + if (lim > 10000) { + fastify.log.warn(`Large query: ${lim} rows requested from ${req.ip}`); + } + + const where = []; + const vals = []; + let i = 1; + + if (countries) { + const cs = String(countries).split(",").map(s => s.trim().toUpperCase()).filter(Boolean); + if (cs.length > 100) { + return reply.code(400).send({ ok: false, error: "Max 100 pays simultanés" }); + } + if (cs.length) { + where.push(`country = ANY($${i}::text[])`); + vals.push(cs); + i++; + } + } + + if (geocoded === "1") where.push(`geom IS NOT NULL`); + if (geocoded === "0") where.push(`geom IS NULL`); + + if (status) { + const st = String(status).split(",").map(s => s.trim()).filter(Boolean); + if (st.length > 50) { + return reply.code(400).send({ ok: false, error: "Max 50 statuts simultanés" }); + } + if (st.length) { + where.push(`COALESCE(NULLIF(trim(status), ''), 'Unknown') = ANY($${i}::text[])`); + vals.push(st); + i++; + } + } + + if (only_black === "1") { + where.push(`genre ILIKE '%black%'`); + } + + if (q) { + try { + const query = sanitizeSearchString(q, 'Recherche'); + const qq = `%${query}%`; + where.push(`(name ILIKE $${i} OR genre ILIKE $${i} OR location_text ILIKE $${i} OR COALESCE(status,'') ILIKE $${i})`); + vals.push(qq); + i++; + } catch (err) { + return reply.code(400).send({ ok: false, error: err.message }); + } + } + + const whereSql = where.length ? `WHERE ${where.join(" AND ")}` : ""; + + const sql = ` + SELECT + ma_id, + name, + country, + COALESCE(NULLIF(trim(status), ''), 'Unknown') as status, + genre, + location_text, + enriched, + formed_year, + themes, + lat, + lon + FROM bands + ${whereSql} + ORDER BY ma_id ASC + LIMIT $${i} OFFSET $${i+1}; + `; + vals.push(lim, off); + + const r = await p.query(sql, vals); + return { + ok: true, + items: r.rows, + limit: lim, + offset: off + }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la recherche' }); + } + }); + + fastify.get("/api/facets", async (req, reply) => { + try { + const p = requirePool(); + + const [statusRes, countryRes, genreRes, yearRes] = await Promise.all([ + p.query(` + SELECT + COALESCE(NULLIF(trim(status), ''), 'Unknown') as value, + count(*)::int as count + FROM bands + WHERE geom IS NOT NULL + GROUP BY 1 + ORDER BY count DESC + `), + p.query(` + SELECT + COALESCE(country, '??') as value, + count(*)::int as count + FROM bands + WHERE geom IS NOT NULL + GROUP BY 1 + ORDER BY count DESC + `), + p.query(` + SELECT + genre as value, + count(*)::int as count + FROM bands + WHERE geom IS NOT NULL + AND genre IS NOT NULL + AND genre != '' + GROUP BY 1 + ORDER BY count DESC + LIMIT 500 + `), + p.query(` + SELECT + MIN(formed_year)::int as min_year, + MAX(formed_year)::int as max_year + FROM bands + WHERE geom IS NOT NULL + AND formed_year >= 1900 + AND formed_year <= extract(year from now()) + `) + ]); + + return { + ok: true, + statuses: statusRes.rows, + countries: countryRes.rows, + genres: genreRes.rows, + year_range: yearRes.rows[0] || { min_year: null, max_year: null } + }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des facettes' }); + } + }); + + fastify.get("/api/band/:ma_id", async (req, reply) => { + try { + const p = requirePool(); + const { ma_id } = /** @type {{ ma_id: string }} */ (req.params); + const id = Number(ma_id); + + if (!Number.isFinite(id) || id < 0) { + return reply.code(400).send({ ok: false, error: "bad ma_id" }); + } + + const r = await p.query( + `SELECT + ma_id, + name, + country, + status, + genre, + location_text, + enriched, + data, + formed_year, + themes, + lat, + lon, + geocoded_at + FROM bands + WHERE ma_id = $1 + LIMIT 1`, + [id] + ); + + if (!r.rows.length) { + return reply.code(404).send({ ok: false, error: "not found" }); + } + + return { ok: true, item: r.rows[0] }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération du groupe' }); + } + }); + + fastify.register(async function(adminRoutes) { + await adminRoutes.register(rateLimit, { + max: adminRateLimitMax, + timeWindow: '1 minute', + keyGenerator: (req) => { + return authBearer(req) || req.ip; + } + }); + + adminRoutes.post("/admin/import", async (req, reply) => { + if (!requireAdmin(req, reply)) return; + + try { + const body = /** @type {{ bands?: unknown[] }} */ (req.body); + + if (!body || typeof body !== "object") { + return reply.code(400).send({ ok: false, error: "invalid body/json" }); + } + + const bands = Array.isArray(body.bands) ? body.bands : null; + + if (!bands) { + return reply.code(400).send({ ok: false, error: "missing bands[]" }); + } + + if (bands.length > 1000) { + return reply.code(400).send({ + ok: false, + error: "Max 1000 bands par import" + }); + } + + const p = requirePool(); + let upserted = 0; + + for (const raw of bands) { + if (!raw || typeof raw !== "object") continue; + const b = /** @type {Record} */ (raw); + + const ma_id = Number(b.ma_id); + if (!Number.isFinite(ma_id)) continue; + + const name = b.name ?? null; + const country = b.country ?? null; + const status = b.status ?? null; + const genre = b.genre ?? null; + const location_text = b.location_text ?? b.location ?? null; + const hasData = b.data && typeof b.data === "object"; + const data = hasData ? b.data : null; + const enriched = hasData ? true : (b.enriched ?? null); + + await p.query( + ` + INSERT INTO bands (ma_id, name, country, status, genre, location_text, data, enriched) + VALUES ($1,$2,$3,$4,$5,$6,$7, COALESCE($8,false)) + ON CONFLICT (ma_id) DO UPDATE SET + name = COALESCE(EXCLUDED.name, bands.name), + country = COALESCE(EXCLUDED.country, bands.country), + status = COALESCE(EXCLUDED.status, bands.status), + genre = COALESCE(EXCLUDED.genre, bands.genre), + location_text = COALESCE(EXCLUDED.location_text, bands.location_text), + data = COALESCE(EXCLUDED.data, bands.data), + enriched = COALESCE(EXCLUDED.enriched, bands.enriched) + `, + [ma_id, name, country, status, genre, location_text, data, enriched] + ); + upserted++; + } + + return reply.send({ ok: true, upserted }); + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de l\'import' }); + } + }); + + adminRoutes.get("/admin/enrich/next", async (req, reply) => { + if (!requireAdmin(req, reply)) return; + + try { + const p = requirePool(); + const query = /** @type {Record} */ (req.query || {}); + const limitRaw = Number(query.limit ?? 50); + const limit = Math.max(1, Math.min(Number.isFinite(limitRaw) ? limitRaw : 50, 500)); + const country = (query.country ?? "").toString().trim().toUpperCase(); + + const params = []; + let where = "WHERE (data->'band_page') IS NULL"; + + if (country) { + params.push(country); + where += ` AND country = $${params.length}`; + } + + params.push(limit); + + const sql = ` + SELECT + ma_id, + (data->>'url') AS url + FROM bands + ${where} + ORDER BY ma_id ASC + LIMIT $${params.length} + `; + + const r = await p.query(sql, params); + const items = (r.rows || []).filter((x) => x.url); + + return { ok: true, count: items.length, items }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des groupes à enrichir' }); + } + }); + }); + + // ------------------------------------------------------------------ + // Auth dashboard admin (session cookie, distincte du token importToken) + // ------------------------------------------------------------------ + fastify.register(async function (authRoutes) { + await authRoutes.register(rateLimit, { + max: authRateLimitMax, + timeWindow: "1 minute", + keyGenerator: (req) => req.ip, + }); + + authRoutes.post("/admin/auth/login", async (req, reply) => { + try { + const p = requirePool(); + const { username, password } = /** @type {{ username?: unknown, password?: unknown }} */ (req.body || {}); + if (typeof username !== "string" || typeof password !== "string" || !username || !password) { + return reply.code(400).send({ ok: false, error: "username et password requis" }); + } + const uname = username.trim().slice(0, 100); + const ip = req.ip; + + if (await isLockedOut(p, uname, ip)) { + return reply.code(429).send({ ok: false, error: "Trop de tentatives, réessayez dans quelques minutes" }); + } + + const valid = await verifyPassword(p, uname, password); + await recordLoginAttempt(p, uname, ip, valid); + + if (!valid) { + return reply.code(401).send({ ok: false, error: "Identifiants invalides" }); + } + + await markLoginSuccess(p, uname); + const token = signAdminSession(uname); + reply.setCookie(ADMIN_COOKIE_NAME, token, { + httpOnly: true, + secure: true, + sameSite: "strict", + path: "/", + maxAge: 12 * 3600, + }); + return { ok: true, username: uname }; + } catch (err) { + fastify.log.error(err); + return reply.code(500).send({ ok: false, error: "Erreur de connexion" }); + } + }); + + authRoutes.post("/admin/auth/logout", async (req, reply) => { + reply.clearCookie(ADMIN_COOKIE_NAME, { path: "/" }); + return { ok: true }; + }); + + authRoutes.get("/admin/auth/me", async (req, reply) => { + const username = requireAdminSession(req, reply); + if (!username) return; + return { ok: true, username }; + }); + }); + + await fastify.register(adminApiRoutes, { pool }); + + await fastify.ready(); + return fastify; +} diff --git a/apps/api/src/server.js b/apps/api/src/server.js index 33fa6e9..1b4d5ea 100644 --- a/apps/api/src/server.js +++ b/apps/api/src/server.js @@ -1,811 +1,25 @@ -import Fastify from "fastify"; +/** + * Point d'entrée du process. Toute la logique vit dans app.js pour rester + * testable ; ce fichier ne fait qu'ouvrir la connexion DB et écouter. + */ import pg from "pg"; -import rateLimit from "@fastify/rate-limit"; -import helmet from "@fastify/helmet"; -import cookie from "@fastify/cookie"; -import { timingSafeEqual } from "crypto"; -import { - ADMIN_COOKIE_NAME, - seedAdminUser, - signAdminSession, - isLockedOut, - recordLoginAttempt, - verifyPassword, - markLoginSuccess, - requireAdminSession, -} from "./adminAuth.js"; -import adminApiRoutes from "./adminRoutes.js"; +import { buildServer } from "./app.js"; const { Pool } = pg; -const fastify = Fastify({ - logger: true, - bodyLimit: 10485760, // 10 MB max pour éviter DoS mémoire - trustProxy: true // derrière Traefik (+ nginx pour /admin/*) : lit X-Forwarded-For -}); - -// Headers de sécurité -await fastify.register(helmet, { - contentSecurityPolicy: false, - crossOriginEmbedderPolicy: false -}); - -await fastify.register(cookie); - -// CORS middleware -fastify.addHook('onRequest', async (request, reply) => { - const origin = request.headers.origin; - const allowedOrigins = process.env.CORS_ORIGINS - ? process.env.CORS_ORIGINS.split(',').map(s => s.trim()) - : ['https://metalfrom.eu', 'https://www.metalfrom.eu']; - - if (allowedOrigins.includes(origin)) { - reply.header('Access-Control-Allow-Origin', origin); - } - - reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS'); - reply.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); - reply.header('Access-Control-Allow-Credentials', 'true'); - - if (request.method === 'OPTIONS') { - reply.status(204).send(); - } -}); - -// Rate limiting global -await fastify.register(rateLimit, { - max: 1000, - timeWindow: '1 minute', - cache: 10000 -}); - -// Gestion d'erreurs globale -fastify.setErrorHandler((error, request, reply) => { - fastify.log.error(error); - reply.status(500).send({ - ok: false, - error: 'Une erreur est survenue' - }); -}); - const PORT = Number(process.env.PORT || 3000); const DATABASE_URL = process.env.DATABASE_URL; -const BM_IMPORT_TOKEN = (process.env.BM_IMPORT_TOKEN || "").trim(); -let pool = null; -if (DATABASE_URL) { - pool = new Pool({ - connectionString: DATABASE_URL, - statement_timeout: 60000 - }); - seedAdminUser(pool).catch((err) => fastify.log.error({ err }, "[admin] seed failed")); -} +const pool = DATABASE_URL + ? new Pool({ connectionString: DATABASE_URL, statement_timeout: 60000 }) + : null; -function requirePool() { - if (!pool) throw new Error("DATABASE_URL not set"); - return pool; -} +const fastify = await buildServer({ pool, logger: true }); -function authBearer(req) { - const h = req.headers.authorization || ""; - const m = h.match(/^Bearer\s+(.+)$/i); - return m ? m[1] : null; -} - -function requireAdmin(req, reply) { - const provided = authBearer(req); - - if (!BM_IMPORT_TOKEN || !provided || provided.length !== BM_IMPORT_TOKEN.length) { - reply.code(401).send({ ok: false, error: "unauthorized" }); - return false; - } - - const valid = timingSafeEqual( - Buffer.from(provided), - Buffer.from(BM_IMPORT_TOKEN) - ); - - if (!valid) { - reply.code(401).send({ ok: false, error: "unauthorized" }); - return false; - } - - return true; -} - -function sanitizeSearchString(str, fieldName = 'champ') { - const trimmed = String(str).trim(); - - if (trimmed.length < 2 || trimmed.length > 100) { - throw new Error(`${fieldName} doit faire entre 2 et 100 caractères`); - } - - if (/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F]/.test(trimmed)) { - throw new Error(`${fieldName} contient des caractères invalides`); - } - - if (/%%%|_{10,}|%{10,}/.test(trimmed)) { - throw new Error(`${fieldName} contient des patterns invalides`); - } - - return trimmed; -} - -fastify.get("/", async () => { - return { ok: true, service: "BM API" }; +// `listen()` renvoie une promesse : sans catch, un port déjà pris produisait un +// unhandled rejection et un process zombie au lieu d'un exit code non nul (que +// Docker/Coolify utilisent pour redémarrer le conteneur). +fastify.listen({ port: PORT, host: "0.0.0.0" }).catch((err) => { + fastify.log.error(err, "[api] listen failed"); + process.exit(1); }); - -fastify.get("/api/health", async () => ({ ok: true })); - -fastify.get("/api/db", async (req, reply) => { - try { - const p = requirePool(); - const r = await p.query("SELECT now() as now, current_database() as db"); - return { ok: true, ...r.rows[0] }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur de connexion à la base de données' }); - } -}); - -fastify.get("/api/stats", async (req, reply) => { - try { - const p = requirePool(); - const q = ` - SELECT - count(*)::int as total, - count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded, - count(*) FILTER (WHERE geom IS NULL)::int as no_location, - count(*) FILTER (WHERE enriched = true)::int as enriched - FROM bands; - `; - const r = await p.query(q); - return { ok: true, ...r.rows[0] }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des stats' }); - } -}); - -fastify.get("/api/countries", async (req, reply) => { - try { - const p = requirePool(); - const q = ` - SELECT - country, - count(*)::int as total, - count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded, - count(*) FILTER (WHERE enriched = true)::int as enriched - FROM bands - GROUP BY country - ORDER BY total DESC; - `; - const r = await p.query(q); - return { ok: true, items: r.rows }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des pays' }); - } -}); - -fastify.get("/api/statuses", async (req, reply) => { - try { - const p = requirePool(); - const q = ` - SELECT - COALESCE(NULLIF(trim(status), ''), 'Unknown') as status, - count(*)::int as total, - count(*) FILTER (WHERE geom IS NOT NULL)::int as geocoded - FROM bands - GROUP BY 1 - ORDER BY total DESC; - `; - const r = await p.query(q); - return { ok: true, items: r.rows }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des statuts' }); - } -}); - -fastify.get("/api/clusters", async (req, reply) => { - try { - const p = requirePool(); - const { - bbox, - zoom, - countries, - status, - genre, - year_min, - year_max, - } = req.query || {}; - - if (!bbox || !zoom) { - return reply.code(400).send({ ok: false, error: "bbox and zoom are required" }); - } - - const bboxParts = String(bbox).split(",").map(Number); - if (bboxParts.length !== 4) { - return reply.code(400).send({ ok: false, error: "bbox must have 4 values" }); - } - - const [minLon, minLat, maxLon, maxLat] = bboxParts; - const zoomLevel = Number(zoom); - - if ([minLon, minLat, maxLon, maxLat, zoomLevel].some(v => !Number.isFinite(v))) { - return reply.code(400).send({ ok: false, error: "Invalid bbox or zoom values" }); - } - - if (minLat < -90 || maxLat > 90 || minLon < -180 || maxLon > 180) { - return reply.code(400).send({ ok: false, error: "Coordinates out of range" }); - } - - if (minLon >= maxLon || minLat >= maxLat) { - return reply.code(400).send({ ok: false, error: "Invalid bbox bounds" }); - } - - if (zoomLevel < 0 || zoomLevel > 22) { - return reply.code(400).send({ ok: false, error: "Zoom level must be between 0 and 22" }); - } - - const cellSize = Math.max(0.01, 180 / Math.pow(2, zoomLevel)); - - // Source: band_locations (un point par localisation géocodée) JOIN bands. - const where = [ - "bl.geom IS NOT NULL", - "bl.geocode_status IN ('done','country_only')", - ]; - const vals = []; - let i = 1; - - where.push(`bl.geom && ST_MakeEnvelope($${i}, $${i+1}, $${i+2}, $${i+3}, 4326)`); - vals.push(minLon, minLat, maxLon, maxLat); - i += 4; - - if (countries) { - const cs = String(countries).split(",").map(s => s.trim().toUpperCase()).filter(Boolean); - if (cs.length > 100) { - return reply.code(400).send({ ok: false, error: "Max 100 pays simultanés" }); - } - if (cs.length) { - where.push(`b.country = ANY($${i}::text[])`); - vals.push(cs); - i++; - } - } - - if (status) { - const st = String(status).split(",").map(s => s.trim()).filter(Boolean); - if (st.length > 50) { - return reply.code(400).send({ ok: false, error: "Max 50 statuts simultanés" }); - } - if (st.length) { - where.push(`COALESCE(NULLIF(trim(b.status), ''), 'Unknown') = ANY($${i}::text[])`); - vals.push(st); - i++; - } - } - - if (genre) { - try { - const genreQuery = sanitizeSearchString(genre, 'Genre'); - where.push(`b.genre ILIKE $${i}`); - vals.push(`%${genreQuery}%`); - i++; - } catch (err) { - return reply.code(400).send({ ok: false, error: err.message }); - } - } - - if (year_min) { - const yearMin = Number(year_min); - if (!Number.isFinite(yearMin) || yearMin < 1800 || yearMin > 2100) { - return reply.code(400).send({ ok: false, error: 'year_min invalide' }); - } - where.push(`b.formed_year >= $${i}`); - vals.push(yearMin); - i++; - } - - if (year_max) { - const yearMax = Number(year_max); - if (!Number.isFinite(yearMax) || yearMax < 1800 || yearMax > 2100) { - return reply.code(400).send({ ok: false, error: 'year_max invalide' }); - } - where.push(`b.formed_year <= $${i}`); - vals.push(yearMax); - i++; - } - - const whereSql = where.join(" AND "); - - if (zoomLevel >= 12) { - const sql = ` - SELECT - b.ma_id, - b.name, - b.country, - COALESCE(NULLIF(trim(b.status), ''), 'Unknown') as status, - b.genre, - b.location_text, - b.formed_year, - bl.lat, - bl.lon, - bl.location_raw, - bl.step_order, - bl.step_label, - bl.is_country_only - FROM band_locations bl - JOIN bands b ON b.ma_id = bl.ma_id - WHERE ${whereSql} - ORDER BY bl.ma_id ASC, bl.step_order ASC - LIMIT 2000; - `; - const r = await p.query(sql, vals); - return { - ok: true, - type: "bands", - items: r.rows, - count: r.rows.length - }; - } - - const sql = ` - WITH grid_cells AS ( - SELECT - floor(ST_X(bl.geom) / $${i})::int as cell_x, - floor(ST_Y(bl.geom) / $${i})::int as cell_y, - b.ma_id, - b.name, - b.country, - COALESCE(NULLIF(trim(b.status), ''), 'Unknown') as status, - b.genre, - b.location_text, - b.formed_year, - bl.lat, - bl.lon, - bl.location_raw, - bl.step_label - FROM band_locations bl - JOIN bands b ON b.ma_id = bl.ma_id - WHERE ${whereSql} - ), - clusters AS ( - SELECT - cell_x, - cell_y, - count(*)::int as band_count, - avg(lat)::float8 as center_lat, - avg(lon)::float8 as center_lon, - array_agg(json_build_object( - 'ma_id', ma_id, - 'name', name, - 'country', country, - 'status', status, - 'genre', genre, - 'location_text', location_text, - 'formed_year', formed_year, - 'lat', lat, - 'lon', lon, - 'location_raw', location_raw, - 'step_label', step_label - ) ORDER BY name) as bands - FROM grid_cells - GROUP BY cell_x, cell_y - ) - SELECT - center_lat as lat, - center_lon as lon, - band_count as count, - CASE - WHEN band_count <= 5 THEN bands - ELSE bands[1:5] - END as sample_bands - FROM clusters - ORDER BY band_count DESC - LIMIT 1000; - `; - vals.push(cellSize); - - const r = await p.query(sql, vals); - return { - ok: true, - type: "clusters", - items: r.rows, - total_clusters: r.rows.length, - cell_size: cellSize, - zoom: zoomLevel - }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des clusters' }); - } -}); - -fastify.get("/api/bands", async (req, reply) => { - try { - const p = requirePool(); - const { - countries, - geocoded, - q, - status, - only_black, - limit, - offset, - } = req.query || {}; - - const lim = Math.min(Number(limit || 1000), 150000); - const off = Math.max(Number(offset || 0), 0); - - if (off > 1000000) { - return reply.code(400).send({ - ok: false, - error: "Offset trop grand (max 1 million)" - }); - } - - if (lim > 10000) { - fastify.log.warn(`Large query: ${lim} rows requested from ${req.ip}`); - } - - const where = []; - const vals = []; - let i = 1; - - if (countries) { - const cs = String(countries).split(",").map(s => s.trim().toUpperCase()).filter(Boolean); - if (cs.length > 100) { - return reply.code(400).send({ ok: false, error: "Max 100 pays simultanés" }); - } - if (cs.length) { - where.push(`country = ANY($${i}::text[])`); - vals.push(cs); - i++; - } - } - - if (geocoded === "1") where.push(`geom IS NOT NULL`); - if (geocoded === "0") where.push(`geom IS NULL`); - - if (status) { - const st = String(status).split(",").map(s => s.trim()).filter(Boolean); - if (st.length > 50) { - return reply.code(400).send({ ok: false, error: "Max 50 statuts simultanés" }); - } - if (st.length) { - where.push(`COALESCE(NULLIF(trim(status), ''), 'Unknown') = ANY($${i}::text[])`); - vals.push(st); - i++; - } - } - - if (only_black === "1") { - where.push(`genre ILIKE '%black%'`); - } - - if (q) { - try { - const query = sanitizeSearchString(q, 'Recherche'); - const qq = `%${query}%`; - where.push(`(name ILIKE $${i} OR genre ILIKE $${i} OR location_text ILIKE $${i} OR COALESCE(status,'') ILIKE $${i})`); - vals.push(qq); - i++; - } catch (err) { - return reply.code(400).send({ ok: false, error: err.message }); - } - } - - const whereSql = where.length ? `WHERE ${where.join(" AND ")}` : ""; - - const sql = ` - SELECT - ma_id, - name, - country, - COALESCE(NULLIF(trim(status), ''), 'Unknown') as status, - genre, - location_text, - enriched, - formed_year, - themes, - lat, - lon - FROM bands - ${whereSql} - ORDER BY ma_id ASC - LIMIT $${i} OFFSET $${i+1}; - `; - vals.push(lim, off); - - const r = await p.query(sql, vals); - return { - ok: true, - items: r.rows, - limit: lim, - offset: off - }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la recherche' }); - } -}); - -fastify.get("/api/facets", async (req, reply) => { - try { - const p = requirePool(); - - const [statusRes, countryRes, genreRes, yearRes] = await Promise.all([ - p.query(` - SELECT - COALESCE(NULLIF(trim(status), ''), 'Unknown') as value, - count(*)::int as count - FROM bands - WHERE geom IS NOT NULL - GROUP BY 1 - ORDER BY count DESC - `), - p.query(` - SELECT - COALESCE(country, '??') as value, - count(*)::int as count - FROM bands - WHERE geom IS NOT NULL - GROUP BY 1 - ORDER BY count DESC - `), - p.query(` - SELECT - genre as value, - count(*)::int as count - FROM bands - WHERE geom IS NOT NULL - AND genre IS NOT NULL - AND genre != '' - GROUP BY 1 - ORDER BY count DESC - LIMIT 500 - `), - p.query(` - SELECT - MIN(formed_year)::int as min_year, - MAX(formed_year)::int as max_year - FROM bands - WHERE geom IS NOT NULL - AND formed_year >= 1900 - AND formed_year <= extract(year from now()) - `) - ]); - - return { - ok: true, - statuses: statusRes.rows, - countries: countryRes.rows, - genres: genreRes.rows, - year_range: yearRes.rows[0] || { min_year: null, max_year: null } - }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des facettes' }); - } -}); - -fastify.get("/api/band/:ma_id", async (req, reply) => { - try { - const p = requirePool(); - const id = Number(req.params.ma_id); - - if (!Number.isFinite(id) || id < 0) { - return reply.code(400).send({ ok: false, error: "bad ma_id" }); - } - - const r = await p.query( - `SELECT - ma_id, - name, - country, - status, - genre, - location_text, - enriched, - data, - formed_year, - themes, - lat, - lon, - geocoded_at - FROM bands - WHERE ma_id = $1 - LIMIT 1`, - [id] - ); - - if (!r.rows.length) { - return reply.code(404).send({ ok: false, error: "not found" }); - } - - return { ok: true, item: r.rows[0] }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération du groupe' }); - } -}); - -fastify.register(async function(adminRoutes) { - await adminRoutes.register(rateLimit, { - max: 10, - timeWindow: '1 minute', - keyGenerator: (req) => { - return authBearer(req) || req.ip; - } - }); - - adminRoutes.post("/admin/import", async (req, reply) => { - if (!requireAdmin(req, reply)) return; - - try { - const body = req.body; - - if (!body || typeof body !== "object") { - return reply.code(400).send({ ok: false, error: "invalid body/json" }); - } - - const bands = Array.isArray(body.bands) ? body.bands : null; - - if (!bands) { - return reply.code(400).send({ ok: false, error: "missing bands[]" }); - } - - if (bands.length > 1000) { - return reply.code(400).send({ - ok: false, - error: "Max 1000 bands par import" - }); - } - - const p = requirePool(); - let upserted = 0; - - for (const b of bands) { - if (!b || typeof b !== "object") continue; - - const ma_id = Number(b.ma_id); - if (!Number.isFinite(ma_id)) continue; - - const name = b.name ?? null; - const country = b.country ?? null; - const status = b.status ?? null; - const genre = b.genre ?? null; - const location_text = b.location_text ?? b.location ?? null; - const hasData = b.data && typeof b.data === "object"; - const data = hasData ? b.data : null; - const enriched = hasData ? true : (b.enriched ?? null); - - await p.query( - ` - INSERT INTO bands (ma_id, name, country, status, genre, location_text, data, enriched) - VALUES ($1,$2,$3,$4,$5,$6,$7, COALESCE($8,false)) - ON CONFLICT (ma_id) DO UPDATE SET - name = COALESCE(EXCLUDED.name, bands.name), - country = COALESCE(EXCLUDED.country, bands.country), - status = COALESCE(EXCLUDED.status, bands.status), - genre = COALESCE(EXCLUDED.genre, bands.genre), - location_text = COALESCE(EXCLUDED.location_text, bands.location_text), - data = COALESCE(EXCLUDED.data, bands.data), - enriched = COALESCE(EXCLUDED.enriched, bands.enriched) - `, - [ma_id, name, country, status, genre, location_text, data, enriched] - ); - upserted++; - } - - return reply.send({ ok: true, upserted }); - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de l\'import' }); - } - }); - - adminRoutes.get("/admin/enrich/next", async (req, reply) => { - if (!requireAdmin(req, reply)) return; - - try { - const p = requirePool(); - const limitRaw = Number(req.query?.limit ?? 50); - const limit = Math.max(1, Math.min(Number.isFinite(limitRaw) ? limitRaw : 50, 500)); - const country = (req.query?.country ?? "").toString().trim().toUpperCase(); - - const params = []; - let where = "WHERE (data->'band_page') IS NULL"; - - if (country) { - params.push(country); - where += ` AND country = $${params.length}`; - } - - params.push(limit); - - const sql = ` - SELECT - ma_id, - (data->>'url') AS url - FROM bands - ${where} - ORDER BY ma_id ASC - LIMIT $${params.length} - `; - - const r = await p.query(sql, params); - const items = (r.rows || []).filter((x) => x.url); - - return { ok: true, count: items.length, items }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: 'Erreur lors de la récupération des groupes à enrichir' }); - } - }); -}); - -// ------------------------------------------------------------------ -// Auth dashboard admin (session cookie, distincte du token BM_IMPORT_TOKEN) -// ------------------------------------------------------------------ -fastify.register(async function (authRoutes) { - await authRoutes.register(rateLimit, { - max: 10, - timeWindow: "1 minute", - keyGenerator: (req) => req.ip, - }); - - authRoutes.post("/admin/auth/login", async (req, reply) => { - try { - const p = requirePool(); - const { username, password } = req.body || {}; - if (typeof username !== "string" || typeof password !== "string" || !username || !password) { - return reply.code(400).send({ ok: false, error: "username et password requis" }); - } - const uname = username.trim().slice(0, 100); - const ip = req.ip; - - if (await isLockedOut(p, uname, ip)) { - return reply.code(429).send({ ok: false, error: "Trop de tentatives, réessayez dans quelques minutes" }); - } - - const valid = await verifyPassword(p, uname, password); - await recordLoginAttempt(p, uname, ip, valid); - - if (!valid) { - return reply.code(401).send({ ok: false, error: "Identifiants invalides" }); - } - - await markLoginSuccess(p, uname); - const token = signAdminSession(uname); - reply.setCookie(ADMIN_COOKIE_NAME, token, { - httpOnly: true, - secure: true, - sameSite: "strict", - path: "/", - maxAge: 12 * 3600, - }); - return { ok: true, username: uname }; - } catch (err) { - fastify.log.error(err); - return reply.code(500).send({ ok: false, error: "Erreur de connexion" }); - } - }); - - authRoutes.post("/admin/auth/logout", async (req, reply) => { - reply.clearCookie(ADMIN_COOKIE_NAME, { path: "/" }); - return { ok: true }; - }); - - authRoutes.get("/admin/auth/me", async (req, reply) => { - const username = requireAdminSession(req, reply); - if (!username) return; - return { ok: true, username }; - }); -}); - -await fastify.register(adminApiRoutes, { pool }); - -fastify.listen({ port: PORT, host: "0.0.0.0" }); \ No newline at end of file diff --git a/apps/api/src/validate.js b/apps/api/src/validate.js new file mode 100644 index 0000000..e1219a3 --- /dev/null +++ b/apps/api/src/validate.js @@ -0,0 +1,161 @@ +/** + * Helpers de validation purs (aucune dépendance à Fastify / pg). + * + * Extraits de server.js / adminRoutes.js pour être testables unitairement sans + * démarrer de serveur ni de base de données. + * + * Convention : chaque helper renvoie soit la valeur normalisée, soit lève une + * ValidationError dont le `message` est directement affichable à l'utilisateur. + */ + +export class ValidationError extends Error { + constructor(message) { + super(message); + this.name = "ValidationError"; + } +} + +/** + * Nettoie une chaîne de recherche destinée à un ILIKE. + * Rejette les caractères de contrôle et les patterns pathologiques qui font + * exploser le planner Postgres (backtracking sur `%%%`, `____________`, …). + */ +export function sanitizeSearchString(str, fieldName = "champ") { + const trimmed = String(str).trim(); + + if (trimmed.length < 2 || trimmed.length > 100) { + throw new ValidationError(`${fieldName} doit faire entre 2 et 100 caractères`); + } + // eslint-disable-next-line no-control-regex + if (/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F]/.test(trimmed)) { + throw new ValidationError(`${fieldName} contient des caractères invalides`); + } + if (/%%%|_{10,}|%{10,}/.test(trimmed)) { + throw new ValidationError(`${fieldName} contient des patterns invalides`); + } + + return trimmed; +} + +/** + * Parse et valide un `limit`/`offset` de liste publique. + * + * Corrige un bug de l'implémentation initiale : `Number("abc")` donnait NaN, + * que `Math.min` propageait jusqu'au `LIMIT $n` de la requête, provoquant une + * erreur pg et un 500 au lieu d'un 400. On retombe désormais sur la valeur par + * défaut pour une entrée non numérique. + */ +export function parseLimitOffset(rawLimit, rawOffset, { defaultLimit = 1000, maxLimit = 10000 } = {}) { + const limitNum = rawLimit === undefined || rawLimit === null || rawLimit === "" ? defaultLimit : Number(rawLimit); + if (!Number.isFinite(limitNum) || limitNum < 1) { + throw new ValidationError("limit invalide"); + } + const offsetNum = rawOffset === undefined || rawOffset === null || rawOffset === "" ? 0 : Number(rawOffset); + if (!Number.isFinite(offsetNum) || offsetNum < 0) { + throw new ValidationError("offset invalide"); + } + if (offsetNum > 1_000_000) { + throw new ValidationError("Offset trop grand (max 1 million)"); + } + + return { + limit: Math.min(Math.floor(limitNum), maxLimit), + offset: Math.floor(offsetNum), + }; +} + +/** Pagination admin : page/pageSize bornés, offset dérivé. */ +export function pagination(query = {}) { + const page = Math.max(1, Number(query.page) || 1); + const pageSize = Math.min(200, Math.max(1, Number(query.pageSize) || 50)); + return { page, pageSize, offset: (page - 1) * pageSize }; +} + +/** + * Parse "minLon,minLat,maxLon,maxLat" et valide la cohérence géographique. + */ +export function parseBbox(raw) { + if (!raw) throw new ValidationError("bbox and zoom are required"); + + const parts = String(raw).split(",").map(Number); + if (parts.length !== 4) throw new ValidationError("bbox must have 4 values"); + + const [minLon, minLat, maxLon, maxLat] = parts; + if (parts.some((v) => !Number.isFinite(v))) { + throw new ValidationError("Invalid bbox or zoom values"); + } + if (minLat < -90 || maxLat > 90 || minLon < -180 || maxLon > 180) { + throw new ValidationError("Coordinates out of range"); + } + if (minLon >= maxLon || minLat >= maxLat) { + throw new ValidationError("Invalid bbox bounds"); + } + + return { minLon, minLat, maxLon, maxLat }; +} + +export function parseZoom(raw) { + const zoom = Number(raw); + if (!Number.isFinite(zoom)) throw new ValidationError("Invalid bbox or zoom values"); + if (zoom < 0 || zoom > 22) throw new ValidationError("Zoom level must be between 0 and 22"); + return zoom; +} + +/** Taille de cellule de la grille de clustering, en degrés. */ +export function cellSizeForZoom(zoom) { + return Math.max(0.01, 180 / Math.pow(2, zoom)); +} + +/** + * Découpe une liste CSV (pays, statuts…) en tableau borné. + * `transform` permet de normaliser chaque élément (ex: toUpperCase pour les pays). + * + * @param {unknown} raw + * @param {{ max?: number, label?: string, transform?: (s: string) => string }} [opts] + * @returns {string[]} + */ +export function parseCsvList(raw, { max, label, transform = (s) => s } = {}) { + const items = String(raw) + .split(",") + .map((s) => transform(s.trim())) + .filter(Boolean); + if (max && items.length > max) { + throw new ValidationError(`Max ${max} ${label} simultanés`); + } + return items; +} + +/** Valide une année de formation. Renvoie null si l'entrée est vide. */ +export function parseYear(raw, fieldName = "year") { + if (raw === undefined || raw === null || raw === "") return null; + const year = Number(raw); + if (!Number.isFinite(year) || year < 1800 || year > 2100) { + throw new ValidationError(`${fieldName} invalide`); + } + return year; +} + +/** Valide une latitude. `null` autorisé (efface la valeur). */ +export function parseLat(raw) { + if (raw === null || raw === undefined || raw === "") return null; + const v = Number(raw); + if (!Number.isFinite(v) || v < -90 || v > 90) throw new ValidationError("lat invalide"); + return v; +} + +/** Valide une longitude. `null` autorisé (efface la valeur). */ +export function parseLon(raw) { + if (raw === null || raw === undefined || raw === "") return null; + const v = Number(raw); + if (!Number.isFinite(v) || v < -180 || v > 180) throw new ValidationError("lon invalide"); + return v; +} + +/** Valide un identifiant Metal Archives (BIGINT positif). */ +export function parseMaId(raw) { + const id = Number(raw); + if (!Number.isInteger(id) || id < 0 || id > Number.MAX_SAFE_INTEGER) { + throw new ValidationError("bad ma_id"); + } + return id; +} diff --git a/apps/api/test/adminAuth.test.js b/apps/api/test/adminAuth.test.js new file mode 100644 index 0000000..260a1a0 --- /dev/null +++ b/apps/api/test/adminAuth.test.js @@ -0,0 +1,132 @@ +import { describe, it, expect, vi } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { + signAdminSession, + verifyAdminSession, + isLockedOut, + verifyPassword, + requireAdminSession, + ADMIN_COOKIE_NAME, +} = await import("../src/adminAuth.js"); +const { makeFakePool, rows } = await import("./helpers/fakePool.js"); + +describe("sessions JWT", () => { + it("aller-retour signature / vérification", () => { + expect(verifyAdminSession(signAdminSession("nico"))).toBe("nico"); + }); + + it("rejette un jeton signé avec un autre secret", async () => { + const jwt = (await import("jsonwebtoken")).default; + const forged = jwt.sign({ sub: "nico" }, "un-autre-secret-de-32-caracteres-ok"); + expect(verifyAdminSession(forged)).toBeNull(); + }); + + it("rejette un jeton `alg: none` (attaque classique)", async () => { + const header = Buffer.from(JSON.stringify({ alg: "none", typ: "JWT" })).toString("base64url"); + const payload = Buffer.from(JSON.stringify({ sub: "nico" })).toString("base64url"); + expect(verifyAdminSession(`${header}.${payload}.`)).toBeNull(); + }); + + it("rejette un jeton expiré", async () => { + const jwt = (await import("jsonwebtoken")).default; + const expired = jwt.sign({ sub: "nico" }, process.env.ADMIN_JWT_SECRET, { expiresIn: -10 }); + expect(verifyAdminSession(expired)).toBeNull(); + }); + + it("rejette un jeton sans sub exploitable", async () => { + const jwt = (await import("jsonwebtoken")).default; + const noSub = jwt.sign({ sub: { admin: true } }, process.env.ADMIN_JWT_SECRET); + expect(verifyAdminSession(noSub)).toBeNull(); + }); + + it("rejette une chaîne quelconque sans lever d'exception", () => { + expect(verifyAdminSession("")).toBeNull(); + expect(verifyAdminSession("aaa.bbb.ccc")).toBeNull(); + }); +}); + +describe("requireAdminSession", () => { + function fakeReply() { + const reply = { + statusCode: null, + body: null, + code(c) { reply.statusCode = c; return reply; }, + send(b) { reply.body = b; return reply; }, + }; + return reply; + } + + it("renvoie le username et ne répond pas quand le cookie est valide", () => { + const reply = fakeReply(); + const req = { cookies: { [ADMIN_COOKIE_NAME]: signAdminSession("nico") } }; + expect(requireAdminSession(req, reply)).toBe("nico"); + expect(reply.statusCode).toBeNull(); + }); + + it("répond 401 et renvoie null sans cookie", () => { + const reply = fakeReply(); + expect(requireAdminSession({ cookies: {} }, reply)).toBeNull(); + expect(reply.statusCode).toBe(401); + }); + + it("ne plante pas quand `cookies` est absent", () => { + const reply = fakeReply(); + expect(requireAdminSession({}, reply)).toBeNull(); + expect(reply.statusCode).toBe(401); + }); +}); + +describe("verifyPassword", () => { + it("renvoie false pour un utilisateur inexistant", async () => { + const bcrypt = (await import("bcryptjs")).default; + // Le DUMMY_HASH de production est à coût 12 (~330 ms par comparaison). + // On neutralise le calcul : ce test porte sur la valeur de retour, et le + // test suivant vérifie séparément que la comparaison a bien lieu. + const spy = vi.spyOn(bcrypt, "compare").mockResolvedValue(true); + const pool = makeFakePool([{ match: "FROM admin_users", result: rows() }]); + // Même si bcrypt dit « vrai », l'absence d'utilisateur doit l'emporter. + expect(await verifyPassword(pool, "inconnu", "peu-importe")).toBe(false); + spy.mockRestore(); + }); + + // Anti-énumération : le hash factice doit être comparé même quand l'utilisateur + // n'existe pas, sinon le temps de réponse révèle les comptes valides. + it("compare quand même un hash pour un utilisateur inexistant", async () => { + const bcrypt = (await import("bcryptjs")).default; + const spy = vi.spyOn(bcrypt, "compare").mockResolvedValue(false); + const pool = makeFakePool([{ match: "FROM admin_users", result: rows() }]); + await verifyPassword(pool, "inconnu", "x"); + expect(spy).toHaveBeenCalled(); + // La comparaison doit porter sur un hash bcrypt valide, sinon le temps de + // réponse trahirait l'absence de compte. + expect(spy.mock.calls[0][1]).toMatch(/^\$2[aby]\$\d\d\$/); + spy.mockRestore(); + }); + + it("renvoie true pour le bon mot de passe", async () => { + const bcrypt = (await import("bcryptjs")).default; + const hash = bcrypt.hashSync("bon-mot-de-passe", 4); // coût faible : test rapide + const pool = makeFakePool([{ match: "FROM admin_users", result: rows({ password_hash: hash }) }]); + expect(await verifyPassword(pool, "nico", "bon-mot-de-passe")).toBe(true); + expect(await verifyPassword(pool, "nico", "mauvais")).toBe(false); + }); +}); + +describe("isLockedOut", () => { + it("verrouille à partir de 5 tentatives échouées", async () => { + const under = makeFakePool([{ match: "admin_login_attempts", result: rows({ n: 4 }) }]); + const at = makeFakePool([{ match: "admin_login_attempts", result: rows({ n: 5 }) }]); + expect(await isLockedOut(under, "nico", "1.2.3.4")).toBe(false); + expect(await isLockedOut(at, "nico", "1.2.3.4")).toBe(true); + }); + + it("compte les tentatives par username OU par IP, sur 15 minutes", async () => { + const pool = makeFakePool([{ match: "admin_login_attempts", result: rows({ n: 0 }) }]); + await isLockedOut(pool, "nico", "1.2.3.4"); + const call = pool.find("admin_login_attempts"); + expect(call.sql).toMatch(/username = \$2 OR ip = \$3/); + expect(call.values).toEqual([15, "nico", "1.2.3.4"]); + }); +}); diff --git a/apps/api/test/adminRoutes.test.js b/apps/api/test/adminRoutes.test.js new file mode 100644 index 0000000..71f83b0 --- /dev/null +++ b/apps/api/test/adminRoutes.test.js @@ -0,0 +1,388 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; + +// Doit être défini avant l'import d'adminAuth (jwtSecret() lit process.env à l'appel, +// mais on fixe la valeur ici pour que tous les tests partagent le même secret). +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { signAdminSession, ADMIN_COOKIE_NAME } = await import("../src/adminAuth.js"); +const { rows } = await import("./helpers/fakePool.js"); +const { createAdminApp } = await import("./helpers/testApp.js"); + +let sessionCookie, app, pool; + +beforeAll(async () => { + sessionCookie = `${ADMIN_COOKIE_NAME}=${signAdminSession("nico")}`; + ({ app, pool } = await createAdminApp()); +}); +afterAll(async () => { await app.close(); }); + +/** Reprogramme le pool partagé et renvoie l'app (construite une seule fois). */ +function buildApp(handlers) { + pool.reset(handlers ?? []); + return app; +} + +/** Requête authentifiée par défaut. */ +function auth(headers = {}) { + return { cookie: sessionCookie, ...headers }; +} + +describe("garde d'authentification", () => { + it("refuse toute route admin sans cookie de session", async () => { + const app = buildApp(([])); + for (const url of ["/admin/api/stats", "/admin/api/bands", "/admin/api/live", "/admin/api/activity"]) { + const res = await app.inject({ method: "GET", url }); + expect(res.statusCode, url).toBe(401); + } + }); + + it("refuse un cookie de session forgé", async () => { + const app = buildApp(([])); + const res = await app.inject({ + method: "GET", + url: "/admin/api/stats", + headers: { cookie: `${ADMIN_COOKIE_NAME}=pas.un.jwt` }, + }); + expect(res.statusCode).toBe(401); + }); + + it("ne touche pas la base quand la session est invalide", async () => { + const handlers = ([]); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/stats" }); + expect(pool.calls).toHaveLength(0); + }); + + it("accepte une session valide", async () => { + const handlers = ([{ match: "FROM bands", result: rows({ total: 0 }) }]); + const app = buildApp(handlers); + const res = await app.inject({ method: "GET", url: "/admin/api/stats", headers: auth() }); + expect(res.statusCode).toBe(200); + }); +}); + +describe("GET /admin/api/bands — construction de la requête", () => { + const listPool = () => + ([ + { match: "count(*)::int AS total", result: rows({ total: 3 }) }, + { match: "SELECT ma_id, name", result: rows({ ma_id: 1, name: "Mayhem" }) }, + ]); + + it("n'accepte que les colonnes de tri de l'allowlist", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + await app.inject({ + method: "GET", + url: "/admin/api/bands?sort=name;DROP TABLE bands--&dir=desc", + headers: auth(), + }); + const data = pool.find("SELECT ma_id, name"); + expect(data.sql).not.toContain("DROP TABLE"); + expect(data.sql).toContain("ORDER BY ma_id DESC"); + }); + + it("accepte une colonne de tri légitime", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/bands?sort=formed_year", headers: auth() }); + expect(pool.find("SELECT ma_id, name").sql).toContain("ORDER BY formed_year ASC"); + }); + + it("passe les filtres en paramètres liés, jamais en interpolation", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + await app.inject({ + method: "GET", + url: "/admin/api/bands?q=' OR 1=1--&country=fr", + headers: auth(), + }); + const data = pool.find("SELECT ma_id, name"); + expect(data.sql).not.toContain("OR 1=1"); + expect(data.values).toContain("%' OR 1=1--%"); + expect(data.values).toContain("FR"); // pays normalisé en majuscules + }); + + it("ignore une recherche de moins de 2 caractères", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/bands?q=a", headers: auth() }); + expect(pool.find("SELECT ma_id, name").sql).not.toContain("ILIKE"); + }); + + it("le count et la page utilisent le même WHERE", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/bands?country=de&enriched=true", headers: auth() }); + const count = pool.find("count(*)::int AS total"); + const data = pool.find("SELECT ma_id, name"); + expect(count.sql).toContain("country = $1"); + expect(data.sql).toContain("country = $1"); + // le count ne doit pas recevoir les paramètres de pagination + expect(count.values).toEqual(["DE"]); + expect(data.values).toEqual(["DE", 50, 0]); + }); + + it("borne pageSize à 200", async () => { + const handlers = listPool(); + const app = buildApp(handlers); + const res = await app.inject({ method: "GET", url: "/admin/api/bands?pageSize=99999", headers: auth() }); + expect(res.json().pageSize).toBe(200); + }); +}); + +describe("PATCH /admin/api/bands/:ma_id", () => { + const patchPool = () => + ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1, name: "Avant" }) }, + { match: "UPDATE bands SET", result: rows({ ma_id: 1, name: "Après" }) }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + it("refuse un ma_id non numérique", async () => { + const app = buildApp(patchPool()); + const res = await app.inject({ + method: "PATCH", + url: "/admin/api/bands/abc", + headers: auth(), + payload: { name: "x" }, + }); + expect(res.statusCode).toBe(400); + }); + + it("refuse un corps sans champ modifiable", async () => { + const app = buildApp(patchPool()); + const res = await app.inject({ + method: "PATCH", + url: "/admin/api/bands/1", + headers: auth(), + payload: { ma_id: 999, enriched: true, crawled_at: "2020-01-01" }, + }); + expect(res.statusCode).toBe(400); + expect(res.json().error).toMatch(/Aucun champ/); + }); + + it("ignore les champs hors allowlist mais applique les autres", async () => { + const handlers = patchPool(); + const app = buildApp(handlers); + await app.inject({ + method: "PATCH", + url: "/admin/api/bands/1", + headers: auth(), + payload: { name: "Darkthrone", enriched: false, locked_fields: "{}" }, + }); + const upd = pool.find("UPDATE bands SET"); + expect(upd.sql).toContain("name = $2"); + expect(upd.sql).not.toContain("enriched ="); + expect(upd.sql).not.toContain("locked_fields = $"); + }); + + it.each([ + ["formed_year", { formed_year: 1799 }], + ["formed_year", { formed_year: 2101 }], + ["lat", { lat: 91 }], + ["lon", { lon: -181 }], + ])("rejette %s hors bornes", async (_field, payload) => { + const app = buildApp(patchPool()); + const res = await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth(), payload }); + expect(res.statusCode).toBe(400); + }); + + it("verrouille les champs édités", async () => { + const handlers = patchPool(); + const app = buildApp(handlers); + await app.inject({ + method: "PATCH", + url: "/admin/api/bands/1", + headers: auth(), + payload: { name: "X", country: "NO" }, + }); + const upd = pool.find("UPDATE bands SET"); + expect(upd.sql).toContain("locked_fields = locked_fields ||"); + expect(upd.values.at(-1)).toBe(JSON.stringify({ name: true, country: true })); + }); + + it("écrit une entrée d'audit", async () => { + const handlers = patchPool(); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth(), payload: { name: "X" } }); + const audit = pool.find("INSERT INTO admin_audit_log"); + expect(audit).toBeDefined(); + expect(audit.values[0]).toBe("nico"); // l'utilisateur de la session, pas une valeur du corps + }); + + it("404 si le groupe n'existe pas", async () => { + const handlers = ([{ match: "SELECT * FROM bands WHERE ma_id", result: rows() }]); + const app = buildApp(handlers); + const res = await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth(), payload: { name: "X" } }); + expect(res.statusCode).toBe(404); + }); +}); + +describe("POST /admin/api/bands/:ma_id/resolve-conflict", () => { + const conflictPool = () => + ([ + { + match: "SELECT * FROM bands WHERE ma_id", + result: rows({ ma_id: 1, crawler_pending: { name: "MA", formed_year: 1991 } }), + }, + { match: "UPDATE bands SET", result: rows({ ma_id: 1 }) }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + // Régression sécurité : `field` était interpolé dans le SET sans allowlist, + // ce qui donnait une injection SQL à tout admin authentifié. + it("refuse un nom de champ hors allowlist", async () => { + const handlers = conflictPool(); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "name = 'pwned', enriched", action: "accept_crawler" }, + }); + expect(res.statusCode).toBe(400); + expect(pool.find("UPDATE bands SET")).toBeUndefined(); + }); + + it("refuse une action inconnue", async () => { + const app = buildApp(conflictPool()); + const res = await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "name", action: "drop_everything" }, + }); + expect(res.statusCode).toBe(400); + }); + + it("keep_mine ne touche que crawler_pending", async () => { + const handlers = conflictPool(); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "name", action: "keep_mine" }, + }); + const upd = pool.find("UPDATE bands SET"); + expect(upd.sql).toContain("crawler_pending = crawler_pending - $2"); + expect(upd.sql).not.toContain("locked_fields"); + }); + + it("accept_crawler applique la valeur et déverrouille", async () => { + const handlers = conflictPool(); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "name", action: "accept_crawler" }, + }); + const upd = pool.find("UPDATE bands SET"); + expect(upd.sql).toContain("name = $2::text"); + expect(upd.sql).toContain("locked_fields = locked_fields - $3"); + expect(upd.values[1]).toBe("MA"); + }); + + // Régression : le cast `::text` en dur cassait les colonnes numériques. + it("utilise un cast numérique pour formed_year", async () => { + const handlers = conflictPool(); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "formed_year", action: "accept_crawler" }, + }); + expect(pool.find("UPDATE bands SET").sql).toContain("formed_year = $2::int"); + }); + + it("utilise un cast flottant pour lat/lon", async () => { + const handlers = conflictPool(); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/bands/1/resolve-conflict", + headers: auth(), + payload: { field: "lat", action: "accept_crawler" }, + }); + expect(pool.find("UPDATE bands SET").sql).toContain("lat = $2::double precision"); + }); +}); + +describe("POST /admin/api/job-triggers", () => { + const jobPool = () => + ([ + { match: "INSERT INTO job_triggers", result: rows({ id: 42 }) }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + + it.each(["enrich", "incremental", "full_crawl", "geocoder_enqueue"])( + "accepte le job_type %s", + async (job_type) => { + const app = buildApp(jobPool()); + const res = await app.inject({ + method: "POST", + url: "/admin/api/job-triggers", + headers: auth(), + payload: { job_type }, + }); + expect(res.statusCode).toBe(200); + expect(res.json().id).toBe(42); + } + ); + + it.each([["inconnu"], [""], ["DROP TABLE bands"]])("refuse le job_type %s", async (job_type) => { + const handlers = jobPool(); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", + url: "/admin/api/job-triggers", + headers: auth(), + payload: { job_type }, + }); + expect(res.statusCode).toBe(400); + expect(pool.find("INSERT INTO job_triggers")).toBeUndefined(); + }); + + it("attribue le job à l'utilisateur de la session", async () => { + const handlers = jobPool(); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/job-triggers", + headers: auth(), + payload: { job_type: "enrich", requested_by: "quelquun-dautre" }, + }); + expect(pool.find("INSERT INTO job_triggers").values).toEqual(["enrich", "nico"]); + }); +}); + +describe("annulations", () => { + it("404 quand le run n'est plus en cours", async () => { + const handlers = ([{ match: "UPDATE crawl_run", result: rows() }]); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", + url: "/admin/api/crawl-runs/7/cancel", + headers: auth(), + payload: {}, + }); + expect(res.statusCode).toBe(404); + }); + + it("cleanup borne older_than_minutes à 1 minimum", async () => { + const handlers = ([ + { match: "UPDATE crawl_run", result: rows() }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ + method: "POST", + url: "/admin/api/crawl-runs/cleanup", + headers: auth(), + payload: { older_than_minutes: -999 }, + }); + expect(pool.find("UPDATE crawl_run").values).toEqual([1]); + }); +}); diff --git a/apps/api/test/adminRoutesCoverage.test.js b/apps/api/test/adminRoutesCoverage.test.js new file mode 100644 index 0000000..d730c62 --- /dev/null +++ b/apps/api/test/adminRoutesCoverage.test.js @@ -0,0 +1,433 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { signAdminSession, ADMIN_COOKIE_NAME } = await import("../src/adminAuth.js"); +const { rows } = await import("./helpers/fakePool.js"); +const { createAdminApp } = await import("./helpers/testApp.js"); + +let auth, app, pool; + +// Une seule construction d'app pour tout le fichier ; chaque test reprogramme +// le pool via buildApp(handlers). +beforeAll(async () => { + auth = { cookie: `${ADMIN_COOKIE_NAME}=${signAdminSession("nico")}` }; + ({ app, pool } = await createAdminApp()); +}); +afterAll(async () => { await app.close(); }); + +/** Reprogramme le pool partagé et renvoie l'app. */ +function buildApp(handlers) { + pool.reset(Array.isArray(handlers) ? handlers : handlers ?? []); + return app; +} + +/** Pool permissif : n'importe quelle requête renvoie une ligne plausible. */ +function anyPool(extra = []) { + return [...extra, { match: /./, result: rows({ n: 1, total: 1, id: 1, status: "done", count: 1 }) }]; +} + +// ------------------------------------------------------------------ +// Routes de lecture : forme de la réponse + protection +// ------------------------------------------------------------------ +describe("routes de lecture", () => { + const READ_ROUTES = [ + "/admin/api/stats", + "/admin/api/queue", + "/admin/api/crawl-checkpoints", + "/admin/api/logs", + "/admin/api/geocoding", + "/admin/api/llm", + "/admin/api/job-triggers", + "/admin/api/live", + "/admin/api/activity", + "/admin/api/bands", + ]; + + it.each(READ_ROUTES)("%s exige une session", async (url) => { + const handlers = ([]); + const app = buildApp(handlers); + expect((await app.inject({ method: "GET", url })).statusCode).toBe(401); + expect(pool.calls).toHaveLength(0); + }); + + it.each(READ_ROUTES)("%s répond 200 et ok:true avec une session", async (url) => { + const app = buildApp(anyPool()); + const res = await app.inject({ method: "GET", url, headers: auth }); + expect(res.statusCode).toBe(200); + expect(res.json().ok).toBe(true); + }); + + it.each(READ_ROUTES)("%s renvoie 500 sans divulguer l'erreur si la base tombe", async (url) => { + const handlers = ([{ match: /./, throws: new Error("FATAL: password authentication failed for user bm") }]); + const app = buildApp(handlers); + const res = await app.inject({ method: "GET", url, headers: auth }); + expect(res.statusCode).toBe(500); + expect(res.body).not.toMatch(/password|user bm/); + }); +}); + +describe("GET /admin/api/stats", () => { + it("agrège totaux, statuts, pays et genres", async () => { + const handlers = ([ + { match: "count(*)::int AS total,", result: rows({ total: 10, enriched: 4, geocoded: 6 }) }, + { match: "AS status, count", result: rows({ status: "Active", total: 7 }) }, + { match: "AS country, count", result: rows({ country: "NO", total: 3 }) }, + { match: "SELECT genre, count", result: rows({ genre: "Black Metal", total: 2 }) }, + ]); + const app = buildApp(handlers); + const body = (await app.inject({ method: "GET", url: "/admin/api/stats", headers: auth })).json(); + + expect(body.totals.total).toBe(10); + expect(body.by_status[0].status).toBe("Active"); + expect(body.by_country[0].country).toBe("NO"); + expect(body.by_genre[0].genre).toBe("Black Metal"); + }); + + it("les quatre agrégats sont lancés en parallèle, pas en cascade", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/stats", headers: auth }); + expect(pool.calls.length).toBe(4); + }); +}); + +describe("GET /admin/api/bands/:ma_id", () => { + const detailPool = () => + ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1, name: "Mayhem" }) }, + { match: "FROM band_locations", result: rows({ id: 9, step_order: 0, location_raw: "Oslo" }) }, + { match: "FROM llm_cache", result: rows({ id: 3, model: "llama-3.3-70b-versatile" }) }, + ]); + + it("renvoie le groupe, ses localisations et ses appels LLM", async () => { + const app = buildApp(detailPool()); + const body = (await app.inject({ method: "GET", url: "/admin/api/bands/1", headers: auth })).json(); + expect(body.item.name).toBe("Mayhem"); + expect(body.locations).toHaveLength(1); + expect(body.llm).toHaveLength(1); + }); + + it("répond 400 pour un ma_id invalide", async () => { + const app = buildApp(detailPool()); + for (const bad of ["abc", "-1"]) { + expect((await app.inject({ method: "GET", url: `/admin/api/bands/${bad}`, headers: auth })).statusCode).toBe(400); + } + }); + + it("répond 404 quand le groupe n'existe pas", async () => { + const handlers = ([{ match: "SELECT * FROM bands WHERE ma_id", result: rows() }]); + const app = buildApp(handlers); + expect((await app.inject({ method: "GET", url: "/admin/api/bands/1", headers: auth })).statusCode).toBe(404); + }); + + // Les tables du nouveau pipeline peuvent ne pas exister sur une base ancienne : + // le détail du groupe doit rester consultable malgré tout. + it("dégrade proprement si band_locations ou llm_cache sont absentes", async () => { + const handlers = ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1, name: "Mayhem" }) }, + { match: "FROM band_locations", throws: new Error('relation "band_locations" does not exist') }, + { match: "FROM llm_cache", throws: new Error('relation "llm_cache" does not exist') }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "GET", url: "/admin/api/bands/1", headers: auth }); + expect(res.statusCode).toBe(200); + expect(res.json().locations).toEqual([]); + expect(res.json().llm).toEqual([]); + }); +}); + +describe("GET /admin/api/logs — filtres", () => { + it("filtre par niveau, run et curseur, en paramètres liés", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ + method: "GET", + url: "/admin/api/logs?level=error&run_id=12&min_id=100&pageSize=25", + headers: auth, + }); + const call = pool.find("FROM crawl_log"); + expect(call.sql).toContain("level = $1"); + expect(call.sql).toContain("run_id = $2"); + expect(call.sql).toContain("id > $3"); + expect(call.values).toEqual(["error", 12, 100, 25, 0]); + }); + + it("sans filtre, aucune clause WHERE", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/logs", headers: auth }); + expect(pool.find("FROM crawl_log").sql).not.toContain("WHERE"); + }); + + // Régression : page/pageSize étaient calculés mais jamais renvoyés, le client + // ne pouvait donc pas savoir s'il restait des logs à charger. + it("renvoie les informations de pagination", async () => { + const app = buildApp(anyPool()); + const body = (await app.inject({ method: "GET", url: "/admin/api/logs?page=3", headers: auth })).json(); + expect(body.page).toBe(3); + expect(body.pageSize).toBe(50); + }); +}); + +describe("GET /admin/api/llm — filtres", () => { + it("filtre par modèle, nullité et texte", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ + method: "GET", + url: "/admin/api/llm?model=llama-3.1-8b-instant&only_null=1&q=oslo", + headers: auth, + }); + const call = pool.find("FROM llm_cache lc"); + expect(call.sql).toContain("model = $1"); + expect(call.sql).toContain("is_null = true"); + expect(call.values).toContain("llama-3.1-8b-instant"); + expect(call.values).toContain("%oslo%"); + }); + + it("le count applique le même filtre que la page", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/llm?model=x", headers: auth }); + const count = pool.find("count(*)::int AS total FROM llm_cache"); + expect(count.sql).toContain("model = $1"); + expect(count.values).toEqual(["x"]); + }); + + it("tronque une recherche exagérément longue", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: `/admin/api/llm?q=${"a".repeat(500)}`, headers: auth }); + const bound = pool.find("FROM llm_cache lc").values.find((v) => String(v).startsWith("%aaa")); + expect(bound).toHaveLength(102); // 100 caractères + les deux % + }); +}); + +describe("GET /admin/api/activity — liste unifiée", () => { + it("réunit crawl_run et admin_audit_log", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/activity", headers: auth }); + const call = pool.find("UNION ALL"); + expect(call.sql).toContain("FROM crawl_run"); + expect(call.sql).toContain("FROM admin_audit_log"); + }); + + it("filtre par type et statut en paramètres liés", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/activity?type=run&status=running", headers: auth }); + const data = pool.find(/SELECT \* FROM \([\s\S]*UNION ALL/); + expect(data.values).toEqual(["run", "running", 50, 0]); + }); + + it("trie par date décroissante", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/activity", headers: auth }); + expect(pool.find(/SELECT \* FROM \(/).sql).toContain("ORDER BY ts DESC"); + }); +}); + +// ------------------------------------------------------------------ +// Actions de maintenance du géocodage +// ------------------------------------------------------------------ +describe("actions sur band_locations", () => { + const ACTIONS = [ + ["/admin/api/locations/reset-errors", "geocode_status = 'error'"], + ["/admin/api/locations/reset-llm", "geocode_status IN ('llm_needed', 'manual')"], + ["/admin/api/locations/reset-all", "is_country_only = FALSE"], + ["/admin/api/locations/requeue-all", "geocode_status = ANY($1::text[])"], + ]; + + it.each(ACTIONS.map(([url]) => url))("%s exige une session", async (url) => { + const handlers = ([]); + const app = buildApp(handlers); + expect((await app.inject({ method: "POST", url, payload: {} })).statusCode).toBe(401); + expect(pool.calls).toHaveLength(0); + }); + + it.each(ACTIONS)("%s cible les bonnes lignes", async (url, expectedClause) => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 12 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "POST", url, headers: auth, payload: {} }); + + expect(res.statusCode).toBe(200); + expect(res.json().count).toBe(12); + expect(pool.find("UPDATE band_locations").sql).toContain(expectedClause); + }); + + it.each(ACTIONS.map(([url]) => url))("%s remet les lignes en queue", async (url) => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 1 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ method: "POST", url, headers: auth, payload: {} }); + expect(pool.find("UPDATE band_locations").sql).toContain("geocode_status='queued'"); + }); + + it.each(ACTIONS.map(([url]) => url))("%s trace l'action dans les logs avec l'auteur", async (url) => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 1 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ method: "POST", url, headers: auth, payload: {} }); + expect(pool.find("INSERT INTO crawl_log").values[1]).toContain("admin:nico"); + }); + + // reset-all efface les coordonnées (le worker va tout re-géocoder) alors que + // reset-errors ne remet en file que ce qui avait échoué. + it("reset-all efface les coordonnées, reset-errors non", async () => { + const mk = async (url) => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 1 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ method: "POST", url, headers: auth, payload: {} }); + return pool.find("UPDATE band_locations").sql; + }; + expect(await mk("/admin/api/locations/reset-all")).toContain("lat=NULL"); + expect(await mk("/admin/api/locations/reset-errors")).not.toContain("lat=NULL"); + }); + + it("requeue-all inclut 'done' seulement sur demande explicite", async () => { + const mk = async (payload) => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 1 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ method: "POST", url: "/admin/api/locations/requeue-all", headers: auth, payload }); + return pool.find("UPDATE band_locations").values[0]; + }; + expect(await mk({})).toEqual(["error", "llm_needed"]); + expect(await mk({ include_done: true })).toEqual(["error", "llm_needed", "manual", "done"]); + }); + + it("requeue-all épargne toujours les localisations pays-seul", async () => { + const handlers = ([ + { match: "UPDATE band_locations", result: { rows: [], rowCount: 1 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + await app.inject({ + method: "POST", url: "/admin/api/locations/requeue-all", + headers: auth, payload: { include_done: true }, + }); + expect(pool.find("UPDATE band_locations").sql).toContain("is_country_only = FALSE"); + }); + + it("une action qui échoue renvoie 500 sans écrire de log de succès", async () => { + const handlers = ([{ match: "UPDATE band_locations", throws: new Error("deadlock") }]); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/api/locations/reset-errors", headers: auth, payload: {}, + }); + expect(res.statusCode).toBe(500); + expect(pool.find("INSERT INTO crawl_log")).toBeUndefined(); + }); +}); + +describe("POST /admin/api/geocode-cache/purge-nominatim", () => { + it("ne supprime que les entrées de l'ancien pipeline", async () => { + const handlers = ([ + { match: "DELETE FROM geocode_cache", result: { rows: [], rowCount: 4 } }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/api/geocode-cache/purge-nominatim", headers: auth, payload: {}, + }); + expect(res.json().count).toBe(4); + // Le marqueur place_rank distingue Nominatim de Geoapify : sans ce WHERE, + // la purge viderait aussi le cache Geoapify (appels payants). + expect(pool.find("DELETE FROM geocode_cache").sql).toContain("place_rank"); + }); + + it("exige une session", async () => { + const handlers = ([]); + const app = buildApp(handlers); + expect((await app.inject({ + method: "POST", url: "/admin/api/geocode-cache/purge-nominatim", payload: {}, + })).statusCode).toBe(401); + expect(pool.calls).toHaveLength(0); + }); +}); + +describe("POST /admin/api/crawl-runs/cleanup", () => { + const cleanupPool = () => + ([ + { match: "UPDATE crawl_run", result: rows({ id: 1, run_type: "enrich", started_at: "2026-01-01" }) }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + it("utilise 30 minutes par défaut", async () => { + const handlers = cleanupPool(); + const app = buildApp(handlers); + await app.inject({ method: "POST", url: "/admin/api/crawl-runs/cleanup", headers: auth, payload: {} }); + expect(pool.find("UPDATE crawl_run").values).toEqual([30]); + }); + + it("ne touche que les runs marqués running", async () => { + const handlers = cleanupPool(); + const app = buildApp(handlers); + await app.inject({ method: "POST", url: "/admin/api/crawl-runs/cleanup", headers: auth, payload: {} }); + expect(pool.find("UPDATE crawl_run").sql).toContain("status = 'running'"); + }); + + it("renvoie le nombre de runs nettoyés", async () => { + const app = buildApp(cleanupPool()); + const res = await app.inject({ + method: "POST", url: "/admin/api/crawl-runs/cleanup", headers: auth, payload: { older_than_minutes: 60 }, + }); + expect(res.json().cleaned).toBe(1); + }); +}); + +describe("GET /admin/api/geocoding", () => { + it("dégrade proprement quand les tables du nouveau pipeline manquent", async () => { + const handlers = ([ + { match: "FROM geocode_cache", result: rows({ n: 5 }) }, + { match: "FROM bands b", result: rows() }, + { match: "FROM band_locations", throws: new Error("relation does not exist") }, + { match: "FROM llm_cache", throws: new Error("relation does not exist") }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "GET", url: "/admin/api/geocoding", headers: auth }); + expect(res.statusCode).toBe(200); + expect(res.json().cache_size).toBe(5); + expect(res.json().locations).toEqual([]); + }); +}); + +describe("GET /admin/api/live", () => { + it("remonte runs actifs, jobs en attente et file de géocodage", async () => { + const handlers = ([ + { match: "WHERE status = 'running'", result: rows({ id: 1, run_type: "enrich" }) }, + { match: "WHERE status = 'pending'", result: rows({ id: 2, job_type: "enrich" }) }, + { match: "GROUP BY geocode_status", result: rows({ status: "queued", n: 42 }) }, + { match: "geocode_status = 'processing'", result: rows() }, + { match: "FROM crawl_checkpoint", result: rows({ key: "last_full_crawl_at" }) }, + ]); + const app = buildApp(handlers); + const body = (await app.inject({ method: "GET", url: "/admin/api/live", headers: auth })).json(); + expect(body.active_runs).toHaveLength(1); + expect(body.pending_jobs).toHaveLength(1); + expect(body.geo_queue[0].n).toBe(42); + expect(body.checkpoints).toHaveLength(1); + }); + + it("limite l'aperçu des localisations en cours de traitement", async () => { + const handlers = anyPool(); + const app = buildApp(handlers); + await app.inject({ method: "GET", url: "/admin/api/live", headers: auth }); + expect(pool.find("geocode_status = 'processing'").sql).toContain("LIMIT 3"); + }); +}); diff --git a/apps/api/test/cancellation.test.js b/apps/api/test/cancellation.test.js new file mode 100644 index 0000000..eee4b9b --- /dev/null +++ b/apps/api/test/cancellation.test.js @@ -0,0 +1,252 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { signAdminSession, ADMIN_COOKIE_NAME } = await import("../src/adminAuth.js"); +const { rows } = await import("./helpers/fakePool.js"); +const { createAdminApp } = await import("./helpers/testApp.js"); + +let auth, app, pool; +beforeAll(async () => { + auth = { cookie: `${ADMIN_COOKIE_NAME}=${signAdminSession("nico")}` }; + ({ app, pool } = await createAdminApp()); +}); +afterAll(async () => { await app.close(); }); + +/** Reprogramme le pool partagé et renvoie l'app (construite une seule fois). */ +function buildApp(handlers) { + pool.reset(handlers ?? []); + return app; +} + +/** + * L'annulation d'un run est COOPÉRATIVE : l'API pose un drapeau, le crawler + * l'observe et s'arrête. Ces tests verrouillent le contrat côté API — le + * pendant côté crawler est dans apps/crawler/tests/test_cancellation.py. + */ +describe("POST /admin/api/crawl-runs/:id/cancel", () => { + const runningPool = () => + ([ + { match: "SET cancel_requested = TRUE", result: rows({ id: 7, run_type: "full_europe" }) }, + { match: "INSERT INTO crawl_log", result: rows() }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + it("pose le drapeau sans toucher au statut", async () => { + const handlers = runningPool(); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/api/crawl-runs/7/cancel", headers: auth, payload: {}, + }); + + expect(res.statusCode).toBe(200); + expect(res.json().cancel_requested).toBe(true); + + const upd = pool.find("UPDATE crawl_run"); + expect(upd.sql).toContain("cancel_requested = TRUE"); + // Le point central de la correction : l'API ne décide plus du statut. + // C'est le crawler qui écrira 'cancelled' quand il se sera vraiment arrêté. + // On n'inspecte que la clause SET — `status` a le droit d'apparaître dans + // le WHERE (on ne cible que les runs en cours). + const setClause = upd.sql.split(/\bWHERE\b/i)[0]; + expect(setClause).not.toMatch(/status\s*=/); + expect(setClause).not.toContain("finished_at"); + }); + + it("ne cible que les runs réellement en cours", async () => { + const handlers = runningPool(); + const app = buildApp(handlers); + await app.inject({ method: "POST", url: "/admin/api/crawl-runs/7/cancel", headers: auth, payload: {} }); + expect(pool.find("UPDATE crawl_run").sql).toContain("status = 'running'"); + }); + + it("enregistre qui a demandé l'annulation", async () => { + const handlers = runningPool(); + const app = buildApp(handlers); + await app.inject({ method: "POST", url: "/admin/api/crawl-runs/7/cancel", headers: auth, payload: {} }); + expect(pool.find("UPDATE crawl_run").values).toEqual([7, "nico"]); + expect(pool.find("INSERT INTO admin_audit_log")).toBeDefined(); + }); + + it("est idempotent : une seconde demande répond 200, pas une erreur", async () => { + const handlers = ([ + { match: "SET cancel_requested = TRUE", result: rows() }, // 0 ligne : déjà demandé + { match: "SELECT status, cancel_requested", result: rows({ status: "running", cancel_requested: true }) }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/api/crawl-runs/7/cancel", headers: auth, payload: {}, + }); + expect(res.statusCode).toBe(200); + expect(res.json().already_requested).toBe(true); + }); + + it("répond 404 pour un run terminé", async () => { + const handlers = ([ + { match: "SET cancel_requested = TRUE", result: rows() }, + { match: "SELECT status, cancel_requested", result: rows({ status: "done", cancel_requested: false }) }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/api/crawl-runs/7/cancel", headers: auth, payload: {}, + }); + expect(res.statusCode).toBe(404); + }); + + it("exige une session admin", async () => { + const handlers = ([]); + const app = buildApp(handlers); + const res = await app.inject({ method: "POST", url: "/admin/api/crawl-runs/7/cancel", payload: {} }); + expect(res.statusCode).toBe(401); + expect(pool.calls).toHaveLength(0); + }); +}); + +describe("POST /admin/api/job-triggers/:id/cancel", () => { + it("retire un job encore en file", async () => { + const handlers = ([ + { match: "UPDATE job_triggers", result: rows({ id: 3, job_type: "enrich" }) }, + { match: "INSERT INTO crawl_log", result: rows() }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "POST", url: "/admin/api/job-triggers/3/cancel", headers: auth, payload: {} }); + expect(res.statusCode).toBe(200); + expect(pool.find("UPDATE job_triggers").sql).toContain("status='pending'"); + }); + + // Un job déjà réclamé n'existe plus qu'à travers son crawl_run : le message + // doit y renvoyer explicitement au lieu d'un « non trouvé » trompeur. + it("répond 409 avec un message actionnable si le job a déjà démarré", async () => { + const handlers = ([ + { match: "UPDATE job_triggers", result: rows() }, + { match: "SELECT status FROM job_triggers", result: rows({ status: "running" }) }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "POST", url: "/admin/api/job-triggers/3/cancel", headers: auth, payload: {} }); + expect(res.statusCode).toBe(409); + expect(res.json().error).toMatch(/déjà démarré/); + expect(res.json().error).toMatch(/run/i); + }); + + it("répond 409 « non trouvé » pour un job inexistant", async () => { + const handlers = ([ + { match: "UPDATE job_triggers", result: rows() }, + { match: "SELECT status FROM job_triggers", result: rows() }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "POST", url: "/admin/api/job-triggers/99/cancel", headers: auth, payload: {} }); + expect(res.json().error).toMatch(/non trouvé/); + }); +}); + +/** + * L'édition admin de lat/lon doit atteindre band_locations : c'est cette table + * que la carte clusterise. Sans ça, corriger un point n'avait aucun effet visible. + */ +describe("PATCH /admin/api/bands/:ma_id — cohérence géographique", () => { + const patchPool = (bandAfter) => + ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1, name: "Avant" }) }, + { match: "UPDATE bands SET", result: rows(bandAfter) }, + { match: "INSERT INTO band_locations", result: rows() }, + { match: "DELETE FROM band_locations", result: rows() }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + it("pose un override dans band_locations quand lat/lon sont fournis", async () => { + const handlers = patchPool({ ma_id: 1, lat: 59.9, lon: 10.7, location_text: "Oslo" }); + const app = buildApp(handlers); + await app.inject({ + method: "PATCH", url: "/admin/api/bands/1", headers: auth, + payload: { lat: 59.9, lon: 10.7 }, + }); + + const ins = pool.find("INSERT INTO band_locations"); + expect(ins).toBeDefined(); + expect(ins.values).toEqual([1, "Oslo", 59.9, 10.7]); + // step_order = -1 → l'override passe avant tous les steps parsés et devient + // le point principal repris par _sync_band_point côté geocoder. + expect(ins.sql).toContain("-1"); + expect(ins.sql).toContain("'done'"); + expect(ins.sql).toContain("'admin'"); + }); + + it("l'override est un upsert, pas un doublon", async () => { + const handlers = patchPool({ ma_id: 1, lat: 1, lon: 2, location_text: "X" }); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { lat: 1, lon: 2 } }); + expect(pool.find("INSERT INTO band_locations").sql).toContain("ON CONFLICT (ma_id, step_order, location_raw) DO UPDATE"); + }); + + it("efface l'override quand lat/lon sont vidés", async () => { + const handlers = patchPool({ ma_id: 1, lat: null, lon: null, location_text: "Oslo" }); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { lat: null, lon: null } }); + + const del = pool.find("DELETE FROM band_locations"); + expect(del).toBeDefined(); + expect(del.sql).toContain("step_order = -1"); + expect(pool.find("INSERT INTO band_locations")).toBeUndefined(); + }); + + it("ne touche pas band_locations quand l'édition ne concerne pas les coordonnées", async () => { + const handlers = patchPool({ ma_id: 1, name: "Après" }); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { name: "Après" } }); + expect(pool.find("INSERT INTO band_locations")).toBeUndefined(); + expect(pool.find("DELETE FROM band_locations")).toBeUndefined(); + }); +}); + +describe("PATCH /admin/api/bands/:ma_id — transaction", () => { + const okPool = () => + ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1, name: "Avant" }) }, + { match: "UPDATE bands SET", result: rows({ ma_id: 1, name: "Après" }) }, + { match: "INSERT INTO admin_audit_log", result: rows() }, + ]); + + it("encadre l'écriture et l'audit dans une même transaction", async () => { + const handlers = okPool(); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { name: "Après" } }); + + expect(pool.sequence(["BEGIN", "UPDATE bands SET", "INSERT INTO admin_audit_log", "COMMIT"])) + .toEqual(["BEGIN", "UPDATE bands SET", "INSERT INTO admin_audit_log", "COMMIT"]); + expect(pool.rolledBack).toBe(false); + }); + + it("annule tout si l'écriture d'audit échoue", async () => { + const handlers = ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1 }) }, + { match: "UPDATE bands SET", result: rows({ ma_id: 1 }) }, + { match: "INSERT INTO admin_audit_log", throws: new Error("disque plein") }, + ]); + const app = buildApp(handlers); + const res = await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { name: "X" } }); + + expect(res.statusCode).toBe(500); + expect(pool.rolledBack).toBe(true); + expect(pool.committed).toBe(false); + }); + + it("libère la connexion même en cas d'erreur", async () => { + const handlers = ([ + { match: "SELECT * FROM bands WHERE ma_id", result: rows({ ma_id: 1 }) }, + { match: "UPDATE bands SET", throws: new Error("boom") }, + ]); + const app = buildApp(handlers); + await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { name: "X" } }); + expect(pool.released).toBe(pool.connections); + expect(pool.released).toBeGreaterThan(0); + }); + + it("annule la transaction quand le groupe est introuvable", async () => { + const handlers = ([{ match: "SELECT * FROM bands WHERE ma_id", result: rows() }]); + const app = buildApp(handlers); + const res = await app.inject({ method: "PATCH", url: "/admin/api/bands/1", headers: auth, payload: { name: "X" } }); + expect(res.statusCode).toBe(404); + expect(pool.rolledBack).toBe(true); + expect(pool.released).toBe(1); + }); +}); diff --git a/apps/api/test/harness.test.js b/apps/api/test/harness.test.js new file mode 100644 index 0000000..46aeb2c --- /dev/null +++ b/apps/api/test/harness.test.js @@ -0,0 +1,145 @@ +import { describe, it, expect } from "vitest"; +import { makeFakePool, rows } from "./helpers/fakePool.js"; + +/** + * Méta-tests du harnais. + * + * Presque toutes les assertions du projet s'appuient sur `makeFakePool` : + * si ce double se met à tout avaler en silence (un `find` qui renvoie toujours + * undefined, un `throws` ignoré, un compteur qui ne s'incrémente pas), des + * dizaines de tests passeraient au vert sans plus rien vérifier. + * + * Ces tests vérifient donc l'outil de mesure lui-même. + */ +describe("makeFakePool — enregistrement", () => { + it("enregistre chaque requête avec son SQL et ses paramètres", async () => { + const pool = makeFakePool(); + await pool.query("SELECT 1 FROM bands WHERE ma_id = $1", [42]); + expect(pool.calls).toHaveLength(1); + expect(pool.calls[0].sql).toContain("FROM bands"); + expect(pool.calls[0].values).toEqual([42]); + }); + + it("normalise l'absence de paramètres en tableau vide", async () => { + const pool = makeFakePool(); + await pool.query("SELECT 1"); + expect(pool.calls[0].values).toEqual([]); + }); + + it("accepte la forme objet { text }", async () => { + const pool = makeFakePool(); + await pool.query({ text: "SELECT 1 FROM bands" }, []); + expect(pool.calls[0].sql).toBe("SELECT 1 FROM bands"); + }); +}); + +describe("makeFakePool — recherche", () => { + it("find() trouve par sous-chaîne ET renvoie undefined quand rien ne matche", async () => { + const pool = makeFakePool(); + await pool.query("UPDATE bands SET name = $1", ["x"]); + + expect(pool.find("UPDATE bands")).toBeDefined(); + // Le cas qui compte : un find() qui renverrait toujours undefined ferait + // passer au vert tous les `expect(pool.find(...)).toBeUndefined()`. + expect(pool.find("DELETE FROM bands")).toBeUndefined(); + }); + + it("find() accepte une RegExp", async () => { + const pool = makeFakePool(); + await pool.query("SELECT a, b FROM bands"); + expect(pool.find(/SELECT\s+a,\s*b/)).toBeDefined(); + expect(pool.find(/SELECT\s+z/)).toBeUndefined(); + }); + + it("findAll() renvoie toutes les occurrences, pas seulement la première", async () => { + const pool = makeFakePool(); + await pool.query("INSERT INTO bands VALUES (1)"); + await pool.query("INSERT INTO bands VALUES (2)"); + await pool.query("SELECT 1"); + expect(pool.findAll("INSERT INTO bands")).toHaveLength(2); + expect(pool.findAll("DELETE")).toHaveLength(0); + }); + + it("sequence() reflète l'ordre réel d'exécution", async () => { + const pool = makeFakePool(); + await pool.query("BEGIN"); + await pool.query("UPDATE bands SET x = 1"); + await pool.query("COMMIT"); + expect(pool.sequence(["COMMIT", "BEGIN", "UPDATE bands"])) + .toEqual(["BEGIN", "UPDATE bands", "COMMIT"]); + }); +}); + +describe("makeFakePool — handlers", () => { + it("renvoie le résultat du premier handler qui matche", async () => { + const pool = makeFakePool([ + { match: "FROM bands", result: rows({ ma_id: 1 }) }, + { match: "FROM bands", result: rows({ ma_id: 2 }) }, + ]); + expect((await pool.query("SELECT * FROM bands")).rows[0].ma_id).toBe(1); + }); + + it("renvoie un résultat vide quand aucun handler ne matche", async () => { + const pool = makeFakePool([{ match: "FROM autre", result: rows({ x: 1 }) }]); + expect(await pool.query("SELECT * FROM bands")).toEqual({ rows: [], rowCount: 0 }); + }); + + // Si `throws` était ignoré, tous les tests de chemin d'erreur (rollback, + // 500 sans fuite d'information) passeraient sans rien exercer. + it("throws fait bien lever la requête", async () => { + const pool = makeFakePool([{ match: "FROM bands", throws: new Error("boum") }]); + await expect(pool.query("SELECT * FROM bands")).rejects.toThrow("boum"); + }); + + it("result peut être une fonction du SQL et des paramètres", async () => { + const pool = makeFakePool([ + { match: "FROM bands", result: (_sql, values) => rows({ echo: values[0] }) }, + ]); + expect((await pool.query("SELECT * FROM bands WHERE id=$1", [7])).rows[0].echo).toBe(7); + }); + + it("rows() produit un rowCount cohérent", () => { + expect(rows()).toEqual({ rows: [], rowCount: 0 }); + expect(rows({ a: 1 }, { a: 2 }).rowCount).toBe(2); + }); +}); + +describe("makeFakePool — transactions", () => { + it("connect() renvoie un client qui partage le journal des requêtes", async () => { + const pool = makeFakePool(); + const client = await pool.connect(); + await client.query("SELECT 1 FROM bands"); + expect(pool.find("FROM bands")).toBeDefined(); + }); + + it("détecte COMMIT et ROLLBACK séparément", async () => { + const committed = makeFakePool(); + const c1 = await committed.connect(); + await c1.query("COMMIT"); + expect(committed.committed).toBe(true); + expect(committed.rolledBack).toBe(false); + + const rolled = makeFakePool(); + const c2 = await rolled.connect(); + await c2.query("ROLLBACK"); + expect(rolled.rolledBack).toBe(true); + expect(rolled.committed).toBe(false); + }); + + it("compte les connexions ouvertes et libérées", async () => { + const pool = makeFakePool(); + const client = await pool.connect(); + expect(pool.connections).toBe(1); + expect(pool.released).toBe(0); + client.release(); + expect(pool.released).toBe(1); + }); + + it("un pool neuf ne rapporte ni commit ni rollback", () => { + const pool = makeFakePool(); + expect(pool.committed).toBe(false); + expect(pool.rolledBack).toBe(false); + expect(pool.connections).toBe(0); + expect(pool.released).toBe(0); + }); +}); diff --git a/apps/api/test/helpers/fakePool.js b/apps/api/test/helpers/fakePool.js new file mode 100644 index 0000000..f3f65ae --- /dev/null +++ b/apps/api/test/helpers/fakePool.js @@ -0,0 +1,110 @@ +/** + * Faux `pg.Pool` pour les tests de routes. + * + * Objectif : tester le routage, l'authentification, la validation d'entrée et + * la *forme* du SQL généré (allowlists de colonnes, casts, transactions) — sans + * démarrer de conteneur Postgres. Un test qui monte un conteneur met des + * dizaines de secondes ; celui-ci tourne en millisecondes. + * + * `handlers` associe un fragment de SQL (sous-chaîne ou RegExp) à un résultat. + * Toutes les requêtes exécutées sont enregistrées dans `pool.calls`. + * + * Le faux client rend les transactions observables : `pool.committed` et + * `pool.rolledBack` permettent d'affirmer qu'une route a bien annulé son travail + * sur erreur, et `pool.released` qu'elle n'a pas fui de connexion. + */ +/** + * @typedef {object} Handler + * @property {string|RegExp} match fragment de SQL à reconnaître + * @property {any} [result] résultat pg, ou fonction (sql, values) => résultat + * @property {Error|string} [throws] fait échouer la requête (chemins d'erreur) + * + * @param {Handler[]} [handlers] + */ +export function makeFakePool(handlers = []) { + const calls = []; + const state = { committed: false, rolledBack: false, released: 0, connections: 0 }; + let active = handlers; + + async function query(text, values) { + const sql = typeof text === "string" ? text : text.text; + calls.push({ sql, values: values ?? [] }); + + if (sql === "COMMIT") state.committed = true; + if (sql === "ROLLBACK") state.rolledBack = true; + + for (const { match, result, throws } of active) { + const hit = match instanceof RegExp ? match.test(sql) : sql.includes(match); + if (hit) { + if (throws) throw throws instanceof Error ? throws : new Error(String(throws)); + return typeof result === "function" ? result(sql, values) : result; + } + } + return { rows: [], rowCount: 0 }; + } + + const pool = { + calls, + query, + + /** + * Reconfigure le pool sans en recréer un. + * + * Permet de construire l'app Fastify UNE fois par fichier de test (14 ms + * par construction, multipliées par ~12 000 exécutions pendant un run de + * mutation) au lieu d'une fois par cas de test. + */ + reset(newHandlers = []) { + active = newHandlers; + calls.length = 0; + state.committed = false; + state.rolledBack = false; + state.released = 0; + state.connections = 0; + return pool; + }, + + async connect() { + state.connections++; + return { + query, + release() { + state.released++; + }, + }; + }, + + get committed() { return state.committed; }, + get rolledBack() { return state.rolledBack; }, + get released() { return state.released; }, + get connections() { return state.connections; }, + + /** Retrouve la première requête exécutée contenant `fragment`. */ + find(fragment) { + return calls.find((c) => + fragment instanceof RegExp ? fragment.test(c.sql) : c.sql.includes(fragment) + ); + }, + + /** Toutes les requêtes contenant `fragment`. */ + findAll(fragment) { + return calls.filter((c) => + fragment instanceof RegExp ? fragment.test(c.sql) : c.sql.includes(fragment) + ); + }, + + /** Ordre d'exécution des requêtes correspondant à l'un des fragments. */ + sequence(fragments) { + return calls + .map((c) => fragments.find((f) => (f instanceof RegExp ? f.test(c.sql) : c.sql.includes(f)))) + .filter(Boolean); + }, + }; + + return pool; +} + +/** Raccourci : un résultat pg minimal. */ +export function rows(...items) { + return { rows: items, rowCount: items.length }; +} diff --git a/apps/api/test/helpers/testApp.js b/apps/api/test/helpers/testApp.js new file mode 100644 index 0000000..2083840 --- /dev/null +++ b/apps/api/test/helpers/testApp.js @@ -0,0 +1,65 @@ +import Fastify from "fastify"; +import cookie from "@fastify/cookie"; +import { makeFakePool } from "./fakePool.js"; + +/** + * Applications de test partagées. + * + * Construire une app Fastify coûte ~14 ms (helmet + cookie + rate-limit + + * ready()). C'est négligeable une fois, mais les tests de mutation rejouent la + * suite des milliers de fois : à raison d'une construction par cas de test, ces + * 14 ms devenaient l'essentiel des 5 minutes du run. + * + * On construit donc l'app UNE fois par fichier, autour d'un pool reconfigurable + * (`pool.reset(handlers)`), et chaque test ne fait que reprogrammer le pool. + * + * Une app par fichier de test (et non une globale partagée) : les fichiers + * s'exécutent dans des workers séparés, et l'isolation reste totale puisque le + * seul état mutable est le pool, remis à zéro avant chaque cas. + */ + +/** App n'exposant que les routes admin (plugin adminRoutes seul). */ +export async function createAdminApp() { + const { default: adminRoutes } = await import("../../src/adminRoutes.js"); + const pool = makeFakePool(); + const app = Fastify({ logger: false }); + await app.register(cookie); + await app.register(adminRoutes, { pool }); + await app.ready(); + return { app, pool }; +} + +/** App complète (routes publiques + admin), via la fabrique de production. */ +export async function createFullApp(opts = {}) { + const { buildServer } = await import("../../src/app.js"); + const pool = makeFakePool(); + const app = await buildServer({ + pool, + logger: false, + corsOrigins: ["https://metalfrom.eu"], + seedAdmin: false, + // L'app est partagée entre les cas du fichier : les plafonds de débit + // réels rendraient le 11e test rouge sans rapport avec ce qu'il vérifie. + // Les vraies valeurs sont testées dans rateLimit.test.js. + globalRateLimitMax: 1e9, + adminRateLimitMax: 1e9, + authRateLimitMax: 1e9, + ...opts, + }); + return { app, pool }; +} + +/** + * Quelques cas doivent construire leur propre app (options de fabrique + * différentes : jeton d'import absent, pool null…). Ils restent rares et + * assument le coût de construction. + */ +export async function createFullAppWith(opts) { + const { buildServer } = await import("../../src/app.js"); + return buildServer({ + logger: false, + corsOrigins: ["https://metalfrom.eu"], + seedAdmin: false, + ...opts, + }); +} diff --git a/apps/api/test/publicRoutes.test.js b/apps/api/test/publicRoutes.test.js new file mode 100644 index 0000000..2f85deb --- /dev/null +++ b/apps/api/test/publicRoutes.test.js @@ -0,0 +1,430 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { rows } = await import("./helpers/fakePool.js"); +const { createFullApp, createFullAppWith } = await import("./helpers/testApp.js"); + +const TOKEN = "c4b99106fcd09badce25810e974ec4d6"; + +// Deux apps pour tout le fichier (cf. helpers/testApp.js : construire une app +// coûte ~14 ms, multipliées par des milliers d'exécutions en tests de mutation). +// Chaque cas se contente de reprogrammer le pool associé. +let app, pool, tokenApp, tokenPool; + +beforeAll(async () => { + ({ app, pool } = await createFullApp()); + ({ app: tokenApp, pool: tokenPool } = await createFullApp({ importToken: TOKEN })); +}); +afterAll(async () => { + await app.close(); + await tokenApp.close(); +}); + +/** Handlers par défaut : chaque requête renvoie quelque chose de plausible. */ +function defaultHandlers() { + return [ + { match: "FROM band_locations bl", result: rows({ ma_id: 1, name: "Mayhem", lat: 59.9, lon: 10.7 }) }, + { match: "grid_cells", result: rows({ lat: 59.9, lon: 10.7, count: 3, sample_bands: [] }) }, + { match: "FROM bands", result: rows({ ma_id: 1, name: "Mayhem", total: 1 }) }, + ]; +} + +/** + * Reprogramme le pool partagé et renvoie l'app publique. + * @param {import("./helpers/fakePool.js").Handler[]} [handlers] + */ +function build(handlers = defaultHandlers()) { + pool.reset(handlers); + return app; +} + +/** Idem pour l'app configurée avec un jeton d'import. */ +function buildToken(handlers = []) { + tokenPool.reset(handlers); + return tokenApp; +} + +describe("/api/health et /", () => { + it("health répond 200 sans toucher la base", async () => { + const res = await build([]).inject({ method: "GET", url: "/api/health" }); + expect(res.statusCode).toBe(200); + expect(res.json()).toEqual({ ok: true }); + expect(pool.calls).toHaveLength(0); + }); + + it("la racine identifie le service", async () => { + expect((await build([]).inject({ method: "GET", url: "/" })).json().ok).toBe(true); + }); +}); + +describe("CORS", () => { + it("renvoie l'en-tête pour une origine autorisée", async () => { + const res = await build().inject({ + method: "GET", url: "/api/health", headers: { origin: "https://metalfrom.eu" }, + }); + expect(res.headers["access-control-allow-origin"]).toBe("https://metalfrom.eu"); + }); + + it("n'écho PAS une origine non autorisée", async () => { + const res = await build().inject({ + method: "GET", url: "/api/health", headers: { origin: "https://evil.example" }, + }); + expect(res.headers["access-control-allow-origin"]).toBeUndefined(); + }); + + it("ne fait pas de match par préfixe sur l'origine", async () => { + const res = await build().inject({ + method: "GET", url: "/api/health", headers: { origin: "https://metalfrom.eu.evil.example" }, + }); + expect(res.headers["access-control-allow-origin"]).toBeUndefined(); + }); + + // Régression : sans `return reply`, Fastify poursuivait le cycle de vie et le + // préflight repartait dans le handler de route (ou un 404). + it("le préflight OPTIONS répond 204 et court-circuite le routage", async () => { + const res = await build().inject({ method: "OPTIONS", url: "/api/bands" }); + expect(res.statusCode).toBe(204); + expect(res.body).toBe(""); + }); + + it("OPTIONS répond 204 même sur une route inexistante", async () => { + expect((await build().inject({ method: "OPTIONS", url: "/nimporte/quoi" })).statusCode).toBe(204); + }); +}); + +describe("en-têtes de sécurité (helmet)", () => { + it.each([ + "x-content-type-options", + "x-frame-options", + "strict-transport-security", + ])("pose %s", async (header) => { + const res = await build().inject({ method: "GET", url: "/api/health" }); + expect(res.headers[header]).toBeDefined(); + }); + + it("ne divulgue pas la stack ni les identifiants en cas d'erreur serveur", async () => { + const res = await build([ + { match: "FROM bands", throws: new Error("connexion perdue: host=10.0.1.7 user=bm") }, + ]).inject({ method: "GET", url: "/api/stats" }); + expect(res.statusCode).toBe(500); + expect(res.body).not.toMatch(/10\.0\.1\.7|user=bm|at Object/); + }); +}); + +describe("/api/bands — validation", () => { + it("répond 200 sans paramètre", async () => { + const res = await build().inject({ method: "GET", url: "/api/bands" }); + expect(res.statusCode).toBe(200); + expect(res.json().limit).toBe(1000); + }); + + // Régression : Number("abc") = NaN partait dans LIMIT $n → erreur pg → 500. + it.each([ + ["limit=abc", "/api/bands?limit=abc"], + ["limit=0", "/api/bands?limit=0"], + ["limit=-5", "/api/bands?limit=-5"], + ["offset=abc", "/api/bands?offset=abc"], + ["offset=-1", "/api/bands?offset=-1"], + ["offset>1M", "/api/bands?offset=1000001"], + ])("répond 400 (pas 500) pour %s", async (_label, url) => { + const res = await build().inject({ method: "GET", url }); + expect(res.statusCode).toBe(400); + expect(res.json().ok).toBe(false); + }); + + it("plafonne le limit sans erreur", async () => { + expect((await build().inject({ method: "GET", url: "/api/bands?limit=999999" })).json().limit).toBe(150000); + }); + + it("rejette une recherche d'un seul caractère", async () => { + expect((await build().inject({ method: "GET", url: "/api/bands?q=a" })).statusCode).toBe(400); + }); + + it("rejette les patterns ILIKE pathologiques", async () => { + expect((await build().inject({ method: "GET", url: "/api/bands?q=%25%25%25" })).statusCode).toBe(400); + }); + + it("rejette plus de 100 pays", async () => { + const many = Array.from({ length: 101 }, (_, i) => `C${i}`).join(","); + const res = await build().inject({ method: "GET", url: `/api/bands?countries=${many}` }); + expect(res.statusCode).toBe(400); + expect(res.json().error).toMatch(/Max 100/); + }); + + it("rejette plus de 50 statuts", async () => { + const many = Array.from({ length: 51 }, (_, i) => `s${i}`).join(","); + expect((await build().inject({ method: "GET", url: `/api/bands?status=${many}` })).statusCode).toBe(400); + }); + + it("passe la recherche en paramètre lié", async () => { + await build().inject({ + method: "GET", url: "/api/bands?q=" + encodeURIComponent("'; DROP TABLE bands--"), + }); + const call = pool.find("FROM bands"); + expect(call.sql).not.toContain("DROP TABLE"); + expect(call.values.some((v) => String(v).includes("DROP TABLE"))).toBe(true); + }); + + it("normalise les codes pays en majuscules", async () => { + await build().inject({ method: "GET", url: "/api/bands?countries=fr,de" }); + expect(pool.find("FROM bands").values).toContainEqual(["FR", "DE"]); + }); +}); + +describe("/api/clusters — validation géographique", () => { + it.each([ + ["bbox absente", "/api/clusters?zoom=5"], + ["zoom absent", "/api/clusters?bbox=-5,40,10,55"], + ["bbox à 3 valeurs", "/api/clusters?bbox=1,2,3&zoom=5"], + ["bbox non numérique", "/api/clusters?bbox=a,b,c,d&zoom=5"], + ["latitude > 90", "/api/clusters?bbox=-5,40,10,95&zoom=5"], + ["longitude < -180", "/api/clusters?bbox=-181,40,10,55&zoom=5"], + ["bbox inversée", "/api/clusters?bbox=10,40,-5,55&zoom=5"], + ["zoom négatif", "/api/clusters?bbox=-5,40,10,55&zoom=-1"], + ["zoom > 22", "/api/clusters?bbox=-5,40,10,55&zoom=23"], + ])("répond 400 pour %s", async (_label, url) => { + expect((await build().inject({ method: "GET", url })).statusCode).toBe(400); + }); + + it("accepte une bbox valide", async () => { + const res = await build().inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=5" }); + expect(res.statusCode).toBe(200); + }); + + // Le seuil de zoom 12 fait basculer entre agrégation en grille et points bruts. + it("agrège en clusters en dessous du zoom 12", async () => { + const res = await build().inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=11" }); + expect(res.json().type).toBe("clusters"); + expect(pool.find("grid_cells")).toBeDefined(); + }); + + it("renvoie les groupes bruts à partir du zoom 12", async () => { + const res = await build().inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=12" }); + expect(res.json().type).toBe("bands"); + expect(pool.find("grid_cells")).toBeUndefined(); + }); + + it("ne lit que les localisations réellement géocodées", async () => { + await build().inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=5" }); + const sql = pool.find("grid_cells").sql; + expect(sql).toContain("bl.geom IS NOT NULL"); + expect(sql).toContain("geocode_status IN ('done','country_only')"); + }); + + it("utilise l'index spatial via ST_MakeEnvelope avec des paramètres liés", async () => { + await build().inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=5" }); + const call = pool.find("grid_cells"); + expect(call.sql).toContain("bl.geom && ST_MakeEnvelope($1, $2, $3, $4, 4326)"); + expect(call.values.slice(0, 4)).toEqual([-5, 40, 10, 55]); + }); +}); + +describe("/api/band/:ma_id", () => { + it("répond 400 pour un identifiant non numérique", async () => { + expect((await build().inject({ method: "GET", url: "/api/band/abc" })).statusCode).toBe(400); + }); + + it("répond 404 quand le groupe n'existe pas", async () => { + const res = await build([{ match: "FROM bands", result: rows() }]) + .inject({ method: "GET", url: "/api/band/42" }); + expect(res.statusCode).toBe(404); + }); + + it("accepte un ma_id au-delà de 2^31 (colonne BIGINT)", async () => { + const res = await build([{ match: "FROM bands", result: rows({ ma_id: 3500000000 }) }]) + .inject({ method: "GET", url: "/api/band/3500000000" }); + expect(res.statusCode).toBe(200); + expect(pool.find("FROM bands").values).toEqual([3500000000]); + }); +}); + +describe("/admin/import — jeton Bearer", () => { + it.each([ + ["sans en-tête", undefined], + ["jeton vide", "Bearer "], + ["jeton faux de même longueur", `Bearer ${"0".repeat(TOKEN.length)}`], + ["jeton faux plus court", "Bearer abc"], + ["schéma Basic", "Basic " + Buffer.from("a:b").toString("base64")], + ])("répond 401 %s", async (_label, authorization) => { + const res = await buildToken().inject({ + method: "POST", url: "/admin/import", + headers: authorization ? { authorization } : {}, + payload: { bands: [] }, + }); + expect(res.statusCode).toBe(401); + }); + + it("ne touche pas la base quand le jeton est invalide", async () => { + await buildToken().inject({ + method: "POST", url: "/admin/import", + headers: { authorization: "Bearer faux" }, + payload: { bands: [{ ma_id: 1 }] }, + }); + expect(tokenPool.calls).toHaveLength(0); + }); + + it("accepte le bon jeton", async () => { + const res = await buildToken([{ match: "INSERT INTO bands", result: rows() }]).inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${TOKEN}` }, + payload: { bands: [{ ma_id: 1, name: "Mayhem" }] }, + }); + expect(res.statusCode).toBe(200); + expect(res.json().upserted).toBe(1); + }); + + // Un jeton multi-octets de même longueur en caractères mais pas en octets + // faisait lever timingSafeEqual → 500 au lieu d'un 401 propre. + it("répond 401 (pas 500) pour un jeton multi-octets", async () => { + const res = await buildToken().inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${"é".repeat(TOKEN.length)}` }, + payload: { bands: [] }, + }); + expect(res.statusCode).toBe(401); + }); + + it("refuse un corps sans tableau bands", async () => { + for (const payload of [{}, { bands: "pas-un-tableau" }, { bands: null }]) { + const res = await buildToken().inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${TOKEN}` }, payload, + }); + expect(res.statusCode).toBe(400); + } + }); + + it("refuse plus de 1000 groupes par lot", async () => { + const bands = Array.from({ length: 1001 }, (_, i) => ({ ma_id: i })); + const res = await buildToken().inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${TOKEN}` }, payload: { bands }, + }); + expect(res.statusCode).toBe(400); + }); + + it("ignore les entrées sans ma_id numérique sans planter", async () => { + const res = await buildToken([{ match: "INSERT INTO bands", result: rows() }]).inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${TOKEN}` }, + payload: { bands: [{ ma_id: "abc" }, null, "chaine", { ma_id: 7 }] }, + }); + expect(res.statusCode).toBe(200); + expect(res.json().upserted).toBe(1); + }); + + // Cas nécessitant une fabrique différente : app sans jeton configuré. + it("quand aucun jeton n'est configuré, tout est refusé", async () => { + const noTokenApp = await createFullAppWith({ importToken: "", pool: null }); + const res = await noTokenApp.inject({ + method: "POST", url: "/admin/import", + headers: { authorization: "Bearer nimportequoi" }, payload: { bands: [] }, + }); + expect(res.statusCode).toBe(401); + await noTokenApp.close(); + }); +}); + +describe("/admin/auth/login", () => { + it("refuse un corps mal formé sans requête SQL", async () => { + const a = build([]); + for (const payload of [{}, { username: "a" }, { username: 1, password: 2 }]) { + expect((await a.inject({ method: "POST", url: "/admin/auth/login", payload })).statusCode).toBe(400); + } + expect(pool.calls).toHaveLength(0); + }); + + it("répond 429 quand le compte est verrouillé, sans vérifier le mot de passe", async () => { + const res = await build([ + { match: "admin_login_attempts", result: rows({ n: 99 }) }, + { match: "FROM admin_users", result: rows({ password_hash: "x" }) }, + ]).inject({ + method: "POST", url: "/admin/auth/login", + payload: { username: "nico", password: "x" }, + }); + expect(res.statusCode).toBe(429); + expect(pool.find("FROM admin_users")).toBeUndefined(); + }); + + it("enregistre la tentative échouée et ne pose pas de cookie", async () => { + const bcrypt = (await import("bcryptjs")).default; + // Hash à coût 4 : le DUMMY_HASH de production est à coût 12 (~330 ms). + const hash = bcrypt.hashSync("autre-chose", 4); + const res = await build([ + { match: "SELECT count(*)::int AS n", result: rows({ n: 0 }) }, + { match: "FROM admin_users", result: rows({ password_hash: hash }) }, + { match: "INSERT INTO admin_login_attempts", result: rows() }, + ]).inject({ + method: "POST", url: "/admin/auth/login", + payload: { username: "nico", password: "mauvais" }, + }); + expect(res.statusCode).toBe(401); + expect(res.headers["set-cookie"]).toBeUndefined(); + expect(pool.find("INSERT INTO admin_login_attempts").values[2]).toBe(false); + }); + + it("le cookie de session est httpOnly, secure, sameSite=strict", async () => { + const bcrypt = (await import("bcryptjs")).default; + const hash = bcrypt.hashSync("bon", 4); + const res = await build([ + { match: "SELECT count(*)::int AS n", result: rows({ n: 0 }) }, + { match: "FROM admin_users", result: rows({ password_hash: hash }) }, + { match: "INSERT INTO admin_login_attempts", result: rows() }, + { match: "UPDATE admin_users", result: rows() }, + ]).inject({ + method: "POST", url: "/admin/auth/login", + payload: { username: "nico", password: "bon" }, + }); + expect(res.statusCode).toBe(200); + const cookie = String(res.headers["set-cookie"]); + expect(cookie).toMatch(/HttpOnly/i); + expect(cookie).toMatch(/Secure/i); + expect(cookie).toMatch(/SameSite=Strict/i); + // Le jeton ne doit jamais apparaître dans le corps de la réponse + expect(res.json()).toEqual({ ok: true, username: "nico" }); + }); + + it("tronque un username exagérément long avant la requête", async () => { + const bcrypt = (await import("bcryptjs")).default; + const hash = bcrypt.hashSync("x", 4); + await build([ + { match: "SELECT count(*)::int AS n", result: rows({ n: 0 }) }, + { match: "FROM admin_users", result: rows({ password_hash: hash }) }, + { match: "INSERT INTO admin_login_attempts", result: rows() }, + ]).inject({ + method: "POST", url: "/admin/auth/login", + payload: { username: "a".repeat(5000), password: "x" }, + }); + expect(pool.find("FROM admin_users").values[0]).toHaveLength(100); + }); +}); + +describe("gestionnaire d'erreurs global", () => { + // Régression : setErrorHandler écrasait TOUS les statuts en 500, y compris + // les 4xx légitimes (payload trop gros, JSON invalide, rate-limit). + it("préserve un 400 sur JSON invalide", async () => { + const res = await build([]).inject({ + method: "POST", url: "/admin/auth/login", + headers: { "content-type": "application/json" }, + payload: "{ceci n'est pas du json", + }); + expect(res.statusCode).toBe(400); + }); + + it("renvoie 500 générique pour une erreur inattendue", async () => { + const res = await build([{ match: "FROM bands", throws: new Error("boom") }]) + .inject({ method: "GET", url: "/api/stats" }); + expect(res.statusCode).toBe(500); + expect(res.json().error).not.toContain("boom"); + }); +}); + +describe("sans base de données configurée", () => { + it("les routes de données répondent 500 mais le service reste debout", async () => { + const noDbApp = await createFullAppWith({ pool: null }); + expect((await noDbApp.inject({ method: "GET", url: "/api/stats" })).statusCode).toBe(500); + expect((await noDbApp.inject({ method: "GET", url: "/api/health" })).statusCode).toBe(200); + await noDbApp.close(); + }); +}); diff --git a/apps/api/test/publicRoutesCoverage.test.js b/apps/api/test/publicRoutesCoverage.test.js new file mode 100644 index 0000000..8c50eff --- /dev/null +++ b/apps/api/test/publicRoutesCoverage.test.js @@ -0,0 +1,393 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { signAdminSession, ADMIN_COOKIE_NAME } = await import("../src/adminAuth.js"); +const { rows } = await import("./helpers/fakePool.js"); +const { createFullApp } = await import("./helpers/testApp.js"); + +const TOKEN_FOR_APP = "jeton-de-test"; + +// Deux apps seulement pour tout le fichier : une par jeu d'options de fabrique. +// Chaque test se contente de reprogrammer le pool associé. +let app, pool, tokenApp, tokenPool; + +beforeAll(async () => { + ({ app, pool } = await createFullApp()); + ({ app: tokenApp, pool: tokenPool } = await createFullApp({ importToken: TOKEN_FOR_APP })); +}); +afterAll(async () => { await app.close(); await tokenApp.close(); }); + +/** Reprogramme le pool partagé et renvoie l'app publique. */ +function build(handlers) { + pool.reset(handlers ?? []); + return app; +} + +/** Idem pour l'app configurée avec un jeton d'import. */ +function buildToken(handlers) { + tokenPool.reset(handlers ?? []); + return tokenApp; +} + +const anyPool = (extra = []) => + [...extra, { match: /./, result: rows({ n: 1, total: 1, value: "x", count: 1 }) }]; + +describe("routes d'agrégation publiques", () => { + const ROUTES = ["/api/db", "/api/stats", "/api/countries", "/api/statuses", "/api/facets"]; + + it.each(ROUTES)("%s répond 200 avec ok:true", async (url) => { + const app = build(anyPool()); + const res = await app.inject({ method: "GET", url }); + expect(res.statusCode).toBe(200); + expect(res.json().ok).toBe(true); + }); + + it.each(ROUTES)("%s répond 500 sans divulguer l'erreur si la base tombe", async (url) => { + const handlers = ([{ match: /./, throws: new Error("FATAL: role bm does not exist") }]); + const app = build(handlers); + const res = await app.inject({ method: "GET", url }); + expect(res.statusCode).toBe(500); + expect(res.body).not.toMatch(/role bm|FATAL/); + }); + + it.each(ROUTES)("%s est accessible sans authentification (données publiques)", async (url) => { + const app = build(anyPool()); + expect((await app.inject({ method: "GET", url })).statusCode).not.toBe(401); + }); +}); + +describe("/api/stats", () => { + it("expose les compteurs attendus par le frontend", async () => { + const handlers = ([ + { match: "FROM bands", result: rows({ total: 100, geocoded: 80, no_location: 20, enriched: 60 }) }, + ]); + const app = build(handlers); + const body = (await app.inject({ method: "GET", url: "/api/stats" })).json(); + expect(body).toMatchObject({ ok: true, total: 100, geocoded: 80, no_location: 20, enriched: 60 }); + }); + + // geocoded compte les GROUPES ayant un point principal (bands.geom), pas les + // localisations. La carte, elle, clusterise band_locations : les deux chiffres + // n'ont pas la même unité et ne doivent pas être comparés naïvement. + it("compte les groupes via bands.geom, pas les localisations", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/stats" }); + const sql = pool.find("FROM bands").sql; + expect(sql).toContain("geom IS NOT NULL"); + expect(sql).not.toContain("band_locations"); + }); +}); + +describe("/api/facets", () => { + it("ne propose que des facettes portant sur des groupes géocodés", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/facets" }); + // Sinon l'utilisateur peut cocher une facette qui ne fera apparaître + // aucun point sur la carte. + for (const call of pool.calls) { + expect(call.sql).toContain("geom IS NOT NULL"); + } + }); + + it("borne la liste des genres", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/facets" }); + expect(pool.find("genre as value").sql).toContain("LIMIT 500"); + }); + + it("renvoie une plage d'années même quand la base est vide", async () => { + const handlers = ([{ match: /./, result: rows() }]); + const app = build(handlers); + const body = (await app.inject({ method: "GET", url: "/api/facets" })).json(); + expect(body.year_range).toEqual({ min_year: null, max_year: null }); + }); + + it("écarte les années aberrantes de la plage", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/facets" }); + const sql = pool.find("MIN(formed_year)").sql; + expect(sql).toContain("formed_year >= 1900"); + expect(sql).toContain("extract(year from now())"); + }); +}); + +describe("/api/bands — filtres", () => { + it("filtre sur la présence de coordonnées", async () => { + const mk = async (qs) => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: `/api/bands${qs}` }); + return pool.find("FROM bands").sql; + }; + expect(await mk("?geocoded=1")).toContain("geom IS NOT NULL"); + expect(await mk("?geocoded=0")).toContain("geom IS NULL"); + expect(await mk("")).not.toContain("geom IS"); + }); + + it("only_black=1 filtre sur le genre", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/bands?only_black=1" }); + expect(pool.find("FROM bands").sql).toContain("genre ILIKE '%black%'"); + }); + + it("combine plusieurs filtres avec AND", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/bands?countries=NO&geocoded=1&status=Active" }); + const sql = pool.find("FROM bands").sql; + expect(sql).toContain(" AND "); + expect(sql.match(/ AND /g).length).toBeGreaterThanOrEqual(2); + }); + + it("les statuts vides sont normalisés en 'Unknown'", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/bands?status=Unknown" }); + expect(pool.find("FROM bands").sql).toContain("COALESCE(NULLIF(trim(status), ''), 'Unknown')"); + }); + + it("un tri stable est imposé (pagination cohérente)", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/bands" }); + // Sans ORDER BY déterministe, deux pages successives peuvent renvoyer + // deux fois le même groupe et en omettre un autre. + expect(pool.find("FROM bands").sql).toContain("ORDER BY ma_id ASC"); + }); +}); + +describe("/api/clusters — filtres", () => { + const base = "/api/clusters?bbox=-5,40,10,55&zoom=5"; + + it("applique le filtre de genre en paramètre lié", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: `${base}&genre=black` }); + const call = pool.find("grid_cells"); + expect(call.sql).toContain("b.genre ILIKE"); + expect(call.values).toContain("%black%"); + }); + + it("rejette un genre trop court ou pathologique", async () => { + const app = build(anyPool()); + expect((await app.inject({ method: "GET", url: `${base}&genre=a` })).statusCode).toBe(400); + expect((await app.inject({ method: "GET", url: `${base}&genre=%25%25%25` })).statusCode).toBe(400); + }); + + it.each([ + ["year_min=1799", 400], ["year_min=2101", 400], ["year_min=abc", 400], + ["year_max=1799", 400], ["year_max=abc", 400], + ["year_min=1980&year_max=1990", 200], + ])("%s → %i", async (qs, expected) => { + const app = build(anyPool()); + expect((await app.inject({ method: "GET", url: `${base}&${qs}` })).statusCode).toBe(expected); + }); + + it("refuse plus de 100 pays et plus de 50 statuts", async () => { + const app = build(anyPool()); + const c = Array.from({ length: 101 }, (_, i) => `C${i}`).join(","); + const s = Array.from({ length: 51 }, (_, i) => `s${i}`).join(","); + expect((await app.inject({ method: "GET", url: `${base}&countries=${c}` })).statusCode).toBe(400); + expect((await app.inject({ method: "GET", url: `${base}&status=${s}` })).statusCode).toBe(400); + }); + + it("la taille de cellule décroît quand le zoom augmente", async () => { + const cell = async (zoom) => { + const app = build(anyPool()); + const body = (await app.inject({ method: "GET", url: `/api/clusters?bbox=-5,40,10,55&zoom=${zoom}` })).json(); + return body.cell_size; + }; + expect(await cell(3)).toBeGreaterThan(await cell(8)); + }); + + it("la taille de cellule a un plancher (pas de division infinie)", async () => { + const app = build(anyPool()); + const body = (await app.inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=11" })).json(); + expect(body.cell_size).toBeGreaterThanOrEqual(0.01); + }); + + it("borne le nombre de résultats", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: base }); + expect(pool.find("grid_cells").sql).toContain("LIMIT 1000"); + }); + + it("borne aussi le mode points bruts", async () => { + const handlers = anyPool(); + const app = build(handlers); + await app.inject({ method: "GET", url: "/api/clusters?bbox=-5,40,10,55&zoom=14" }); + expect(pool.find("FROM band_locations bl").sql).toContain("LIMIT 2000"); + }); +}); + +describe("/admin/enrich/next", () => { + const TOKEN = TOKEN_FOR_APP; + const withToken = { authorization: `Bearer ${TOKEN}` }; + + it("exige le jeton Bearer", async () => { + const handlers = ([]); + const app = buildToken(handlers); + expect((await app.inject({ method: "GET", url: "/admin/enrich/next" })).statusCode).toBe(401); + expect(tokenPool.calls).toHaveLength(0); + }); + + it("ne renvoie que les groupes ayant une URL", async () => { + const handlers = ([ + { match: "FROM bands", result: rows({ ma_id: 1, url: "http://x" }, { ma_id: 2, url: null }) }, + ]); + const app = buildToken(handlers); + const body = (await app.inject({ method: "GET", url: "/admin/enrich/next", headers: withToken })).json(); + expect(body.count).toBe(1); + expect(body.items).toEqual([{ ma_id: 1, url: "http://x" }]); + }); + + it("borne la limite entre 1 et 500", async () => { + const lim = async (q) => { + const handlers = ([{ match: "FROM bands", result: rows() }]); + const app = buildToken(handlers); + await app.inject({ method: "GET", url: `/admin/enrich/next?limit=${q}`, headers: withToken }); + return tokenPool.find("FROM bands").values.at(-1); + }; + expect(await lim(9999)).toBe(500); + expect(await lim(0)).toBe(1); + expect(await lim(-5)).toBe(1); + expect(await lim("abc")).toBe(50); // valeur par défaut, pas NaN + expect(await lim(25)).toBe(25); + }); + + it("filtre par pays, normalisé en majuscules et lié", async () => { + const handlers = ([{ match: "FROM bands", result: rows() }]); + const app = buildToken(handlers); + await app.inject({ method: "GET", url: "/admin/enrich/next?country=no", headers: withToken }); + const call = tokenPool.find("FROM bands"); + expect(call.sql).toContain("country = $1"); + expect(call.values[0]).toBe("NO"); + }); + + it("ne sélectionne que les groupes jamais enrichis", async () => { + const handlers = ([{ match: "FROM bands", result: rows() }]); + const app = buildToken(handlers); + await app.inject({ method: "GET", url: "/admin/enrich/next", headers: withToken }); + expect(tokenPool.find("FROM bands").sql).toContain("(data->'band_page') IS NULL"); + }); +}); + +describe("/admin/auth/me et logout", () => { + it("me répond 401 sans cookie", async () => { + const app = build(anyPool()); + expect((await app.inject({ method: "GET", url: "/admin/auth/me" })).statusCode).toBe(401); + }); + + it("me renvoie le username de la session", async () => { + const app = build(anyPool()); + const res = await app.inject({ + method: "GET", url: "/admin/auth/me", + headers: { cookie: `${ADMIN_COOKIE_NAME}=${signAdminSession("nico")}` }, + }); + expect(res.json()).toEqual({ ok: true, username: "nico" }); + }); + + it("logout efface le cookie", async () => { + const app = build(anyPool()); + const res = await app.inject({ method: "POST", url: "/admin/auth/logout" }); + expect(res.statusCode).toBe(200); + const cookie = String(res.headers["set-cookie"]); + expect(cookie).toContain(ADMIN_COOKIE_NAME); + expect(cookie).toMatch(/Expires=Thu, 01 Jan 1970|Max-Age=0/i); + }); + + it("logout ne nécessite pas de session valide (idempotent)", async () => { + const app = build(anyPool()); + expect((await app.inject({ method: "POST", url: "/admin/auth/logout" })).statusCode).toBe(200); + }); +}); + +describe("/admin/import — upsert", () => { + const TOKEN = TOKEN_FOR_APP; + const withToken = { authorization: `Bearer ${TOKEN}` }; + + const importPool = () => ([{ match: "INSERT INTO bands", result: rows() }]); + + it("préserve les valeurs existantes quand le champ est absent (COALESCE)", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1, name: "Mayhem" }] }, + }); + const sql = tokenPool.find("INSERT INTO bands").sql; + expect(sql).toContain("ON CONFLICT (ma_id) DO UPDATE"); + expect(sql).toContain("COALESCE(EXCLUDED.name, bands.name)"); + }); + + it("accepte `location` comme alias de `location_text`", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1, location: "Oslo" }] }, + }); + expect(tokenPool.find("INSERT INTO bands").values[5]).toBe("Oslo"); + }); + + it("marque enriched quand un objet data est fourni", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1, data: { band_page: "..." } }] }, + }); + expect(tokenPool.find("INSERT INTO bands").values[7]).toBe(true); + }); + + it("un data non-objet n'active pas enriched", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1, data: "pas-un-objet" }] }, + }); + const vals = tokenPool.find("INSERT INTO bands").values; + expect(vals[6]).toBeNull(); + expect(vals[7]).toBeNull(); + }); + + it("tous les champs passent en paramètres liés", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1, name: "'; DROP TABLE bands--" }] }, + }); + const call = tokenPool.find("INSERT INTO bands"); + expect(call.sql).not.toContain("DROP TABLE"); + expect(call.values).toContain("'; DROP TABLE bands--"); + }); + + it("compte exactement les lignes traitées", async () => { + const handlers = importPool(); + const app = buildToken(handlers); + const res = await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, + payload: { bands: [{ ma_id: 1 }, { ma_id: 2 }, { ma_id: 3 }] }, + }); + expect(res.json().upserted).toBe(3); + expect(tokenPool.findAll("INSERT INTO bands")).toHaveLength(3); + }); + + it("accepte un lot de exactement 1000 groupes", async () => { + const app = buildToken(importPool()); + const bands = Array.from({ length: 1000 }, (_, i) => ({ ma_id: i + 1 })); + const res = await app.inject({ + method: "POST", url: "/admin/import", headers: withToken, payload: { bands }, + }); + expect(res.statusCode).toBe(200); + }); +}); diff --git a/apps/api/test/rateLimit.test.js b/apps/api/test/rateLimit.test.js new file mode 100644 index 0000000..d7b19f9 --- /dev/null +++ b/apps/api/test/rateLimit.test.js @@ -0,0 +1,126 @@ +import { describe, it, expect } from "vitest"; + +process.env.ADMIN_JWT_SECRET = "secret-de-test-suffisamment-long-pour-passer-32"; + +const { createFullAppWith } = await import("./helpers/testApp.js"); +const { makeFakePool, rows } = await import("./helpers/fakePool.js"); + +/** + * Les autres fichiers de test partagent une app avec des plafonds de débit + * neutralisés (sinon l'état du limiteur fuiterait d'un cas à l'autre). C'EST + * ICI, et seulement ici, que les vraies valeurs de production sont vérifiées — + * sinon la paramétrisation introduite pour la performance créerait un angle + * mort sur une protection de sécurité. + */ + +const TOKEN = "jeton-de-test"; + +async function appWithRealLimits(overrides = {}) { + return createFullAppWith({ + pool: makeFakePool([{ match: /./, result: rows({ total: 0 }) }]), + importToken: TOKEN, + ...overrides, + }); +} + +describe("plafond global", () => { + it("répond 429 au-delà du plafond", async () => { + const app = await appWithRealLimits({ globalRateLimitMax: 3 }); + const codes = []; + for (let i = 0; i < 5; i++) { + codes.push((await app.inject({ method: "GET", url: "/api/health" })).statusCode); + } + expect(codes).toEqual([200, 200, 200, 429, 429]); + await app.close(); + }); + + it("le 429 traverse le gestionnaire d'erreurs sans devenir un 500", async () => { + // Régression : setErrorHandler écrasait tous les statuts en 500, ce qui + // transformait une limitation de débit en fausse panne serveur. + const app = await appWithRealLimits({ globalRateLimitMax: 1 }); + await app.inject({ method: "GET", url: "/api/health" }); + const res = await app.inject({ method: "GET", url: "/api/health" }); + expect(res.statusCode).toBe(429); + expect(res.json().ok).toBe(false); + await app.close(); + }); + + it("la valeur de production par défaut est 1000/minute", async () => { + const app = await appWithRealLimits(); + const res = await app.inject({ method: "GET", url: "/api/health" }); + expect(res.headers["x-ratelimit-limit"]).toBe("1000"); + await app.close(); + }); +}); + +describe("plafond de /admin/import", () => { + it("la valeur de production par défaut est 10/minute", async () => { + const app = await appWithRealLimits(); + const res = await app.inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${TOKEN}` }, payload: { bands: [] }, + }); + expect(res.headers["x-ratelimit-limit"]).toBe("10"); + await app.close(); + }); + + it("limite par jeton, pas globalement", async () => { + const app = await appWithRealLimits({ adminRateLimitMax: 2 }); + const call = (token) => + app.inject({ + method: "POST", url: "/admin/import", + headers: { authorization: `Bearer ${token}` }, payload: { bands: [] }, + }); + + await call(TOKEN); + await call(TOKEN); + // Le 3e appel avec CE jeton est bloqué… + expect((await call(TOKEN)).statusCode).toBe(429); + // …mais un autre jeton dispose de son propre compteur (il sera rejeté en + // 401, pas en 429 : c'est bien l'authentification qui tranche, pas le débit). + expect((await call("un-autre-jeton-de-la-meme-taille")).statusCode).toBe(401); + await app.close(); + }); +}); + +describe("plafond de /admin/auth/login", () => { + it("la valeur de production par défaut est 10/minute", async () => { + const app = await appWithRealLimits(); + const res = await app.inject({ + method: "POST", url: "/admin/auth/login", payload: { username: "", password: "" }, + }); + expect(res.headers["x-ratelimit-limit"]).toBe("10"); + await app.close(); + }); + + // Le verrouillage de compte (5 échecs / 15 min, en base) et le rate-limit HTTP + // sont deux protections distinctes : celle-ci s'applique même à des requêtes + // malformées qui n'atteignent jamais la base. + it("limite le bruteforce même sur des corps invalides", async () => { + const app = await appWithRealLimits({ authRateLimitMax: 2 }); + const call = () => + app.inject({ method: "POST", url: "/admin/auth/login", payload: {} }); + + expect((await call()).statusCode).toBe(400); + expect((await call()).statusCode).toBe(400); + expect((await call()).statusCode).toBe(429); + await app.close(); + }); + + it("limite par IP", async () => { + const app = await appWithRealLimits({ authRateLimitMax: 1 }); + const call = (ip) => + app.inject({ + method: "POST", url: "/admin/auth/login", + headers: { "x-forwarded-for": ip }, + payload: {}, + }); + + expect((await call("1.2.3.4")).statusCode).toBe(400); + expect((await call("1.2.3.4")).statusCode).toBe(429); + // Une autre IP garde son propre quota (trustProxy est actif : l'app est + // derrière Traefik, l'IP réelle vient de X-Forwarded-For). + expect((await call("5.6.7.8")).statusCode).toBe(400); + await app.close(); + }); +}); diff --git a/apps/api/test/validate.test.js b/apps/api/test/validate.test.js new file mode 100644 index 0000000..ffbf817 --- /dev/null +++ b/apps/api/test/validate.test.js @@ -0,0 +1,220 @@ +import { describe, it, expect } from "vitest"; +import { + ValidationError, + sanitizeSearchString, + parseLimitOffset, + pagination, + parseBbox, + parseZoom, + cellSizeForZoom, + parseCsvList, + parseYear, + parseLat, + parseLon, + parseMaId, +} from "../src/validate.js"; + +describe("sanitizeSearchString", () => { + it("trim et accepte une recherche normale", () => { + expect(sanitizeSearchString(" mayhem ")).toBe("mayhem"); + }); + + it.each([ + ["trop courte", "a"], + ["vide", " "], + ["trop longue", "x".repeat(101)], + ])("rejette une chaîne %s", (_label, input) => { + expect(() => sanitizeSearchString(input)).toThrow(ValidationError); + }); + + it("accepte pile 2 et 100 caractères (bornes incluses)", () => { + expect(sanitizeSearchString("ab")).toBe("ab"); + expect(sanitizeSearchString("y".repeat(100))).toHaveLength(100); + }); + + it("rejette les caractères de contrôle", () => { + expect(() => sanitizeSearchString("may\x00hem")).toThrow(/caractères invalides/); + expect(() => sanitizeSearchString("may\x7Fhem")).toThrow(/caractères invalides/); + }); + + it("laisse passer tab et newline (hors plage de contrôle bloquée)", () => { + expect(sanitizeSearchString("a\tb")).toBe("a\tb"); + }); + + it("rejette les patterns ILIKE pathologiques", () => { + expect(() => sanitizeSearchString("%%%")).toThrow(/patterns invalides/); + expect(() => sanitizeSearchString("_".repeat(10))).toThrow(/patterns invalides/); + expect(() => sanitizeSearchString("%".repeat(10))).toThrow(/patterns invalides/); + }); + + it("autorise un % isolé (recherche partielle légitime)", () => { + expect(sanitizeSearchString("100%")).toBe("100%"); + }); + + it("utilise le nom de champ dans le message", () => { + expect(() => sanitizeSearchString("a", "Genre")).toThrow(/^Genre /); + }); +}); + +describe("parseLimitOffset", () => { + it("applique les valeurs par défaut", () => { + expect(parseLimitOffset(undefined, undefined)).toEqual({ limit: 1000, offset: 0 }); + expect(parseLimitOffset("", "")).toEqual({ limit: 1000, offset: 0 }); + }); + + it("borne le limit au maximum", () => { + expect(parseLimitOffset("999999", "0", { maxLimit: 150000 }).limit).toBe(150000); + }); + + it("tronque les valeurs fractionnaires", () => { + expect(parseLimitOffset("10.9", "5.9")).toEqual({ limit: 10, offset: 5 }); + }); + + // Régression : `Number("abc")` donnait NaN, propagé jusqu'au LIMIT $n + // → erreur pg → 500 au lieu d'un 400 explicite. + it("rejette un limit non numérique au lieu de propager NaN", () => { + expect(() => parseLimitOffset("abc", "0")).toThrow(ValidationError); + expect(() => parseLimitOffset("0", "0")).toThrow(/limit invalide/); + expect(() => parseLimitOffset("-5", "0")).toThrow(/limit invalide/); + }); + + it("rejette un offset non numérique ou négatif", () => { + expect(() => parseLimitOffset("10", "abc")).toThrow(/offset invalide/); + expect(() => parseLimitOffset("10", "-1")).toThrow(/offset invalide/); + }); + + it("rejette un offset au-delà du million", () => { + expect(() => parseLimitOffset("10", "1000001")).toThrow(/Offset trop grand/); + expect(parseLimitOffset("10", "1000000").offset).toBe(1000000); + }); +}); + +describe("pagination", () => { + it("valeurs par défaut", () => { + expect(pagination({})).toEqual({ page: 1, pageSize: 50, offset: 0 }); + }); + + it("calcule l'offset", () => { + expect(pagination({ page: "3", pageSize: "20" })).toEqual({ page: 3, pageSize: 20, offset: 40 }); + }); + + it("borne pageSize à 200 et page à 1 minimum", () => { + expect(pagination({ pageSize: "10000" }).pageSize).toBe(200); + expect(pagination({ page: "-4" }).page).toBe(1); + expect(pagination({ page: "abc" }).page).toBe(1); + }); +}); + +describe("parseBbox", () => { + it("parse une bbox valide", () => { + expect(parseBbox("-5,40,10,55")).toEqual({ minLon: -5, minLat: 40, maxLon: 10, maxLat: 55 }); + }); + + it.each([ + ["absente", ""], + ["3 valeurs", "1,2,3"], + ["5 valeurs", "1,2,3,4,5"], + ["non numérique", "a,b,c,d"], + ["hors bornes lat", "-5,40,10,95"], + ["hors bornes lon", "-181,40,10,55"], + ["minLon >= maxLon", "10,40,10,55"], + ["minLat >= maxLat", "-5,55,10,40"], + ])("rejette une bbox %s", (_label, input) => { + expect(() => parseBbox(input)).toThrow(ValidationError); + }); +}); + +describe("parseZoom / cellSizeForZoom", () => { + it("accepte les bornes 0 et 22", () => { + expect(parseZoom("0")).toBe(0); + expect(parseZoom("22")).toBe(22); + }); + + it("rejette hors bornes et non numérique", () => { + expect(() => parseZoom("-1")).toThrow(/between 0 and 22/); + expect(() => parseZoom("23")).toThrow(/between 0 and 22/); + expect(() => parseZoom("abc")).toThrow(ValidationError); + }); + + it("la taille de cellule décroît avec le zoom et a un plancher", () => { + expect(cellSizeForZoom(0)).toBe(180); + expect(cellSizeForZoom(4)).toBeCloseTo(11.25); + expect(cellSizeForZoom(22)).toBe(0.01); + expect(cellSizeForZoom(11)).toBeGreaterThan(cellSizeForZoom(12)); + }); +}); + +describe("parseCsvList", () => { + it("découpe, trim et filtre les vides", () => { + expect(parseCsvList("fr, de ,, be")).toEqual(["fr", "de", "be"]); + }); + + it("applique la transformation", () => { + expect(parseCsvList("fr,de", { transform: (s) => s.toUpperCase() })).toEqual(["FR", "DE"]); + }); + + it("rejette au-delà du maximum", () => { + const many = Array.from({ length: 101 }, (_, i) => `c${i}`).join(","); + expect(() => parseCsvList(many, { max: 100, label: "pays" })).toThrow(/Max 100 pays/); + expect(parseCsvList(many, { max: 101, label: "pays" })).toHaveLength(101); + }); +}); + +describe("parseYear", () => { + it("renvoie null pour une entrée vide", () => { + expect(parseYear("")).toBeNull(); + expect(parseYear(null)).toBeNull(); + expect(parseYear(undefined)).toBeNull(); + }); + + it("accepte les bornes 1800 et 2100", () => { + expect(parseYear("1800")).toBe(1800); + expect(parseYear("2100")).toBe(2100); + }); + + it("rejette hors bornes et non numérique", () => { + expect(() => parseYear("1799")).toThrow(ValidationError); + expect(() => parseYear("2101")).toThrow(ValidationError); + expect(() => parseYear("abc", "year_min")).toThrow(/^year_min invalide/); + }); +}); + +describe("parseLat / parseLon", () => { + it("accepte les bornes", () => { + expect(parseLat(-90)).toBe(-90); + expect(parseLat(90)).toBe(90); + expect(parseLon(-180)).toBe(-180); + expect(parseLon(180)).toBe(180); + }); + + it("null efface la valeur", () => { + expect(parseLat(null)).toBeNull(); + expect(parseLon("")).toBeNull(); + }); + + it("rejette hors bornes", () => { + expect(() => parseLat(90.1)).toThrow(/lat invalide/); + expect(() => parseLon(-180.1)).toThrow(/lon invalide/); + expect(() => parseLat("nord")).toThrow(/lat invalide/); + }); + + // 0 est une coordonnée valide (golfe de Guinée) : ne doit pas être traité + // comme une valeur vide par un test de falsiness. + it("accepte 0", () => { + expect(parseLat(0)).toBe(0); + expect(parseLon(0)).toBe(0); + }); +}); + +describe("parseMaId", () => { + it("accepte un entier positif, y compris au-delà de 2^31", () => { + expect(parseMaId("3500000000")).toBe(3500000000); + expect(parseMaId(0)).toBe(0); + }); + + it("rejette négatif, décimal et non numérique", () => { + expect(() => parseMaId("-1")).toThrow(/bad ma_id/); + expect(() => parseMaId("1.5")).toThrow(/bad ma_id/); + expect(() => parseMaId("abc")).toThrow(/bad ma_id/); + }); +}); diff --git a/apps/crawler/src/db.py b/apps/crawler/src/db.py index 37e2789..5b5940b 100644 --- a/apps/crawler/src/db.py +++ b/apps/crawler/src/db.py @@ -3,9 +3,10 @@ """ import json import logging +import time from contextlib import contextmanager -from datetime import datetime, timezone -from typing import Any, Dict, List, Optional +from datetime import UTC, datetime +from typing import Any import psycopg2 import psycopg2.extras @@ -29,14 +30,14 @@ def get_conn(): def now_utc() -> datetime: - return datetime.now(timezone.utc) + return datetime.now(UTC) # ------------------------------------------------------------------ # Bands # ------------------------------------------------------------------ -def upsert_bands(bands: List[Dict[str, Any]]) -> Dict[str, int]: +def upsert_bands(bands: list[dict[str, Any]]) -> dict[str, int]: """ Upsert en bulk. Préserve les champs existants si la nouvelle valeur est None. Retourne {"inserted": N, "updated": N}. @@ -99,7 +100,7 @@ def upsert_bands(bands: List[Dict[str, Any]]) -> Dict[str, int]: return {"inserted": inserted, "updated": updated} -def upsert_band_enriched(ma_id: int, data: Dict[str, Any], html_hash: str) -> bool: +def upsert_band_enriched(ma_id: int, data: dict[str, Any], html_hash: str) -> bool: """ Met à jour les champs d'enrichissement d'un band. Respecte locked_fields : les champs édités manuellement dans l'admin ne sont pas @@ -107,7 +108,7 @@ def upsert_band_enriched(ma_id: int, data: Dict[str, Any], html_hash: str) -> bo stockée dans crawler_pending pour résolution manuelle. """ ts = now_utc() - new_vals: Dict[str, Any] = { + new_vals: dict[str, Any] = { "status": data.get("status"), "genre": data.get("genre"), "themes": data.get("themes"), @@ -157,7 +158,7 @@ def upsert_band_enriched(ma_id: int, data: Dict[str, Any], html_hash: str) -> bo return cur.rowcount > 0 -def get_bands_to_enrich(country: Optional[str] = None, limit: int = 50) -> List[Dict]: +def get_bands_to_enrich(country: str | None = None, limit: int = 50) -> list[dict]: """ File de priorité pour l'enrichissement : 1. Nouveaux bands (band_page absent) — jamais enrichis @@ -203,7 +204,7 @@ def get_bands_to_enrich(country: Optional[str] = None, limit: int = 50) -> List[ # Logs (visibles dans le dashboard admin) # ------------------------------------------------------------------ -def log_event(level: str, message: str, run_id: Optional[int] = None, ma_id: Optional[int] = None): +def log_event(level: str, message: str, run_id: int | None = None, ma_id: int | None = None): """Écrit une ligne de log en DB pour le dashboard admin (n'interrompt jamais le crawl).""" try: with get_conn() as conn: @@ -220,7 +221,7 @@ def log_event(level: str, message: str, run_id: Optional[int] = None, ma_id: Opt # Crawl run tracking # ------------------------------------------------------------------ -def update_crawl_run_progress(run_id: int, stats: Dict[str, int]): +def update_crawl_run_progress(run_id: int, stats: dict[str, int]): """Mise à jour des compteurs d'un run en cours (progression live).""" try: with get_conn() as conn: @@ -236,7 +237,7 @@ def update_crawl_run_progress(run_id: int, stats: Dict[str, int]): log.warning(f"[db] update_crawl_run_progress failed: {e}") -def start_crawl_run(run_type: str, countries: Optional[List[str]] = None) -> int: +def start_crawl_run(run_type: str, countries: list[str] | None = None) -> int: sql = "INSERT INTO crawl_run (run_type, countries) VALUES (%s, %s) RETURNING id" with get_conn() as conn: with conn.cursor() as cur: @@ -244,8 +245,62 @@ def start_crawl_run(run_type: str, countries: Optional[List[str]] = None) -> int return cur.fetchone()[0] -def finish_crawl_run(run_id: int, stats: Dict[str, int], error: Optional[str] = None): - status = "error" if error else "done" +class RunCancelled(Exception): + """Levée dans les boucles de crawl quand un admin demande l'annulation. + + Volontairement distincte des erreurs : un run annulé n'est pas un échec, il + ne doit ni être marqué 'error' ni polluer les alertes. + """ + + +# Le drapeau d'annulation est relu au plus une fois toutes les +# _CANCEL_POLL_SECONDS secondes : les boucles de crawl appellent le check à +# chaque groupe, on ne veut pas une requête SQL par groupe. +_CANCEL_POLL_SECONDS = 5.0 +_cancel_cache: dict[int, tuple[float, bool]] = {} + + +def is_cancel_requested(run_id: int, force: bool = False) -> bool: + """Un admin a-t-il demandé l'arrêt de ce run ? + + En cas d'erreur DB on renvoie False : une base momentanément injoignable ne + doit pas interrompre un crawl en cours. + """ + now = time.monotonic() + cached = _cancel_cache.get(run_id) + if not force and cached and (now - cached[0]) < _CANCEL_POLL_SECONDS: + return cached[1] + + try: + with get_conn() as conn: + with conn.cursor() as cur: + cur.execute( + "SELECT cancel_requested FROM crawl_run WHERE id = %s", (run_id,) + ) + row = cur.fetchone() + requested = bool(row and row[0]) + except Exception as e: + log.warning(f"[db] is_cancel_requested failed: {e}") + return cached[1] if cached else False + + _cancel_cache[run_id] = (now, requested) + return requested + + +def raise_if_cancelled(run_id: int): + """Point de contrôle à placer dans les boucles longues.""" + if is_cancel_requested(run_id): + raise RunCancelled(f"run #{run_id} annulé par un administrateur") + + +def finish_crawl_run( + run_id: int, + stats: dict[str, int], + error: str | None = None, + cancelled: bool = False, +): + _cancel_cache.pop(run_id, None) + status = "cancelled" if cancelled else ("error" if error else "done") sql = """ UPDATE crawl_run SET status = %s, finished_at = now(), @@ -267,7 +322,7 @@ def finish_crawl_run(run_id: int, stats: Dict[str, int], error: Optional[str] = # Checkpoints # ------------------------------------------------------------------ -def get_checkpoint(key: str) -> Optional[str]: +def get_checkpoint(key: str) -> str | None: with get_conn() as conn: with conn.cursor() as cur: cur.execute("SELECT value FROM crawl_checkpoint WHERE key = %s", (key,)) @@ -290,7 +345,7 @@ def set_checkpoint(key: str, value: str): # Job triggers (déclenchement depuis le dashboard admin) # ------------------------------------------------------------------ -def claim_job_trigger(job_type: Optional[str] = None) -> Optional[int]: +def claim_job_trigger(job_type: str | None = None) -> int | None: """Récupère et verrouille un job trigger en attente. Retourne son id ou None.""" where = "status = 'pending'" params: list = [] @@ -317,7 +372,7 @@ def claim_job_trigger(job_type: Optional[str] = None) -> Optional[int]: return None -def finish_job_trigger(trigger_id: int, error: Optional[str] = None): +def finish_job_trigger(trigger_id: int, error: str | None = None): try: with get_conn() as conn: with conn.cursor() as cur: @@ -333,7 +388,7 @@ def finish_job_trigger(trigger_id: int, error: Optional[str] = None): # Helpers # ------------------------------------------------------------------ -def _parse_year(s: Optional[str]) -> Optional[int]: +def _parse_year(s: str | None) -> int | None: if not s: return None m = __import__("re").search(r"\b(1[89]\d\d|20\d\d)\b", str(s)) diff --git a/apps/crawler/src/flaresolverr.py b/apps/crawler/src/flaresolverr.py index e11829c..9bf648e 100644 --- a/apps/crawler/src/flaresolverr.py +++ b/apps/crawler/src/flaresolverr.py @@ -9,7 +9,6 @@ Workflow : 5. fs.destroy_session(session_id) → libère la ressource Chrome """ import logging -from typing import Optional, Tuple import requests @@ -47,7 +46,7 @@ class FlareSolverr: except Exception as e: log.warning(f"[fs] destroy session {session_id} failed: {e}") - def get(self, url: str, session_id: Optional[str] = None) -> Tuple[int, str]: + def get(self, url: str, session_id: str | None = None) -> tuple[int, str]: """ GET via FlareSolverr. Retourne (http_status_code, response_body). Si session_id fourni, réutilise le Chrome existant (pas de re-warmup). diff --git a/apps/crawler/src/jobs.py b/apps/crawler/src/jobs.py index f5fbc9e..e8da363 100644 --- a/apps/crawler/src/jobs.py +++ b/apps/crawler/src/jobs.py @@ -2,29 +2,35 @@ Jobs de crawl. Chaque fonction est un job indépendant appelé par le scheduler. """ import logging -from datetime import datetime, timezone -from typing import List, Optional +from datetime import UTC, datetime from .config import ( - BAND_MIN_DELAY, BAND_MAX_DELAY, - COOLDOWN_EVERY, COOLDOWN_MIN, COOLDOWN_MAX, + BAND_MAX_DELAY, + BAND_MIN_DELAY, + COOLDOWN_EVERY, + COOLDOWN_MAX, + COOLDOWN_MIN, MA_BASE, ) from .db import ( - upsert_bands, upsert_band_enriched, + RunCancelled, + finish_crawl_run, get_bands_to_enrich, - start_crawl_run, finish_crawl_run, - update_crawl_run_progress, - get_checkpoint, set_checkpoint, + get_checkpoint, log_event, + raise_if_cancelled, + set_checkpoint, + start_crawl_run, + update_crawl_run_progress, + upsert_band_enriched, + upsert_bands, ) from .europe_codes import EUROPE_COUNTRY_CODES +from .ma_http import MASession +from .polite import cooldown, sleep_range +from .scraper_band import page_hash, parse_band_page _EU_SET = set(EUROPE_COUNTRY_CODES) -from .europe_codes import EUROPE_COUNTRY_CODES -from .ma_http import MASession -from .polite import sleep_range, cooldown -from .scraper_band import parse_band_page, page_hash log = logging.getLogger(__name__) @@ -35,21 +41,26 @@ CHUNK = 300 # taille des batches d'upsert # Crawl complet (tous les pays d'un coup) # ------------------------------------------------------------------ -def run_full_crawl(session: MASession, countries: List[str] = None): +def run_full_crawl(session: MASession, countries: list[str] = None): countries = countries or EUROPE_COUNTRY_CODES run_id = start_crawl_run("full_europe", countries) stats = {"seen": 0, "new": 0, "updated": 0, "enriched": 0} error = None + cancelled = False log_event("info", f"full crawl started ({len(countries)} countries)", run_id=run_id) try: for cc in countries: + raise_if_cancelled(run_id) log.info(f"[full] country={cc}") buf = [] for band in session.fetch_country_bands(cc): band["data"] = {"url": band.pop("url", None)} buf.append(band) if len(buf) >= CHUNK: + # Un crawl complet Europe dure des heures : le contrôle doit + # tomber à chaque lot, pas seulement entre deux pays. + raise_if_cancelled(run_id) r = upsert_bands(buf) stats["seen"] += len(buf) stats["new"] += r["inserted"] @@ -64,12 +75,16 @@ def run_full_crawl(session: MASession, countries: List[str] = None): set_checkpoint("last_full_crawl_at", _now_iso()) log.info(f"[full] done: {stats}") log_event("info", f"full crawl done: {stats}", run_id=run_id) + except RunCancelled: + cancelled = True + log.info(f"[full] annulé sur demande admin: {stats}") + log_event("warning", f"full crawl annulé par un admin: {stats}", run_id=run_id) except Exception as e: error = str(e) log.error(f"[full] error: {e}", exc_info=True) log_event("error", f"full crawl error: {e}", run_id=run_id) finally: - finish_crawl_run(run_id, stats, error) + finish_crawl_run(run_id, stats, error, cancelled=cancelled) # ------------------------------------------------------------------ @@ -86,6 +101,7 @@ def run_incremental(session: MASession, order_by: str): run_id = start_crawl_run(f"incremental_{order_by}") stats = {"seen": 0, "new": 0, "updated": 0, "enriched": 0} error = None + cancelled = False latest_date = since log.info(f"[incr/{order_by}] since={since}") @@ -103,6 +119,7 @@ def run_incremental(session: MASession, order_by: str): band["data"] = {"url": band.pop("url", None)} buf.append(band) if len(buf) >= CHUNK: + raise_if_cancelled(run_id) r = upsert_bands(buf) stats["seen"] += len(buf) stats["new"] += r["inserted"] @@ -119,19 +136,23 @@ def run_incremental(session: MASession, order_by: str): set_checkpoint(checkpoint_key, latest_date) log.info(f"[incr/{order_by}] done: {stats}") log_event("info", f"incremental/{order_by} done: {stats}", run_id=run_id) + except RunCancelled: + cancelled = True + log.info(f"[incr/{order_by}] annulé sur demande admin: {stats}") + log_event("warning", f"incremental/{order_by} annulé par un admin: {stats}", run_id=run_id) except Exception as e: error = str(e) log.error(f"[incr/{order_by}] error: {e}", exc_info=True) log_event("error", f"incremental/{order_by} error: {e}", run_id=run_id) finally: - finish_crawl_run(run_id, stats, error) + finish_crawl_run(run_id, stats, error, cancelled=cancelled) # ------------------------------------------------------------------ # Enrichissement des pages individuelles de bands # ------------------------------------------------------------------ -def run_enrich(session: MASession, limit: int = 100, country: Optional[str] = None): +def run_enrich(session: MASession, limit: int = 100, country: str | None = None): """ Visite les pages individuelles des bands non encore enrichies. Stocke themes, membres, label, dates MA, hash HTML. @@ -139,6 +160,7 @@ def run_enrich(session: MASession, limit: int = 100, country: Optional[str] = No run_id = start_crawl_run("enrich", [country] if country else None) stats = {"seen": 0, "new": 0, "updated": 0, "enriched": 0} error = None + cancelled = False try: bands = get_bands_to_enrich(country=country, limit=limit) @@ -146,6 +168,10 @@ def run_enrich(session: MASession, limit: int = 100, country: Optional[str] = No log_event("info", f"enrich started: {len(bands)} bands queued", run_id=run_id) for i, band in enumerate(bands): + # Volontairement AVANT le try/except interne : celui-ci fait + # `except Exception: continue` et avalerait RunCancelled. + raise_if_cancelled(run_id) + url = band.get("url") if not url: continue @@ -174,12 +200,16 @@ def run_enrich(session: MASession, limit: int = 100, country: Optional[str] = No log.info(f"[enrich] done: {stats}") log_event("info", f"enrich done: {stats}", run_id=run_id) + except RunCancelled: + cancelled = True + log.info(f"[enrich] annulé sur demande admin: {stats}") + log_event("warning", f"enrich annulé par un admin: {stats}", run_id=run_id) except Exception as e: error = str(e) log.error(f"[enrich] error: {e}", exc_info=True) log_event("error", f"enrich error: {e}", run_id=run_id) finally: - finish_crawl_run(run_id, stats, error) + finish_crawl_run(run_id, stats, error, cancelled=cancelled) # ------------------------------------------------------------------ @@ -187,4 +217,4 @@ def run_enrich(session: MASession, limit: int = 100, country: Optional[str] = No # ------------------------------------------------------------------ def _now_iso() -> str: - return datetime.now(timezone.utc).strftime("%Y-%m-%d") + return datetime.now(UTC).strftime("%Y-%m-%d") diff --git a/apps/crawler/src/ma_http.py b/apps/crawler/src/ma_http.py index 1319469..d603fdc 100644 --- a/apps/crawler/src/ma_http.py +++ b/apps/crawler/src/ma_http.py @@ -11,11 +11,11 @@ import logging import re import time from html import unescape as html_unescape -from typing import Any, Dict, Optional +from typing import Any from urllib.parse import urlencode -from .config import MA_BASE, AJAX_PAGE_SIZE, LIST_MIN_DELAY, LIST_MAX_DELAY -from .flaresolverr import FlareSolverr, FlareSolverrError +from .config import AJAX_PAGE_SIZE, LIST_MAX_DELAY, LIST_MIN_DELAY, MA_BASE +from .flaresolverr import FlareSolverr from .polite import sleep_range log = logging.getLogger(__name__) @@ -27,7 +27,7 @@ _SESSION_TTL = 3600 * 4 # refresh session toutes les 4h class MASession: def __init__(self, fs: FlareSolverr): self.fs = fs - self._session_id: Optional[str] = None + self._session_id: str | None = None self._session_age = 0.0 # ------------------------------------------------------------------ @@ -47,7 +47,7 @@ class MASession: log.info(f"[ma_http] warmup done (status={status}), session ready") self._session_age = time.time() - def get_json(self, url: str, params: Dict = None, retries: int = 2) -> Any: + def get_json(self, url: str, params: dict = None, retries: int = 2) -> Any: """GET JSON depuis un endpoint AJAX MA.""" self.ensure_session() full_url = _build_url(url, params) @@ -68,7 +68,9 @@ class MASession: self.ensure_session(force_refresh=True) sleep_range(LIST_MIN_DELAY * 2, LIST_MAX_DELAY * 2) continue - raise RuntimeError(f"JSON parse error après {retries} tentatives sur {url}: {e}") + raise RuntimeError( + f"JSON parse error après {retries} tentatives sur {url}: {e}" + ) from e raise RuntimeError(f"Failed after {retries} retries: {url}") def get_html(self, url: str, retries: int = 2) -> str: @@ -134,7 +136,7 @@ class MASession: sleep_range(LIST_MIN_DELAY, LIST_MAX_DELAY) - def fetch_archive_bands(self, order_by: str, since_date: Optional[str] = None): + def fetch_archive_bands(self, order_by: str, since_date: str | None = None): """ Pagine l'endpoint AJAX des archives (latest additions ou latest modified). order_by : 'created' | 'modified' @@ -187,7 +189,7 @@ class MASession: # Helpers internes # ------------------------------------------------------------------ -def _build_url(base: str, params: Dict = None) -> str: +def _build_url(base: str, params: dict = None) -> str: if not params: return base return f"{base}?{urlencode(params)}" @@ -215,7 +217,7 @@ def _extract_link(html_str: str): return href, text -def _extract_ma_id(url: str) -> Optional[int]: +def _extract_ma_id(url: str) -> int | None: m = re.search(r"/bands/[^/]+/(\d+)", url or "") return int(m.group(1)) if m else None @@ -224,7 +226,7 @@ def _clean(s) -> str: return re.sub(r"<[^>]+>", "", str(s or "")).strip() -def _parse_list_row(row, country_code: str) -> Optional[Dict]: +def _parse_list_row(row, country_code: str) -> dict | None: """Ligne du listing pays : [name_html, genre, location, status]""" if len(row) < 3: return None @@ -243,7 +245,7 @@ def _parse_list_row(row, country_code: str) -> Optional[Dict]: } -def _parse_archive_row(row, order_by: str) -> Optional[Dict]: +def _parse_archive_row(row, order_by: str) -> dict | None: """ Ligne des archives MA (6 colonnes) : [date_label, band_link, country_link, genre, time_label, user_link] diff --git a/apps/crawler/src/main.py b/apps/crawler/src/main.py index dadc431..5e612ee 100644 --- a/apps/crawler/src/main.py +++ b/apps/crawler/src/main.py @@ -16,21 +16,23 @@ Variables d'env : CRAWLER_FULL_CRAWL_INTERVAL_DAYS (défaut: 60, mettre 0 pour désactiver) """ import logging -import os import sys import time -from datetime import datetime, timezone +from datetime import UTC, datetime import schedule from .config import ( - FLARESOLVERR_URL, FS_TIMEOUT_MS, - SCHED_INCREMENTAL_H, SCHED_ENRICH_H, FULL_CRAWL_INTERVAL_DAYS, ENRICH_LIMIT, + FLARESOLVERR_URL, + FS_TIMEOUT_MS, + FULL_CRAWL_INTERVAL_DAYS, + SCHED_ENRICH_H, + SCHED_INCREMENTAL_H, ) -from .flaresolverr import FlareSolverr, FlareSolverrError from .db import claim_job_trigger, finish_job_trigger, get_checkpoint -from .jobs import run_full_crawl, run_incremental, run_enrich +from .flaresolverr import FlareSolverr +from .jobs import run_enrich, run_full_crawl, run_incremental from .ma_http import MASession logging.basicConfig( @@ -79,8 +81,8 @@ def main(): last = get_checkpoint("last_full_crawl_at") if last: try: - last_dt = datetime.strptime(last, "%Y-%m-%d").replace(tzinfo=timezone.utc) - elapsed_days = (datetime.now(timezone.utc) - last_dt).days + last_dt = datetime.strptime(last, "%Y-%m-%d").replace(tzinfo=UTC) + elapsed_days = (datetime.now(UTC) - last_dt).days if elapsed_days < FULL_CRAWL_INTERVAL_DAYS: return except ValueError: diff --git a/apps/crawler/src/scraper_band.py b/apps/crawler/src/scraper_band.py index 70a1b46..c321df8 100644 --- a/apps/crawler/src/scraper_band.py +++ b/apps/crawler/src/scraper_band.py @@ -6,7 +6,7 @@ le schéma band_page historique stocké en DB (lineup structuré, discography_ur """ import hashlib import re -from typing import Any, Dict, List, Optional +from typing import Any from bs4 import BeautifulSoup @@ -19,16 +19,16 @@ _LINEUP_SECTIONS = { } -def parse_band_page(html: str) -> Dict[str, Any]: +def parse_band_page(html: str) -> dict[str, Any]: soup = BeautifulSoup(html, "lxml") - out: Dict[str, Any] = {} + out: dict[str, Any] = {} h1 = soup.find("h1", class_=re.compile(r"band_name", re.I)) or soup.find("h1") out["name"] = _text(h1) # --- band_stats : dt/dd pairs --- stats_div = soup.find("div", id="band_stats") or soup.find("div", id="band_info") or soup - kv: Dict[str, str] = {} + kv: dict[str, str] = {} for dl in stats_div.find_all("dl"): for dt in dl.find_all("dt"): dd = dt.find_next_sibling("dd") @@ -50,7 +50,7 @@ def parse_band_page(html: str) -> Dict[str, Any]: out["label"] = _pick(kv, "Current label", "Last label", "Label") # --- Lineup (grouped by section, with artist URLs) --- - lineup: Dict[str, List[Dict]] = {"current": [], "past": [], "live": [], "session": []} + lineup: dict[str, list[dict]] = {"current": [], "past": [], "live": [], "session": []} for table in soup.find_all("table", class_="lineupTable"): section_key = _lineup_section(table) bucket = lineup.setdefault(section_key, []) @@ -104,7 +104,7 @@ def _text(el) -> str: return (el.get_text(" ", strip=True) if el else "").strip() -def _pick(kv: Dict, *keys: str) -> Optional[str]: +def _pick(kv: dict, *keys: str) -> str | None: for k in keys: if k in kv: return kv[k] diff --git a/apps/crawler/tests/conftest.py b/apps/crawler/tests/conftest.py new file mode 100644 index 0000000..cb6fa16 --- /dev/null +++ b/apps/crawler/tests/conftest.py @@ -0,0 +1,12 @@ +import os +import sys +from pathlib import Path + +# Le crawler s'exécute en `python -m src.main` depuis /app : les tests doivent +# voir la même racine pour que les imports relatifs (`from .db import ...`) +# fonctionnent à l'identique. +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +# db.py lit DATABASE_URL à l'import via config.py. Aucune connexion n'est +# ouverte tant qu'on n'appelle pas get_conn(), que les tests remplacent. +os.environ.setdefault("DATABASE_URL", "postgresql://test:test@localhost:5432/test") diff --git a/apps/crawler/tests/test_cancellation.py b/apps/crawler/tests/test_cancellation.py new file mode 100644 index 0000000..dc5178c --- /dev/null +++ b/apps/crawler/tests/test_cancellation.py @@ -0,0 +1,172 @@ +""" +Annulation coopérative des crawl_run. + +C'est la moitié qui fait le travail réel : l'API ne fait que poser un drapeau +(voir apps/api/test/cancellation.test.js), c'est le crawler qui doit l'observer +et s'arrêter. Sans ces tests, le bouton « Annuler » pourrait redevenir +cosmétique sans que rien ne le signale. + +Aucune connexion Postgres : `get_conn` est remplacé par un faux curseur. +""" + +import contextlib +from unittest.mock import patch + +import pytest +from src import db +from src.db import RunCancelled, is_cancel_requested, raise_if_cancelled + + +class FakeCursor: + """Curseur minimal qui rejoue une file de résultats et compte les requêtes.""" + + def __init__(self, results, fail=False): + self._results = list(results) + self.queries = [] + self.fail = fail + + def execute(self, sql, params=None): + if self.fail: + raise RuntimeError("base injoignable") + self.queries.append((sql, params)) + + def fetchone(self): + return self._results.pop(0) if self._results else None + + def __enter__(self): + return self + + def __exit__(self, *a): + return False + + +def fake_conn(cursor): + @contextlib.contextmanager + def _get_conn(): + class Conn: + def cursor(self_inner): + return cursor + + yield Conn() + + return _get_conn + + +@pytest.fixture(autouse=True) +def _clear_cache(): + """Le drapeau est mis en cache par run_id : repartir propre à chaque test.""" + db._cancel_cache.clear() + yield + db._cancel_cache.clear() + + +class TestIsCancelRequested: + def test_false_quand_le_drapeau_est_baisse(self): + cur = FakeCursor([(False,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(1) is False + + def test_true_quand_le_drapeau_est_leve(self): + cur = FakeCursor([(True,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(1) is True + + def test_false_quand_le_run_nexiste_pas(self): + cur = FakeCursor([]) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(999) is False + + def test_le_resultat_est_mis_en_cache(self): + """Le check est appelé à chaque lot : il ne doit pas faire une requête par appel.""" + cur = FakeCursor([(False,), (False,), (False,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + for _ in range(5): + is_cancel_requested(1) + assert len(cur.queries) == 1 + + def test_force_contourne_le_cache(self): + cur = FakeCursor([(False,), (True,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(1) is False + assert is_cancel_requested(1, force=True) is True + assert len(cur.queries) == 2 + + def test_le_cache_est_par_run(self): + cur = FakeCursor([(True,), (False,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(1) is True + assert is_cancel_requested(2) is False + + # Une base momentanément injoignable ne doit PAS faire passer un crawl + # sain pour un crawl annulé. + def test_une_erreur_db_ne_declenche_pas_dannulation(self): + cur = FakeCursor([], fail=True) + with patch.object(db, "get_conn", fake_conn(cur)): + assert is_cancel_requested(1) is False + + def test_une_erreur_db_conserve_la_derniere_valeur_connue(self): + ok = FakeCursor([(True,)]) + with patch.object(db, "get_conn", fake_conn(ok)): + assert is_cancel_requested(1) is True + + db._cancel_cache[1] = (0.0, True) # cache expiré, valeur connue = True + ko = FakeCursor([], fail=True) + with patch.object(db, "get_conn", fake_conn(ko)): + assert is_cancel_requested(1) is True + + def test_interroge_bien_la_colonne_cancel_requested(self): + cur = FakeCursor([(False,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + is_cancel_requested(42) + sql, params = cur.queries[0] + assert "cancel_requested" in sql + assert "crawl_run" in sql + assert params == (42,) + + +class TestRaiseIfCancelled: + def test_ne_leve_pas_quand_le_drapeau_est_baisse(self): + cur = FakeCursor([(False,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + raise_if_cancelled(1) # ne doit pas lever + + def test_leve_RunCancelled_quand_le_drapeau_est_leve(self): + cur = FakeCursor([(True,)]) + with patch.object(db, "get_conn", fake_conn(cur)): + with pytest.raises(RunCancelled): + raise_if_cancelled(1) + + # RunCancelled doit rester attrapable par les `except Exception` existants + # tout en étant distinguable — d'où l'ordre des clauses dans jobs.py. + def test_RunCancelled_derive_de_Exception(self): + assert issubclass(RunCancelled, Exception) + + +class TestFinishCrawlRun: + def _run_finish(self, **kwargs): + cur = FakeCursor([]) + with patch.object(db, "get_conn", fake_conn(cur)): + db.finish_crawl_run(1, {"seen": 5}, **kwargs) + return cur.queries[0] + + def test_statut_done_par_defaut(self): + _sql, params = self._run_finish() + assert params[0] == "done" + + def test_statut_error_avec_une_erreur(self): + _sql, params = self._run_finish(error="boom") + assert params[0] == "error" + + # Un run annulé n'est pas un échec : il ne doit pas remonter dans les erreurs. + def test_statut_cancelled_quand_annule(self): + _sql, params = self._run_finish(cancelled=True) + assert params[0] == "cancelled" + + def test_cancelled_prime_sur_error(self): + _sql, params = self._run_finish(error="interrompu", cancelled=True) + assert params[0] == "cancelled" + + def test_le_cache_dannulation_est_purge(self): + db._cancel_cache[1] = (999.0, True) + self._run_finish(cancelled=True) + assert 1 not in db._cancel_cache diff --git a/apps/geocoder/.dockerignore b/apps/geocoder/.dockerignore new file mode 100644 index 0000000..5844e26 --- /dev/null +++ b/apps/geocoder/.dockerignore @@ -0,0 +1,9 @@ +# Le Dockerfile du geocoder fait `COPY . .` : sans ce fichier, tout ce qui +# traîne dans apps/geocoder/ (caches, tests, venv) part dans l'image. +__pycache__/ +*.pyc +*.pyo +.pytest_cache/ +.ruff_cache/ +.venv/ +tests/ diff --git a/apps/geocoder/src/enqueue.py b/apps/geocoder/src/enqueue.py index 9f5c1b2..179ad50 100644 --- a/apps/geocoder/src/enqueue.py +++ b/apps/geocoder/src/enqueue.py @@ -18,12 +18,12 @@ Tourne en continu (restart: unless-stopped), poll toutes les 15s. import os import time -import psycopg2 +import psycopg2 from parser import ( - parse_location_text, - country_centroid, COUNTRY_NAME_TO_ISO2, + country_centroid, + parse_location_text, ) POLL_INTERVAL = int(os.environ.get("GEOCODE_ENQUEUE_POLL", "15")) diff --git a/apps/geocoder/src/groq_worker.py b/apps/geocoder/src/groq_worker.py index 81463c1..4f13a08 100644 --- a/apps/geocoder/src/groq_worker.py +++ b/apps/geocoder/src/groq_worker.py @@ -15,15 +15,16 @@ Rate limits Groq free tier : llama-3.1-8b-instant : 30 req/min, 14 400 req/jour (fallback) """ +import hashlib +import json import os +import re import sys import time -import json -import hashlib -import re -import requests +from datetime import UTC, datetime + import psycopg2 -from datetime import datetime, timezone +import requests # sys.path[0] = src/ quand lancé comme "python src/groq_worker.py" from parser import COUNTRY_NAMES @@ -155,7 +156,7 @@ def main(): day_count = {m[0]: 0 for m in MODELS} min_count = {m[0]: 0 for m in MODELS} min_start = time.monotonic() - day_start = datetime.now(timezone.utc).date() + day_start = datetime.now(UTC).date() with conn.cursor() as cur: while True: @@ -163,7 +164,7 @@ def main(): if time.monotonic() - min_start >= 60: min_count = {m[0]: 0 for m in MODELS} min_start = time.monotonic() - today = datetime.now(timezone.utc).date() + today = datetime.now(UTC).date() if today != day_start: day_count = {m[0]: 0 for m in MODELS} day_start = today diff --git a/apps/geocoder/src/worker.py b/apps/geocoder/src/worker.py index bec2e80..8ca1214 100644 --- a/apps/geocoder/src/worker.py +++ b/apps/geocoder/src/worker.py @@ -14,13 +14,13 @@ Stratégie : 4. Succès → band_locations + sync bands.lat/lon (origine). """ -import os -import time -import random import json -import requests -import psycopg2 +import os +import random +import time +import psycopg2 +import requests from parser import build_fallback_queries GEOAPIFY_API_KEY = os.environ.get("GEOAPIFY_API_KEY", "").strip() diff --git a/apps/geocoder/tests/test_parser.py b/apps/geocoder/tests/test_parser.py new file mode 100644 index 0000000..e359f80 --- /dev/null +++ b/apps/geocoder/tests/test_parser.py @@ -0,0 +1,129 @@ +""" +Tests du parseur de localisations Metal Archives. + +Aucun accès réseau ni base : `parser.py` n'a que des fonctions pures, ce qui en +fait le module le plus rentable à couvrir de tout le pipeline de géocodage — +c'est lui qui décide combien de lignes `band_locations` sont créées, et donc +combien d'appels Geoapify/Groq (payants) seront déclenchés. +""" + +import pytest +from src.parser import ( + _classify, + build_fallback_queries, + country_centroid, + parse_location_text, +) + + +class TestClassify: + @pytest.mark.parametrize("value", ["N/A", "n/a", "", " "]) + def test_valeurs_vides_ignorees(self, value): + assert _classify(value) == "skip" + + @pytest.mark.parametrize("value", ["FR", "DE", "NO"]) + def test_codes_iso2(self, value): + assert _classify(value) == "country_code" + + def test_ville_normale(self): + assert _classify("Oslo") == "parseable" + + +class TestParseLocationText: + def test_texte_vide_ne_produit_aucune_ligne(self): + assert parse_location_text("") == [] + assert parse_location_text("N/A") == [] + + def test_ville_simple(self): + rows = parse_location_text("Oslo") + assert len(rows) == 1 + assert rows[0]["location_raw"] == "Oslo" + assert rows[0]["is_country_only"] is False + assert rows[0]["step_order"] == 0 + + def test_ville_avec_region(self): + rows = parse_location_text("Bergen, Hordaland") + assert [r["location_raw"] for r in rows] == ["Bergen, Hordaland"] + + def test_code_pays_seul_marque_country_only(self): + rows = parse_location_text("FR") + assert len(rows) == 1 + assert rows[0]["is_country_only"] is True + assert rows[0]["location_raw"] == "FR" + + def test_code_pays_minuscule_non_reconnu(self): + """Comportement actuel documenté, pas une validation. + + `_ISO2_RE` vaut `^[A-Z]{2}$` : un code pays en minuscules n'est PAS + reconnu comme pays et repart en géocodage comme s'il s'agissait d'une + ville, ce qui consomme un appel Geoapify pour un résultat au mieux + douteux. Metal Archives renvoie les codes en majuscules, donc le cas ne + se produit pas en pratique aujourd'hui — mais rien ne le garantit. + Si `_ISO2_RE` devient insensible à la casse, ce test doit être inversé. + """ + rows = parse_location_text("fr") + assert rows[0]["is_country_only"] is False + + def test_plusieurs_villes_separees(self): + """Une même étape peut lister plusieurs villes : chacune devient une ligne.""" + rows = parse_location_text("Oslo/Bergen") + assert len(rows) >= 2 + assert {r["location_raw"] for r in rows} >= {"Oslo", "Bergen"} + # Même étape → même step_order + assert len({r["step_order"] for r in rows}) == 1 + + def test_etapes_successives_incrementent_step_order(self): + rows = parse_location_text("Oslo (early), Bergen (later)") + orders = [r["step_order"] for r in rows] + assert orders == sorted(orders) + + def test_les_valeurs_ignorables_ne_creent_pas_de_ligne(self): + rows = parse_location_text("N/A") + assert rows == [] + + def test_resultat_toujours_serialisable(self): + """Chaque ligne doit exposer exactement les clés attendues par db.py.""" + for row in parse_location_text("Trondheim (1991-1993), Oslo"): + assert set(row) == {"step_order", "step_label", "location_raw", "is_country_only"} + assert isinstance(row["step_order"], int) + assert isinstance(row["is_country_only"], bool) + + +class TestCountryCentroid: + def test_code_iso2_connu(self): + lat, lon = country_centroid("FR") + assert 41 < lat < 52 + assert -6 < lon < 10 + + def test_insensible_a_la_casse_et_aux_espaces(self): + assert country_centroid(" fr ") == country_centroid("FR") + + def test_code_inconnu_renvoie_none(self): + assert country_centroid("ZZ") is None + + +class TestBuildFallbackQueries: + def test_du_plus_specifique_au_plus_vague(self): + queries = build_fallback_queries("Bergen, Hordaland", "NO") + assert queries[0].startswith("Bergen, Hordaland") + assert queries[-1] == "Bergen" + + def test_aucun_doublon(self): + queries = build_fallback_queries("Oslo", "NO") + assert len(queries) == len(set(queries)) + + def test_le_pays_est_injecte_comme_contexte(self): + queries = build_fallback_queries("Bergen", "NO") + assert any("Norway" in q for q in queries) + + def test_pays_deja_present_non_duplique(self): + queries = build_fallback_queries("Bergen, Norway", "NO") + assert not any(q.count("Norway") > 1 for q in queries) + + def test_pays_inconnu_ne_plante_pas(self): + assert build_fallback_queries("Bergen", "ZZ") == ["Bergen"] + assert build_fallback_queries("Bergen", None) == ["Bergen"] + + def test_toujours_au_moins_une_requete(self): + for raw in ["Oslo", "A, B, C, D", "Saint-Étienne"]: + assert len(build_fallback_queries(raw, "FR")) >= 1 diff --git a/apps/web/quizz-site/axolotl.jpeg b/apps/web/quizz-site/axolotl.jpeg deleted file mode 100644 index 3dc14d8b2e8982d228199529e74a2802916be8da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32226 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

WE7>-oz;{+%%28-g`xHJQ^;(T< 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 V0_ofS8vykG0R9#K{s032|JnF3UK9WT diff --git a/apps/web/quizz-site/echidne.jpeg b/apps/web/quizz-site/echidne.jpeg deleted file mode 100644 index 7d91d6a18ebef5e620bb5aa24a7cd32370adedd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43295 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 tfJKY~8YsD-WH@=LaRZp?!|gD$ej - - - - -✨ Le Quiz des Équipes - - - - - -

-
- - -
-
-
🎉 Weekend Anniversaire
-

Qui es-tu
ce weekend ?

-

Sélectionne ton prénom pour découvrir
dans quelle équipe tu es.

-
-
- 🔍 - -
-
-
- - -
-
-
-
-
-
-
-
- -
-
- - -
-
-
- -
-
Bienvenue dans l'équipe
-
-
-
- -
-
- -
- - - - diff --git a/apps/web/quizz-site/poule-de-soie.jpeg b/apps/web/quizz-site/poule-de-soie.jpeg deleted file mode 100644 index 89078216b99abd5b4f6dbaff36b2e68f42a1a497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567384 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�@-0p_|O;h`&lZek#;XOg{4 z4^sU>C4?L5oBc0GWk+M3fi{h2o-cO~mhuB8SaoT}=vSva7!6qAgX(JU1|3rFW0^ zKF_eeMbvsq!xZddSd5Ilr>A6X-UBf{V))9;xn6{$^m0(Ti}jtWA$A^_QIkkMAGv6j zq;0C)yE-7BV!gywO+$+AI@N0S23?0xfaxOZEHzc{Mgk2>ZZ9W{cPTSmliI(i(|Ci6 ziXVu=+uZ{4v4MXXwT5}*M6CVAZ7Y>VvF0#6JL$IOFG<{Jhype`HtYW44tmlOko6Ld zJj>?6%Pzk#`(2BNHQOm>o!PHkO8~-tF3C(r7qI39(*fpkYtdi*KmayQ+-eUNRXsrR zX^${tc{y0EwDSwXfh=9jtyeuH=!PJ;KezCT6~hh((ac07mC)fMJ2I?Qd-oH+5-KgF z`Hhkh+QQU*#mp)OvLDpCin8!Hf|K#}mHLX3LbwA5_cOR)IDAXN1DO#`&Ha;q7?xCs zx*4fKw(e9dO4h$Ih;pS#SRjcy!$_D(R+}Fq$qH0)o15uAm;2#65%opuj$faby1g z*Gk~dhv_h47^7ct#2({M<}qoyLHt~+Mj2@Qu`CX@?0k_{?-m&M;$Ge9qWs17?Dczy z3;?GmpB`q&W;70}y|+io%55sfJ+jrcK3{RQ z#)XEwB3DDwI3O)LwaWsg4GyscVT*L&g6*_79@uajANUd0CN^;f0dSY7Eto0m$>t>^ zg!X%vD6Qq_cEROKN^|}Z_(M-lSS*ZY`85Qw&6?{GOk}s{jeLsuhTt)nghPh>L>$Hs z8${>TkBMtkdW(e#?d2~q+bTUPk3%04fh-#6WyG*xDg|HuK&+mG_E%5b%DVv4jn~ej z7oyW^p11g$7fj_3*&O;n*AUj#1Iy5RBlf@xZMb=0S+aT}vy%&$TV%HO>%IsBVT+Zp z{z&N~8c}avW$UmH_J$b%i=Oj6gagL6*KHxl}QI5x`ZA;8wjQ>vGJTX`715rpHix0K{Tk)w&GZ z*Xjsh^&#h?H_@RK3vP@>8Ymf+HB&iyDv8Ue0sxgU+IW^D#G>^>KW^T&HUgP1E;QLE8~)-_dPrG3N- zPY6!Cmx}>XW!P@ns*B5s9q(r!%b3NRytYf0rP8;Zo~GmlyF2wPa9lv+`5X#}1@i16 zMKA?4Rc{4KE8;d~U6Fts>d5~9#6s7YHw~`iT8Uc$;~R^oqigURVzUVEtCuN7j1J&S zhf1sl<+8Y~zfsUFqk)C#u_ET=IjIIjzC+r*_Y^*(uDTI zk5eVRNYL$CAS-uy11q1XVaAc$USiNG)AZ<150p>P;Vvwea{mA$3Ic})FY4xRXIu!+ zz?iE=H%=GKai#~3*1GI%nH4>hjfsmgKPow0|KEIk|v7OEBG~-VuvWZ z-oB$3{z9Jv{^Bz!fDfm{P60;&elAg8MMbYX%fm`^QEmg(g*s7LdyW;M7G0j87S(1B zT)BM2?loJH!t+POG_W2K%iC-^Q%sAlI9y8eJ|GwDR7yAwbr_Z`ySfMNFiyhYqUtil z3e#5O#ITDB9(sr&($Xyibs)lw9*~#`mqPhvA533Vd3M4@M?;)_#&32DB`t3bN82(f zd8Q>dw=eQ1ZsVG%#1~K>nNeVG{{S>nOLH!I{Y1`YvKk_RXlon)066Ds&Hn%(AlXNk{zEgHcpM%j zX0GJaUzWHXpX9R>=y(wZTy!;PoRz+Gcp(m!iNWGmV=f=;pg3{HB{(;R>LOy;cmi0q z-HXu?Q;x0#CGL+GFGi=b0>;q9jknng5{}n7hcUamXMS=FONDL3RKaogDU5G5o@G%i za=l>mF1Ig=HMTHXJ>Rwv8QP@?9?OM(Z_F^#2PtN+t;Qam(jJcL2SHz*+x{S^x1tWF z>!+cV{mX2MrjmdG`Am3;fLU8#4-jp$bwiT8ZX#CM#ecC%?Xr{8whg%&wR)5>O z2N$R<6C^=Y=YQA~zrxnESyAH3bh1+ltpQU7v5|n&tW1QoCxpZF!yzheoXk8?@~@wZ zVTHhFPGBe@E$PR&!hisF1^(g}kX6t%D7F>@#Y4_vj<&xNyqgh()j+P07|B?2LdyX8 zCGG`L1U$XUV$794$G9AvGE~9ZQd$M>#gxKLDi2&-vOv7-YcS25jpS{8#y2g$di4hF zRcfo)K4DT*tnfDc%xOZLk1vRst5m-(AhO)mc(=hFCZI14y}&tdZ_CW959FXeCPGIf z$B3@_F0to^0Sz%SHW8_cv$EriiZZUD*TfpwqViY%L1P8bLCkmEnS5kn`Ww4f-Ft&Z zK7}U{`k}=dA?D+^3Z8ci_n(3X(HpS&eZh?4``_J^o8s+CfdIvX%B{U-WUA*EJBH5t+1NoLN&`LgO zBN+vbhA!ssM{?zwfTDv;h&CJ$qJ45{RyxdOfKVMbNjAn5WIi3h1(L8K=$1A)rmvo5 zRcX3`^6oA9gz#E&=iIQ^=OQXZ){qM3SlcO6jOQdlDQ*G4yL@pQJs39s0GGte#MpOr z^s6CU7EzICSLKfLEfs4-3A$sxUFx?{K^G*UV14z(0CLUIZvloGOzw|CJQW@YfxpC5 z?1brw91#yd%|u^#4uM&mjadynEMzNiXZ=#tqRk4|qEG>itv?W$DdNl~THb;H+P)w8 zN^CpbmHz<9E@8Jq6Aq3JKI890kALj7_mM;5Cn6_c!1o3Rm0u$AQJ^dJBPJIz2^A?%%j-11Nnnp7P|mSW7Np_fhlK*8C2b4ps0|# zLFKkwr8!!;Ye6MlFP_o2dnPVPS=iL=YSLz)=G;+=pm^>^C zGy=Q6Rp6Bjg6s54so;ZBS7WoD*-ciBb?y}c8yz40g}?>!VObWL9D#4X4czb1s)GTMCQuNgq;j;-3 z(GfPE`xWqM?sXEWbHsVVxm4b8oQ61VhZbCywHt}AuI~Q;Lvp0*6u)Rd1TM-CaT2Af zQt0FRILR?nqfRHSf`I=3_AqE+FauH2sMwpJSUiWgy>p4T zULnd>6u;%-0)klOyi39cZ8k?8nJ(0*fiD~P9D2?YX8U@SM?$mQKIJ zE{!A)gpLR+Mhu?jr_eN9W(u3gd-#=*a3%Fo)~9`@B5LNjxJ`iqplXMh@W2$Kq16|YhA(s|}T5VmV%NXNu{)Oq=5_)HK8eRg>zyqTL* za^I>CZ%B<9%+T0rc^^|Wr0xyX_=Kpyd)}LmYqO1jj-UjG%w7qOP*z4slwgn z%miK?R3>WEGOUQH+0pJ<4Mi6R>Rwn5E`DWTctC)dTnGCEpgW)A6t>5!81B*Jgsp(| zDmDe~?Fob}ZGFmNUW%8`kz;NhI{Rj1I&6Hf)OSH)?Pc*@s^*`fGB$%McFG2In~RP` z4tfX6++KHRrPKY5vAbybIE+KzHvC^P5d$jN@ItqPgMN?pEMh5^SEy^nM-t?hpsnWF zn7r^Lj3d6s!xd3nQxT`QSyd2s>|Y2B-ZNqhuncx)s+&p?=$ZbOrB9fsTaj;^Ovk;5 zKTx6$wkP5O`0S_u0AgsDfyc5YV!jjAOAKBs6G&aS{K0geWu?9!6#6581K39<*ykC7 z0>{r0@{i>F#Wuiw4~ccfRz->&fv$;RqP?Zu9E_`mD$9;kcQ802i@s7QWm7iyFt%19 zYIr!76t6>;S_a{RfgAS#JVMb&*rQNY01gOSk!y#7Alb&~<;TRKlA^kBN;(U4A`g>9 z_2Lyla4VF{o@8sy5C9o5_}oH95eJt<8I*e#-*Xrxe6Y--MR_eXR{Y{1V6@BS;SLQD zUn|SoE!o*>jjH>Wi^P`G>A6;VRdO8J&$(fjq2d&>v>SeWL+m(PEy6K(T1vc^5GY{7 z9t-34i^H7j)jRV8qW1RX`{T?x9LiIrM95K$4hfa1Tvk&*2I8%#(0hE6UbhRg&U%GX zhc$0EU%a@CD}na7zt$0^!i40uUq6yXi&UMO1y78K;+Rjavu!M#(d)} z9Nb`IuHzS5@GH9NUMj&^+zK3XTxI~;$l8~NxrQ=`J5|_lMN6C)K*SST6?81KmIA=8 zQ>c!}kplJybt-gg$$sT+)W=G9E`f{(3Q^+>6aXnyuPZYbosVy*#aeAB@i`@s~~$7ALJ=n!N&VsC&;d07tM z-E9}K(Xs(@gu5nwW5hDs>3>AXGMl1u{{V@ls$r^&rZB4xKiPi`koNN!u5POM2Z++k zh4Ox)g1l#5V?{~0pM8QxH3Chu=2mnP9jmD@BaX0 z?SfoE92ILk+`!8reeN@;rW`8biVQV-`zAqUZI2eYoL8qD9M|$&EDe2*2r2+l!=2L* znt=;>FZmI+lwvof9wSj$Os;|ADK+`X91)r?Ac>mKEYVX$aB1yWdbu?Rq$Jho=xz6O zdYI9U=OJFml`|tk(=fi+ZsXw55|yqeCB857aR&%rl%8rk05k{p1A!R^+b!5kZLQea zXK^!Z?~dOQn3XRJcLp_!F@dA|F7olX@xkdUEv{Qo8b1umU-ZlyVbDzY=qR~lU3gX*vdy=32OE`{RjlLJ!J#T-n`HS2gx zpPNw##vK0uXPILGH_H{=lNQu^FoI^UL{xi zi;`Yd9y^K^(<4Fk5G@>o5H~Hiv&$+6nq#lmf=H2*<=SMI(!~s;w=~MRcM24wbTvFEa-@puSb_~*mafN+QBr)ePS#; zMQ@vg_pt=tqejw&Jq3Aj6U3KfqZj6)mLk0QWjkHB+Lu?>u3y5za-)HISGEx|2~HyE z`kbd=EPrP(euWDognDH=*EU%jA=Yy22Z>aHZRye9Krn{tXTBpnVe$LY>Kbk9ZI9S{{YYGT#9YC zORuYp-I%TO`9FwLg11@Jsjv5v_PuBU%?O?iI`)LWPkl{m@sQoE5oSK z4ZpQNbr}k#+FtAQz;lM>Ds$XQAv%;8)KFD{x^O06nD+?BOkfvWGPsZqG`H=3;zAag z=<6L2h_JQtkqN5c$~@*F7(*yIq9&ttd48atB_{s5jSXn3eCii0aME89#upi~9sSGL zqWlksiDoDR{ar<}gd1t*D%A6ozwfiZ<6ik4RQ~n_pARNogBQ%JxSBUP^s36_N z2Y%J`7ts`Y?LtR@Lp6O_wiv5>Z+t_T3UGP8<~;b*XJHo_S!4}YxCYpaT`ficT!1+u zHJRJ4UVq38Xi$-QshX;*1I;jB+|R0)(d)waj~qe@Q%!kJJWHr+9gf^lmMNq7K2E(u zbv?F()q08&46^ax2dH*ukjm#L1-{KiY*f3asen;mlc}8POQ9@R$t??bUYMwgsEZNp z=!&2=-oL8F>3!&Z9LjbVwk3q$6Ih1}e?mP_U4~zABx84F6_zWiKQIai?Mf~K$}oC` zW{U9y!g)PQan~?{kQ@P)G{OgiY_mfrj$_^%8;yk_>`?`Ogmn3FY@{#1IX$c_uW7XHsa~s3#2gTNj_#v?+{RVrM_s1Ij|Z5fBvRNm zrOayliyCBp9^`#~$}`k>iD))fydGoUAr4)zaAa?Q=#_y}@a`sA9fG6EOI;SPnS)r; z0Tr}tEsECT)EH25Vk&}PQ@iqDiWcYBnA$jKIgGN0^Zx+iUDa*d=25XmgTz9r z7PL$q=ceUxrzf}ORa?|cb=MBo1_fT1mR~7Le+f!_-vl7JTn(t$bJ?Q>0EYvW+`a%* zSnq)f_~<+0AS?}646p;i-!q}=7!$BKG2h}LvgYpU{U*ymnmNoabnzW@C5Ni&5VnzS z0O7&XGvqvj!|oS>z#PzYkTT21+yjPaw*LU%=`3y#+oi8$bqE6VZ7c$*6syzB3tus$ zmOue*V#9~#QW`eduGj2=)Iyy8N-cS^yIf!9YAB`ci=i;~JP-C5D{F@8`IYJ1I)|q9 zF2f)m+o^DrQtDh(DT7YWhy92;OHSJCk9VRA53do2`R9xb3NKfye;{Rf$D^f7iM4AE zId5p%My7U<>4&*pj^d)tpGx2*$4P?H6=#cxKzSREZ^)I16025Som@YiVXID|H5tcY zt092&E{dY^Tv!W(T!T{_C6BxahsE`8GNlBr+rmDh1$@nLJ~cAoUJ$C5%GNy|4&$+; zo4s10Vq~TPkol^PFpn908~Iq|tsU|}$l%VRCw^fLuLE-<&+!xd(&^wO+XZ5^;y8ei z^z~&G@bG2qQ|h>RbV0+)J6{xX^0KWSH{Xw* zVWb4K(drZ(8_(#1DFXc@s3M#}67^Z+@e8a{&O9*9>{1UjJmdk-m&qu^6SHlPm`zoi z^Q-wIP}9i$Kqk?%ZI9Q?du~s(HXgRZYKN&>p_w2=zJX#mV}yKGzIPXl2&s?#h=Xk$ zq;`6>!`To}iWyd_rtUxz-YTLTfnHL}gV2 z0Ikd50HW<7)$|J5#V}6E1krmJ<)~Dup33+20QgWiYiqa61HC{gy(F^0)CB61TNApr zpCvHzQfB@X{{XNx(8Qd}xoH!n%{Z`v#}~zT;d1>kCbvgWETLdqn7dFNug>l}4gsM% z+U6$sWdK?5M-LL!Xm*YE4cp$J-TnE6f#Zo&EfBgGTRg!Ilns|mIH})+AZoR+{{ZqJ zYK@ndm^SFEmQ{YCRQziv`7gu*jPM}!6MHT&4p;drXevS-gM#H=Xv|l%xIY_lD(N_#d{a1rIZ%n_)f0p2f}I;^?D)|N49dU4i04iN;pl#O_uydl%>{J z5`#oEy|DqI<;NDZFJT&@Mo!oEAR$RyWB$ZNYsmR|qnLYi);tpFOgRhYVXnsV!!Uz_ z%7`sI1*_$a%9XbL2;f3g-SZJS3@+2bEIBM1nRKuzyaT~7ZA%6PhgQ`$_%EZx z{{YzisFdg1;sm)&n!o&oAupu)Vp=uXUZAL`UCC5C*o|hFq@&Q5PjGyizR9 zuLlug+)H^G)x*f1AyuGu3t|oJ#hUnp)~5!>QH=(ZFT_IC*?_csOh(?COVn+y0&Gz5 zi1u9!)LP-teqPyFOZjv%g|V-l>QdVA{{X0Fr-u7wP3SWDl>>X!6HHxEQLp3lL`5dd z2f--_9Ox#-XaM)HoP8M+}P>IFNE-)MxGw~X5Ap3$lVOM5Zr{x8`9^)pyB2r?Nz6+0-R9`Q^ zLuEhUc$i_sBbiYkuZs8&eZ*?mcj5>PSnj87O3WMujd$Tinl_0;u)f>M}v_uxXgpky@vp zk8+-cuc92QkLEQ9p>c2i!EBPNo@D`7YV-P!u&<9!JoU_W*ihtqJO2PB2HOk>kaqis z+IGOKHl`Bml=bz@NEN-X54hZC zqvB_8X@|!#X^}kx{e|ql-;Xe9U=pji36hohsBm#92BPI!dSLBOrQe|Q3TK&ez>0w_ zzWyM-(T9Ukt(2z2uwbeIgef@>l3S?}q5L6}m9CceM6$HphX9K!1B^zcxtuZYw`suU z;2f>rU}M;F9&T%RDsJQY?7Np7LKeCO6zZ&HH0SS&GK<1(V2b$XPYr88{4<1X_MT_2`UZk#sPL^p6Mpylnv zO||p|#4!T@0Ey-Uqg~VcP=o1cT^AI zIe8U^iK7GszGXDP7_+r~)D7NX57|sCVrGCm^pW#TRe>->* z^1>o01!H-A6nx6S@>JJ28>wYVDYETOXfSX8)!PFAn z@H&ZemDduW8CL^{oCgMV1A?V(Ddml~o90!zFzoxQ2dD}~xRn1 zv`jT@{{Z7LG@T8w@e$Msl3~z6ZHjx|qr+PdJ~2$9{2qM89P$hKifb+PM&e;`ydA^< zU^wk&2x^ra5wkR4#-J3T$p%?zdCLL|A45me(W69qus zm?`2IFx4=x`4dY$3(0VSw$Y67_^D!up^mAQMtwFy!JXBBZW_m{1B}tZ*b9j zgXg9-VVNdWxeCY&9$10Je!FbM~Bl9EeL%t?8`&4 zLnX~XAj8WZ%Hf-18QkMv*<-TXIU~~qI720+n zMhg}JVxO{m_MZI^DI%BDO`*V(;_uQQwEN(T^Ct+ zkGUMjCQ>T88^CDtgNmCfvt@kTEpQ45Cu6=K`qI%g@lc7x)y?x5OG*cV5SUS@FGPBw zxAjgRFbHJg^Zx+YrLxOJ&UKG4t4le96mgHmhm?3_hU054v{t=r%c?f`Jv)3E)`c@FZ<;UcrnWP7uRnq{E*k zli~s!D1m-h1+#r%GP4&*+A#tup|$I%mb6yzF250n!kox1Z7g3!76A zC5sJ>#sD@OI)=7#YpI*VhyJk?1q9W{{{UlAXTK8FWnFwhSOjmZ(E*LIAYMC^DH5Uh zi}0rs_~v6*qNR47O8wYz^N;@kWSU-LcvV%=&+ts(1)Ta~U^%tVB?wWqUk$l;d3?7%p`lBgrdUNux-K zVJ!o9xWH2Sq$edJ%|Iju#9M`Ua!c+(%V*?%CHsKf zEWGGM;AtXd?%WWJ7!&3Op&(`1Vd=yjzrxaPu9=FrHU(8%Srf;F{{UwZ^zQ;Xc!rx= zSX=;s^94F_Ek;vPHd=QTaiD1)xRurxB8KWFLVqOo%P0vvj052`cA|L&wbumW(t)dC zJcVQYO831NXAEo7g9hf`a`T?bGSsNkXH>brs3>^?d)J7*8D9qs3P)*GMpqMsCd`8X zbugRdIJ7nKmu}nph&@@yi&x43%PR1r3tXqj`GiE^I^##Cp-@?VT94cE-x+@DSa4FY ztq*8_;lcv60xyW@oVBSvLy@O8x4<55F|6U_KS^m%HXK*sF>_|B6$0S!^9cx{4wT=D zgn}}Rc|G53qplFJ2~W}kL~BuyXYK{sgwRqc#g`nyVJa+#Vdg(`LR$PE5}o0quP-+( ztUbtLmy-+w)W;et(X^JXdc6<-03$dK)7}_Gort-Is4q+z{KZ4O%Ga1Uy} z!Z95OJ3!hpasjQ;@Q0*;;XhzmjTuP_Y|tv?5rZHukQ@BB(N6K#7P zKs5O<^u4e_R5!j@-QBaM5G|iQ_$9mvgJfoKdF7hU2p#*IVcC4mX}|_iwWJ)iaR5P} zpz^T#s9-KH#I6S|#J@(m-1%TDlHO(LjZz19KjendyrA2!G2b3{j)%CZ#BBcn;Fon7 zwja2f!xQ3ct&E&l)$G2WhjW1ty9{>759PogX)D#i6E z?YijPgOn@-ELziMt;-N$9l9k9CA(QhtKus)^TYxv9XWhJB6d;;$X-uSwZ&wvu271F zkJ&gBW54Z`7&s{x(Hl|rh5CgJEK;N=ia1T-Tfr$?e}pu^3kD&9kuHp`(ZgOyZ@~ta z0OBtlwSeL?WthxK78vFN)!%x#SzsLPmk^?LdGd+?2CLM`um_2fVhykM2v`8-RH_Ey z`M2ia#wkjQ)N^h5l-U}+O4em1cPfIQS}yP`at@?Z%ItfD(HS!35ON4jMAV zO(SGl(*^UzMt9doFzSVCzZhm;RP*I4DoQNpI3m<5RKBO&B54fh@z26!JQZ%`K(J^? z4J$(pYCv5YsJtW$DYhNKt`Ru0w}4Mr-#@d4Hu70kH+_gc(Hb%s2k zsCR&B&1Mt@6l;E9g)G%P%l>U0D+u6f0XhQ2^80`e>|bLKO%STxk!-8j8;Yeyy5a+5 z{?QSTzsz%c1_ZdF1+alddMqWW^W&g($0nmmni| z$zTOqN!V-Lw;BN0_hlNrZ$7*ab14df&I*^<0C$?H{Ic$<(V*g`_W%*Wc!0rgbkR|e zyh@dV3?1RF{{SKB0#`t_`k1(G4@dN4Q!(gu)SwL$=37JE!}1Jf&^{}FM6WB?kUt@A z8V#N|(j`}WJb7i&IjKcbj=GIz6tlJ3bKDnTJpj#m^WrF&rWWi&X9UU6nxvYVeTJ;So%%`}1 zxWpG%sa&5H?8&)diW4``^v5wwfs3{CT}5kkywsfBN=l85M7YILqrWit_v8wSIq-l09wjk|xpCqoV6=@E23#`vpN?f9w2Q}s; znTQmF&kR_vX9v`Fs%vJtmN1wgrFO)myt|>-)T0cmeGg|bo!x?oqP!V?BT;WhCPBDi zoG!K1yw#GKl(6Cd0Jwn{OKumT=1~6tE0o>9qEb51I=lq#&Esid1zm0GP&H++8&jc%>yQ1wnZi^9qm73>N;yws`j*VsL*Rh|&2ogGXJ`n| z{LGPvv1oKk4FP*S5T{vKPv->WA)#=5^($JKKi*h0UKhx)Jh?ypBQlGd;9mp{Xq%iK z&Sk>U%Bc7wTH^zUi*YaoJa?4xWEx#vlMI{`62;pYNRpufI zLE1A6<7~PnH%qrKa?P-9bq$J+4q3Bc_+lIs%!#4g1YvqQA!3~wFHqlYjP3#fq{!&t zA)~uiyCqr={zRunPly{8@Dha!B(PxDxj~#Yrg!7S%%&S4<=@#Km=rYgT&FNA4uOZL zaEefV5&h~cGC;_t=YF#1B;o~YL@Vk8tD=+UzS!F5NigjmLp3C?4#Ul zOJ={Ha`jYDpfbU{74N}S#YPZN3elB1H=qQP!F1dohXPC$8eb>EyH60Zm|spcq89B znW{>Qw~DlP@d)K{>Muamz9tHh%(bzI9_!}wUHX;F6q-Jx><~ax;tZgHrrM(wt2s_M zGKNwYlGcyZHLQlg{>Az@F>-G2pD2f{*9XXAp5GfM4>reddHgP3hyra^sI5!h5@7Y7 zqFX@h*+PWzDV4HUK0QnXEGCQ+3l19lYD8|n)d{{YOyK+0hQD!8toW)W2$*x;4# zNp)=3=2?Mphs-T7k~#$}jDPA^80p~PL!ql*GYjfGE%f6KK5h(SY8Oi5@ds1|Rd`iG zU~Bc1K39W}nwS@AI%u-di8{!?pDbZa&m%4f7X=2?@aGjMU=|qRCtYeQpak8440EUo zdI`?QljbD=E^S^OJE&BFmAEzeS zU6#kp!Qvo_&7Uz5&P*)I`FAw7Iu^Z&`DMV8+{@w|;}qAx>STPLkq{uSw@=KYV09Jw zg6X!ZUTm5+e~_xQ@?R?e0I(W86FS@EJg`6xFW7@GE52ogMLc{yOd~Mt56cze;W=Q{ zUD5vlSdKbS;2w~savsM-5MSjV{6ygcL5utnhNnQs1PKd($9wo!C7d05Jpt`E9}r3k}SIti!%??=Zmii%MF2NJzX?YM;*W{U>c6WF71xA`FE%Zu1y0(F{aT4T3!0`xlH?EXxe+=A2U zaOzNkc-mE*xW0#&UTFIkxemvO!``~QuWM^BG~6b#ffnE&elLidsN}77oHAZ78pu5X zC{^Y-rIn^fUowm;LCFohP`cD9!0YBW01d@kqHP)z>td`tk3AQn2u1_*Es^wpuqMU84yAW_8p8ui%Gwls#o~T-Mg&Y2X-FJufbH#+qFG4X5akF(Wxg*5 ztZ9NO%tMb6F!1Ux{6-!UJ=+8_ybm?s>K_-RH;CEFLz?Pa6wiJlI1H;^rOWjleB!zu zUn}t~a$5s|>fniMPQAbi<&7bx<`YX0I68sDfP2sOU6eM)7Q2DKEbV@^n)G_ zu+xg75_5^7;5$QBrj}>ya&H9dJNGEH&+$3gV|r}QjL8pfN8#1 zhfD>Ad0Q6&VYsakC$x0)2gfgoRK|gd$pfn53wna!bV>zUKRWXfUZ`4rW#Ed+Ui*4} zCUjI$htG#FYj4}gaCnYyx|u29bVLmvkJBb z^9vW0#g_SuQNRYL^-&INJ>l8g4<|t$_0?v0KA7;?Idnk*&zxja;ws+;SIMls?2s#RpNF z5vmU!O6B;MN)#CyUcIu!2CThAwD`MWu9D}GmqrJ;0CtX>eR_eKon85X_GIAnKu7|+ zFZ_+{wHKFi)9rh_m^_R4By71ESORDPX9E%P6$w?uW8=!e7o{rO#`qy}!fY$AeZiX8 zn%y6%$65{e4>IZt3)gT6(0MPa^DJ@BFk4>Ok^<1;-|>hG(|JG?%~`~9$bN*x!NPU} zy3r3xa{mAX_>fb75~*O2cQDR}W2gY0Kw-aKssSCjZAiDvcK|e{^6Cp&qRaU_Zzp6! z$I?3W2(dW90w`KEBNZ!WNp<(u-%yGV%PdvpFAJ6c)(??`W_3?JN0N@3g4jEHCLp^P zzb$HbUf4e*$pD?&-|`HsIA7ZWtplh307fNuXVfSgwA#d%Bj|_#dG7)&VfY;o6oHb7 zKm~9+^DG^{ToX0Bw-U58+VeBE*>&(kqjtPY28*E_2be)mz9ERP805f{4^BP6QAN*p z{{Y#GA3(@hzsy`WbR0bH5b#bd-TYYjh?VHoW8kV-dCV?n{ESXD%(ZQOH_s4|YPpNR ze`8wHU5?N4FF+7^aDL!kWKn#3xyA)SdG3)FJN44LHLk&PHE-Q(F5|G>S%N^V%=JV$wig45}$ACKIj1pvo7 zzj1+v&kufAP~d_9p3s=MJe}7T^T%@8c}H!1M6`+LhkyK+Xe_T`G)&hfElOqVNCqDt zn7{2xsW!_%iFhm=brpFPIZVoUp4X7}#bLzi{rLKVphEJ?Ajd)1V;!YX=jePuj3tBt z5|!DH{OT8H7OEMyr^yggTt>O$#BZS7(A)PhBrU6k$A~-6J+J0tsuY#e{h1-koUb0? zQ}2`8`hi}Qyqy04C2tj0vlDhLT=pd=1GMV6wCnwuh&-wj54vLzaZtc0)kT3Y$j%S@ z8~~*YSJZE>heMfE=?-2GnZ9(+7pGCPgy9!2)OQV{(0u;kt!qPsGVk#dsF?J({t@Yo zDCuc^b5gjBgVB7UuAm%_I?Fb%EZPzd&mR$aOR(5=A5>`>QH_vON!(z0H2(m{aqyHW z$AjVm^;bsVaX(V{mMj;9(cG*Jl|t>)R@?CPEvW-9{kCgeAKJ_Hqfp@LCMv7-!aG)s z9Cpls-8gsrAd($H(*FR2rMZmTJNhF&E%MvT3r%vG@EIZkxGfzQOmsLFCH&amd;#`*Fm#m$YSq(KQ?LeX{4t_B|2g zwnmfDC>SAwEqR)2z#4{ZTgNGc$!TF_(0DnRT!Fws8Bx6MG>Vgau)r1X_b+LW0nfOW zk}-S?x>Z@F>IxNB(8t7ideM1m7`3kud8lmhaCHGg^i)XENH?v;SkEH4{{YO0(A0zv z{keSt&r8?e>NqgRiVXYDFd-zgZGFauo42A;UwodSJ%^th`!t*|3+p);h)ra)UGR_0 z$pQhS-eZyFM%N?5N%o%|N+&GJ5vIH1RyK<J0cW%9-AWEVY7knkB@Z zwk<}Pmy+N!j4^nl1I#ugX(r9)2V4G60p-kA5Z58^)EcSKR~{`6&%_GHz;)}UHV4bk zBJNQqWLkX3Ra=MXi(qA|HK}F_wwej5mgC-I8$3LHn7r|Vv)ND#C!;XJirsO7I9%Qm zlagW(RQ8`fA($aJFu^b=)8ZQQu&6UH!k{kqY^HG1Y&OP+h(wM#YQfPZ06 zF|RLiATLFi#H<+I5;g!S0T~Vq+WIiG;0D!thjAycb;}&ZhzujBX?45c?zK7b47uj9 z0uHlX;}7#WbqobP3@i>;9$sT0LFB#qj5M@gL!uE{`_P#)j3>zYf_?<{ z_cv){>ynoff*luY`GoW}UWfZH285F;yh0)YgC~b#HcT)=VX1WcreS^usM$%dO4rhoL>BJU%fNr%@ zZJO*JOav`P&@a8gwCsWWH5-O}S&R9Z0fep}5pIdH$)nL0qvgl`xnY~kd**@~cm?+r z9tZYkTE*)LQLPnk6E#@>0OcZW&X??-RRHBmWery5E2z5|yca{MhnuQrR z@1g>gdSg?i_gnE8Sh^{1nS_dhJo$`Z3UE4!uRP8(TuYWy7BsLp(eBHm#9?un$MNWw zgkGb0{{T{&S9NV`*Z%-zS(ZY*kNufrxEKEbI*0Kb`9MX*O-*sKH|Y1&2!^Ns0KuN{ zN2BEdE5L9x5K=^!Nya7?gLiW@7_CtE+`wTg$!8GjZp5yk9+X|UNZCjXEO#n23k)Vt zgiRWtV;Z+$%n!N&7m=fkMiHYn*vqK)<+J=h5nblw71xrsLIOMu@c4^1;0J-mw^MBW zD{=O(L-f?u&BA|2EKT*`3ZBU((Q+sH!~%F4E~ ziXnF0f^bW)urzlx)&>>kQE9cSJ=2{jW)@+IP()<|lg0t&QY^4px;u<{l4QF+rKo5I zlvQa=r)Z1W2=g9Y~PZ9?;b#H1_(zBq{EH;`p(9eo2^&hk$7TU-)1tC`M-bfXZWKWf1FYRG)z~Lpx7WWaW zPA+L|tA*4#sGv^qquh7mQ^h>RA3TlvV2iH9_^mSXULDo`!CK2xe zZs9AnIhA)Csvq?(D-{e3Drx{Hbt?=9!w{XfQ)OAUUf$7RboUb*5cg)DRtSQ|0mH!n zga#Js@hcB8^ULv>ZlQ8+RvlpZ`*y=93hP33w*fVq ztnXs=Ed@D4<@(~fiuF%T@I8vC98GNMm{vK!-ExSSgpD=kEsYogmps6(I<1EhVWe7> zUMqJ)0MYRQRva9s7?w7L z%OiX52dShRn=8W0$S`MqIxbKN5wk_^ihc5-U4>)f|1SPSzI0;)c-W$KjHL~F_2RG3RM*jdfn@<-Q z8G>j>@-5sAhHJtGe79#lNQiB~Up&UGS!d|^g3j)J%NG+aDu>+t%Z$8+{{Z@8%VC^( zgn7gj+sw$USibp{2T)xQ@aDgj+YFx1P?Tg^;1@6yDiwQykfUnH7>c;g4*C@pnrGxa zrHb4w@I62_L0n^)SZZni02U?T0Q)`sCQ^KXaS?I2ThMFa1zRI0U5v+@Yqi_{KrEf< zx5p5C2~M;f`tZ#;AxF+Amp|dT6NG{cpe}~fV>YuzIlLPhKt=U zs8<#kD`Rb3tZB**R9?J-)sGjrp!UlTnM`s(t57nN;6KSj4TSDc30)_YCe3`-JQhDtHOANG z8knI5OK|@H1-@fpVYcg)@iyBkh#tL`#I!ehSGc$?=~9?22ici-AXv$mikK~vkRhlC zQfn1W^KGY|Wi=~;_lgLUjRt<1A;V#}YP*IJQrEAqZe`I%jTjj)7kQ3p_={&3>NjSr zFeSx1Sk$(lh8b!n=oGl8xEQSu6R)_86>gB*7K1l3vlo2G0yX~UM0OLn@EAP!jmvNw zvo9<@>p1r_CvC^c<`reI-)ym%L8_fZ?OxZ#KSx1%u^-bmA9rYnOOmgaegNoL3Unc zXzU*{;s7o240ht~2L8ysU{T!=64DY`VBezgW)ju69OkEYGUU@L_m9XJZ#>ueY(u#P#AW(3`PEqb5jKJyj+3Fm$uqEyMN+ns>>~wVy z1wp+pUr6f9c@(ZXf{;?W-+6RQRSMpJk!n7o(;+>Yc!HEzNGG&+c!-_3i)sd8^Z@OzD@!Gpl!{{S-S&at0uR!xVPSFJn1ndmm2JwkGm3Xr*c zEFKk=?uxqL^8{X+z6tK5paWip^XQDP5?Rf!sMcItxqT6e)joPP4zVz&Tp$P$Nzii@ zNmD9z4t`jL;XOnBnQb4%3oAmN1OEVKU`M6FIle)of@s%i;n4LoZp_zb_FF?`Bd$Zs z5TD8TA5$`0Yu9f?O#~~t27&;5yYw_njM86}BB^Fc!K3>sRf9on2P}4(6y$ddeo>yi z$`&LKYC__mw$n?gSC)`@>gG^fo6N*{k86?q#Z2I(cM&KsXtj8Z^5%n_zp#cgs~?qR zByL?Xb8Vr0j=ey4EP9>6M8`!tUM55a-|>jB3r^+s@ev@3#}8M57y{`Xr}cn#wU|A> zlPO%4$AEDYY`G47vZgz%28aqySr>>>E)|)ek0gOqS4V8U5nUH_lwt%a6HAIdZYIEV z^g;(_g*G-<1QjFg zj$o2kN<*aa4JIE~g6HO0n2Q-U74^iqt}kGS<|mAqWNUM>Fl30O`v{x+Jo5JuXaLVw ziJXIRVCUuriUV?*1_ZoQ4jv4+pr@Uggq5bFmihaPh%|d2+*S;1u!F1VhanKE%i=0= zBFP^dT&i;$t=GqKXvhmY6gh{1=(Gujn@VmOZ@CS=C20b!&zgz?ifT}&`2x;ZX26WY zrnQM}7^;QY`A%U{%3jxX;`o{f&|O~rAQiP=WnaOsh^DV>?)@d#nwAm2w4J{5+Z$YK z8Mh(9{DzE(+0nSz^#I4HYQiQRJfP&bv?v3)a|KPM^C;@cXzC5DkY$;CoN)oHX_u2u zy__}TSOjHh)&5|ZupIL+v2E-B0JJtffp&DlMys!?X6UIY#=hSW$cnjITD(-fm{PEN zD~JtO9jW=#>N;)-1aOtt_AAaqcZScW6R!u`1NQ}^ks2Bh`^3#vIFw~TW#?NCQp%Yw zJQHY-!)}Nf(V?E>+!{KecGiL1YhEmY`4%N;02tz4-q=Q&Drp!FG!skq;fwCj<-cz- z&26@OjHQEiEL5=4$L1VgWUh^>HFf3yWTxOzf>7?u41|e-1azVuNk+97CxdWlJ3fnR z1w^Fm^0A{9ZlfQeNO0STJZK6qbg&B*mshv>5Ef^Ro?uOo7oYm37B@E?O7z4dY0dCP zIv`g5Iw7co_8QsW5Q`_xrQN@5r{rc5s;lLcm%|HK46y@dY-*p z;mcuYaPmx37ntnLr(R=%6U{uMqymC;F44*2vpC9n2Wt1x z%N7YKmm|yM%Q@h>b?!c+G{I0X=R$C0m6XQ^Y__6`JM=;uWz;F{c!4^UVHML0`Bh6D zAP@|_kvn*nrh6~B_Re6D+V?D0K;Q!3fpZM(jsU@L7Um?B61JGnk%^`T3RyvX%ZUi* z-9}%S=1$2J&|V*@a{1{Ni3G z0ozp=>$!sB=a>rx!RO#+U^frx;M5k{j{rE70S3JXe*{6Z2R>Eho}zZGO>=V zO1%Q%%^?UYTMj3VCJ?TDqk>q_T1^)ciD*K&jHyv?HBl3)HXl-nDiuBVGRb3;T*RDe z+dsre#U{7N`hrSQlr(>l-my^+q2>c9dMy+Y zD6U5xK!mfAN5;lDl|i0-~#|aVGSb{OEyl9*n{GiW7Nr9BgSHxwZ7g; z=2k95>hz9K;HQx95h~SpXO>_n?*clv1D@b`pwLv|zI`&TDne8taGDt|UP6Fw*DpaW zda_y=G>x)p#YE|~27|2i8CWwIw51W^zla$NIrC1+iANE9_bMj!fG_8h`x%wzMm@TP zrrRZf!0*fvfpOh02u>yhv`XlV%|zv^yjOFHq8i@nXZKZ1@<)hjz}nvs?e#NZ3eUA% zMMN=e#k@v=Tp>54y_GL_tZ()t;A2#MW$tIhIs&^4{$)xMU8`bqUKg725z!sHvVoMq z{fmMV>y?yvK9v_Go<)ls0An&(u1QZq(&(nOMj(jA!=_;wVst`Ii>~LmNNx3qrk>X4W$2LiS!_ zA=79U4?g9LFP7hM%r)u-iM=C48&A|(N(x)AF>2Jq1u%7CMXQnW7UtcZd=R!8$M;w z*aZuv^VB2owJY5m5`{xu?Er=;c^EdYPznD4#6lp#2Z_*^fY2QbQ3@$~ zx|;I;0ErP!NKQ_@5lt{GbX5TozmShGWHw&*(&E^RbIFEc7Np(t35W36N}QH92T`V) z4r}=nO?o;wlx3^fcsrP!ZG2851$TED05qrkvdS$4c7@>kiKbDp^!sHXXlUhhO8~ck z^m&)C+?!A!0AubI%LYomdA$>8oSE<3GY?G4e;_t`13z#}j>g|oliR*tK4Zd!RN)JZ za?dD*k-2{fbw$4fw*(xpnXI@bYotn{ZUS<_@i9@zL0YcJ#$JK2%0>}(wS17Aix;SB zfsiw8KwKzNxEJ}CvgzQqci#}AQ$rMor~tkggJ(UuF&if6C6eA|Dxgk-x0$Sh?D<|; zz(st@c=0ex25jZ{6$mNI?u(z4cY%1*tY$D0;b@dTj^IC*LNH{{W2P;uWE#@6*{UYGD+PdwfE?P+f+-t5Mzz>Jd|n`l^UVbE8!9vG^Lo ziJLscS+cS#S1SrmDjPKukPeo#(bN`#1g|>H#vnS{Z$99xWsW9;tj4|(Yp83}ECwJq z7{4vU$E{T_cL^X$v?rYr4r&Y&Hp;gHlc1RT8g>hqPU-J!OS~6TO?4?mH8a>e%ald| z`|YL{lE6V!lm;U%tAm*Ex>|g< zac4+C(hfJ=5YbyVUA|^JnkD=MuM`V%FxQEp0DC|C7}1P5UQ)w1b;DVs)a5Eas1%jT z6|+Qox5dyDpwt{T8-owzW7Kk9Kao+`Uec4@i}{xAd2k8|3>Od%$0xt!bYPaUym5~P zW7ia252J%JqJ0ASMTrQF(sp}3i7kmZ*@i0iVl zhaE=kS7NxwGR6<5M}!ab7q`qWZ9fF2pxER*#svci=fNsK4OU|9M=V$B3RR1X%fC=r z4>{3`X|os0xDpQy-+rR7Z5^;_P8n;KD4F9hgyC;ge)D5S(-thP-ac5;oJx1Y@rY=c*wCAeiI-3y3|Ui#u=KvR zY?xueAx&FdxQdxA}D&u4b7kG@%?;-%|=^mRRts`5(#B{I<&2 z+bye=;wwW+!05!aHEy_XHwLD~nH=4Cs+4O;P#iS9OfNJRgu}X99$>?=sBGX z#u`L9`L{5L0T+3cfO89-zsYC?X9e}ov=bz{L_I^i^^qqz^)NnrZBvp^TK(4C`w^6^ zDyi-6Jvh9_5@}CO+(K4DH{uIhOedYOT~JRylMmcjoTyJPFU3Swc?;wl&j;Kt4aKx` z`yu-jX6_higUvOedlhr%nLrgX82M%=_3~Lh$cC3c$Jj4+L?LHuA3Mv(MoSz<~Wshit5KM(3CS0%Ma=# zh2&fuL8W9>%L2Q^PH0*8DQ=rI2CfRQ=Xf3W9#1q2v&>FwmQm^P1M+m8KxO2xJr5Xw z0*P{w`n=Xmw6z!xoDX&xFiZHXDLFdu^O}1<`n(9{sh7sFu6BOdkSMai{O4Dz`eJ>KmCQvA+4oY>h}Kt)NSn|d%V|zS&(5` z%A0N%j#b6Yp9Ds23!%P$a1kY0qU-Y(1bS$$t(%0);;3VRTIVyv;8cAT3sDOG_x}K3 zapgsB)EkwhhVIGZTGVjC#qquSfEH*BCu|G}eXk((3yn=BI!#}g9KhIVeB4C03KX~8 zvZ^0}#k|395OOR30AX-q?yloNMJzjS^$&T_RD@_2waCRUfc&z7P;4r_tg+u2$19(> zRA4JZfLr#kEaarOy7dZkz%VaANNb*twO@63m>`XTZo`^|rO3NxNF^HbO$C-Prgr9E zKkT6DRW3u8Tw=c0D>#S!EzJNC$#P3h!Uhq_t9`Z+nhK+^V1{cTrtU2P@&%LmIe=+e z@Fm4rG5H-XEhUPaF9f*MJ}JN^Mqq=>$G5n^7ek@_WxFzm?f8^X0(!&cjS{|R(e(@| z1pVXw!E&NQMynBn%5AP;u;J+CToL0wf^Hx;&@-s)@mKS%L;QR>tqdDQryx!~Kj9uzNhSbv;_;BS3dj=!J+Q+k@r; zWiA~=5EtO;G)l<8+yJc~B-JQGFHWG82R!sc3-eO*-B1QkBh+a?7%zMuaIBka%B_S{ zh*u&ucqR-QhlXGUQOdWCnP%mP)t%p*LO$u&j!?;(otzgmg;cmOkeo0p3D=oQw94;2zSOPO`gWBQaZCF5_{L}had1i~H|FbS8lN>|j)v970fL1{qI zzBLeksxTg|F(ti)SPwgnk`+#?@x%%~a%t;*%w>y0Snspc1XM1_I>ix?7!4GLA`6Jo z+Z0F$14Fj>iYYfZ$CRxrA!eF@K)prT=2JF+I2?L3i3u#ONBBn6+!reU0Fl&UC4%{Y>%Jv5*mQok-C)2Bsj6R>NKm! zn<#EL2(8CotJHS=>4CX!0&#aKY#|Eulma6dEriCE7!GBNVOTTYpE9a}S;8EAZ#5{Y zv+yIL407q_;CiN6RY_Pj1HHve6~#&A(<&k{TsQtOWcH?eE)Y=hsm;pEj=QHpEQ<{W ztK1&->$QhAVNBQD05P!`g9*I~S9c1hYnQPO;^!@k2*sfsOb(bnOtQC z<@RMqu&JfI{{UkEDAMlwfL=i^?wzO9uWHe5U7wiz4Vvu6_R4IxvN$3p7z<+ZKnEfV z$8dO(`Xj_=;H%r)%ox;c9@Wfgi3TI#)X$IrZ`2KB>NG@)CACge;}L@8P2eSwxGjzp z#y(-fX7cj7`HK~0gN`8_akjUFi|mV+EB*%%>h<6%;Bb)PcwJ-3D7i?yid;o(V)w_{ zn0F8A#ZmtNvWo3LmcGyIV)TadK|^0Gy0X)3crP`~eAmD?;<6tk&H^`C%r&Zg%=^yc zU8_7a&{sKntp@(djlm;L^b9p)cS( zVtcNKFT|~?uBEPkf&!ZyIeVF3KCSV146^0bo8?gu3QqaOkWdbg6SkpRc?Bw!W-%zZ z3)yXfup+xh9c1*~-gY)RuSgnFZcco|@{ZrSI}%h=g1<-dfwAj0`S`wWL^ z4P#`g4TI#CQjG_}E%N0)jvz1=TlC(&%ra`m(gOEDI>fF5bc3tzECD05;{C%$$XyN? zxhpPsIekMhOkeV{&^9-mUsBqwqQjs%_ZU(-5|2b$fl|Mt(HfaJ{q{>f`auDtE)Ni!qHz4P-Xq1DIRS)YT?9`i;6eEW;9X`?*U!A5 zbBV0R)o^`uU1k zX{R-C?*k!aY`(5FRZ`46<_t7O`y4ND2->xv9aou_)H*K|*LN%W*jJYR1^vPb`ye*N zuM|zalEeu?`4!wwRGhA1zGif)o4)@5Fj*6kV=ydXrpPqB_Z-A4BQM+nT?0+--Wg@` zi{Duqft{t#E5!;^+ksxn5)q)*g53B2(~kKAC&f;-iBD3MIGtISB2au$c_*$vR0 zvaf`B8ESzzE8M6+wl;?l8d*mF0FzPEw$~VrVgR7$*O(NkWk){IDjVVRHN&t2m_(ov zu`v3?R+m?xRfnS>k4;JgX2jwv3^G1Tczi^H@TR-G@hm_U3Os>=lyO#;0L>g&tvCaKeG{ft;tyA{Yz$L%04gy zJB?!6TbS}_FmA{8E6!#_JtA_iPOJ2tpbQt0VWITIwHm> zrB`p_HCdnr%W~&}M?)KB?o~Oa!1Ts1ID?fz>MQ|1w8SDs`}>5I7Z+e~CW%vLT8&rJ z2oPG8Z!)HiN^{8S1e+QjO8zm72a|WyHLC-x;y7VbWi2@85p}s!RojYeTLz6{SRqo{ z_$8?Yowv}%?o?wK%^3J%AYwA2}@s!V?f$INPrGL9jGVySxebdF#$ zr9ItCQ0$gDq4s7A%EZ;+Q-37P(u{7{e-U){=nmTb%oG95kWpOX?knh`7huU(0$2*$ zbrBlihs3pMT|c?C-mD%+sBxl#DEV_T1_JZcP9*)`5}X!w-_2UFq?u1iUB&$Ja^*A{^#DIfIYsHnsdFGy6y~}QF83KXz61jie zCEjkH2LjBZ$gdliCEIkj-xL62Cd#uy=S)B?Du?QLer6;A<(aa~dMGfhuNDGCXY!ODf809veg z%dzECKm9?Q$UVZ`tB}D*pa-b4HYWpsJRsO~4gRisqbLW79Xq+KMdG4LJwm zS;c6w(W*SK68Rg;Xo0tFzFf+!;HSYekxbW?K4J>qF5{yVjo)mg)rl>7^gY2ySL7Wp z1ZPaeU>sJ7Z|P@*`K=LaOe&hUxY<-bC1o0NQR}EmeQ{N_{gjdVSb2uHQ61Y&Zh|n* z6^Dy6D&2+H&~q4rIhd~qdJZCBf&s&l;WC6%@+X-=K1E-F>NjIR*~~Z?1&H`q){W*!@qQ0Qs8JiIXgN|vVHVT;`{LE(u7vn9AyHJ}aGBh(5rX`&a1Oeo_FXt3=p=c87uLPG!n6;ZJZDFB`L;h~^hNSnKXTKv{8iQKb|#2>uDr8EpPxav)D zEU;+9!aq{0V3oSwpm3c7L~JR6wybTfE6`QU{{T2-v6b`3L>m79sQkaFYUa8w+O+&? zVaU}@{DmKK$?RXaJ`kQ2n|w+cmXv1ctAIqSIl5u{fN8Xvv&>q9A1)bkCUWN4XVuVn zIb&9--Snq-G8Q0qv=CVu327X-AWHuLvy}z*$`so2`iym$hcfEm0*E5yHw(FD9bpc z*Y97b65N3Q0G^>@GB=i|6?pVZ%*(HCu3Zk}^h%~QwRaZ>E$g@!u?ddd6Y3QfD^SaH zE9CB0a7sQLjA{LVm*zWAE4i!^rixd_IQf)kN%OEvO1Fq!{{TV;lz1dR`6z7y_8;m1 zOQjwQsv-t}Qk!sZ^B$Jd9xl9Gb}reeYhPOP3AG;5bLP_JAmCEi_>4GFl-w)FZcxVO zA!rlSv3(H8%!*T&pD~2r4KeX9GqS#dw0M-s7(wVUeo2ag$}1=8R-`b3(-`=c0u*bn zgo~hHTaPi>w20C*nDa%clI919Wo16%;T3^_?g(LlQX@chF;?Nw_ZSq?eZ-%H)wDth z#cmEiQp0H3;{K*X`FwaiK$gQa51Cw54L5)Jh%}{z-D(xQ$lKg59HA&FZFKsXD#nrW z#hxP5Css~}#2MolH!W3cG#rdJFgtyW$%jT^9lwz_2NT2o5jF@FcoVWMOYph5id8F5 zUSR4a5Gwqb`=2RKm$UO75~xLZ1Bk)mz+Sv5mo0OF$qJ^*!At4_^n~F^qepqV^9~H< zwZ`i^usT#(UVtA>5q~+_V^_PLon-39q zR>LJcJeZ}gbjzw6DpMW~g`pG&wjn^!Hj78MuTZ!I zS_=2MW{=Cu8;v0-L&mIv0R;k{Plg>@*2A>oOYs$F;Hs%|gnXA0sPHQ&CKKl4;3`KN z;q@|RWuF9!kjhvWC%ycW8C^x(o={Q<+7g^KN+xh+99zsIi=!q>ADzwv zK*gW^fNrX^k#98tm|@U&yDyW1QP%+_IairDDm`IH> zE<>^nuXfgbOO9=#oJPuc*`z0#3q7zz@0tqfdW{PJR-=QsMBRYBKXXWA6deBLbT=sY zieu1KM@#&NGz2ia)6}lK&2_-=SYlqJI<#;?S{>yxRN;sO&p%xpvEmeuqTU7}>^J2o zc=ZnOv}dp;>?_TNsDJ^=1)^;GhCQshYeVC>BA^EyANSP0Yb{;1D|_Wq^ziOkigmsC zj0)HhUN39n2gex}`+yU2o2#|zI-0t%9!UWadJdk>!?|obcm%#bVSm2Z1*EIrUmJZKLq(BK64@2Rv9m;DS9M<2NN9~bt^>2xmK?eoxeGx5Cx|iU-W!moRD$xeb5mdd0(G<0IB7m71 zty!nc(^P`=_=>3(MQ#58kT}D-pFo!up@O=`V5r-KcVBfE>^Xv(AQ%;qlm^X1>_y{a zlP%R^R7*&vRPW3Ms3a!qPli;`u&0GJ5Te+D$kKX@-v0n?cYVY4a0~}7FU(v}ZVF-T zHiZdOZ9^+ngO=d{R-`yL^NDJRup0Se3uEpI`G{|BTjxVg%yJwDii)ms5q~?BWd?`$ z0unrbW1tXc5<@Z5aeU8@RuRi*mszfljU!Y5yfia`5sR*n+z^!;#de4c1wby-aK4~h*Kh4 zMw!5bN(Uc0o5+dGT)|GvEWbUxLhOrK6^afB6O=>bAgC4dlP^rb8CY1j4-X!WAi=SJ ziODRituwh2l`oE&SnFvf{nTl<%2+!Xxkn3ZGWN%vao9#;K!~gMO7zcF^@jn8sit!) z?q`8v%3rvRB8M2cYriq_LX4pG`yx7#bR)lsR+741Tv*UE2*KjCzwr$}G3g&>fydHX zQf~lw_{=o9bY2lii&Q6cDGC|Xal_XL8iNKI4kzc#iB?njKQ`7-KXYK zA}cL9mtZ4=;dViXwPFClw<#|#y449f8w8vrw2z0IiEMo&Eq zd%{;Db3}3Q1*ggc(ZvevHsW4pA6aM*H3znVb(bFEEtyQ;l<_DYDfMq3?kqTyw}BvN zD1#x`dArOX)7lw+&Zg2yeV3-;+PROBl#3BX6iyGQErdgKKSpNNNSS*0Hv`e|;eGJM z5p`*l`hk`yqS2*zsOOg6@P5Kz*nW_1f>2`9Ic|$yAxJZwtN#FqD^`c0)9ixTJS!=) z<9~3_SjfY~d0)gip_m~!Nl2_}n=Czc6z?k<2rGh2R+el;txvmM~S1T7pE)6gG)CW5A+oEB`>ta^&j znJpd|6y{SRZFuo2RPKSy(Xg;v0^Wul51s1`uMp?l8d4e&ar`Ij34z<$S=l+(l%sKGz-+j|tl^D=IB8d00^?t~T`5Le z2!t{@T41AT+LD5fMf#SC9U*Y9h?B91dLPS~nG9JFd4Mt%ZeOA1S@19o`z}4h+mzrQ zRqi6*o^&sHa>DEiyPdJ z2x!Tqv{x`=w@nW;Zc{cE038zn3$=9RK%f$jW!`lY=`uBE053JfMyKwjC&%(5mU<1` z1#O_?5Cv{gQ~8K1ZWeRX7lMp55w&RqG~B`pvh$b)I$2PV9;5~a>Q>d&a9(T7S9;3j z@-fU>>{hK*q-D77)AyP9jn_bqZvOys^pU4@bM2Y>AR|t*^Oywa;4RoJ-Wmfnvnj!3 ziUa$I>L)eDXIX@8g4U9%SzbsX9b!J@Hej!Cemm`7Ih1)*IM;?V00o;@pyh#^hkwYw zlO&^xFu>i~v_IAik!+u`Rw01=ANQ$4>ZXSezi?E-TU5LGbae~y9SRzk!Z`vRj}eC$ z|^^6ajn(GP$E3DoeT=zwwkozGj}iFcqCJ2E&#E0e+hK9^esT+X*nA*aBS@ zN%%rv70Ux&1Ql2ce6P1e2^GF6j%ud@5ZhIU&;BDq(S5M2&FVAX?f4~~{BtVI$yBO*5bAxl^_9}@R)t4r%3=-?`PeGF2{7uQ3_2UOoke8l9& z@IUyNOECVlQ|?D|Z|laO(kCu_ct24)F_h%*J+X2}?WDXwXCDB61CKGh`Ukl5l`z&nF`1dQZ)3`MmRI+tdGP}bO3RU zdbTwY&0G8x;xG(5mcin zJV?>D4{*>3uy}_9dnHqN*qw4fSVivGK5O|NF3Y*IYu|{-_3WY@I`YG;@Z+Igqr0)4 zp9JT_h~5X8USS?xW2nd#P<^6%XUXCr9rIOYJ+~AUTr;}| zZXzWxD(vseea`@ZJr?~DntB0A&_V+O^Hl!;_`;R=-y=>(rvN8n@R;XcW{e zcXI|F-NZE#DxsS@S8{^{oF6wCxmxQ{mSj;m$Eq9=m{)+hLM0dj3WQ-|9|9p33DSxQM4Md<^<&gG|3HpqlKf z;FjLy{onkR4@4fVjNSo!p`<@A4Fw>fjn~p)+_qq7Pti$ zk%FXK9XSRfv2ETMUPUTdRM5Lj=^qM?f*NF?AOys68sawl6xsv0X4vz$DO$HCKQf4h z1|Ya4EQfRluSBQm8DJcI#Ait8YfXM-2Ve};(0O_gJ$oR@%jJyF+i13$!zk)942J}% zt2VfL^#&GbR<2rrVyB3asO&Pl%K`{hsXLY_&?<9H zWqYZhX_y&M10GB$(lFW_!O5Zliz@yh^!gH}Ur^)pu-2D``yGVUIZ3~M$EF%Gx>pC8 zXVa8emJ+vWw9;zz{0*$^t*qQPX{IB~B)ifGE+u1ts7Z<1|hzne*gETgWmzb5tq2lo@ zmx|Q>rSgt>j}h@JGIy4aQT#DTSE9RTTt20xZUU`ko+Tr`J<(sdIf@-ETZu9w#(K#J0lD!a(0~dg*2#)OMATwl8!g=X6 zO+KY1vVeAwOPc9NL*K-x&MtvF7&Xq3Rd*QhDqRt2Blcj+>q0)0zMnG}YrIokpFB%s zs&Wqd7OpfAwRA@%pMMY(88kKzsZ12Us#pM}nb3AVB0d9KG^l)HRE-lV+y2*lOlR0b zUWah0BGxk9%R?Nod6m9ouQb=ll>P>~Q2fMYvRNRTvO=B4Wh}}t5D<~w)8bGbQ8;h&G7r}D%3rF7$4c39 zoutVRLCJkUP^}dUyu?NVC9n-n)WR0L!a!&kc|eSl#y$K*>(o<$IFq*o2L<%fO3I@O zw&jM00kj);H31wiNdaM_ir&4)#omj-{=!yhPJU8=OX3wnE0Qf?J9s#^n0@LfVQYjC zf;jyPs5w+JG?ANn#ck}a2t>8yUy`FNs}4%84-us{w*ajCK|o1h`zd$y48Ecd2#*FF z2Q{`?i_ySXyoA!tkoC(9<~&QV6_d5l1OgyoY(KBTF~bwp3;55>rWAzLxhEJ>K%8fL zl%?+k4^QS^s#gtMIAfWg3k4&9KAE?0nwQY;Y1 z_Cap7i)lZ}yJw?tgKP)?012WIMLRhTURcGbyS-a)!TW|hlHi^i0p+& zjlD~l3vaSr5~^MV_=-gEZ4^_fDRzr!^&POs2pxEoFDw)was(m-!5&Xk zZNpYojfoOaQowfbRKf)fn+SzS33H2v32Qc5sS~IQBm}0+*%+4W)6Kxurrfoz!QtXi zSaS-ik?}DgIUGj}v_MXiRV*7V6ppVPlGKu{S?huDkDwI}bG2wQ^@V@gK_(Hrni>`? zuApS|exL#%E#%^9Xm1bZ7e>_RKi?3clF)zf_Y4XSlAr~N=KWw!jX2@rB&^vSl8j=b z=I}K43M;0=*ul)bA-FzVzFI&1BA}|{{u%sCVwgTgylP?m8@74R67L(Ch0=4u0;H8p`S79Z1gCfhGZo?I z1g1;J9LwlCGp7gXFmoTkEHoWsPXrDsYOeW$g}4FbI1h2x1u1y+8+`F8d1D+rID$ZD zc%AQ5^(_2rXb#t+8ahTg{(gjA>DLVSoHD^|wUSVcL1-R-`OtY-HD<$8E$$9e0H)<5Ftl(! z8n`Uy5b(n)!BFOp)n+|DC2%KEL#=zj9yCdibl9FBFA-4!C%bdpPu#pf1C`{Lm@2d( z!|yVsR|m~w9KIt>kwUsuHR@B?&}4WQi^L7hafX%PxmQtxYX*auqb!Wttn5~1VI+{X zoH)Vva}RJ)-XWgn;P&`SZ~;GO++5>Hz7K`mF11+f5hj&buL$XBCD=0&y>%$n8aDTD%(Jxfng%g4@PaH@55zfEFYyf?DaU)% z+3+IQ(ZF#oY`x){J|cZ=^h`#xxxmWV{-THMoBsfXy+E-3KWbyk3=0UX@{qkS2lQU5 zW_Tn1=mgc*;DF!EtC3RR8*l0aD)#s<525k`OBl(Ze8c@D7EjDqDZB@XYzmR_=3`|fc&4DV z6XgE@SZdlO;To^hz+A+4;#OAeLlnT&YcuyiJlhKVQVye7zorul)feg6K-$+01${>D?E51bSv_e{{ReZnN`2pWGkR3 z1{hiGTzUvafk8&&qaGfu+Q85$rvt<_j?bIsHJ=V!4cr3k>SByDYS#FbsZS}6r?`QD zmq;g2fQX%L@2Z%wphmNe@jPxIGdgGNLJ*mXcCk5Uii4HLgjQoZe(@1tW6n>$pOO&> z92ic{$j7~f8X^pQa^tW4Aysr$xA~3$YM8;fL9&9q#^9aPdzFP<=*jO=!UH-Slgc#& zCtyaei}F=`f0d?ypOV@H|sG6L->{C~Qa3`=3d?Wk(nplNSXx?--vv-p67pc!kg zarS+@M!d(ll^9S7)yff@Nzn+?MV!x=-c32fcw{{S#gXSg%2Wh1go#xmrTYoXeyp>^Q*Fd;Bm71H`t}!hb9!QUC32J~0czKPR6scQ%KG@K5)0NH2 zaX1`VibpgJehkzRmI}9Li-5p&Y4Tt>5wh5Mea7se_{91xb%ou366!L$nGb;$fKgs^ zEmo9>Rl7LxsLc_K2PFpypO`~TzuWM@B8oJ@XNioQBK<;3xFJh~6;0ZAhKL-iO}fIReh zaWJVWv3;`qxP*vVZpU7u9CmK2!w|ZYW}tazKVJmx{UWIV7>*zrasdYn26G@=pof8L zc-eho7hoTu9~?w{4ijj33s{|Y^XSVQ6jXZu0JBp_V1TGaiM1d160q8=0pPCXL~|g` zcPOgDw4;`}mw?PHjTcuP$l|w~BO#*#xRpLzmGdE^Rp#U#PcrLr*g%7n+yd!p(%%`V zs-#k|1z_UvLmPynP@67QE8*wjA+>U=rw|zh!tDFzHFTIQrk}6WIPphN?~@Z+u&WG} zznEaMWUJs#j-ez#R{H_t)DwANQh6e^xH?k|I*P?cN>&TV@c4pq`5tMQ*ie(3F#rcq z6p9B0M`{TZS$Op>;9{1KB^}fZ8CIt2Ynw~B&=Y|I;wn^NIKEZ}bxCQ2YvScFNZU9S zGZjTlt^6f|D%jBG5I|`Q0Lr+H$;T8fj|mM$;bqI*F`f{It>$GMVt-DjN_Y)9qpi&? z8z$>R7s|4`4kjXTs)se`fEvyn)3dg2c#7Ax$Ele|?%k?8;o?#qtPS>jRp+>%Dc6&W z{>o=Ao8a>G9;IG>_YV;$0c^wD7qE0IIrY&KC`q|mWkFE4n*{HMRq+E0xEPmLwqK+& z>N4Wap}>p)`TWcbxOFO{mmWj3G$x#^aMVwMfk(}*BIM?!HOsZeFkUrIP7`qb5W74L|hUdFN=@3f&m3Q?vf*7l+&W>qcWPP^$(eiCfhT} z@n4vfiP&NGOOclXpSVXMZz68kynr>ZJ6M>t{)j8r5O@`)sp_A&jYEZ5^UZr9Lm=%S z>~(VW!jVrUKXR<$=n6TxTLIi;ZmK9sYfA^0l*mg!(7$fr-7AaWy*wO}i~vHbNM>#M zXxZEG)PIDJ3U%gXRhSq``F63}Fj-o=Rpy8}eo3_c#@GdePPFlUB45#9>0q4IQ1j&{J@J>WfejP0sCIRHRgJB`_N5tCk zY-ojOy{CP}H-~Rm?0iK~>nF+O^2B3<5LPze1P}>me} z^#IsTGgkl&IX>L};o{ZI_fTVT2E_}@%)C@uN()janLXxdjvqP)dkCCM(; z?IQyXscbxfxK&X?PienMMdG%-6~J*H3izv#PGyDNqOJ3vC*}oNZnv{!Vzy0m`;@^I z`Dei~4jj_hBAvi){zuL|a1%{rVg44ZKLgZz{aXfF^7s3goOS`CeZzu3Q=|Qtnz98K zboiMkPEdUOEHZbCYTKvo7UO!aEuU8_)!1crp@Xb9@I6W~y~3e_SVfeE&ZATtW6O2s zI2%XW#)tS~E5NNMk1@sQW>nenE6PB>mMo87fP==|h5LAwC;$Zy3~E+=v>s0h)Vx-$ zYj5mQM^(`82P`RKvIWPz&>Qgge^Z4`M;$fLVi+ieH%C#i27NAT(q_srO+0W!06kUx zR9sja-P6I%K`Po#{{Z0bGcCIqFXxF(7FfZouL&7xFO#<4v&3uNiorskxp9p&D_d@2 z^LrR&wKlw?fHvF(<_>5#Q~hF)O0hJAi@3Xk>A+X9iI+Rds zJ8LgknE-G`4~mPV3&6ffcPV$~*?J*Qs_I(3Uv!lUGSSllx-rHGfT$B$X8sslDalr_ znMd<-X*`h{$u~zT7?6u8UkFn<%i#@ygajHY`ITTRvFVH&HAI8eT}fc^5Gh|vH|7GC zM9V>_;ME(2mL&uwaqs@_9wk|UbbN6du_ZVIV=g&zc!&WhUI(AV6!_x0U7{}9nm&}@ z#BiWM#q^9d6o+7HuA@f1yc(mmg%LXd{{Ym+5FQUU!h)7T4DFsm+^+ zHA1Ju#8C)-33na699Fm=;{h1W6?r0bDJ%=Wldj2Fp-js23%iCB(YQ5&06|9QF8P4I zTwbgnJA@3`RcPlvV^_4naV$}6<7rU4MgCa)4>u=Lfr{pBHa;AWxT0+nJ>Ql1U;+y9 z6S^i?UKM=5`zZqK@bC$zj4Vfwafb#8NRj1YM%1`%`-yp~uLuQJS-W>m%IBZc~XjWYm1UySg@+>LCXwz`5Y zSS676F5`@MU;3pEAg=PULu?ul24Q~BQE^Km^S0PKq8tha#Jcb$R%VthZTy%QaBl1u zse6}lYzvk4p6)ajWl^-hC45s;L*PadGs9FBTS)2Lf6 zeULyH36!|@%Llg>$=)>qG4lX(SGjS!M#1EK^()vNI#xLO%qXEYH_x;V#n$h|EA8WP zeJ2bofaS6O0I<=c71;29FwOx4?83^lgk4-%3g1x1Yh7ZRQU~gcP5=;?me)G)c055Eb_(Z+H6@6Z33?l&R@ua zff9zid$zT3^OBf2ahpX?YHwr58>eL6^(A5ZWa(tVm&4qQQrU< zw5G@(2b_4nU%AvoniNZ9)xRWAtty0DX8=GWLvJvpZn(st5nPU+M80FORmZHvayo7g zS%FkHSS(_7FW~FVM?RAEzH7uL2*T6P(qJ|!#yLH~PM}yPgoNSbEjCeGhi@9o>i&!x zA%|**ST3vpRwXtx8+-l3+UPTyzobn-Q=OiU-^4H$mCL*qmryKvDpkK#OU52$H(xT| zW@sI-@FKe}1|bj({{Y}2T?^8VpPHAJBC3`jhF$_WKceY1euc>mCnsE7E>JI|$7Uuel zqe?*U!5DZkjdc7&#Boa4sdBa~2s<6YY=x3Tk`lq`?Y8Bj?O8^aHZG%Jl#t*6=oS9N z0AnRJPO?F#W=wifdwZAkd1mddPzo-gl<@FKL$19m;R?uk%z%rvyqJg-o^-*xV)0=@9;pt7wr<)G=%B5@v z1?-K`hTsReXRec4vw{d&C?N5e$tnGoIX+-aTTy*vvFWidbDdOZdi;R?z(On?=TH(> zo7;PqK|`xv4%jSuH^S}Z@c`Hh;N|FuVfK!IIl%?jP*ZJ(#6i2RLi>G730L`!k1=4K zgCFSmV`-dq#2^0v0e7ZYIwIki4>_whk0Zn+fl$p4KWFAJS_-5ZCqqXwJdwnY zlpG+irc>N%c72u(ZQqELeSA1@^#bS5C-8i+5uVXwwd2tNfIa^Jb$VQ+BrDr({%!)~ zs0F!vS}iR*TtM>c8wk@0wzTWqw(QajKF%e?dvd&sp9U?kPuahl7GYa4M4TrX;sjT~ z+7A`PKwt`V=JW)<0Pzi~c+TK$TLWQn^K+5m%~Y@Q47NFMm&^-%6tbK@>Ln=2MX43g zCkE!HEv$I*exkAw>^#GCHQZJHLa3=-VdX^7uN^)Q#2%|k-uUV603-rs&5sPA%kJIv z8XO=%#%t8itOE=!qE-N~OrffT#y%CA?xj`*HCzM%-MW~1sO?c%d8LQva@ed2=7R&n zsdd4Ad58HJYl!&3`Ihn>j-u;cX@K*9Z09(aLWi1~9%9QB9iQm)3LNk#J6D1bZ;96* z`o-27FDt#mn4@68;P(Y58W!1<1Pl5i2;EebpTr6&mAC2UFc72^+00d5DHW4n5{iI6 zM?xr7yP9fGQnlIJ4ws1LLUDreZn=UW`C54D<)}usJscob>^J;WabOVe*5Vh-&sOf{ zEGLY7L;_IM=DPH=c+kubDBID@p-|IvZ%0IBo)_o;07$yoyZop8n@4&Xlg}TR!;!Hm z1`pTn0ww&miZ8+8rak68Fid)kB$yR~xt2ts(Ci*(0w8@x){6whBC}&O#p<({!ZlIM zpe&rK*l9e>BTFa&TIbxdxYVfiaQS5Xsc;Uwz|Ti09fDqzZi4tmR)&H5Fn%cQMPD@CUGwF=R z*9nIseWR@HZ!@cTh7x%dc4qeGy+=4LxsRrP2r{9nc9)wy%%N56i%HzJR~K5N91E;x z%)aE|ugEdrx^w|}xO_I!!LJe6p;ugfki_TYBcS*0*!z5weqUOEG&FQ8!~XzvDQaDy zOAd*%hd<_Wc!y*E0I_xv!u~#9VWt6^a_ER*-i!7f#3x2>k8{cksuWiS1p!=Thq5JE zbS{p^l4Qm>ZMWt!GmvxcTt-6_e6kvd*Y)~=|{mK*9N8~-lgJc01 z4vF4aqogMAA{Y+hxr0h~r>H}l4*dQdFhEA*$0w?WX|5w7!TyeSA1^sqnQGQ<6I6j) z=p&|q$*jbT?8Wg=JyF_(RaYT~71UuOyI8hW6VR+35yrp3BiRt)fck@yfvO?a_k5j9 zN`ctpxT~vU!NDqtHhpr;12i$zU7Sx8GX@Stt+?^#SkrY6(;Qbz0 zh+)h31fiRT+8w8Ipc#i3pChe9ekE_-o@!Ng4M}vT1Q41nnYS>z_Zt2lV}X1?4mdHk zI%C~BHVq!q8?`d=N`bj8w|MF&X657RSwNlt0J&6dH%L;Q1ymCQCxPFG&ojF6my6Zr zYtyoaM{X;eiT5v6$rW8^#^TRMArM-=_|H?tmIUe%K@ci9mYVVixxfu{{WK!0A~&!pK!LBx$%6EVP#nL zbkqq;66xrCLds$Wi;R54Zwk=OxTI&ZLs`fwR}laiH9^HoImSRcZl5oRGTahqJm08= z9A{_xv8z_6=W^Fb0?XsXWw|Uerz*;h0p93^Fi=Wfo=f)y1}Ly=tZ0BdZwY(C6NvHg zCAdApFrq$MUp`?a(t_FOh!&d^u4G#FJ@}lO{tM}2mp!P7%JEmS8!3ux=$@R$SWSvj zWk?Q|!tm3BxM;x6ivFeORw3OvhmDB8WK|Lze?hh2fnzYHe=i;o2?Yb3ToT}nNp2H^ z?wu9P80D95;xjl~iA63YFWU}RSMErb09#P-a?3+toeoaAiWP`S&jac?1BAWwz7m0u z-ACdKZrtfkW6F0;uzHHwIU2if>L8(|e1tN#n|~JolAA0ScqXsG-8gjKC4lyqG#rU2 zgDr%6URZV2S?%8hV*0iY2p$$DWC2(vu~7}6K+2Oo<}?&_ioq-~B(BdV#mX?j>1##Z z5EV&7z+zB90btH^vRxQw;KgA5&st@DJjISrh(XE=a?nNx6|WaK^uc#mRl9O|FwE3l z!4r=mC6NqhLTvK}jnaAtk>&-AQ3~)%I30$=uM;vr17(K;1llU-N3621fEi(s?bm*Y z?%H!ZcpO0sAvQ!@XE7|_mKaFFXcv&yBT8xIUK)1msQHDnxayFhS=+P6WM&Kh0Q#Uo z5{i^w=-?AplobCe+uMFR4oh()>$O)jd+71A?`aB&VVP;2!+SU_{62 zUm6u)68;!v<)7(C1>l(6qJ`VXsGWa6wYe@_#Z2F0+}OTOzF_?(>jMn8)rKh!7KATH zd$k2YEz@J?nTUflD15*g*kNKdaF~CQ5*zXfKu!ewu|;T4!Nf8Ob#mw8ba)yb{C?9e z1iggg#&B~|*O}Vv#AY$f3bqx2S{5`&1-K2d30W>0vMH3yRgVa)8bz{;pu>1b>d|yb zS%UJ;udd}6!z_(lqila;xwV~22-3A@@SNc0W`p$+%Lg47F7pgF{{Z$_yjhV0 zm@q=Sag-65Dh`ar(G4R2d4>F-H~#<;e6Y62tT?YQ>n85&4cjq5x+=G9&?5~EB6obs z1M7~=t(^BLE}N{v`K)F$QWt^ceqfw0YBp-Pe7J#W6co99^N7lb1aR-}1<2Q7O=IdK zW0nj3#vwROu=#X5RF2u?u%2e6ax?U;wJV{v|QtsO3&(Vw=tWzofg7!O$7_ zcQJ6_FteF*nl+AxleqGxh1*ieZq& zpHUB@dfVM_$B}3Tmid?5)fq|h7)VwQ91C^CL06b?*AduECL@Q>{jd(Q=OZQa3S?x8EhTf&3vw&V9q`>^ZPZMAq93&KKq~nzYngCY+0O{Pjv0~P2 zKh(pBg?=+a3Cvq5wzVHZ1X&I$8e~+4&7mySUU%-iK|Xe7Jr$A+fN;4h%QG{}OO(zr z7v#)9>T^5#4j?KT6|;xl{SxA;d0%jqp%o)|KDwCEQdMh`=0({PD8&vvn}thd$-0Q` z;g)s4`pm6THl1QQ!MtiE4|gb{m1_ed;42cUk4gx+d<1Ul2}Pz)xro9mW0<@t0v^JZ zYkl+cC=Yc10IHP+K`pbQJsh;gOE1hK11a?R;#NW`g@?ia0A^Q;X%zYqxUg)ga<|M| z!q7~@qI^Gv*Ti1D1|N;*;t`_7O5V}Y;`a?**(^I>2Hs(zYYS$x1RMZ>Uy;T&^9Isp zf5JQ+7x8f_Cpa1oB_4gGYOC^rL^aeN?FRk zZyj6%=GoVbKx#!|JUf|S1pG`)0jufK#c3;-s8;8aE0`*zSuyZ&0?>RadzWN!cs+Sv zh{%hl_2{0Ss=&?GKxNAK<74moA5ysOa?9j3gWu@(KQ z%URAKXzX#quGSa4x9T{@Y_MtNUd+D{h!9**#;OX2@1iJ#1)A=l9v?;;esA$9-JpGw zDe*2vM!QMP^(hlvrM*8)WouWk4r_^OR#hnNZ-Q7AYi93`pjEMSaC(5c+c37tAh96Yxi3uE)_a3ZO4>Sc2uH=CVS~&8iEg z(CfIaa07RpMcao(e^CL1Q7|J^=fobRQHLWN7tW%qb8VN?FJ1wh2?a|T9lvm@sNp=U z7D-dh_XVhBt_Tn&7qadgCzizrZ*b}etB^7EEruY=77M0V@(f(*i%X#4;28Uc!<8*d z-lclB8Pm2BRG})jmTn3Qbz790##l6RU}<=bUqJ?Xp}I3N#~^Whz9rDL6u1iDfPAbr zJpx+GdUi)K3!sJ!L6U`(I&oJk_pPhz)2UB5X33QLR!MC0`IW{6KqxV|(NDateA~{*3dKb6a`JI0aLdvnOGq#ftl#~($P0cviSS}7 z`nFCjN8)3r#&gv10SN=%TwcUH>?rwg5wYwhSD0}LmcYvCKgedZ1_?@jkmc%vVfY}_ z=>3ITjN)q2=ydypXdkBBxM~^b4rAC}IqhK{BC>p!h59di#Fq>X>SA~U&zLQ+67ZGG z79xnoj&ZaeVIYDLg>_MJFs4|@JB(mBU~;>dF0SGWzemJo)00@?9($IU=%#LSP$Nj) z#!RpQY|3sq!z2krGi*YxKy!8z8RBGr9}$ttk&kYoR?M*-n&RR-=Gpv61kxXbd0JhMYWFB&r;xn0dV*{ ztwPmyDS+YYiG@W0>o}{Z>TJ;TGcp0$;NbTSdO2V-BqeM_D5z3PN&-c z03kVEkbkxkfvW!iGg}=HK!7ceL%WCMf{BL%zL=#BHU{`w_<=VTA%0#bJ2qN(o6i$H z>OX)DXA;X(E(VWM>}CG|vE-HM$+q>U*#(a#y+NvUt;Z^k;WQ}ec|5YEU1;{#!d@!N z8+I`bG?@cNV-!>awbS(;ic6PT-0!Jr;5%(CmhIa)CMo{_oqtfJNR_I5kQ)PGwLHFD zaT0`=;}z~6ips!tboCH)wYgJ|B2;_E8>w*SQVCx$&{*{rpOY39GGXcWE!NBGIc6Zw zHGo2osH^_~khoK4?;5(sR2%{Qj9Rd(%Ycu5AT`Jx)WM+#b|pO2%)f^>+;T`%HMi+d zM77#3#vmflJ84MZ%Y0-Oz9O_+Q@k-`N{y>t9KA{hhe9qo=ohI-DqFXlu}0h4>4#yw z&2d?5_i-nTaSBjyoRy2X8J*$Bw+rc%2ZVGUTBCkvhErwuI3iU>a<-sNG7YFF8)K3) zonelNsKZp>lMuoWW8yXiQZGy*>;QA>B@Y<)<_&_g9_4zoVHBMV8BM1Zy%W>9kWWQR zV%I!G03dS@>Q|8hnw2$Ne8#nmc=E3SxOB!T3HT=E!m8IqS6iWS9E`XIDm+5vu}3tw z9ylm03s&(jQ)~sP>Mb#MAN)N{N@{vX8Rj5B1S-0jMsmF0@)_^1+96~k!QvPiK?8dk zP9>F>r<2Ku+dZ(%R1vYse@>xIE1}T(mmiiac0OUEsMTwgzleo^89IB2OmXD#1+Y4q z3$W|VTbbnIHYxjvs<@?WtbVF4WL^+41gg#9LE+qCc%#7bjmEGXzn5%MBIJEOW>$KI zltI7_s@Sq2dKQ}GgFu@GQjSI<0C73cm9b!3Mi>z~vrj7Z3%@WdQ|_^FcCs_NE+A~0 zH)A(5;>d2B&!#wqcgS#DRi*x4xtH-J<){AuBNq_YEmxPQ!6;E+#-c=ZSl^*Z(6#Js~%XTf+j&oIzSo171r%S_6^cDzQ# z*$xL_IbC023H%(Y}Gchg{AAKt*sGK2Y)< zLsRW?{7dABUOCT`?gjwJ7E?L*nOmxa==g#KOJ^tC%IP2&r-9-9%AHWxV~TY1<~kCD zXw3dWL4mw%zOgbvLtYay!E^(^p%||Kd^iv6$XsjLuf(cKs_yp$f)W=CRq+czRyUvh zgJsR+;SseGD*pgkMSQDY$uS|S>3|g#Co7hBgX<9cC`!347Hrz6BI>^E~vZ?n7WLq!~KGa;JKvcSh2vi-hVQS zc=zsPe8FTW{{VQcob~1Y%M+=RJ=k#TAm@bg9i?D9^vuC9*7pVBx%y0 zFrb&RcW8NC^g}9Rr7i=bf)*NVOsouVc*)1t;!uJwcn-(8gArksRFI+2u2K!&_wf`W zu|ZyjKI19urnT2JU!lThE8*ab$*4?*F8uWrmV9H?Rpy9p1JKVke#u?7!G(MA?gQHk zcs_rmLnWyiKiJ9&w3M~45xBMwm{f2*6Q)}o+1^X$V`6cw=nh{I?*VIEc09}yjV{aa zxY8{ubiBenDx&^-eN2E>HbG8_-9;!92c9DYJtM@Y2Qe0UTSE5Za}mKpx+s(qNQRFC z;4=Dw7Jn?Tui*^h;`#ZU%h~(~Paq&OrfR=7LJBU_?e7^N7<5<;+{@E4OoJ+X+)GeY z-Iito`+xGp(A!nx$mLgYXK9CK2 zF@K0H8q&%P)X;u!s7MhN>^~oK1;k$`L=6oQ4f|dQ_<)ogK482kCqe7nTnu5L;LXt#$Xiq`5~^Pg)t{t3vLIxmbJJ==2=AxwhRFSGoDz&1GjGwM9TMT zuTdk3YxE)p(XT`ZWrQ{NDmxG%Tj`C;R<};vM2Om5oJuGRARpg2M?d8(Jh2a49t}rUnL`2B_>?vYUPeDj>7wuc z#Ona7FQP6*as@-w$0&n~e_mkF0ZyzxaGMYxQ2WM8<5b*8%U4vAAU>J7(TZ8qN>Q zr6|a;y`q3?pS*!-@vLL0&fa#oER|5UB19a?bz0H3G^;f1q5#H_-I;6!fL zz73lBsYtXU^l$YP!S1zqKBI-ui8*f0J;h1Tmm_#sM9i>iCV^AVSUpF=x$T&aj+k7q z4*<2lh<$Ko!Ed+)+K+30P^nG8#|ZsI3aLX7OntHez9`qS47t%t^d|?y9hFera1eK5 zsR7Ueogw~4ox_igVR;&k2e*LC?`wqxFdbB69Z|7N%L!QyUq2AYwkjP)a&HHZGP!n* zdwLDaA2sqeJYCm`Z2A+pFfO3=6goVc?)BWg)|(2orWw;zVaeuU3mU{Zcs@um4MN40 z=3BL5JQjFyHkmFD1R_s9WuW3{ID@S(;_u=-jRF)}KP(e7d=`b}=znzv zEJzf39oI6ubi};Y_Y5lbv(^6q*9{KT7XJW*$Q5*$JdgvjC^#ollbIOhyz%iC+UrYl zd=S!;`hmXU!4JEYtqhiSP)XhS!2A0bOKGFZmuW=pTX`q75|N zs{4=m8qoHIE{c7AB0S#Q!3qY)Hrl>3L_?@6z^l>baOS5xFMsS-BB{GpT$?vo-F(F) z5I&+>OROH{mX;5is5OiZ(nesO>u(NxsQaXP}f*D2(yF*?}7CcYnIBp5ZTiccE$+V>LwKp6bdts za)p(Q$1CWBNze4SA2k3H1_9}3%%TkdPXng(Tp9UQ%I%K%)Cje8DO?G7aCugx_L7-p zoD~bOhiKlSMJNT9+kHi@>=+-&OH6`?YVqb>L7eBnVN=yss=7~8N*H_taI^)>g35?l zt}tfti9tyf4O1PteZmaQ$%Sy!b;O|6st-4#;$$|DrnvMISsL>e1_7+0tgJyvOFG%b zvb<^)84gq5qB($XmxF2MQD3ZT;DTQIG=?bHKe>Sh5rfcZBF@`L&%`KxxXy<@DEWqU zXfci-^B=l=FneA-MiWnI#tMiCTqxnx4r4`{S=<;x0kO~cnA7TOKAiiBNn?JgxFvK| zL(y6zyw+jzAZ-OOzb^LZTu;*p~0iB4V3)bp=9Ou#-N?m5V@oS+|A9 zZz~j#c?KdbQu_u0S5=!jX+6tQC~lU4)GlyC=Gz+*)Lcr2sAv4TL;-#dJiU#w^)65Ji9_S~0=b?Kge`pZ9QGaKV28>sKg!0X0{uc)lG%3A)DI2tyK4 z!DcV{EmMu0iS5J>LIb_kuJ4$3IvBQT`qTjQV( z0gW61%tFxR-MS@W8T7vM&u6)2mm&UND17@Qq>#&?yAglo_eosOytRT`AH>llqEPQAub z#TjjRd!0uksi5NdnZjr)a|}j%B_FkF#(XOkeq`1N`VjAs#OH;hWXFzePV}!5&}3$>8YWJ`5T1r8xe%5OO!uT zEV82T;KVUi*c-jZs6nt{GoxF?TS}{&aQ(-m;PqaR2Vx(H z(ZQCo`Gy*h4olQZi8hvNqFmTj-H&T63NvFkBqpyP5YJ$-sd%N$?@_J*IAHGlz%*ce z4qq&xOc7|D4~mW{in{j4gSmc!CvjN=^DT@HIC<~k7O_5M!Ap&p8fEt%(ZsFuUu<=QywDSz6%;;_t0u1Ver1>%6kOFzYO04>xcr-59l1?c8#~mKGg*frP@@ zgQR8ohs7)(xQ;0Ge80%LMGWU4{-d>4F0}lUBd&vI>*fwqXqV1AOb4jEg9CI~19qWy zMD7wfQ|u8D1f41748TI{(Enufp?@>Ym&p#y@nLT{kGYWrjH zr96X^#AsuIOr29NZERt@ZXO}2{=Q(fltyW{>H<{QUR|=te2`#j{{V16x}(P83wNfM zRTQC7#n-4+Nwh&bqwxkQLB+gzmMkd*p_RftXeK&It37~FgZyicFCxlr}YltqjLsGMArdsJ0R$s`K>aD%E zH+)igI z(qE231Abi}v@>!}R}yGEtEIu_Py*IT@3g*A)d2Z_kz2^f;MbMq(I|cKOB!;%URd*? zzWWWyim$Oq4Z?_Y5-#xHG+R5kqkDUg+*|Tq^^!=2j+ceL+3(VjehD zbM|f%MoZy=7XUql@bAnB1+i=VYF@4MwD#>@VV4Tcl;rt;QlDQHx@Ck)lt23jOc<~Q zbE!qD-V5j4QQMp>;pw|Dbc%wa9>zoHQ# z6w>sRaq2Re8*L$7)xao|Yj5n#G!?sxW9Bt97AoyN%`)k5rEb;B`vb6BXTlle6oW(2 zh)Kj-#j{`RM@p|XGq_aGgurC`m9{Jn+>y|ZRED1?5CL^4s8eeQo#LVC1;q=b;$;Oe zjDF&GNV;5yF{A+H8>yokQ~iH-m-2ue$0R&eG$EY2^Sx9TX^AYI^#yIhrngAsL9XJ-&I(-`KQ zEX?#wx~uakCOBNB>r%uAif`Z}7{Pr6=7$p&i46lYgmG2{jYm$;0U!QFw{-f=OJg|v0>%26zoFG(H% z3rhp$T%5IjV9R1SFwcz4PJVG5*P-03i7E|R9>`S@b;_FU?rUWNwQk8&Aufj}zkVVL z7DaQaG5^~DZ&b{rYU})+frye^c}p!Y^JgqU=RXszr>_? zwWzgcHB1mBW=Cu0FhDV~&C=uMTL2b|J!1SpqFi~kL5|sOE__herc@QE58r}h2|}{; z_=K{forc~}RmFfndQRaAvsdcyMLK|JYy3kQL7|>jQ1LYWSc3-?2g@m5JHSK|C|$^O z{45pTs9rb!01#vrtnI&uQ>soITBp< z3$vL^-6mH505NRT64-E;lM*^CX_que*Qi3A#;+s`J)@Ht9bw&d1=VaXLvj2TN{Q4z z7B8xVWU4D8LAwB7fT$aB?f`&eWkvfErpk+uJ~T%*ylj(RU&9iZnuE#Q&Z5#8M>%R) zNEU7m>N!vWbEJ7y9+h}thyMU>Qo_oWeDCTd{7m1$D2M^Dm}ubg&fOnQu+=8jom&3@ zxQsahuq?d?L>>Kseg+-Bmo}Rvf2pXh*TEJ%3M|(Pr~%-CcIf(qaNLpLa%_u%nl9Jx zPo^v}Q;n}t93q0Zn3t5bmilG`0TQsXw}Mzw0Tj8gvlWf@h{a|{k8n_8v<5x^Pe7#OdY!y9z6MtAOK5~s`JcfMD|VE z_|-$<5T348T2V~bmMb0dWPLsZ2h1rtru;gGQKlw8?UF09{>ep2q|tvsL@eB(^>jOr zP0Eb1#`JE*bx^R4B<=`{!+Xq9ayHlsu;VZ|x2jK6g_@v|4oiWe5Gtb2#0$5aytJ=f zLE0A-dzM+w4SmIs>NAC62->_QbTkhn0ff#Os0L zU2tno$85)=z|Rrx1ASg7naHkFeI_)P8bd!mWl%^_mh|>{i+d}#&@ovds8fr_xtA#` z^u@*iYzOiL*!SFM1# z&j#h7j_j`d)XFqby0QNNSwmg^Xp{|n=V-;RwssNisK22IZt{2qL~72uPKd&Cw;oSW zfNKJjhoLEAa}`UH%RVkqBXei`!8R&VymZPTD;;`H;EQktz|X+-FoVr)Mf7oOsH14C{CP!D9rz@)>G@}eiG~aUk%R_>?r_5y6jZ`;mJ|v*;;r_w|z__>;P^Z+< z;CwJ1c$BA#omywL5!Py_o==Ry>_C)XljbcbXw~8JJ;yt2QB@ubt01lM6}RScM4ngw z0I>?1bIvM>ew~;Lz(lA90tQV(%8s^Z{{ZG?RWFClh)z`swTvRc{_U?x%&rjdzqGSf zhE-%Gsn`Z?JK7*tT9_IDFNN*}n*#&Oa~KJABy)39*}>7sb?B7THQWCH)L5CCtVHZF z^2W2EoR~<|+9yKSk5EMkNihxkVN)&Pe@sLoEUo~%LLLhGnkM4~{KT8bBRSV{&%&R5DIg`}>Mz8U^sce_(bIwVUz(0I}x;;2zs`9?pBR zU3w-R4GD6>W)*Ba8^)geLsS#8qN*;&5H_xhr)TCSn!)I%$jTl-?FnrZ7BSriWxf&c zpSe#PYj;V^W~A6Pf9$1Z>C*HkQ;J4oUx=@AV}&?x@N*H>tSO!q=Z+z$2!V9b@oXw= z<=Fd&3Dz^M;uFGWvzPtiE6y(NmY-6TuBHaqd*U+XBTLWu57D)xb)X=8#ae>F z5};bYV^Bc7BC$>$SwJtWWnZ4)2;r*Fb0@aZL&$-r2(&MN;E0BvoCTK(nk9}Ij+*3aAJ~Ct3M>HVv01=#?gJAQz<1ti{-ye$;7;)M1a{-M z3`(|wimctT@8Vm#Q8D%{QG6t7AVpOa1nrTk@3t!r%^MmPwu}e&BHEbCp+MAVfiHdiPpl`W?sm8_1ra3)cec_4UJxN z3+LZlx_o$yw*;}#;{8SFyg=T)JC%lv!(MRlh%MF?Rn_jGIuJT3ULAXutYlhV`^02* zi?q9BxN`v-OW<~5Tg!MC$fxL=wk;uRlZuL2b&4;ll;X=w9$B;Ib7wBup6Zp&^Xe2a z12CCKa7h3-r@u0z;#R*xbVYQ64g;a@s5rCWpyCB-O5a-iO4x(KKhmIsAlv1DgCKX4 z@I`2as4d~ck~=1*^iO=9GSd#E;`)f4OZNv6A;7-yW)$kN%wD>=WC|;sKi(sdp>p(y zj2RXG02qZVOL2BF<_{{UhZ&68^?){q=jgxxRh4N8xs zX&wZ&rMHwS3Dq*ogmkQyb>b4eC`=wjIliTIAfz0xyPIwN-y#rY*x0J><Gt@m1NNsPv%(c=m3{i712f@J>xfPvVNgaDY_Y7Y+IbX2AB$g{3X}Rdwc$pr6o|0W0Da{8tue9lGN5o|?yal4akvXtlaAy3302P~r=pv)V z8555(+rMYXe8+RKYm9`X7TEO~Z*6u{j=$PC{i3UYoxZKPzYt&fOs}Eq+`1GjKpW3| zOag^fr&eq?6J~1Uc6cv{0Et4lolNWyL~T4Be`ev* z^yZ)TVf6?O*(~l^0h3_uhlQxJht7Fhl6cPXSz z^7jA~jlP#88kZqQ{g~`+Hb1hvdu}R6kYi-fp`q`X1?Gsh;e5a-)s?D^d^9zHH}laP zty>AVFc4bnC2jpgVdff_+u&?qqONM)Bcr$stI%le2<6*B^beh~s)~r0j1VeZ)FGKQ zvC} zjN8a;nOB082y5J9)Qf-NaE};JDsGJ?q#2&`4U3XC&yO#J@_4OIl;+65e{^f3<$iA2)2J|g5 zWY(ap3N@Vv)x~RsGd%g1T;dMwi`J1VQLxE!$P7hgOGt2+9v&_%2GbzDBOJyX_)l&n zpMYYM#{H)C+~R z?oo|)0n~MJKxMoiLDWgaz{2xJNzB~>`Vg?_ymkAC&PuZ~pcfA?aF`**4sa_6v{!wT zcjeCsvLIt=E{6~9U9;jYhW=37&6kk%DtD1hm+ltL!auAy@e|5BdY8WGLeZd)u7D}$ zE2@`xtpn`E(kMvwF{%#HmDkUD(=7c>sN0<&&31Au_<&9Y(ZsJiGKIC`G>&nsd>Z+I1i~tH*<2BBU;@kr~5jx4{L<;+|CwDi)f+SLE*F>uT247k`PBH$-2kohTy1 zr>S$}is0V^Z#tE0?8w0IaS{gEGiApL0K0`ej$7vc0I^sdPat3%@0hrGlJ~TSnY#~W z<*C~M+YSsXzT+xI?i-9C2f2i@ui$}ttsVk3Qb9#}?l~iv=7Wop3cmv@rIfb;65gv{ zBF#j?=s?{W$tN`T;$M0Sj~QX2zyrE~h_t?de_^*-)Q)^Sv8e(SYs}XM;@$ybnvBL{YQk>KIE0;?R$qaQ z-(yjH8wpHlu?_zKlG#%(7WM8AAUc7s%q&;7C3+)NR>(QdVSJmHI;c|&y*P`a7omIW zUR?T=?l1@j%I*x>d#m@mf#ycv@q#K#q10p*yXIK3{| zhT#PExnH&yi;67?D8}_5S5S`8QK<@Ra~1VA;sy@P4xQ={HKx|X7SQ#mmt>&sr5jW% zbN>LCB*v$e>*6vBT^Lqx;^WvBS$AILG^Mb=boIGU7r}35&k&-KtV-%&e8P(#@=^li z{{X=8D-};6Z1g`dg4X)8=sacw@YXC9lRG679znOu;!tcY&eIwF!AC^$_(vnW%9?^P ztAXO5h*h@Oc!)L;o&9hDK-P=e1-ju^DYXk>aOPXN6DRnwCAh$yHEt0_(x3xc67 zy9ECLxR)4=!WV*3VMR2&L{y?3FM;Kl+Z$%{`-O;gl}7KYB87lfN5ct97M|Cgx%C}V zBqgg&%B2M#mJgO9Ia#VT?76McE;W38D<6Rl9T8yDuBIYk(6DeX1CmhNF0GfiPXx_I zYkU#VNE);=Z*Z>)3!P)}15Vfq+sj8RuyI197r;m24qc{SIm~W|VJdbmDQ5ux03bK` zh5|4qLs4e|U>5WVm^u~J{{WwImCXT#QpDT8!wN{M-xw9_=vqZ z^KOxe@82HY39bQT-E}NEd>1}ROcV=LI*1L#+zO&qY52IQx!jK?h~g!#9|glIS{1%A z`%CiyY?!ZQfe+6$d6sei*`$5Q3cyk^RN+0vroyHX>Kj$&=d@+%SR;!!9Fz1QZZ%A5=bInwssW^^ zcIdY(JCdG3k~m?%OGgZ->Mv|A7aXjQ0StBubR@`C6;Dy3Dmzc?{4=O$Q4F5p6s=vY z=;!bt*8q=a&X0l#_e5WG#uiaZ(G0c-zk&sftxcYs#T3bh^%6!ALPK?n_O zw$gS-I@LnitE~~&HWt}=Iebg*P?pnBik_yqmU7kdpw0w@bLI(5hR)NLDvYt<2=K`R zw+HTQZU>+BVqxv%%G+*cL*)bhuwG7K4-9vOhegTr4&8aYDNL@%5FmefMwP4EdltOP z4hmQik%DdkLim*eRk4bLs!P^P;-OaMRZlTZ2sX8=^#$Mt9y~hn2B{XwmPF8=_K)iII4gkDHJ z2DrH1>)nRG*mZ?xyFMTQq7;nYoks$Imrxc^`s9RAKrJ>qrZ_|39|XboaizEs$|hr1 zD`Hq}?!F&#+i9U@H3*q490FMAYz;5Ks7aMqV0-@nNLqY<2fh;M6qX*1fyF!BC9s;tL8@uxj3Q!%r*NKLZL6Hp-8EiY1BpW_FM}xUZ za1GLOeC&f+uw~$98Lju0BPCxCtuQf!06 z!|=f7i09$*OtH?GcmDvh2g=f@PWs2@P+&X2Hue3BOhVXHywBB zDT240qFLb73jotI(DgV*jcoA$08yr|Wt3y|zdOoN1lOuem&~jC>NqikIr+9^{7(|* zG(`9a&+*V+%tR%B%M#?utG-B$ZPKFKw~6D{ZT|q<%yUzOXyM@f!ZQWkPl96^AMEuI z*+53K#ruav03HXKwK_n-O6bsdvTc77#7tBCgjizFg8P*F#*ehV$!h2gie7q%a4s+$ zo;=5G^nv0m032EQLK|CG$B9xGgicUW3X93v0ck?@7XwgD5b)x0&_#La?clOpw@Jzw2S_z)PPemRZ+MW71Z$1r}a|nRil~ zdxP;7cNfbWg5t6R$t=aeCDq&E;v0}A2R__{K=-BIaD2=+*qtr_{6%b{M!-#`*M?x( z02*jKL=&Oz2Mj{zLs2tJfa2n*ZH6H0jY2Adm`c#Tn54SjSnJGexGc7>K1SE#SPp^H zTtWEP-JhSSaoTuPj2mbJ9pe7sWS(exG)74n9irw_DlWId;a(#>%U1TXzBTb08iI>Z z2;$IL;CEfEMAjN^uSN0ul`t$#ZOy*sU<^+?H2(l0oY3+6boiG-{Y~NZ8a_B>hFdT3S-5)q2v6BIt7Mfmr7oW_c#ci(=EQCc0)wF6s9UuT(#!- z(=_0i!_a@o#`crA78Z96fL#uOl@MhpabRUy|?$Y4L5}3u1wKyNrAgc!XaQ7ET*Z#L zBYTp=XSTI{-~m(jQ04&J9Oka#R`_1CZw%p#nnwpw1iPxn`RWu3 zV)M>@zXVsH?5x}4%t5qZOXD*GDV+j^8E{f5WBGf;NZd;(d}5`WYxtwjX)`J`IVG0y zUi?mtM^vO0`yaV+VN=SX#_$hm{z{(_tR7XUoUn-4-ky^r6kLklR=<&})aKJk%v=;Y zT|Mmd!|2}ikzl4R?dTu5awQpIY+Jt(BDkYfdaL8aJL5f+Vtm06RAljAF!CsOueb7C z+qR92ejrbtv5feITmf=~_tfa>A2BI8IjU zQOsYvrZG*3@EFvsAy_{YUCRW+`?`px^$TYGO>&&g*Mc;8Bby=$frB9b0J6zw?_ylw z8ha-)15~;=HHSxjqK%-lP2Kk&I#^drpUlpiTX?vYsTcrU`+$~nT-;TG3`(ZfM26*yR^}&8Y)&`f`9;eA!r5*<&LS|Hn9F8BoxIh+4@5nnh?>%6Lz^xr0{My z)XvtRd)mVGOWa5h*SPLPAx#@r{SgauP=0p@S=c6?fZ$Mdy*D0MWN}>J?f1+$Tvwo(`AUFxMUCIF?kHO=(ZdKKLC`RK++d=V zx=tXM!IYw~e^@CHX{vMQ{e`D@3?s42FBc%sUG!o16UD0jUyi41+Qfvd4gE}W>^8TQ zf9ZkxT`lUbjt--fY{^W%hqw`Jn+8Bu+xT%jm@*X;sbo*KSq9Oboea0Eq$ z*5}Q8j)zdEh=c;T;`;IC4GkQ#ANB2rDc+d8qsOQa5s#y)Ggyxx^)wEp^7g)FN_USi z7gXmPDEBeo!sT}^s8UtSUIUnu#z98E$T@PTvOPPEU5i`G*!ERbN#eE$Hjtw1@Q0{K~CqMM=v>{o~hD*HGB$U|LS)Zlcn*`e|7sY&91w2G`q zgya|E)*D=GTWXjg#<@AF0R6=HlE^5SA1p?#zGNi*rtAdGJPD%~A0ySXcqO3b4 z?m1+aFegP0X_QbqOy8)60M^VTC8@|-ne)0FZQoqU!nnOF8m&2>_NUPT{hOnbWi3gtFSI z<;>4jw9n>SF;SZbk0b`+@=(hDLU_vkFaFE@%~wAy8Z^Km*d~i><539M4?)lFQg3MG z;(a`lqgZFt!g_NS+~(DNF8wgrf*NhMt?Crq1?7Jt%1fz>pkTbb#A!v1dG`f0?pvED zL`o18m9K-C*H8g3;M5np&~j~OmJAamq0#yxqj`k%n!X8^S2mMOkA|6)4JyAS%*3#> z$lLcQd|+^RdZ}3PRdXC0d+H|HC`akkGYBhV&$3n+X-o4xOQzMzy+=S2A?;5rGO*8( zxK8cK$q~*7;jl{K^DfDI5i1w+6vTk*R<{*tBUKl(7}H(*ANeR|@IDx24ua4itDpsX z(I=jw4l4@gx+0I1;jiL{MP zkgC2JW`Ys&ICzOb8Sur-DM%Itf#5xY-nfFY1-yGaGKa>auM8(lf?-m-2#&tky@#mq z{gDiRqpnXZUL(wjBovjxD_$4Zgvj=awmFbYQ zX-7RiVhYq8m9#+-2Z0{9bqCfWYdbknSNN5C28(N?h7O1e?Ra~IUf@~`wE{4p3r`r- zIw#On8CSqZ-9o2p&&icm*H3U505Z|b(mAB3*kyu2BK1a>zwu$v z>ln^YJbcP^Y9|K=#Ajqs;o04B7!LyaP~GCz$-pf{-)i zm6ff$`a5`wnFaW9A4nZ?l&$G!B6PuY)E?fyW$8{M+*<@8$B`x~+IS#34@NtsX?2PL zdLq~f%)!X=FuI8}Jp!KMM35L%y4_nb4gUbC_ZYKKHw*nz^X;$PNgYE9sPKgrDM~V68HcJ z%2|Mxj#IEtFm1L1+gayPA7~3e$PE%?=8U&{B01T^U|&!5nDB$tu zw{f|yC*XZ1I2PB!f5dbMTcCw0JdC$0NVdNRhvqgDVAj359^pK6-QC{TEUHDK1l+*9 zIQx&HPyR!$0p=xr2zdtq2aAk5xf#JOs?b zxV;1BS_&;?9p36LDhq38`zyRn)k%y%n#JuFUS98_KgOr@#_3Nv;W~z?O+9&k`vq$6 z8R{(pXd0q8bP?wYty^_s=0}#4*!3;zhM4eo1;bTfZ%fo9L$ucXlPIOa`HwU)NJ%QwxTPotR(B<;85hdp=?WluEHID{Sc`)4{{SHhb_A)g0Q}IJ-hqFJ!Lq9c>8t(9Qr={8hp*gl#aBJnk-4Il z)3d-q2_vt`?QMO^k)qyRpQ&fHrSh;GB4pDSZCsm)Vd#J2%g6b4|ig_nC~EbfOk48N(C5ftv7 zXVl-8$R7KEY^^vb%;q^Y*dyaOIOzFA_kfmc@OLaaH;EU&J|g8EYZCWz{4S~7R|mu$ zz!uG0VH*Y2+v*kCJKa_hV&1!SUa!d&*OIp`)v#ZoB3`nSg z@aG}qW?xY)V$f3wQfg)oEf>4Lj9W&MqLdo|U7Ok#eqaHxIWAVL0^881F zdgbbT+1Y$CRiSwpq+i8seUSlr@W?}UuE{&e)MZsA4KeE1V^LwNw~JVqn+ZQtI7y)f zA)s3p$AbL_xJwIGheyWz!>q9e1hfG1&YKcAq>KgMr?@UI-K$u9=$tu%PQmA|KtYc zOW+>W$9r;Ii zI+iu6ai}`TWsa&G$?DE|P-M^?r3_RCngTu0vo zHw2Zj>!A{n-*UdD=)E=n0NCS~B+WnUH1;gQAF^Aj`G?Az;Jhi~p_5fxW2%U`(|IG0 z_yixJ+G$+o5U~!y@5H_BD=BFAc1SHp!I;~qc8?c%CvAEA2Nema9*Fj zMkR|IpP2NV!j^|+f9hP;0Cn0C;*U68KY}ziv8moSsAF&wOm1RHP63DIddf8sKf(Y?5MfS?shS9th{xB+7J-*=0c zmhcoCcy&3zCp74K>RTsE0XJv8dxEP@9!Sj`raVo{b&60^^1zFf89Q4PumB2sOBKeI z#(Fae{{YwGXR*bKzK2uwI(`Q%u+lnf#}bAc5J`U$!B$ur8Pi-!QMf9L4n2`9{cH}r z+(O>Sz-U;OVWsJ3F^fTHyUbIdI$QzU53{WcFZ6j}A+#7%U{2zfC5Pt|fr-N=Kk*C1 zV+yo-B5(}~@wXhr0csY2=DGOPw+CfH`Ed;R77%=#`(m0jFNdf~ouUjUvxu&sspt>W zdT}2?7q=O==5jBiDE=c7Anj|EfxBY1+w7Go);5!)>MnFsQ8RV%0;ncXUn-3c5^}J3 z9V8UP1L&L1<(n7>r=aDWHnDE~kkY|`0rqNTBysDvW9P? zGMC0WB0WB~ocXZHMp30P49wsS&(w9>+GI9F4SwD|C3Vnra~^8PWicPoDnXW+5u^lO0@WsBV?CJV700H(dM}lr^Ttcz$;Z8%?5&z}gvaK3*U@BbeN4 zL~z1_g!dH;1@x>L+696$7la%olJ$vvolA5%*`Ci#tdKi`NJy{tTRZHC9aG$^Z7}eBMX3x-ujdC$nz>AAU z798bqagA!kAaKJtyOyDgtPgSIKpM2EIO3zSA&!-(R4iyQx7y|`t>+i#k{EAS?x57b zDjL)Rh9vgH62`8M<49Y~ABMLD7?G?Sz=|(%vPuCYKzL%CMVm*>B~IgHeYV0OAd! zAJp)yZ^1D_DY*3$8h%)4fF33#!7;)mHne63N)1%(X}C;@S_?9Vo+j1-N}-T1%len* zpK9w@rPV>B2rbBXmzu(plV5QqXb>LIa9>eIglepR_A0C~*E^3hyr6X(C|o%!_lQ2X z3xjPqeprd_@^tumj;gRxZh1&bq?V%r+1z@H!$&b)^DHXEpEESkeA)iW7vh(AZS0Hh z*0l%8d0-}|ROI~hAS;E6g(wcNd$=iFtvnB_-??r@!tXxZjLstyT#vj#3d&~rs3_*$ zCzZh}H(7iSL{`~W58G@I0)q*r?CKWi!mH>Ua5(ms2weiyxXVA_8YXQx`dxonT`Iw8us0AXKC%fFGg^Pu^P5ni}Quao* zOj6PXJgyXVlY!X;A2!$i8H@wK<4%*f3(T`Nd0!FM#=54?4<6W#2A)j~FVPiX!rJA3 z5s62Hd4dX$9%Ce+Z6Mm55qM^ZlJLq+bYm3xJ|Yw(q3$MQYI^1M z67nj!=sY}JsGvCe0sNYh6L|Mq^%ob-{cPwrtrhGFQ2IJ^?{ST0q2m2{2uXOvEB{RT{3ShWv z=ZHWOq3HF}C-2z#Bce%V{{XA%5u?eeL&iS@BZ=2l;~9C(Ewvyiw$`*bmVK-vgL!WJ z!B9Mbg;!d-reQX*wKa8(%22g=Rn{Nh`7vAy-uDsS3JT>8NrtR@+qq&lO1{j0A#w%* zkkn7%klDx$*DT2?yet+S4yEcxa=e!+&JiuE;-E(B<`8D8q3knWIhUoT1Q+OoSRW_H zQu5VUy!Q~?moEpkimXd1(vto8!u02i<1= zTUZ6afWY+DC3a&1(dP5)MA_^LpC@FlBY6+WnQV_pqiLRtlzJ%9CZ?<&i}lKwSYw_#R&x_Xe~z*}ws> zQrZE5&7JZoY;IR3-MIOoPF*-7pCdv3KzK(K{kX80{xYmqLL4dUYK|g6RTq(Bs5#Ed*0} zaVR{~2XonQ?yu7aO7*w7Uo;{17x1jv`mbpiUE&ooCgGUo+9 z`4A!#9j6sh)WI#O$5Oj`8*+G*R$0B)pQ)Vc5enx!fB-WRh;q?4bKbA!|C`72+`M;98Feep~BDzR8NWXBg9I)A4{mLNkbhTdB6B)H}@e`9s z?R}?F9U73UA|>|M$XOyuAuJdI`m}_r~ulgf#sVI zRBzMZ{{UmwVgiG+wDYoJcs_J&ex1PCU)W2(xwr83E#TWZ#>@1vX5hnDUXdo`A)e>N z-o(Gmms^g|?C^tpHHGs~`CR%doIndjBTe7+2}fsX$P=kTL=ld+gc4R+T|PX+W;?!b z{!Ij6W0;S(b7tbtCwr~H478XCI(hCXyS8jP4$@QZZ=05kLdnQOA1CT*7-yhe<|<7V zWC3*bxOZD!-A@U`%=!WDchWA6KI6gv0OiWiu&ZNVY^i!Cixui7uuRr`t-(E&$j;7qjSJ1W=R_zG%5*S*WHZis?xQ$jpU!IbRhC%k|f>qwg?_QDd$9vigH2 z93X$bB_cTyn8F=&Mxx*?drh**dj|2);fYWUmK#5)!1Tk7N0RCb14Z>}-Cr|4Bmq|C z%hzrjn~!lKWMI{~PRVbztf0CM-VDKnP`G&>ZTBALc}1L_C$r)fa1x~?lxSU%+msvs z08=#!WvN0^_KnO19O|<|OlN~Yp|i)#1|^(@(Ot@iA&#oGe2DgowS`U8t_3>E^hRQQ zV)apOrcgWO)Dw~dtsN`!xHy+o18mS8uTeImu8*#N0vtx;5O@X&X_k)I-Ao6uT!E|Z z=T_Ih1C@FqgetV#{{WFoqFc5i;=|^wg81qa-zsp$0u+q_$>Q!5syva}{vAv=4A?Cj z={t!iV5_KJ`DOJi<**@ldq1z3!G;Ssm6A6!u!rVeG)lBDPKTYaY$FglyMk6AINk7b z?qudWR3LIzoa<~S@7er_sFWO;jdm&}j`D~jxfoyzj3DBW43#J$2S7tl7c zoL;Gc-v0oCCWw1XpX@3c6j^1r1Pln&0B-w?ycn}6Z{hvHU>tui`|zNd2e_eTHZ8gm zkFd7h{ID*hThfo7=07Vc_<@X{s1`#@{%Q%C0oXh+=jQ>#znPK%t%GbfZt>bP_R6aQ zdZpyxfEuPfn!1LUILEU7>H~tJIjwpoJ(Ci}fFB&ioE8e~{lQ6MeOeJVhtWcFj>%>J z0MG|h0GUy)RZT7`rBC>dUA3y9;-Q&Z2j%lGm=Y5=1v@vB3(Qy((kXC@#8S?p!;p47LT@X>dWS3Eg)9pyUA-O% zR;v`j<^IajVnL)<4>8ns0m}8SQifIK%YhWO)!&N5aE_N^l89GNJRWy23Qf0FS3F8) z3X!2~cn|DM#eOCr!>bNj;hFqd{iXNfaRk+ET?b5H=vYIe4<@XUtongLGCL0lb=1DQ zGVL7KKdi}8GdQVyOS0R~xmrXvo(ynt6nIjKdTyneD7Yl}4>MEXw-w)+lK>F)gZU`V zTzu!x@d`AwF4|ury+cCwo=wVEw_J!Um$`rn^RC7YGg6xi--%K~phvl6N%=rTByOYC8fv^jXVq1Bzc7>HfjK-1My*EM1B-v+3Pspc zmopQTwRPqClsAD>VqBmBHFZZU86hfYg;C~Ez+qlkY>lf;tj7NUJ67x2irNy@=Jxr3 z&AB$ANlG=^H;%?F#2iiM9O77msr{63b2|=cD11eToMmwZfZMPl^p%#G25*Fb5GDK; zzU}}U{jmF$mICa;7fH;Qs(+0J)H?&#e9-AVr0oW~=QfeNN?5 z>5H-JFSoemQ>a+H{P!`|oM>?9Q<(T`#JNJDq{xvV*g4i8uz;z19Z0FCULLv+v+7(k z7;!0!wsv%o$|C_qt*6--)tak3N45Bi(Y1#USmmq)<5Ft(ro0g4T7#Z_?*lK$T7_@i z4`l^fKGtRjaW4h^%Ya4ZC;2qeOUm>dtV6y4^`2hXV6iY*@D8d0QW`GrqOKUva0(g5 z*=S96VBvWqMoLvspgJ#n7ClaYP>niIF1G2ygz5+50&n%ToGA7+7_>xmn;_v%?0%saYssS z4rCy1M57zL`0)igTR#y8EB;ic3!`v9A>o!{G3kfg7QJFq4*~tb7fR_t+VFl@jbOtO z_ME)49uzYMH1x}(4IR<9;seAJy9agSs5~@*zF#mc#H_N129I^$n1?8K2XPkFgf(>; z#@L7vRB@?!QULw5@dlndfl9Xhw+U_4qRb^1?Ee6cV#I{Qg}hARF?;}gIgS?S4>T$( zOv|bo+QmT}B(KHb;vl3uGpS<6&q1^FK@N!K^?TWhTGv@$UZMCv1#sP7{KjIc1VdEn z5g=^Rx;#r^MlpyBn_zG_3{DW+^8`a2W1#sM z4gMYM{mhWB@E!Tke0n1^2#P3LxT?9jN@Y%cm|qcXyBE~5{{ZMYh-0FRnlGppBgfKN zH^O!{BXGJkP#2f!4Mc?K4Xis7)gKdL*uyGw2uhC>>-iHlUjZBkN2yJv+{ZiS4czT* z0jigS4E()7z4;%9#1w=DQtf-VVxgS5Aza+Y!~Xzmy&FUe^L(iyr@*mbcpWh#0Jwh! z$ly0L3z~7C)OcyHZiD?`HDyTJ&#}Z}#^>yFEl?JQpOlzp6FA=HLkb%0V^xX*sO(`I zraiT{?povqb~lD%*;{|*W&@H3GfhG*n|}rug|#NGsxx)q#3n5|mt0^3dtPOlh@!T7 z)E6S=E0tbf5}^A7@>Le`NIDquU#7#RG=0`6X&gUfb2 zVppBE=X^YqEdbZ!G2ERBVeRc&hFFTny5=a0pL1-xLD@F-E{#vbzcKk8G9i0vC6~tN#Gl zOhVB?ggh{IsslqYcjpj*WGDqak=fgZ=yCNg2L}y_i}rH+xOJ^596-NKagxvMqFkjF zeh_ckyC;9@ir|Rt-ak&`0B}WL5ji2)0wbj2SjM!0&&)piYs=f^fP~wcS-^80B9^c< z<*&@K!Q`5V6H)mg(D4uX8>qkwYS10@1bQ~=l&&rL zqp55-qVw|rp*~M_I^TK z@E5lAevXc1y>&NT<^(q&59tJMa98O7qBL_bmu2NC#lE6afNX`m2a$jn{n^5hdAMr; z2=rOWhty3u3W&dG`jp{|MZT7@(-oCa3uU^gm3oA#D9xMQof~|?xKIvP{f|&`aVI}d zU9zi?6T=VhGOGwMwllaZkY_?T{4&LW8F1}7dxCTi zm!kgwhF(f5OSU=bHt@%{v3p@9Va{|vO-c!Fva6Ete$vGTq%mJ@WH+0|_CW`EKt{fC zlYog|2#V~+-WANECeXa3ViVBH{;il^t``(xX=(>Udx1_%vW7i7jWo7iPy|w_&$|dd z(7i6&vn8a6lJM45qwdB07N4fPoo?pJkoJLbeW`U|J2aMVhYTk!;d1bc=hxFdJEP zimc!+?t}XpeFdxB8!1#Z^AQNqMrqP}BDOlcez|b&Rv7TgAOPQKI9Y&DB8|F%5Fs}wZm-O| z2#q@;B(VzcOA{hn9V@2?#K@7!$iKsK+km)gS)N+aSYc+;iAKzK>Sa%wqMY=6MW99l zz`esxJ>o~1M;D~=n;Vskr#O2%j4dDwhp-v>Aa4{JzSgz#D@NNgf}MnQI-;Grml_&6 zqKSY9p@uwSIjYA!Jf(MfkIu8G4^bAFv~n`B8$C8r0E(z~w@(nYn3L^n_xVUTB{8ZX zw~JouzS*_Pv)3}b8Ueyme&S$;HUYU`NPi^;z3i8O9U52pD`-Y>{{XmmQ}inT0Fa?{ z4gUZi!F|VDWKA1hkl5y7_+=ZeU-A~+n=SsnA<|v1OUFMK1bQ4pn!3>7n2!a%oe`1C z-+Z)uAGq!?_!~kpK2kCq)T^Aaam)=a9^hD2*;k)+4>JA&e5}%enPt)2EkRhv6o!mx z4ZsHKD8q5$V&zKL<}}`D7g1bousOMqm_2yRdSfEbV`6xKZ+71=)l+ZvigmD21Mvq7PF51lBFQ=HqSPYh8 zb)&C0H6&Pa{7OYqHva$+$xXUAH3;UD&&~Ernc}d60?cJU;T63&<$AooGVCqA zoMw-e#klt>M9V+n9mUPuO}rjuMxbb15BJQ=vJ}vMplLj=E`x{MZ0JCJvz8rwfUXBL z{6!E-h8kN*YbN5s6vB&)_&p!&!nIM0dh>`V?gf_d-oFzOAsvCr_PJ$*7#|dlkA_~_ zZGmS6w@`t*f$N!#62r_kVgbpH{6@K?gCHaWJHZk|){C=ETCL0hwwV zUF>Cq=rj)rb4qhXc*Ddtd!?Le8qmERzF|N>ye|o`DLDa{Kq{$v$1?D2-$iZ}+-1JV z_KFw~t`|e$9)UCs91&W(Jb{XZf)l}i(ui)d$Ec%#jW`*Uq%N=W0K-QuOm=}>(}$Im z9Tap71H`5YLdwU7WKasr%J5%4RVlJ=l$ZfWsEiwnKRiL=5214`1P=Yjf?dM~y*9kC zRyiftQI+t0!n{fkSVz+Z*&US%1AbvhTP1-w7$DmMw?f&XCh@Y_eZkKu9K>|yw5im- zK%2d!$UGJoiAZo%eN5s7=zAhP7O76=3hdLMGsJ2HhK}Y=EG(9emA?>Z2}Rzxm*06V zAX-9Meu#)`GU&ZPXPEXSoFQ9s_zQR-lF(x5qAqrv*OM^luJZo?$z^A9((3t^tsLvG zKM*>t>_89!M?98ZwLpHM>mZ3W>TO4BuAy}YS+y1W%mwQs=*_?)oKl(QV%znltXqN*AX&0gC0?i^A(6f)U8fu4+e)KF}&JH0&Z6set#<` z!#237lFnhb_(Z8?p{upq4x!psXo-?S3klbsF;&RUhRI=5D?X;=8goUuigdP}VArY5 zr4G3q)bqGsJ5;f1oHep-0S&p#uqOy=E*fQQR({Kg?UduRM>lwg@9jv#j>~WT7-M*H s*DdwyQk&X>d;(UycX?+=h)-p`B%<(4*y>mi${*15`Jey(00RL3*`2dOiU0rr diff --git a/apps/web/quizz-site/ratel.jpeg b/apps/web/quizz-site/ratel.jpeg deleted file mode 100644 index 74285a743105719e762e3df030bfb16060528c60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84660 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�UpmNky^Ce%e2l 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%0Ax_y&Ii+Fm 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 diff --git a/apps/web/quizz-site/saiga.jpeg b/apps/web/quizz-site/saiga.jpeg deleted file mode 100644 index 783c2e5cead2355800ee964f9a5a403ee30dae0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122266 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
^sj<5@?TYE81u7h=+5W{sLLXLzkR9WWDMg?sA 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 I00RL3*}P3cga7~l diff --git a/apps/web/site/app.js b/apps/web/site/app.js index d6645d8..fe6b978 100644 --- a/apps/web/site/app.js +++ b/apps/web/site/app.js @@ -1,1785 +1,1643 @@ -/* Black Metal Map UI — clusters/heat/timeline/filter/sort/highlight */ -/* Performance-optimized with viewport-based loading */ - -const API_BASE = "https://bm.nicolasfryder.ovh"; - -// --- i18n --- -const SUPPORTED_LANGS = ["fr", "en", "de", "es", "it", "pl", "nl", "ro", "pt", "cs", "sv", "hu", "da", "fi", "sk", "hr", "sl", "lt", "lv", "et", "nb"]; - -function detectLang() { - const langs = navigator.languages?.length ? navigator.languages : [navigator.language || "en"]; - for (const l of langs) { - const code = l.split("-")[0].toLowerCase(); - if (SUPPORTED_LANGS.includes(code)) return code; - } - return "en"; -} - -let currentLang = localStorage.getItem("lang") || detectLang(); - -function t(key) { - return window.LOCALES?.[currentLang]?.[key] ?? window.LOCALES?.["en"]?.[key] ?? key; -} - -function applyI18n() { - document.documentElement.lang = currentLang; - document.querySelectorAll("[data-i18n]").forEach(el => { - el.textContent = t(el.dataset.i18n); - }); - document.querySelectorAll("[data-i18n-placeholder]").forEach(el => { - el.placeholder = t(el.dataset.i18nPlaceholder); - }); - // Sort select options (can't use data-i18n on options in all browsers) - const sel = document.getElementById("sortSelect"); - if (sel) { - [["sort_az",0],["sort_status",1],["sort_genre",2],["sort_country",3],["sort_year",4]].forEach(([k,i]) => { - if (sel.options[i]) sel.options[i].text = t(k); - }); - } -} -const DARK_TILES = "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png"; -const DARK_ATTRIB = '© OpenStreetMap contributors © CARTO'; - -// --- Configuration --- -const USE_VIEWPORT_LOADING = true; // Enable viewport-based loading -const INITIAL_LOAD_LIMIT = 5000; // Initial bands to load for filters -const VIEWPORT_DEBOUNCE_MS = 300; // Debounce for viewport changes - -// --- State --- -let allBands = []; // all loaded bands (geocoded + non geocoded) -let geocodedBands = []; // subset lat/lon ok -let noLocationBands = []; // subset missing coords -let viewportBands = []; // bands in current viewport - -let filtered = []; -let markersById = new Map(); // ma_id -> marker -let listElById = new Map(); // ma_id -> element -let coordIndex = new Map(); // "lat,lon" -> bands[] - -let heatLayer = null; -let clusterLayer = null; -let currentMode = "clusters"; - -// All heat points (for full heatmap even when viewing clusters) -let allHeatPoints = []; -let heatPointsLoaded = false; - -const statusEnabled = new Map(); -const genreEnabled = new Map(); -const countryEnabled = new Map(); -const macroGenreEnabled = new Map(); -const themeEnabled = new Map(); - -let yearRange = { min: null, max: null }; // global -let yearFilter = { min: null, max: null }; // current - -let macroActiveCount = 0; - -// Facet data from server (for filters) -let facetData = null; - -// Loading state -let isLoadingViewport = false; -let pendingViewportLoad = false; -let currentViewportData = []; - -// --- Utils --- -const $ = (id) => document.getElementById(id); -const appEl = $("app"); - -async function loadGoatCounterFooterStats() { - const totalEl = document.getElementById("gcTotal"); - const monthEl = document.getElementById("gcMonth"); - if (!totalEl || !monthEl) return; - - // 1er jour du mois courant (ce mois-ci) - const d = new Date(); - const yyyy = d.getFullYear(); - const mm = String(d.getMonth() + 1).padStart(2, "0"); - const startOfMonth = `${yyyy}-${mm}-01`; - - const base = "https://metalfromeurope.goatcounter.com/counter/"; - const totalUrl = `${base}TOTAL.json`; - const monthUrl = `${base}TOTAL.json?start=${encodeURIComponent(startOfMonth)}`; - - try { - const [t, m] = await Promise.all([ - fetch(totalUrl, { cache: "no-store" }).then(r => (r.ok ? r.json() : Promise.reject(r.status))), - fetch(monthUrl, { cache: "no-store" }).then(r => (r.ok ? r.json() : Promise.reject(r.status))), - ]); - - // GoatCounter renvoie `count` comme string formatée (séparateurs milliers). :contentReference[oaicite:2]{index=2} - totalEl.textContent = t.count ?? "—"; - monthEl.textContent = m.count ?? "—"; - } catch (e) { - console.warn("GoatCounter footer stats failed:", e); - totalEl.textContent = "—"; - monthEl.textContent = "—"; - } -} - -// Debounce function for search -let searchDebounceTimer = null; -function debounce(func, delay) { - return function(...args) { - clearTimeout(searchDebounceTimer); - searchDebounceTimer = setTimeout(() => func.apply(this, args), delay); - }; -} - -function escapeHtml(s) { - return String(s ?? "").replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); -} - -function norm(s) { - if (s == null || s === undefined || s === "") return ""; - return String(s).trim(); -} - -function parseYear(val) { - if (val == null) return null; - const n = Number(val); - if (Number.isFinite(n)) return n; - const m = String(val).match(/(19|20)\d{2}/); - return m ? Number(m[0]) : null; -} - -function splitThemes(val) { - if (!val) return []; - if (Array.isArray(val)) return val.map(norm).filter(Boolean); - return String(val).split(/[,;/]/).map(norm).filter(Boolean); -} - -function currentQuery() { - return norm($("q").value).toLowerCase(); -} - -function bandMatchesQuery(b, q) { - if (!q) return true; - const themes = Array.isArray(b.themes) ? b.themes.join(" ") : ""; - const hay = `${b.name} ${b.genre} ${b.status} ${b.country} ${b.location_text} ${themes}`.toLowerCase(); - return hay.includes(q); -} - -function bandMatchesStatus(b) { - const s = norm(b.status); - if (!s) { - // If no status, check if "Unknown" is enabled - if (!statusEnabled.has("Unknown")) return true; - return statusEnabled.get("Unknown") === true; - } - if (!statusEnabled.has(s)) return true; - return statusEnabled.get(s) === true; -} - -function bandMatchesCountry(b) { - const c = norm(b.country); - if (!c) { - // If no country, check if "??" is enabled - if (!countryEnabled.has("??")) return true; - return countryEnabled.get("??") === true; - } - if (!countryEnabled.has(c)) return true; - return countryEnabled.get(c) === true; -} - -function bandMatchesMacroGenre(b) { - if (macroActiveCount === 0) return true; - const g = norm(b.genre).toLowerCase(); - if (!g) return false; - return MACRO_GENRES.some(m => macroGenreEnabled.get(m.key) === true && m.terms.some(t => g.includes(t))); -} - -function bandMatchesGenre(b) { - if (!bandMatchesMacroGenre(b)) return false; - const g = norm(b.genre); - if (!g) { - // If no genre, check if "Unknown" is enabled - if (!genreEnabled.has("Unknown")) return true; - return genreEnabled.get("Unknown") === true; - } - if (!genreEnabled.has(g)) return true; - return genreEnabled.get(g) === true; -} - -function bandMatchesTheme(b) { - if (!themeEnabled.size) return true; - const allOn = Array.from(themeEnabled.values()).every(v => v === true); - if (allOn) return true; - const tokens = Array.isArray(b.themes) ? b.themes : []; - if (!tokens.length) return false; - return tokens.some(t => themeEnabled.get(t) === true); -} - -function bandMatchesYear(b) { - const y = b.formed_year; - - // If no filter is set, pass all - if (yearFilter.min == null || yearFilter.max == null) return true; - - // If yearRange not initialized yet, pass all - if (yearRange.min == null || yearRange.max == null) return true; - - // If filter is at full range, pass all (including those without years) - const isFullRange = (yearFilter.min === yearRange.min && yearFilter.max === yearRange.max); - - if (isFullRange) { - return true; - } - - // If user has narrowed the range, only show bands with valid years in range - if (!Number.isFinite(y)) { - // Band has no year and user has filtered by year -> exclude - return false; - } - - return y >= yearFilter.min && y <= yearFilter.max; -} - -function keyFromLatLon(lat, lon) { - const la = Number(lat).toFixed(6); - const lo = Number(lon).toFixed(6); - return `${la},${lo}`; -} - -const MACRO_GENRES = [ - { key: "Black", terms: ["black"] }, - { key: "Death", terms: ["death"] }, - { key: "Doom/Stoner/Sludge", terms: ["doom", "stoner", "sludge"] }, - { key: "Electronic/Industrial", terms: ["electronic", "industrial", "electro"] }, - { key: "Experimental/Avant-garde", terms: ["experimental", "avant", "avant-garde", "avantgarde"] }, - { key: "Folk/Viking/Pagan", terms: ["folk", "viking", "pagan"] }, - { key: "Gothic", terms: ["gothic"] }, - { key: "Grindcore", terms: ["grind"] }, - { key: "Groove", terms: ["groove"] }, - { key: "Heavy", terms: ["heavy"] }, - { key: "Metalcore/Deathcore", terms: ["metalcore", "deathcore"] }, - { key: "Power", terms: ["power"] }, - { key: "Progressive", terms: ["progressive", "prog"] }, - { key: "Speed", terms: ["speed"] }, - { key: "Symphonic", terms: ["symphonic"] }, - { key: "Thrash", terms: ["thrash"] }, -]; - -// --- API --- -async function apiGet(path) { - const url = `${API_BASE}${path}`; - const r = await fetch(url, { mode: "cors" }); - if (!r.ok) throw new Error(`API ${path} failed: ${r.status}`); - return await r.json(); -} - -async function loadStats() { - // tolérant : si /api/stats n'existe pas encore, on ignore - try { - const j = await apiGet("/api/stats"); - if (j && j.ok) { - $("total").textContent = String(j.total || 0); - $("geocoded").textContent = String(j.geocoded || 0); - $("noLocCount").textContent = String(j.no_location || 0); - } - } catch (_) { - // Silently ignore stats errors - } -} - -/** - * Load facet data for filters (fast, minimal data) - */ -async function loadFacets() { - try { - const j = await apiGet("/api/facets"); - if (j.ok) { - facetData = j; - console.log("Facets loaded:", { - statuses: j.statuses?.length, - countries: j.countries?.length, - genres: j.genres?.length, - yearRange: j.year_range - }); - } - } catch (e) { - console.warn("Failed to load facets, will compute from bands:", e); - } -} - -/** - * Parse band data from API response - */ -function parseBandData(x) { - let status = x.status || x.data?.status || x.data?.band_status || x.data?.status_label; - - return { - ma_id: Number(x.ma_id), - name: norm(x.name), - url: x.url || (x.data?.url) || (x.data?.band_page?.url) || null, - country: norm(x.country || x.data?.country), - status: norm(status), - genre: norm(x.genre || x.data?.genre || x.data?.genres || x.data?.style), - themes: splitThemes(x.themes || x.data?.themes || x.data?.theme || x.data?.thematic), - location_text: norm(x.location_text || x.data?.location_text || x.data?.location), - formed_year: parseYear(x.formed_year ?? x.data?.formed_year ?? x.data?.formed ?? x.data?.formation_year ?? x.data?.year_formed), - lat: (x.lat == null ? null : Number(x.lat)), - lon: (x.lon == null ? null : Number(x.lon)), - // Localisation précise (band_locations) : présent quand le point vient - // d'un step géocodé plutôt que du point unique du groupe. - location_raw: x.location_raw != null ? norm(x.location_raw) : null, - step_label: x.step_label != null ? norm(x.step_label) : null, - data: x.data || {}, - geocoded_at: x.geocoded_at || null, - }; -} - -/** - * Load initial sample of bands for quick startup - */ -async function loadBands() { - // Load a limited set initially for faster startup - const limit = USE_VIEWPORT_LOADING ? INITIAL_LOAD_LIMIT : 200000; - const j = await apiGet(`/api/bands?limit=${limit}`); - const items = j.items || j.bands || []; - - console.log(`Loaded ${items.length} bands initially`); - - allBands = items.map(parseBandData); - - geocodedBands = allBands.filter(b => Number.isFinite(b.lat) && Number.isFinite(b.lon)); - noLocationBands = allBands.filter(b => !(Number.isFinite(b.lat) && Number.isFinite(b.lon))); - - // Update counts - $("total").textContent = String(allBands.length); - $("geocoded").textContent = String(geocodedBands.length); - $("noLocCount").textContent = String(noLocationBands.length); -} - -/** - * Load all heat points for the full heatmap (done once in background) - */ -async function loadAllHeatPoints() { - if (heatPointsLoaded) return; - - try { - console.log("Loading all bands for heatmap..."); - const j = await apiGet("/api/bands?limit=200000"); - const items = j.items || []; - - allHeatPoints = []; - - // If allBands is empty, populate it - if (!allBands.length) { - allBands = items.map(parseBandData); - geocodedBands = allBands.filter(b => Number.isFinite(b.lat) && Number.isFinite(b.lon)); - noLocationBands = allBands.filter(b => !(Number.isFinite(b.lat) && Number.isFinite(b.lon))); - } - - // Index by coords for heatmap intensity - const coordCounts = new Map(); - - for (const x of items) { - const lat = x.lat == null ? null : Number(x.lat); - const lon = x.lon == null ? null : Number(x.lon); - - if (Number.isFinite(lat) && Number.isFinite(lon)) { - const key = `${lat.toFixed(4)},${lon.toFixed(4)}`; - coordCounts.set(key, (coordCounts.get(key) || 0) + 1); - } - } - - // Convert to heat points - for (const [key, count] of coordCounts) { - const [lat, lon] = key.split(",").map(Number); - allHeatPoints.push([lat, lon, count]); - } - - heatPointsLoaded = true; - console.log(`Loaded ${allHeatPoints.length} unique heat points from ${items.length} bands`); - - // Update stats - $("total").textContent = String(items.length); - $("geocoded").textContent = String(geocodedBands.length); - $("noLocCount").textContent = String(noLocationBands.length); - - // Rebuild heatmap if in heat mode - if (currentMode === "heat") { - buildHeatLayer(allHeatPoints); - } - } catch (e) { - console.error("Failed to load heat points:", e); - } -} - -/** - * Load bands for current viewport from server - */ -async function loadViewportBands() { - if (!USE_VIEWPORT_LOADING) return; - if (isLoadingViewport) { - pendingViewportLoad = true; - return; - } - - isLoadingViewport = true; - - try { - const bounds = map.getBounds(); - const zoom = map.getZoom(); - - // Expand bounds slightly to preload edges - const expandFactor = 0.2; - const latDiff = (bounds.getNorth() - bounds.getSouth()) * expandFactor; - const lonDiff = (bounds.getEast() - bounds.getWest()) * expandFactor; - - const bbox = [ - bounds.getWest() - lonDiff, - bounds.getSouth() - latDiff, - bounds.getEast() + lonDiff, - bounds.getNorth() + latDiff - ].join(","); - - // Build query params for filters - const params = new URLSearchParams({ - bbox, - zoom: String(Math.floor(zoom)) - }); - - // Add active filters - const activeStatuses = Array.from(statusEnabled.entries()) - .filter(([k, v]) => v) - .map(([k]) => k); - if (activeStatuses.length && activeStatuses.length < statusEnabled.size) { - params.set("status", activeStatuses.join(",")); - } - - const activeCountries = Array.from(countryEnabled.entries()) - .filter(([k, v]) => v) - .map(([k]) => k); - if (activeCountries.length && activeCountries.length < countryEnabled.size) { - params.set("countries", activeCountries.join(",")); - } - - if (yearFilter.min != null && yearFilter.max != null) { - if (yearFilter.min !== yearRange.min) params.set("year_min", String(yearFilter.min)); - if (yearFilter.max !== yearRange.max) params.set("year_max", String(yearFilter.max)); - } - - // Add genre filter if macro genres are active - if (macroActiveCount > 0) { - const activeTerms = MACRO_GENRES - .filter(m => macroGenreEnabled.get(m.key) === true) - .flatMap(m => m.terms); - if (activeTerms.length) { - params.set("genre", activeTerms[0]); // API supports single genre filter - } - } - - const url = `/api/clusters?${params.toString()}`; - console.log("Loading viewport:", url); - - const j = await apiGet(url); - - if (j.ok) { - currentViewportData = j.items || []; - - if (j.type === "bands") { - // High zoom: got individual bands - viewportBands = currentViewportData.map(parseBandData); - rebuildLayersFromBands(viewportBands); - } else { - // Low zoom: got clusters - rebuildLayersFromClusters(currentViewportData); - } - - $("count").textContent = String(j.count || currentViewportData.length || 0); - } - } catch (e) { - console.error("Failed to load viewport bands:", e); - } finally { - isLoadingViewport = false; - - if (pendingViewportLoad) { - pendingViewportLoad = false; - setTimeout(loadViewportBands, 100); - } - } -} - -/** - * Create a cluster marker (zoomable, not final location) - * These have a dashed border to indicate they can be zoomed - * Burgundy/dark red color, always white text - */ -function createClusterMarker(lat, lon, count, bands) { - // Size based on count (logarithmic scale) - const size = Math.min(24 + Math.log2(count + 1) * 8, 55); - - // Constant burgundy/dark red color for all clusters - const color = 'rgba(120, 40, 60, 0.92)'; - const borderColor = 'rgba(180, 80, 100, 0.9)'; - const textColor = '#fff'; - - // Create custom div icon with count - dashed border indicates "zoomable" - const icon = L.divIcon({ - className: 'cluster-marker cluster-zoomable', - html: `
${count > 999 ? Math.round(count/1000) + 'k' : count}
`, - iconSize: [size, size], - iconAnchor: [size/2, size/2] - }); - - const marker = L.marker([lat, lon], { icon }); - - // Store data for click handling - marker.__bands = bands; - marker.__count = count; - marker.__isCluster = true; // Flag to identify as zoomable cluster - - // Click handler - always zoom for clusters - marker.on("click", (e) => { - L.DomEvent.stopPropagation(e); - map.setView([lat, lon], map.getZoom() + 2, { animate: true }); - }); - - return marker; -} - -/** - * Create a location marker (final level - shows popup with all bands) - * These have a solid border and bright red color to indicate they show details - */ -function createLocationMarker(lat, lon, count, bands, locationName) { - // Size based on count (smaller than clusters) - const size = Math.min(18 + Math.log2(count + 1) * 6, 42); - - // Bright red color for final locations - let color, borderColor; - if (count === 1) { - color = 'rgba(180, 30, 30, 0.9)'; - borderColor = 'rgba(255, 100, 100, 0.9)'; - } else if (count < 5) { - color = 'rgba(198, 26, 26, 0.9)'; - borderColor = 'rgba(255, 120, 120, 0.9)'; - } else if (count < 20) { - color = 'rgba(210, 50, 50, 0.9)'; - borderColor = 'rgba(255, 150, 150, 0.9)'; - } else { - color = 'rgba(220, 80, 80, 0.9)'; - borderColor = 'rgba(255, 180, 180, 0.95)'; - } - - // Create custom div icon with count - solid border indicates "clickable for details" - const icon = L.divIcon({ - className: 'cluster-marker cluster-location', - html: `
${count}
`, - iconSize: [size, size], - iconAnchor: [size/2, size/2] - }); - - const marker = L.marker([lat, lon], { icon }); - - // Store data - marker.__bands = bands; - marker.__count = count; - marker.__isCluster = false; // Flag to identify as final location - marker.__locationName = locationName; - - // Build popup HTML with ALL bands (scrollable) - const bandListHtml = bands.map(b => { - const maUrl = b.url || (b.ma_id ? `https://www.metal-archives.com/bands/x/${b.ma_id}` : null); - const genre = b.genre || '—'; - const status = b.status || '—'; - const year = Number.isFinite(b.formed_year) ? b.formed_year : '—'; - - if (maUrl) { - return `
-
${escapeHtml(b.name || 'Unknown')}
-
${escapeHtml(genre)} · ${escapeHtml(status)} · ${year}
-
`; - } - return `
-
${escapeHtml(b.name || 'Unknown')}
-
${escapeHtml(genre)} · ${escapeHtml(status)} · ${year}
-
`; - }).join(""); - - const popupHtml = ` -
-
- 📍 ${escapeHtml(locationName || t('location_fallback'))} - ${count} ${count === 1 ? t('group_s') : t('group_p')} -
-
- ${bandListHtml} -
-
- `; - - // Bind popup - marker.bindPopup(popupHtml, { - maxWidth: 380, - maxHeight: 400, - className: 'location-popup' - }); - - // Click handler - update sidebar list AND open popup - marker.on("click", (e) => { - L.DomEvent.stopPropagation(e); - const gLabel = count === 1 ? t('group_s') : t('group_p'); - const hint = locationName ? `${count} ${gLabel} — ${locationName}` : `${count} ${gLabel}`; - renderList(bands, hint); - // Small delay to ensure popup opens correctly - setTimeout(() => marker.openPopup(), 10); - }); - - return marker; -} - -/** - * Check if all bands share the same location_text - */ -function bandsShareLocation(bands) { - if (!bands || bands.length === 0) return false; - if (bands.length === 1) return true; - - const firstLoc = norm(bands[0]?.location_text || ''); - if (!firstLoc) return false; - - return bands.every(b => norm(b?.location_text || '') === firstLoc); -} - -/** - * Rebuild layers from cluster data (server-side aggregated) - */ -function rebuildLayersFromClusters(clusters) { - markersById.clear(); - coordIndex.clear(); - clusterLayer.clearLayers(); - - for (const cluster of clusters) { - const { lat, lon, count, sample_bands, location_text } = cluster; - - if (!Number.isFinite(lat) || !Number.isFinite(lon)) continue; - - // Parse sample bands - const bands = (sample_bands || []).map(b => { - if (typeof b === 'string') { - try { return JSON.parse(b); } catch { return null; } - } - return b; - }).filter(Boolean); - - const bandCount = count || bands.length; - - // Check if all bands share the same location - const allSameLocation = bandsShareLocation(bands); - const locationName = allSameLocation ? (location_text || bands[0]?.location_text || null) : null; - - // Use location marker (popup) if all bands share same location - // Use cluster marker (zoom) if bands come from different locations - const useLocationMarker = allSameLocation; - - const marker = useLocationMarker - ? createLocationMarker(lat, lon, bandCount, bands, locationName) - : createClusterMarker(lat, lon, bandCount, bands); - - clusterLayer.addLayer(marker); - - // Store reference for each band in cluster - for (const b of bands) { - if (b.ma_id) markersById.set(b.ma_id, marker); - } - } - - if (currentMode === "clusters") { - if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); - } - - $("unique").textContent = String(clusters.length); - - // Render list with visible bands - const visibleBands = clusters.flatMap(c => c.sample_bands || []) - .map(b => typeof b === 'string' ? JSON.parse(b) : b) - .filter(Boolean); - renderList(visibleBands.slice(0, 200)); -} - -/** - * Rebuild layers from individual band data - */ -function rebuildLayersFromBands(bands) { - markersById.clear(); - coordIndex.clear(); - clusterLayer.clearLayers(); - - // Index by coords - for (const b of bands) { - if (!Number.isFinite(b.lat) || !Number.isFinite(b.lon)) continue; - const k = keyFromLatLon(b.lat, b.lon); - if (!coordIndex.has(k)) coordIndex.set(k, []); - coordIndex.get(k).push(b); - } - - for (const [k, coordBands] of coordIndex.entries()) { - const [la, lo] = k.split(",").map(Number); - - if (!Number.isFinite(la) || !Number.isFinite(lo)) continue; - - const locationName = coordBands[0]?.location_text || null; - - // Always use location marker for individual bands (final level) - const marker = createLocationMarker(la, lo, coordBands.length, coordBands, locationName); - - for (const b of coordBands) markersById.set(b.ma_id, marker); - - clusterLayer.addLayer(marker); - } - - if (currentMode === "clusters") { - if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); - } - - $("count").textContent = String(bands.length); - $("unique").textContent = String(coordIndex.size); - renderList(bands); -} - -/** - * Rebuild layers from locally filtered data (legacy mode) - */ -function rebuildLayers() { - markersById.clear(); - coordIndex.clear(); - - clusterLayer.clearLayers(); - - if (currentMode === "clusters") { - if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); - } else if (map.hasLayer(clusterLayer)) { - map.removeLayer(clusterLayer); - } - - // index by coords - for (const b of filtered) { - const k = keyFromLatLon(b.lat, b.lon); - if (!coordIndex.has(k)) coordIndex.set(k, []); - coordIndex.get(k).push(b); - } - - console.log(`Rebuilding layers: ${filtered.length} bands, ${coordIndex.size} unique coords`); - - let markerCount = 0; - const heatPoints = []; - let heatMax = 1; - for (const [k, bands] of coordIndex.entries()) { - const [la, lo] = k.split(",").map(Number); - - // Validate coordinates - if (!Number.isFinite(la) || !Number.isFinite(lo)) { - console.warn(`Invalid coords for key ${k}:`, { la, lo }); - continue; - } - - const intensity = bands.length; - heatPoints.push([la, lo, intensity]); - if (intensity > heatMax) heatMax = intensity; - - const locationName = bands[0]?.location_text || null; - - // Use location marker (final level) for all in legacy mode - const marker = createLocationMarker(la, lo, bands.length, bands, locationName); - markerCount++; - - for (const b of bands) markersById.set(b.ma_id, marker); - - clusterLayer.addLayer(marker); - } - - console.log(`Added ${markerCount} markers to clusterLayer`); - - // heatmap (use all points if loaded, otherwise use filtered) - if (heatPointsLoaded) { - buildHeatLayer(allHeatPoints); - } else { - buildHeatLayer(heatPoints, heatMax); - } - - if (currentMode === "heat") { - if (heatLayer && !map.hasLayer(heatLayer)) map.addLayer(heatLayer); - } else if (heatLayer && map.hasLayer(heatLayer)) { - map.removeLayer(heatLayer); - } - - // counters - $("count").textContent = String(filtered.length); - $("unique").textContent = String(coordIndex.size); -} - -// --- Map init --- -const map = L.map("map", { - preferCanvas: true, - tap: true, // Enable tap for mobile - touchZoom: true, - dragging: true, - zoomControl: false // Disable default, we'll add our own on the right -}).setView([50.2, 10.2], 4); - -// Add zoom control on the right side -L.control.zoom({ - position: 'topright' -}).addTo(map); - -L.tileLayer(DARK_TILES, { maxZoom: 19, attribution: DARK_ATTRIB }).addTo(map); - -// Force map to render properly on mobile -setTimeout(() => { - if (map && map.invalidateSize) { - map.invalidateSize(true); - } -}, 100); - -// Also invalidate on window resize -window.addEventListener('resize', () => { - if (map && map.invalidateSize) { - map.invalidateSize(); - } -}); - -// Invalidate when page becomes visible (mobile browsers) -document.addEventListener('visibilitychange', () => { - if (!document.hidden && map && map.invalidateSize) { - setTimeout(() => map.invalidateSize(true), 100); - } -}); - -// Layer for custom cluster markers -clusterLayer = L.layerGroup(); -map.addLayer(clusterLayer); - -// Debounced viewport change handler -let viewportDebounceTimer = null; -function onViewportChange() { - if (!USE_VIEWPORT_LOADING) return; - - clearTimeout(viewportDebounceTimer); - viewportDebounceTimer = setTimeout(() => { - loadViewportBands(); - }, VIEWPORT_DEBOUNCE_MS); -} - -// Listen for map movements -map.on("moveend", onViewportChange); -map.on("zoomend", onViewportChange); - -function buildHeatLayer(points, maxIntensity) { - if (!points || !points.length) { - if (heatLayer) map.removeLayer(heatLayer); - return; - } - - // Calcul des statistiques pour calibrer l'échelle - const intensities = points.map(p => p[2]).sort((a, b) => b - a); - const actualMax = intensities[0] || 1; - const p95 = intensities[Math.floor(intensities.length * 0.05)] || 1; // 95e percentile - const p90 = intensities[Math.floor(intensities.length * 0.10)] || 1; // 90e percentile - const p75 = intensities[Math.floor(intensities.length * 0.25)] || 1; // 75e percentile - const p50 = intensities[Math.floor(intensities.length * 0.5)] || 1; // Médiane - - // Utilise le 75e percentile pour une heatmap moins saturée - // Multiplié par 2 pour étaler davantage les couleurs - const max = Math.max(15, (maxIntensity || p75) * 2); - - console.log(`Heatmap: ${points.length} points, actualMax=${actualMax}, p95=${p95}, p90=${p90}, p75=${p75}, p50=${p50}, using max=${max}`); - - if (heatLayer) map.removeLayer(heatLayer); - heatLayer = L.heatLayer(points, { - radius: 20, // Réduit de 28 à 20 pour moins de chevauchement - blur: 18, // Réduit de 22 à 18 - maxZoom: 10, // Augmenté de 8 à 10 pour garder l'effet plus longtemps - minOpacity: 0.15, // Réduit de 0.25 à 0.15 pour moins de saturation - max: max, - gradient: { - 0.0: '#000033', // Bleu très foncé (presque invisible) - 0.15: '#000066', // Bleu foncé - 0.3: '#0066cc', // Bleu moyen - 0.45: '#00ccff', // Cyan - 0.58: '#44ff44', // Vert - 0.72: '#ffff00', // Jaune - 0.86: '#ff8800', // Orange - 1.0: '#ff0000' // Rouge - } - }); - - if (currentMode === "heat") { - map.addLayer(heatLayer); - } -} - -function setMode(mode) { - // mode: "clusters" | "heat" - currentMode = mode; - const cOn = mode === "clusters"; - const hOn = mode === "heat"; - - if (cOn) { - if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); - if (heatLayer && map.hasLayer(heatLayer)) map.removeLayer(heatLayer); - } else { - if (map.hasLayer(clusterLayer)) map.removeLayer(clusterLayer); - if (!heatPointsLoaded) { - loadAllHeatPoints(); - } else { - buildHeatLayer(allHeatPoints); - if (heatLayer && !map.hasLayer(heatLayer)) map.addLayer(heatLayer); - } - } -} - -// --- UI widgets (multiselect) --- -function buildMultiSelect(containerId, items, enabledMap, labelFn, options = {}) { - const container = $(containerId); - if (!container) return; - - const summaryEl = options.summaryEl || null; - const emptyLabel = options.emptyLabel || "Aucun élément"; - - container.innerHTML = ` -
- -
- - -
-
-
- `; - - const searchEl = container.querySelector(".ms-search"); - const listEl = container.querySelector(".ms-list"); - - function updateSummary() { - if (!summaryEl) return; - const total = items.length; - if (!total) { - summaryEl.textContent = "Aucun"; - return; - } - const selected = items.filter(it => enabledMap.get(it.key) !== false).length; - if (selected === total) summaryEl.textContent = "Tous"; - else if (selected === 0) summaryEl.textContent = "Aucun"; - else summaryEl.textContent = `${selected}/${total}`; - } - - function render() { - const q = norm(searchEl.value).toLowerCase(); - listEl.innerHTML = ""; - - if (!items.length) { - listEl.innerHTML = `
${escapeHtml(emptyLabel)}
`; - updateSummary(); - return; - } - - const filteredItems = items.filter(it => labelFn(it).toLowerCase().includes(q)); - if (!filteredItems.length) { - listEl.innerHTML = `
Aucun résultat
`; - updateSummary(); - return; - } - - for (const it of filteredItems) { - const key = it.key; - const on = enabledMap.get(key) === true; - const div = document.createElement("div"); - div.className = `ms-item ${on ? "on" : ""}`; - div.dataset.key = key; - div.innerHTML = ` -
${escapeHtml(labelFn(it))}
-
${it.count}
- `; - div.addEventListener("click", () => { - enabledMap.set(key, !(enabledMap.get(key) === true)); - render(); - applyFilters(); - }); - listEl.appendChild(div); - } - - updateSummary(); - } - - container.querySelector('[data-act="all"]').addEventListener("click", () => { - for (const it of items) enabledMap.set(it.key, true); - render(); - applyFilters(); - }); - container.querySelector('[data-act="none"]').addEventListener("click", () => { - for (const it of items) enabledMap.set(it.key, false); - render(); - applyFilters(); - }); - searchEl.addEventListener("input", render); - - render(); -} - -function buildStatusToggles(statusItems) { - const grid = $("statusGrid"); - grid.innerHTML = ""; - for (const it of statusItems) { - statusEnabled.set(it.key, true); - const btn = document.createElement("div"); - btn.className = "toggle on"; - btn.dataset.status = it.key; - btn.innerHTML = `${escapeHtml(it.key)}${it.count}`; - btn.addEventListener("click", () => { - const cur = statusEnabled.get(it.key) === true; - statusEnabled.set(it.key, !cur); - btn.classList.toggle("on", !cur); - applyFilters(); - }); - grid.appendChild(btn); - } -} - -function buildMacroGenreButtons(genreFacets = []) { - const container = $("macroGenres"); - if (!container) return; - container.innerHTML = ""; - macroActiveCount = 0; - - const counts = new Map(); - for (const m of MACRO_GENRES) counts.set(m.key, 0); - - // Calculate macro genre counts from genre facets - for (const facet of genreFacets) { - const g = (facet.key || "").toLowerCase(); - if (!g) continue; - for (const m of MACRO_GENRES) { - if (m.terms.some(t => g.includes(t))) { - counts.set(m.key, (counts.get(m.key) || 0) + facet.count); - } - } - } - - for (const m of MACRO_GENRES) { - macroGenreEnabled.set(m.key, false); - const btn = document.createElement("button"); - btn.type = "button"; - btn.className = "macro-btn"; - btn.dataset.key = m.key; - btn.innerHTML = `${escapeHtml(m.key)}${counts.get(m.key) || 0}`; - btn.addEventListener("click", () => { - const cur = macroGenreEnabled.get(m.key) === true; - macroGenreEnabled.set(m.key, !cur); - btn.classList.toggle("on", !cur); - macroActiveCount += cur ? -1 : 1; - applyFilters(); - }); - container.appendChild(btn); - } -} - -function setupDropdown(triggerId, panelId) { - const trigger = $(triggerId); - const panel = $(panelId); - if (!trigger || !panel) return; - trigger.addEventListener("click", () => { - const nowCollapsed = panel.classList.toggle("is-collapsed"); - trigger.setAttribute("aria-expanded", String(!nowCollapsed)); - }); -} - -// --- List + details + highlight --- -function sortBands(arr) { - const mode = $("sortSelect")?.value || "az"; - const a = [...arr]; - - if (mode === "az") { - a.sort((x,y) => (x.name || "").localeCompare(y.name || "", "fr", { sensitivity: "base" })); - } else if (mode === "status") { - a.sort((x,y) => (x.status || "").localeCompare(y.status || "", "fr", { sensitivity: "base" }) || (x.name || "").localeCompare(y.name || "", "fr", { sensitivity: "base" })); - } else if (mode === "genre") { - a.sort((x,y) => (x.genre || "").localeCompare(y.genre || "", "fr", { sensitivity: "base" }) || (x.name || "").localeCompare(y.name || "", "fr", { sensitivity: "base" })); - } else if (mode === "country") { - a.sort((x,y) => (x.country || "").localeCompare(y.country || "", "fr", { sensitivity: "base" }) || (x.name || "").localeCompare(y.name || "", "fr", { sensitivity: "base" })); - } else if (mode === "year") { - a.sort((x,y) => (Number.isFinite(y.formed_year) ? y.formed_year : -1) - (Number.isFinite(x.formed_year) ? x.formed_year : -1)); - } - - return a; -} - -function setActive(ma_id) { - // list highlight - for (const [id, el] of listElById.entries()) el.classList.toggle("active", id === ma_id); - - // marker highlight - const m = markersById.get(ma_id); - if (m && m.setStyle) { - m.setStyle({ radius: 8, fillOpacity: 0.85, weight: 2 }); - // reset others - for (const [id, mm] of markersById.entries()) { - if (id !== ma_id && mm.setStyle) mm.setStyle({ radius: 6, fillOpacity: 0.55, weight: 1 }); - } - } -} - -function renderList(items, hintOverride) { - const list = $("list"); - list.innerHTML = ""; - listElById.clear(); - - const sorted = sortBands(items); - $("selectionHint").textContent = hintOverride || `${sorted.length} ${t("results_label")}`; - - const q = currentQuery(); - - for (const b of sorted.slice(0, 4000)) { - const div = document.createElement("div"); - div.className = "band"; - div.dataset.id = String(b.ma_id); - - const name = escapeHtml(b.name || "Unknown"); - const genre = escapeHtml(b.genre || "—"); - const loc = escapeHtml(b.location_text || "—"); - const st = escapeHtml(b.status || "—"); - const yr = Number.isFinite(b.formed_year) ? String(b.formed_year) : "—"; - - div.innerHTML = ` -
${name}
-
-
${escapeHtml(b.country || "—")}${st} • ${yr}
-
${genre}
-
${loc}
-
- `; - - div.addEventListener("mouseenter", () => { - setActive(b.ma_id); - const m = markersById.get(b.ma_id); - if (m) m.openPopup?.(); - }); - - div.addEventListener("click", () => { - setActive(b.ma_id); - const m = markersById.get(b.ma_id); - if (m && m.getLatLng) { - map.setView(m.getLatLng(), Math.max(map.getZoom(), 8), { animate: true }); - m.openPopup?.(); - } else if (Number.isFinite(b.lat) && Number.isFinite(b.lon)) { - map.setView([b.lat, b.lon], Math.max(map.getZoom(), 10), { animate: true }); - } - }); - - list.appendChild(div); - listElById.set(b.ma_id, div); - - // highlight visuel dans liste - if (q && bandMatchesQuery(b, q)) { - div.style.boxShadow = "0 0 0 1px rgba(198,26,26,0.15) inset"; - } - } -} - -function applyFilters() { - const q = currentQuery(); - - console.log("Applying filters...", { - query: q, - useViewportLoading: USE_VIEWPORT_LOADING - }); - - if (USE_VIEWPORT_LOADING) { - // With viewport loading, trigger a reload from server - loadViewportBands(); - } else { - // Legacy mode: filter locally loaded data - filtered = geocodedBands - .filter(b => bandMatchesQuery(b, q)) - .filter(b => bandMatchesCountry(b)) - .filter(b => bandMatchesStatus(b)) - .filter(b => bandMatchesGenre(b)) - .filter(b => bandMatchesTheme(b)) - .filter(b => bandMatchesYear(b)); - - console.log(`Filtered: ${filtered.length} bands match filters`); - - rebuildLayers(); - renderList(filtered); - } -} - -// --- Modal for no coords --- -const modalBackdrop = $("modalBackdrop"); -const modalBody = $("modalBody"); -const modalClose = $("modalClose"); -const modalTitle = $("modalTitle"); - -function openModal(title, bands) { - modalTitle.textContent = title; - modalBody.innerHTML = ""; - - const q = currentQuery(); - const items = bands - .filter(b => bandMatchesQuery(b, q)) - .filter(b => bandMatchesCountry(b)) - .filter(b => bandMatchesStatus(b)) - .filter(b => bandMatchesGenre(b)) - .filter(b => bandMatchesTheme(b)) - .filter(b => bandMatchesYear(b)); - - if (!items.length) { - modalBody.innerHTML = `
Aucun résultat
`; - } else { - const sorted = sortBands(items); - for (const b of sorted.slice(0, 8000)) { - const div = document.createElement("div"); - div.className = "band"; - const maUrl = b.url || (b.ma_id ? `https://www.metal-archives.com/bands/x/${b.ma_id}` : "#"); - div.innerHTML = ` - -
-
${escapeHtml(b.country||"—")}${escapeHtml(b.status||"—")}
-
Genre: ${escapeHtml(b.genre||"—")}
-
Lieu: ${escapeHtml(b.location_text||"—")}
-
- `; - modalBody.appendChild(div); - } - } - - modalBackdrop.classList.add("on"); - modalBackdrop.setAttribute("aria-hidden", "false"); -} - -async function loadNoLocationBands() { - try { - modalBody.innerHTML = "
Chargement...
"; - - const j = await apiGet("/api/bands?limit=10000&geocoded=0"); - const items = j.items || []; - - modalBody.innerHTML = ""; - - if (!items.length) { - modalBody.innerHTML = `
Aucun groupe sans coordonnées
`; - return; - } - - for (const x of items.slice(0, 500)) { - const div = document.createElement("div"); - div.className = "band"; - const maUrl = x.ma_id ? `https://www.metal-archives.com/bands/x/${x.ma_id}` : "#"; - div.innerHTML = ` - -
-
${escapeHtml(x.country || "—")}${escapeHtml(x.status || "—")}
-
Genre: ${escapeHtml(x.genre || "—")}
-
Lieu: ${escapeHtml(x.location_text || "—")}
-
- `; - modalBody.appendChild(div); - } - - if (items.length > 500) { - const more = document.createElement("div"); - more.style.cssText = "padding:10px;color:rgba(162,176,194,0.85);text-align:center;"; - more.textContent = `... et ${items.length - 500} autres`; - modalBody.appendChild(more); - } - } catch (e) { - modalBody.innerHTML = `
Erreur: ${escapeHtml(e.message)}
`; - } -} - -function closeModal() { - modalBackdrop.classList.remove("on"); - modalBackdrop.setAttribute("aria-hidden", "true"); -} - -modalClose?.addEventListener("click", closeModal); -modalBackdrop?.addEventListener("click", (e) => { - if (e.target === modalBackdrop) closeModal(); -}); - -// Info modal (legal/FAQ) -const infoBackdrop = $("infoBackdrop"); -const infoBody = $("infoBody"); -const infoClose = $("infoClose"); -const infoTitle = $("infoTitle"); - -// LEGAL_HTML and FAQ_HTML are now generated per-language in locales.js via t('legal_html') / t('faq_html') - -function openInfoModal(title, html) { - if (!infoBackdrop || !infoBody || !infoTitle) return; - infoTitle.textContent = title; - infoBody.innerHTML = html; - infoBackdrop.classList.add("on"); - infoBackdrop.setAttribute("aria-hidden", "false"); -} - -function closeInfoModal() { - if (!infoBackdrop) return; - infoBackdrop.classList.remove("on"); - infoBackdrop.setAttribute("aria-hidden", "true"); -} - -if (infoClose) infoClose.addEventListener("click", closeInfoModal); -if (infoBackdrop) { - infoBackdrop.addEventListener("click", (e) => { - if (e.target === infoBackdrop) closeInfoModal(); - }); -} - -document.addEventListener("keydown", (e) => { - if (e.key === "Escape") { - closeModal(); - closeInfoModal(); - } -}); - -// Sidebar toggle -function setSidebarCollapsed(collapsed) { - if (!appEl) return; - appEl.classList.toggle("sidebar-collapsed", collapsed); - const toggle = $("sidebarToggle"); - if (toggle) { - toggle.setAttribute("aria-expanded", String(!collapsed)); - // Update button text - const label = toggle.querySelector(".label"); - if (label) { - label.textContent = collapsed ? t("options_btn") : t("close_btn"); - } - } - // Refresh map size after sidebar animation - setTimeout(() => map?.invalidateSize?.(), 220); -} - -const sidebarToggle = $("sidebarToggle"); -if (sidebarToggle) { - sidebarToggle.addEventListener("click", (e) => { - e.preventDefault(); - e.stopPropagation(); - const collapsed = appEl.classList.contains("sidebar-collapsed"); - setSidebarCollapsed(!collapsed); - }); -} - -// Note: Sidebar closing is now controlled only via the toggle button -// We removed the overlay auto-close behavior since users want to interact -// with the map while the sidebar is open - -// Collapse sidebar by default on smaller screens -if (window.matchMedia("(max-width: 1200px)").matches) { - setTimeout(() => { - setSidebarCollapsed(true); - }, 100); -} - -// Language dropdown (flag-icons custom widget) -const LANG_FLAGS = { en:"gb", fr:"fr", de:"de", es:"es", it:"it", pl:"pl", nl:"nl", ro:"ro", pt:"pt", cs:"cz", sv:"se", hu:"hu", da:"dk", fi:"fi", sk:"sk", hr:"hr", sl:"si", lt:"lt", lv:"lv", et:"ee", nb:"no" }; -const LANG_NAMES = { en:"English", fr:"Français", de:"Deutsch", es:"Español", it:"Italiano", pl:"Polski", nl:"Nederlands", ro:"Română", pt:"Português", cs:"Čeština", sv:"Svenska", hu:"Magyar", da:"Dansk", fi:"Suomi", sk:"Slovenčina", hr:"Hrvatski", sl:"Slovenščina", lt:"Lietuvių", lv:"Latviešu", et:"Eesti", nb:"Norsk bokmål" }; - -function syncLangTrigger(lang) { - const trigger = document.getElementById("langTrigger"); - if (!trigger) return; - const flagEl = trigger.querySelector(".lang-flag"); - if (flagEl) flagEl.className = `fi fi-${LANG_FLAGS[lang] || "un"} lang-flag`; - const codeEl = trigger.querySelector(".lang-code"); - if (codeEl) codeEl.textContent = lang.toUpperCase(); - document.querySelectorAll(".lang-opt").forEach(b => - b.classList.toggle("current", b.dataset.lang === lang) - ); -} - -const langTrigger = document.getElementById("langTrigger"); -const langOptions = document.getElementById("langOptions"); -if (langTrigger && langOptions) { - langTrigger.addEventListener("click", (e) => { - e.stopPropagation(); - const open = langOptions.classList.toggle("hidden") === false; - langTrigger.setAttribute("aria-expanded", String(open)); - }); - document.addEventListener("click", () => { - langOptions.classList.add("hidden"); - langTrigger.setAttribute("aria-expanded", "false"); - }); - langOptions.querySelectorAll(".lang-opt").forEach(btn => { - btn.addEventListener("click", (e) => { - e.stopPropagation(); - currentLang = btn.dataset.lang; - localStorage.setItem("lang", currentLang); - langOptions.classList.add("hidden"); - langTrigger.setAttribute("aria-expanded", "false"); - syncLangTrigger(currentLang); - applyI18n(); - }); - }); - syncLangTrigger(currentLang); -} -applyI18n(); - -// Legal/FAQ links -const openLegal = $("openLegal"); -if (openLegal) openLegal.addEventListener("click", () => openInfoModal(t("legal_title"), t("legal_html"))); - -const openFaq = $("openFaq"); -if (openFaq) openFaq.addEventListener("click", () => openInfoModal(t("faq_title"), t("faq_html"))); - -// Setup dropdowns -setupDropdown("countryToggle", "countrySelect"); -setupDropdown("genreToggle", "genreSelect"); -setupDropdown("themeToggle", "themeSelect"); - -// --- Buttons / controls --- -$("btnNoLocation")?.addEventListener("click", () => { - modalTitle.textContent = t("without_coords_modal"); - modalBackdrop.classList.add("on"); - modalBackdrop.setAttribute("aria-hidden", "false"); - loadNoLocationBands(); -}); - -// Search with suggestions -const searchInput = $("q"); -const suggestionsEl = $("searchSuggestions"); - -function showSearchSuggestions(query) { - if (!query || query.length < 2 || !allBands.length) { - suggestionsEl?.classList.remove("visible"); - return; - } - - const matches = allBands - .filter(b => bandMatchesQuery(b, query)) - .slice(0, 8); // Show max 8 suggestions - - if (!matches.length) { - suggestionsEl?.classList.remove("visible"); - return; - } - - if (suggestionsEl) { - suggestionsEl.innerHTML = matches.map(b => { - const statusText = b.status || "Unknown"; - const yearText = Number.isFinite(b.formed_year) ? b.formed_year : "—"; - return ` -
-
${escapeHtml(b.name)}
-
- ${escapeHtml(b.country || "—")} • ${escapeHtml(statusText)} • ${yearText} • ${escapeHtml(b.genre || "—")} -
-
- `; - }).join(""); - - // Add click handlers - suggestionsEl.querySelectorAll(".suggestion-item").forEach(el => { - el.addEventListener("click", () => { - const bandId = Number(el.dataset.id); - const band = allBands.find(b => b.ma_id === bandId); - if (band && Number.isFinite(band.lat) && Number.isFinite(band.lon)) { - const marker = markersById.get(bandId); - if (marker && marker.getLatLng) { - map.setView(marker.getLatLng(), 10, { animate: true }); - marker.openPopup(); - setActive(bandId); - } else { - map.setView([band.lat, band.lon], 12, { animate: true }); - } - } - suggestionsEl.classList.remove("visible"); - if (searchInput) searchInput.value = band?.name || ""; - }); - }); - - suggestionsEl.classList.add("visible"); - } -} - -const debouncedSearch = debounce(() => { - applyFilters(); -}, 400); // 400ms delay - -const debouncedSuggestions = debounce((query) => { - showSearchSuggestions(query); -}, 200); // 200ms delay for suggestions - -searchInput?.addEventListener("input", (e) => { - const query = e.target.value.toLowerCase().trim(); - debouncedSuggestions(query); - debouncedSearch(); -}); - -searchInput?.addEventListener("focus", () => { - const query = searchInput.value.toLowerCase().trim(); - if (query.length >= 2) { - showSearchSuggestions(query); - } -}); - -// Close suggestions when clicking outside -document.addEventListener("click", (e) => { - if (!searchInput?.contains(e.target) && !suggestionsEl?.contains(e.target)) { - suggestionsEl?.classList.remove("visible"); - } -}); - -$("sortSelect")?.addEventListener("change", () => { - // Re-render list with current data - const visibleBands = currentViewportData.flatMap(c => c.sample_bands || [c]) - .map(b => typeof b === 'string' ? JSON.parse(b) : b) - .filter(Boolean); - renderList(visibleBands.slice(0, 200)); -}); - -const heatToggle = $("toggleHeat"); -if (heatToggle) { - heatToggle.addEventListener("change", () => setMode(heatToggle.checked ? "heat" : "clusters")); -} - -$("btnReset")?.addEventListener("click", () => { - if (filtered.length) { - const pts = filtered.map(b => L.latLng(b.lat, b.lon)); - const bounds = L.latLngBounds(pts); - if (bounds.isValid()) map.fitBounds(bounds.pad(0.12)); - } else if (geocodedBands.length) { - const pts = geocodedBands.map(b => L.latLng(b.lat, b.lon)); - const bounds = L.latLngBounds(pts); - if (bounds.isValid()) map.fitBounds(bounds.pad(0.12)); - } else { - map.setView([50.2, 10.2], 4, { animate: true }); - } -}); - -map.on("click", () => { - const visibleBands = currentViewportData.flatMap(c => c.sample_bands || [c]) - .map(b => typeof b === 'string' ? JSON.parse(b) : b) - .filter(Boolean); - renderList(visibleBands.slice(0, 200)); -}); - -// --- Boot --- -function computeFacetCounts(arr, getKey) { - const m = new Map(); - for (const b of arr) { - const val = getKey(b); - const k = val ? norm(val) : "Unknown"; - m.set(k, (m.get(k) || 0) + 1); - } - return [...m.entries()] - .map(([key, count]) => ({ key, count })) - .sort((a,b) => b.count - a.count); -} - -function computeTokenFacetCounts(arr, getTokens) { - const m = new Map(); - for (const b of arr) { - const tokens = getTokens(b) || []; - if (!tokens.length) { - // Count bands without tokens as "Unknown" - m.set("Unknown", (m.get("Unknown") || 0) + 1); - } else { - for (const t of tokens) { - const k = norm(t) || "Unknown"; - m.set(k, (m.get(k) || 0) + 1); - } - } - } - return [...m.entries()] - .map(([key, count]) => ({ key, count })) - .sort((a,b) => b.count - a.count); -} - -/** - * Build timeline slider from year range (from facets or computed) - */ -function buildTimelineFromRange() { - const slider = $("yearSlider"); - slider.innerHTML = ""; - - if (!yearRange.min || !yearRange.max) { - $("yearMin").textContent = "—"; - $("yearMax").textContent = "—"; - $("yearHint").textContent = t("year_data_missing"); - slider.innerHTML = `
${t("year_data_unavailable")}
`; - return; - } - - const { min, max } = yearRange; - - console.log(`Timeline: ${min} - ${max}`); - - $("yearMin").textContent = String(min); - $("yearMax").textContent = String(max); - $("yearHint").textContent = t("all_years_label"); - - noUiSlider.create(slider, { - start: [min, max], - connect: true, - step: 1, - range: { min, max }, - behaviour: "tap-drag", - tooltips: false, - }); - - slider.noUiSlider.on("update", (vals) => { - const a = Math.round(Number(vals[0])); - const b = Math.round(Number(vals[1])); - yearFilter = { min: a, max: b }; - $("yearHint").textContent = (a === min && b === max) ? t("all_years_label") : `${a} → ${b}`; - }); - - slider.noUiSlider.on("change", () => { - console.log(`Year filter changed: ${yearFilter.min} - ${yearFilter.max}`); - applyFilters(); - }); -} - -async function boot() { - try { - console.log("Boot: Loading data..."); - console.log("Viewport loading mode:", USE_VIEWPORT_LOADING ? "ENABLED" : "DISABLED"); - - // Wait for fonts to load (can affect layout) - if (document.fonts && document.fonts.ready) { - await document.fonts.ready; - } - - // Load facets and stats first (fast) - await Promise.all([ - loadFacets(), - loadStats() - ]); - loadGoatCounterFooterStats(); // pas besoin d'await - // Build filters from facets if available, otherwise load bands first - let statuses, genres, countries, themes; - - if (facetData) { - console.log("Using server-side facets for filters"); - statuses = facetData.statuses.map(s => ({ key: s.value, count: s.count })); - countries = facetData.countries.map(c => ({ key: c.value, count: c.count })); - genres = facetData.genres.map(g => ({ key: g.value, count: g.count })); - themes = []; // Themes need to be computed from bands - - // Set year range from facets - if (facetData.year_range) { - yearRange = { - min: facetData.year_range.min_year, - max: facetData.year_range.max_year - }; - yearFilter = { ...yearRange }; - } - } else { - // Fallback: load bands and compute facets locally - console.log("Loading bands for local facet computation..."); - await loadBands(); - statuses = computeFacetCounts(allBands, b => b.status); - genres = computeFacetCounts(allBands, b => b.genre); - countries = computeFacetCounts(allBands, b => b.country); - themes = computeTokenFacetCounts(allBands, b => b.themes); - - } - - console.log(`Boot: Facets ready - ${statuses.length} statuses, ${countries.length} countries, ${genres.length} genres`); - - // Init enabled maps = true - for (const it of genres) genreEnabled.set(it.key, true); - for (const it of countries) countryEnabled.set(it.key, true); - for (const it of themes) themeEnabled.set(it.key, true); - - buildStatusToggles(statuses); - buildMacroGenreButtons(genres); - buildMultiSelect("genreSelect", genres, genreEnabled, (it) => it.key, { summaryEl: $("genreSummary") }); - buildMultiSelect("countrySelect", countries, countryEnabled, (it) => it.key, { summaryEl: $("countrySummary") }); - - if (themes.length) { - $("themeBox").style.display = ""; - buildMultiSelect("themeSelect", themes, themeEnabled, (it) => it.key, { summaryEl: $("themeSummary"), emptyLabel: "Aucun thème" }); - } else { - $("themeBox").style.display = "none"; - } - - // Build timeline from facet data or computed range - buildTimelineFromRange(); - - // Set mode BEFORE applying filters - setMode(heatToggle && heatToggle.checked ? "heat" : "clusters"); - - // Force map size calculation - console.log("Forcing map size recalculation..."); - if (map && map.invalidateSize) { - map.invalidateSize(true); - } - - // Initial data load - console.log("Boot: Loading initial viewport data..."); - - if (USE_VIEWPORT_LOADING) { - // Load viewport data - await loadViewportBands(); - } else { - // Legacy: use all loaded bands - if (!allBands.length) await loadBands(); - applyFilters(); - } - - console.log("Boot: Initial load complete"); - - // Fit to Europe by default - setTimeout(() => { - if (map && map.invalidateSize) { - map.invalidateSize(true); - } - // Default view: Europe - map.setView([50.2, 10.2], 4); - }, 100); - - // Load all bands in background for heatmap and search - setTimeout(() => loadAllHeatPoints(), 1000); - - } catch (err) { - console.error("Boot error:", err); - $("list").innerHTML = `
Erreur de chargement: ${escapeHtml(err.message || String(err))}
`; - } -} - -// Make sure DOM is ready before booting -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', boot); -} else { - boot(); -} +/* Black Metal Map UI — clusters/heat/timeline/filter/sort/highlight */ +/* Performance-optimized with viewport-based loading */ + +const API_BASE = "https://bm.nicolasfryder.ovh"; + +// --- i18n --- +const SUPPORTED_LANGS = ["fr", "en", "de", "es", "it", "pl", "nl", "ro", "pt", "cs", "sv", "hu", "da", "fi", "sk", "hr", "sl", "lt", "lv", "et", "nb"]; + +function detectLang() { + const langs = navigator.languages?.length ? navigator.languages : [navigator.language || "en"]; + for (const l of langs) { + const code = l.split("-")[0].toLowerCase(); + if (SUPPORTED_LANGS.includes(code)) return code; + } + return "en"; +} + +let currentLang = localStorage.getItem("lang") || detectLang(); + +function t(key) { + return window.LOCALES?.[currentLang]?.[key] ?? window.LOCALES?.["en"]?.[key] ?? key; +} + +function applyI18n() { + document.documentElement.lang = currentLang; + document.querySelectorAll("[data-i18n]").forEach(el => { + el.textContent = t(el.dataset.i18n); + }); + document.querySelectorAll("[data-i18n-placeholder]").forEach(el => { + el.placeholder = t(el.dataset.i18nPlaceholder); + }); + // Sort select options (can't use data-i18n on options in all browsers) + const sel = document.getElementById("sortSelect"); + if (sel) { + [["sort_az",0],["sort_status",1],["sort_genre",2],["sort_country",3],["sort_year",4]].forEach(([k,i]) => { + if (sel.options[i]) sel.options[i].text = t(k); + }); + } +} +const DARK_TILES = "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png"; +const DARK_ATTRIB = '© OpenStreetMap contributors © CARTO'; + +// --- Configuration --- +const USE_VIEWPORT_LOADING = true; // Enable viewport-based loading +const INITIAL_LOAD_LIMIT = 5000; // Initial bands to load for filters +const VIEWPORT_DEBOUNCE_MS = 300; // Debounce for viewport changes + +// --- State --- +let allBands = []; // all loaded bands (geocoded + non geocoded) +let geocodedBands = []; // subset lat/lon ok +let noLocationBands = []; // subset missing coords +let viewportBands = []; // bands in current viewport + +let filtered = []; +const markersById = new Map(); // ma_id -> marker +const listElById = new Map(); // ma_id -> element +const coordIndex = new Map(); // "lat,lon" -> bands[] + +let heatLayer = null; +let clusterLayer = null; +let currentMode = "clusters"; + +// All heat points (for full heatmap even when viewing clusters) +let allHeatPoints = []; +let heatPointsLoaded = false; + +const statusEnabled = new Map(); +const genreEnabled = new Map(); +const countryEnabled = new Map(); +const macroGenreEnabled = new Map(); +const themeEnabled = new Map(); + +let yearRange = { min: null, max: null }; // global +let yearFilter = { min: null, max: null }; // current + +let macroActiveCount = 0; + +// Facet data from server (for filters) +let facetData = null; + +// Loading state +let isLoadingViewport = false; +let pendingViewportLoad = false; +let currentViewportData = []; + +// --- Utils --- +const $ = (id) => document.getElementById(id); +const appEl = $("app"); + +async function loadGoatCounterFooterStats() { + const totalEl = document.getElementById("gcTotal"); + const monthEl = document.getElementById("gcMonth"); + if (!totalEl || !monthEl) return; + + // 1er jour du mois courant (ce mois-ci) + const d = new Date(); + const yyyy = d.getFullYear(); + const mm = String(d.getMonth() + 1).padStart(2, "0"); + const startOfMonth = `${yyyy}-${mm}-01`; + + const base = "https://metalfromeurope.goatcounter.com/counter/"; + const totalUrl = `${base}TOTAL.json`; + const monthUrl = `${base}TOTAL.json?start=${encodeURIComponent(startOfMonth)}`; + + try { + const [t, m] = await Promise.all([ + fetch(totalUrl, { cache: "no-store" }).then(r => (r.ok ? r.json() : Promise.reject(r.status))), + fetch(monthUrl, { cache: "no-store" }).then(r => (r.ok ? r.json() : Promise.reject(r.status))), + ]); + + // GoatCounter renvoie `count` comme string formatée (séparateurs milliers). :contentReference[oaicite:2]{index=2} + totalEl.textContent = t.count ?? "—"; + monthEl.textContent = m.count ?? "—"; + } catch (e) { + console.warn("GoatCounter footer stats failed:", e); + totalEl.textContent = "—"; + monthEl.textContent = "—"; + } +} + +// Debounce function for search +let searchDebounceTimer = null; +function debounce(func, delay) { + return function(...args) { + clearTimeout(searchDebounceTimer); + searchDebounceTimer = setTimeout(() => func.apply(this, args), delay); + }; +} + +// Les helpers purs vivent dans pure.js (testés unitairement). app.js garde +// l'état (les Map de facettes cochées) et ne fait que le lui passer. +const escapeHtml = BMPure.escapeHtml; +const norm = BMPure.norm; +const parseYear = BMPure.parseYear; +const splitThemes = BMPure.splitThemes; + +function currentQuery() { + return norm($("q").value).toLowerCase(); +} + +function bandMatchesQuery(b, q) { return BMPure.matchesQuery(b, q); } +function bandMatchesStatus(b) { return BMPure.matchesFacet(b.status, statusEnabled, "Unknown"); } +function bandMatchesCountry(b) { return BMPure.matchesFacet(b.country, countryEnabled, "??"); } +function bandMatchesMacroGenre(b) { return BMPure.matchesMacroGenre(b, MACRO_GENRES, macroGenreEnabled, macroActiveCount); } + +function bandMatchesGenre(b) { + if (!bandMatchesMacroGenre(b)) return false; + return BMPure.matchesFacet(b.genre, genreEnabled, "Unknown"); +} + +function bandMatchesTheme(b) { return BMPure.matchesTheme(b, themeEnabled); } +function bandMatchesYear(b) { return BMPure.matchesYear(b, yearFilter, yearRange); } + +function keyFromLatLon(lat, lon) { return BMPure.keyFromLatLon(lat, lon); } + +const MACRO_GENRES = [ + { key: "Black", terms: ["black"] }, + { key: "Death", terms: ["death"] }, + { key: "Doom/Stoner/Sludge", terms: ["doom", "stoner", "sludge"] }, + { key: "Electronic/Industrial", terms: ["electronic", "industrial", "electro"] }, + { key: "Experimental/Avant-garde", terms: ["experimental", "avant", "avant-garde", "avantgarde"] }, + { key: "Folk/Viking/Pagan", terms: ["folk", "viking", "pagan"] }, + { key: "Gothic", terms: ["gothic"] }, + { key: "Grindcore", terms: ["grind"] }, + { key: "Groove", terms: ["groove"] }, + { key: "Heavy", terms: ["heavy"] }, + { key: "Metalcore/Deathcore", terms: ["metalcore", "deathcore"] }, + { key: "Power", terms: ["power"] }, + { key: "Progressive", terms: ["progressive", "prog"] }, + { key: "Speed", terms: ["speed"] }, + { key: "Symphonic", terms: ["symphonic"] }, + { key: "Thrash", terms: ["thrash"] }, +]; + +// --- API --- +async function apiGet(path) { + const url = `${API_BASE}${path}`; + const r = await fetch(url, { mode: "cors" }); + if (!r.ok) throw new Error(`API ${path} failed: ${r.status}`); + return await r.json(); +} + +async function loadStats() { + // tolérant : si /api/stats n'existe pas encore, on ignore + try { + const j = await apiGet("/api/stats"); + if (j && j.ok) { + $("total").textContent = String(j.total || 0); + $("geocoded").textContent = String(j.geocoded || 0); + $("noLocCount").textContent = String(j.no_location || 0); + } + } catch (_) { + // Silently ignore stats errors + } +} + +/** + * Load facet data for filters (fast, minimal data) + */ +async function loadFacets() { + try { + const j = await apiGet("/api/facets"); + if (j.ok) { + facetData = j; + console.log("Facets loaded:", { + statuses: j.statuses?.length, + countries: j.countries?.length, + genres: j.genres?.length, + yearRange: j.year_range + }); + } + } catch (e) { + console.warn("Failed to load facets, will compute from bands:", e); + } +} + +/** + * Parse band data from API response + */ +function parseBandData(x) { + const status = x.status || x.data?.status || x.data?.band_status || x.data?.status_label; + + return { + ma_id: Number(x.ma_id), + name: norm(x.name), + url: x.url || (x.data?.url) || (x.data?.band_page?.url) || null, + country: norm(x.country || x.data?.country), + status: norm(status), + genre: norm(x.genre || x.data?.genre || x.data?.genres || x.data?.style), + themes: splitThemes(x.themes || x.data?.themes || x.data?.theme || x.data?.thematic), + location_text: norm(x.location_text || x.data?.location_text || x.data?.location), + formed_year: parseYear(x.formed_year ?? x.data?.formed_year ?? x.data?.formed ?? x.data?.formation_year ?? x.data?.year_formed), + lat: (x.lat == null ? null : Number(x.lat)), + lon: (x.lon == null ? null : Number(x.lon)), + // Localisation précise (band_locations) : présent quand le point vient + // d'un step géocodé plutôt que du point unique du groupe. + location_raw: x.location_raw != null ? norm(x.location_raw) : null, + step_label: x.step_label != null ? norm(x.step_label) : null, + data: x.data || {}, + geocoded_at: x.geocoded_at || null, + }; +} + +/** + * Load initial sample of bands for quick startup + */ +async function loadBands() { + // Load a limited set initially for faster startup + const limit = USE_VIEWPORT_LOADING ? INITIAL_LOAD_LIMIT : 200000; + const j = await apiGet(`/api/bands?limit=${limit}`); + const items = j.items || j.bands || []; + + console.log(`Loaded ${items.length} bands initially`); + + allBands = items.map(parseBandData); + + geocodedBands = allBands.filter(b => Number.isFinite(b.lat) && Number.isFinite(b.lon)); + noLocationBands = allBands.filter(b => !(Number.isFinite(b.lat) && Number.isFinite(b.lon))); + + // Update counts + $("total").textContent = String(allBands.length); + $("geocoded").textContent = String(geocodedBands.length); + $("noLocCount").textContent = String(noLocationBands.length); +} + +/** + * Load all heat points for the full heatmap (done once in background) + */ +async function loadAllHeatPoints() { + if (heatPointsLoaded) return; + + try { + console.log("Loading all bands for heatmap..."); + const j = await apiGet("/api/bands?limit=200000"); + const items = j.items || []; + + allHeatPoints = []; + + // If allBands is empty, populate it + if (!allBands.length) { + allBands = items.map(parseBandData); + geocodedBands = allBands.filter(b => Number.isFinite(b.lat) && Number.isFinite(b.lon)); + noLocationBands = allBands.filter(b => !(Number.isFinite(b.lat) && Number.isFinite(b.lon))); + } + + // Index by coords for heatmap intensity + const coordCounts = new Map(); + + for (const x of items) { + const lat = x.lat == null ? null : Number(x.lat); + const lon = x.lon == null ? null : Number(x.lon); + + if (Number.isFinite(lat) && Number.isFinite(lon)) { + const key = `${lat.toFixed(4)},${lon.toFixed(4)}`; + coordCounts.set(key, (coordCounts.get(key) || 0) + 1); + } + } + + // Convert to heat points + for (const [key, count] of coordCounts) { + const [lat, lon] = key.split(",").map(Number); + allHeatPoints.push([lat, lon, count]); + } + + heatPointsLoaded = true; + console.log(`Loaded ${allHeatPoints.length} unique heat points from ${items.length} bands`); + + // Update stats + $("total").textContent = String(items.length); + $("geocoded").textContent = String(geocodedBands.length); + $("noLocCount").textContent = String(noLocationBands.length); + + // Rebuild heatmap if in heat mode + if (currentMode === "heat") { + buildHeatLayer(allHeatPoints); + } + } catch (e) { + console.error("Failed to load heat points:", e); + } +} + +/** + * Load bands for current viewport from server + */ +async function loadViewportBands() { + if (!USE_VIEWPORT_LOADING) return; + if (isLoadingViewport) { + pendingViewportLoad = true; + return; + } + + isLoadingViewport = true; + + try { + const bounds = map.getBounds(); + const zoom = map.getZoom(); + + // Expand bounds slightly to preload edges + const expandFactor = 0.2; + const latDiff = (bounds.getNorth() - bounds.getSouth()) * expandFactor; + const lonDiff = (bounds.getEast() - bounds.getWest()) * expandFactor; + + const bbox = [ + bounds.getWest() - lonDiff, + bounds.getSouth() - latDiff, + bounds.getEast() + lonDiff, + bounds.getNorth() + latDiff + ].join(","); + + // Build query params for filters + const params = new URLSearchParams({ + bbox, + zoom: String(Math.floor(zoom)) + }); + + // Add active filters + const activeStatuses = Array.from(statusEnabled.entries()) + .filter(([, v]) => v) + .map(([k]) => k); + if (activeStatuses.length && activeStatuses.length < statusEnabled.size) { + params.set("status", activeStatuses.join(",")); + } + + const activeCountries = Array.from(countryEnabled.entries()) + .filter(([, v]) => v) + .map(([k]) => k); + if (activeCountries.length && activeCountries.length < countryEnabled.size) { + params.set("countries", activeCountries.join(",")); + } + + if (yearFilter.min != null && yearFilter.max != null) { + if (yearFilter.min !== yearRange.min) params.set("year_min", String(yearFilter.min)); + if (yearFilter.max !== yearRange.max) params.set("year_max", String(yearFilter.max)); + } + + // Add genre filter if macro genres are active + if (macroActiveCount > 0) { + const activeTerms = MACRO_GENRES + .filter(m => macroGenreEnabled.get(m.key) === true) + .flatMap(m => m.terms); + if (activeTerms.length) { + params.set("genre", activeTerms[0]); // API supports single genre filter + } + } + + const url = `/api/clusters?${params.toString()}`; + console.log("Loading viewport:", url); + + const j = await apiGet(url); + + if (j.ok) { + currentViewportData = j.items || []; + + if (j.type === "bands") { + // High zoom: got individual bands + viewportBands = currentViewportData.map(parseBandData); + rebuildLayersFromBands(viewportBands); + } else { + // Low zoom: got clusters + rebuildLayersFromClusters(currentViewportData); + } + + $("count").textContent = String(j.count || currentViewportData.length || 0); + } + } catch (e) { + console.error("Failed to load viewport bands:", e); + } finally { + isLoadingViewport = false; + + if (pendingViewportLoad) { + pendingViewportLoad = false; + setTimeout(loadViewportBands, 100); + } + } +} + +/** + * Create a cluster marker (zoomable, not final location) + * These have a dashed border to indicate they can be zoomed + * Burgundy/dark red color, always white text + */ +function createClusterMarker(lat, lon, count, bands) { + // Size based on count (logarithmic scale) + const size = Math.min(24 + Math.log2(count + 1) * 8, 55); + + // Constant burgundy/dark red color for all clusters + const color = 'rgba(120, 40, 60, 0.92)'; + const borderColor = 'rgba(180, 80, 100, 0.9)'; + const textColor = '#fff'; + + // Create custom div icon with count - dashed border indicates "zoomable" + const icon = L.divIcon({ + className: 'cluster-marker cluster-zoomable', + html: `
${count > 999 ? Math.round(count/1000) + 'k' : count}
`, + iconSize: [size, size], + iconAnchor: [size/2, size/2] + }); + + const marker = L.marker([lat, lon], { icon }); + + // Store data for click handling + marker.__bands = bands; + marker.__count = count; + marker.__isCluster = true; // Flag to identify as zoomable cluster + + // Click handler - always zoom for clusters + marker.on("click", (e) => { + L.DomEvent.stopPropagation(e); + map.setView([lat, lon], map.getZoom() + 2, { animate: true }); + }); + + return marker; +} + +/** + * Create a location marker (final level - shows popup with all bands) + * These have a solid border and bright red color to indicate they show details + */ +function createLocationMarker(lat, lon, count, bands, locationName) { + // Size based on count (smaller than clusters) + const size = Math.min(18 + Math.log2(count + 1) * 6, 42); + + // Bright red color for final locations + let color, borderColor; + if (count === 1) { + color = 'rgba(180, 30, 30, 0.9)'; + borderColor = 'rgba(255, 100, 100, 0.9)'; + } else if (count < 5) { + color = 'rgba(198, 26, 26, 0.9)'; + borderColor = 'rgba(255, 120, 120, 0.9)'; + } else if (count < 20) { + color = 'rgba(210, 50, 50, 0.9)'; + borderColor = 'rgba(255, 150, 150, 0.9)'; + } else { + color = 'rgba(220, 80, 80, 0.9)'; + borderColor = 'rgba(255, 180, 180, 0.95)'; + } + + // Create custom div icon with count - solid border indicates "clickable for details" + const icon = L.divIcon({ + className: 'cluster-marker cluster-location', + html: `
${count}
`, + iconSize: [size, size], + iconAnchor: [size/2, size/2] + }); + + const marker = L.marker([lat, lon], { icon }); + + // Store data + marker.__bands = bands; + marker.__count = count; + marker.__isCluster = false; // Flag to identify as final location + marker.__locationName = locationName; + + // Build popup HTML with ALL bands (scrollable) + const bandListHtml = bands.map(b => { + const maUrl = b.url || (b.ma_id ? `https://www.metal-archives.com/bands/x/${b.ma_id}` : null); + const genre = b.genre || '—'; + const status = b.status || '—'; + const year = Number.isFinite(b.formed_year) ? b.formed_year : '—'; + + if (maUrl) { + return ` +
${escapeHtml(b.name || 'Unknown')}
+
${escapeHtml(genre)} · ${escapeHtml(status)} · ${year}
+
`; + } + return `
+
${escapeHtml(b.name || 'Unknown')}
+
${escapeHtml(genre)} · ${escapeHtml(status)} · ${year}
+
`; + }).join(""); + + const popupHtml = ` +
+
+ 📍 ${escapeHtml(locationName || t('location_fallback'))} + ${count} ${count === 1 ? t('group_s') : t('group_p')} +
+
+ ${bandListHtml} +
+
+ `; + + // Bind popup + marker.bindPopup(popupHtml, { + maxWidth: 380, + maxHeight: 400, + className: 'location-popup' + }); + + // Click handler - update sidebar list AND open popup + marker.on("click", (e) => { + L.DomEvent.stopPropagation(e); + const gLabel = count === 1 ? t('group_s') : t('group_p'); + const hint = locationName ? `${count} ${gLabel} — ${locationName}` : `${count} ${gLabel}`; + renderList(bands, hint); + // Small delay to ensure popup opens correctly + setTimeout(() => marker.openPopup(), 10); + }); + + return marker; +} + +/** + * Check if all bands share the same location_text + */ +function bandsShareLocation(bands) { + if (!bands || bands.length === 0) return false; + if (bands.length === 1) return true; + + const firstLoc = norm(bands[0]?.location_text || ''); + if (!firstLoc) return false; + + return bands.every(b => norm(b?.location_text || '') === firstLoc); +} + +/** + * Rebuild layers from cluster data (server-side aggregated) + */ +function rebuildLayersFromClusters(clusters) { + markersById.clear(); + coordIndex.clear(); + clusterLayer.clearLayers(); + + for (const cluster of clusters) { + const { lat, lon, count, sample_bands, location_text } = cluster; + + if (!Number.isFinite(lat) || !Number.isFinite(lon)) continue; + + // Parse sample bands + const bands = (sample_bands || []).map(b => { + if (typeof b === 'string') { + try { return JSON.parse(b); } catch { return null; } + } + return b; + }).filter(Boolean); + + const bandCount = count || bands.length; + + // Check if all bands share the same location + const allSameLocation = bandsShareLocation(bands); + const locationName = allSameLocation ? (location_text || bands[0]?.location_text || null) : null; + + // Use location marker (popup) if all bands share same location + // Use cluster marker (zoom) if bands come from different locations + const useLocationMarker = allSameLocation; + + const marker = useLocationMarker + ? createLocationMarker(lat, lon, bandCount, bands, locationName) + : createClusterMarker(lat, lon, bandCount, bands); + + clusterLayer.addLayer(marker); + + // Store reference for each band in cluster + for (const b of bands) { + if (b.ma_id) markersById.set(b.ma_id, marker); + } + } + + if (currentMode === "clusters") { + if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); + } + + $("unique").textContent = String(clusters.length); + + // Render list with visible bands + const visibleBands = clusters.flatMap(c => c.sample_bands || []) + .map(b => typeof b === 'string' ? JSON.parse(b) : b) + .filter(Boolean); + renderList(visibleBands.slice(0, 200)); +} + +/** + * Rebuild layers from individual band data + */ +function rebuildLayersFromBands(bands) { + markersById.clear(); + coordIndex.clear(); + clusterLayer.clearLayers(); + + // Index by coords + for (const b of bands) { + if (!Number.isFinite(b.lat) || !Number.isFinite(b.lon)) continue; + const k = keyFromLatLon(b.lat, b.lon); + if (!coordIndex.has(k)) coordIndex.set(k, []); + coordIndex.get(k).push(b); + } + + for (const [k, coordBands] of coordIndex.entries()) { + const [la, lo] = k.split(",").map(Number); + + if (!Number.isFinite(la) || !Number.isFinite(lo)) continue; + + const locationName = coordBands[0]?.location_text || null; + + // Always use location marker for individual bands (final level) + const marker = createLocationMarker(la, lo, coordBands.length, coordBands, locationName); + + for (const b of coordBands) markersById.set(b.ma_id, marker); + + clusterLayer.addLayer(marker); + } + + if (currentMode === "clusters") { + if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); + } + + $("count").textContent = String(bands.length); + $("unique").textContent = String(coordIndex.size); + renderList(bands); +} + +/** + * Rebuild layers from locally filtered data (legacy mode) + */ +function rebuildLayers() { + markersById.clear(); + coordIndex.clear(); + + clusterLayer.clearLayers(); + + if (currentMode === "clusters") { + if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); + } else if (map.hasLayer(clusterLayer)) { + map.removeLayer(clusterLayer); + } + + // index by coords + for (const b of filtered) { + const k = keyFromLatLon(b.lat, b.lon); + if (!coordIndex.has(k)) coordIndex.set(k, []); + coordIndex.get(k).push(b); + } + + console.log(`Rebuilding layers: ${filtered.length} bands, ${coordIndex.size} unique coords`); + + let markerCount = 0; + const heatPoints = []; + let heatMax = 1; + for (const [k, bands] of coordIndex.entries()) { + const [la, lo] = k.split(",").map(Number); + + // Validate coordinates + if (!Number.isFinite(la) || !Number.isFinite(lo)) { + console.warn(`Invalid coords for key ${k}:`, { la, lo }); + continue; + } + + const intensity = bands.length; + heatPoints.push([la, lo, intensity]); + if (intensity > heatMax) heatMax = intensity; + + const locationName = bands[0]?.location_text || null; + + // Use location marker (final level) for all in legacy mode + const marker = createLocationMarker(la, lo, bands.length, bands, locationName); + markerCount++; + + for (const b of bands) markersById.set(b.ma_id, marker); + + clusterLayer.addLayer(marker); + } + + console.log(`Added ${markerCount} markers to clusterLayer`); + + // heatmap (use all points if loaded, otherwise use filtered) + if (heatPointsLoaded) { + buildHeatLayer(allHeatPoints); + } else { + buildHeatLayer(heatPoints, heatMax); + } + + if (currentMode === "heat") { + if (heatLayer && !map.hasLayer(heatLayer)) map.addLayer(heatLayer); + } else if (heatLayer && map.hasLayer(heatLayer)) { + map.removeLayer(heatLayer); + } + + // counters + $("count").textContent = String(filtered.length); + $("unique").textContent = String(coordIndex.size); +} + +// --- Map init --- +const map = L.map("map", { + preferCanvas: true, + tap: true, // Enable tap for mobile + touchZoom: true, + dragging: true, + zoomControl: false // Disable default, we'll add our own on the right +}).setView([50.2, 10.2], 4); + +// Add zoom control on the right side +L.control.zoom({ + position: 'topright' +}).addTo(map); + +L.tileLayer(DARK_TILES, { maxZoom: 19, attribution: DARK_ATTRIB }).addTo(map); + +// Force map to render properly on mobile +setTimeout(() => { + if (map && map.invalidateSize) { + map.invalidateSize(true); + } +}, 100); + +// Also invalidate on window resize +window.addEventListener('resize', () => { + if (map && map.invalidateSize) { + map.invalidateSize(); + } +}); + +// Invalidate when page becomes visible (mobile browsers) +document.addEventListener('visibilitychange', () => { + if (!document.hidden && map && map.invalidateSize) { + setTimeout(() => map.invalidateSize(true), 100); + } +}); + +// Layer for custom cluster markers +clusterLayer = L.layerGroup(); +map.addLayer(clusterLayer); + +// Debounced viewport change handler +let viewportDebounceTimer = null; +function onViewportChange() { + if (!USE_VIEWPORT_LOADING) return; + + clearTimeout(viewportDebounceTimer); + viewportDebounceTimer = setTimeout(() => { + loadViewportBands(); + }, VIEWPORT_DEBOUNCE_MS); +} + +// Listen for map movements +map.on("moveend", onViewportChange); +map.on("zoomend", onViewportChange); + +function buildHeatLayer(points, maxIntensity) { + if (!points || !points.length) { + if (heatLayer) map.removeLayer(heatLayer); + return; + } + + // Calcul des statistiques pour calibrer l'échelle + const intensities = points.map(p => p[2]).sort((a, b) => b - a); + const actualMax = intensities[0] || 1; + const p95 = intensities[Math.floor(intensities.length * 0.05)] || 1; // 95e percentile + const p90 = intensities[Math.floor(intensities.length * 0.10)] || 1; // 90e percentile + const p75 = intensities[Math.floor(intensities.length * 0.25)] || 1; // 75e percentile + const p50 = intensities[Math.floor(intensities.length * 0.5)] || 1; // Médiane + + // Utilise le 75e percentile pour une heatmap moins saturée + // Multiplié par 2 pour étaler davantage les couleurs + const max = Math.max(15, (maxIntensity || p75) * 2); + + console.log(`Heatmap: ${points.length} points, actualMax=${actualMax}, p95=${p95}, p90=${p90}, p75=${p75}, p50=${p50}, using max=${max}`); + + if (heatLayer) map.removeLayer(heatLayer); + heatLayer = L.heatLayer(points, { + radius: 20, // Réduit de 28 à 20 pour moins de chevauchement + blur: 18, // Réduit de 22 à 18 + maxZoom: 10, // Augmenté de 8 à 10 pour garder l'effet plus longtemps + minOpacity: 0.15, // Réduit de 0.25 à 0.15 pour moins de saturation + max: max, + gradient: { + 0.0: '#000033', // Bleu très foncé (presque invisible) + 0.15: '#000066', // Bleu foncé + 0.3: '#0066cc', // Bleu moyen + 0.45: '#00ccff', // Cyan + 0.58: '#44ff44', // Vert + 0.72: '#ffff00', // Jaune + 0.86: '#ff8800', // Orange + 1.0: '#ff0000' // Rouge + } + }); + + if (currentMode === "heat") { + map.addLayer(heatLayer); + } +} + +function setMode(mode) { + // mode: "clusters" | "heat" + currentMode = mode; + const cOn = mode === "clusters"; + + if (cOn) { + if (!map.hasLayer(clusterLayer)) map.addLayer(clusterLayer); + if (heatLayer && map.hasLayer(heatLayer)) map.removeLayer(heatLayer); + } else { + if (map.hasLayer(clusterLayer)) map.removeLayer(clusterLayer); + if (!heatPointsLoaded) { + loadAllHeatPoints(); + } else { + buildHeatLayer(allHeatPoints); + if (heatLayer && !map.hasLayer(heatLayer)) map.addLayer(heatLayer); + } + } +} + +// --- UI widgets (multiselect) --- +function buildMultiSelect(containerId, items, enabledMap, labelFn, options = {}) { + const container = $(containerId); + if (!container) return; + + const summaryEl = options.summaryEl || null; + const emptyLabel = options.emptyLabel || "Aucun élément"; + + container.innerHTML = ` +
+ +
+ + +
+
+
+ `; + + const searchEl = container.querySelector(".ms-search"); + const listEl = container.querySelector(".ms-list"); + + function updateSummary() { + if (!summaryEl) return; + const total = items.length; + if (!total) { + summaryEl.textContent = "Aucun"; + return; + } + const selected = items.filter(it => enabledMap.get(it.key) !== false).length; + if (selected === total) summaryEl.textContent = "Tous"; + else if (selected === 0) summaryEl.textContent = "Aucun"; + else summaryEl.textContent = `${selected}/${total}`; + } + + function render() { + const q = norm(searchEl.value).toLowerCase(); + listEl.innerHTML = ""; + + if (!items.length) { + listEl.innerHTML = `
${escapeHtml(emptyLabel)}
`; + updateSummary(); + return; + } + + const filteredItems = items.filter(it => labelFn(it).toLowerCase().includes(q)); + if (!filteredItems.length) { + listEl.innerHTML = `
Aucun résultat
`; + updateSummary(); + return; + } + + for (const it of filteredItems) { + const key = it.key; + const on = enabledMap.get(key) === true; + const div = document.createElement("div"); + div.className = `ms-item ${on ? "on" : ""}`; + div.dataset.key = key; + div.innerHTML = ` +
${escapeHtml(labelFn(it))}
+
${it.count}
+ `; + div.addEventListener("click", () => { + enabledMap.set(key, !(enabledMap.get(key) === true)); + render(); + applyFilters(); + }); + listEl.appendChild(div); + } + + updateSummary(); + } + + container.querySelector('[data-act="all"]').addEventListener("click", () => { + for (const it of items) enabledMap.set(it.key, true); + render(); + applyFilters(); + }); + container.querySelector('[data-act="none"]').addEventListener("click", () => { + for (const it of items) enabledMap.set(it.key, false); + render(); + applyFilters(); + }); + searchEl.addEventListener("input", render); + + render(); +} + +function buildStatusToggles(statusItems) { + const grid = $("statusGrid"); + grid.innerHTML = ""; + for (const it of statusItems) { + statusEnabled.set(it.key, true); + const btn = document.createElement("div"); + btn.className = "toggle on"; + btn.dataset.status = it.key; + btn.innerHTML = `${escapeHtml(it.key)}${it.count}`; + btn.addEventListener("click", () => { + const cur = statusEnabled.get(it.key) === true; + statusEnabled.set(it.key, !cur); + btn.classList.toggle("on", !cur); + applyFilters(); + }); + grid.appendChild(btn); + } +} + +function buildMacroGenreButtons(genreFacets = []) { + const container = $("macroGenres"); + if (!container) return; + container.innerHTML = ""; + macroActiveCount = 0; + + const counts = new Map(); + for (const m of MACRO_GENRES) counts.set(m.key, 0); + + // Calculate macro genre counts from genre facets + for (const facet of genreFacets) { + const g = (facet.key || "").toLowerCase(); + if (!g) continue; + for (const m of MACRO_GENRES) { + if (m.terms.some(t => g.includes(t))) { + counts.set(m.key, (counts.get(m.key) || 0) + facet.count); + } + } + } + + for (const m of MACRO_GENRES) { + macroGenreEnabled.set(m.key, false); + const btn = document.createElement("button"); + btn.type = "button"; + btn.className = "macro-btn"; + btn.dataset.key = m.key; + btn.innerHTML = `${escapeHtml(m.key)}${counts.get(m.key) || 0}`; + btn.addEventListener("click", () => { + const cur = macroGenreEnabled.get(m.key) === true; + macroGenreEnabled.set(m.key, !cur); + btn.classList.toggle("on", !cur); + macroActiveCount += cur ? -1 : 1; + applyFilters(); + }); + container.appendChild(btn); + } +} + +function setupDropdown(triggerId, panelId) { + const trigger = $(triggerId); + const panel = $(panelId); + if (!trigger || !panel) return; + trigger.addEventListener("click", () => { + const nowCollapsed = panel.classList.toggle("is-collapsed"); + trigger.setAttribute("aria-expanded", String(!nowCollapsed)); + }); +} + +// --- List + details + highlight --- +function sortBands(arr) { + return BMPure.sortBands(arr, $("sortSelect")?.value || "az"); +} + +function setActive(ma_id) { + // list highlight + for (const [id, el] of listElById.entries()) el.classList.toggle("active", id === ma_id); + + // marker highlight + const m = markersById.get(ma_id); + if (m && m.setStyle) { + m.setStyle({ radius: 8, fillOpacity: 0.85, weight: 2 }); + // reset others + for (const [id, mm] of markersById.entries()) { + if (id !== ma_id && mm.setStyle) mm.setStyle({ radius: 6, fillOpacity: 0.55, weight: 1 }); + } + } +} + +function renderList(items, hintOverride) { + const list = $("list"); + list.innerHTML = ""; + listElById.clear(); + + const sorted = sortBands(items); + $("selectionHint").textContent = hintOverride || `${sorted.length} ${t("results_label")}`; + + const q = currentQuery(); + + for (const b of sorted.slice(0, 4000)) { + const div = document.createElement("div"); + div.className = "band"; + div.dataset.id = String(b.ma_id); + + const name = escapeHtml(b.name || "Unknown"); + const genre = escapeHtml(b.genre || "—"); + const loc = escapeHtml(b.location_text || "—"); + const st = escapeHtml(b.status || "—"); + const yr = Number.isFinite(b.formed_year) ? String(b.formed_year) : "—"; + + div.innerHTML = ` +
${name}
+
+
${escapeHtml(b.country || "—")}${st} • ${yr}
+
${genre}
+
${loc}
+
+ `; + + div.addEventListener("mouseenter", () => { + setActive(b.ma_id); + const m = markersById.get(b.ma_id); + if (m) m.openPopup?.(); + }); + + div.addEventListener("click", () => { + setActive(b.ma_id); + const m = markersById.get(b.ma_id); + if (m && m.getLatLng) { + map.setView(m.getLatLng(), Math.max(map.getZoom(), 8), { animate: true }); + m.openPopup?.(); + } else if (Number.isFinite(b.lat) && Number.isFinite(b.lon)) { + map.setView([b.lat, b.lon], Math.max(map.getZoom(), 10), { animate: true }); + } + }); + + list.appendChild(div); + listElById.set(b.ma_id, div); + + // highlight visuel dans liste + if (q && bandMatchesQuery(b, q)) { + div.style.boxShadow = "0 0 0 1px rgba(198,26,26,0.15) inset"; + } + } +} + +function applyFilters() { + const q = currentQuery(); + + console.log("Applying filters...", { + query: q, + useViewportLoading: USE_VIEWPORT_LOADING + }); + + if (USE_VIEWPORT_LOADING) { + // With viewport loading, trigger a reload from server + loadViewportBands(); + } else { + // Legacy mode: filter locally loaded data + filtered = geocodedBands + .filter(b => bandMatchesQuery(b, q)) + .filter(b => bandMatchesCountry(b)) + .filter(b => bandMatchesStatus(b)) + .filter(b => bandMatchesGenre(b)) + .filter(b => bandMatchesTheme(b)) + .filter(b => bandMatchesYear(b)); + + console.log(`Filtered: ${filtered.length} bands match filters`); + + rebuildLayers(); + renderList(filtered); + } +} + +// --- Modal for no coords --- +const modalBackdrop = $("modalBackdrop"); +const modalBody = $("modalBody"); +const modalClose = $("modalClose"); +const modalTitle = $("modalTitle"); + +async function loadNoLocationBands() { + try { + modalBody.innerHTML = "
Chargement...
"; + + const j = await apiGet("/api/bands?limit=10000&geocoded=0"); + const items = j.items || []; + + modalBody.innerHTML = ""; + + if (!items.length) { + modalBody.innerHTML = `
Aucun groupe sans coordonnées
`; + return; + } + + for (const x of items.slice(0, 500)) { + const div = document.createElement("div"); + div.className = "band"; + const maUrl = x.ma_id ? `https://www.metal-archives.com/bands/x/${x.ma_id}` : "#"; + div.innerHTML = ` + +
+
${escapeHtml(x.country || "—")}${escapeHtml(x.status || "—")}
+
Genre: ${escapeHtml(x.genre || "—")}
+
Lieu: ${escapeHtml(x.location_text || "—")}
+
+ `; + modalBody.appendChild(div); + } + + if (items.length > 500) { + const more = document.createElement("div"); + more.style.cssText = "padding:10px;color:rgba(162,176,194,0.85);text-align:center;"; + more.textContent = `... et ${items.length - 500} autres`; + modalBody.appendChild(more); + } + } catch (e) { + modalBody.innerHTML = `
Erreur: ${escapeHtml(e.message)}
`; + } +} + +function closeModal() { + modalBackdrop.classList.remove("on"); + modalBackdrop.setAttribute("aria-hidden", "true"); +} + +modalClose?.addEventListener("click", closeModal); +modalBackdrop?.addEventListener("click", (e) => { + if (e.target === modalBackdrop) closeModal(); +}); + +// Info modal (legal/FAQ) +const infoBackdrop = $("infoBackdrop"); +const infoBody = $("infoBody"); +const infoClose = $("infoClose"); +const infoTitle = $("infoTitle"); + +// LEGAL_HTML and FAQ_HTML are now generated per-language in locales.js via t('legal_html') / t('faq_html') + +function openInfoModal(title, html) { + if (!infoBackdrop || !infoBody || !infoTitle) return; + infoTitle.textContent = title; + infoBody.innerHTML = html; + infoBackdrop.classList.add("on"); + infoBackdrop.setAttribute("aria-hidden", "false"); +} + +function closeInfoModal() { + if (!infoBackdrop) return; + infoBackdrop.classList.remove("on"); + infoBackdrop.setAttribute("aria-hidden", "true"); +} + +if (infoClose) infoClose.addEventListener("click", closeInfoModal); +if (infoBackdrop) { + infoBackdrop.addEventListener("click", (e) => { + if (e.target === infoBackdrop) closeInfoModal(); + }); +} + +document.addEventListener("keydown", (e) => { + if (e.key === "Escape") { + closeModal(); + closeInfoModal(); + } +}); + +// Sidebar toggle +function setSidebarCollapsed(collapsed) { + if (!appEl) return; + appEl.classList.toggle("sidebar-collapsed", collapsed); + const toggle = $("sidebarToggle"); + if (toggle) { + toggle.setAttribute("aria-expanded", String(!collapsed)); + // Update button text + const label = toggle.querySelector(".label"); + if (label) { + label.textContent = collapsed ? t("options_btn") : t("close_btn"); + } + } + // Refresh map size after sidebar animation + setTimeout(() => map?.invalidateSize?.(), 220); +} + +const sidebarToggle = $("sidebarToggle"); +if (sidebarToggle) { + sidebarToggle.addEventListener("click", (e) => { + e.preventDefault(); + e.stopPropagation(); + const collapsed = appEl.classList.contains("sidebar-collapsed"); + setSidebarCollapsed(!collapsed); + }); +} + +// Note: Sidebar closing is now controlled only via the toggle button +// We removed the overlay auto-close behavior since users want to interact +// with the map while the sidebar is open + +// Collapse sidebar by default on smaller screens +if (window.matchMedia("(max-width: 1200px)").matches) { + setTimeout(() => { + setSidebarCollapsed(true); + }, 100); +} + +// Language dropdown (flag-icons custom widget) +const LANG_FLAGS = { en:"gb", fr:"fr", de:"de", es:"es", it:"it", pl:"pl", nl:"nl", ro:"ro", pt:"pt", cs:"cz", sv:"se", hu:"hu", da:"dk", fi:"fi", sk:"sk", hr:"hr", sl:"si", lt:"lt", lv:"lv", et:"ee", nb:"no" }; + +function syncLangTrigger(lang) { + const trigger = document.getElementById("langTrigger"); + if (!trigger) return; + const flagEl = trigger.querySelector(".lang-flag"); + if (flagEl) flagEl.className = `fi fi-${LANG_FLAGS[lang] || "un"} lang-flag`; + const codeEl = trigger.querySelector(".lang-code"); + if (codeEl) codeEl.textContent = lang.toUpperCase(); + document.querySelectorAll(".lang-opt").forEach(b => { + const isCurrent = b.dataset.lang === lang; + b.classList.toggle("current", isCurrent); + // Le conteneur est un role="listbox" : les lecteurs d'écran s'appuient sur + // aria-selected, pas sur la classe CSS, pour annoncer la langue active. + b.setAttribute("aria-selected", String(isCurrent)); + }); +} + +const langTrigger = document.getElementById("langTrigger"); +const langOptions = document.getElementById("langOptions"); +if (langTrigger && langOptions) { + langTrigger.addEventListener("click", (e) => { + e.stopPropagation(); + const open = langOptions.classList.toggle("hidden") === false; + langTrigger.setAttribute("aria-expanded", String(open)); + }); + document.addEventListener("click", () => { + langOptions.classList.add("hidden"); + langTrigger.setAttribute("aria-expanded", "false"); + }); + langOptions.querySelectorAll(".lang-opt").forEach(btn => { + btn.addEventListener("click", (e) => { + e.stopPropagation(); + currentLang = btn.dataset.lang; + localStorage.setItem("lang", currentLang); + langOptions.classList.add("hidden"); + langTrigger.setAttribute("aria-expanded", "false"); + syncLangTrigger(currentLang); + applyI18n(); + }); + }); + syncLangTrigger(currentLang); +} +applyI18n(); + +// Legal/FAQ links +const openLegal = $("openLegal"); +if (openLegal) openLegal.addEventListener("click", () => openInfoModal(t("legal_title"), t("legal_html"))); + +const openFaq = $("openFaq"); +if (openFaq) openFaq.addEventListener("click", () => openInfoModal(t("faq_title"), t("faq_html"))); + +// Setup dropdowns +setupDropdown("countryToggle", "countrySelect"); +setupDropdown("genreToggle", "genreSelect"); +setupDropdown("themeToggle", "themeSelect"); + +// --- Buttons / controls --- +$("btnNoLocation")?.addEventListener("click", () => { + modalTitle.textContent = t("without_coords_modal"); + modalBackdrop.classList.add("on"); + modalBackdrop.setAttribute("aria-hidden", "false"); + loadNoLocationBands(); +}); + +// Search with suggestions +const searchInput = $("q"); +const suggestionsEl = $("searchSuggestions"); + +function showSearchSuggestions(query) { + if (!query || query.length < 2 || !allBands.length) { + suggestionsEl?.classList.remove("visible"); + return; + } + + const matches = allBands + .filter(b => bandMatchesQuery(b, query)) + .slice(0, 8); // Show max 8 suggestions + + if (!matches.length) { + suggestionsEl?.classList.remove("visible"); + return; + } + + if (suggestionsEl) { + suggestionsEl.innerHTML = matches.map(b => { + const statusText = b.status || "Unknown"; + const yearText = Number.isFinite(b.formed_year) ? b.formed_year : "—"; + return ` +
+
${escapeHtml(b.name)}
+
+ ${escapeHtml(b.country || "—")} • ${escapeHtml(statusText)} • ${yearText} • ${escapeHtml(b.genre || "—")} +
+
+ `; + }).join(""); + + // Add click handlers + suggestionsEl.querySelectorAll(".suggestion-item").forEach(el => { + el.addEventListener("click", () => { + const bandId = Number(el.dataset.id); + const band = allBands.find(b => b.ma_id === bandId); + if (band && Number.isFinite(band.lat) && Number.isFinite(band.lon)) { + const marker = markersById.get(bandId); + if (marker && marker.getLatLng) { + map.setView(marker.getLatLng(), 10, { animate: true }); + marker.openPopup(); + setActive(bandId); + } else { + map.setView([band.lat, band.lon], 12, { animate: true }); + } + } + suggestionsEl.classList.remove("visible"); + if (searchInput) searchInput.value = band?.name || ""; + }); + }); + + suggestionsEl.classList.add("visible"); + } +} + +const debouncedSearch = debounce(() => { + applyFilters(); +}, 400); // 400ms delay + +const debouncedSuggestions = debounce((query) => { + showSearchSuggestions(query); +}, 200); // 200ms delay for suggestions + +searchInput?.addEventListener("input", (e) => { + const query = e.target.value.toLowerCase().trim(); + debouncedSuggestions(query); + debouncedSearch(); +}); + +searchInput?.addEventListener("focus", () => { + const query = searchInput.value.toLowerCase().trim(); + if (query.length >= 2) { + showSearchSuggestions(query); + } +}); + +// Close suggestions when clicking outside +document.addEventListener("click", (e) => { + if (!searchInput?.contains(e.target) && !suggestionsEl?.contains(e.target)) { + suggestionsEl?.classList.remove("visible"); + } +}); + +$("sortSelect")?.addEventListener("change", () => { + // Re-render list with current data + const visibleBands = currentViewportData.flatMap(c => c.sample_bands || [c]) + .map(b => typeof b === 'string' ? JSON.parse(b) : b) + .filter(Boolean); + renderList(visibleBands.slice(0, 200)); +}); + +const heatToggle = $("toggleHeat"); +if (heatToggle) { + heatToggle.addEventListener("change", () => setMode(heatToggle.checked ? "heat" : "clusters")); +} + +$("btnReset")?.addEventListener("click", () => { + if (filtered.length) { + const pts = filtered.map(b => L.latLng(b.lat, b.lon)); + const bounds = L.latLngBounds(pts); + if (bounds.isValid()) map.fitBounds(bounds.pad(0.12)); + } else if (geocodedBands.length) { + const pts = geocodedBands.map(b => L.latLng(b.lat, b.lon)); + const bounds = L.latLngBounds(pts); + if (bounds.isValid()) map.fitBounds(bounds.pad(0.12)); + } else { + map.setView([50.2, 10.2], 4, { animate: true }); + } +}); + +map.on("click", () => { + const visibleBands = currentViewportData.flatMap(c => c.sample_bands || [c]) + .map(b => typeof b === 'string' ? JSON.parse(b) : b) + .filter(Boolean); + renderList(visibleBands.slice(0, 200)); +}); + +// --- Boot --- +function computeFacetCounts(arr, getKey) { + const m = new Map(); + for (const b of arr) { + const val = getKey(b); + const k = val ? norm(val) : "Unknown"; + m.set(k, (m.get(k) || 0) + 1); + } + return [...m.entries()] + .map(([key, count]) => ({ key, count })) + .sort((a,b) => b.count - a.count); +} + +function computeTokenFacetCounts(arr, getTokens) { + const m = new Map(); + for (const b of arr) { + const tokens = getTokens(b) || []; + if (!tokens.length) { + // Count bands without tokens as "Unknown" + m.set("Unknown", (m.get("Unknown") || 0) + 1); + } else { + for (const t of tokens) { + const k = norm(t) || "Unknown"; + m.set(k, (m.get(k) || 0) + 1); + } + } + } + return [...m.entries()] + .map(([key, count]) => ({ key, count })) + .sort((a,b) => b.count - a.count); +} + +/** + * Build timeline slider from year range (from facets or computed) + */ +function buildTimelineFromRange() { + const slider = $("yearSlider"); + slider.innerHTML = ""; + + if (!yearRange.min || !yearRange.max) { + $("yearMin").textContent = "—"; + $("yearMax").textContent = "—"; + $("yearHint").textContent = t("year_data_missing"); + slider.innerHTML = `
${t("year_data_unavailable")}
`; + return; + } + + const { min, max } = yearRange; + + console.log(`Timeline: ${min} - ${max}`); + + $("yearMin").textContent = String(min); + $("yearMax").textContent = String(max); + $("yearHint").textContent = t("all_years_label"); + + noUiSlider.create(slider, { + start: [min, max], + connect: true, + step: 1, + range: { min, max }, + behaviour: "tap-drag", + tooltips: false, + }); + + slider.noUiSlider.on("update", (vals) => { + const a = Math.round(Number(vals[0])); + const b = Math.round(Number(vals[1])); + yearFilter = { min: a, max: b }; + $("yearHint").textContent = (a === min && b === max) ? t("all_years_label") : `${a} → ${b}`; + }); + + slider.noUiSlider.on("change", () => { + console.log(`Year filter changed: ${yearFilter.min} - ${yearFilter.max}`); + applyFilters(); + }); +} + +async function boot() { + try { + console.log("Boot: Loading data..."); + console.log("Viewport loading mode:", USE_VIEWPORT_LOADING ? "ENABLED" : "DISABLED"); + + // Wait for fonts to load (can affect layout) + if (document.fonts && document.fonts.ready) { + await document.fonts.ready; + } + + // Load facets and stats first (fast) + await Promise.all([ + loadFacets(), + loadStats() + ]); + loadGoatCounterFooterStats(); // pas besoin d'await + // Build filters from facets if available, otherwise load bands first + let statuses, genres, countries, themes; + + if (facetData) { + console.log("Using server-side facets for filters"); + statuses = facetData.statuses.map(s => ({ key: s.value, count: s.count })); + countries = facetData.countries.map(c => ({ key: c.value, count: c.count })); + genres = facetData.genres.map(g => ({ key: g.value, count: g.count })); + themes = []; // Themes need to be computed from bands + + // Set year range from facets + if (facetData.year_range) { + yearRange = { + min: facetData.year_range.min_year, + max: facetData.year_range.max_year + }; + yearFilter = { ...yearRange }; + } + } else { + // Fallback: load bands and compute facets locally + console.log("Loading bands for local facet computation..."); + await loadBands(); + statuses = computeFacetCounts(allBands, b => b.status); + genres = computeFacetCounts(allBands, b => b.genre); + countries = computeFacetCounts(allBands, b => b.country); + themes = computeTokenFacetCounts(allBands, b => b.themes); + + } + + console.log(`Boot: Facets ready - ${statuses.length} statuses, ${countries.length} countries, ${genres.length} genres`); + + // Init enabled maps = true + for (const it of genres) genreEnabled.set(it.key, true); + for (const it of countries) countryEnabled.set(it.key, true); + for (const it of themes) themeEnabled.set(it.key, true); + + buildStatusToggles(statuses); + buildMacroGenreButtons(genres); + buildMultiSelect("genreSelect", genres, genreEnabled, (it) => it.key, { summaryEl: $("genreSummary") }); + buildMultiSelect("countrySelect", countries, countryEnabled, (it) => it.key, { summaryEl: $("countrySummary") }); + + if (themes.length) { + $("themeBox").style.display = ""; + buildMultiSelect("themeSelect", themes, themeEnabled, (it) => it.key, { summaryEl: $("themeSummary"), emptyLabel: "Aucun thème" }); + } else { + $("themeBox").style.display = "none"; + } + + // Build timeline from facet data or computed range + buildTimelineFromRange(); + + // Set mode BEFORE applying filters + setMode(heatToggle && heatToggle.checked ? "heat" : "clusters"); + + // Force map size calculation + console.log("Forcing map size recalculation..."); + if (map && map.invalidateSize) { + map.invalidateSize(true); + } + + // Initial data load + console.log("Boot: Loading initial viewport data..."); + + if (USE_VIEWPORT_LOADING) { + // Load viewport data + await loadViewportBands(); + } else { + // Legacy: use all loaded bands + if (!allBands.length) await loadBands(); + applyFilters(); + } + + console.log("Boot: Initial load complete"); + + // Fit to Europe by default + setTimeout(() => { + if (map && map.invalidateSize) { + map.invalidateSize(true); + } + // Default view: Europe + map.setView([50.2, 10.2], 4); + }, 100); + + // Load all bands in background for heatmap and search + setTimeout(() => loadAllHeatPoints(), 1000); + + } catch (err) { + console.error("Boot error:", err); + $("list").innerHTML = `
Erreur de chargement: ${escapeHtml(err.message || String(err))}
`; + } +} + +// Make sure DOM is ready before booting +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', boot); +} else { + boot(); +} diff --git a/apps/web/site/index.html b/apps/web/site/index.html index aaeefa0..6c77e40 100644 --- a/apps/web/site/index.html +++ b/apps/web/site/index.html @@ -48,18 +48,18 @@ EN -

B0nhbG&Eu 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