UNPKG

@unito/integration-sdk

Version:

Integration SDK

41 lines (31 loc) 988 B
import { Request, Response, NextFunction } from 'express'; import { BadRequestError } from '../httpErrors.js'; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Express { interface Locals { secrets: Secrets; } } } /** * Represents the secrets parsed from the X-Unito-Secrets header. * * This is the decrypted payload of the secrets defined in the integration's configuration. */ export type Secrets = { [keys: string]: unknown }; const SECRETS_HEADER = 'X-Unito-Secrets'; function extractSecrets(req: Request, res: Response, next: NextFunction) { const secretsHeader = req.header(SECRETS_HEADER); if (secretsHeader) { let secrets: Secrets; try { secrets = JSON.parse(Buffer.from(secretsHeader, 'base64').toString('utf8')); } catch { throw new BadRequestError(`Malformed HTTP header ${SECRETS_HEADER}`); } res.locals.secrets = secrets; } next(); } export default extractSecrets;