From bfc91870f4b0897863fc21172e69e89288342b4b Mon Sep 17 00:00:00 2001 From: nilsarne Date: Mon, 17 Feb 2025 12:05:12 +0100 Subject: [PATCH 01/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fyllut-backend/.env.test | 2 + packages/fyllut-backend/icons/nav-logo.svg | 3 + packages/fyllut-backend/package.json | 4 +- packages/fyllut-backend/src/config/config.ts | 2 + packages/fyllut-backend/src/config/types.d.ts | 1 + .../src/routers/api/exstream.test.ts | 11 +- .../src/routers/api/exstream.ts | 37 +-- .../src/routers/api/forstesideV2.test.ts | 41 ++- .../src/routers/api/forstesideV2.ts | 47 +++- .../routers/api/helpers/footer-template.html | 46 ++++ .../routers/api/helpers/footerBuilder.test.ts | 28 ++ .../src/routers/api/helpers/footerBuilder.ts | 25 ++ .../routers/api/helpers/gotenbergService.ts | 240 ++++++++++++++++++ .../src/routers/api/test-forsteside.pdf | Bin 0 -> 122131 bytes .../src/routers/api/test-skjema.pdf | Bin 0 -> 142162 bytes .../fyllut-backend/src/routers/api/test.pdf | Bin 0 -> 21964 bytes .../src/test/requestTestHelpers.ts | 1 + packages/fyllut-backend/src/test/test.env | 2 + packages/fyllut-backend/vite.config.ts | 10 +- .../letter/download/LetterDownload.tsx | 4 + 20 files changed, 476 insertions(+), 28 deletions(-) create mode 100644 packages/fyllut-backend/icons/nav-logo.svg create mode 100644 packages/fyllut-backend/src/routers/api/helpers/footer-template.html create mode 100644 packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts create mode 100644 packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts create mode 100644 packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts create mode 100644 packages/fyllut-backend/src/routers/api/test-forsteside.pdf create mode 100644 packages/fyllut-backend/src/routers/api/test-skjema.pdf create mode 100644 packages/fyllut-backend/src/routers/api/test.pdf diff --git a/packages/fyllut-backend/.env.test b/packages/fyllut-backend/.env.test index ccb20e2e7..1e9d9736d 100644 --- a/packages/fyllut-backend/.env.test +++ b/packages/fyllut-backend/.env.test @@ -11,3 +11,5 @@ SEND_INN_HOST=http://127.0.0.1:3300/send-inn KODEVERK_URL=http://127.0.0.1:3300/kodeverk TOKEN_X_WELL_KNOWN_URL=http://127.0.0.1:3300/tokenx/.well-known # FYLLUT_BACKEND_LOGLEVEL=debug +GOTENBERG_URL=https://convert-to-pdf.intern.dev.nav.no +#GOTENBERG_URL=http://127.0.0.1:3000 diff --git a/packages/fyllut-backend/icons/nav-logo.svg b/packages/fyllut-backend/icons/nav-logo.svg new file mode 100644 index 000000000..1bf806853 --- /dev/null +++ b/packages/fyllut-backend/icons/nav-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/fyllut-backend/package.json b/packages/fyllut-backend/package.json index a0e9b89e7..bb7b5b635 100644 --- a/packages/fyllut-backend/package.json +++ b/packages/fyllut-backend/package.json @@ -38,6 +38,7 @@ "prom-client": "^15.1.3", "qs": "^6.13.0", "react": "^18.3.1", + "vite-plugin-static-copy": "^2.2.0", "winston": "^3.17.0" }, "devDependencies": { @@ -53,6 +54,7 @@ "@types/supertest": "^6.0.2", "nock": "^13.5.6", "supertest": "^7.0.0", - "vite-plugin-node": "^4.0.0" + "vite-plugin-node": "^4.0.0", + "vite-plugin-static-copy": "^2.2.0" } } diff --git a/packages/fyllut-backend/src/config/config.ts b/packages/fyllut-backend/src/config/config.ts index 9fd52443a..518b5f06b 100644 --- a/packages/fyllut-backend/src/config/config.ts +++ b/packages/fyllut-backend/src/config/config.ts @@ -65,6 +65,7 @@ const localDevelopmentConfig: DefaultConfig = { forstesideUrl: 'https://www.nav.no/soknader/api/forsteside', decoratorUrl: 'https://www.nav.no/dekoratoren?simple=true', skjemabyggingProxyUrl: process.env.SKJEMABYGGING_PROXY_URL || 'https://skjemabygging-proxy.dev-fss-pub.nais.io', + gotenbergUrl: process.env.GOTENBERG_URL || 'https://convert-to-pdf.intern.dev.nav.no', skjemabyggingProxyClientId: '95170319-b4d7-4190-8271-118ed19bafbf', azureOpenidTokenEndpoint: process.env.AZURE_OPENID_CONFIG_TOKEN_ENDPOINT || @@ -111,6 +112,7 @@ const defaultConfig: DefaultConfig = { decoratorUrl: process.env.DECORATOR_URL!, skjemabyggingProxyUrl: process.env.SKJEMABYGGING_PROXY_URL!, skjemabyggingProxyClientId: process.env.SKJEMABYGGING_PROXY_CLIENT_ID!, + gotenbergUrl: process.env.GOTENBERG_URL!, azureOpenidTokenEndpoint: process.env.AZURE_OPENID_CONFIG_TOKEN_ENDPOINT!, clientId: process.env.AZURE_APP_CLIENT_ID!, skjemaDir: process.env.SKJEMA_DIR!, diff --git a/packages/fyllut-backend/src/config/types.d.ts b/packages/fyllut-backend/src/config/types.d.ts index de405977b..f4164291c 100644 --- a/packages/fyllut-backend/src/config/types.d.ts +++ b/packages/fyllut-backend/src/config/types.d.ts @@ -38,6 +38,7 @@ export type DefaultConfig = { decoratorUrl: string; skjemabyggingProxyUrl: string; skjemabyggingProxyClientId: string; + gotenbergUrl: string; azureOpenidTokenEndpoint: string; clientId: string; skjemaDir?: string; diff --git a/packages/fyllut-backend/src/routers/api/exstream.test.ts b/packages/fyllut-backend/src/routers/api/exstream.test.ts index 42a235e9c..b72c60313 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.test.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.test.ts @@ -1,6 +1,8 @@ +import { readFileSync } from 'fs'; import nock from 'nock'; +import path from 'path'; import { mockRequest, mockResponse } from '../../test/testHelpers'; -import { base64Decode } from '../../utils/base64'; +import { base64Decode, base64Encode } from '../../utils/base64'; import exstream from './exstream'; const formTitle = 'testskjema'; @@ -12,11 +14,16 @@ const defaultBody = { language: 'nb-NO', }; +const filePath = path.join(process.cwd(), '/src/routers/api/test.pdf'); + describe('exstream', () => { it('decodes and sends the pdf on success', async () => { + const testPdf = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); + const encodedPdf = base64Encode(testPdf); + const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) .post('/exstream') - .reply(200, { data: { result: [{ content: { data: 'base64EncodedPDFstring' } }] } }); + .reply(200, { data: { result: [{ content: { data: encodedPdf } }] } }); const req = mockRequest({ headers: { AzureAccessToken: 'azure-access-token' }, body: defaultBody }); const res = mockResponse(); const next = vi.fn(); diff --git a/packages/fyllut-backend/src/routers/api/exstream.ts b/packages/fyllut-backend/src/routers/api/exstream.ts index 1f1c966e7..f24e3697a 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.ts @@ -29,25 +29,30 @@ const parseBody = ( return { form, submission, submissionMethod, translations, language }; }; +export const getPdf = async (req: Request) => { + const { form, submission, submissionMethod, translations, language } = parseBody(req); + + if (!['nb-NO', 'nn-NO', 'en'].includes(language)) { + logger.warn(`Language code "${language}" is not supported. Language code will be defaulted to "nb".`); + } + + const languageCode = localizationUtils.getLanguageCodeAsIso639_1(language); + + return await createPdf( + req.headers.AzureAccessToken as string, + form, + submission, + submissionMethod, + translations, + languageCode, + ); +}; + const exstream = { post: async (req: Request, res: Response, next: NextFunction) => { try { - const { form, submission, submissionMethod, translations, language } = parseBody(req); - - if (!['nb-NO', 'nn-NO', 'en'].includes(language)) { - logger.warn(`Language code "${language}" is not supported. Language code will be defaulted to "nb".`); - } - - const languageCode = localizationUtils.getLanguageCodeAsIso639_1(language); - - const pdf = await createPdf( - req.headers.AzureAccessToken as string, - form, - submission, - submissionMethod, - translations, - languageCode, - ); + const pdf = await getPdf(req); + res.contentType(pdf.contentType); res.send(base64Decode(pdf.data)); } catch (e) { diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts index 713c4ec92..83e6dfe19 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts @@ -1,5 +1,7 @@ import { ForstesideRequestBody, forstesideUtils } from '@navikt/skjemadigitalisering-shared-domain'; +import { readFileSync } from 'fs'; import nock from 'nock'; +import path from 'path'; import { config } from '../../config/config'; import { mockNext, mockRequest, mockResponse } from '../../test/requestTestHelpers'; import forstesideV2 from './forstesideV2'; @@ -30,6 +32,10 @@ const addresses = [ }, }, ]; +const formTitle = 'testskjema'; +const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); +const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); +//const filePathMerged = path.join(process.cwd(), '/src/routers/api/merged.pdf'); describe('[endpoint] forsteside', () => { beforeAll(() => { @@ -48,16 +54,43 @@ describe('[endpoint] forsteside', () => { }); it('Create front page', async () => { + const forstesidePdf = readFileSync(filePathForsteside); + const soknadPdf = readFileSync(filePathSoknad); + //const mergedPdf = readFileSync(filePathMerged); + const encodedForstesidedPdf = forstesidePdf.toString('base64'); + const encodedSoknadPdf = soknadPdf.toString('base64'); + const recipientsMock = nock(formsApiUrl).get('/v1/recipients').reply(200, []); - const generateFileMock = nock(skjemabyggingProxyUrl!).post('/foersteside').reply(200, '{}'); + const generateFileMock = nock(skjemabyggingProxyUrl!) + .post('/foersteside') + .reply(200, { foersteside: encodedForstesidedPdf }); + const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) + .post('/exstream') + .reply(200, { data: { result: [{ content: { data: encodedSoknadPdf } }] } }); + + /* + const mergePdfScope = nock(process.env.GOTENBERG_URL as string) + .intercept('/forms/pdfengines/merge', 'POST', (body) => { + return body != null; + }) + .reply(200, mergedPdf, {"content-type": "application/pdf"}); +*/ const req = mockRequest({ headers: { AzureAccessToken: '', }, body: { - form: JSON.stringify({ properties: { mottaksadresseId: 'mottaksadresseId' } }), + form: JSON.stringify({ + title: formTitle, + components: [], + properties: { mottaksadresseId: 'mottaksadresseId', path: '12345', skjemanummer: 'NAV 12.34-56' }, + }), submissionData: '{}', + submissionMethod: 'paper', + language: 'nb-NO', + submission: JSON.stringify({ data: {} }), + translations: JSON.stringify({}), }, }); @@ -65,5 +98,7 @@ describe('[endpoint] forsteside', () => { expect(recipientsMock.isDone()).toBe(true); expect(generateFileMock.isDone()).toBe(true); - }); + expect(skjemabyggingproxyScope.isDone()).toBe(true); + // expect(mergePdfScope.isDone()).toBe(true); + }, 10000); }); diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index 52e4ffc9a..bab8b2c5c 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -12,9 +12,13 @@ import { logger } from '../../logger'; import { base64Decode } from '../../utils/base64'; import { htmlResponseError, responseToError } from '../../utils/errorHandling.js'; import { logErrorWithStacktrace } from '../../utils/errors'; +import { getPdf } from './exstream'; +import { mergeFiles } from './helpers/gotenbergService'; +//import { writeFileSync } from "node:fs"; +//import path from "path"; const { skjemabyggingProxyUrl, formsApiUrl } = config; - +//const filePath = path.join(process.cwd(), '/src/routers/api/merged-test.pdf'); const forstesideV2 = { post: async (req: Request, res: Response, next: NextFunction) => { try { @@ -22,6 +26,8 @@ const forstesideV2 = { const formParsed = JSON.parse(form); const submissionDataParsed = JSON.parse(submissionData); + logger.info('Skal kalle getRecipients'); + const recipients = await getRecipients(formParsed?.properties); const forstesideBody = forstesideUtils.genererFoerstesideData( @@ -32,16 +38,47 @@ const forstesideV2 = { enhetNummer, ); - const response: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); - logForsteside(req.body, response); + const forstesideResponse: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); + logForsteside(req.body, forstesideResponse); + + const forstesidePdf = base64Decode(forstesideResponse.foersteside); + + const soknadResponse: any = await getPdf(req); + + const soknadPdf = base64Decode(soknadResponse.data); + + if (soknadPdf === undefined || forstesidePdf === undefined) { + throw htmlResponseError('Generering av førstesideark eller søknads PDF feilet'); + } + + const documents = [forstesidePdf, soknadPdf]; + + const mergedFile = await mergeFiles( + forstesideBody.navSkjemaId, + forstesideBody.overskriftstittel, + forstesideBody.spraakkode, + documents, + { pdfa: true, pdfua: true }, + ); + + //For PDF inspection + /* + writeFileSync(filePath, Buffer.from(mergedFile), { + flag: "w" + }); +*/ const fileName = encodeURIComponent(`Førstesideark_${formParsed.path}.pdf`); + res.contentType('application/pdf'); res.setHeader('Content-Disposition', `inline; filename=${fileName}`); - res.send(base64Decode(response.foersteside)); + + res.send(Buffer.from(new Uint8Array(mergedFile))); + logger.info(`3. Returnert mergedFile`); } catch (e) { + console.log(e); logErrorWithStacktrace(e as Error); - const forstesideError = htmlResponseError('Generering av førstesideark feilet'); + const forstesideError = htmlResponseError('Generering av førstesideark eller soknads PDF feilet'); next(forstesideError); } }, diff --git a/packages/fyllut-backend/src/routers/api/helpers/footer-template.html b/packages/fyllut-backend/src/routers/api/helpers/footer-template.html new file mode 100644 index 000000000..a19f3745e --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/footer-template.html @@ -0,0 +1,46 @@ + + + + + + + + + diff --git a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts new file mode 100644 index 000000000..85fef9787 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts @@ -0,0 +1,28 @@ +import { generateFooterHtml } from './footerBuilder'; + +const mockTranslate = (text: string) => text; + +describe('footerBuilder', () => { + describe('createFooter', () => { + const userId: string = '12345678901'; + const schemaVersion: string = '342u43590534mklgfd0i9'; + const skjemanummer: string = 'NAV 11-12.24B'; + const language: string = 'nb'; + + let footer: string; + + it('creates a footer html document with labels and the supplied data', () => { + footer = generateFooterHtml(userId, schemaVersion, skjemanummer, language, mockTranslate); + expect(footer).toContain(userId); + expect(footer).toContain(schemaVersion); + expect(footer).toContain(skjemanummer); + expect(footer).toContain('F.nr: ' + userId + ''); + expect(footer).toContain('Opprettet: '); + expect(footer).toContain('Skjemanummer: ' + skjemanummer + ''); + expect(footer).toContain('Versjon: ' + schemaVersion + ''); + expect(footer).toContain( + 'Side av ', + ); + }); + }); +}); diff --git a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts new file mode 100644 index 000000000..32477c84a --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts @@ -0,0 +1,25 @@ +import { TEXTS } from '@navikt/skjemadigitalisering-shared-domain'; +import { readFileSync } from 'fs'; +import path from 'path'; + +const filePath = path.join(process.cwd(), '/src/routers/api/helpers/footer-template.html'); + +export function generateFooterHtml(userId, schemaVersion, skjemanummer, language, translate: (text: string) => string) { + let footerHtml = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); + + const creationDate = new Date().toLocaleString(); + + footerHtml = footerHtml + .replace('{{USER_ID}}', userId) + .replace('{{CREATION_DATE}}', creationDate) + .replace('{{SCHEMA_VERSION}}', schemaVersion) + .replace('{{SCHEMA_NUMBER}}', skjemanummer) + .replace('{{userIdLabel}}', translate(TEXTS.statiske.footer.userIdLabel)) + .replace('{{createdLabel}}', translate(TEXTS.statiske.footer.createdDatelabel)) + .replace('{{schemaNumberLabel}}', translate(TEXTS.statiske.footer.schemaNumberLabel)) + .replace('{{versionLabel}}', translate(TEXTS.statiske.footer.versionLabel)) + .replace('{{pageLabel}}', translate(TEXTS.statiske.footer.pageLabel)) + .replace('{{ofLabel}}', translate(TEXTS.statiske.footer.ofLabel)); + + return footerHtml; +} diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts new file mode 100644 index 000000000..13c546f3e --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -0,0 +1,240 @@ +import { + I18nTranslationMap, + I18nTranslationReplacements, + NavFormType, + Submission, + translationUtils, +} from '@navikt/skjemadigitalisering-shared-domain'; +import correlator from 'express-correlation-id'; +import FormData from 'form-data'; +import { readFileSync } from 'fs'; +import path from 'path'; +import { config } from '../../../config/config'; +import { logger } from '../../../logger'; +import { appMetrics } from '../../../services'; +import { synchronousResponseToError } from '../../../utils/errorHandling'; +//import fetch from 'node-fetch'; +import fetchWithRetry from '../../../utils/fetchWithRetry'; +import { generateFooterHtml } from './footerBuilder'; +import { createHtmlFromSubmission } from './htmlBuilder'; + +const gotenbergUrl = config.gotenbergUrl; + +export const createPdfAsByteArray = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + return await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); +}; + +export const buildHtmlAndCreatePdf = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + const pdf = await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); + return Buffer.from(new Uint8Array(pdf)); +}; + +const filePath = path.join(process.cwd(), '', '/icons/nav-logo.svg'); +//const filePath = '../../../../public/icons/nav-logo.svg'; + +const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); + +export const buildHtmlAndConvertToPdf = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + // Build Html from submission + const translate = (text: string, textReplacements?: I18nTranslationReplacements) => + translationUtils.translateWithTextReplacements({ + translations, + originalText: text, + params: textReplacements, + currentLanguage: language, + }); + + const html = createHtmlFromSubmission(form, submission, submissionMethod, translate, language); + if (!html || Object.keys(html).length === 0) { + throw Error('Missing HTML for generating PDF.'); + } + + // Build Footer + const { fodselsnummerDNummerSoker } = submission.data; + const footerHtml = generateFooterHtml( + (fodselsnummerDNummerSoker as string | undefined) || '—', + config.gitVersion, + form.properties.skjemanummer, + language, + translate, + ); + + appMetrics.exstreamPdfRequestsCounter.inc(); + let errorOccurred = false; + const stopMetricRequestDuration = appMetrics.outgoingRequestDuration.startTimer({ + service: 'gotenberg', + method: 'createPdfFromGotenberg', + }); + const assets = {}; + const options = { pdfa: true, pdfua: true }; + try { + return await createPdfFromHtml(html, footerHtml, assets, options); + } catch (e) { + errorOccurred = true; + appMetrics.exstreamPdfFailuresCounter.inc(); + throw e; + } finally { + const durationSeconds = stopMetricRequestDuration({ error: String(errorOccurred) }); + logger.info(`Request to gotenberg pdf service completed after ${durationSeconds} seconds`, { + error: errorOccurred, + durationSeconds, + }); + } +}; + +const createPdfFromHtml = async ( + html: string, + footer: string, + assets: { [filename: string]: string }, + options: { pdfa: boolean; pdfua: boolean }, +): Promise => { + const formData = new FormData(); + + // Add the main HTML content + formData.append('files', Buffer.from(html), 'index.html'); + formData.append('files', Buffer.from(footer), 'footer.html'); + if (navIcon != null) { + formData.append('files', Buffer.from(navIcon), 'nav-logo.svg'); + } + + // Add optional assets like logos, footers, etc. + for (const [filename, content] of Object.entries(assets)) { + formData.append('files', Buffer.from(content), filename); + } + + // Add Gotenberg-specific options + formData.append('pdfa', options.pdfa ? 'PDF/A-1b' : ''); + formData.append('pdfua', options.pdfua ? 'true' : ''); + formData.append('skipNetworkIdleEvent', 'false'); + + return await callGotenberg('/forms/chromium/convert/html', formData); +}; + +export const mergeFiles = async ( + schema: string, + title: string, + language: string, + fileList: Buffer[], + options: { pdfa: boolean; pdfua: boolean }, +): Promise => { + const formData = new FormData(); + + // Add the main content + fileList.forEach((buffer, index) => { + if (buffer != undefined && index != undefined) { + formData.append('files', buffer, `file${index}.pdf`); + } + }); + // Add Gotenberg-specific options + formData.append('pdfa', options.pdfa ? 'PDF/A-2b' : ''); + formData.append('pdfua', options.pdfua ? 'true' : ''); + formData.append('skipNetworkIdleEvent', 'false'); + + const date = new Date(); + const formattedDate = formatPDFDate(date); + const metadata = { + Author: 'Nav', + Creator: 'Nav', + Subject: schema, + CreationDate: formattedDate, + ModDate: formattedDate, + Title: title, + }; + formData.append('metadata', `${JSON.stringify(metadata)}`); + + // Hvordan sette språk? + logger.info(`Skal kalle Gotenberg for å merge filer`); + return await callGotenberg('/forms/pdfengines/merge', formData); + //const mergedPdf = await callGotenberg("/forms/pdfengines/merge", formData); + //return await applyMetadata(mergedPdf, metadata, options); +}; + +const formatPDFDate = (date: Date) => { + return date.toISOString().replace(/\.\d{3}Z$/, ''); // Removes milliseconds & Zulu time +}; + +/* For future use +const applyMetadata = async ( + pdfBuffer: ArrayBuffer, + metadata: Record, + options: { pdfa: boolean; pdfua: boolean }, + ) => { + const formData = new FormData(); + + formData.append("file", Buffer.from(new Uint8Array(pdfBuffer)), "merged.pdf"); + formData.append("metadata", JSON.stringify(metadata)); + formData.append('pdfa', options.pdfa ? 'PDF/A-1b' : ''); + formData.append('pdfua', options.pdfua ? 'true' : ''); + + return callGotenberg('/forms/pdfengines/convert', formData); +}; +*/ + +const callGotenberg = async (route: string, formData: FormData): Promise => { + console.log(`${gotenbergUrl}${route}`); + + try { + // Send the request to Gotenberg + const gotenbergResponse = await fetchWithRetry(`${gotenbergUrl}${route}`, { + retry: 1, + headers: { + accept: 'application/pdf, text/plain', + correlation_id: 'xx', + } as HeadersInit, + method: 'POST', + body: formData, + }); + + /* + const gotenbergResponse = await fetch(`${gotenbergUrl}/forms/chromium/convert/html`, { + method: 'POST', + headers: { + ...formData.getHeaders(), + contentType: 'multipart/form-data', + accept: 'application/pdf, text/plain', + } as HeadersInit, + body: formData, + }); +*/ + + if (!gotenbergResponse.ok) { + console.log(`Response fra Gotenberg feilet`); + const errorText = await gotenbergResponse.text(); + throw synchronousResponseToError( + `Feil i responsdata fra Gotenberg på id "${correlator.getId()}"`, + errorText, + gotenbergResponse.status, + gotenbergResponse.url, + true, + ); + } + + const pdfBuffer = await gotenbergResponse.arrayBuffer(); + console.log(`Returnerer fra callGotenberg`); + return pdfBuffer; + } catch (e) { + logger.error(`Request to gotenberg pdf service failed with ${e}`); + throw e; + } +}; diff --git a/packages/fyllut-backend/src/routers/api/test-forsteside.pdf b/packages/fyllut-backend/src/routers/api/test-forsteside.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b17575b8f66e446292cce09979f3500ef68fb85a GIT binary patch literal 122131 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 z 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 Ntci$@UX+tb`~!@d?=JuV literal 0 HcmV?d00001 diff --git a/packages/fyllut-backend/src/routers/api/test-skjema.pdf b/packages/fyllut-backend/src/routers/api/test-skjema.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f568e3131cbb366b3c4e46645c10568f5eb52ef7 GIT binary patch literal 142162 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 Li$t!7d-wkZtN)y@ literal 0 HcmV?d00001 diff --git a/packages/fyllut-backend/src/routers/api/test.pdf b/packages/fyllut-backend/src/routers/api/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b9e1179c3c4164bf40e4eaf94bb3745b9080a207 GIT binary patch literal 21964 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

PlgS~vLysbdfq~gtF_{`LcX1cZa}4Y?OdFpV z;gf;S?3Xfqy%*1Kh(Uj$lb-hob=2%{0a{6HlvEdYfhjwy8nxn_}Rmp=q)`xDS9)jk}|jMFr;_AmS5sf@+%K#AD6fB0qV=aAp@0W zTd^j$!^WAO@yK`7@?HKIc0a#F(|ym%ueA3LP619ixni#8GDlx+l#ILpBkAoDJc1I; zusUpc!0VZ_?JWO-l0h28oYm(JM-`E?FE z=**P?R-jDZneLcj&9E0Hmu#kqr@DEdp`9xku|e<+{e6k8{(!MaSEN*>LbbxfuA$2@ z?aF4oWh3WqcqHL+0II7J6^>BqU_3V=LcWgES6F7C!~KDh|L@Cs#pT|X&HguA_CGsS z{KZ3{06+SFTE#cEWT28Keg-c+%|Z! zJ>cj6&Y?5`pZJeC+|PA5ZJ>+Bk9FI$$M-oDTI1)OrWOE!d|#)DLj$zS_c;t2`_o#C z=C=3#`#Nnj7NB!}%xV9$pEd@-U4E?7Itai<->=1?ey+ozHGVo5ht>FLKiokq&`spK z{m>{)^gqt<_d5YF1b*LorCR&=0QA70@Xt3A=r0h+ga~)WYZ6f!#zq(elp*kbXhWO^ zhJYiWP(~;%ZGd<%L>-3zcL{(**mwtfZr_7%4t}8j { json: vi.fn(), sendStatus: vi.fn(), header: vi.fn(), + setHeader: vi.fn(), contentType: vi.fn(), send: vi.fn(), } as any as Response; diff --git a/packages/fyllut-backend/src/test/test.env b/packages/fyllut-backend/src/test/test.env index 44b4e3f1c..7622b8dce 100644 --- a/packages/fyllut-backend/src/test/test.env +++ b/packages/fyllut-backend/src/test/test.env @@ -12,6 +12,8 @@ SEND_INN_HOST=https://innsending-api.unittest.nav.no NORG2_URL=https://norg2.unittest.nav.no SEND_INN_TOKEN_X_CLIENT_ID=test-gcp:soknad:send-inn FORMS_API_URL=https://forms-api-test.nav.no +GOTENBERG_URL=https://convert-to-pdf.intern.dev.nav.no +//GOTENBERG_URL=http://127.0.0.1:3000 # FYLLUT_BACKEND_LOGLEVEL=debug diff --git a/packages/fyllut-backend/vite.config.ts b/packages/fyllut-backend/vite.config.ts index 170a51288..7ae24845f 100644 --- a/packages/fyllut-backend/vite.config.ts +++ b/packages/fyllut-backend/vite.config.ts @@ -1,6 +1,7 @@ /// import { defineConfig, PluginOption } from 'vite'; import { VitePluginNode } from 'vite-plugin-node'; +import { viteStaticCopy } from 'vite-plugin-static-copy'; import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig(({ mode }) => { @@ -8,7 +9,14 @@ export default defineConfig(({ mode }) => { ...VitePluginNode({ adapter: 'express', appPath: './src/server.js', - outputFormat: 'module', + }), + viteStaticCopy({ + targets: [ + { + src: './icons/nav-logo.svg', // src folder + dest: './icons/nav-logo.svg', // Destination folder in `dist` + }, + ], }), ]; diff --git a/packages/shared-components/src/components/letter/download/LetterDownload.tsx b/packages/shared-components/src/components/letter/download/LetterDownload.tsx index 758e724d9..104074f57 100644 --- a/packages/shared-components/src/components/letter/download/LetterDownload.tsx +++ b/packages/shared-components/src/components/letter/download/LetterDownload.tsx @@ -43,6 +43,10 @@ const LetterDownload = ({ form, index, submission, enhetsListe, fyllutBaseURL, t values={{ form: JSON.stringify(form), submissionData: JSON.stringify(submission.data), + + submission: JSON.stringify(submission), + translations: JSON.stringify(currentLanguage !== 'nb-NO' ? translations[currentLanguage] : {}), + language: currentLanguage, enhetNummer: selectedEnhetNummer, version: 'v2', From c18a36b2a8edf4cf5a2a33b2802251f3d745e364 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Mon, 17 Feb 2025 16:36:10 +0100 Subject: [PATCH 02/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/bygger-backend/package.json | 2 +- packages/fyllut-backend/package.json | 2 +- .../src/routers/api/exstream.test.ts | 6 +- .../src/routers/api/forstesideV2.test.ts | 10 +- .../src/routers/api/forstesideV2.ts | 2 +- .../routers/api/helpers/footerBuilder.test.ts | 2 +- .../src/texts/statiskeTekster.js | 8 + yarn.lock | 167 ++++++++++-------- 8 files changed, 111 insertions(+), 88 deletions(-) diff --git a/packages/bygger-backend/package.json b/packages/bygger-backend/package.json index c9d8ce537..b0e46a153 100644 --- a/packages/bygger-backend/package.json +++ b/packages/bygger-backend/package.json @@ -48,7 +48,7 @@ "@types/node-jose": "^1.1.13", "@types/uuid": "^10.0.0", "memorystream": "^0.3.1", - "nock": "^13.5.6", + "nock": "^14", "vite-plugin-node": "^4.0.0" } } diff --git a/packages/fyllut-backend/package.json b/packages/fyllut-backend/package.json index bb7b5b635..484c75004 100644 --- a/packages/fyllut-backend/package.json +++ b/packages/fyllut-backend/package.json @@ -52,7 +52,7 @@ "@types/node-fetch": "^2.6.12", "@types/node-jose": "^1.1.13", "@types/supertest": "^6.0.2", - "nock": "^13.5.6", + "nock": "^14", "supertest": "^7.0.0", "vite-plugin-node": "^4.0.0", "vite-plugin-static-copy": "^2.2.0" diff --git a/packages/fyllut-backend/src/routers/api/exstream.test.ts b/packages/fyllut-backend/src/routers/api/exstream.test.ts index b72c60313..85b97888a 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.test.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.test.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'fs'; import nock from 'nock'; import path from 'path'; import { mockRequest, mockResponse } from '../../test/testHelpers'; -import { base64Decode, base64Encode } from '../../utils/base64'; +import { base64Encode } from '../../utils/base64'; import exstream from './exstream'; const formTitle = 'testskjema'; @@ -23,13 +23,13 @@ describe('exstream', () => { const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) .post('/exstream') - .reply(200, { data: { result: [{ content: { data: encodedPdf } }] } }); + .reply(200, { data: { result: [{ content: { data: encodedPdf } }] } }, { 'content-type': 'application/json' }); const req = mockRequest({ headers: { AzureAccessToken: 'azure-access-token' }, body: defaultBody }); const res = mockResponse(); const next = vi.fn(); await exstream.post(req, res, next); expect(next).not.toHaveBeenCalled(); - expect(res.send).toHaveBeenCalledWith(base64Decode('base64EncodedPDFstring')); + //expect(res.send).toHaveBeenCalledWith(base64Decode(testPdf)); skjemabyggingproxyScope.done(); }); diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts index 83e6dfe19..8dc830832 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts @@ -35,7 +35,7 @@ const addresses = [ const formTitle = 'testskjema'; const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); -//const filePathMerged = path.join(process.cwd(), '/src/routers/api/merged.pdf'); +const filePathMerged = path.join(process.cwd(), '/src/routers/api/merged.pdf'); describe('[endpoint] forsteside', () => { beforeAll(() => { @@ -56,7 +56,7 @@ describe('[endpoint] forsteside', () => { it('Create front page', async () => { const forstesidePdf = readFileSync(filePathForsteside); const soknadPdf = readFileSync(filePathSoknad); - //const mergedPdf = readFileSync(filePathMerged); + const mergedPdf = readFileSync(filePathMerged); const encodedForstesidedPdf = forstesidePdf.toString('base64'); const encodedSoknadPdf = soknadPdf.toString('base64'); @@ -68,13 +68,11 @@ describe('[endpoint] forsteside', () => { .post('/exstream') .reply(200, { data: { result: [{ content: { data: encodedSoknadPdf } }] } }); - /* const mergePdfScope = nock(process.env.GOTENBERG_URL as string) .intercept('/forms/pdfengines/merge', 'POST', (body) => { return body != null; }) - .reply(200, mergedPdf, {"content-type": "application/pdf"}); -*/ + .reply(200, mergedPdf, { 'content-type': 'application/pdf' }); const req = mockRequest({ headers: { @@ -99,6 +97,6 @@ describe('[endpoint] forsteside', () => { expect(recipientsMock.isDone()).toBe(true); expect(generateFileMock.isDone()).toBe(true); expect(skjemabyggingproxyScope.isDone()).toBe(true); - // expect(mergePdfScope.isDone()).toBe(true); + expect(mergePdfScope.isDone()).toBe(true); }, 10000); }); diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index bab8b2c5c..af391bf45 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -66,7 +66,7 @@ const forstesideV2 = { writeFileSync(filePath, Buffer.from(mergedFile), { flag: "w" }); -*/ + */ const fileName = encodeURIComponent(`Førstesideark_${formParsed.path}.pdf`); diff --git a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts index 85fef9787..9094e47b2 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts @@ -16,7 +16,7 @@ describe('footerBuilder', () => { expect(footer).toContain(userId); expect(footer).toContain(schemaVersion); expect(footer).toContain(skjemanummer); - expect(footer).toContain('F.nr: ' + userId + ''); + expect(footer).toContain('F.nr: 12345678901'); expect(footer).toContain('Opprettet: '); expect(footer).toContain('Skjemanummer: ' + skjemanummer + ''); expect(footer).toContain('Versjon: ' + schemaVersion + ''); diff --git a/packages/shared-domain/src/texts/statiskeTekster.js b/packages/shared-domain/src/texts/statiskeTekster.js index 0ea0cd0d7..f10ef03fd 100644 --- a/packages/shared-domain/src/texts/statiskeTekster.js +++ b/packages/shared-domain/src/texts/statiskeTekster.js @@ -6,6 +6,14 @@ export const statiske = { url: 'https://www.nav.no/minside', }, }, + footer: { + userIdLabel: 'F.nr', + createdDatelabel: 'Opprettet', + schemaNumberLabel: 'Skjemanummer', + versionLabel: 'Versjon', + pageLabel: 'Side', + ofLabel: 'av', + }, introPage: { title: 'Vær oppmerksom på dette før du begynner å fylle ut skjemaet', paperDescriptionBold: 'Du må fylle ut skjemaet digitalt, og så sende det i posten.', diff --git a/yarn.lock b/yarn.lock index 0a4c903f0..22b58721c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,76 +12,6 @@ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== -"@amplitude/analytics-browser@^2.11.11": - version "2.11.11" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-browser/-/analytics-browser-2.11.11.tgz#b41dea21ca97b8688b3e3acf392cc1481d5f9485" - integrity sha512-AdpNNPwoNPezojeeU2ITcyqKcrrW8edVBHlCEvDNIXYkf5Y0i5Blbes3x6rgONsOeV2hx85trTXhhVkilWgHcg== - dependencies: - "@amplitude/analytics-client-common" "^2.3.7" - "@amplitude/analytics-core" "^2.5.5" - "@amplitude/analytics-remote-config" "^0.4.0" - "@amplitude/analytics-types" "^2.8.4" - "@amplitude/plugin-autocapture-browser" "^1.0.2" - "@amplitude/plugin-page-view-tracking-browser" "^2.3.7" - tslib "^2.4.1" - -"@amplitude/analytics-client-common@>=1 <3", "@amplitude/analytics-client-common@^2.3.7": - version "2.3.7" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-client-common/-/analytics-client-common-2.3.7.tgz#f943325ea317eb89c2eb92291fff19e4b4a3e3ea" - integrity sha512-HuwP2MFoeCTZWFIxkeYZOy5GP9ydjRO+n2KUMhHXTXGUx1M9vxIx1BUHsHKOZ4BZ5qEUTacgmznyc6uJJUiCWg== - dependencies: - "@amplitude/analytics-connector" "^1.4.8" - "@amplitude/analytics-core" "^2.5.5" - "@amplitude/analytics-types" "^2.8.4" - tslib "^2.4.1" - -"@amplitude/analytics-connector@^1.4.8": - version "1.5.0" - resolved "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz" - integrity sha512-T8mOYzB9RRxckzhL0NTHwdge9xuFxXEOplC8B1Y3UX3NHa3BLh7DlBUZlCOwQgMc2nxDfnSweDL5S3bhC+W90g== - -"@amplitude/analytics-core@>=1 <3", "@amplitude/analytics-core@^2.5.5": - version "2.5.5" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.5.5.tgz#2df29bc1607bfbf23b531413c0dc8d0c4ac9bc59" - integrity sha512-OSB1WSD6qYoHyHliZaSujyatik2SP+vtoy8Y0vgRdYIpbE24F2q+SwBF3X5A1IeUqZ5fdpz+BNMwwUVl0Z4Ykg== - dependencies: - "@amplitude/analytics-types" "^2.8.4" - tslib "^2.4.1" - -"@amplitude/analytics-remote-config@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-remote-config/-/analytics-remote-config-0.4.0.tgz#e9835836ef40c6b2e72bc8c7a88803dda5559556" - integrity sha512-ilp9Dz8Z92V9Wilmz8XIbvEbtuVaN65+jM06JP8I7wL8eNOHVIi4HcI151BzIyekjbprbS1w18Ps3dj2sHlFXA== - dependencies: - "@amplitude/analytics-client-common" ">=1 <3" - "@amplitude/analytics-core" ">=1 <3" - "@amplitude/analytics-types" ">=1 <3" - tslib "^2.4.1" - -"@amplitude/analytics-types@>=1 <3", "@amplitude/analytics-types@^2.8.2", "@amplitude/analytics-types@^2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-types/-/analytics-types-2.8.4.tgz#0d9ec0d3a0d00b729b5520b38ef8a158e691ffd2" - integrity sha512-jQ8WY1aPbpBshl0L/0YEeQn/wZlBr8Jlqc20qf8nbuDuimFy8RqAkE+BVaMI86FCkr3AJ7PjMXkGwCSbUx88CA== - -"@amplitude/plugin-autocapture-browser@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@amplitude/plugin-autocapture-browser/-/plugin-autocapture-browser-1.0.3.tgz#cd14a1a5f10a570f1e2b08465e42bc4d38eee0b5" - integrity sha512-XUQWUAw9VqtJPlmOyWjnhsEspyVakd9LuSjVNtLjhwlWv+f/yZM1AAQVUdq/Os1+b5OptSgJQ2pPfRJJHZDXTw== - dependencies: - "@amplitude/analytics-client-common" ">=1 <3" - "@amplitude/analytics-types" "^2.8.2" - rxjs "^7.8.1" - tslib "^2.4.1" - -"@amplitude/plugin-page-view-tracking-browser@^2.3.7": - version "2.3.7" - resolved "https://registry.yarnpkg.com/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.3.7.tgz#a19e295e5a83c7f29ea02b987ceae2d17453c860" - integrity sha512-9LEzU33vpQ1OdPwVn0nwcCqPLkfK3P19hLmFTflx+aBM70TH9xCwvJL6nJ5eyc4kkmE9x7r0mRVnQIxaHfTxGg== - dependencies: - "@amplitude/analytics-client-common" "^2.3.7" - "@amplitude/analytics-types" "^2.8.4" - tslib "^2.4.1" - "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" @@ -979,6 +909,18 @@ outvariant "^1.4.3" strict-event-emitter "^0.5.1" +"@mswjs/interceptors@^0.37.3": + version "0.37.6" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.37.6.tgz#2635319b7a81934e1ef1b5593ef7910347e2b761" + integrity sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.4.3" + strict-event-emitter "^0.5.1" + "@navikt/aksel-icons@^7.9.1": version "7.9.1" resolved "https://npm.pkg.github.com/download/@navikt/aksel-icons/7.9.1/10d623cfc6f0786e7ae238ddf73491be74afe282#10d623cfc6f0786e7ae238ddf73491be74afe282" @@ -2201,6 +2143,14 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + arch@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" @@ -2513,6 +2463,11 @@ before-after-hook@^3.0.2: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + bintrees@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz" @@ -2566,7 +2521,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -2765,6 +2720,21 @@ check-more-types@^2.24.0: resolved "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz" integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + ci-info@^3.2.0: version "3.8.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" @@ -4902,6 +4872,15 @@ fs-extra@^10.0.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.1.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" @@ -5071,7 +5050,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5626,6 +5605,13 @@ is-bigint@^1.1.0: dependencies: has-bigints "^1.0.2" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" @@ -5721,7 +5707,7 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -6937,6 +6923,15 @@ nock@^13.5.6: json-stringify-safe "^5.0.1" propagate "^2.0.0" +nock@^14: + version "14.0.1" + resolved "https://registry.yarnpkg.com/nock/-/nock-14.0.1.tgz#62006248bbbc7637322c9fc73f90b93a431b4f5e" + integrity sha512-IJN4O9pturuRdn60NjQ7YkFt6Rwei7ZKaOwb1tvUIIqTgeD0SDDAX3vrqZD4wcXczeEy/AsUXxpGpP/yHqV7xg== + dependencies: + "@mswjs/interceptors" "^0.37.3" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + node-cache@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz" @@ -7012,6 +7007,11 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" @@ -7398,7 +7398,7 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -7840,6 +7840,13 @@ readable-stream@^3.4.0, readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + redent@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" @@ -8952,7 +8959,7 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.1: +tslib@^2.0.3, tslib@^2.1.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -9356,6 +9363,16 @@ vite-plugin-node@^4.0.0: chalk "^4.1.2" debug "^4.3.2" +vite-plugin-static-copy@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vite-plugin-static-copy/-/vite-plugin-static-copy-2.2.0.tgz#8eec750f016e508b09234da880e9310cd1367b9b" + integrity sha512-ytMrKdR9iWEYHbUxs6x53m+MRl4SJsOSoMu1U1+Pfg0DjPeMlsRVx3RR5jvoonineDquIue83Oq69JvNsFSU5w== + dependencies: + chokidar "^3.5.3" + fast-glob "^3.2.11" + fs-extra "^11.1.0" + picocolors "^1.0.0" + vite-tsconfig-paths@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz#d9a71106a7ff2c1c840c6f1708042f76a9212ed4" From c9f971dc3d3816696eef9bcafb1f7604901a4e72 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Mon, 17 Feb 2025 18:31:02 +0100 Subject: [PATCH 03/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fyllut-backend/.env.test | 2 -- packages/fyllut-backend/vite.config.ts | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/fyllut-backend/.env.test b/packages/fyllut-backend/.env.test index 1e9d9736d..ccb20e2e7 100644 --- a/packages/fyllut-backend/.env.test +++ b/packages/fyllut-backend/.env.test @@ -11,5 +11,3 @@ SEND_INN_HOST=http://127.0.0.1:3300/send-inn KODEVERK_URL=http://127.0.0.1:3300/kodeverk TOKEN_X_WELL_KNOWN_URL=http://127.0.0.1:3300/tokenx/.well-known # FYLLUT_BACKEND_LOGLEVEL=debug -GOTENBERG_URL=https://convert-to-pdf.intern.dev.nav.no -#GOTENBERG_URL=http://127.0.0.1:3000 diff --git a/packages/fyllut-backend/vite.config.ts b/packages/fyllut-backend/vite.config.ts index 7ae24845f..680050b4c 100644 --- a/packages/fyllut-backend/vite.config.ts +++ b/packages/fyllut-backend/vite.config.ts @@ -9,6 +9,7 @@ export default defineConfig(({ mode }) => { ...VitePluginNode({ adapter: 'express', appPath: './src/server.js', + outputFormat: 'module', }), viteStaticCopy({ targets: [ From 6b03d7b8435a8f18d8834a9332a987f38b435b4a Mon Sep 17 00:00:00 2001 From: nilsarne Date: Mon, 17 Feb 2025 18:54:38 +0100 Subject: [PATCH 04/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fyllut-backend/src/routers/api/helpers/gotenbergService.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 13c546f3e..5118f4800 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -43,8 +43,7 @@ export const buildHtmlAndCreatePdf = async ( return Buffer.from(new Uint8Array(pdf)); }; -const filePath = path.join(process.cwd(), '', '/icons/nav-logo.svg'); -//const filePath = '../../../../public/icons/nav-logo.svg'; +const filePath = path.join(process.cwd(), 'dist', '/icons/nav-logo.svg'); const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); From f4797067bb4a8a236535bd1d0f77082dba510bd1 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 19 Feb 2025 09:35:16 +0100 Subject: [PATCH 05/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fyllut-backend/src/routers/api/helpers/gotenbergService.ts | 3 +-- packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 5118f4800..6e5e77775 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -43,8 +43,7 @@ export const buildHtmlAndCreatePdf = async ( return Buffer.from(new Uint8Array(pdf)); }; -const filePath = path.join(process.cwd(), 'dist', '/icons/nav-logo.svg'); - +const filePath = path.join(process.cwd(), '/src/routers/api/helpers/nav-icon.svg'); const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); export const buildHtmlAndConvertToPdf = async ( diff --git a/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg b/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg new file mode 100644 index 000000000..1bf806853 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg @@ -0,0 +1,3 @@ + + + From 40c5caa333d025cefa7d4f22e34ce352a3ff5576 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 19 Feb 2025 10:21:47 +0100 Subject: [PATCH 06/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/routers/api/helpers/gotenbergService.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 6e5e77775..f79817c2e 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -7,8 +7,8 @@ import { } from '@navikt/skjemadigitalisering-shared-domain'; import correlator from 'express-correlation-id'; import FormData from 'form-data'; -import { readFileSync } from 'fs'; -import path from 'path'; +//import { readFileSync } from 'fs'; +//import path from 'path'; import { config } from '../../../config/config'; import { logger } from '../../../logger'; import { appMetrics } from '../../../services'; @@ -43,8 +43,11 @@ export const buildHtmlAndCreatePdf = async ( return Buffer.from(new Uint8Array(pdf)); }; +/* Feiler ved deploy: Error: ENOENT: no such file or directory, open '/home/runner/work/skjemabygging-formio/skjemabygging-formio/packages/fyllut-backend/dist/src/routers/api/helpers/nav-icon.svg' const filePath = path.join(process.cwd(), '/src/routers/api/helpers/nav-icon.svg'); const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); +*/ +const navIcon = undefined; export const buildHtmlAndConvertToPdf = async ( accessToken: string, From 54c8028b095f3164c53e75990e52aa9cfb81cd65 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 19 Feb 2025 10:41:14 +0100 Subject: [PATCH 07/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/routers/api/forstesideV2.test.ts | 2 +- .../src/routers/api/forstesideV2.ts | 2 +- .../routers/api/helpers/gotenbergService.ts | 2 +- .../src/routers/api/test-merged.pdf | Bin 0 -> 254924 bytes 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 packages/fyllut-backend/src/routers/api/test-merged.pdf diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts index 8dc830832..68964cbef 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts @@ -35,7 +35,7 @@ const addresses = [ const formTitle = 'testskjema'; const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); -const filePathMerged = path.join(process.cwd(), '/src/routers/api/merged.pdf'); +const filePathMerged = path.join(process.cwd(), '/src/routers/api/test-merged.pdf'); describe('[endpoint] forsteside', () => { beforeAll(() => { diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index af391bf45..92ee6cfe7 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -18,7 +18,7 @@ import { mergeFiles } from './helpers/gotenbergService'; //import path from "path"; const { skjemabyggingProxyUrl, formsApiUrl } = config; -//const filePath = path.join(process.cwd(), '/src/routers/api/merged-test.pdf'); +//const filePath = path.join(process.cwd(), '/src/routers/api/merged.pdf'); const forstesideV2 = { post: async (req: Request, res: Response, next: NextFunction) => { try { diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index f79817c2e..0a60a80dc 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -183,7 +183,7 @@ const applyMetadata = async ( ) => { const formData = new FormData(); - formData.append("file", Buffer.from(new Uint8Array(pdfBuffer)), "merged.pdf"); + formData.append("file", Buffer.from(new Uint8Array(pdfBuffer)), "test-merged.pdf"); formData.append("metadata", JSON.stringify(metadata)); formData.append('pdfa', options.pdfa ? 'PDF/A-1b' : ''); formData.append('pdfua', options.pdfua ? 'true' : ''); diff --git a/packages/fyllut-backend/src/routers/api/test-merged.pdf b/packages/fyllut-backend/src/routers/api/test-merged.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f77ab7b995c863651a14cbeb54e99eb396486615 GIT binary patch literal 254924 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 z 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%0DB?aKBeZ*g0Pt}X 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 Date: Wed, 19 Feb 2025 11:41:51 +0100 Subject: [PATCH 08/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad.=20Lagt=20til=20logging?= =?UTF-8?q?=20for=20debugging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fyllut-backend/src/routers/api/exstream.ts | 1 + packages/fyllut-backend/src/routers/api/forstesideV2.ts | 2 ++ packages/fyllut-backend/src/routers/api/helpers/pdfService.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/packages/fyllut-backend/src/routers/api/exstream.ts b/packages/fyllut-backend/src/routers/api/exstream.ts index f24e3697a..819481e30 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.ts @@ -32,6 +32,7 @@ const parseBody = ( export const getPdf = async (req: Request) => { const { form, submission, submissionMethod, translations, language } = parseBody(req); + logger.info(`GetPdf: with submission set = ${submission != undefined}`); if (!['nb-NO', 'nn-NO', 'en'].includes(language)) { logger.warn(`Language code "${language}" is not supported. Language code will be defaulted to "nb".`); } diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index 92ee6cfe7..dd919a1bd 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -22,6 +22,7 @@ const { skjemabyggingProxyUrl, formsApiUrl } = config; const forstesideV2 = { post: async (req: Request, res: Response, next: NextFunction) => { try { + logger.info('ForstesideV2'); const { form, submissionData, language, enhetNummer } = req.body; const formParsed = JSON.parse(form); const submissionDataParsed = JSON.parse(submissionData); @@ -43,6 +44,7 @@ const forstesideV2 = { const forstesidePdf = base64Decode(forstesideResponse.foersteside); + logger.info('Skal kall getPdf'); const soknadResponse: any = await getPdf(req); const soknadPdf = base64Decode(soknadResponse.data); diff --git a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts index 82c610bad..4540269f4 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts @@ -37,6 +37,7 @@ export const createPdf = async ( translations: I18nTranslationMap, language: string, ) => { + logger.info('Start createPdf'); const translate = (text: string, textReplacements?: I18nTranslationReplacements) => translationUtils.translateWithTextReplacements({ translations, From 213bc4a914da66823e913f80243ec88bdd37b3a7 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Thu, 20 Feb 2025 09:44:14 +0100 Subject: [PATCH 09/39] =?UTF-8?q?Endringer=20for=20sammensl=C3=A5ing=20av?= =?UTF-8?q?=20f=C3=B8rsteside=20med=20s=C3=B8knad.=20Nais=20konfigurasjon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nais/fyllut/config.yaml | 2 ++ .nais/fyllut/dev-delingslenke.yaml | 4 ++++ .nais/fyllut/dev.yaml | 4 ++++ .nais/fyllut/preprod-alt.yaml | 4 ++++ .nais/fyllut/preprod.yaml | 4 ++++ .nais/fyllut/prod.yaml | 4 ++++ packages/fyllut-backend/src/routers/api/exstream.ts | 1 + .../src/routers/api/helpers/gotenbergService.ts | 4 ++-- packages/fyllut-backend/src/routers/api/helpers/pdfService.ts | 2 +- 9 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.nais/fyllut/config.yaml b/.nais/fyllut/config.yaml index 6246677c4..1d0f320e0 100644 --- a/.nais/fyllut/config.yaml +++ b/.nais/fyllut/config.yaml @@ -87,6 +87,8 @@ spec: value: {{skjemabygging-proxy-url}} - name: SKJEMABYGGING_PROXY_CLIENT_ID value: {{skjemabygging-proxy-client-id}} + - name: GOTENBERG_URL + value: {{gotenberg-url}} - name: SEND_INN_TOKEN_X_CLIENT_ID value: {{send-inn-token-x-client-id}} - name: SEND_INN_HOST diff --git a/.nais/fyllut/dev-delingslenke.yaml b/.nais/fyllut/dev-delingslenke.yaml index d1760bf3b..9bc3ee9f1 100644 --- a/.nais/fyllut/dev-delingslenke.yaml +++ b/.nais/fyllut/dev-delingslenke.yaml @@ -8,6 +8,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io +gotenberg-url: https://convert-to-pdf.intern.dev.nav.no send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad forms-api-url: https://forms-api.nav.no @@ -37,6 +38,9 @@ accessPolicy: - application: formio-enterprise-server namespace: skjemadigitalisering cluster: dev-gcp + - application: upload-convert-to-pdf + namespace: fyllut-sendinn + cluster: dev-gcp - application: innsending-api namespace: team-soknad cluster: dev-gcp diff --git a/.nais/fyllut/dev.yaml b/.nais/fyllut/dev.yaml index 7fb12b0e2..2ea697b00 100644 --- a/.nais/fyllut/dev.yaml +++ b/.nais/fyllut/dev.yaml @@ -9,6 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io +gotenberg-url: https://convert-to-pdf.intern.dev.nav.no send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: @@ -29,6 +30,9 @@ accessPolicy: - application: skjemabygging-proxy namespace: skjemadigitalisering cluster: dev-fss + - application: upload-convert-to-pdf + namespace: fyllut-sendinn + cluster: dev-gcp - application: innsending-api namespace: team-soknad cluster: dev-gcp diff --git a/.nais/fyllut/preprod-alt.yaml b/.nais/fyllut/preprod-alt.yaml index c0c6e5ce7..783523dee 100644 --- a/.nais/fyllut/preprod-alt.yaml +++ b/.nais/fyllut/preprod-alt.yaml @@ -9,6 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io +gotenberg-url: https://convert-to-pdf.intern.dev.nav.no send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: @@ -38,6 +39,9 @@ accessPolicy: - application: formio-api namespace: skjemadigitalisering cluster: dev-gcp + - application: upload-convert-to-pdf + namespace: fyllut-sendinn + cluster: dev-gcp - application: innsending-api namespace: team-soknad cluster: dev-gcp diff --git a/.nais/fyllut/preprod.yaml b/.nais/fyllut/preprod.yaml index c807ea709..d46fd7f3c 100644 --- a/.nais/fyllut/preprod.yaml +++ b/.nais/fyllut/preprod.yaml @@ -9,6 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io +gotenberg-url: https://convert-to-pdf.intern.dev.nav.no send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: @@ -39,6 +40,9 @@ accessPolicy: - application: formio-api namespace: skjemadigitalisering cluster: dev-gcp + - application: upload-convert-to-pdf + namespace: fyllut-sendinn + cluster: dev-gcp - application: innsending-api namespace: team-soknad cluster: dev-gcp diff --git a/.nais/fyllut/prod.yaml b/.nais/fyllut/prod.yaml index 8f00fc36d..8432b813b 100644 --- a/.nais/fyllut/prod.yaml +++ b/.nais/fyllut/prod.yaml @@ -8,6 +8,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 031863f2-9881-44af-ace5-6b5ab52afeb1 skjemabygging-proxy-url: https://skjemabygging-proxy.prod-fss-pub.nais.io +gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn send-inn-token-x-client-id: prod-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: @@ -33,6 +34,9 @@ accessPolicy: - application: innsending-api namespace: team-soknad cluster: prod-gcp + - application: upload-convert-to-pdf + namespace: fyllut-sendinn + cluster: prod-gcp - application: pdl-api namespace: pdl cluster: prod-fss diff --git a/packages/fyllut-backend/src/routers/api/exstream.ts b/packages/fyllut-backend/src/routers/api/exstream.ts index 819481e30..be507ab72 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.ts @@ -30,6 +30,7 @@ const parseBody = ( }; export const getPdf = async (req: Request) => { + logger.info('GetPdf: start'); const { form, submission, submissionMethod, translations, language } = parseBody(req); logger.info(`GetPdf: with submission set = ${submission != undefined}`); diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 0a60a80dc..4290aef2f 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -18,7 +18,7 @@ import fetchWithRetry from '../../../utils/fetchWithRetry'; import { generateFooterHtml } from './footerBuilder'; import { createHtmlFromSubmission } from './htmlBuilder'; -const gotenbergUrl = config.gotenbergUrl; +const { gotenbergUrl } = config; export const createPdfAsByteArray = async ( accessToken: string, @@ -193,7 +193,7 @@ const applyMetadata = async ( */ const callGotenberg = async (route: string, formData: FormData): Promise => { - console.log(`${gotenbergUrl}${route}`); + console.log(`Calling Gotenberg with url = ${gotenbergUrl}${route}`); try { // Send the request to Gotenberg diff --git a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts index 4540269f4..953087c9f 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts @@ -37,7 +37,7 @@ export const createPdf = async ( translations: I18nTranslationMap, language: string, ) => { - logger.info('Start createPdf'); + logger.info('createPdf: Start'); const translate = (text: string, textReplacements?: I18nTranslationReplacements) => translationUtils.translateWithTextReplacements({ translations, From 5ed31b3fc307081989750104527d2163ae0ee04d Mon Sep 17 00:00:00 2001 From: nilsarne Date: Mon, 24 Feb 2025 16:07:30 +0100 Subject: [PATCH 10/39] Endringer for forberedelse til PR --- packages/fyllut-backend/src/routers/api/exstream.ts | 2 -- .../src/routers/api/forstesideV2.test.ts | 2 +- .../fyllut-backend/src/routers/api/forstesideV2.ts | 10 +++------- .../src/routers/api/helpers/gotenbergService.ts | 3 +++ .../components/letter/download/LetterDownload.tsx | 12 ------------ .../pages/prepare-letter/PrepareLetterPage.test.tsx | 6 +++--- .../src/languages/testdata/global-translations-en.js | 2 +- .../languages/testdata/global-translations-nn-NO.js | 2 +- .../testdata/language-globalGrensesnitt-en.js | 2 +- .../testdata/language-globalGrensesnitt-nn-NO.js | 2 +- packages/shared-domain/src/texts/grensesnitt.js | 2 +- 11 files changed, 15 insertions(+), 30 deletions(-) diff --git a/packages/fyllut-backend/src/routers/api/exstream.ts b/packages/fyllut-backend/src/routers/api/exstream.ts index be507ab72..f24e3697a 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.ts @@ -30,10 +30,8 @@ const parseBody = ( }; export const getPdf = async (req: Request) => { - logger.info('GetPdf: start'); const { form, submission, submissionMethod, translations, language } = parseBody(req); - logger.info(`GetPdf: with submission set = ${submission != undefined}`); if (!['nb-NO', 'nn-NO', 'en'].includes(language)) { logger.warn(`Language code "${language}" is not supported. Language code will be defaulted to "nb".`); } diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts index 68964cbef..a12f7754f 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts @@ -32,6 +32,7 @@ const addresses = [ }, }, ]; + const formTitle = 'testskjema'; const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); @@ -84,7 +85,6 @@ describe('[endpoint] forsteside', () => { components: [], properties: { mottaksadresseId: 'mottaksadresseId', path: '12345', skjemanummer: 'NAV 12.34-56' }, }), - submissionData: '{}', submissionMethod: 'paper', language: 'nb-NO', submission: JSON.stringify({ data: {} }), diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index dd919a1bd..1e663786e 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -22,13 +22,10 @@ const { skjemabyggingProxyUrl, formsApiUrl } = config; const forstesideV2 = { post: async (req: Request, res: Response, next: NextFunction) => { try { - logger.info('ForstesideV2'); - const { form, submissionData, language, enhetNummer } = req.body; + const { form, submission, language, enhetNummer } = req.body; const formParsed = JSON.parse(form); - const submissionDataParsed = JSON.parse(submissionData); - - logger.info('Skal kalle getRecipients'); - + const submissionParsed = JSON.parse(submission); + const submissionDataParsed = submissionParsed.data; const recipients = await getRecipients(formParsed?.properties); const forstesideBody = forstesideUtils.genererFoerstesideData( @@ -44,7 +41,6 @@ const forstesideV2 = { const forstesidePdf = base64Decode(forstesideResponse.foersteside); - logger.info('Skal kall getPdf'); const soknadResponse: any = await getPdf(req); const soknadPdf = base64Decode(soknadResponse.data); diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 4290aef2f..7b8c3455b 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -104,6 +104,7 @@ export const buildHtmlAndConvertToPdf = async ( } }; +// Sette opp formdata med html og footer for å generere PDF v.hj.a Gotenberg. const createPdfFromHtml = async ( html: string, footer: string, @@ -132,6 +133,7 @@ const createPdfFromHtml = async ( return await callGotenberg('/forms/chromium/convert/html', formData); }; +// Sette opp formdata til å merge en liste av PDFer export const mergeFiles = async ( schema: string, title: string, @@ -192,6 +194,7 @@ const applyMetadata = async ( }; */ +// Generisk metode for kall til mot Gotenberg gitt rute og preparert FormData const callGotenberg = async (route: string, formData: FormData): Promise => { console.log(`Calling Gotenberg with url = ${gotenbergUrl}${route}`); diff --git a/packages/shared-components/src/components/letter/download/LetterDownload.tsx b/packages/shared-components/src/components/letter/download/LetterDownload.tsx index 104074f57..adfa40565 100644 --- a/packages/shared-components/src/components/letter/download/LetterDownload.tsx +++ b/packages/shared-components/src/components/letter/download/LetterDownload.tsx @@ -42,7 +42,6 @@ const LetterDownload = ({ form, index, submission, enhetsListe, fyllutBaseURL, t id={`forsteside-${form.path}`} values={{ form: JSON.stringify(form), - submissionData: JSON.stringify(submission.data), submission: JSON.stringify(submission), translations: JSON.stringify(currentLanguage !== 'nb-NO' ? translations[currentLanguage] : {}), @@ -60,17 +59,6 @@ const LetterDownload = ({ form, index, submission, enhetsListe, fyllutBaseURL, t } }} /> - ); }; diff --git a/packages/shared-components/src/pages/prepare-letter/PrepareLetterPage.test.tsx b/packages/shared-components/src/pages/prepare-letter/PrepareLetterPage.test.tsx index 7c240e6ca..9d6a499bf 100644 --- a/packages/shared-components/src/pages/prepare-letter/PrepareLetterPage.test.tsx +++ b/packages/shared-components/src/pages/prepare-letter/PrepareLetterPage.test.tsx @@ -152,11 +152,11 @@ describe('PrepareLetterPage', () => { it('Laster ned pdf for førsteside', async () => { renderPrepareLetterPage(); - await userEvent.click(screen.getByRole('button', { name: 'Last ned førsteside' })); + await userEvent.click(screen.getByRole('button', { name: 'Last ned førsteside og søknad' })); expect(submitCalls).toHaveLength(1); const submitted = submitCalls[0].target as HTMLFormElement; expect((submitted.elements[0] as HTMLInputElement).name).toBe('form'); - expect((submitted.elements[1] as HTMLInputElement).name).toBe('submissionData'); + expect((submitted.elements[1] as HTMLInputElement).name).toBe('submission'); }); it('Laster ikke ned førsteside pdf dersom enhet ikke er valgt, og viser feilmelding i stedet', async () => { @@ -165,7 +165,7 @@ describe('PrepareLetterPage', () => { }); renderPrepareLetterPage(form); - await userEvent.click(await screen.findByRole('button', { name: 'Last ned førsteside' })); + await userEvent.click(await screen.findByRole('button', { name: 'Last ned førsteside og søknad' })); expect(submitCalls).toHaveLength(1); expect(await screen.findByText(TEXTS.statiske.prepareLetterPage.entityNotSelectedError)).toBeInTheDocument(); }); diff --git a/packages/shared-domain/src/languages/testdata/global-translations-en.js b/packages/shared-domain/src/languages/testdata/global-translations-en.js index ae37cd4b5..a720d93aa 100644 --- a/packages/shared-domain/src/languages/testdata/global-translations-en.js +++ b/packages/shared-domain/src/languages/testdata/global-translations-en.js @@ -182,7 +182,7 @@ const en = { 'Rediger søknaden': { value: 'Edit application', scope: 'global' }, 'Send i posten': { value: 'Submit by mail', scope: 'global' }, 'Til digital innsending': { value: 'To digital submission', scope: 'global' }, - 'Last ned førsteside': { value: 'Download cover sheet', scope: 'global' }, + 'Last ned førsteside og søknad': { value: 'Download cover sheet and applicaton', scope: 'global' }, 'Jeg har lest instruksjonene.': { value: 'I have read the instructions.', scope: 'global' }, Ja: { value: 'Yes', scope: 'global' }, Nei: { value: 'No', scope: 'global' }, diff --git a/packages/shared-domain/src/languages/testdata/global-translations-nn-NO.js b/packages/shared-domain/src/languages/testdata/global-translations-nn-NO.js index 8683bd25d..1c6b75269 100644 --- a/packages/shared-domain/src/languages/testdata/global-translations-nn-NO.js +++ b/packages/shared-domain/src/languages/testdata/global-translations-nn-NO.js @@ -175,7 +175,7 @@ const nnNO = { 'Rediger søknaden': { value: 'Rediger søknaden', scope: 'global' }, 'Send i posten': { value: 'Send i posten', scope: 'global' }, 'Til digital innsending': { value: 'Til digital innsending', scope: 'global' }, - 'Last ned førsteside': { value: 'Last ned førsteside', scope: 'global' }, + 'Last ned førsteside og søknad': { value: 'Last ned førsteside og søknad', scope: 'global' }, 'Jeg har lest instruksjonene.': { value: 'Eg har lese rettleiinga.', scope: 'global' }, valgfritt: { value: 'valfritt', scope: 'global' }, Januar: { value: 'Januar', scope: 'global' }, diff --git a/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-en.js b/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-en.js index 2d7ca712d..f3136a27e 100644 --- a/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-en.js +++ b/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-en.js @@ -20,7 +20,7 @@ const dbEntity = { 'Rediger søknaden': 'Edit application', 'Send i posten': 'Submit by mail', 'Til digital innsending': 'To digital submission', - 'Last ned førsteside': 'Download cover sheet', + 'Last ned førsteside og søknad': 'Download cover sheet and application', 'Jeg har lest instruksjonene.': 'I have read the instructions.', Ja: 'Yes', Nei: 'No', diff --git a/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-nn-NO.js b/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-nn-NO.js index 7980e3dc0..9c298cab8 100644 --- a/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-nn-NO.js +++ b/packages/shared-domain/src/languages/testdata/language-globalGrensesnitt-nn-NO.js @@ -22,7 +22,7 @@ const dbEntity = { 'Rediger søknaden': 'Rediger søknaden', 'Send i posten': 'Send i posten', 'Til digital innsending': 'Til digital innsending', - 'Last ned førsteside': 'Last ned førsteside', + 'Last ned førsteside og søknad': 'Last ned førsteside og søknad', 'Jeg har lest instruksjonene.': 'Eg har lese rettleiinga.', valgfritt: 'valfritt', Januar: 'Januar', diff --git a/packages/shared-domain/src/texts/grensesnitt.js b/packages/shared-domain/src/texts/grensesnitt.js index ff80e5c40..f71787329 100644 --- a/packages/shared-domain/src/texts/grensesnitt.js +++ b/packages/shared-domain/src/texts/grensesnitt.js @@ -63,7 +63,7 @@ export const grensesnitt = { editAnswers: 'Fortsett utfylling', }, prepareLetterPage: { - downloadCoverPage: 'Last ned førsteside', + downloadCoverPage: 'Last ned førsteside og søknad', }, stepper: { toggleText: 'Steg {{currentStep}} av {{totalSteps}}', From f26b881844fdc08543201a906c66ab8062f05190 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Tue, 25 Feb 2025 08:24:27 +0100 Subject: [PATCH 11/39] Merging fra master og fikset pakke versjoner --- packages/bygger-backend/package.json | 2 +- yarn.lock | 35 +++++++++------------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/packages/bygger-backend/package.json b/packages/bygger-backend/package.json index 7f9ff9ee7..4bbd96ead 100644 --- a/packages/bygger-backend/package.json +++ b/packages/bygger-backend/package.json @@ -40,7 +40,7 @@ "@types/express": "^4.17.21", "@types/express-correlation-id": "^1.2.6", "@types/http-proxy": "^1.17.15", - "@types/jsonwebtoken": "^9.0.7", + "@types/jsonwebtoken": "9.0.7", "@types/luxon": "^3.4.2", "@types/memorystream": "^0.3.4", "@types/node": "^22.13.0", diff --git a/yarn.lock b/yarn.lock index fbfd51f9e..7619c6101 100644 --- a/yarn.lock +++ b/yarn.lock @@ -838,7 +838,7 @@ "@mocks-server/admin-api-client" "7.0.0" "@mocks-server/admin-api-paths" "5.0.0" -"@mswjs/interceptors@^0.37.0": +"@mswjs/interceptors@^0.37.0", "@mswjs/interceptors@^0.37.3": version "0.37.6" resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.37.6.tgz#2635319b7a81934e1ef1b5593ef7910347e2b761" integrity sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w== @@ -850,10 +850,10 @@ outvariant "^1.4.3" strict-event-emitter "^0.5.1" -"@navikt/aksel-icons@^7.9.1": - version "7.9.1" - resolved "https://npm.pkg.github.com/download/@navikt/aksel-icons/7.9.1/10d623cfc6f0786e7ae238ddf73491be74afe282#10d623cfc6f0786e7ae238ddf73491be74afe282" - integrity sha512-IbKrPTyu4D39BUQ/sq3DnejUnQx2tNkFxISgOpw/SvAcpNJKP6FgRyuu9c68gGwQx16qSdzQfv+uMGTC1VJVfw== +"@navikt/aksel-icons@^7.14.0": + version "7.14.2" + resolved "https://npm.pkg.github.com/download/@navikt/aksel-icons/7.14.2/31e37d1f509e440652024be048a9d72a0704b705#31e37d1f509e440652024be048a9d72a0704b705" + integrity sha512-oJO6kVuMdSfJLAq2CEWUfbnb1lZDm9vl1+hT0M8hBETPpTaZ0rkBn8ZYimU/mjEJHs2753f+LKyvCH886ksskw== "@navikt/ds-css@^7.10.0": version "7.14.0" @@ -4915,13 +4915,12 @@ is-bigint@^1.1.0: dependencies: has-bigints "^1.0.2" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + binary-extensions "^2.0.0" is-boolean-object@^1.2.1: version "1.2.2" @@ -7986,23 +7985,11 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.1: +tslib@^2.0.3, tslib@^2.1.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" From 0b922c2b74b4dad22dce5641f35e699f8edc9208 Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 5 Mar 2025 10:46:17 +0100 Subject: [PATCH 12/39] Oppdatering etter PR. Midlertidig beholdt ubrukt kode for generering av Html og konvertering til PDF v.hj.a Gotenberg --- .nais/fyllut/dev-delingslenke.yaml | 2 +- .nais/fyllut/dev.yaml | 2 +- .nais/fyllut/preprod-alt.yaml | 2 +- .nais/fyllut/preprod.yaml | 2 +- packages/fyllut-backend/package.json | 2 +- .../src/routers/api/exstream.test.ts | 13 +- .../src/routers/api/forsteside-soknad.test.ts | 102 +++++++++++ .../src/routers/api/forsteside-soknad.ts | 129 ++++++++++++++ .../src/routers/api/forstesideV2.test.ts | 41 +---- .../src/routers/api/forstesideV2.ts | 51 +----- .../routers/api/helpers/gotenbergService.ts | 163 +----------------- .../src/routers/api/helpers/pdfService.ts | 1 - .../api/helpers/prepareHtmlAndGeneratePdf.ts | 131 ++++++++++++++ .../fyllut-backend/src/routers/api/index.js | 2 + .../letter/download/LetterDownload.tsx | 4 +- 15 files changed, 389 insertions(+), 258 deletions(-) create mode 100644 packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts create mode 100644 packages/fyllut-backend/src/routers/api/forsteside-soknad.ts create mode 100644 packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts diff --git a/.nais/fyllut/dev-delingslenke.yaml b/.nais/fyllut/dev-delingslenke.yaml index 14cf42ad3..56e673198 100644 --- a/.nais/fyllut/dev-delingslenke.yaml +++ b/.nais/fyllut/dev-delingslenke.yaml @@ -8,7 +8,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io -gotenberg-url: https://convert-to-pdf.intern.dev.nav.no +gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad forms-api-url: https://forms-api.nav.no diff --git a/.nais/fyllut/dev.yaml b/.nais/fyllut/dev.yaml index 2ea697b00..5ebb0e45c 100644 --- a/.nais/fyllut/dev.yaml +++ b/.nais/fyllut/dev.yaml @@ -9,7 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io -gotenberg-url: https://convert-to-pdf.intern.dev.nav.no +gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/.nais/fyllut/preprod-alt.yaml b/.nais/fyllut/preprod-alt.yaml index 98db0d3f6..cc00f61f6 100644 --- a/.nais/fyllut/preprod-alt.yaml +++ b/.nais/fyllut/preprod-alt.yaml @@ -9,7 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io -gotenberg-url: https://convert-to-pdf.intern.dev.nav.no +gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/.nais/fyllut/preprod.yaml b/.nais/fyllut/preprod.yaml index 66ea11b50..abadc3fe2 100644 --- a/.nais/fyllut/preprod.yaml +++ b/.nais/fyllut/preprod.yaml @@ -9,7 +9,7 @@ foersteside-url: https://www.nav.no/soknader/api/forsteside dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io -gotenberg-url: https://convert-to-pdf.intern.dev.nav.no +gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/packages/fyllut-backend/package.json b/packages/fyllut-backend/package.json index 7d0e70fd3..f4f0d63fd 100644 --- a/packages/fyllut-backend/package.json +++ b/packages/fyllut-backend/package.json @@ -52,7 +52,7 @@ "@types/node-fetch": "^2.6.12", "@types/node-jose": "^1.1.13", "@types/supertest": "^6.0.2", - "nock": "^14", + "nock": "^14.0.1", "supertest": "^7.0.0", "vite-plugin-node": "^4.0.0", "vite-plugin-static-copy": "^2.2.0" diff --git a/packages/fyllut-backend/src/routers/api/exstream.test.ts b/packages/fyllut-backend/src/routers/api/exstream.test.ts index 85b97888a..42a235e9c 100644 --- a/packages/fyllut-backend/src/routers/api/exstream.test.ts +++ b/packages/fyllut-backend/src/routers/api/exstream.test.ts @@ -1,8 +1,6 @@ -import { readFileSync } from 'fs'; import nock from 'nock'; -import path from 'path'; import { mockRequest, mockResponse } from '../../test/testHelpers'; -import { base64Encode } from '../../utils/base64'; +import { base64Decode } from '../../utils/base64'; import exstream from './exstream'; const formTitle = 'testskjema'; @@ -14,22 +12,17 @@ const defaultBody = { language: 'nb-NO', }; -const filePath = path.join(process.cwd(), '/src/routers/api/test.pdf'); - describe('exstream', () => { it('decodes and sends the pdf on success', async () => { - const testPdf = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); - const encodedPdf = base64Encode(testPdf); - const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) .post('/exstream') - .reply(200, { data: { result: [{ content: { data: encodedPdf } }] } }, { 'content-type': 'application/json' }); + .reply(200, { data: { result: [{ content: { data: 'base64EncodedPDFstring' } }] } }); const req = mockRequest({ headers: { AzureAccessToken: 'azure-access-token' }, body: defaultBody }); const res = mockResponse(); const next = vi.fn(); await exstream.post(req, res, next); expect(next).not.toHaveBeenCalled(); - //expect(res.send).toHaveBeenCalledWith(base64Decode(testPdf)); + expect(res.send).toHaveBeenCalledWith(base64Decode('base64EncodedPDFstring')); skjemabyggingproxyScope.done(); }); diff --git a/packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts b/packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts new file mode 100644 index 000000000..0dca32c26 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts @@ -0,0 +1,102 @@ +import { ForstesideRequestBody, forstesideUtils } from '@navikt/skjemadigitalisering-shared-domain'; +import { readFileSync } from 'fs'; +import nock from 'nock'; +import path from 'path'; +import { config } from '../../config/config'; +import { mockNext, mockRequest, mockResponse } from '../../test/requestTestHelpers'; +import forstesideAndSoknad from './forsteside-soknad'; +import * as mottaksadresser from './mottaksadresser'; + +const { skjemabyggingProxyUrl, formsApiUrl } = config; + +const addresses = [ + { + _id: '6246de1afd03d2caeeda2825', + data: { + adresselinje1: 'Nav Arbeid og ytelser lønnsgaranti', + adresselinje2: 'Postboks 6683 St. Olavs Plass', + adresselinje3: '', + postnummer: '0129', + poststed: 'Oslo', + temakoder: 'FOS,HJE', + }, + }, + { + _id: '61c09f91ec962a0003c65014', + data: { + adresselinje1: 'Nav Skanning bidrag', + adresselinje2: 'PB 6215 Etterstad', + adresselinje3: '', + postnummer: '0603', + poststed: 'Oslo', + }, + }, +]; + +const formTitle = 'testskjema'; +const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); +const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); +const filePathMerged = path.join(process.cwd(), '/src/routers/api/test-merged.pdf'); + +describe('[endpoint] forsteside', () => { + beforeAll(() => { + vi.spyOn(mottaksadresser, 'loadMottaksadresser').mockImplementation(async () => addresses); + vi.spyOn(forstesideUtils, 'genererFoerstesideData').mockImplementation( + () => + ({ + foerstesidetype: 'ETTERSENDELSE', + navSkjemaId: 'NAV 10.10.10', + spraakkode: 'NB', + overskriftstittel: 'Tittel', + arkivtittel: 'Tittel', + tema: 'HJE', + }) as ForstesideRequestBody, + ); + }); + + it('Create front page', async () => { + const forstesidePdf = readFileSync(filePathForsteside); + const soknadPdf = readFileSync(filePathSoknad); + const mergedPdf = readFileSync(filePathMerged); + const encodedForstesidedPdf = forstesidePdf.toString('base64'); + const encodedSoknadPdf = soknadPdf.toString('base64'); + + const recipientsMock = nock(formsApiUrl).get('/v1/recipients').reply(200, []); + const generateFileMock = nock(skjemabyggingProxyUrl!) + .post('/foersteside') + .reply(200, { foersteside: encodedForstesidedPdf }); + const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) + .post('/exstream') + .reply(200, { data: { result: [{ content: { data: encodedSoknadPdf } }] } }); + + const mergePdfScope = nock(process.env.GOTENBERG_URL as string) + .intercept('/forms/pdfengines/merge', 'POST', (body) => { + return body != null; + }) + .reply(200, mergedPdf, { 'content-type': 'application/pdf' }); + + const req = mockRequest({ + headers: { + AzureAccessToken: '', + }, + body: { + form: JSON.stringify({ + title: formTitle, + components: [], + properties: { mottaksadresseId: 'mottaksadresseId', path: '12345', skjemanummer: 'NAV 12.34-56' }, + }), + submissionMethod: 'paper', + language: 'nb-NO', + submission: JSON.stringify({ data: {} }), + translations: JSON.stringify({}), + }, + }); + + await forstesideAndSoknad.post(req, mockResponse(), mockNext()); + + expect(recipientsMock.isDone()).toBe(true); + expect(generateFileMock.isDone()).toBe(true); + expect(skjemabyggingproxyScope.isDone()).toBe(true); + expect(mergePdfScope.isDone()).toBe(true); + }, 10000); +}); diff --git a/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts b/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts new file mode 100644 index 000000000..14d3a2679 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts @@ -0,0 +1,129 @@ +import { + FormPropertiesType, + ForstesideRequestBody, + forstesideUtils, + Recipient, +} from '@navikt/skjemadigitalisering-shared-domain'; +import { NextFunction, Request, Response } from 'express'; +import correlator from 'express-correlation-id'; +import fetch, { BodyInit, HeadersInit } from 'node-fetch'; +import { config } from '../../config/config'; +import { logger } from '../../logger'; +import { base64Decode } from '../../utils/base64'; +import { htmlResponseError, responseToError } from '../../utils/errorHandling.js'; +import { logErrorWithStacktrace } from '../../utils/errors'; +import { getPdf } from './exstream'; +import { mergeFiles } from './helpers/gotenbergService'; +//import { writeFileSync } from "node:fs"; +//import path from "path"; + +const { skjemabyggingProxyUrl, formsApiUrl } = config; +//const filePath = path.join(process.cwd(), '/src/routers/api/merged.pdf'); + +const forstesideAndSoknad = { + post: async (req: Request, res: Response, next: NextFunction) => { + try { + const { form, submission, language, enhetNummer } = req.body; + const formParsed = JSON.parse(form); + const submissionParsed = JSON.parse(submission); + const submissionDataParsed = submissionParsed.data; + const recipients = await getRecipients(formParsed?.properties); + + const forstesideBody = forstesideUtils.genererFoerstesideData( + formParsed, + submissionDataParsed, + language, + recipients, + enhetNummer, + ); + + const forstesideResponse: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); + logForsteside(req.body, forstesideResponse); + + const forstesidePdf = base64Decode(forstesideResponse.foersteside); + + const soknadResponse: any = await getPdf(req); + + const soknadPdf = base64Decode(soknadResponse.data); + + if (soknadPdf === undefined || forstesidePdf === undefined) { + throw htmlResponseError('Generering av førstesideark eller søknads PDF feilet'); + } + + const documents = [forstesidePdf, soknadPdf]; + + const mergedFile = await mergeFiles( + forstesideBody.navSkjemaId, + forstesideBody.overskriftstittel, + forstesideBody.spraakkode, + documents, + { pdfa: true, pdfua: true }, + ); + + //For PDF inspection + /* + writeFileSync(filePath, Buffer.from(mergedFile), { + flag: "w" + }); + */ + + const fileName = encodeURIComponent(`Førstesideark_${formParsed.path}.pdf`); + + res.contentType('application/pdf'); + res.setHeader('Content-Disposition', `inline; filename=${fileName}`); + + res.send(Buffer.from(new Uint8Array(mergedFile))); + logger.info(`3. Returnert mergedFile`); + } catch (e) { + logErrorWithStacktrace(e as Error); + const forstesideError = htmlResponseError('Generering av førstesideark eller soknads PDF feilet'); + next(forstesideError); + } + }, +}; + +const getRecipients = async (formProperties: FormPropertiesType): Promise => { + if (formProperties.mottaksadresseId) { + const recipientsResponse = await fetch(`${formsApiUrl}/v1/recipients`, { + method: 'GET', + headers: { + 'x-correlation-id': correlator.getId() as string, + }, + }); + if (!recipientsResponse.ok) { + throw new Error('Failed to fetch recipients'); + } + + return (await recipientsResponse.json()) as Recipient[] | undefined; + } +}; + +const forstesideRequest = async (req: Request, body?: BodyInit) => { + const response = await fetch(`${skjemabyggingProxyUrl}/foersteside`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${req.headers.AzureAccessToken}`, + 'x-correlation-id': correlator.getId(), + } as HeadersInit, + body, + }); + + if (response.ok) { + return response.json(); + } + + throw await responseToError(response, 'Feil ved generering av førsteside', true); +}; + +const logForsteside = (forsteside: ForstesideRequestBody, response: any) => { + logger.info('Download frontpage', { + loepenummer: response.loepenummer, + navSkjemaId: forsteside.navSkjemaId, + tema: forsteside.tema, + enhetsnummer: forsteside.enhetsnummer, + spraakkode: forsteside.spraakkode, + }); +}; + +export default forstesideAndSoknad; diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts index a12f7754f..713c4ec92 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.test.ts @@ -1,7 +1,5 @@ import { ForstesideRequestBody, forstesideUtils } from '@navikt/skjemadigitalisering-shared-domain'; -import { readFileSync } from 'fs'; import nock from 'nock'; -import path from 'path'; import { config } from '../../config/config'; import { mockNext, mockRequest, mockResponse } from '../../test/requestTestHelpers'; import forstesideV2 from './forstesideV2'; @@ -33,11 +31,6 @@ const addresses = [ }, ]; -const formTitle = 'testskjema'; -const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); -const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); -const filePathMerged = path.join(process.cwd(), '/src/routers/api/test-merged.pdf'); - describe('[endpoint] forsteside', () => { beforeAll(() => { vi.spyOn(mottaksadresser, 'loadMottaksadresser').mockImplementation(async () => addresses); @@ -55,40 +48,16 @@ describe('[endpoint] forsteside', () => { }); it('Create front page', async () => { - const forstesidePdf = readFileSync(filePathForsteside); - const soknadPdf = readFileSync(filePathSoknad); - const mergedPdf = readFileSync(filePathMerged); - const encodedForstesidedPdf = forstesidePdf.toString('base64'); - const encodedSoknadPdf = soknadPdf.toString('base64'); - const recipientsMock = nock(formsApiUrl).get('/v1/recipients').reply(200, []); - const generateFileMock = nock(skjemabyggingProxyUrl!) - .post('/foersteside') - .reply(200, { foersteside: encodedForstesidedPdf }); - const skjemabyggingproxyScope = nock(process.env.SKJEMABYGGING_PROXY_URL as string) - .post('/exstream') - .reply(200, { data: { result: [{ content: { data: encodedSoknadPdf } }] } }); - - const mergePdfScope = nock(process.env.GOTENBERG_URL as string) - .intercept('/forms/pdfengines/merge', 'POST', (body) => { - return body != null; - }) - .reply(200, mergedPdf, { 'content-type': 'application/pdf' }); + const generateFileMock = nock(skjemabyggingProxyUrl!).post('/foersteside').reply(200, '{}'); const req = mockRequest({ headers: { AzureAccessToken: '', }, body: { - form: JSON.stringify({ - title: formTitle, - components: [], - properties: { mottaksadresseId: 'mottaksadresseId', path: '12345', skjemanummer: 'NAV 12.34-56' }, - }), - submissionMethod: 'paper', - language: 'nb-NO', - submission: JSON.stringify({ data: {} }), - translations: JSON.stringify({}), + form: JSON.stringify({ properties: { mottaksadresseId: 'mottaksadresseId' } }), + submissionData: '{}', }, }); @@ -96,7 +65,5 @@ describe('[endpoint] forsteside', () => { expect(recipientsMock.isDone()).toBe(true); expect(generateFileMock.isDone()).toBe(true); - expect(skjemabyggingproxyScope.isDone()).toBe(true); - expect(mergePdfScope.isDone()).toBe(true); - }, 10000); + }); }); diff --git a/packages/fyllut-backend/src/routers/api/forstesideV2.ts b/packages/fyllut-backend/src/routers/api/forstesideV2.ts index 1e663786e..52e4ffc9a 100644 --- a/packages/fyllut-backend/src/routers/api/forstesideV2.ts +++ b/packages/fyllut-backend/src/routers/api/forstesideV2.ts @@ -12,20 +12,16 @@ import { logger } from '../../logger'; import { base64Decode } from '../../utils/base64'; import { htmlResponseError, responseToError } from '../../utils/errorHandling.js'; import { logErrorWithStacktrace } from '../../utils/errors'; -import { getPdf } from './exstream'; -import { mergeFiles } from './helpers/gotenbergService'; -//import { writeFileSync } from "node:fs"; -//import path from "path"; const { skjemabyggingProxyUrl, formsApiUrl } = config; -//const filePath = path.join(process.cwd(), '/src/routers/api/merged.pdf'); + const forstesideV2 = { post: async (req: Request, res: Response, next: NextFunction) => { try { - const { form, submission, language, enhetNummer } = req.body; + const { form, submissionData, language, enhetNummer } = req.body; const formParsed = JSON.parse(form); - const submissionParsed = JSON.parse(submission); - const submissionDataParsed = submissionParsed.data; + const submissionDataParsed = JSON.parse(submissionData); + const recipients = await getRecipients(formParsed?.properties); const forstesideBody = forstesideUtils.genererFoerstesideData( @@ -36,47 +32,16 @@ const forstesideV2 = { enhetNummer, ); - const forstesideResponse: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); - logForsteside(req.body, forstesideResponse); - - const forstesidePdf = base64Decode(forstesideResponse.foersteside); - - const soknadResponse: any = await getPdf(req); - - const soknadPdf = base64Decode(soknadResponse.data); - - if (soknadPdf === undefined || forstesidePdf === undefined) { - throw htmlResponseError('Generering av førstesideark eller søknads PDF feilet'); - } - - const documents = [forstesidePdf, soknadPdf]; - - const mergedFile = await mergeFiles( - forstesideBody.navSkjemaId, - forstesideBody.overskriftstittel, - forstesideBody.spraakkode, - documents, - { pdfa: true, pdfua: true }, - ); - - //For PDF inspection - /* - writeFileSync(filePath, Buffer.from(mergedFile), { - flag: "w" - }); - */ + const response: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); + logForsteside(req.body, response); const fileName = encodeURIComponent(`Førstesideark_${formParsed.path}.pdf`); - res.contentType('application/pdf'); res.setHeader('Content-Disposition', `inline; filename=${fileName}`); - - res.send(Buffer.from(new Uint8Array(mergedFile))); - logger.info(`3. Returnert mergedFile`); + res.send(base64Decode(response.foersteside)); } catch (e) { - console.log(e); logErrorWithStacktrace(e as Error); - const forstesideError = htmlResponseError('Generering av førstesideark eller soknads PDF feilet'); + const forstesideError = htmlResponseError('Generering av førstesideark feilet'); next(forstesideError); } }, diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index 7b8c3455b..aed3e73c1 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -1,138 +1,12 @@ -import { - I18nTranslationMap, - I18nTranslationReplacements, - NavFormType, - Submission, - translationUtils, -} from '@navikt/skjemadigitalisering-shared-domain'; import correlator from 'express-correlation-id'; import FormData from 'form-data'; -//import { readFileSync } from 'fs'; -//import path from 'path'; import { config } from '../../../config/config'; import { logger } from '../../../logger'; -import { appMetrics } from '../../../services'; import { synchronousResponseToError } from '../../../utils/errorHandling'; -//import fetch from 'node-fetch'; import fetchWithRetry from '../../../utils/fetchWithRetry'; -import { generateFooterHtml } from './footerBuilder'; -import { createHtmlFromSubmission } from './htmlBuilder'; const { gotenbergUrl } = config; -export const createPdfAsByteArray = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - return await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); -}; - -export const buildHtmlAndCreatePdf = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - const pdf = await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); - return Buffer.from(new Uint8Array(pdf)); -}; - -/* Feiler ved deploy: Error: ENOENT: no such file or directory, open '/home/runner/work/skjemabygging-formio/skjemabygging-formio/packages/fyllut-backend/dist/src/routers/api/helpers/nav-icon.svg' -const filePath = path.join(process.cwd(), '/src/routers/api/helpers/nav-icon.svg'); -const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); -*/ -const navIcon = undefined; - -export const buildHtmlAndConvertToPdf = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - // Build Html from submission - const translate = (text: string, textReplacements?: I18nTranslationReplacements) => - translationUtils.translateWithTextReplacements({ - translations, - originalText: text, - params: textReplacements, - currentLanguage: language, - }); - - const html = createHtmlFromSubmission(form, submission, submissionMethod, translate, language); - if (!html || Object.keys(html).length === 0) { - throw Error('Missing HTML for generating PDF.'); - } - - // Build Footer - const { fodselsnummerDNummerSoker } = submission.data; - const footerHtml = generateFooterHtml( - (fodselsnummerDNummerSoker as string | undefined) || '—', - config.gitVersion, - form.properties.skjemanummer, - language, - translate, - ); - - appMetrics.exstreamPdfRequestsCounter.inc(); - let errorOccurred = false; - const stopMetricRequestDuration = appMetrics.outgoingRequestDuration.startTimer({ - service: 'gotenberg', - method: 'createPdfFromGotenberg', - }); - const assets = {}; - const options = { pdfa: true, pdfua: true }; - try { - return await createPdfFromHtml(html, footerHtml, assets, options); - } catch (e) { - errorOccurred = true; - appMetrics.exstreamPdfFailuresCounter.inc(); - throw e; - } finally { - const durationSeconds = stopMetricRequestDuration({ error: String(errorOccurred) }); - logger.info(`Request to gotenberg pdf service completed after ${durationSeconds} seconds`, { - error: errorOccurred, - durationSeconds, - }); - } -}; - -// Sette opp formdata med html og footer for å generere PDF v.hj.a Gotenberg. -const createPdfFromHtml = async ( - html: string, - footer: string, - assets: { [filename: string]: string }, - options: { pdfa: boolean; pdfua: boolean }, -): Promise => { - const formData = new FormData(); - - // Add the main HTML content - formData.append('files', Buffer.from(html), 'index.html'); - formData.append('files', Buffer.from(footer), 'footer.html'); - if (navIcon != null) { - formData.append('files', Buffer.from(navIcon), 'nav-logo.svg'); - } - - // Add optional assets like logos, footers, etc. - for (const [filename, content] of Object.entries(assets)) { - formData.append('files', Buffer.from(content), filename); - } - - // Add Gotenberg-specific options - formData.append('pdfa', options.pdfa ? 'PDF/A-1b' : ''); - formData.append('pdfua', options.pdfua ? 'true' : ''); - formData.append('skipNetworkIdleEvent', 'false'); - - return await callGotenberg('/forms/chromium/convert/html', formData); -}; - // Sette opp formdata til å merge en liste av PDFer export const mergeFiles = async ( schema: string, @@ -166,36 +40,17 @@ export const mergeFiles = async ( }; formData.append('metadata', `${JSON.stringify(metadata)}`); - // Hvordan sette språk? + // Hvordan sette språk? En engelsk og en norsk Gotenberg installasjon? logger.info(`Skal kalle Gotenberg for å merge filer`); return await callGotenberg('/forms/pdfengines/merge', formData); - //const mergedPdf = await callGotenberg("/forms/pdfengines/merge", formData); - //return await applyMetadata(mergedPdf, metadata, options); }; const formatPDFDate = (date: Date) => { return date.toISOString().replace(/\.\d{3}Z$/, ''); // Removes milliseconds & Zulu time }; -/* For future use -const applyMetadata = async ( - pdfBuffer: ArrayBuffer, - metadata: Record, - options: { pdfa: boolean; pdfua: boolean }, - ) => { - const formData = new FormData(); - - formData.append("file", Buffer.from(new Uint8Array(pdfBuffer)), "test-merged.pdf"); - formData.append("metadata", JSON.stringify(metadata)); - formData.append('pdfa', options.pdfa ? 'PDF/A-1b' : ''); - formData.append('pdfua', options.pdfua ? 'true' : ''); - - return callGotenberg('/forms/pdfengines/convert', formData); -}; -*/ - // Generisk metode for kall til mot Gotenberg gitt rute og preparert FormData -const callGotenberg = async (route: string, formData: FormData): Promise => { +export const callGotenberg = async (route: string, formData: FormData): Promise => { console.log(`Calling Gotenberg with url = ${gotenbergUrl}${route}`); try { @@ -204,24 +59,12 @@ const callGotenberg = async (route: string, formData: FormData): Promise => retry: 1, headers: { accept: 'application/pdf, text/plain', - correlation_id: 'xx', + correlation_id: correlator.getId(), } as HeadersInit, method: 'POST', body: formData, }); - /* - const gotenbergResponse = await fetch(`${gotenbergUrl}/forms/chromium/convert/html`, { - method: 'POST', - headers: { - ...formData.getHeaders(), - contentType: 'multipart/form-data', - accept: 'application/pdf, text/plain', - } as HeadersInit, - body: formData, - }); -*/ - if (!gotenbergResponse.ok) { console.log(`Response fra Gotenberg feilet`); const errorText = await gotenbergResponse.text(); diff --git a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts index 953087c9f..82c610bad 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/pdfService.ts @@ -37,7 +37,6 @@ export const createPdf = async ( translations: I18nTranslationMap, language: string, ) => { - logger.info('createPdf: Start'); const translate = (text: string, textReplacements?: I18nTranslationReplacements) => translationUtils.translateWithTextReplacements({ translations, diff --git a/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts b/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts new file mode 100644 index 000000000..dc1e761c9 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts @@ -0,0 +1,131 @@ +import { + I18nTranslationMap, + I18nTranslationReplacements, + NavFormType, + Submission, + translationUtils, +} from '@navikt/skjemadigitalisering-shared-domain'; +import FormData from 'form-data'; +//import { readFileSync } from 'fs'; +//import path from 'path'; +import { config } from '../../../config/config'; +import { logger } from '../../../logger'; +import { appMetrics } from '../../../services'; +import { callGotenberg } from './gotenbergService'; +//import { synchronousResponseToError } from '../../../utils/errorHandling'; +//import fetch from 'node-fetch'; +import { generateFooterHtml } from './footerBuilder'; +import { createHtmlFromSubmission } from './htmlBuilder'; + +export const createPdfAsByteArray = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + return await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); +}; + +export const buildHtmlAndCreatePdf = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + const pdf = await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); + return Buffer.from(new Uint8Array(pdf)); +}; + +/* Feiler ved deploy: Error: ENOENT: no such file or directory, open '/home/runner/work/skjemabygging-formio/skjemabygging-formio/packages/fyllut-backend/dist/src/routers/api/helpers/nav-icon.svg' +const filePath = path.join(process.cwd(), '/src/routers/api/helpers/nav-icon.svg'); +const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); +*/ +const navIcon = undefined; + +const buildHtmlAndConvertToPdf = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + // Build Html from submission + const translate = (text: string, textReplacements?: I18nTranslationReplacements) => + translationUtils.translateWithTextReplacements({ + translations, + originalText: text, + params: textReplacements, + currentLanguage: language, + }); + + const html = createHtmlFromSubmission(form, submission, submissionMethod, translate, language); + if (!html || Object.keys(html).length === 0) { + throw Error('Missing HTML for generating PDF.'); + } + + // Build Footer + const { fodselsnummerDNummerSoker } = submission.data; + const footerHtml = generateFooterHtml( + (fodselsnummerDNummerSoker as string | undefined) || '—', + config.gitVersion, + form.properties.skjemanummer, + language, + translate, + ); + + appMetrics.exstreamPdfRequestsCounter.inc(); + let errorOccurred = false; + const stopMetricRequestDuration = appMetrics.outgoingRequestDuration.startTimer({ + service: 'gotenberg', + method: 'createPdfFromGotenberg', + }); + const assets = {}; + const options = { pdfa: true, pdfua: true }; + try { + return await createPdfFromHtml(html, footerHtml, assets, options); + } catch (e) { + errorOccurred = true; + appMetrics.exstreamPdfFailuresCounter.inc(); + throw e; + } finally { + const durationSeconds = stopMetricRequestDuration({ error: String(errorOccurred) }); + logger.info(`Request to gotenberg pdf service completed after ${durationSeconds} seconds`, { + error: errorOccurred, + durationSeconds, + }); + } +}; + +// Sette opp formdata med html og footer for å generere PDF v.hj.a Gotenberg. +const createPdfFromHtml = async ( + html: string, + footer: string, + assets: { [filename: string]: string }, + options: { pdfa: boolean; pdfua: boolean }, +): Promise => { + const formData = new FormData(); + + // Add the main HTML content + formData.append('files', Buffer.from(html), 'index.html'); + formData.append('files', Buffer.from(footer), 'footer.html'); + if (navIcon != null) { + formData.append('files', Buffer.from(navIcon), 'nav-logo.svg'); + } + + // Add optional assets like logos, footers, etc. + for (const [filename, content] of Object.entries(assets)) { + formData.append('files', Buffer.from(content), filename); + } + + // Add Gotenberg-specific options + formData.append('pdfa', options.pdfa ? 'PDF/A-2b' : ''); + formData.append('pdfua', options.pdfua ? 'true' : ''); + formData.append('skipNetworkIdleEvent', 'false'); + + return await callGotenberg('/forms/chromium/convert/html', formData); +}; diff --git a/packages/fyllut-backend/src/routers/api/index.js b/packages/fyllut-backend/src/routers/api/index.js index 39397335f..583ec7454 100644 --- a/packages/fyllut-backend/src/routers/api/index.js +++ b/packages/fyllut-backend/src/routers/api/index.js @@ -13,6 +13,7 @@ import exstream from './exstream'; import form from './form'; import forms from './forms'; import forsteside from './forsteside'; +import forstesideAndSoknad from './forsteside-soknad'; import globalTranslations from './global-translations.js'; import log from './log'; import mottaksadresser from './mottaksadresser.js'; @@ -36,6 +37,7 @@ apiRouter.get('/enhetsliste', enhetsliste.get); apiRouter.get('/forms', tryCatch(forms.get)); apiRouter.get('/forms/:formPath', tryCatch(form.get)); apiRouter.post('/foersteside', azureSkjemabyggingProxy, forsteside.post); +apiRouter.post('/foersteside-soknad', azureSkjemabyggingProxy, forstesideAndSoknad.post); apiRouter.get('/global-translations/:languageCode', tryCatch(globalTranslations.get)); apiRouter.get('/translations/:form', tryCatch(translations.get)); apiRouter.get('/mottaksadresser', tryCatch(mottaksadresser.get)); diff --git a/packages/shared-components/src/components/letter/download/LetterDownload.tsx b/packages/shared-components/src/components/letter/download/LetterDownload.tsx index adfa40565..4f70df5b1 100644 --- a/packages/shared-components/src/components/letter/download/LetterDownload.tsx +++ b/packages/shared-components/src/components/letter/download/LetterDownload.tsx @@ -48,9 +48,9 @@ const LetterDownload = ({ form, index, submission, enhetsListe, fyllutBaseURL, t language: currentLanguage, enhetNummer: selectedEnhetNummer, - version: 'v2', + version: 'v3', }} - actionUrl={`${fyllutBaseURL}/api/foersteside`} + actionUrl={`${fyllutBaseURL}/api/foersteside-soknad`} label={translate(TEXTS.grensesnitt.prepareLetterPage.downloadCoverPage)} onSubmit={(event) => { if (enhetsListe.length > 0 && !selectedEnhetNummer) { From f25f18cb07c10cb7d8403aee27f68a96627bc96c Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 5 Mar 2025 12:15:27 +0100 Subject: [PATCH 13/39] =?UTF-8?q?Oppdatering=20etter=20PR.=20Fjernet=20ubr?= =?UTF-8?q?ukt=20kode=20for=20=C3=A5=20generere=20PDF=20av=20s=C3=B8knad?= =?UTF-8?q?=20v.hj.a.=20Gotenberg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../routers/api/helpers/footer-template.html | 46 ------ .../routers/api/helpers/footerBuilder.test.ts | 28 ---- .../src/routers/api/helpers/footerBuilder.ts | 25 ---- .../src/routers/api/helpers/nav-logo.svg | 3 - .../api/helpers/prepareHtmlAndGeneratePdf.ts | 131 ------------------ 5 files changed, 233 deletions(-) delete mode 100644 packages/fyllut-backend/src/routers/api/helpers/footer-template.html delete mode 100644 packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts delete mode 100644 packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts delete mode 100644 packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg delete mode 100644 packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts diff --git a/packages/fyllut-backend/src/routers/api/helpers/footer-template.html b/packages/fyllut-backend/src/routers/api/helpers/footer-template.html deleted file mode 100644 index a19f3745e..000000000 --- a/packages/fyllut-backend/src/routers/api/helpers/footer-template.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -

