Bibliotecas / ExpressKit

ExpressKit

Wrapper ligero de express.js que se integra con NodeKit.

ExpressKit

ExpressKit es un wrapper ligero para express.js que se integra con NodeKit y proporciona algunas características útiles como registro de solicitudes, soporte de tracing, controladores y middleware asíncronos, y descripciones detalladas de las rutas.

Instalación:

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

Uso básico:

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('¡Hola Mundo!');
  },
});

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;

Protección CSRF

ExpressKit proporciona protección integrada contra Cross-Site Request Forgery (CSRF) para asegurar tus aplicaciones contra solicitudes maliciosas de origen cruzado. El middleware CSRF genera y valida automáticamente tokens para solicitudes HTTP que cambian el estado.

Configuración Básica

Para habilitar la protección CSRF, configura la clave secreta en tu configuración:

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

const config: Partial<AppConfig> = {
  // ...
  appCsrfSecret: 'tu-clave-secreta-aqui',
};

export default config;

Opciones de Configuración

OpciónTipoPredeterminadoDescripción
appCsrfSecretstring | string[]-Requerido. Clave(s) secreta(s) para la generación de tokens HMAC. Múltiples secretos permiten la rotación de claves.
appCsrfLifetimenumber2592000 (30 días)Vida útil del token en segundos. Establecer a 0 para que no expire.
appCsrfHeaderNamestring'x-csrf-token'Nombre de la cabecera HTTP para la validación del token.
appCsrfMethodsstring[]['POST', 'PUT', 'DELETE', 'PATCH']Métodos HTTP que requieren validación CSRF.

Uso

Una vez configurada, la protección CSRF se aplica automáticamente a todas las rutas con los métodos HTTP especificados:

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

const nodekit = new NodeKit({
  config: {
    appCsrfSecret: 'tu-clave-secreta',
    appAuthPolicy: AuthPolicy.required,

    // Asegúrate de que tu middleware establezca el ID de usuario en el originalContext, de lo contrario, la generación del token CSRF fallará
    appAuthHandler: tuManejadorDeAutenticacion,
  },
});

const app = new ExpressKit(nodekit, {
  'GET /api/form': (req, res) => {
    // El token está disponible en el contexto de la solicitud
    res.json({csrfToken: req.originalContext.get('csrfToken')});
  },

  'POST /api/submit': (req, res) => {
    // Esta ruta valida automáticamente el token CSRF
    res.json({message: 'Formulario enviado con éxito'});
  },
});

Configuración por Ruta

Puedes deshabilitar la protección CSRF para rutas específicas:

const app = new ExpressKit(nodekit, {
  'POST /api/webhook': {
    authPolicy: AuthPolicy.required,
    disableCsrf: true, // Deshabilita CSRF para esta ruta
    handler: (req, res) => {
      res.json({message: 'Webhook procesado'});
    },
  },
});
Acerca de la biblioteca
Estrellas
5
Versión
2.8.0
Última actualización
13.10.2025
Repositorio
github.com/gravity-ui/expresskit
Licencia
MIT License
Mantenedores
Colaboradores