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


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

> Générée depuis les déclarations de types publiées de `@nodefony/framework` **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/framework`

`import { … } from "@nodefony/framework"` — 23 symboles.

### Classes (11)

#### `AdminApiController`

```ts
class AdminApiController extends Controller
```

Controller pont unique du data plane admin (Studio).

- `static readonly instanceId: string` — Identité de l'instance qui répond — `NF_INSTANCE_ID` (k8s pod, worker) ou `pid` en fallback.
- `constructor(context: ContextType)`
- `dispatch(...args: unknown[]): Promise<unknown>` — Action générique appelée par le Resolver pour toute route admin — DUPLEX (une action, deux transports) : même exécution sur les deux transports, seul l'emballage diffère.

#### `ApiKeyController`

```ts
class ApiKeyController extends SecurityApiController
```

Endpoints HTTP de **gestion des clés API personnelles (PAT, P6.12)** — console « mes clés » façon GitHub, adaptateurs MINCES au-dessus du service `apiKeys` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `create(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Émission : crée une clé pour le porteur courant → token clair (1×).
- `capabilities(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Capacités/contraintes d'émission (plafond, scopes, préfixe, durée par défaut) — alimente le formulaire de création.
- `list(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Liste les clés du porteur courant (vue publique, sans secret).
- `revoke(id: unknown): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Révocation : seulement une clé DU porteur courant (sinon 404, anti-énumération).

#### `BenchController`

```ts
class BenchController extends Controller
```

Cible de mesure du **pipeline applicatif** — un controller ordinaire qui rend un corps figé, et rien d'autre.

- `constructor(context: ContextType)`
- `index(): import("nodefony").MaybePromise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Rend le corps figé.
- `probe(): import("nodefony").MaybePromise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Dump de la sonde perf in-situ du http-kernel (`NF_PERF_PROBE=1`) : µs moyens par requête des postes enterScope / new HttpContext / leaveScope.

#### `IssuerMetadataController`

```ts
class IssuerMetadataController extends Controller
```

Les deux documents qui rendent une application Nodefony **découvrable** comme émetteur de jetons — RFC 8414 :

- `constructor(context: ContextType)`
- `metadata(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — `GET /.well-known/oauth-authorization-server` — métadonnées d'émetteur.
- `jwks(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — `GET /.well-known/jwks.json` — clés publiques de signature.

#### `LoginPageController`

```ts
class LoginPageController extends Controller
```

Page de connexion par défaut (ADR-0015) : gabarit F03 rendu côté serveur, feuille `nodefony/login.css`, script `nodefony/login.js`. Aucun front, aucun build côté application.

- `constructor(context: ContextType)`
- `page(): Promise<import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Rend la page de connexion.

#### `OAuth2Controller`

```ts
class OAuth2Controller extends SecurityApiController
```

Endpoints HTTP du **social login OAuth 2.0** (P6 J9) — adaptateurs MINCES au-dessus du service `oauth2` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `providers(): import("nodefony").MaybePromise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Liste PUBLIQUE des fournisseurs à proposer à l'écran de connexion.
- `authorize(provider: string): Promise<import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Démarre le flux : URL d'autorisation + état anti-replay en session, 302.
- `callback(provider: string): Promise<import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Valide `state`, échange le `code`, ouvre la session BFF (302).
- `backchannelLogout(provider: string): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Canal arrière : le fournisseur demande de fermer les sessions qu'il désigne (OpenID Connect Back-Channel Logout 1.0 §2.5-2.8).

#### `ProtectedResourceMetadataController`

```ts
class ProtectedResourceMetadataController extends Controller
```

Le document qui rend un refus APPRENABLE — RFC 9728.

- `constructor(context: ContextType)`
- `metadata(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — `GET /.well-known/oauth-protected-resource/<chemin>` — RFC 9728 §3.

#### `SessionAuthController`

```ts
class SessionAuthController extends SecurityApiController
```

Endpoints HTTP du flux de session BFF — adaptateurs MINCES au-dessus du service `authFlow` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `login(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Login BFF : credential JSON présenté UNE fois → cookie de session opaque.
- `loginTotp(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Second facteur (TOTP ou code de récupération) après un `login` ayant répondu `202 mfaRequired`.
- `logout(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Détruit la session (storage + cookie).
- `me(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Identité de la session courante, re-résolue (rôles frais).

#### `TokenAuthController`

```ts
class TokenAuthController extends SecurityApiController
```

Endpoints HTTP d'émission/rotation de **JWT** — adaptateurs MINCES au-dessus du service `tokenService` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `token(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Émission : credential présenté → couple access/refresh.
- `refresh(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Rotation : refresh présenté → nouveau couple (ancien révoqué).

#### `TotpController`

```ts
class TotpController extends SecurityApiController
```

Endpoints HTTP **self-service 2FA TOTP (P6.17)** — console « ma sécurité », adaptateurs MINCES au-dessus du service `totp` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `enroll(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Démarre l'enrôlement : secret + URI otpauth affichés une seule fois.
- `confirm(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Confirme l'enrôlement par un 1ᵉʳ code → active + codes de récupération (1×).
- `disable(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Désactive le 2FA du porteur courant (retire secret + codes).
- `status(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — État 2FA du porteur courant (alimente la console « ma sécurité »).

#### `WebAuthnController`

```ts
class WebAuthnController extends SecurityApiController
```

Endpoints HTTP des cérémonies **WebAuthn / passkeys** (P6 J9) — adaptateurs MINCES au-dessus du service `webauthn` (`@nodefony/security`) :

- `constructor(context: ContextType)`
- `status(): import("nodefony").MaybePromise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Dit si la connexion par passkey répondra : `{ enabled }`, toujours `200`.
- `registerOptions(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Défi d'enregistrement — l'utilisateur connecté ajoute un passkey.
- `registerVerify(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Vérifie la réponse d'enregistrement et persiste le credential.
- `loginOptions(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Défi d'authentification.
- `loginVerify(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Vérifie l'assertion (empreinte) et OUVRE la session BFF.
- `listCredentials(): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Liste les passkeys de l'utilisateur courant (console « mes appareils »).
- `removeCredential(id: unknown): Promise<import("@nodefony/http").Http2Response | import("@nodefony/http").HttpResponse | import("@nodefony/http").WebsocketResponse>` — Supprime une passkey DU porteur courant (sinon 404 — anti-IDOR/anti-énumération).

### Fonctions (12)

#### `collectProtectedResources`

```ts
function collectProtectedResources(container: IServiceScan): readonly IProtectedResourceInput[]
```

Rassemble ce que TOUS les services du conteneur déclarent protéger.

#### `mountApiKeyRoutes`

```ts
function mountApiKeyRoutes(frameworkModule: Module): void
```

Monte les routes de gestion des clés API — appelé par le module framework à `onKernelReady`, seulement si le service `apiKeys` est présent.

#### `mountBenchRoutes`

```ts
function mountBenchRoutes(frameworkModule: Module): void
```

Monte la route de banc — appelée par le module framework, uniquement si `NF_BENCH_ROUTE=1`.

#### `mountIssuerMetadataRoutes`

```ts
function mountIssuerMetadataRoutes(frameworkModule: Module, issuer: string): void
```

Monte les deux documents d'émetteur — appelé par le module framework à `onKernelReady`, seulement si `tokenService.publishedIssuer()` répond.

#### `mountLoginPage`

```ts
function mountLoginPage(frameworkModule: Module): void
```

Monte la page de connexion par défaut quand security la décrit : la route sur `loginPage.path`, et ses fichiers sous `LOGIN_PAGE_ASSETS_BASE`.

#### `mountOAuth2Routes`

```ts
function mountOAuth2Routes(frameworkModule: Module): void
```

Monte les routes du social login OAuth — appelé par le module framework à `onKernelReady`, seulement si le service `oauth2` est présent.

#### `mountProtectedResourceRoutes`

```ts
function mountProtectedResourceRoutes(frameworkModule: Module, resources: readonly IProtectedResourceInput[]): number
```

Monte les documents de ressource protégée — appelé par le module framework à `onKernelReady`, seulement si un publieur déclare au moins une ressource.

#### `mountSessionAuthRoutes`

```ts
function mountSessionAuthRoutes(frameworkModule: Module): void
```

Monte les routes du flux de session BFF — appelé par le module framework à `onKernelReady`, seulement si le service `authFlow` est présent.

#### `mountTokenAuthRoutes`

```ts
function mountTokenAuthRoutes(frameworkModule: Module): void
```

Monte les routes d'émission/rotation JWT — appelé par le module framework à `onKernelReady`, seulement si le service `tokenService` est présent.

#### `mountTotpRoutes`

```ts
function mountTotpRoutes(frameworkModule: Module): void
```

Monte les routes self-service 2FA — appelé par le module framework à `onKernelReady`, seulement si le service `totp` est présent.

#### `mountWebAuthnRoutes`

```ts
function mountWebAuthnRoutes(frameworkModule: Module): void
```

Monte les routes des cérémonies WebAuthn — appelé par le module framework à `onKernelReady`, seulement si le service `webauthn` est présent.

#### `protectedResourceRoutePaths`

```ts
function protectedResourceRoutePaths(resources: readonly IProtectedResourceInput[]): string[]
```

Chemins bien connus à monter pour un jeu de ressources déclarées.

---

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