À propos du projet

sightings est une bibliothèque d'analytics de pages vues, légère et sans cookies, écrite en TypeScript. Elle suit les visites sans écrire sur l'appareil de l'utilisateur — pas de cookies, localStorage, ni empreintes numériques — et stocke toutes les lignes directement dans votre propre base de données. La conception considère chaque visite comme une « observation » : un fait qu'une visite a eu lieu, sans liaison à une identité. L'identification des visiteurs utilise un hachage SHA-256 salé, dérivé de l'IP, de l'user agent, d'une clé secrète et du jour UTC, tronqué à 128 bits et rotatif quotidiennement. La bibliothèque impose des limites strictes aux données : les paramètres de requête hors liste autorisée sont rejetés, le référent ne stocke que les noms d'hôte, et il n'y a pas de charges utiles d'événements personnalisés — l'ajout de tout champ au corps du beacon renvoie une erreur 400 au lieu d'enregistrer une nouvelle métrique. Elle distingue deux moitiés de trafic que la plupart des outils confondent. Les visiteurs humains envoient une unique requête `sendBeacon` par navigation, comptée côté serveur. Les robots et agents IA (comme gptbot, claudebot, perplexitybot, telegram-preview) n'exécutent jamais de JavaScript côté client, ils sont donc détectés et comptés dans le middleware par classification familiale plutôt que par chaînes user‑agent brutes. Cela rend pratique la mesure effective du crawl de votre contenu par les modèles IA. Le package principal fonctionne partout où une paire Request/Response standard et Web Crypto sont présentes — Node, Deno, Bun, Vercel Edge, Cloudflare Workers. Les intégrations officielles incluent `@sightings/next` (gestionnaire et middleware Next.js App Router) et `@sightings/prisma` (adaptateur Prisma avec modèle de schéma). Des adaptateurs de stockage personnalisés peuvent être implémentés en fournissant une méthode unique `record()` et optionnellement une méthode `summary()`. Les options de configuration clés contrôlent le chemin de base de l'API, la redaction au niveau des chemins (par exemple suppression des sous‑arbres `/admin` et `/invite`), la liste autorisée des paramètres de requête (par défaut `utm_*` et `ref`), la détection de famille de crawler, la fenêtre de hachage des visiteurs (quotidienne par défaut, ou horaire), la priorité des en‑têtes IP et pays, ainsi que la gestion des erreurs. Une interface de requête intégrée `api.summary()` fournit des vues agrégées sur des plages de dates avec filtrage robot/humain. Des méthodes d'enregistrement direct sont aussi exposées pour les contextes SSR, les frameworks non‑HTTP ou les retours arrière. Le dépôt utilise des changesets pour un versionnement verrouillé entre ses trois packages et publie des tarballs liés à la provenance via CI. Catégorie : données | Sous‑catégorie : analytics-bi