thomas-middleware
v1.0.1
Published
Middleware Express para el protocolo thomas/encrypted E2E — descifra peticiones y cifra respuestas
Maintainers
Readme
thomas-middleware
Middleware Express para el protocolo thomas/encrypted E2E.
Abstrae la complejidad del cifrado/descifrado en un único middleware reutilizable.
Sin dependencias de process.env ni tipos propietarios de ningún proyecto.
Depende de thomas-encryptation para toda la lógica criptográfica.
Instalación (local)
"thomas-middleware": "file:../thomas-middleware",
"thomas-encryptation": "file:../thomas-encryptation"Uso
import express from 'express';
import { createThomasMiddleware } from 'thomas-middleware';
const app = express();
// La clave privada viene de tu sistema de configuración, NO de process.env hardcodeado
app.use(createThomasMiddleware({
privateKey: myConfig.thomasPrivateKey, // PKCS8 PEM — requerida
maxPayloadBytes: 10 * 1024 * 1024, // 10 MB (opcional, default: 5 MB)
onError: (ctx, err) => logger.error({ ctx, err }), // opcional
}));
// DESPUÉS del middleware thomas
app.use(express.json());
app.post('/api/users', (req, res) => {
// req.body ya está descifrado
// res.json() cifrará automáticamente si el cliente envió Accept: thomas/encrypted
res.json({ ok: true, data: req.body });
});Comportamiento
| Header de entrada | Acción |
|---|---|
| Content-Type: thomas/encrypted | Lee chunks → descifra body → asigna req.body |
| Accept: thomas/encrypted | Parchea res.json() para cifrar la respuesta con K_resp |
| X-Thomas-Response-Key (GET) | Descifra K_resp del header → parchea res.json() |
| Ninguno | next() sin modificar nada |
Errores HTTP estándar
| Código | Causa |
|---|---|
| 413 | Payload supera maxPayloadBytes |
| 400 | Body no es JSON válido o payload malformado |
| 400 | No se pudo descifrar (clave incorrecta, datos corruptos) |
| 500 | Error al cifrar la respuesta |
Configuración (IThomasMiddlewareConfig)
interface IThomasMiddlewareConfig {
privateKey: string; // PKCS8 PEM — requerida
maxPayloadBytes?: number; // default: 5 MB
onError?: (context: string, error: unknown) => void; // default: console.error
}Dependencias
thomas-encryptation— core criptográfico (local)express— peer dependency (≥ 4.0.0)
