"""Issue #40, réglages promis à MCas86 le 2026-10-19.
Le titre et l'icône de l'en-tête, réglés une fois pour l'installation et
insérés dans la page à chaque envoi ; la dernière vue retenue par navigateur,
et la ronde qui reprend quand seule la fermeture de la page l'avait coupée.
Le tri des caméras hors ligne est dans test_serve_app_js_confort_cameras.py.
Côté page, le vrai code de serve_app.js, exécuté par node avec un faux DOM.
"""
from __future__ import annotations
import json
import os
import re
import shutil
import subprocess
import tempfile
import unittest
from pathlib import Path
from unittest import mock
from urllib.parse import unquote
_IMPORT_HOME = tempfile.TemporaryDirectory(prefix="blink-entete-import-")
with mock.patch.dict(os.environ, {"BLINK_BOOTSTRAP": "none",
"BLINK_HOME": _IMPORT_HOME.name}):
import serve
import runtime
RACINE = Path(__file__).parent
SOURCE = (RACINE / "serve_app.js").read_text(encoding="utf-8")
def entete(page: str) -> tuple[str, str, str]:
titre = re.search(r"