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


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

> 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"` — 6 symboles.

### Classes (4)

#### `AdminBroker`

```ts
class AdminBroker extends Service implements IAdminBroker
```

Implémentation du data plane admin (Studio) — collecte les `IAdminApi` et monte `/nodefony/<namespace>/api/*` via le Router.

- `readonly rootPrefix = "/nodefony"` — Préfixe racine réservé au framework.
- `readonly apiSegment = "api"` — Segment marqueur du data plane.
- `readonly defaultRole = "ROLE_NODEFONY_ADMIN"` — Rôle exigé par défaut quand un endpoint n'en précise pas.
- `constructor(module: Module)`
- `register(api: IAdminApi): this` — Enregistre un producteur.
- `unregister(namespace: string): boolean` — Retire un producteur (et ses routes si déjà montées).
- `has(namespace: string): boolean` — Vérifie l'existence d'un service dans le container.
- `getApi(namespace: string): IAdminApi` — Producteur enregistré sous ce namespace, ou `undefined`.
- `list(): readonly IAdminApi[]` — Liste immuable des producteurs enregistrés.
- `resolvePath(namespace: string, endpointPath: string): string` — Calcule le chemin absolu d'un endpoint sans le monter.
- `resolve(routeName: string): IAdminRoute` — Résout une route admin par son nom framework — lookup O(1) utilisé par le controller pont (`AdminApiController.dispatch`) à chaque requête.
- `routes(): readonly IAdminRoute[]` — Introspection : toutes les routes admin résolues (montées ou montables).
- `mountAll(): void` — Monte toutes les routes de tous les producteurs enregistrés via le Router (`Router.createRoute`).

#### `Eta`

```ts
class Eta extends Template
```

- `engine: EtaEngine`
- `constructor(module: Module)`
- `render(str: string, data?: Record<string, unknown>): Promise<string>` — Rend un template depuis une chaîne source (chemin chaud du Controller).
- `renderFile(path: string, data?: Record<string, unknown>): Promise<string>` — Rend un template depuis un chemin de fichier (lecture async non bloquante).

#### `MemoryIdempotencyStore`

```ts
class MemoryIdempotencyStore extends Service implements IIdempotencyStore
```

Implémentation **mémoire** (per-pod) de `IIdempotencyStore` — cache borné de dédup des mutations admin rejouées.

- `constructor(module: Module)`
- `get size(): number` — Nombre d'entrées vivantes (observabilité / tests).
- `listPage(query: IIdempotencyListQuery): Promise<IPage<IIdempotencyKeyEntry>>` — {@inheritDoc IIdempotencyStore.listPage}
- `begin(key: string, fingerprint: string): IdempotencyOutcome` — Réserve **atomiquement** la clé et renvoie le verdict à suivre.
- `complete(key: string, response: IdempotentResponse): void` — Mémorise la réponse d'une clé *in-flight* (TTL) → rejeux futurs = `replayed`.
- `abort(key: string): void` — Libère une clé *in-flight* dont l'exécution a échoué : rien n'est mémorisé (un échec doit pouvoir être réessayé).

#### `Router`

```ts
class Router extends Service implements IRequestRouter
```

- `get [FRAMEWORK_ROUTER](): true` — Marque `FRAMEWORK_ROUTER` — sur le prototype, aucun champ par instance.
- `static routes: Route[]`
- `routes: Route[]`
- `constructor(module: Module)`
- `getSingletonController<T extends object>(ctor: new (...args: never[]) => T, create: () => MaybePromise<T>): MaybePromise<T>` — Retourne l'instance singleton d'une classe controller `@Scope("singleton")`, en la créant au premier appel via `create`.
- `servesWebsocket(pathname: string): boolean` — Dit si au moins une route déclare le transport `WEBSOCKET` pour ce chemin — contrôle d'avant `101` du pipeline WebSocket (cf `IRequestRouter`).
- `resolve(context: ContextType, cleanPathOverride?: string, methodOverride?: string): Resolver` — Résout une route pour un contexte donné.
- `resolveController(contex: ContextType, name: string): Resolver`
- `matchRoutes(path: string): RegExpExecArray[]`
- `getRoutes(name: string): Route[] | Route`
- `setRoute(): void`
- `removeRoutes(name: string): void`
- `static createRoute(name: string, obj: RouteOptions): Route`
- `static setController(myconstructor: TypeController<Controller>, module: Module): TypeController<Controller>` — Enregistre une classe contrôleur pour un module — l'entonnoir UNIQUE : le décorateur `@controllers` y passe, comme les contrôleurs internes que le framework enregistre directement (plan d'administrati …
- `static getRoutesForController(myconstructor: TypeController<Controller>): Route[]` — Retourne les routes enregistrées pour un controller donné — utilisé par le décorateur `@controllers` pour logger chaque route depuis le module propriétaire (msgid `MODULE <name>` au lieu de `KERNEL`).

### Fonctions (1)

#### `isFrameworkRouter`

```ts
function isFrameworkRouter(router: IRequestRouter | null): router is Router
```

Dit si le service `router` d'un contexte est le Router de `@nodefony/framework` — la garde qui rétrécit le contrat `IRequestRouter` de `@nodefony/http` sans conversion, pour qui lit des membres propres au framework (le Resolver complet que rend `resolve`).

### Constantes (1)

#### `FRAMEWORK_ROUTER`

```ts
const FRAMEWORK_ROUTER: unique symbol
```

Marque du Router de `@nodefony/framework` — ce que `isFrameworkRouter` lit. `Symbol.for` : la même marque pour deux copies installées du framework, là où `instanceof` échouerait en silence. Un faux routeur de test s'en réclame explicitement.

---

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