---
title: "Référence d'API — @nodefony/http — rateLimit"
source: docs/api/http/rateLimit.md
url: https://nodefony.github.io/nodefony-core/docs/api/http/rateLimit/
---


[Documentation](../../../) › [Référence d'API](../../) › [`@nodefony/http`](../) › rateLimit

> Générée depuis les déclarations de types publiées de `@nodefony/http` **10.0.0-beta.5** : exactement ce que reçoit une application qui l'installe. Cette page n'existe dans aucun dépôt — pour la corriger, on corrige le TSDoc du code.

## `@nodefony/http`

`import { … } from "@nodefony/http"` — 4 symboles.

### Classes (1)

#### `MemoryRateLimitStore`

```ts
class MemoryRateLimitStore implements IRateLimitStore
```

Store de rate-limit **en mémoire** — algorithme *fixed window* par clé (IP).

- `constructor(options: IRateLimitOptions, now?: () => number)`
- `hit(key: string): RateLimitVerdict` — Enregistre un hit pour `key` (IP cliente résolue) et renvoie le verdict de la fenêtre courante.
- `gc(nowMs?: number): number` — Purge les fenêtres expirées (`resetAt <= now`).
- `listPage(query: IRateLimitListQuery): Promise<IPage<IRateLimitEntry>>` — {@inheritDoc IRateLimitStore.listPage}
- `get trackedCount(): number` — Nombre de clés (IP) actuellement suivies — introspection / métrique.
- `get rejectedTotal(): number` — Total cumulé de requêtes rejetées (`429`) depuis le boot — métrique.

### Interfaces (3)

#### `IRateLimitOptions`

```ts
interface IRateLimitOptions
```

Options de construction d'un `IRateLimitStore`.

- `readonly windowMs: number` — Largeur de la fenêtre fixe, en **millisecondes**.
- `readonly max: number` — Nombre max de requêtes autorisées par clé (IP) et par fenêtre.
- `readonly maxTracked: number` — Borne mémoire : nombre max de clés (IP) suivies simultanément.

#### `IRateLimitStore`

```ts
interface IRateLimitStore
```

Compteur de rate-limit par clé (IP). Implémentation par défaut : ("./MemoryRateLimitStore").MemoryRateLimitStore (fenêtre fixe, en mémoire).

- `hit(key: string): RateLimitVerdict` — Enregistre un hit pour `key` (IP cliente résolue) et renvoie le verdict de la fenêtre courante.
- `gc(nowMs?: number): number` — Purge les fenêtres expirées (`resetAt <= now`).
- `listPage(query: IRateLimitListQuery): Promise<IPage<IRateLimitEntry>>` — Page des clés suivies — introspection admin (« qui me martèle ?
- `readonly trackedCount: number` — Nombre de clés (IP) actuellement suivies — introspection / métrique.
- `readonly rejectedTotal: number` — Total cumulé de requêtes rejetées (`429`) depuis le boot — métrique.

#### `RateLimitVerdict`

```ts
interface RateLimitVerdict
```

Verdict rendu par `IRateLimitStore.hit` — porte tout le nécessaire pour émettre les en-têtes `X-RateLimit-*` (+ `Retry-After` en cas de rejet) sans relire l'état du store.

- `readonly limited: boolean` — `true` si la requête dépasse le quota de la fenêtre → réponse `429`.
- `readonly limit: number` — Plafond de la fenêtre — en-tête `X-RateLimit-Limit`.
- `readonly remaining: number` — Requêtes restantes dans la fenêtre courante (`X-RateLimit-Remaining`, ≥ 0).
- `readonly resetAtMs: number` — Fin de la fenêtre courante, en **ms epoch** (`X-RateLimit-Reset` = `⌈/1000⌉`).
- `readonly retryAfterS: number` — Secondes jusqu'au reset (`Retry-After`) ; `0` si la requête n'est pas limitée.

---

[← Toutes les références d'API](../../)
