@defra/forms-engine-plugin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.browserslistrc +16 -0
- package/.editorconfig +9 -0
- package/.eslintrc.cjs +266 -0
- package/.github/dependabot.yml +85 -0
- package/.github/workflows/check-pull-request.yml +209 -0
- package/.github/workflows/pr-notifier.yml +98 -0
- package/.github/workflows/publish.yml +111 -0
- package/.husky/pre-commit +1 -0
- package/.lintstagedrc.js +4 -0
- package/.nvmrc +1 -0
- package/.prettierignore +8 -0
- package/.prettierrc.cjs +26 -0
- package/.server/client/javascripts/application.js +68 -0
- package/.server/client/javascripts/application.js.map +1 -0
- package/.server/client/javascripts/file-upload.js +292 -0
- package/.server/client/javascripts/file-upload.js.map +1 -0
- package/.server/client/stylesheets/_code.scss +33 -0
- package/.server/client/stylesheets/_govuk-frontend.scss +4 -0
- package/.server/client/stylesheets/_prose.scss +56 -0
- package/.server/client/stylesheets/_service-banner.scss +24 -0
- package/.server/client/stylesheets/_summary-list.scss +28 -0
- package/.server/client/stylesheets/_tag-env.scss +24 -0
- package/.server/client/stylesheets/application.scss +14 -0
- package/.server/common/cookies.js +55 -0
- package/.server/common/cookies.js.map +1 -0
- package/.server/common/cookies.test.js +15 -0
- package/.server/common/cookies.test.js.map +1 -0
- package/.server/common/types.js +6 -0
- package/.server/common/types.js.map +1 -0
- package/.server/config/index.js +241 -0
- package/.server/config/index.js.map +1 -0
- package/.server/index.js +25 -0
- package/.server/index.js.map +1 -0
- package/.server/server/common/helpers/logging/logger-options.js +44 -0
- package/.server/server/common/helpers/logging/logger-options.js.map +1 -0
- package/.server/server/common/helpers/logging/logger.js +6 -0
- package/.server/server/common/helpers/logging/logger.js.map +1 -0
- package/.server/server/common/helpers/logging/request-logger.js +7 -0
- package/.server/server/common/helpers/logging/request-logger.js.map +1 -0
- package/.server/server/common/helpers/logging/request-tracing.js +12 -0
- package/.server/server/common/helpers/logging/request-tracing.js.map +1 -0
- package/.server/server/common/helpers/redis-client.js +55 -0
- package/.server/server/common/helpers/redis-client.js.map +1 -0
- package/.server/server/constants.js +2 -0
- package/.server/server/constants.js.map +1 -0
- package/.server/server/forms/README.md +10 -0
- package/.server/server/forms/components.json +1015 -0
- package/.server/server/forms/report-a-terrorist.json +270 -0
- package/.server/server/forms/runner-components-test.json +365 -0
- package/.server/server/forms/test.json +581 -0
- package/.server/server/index.js +116 -0
- package/.server/server/index.js.map +1 -0
- package/.server/server/plugins/blankie.js +29 -0
- package/.server/server/plugins/blankie.js.map +1 -0
- package/.server/server/plugins/crumb.js +15 -0
- package/.server/server/plugins/crumb.js.map +1 -0
- package/.server/server/plugins/engine/README.md +87 -0
- package/.server/server/plugins/engine/components/AutocompleteField.js +37 -0
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -0
- package/.server/server/plugins/engine/components/CheckboxesField.js +79 -0
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -0
- package/.server/server/plugins/engine/components/ComponentBase.js +55 -0
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -0
- package/.server/server/plugins/engine/components/ComponentCollection.js +198 -0
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -0
- package/.server/server/plugins/engine/components/DatePartsField.js +208 -0
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -0
- package/.server/server/plugins/engine/components/Details.js +26 -0
- package/.server/server/plugins/engine/components/Details.js.map +1 -0
- package/.server/server/plugins/engine/components/EmailAddressField.js +40 -0
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -0
- package/.server/server/plugins/engine/components/FileUploadField.js +195 -0
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -0
- package/.server/server/plugins/engine/components/FormComponent.js +210 -0
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -0
- package/.server/server/plugins/engine/components/Html.js +24 -0
- package/.server/server/plugins/engine/components/Html.js.map +1 -0
- package/.server/server/plugins/engine/components/InsetText.js +22 -0
- package/.server/server/plugins/engine/components/InsetText.js.map +1 -0
- package/.server/server/plugins/engine/components/List.js +65 -0
- package/.server/server/plugins/engine/components/List.js.map +1 -0
- package/.server/server/plugins/engine/components/ListFormComponent.js +87 -0
- package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -0
- package/.server/server/plugins/engine/components/MonthYearField.js +172 -0
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -0
- package/.server/server/plugins/engine/components/MultilineTextField.js +115 -0
- package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -0
- package/.server/server/plugins/engine/components/NumberField.js +137 -0
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -0
- package/.server/server/plugins/engine/components/RadiosField.js +18 -0
- package/.server/server/plugins/engine/components/RadiosField.js.map +1 -0
- package/.server/server/plugins/engine/components/SelectField.js +33 -0
- package/.server/server/plugins/engine/components/SelectField.js.map +1 -0
- package/.server/server/plugins/engine/components/SelectionControlField.js +43 -0
- package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +43 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -0
- package/.server/server/plugins/engine/components/TextField.js +63 -0
- package/.server/server/plugins/engine/components/TextField.js.map +1 -0
- package/.server/server/plugins/engine/components/UkAddressField.js +130 -0
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -0
- package/.server/server/plugins/engine/components/YesNoField.js +28 -0
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -0
- package/.server/server/plugins/engine/components/constants.js +2 -0
- package/.server/server/plugins/engine/components/constants.js.map +1 -0
- package/.server/server/plugins/engine/components/helpers.js +219 -0
- package/.server/server/plugins/engine/components/helpers.js.map +1 -0
- package/.server/server/plugins/engine/components/index.js +25 -0
- package/.server/server/plugins/engine/components/index.js.map +1 -0
- package/.server/server/plugins/engine/components/types.js +2 -0
- package/.server/server/plugins/engine/components/types.js.map +1 -0
- package/.server/server/plugins/engine/configureEnginePlugin.js +44 -0
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -0
- package/.server/server/plugins/engine/helpers.js +268 -0
- package/.server/server/plugins/engine/helpers.js.map +1 -0
- package/.server/server/plugins/engine/index.js +6 -0
- package/.server/server/plugins/engine/index.js.map +1 -0
- package/.server/server/plugins/engine/models/FormModel.js +363 -0
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -0
- package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.js +2 -0
- package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.js.map +1 -0
- package/.server/server/plugins/engine/models/Section.js +2 -0
- package/.server/server/plugins/engine/models/Section.js.map +1 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.js +183 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -0
- package/.server/server/plugins/engine/models/index.js +3 -0
- package/.server/server/plugins/engine/models/index.js.map +1 -0
- package/.server/server/plugins/engine/models/types.js +2 -0
- package/.server/server/plugins/engine/models/types.js.map +1 -0
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +44 -0
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -0
- package/.server/server/plugins/engine/outputFormatters/index.js +24 -0
- package/.server/server/plugins/engine/outputFormatters/index.js.map +1 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js +104 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js +110 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +401 -0
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/PageController.js +133 -0
- package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +482 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/README.md +28 -0
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +372 -0
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.js +16 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js +43 -0
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +195 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/TerminalPageController.js +8 -0
- package/.server/server/plugins/engine/pageControllers/TerminalPageController.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/helpers.js +69 -0
- package/.server/server/plugins/engine/pageControllers/helpers.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/index.js +10 -0
- package/.server/server/plugins/engine/pageControllers/index.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +78 -0
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -0
- package/.server/server/plugins/engine/plugin.js +562 -0
- package/.server/server/plugins/engine/plugin.js.map +1 -0
- package/.server/server/plugins/engine/services/formSubmissionService.js +39 -0
- package/.server/server/plugins/engine/services/formSubmissionService.js.map +1 -0
- package/.server/server/plugins/engine/services/formsService.js +41 -0
- package/.server/server/plugins/engine/services/formsService.js.map +1 -0
- package/.server/server/plugins/engine/services/formsService.test.js +71 -0
- package/.server/server/plugins/engine/services/formsService.test.js.map +1 -0
- package/.server/server/plugins/engine/services/index.js +4 -0
- package/.server/server/plugins/engine/services/index.js.map +1 -0
- package/.server/server/plugins/engine/services/notifyService.js +45 -0
- package/.server/server/plugins/engine/services/notifyService.js.map +1 -0
- package/.server/server/plugins/engine/services/uploadService.js +51 -0
- package/.server/server/plugins/engine/services/uploadService.js.map +1 -0
- package/.server/server/plugins/engine/types.js +53 -0
- package/.server/server/plugins/engine/types.js.map +1 -0
- package/.server/server/plugins/engine/views/components/autocompletefield.html +5 -0
- package/.server/server/plugins/engine/views/components/checkboxesfield.html +5 -0
- package/.server/server/plugins/engine/views/components/datepartsfield.html +5 -0
- package/.server/server/plugins/engine/views/components/details.html +6 -0
- package/.server/server/plugins/engine/views/components/emailaddressfield.html +5 -0
- package/.server/server/plugins/engine/views/components/fileuploadfield-key.html +8 -0
- package/.server/server/plugins/engine/views/components/fileuploadfield-value.html +3 -0
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +24 -0
- package/.server/server/plugins/engine/views/components/html.html +3 -0
- package/.server/server/plugins/engine/views/components/insettext.html +7 -0
- package/.server/server/plugins/engine/views/components/list.html +36 -0
- package/.server/server/plugins/engine/views/components/monthyearfield.html +5 -0
- package/.server/server/plugins/engine/views/components/multilinetextfield.html +10 -0
- package/.server/server/plugins/engine/views/components/numberfield.html +5 -0
- package/.server/server/plugins/engine/views/components/radiosfield.html +5 -0
- package/.server/server/plugins/engine/views/components/selectfield.html +5 -0
- package/.server/server/plugins/engine/views/components/telephonenumberfield.html +5 -0
- package/.server/server/plugins/engine/views/components/textfield.html +5 -0
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +25 -0
- package/.server/server/plugins/engine/views/components/yesnofield.html +5 -0
- package/.server/server/plugins/engine/views/file-upload.html +45 -0
- package/.server/server/plugins/engine/views/index.html +39 -0
- package/.server/server/plugins/engine/views/item-delete.html +56 -0
- package/.server/server/plugins/engine/views/partials/components.html +6 -0
- package/.server/server/plugins/engine/views/partials/conditional-components.html +3 -0
- package/.server/server/plugins/engine/views/partials/debug.html +44 -0
- package/.server/server/plugins/engine/views/partials/form.html +15 -0
- package/.server/server/plugins/engine/views/partials/heading.html +16 -0
- package/.server/server/plugins/engine/views/partials/preview-banner.html +32 -0
- package/.server/server/plugins/engine/views/partials/preview-banner.test.js +108 -0
- package/.server/server/plugins/engine/views/partials/preview-banner.test.js.map +1 -0
- package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +10 -0
- package/.server/server/plugins/engine/views/repeat-list-summary.html +53 -0
- package/.server/server/plugins/errorPages.js +49 -0
- package/.server/server/plugins/errorPages.js.map +1 -0
- package/.server/server/plugins/nunjucks/context.js +79 -0
- package/.server/server/plugins/nunjucks/context.js.map +1 -0
- package/.server/server/plugins/nunjucks/context.test.js +134 -0
- package/.server/server/plugins/nunjucks/context.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/enviroment.test.js +166 -0
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/environment.js +95 -0
- package/.server/server/plugins/nunjucks/environment.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/answer.js +26 -0
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/answer.test.js +70 -0
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/evaluate.js +22 -0
- package/.server/server/plugins/nunjucks/filters/evaluate.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/field.js +26 -0
- package/.server/server/plugins/nunjucks/filters/field.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/field.test.js +64 -0
- package/.server/server/plugins/nunjucks/filters/field.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/highlight.js +14 -0
- package/.server/server/plugins/nunjucks/filters/highlight.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/href.js +28 -0
- package/.server/server/plugins/nunjucks/filters/href.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/href.test.js +63 -0
- package/.server/server/plugins/nunjucks/filters/href.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js +9 -0
- package/.server/server/plugins/nunjucks/filters/index.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/inspect.js +16 -0
- package/.server/server/plugins/nunjucks/filters/inspect.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/page.js +23 -0
- package/.server/server/plugins/nunjucks/filters/page.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/page.test.js +51 -0
- package/.server/server/plugins/nunjucks/filters/page.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/index.js +4 -0
- package/.server/server/plugins/nunjucks/index.js.map +1 -0
- package/.server/server/plugins/nunjucks/plugin.js +38 -0
- package/.server/server/plugins/nunjucks/plugin.js.map +1 -0
- package/.server/server/plugins/nunjucks/render.js +41 -0
- package/.server/server/plugins/nunjucks/render.js.map +1 -0
- package/.server/server/plugins/nunjucks/types.js +41 -0
- package/.server/server/plugins/nunjucks/types.js.map +1 -0
- package/.server/server/plugins/pulse.js +8 -0
- package/.server/server/plugins/pulse.js.map +1 -0
- package/.server/server/plugins/router.js +169 -0
- package/.server/server/plugins/router.js.map +1 -0
- package/.server/server/plugins/session.js +28 -0
- package/.server/server/plugins/session.js.map +1 -0
- package/.server/server/routes/health.js +15 -0
- package/.server/server/routes/health.js.map +1 -0
- package/.server/server/routes/health.test.js +32 -0
- package/.server/server/routes/health.test.js.map +1 -0
- package/.server/server/routes/index.js +3 -0
- package/.server/server/routes/index.js.map +1 -0
- package/.server/server/routes/public.js +37 -0
- package/.server/server/routes/public.js.map +1 -0
- package/.server/server/routes/types.js +14 -0
- package/.server/server/routes/types.js.map +1 -0
- package/.server/server/schemas/index.js +15 -0
- package/.server/server/schemas/index.js.map +1 -0
- package/.server/server/secure-context.js +36 -0
- package/.server/server/secure-context.js.map +1 -0
- package/.server/server/services/cacheService.js +85 -0
- package/.server/server/services/cacheService.js.map +1 -0
- package/.server/server/services/httpService.js +44 -0
- package/.server/server/services/httpService.js.map +1 -0
- package/.server/server/services/httpService.test.js +504 -0
- package/.server/server/services/httpService.test.js.map +1 -0
- package/.server/server/services/index.js +2 -0
- package/.server/server/services/index.js.map +1 -0
- package/.server/server/types.js +2 -0
- package/.server/server/types.js.map +1 -0
- package/.server/server/utils/notify.js +40 -0
- package/.server/server/utils/notify.js.map +1 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.js +7 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.js.map +1 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.test.js +14 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.test.js.map +1 -0
- package/.server/server/utils/utils.js +20 -0
- package/.server/server/utils/utils.js.map +1 -0
- package/.server/server/utils/utils.test.js +49 -0
- package/.server/server/utils/utils.test.js.map +1 -0
- package/.server/server/views/404.html +16 -0
- package/.server/server/views/500.html +19 -0
- package/.server/server/views/components/debug/macro.njk +3 -0
- package/.server/server/views/components/debug/template.njk +13 -0
- package/.server/server/views/components/service-banner/macro.njk +3 -0
- package/.server/server/views/components/service-banner/template.njk +20 -0
- package/.server/server/views/components/service-banner/template.test.js +36 -0
- package/.server/server/views/components/service-banner/template.test.js.map +1 -0
- package/.server/server/views/components/tag-env/macro.njk +3 -0
- package/.server/server/views/components/tag-env/template.njk +30 -0
- package/.server/server/views/components/tag-env/template.test.js +59 -0
- package/.server/server/views/components/tag-env/template.test.js.map +1 -0
- package/.server/server/views/confirmation.html +19 -0
- package/.server/server/views/help/accessibility-statement.html +58 -0
- package/.server/server/views/help/cookie-preferences.html +57 -0
- package/.server/server/views/help/cookies.html +71 -0
- package/.server/server/views/help/get-support.html +37 -0
- package/.server/server/views/help/privacy-notice.html +68 -0
- package/.server/server/views/help/terms-and-conditions.html +83 -0
- package/.server/server/views/layout.html +199 -0
- package/.server/server/views/summary.html +50 -0
- package/.server/typings/hapi/index.d.js +2 -0
- package/.server/typings/hapi/index.d.js.map +1 -0
- package/.server/typings/hapi-tracing/index.d.js +2 -0
- package/.server/typings/hapi-tracing/index.d.js.map +1 -0
- package/.server/typings/index.d.js +2 -0
- package/.server/typings/index.d.js.map +1 -0
- package/.server/typings/joi/index.d.js +2 -0
- package/.server/typings/joi/index.d.js.map +1 -0
- package/Dockerfile +61 -0
- package/LICENCE +8 -0
- package/Procfile +1 -0
- package/README.md +87 -0
- package/babel.config.cjs +55 -0
- package/compose/aws.env +4 -0
- package/compose/start-localstack.sh +26 -0
- package/docker-compose.yaml +86 -0
- package/globals.d.ts +1 -0
- package/jest.config.cjs +54 -0
- package/jest.environment.js +4 -0
- package/jest.setup.cjs +14 -0
- package/package.json +163 -0
- package/postcss.config.js +26 -0
- package/sonar-project.properties +17 -0
- package/src/client/javascripts/application.js +87 -0
- package/src/client/javascripts/file-upload.js +386 -0
- package/src/client/stylesheets/_code.scss +33 -0
- package/src/client/stylesheets/_govuk-frontend.scss +4 -0
- package/src/client/stylesheets/_prose.scss +56 -0
- package/src/client/stylesheets/_service-banner.scss +24 -0
- package/src/client/stylesheets/_summary-list.scss +28 -0
- package/src/client/stylesheets/_tag-env.scss +24 -0
- package/src/client/stylesheets/application.scss +14 -0
- package/src/common/cookies.js +58 -0
- package/src/common/cookies.test.js +23 -0
- package/src/common/types.js +5 -0
- package/src/config/index.ts +271 -0
- package/src/index.ts +31 -0
- package/src/server/common/helpers/logging/logger-options.test.ts +50 -0
- package/src/server/common/helpers/logging/logger-options.ts +46 -0
- package/src/server/common/helpers/logging/logger.ts +7 -0
- package/src/server/common/helpers/logging/request-logger.ts +9 -0
- package/src/server/common/helpers/logging/request-tracing.js +10 -0
- package/src/server/common/helpers/redis-client.js +70 -0
- package/src/server/constants.js +1 -0
- package/src/server/forms/README.md +10 -0
- package/src/server/forms/components.json +1015 -0
- package/src/server/forms/report-a-terrorist.json +270 -0
- package/src/server/forms/runner-components-test.json +365 -0
- package/src/server/forms/test.json +581 -0
- package/src/server/index.test.ts +582 -0
- package/src/server/index.ts +140 -0
- package/src/server/plugins/blankie.test.ts +73 -0
- package/src/server/plugins/blankie.ts +48 -0
- package/src/server/plugins/crumb.ts +20 -0
- package/src/server/plugins/engine/README.md +87 -0
- package/src/server/plugins/engine/components/AutocompleteField.test.ts +294 -0
- package/src/server/plugins/engine/components/AutocompleteField.ts +49 -0
- package/src/server/plugins/engine/components/CheckboxesField.test.ts +379 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +106 -0
- package/src/server/plugins/engine/components/ComponentBase.ts +97 -0
- package/src/server/plugins/engine/components/ComponentCollection.ts +278 -0
- package/src/server/plugins/engine/components/DatePartsField.test.ts +822 -0
- package/src/server/plugins/engine/components/DatePartsField.ts +264 -0
- package/src/server/plugins/engine/components/Details.test.ts +49 -0
- package/src/server/plugins/engine/components/Details.ts +30 -0
- package/src/server/plugins/engine/components/EmailAddressField.test.ts +395 -0
- package/src/server/plugins/engine/components/EmailAddressField.ts +55 -0
- package/src/server/plugins/engine/components/FileUploadField.test.ts +778 -0
- package/src/server/plugins/engine/components/FileUploadField.ts +262 -0
- package/src/server/plugins/engine/components/FormComponent.ts +249 -0
- package/src/server/plugins/engine/components/Html.test.ts +48 -0
- package/src/server/plugins/engine/components/Html.ts +29 -0
- package/src/server/plugins/engine/components/InsetText.test.ts +48 -0
- package/src/server/plugins/engine/components/InsetText.ts +27 -0
- package/src/server/plugins/engine/components/List.test.ts +76 -0
- package/src/server/plugins/engine/components/List.ts +72 -0
- package/src/server/plugins/engine/components/ListFormComponent.ts +140 -0
- package/src/server/plugins/engine/components/MonthYearField.test.ts +567 -0
- package/src/server/plugins/engine/components/MonthYearField.ts +222 -0
- package/src/server/plugins/engine/components/MultilineTextField.test.ts +558 -0
- package/src/server/plugins/engine/components/MultilineTextField.ts +138 -0
- package/src/server/plugins/engine/components/NumberField.test.ts +701 -0
- package/src/server/plugins/engine/components/NumberField.ts +163 -0
- package/src/server/plugins/engine/components/RadiosField.test.ts +288 -0
- package/src/server/plugins/engine/components/RadiosField.ts +24 -0
- package/src/server/plugins/engine/components/SelectField.test.ts +288 -0
- package/src/server/plugins/engine/components/SelectField.ts +47 -0
- package/src/server/plugins/engine/components/SelectionControlField.ts +43 -0
- package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +356 -0
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +67 -0
- package/src/server/plugins/engine/components/TextField.test.ts +489 -0
- package/src/server/plugins/engine/components/TextField.ts +96 -0
- package/src/server/plugins/engine/components/UkAddressField.test.ts +623 -0
- package/src/server/plugins/engine/components/UkAddressField.ts +172 -0
- package/src/server/plugins/engine/components/YesNoField.test.ts +248 -0
- package/src/server/plugins/engine/components/YesNoField.ts +31 -0
- package/src/server/plugins/engine/components/constants.ts +1 -0
- package/src/server/plugins/engine/components/helpers.ts +330 -0
- package/src/server/plugins/engine/components/index.ts +24 -0
- package/src/server/plugins/engine/components/types.ts +117 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +47 -0
- package/src/server/plugins/engine/helpers.test.ts +791 -0
- package/src/server/plugins/engine/helpers.ts +379 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.test.ts +42 -0
- package/src/server/plugins/engine/models/FormModel.ts +443 -0
- package/src/server/plugins/engine/models/RepeatingSummaryViewModel.ts +0 -0
- package/src/server/plugins/engine/models/Section.ts +0 -0
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +209 -0
- package/src/server/plugins/engine/models/SummaryViewModel.ts +220 -0
- package/src/server/plugins/engine/models/index.ts +2 -0
- package/src/server/plugins/engine/models/types.ts +114 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +143 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +73 -0
- package/src/server/plugins/engine/outputFormatters/index.test.ts +17 -0
- package/src/server/plugins/engine/outputFormatters/index.ts +44 -0
- package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +229 -0
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +140 -0
- package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +229 -0
- package/src/server/plugins/engine/outputFormatters/machine/v2.ts +153 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1108 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +446 -0
- package/src/server/plugins/engine/pageControllers/PageController.test.ts +205 -0
- package/src/server/plugins/engine/pageControllers/PageController.ts +176 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +1264 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +561 -0
- package/src/server/plugins/engine/pageControllers/README.md +28 -0
- package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +264 -0
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +458 -0
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +18 -0
- package/src/server/plugins/engine/pageControllers/StatusPageController.ts +50 -0
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +261 -0
- package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +28 -0
- package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +19 -0
- package/src/server/plugins/engine/pageControllers/helpers.test.ts +198 -0
- package/src/server/plugins/engine/pageControllers/helpers.ts +101 -0
- package/src/server/plugins/engine/pageControllers/index.ts +10 -0
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +89 -0
- package/src/server/plugins/engine/plugin.ts +673 -0
- package/src/server/plugins/engine/services/formSubmissionService.js +46 -0
- package/src/server/plugins/engine/services/formsService.js +46 -0
- package/src/server/plugins/engine/services/formsService.test.js +90 -0
- package/src/server/plugins/engine/services/index.js +3 -0
- package/src/server/plugins/engine/services/notifyService.test.ts +132 -0
- package/src/server/plugins/engine/services/notifyService.ts +64 -0
- package/src/server/plugins/engine/services/uploadService.js +60 -0
- package/src/server/plugins/engine/types.ts +315 -0
- package/src/server/plugins/engine/views/components/autocompletefield.html +5 -0
- package/src/server/plugins/engine/views/components/checkboxesfield.html +5 -0
- package/src/server/plugins/engine/views/components/datepartsfield.html +5 -0
- package/src/server/plugins/engine/views/components/details.html +6 -0
- package/src/server/plugins/engine/views/components/emailaddressfield.html +5 -0
- package/src/server/plugins/engine/views/components/fileuploadfield-key.html +8 -0
- package/src/server/plugins/engine/views/components/fileuploadfield-value.html +3 -0
- package/src/server/plugins/engine/views/components/fileuploadfield.html +24 -0
- package/src/server/plugins/engine/views/components/html.html +3 -0
- package/src/server/plugins/engine/views/components/insettext.html +7 -0
- package/src/server/plugins/engine/views/components/list.html +36 -0
- package/src/server/plugins/engine/views/components/monthyearfield.html +5 -0
- package/src/server/plugins/engine/views/components/multilinetextfield.html +10 -0
- package/src/server/plugins/engine/views/components/numberfield.html +5 -0
- package/src/server/plugins/engine/views/components/radiosfield.html +5 -0
- package/src/server/plugins/engine/views/components/selectfield.html +5 -0
- package/src/server/plugins/engine/views/components/telephonenumberfield.html +5 -0
- package/src/server/plugins/engine/views/components/textfield.html +5 -0
- package/src/server/plugins/engine/views/components/ukaddressfield.html +25 -0
- package/src/server/plugins/engine/views/components/yesnofield.html +5 -0
- package/src/server/plugins/engine/views/file-upload.html +45 -0
- package/src/server/plugins/engine/views/index.html +39 -0
- package/src/server/plugins/engine/views/item-delete.html +56 -0
- package/src/server/plugins/engine/views/partials/components.html +6 -0
- package/src/server/plugins/engine/views/partials/conditional-components.html +3 -0
- package/src/server/plugins/engine/views/partials/debug.html +44 -0
- package/src/server/plugins/engine/views/partials/form.html +15 -0
- package/src/server/plugins/engine/views/partials/heading.html +16 -0
- package/src/server/plugins/engine/views/partials/preview-banner.html +32 -0
- package/src/server/plugins/engine/views/partials/preview-banner.test.js +122 -0
- package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +10 -0
- package/src/server/plugins/engine/views/repeat-list-summary.html +53 -0
- package/src/server/plugins/errorPages.ts +58 -0
- package/src/server/plugins/nunjucks/context.js +88 -0
- package/src/server/plugins/nunjucks/context.test.js +142 -0
- package/src/server/plugins/nunjucks/enviroment.test.js +201 -0
- package/src/server/plugins/nunjucks/environment.js +116 -0
- package/src/server/plugins/nunjucks/filters/answer.js +27 -0
- package/src/server/plugins/nunjucks/filters/answer.test.js +89 -0
- package/src/server/plugins/nunjucks/filters/evaluate.js +21 -0
- package/src/server/plugins/nunjucks/filters/field.js +28 -0
- package/src/server/plugins/nunjucks/filters/field.test.js +75 -0
- package/src/server/plugins/nunjucks/filters/highlight.js +11 -0
- package/src/server/plugins/nunjucks/filters/href.js +30 -0
- package/src/server/plugins/nunjucks/filters/href.test.js +80 -0
- package/src/server/plugins/nunjucks/filters/index.js +8 -0
- package/src/server/plugins/nunjucks/filters/inspect.js +15 -0
- package/src/server/plugins/nunjucks/filters/page.js +24 -0
- package/src/server/plugins/nunjucks/filters/page.test.js +65 -0
- package/src/server/plugins/nunjucks/index.js +3 -0
- package/src/server/plugins/nunjucks/plugin.js +40 -0
- package/src/server/plugins/nunjucks/render.js +42 -0
- package/src/server/plugins/nunjucks/types.js +40 -0
- package/src/server/plugins/pulse.ts +11 -0
- package/src/server/plugins/router.ts +201 -0
- package/src/server/plugins/session.ts +28 -0
- package/src/server/routes/health.js +13 -0
- package/src/server/routes/health.test.js +35 -0
- package/src/server/routes/index.test.ts +125 -0
- package/src/server/routes/index.ts +2 -0
- package/src/server/routes/public.ts +47 -0
- package/src/server/routes/types.ts +48 -0
- package/src/server/schemas/index.ts +34 -0
- package/src/server/secure-context.js +43 -0
- package/src/server/services/cacheService.test.ts +276 -0
- package/src/server/services/cacheService.ts +131 -0
- package/src/server/services/httpService.test.js +491 -0
- package/src/server/services/httpService.ts +50 -0
- package/src/server/services/index.ts +1 -0
- package/src/server/types.ts +54 -0
- package/src/server/utils/notify.test.ts +37 -0
- package/src/server/utils/notify.ts +50 -0
- package/src/server/utils/secure-context/get-trust-store-certs.js +11 -0
- package/src/server/utils/secure-context/get-trust-store-certs.test.js +19 -0
- package/src/server/utils/utils.js +24 -0
- package/src/server/utils/utils.test.js +54 -0
- package/src/server/views/404.html +16 -0
- package/src/server/views/500.html +19 -0
- package/src/server/views/components/debug/macro.njk +3 -0
- package/src/server/views/components/debug/template.njk +13 -0
- package/src/server/views/components/service-banner/macro.njk +3 -0
- package/src/server/views/components/service-banner/template.njk +20 -0
- package/src/server/views/components/service-banner/template.test.js +43 -0
- package/src/server/views/components/tag-env/macro.njk +3 -0
- package/src/server/views/components/tag-env/template.njk +30 -0
- package/src/server/views/components/tag-env/template.test.js +66 -0
- package/src/server/views/confirmation.html +19 -0
- package/src/server/views/help/accessibility-statement.html +58 -0
- package/src/server/views/help/cookie-preferences.html +57 -0
- package/src/server/views/help/cookies.html +71 -0
- package/src/server/views/help/get-support.html +37 -0
- package/src/server/views/help/privacy-notice.html +68 -0
- package/src/server/views/help/terms-and-conditions.html +83 -0
- package/src/server/views/layout.html +199 -0
- package/src/server/views/summary.html +50 -0
- package/src/typings/hapi/index.d.ts +95 -0
- package/src/typings/hapi-tracing/index.d.ts +6 -0
- package/src/typings/index.d.ts +3 -0
- package/src/typings/joi/index.d.ts +22 -0
- package/stylelint.config.js +10 -0
- package/test/client/javascripts/file-upload.test.js +1197 -0
- package/test/condition/checkboxes.test.js +112 -0
- package/test/condition/radios.test.js +112 -0
- package/test/condition/text.test.js +103 -0
- package/test/fixtures/assets-manifest.json +4 -0
- package/test/fixtures/form.js +86 -0
- package/test/fixtures/index.js +2 -0
- package/test/fixtures/list.js +92 -0
- package/test/form/cookies.test.js +338 -0
- package/test/form/csrf.test.js +87 -0
- package/test/form/definitions/basic.js +101 -0
- package/test/form/definitions/blank.js +10 -0
- package/test/form/definitions/checkboxes.json +88 -0
- package/test/form/definitions/components.json +452 -0
- package/test/form/definitions/conditional-reveal.js +140 -0
- package/test/form/definitions/conditions-basic.js +187 -0
- package/test/form/definitions/conditions-complex.js +338 -0
- package/test/form/definitions/conditions-dates.js +78 -0
- package/test/form/definitions/conditions-escaping.js +143 -0
- package/test/form/definitions/demo-cph-number.js +3099 -0
- package/test/form/definitions/feedback.json +45 -0
- package/test/form/definitions/fields-optional.js +402 -0
- package/test/form/definitions/fields-required.js +402 -0
- package/test/form/definitions/file-upload-basic.js +44 -0
- package/test/form/definitions/file-upload.js +66 -0
- package/test/form/definitions/minimal.js +39 -0
- package/test/form/definitions/phase-alpha.json +33 -0
- package/test/form/definitions/phase-default.json +26 -0
- package/test/form/definitions/radios.json +88 -0
- package/test/form/definitions/repeat-mixed.js +54 -0
- package/test/form/definitions/repeat.js +70 -0
- package/test/form/definitions/status.json +126 -0
- package/test/form/definitions/templates.js +183 -0
- package/test/form/definitions/test.json +581 -0
- package/test/form/definitions/text.json +75 -0
- package/test/form/definitions/titles.json +170 -0
- package/test/form/definitions.test.js +47 -0
- package/test/form/exit-page.test.js +210 -0
- package/test/form/feedback.test.js +68 -0
- package/test/form/fields-optional.test.js +237 -0
- package/test/form/fields-required.test.js +294 -0
- package/test/form/file-upload.test.js +313 -0
- package/test/form/govuk-notify.test.js +449 -0
- package/test/form/journey-basic.test.js +444 -0
- package/test/form/persist-files.test.js +227 -0
- package/test/form/phase-banner.test.js +71 -0
- package/test/form/repeat.test.js +628 -0
- package/test/form/summary-submission-email.test.js +95 -0
- package/test/form/template.test.js +288 -0
- package/test/form/titles.test.js +204 -0
- package/test/helpers/component-helpers.js +74 -0
- package/test/utils/get-cookie.js +42 -0
- package/test/utils/get-form-definitions.js +18 -0
- package/tmp.pdf +1 -0
- package/tsconfig.json +28 -0
- package/webpack.config.js +208 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@use "govuk-frontend" as *;
|
|
2
|
+
|
|
3
|
+
.app-service-banner {
|
|
4
|
+
display: block;
|
|
5
|
+
background: govuk-colour("yellow");
|
|
6
|
+
color: govuk-colour("black");
|
|
7
|
+
|
|
8
|
+
@include govuk-responsive-padding(2, "top");
|
|
9
|
+
@include govuk-responsive-padding(2, "bottom");
|
|
10
|
+
|
|
11
|
+
&__content {
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.govuk-warning-text__text {
|
|
16
|
+
font-weight: $govuk-font-weight-regular;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.govuk-skip-link:active + &,
|
|
20
|
+
.govuk-skip-link:focus + & {
|
|
21
|
+
// Ofset service banner from skip link
|
|
22
|
+
margin-top: $govuk-border-width + $govuk-focus-width;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@use "govuk-frontend" as *;
|
|
2
|
+
|
|
3
|
+
// Taken from https://github.com/hmrc/hmrc-frontend/blob/main/src/components/summary-list/_summary-list.scss
|
|
4
|
+
@include govuk-media-query($from: tablet) {
|
|
5
|
+
.govuk-summary-list.govuk-summary-list--long-key {
|
|
6
|
+
.govuk-summary-list__row {
|
|
7
|
+
display: flex;
|
|
8
|
+
justify-content: space-between;
|
|
9
|
+
flex-wrap: wrap;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.govuk-summary-list__key {
|
|
13
|
+
flex-grow: 1;
|
|
14
|
+
margin-bottom: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.govuk-summary-list__actions {
|
|
18
|
+
width: auto;
|
|
19
|
+
margin-bottom: 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.govuk-summary-list.govuk-summary-list--long-actions {
|
|
24
|
+
.govuk-summary-list__actions {
|
|
25
|
+
width: auto;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@use "govuk-frontend" as *;
|
|
2
|
+
|
|
3
|
+
.app-tag--env {
|
|
4
|
+
margin: -6px 0 0;
|
|
5
|
+
vertical-align: top;
|
|
6
|
+
|
|
7
|
+
// Override product name font size
|
|
8
|
+
@include govuk-font-size($size: 16);
|
|
9
|
+
|
|
10
|
+
// Align with product name
|
|
11
|
+
@include govuk-media-query($from: tablet) {
|
|
12
|
+
margin: -3px 0 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Override service header alignment
|
|
16
|
+
.cross-service-header & {
|
|
17
|
+
margin: -2px 0 0 govuk-spacing(1);
|
|
18
|
+
|
|
19
|
+
// Align with product name
|
|
20
|
+
@include govuk-media-query($from: tablet) {
|
|
21
|
+
margin: 0 0 0 govuk-spacing(2);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@use "govuk-frontend" as *;
|
|
2
|
+
@use "pkg:accessible-autocomplete";
|
|
3
|
+
@use "code";
|
|
4
|
+
@use "prose";
|
|
5
|
+
@use "service-banner";
|
|
6
|
+
@use "summary-list";
|
|
7
|
+
@use "tag-env";
|
|
8
|
+
|
|
9
|
+
// Use default GDS Transport font for autocomplete
|
|
10
|
+
.autocomplete__hint,
|
|
11
|
+
.autocomplete__input,
|
|
12
|
+
.autocomplete__option {
|
|
13
|
+
@include govuk-typography-common;
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
@type {CookieConsent}
|
|
3
|
+
*/
|
|
4
|
+
export const defaultConsent = {
|
|
5
|
+
analytics: null,
|
|
6
|
+
dismissed: false
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Parses the cookie consent policy
|
|
11
|
+
* @param {string} value
|
|
12
|
+
*/
|
|
13
|
+
export function parseCookieConsent(value) {
|
|
14
|
+
/** @type {CookieConsent} */
|
|
15
|
+
let cookieConsent;
|
|
16
|
+
try {
|
|
17
|
+
const encodedValue = decodeURIComponent(value);
|
|
18
|
+
|
|
19
|
+
// eslint-disable-next-line -- Allow JSON type 'any'
|
|
20
|
+
const decodedValue = JSON.parse(encodedValue);
|
|
21
|
+
if (isValidConsent(decodedValue)) {
|
|
22
|
+
cookieConsent = decodedValue;
|
|
23
|
+
} else {
|
|
24
|
+
cookieConsent = defaultConsent;
|
|
25
|
+
}
|
|
26
|
+
} catch {
|
|
27
|
+
cookieConsent = defaultConsent;
|
|
28
|
+
}
|
|
29
|
+
return cookieConsent;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Serialises the cookie consent policy
|
|
34
|
+
* @param {CookieConsent} consent
|
|
35
|
+
* @returns {string} cookie value
|
|
36
|
+
*/
|
|
37
|
+
export function serialiseCookieConsent(consent) {
|
|
38
|
+
return encodeURIComponent(JSON.stringify(consent));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param {unknown} consent
|
|
43
|
+
* @returns {consent is CookieConsent}
|
|
44
|
+
*/
|
|
45
|
+
function isValidConsent(consent) {
|
|
46
|
+
if (consent === null || Array.isArray(consent)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return typeof consent === 'object' && 'analytics' in consent;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @import {CookieConsent} from '~/src/common/types.js'
|
|
54
|
+
*/
|
|
55
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","names":["defaultConsent","analytics","dismissed","parseCookieConsent","value","cookieConsent","encodedValue","decodeURIComponent","decodedValue","JSON","parse","isValidConsent","serialiseCookieConsent","consent","encodeURIComponent","stringify","Array","isArray"],"sources":["../../src/common/cookies.js"],"sourcesContent":["/**\n @type {CookieConsent}\n */\nexport const defaultConsent = {\n analytics: null,\n dismissed: false\n}\n\n/**\n * Parses the cookie consent policy\n * @param {string} value\n */\nexport function parseCookieConsent(value) {\n /** @type {CookieConsent} */\n let cookieConsent\n\n try {\n const encodedValue = decodeURIComponent(value)\n\n // eslint-disable-next-line -- Allow JSON type 'any'\n const decodedValue = JSON.parse(encodedValue)\n\n if (isValidConsent(decodedValue)) {\n cookieConsent = decodedValue\n } else {\n cookieConsent = defaultConsent\n }\n } catch {\n cookieConsent = defaultConsent\n }\n\n return cookieConsent\n}\n\n/**\n * Serialises the cookie consent policy\n * @param {CookieConsent} consent\n * @returns {string} cookie value\n */\nexport function serialiseCookieConsent(consent) {\n return encodeURIComponent(JSON.stringify(consent))\n}\n\n/**\n * @param {unknown} consent\n * @returns {consent is CookieConsent}\n */\nfunction isValidConsent(consent) {\n if (consent === null || Array.isArray(consent)) {\n return false\n }\n\n return typeof consent === 'object' && 'analytics' in consent\n}\n\n/**\n * @import {CookieConsent} from '~/src/common/types.js'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,GAAG;EAC5BC,SAAS,EAAE,IAAI;EACfC,SAAS,EAAE;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,KAAK,EAAE;EACxC;EACA,IAAIC,aAAa;EAEjB,IAAI;IACF,MAAMC,YAAY,GAAGC,kBAAkB,CAACH,KAAK,CAAC;;IAE9C;IACA,MAAMI,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACJ,YAAY,CAAC;IAE7C,IAAIK,cAAc,CAACH,YAAY,CAAC,EAAE;MAChCH,aAAa,GAAGG,YAAY;IAC9B,CAAC,MAAM;MACLH,aAAa,GAAGL,cAAc;IAChC;EACF,CAAC,CAAC,MAAM;IACNK,aAAa,GAAGL,cAAc;EAChC;EAEA,OAAOK,aAAa;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,sBAAsBA,CAACC,OAAO,EAAE;EAC9C,OAAOC,kBAAkB,CAACL,IAAI,CAACM,SAAS,CAACF,OAAO,CAAC,CAAC;AACpD;;AAEA;AACA;AACA;AACA;AACA,SAASF,cAAcA,CAACE,OAAO,EAAE;EAC/B,IAAIA,OAAO,KAAK,IAAI,IAAIG,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;IAC9C,OAAO,KAAK;EACd;EAEA,OAAO,OAAOA,OAAO,KAAK,QAAQ,IAAI,WAAW,IAAIA,OAAO;AAC9D;;AAEA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parseCookieConsent } from "./cookies.js";
|
|
2
|
+
describe('cookies', () => {
|
|
3
|
+
it('parses a valid policy', () => {
|
|
4
|
+
expect(parseCookieConsent('{"analytics":true}')).toEqual({
|
|
5
|
+
analytics: true
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
it.each(["['not', 'an', 'object']", '{{ not: "an object" }}', '{ additional: AAA }', '{ marketing: 100 }', '', 'null'])('converts a malformed policy to the default', value => {
|
|
9
|
+
expect(parseCookieConsent(value)).toEqual({
|
|
10
|
+
analytics: null,
|
|
11
|
+
dismissed: false
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=cookies.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.test.js","names":["parseCookieConsent","describe","it","expect","toEqual","analytics","each","value","dismissed"],"sources":["../../src/common/cookies.test.js"],"sourcesContent":["import { parseCookieConsent } from '~/src/common/cookies.js'\n\ndescribe('cookies', () => {\n it('parses a valid policy', () => {\n expect(parseCookieConsent('{\"analytics\":true}')).toEqual({\n analytics: true\n })\n })\n\n it.each([\n \"['not', 'an', 'object']\",\n '{{ not: \"an object\" }}',\n '{ additional: AAA }',\n '{ marketing: 100 }',\n '',\n 'null'\n ])('converts a malformed policy to the default', (value) => {\n expect(parseCookieConsent(value)).toEqual({\n analytics: null,\n dismissed: false\n })\n })\n})\n"],"mappings":"AAAA,SAASA,kBAAkB;AAE3BC,QAAQ,CAAC,SAAS,EAAE,MAAM;EACxBC,EAAE,CAAC,uBAAuB,EAAE,MAAM;IAChCC,MAAM,CAACH,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAACI,OAAO,CAAC;MACvDC,SAAS,EAAE;IACb,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,EAAE,CAACI,IAAI,CAAC,CACN,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,EAAE,EACF,MAAM,CACP,CAAC,CAAC,4CAA4C,EAAGC,KAAK,IAAK;IAC1DJ,MAAM,CAACH,kBAAkB,CAACO,KAAK,CAAC,CAAC,CAACH,OAAO,CAAC;MACxCC,SAAS,EAAE,IAAI;MACfG,SAAS,EAAE;IACb,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/common/types.js"],"sourcesContent":["/**\n * @typedef CookieConsent\n * @property {boolean | null} analytics - whether analytics cookies are allowed\n * @property {boolean} dismissed - whether cookie banner has been dismissed\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import convict from 'convict';
|
|
3
|
+
import 'dotenv/config';
|
|
4
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
5
|
+
const isDev = process.env.NODE_ENV !== 'production';
|
|
6
|
+
const isTest = process.env.NODE_ENV === 'test';
|
|
7
|
+
const oneMinute = 1000 * 60;
|
|
8
|
+
const oneHour = oneMinute * 60;
|
|
9
|
+
export const config = convict({
|
|
10
|
+
appDir: {
|
|
11
|
+
format: String,
|
|
12
|
+
default: resolve(import.meta.dirname, '../server')
|
|
13
|
+
},
|
|
14
|
+
publicDir: {
|
|
15
|
+
format: String,
|
|
16
|
+
default: isTest ? resolve(import.meta.dirname, '../../test/fixtures') : resolve(import.meta.dirname, '../../.public')
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* Server
|
|
20
|
+
*/
|
|
21
|
+
port: {
|
|
22
|
+
format: 'port',
|
|
23
|
+
default: 3009,
|
|
24
|
+
env: 'PORT'
|
|
25
|
+
},
|
|
26
|
+
env: {
|
|
27
|
+
doc: 'The application environment.',
|
|
28
|
+
format: ['production', 'development', 'test'],
|
|
29
|
+
default: 'development',
|
|
30
|
+
env: 'NODE_ENV'
|
|
31
|
+
},
|
|
32
|
+
cdpEnvironment: {
|
|
33
|
+
doc: 'The CDP environment the app is currently in, with the addition of "local"',
|
|
34
|
+
format: ['local', 'infra-dev', 'management', 'dev', 'test', 'perf-test', 'ext-test', 'prod'],
|
|
35
|
+
default: 'local',
|
|
36
|
+
env: 'ENVIRONMENT'
|
|
37
|
+
},
|
|
38
|
+
enforceCsrf: {
|
|
39
|
+
format: Boolean,
|
|
40
|
+
default: isProduction,
|
|
41
|
+
env: 'ENFORCE_CSRF'
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Helper flags
|
|
45
|
+
*/
|
|
46
|
+
isProduction: {
|
|
47
|
+
doc: 'If this application running in the production environment',
|
|
48
|
+
format: Boolean,
|
|
49
|
+
default: isProduction
|
|
50
|
+
},
|
|
51
|
+
isDevelopment: {
|
|
52
|
+
doc: 'If this application running in the development environment',
|
|
53
|
+
format: Boolean,
|
|
54
|
+
default: isDev
|
|
55
|
+
},
|
|
56
|
+
isTest: {
|
|
57
|
+
doc: 'If this application running in the test environment',
|
|
58
|
+
format: Boolean,
|
|
59
|
+
default: isTest
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* Service
|
|
63
|
+
*/
|
|
64
|
+
serviceName: {
|
|
65
|
+
doc: 'Applications Service Name',
|
|
66
|
+
format: String,
|
|
67
|
+
default: 'Submit a form to Defra'
|
|
68
|
+
},
|
|
69
|
+
serviceVersion: {
|
|
70
|
+
doc: 'The service version, this variable is injected into your docker container in CDP environments',
|
|
71
|
+
format: String,
|
|
72
|
+
nullable: true,
|
|
73
|
+
default: null,
|
|
74
|
+
env: 'SERVICE_VERSION'
|
|
75
|
+
},
|
|
76
|
+
feedbackLink: {
|
|
77
|
+
doc: 'Used in your phase banner. Can be a URL or more commonly mailto mailto:feedback@department.gov.uk',
|
|
78
|
+
format: String,
|
|
79
|
+
default: null,
|
|
80
|
+
env: 'FEEDBACK_LINK'
|
|
81
|
+
},
|
|
82
|
+
phaseTag: {
|
|
83
|
+
format: String,
|
|
84
|
+
default: 'beta',
|
|
85
|
+
// Accepts "alpha" |"beta" | ""
|
|
86
|
+
env: 'PHASE_TAG'
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Session storage
|
|
90
|
+
* Redis integration is optional, but recommended for production environments.
|
|
91
|
+
*/
|
|
92
|
+
sessionTimeout: {
|
|
93
|
+
format: Number,
|
|
94
|
+
default: oneHour * 24,
|
|
95
|
+
// 1 day
|
|
96
|
+
env: 'SESSION_TIMEOUT'
|
|
97
|
+
},
|
|
98
|
+
confirmationSessionTimeout: {
|
|
99
|
+
format: Number,
|
|
100
|
+
default: oneMinute * 20,
|
|
101
|
+
env: 'CONFIRMATION_SESSION_TIMEOUT'
|
|
102
|
+
},
|
|
103
|
+
sessionCookiePassword: {
|
|
104
|
+
format: String,
|
|
105
|
+
default: null,
|
|
106
|
+
sensitive: true,
|
|
107
|
+
env: 'SESSION_COOKIE_PASSWORD'
|
|
108
|
+
},
|
|
109
|
+
redis: {
|
|
110
|
+
host: {
|
|
111
|
+
doc: 'Redis cache host',
|
|
112
|
+
format: String,
|
|
113
|
+
default: null,
|
|
114
|
+
env: 'REDIS_HOST'
|
|
115
|
+
},
|
|
116
|
+
username: {
|
|
117
|
+
doc: 'Redis cache username',
|
|
118
|
+
format: String,
|
|
119
|
+
default: null,
|
|
120
|
+
env: 'REDIS_USERNAME'
|
|
121
|
+
},
|
|
122
|
+
password: {
|
|
123
|
+
doc: 'Redis cache password',
|
|
124
|
+
format: '*',
|
|
125
|
+
default: null,
|
|
126
|
+
sensitive: true,
|
|
127
|
+
env: 'REDIS_PASSWORD'
|
|
128
|
+
},
|
|
129
|
+
keyPrefix: {
|
|
130
|
+
doc: 'Redis cache key prefix name used to isolate the cached results across multiple clients',
|
|
131
|
+
format: String,
|
|
132
|
+
default: null,
|
|
133
|
+
env: 'REDIS_KEY_PREFIX'
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
tracing: {
|
|
137
|
+
header: {
|
|
138
|
+
doc: 'Tracing header name',
|
|
139
|
+
format: String,
|
|
140
|
+
default: 'x-cdp-request-id',
|
|
141
|
+
env: 'TRACING_HEADER'
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
/**
|
|
145
|
+
* Email outputs
|
|
146
|
+
* Email outputs will use notify to send an email to a single inbox.
|
|
147
|
+
*/
|
|
148
|
+
notifyTemplateId: {
|
|
149
|
+
format: String,
|
|
150
|
+
default: null,
|
|
151
|
+
env: 'NOTIFY_TEMPLATE_ID'
|
|
152
|
+
},
|
|
153
|
+
notifyAPIKey: {
|
|
154
|
+
format: String,
|
|
155
|
+
default: null,
|
|
156
|
+
env: 'NOTIFY_API_KEY'
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* API integrations
|
|
160
|
+
*/
|
|
161
|
+
managerUrl: {
|
|
162
|
+
format: String,
|
|
163
|
+
default: null,
|
|
164
|
+
env: 'MANAGER_URL'
|
|
165
|
+
},
|
|
166
|
+
designerUrl: {
|
|
167
|
+
format: String,
|
|
168
|
+
default: null,
|
|
169
|
+
env: 'DESIGNER_URL'
|
|
170
|
+
},
|
|
171
|
+
submissionUrl: {
|
|
172
|
+
format: String,
|
|
173
|
+
default: null,
|
|
174
|
+
env: 'SUBMISSION_URL'
|
|
175
|
+
},
|
|
176
|
+
uploaderUrl: {
|
|
177
|
+
format: String,
|
|
178
|
+
default: null,
|
|
179
|
+
env: 'UPLOADER_URL'
|
|
180
|
+
},
|
|
181
|
+
uploaderBucketName: {
|
|
182
|
+
format: String,
|
|
183
|
+
default: 'files',
|
|
184
|
+
env: 'UPLOADER_BUCKET_NAME'
|
|
185
|
+
},
|
|
186
|
+
/**
|
|
187
|
+
* Logging
|
|
188
|
+
*/
|
|
189
|
+
log: {
|
|
190
|
+
enabled: {
|
|
191
|
+
doc: 'Is logging enabled',
|
|
192
|
+
format: Boolean,
|
|
193
|
+
default: !isTest,
|
|
194
|
+
env: 'LOG_ENABLED'
|
|
195
|
+
},
|
|
196
|
+
level: {
|
|
197
|
+
doc: 'Logging level',
|
|
198
|
+
format: ['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'],
|
|
199
|
+
default: 'info',
|
|
200
|
+
env: 'LOG_LEVEL'
|
|
201
|
+
},
|
|
202
|
+
format: {
|
|
203
|
+
doc: 'Format to output logs in.',
|
|
204
|
+
format: ['ecs', 'pino-pretty'],
|
|
205
|
+
default: isProduction ? 'ecs' : 'pino-pretty',
|
|
206
|
+
env: 'LOG_FORMAT'
|
|
207
|
+
},
|
|
208
|
+
redact: {
|
|
209
|
+
doc: 'Log paths to redact',
|
|
210
|
+
format: Array,
|
|
211
|
+
default: isProduction ? ['req.headers.authorization', 'req.headers.cookie', 'res.headers'] : ['req', 'res', 'responseTime']
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
safelist: {
|
|
215
|
+
format: Array,
|
|
216
|
+
default: ['61bca17e-fe74-40e0-9c15-a901ad120eca.mock.pstmn.io'],
|
|
217
|
+
env: 'SAFELIST'
|
|
218
|
+
},
|
|
219
|
+
stagingPrefix: {
|
|
220
|
+
doc: 'Prefix for staging files in S3',
|
|
221
|
+
format: String,
|
|
222
|
+
default: 'staging',
|
|
223
|
+
env: 'STAGING_PREFIX'
|
|
224
|
+
},
|
|
225
|
+
serviceBannerText: {
|
|
226
|
+
doc: 'Service banner text used to show a maintenance message on all pages when set',
|
|
227
|
+
format: String,
|
|
228
|
+
default: '',
|
|
229
|
+
env: 'SERVICE_BANNER_TEXT'
|
|
230
|
+
},
|
|
231
|
+
googleAnalyticsTrackingId: {
|
|
232
|
+
doc: 'Google analytics tracking ID to be used when a user has opted in to additional cookies',
|
|
233
|
+
format: String,
|
|
234
|
+
default: '',
|
|
235
|
+
env: 'GOOGLE_ANALYTICS_TRACKING_ID'
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
config.validate({
|
|
239
|
+
allowed: 'strict'
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["resolve","convict","isProduction","process","env","NODE_ENV","isDev","isTest","oneMinute","oneHour","config","appDir","format","String","default","import","meta","dirname","publicDir","port","doc","cdpEnvironment","enforceCsrf","Boolean","isDevelopment","serviceName","serviceVersion","nullable","feedbackLink","phaseTag","sessionTimeout","Number","confirmationSessionTimeout","sessionCookiePassword","sensitive","redis","host","username","password","keyPrefix","tracing","header","notifyTemplateId","notifyAPIKey","managerUrl","designerUrl","submissionUrl","uploaderUrl","uploaderBucketName","log","enabled","level","redact","Array","safelist","stagingPrefix","serviceBannerText","googleAnalyticsTrackingId","validate","allowed"],"sources":["../../src/config/index.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport convict, { type SchemaObj } from 'convict'\nimport { type LevelWithSilent } from 'pino'\n\nimport 'dotenv/config'\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst isDev = process.env.NODE_ENV !== 'production'\nconst isTest = process.env.NODE_ENV === 'test'\n\nconst oneMinute = 1000 * 60\nconst oneHour = oneMinute * 60\n\nexport const config = convict({\n appDir: {\n format: String,\n default: resolve(import.meta.dirname, '../server')\n },\n publicDir: {\n format: String,\n default: isTest\n ? resolve(import.meta.dirname, '../../test/fixtures')\n : resolve(import.meta.dirname, '../../.public')\n },\n\n /**\n * Server\n */\n port: {\n format: 'port',\n default: 3009,\n env: 'PORT'\n },\n env: {\n doc: 'The application environment.',\n format: ['production', 'development', 'test'],\n default: 'development',\n env: 'NODE_ENV'\n },\n cdpEnvironment: {\n doc: 'The CDP environment the app is currently in, with the addition of \"local\"',\n format: [\n 'local',\n 'infra-dev',\n 'management',\n 'dev',\n 'test',\n 'perf-test',\n 'ext-test',\n 'prod'\n ],\n default: 'local',\n env: 'ENVIRONMENT'\n },\n enforceCsrf: {\n format: Boolean,\n default: isProduction,\n env: 'ENFORCE_CSRF'\n },\n\n /**\n * Helper flags\n */\n isProduction: {\n doc: 'If this application running in the production environment',\n format: Boolean,\n default: isProduction\n },\n isDevelopment: {\n doc: 'If this application running in the development environment',\n format: Boolean,\n default: isDev\n },\n isTest: {\n doc: 'If this application running in the test environment',\n format: Boolean,\n default: isTest\n },\n\n /**\n * Service\n */\n serviceName: {\n doc: 'Applications Service Name',\n format: String,\n default: 'Submit a form to Defra'\n },\n serviceVersion: {\n doc: 'The service version, this variable is injected into your docker container in CDP environments',\n format: String,\n nullable: true,\n default: null,\n env: 'SERVICE_VERSION'\n } as SchemaObj<string>,\n feedbackLink: {\n doc: 'Used in your phase banner. Can be a URL or more commonly mailto mailto:feedback@department.gov.uk',\n format: String,\n default: null,\n env: 'FEEDBACK_LINK'\n } as SchemaObj<string>,\n phaseTag: {\n format: String,\n default: 'beta', // Accepts \"alpha\" |\"beta\" | \"\"\n env: 'PHASE_TAG'\n },\n\n /**\n * Session storage\n * Redis integration is optional, but recommended for production environments.\n */\n sessionTimeout: {\n format: Number,\n default: oneHour * 24, // 1 day\n env: 'SESSION_TIMEOUT'\n },\n confirmationSessionTimeout: {\n format: Number,\n default: oneMinute * 20,\n env: 'CONFIRMATION_SESSION_TIMEOUT'\n },\n sessionCookiePassword: {\n format: String,\n default: null,\n sensitive: true,\n env: 'SESSION_COOKIE_PASSWORD'\n } as SchemaObj<string>,\n redis: {\n host: {\n doc: 'Redis cache host',\n format: String,\n default: null,\n env: 'REDIS_HOST'\n } as SchemaObj<string>,\n username: {\n doc: 'Redis cache username',\n format: String,\n default: null,\n env: 'REDIS_USERNAME'\n } as SchemaObj<string>,\n password: {\n doc: 'Redis cache password',\n format: '*',\n default: null,\n sensitive: true,\n env: 'REDIS_PASSWORD'\n } as SchemaObj<string>,\n keyPrefix: {\n doc: 'Redis cache key prefix name used to isolate the cached results across multiple clients',\n format: String,\n default: null,\n env: 'REDIS_KEY_PREFIX'\n } as SchemaObj<string>\n },\n tracing: {\n header: {\n doc: 'Tracing header name',\n format: String,\n default: 'x-cdp-request-id',\n env: 'TRACING_HEADER'\n } as SchemaObj<string>\n },\n\n /**\n * Email outputs\n * Email outputs will use notify to send an email to a single inbox.\n */\n notifyTemplateId: {\n format: String,\n default: null,\n env: 'NOTIFY_TEMPLATE_ID'\n } as SchemaObj<string>,\n notifyAPIKey: {\n format: String,\n default: null,\n env: 'NOTIFY_API_KEY'\n } as SchemaObj<string>,\n\n /**\n * API integrations\n */\n managerUrl: {\n format: String,\n default: null,\n env: 'MANAGER_URL'\n } as SchemaObj<string>,\n\n designerUrl: {\n format: String,\n default: null,\n env: 'DESIGNER_URL'\n } as SchemaObj<string>,\n\n submissionUrl: {\n format: String,\n default: null,\n env: 'SUBMISSION_URL'\n } as SchemaObj<string>,\n\n uploaderUrl: {\n format: String,\n default: null,\n env: 'UPLOADER_URL'\n } as SchemaObj<string>,\n\n uploaderBucketName: {\n format: String,\n default: 'files',\n env: 'UPLOADER_BUCKET_NAME'\n },\n\n /**\n * Logging\n */\n log: {\n enabled: {\n doc: 'Is logging enabled',\n format: Boolean,\n default: !isTest,\n env: 'LOG_ENABLED'\n },\n level: {\n doc: 'Logging level',\n format: ['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'],\n default: 'info',\n env: 'LOG_LEVEL'\n } as SchemaObj<LevelWithSilent>,\n format: {\n doc: 'Format to output logs in.',\n format: ['ecs', 'pino-pretty'],\n default: isProduction ? 'ecs' : 'pino-pretty',\n env: 'LOG_FORMAT'\n } as SchemaObj<'ecs' | 'pino-pretty'>,\n redact: {\n doc: 'Log paths to redact',\n format: Array,\n default: isProduction\n ? ['req.headers.authorization', 'req.headers.cookie', 'res.headers']\n : ['req', 'res', 'responseTime']\n }\n },\n\n safelist: {\n format: Array,\n default: ['61bca17e-fe74-40e0-9c15-a901ad120eca.mock.pstmn.io'],\n env: 'SAFELIST'\n },\n\n stagingPrefix: {\n doc: 'Prefix for staging files in S3',\n format: String,\n default: 'staging',\n env: 'STAGING_PREFIX'\n },\n\n serviceBannerText: {\n doc: 'Service banner text used to show a maintenance message on all pages when set',\n format: String,\n default: '',\n env: 'SERVICE_BANNER_TEXT'\n },\n\n googleAnalyticsTrackingId: {\n doc: 'Google analytics tracking ID to be used when a user has opted in to additional cookies',\n format: String,\n default: '',\n env: 'GOOGLE_ANALYTICS_TRACKING_ID'\n }\n})\n\nconfig.validate({ allowed: 'strict' })\n"],"mappings":"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","ignoreList":[]}
|
package/.server/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { config } from "./config/index.js";
|
|
2
|
+
import { createLogger } from "./server/common/helpers/logging/logger.js";
|
|
3
|
+
import { createServer } from "./server/index.js";
|
|
4
|
+
const logger = createLogger();
|
|
5
|
+
process.on('unhandledRejection', error => {
|
|
6
|
+
logger.info('Unhandled rejection');
|
|
7
|
+
logger.error(error);
|
|
8
|
+
throw error;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Main entrypoint to the application.
|
|
13
|
+
*/
|
|
14
|
+
async function startServer() {
|
|
15
|
+
const server = await createServer();
|
|
16
|
+
await server.start();
|
|
17
|
+
process.send?.('online');
|
|
18
|
+
server.logger.info('Server started successfully');
|
|
19
|
+
server.logger.info(`Access your frontend on http://localhost:${config.get('port')}`);
|
|
20
|
+
}
|
|
21
|
+
startServer().catch(error => {
|
|
22
|
+
logger.info('Server failed to start :(');
|
|
23
|
+
logger.error(error);
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["config","createLogger","createServer","logger","process","on","error","info","startServer","server","start","send","get","catch"],"sources":["../src/index.ts"],"sourcesContent":["import { config } from '~/src/config/index.js'\nimport { createLogger } from '~/src/server/common/helpers/logging/logger.js'\nimport { createServer } from '~/src/server/index.js'\n\nconst logger = createLogger()\n\nprocess.on('unhandledRejection', (error) => {\n logger.info('Unhandled rejection')\n logger.error(error)\n throw error\n})\n\n/**\n * Main entrypoint to the application.\n */\nasync function startServer() {\n const server = await createServer()\n await server.start()\n\n process.send?.('online')\n\n server.logger.info('Server started successfully')\n server.logger.info(\n `Access your frontend on http://localhost:${config.get('port')}`\n )\n}\n\nstartServer().catch((error: unknown) => {\n logger.info('Server failed to start :(')\n logger.error(error)\n})\n"],"mappings":"AAAA,SAASA,MAAM;AACf,SAASC,YAAY;AACrB,SAASC,YAAY;AAErB,MAAMC,MAAM,GAAGF,YAAY,CAAC,CAAC;AAE7BG,OAAO,CAACC,EAAE,CAAC,oBAAoB,EAAGC,KAAK,IAAK;EAC1CH,MAAM,CAACI,IAAI,CAAC,qBAAqB,CAAC;EAClCJ,MAAM,CAACG,KAAK,CAACA,KAAK,CAAC;EACnB,MAAMA,KAAK;AACb,CAAC,CAAC;;AAEF;AACA;AACA;AACA,eAAeE,WAAWA,CAAA,EAAG;EAC3B,MAAMC,MAAM,GAAG,MAAMP,YAAY,CAAC,CAAC;EACnC,MAAMO,MAAM,CAACC,KAAK,CAAC,CAAC;EAEpBN,OAAO,CAACO,IAAI,GAAG,QAAQ,CAAC;EAExBF,MAAM,CAACN,MAAM,CAACI,IAAI,CAAC,6BAA6B,CAAC;EACjDE,MAAM,CAACN,MAAM,CAACI,IAAI,CAChB,4CAA4CP,MAAM,CAACY,GAAG,CAAC,MAAM,CAAC,EAChE,CAAC;AACH;AAEAJ,WAAW,CAAC,CAAC,CAACK,KAAK,CAAEP,KAAc,IAAK;EACtCH,MAAM,CAACI,IAAI,CAAC,2BAA2B,CAAC;EACxCJ,MAAM,CAACG,KAAK,CAACA,KAAK,CAAC;AACrB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getTraceId } from '@defra/hapi-tracing';
|
|
2
|
+
import { ecsFormat } from '@elastic/ecs-pino-format';
|
|
3
|
+
import { config } from "../../../../config/index.js";
|
|
4
|
+
const logConfig = config.get('log');
|
|
5
|
+
const serviceName = config.get('serviceName');
|
|
6
|
+
const serviceVersion = config.get('serviceVersion');
|
|
7
|
+
const formatters = {
|
|
8
|
+
ecs: {
|
|
9
|
+
...ecsFormat(),
|
|
10
|
+
base: {
|
|
11
|
+
service: {
|
|
12
|
+
name: serviceName,
|
|
13
|
+
type: 'nodeJs',
|
|
14
|
+
version: serviceVersion
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
'pino-pretty': {
|
|
19
|
+
transport: {
|
|
20
|
+
target: 'pino-pretty'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const loggerOptions = {
|
|
25
|
+
enabled: logConfig.enabled,
|
|
26
|
+
ignorePaths: ['/health'],
|
|
27
|
+
redact: {
|
|
28
|
+
paths: logConfig.redact,
|
|
29
|
+
remove: true
|
|
30
|
+
},
|
|
31
|
+
level: logConfig.level,
|
|
32
|
+
...formatters[logConfig.format],
|
|
33
|
+
mixin() {
|
|
34
|
+
const mixinValues = {};
|
|
35
|
+
const traceId = getTraceId();
|
|
36
|
+
if (traceId) {
|
|
37
|
+
mixinValues.trace = {
|
|
38
|
+
id: traceId
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return mixinValues;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=logger-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-options.js","names":["getTraceId","ecsFormat","config","logConfig","get","serviceName","serviceVersion","formatters","ecs","base","service","name","type","version","transport","target","loggerOptions","enabled","ignorePaths","redact","paths","remove","level","format","mixin","mixinValues","traceId","trace","id"],"sources":["../../../../../src/server/common/helpers/logging/logger-options.ts"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\nimport { ecsFormat } from '@elastic/ecs-pino-format'\nimport { type Options } from 'hapi-pino'\nimport { type LoggerOptions, type TransportSingleOptions } from 'pino'\n\nimport { config } from '~/src/config/index.js'\n\nconst logConfig = config.get('log')\nconst serviceName = config.get('serviceName')\nconst serviceVersion = config.get('serviceVersion')\n\nconst formatters: {\n ecs: Omit<LoggerOptions, 'mixin' | 'transport'>\n 'pino-pretty': { transport: TransportSingleOptions }\n} = {\n ecs: {\n ...ecsFormat(),\n base: {\n service: {\n name: serviceName,\n type: 'nodeJs',\n version: serviceVersion\n }\n }\n },\n 'pino-pretty': { transport: { target: 'pino-pretty' } }\n}\n\nexport const loggerOptions = {\n enabled: logConfig.enabled,\n ignorePaths: ['/health'],\n redact: {\n paths: logConfig.redact,\n remove: true\n },\n level: logConfig.level,\n ...formatters[logConfig.format],\n mixin() {\n const mixinValues: { trace?: { id: string } } = {}\n const traceId = getTraceId()\n if (traceId) {\n mixinValues.trace = { id: traceId }\n }\n return mixinValues\n }\n} satisfies Options\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,qBAAqB;AAChD,SAASC,SAAS,QAAQ,0BAA0B;AAIpD,SAASC,MAAM;AAEf,MAAMC,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;AACnC,MAAMC,WAAW,GAAGH,MAAM,CAACE,GAAG,CAAC,aAAa,CAAC;AAC7C,MAAME,cAAc,GAAGJ,MAAM,CAACE,GAAG,CAAC,gBAAgB,CAAC;AAEnD,MAAMG,UAGL,GAAG;EACFC,GAAG,EAAE;IACH,GAAGP,SAAS,CAAC,CAAC;IACdQ,IAAI,EAAE;MACJC,OAAO,EAAE;QACPC,IAAI,EAAEN,WAAW;QACjBO,IAAI,EAAE,QAAQ;QACdC,OAAO,EAAEP;MACX;IACF;EACF,CAAC;EACD,aAAa,EAAE;IAAEQ,SAAS,EAAE;MAAEC,MAAM,EAAE;IAAc;EAAE;AACxD,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG;EAC3BC,OAAO,EAAEd,SAAS,CAACc,OAAO;EAC1BC,WAAW,EAAE,CAAC,SAAS,CAAC;EACxBC,MAAM,EAAE;IACNC,KAAK,EAAEjB,SAAS,CAACgB,MAAM;IACvBE,MAAM,EAAE;EACV,CAAC;EACDC,KAAK,EAAEnB,SAAS,CAACmB,KAAK;EACtB,GAAGf,UAAU,CAACJ,SAAS,CAACoB,MAAM,CAAC;EAC/BC,KAAKA,CAAA,EAAG;IACN,MAAMC,WAAuC,GAAG,CAAC,CAAC;IAClD,MAAMC,OAAO,GAAG1B,UAAU,CAAC,CAAC;IAC5B,IAAI0B,OAAO,EAAE;MACXD,WAAW,CAACE,KAAK,GAAG;QAAEC,EAAE,EAAEF;MAAQ,CAAC;IACrC;IACA,OAAOD,WAAW;EACpB;AACF,CAAmB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":["pino","loggerOptions","createLogger"],"sources":["../../../../../src/server/common/helpers/logging/logger.ts"],"sourcesContent":["import { pino } from 'pino'\n\nimport { loggerOptions } from '~/src/server/common/helpers/logging/logger-options.js'\n\nexport function createLogger() {\n return pino(loggerOptions)\n}\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,MAAM;AAE3B,SAASC,aAAa;AAEtB,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,OAAOF,IAAI,CAACC,aAAa,CAAC;AAC5B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.js","names":["hapiPino","loggerOptions","requestLogger","plugin","options"],"sources":["../../../../../src/server/common/helpers/logging/request-logger.ts"],"sourcesContent":["import { type ServerRegisterPluginObject } from '@hapi/hapi'\nimport hapiPino, { type Options } from 'hapi-pino'\n\nimport { loggerOptions } from '~/src/server/common/helpers/logging/logger-options.js'\n\nexport const requestLogger = {\n plugin: hapiPino,\n options: loggerOptions\n} satisfies ServerRegisterPluginObject<Options>\n"],"mappings":"AACA,OAAOA,QAAQ,MAAwB,WAAW;AAElD,SAASC,aAAa;AAEtB,OAAO,MAAMC,aAAa,GAAG;EAC3BC,MAAM,EAAEH,QAAQ;EAChBI,OAAO,EAAEH;AACX,CAA+C","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { tracing } from '@defra/hapi-tracing';
|
|
2
|
+
import { config } from "../../../../config/index.js";
|
|
3
|
+
|
|
4
|
+
// Explicitly declare the expected type
|
|
5
|
+
|
|
6
|
+
export const requestTracing = {
|
|
7
|
+
plugin: tracing,
|
|
8
|
+
options: {
|
|
9
|
+
tracingHeader: config.get('tracing').header
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=request-tracing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-tracing.js","names":["tracing","config","requestTracing","plugin","options","tracingHeader","get","header"],"sources":["../../../../../src/server/common/helpers/logging/request-tracing.js"],"sourcesContent":["import { tracing } from '@defra/hapi-tracing'\n\nimport { config } from '~/src/config/index.js'\n\n// Explicitly declare the expected type\n\nexport const requestTracing = {\n plugin: tracing,\n options: { tracingHeader: config.get('tracing').header }\n}\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,qBAAqB;AAE7C,SAASC,MAAM;;AAEf;;AAEA,OAAO,MAAMC,cAAc,GAAG;EAC5BC,MAAM,EAAEH,OAAO;EACfI,OAAO,EAAE;IAAEC,aAAa,EAAEJ,MAAM,CAACK,GAAG,CAAC,SAAS,CAAC,CAACC;EAAO;AACzD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Cluster, Redis } from 'ioredis';
|
|
2
|
+
import { config } from "../../../config/index.js";
|
|
3
|
+
import { createLogger } from "./logging/logger.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Setup Redis and provide a redis client
|
|
7
|
+
*
|
|
8
|
+
* Local development - 1 Redis instance
|
|
9
|
+
* Out in the wild - Elasticache / Redis Cluster with username and password
|
|
10
|
+
*/
|
|
11
|
+
export function buildRedisClient() {
|
|
12
|
+
const logger = createLogger();
|
|
13
|
+
const port = 6379;
|
|
14
|
+
const db = 0;
|
|
15
|
+
const redisConfig = config.get('redis');
|
|
16
|
+
const keyPrefix = redisConfig.keyPrefix;
|
|
17
|
+
const host = redisConfig.host;
|
|
18
|
+
let redisClient;
|
|
19
|
+
if (!config.get('isProduction')) {
|
|
20
|
+
logger.info('Connecting to Redis using single instance');
|
|
21
|
+
redisClient = new Redis({
|
|
22
|
+
port,
|
|
23
|
+
host,
|
|
24
|
+
db,
|
|
25
|
+
keyPrefix
|
|
26
|
+
});
|
|
27
|
+
} else {
|
|
28
|
+
logger.info('Connecting to Redis using cluster');
|
|
29
|
+
redisClient = new Cluster([{
|
|
30
|
+
host,
|
|
31
|
+
port
|
|
32
|
+
}], {
|
|
33
|
+
keyPrefix,
|
|
34
|
+
slotsRefreshTimeout: 2000,
|
|
35
|
+
dnsLookup: (address, callback) => callback(null, address),
|
|
36
|
+
redisOptions: {
|
|
37
|
+
username: redisConfig.username,
|
|
38
|
+
password: redisConfig.password,
|
|
39
|
+
db,
|
|
40
|
+
tls: {}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
redisClient.on('connect', () => {
|
|
45
|
+
logger.info('Connected to Redis server');
|
|
46
|
+
});
|
|
47
|
+
redisClient.on('close', () => {
|
|
48
|
+
logger.warn('Redis connection closed attempting reconnect with default behavior');
|
|
49
|
+
});
|
|
50
|
+
redisClient.on('error', error => {
|
|
51
|
+
logger.error(error, `Redis connection error ${error}.`);
|
|
52
|
+
});
|
|
53
|
+
return redisClient;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=redis-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-client.js","names":["Cluster","Redis","config","createLogger","buildRedisClient","logger","port","db","redisConfig","get","keyPrefix","host","redisClient","info","slotsRefreshTimeout","dnsLookup","address","callback","redisOptions","username","password","tls","on","warn","error"],"sources":["../../../../src/server/common/helpers/redis-client.js"],"sourcesContent":["import { Cluster, Redis } from 'ioredis'\n\nimport { config } from '~/src/config/index.js'\nimport { createLogger } from '~/src/server/common/helpers/logging/logger.js'\n\n/**\n * Setup Redis and provide a redis client\n *\n * Local development - 1 Redis instance\n * Out in the wild - Elasticache / Redis Cluster with username and password\n */\nexport function buildRedisClient() {\n const logger = createLogger()\n\n const port = 6379\n const db = 0\n const redisConfig = config.get('redis')\n const keyPrefix = redisConfig.keyPrefix\n const host = redisConfig.host\n let redisClient\n\n if (!config.get('isProduction')) {\n logger.info('Connecting to Redis using single instance')\n\n redisClient = new Redis({\n port,\n host,\n db,\n keyPrefix\n })\n } else {\n logger.info('Connecting to Redis using cluster')\n\n redisClient = new Cluster(\n [\n {\n host,\n port\n }\n ],\n {\n keyPrefix,\n slotsRefreshTimeout: 2000,\n dnsLookup: (address, callback) => callback(null, address),\n redisOptions: {\n username: redisConfig.username,\n password: redisConfig.password,\n db,\n tls: {}\n }\n }\n )\n }\n\n redisClient.on('connect', () => {\n logger.info('Connected to Redis server')\n })\n\n redisClient.on('close', () => {\n logger.warn(\n 'Redis connection closed attempting reconnect with default behavior'\n )\n })\n\n redisClient.on('error', (error) => {\n logger.error(error, `Redis connection error ${error}.`)\n })\n\n return redisClient\n}\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,KAAK,QAAQ,SAAS;AAExC,SAASC,MAAM;AACf,SAASC,YAAY;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAAG;EACjC,MAAMC,MAAM,GAAGF,YAAY,CAAC,CAAC;EAE7B,MAAMG,IAAI,GAAG,IAAI;EACjB,MAAMC,EAAE,GAAG,CAAC;EACZ,MAAMC,WAAW,GAAGN,MAAM,CAACO,GAAG,CAAC,OAAO,CAAC;EACvC,MAAMC,SAAS,GAAGF,WAAW,CAACE,SAAS;EACvC,MAAMC,IAAI,GAAGH,WAAW,CAACG,IAAI;EAC7B,IAAIC,WAAW;EAEf,IAAI,CAACV,MAAM,CAACO,GAAG,CAAC,cAAc,CAAC,EAAE;IAC/BJ,MAAM,CAACQ,IAAI,CAAC,2CAA2C,CAAC;IAExDD,WAAW,GAAG,IAAIX,KAAK,CAAC;MACtBK,IAAI;MACJK,IAAI;MACJJ,EAAE;MACFG;IACF,CAAC,CAAC;EACJ,CAAC,MAAM;IACLL,MAAM,CAACQ,IAAI,CAAC,mCAAmC,CAAC;IAEhDD,WAAW,GAAG,IAAIZ,OAAO,CACvB,CACE;MACEW,IAAI;MACJL;IACF,CAAC,CACF,EACD;MACEI,SAAS;MACTI,mBAAmB,EAAE,IAAI;MACzBC,SAAS,EAAEA,CAACC,OAAO,EAAEC,QAAQ,KAAKA,QAAQ,CAAC,IAAI,EAAED,OAAO,CAAC;MACzDE,YAAY,EAAE;QACZC,QAAQ,EAAEX,WAAW,CAACW,QAAQ;QAC9BC,QAAQ,EAAEZ,WAAW,CAACY,QAAQ;QAC9Bb,EAAE;QACFc,GAAG,EAAE,CAAC;MACR;IACF,CACF,CAAC;EACH;EAEAT,WAAW,CAACU,EAAE,CAAC,SAAS,EAAE,MAAM;IAC9BjB,MAAM,CAACQ,IAAI,CAAC,2BAA2B,CAAC;EAC1C,CAAC,CAAC;EAEFD,WAAW,CAACU,EAAE,CAAC,OAAO,EAAE,MAAM;IAC5BjB,MAAM,CAACkB,IAAI,CACT,oEACF,CAAC;EACH,CAAC,CAAC;EAEFX,WAAW,CAACU,EAAE,CAAC,OAAO,EAAGE,KAAK,IAAK;IACjCnB,MAAM,CAACmB,KAAK,CAACA,KAAK,EAAE,0BAA0BA,KAAK,GAAG,CAAC;EACzD,CAAC,CAAC;EAEF,OAAOZ,WAAW;AACpB","ignoreList":[]}
|