Add telemetry support from via Judd

This commit is contained in:
kittentm 2026-02-22 19:48:25 +01:00
commit 227002a9ef
19 changed files with 4110 additions and 4 deletions

View file

@ -0,0 +1,10 @@
const stream = require('node:stream');
function copyRequestStreamMiddleware(request, response, next) {
request.copy = stream.Readable.from(request.rawBody);
request.copy.headers = request.headers;
next();
}
module.exports = copyRequestStreamMiddleware;

View file

@ -0,0 +1,10 @@
const express = require('express');
const rawBodyMiddleware = express.raw({
type: '*/*',
verify(request, response, buffer, encoding) {
request.rawBody = buffer;
}
});
module.exports = rawBodyMiddleware;

View file

@ -0,0 +1,14 @@
const titles = require('../titles');
function titleCodeMiddleware(request, response, next) {
request.titleCode = 'wup-agmj';
if (!titles[request.titleCode]) {
console.error(`Titles Available: ${Object.keys(titles)}`);
return next(`No valid title config set for title code ${request.titleCode}`);
}
next();
}
module.exports = titleCodeMiddleware;

View file

@ -0,0 +1,14 @@
const crypto = require('crypto');
function validateBOSSDigestMiddleware(request, response, next) {
const calculatedHash = crypto.createHash('sha1').update(request.rawBody).digest('hex');
const expectedHash = request.headers['x-boss-digest'];
if (calculatedHash !== expectedHash) {
return next('Provided BOSS digest does not match the calculated hash');
}
next();
}
module.exports = validateBOSSDigestMiddleware;

View file

@ -0,0 +1,41 @@
const titles = require('../titles');
function validateMultipartMiddleware(request, response, next) {
const title = titles[request.titleCode];
if (!title || !title.multipart_validator) {
return next();
}
const multipartValidator = title.multipart_validator;
const validationSchema = title.validation_schema;
multipartValidator(request.copy, response, error => {
if (error) {
return next(error);
}
const resultData = {
...request.copy.body,
};
if (Array.isArray(request.copy.files)) {
for (const file of request.copy.files) {
resultData[file.fieldname] = file.buffer;
}
}
const validationResult = validationSchema.validate(resultData);
if (validationResult.error) {
console.error('[Validation Error]', validationResult.error.details);
return next(validationResult.error);
}
request.resultData = validationResult.value;
next();
});
}
module.exports = validateMultipartMiddleware;