@unito/integration-sdk
Version:
Integration SDK
41 lines (31 loc) • 988 B
text/typescript
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;