@gov-cy/govcy-express-services 1.7.6 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gov-cy/govcy-express-services",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "An Express-based system that dynamically renders services using @gov-cy/govcy-frontend-renderer and posts data to a submission API.",
|
|
5
5
|
"author": "DMRID - DSF Team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -66,8 +66,7 @@
|
|
|
66
66
|
"form-data": "^4.0.4",
|
|
67
67
|
"multer": "^2.1.1",
|
|
68
68
|
"nunjucks": "^3.2.4",
|
|
69
|
-
"openid-client": "^6.3.4"
|
|
70
|
-
"puppeteer": "^24.6.0"
|
|
69
|
+
"openid-client": "^6.3.4"
|
|
71
70
|
},
|
|
72
71
|
"devDependencies": {
|
|
73
72
|
"c8": "^10.1.3",
|
|
@@ -79,7 +78,8 @@
|
|
|
79
78
|
"nodemon": "^3.0.2",
|
|
80
79
|
"pa11y": "^9.1.0",
|
|
81
80
|
"patch-package": "^8.0.1",
|
|
82
|
-
"sinon": "^21.0.1"
|
|
81
|
+
"sinon": "^21.0.1",
|
|
82
|
+
"puppeteer": "^24.6.0"
|
|
83
83
|
},
|
|
84
84
|
"engines": {
|
|
85
85
|
"node": ">=18.0.0"
|
package/src/index.mjs
CHANGED
|
@@ -8,7 +8,6 @@ import { requestTimer } from './middleware/govcyRequestTimer.mjs';
|
|
|
8
8
|
import { noCacheAndSecurityHeaders } from "./middleware/govcyHeadersControl.mjs";
|
|
9
9
|
import { renderGovcyPage } from "./middleware/govcyPageRender.mjs";
|
|
10
10
|
import { govcyPageHandler } from './middleware/govcyPageHandler.mjs';
|
|
11
|
-
import { govcyPDFRender } from './middleware/govcyPDFRender.mjs';
|
|
12
11
|
import { govcyFormsPostHandler } from './middleware/govcyFormsPostHandler.mjs';
|
|
13
12
|
import { govcyReviewPostHandler } from './middleware/govcyReviewPostHandler.mjs';
|
|
14
13
|
import { govcyReviewPageHandler } from './middleware/govcyReviewPageHandler.mjs';
|
|
@@ -261,13 +260,10 @@ export default function initializeGovCyExpressService(opts = {}) {
|
|
|
261
260
|
|
|
262
261
|
// 🏠 -- ROUTE: Handle route with only siteId (/:siteId or /:siteId/)
|
|
263
262
|
app.get('/:siteId', serviceConfigDataMiddleware, requireAuth, cyLoginPolicy, govcyServiceEligibilityHandler(true), govcyLoadSubmissionData(), govcyPageHandler(), renderGovcyPage());
|
|
264
|
-
|
|
263
|
+
|
|
265
264
|
// 👀 -- ROUTE: Add Review Page Route (BEFORE the dynamic route)
|
|
266
265
|
app.get('/:siteId/review', serviceConfigDataMiddleware, requireAuth, cyLoginPolicy, govcyServiceEligibilityHandler(), govcyLoadSubmissionData(), govcyReviewPageHandler(), renderGovcyPage());
|
|
267
|
-
|
|
268
|
-
// ✅📄 -- ROUTE: Add Success PDF Route (BEFORE the dynamic route)
|
|
269
|
-
app.get('/:siteId/success/pdf', serviceConfigDataMiddleware, requireAuth, cyLoginPolicy, govcyServiceEligibilityHandler(), govcySuccessPageHandler(true), govcyPDFRender());
|
|
270
|
-
|
|
266
|
+
|
|
271
267
|
// ✅ -- ROUTE: Add Success Page Route (BEFORE the dynamic route)
|
|
272
268
|
app.get('/:siteId/success', serviceConfigDataMiddleware, requireAuth, cyLoginPolicy, govcyServiceEligibilityHandler(), govcySuccessPageHandler(), renderGovcyPage());
|
|
273
269
|
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { govcyFrontendRenderer } from "@gov-cy/govcy-frontend-renderer";
|
|
2
|
-
import { generatePDF } from "../utils/govcyPdfMaker.mjs";
|
|
3
|
-
import { logger } from "../utils/govcyLogger.mjs";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Middleware function to render PDFs using the GovCy Frontend Renderer.
|
|
7
|
-
* This function takes the processed page data and template, and generates the final PDF response.
|
|
8
|
-
*/
|
|
9
|
-
/* c8 ignore start */
|
|
10
|
-
export function govcyPDFRender() {
|
|
11
|
-
return async (req, res) => {
|
|
12
|
-
try {
|
|
13
|
-
const renderer = new govcyFrontendRenderer();
|
|
14
|
-
const { processedPage } = req;
|
|
15
|
-
const html = renderer.renderFromJSON(processedPage.pageTemplate, processedPage.pageData);
|
|
16
|
-
let fileName= "govcy.pdf";
|
|
17
|
-
if (processedPage.fileName) {
|
|
18
|
-
fileName = `${processedPage.fileName} - ${fileName}`;
|
|
19
|
-
}
|
|
20
|
-
const pdfBuffer = await generatePDF(html);
|
|
21
|
-
|
|
22
|
-
res.set({
|
|
23
|
-
'Content-Type': 'application/pdf',
|
|
24
|
-
'Content-Length': pdfBuffer.length,
|
|
25
|
-
'Content-Disposition': `attachment; filename="${fileName}"`,
|
|
26
|
-
});
|
|
27
|
-
res.send(pdfBuffer);
|
|
28
|
-
} catch (error) {
|
|
29
|
-
logger.error("Error generating PDF:", error);
|
|
30
|
-
res.status(500).send('Unable to generate PDF at this time.');
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/* c8 ignore end */
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import puppeteer from 'puppeteer';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Generates a PDF from HTML and returns it as a Buffer.
|
|
5
|
-
* @param {string} html - The full HTML string of the document (should be accessible HTML).
|
|
6
|
-
* @returns {Promise<Buffer>} - The generated PDF buffer.
|
|
7
|
-
*/
|
|
8
|
-
export async function generatePDF(html) {
|
|
9
|
-
const browser = await puppeteer.launch({ headless: 'new' });
|
|
10
|
-
const page = await browser.newPage();
|
|
11
|
-
|
|
12
|
-
await page.setContent(html, { waitUntil: 'networkidle0' });
|
|
13
|
-
|
|
14
|
-
const pdfUint8Array = await page.pdf({
|
|
15
|
-
format: 'A4',
|
|
16
|
-
printBackground: true,
|
|
17
|
-
displayHeaderFooter: false,
|
|
18
|
-
preferCSSPageSize: true,
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
await browser.close();
|
|
22
|
-
|
|
23
|
-
// Convert Uint8Array to Buffer
|
|
24
|
-
const pdfBuffer = Buffer.from(pdfUint8Array);
|
|
25
|
-
|
|
26
|
-
return pdfBuffer;
|
|
27
|
-
}
|