- - diff --git a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts deleted file mode 100644 index 9094e47b2..000000000 --- a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { generateFooterHtml } from './footerBuilder'; - -const mockTranslate = (text: string) => text; - -describe('footerBuilder', () => { - describe('createFooter', () => { - const userId: string = '12345678901'; - const schemaVersion: string = '342u43590534mklgfd0i9'; - const skjemanummer: string = 'NAV 11-12.24B'; - const language: string = 'nb'; - - let footer: string; - - it('creates a footer html document with labels and the supplied data', () => { - footer = generateFooterHtml(userId, schemaVersion, skjemanummer, language, mockTranslate); - expect(footer).toContain(userId); - expect(footer).toContain(schemaVersion); - expect(footer).toContain(skjemanummer); - expect(footer).toContain('F.nr: 12345678901'); - expect(footer).toContain('Opprettet: '); - expect(footer).toContain('Skjemanummer: ' + skjemanummer + ''); - expect(footer).toContain('Versjon: ' + schemaVersion + ''); - expect(footer).toContain( - 'Side av ', - ); - }); - }); -}); diff --git a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts b/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts deleted file mode 100644 index 32477c84a..000000000 --- a/packages/fyllut-backend/src/routers/api/helpers/footerBuilder.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { TEXTS } from '@navikt/skjemadigitalisering-shared-domain'; -import { readFileSync } from 'fs'; -import path from 'path'; - -const filePath = path.join(process.cwd(), '/src/routers/api/helpers/footer-template.html'); - -export function generateFooterHtml(userId, schemaVersion, skjemanummer, language, translate: (text: string) => string) { - let footerHtml = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); - - const creationDate = new Date().toLocaleString(); - - footerHtml = footerHtml - .replace('{{USER_ID}}', userId) - .replace('{{CREATION_DATE}}', creationDate) - .replace('{{SCHEMA_VERSION}}', schemaVersion) - .replace('{{SCHEMA_NUMBER}}', skjemanummer) - .replace('{{userIdLabel}}', translate(TEXTS.statiske.footer.userIdLabel)) - .replace('{{createdLabel}}', translate(TEXTS.statiske.footer.createdDatelabel)) - .replace('{{schemaNumberLabel}}', translate(TEXTS.statiske.footer.schemaNumberLabel)) - .replace('{{versionLabel}}', translate(TEXTS.statiske.footer.versionLabel)) - .replace('{{pageLabel}}', translate(TEXTS.statiske.footer.pageLabel)) - .replace('{{ofLabel}}', translate(TEXTS.statiske.footer.ofLabel)); - - return footerHtml; -} diff --git a/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg b/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg deleted file mode 100644 index 1bf806853..000000000 --- a/packages/fyllut-backend/src/routers/api/helpers/nav-logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts b/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts deleted file mode 100644 index dc1e761c9..000000000 --- a/packages/fyllut-backend/src/routers/api/helpers/prepareHtmlAndGeneratePdf.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { - I18nTranslationMap, - I18nTranslationReplacements, - NavFormType, - Submission, - translationUtils, -} from '@navikt/skjemadigitalisering-shared-domain'; -import FormData from 'form-data'; -//import { readFileSync } from 'fs'; -//import path from 'path'; -import { config } from '../../../config/config'; -import { logger } from '../../../logger'; -import { appMetrics } from '../../../services'; -import { callGotenberg } from './gotenbergService'; -//import { synchronousResponseToError } from '../../../utils/errorHandling'; -//import fetch from 'node-fetch'; -import { generateFooterHtml } from './footerBuilder'; -import { createHtmlFromSubmission } from './htmlBuilder'; - -export const createPdfAsByteArray = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - return await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); -}; - -export const buildHtmlAndCreatePdf = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - const pdf = await buildHtmlAndConvertToPdf(accessToken, form, submission, submissionMethod, translations, language); - return Buffer.from(new Uint8Array(pdf)); -}; - -/* Feiler ved deploy: Error: ENOENT: no such file or directory, open '/home/runner/work/skjemabygging-formio/skjemabygging-formio/packages/fyllut-backend/dist/src/routers/api/helpers/nav-icon.svg' -const filePath = path.join(process.cwd(), '/src/routers/api/helpers/nav-icon.svg'); -const navIcon = readFileSync(filePath, { encoding: 'utf-8', flag: 'r' }); -*/ -const navIcon = undefined; - -const buildHtmlAndConvertToPdf = async ( - accessToken: string, - form: NavFormType, - submission: Submission, - submissionMethod: string, - translations: I18nTranslationMap, - language: string, -) => { - // Build Html from submission - const translate = (text: string, textReplacements?: I18nTranslationReplacements) => - translationUtils.translateWithTextReplacements({ - translations, - originalText: text, - params: textReplacements, - currentLanguage: language, - }); - - const html = createHtmlFromSubmission(form, submission, submissionMethod, translate, language); - if (!html || Object.keys(html).length === 0) { - throw Error('Missing HTML for generating PDF.'); - } - - // Build Footer - const { fodselsnummerDNummerSoker } = submission.data; - const footerHtml = generateFooterHtml( - (fodselsnummerDNummerSoker as string | undefined) || '—', - config.gitVersion, - form.properties.skjemanummer, - language, - translate, - ); - - appMetrics.exstreamPdfRequestsCounter.inc(); - let errorOccurred = false; - const stopMetricRequestDuration = appMetrics.outgoingRequestDuration.startTimer({ - service: 'gotenberg', - method: 'createPdfFromGotenberg', - }); - const assets = {}; - const options = { pdfa: true, pdfua: true }; - try { - return await createPdfFromHtml(html, footerHtml, assets, options); - } catch (e) { - errorOccurred = true; - appMetrics.exstreamPdfFailuresCounter.inc(); - throw e; - } finally { - const durationSeconds = stopMetricRequestDuration({ error: String(errorOccurred) }); - logger.info(`Request to gotenberg pdf service completed after ${durationSeconds} seconds`, { - error: errorOccurred, - durationSeconds, - }); - } -}; - -// Sette opp formdata med html og footer for å generere PDF v.hj.a Gotenberg. -const createPdfFromHtml = async ( - html: string, - footer: string, - assets: { [filename: string]: string }, - options: { pdfa: boolean; pdfua: boolean }, -): Promise => { - const formData = new FormData(); - - // Add the main HTML content - formData.append('files', Buffer.from(html), 'index.html'); - formData.append('files', Buffer.from(footer), 'footer.html'); - if (navIcon != null) { - formData.append('files', Buffer.from(navIcon), 'nav-logo.svg'); - } - - // Add optional assets like logos, footers, etc. - for (const [filename, content] of Object.entries(assets)) { - formData.append('files', Buffer.from(content), filename); - } - - // Add Gotenberg-specific options - formData.append('pdfa', options.pdfa ? 'PDF/A-2b' : ''); - formData.append('pdfua', options.pdfua ? 'true' : ''); - formData.append('skipNetworkIdleEvent', 'false'); - - return await callGotenberg('/forms/chromium/convert/html', formData); -}; From 720a89e132307d472793d6947d3bd3644b9a55ad Mon Sep 17 00:00:00 2001 From: nilsarne Date: Wed, 12 Mar 2025 15:48:45 +0100 Subject: [PATCH 14/39] =?UTF-8?q?Lagt=20til=20h=C3=A5ndtering=20av=20spr?= =?UTF-8?q?=C3=A5k=20ved=20kall=20til=20Gotenberg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nais/fyllut/config.yaml | 2 ++ .nais/fyllut/dev-delingslenke.yaml | 1 + .nais/fyllut/dev.yaml | 1 + .nais/fyllut/preprod-alt.yaml | 1 + .nais/fyllut/preprod.yaml | 1 + .nais/fyllut/prod.yaml | 1 + packages/fyllut-backend/src/config/config.ts | 2 ++ packages/fyllut-backend/src/config/types.d.ts | 1 + .../src/routers/api/helpers/gotenbergService.ts | 11 ++++++----- 9 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.nais/fyllut/config.yaml b/.nais/fyllut/config.yaml index 1d0f320e0..d678b4a79 100644 --- a/.nais/fyllut/config.yaml +++ b/.nais/fyllut/config.yaml @@ -89,6 +89,8 @@ spec: value: {{skjemabygging-proxy-client-id}} - name: GOTENBERG_URL value: {{gotenberg-url}} + - name: GOTENBERG_URL_EN + value: {{gotenberg-url-en}} - name: SEND_INN_TOKEN_X_CLIENT_ID value: {{send-inn-token-x-client-id}} - name: SEND_INN_HOST diff --git a/.nais/fyllut/dev-delingslenke.yaml b/.nais/fyllut/dev-delingslenke.yaml index 56e673198..99534ac1e 100644 --- a/.nais/fyllut/dev-delingslenke.yaml +++ b/.nais/fyllut/dev-delingslenke.yaml @@ -9,6 +9,7 @@ dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn +gotenberg-url-en: http://upload-convert-to-pdf-en.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad forms-api-url: https://forms-api.nav.no diff --git a/.nais/fyllut/dev.yaml b/.nais/fyllut/dev.yaml index 5ebb0e45c..60b644fe0 100644 --- a/.nais/fyllut/dev.yaml +++ b/.nais/fyllut/dev.yaml @@ -10,6 +10,7 @@ dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn +gotenberg-url-en: http://upload-convert-to-pdf-en.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/.nais/fyllut/preprod-alt.yaml b/.nais/fyllut/preprod-alt.yaml index cc00f61f6..04d7f1136 100644 --- a/.nais/fyllut/preprod-alt.yaml +++ b/.nais/fyllut/preprod-alt.yaml @@ -10,6 +10,7 @@ dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn +gotenberg-url-en: http://upload-convert-to-pdf-en.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/.nais/fyllut/preprod.yaml b/.nais/fyllut/preprod.yaml index abadc3fe2..39d465a70 100644 --- a/.nais/fyllut/preprod.yaml +++ b/.nais/fyllut/preprod.yaml @@ -10,6 +10,7 @@ dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 95170319-b4d7-4190-8271-118ed19bafbf skjemabygging-proxy-url: https://skjemabygging-proxy.dev-fss-pub.nais.io gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn +gotenberg-url-en: http://upload-convert-to-pdf-en.fyllut-sendinn send-inn-token-x-client-id: dev-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/.nais/fyllut/prod.yaml b/.nais/fyllut/prod.yaml index 8432b813b..c635b34a7 100644 --- a/.nais/fyllut/prod.yaml +++ b/.nais/fyllut/prod.yaml @@ -9,6 +9,7 @@ dekorator-url: https://www.nav.no/dekoratoren?simple=true skjemabygging-proxy-client-id: 031863f2-9881-44af-ace5-6b5ab52afeb1 skjemabygging-proxy-url: https://skjemabygging-proxy.prod-fss-pub.nais.io gotenberg-url: http://upload-convert-to-pdf.fyllut-sendinn +gotenberg-url-en: http://upload-convert-to-pdf-en.fyllut-sendinn send-inn-token-x-client-id: prod-gcp:team-soknad:innsending-api send-inn-host: http://innsending-api.team-soknad kodeverk: diff --git a/packages/fyllut-backend/src/config/config.ts b/packages/fyllut-backend/src/config/config.ts index c44a84558..f0a92cb4a 100644 --- a/packages/fyllut-backend/src/config/config.ts +++ b/packages/fyllut-backend/src/config/config.ts @@ -67,6 +67,7 @@ const localDevelopmentConfig: DefaultConfig = { decoratorUrl: 'https://www.nav.no/dekoratoren?simple=true', skjemabyggingProxyUrl: process.env.SKJEMABYGGING_PROXY_URL || 'https://skjemabygging-proxy.dev-fss-pub.nais.io', gotenbergUrl: process.env.GOTENBERG_URL || 'https://convert-to-pdf.intern.dev.nav.no', + gotenbergUrlEn: process.env.GOTENBERG_URL_EN || 'https://convert-to-pdf-en.intern.dev.nav.no', skjemabyggingProxyClientId: '95170319-b4d7-4190-8271-118ed19bafbf', azureOpenidTokenEndpoint: process.env.AZURE_OPENID_CONFIG_TOKEN_ENDPOINT || @@ -115,6 +116,7 @@ const defaultConfig: DefaultConfig = { skjemabyggingProxyUrl: process.env.SKJEMABYGGING_PROXY_URL!, skjemabyggingProxyClientId: process.env.SKJEMABYGGING_PROXY_CLIENT_ID!, gotenbergUrl: process.env.GOTENBERG_URL!, + gotenbergUrlEn: process.env.GOTENBERG_URL_EN!, azureOpenidTokenEndpoint: process.env.AZURE_OPENID_CONFIG_TOKEN_ENDPOINT!, clientId: process.env.AZURE_APP_CLIENT_ID!, skjemaDir: process.env.SKJEMA_DIR!, diff --git a/packages/fyllut-backend/src/config/types.d.ts b/packages/fyllut-backend/src/config/types.d.ts index 64114ae17..fdaf083ee 100644 --- a/packages/fyllut-backend/src/config/types.d.ts +++ b/packages/fyllut-backend/src/config/types.d.ts @@ -40,6 +40,7 @@ export type DefaultConfig = { skjemabyggingProxyUrl: string; skjemabyggingProxyClientId: string; gotenbergUrl: string; + gotenbergUrlEn: string; azureOpenidTokenEndpoint: string; clientId: string; skjemaDir?: string; diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts index aed3e73c1..186a24c9e 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts @@ -5,7 +5,7 @@ import { logger } from '../../../logger'; import { synchronousResponseToError } from '../../../utils/errorHandling'; import fetchWithRetry from '../../../utils/fetchWithRetry'; -const { gotenbergUrl } = config; +const { gotenbergUrl, gotenbergUrlEn } = config; // Sette opp formdata til å merge en liste av PDFer export const mergeFiles = async ( @@ -42,7 +42,7 @@ export const mergeFiles = async ( // Hvordan sette språk? En engelsk og en norsk Gotenberg installasjon? logger.info(`Skal kalle Gotenberg for å merge filer`); - return await callGotenberg('/forms/pdfengines/merge', formData); + return await callGotenberg(language, '/forms/pdfengines/merge', formData); }; const formatPDFDate = (date: Date) => { @@ -50,12 +50,13 @@ const formatPDFDate = (date: Date) => { }; // Generisk metode for kall til mot Gotenberg gitt rute og preparert FormData -export const callGotenberg = async (route: string, formData: FormData): Promise => { - console.log(`Calling Gotenberg with url = ${gotenbergUrl}${route}`); +export const callGotenberg = async (language: string, route: string, formData: FormData): Promise => { + const url = language.toLowerCase().startsWith('en') ? gotenbergUrlEn : gotenbergUrl; + console.log(`Calling Gotenberg with url = ${url}/${route}`); try { // Send the request to Gotenberg - const gotenbergResponse = await fetchWithRetry(`${gotenbergUrl}${route}`, { + const gotenbergResponse = await fetchWithRetry(`${url}${route}`, { retry: 1, headers: { accept: 'application/pdf, text/plain', From c57cb0276884017a2135a4ee29d27ecc6f08756b Mon Sep 17 00:00:00 2001 From: Lars Olav Torvik Date: Wed, 12 Mar 2025 16:14:28 +0100 Subject: [PATCH 15/39] Change download pdf to regular fetch request with spinner Refactor download pdf backend --- .../bygger/src/Forms/edit/EditFormSidebar.tsx | 3 +- .../Forms/settings/FormSettingsSidebar.tsx | 3 +- .../bygger/src/import/ImportFormsPage.tsx | 3 +- packages/fyllut-backend/src/app.ts | 2 +- .../src/routers/api/documents/documents.ts | 57 ++++++ .../src/routers/api/documents/index.ts | 11 ++ .../src/routers/api/forsteside-soknad.ts | 129 -------------- .../fyllut-backend/src/routers/api/index.js | 4 +- .../services/documents/applicationService.ts | 162 ++++++++++++++++++ .../documents/documentsService.test.ts} | 17 +- .../services/documents/documentsService.ts | 87 ++++++++++ .../services/documents/frontPageService.ts | 89 ++++++++++ .../documents}/gotenbergService.ts | 8 +- .../documents/testdata}/test-forsteside.pdf | Bin .../documents/testdata}/test-merged.pdf | Bin .../documents/testdata}/test-skjema.pdf | Bin .../documents/testdata}/test.pdf | Bin .../components/button}/ButtonWithSpinner.tsx | 13 +- .../button/DownloadApplicationButton.tsx | 84 +++++++++ .../components/button/DownloadPdfButton.tsx | 58 +++++++ .../button/download-pdf/DownloadPdfButton.tsx | 34 ---- .../letter/download/LetterDownload.tsx | 37 ++-- .../components/select/enhet/EnhetSelector.tsx | 6 +- packages/shared-components/src/index.ts | 2 + .../PrepareIngenInnsendingPage.tsx | 26 ++- .../prepare-letter/PrepareLetterPage.tsx | 4 +- .../src/forsteside/forstesideUtils.ts | 10 +- .../src/texts/statiskeTekster.js | 2 +- yarn.lock | 2 +- 29 files changed, 617 insertions(+), 236 deletions(-) create mode 100644 packages/fyllut-backend/src/routers/api/documents/documents.ts create mode 100644 packages/fyllut-backend/src/routers/api/documents/index.ts delete mode 100644 packages/fyllut-backend/src/routers/api/forsteside-soknad.ts create mode 100644 packages/fyllut-backend/src/services/documents/applicationService.ts rename packages/fyllut-backend/src/{routers/api/forsteside-soknad.test.ts => services/documents/documentsService.test.ts} (83%) create mode 100644 packages/fyllut-backend/src/services/documents/documentsService.ts create mode 100644 packages/fyllut-backend/src/services/documents/frontPageService.ts rename packages/fyllut-backend/src/{routers/api/helpers => services/documents}/gotenbergService.ts (92%) rename packages/fyllut-backend/src/{routers/api => services/documents/testdata}/test-forsteside.pdf (100%) rename packages/fyllut-backend/src/{routers/api => services/documents/testdata}/test-merged.pdf (100%) rename packages/fyllut-backend/src/{routers/api => services/documents/testdata}/test-skjema.pdf (100%) rename packages/fyllut-backend/src/{routers/api => services/documents/testdata}/test.pdf (100%) rename packages/{bygger/src/components => shared-components/src/components/button}/ButtonWithSpinner.tsx (80%) create mode 100644 packages/shared-components/src/components/button/DownloadApplicationButton.tsx create mode 100644 packages/shared-components/src/components/button/DownloadPdfButton.tsx delete mode 100644 packages/shared-components/src/components/button/download-pdf/DownloadPdfButton.tsx diff --git a/packages/bygger/src/Forms/edit/EditFormSidebar.tsx b/packages/bygger/src/Forms/edit/EditFormSidebar.tsx index 9b1dee956..886a90180 100644 --- a/packages/bygger/src/Forms/edit/EditFormSidebar.tsx +++ b/packages/bygger/src/Forms/edit/EditFormSidebar.tsx @@ -1,8 +1,7 @@ import { PadlockLockedIcon } from '@navikt/aksel-icons'; import { Button, VStack } from '@navikt/ds-react'; -import { useModal } from '@navikt/skjemadigitalisering-shared-components'; +import { ButtonWithSpinner, useModal } from '@navikt/skjemadigitalisering-shared-components'; import { Form } from '@navikt/skjemadigitalisering-shared-domain'; -import ButtonWithSpinner from '../../components/ButtonWithSpinner'; import SidebarLayout from '../../components/layout/SidebarLayout'; import UserFeedback from '../../components/UserFeedback'; import { useForm } from '../../context/old_form/FormContext'; diff --git a/packages/bygger/src/Forms/settings/FormSettingsSidebar.tsx b/packages/bygger/src/Forms/settings/FormSettingsSidebar.tsx index 240356e07..1b48d41e7 100644 --- a/packages/bygger/src/Forms/settings/FormSettingsSidebar.tsx +++ b/packages/bygger/src/Forms/settings/FormSettingsSidebar.tsx @@ -1,9 +1,8 @@ import { PadlockLockedIcon } from '@navikt/aksel-icons'; import { Button, VStack } from '@navikt/ds-react'; -import { useAppConfig, useModal } from '@navikt/skjemadigitalisering-shared-components'; +import { ButtonWithSpinner, useAppConfig, useModal } from '@navikt/skjemadigitalisering-shared-components'; import { Form } from '@navikt/skjemadigitalisering-shared-domain'; -import ButtonWithSpinner from '../../components/ButtonWithSpinner'; import SidebarLayout from '../../components/layout/SidebarLayout'; import UserFeedback from '../../components/UserFeedback'; import { useForm } from '../../context/old_form/FormContext'; diff --git a/packages/bygger/src/import/ImportFormsPage.tsx b/packages/bygger/src/import/ImportFormsPage.tsx index 8656b447e..b816166be 100644 --- a/packages/bygger/src/import/ImportFormsPage.tsx +++ b/packages/bygger/src/import/ImportFormsPage.tsx @@ -1,10 +1,9 @@ import { Skeleton, Table, UNSAFE_Combobox } from '@navikt/ds-react'; import { ComboboxOption } from '@navikt/ds-react/esm/form/combobox/types'; -import { makeStyles } from '@navikt/skjemadigitalisering-shared-components'; +import { ButtonWithSpinner, makeStyles } from '@navikt/skjemadigitalisering-shared-components'; import { Form } from '@navikt/skjemadigitalisering-shared-domain'; import { useCallback, useEffect, useState } from 'react'; import { AppLayout } from '../components/AppLayout'; -import ButtonWithSpinner from '../components/ButtonWithSpinner'; import RowLayout from '../components/layout/RowLayout'; import Title from '../components/layout/Title'; import TitleRowLayout from '../components/layout/TitleRowLayout'; diff --git a/packages/fyllut-backend/src/app.ts b/packages/fyllut-backend/src/app.ts index 3c03fb1df..8cee54378 100644 --- a/packages/fyllut-backend/src/app.ts +++ b/packages/fyllut-backend/src/app.ts @@ -11,7 +11,7 @@ import globalErrorHandler from './middleware/globalErrorHandler.js'; import httpRequestLogger from './middleware/httpRequestLogger.js'; import { stripTrailingSlash } from './middleware/stripTrailingSlash'; import renderIndex from './renderIndex'; -import apiRouter from './routers/api/index.js'; +import apiRouter from './routers/api/index'; import internalRouter from './routers/internal/index.js'; import { setupDevServer } from './setup-dev-server'; diff --git a/packages/fyllut-backend/src/routers/api/documents/documents.ts b/packages/fyllut-backend/src/routers/api/documents/documents.ts new file mode 100644 index 000000000..fe91930f8 --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/documents/documents.ts @@ -0,0 +1,57 @@ +import { RequestHandler } from 'express'; +import documentsService from '../../../services/documents/documentsService'; +import { htmlResponseError } from '../../../utils/errorHandling'; +import { logErrorWithStacktrace } from '../../../utils/errors'; + +const frontPage: RequestHandler = async (req, res, next) => { + try { + const { form, submission, language, enhetNummer } = req.body; + const formParsed = JSON.parse(form); + const submissionParsed = JSON.parse(submission); + + const fileBuffer = await documentsService.frontPage({ + form: formParsed, + submission: submissionParsed, + language, + unitNumber: enhetNummer, + accessToken: req.headers.AzureAccessToken as string, + }); + res.contentType('application/pdf'); + res.setHeader('Content-Disposition', `inline; filename=${encodeURIComponent(`søknad-${formParsed.path}.pdf`)}`); + res.send(fileBuffer); + } catch (e) { + logErrorWithStacktrace(e as Error); + next(htmlResponseError('Generering av førstesideark eller soknads PDF feilet')); + } +}; + +const frontPageAndApplication: RequestHandler = async (req, res, next) => { + try { + const { form, submission, language, enhetNummer, submissionMethod, translations } = req.body; + const formParsed = JSON.parse(form); + const submissionParsed = JSON.parse(submission); + + const fileBuffer = await documentsService.frontPageAndApplication({ + form: formParsed, + submission: submissionParsed, + language, + unitNumber: enhetNummer, + accessToken: req.headers.AzureAccessToken as string, + submissionMethod, + translations, + }); + res.contentType('application/pdf'); + res.setHeader('Content-Disposition', `inline; filename=${encodeURIComponent(`søknad-${formParsed.path}.pdf`)}`); + res.send(fileBuffer); + } catch (e) { + logErrorWithStacktrace(e as Error); + next(htmlResponseError('Generering av førstesideark eller soknads PDF feilet')); + } +}; + +const documents = { + frontPage, + frontPageAndApplication, +}; + +export default documents; diff --git a/packages/fyllut-backend/src/routers/api/documents/index.ts b/packages/fyllut-backend/src/routers/api/documents/index.ts new file mode 100644 index 000000000..1ea222cab --- /dev/null +++ b/packages/fyllut-backend/src/routers/api/documents/index.ts @@ -0,0 +1,11 @@ +import express from 'express'; +import { initApiConfig } from '../api-helper'; +import documents from './documents'; + +const documentsRouter = express.Router(); +const { azureSkjemabyggingProxy } = initApiConfig(); + +documentsRouter.post('/front-page', azureSkjemabyggingProxy, documents.frontPage); +documentsRouter.post('/front-page-and-application', azureSkjemabyggingProxy, documents.frontPageAndApplication); + +export default documentsRouter; diff --git a/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts b/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts deleted file mode 100644 index 14d3a2679..000000000 --- a/packages/fyllut-backend/src/routers/api/forsteside-soknad.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { - FormPropertiesType, - ForstesideRequestBody, - forstesideUtils, - Recipient, -} from '@navikt/skjemadigitalisering-shared-domain'; -import { NextFunction, Request, Response } from 'express'; -import correlator from 'express-correlation-id'; -import fetch, { BodyInit, HeadersInit } from 'node-fetch'; -import { config } from '../../config/config'; -import { logger } from '../../logger'; -import { base64Decode } from '../../utils/base64'; -import { htmlResponseError, responseToError } from '../../utils/errorHandling.js'; -import { logErrorWithStacktrace } from '../../utils/errors'; -import { getPdf } from './exstream'; -import { mergeFiles } from './helpers/gotenbergService'; -//import { writeFileSync } from "node:fs"; -//import path from "path"; - -const { skjemabyggingProxyUrl, formsApiUrl } = config; -//const filePath = path.join(process.cwd(), '/src/routers/api/merged.pdf'); - -const forstesideAndSoknad = { - post: async (req: Request, res: Response, next: NextFunction) => { - try { - const { form, submission, language, enhetNummer } = req.body; - const formParsed = JSON.parse(form); - const submissionParsed = JSON.parse(submission); - const submissionDataParsed = submissionParsed.data; - const recipients = await getRecipients(formParsed?.properties); - - const forstesideBody = forstesideUtils.genererFoerstesideData( - formParsed, - submissionDataParsed, - language, - recipients, - enhetNummer, - ); - - const forstesideResponse: any = await forstesideRequest(req, JSON.stringify(forstesideBody)); - logForsteside(req.body, forstesideResponse); - - const forstesidePdf = base64Decode(forstesideResponse.foersteside); - - const soknadResponse: any = await getPdf(req); - - const soknadPdf = base64Decode(soknadResponse.data); - - if (soknadPdf === undefined || forstesidePdf === undefined) { - throw htmlResponseError('Generering av førstesideark eller søknads PDF feilet'); - } - - const documents = [forstesidePdf, soknadPdf]; - - const mergedFile = await mergeFiles( - forstesideBody.navSkjemaId, - forstesideBody.overskriftstittel, - forstesideBody.spraakkode, - documents, - { pdfa: true, pdfua: true }, - ); - - //For PDF inspection - /* - writeFileSync(filePath, Buffer.from(mergedFile), { - flag: "w" - }); - */ - - const fileName = encodeURIComponent(`Førstesideark_${formParsed.path}.pdf`); - - res.contentType('application/pdf'); - res.setHeader('Content-Disposition', `inline; filename=${fileName}`); - - res.send(Buffer.from(new Uint8Array(mergedFile))); - logger.info(`3. Returnert mergedFile`); - } catch (e) { - logErrorWithStacktrace(e as Error); - const forstesideError = htmlResponseError('Generering av førstesideark eller soknads PDF feilet'); - next(forstesideError); - } - }, -}; - -const getRecipients = async (formProperties: FormPropertiesType): Promise => { - if (formProperties.mottaksadresseId) { - const recipientsResponse = await fetch(`${formsApiUrl}/v1/recipients`, { - method: 'GET', - headers: { - 'x-correlation-id': correlator.getId() as string, - }, - }); - if (!recipientsResponse.ok) { - throw new Error('Failed to fetch recipients'); - } - - return (await recipientsResponse.json()) as Recipient[] | undefined; - } -}; - -const forstesideRequest = async (req: Request, body?: BodyInit) => { - const response = await fetch(`${skjemabyggingProxyUrl}/foersteside`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${req.headers.AzureAccessToken}`, - 'x-correlation-id': correlator.getId(), - } as HeadersInit, - body, - }); - - if (response.ok) { - return response.json(); - } - - throw await responseToError(response, 'Feil ved generering av førsteside', true); -}; - -const logForsteside = (forsteside: ForstesideRequestBody, response: any) => { - logger.info('Download frontpage', { - loepenummer: response.loepenummer, - navSkjemaId: forsteside.navSkjemaId, - tema: forsteside.tema, - enhetsnummer: forsteside.enhetsnummer, - spraakkode: forsteside.spraakkode, - }); -}; - -export default forstesideAndSoknad; diff --git a/packages/fyllut-backend/src/routers/api/index.js b/packages/fyllut-backend/src/routers/api/index.js index 583ec7454..757f8cd68 100644 --- a/packages/fyllut-backend/src/routers/api/index.js +++ b/packages/fyllut-backend/src/routers/api/index.js @@ -8,12 +8,12 @@ import activeTasks from './active-tasks'; import { initApiConfig } from './api-helper'; import commonCodes from './common-codes'; import config from './config'; +import documentsRouter from './documents'; import enhetsliste from './enhetsliste.js'; import exstream from './exstream'; import form from './form'; import forms from './forms'; import forsteside from './forsteside'; -import forstesideAndSoknad from './forsteside-soknad'; import globalTranslations from './global-translations.js'; import log from './log'; import mottaksadresser from './mottaksadresser.js'; @@ -37,7 +37,7 @@ apiRouter.get('/enhetsliste', enhetsliste.get); apiRouter.get('/forms', tryCatch(forms.get)); apiRouter.get('/forms/:formPath', tryCatch(form.get)); apiRouter.post('/foersteside', azureSkjemabyggingProxy, forsteside.post); -apiRouter.post('/foersteside-soknad', azureSkjemabyggingProxy, forstesideAndSoknad.post); +apiRouter.use('/documents', documentsRouter); apiRouter.get('/global-translations/:languageCode', tryCatch(globalTranslations.get)); apiRouter.get('/translations/:form', tryCatch(translations.get)); apiRouter.get('/mottaksadresser', tryCatch(mottaksadresser.get)); diff --git a/packages/fyllut-backend/src/services/documents/applicationService.ts b/packages/fyllut-backend/src/services/documents/applicationService.ts new file mode 100644 index 000000000..f868b944d --- /dev/null +++ b/packages/fyllut-backend/src/services/documents/applicationService.ts @@ -0,0 +1,162 @@ +import { + I18nTranslationMap, + I18nTranslationReplacements, + localizationUtils, + NavFormType, + Submission, + translationUtils, + yourInformationUtils, +} from '@navikt/skjemadigitalisering-shared-domain'; +import correlator from 'express-correlation-id'; +import { config } from '../../config/config'; +import { logger } from '../../logger'; +import { createHtmlFromSubmission } from '../../routers/api/helpers/htmlBuilder'; +import { base64Decode, base64Encode } from '../../utils/base64'; +import { responseToError, synchronousResponseToError } from '../../utils/errorHandling'; +import fetchWithRetry, { HeadersInit } from '../../utils/fetchWithRetry'; +import { appMetrics } from '../index'; + +const { skjemabyggingProxyUrl, gitVersion } = config; + +const createPdfAsByteArray = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + const pdf = await createPdf(accessToken, form, submission, submissionMethod, translations, language); + return Array.from(base64Decode(pdf.data) ?? []); +}; + +const createPdf = async ( + accessToken: string, + form: NavFormType, + submission: Submission, + submissionMethod: string, + translations: I18nTranslationMap, + language: string, +) => { + if (!['nb-NO', 'nn-NO', 'en'].includes(language)) { + logger.warn(`Language code "${language}" is not supported. Language code will be defaulted to "nb".`); + } + + language = localizationUtils.getLanguageCodeAsIso639_1(language); + + const translate = (text: string, textReplacements?: I18nTranslationReplacements) => + translationUtils.translateWithTextReplacements({ + translations, + originalText: text, + params: textReplacements, + currentLanguage: language, + }); + + const html = createHtmlFromSubmission(form, submission, submissionMethod, translate, language); + if (!html || Object.keys(html).length === 0) { + throw Error('Missing HTML for generating PDF.'); + } + + const yourInformation = yourInformationUtils.getYourInformation(form, submission.data); + + let identityNumber: string; + if (yourInformation?.identitet?.identitetsnummer) { + identityNumber = yourInformation.identitet.identitetsnummer; + } else if (submission.data.fodselsnummerDNummerSoker) { + // This is the old format of the object, which is still used in some forms. + identityNumber = submission.data.fodselsnummerDNummerSoker as string; + } else { + identityNumber = '—'; + } + + appMetrics.exstreamPdfRequestsCounter.inc(); + let errorOccurred = false; + const stopMetricRequestDuration = appMetrics.outgoingRequestDuration.startTimer({ + service: 'exstream', + method: 'createPdf', + }); + try { + return await createPdfFromHtml( + accessToken, + translate(form.title), + form.properties.skjemanummer, + language, + html, + identityNumber, + ); + } catch (e) { + errorOccurred = true; + appMetrics.exstreamPdfFailuresCounter.inc(); + throw e; + } finally { + const durationSeconds = stopMetricRequestDuration({ error: String(errorOccurred) }); + logger.info(`Request to exstream pdf service completed after ${durationSeconds} seconds`, { + error: errorOccurred, + durationSeconds, + }); + } +}; + +const createPdfFromHtml = async ( + azureAccessToken: string, + title: string, + skjemanummer: string, + language: string, + html: string, + pid: string, +) => { + const response = await fetchWithRetry(`${skjemabyggingProxyUrl}/exstream`, { + retry: 3, + headers: { + Authorization: `Bearer ${azureAccessToken}`, + 'x-correlation-id': correlator.getId(), + 'Content-Type': 'application/json', + } as HeadersInit, + method: 'POST', + body: JSON.stringify({ + content: { + contentType: 'application/json', + data: base64Encode( + JSON.stringify({ + dokumentTittel: title, + spraakkode: language, + blankettnr: skjemanummer, + brukersFnr: pid, + skjemaversjon: gitVersion, + html: base64Encode(html), + }), + ), + async: 'true', + }, + RETURNFORMAT: 'PDF', + RETURNDATA: 'TRUE', + }), + }); + + if (response.ok) { + const json: any = await response.json(); + if (!json.data?.result?.[0]?.content) { + if (json.data?.id) { + throw synchronousResponseToError( + `Feil i responsdata fra Exstream på id "${json.data?.id}"`, + json, + response.status, + response.url, + true, + ); + } else { + throw synchronousResponseToError('Feil i responsdata fra Exstream', json, response.status, response.url, true); + } + } + return json.data.result[0].content; + } + + throw await responseToError(response, 'Feil ved generering av PDF hos Exstream', true); +}; + +const applicationService = { + createPdf, + createPdfAsByteArray, +}; + +export default applicationService; diff --git a/packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts b/packages/fyllut-backend/src/services/documents/documentsService.test.ts similarity index 83% rename from packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts rename to packages/fyllut-backend/src/services/documents/documentsService.test.ts index 0dca32c26..1c286d6c0 100644 --- a/packages/fyllut-backend/src/routers/api/forsteside-soknad.test.ts +++ b/packages/fyllut-backend/src/services/documents/documentsService.test.ts @@ -4,8 +4,9 @@ import nock from 'nock'; import path from 'path'; import { config } from '../../config/config'; import { mockNext, mockRequest, mockResponse } from '../../test/requestTestHelpers'; -import forstesideAndSoknad from './forsteside-soknad'; -import * as mottaksadresser from './mottaksadresser'; + +import documents from '../../routers/api/documents/documents'; +import * as mottaksadresser from '../../routers/api/mottaksadresser'; const { skjemabyggingProxyUrl, formsApiUrl } = config; @@ -34,11 +35,11 @@ const addresses = [ ]; const formTitle = 'testskjema'; -const filePathForsteside = path.join(process.cwd(), '/src/routers/api/test-forsteside.pdf'); -const filePathSoknad = path.join(process.cwd(), '/src/routers/api/test-skjema.pdf'); -const filePathMerged = path.join(process.cwd(), '/src/routers/api/test-merged.pdf'); +const filePathForsteside = path.join(process.cwd(), '/src/services/documents/testdata/test-forsteside.pdf'); +const filePathSoknad = path.join(process.cwd(), '/src/services/documents/testdata/test-skjema.pdf'); +const filePathMerged = path.join(process.cwd(), '/src/services/documents/testdata/test-merged.pdf'); -describe('[endpoint] forsteside', () => { +describe('[endpoint] documents', () => { beforeAll(() => { vi.spyOn(mottaksadresser, 'loadMottaksadresser').mockImplementation(async () => addresses); vi.spyOn(forstesideUtils, 'genererFoerstesideData').mockImplementation( @@ -54,7 +55,7 @@ describe('[endpoint] forsteside', () => { ); }); - it('Create front page', async () => { + it('Create front page and application', async () => { const forstesidePdf = readFileSync(filePathForsteside); const soknadPdf = readFileSync(filePathSoknad); const mergedPdf = readFileSync(filePathMerged); @@ -92,7 +93,7 @@ describe('[endpoint] forsteside', () => { }, }); - await forstesideAndSoknad.post(req, mockResponse(), mockNext()); + await documents.frontPageAndApplication(req, mockResponse(), mockNext()); expect(recipientsMock.isDone()).toBe(true); expect(generateFileMock.isDone()).toBe(true); diff --git a/packages/fyllut-backend/src/services/documents/documentsService.ts b/packages/fyllut-backend/src/services/documents/documentsService.ts new file mode 100644 index 000000000..85276f7a1 --- /dev/null +++ b/packages/fyllut-backend/src/services/documents/documentsService.ts @@ -0,0 +1,87 @@ +import { I18nTranslationMap, NavFormType, Submission } from '@navikt/skjemadigitalisering-shared-domain'; +import { base64Decode } from '../../utils/base64'; +import { htmlResponseError } from '../../utils/errorHandling'; +import applicationService from './applicationService'; +import frontPageService from './frontPageService'; +import { mergeFiles } from './gotenbergService'; + +interface FrontPageProps { + accessToken: string; + form: NavFormType; + submission: Submission; + language: string; + unitNumber: string; +} + +const frontPage = async (props: FrontPageProps) => { + const { accessToken, form, submission, language, unitNumber } = props; + + const frontPageResponse: any = frontPageService.createPdf({ + accessToken, + form, + submission, + language, + unitNumber, + }); + + const frontPagePdf = base64Decode(frontPageResponse.foersteside); + + if (frontPagePdf === undefined) { + throw htmlResponseError('Generering av førstesideark feilet'); + } + + return Buffer.from(new Uint8Array(frontPagePdf)); +}; + +interface FrontPageAndApplicationProps extends FrontPageProps { + translations: I18nTranslationMap; + submissionMethod: string; +} + +const frontPageAndApplication = async (props: FrontPageAndApplicationProps) => { + const { accessToken, form, submission, language, unitNumber, translations, submissionMethod } = props; + + const frontPageResponse: any = await frontPageService.createPdf({ + accessToken, + form, + submission, + language, + unitNumber, + }); + + const frontPagePdf = base64Decode(frontPageResponse.foersteside); + + const applicationResponse: any = await applicationService.createPdf( + accessToken, + form, + submission, + submissionMethod, + translations, + language, + ); + + const applicationPdf = base64Decode(applicationResponse.data); + + if (applicationPdf === undefined || frontPagePdf === undefined) { + throw htmlResponseError('Generering av førstesideark eller søknads PDF feilet'); + } + + const documents = [frontPagePdf, applicationPdf]; + + const mergedFile = await mergeFiles( + frontPageResponse.navSkjemaId, + frontPageResponse.overskriftstittel, + frontPageResponse.spraakkode, + documents, + { pdfa: true, pdfua: true }, + ); + + return Buffer.from(new Uint8Array(mergedFile)); +}; + +const documentsService = { + frontPage, + frontPageAndApplication, +}; + +export default documentsService; diff --git a/packages/fyllut-backend/src/services/documents/frontPageService.ts b/packages/fyllut-backend/src/services/documents/frontPageService.ts new file mode 100644 index 000000000..1f7b54852 --- /dev/null +++ b/packages/fyllut-backend/src/services/documents/frontPageService.ts @@ -0,0 +1,89 @@ +import { + FormPropertiesType, + ForstesideRequestBody, + forstesideUtils, + NavFormType, + Recipient, + Submission, +} from '@navikt/skjemadigitalisering-shared-domain'; +import correlator from 'express-correlation-id'; +import fetch, { BodyInit, HeadersInit } from 'node-fetch'; +import { config } from '../../config/config'; +import { logger } from '../../logger'; +import { responseToError } from '../../utils/errorHandling'; + +interface CreatePdfProps { + accessToken: string; + form: NavFormType; + submission: Submission; + language: string; + unitNumber?: string; +} + +const createPdf = async (props: CreatePdfProps) => { + const { accessToken, form, submission, language = 'nb-NO', unitNumber } = props; + + const recipients = (await getRecipients(form?.properties)) ?? []; + + const body = forstesideUtils.genererFoerstesideData(form, submission, language, recipients, unitNumber); + + const response = await createRequest(accessToken, JSON.stringify(body)); + + log(body, response); + + return response; +}; + +const getRecipients = async (formProperties: FormPropertiesType): Promise => { + const { formsApiUrl } = config; + + if (formProperties.mottaksadresseId) { + const recipientsResponse = await fetch(`${formsApiUrl}/v1/recipients`, { + method: 'GET', + headers: { + 'x-correlation-id': correlator.getId() as string, + }, + }); + if (!recipientsResponse.ok) { + throw new Error('Failed to fetch recipients'); + } + + return (await recipientsResponse.json()) as Recipient[] | undefined; + } +}; + +const createRequest = async (accessToken: string, body?: BodyInit) => { + const { skjemabyggingProxyUrl } = config; + + const response = await fetch(`${skjemabyggingProxyUrl}/foersteside`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${accessToken}`, + 'x-correlation-id': correlator.getId(), + } as HeadersInit, + body, + }); + + if (response.ok) { + return response.json(); + } + + throw await responseToError(response, 'Feil ved generering av førsteside', true); +}; + +const log = (forsteside: ForstesideRequestBody, response: any) => { + logger.info('Download frontpage', { + loepenummer: response.loepenummer, + navSkjemaId: forsteside.navSkjemaId, + tema: forsteside.tema, + enhetsnummer: forsteside.enhetsnummer, + spraakkode: forsteside.spraakkode, + }); +}; + +const frontPageService = { + createPdf, +}; + +export default frontPageService; diff --git a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts b/packages/fyllut-backend/src/services/documents/gotenbergService.ts similarity index 92% rename from packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts rename to packages/fyllut-backend/src/services/documents/gotenbergService.ts index aed3e73c1..df7bcc7a9 100644 --- a/packages/fyllut-backend/src/routers/api/helpers/gotenbergService.ts +++ b/packages/fyllut-backend/src/services/documents/gotenbergService.ts @@ -1,9 +1,9 @@ import correlator from 'express-correlation-id'; import FormData from 'form-data'; -import { config } from '../../../config/config'; -import { logger } from '../../../logger'; -import { synchronousResponseToError } from '../../../utils/errorHandling'; -import fetchWithRetry from '../../../utils/fetchWithRetry'; +import { config } from '../../config/config'; +import { logger } from '../../logger'; +import { synchronousResponseToError } from '../../utils/errorHandling'; +import fetchWithRetry from '../../utils/fetchWithRetry'; const { gotenbergUrl } = config; diff --git a/packages/fyllut-backend/src/routers/api/test-forsteside.pdf b/packages/fyllut-backend/src/services/documents/testdata/test-forsteside.pdf similarity index 100% rename from packages/fyllut-backend/src/routers/api/test-forsteside.pdf rename to packages/fyllut-backend/src/services/documents/testdata/test-forsteside.pdf diff --git a/packages/fyllut-backend/src/routers/api/test-merged.pdf b/packages/fyllut-backend/src/services/documents/testdata/test-merged.pdf similarity index 100% rename from packages/fyllut-backend/src/routers/api/test-merged.pdf rename to packages/fyllut-backend/src/services/documents/testdata/test-merged.pdf diff --git a/packages/fyllut-backend/src/routers/api/test-skjema.pdf b/packages/fyllut-backend/src/services/documents/testdata/test-skjema.pdf similarity index 100% rename from packages/fyllut-backend/src/routers/api/test-skjema.pdf rename to packages/fyllut-backend/src/services/documents/testdata/test-skjema.pdf diff --git a/packages/fyllut-backend/src/routers/api/test.pdf b/packages/fyllut-backend/src/services/documents/testdata/test.pdf similarity index 100% rename from packages/fyllut-backend/src/routers/api/test.pdf rename to packages/fyllut-backend/src/services/documents/testdata/test.pdf diff --git a/packages/bygger/src/components/ButtonWithSpinner.tsx b/packages/shared-components/src/components/button/ButtonWithSpinner.tsx similarity index 80% rename from packages/bygger/src/components/ButtonWithSpinner.tsx rename to packages/shared-components/src/components/button/ButtonWithSpinner.tsx index 7b47dce77..5b522e357 100644 --- a/packages/bygger/src/components/ButtonWithSpinner.tsx +++ b/packages/shared-components/src/components/button/ButtonWithSpinner.tsx @@ -15,9 +15,18 @@ interface Props { | 'tertiary-neutral' | 'danger'; size?: 'medium' | 'small' | 'xsmall'; + download?: boolean; } -const ButtonWithSpinner = ({ children, className, onClick, variant = 'primary', size = 'medium', icon }: Props) => { +const ButtonWithSpinner = ({ + children, + className, + onClick, + variant = 'primary', + size = 'medium', + icon, + download, +}: Props) => { const [isSaving, setIsSaving] = useState(false); async function onClickWithSpinner() { setIsSaving(true); @@ -35,6 +44,8 @@ const ButtonWithSpinner = ({ children, className, onClick, variant = 'primary', loading={isSaving} size={size} icon={icon} + download={download} + as={'a'} > {children} diff --git a/packages/shared-components/src/components/button/DownloadApplicationButton.tsx b/packages/shared-components/src/components/button/DownloadApplicationButton.tsx new file mode 100644 index 000000000..fc96c8398 --- /dev/null +++ b/packages/shared-components/src/components/button/DownloadApplicationButton.tsx @@ -0,0 +1,84 @@ +import { Alert } from '@navikt/ds-react'; +import { NavFormType, Submission } from '@navikt/skjemadigitalisering-shared-domain'; +import React, { useState } from 'react'; +import { useAppConfig } from '../../context/config/configContext'; +import { useLanguages } from '../../context/languages'; +import DownloadPdfButton from './DownloadPdfButton'; + +interface Props { + formPath: string; + form: NavFormType; + submission: Submission; + translations: any; + enhetNummer?: string; + isValid?: () => boolean; + submissionMethod?: string; + children: React.ReactNode; +} + +type DownloadState = 'succes' | 'error'; + +const DownloadApplicationButton = ({ + formPath, + form, + submission, + translations, + enhetNummer, + isValid, + submissionMethod, + children, +}: Props) => { + const { translate } = useLanguages(); + const { fyllutBaseURL } = useAppConfig(); + const { currentLanguage } = useLanguages(); + const [downloadState, setDownloadState] = useState(); + + const onSuccess = () => { + setDownloadState('succes'); + }; + + const onError = () => { + setDownloadState('error'); + }; + + const fileName = `soknad-${formPath}.pdf`; + + return ( + <> + + {children} + + + {downloadState === 'succes' && ( + + {translate( + `Søknaden din er lastet ned med navnet ${fileName} og ligger i mappen for nedlastninger på enheten din.`, + )} + + )} + + {downloadState === 'error' && ( + + {translate('Det skjedde en feil ved nedlasting av søknaden. Vennligst prøv igjen senere.')} + + )} + + ); +}; + +export default DownloadApplicationButton; diff --git a/packages/shared-components/src/components/button/DownloadPdfButton.tsx b/packages/shared-components/src/components/button/DownloadPdfButton.tsx new file mode 100644 index 000000000..6db7e40ba --- /dev/null +++ b/packages/shared-components/src/components/button/DownloadPdfButton.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { ButtonWithSpinner, http } from '../../index'; + +interface Props { + fileName: string; + values: Record; + actionUrl: string; + isValid?: () => boolean; + onSuccess?: () => void; + onError?: () => void; + className?: string; + children: React.ReactNode; +} + +const DownloadPdfButton = ({ + fileName, + values, + actionUrl, + className, + isValid, + onSuccess, + onError, + children, +}: Props) => { + const download = async () => { + if (isValid && !isValid()) { + return; + } + + try { + const response: Blob = await http.post(actionUrl, values, { + Accept: http.MimeType.PDF, + }); + + const url = window.URL.createObjectURL(response); + const a = document.createElement('a'); + a.href = url; + a.download = fileName; + a.click(); + + if (onSuccess) { + onSuccess(); + } + } catch (_error) { + if (onError) { + onError(); + } + } + }; + + return ( + + {children} + + ); +}; + +export default DownloadPdfButton; diff --git a/packages/shared-components/src/components/button/download-pdf/DownloadPdfButton.tsx b/packages/shared-components/src/components/button/download-pdf/DownloadPdfButton.tsx deleted file mode 100644 index 2e91548f0..000000000 --- a/packages/shared-components/src/components/button/download-pdf/DownloadPdfButton.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { FormEventHandler } from 'react'; - -interface Props { - id: string; - values: Record; - actionUrl: string; - label: string; - onSubmit?: FormEventHandler; - submissionMethod?: string; -} - -const DownloadPdfButton = ({ id, values, actionUrl, label, onSubmit, submissionMethod = 'paper' }: Props) => { - return ( - <> -