My App
Backend

Safety kit

La logique de sécurité pure et testée, du niveau de confiance à la pondération des signalements.

Les règles de sécurité les plus importantes ne vivent pas dans les handlers. Elles vivent dans des fonctions pures, testables en isolation, sans base ni serveur. C'est le rôle de packages/core aujourd'hui, et du package safety-kit prévu.

Pourquoi de la logique pure

Une règle de proportionnalité ou de niveau de confiance doit être vérifiable au test unitaire, indépendamment du réseau. Isoler cette logique la rend lisible, testable, et réutilisable par l'API comme par le worker.

Le niveau de confiance

// packages/core/src/trust.ts
export const TRUST_LEVELS = ["new", "active", "trusted", "flagger"] as const;
export type TrustLevel = (typeof TRUST_LEVELS)[number];

export function trustRank(level: TrustLevel): number { /* ... */ }
export function hasAtLeastTrust(level: TrustLevel, required: TrustLevel): boolean { /* ... */ }

La macro requireTrust du plugin de sécurité consomme directement trustRank. Un nouveau compte est bridé tant qu'il n'a pas gagné en confiance.

La priorité d'un signalement

C'est la traduction concrète du principe anti-meute. reportPriority calcule la place d'un signalement dans la file de modération. Un signaleur fiable et une raison grave pèsent lourd. Le volume, lui, est amorti de façon logarithmique.

// packages/core/src/report-priority.ts
export function reportPriority({ reason, reporterTrust, clusterSize }: ReportSignal): number {
  const base = REASON_WEIGHT[reason];
  const trustBonus = trustRank(reporterTrust) * 10;
  const clusterBonus = Math.round(Math.log2(Math.max(1, clusterSize) + 1) * 5);
  return Math.max(0, base + trustBonus + clusterBonus);
}

Le poids logarithmique est le point clé : au delà d'un certain nombre, chaque signalement supplémentaire d'un même groupe coordonné n'ajoute presque rien. Un signalement de menace par un compte de confiance passe devant une centaine de signalements de spam par des comptes récents. Le volume n'est pas une vérité.

Testé

Ces fonctions sont couvertes par des tests sur le runner de Bun. Chaque règle de sécurité importante mérite son test : l'ordre des niveaux de confiance, la priorité d'une menace au dessus d'un spam, l'amortissement d'un afflux coordonné.

bun run test

Ce qui vient dans safety-kit

Le package safety-kit regroupera les algorithmes d'anti-abus qui dépassent une simple fonction pure :

  • la limitation de débit multi-niveaux, par action et par compte ;
  • le scoring d'acharnement sur fenêtre glissante ;
  • le calcul et la mise à jour du niveau de confiance à partir du comportement.

Comme packages/core, il restera testable en isolation, et les macros Elysia le consommeront au niveau des routes.

On this page