e2ee-adapter
Version:
Plug-and-play End-to-End Encryption middleware for Express.js and NestJS using hybrid AES-CBC + RSA encryption with secure key exchange
75 lines • 3.42 kB
TypeScript
import { Request } from 'express';
import { E2EEConfig, DecryptedData, E2EEError } from '../types';
export interface E2EECommonOptions {
config: Required<E2EEConfig>;
createError: (message: string, code: string, statusCode?: number) => E2EEError;
}
export interface E2EEContext {
decryptedData: DecryptedData;
originalBody: any;
aesKey: Buffer;
iv: Buffer;
}
export interface RequestProcessingResult {
shouldContinue: boolean;
e2eeContext?: E2EEContext;
}
/**
* Check if request should be processed by E2EE
*/
export declare function shouldProcessRequest(req: Request, config: Required<E2EEConfig>): boolean;
/**
* Check if request has encryption headers
*/
export declare function hasEncryptionHeaders(req: Request, config: Required<E2EEConfig>): boolean;
/**
* Get key pair for a specific keyId
*/
export declare function getKeyPair(keyId: string, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError): {
privateKey: string;
publicKey: string;
};
/**
* Extract AES key from headers for response encryption (without decryption)
*/
export declare function extractAESKeyFromHeaders(req: Request, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError): Promise<{
aesKey: Buffer;
iv: Buffer;
}>;
/**
* Decrypt request using headers
*/
export declare function decryptRequest(req: Request, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError): Promise<DecryptedData>;
/**
* Encrypt response data
*/
export declare function encryptResponse(data: any, aesKey: Buffer, iv: Buffer, createError: (message: string, code: string, statusCode?: number) => E2EEError): Promise<string>;
/**
* Merge configuration with defaults
*/
export declare function mergeConfigWithDefaults(config: E2EEConfig): Required<E2EEConfig>;
/**
* Validate configuration
*/
export declare function validateConfig(config: E2EEConfig): void;
/**
* Create E2EE error with consistent structure
*/
export declare function createE2EEError(message: string, code: string, statusCode?: number): E2EEError;
/**
* Process request and determine if it should be handled by E2EE
*/
export declare function processRequest(req: Request, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError): RequestProcessingResult;
/**
* Handle request decryption and setup encryption context
*/
export declare function handleRequestDecryption(req: Request, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError, onDecrypt?: (decryptedData: DecryptedData, req: Request) => void): Promise<E2EEContext | undefined>;
/**
* Setup encryption context for response-only encryption
*/
export declare function setupResponseEncryptionContext(req: Request, config: Required<E2EEConfig>, createError: (message: string, code: string, statusCode?: number) => E2EEError): Promise<E2EEContext>;
/**
* Handle response encryption with consistent error handling
*/
export declare function handleResponseEncryption(data: any, e2eeContext: E2EEContext, createError: (message: string, code: string, statusCode?: number) => E2EEError, onEncrypt?: (encryptedData: any, res: any) => void, res?: any): Promise<string>;
//# sourceMappingURL=e2ee-common.d.ts.map