Bibliothèques / ExpressKit

ExpressKit

Wrapper express.js léger qui s'intègre à NodeKit.

ExpressKit

ExpressKit est un wrapper léger pour express.js qui s'intègre à NodeKit et offre des fonctionnalités utiles telles que la journalisation des requêtes, la prise en charge du traçage, les contrôleurs et middlewares asynchrones, ainsi qu'une description détaillée des routes.

Installation :

npm install --save @gravity-ui/nodekit @gravity-ui/expresskit

Utilisation de base :

import {ExpressKit} from '@gravity-ui/expresskit';
import {NodeKit} from '@gravity-ui/nodekit';

const nodekit = new NodeKit();

const app = new ExpressKit(nodekit, {
  'GET /': (req, res) => {
    res.send('Hello World!');
  },
});

app.run();

CSP

config.ts

import type {AppConfig} from '@gravity-ui/nodekit';
import {csp} from '@gravity-ui/expresskit';

const config: Partial<AppConfig> = {
    expressCspEnable: true,
    expressCspPresets: ({getDefaultPresets}) => {
        return getDefaultPresets({defaultNone: true}).concat([
            csp.inline(),
            {csp.directives.REPORT_TO: 'my-report-group'},
        ]);
    },
    expressCspReportTo: [
        {
            group: 'my-report-group',
            max_age: 30 * 60,
            endpoints: [{ url: 'https://cspreport.com/send'}],
            include_subdomains: true,
        }
    ]
}

export default config;

Protection CSRF

ExpressKit fournit une protection intégrée contre le Cross-Site Request Forgery (CSRF) pour sécuriser vos applications contre les requêtes inter-sites malveillantes. Le middleware CSRF génère et valide automatiquement les jetons pour les requêtes HTTP modifiant l'état.

Configuration de base

Pour activer la protection CSRF, configurez la clé secrète dans votre configuration :

import type {AppConfig} from '@gravity-ui/nodekit';

const config: Partial<AppConfig> = {
  // ...
  appCsrfSecret: 'votre-clé-secrète-ici',
};

export default config;

Options de configuration

OptionTypeDéfautDescription
appCsrfSecretstring | string[]-Requis. Clé(s) secrète(s) pour la génération de jetons HMAC. Plusieurs secrets permettent la rotation des clés.
appCsrfLifetimenumber2592000 (30 jours)Durée de vie du jeton en secondes. Définir à 0 pour aucune expiration.
appCsrfHeaderNamestring'x-csrf-token'Nom de l'en-tête HTTP pour la validation du jeton.
appCsrfMethodsstring[]['POST', 'PUT', 'DELETE', 'PATCH']Méthodes HTTP nécessitant une validation CSRF.

Utilisation

Une fois configurée, la protection CSRF est automatiquement appliquée à toutes les routes avec les méthodes HTTP spécifiées :

import {ExpressKit, AuthPolicy} from '@gravity-ui/expresskit';
import {NodeKit} from '@gravity-ui/nodekit';

const nodekit = new NodeKit({
  config: {
    appCsrfSecret: 'votre-clé-secrète',
    appAuthPolicy: AuthPolicy.required,

    // Assurez-vous que votre middleware définit l'ID utilisateur dans originalContext, sinon la génération du jeton CSRF échouera
    appAuthHandler: yourAuthHandler,
  },
});

const app = new ExpressKit(nodekit, {
  'GET /api/form': (req, res) => {
    // Le jeton est disponible dans le contexte de la requête
    res.json({csrfToken: req.originalContext.get('csrfToken')});
  },

  'POST /api/submit': (req, res) => {
    // Cette route valide automatiquement le jeton CSRF
    res.json({message: 'Formulaire soumis avec succès'});
  },
});

Configuration par route

Vous pouvez désactiver la protection CSRF pour des routes spécifiques :

const app = new ExpressKit(nodekit, {
  'POST /api/webhook': {
    authPolicy: AuthPolicy.required,
    disableCsrf: true, // Désactive le CSRF pour cette route
    handler: (req, res) => {
      res.json({message: 'Webhook traité'});
    },
  },
});
À propos de la bibliothèque
Étoiles
5
Version
2.8.0
Dernière mise à jour
13.10.2025
Dépôt
github.com/gravity-ui/expresskit
Licence
MIT License
Mainteneurs
Contributeurs