47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
const createError = require('http-errors');
|
|
const axios = require('axios');
|
|
|
|
|
|
|
|
|
|
/**
|
|
* ITI-68: Retrieve Document (MHD)
|
|
*
|
|
* GET /fhir/Binary?url=[URL_Directa]
|
|
*
|
|
* Flow (diagram iti67.mmd, step 21-24):
|
|
* 1. HIS_A supplies the direct document URL obtained from a prior ITI-67 response.
|
|
* 2. This gateway performs a P2P GET to that URL, bypassing the Bus.
|
|
* 3. The raw document (PDF, XML, etc.) is forwarded back to HIS_A.
|
|
*/
|
|
async function getBundleById(req, res, next) {
|
|
try {
|
|
const url = req.query.url;
|
|
if (!url) {
|
|
throw createError(400, 'Missing required query parameter: url');
|
|
}
|
|
let parsedUrl;
|
|
try {
|
|
parsedUrl = new URL(url);
|
|
} catch {
|
|
throw createError(400, 'Invalid document URL');
|
|
}
|
|
const response = await getDocumentBundleByUrl(url);
|
|
|
|
const contentType = response.headers['content-type'];
|
|
if (contentType) res.setHeader('Content-Type', contentType);
|
|
|
|
const contentDisposition = response.headers['content-disposition'];
|
|
if (contentDisposition) res.setHeader('Content-Disposition', contentDisposition);
|
|
|
|
res.status(200).send(response.data);
|
|
} catch (err) {
|
|
if (err.response) {
|
|
return next(createError(err.response.status, `Document source returned ${err.response.status}`));
|
|
}
|
|
next(err);
|
|
}
|
|
}
|
|
|
|
module.exports = { getBundleById };
|