hof 22.8.4-unhandled-error-fix-beta.1 → 22.9.0-beta

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.
Files changed (329) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +30 -0
  3. package/config/hof-defaults.js +6 -1
  4. package/frontend/template-partials/views/layout.html +2 -8
  5. package/frontend/themes/gov-uk/styles/_cookie-banner.scss +0 -3
  6. package/hof-22.9.0.tgz +0 -0
  7. package/lib/settings.js +1 -0
  8. package/model/index.js +1 -1
  9. package/package/.eslintignore +1 -0
  10. package/package/CHANGELOG.md +232 -0
  11. package/package/LICENSE +21 -0
  12. package/package/README.md +1887 -0
  13. package/package/bin/hof-build +10 -0
  14. package/package/bin/hof-transpiler +12 -0
  15. package/package/build/helpers/importer.js +29 -0
  16. package/package/build/helpers/local.js +35 -0
  17. package/package/build/helpers/resolver/import.js +32 -0
  18. package/package/build/helpers/resolver/nearest-package-root.js +33 -0
  19. package/package/build/helpers/resolver/package.js +29 -0
  20. package/package/build/helpers/resolver.js +16 -0
  21. package/package/build/index.js +49 -0
  22. package/package/build/lib/env.js +36 -0
  23. package/package/build/lib/mkdir.js +9 -0
  24. package/package/build/lib/run.js +17 -0
  25. package/package/build/lib/spawn.js +18 -0
  26. package/package/build/tasks/browserify/compress.js +15 -0
  27. package/package/build/tasks/browserify/index.js +48 -0
  28. package/package/build/tasks/build/index.js +6 -0
  29. package/package/build/tasks/images/index.js +27 -0
  30. package/package/build/tasks/index.js +8 -0
  31. package/package/build/tasks/sass/index.js +67 -0
  32. package/package/build/tasks/translate/index.js +20 -0
  33. package/package/build/tasks/watch/index.js +161 -0
  34. package/package/components/address-lookup/default-model.js +76 -0
  35. package/package/components/address-lookup/defaults.js +25 -0
  36. package/package/components/address-lookup/index.js +251 -0
  37. package/package/components/address-lookup/templates/address-lookup.html +14 -0
  38. package/package/components/address-lookup/templates/address.html +22 -0
  39. package/package/components/address-lookup/templates/postcode.html +9 -0
  40. package/package/components/clear-session/Readme.md +46 -0
  41. package/package/components/clear-session/index.js +26 -0
  42. package/package/components/combine-and-loop-fields/Readme.md +42 -0
  43. package/package/components/combine-and-loop-fields/index.js +156 -0
  44. package/package/components/date/fields.js +16 -0
  45. package/package/components/date/index.js +172 -0
  46. package/package/components/date/templates/date.html +20 -0
  47. package/package/components/emailer/assets/images/govuk_logotype_email.png +0 -0
  48. package/package/components/emailer/assets/images/ho_crest_27px.png +0 -0
  49. package/package/components/emailer/assets/images/spacer.gif +0 -0
  50. package/package/components/emailer/email-service.js +51 -0
  51. package/package/components/emailer/emailer.js +53 -0
  52. package/package/components/emailer/index.js +74 -0
  53. package/package/components/emailer/transports/debug.js +74 -0
  54. package/package/components/emailer/transports/index.js +8 -0
  55. package/package/components/emailer/transports/ses.js +36 -0
  56. package/package/components/emailer/transports/smtp.js +26 -0
  57. package/package/components/emailer/transports/stub.js +5 -0
  58. package/package/components/emailer/views/layout.html +63 -0
  59. package/package/components/homeoffice-countries/index.js +22 -0
  60. package/package/components/index.js +13 -0
  61. package/package/components/notify/index.js +62 -0
  62. package/package/components/notify/notify.js +51 -0
  63. package/package/components/session-timeout-warning/index.js +67 -0
  64. package/package/components/summary/index.js +237 -0
  65. package/package/config/builder-defaults.js +45 -0
  66. package/package/config/component-defaults.js +13 -0
  67. package/package/config/hof-defaults.js +65 -0
  68. package/package/config/rate-limits.js +20 -0
  69. package/package/config/sanitisation-rules.js +32 -0
  70. package/package/controller/base-controller.js +296 -0
  71. package/package/controller/behaviour-hooks.js +51 -0
  72. package/package/controller/behaviour-session.js +64 -0
  73. package/package/controller/controller.js +258 -0
  74. package/package/controller/deprecate-error.js +10 -0
  75. package/package/controller/formatting/formatters.js +70 -0
  76. package/package/controller/formatting/index.js +32 -0
  77. package/package/controller/index.js +17 -0
  78. package/package/controller/validation/email.js +30 -0
  79. package/package/controller/validation/index.js +101 -0
  80. package/package/controller/validation/validators.js +181 -0
  81. package/package/controller/validation-error.js +14 -0
  82. package/package/frontend/govuk-template/build/config.js +24 -0
  83. package/package/frontend/govuk-template/build/govuk_template.html +102 -0
  84. package/package/frontend/govuk-template/build/index.js +23 -0
  85. package/package/frontend/govuk-template/govuk_template_generated.html +102 -0
  86. package/package/frontend/govuk-template/index.js +29 -0
  87. package/package/frontend/index.js +9 -0
  88. package/package/frontend/template-mixins/mixins/helpers.js +103 -0
  89. package/package/frontend/template-mixins/mixins/index.js +37 -0
  90. package/package/frontend/template-mixins/mixins/render.js +12 -0
  91. package/package/frontend/template-mixins/mixins/template-mixins.js +520 -0
  92. package/package/frontend/template-mixins/partials/forms/checkbox-group.html +47 -0
  93. package/package/frontend/template-mixins/partials/forms/checkbox.html +16 -0
  94. package/package/frontend/template-mixins/partials/forms/input-submit.html +1 -0
  95. package/package/frontend/template-mixins/partials/forms/input-text-date.html +37 -0
  96. package/package/frontend/template-mixins/partials/forms/input-text-group.html +45 -0
  97. package/package/frontend/template-mixins/partials/forms/option-group.html +43 -0
  98. package/package/frontend/template-mixins/partials/forms/select.html +17 -0
  99. package/package/frontend/template-mixins/partials/forms/textarea-group.html +37 -0
  100. package/package/frontend/template-mixins/partials/mixins/panel.html +4 -0
  101. package/package/frontend/template-partials/index.js +9 -0
  102. package/package/frontend/template-partials/translations/index.js +26 -0
  103. package/package/frontend/template-partials/translations/src/cy/base.json +4 -0
  104. package/package/frontend/template-partials/translations/src/cy/buttons.json +6 -0
  105. package/package/frontend/template-partials/translations/src/cy/cookies.json +104 -0
  106. package/package/frontend/template-partials/translations/src/cy/errorlist.json +6 -0
  107. package/package/frontend/template-partials/translations/src/cy/errors.json +18 -0
  108. package/package/frontend/template-partials/translations/src/cy/terms.json +28 -0
  109. package/package/frontend/template-partials/translations/src/en/accessibility.json +43 -0
  110. package/package/frontend/template-partials/translations/src/en/base.json +5 -0
  111. package/package/frontend/template-partials/translations/src/en/buttons.json +10 -0
  112. package/package/frontend/template-partials/translations/src/en/cookies.json +116 -0
  113. package/package/frontend/template-partials/translations/src/en/errorlist.json +7 -0
  114. package/package/frontend/template-partials/translations/src/en/errors.json +35 -0
  115. package/package/frontend/template-partials/translations/src/en/exit.json +5 -0
  116. package/package/frontend/template-partials/translations/src/en/fields.json +5 -0
  117. package/package/frontend/template-partials/translations/src/en/journey.json +6 -0
  118. package/package/frontend/template-partials/translations/src/en/save-and-exit.json +4 -0
  119. package/package/frontend/template-partials/translations/src/en/terms.json +28 -0
  120. package/package/frontend/template-partials/views/404.html +9 -0
  121. package/package/frontend/template-partials/views/accessibility.html +55 -0
  122. package/package/frontend/template-partials/views/confirm.html +8 -0
  123. package/package/frontend/template-partials/views/confirmation.html +19 -0
  124. package/package/frontend/template-partials/views/content/en/what-happens-next.md +0 -0
  125. package/package/frontend/template-partials/views/cookie-error.html +1 -0
  126. package/package/frontend/template-partials/views/cookies.html +84 -0
  127. package/package/frontend/template-partials/views/email/data-row.html +4 -0
  128. package/package/frontend/template-partials/views/email/formatted.html +12 -0
  129. package/package/frontend/template-partials/views/email/layout.html +63 -0
  130. package/package/frontend/template-partials/views/email/raw.html +11 -0
  131. package/package/frontend/template-partials/views/email/section-row.html +3 -0
  132. package/package/frontend/template-partials/views/error.html +20 -0
  133. package/package/frontend/template-partials/views/exit.html +9 -0
  134. package/package/frontend/template-partials/views/feedback-submitted.html +11 -0
  135. package/package/frontend/template-partials/views/layout.html +55 -0
  136. package/package/frontend/template-partials/views/partials/analytics-table.html +25 -0
  137. package/package/frontend/template-partials/views/partials/back.html +5 -0
  138. package/package/frontend/template-partials/views/partials/bullet-list.html +7 -0
  139. package/package/frontend/template-partials/views/partials/confirmation-alert.html +6 -0
  140. package/package/frontend/template-partials/views/partials/continue.html +5 -0
  141. package/package/frontend/template-partials/views/partials/cookie-banner.html +29 -0
  142. package/package/frontend/template-partials/views/partials/cookie-notification.html +4 -0
  143. package/package/frontend/template-partials/views/partials/cookie-settings-button.html +1 -0
  144. package/package/frontend/template-partials/views/partials/cookie-settings-radio.html +8 -0
  145. package/package/frontend/template-partials/views/partials/details-summary.html +8 -0
  146. package/package/frontend/template-partials/views/partials/external-link.html +1 -0
  147. package/package/frontend/template-partials/views/partials/form.html +10 -0
  148. package/package/frontend/template-partials/views/partials/gatag.html +60 -0
  149. package/package/frontend/template-partials/views/partials/head.html +31 -0
  150. package/package/frontend/template-partials/views/partials/heading.html +11 -0
  151. package/package/frontend/template-partials/views/partials/items-table.html +32 -0
  152. package/package/frontend/template-partials/views/partials/maincontent-left.html +10 -0
  153. package/package/frontend/template-partials/views/partials/navigation.html +8 -0
  154. package/package/frontend/template-partials/views/partials/page.html +23 -0
  155. package/package/frontend/template-partials/views/partials/panel-indent.html +3 -0
  156. package/package/frontend/template-partials/views/partials/session-cookies-table.html +28 -0
  157. package/package/frontend/template-partials/views/partials/session-timeout-warning.html +38 -0
  158. package/package/frontend/template-partials/views/partials/summary-table-row.html +14 -0
  159. package/package/frontend/template-partials/views/partials/summary-table.html +8 -0
  160. package/package/frontend/template-partials/views/partials/table.html +18 -0
  161. package/package/frontend/template-partials/views/partials/validation-list.html +3 -0
  162. package/package/frontend/template-partials/views/partials/validation-summary.html +25 -0
  163. package/package/frontend/template-partials/views/partials/warn.html +7 -0
  164. package/package/frontend/template-partials/views/rate-limit-error.html +10 -0
  165. package/package/frontend/template-partials/views/save-and-exit.html +17 -0
  166. package/package/frontend/template-partials/views/service-unavailable.html +13 -0
  167. package/package/frontend/template-partials/views/session-timeout.html +7 -0
  168. package/package/frontend/template-partials/views/step.html +14 -0
  169. package/package/frontend/template-partials/views/terms.html +26 -0
  170. package/package/frontend/themes/gov-uk/client-js/cookieSettings.js +145 -0
  171. package/package/frontend/themes/gov-uk/client-js/govuk-cookies.js +121 -0
  172. package/package/frontend/themes/gov-uk/client-js/index.js +27 -0
  173. package/package/frontend/themes/gov-uk/client-js/session-timeout-dialog.js +348 -0
  174. package/package/frontend/themes/gov-uk/client-js/skip-to-main.js +19 -0
  175. package/package/frontend/themes/gov-uk/index.js +9 -0
  176. package/package/frontend/themes/gov-uk/styles/_base.scss +17 -0
  177. package/package/frontend/themes/gov-uk/styles/_check_your_answers.scss +155 -0
  178. package/package/frontend/themes/gov-uk/styles/_cookie-banner.scss +111 -0
  179. package/package/frontend/themes/gov-uk/styles/_cookie-settings.scss +33 -0
  180. package/package/frontend/themes/gov-uk/styles/_govuk_frontend_toolkit.scss +23 -0
  181. package/package/frontend/themes/gov-uk/styles/_helpers.scss +5 -0
  182. package/package/frontend/themes/gov-uk/styles/_layout.scss +125 -0
  183. package/package/frontend/themes/gov-uk/styles/_panel-indent.scss +27 -0
  184. package/package/frontend/themes/gov-uk/styles/_pdf.scss +42 -0
  185. package/package/frontend/themes/gov-uk/styles/_session-timeout-dialog.scss +121 -0
  186. package/package/frontend/themes/gov-uk/styles/_typography.scss +27 -0
  187. package/package/frontend/themes/gov-uk/styles/_variables.scss +11 -0
  188. package/package/frontend/themes/gov-uk/styles/govuk.scss +43 -0
  189. package/package/frontend/themes/gov-uk/styles/mixins.scss +16 -0
  190. package/package/frontend/themes/gov-uk/styles/modules/_alerts.scss +73 -0
  191. package/package/frontend/themes/gov-uk/styles/modules/_buttons.scss +5 -0
  192. package/package/frontend/themes/gov-uk/styles/modules/_character-count.scss +8 -0
  193. package/package/frontend/themes/gov-uk/styles/modules/_confirm-page.scss +20 -0
  194. package/package/frontend/themes/gov-uk/styles/modules/_lists.scss +5 -0
  195. package/package/frontend/themes/gov-uk/styles/modules/_progressive-reveal.scss +17 -0
  196. package/package/frontend/themes/gov-uk/styles/modules/_validation.scss +51 -0
  197. package/package/frontend/themes/index.js +5 -0
  198. package/package/frontend/toolkit/assets/images/passports/new-window-link-blue.png +0 -0
  199. package/package/frontend/toolkit/assets/images/passports/new-window-link.png +0 -0
  200. package/package/frontend/toolkit/assets/images/spinner.gif +0 -0
  201. package/package/frontend/toolkit/assets/javascript/character-count.js +99 -0
  202. package/package/frontend/toolkit/assets/javascript/form-focus.js +101 -0
  203. package/package/frontend/toolkit/assets/javascript/helpers.js +177 -0
  204. package/package/frontend/toolkit/assets/javascript/progressive-reveal.js +72 -0
  205. package/package/frontend/toolkit/assets/javascript/validation.js +71 -0
  206. package/package/frontend/toolkit/assets/javascript/vendor/details.polyfill.js +189 -0
  207. package/package/frontend/toolkit/assets/javascript/vendor/indexof.polyfill.js +39 -0
  208. package/package/frontend/toolkit/assets/javascript/vendor/safari-cachebuster.js +6 -0
  209. package/package/frontend/toolkit/assets/stylesheets/_base.scss +17 -0
  210. package/package/frontend/toolkit/assets/stylesheets/_helpers.scss +5 -0
  211. package/package/frontend/toolkit/assets/stylesheets/_layout.scss +118 -0
  212. package/package/frontend/toolkit/assets/stylesheets/_typography.scss +27 -0
  213. package/package/frontend/toolkit/assets/stylesheets/_variables.scss +11 -0
  214. package/package/frontend/toolkit/assets/stylesheets/app.scss +30 -0
  215. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_buttons.scss +47 -0
  216. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_details.scss +38 -0
  217. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_elements-typography.scss +175 -0
  218. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_forms.scss +167 -0
  219. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_helpers.scss +39 -0
  220. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_layout.scss +67 -0
  221. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_lists.scss +40 -0
  222. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_panels.scss +29 -0
  223. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_reset.scss +33 -0
  224. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/_tables.scss +33 -0
  225. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/forms/_form-block-labels.scss +63 -0
  226. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/forms/_form-date.scss +39 -0
  227. package/package/frontend/toolkit/assets/stylesheets/govuk-elements/forms/_form-validation.scss +63 -0
  228. package/package/frontend/toolkit/assets/stylesheets/mixins.scss +16 -0
  229. package/package/frontend/toolkit/assets/stylesheets/modules/_alerts.scss +73 -0
  230. package/package/frontend/toolkit/assets/stylesheets/modules/_buttons.scss +5 -0
  231. package/package/frontend/toolkit/assets/stylesheets/modules/_confirm-page.scss +20 -0
  232. package/package/frontend/toolkit/assets/stylesheets/modules/_lists.scss +5 -0
  233. package/package/frontend/toolkit/assets/stylesheets/modules/_progressive-reveal.scss +17 -0
  234. package/package/frontend/toolkit/assets/stylesheets/modules/_validation.scss +51 -0
  235. package/package/frontend/toolkit/index.js +10 -0
  236. package/package/index.js +351 -0
  237. package/package/lib/deindex.js +18 -0
  238. package/package/lib/encryption.js +23 -0
  239. package/package/lib/ga-tag.js +89 -0
  240. package/package/lib/health.js +26 -0
  241. package/package/lib/helpers.js +66 -0
  242. package/package/lib/logger.js +65 -0
  243. package/package/lib/markdown.js +46 -0
  244. package/package/lib/router.js +111 -0
  245. package/package/lib/serve-static.js +12 -0
  246. package/package/lib/sessions.js +82 -0
  247. package/package/lib/settings.js +74 -0
  248. package/package/lib/which.js +28 -0
  249. package/package/middleware/cookies.js +43 -0
  250. package/package/middleware/deep-translate.js +32 -0
  251. package/package/middleware/errors.js +119 -0
  252. package/package/middleware/index.js +10 -0
  253. package/package/middleware/not-found.js +38 -0
  254. package/package/middleware/rate-limiter.js +98 -0
  255. package/package/middleware/service-unavailable.js +64 -0
  256. package/package/model/apis/axios-settings.js +21 -0
  257. package/package/model/apis/html-to-pdf-converter.js +35 -0
  258. package/package/model/apis/index.js +5 -0
  259. package/package/model/index.js +348 -0
  260. package/package/package.json +147 -0
  261. package/package/sandbox/README.md +66 -0
  262. package/package/sandbox/apps/sandbox/behaviours/clear-session.js +8 -0
  263. package/package/sandbox/apps/sandbox/behaviours/country-select.js +10 -0
  264. package/package/sandbox/apps/sandbox/behaviours/international-number.js +22 -0
  265. package/package/sandbox/apps/sandbox/fields.js +128 -0
  266. package/package/sandbox/apps/sandbox/index.js +99 -0
  267. package/package/sandbox/apps/sandbox/lib/staticAppealStages.js +189 -0
  268. package/package/sandbox/apps/sandbox/sections/summary-data-sections.js +43 -0
  269. package/package/sandbox/apps/sandbox/translations/src/en/errors.json +5 -0
  270. package/package/sandbox/apps/sandbox/translations/src/en/exit.json +4 -0
  271. package/package/sandbox/apps/sandbox/translations/src/en/fields.json +101 -0
  272. package/package/sandbox/apps/sandbox/translations/src/en/journey.json +7 -0
  273. package/package/sandbox/apps/sandbox/translations/src/en/pages.json +72 -0
  274. package/package/sandbox/apps/sandbox/translations/src/en/validation.json +54 -0
  275. package/package/sandbox/apps/sandbox/views/form-guidance-link.html +8 -0
  276. package/package/sandbox/apps/sandbox/views/save-and-exit.html +19 -0
  277. package/package/sandbox/assets/images/icons/icon-caret-left.png +0 -0
  278. package/package/sandbox/assets/images/icons/icon-complete.png +0 -0
  279. package/package/sandbox/assets/images/icons/icon-cross-remove-sign.png +0 -0
  280. package/package/sandbox/assets/js/index.js +70 -0
  281. package/package/sandbox/assets/scss/app.scss +27 -0
  282. package/package/sandbox/codecept.conf.js +15 -0
  283. package/package/sandbox/config.js +17 -0
  284. package/package/sandbox/package.json +26 -0
  285. package/package/sandbox/server.js +23 -0
  286. package/package/sandbox/yarn.lock +262 -0
  287. package/package/transpiler/index.js +2 -0
  288. package/package/transpiler/lib/aggregate.js +32 -0
  289. package/package/transpiler/lib/build.js +15 -0
  290. package/package/transpiler/lib/compile.js +12 -0
  291. package/package/transpiler/lib/expand-dirs.js +14 -0
  292. package/package/transpiler/lib/write-files.js +24 -0
  293. package/package/utilities/autofill/index.js +189 -0
  294. package/package/utilities/autofill/inputs.js +60 -0
  295. package/package/utilities/countries.js +12 -0
  296. package/package/utilities/helpers/index.js +189 -0
  297. package/package/utilities/index.js +9 -0
  298. package/package/utilities/reqres/index.js +18 -0
  299. package/package/utilities/test-data/data/domain.json +7 -0
  300. package/package/utilities/test-data/data/firstname.json +16 -0
  301. package/package/utilities/test-data/data/lastname.json +10 -0
  302. package/package/utilities/test-data/data/postcode.json +12 -0
  303. package/package/utilities/test-data/data/streetname.json +8 -0
  304. package/package/utilities/test-data/data/streetsuffix.json +7 -0
  305. package/package/utilities/test-data/data/town.json +9 -0
  306. package/package/utilities/test-data/index.js +67 -0
  307. package/package/wizard/behaviours/complete.js +20 -0
  308. package/package/wizard/behaviours/index.js +5 -0
  309. package/package/wizard/index.js +124 -0
  310. package/package/wizard/middleware/back-links.js +68 -0
  311. package/package/wizard/middleware/check-complete.js +13 -0
  312. package/package/wizard/middleware/check-progress.js +139 -0
  313. package/package/wizard/middleware/check-session.js +17 -0
  314. package/package/wizard/middleware/csrf.js +47 -0
  315. package/package/wizard/middleware/session-model.js +11 -0
  316. package/package/wizard/middleware/session.js +9 -0
  317. package/package/wizard/model.js +29 -0
  318. package/package/wizard/util/constants.js +5 -0
  319. package/package/wizard/util/helpers.js +19 -0
  320. package/package.json +5 -6
  321. package/.editorconfig +0 -10
  322. package/.github/workflows/automate-publish.yml +0 -38
  323. package/.github/workflows/automate-tag.yml +0 -78
  324. package/.istanbul.yml +0 -20
  325. package/.nyc_output/be573ac3-d055-4910-a088-9d41b5345cec.json +0 -1
  326. package/.nyc_output/processinfo/be573ac3-d055-4910-a088-9d41b5345cec.json +0 -1
  327. package/.nyc_output/processinfo/index.json +0 -1
  328. package/codeReviewChecklist.md +0 -22
  329. package/pull_request_template.md +0 -16
package/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## 2025-08-14, Version 22.9.1 (Stable), @dk4g
2
+
3
+ ### Added
4
+ - Added `showCookiesBanner` configuration flag to control cookie banner display
5
+ - Automatically shows banner when `GA_TAG` or `GA_4_TAG` environment variables are present
6
+ - Defaults to `false` when no Google Analytics is configured
7
+ - Can be explicitly controlled via `SHOW_COOKIES_BANNER` environment variable
8
+
9
+ ### Changed
10
+ - Cookie banner now intelligently displays based on GA configuration
11
+ - Improved cookie consent UX by hiding banner when GA is not enabled
12
+ - **Layout template updated**: Projects that override the default `layout` template should update their custom templates to include the new `showCookiesBanner` logic. If you inherit from HOF's layout template, no action is required.
13
+
14
+ ### Migration Notes
15
+ - **Custom Layout Templates**: If your project overrides the default HOF layout template, ensure your custom template includes the cookie banner conditional logic using the new `showCookiesBanner` configuration flag. Check the updated HOF layout template for reference implementation.
16
+
1
17
  ## 2025-07-24, Version 22.8.4 (Stable), @vivekkumar-ho
2
18
  ### Security
3
19
  - Upgraded axios version to address a security vulnerability
package/README.md CHANGED
@@ -859,6 +859,36 @@ You can also provide an array of healthcheck URLs with `healthcheckUrls`,
859
859
  should you not want to throw a Cookies required error when requesting the app with specific URLs.
860
860
  Kubernetes healthcheck URLs are provided as defaults if no overrides are supplied.
861
861
 
862
+ ### Cookie Banner Control
863
+
864
+ > **Available from version 22.9.1**
865
+
866
+ | Variable | Description | Default | Example |
867
+ |----------|-------------|---------|---------|
868
+ | `SHOW_COOKIES_BANNER` | Controls whether the cookies banner is displayed | Auto-detected based on GA tags | `true`, `false` |
869
+
870
+ **Behavior:**
871
+ - If `SHOW_COOKIES_BANNER` is explicitly set, that value is used
872
+ - If not set, banner is automatically shown when `GA_TAG` or `GA_4_TAG` is present
873
+ - If no GA tags are configured, banner is hidden by default
874
+
875
+ **Examples:**
876
+ ```bash
877
+ # Explicitly show banner regardless of GA configuration
878
+ SHOW_COOKIES_BANNER=true
879
+
880
+ # Hide banner even when GA tags are present
881
+ SHOW_COOKIES_BANNER=false
882
+ GA_TAG=UA-12345678-1
883
+
884
+ # Auto-detect (recommended) - shows banner when GA is configured
885
+ GA_TAG=UA-12345678-1 # Banner will show
886
+ GA_4_TAG=G-XXXXXXXXXX # Banner will show
887
+ # (no GA tags) # Banner will be hidden
888
+ ```
889
+
890
+ **Note:** If you have a custom layout template that overrides the default HOF layout, you'll need to update it to include the new `showCookiesBanner` logic. Projects that inherit from the default HOF layout template will automatically receive this functionality.
891
+
862
892
  ## Service Unavailable
863
893
  Allows a service to be paused when required and then resumed. It ensures that anyone using the service that lands on any part of the form is diverted to a "Service Unavailable" page which will communicate to the user that the service is not available at this time.
864
894
 
@@ -25,8 +25,13 @@ const defaults = {
25
25
  host: process.env.HOST || '0.0.0.0',
26
26
  port: process.env.PORT || '8080',
27
27
  env: process.env.NODE_ENV || 'development',
28
- gaTagId: process.env.GA_TAG || 'Test-GA-Tag',
28
+ gaTagId: process.env.GA_TAG,
29
29
  ga4TagId: process.env.GA_4_TAG,
30
+ showCookiesBanner: parseBoolean(
31
+ process.env.SHOW_COOKIES_BANNER,
32
+ Boolean(process.env.GA_TAG || process.env.GA_4_TAG),
33
+ 'SHOW_COOKIES_BANNER'
34
+ ),
30
35
  // added to allow support for multiple HOF forms using GTM to customize how they track page views
31
36
  gtm: {
32
37
  tagId: process.env.GTM_TAG || false,
@@ -33,15 +33,9 @@
33
33
  </div>
34
34
  {{/main}}
35
35
  {{$cookieMessage}}
36
- {{#gaTagId}}
36
+ {{#showCookiesBanner}}
37
37
  {{> partials-cookie-banner}}
38
- {{/gaTagId}}
39
- {{^gaTagId}}
40
- <p class="no-ga-tag">
41
- {{#t}}cookies.banner.message{{/t}}
42
- <a href="/cookies">{{#t}}cookies.banner.link{{/t}}</a>
43
- </p>
44
- {{/gaTagId}}
38
+ {{/showCookiesBanner}}
45
39
  {{/cookieMessage}}
46
40
  {{$footerSupportLinks}}
47
41
  <ul class="govuk-footer__inline-list">
@@ -4,9 +4,6 @@
4
4
  .js-enabled {
5
5
  display: none;
6
6
  }
7
- p.no-ga-tag {
8
- padding: 10px 0;
9
- }
10
7
  }
11
8
 
12
9
  #cookie-banner {
package/hof-22.9.0.tgz ADDED
Binary file
package/lib/settings.js CHANGED
@@ -63,6 +63,7 @@ module.exports = async (app, config) => {
63
63
 
64
64
  app.use((req, res, next) => {
65
65
  res.locals.baseUrl = req.baseUrl;
66
+ res.locals.showCookiesBanner = config.showCookiesBanner;
66
67
  next();
67
68
  });
68
69
 
package/model/index.js CHANGED
@@ -166,7 +166,7 @@ module.exports = class Model extends EventEmitter {
166
166
  if (typeof callback === 'function') {
167
167
  callback(error);
168
168
  }
169
- throw error;
169
+ return error;
170
170
  }
171
171
  }
172
172
 
@@ -0,0 +1 @@
1
+ sandbox/public/*
@@ -0,0 +1,232 @@
1
+ ## 2025-08-14, Version 22.9.1 (Stable), @dk4g
2
+
3
+ ### Added
4
+ - Added `showCookiesBanner` configuration flag to control cookie banner display
5
+ - Automatically shows banner when `GA_TAG` or `GA_4_TAG` environment variables are present
6
+ - Defaults to `false` when no Google Analytics is configured
7
+ - Can be explicitly controlled via `SHOW_COOKIES_BANNER` environment variable
8
+
9
+ ### Changed
10
+ - Cookie banner now intelligently displays based on GA configuration
11
+ - Improved cookie consent UX by hiding banner when GA is not enabled
12
+ - **Layout template updated**: Projects that override the default `layout` template should update their custom templates to include the new `showCookiesBanner` logic. If you inherit from HOF's layout template, no action is required.
13
+
14
+ ### Migration Notes
15
+ - **Custom Layout Templates**: If your project overrides the default HOF layout template, ensure your custom template includes the cookie banner conditional logic using the new `showCookiesBanner` configuration flag. Check the updated HOF layout template for reference implementation.
16
+
17
+ ## 2025-07-24, Version 22.8.4 (Stable), @vivekkumar-ho
18
+ ### Security
19
+ - Upgraded axios version to address a security vulnerability
20
+
21
+ ## 2025-07-16, Version 22.8.3 (Stable), @vivekkumar-ho
22
+ ### Changed
23
+ - Updated the cookies page to include the GA container ID, which corresponds to the Measurement ID.
24
+
25
+ ## 2025-07-04, Version 22.8.1 (Stable), @gregaustinHO
26
+ ### Added
27
+ - Add support for source maps while debugging
28
+
29
+ ## 2025-07-09, Version 22.7.6 (Stable), @robertdeniszczyc2 @sulthan-ahmed
30
+ ### Changed
31
+ - Updated SVG handling and related dependencies to address issues and improve compatibility.
32
+
33
+ ## 2025-05-29, Version 22.7.2 (Stable), @Rhodine-orleans-lindsay
34
+ ### Fixed
35
+ - Service unavailable text can now use html
36
+
37
+ ## 2025-05-28, Version 22.7.0 (Stable), @Rhodine-orleans-lindsay @sulthan-ahmed
38
+ ### Added
39
+ - 'Service Unavailable' functionality added which allows for services to redirect to a 'Service Unavailable' page when there is a need to pause a service for things like maintenance:
40
+ - Adds 'service unavailable' error middleware
41
+ - Includes default service unavailable html view
42
+ - Includes flag to set `SERVICE_UNAVAILABLE` config to true to enable the functionality
43
+ ### Changed
44
+ - Error pages can now show the service name in the title and journey header
45
+ ### Security
46
+ - Updates patch and minor dependencies
47
+
48
+ ## 2025-05-09, Version 22.6.0 (Stable), @vivekkumar-ho
49
+ ### Changed
50
+ - Support for passing `maxlengthAttribute` property for input-text field. The HTML maxlength attribute is applied when `maxlengthAttribute: true` and the `maxlength` validator are specified in the field config
51
+
52
+ ## 2025-05-06, Version 22.5.2 (Stable), @Rhodine-orleans-lindsay
53
+ ### Fixed
54
+ - Hints for radio button options are now aligned correctly
55
+ ### Security
56
+ - Updates patch and minor dependencies
57
+
58
+ ## 2025-04-15, Version 22.5.0 (Stable), @shamiluwais
59
+ ### Changed
60
+ - Refactors notify component to enable email attachments
61
+
62
+ ## 2025-04-15, Version 22.4.0 (Stable), @Rhodine-orleans-lindsay
63
+ ### Changed
64
+ - Amends page title format to follow the govuk design system so that the service name is now included in the the title by setting the `header` or `serviceName` in journey.json.
65
+ - Where page titles need to be different from page headings, if `title` is set pages.json, it can be used in the page title instead of `header`.
66
+ ### Security
67
+ - Updates patch and minor dependencies
68
+
69
+ ## 2025-03-17, Version 22.3.2 (Stable), @Rhodine-orleans-lindsay
70
+ ### Fixed
71
+ - Error message now shows above textarea field if label is hidden
72
+ ### Security
73
+ - Updates patch and minor dependencies
74
+
75
+ ## 2025-03-07, Version 22.3.0 (Stable), @robertdeniszczyc2 @sulthan-ahmed
76
+ ### Fixed
77
+ - the validator `ukmobilephone` now accepts `+447 and 07`
78
+ ### Security
79
+ - Updates minor dependencies for `axios`
80
+
81
+ ## 2025-03-07, Version 22.2.0 (Stable), @Rhodine-orleans-lindsay
82
+ ### Changed
83
+ - Amends cookie config to allow limited changes to sameSite property during safe cross-origin navigations.
84
+ ### Security
85
+ - Updates patch and minor dependencies
86
+
87
+ ## 2025-01-24, Version 22.1.0 (Stable), @robertdeniszczyc2 @sulthan-ahmed
88
+ * ⛓️‍💥 **BREAKING CHANGE** : removed `nodemailer-smtp-transport` replaced with `nodemailer`.
89
+ - The nodemailer-smtp-transport package has been removed due to a critical vulnerability, and its functionality has been consolidated under nodemailer.
90
+ - 👊 Impact : Any functions or configurations relying on nodemailer-smtp-transport must be updated to use nodemailer.
91
+ - 🎬 Action: Rewrite code to utilize nodemailer as the replacement, ensuring compatibility and security.
92
+
93
+ ## 2025-01-17, Version 22.0.0 (Stable), @Rhodine-orleans-lindsay
94
+ * Adds session timeout warning
95
+ - user can stay on page or exit form
96
+ - adds exit html
97
+ - user can stay signed in or save and exit the form if the form is a save and exit form
98
+ - adds default save-and-exit html
99
+ - updates confirmation html to a static page
100
+ - allows for customisation of session timeout warning dialog content, exit and save-and-exit page content, and exit and save-and-exit steps
101
+ - Potential **_breaking change_**: Static pages should use the `{{<layout}}...{{/layout}}` tags instead of the `{{<partials-page}}...{{/partials-page}}` tags if the timeout warning should not be displayed.
102
+ * Fixes accessibility issues
103
+ * Sandbox area for testing hof changes
104
+ * Updates patch and minor dependency versions
105
+
106
+ ## 2024-07-22, Version 21.0.0 (Stable), @Rhodine-orleans-lindsay
107
+ * Replaces deprecated request module with axios
108
+ - refactors the hof model and apis to use axios instead of request
109
+ * Updates patch and minor dependency versions
110
+
111
+ ## 2024-04-24, Version 20.5.0 (Stable), @mislam987
112
+ * Add hint property to checkboxes to align with govuk design guidelines
113
+
114
+ ## 2024-02-29, Version 20.4.0 (Stable), @sulthan-ahmed
115
+ * Update version of govuk-frontend to 3.15
116
+ - this adds the new crown for the King
117
+ - this supports a lot of changes from the govuk design system
118
+ * Adds support for Google tag manager
119
+ * Fixes accessibility issues
120
+ * Sandbox area for testing hof changes
121
+ * Updates patch and minor versions including
122
+ - libphonenumber to 1.9.44
123
+ - nodemailer to 6.9.9
124
+ - ip to 1.1.9
125
+ - es5-ext to 0.10.63
126
+
127
+ ## 2020-06-02, Version 16.0.0 (Stable), @andymoody
128
+ * Update version of helmet to 3.22.0
129
+ * Update version of i18n-future to 2.0.0
130
+
131
+ ## 2020-06-01, Version 15.1.1
132
+ * Update hof-form-wizard to 5.1.1
133
+
134
+ ## 2020-05-16, Version 15.1.0
135
+ * Add support for configuring multiple views folders at the root level
136
+
137
+ ## 2020-04-29, Version 15.0.0 (Stable), @andymoody
138
+ * Update version of hof-template-mixins to 5.2.1
139
+ * Now supports hints on options for checkbox and radio groups
140
+ * Includes a breaking change to older-style 'grey-label' option groups
141
+
142
+ ## 2017-04-21, Version 12.0.0 (Stable), @lennym
143
+ * Renames to `hof`!
144
+ * Includes refactor of `hof-form-controller` to move error messaging to a render-time concern.
145
+ * Depecrates `Controller#Error` in favour of `Controller#ValidationError`
146
+
147
+ ## 2017-04-21, Version 11.0.0 (Stable), @lennym
148
+ * Adds themes. Ships with `hof-theme-govuk` as default.
149
+
150
+ ## 2017-03-14, Version 10.3.1 (Stable), @lennym
151
+ * Uses `_.merge` instead of `Object.assign` to combine default config with user-provided config.
152
+
153
+ ## 2017-03-02, Version 10.3.0 (Stable), @lennym
154
+ * Fixes i18n language settings. Now offers complete multi-language support
155
+ * Adding `--shared ./node_modules/hof-template-partials/translations` to hof-transpiler is no longer necessary. This is handled automatically within bootstrap.
156
+
157
+ ## 2017-02-22, Version 10.2.0 (Stable), @lennym
158
+ * Makes `views` directory on a route not throw if undefined and default directory does not exist
159
+
160
+ ## 2017-02-20, Version 10.1.0 (Stable), @lennym
161
+ * Adds behaviours option to global config and app config to support defining common behaviours
162
+ * Restores `baseController` option with deprecation warning
163
+
164
+ ## 2017-02-17, Version 10.0.0 (Stable), @joefitter
165
+ * _BREAKING_ - `clearSession` option on steps is removed
166
+ * _BREAKING_ - `mixin` option for fields defaults to `input-text` this means that fields that previously skipped rendering will now be rendered
167
+ * _BREAKING_ - `baseController` option removed
168
+
169
+ ## 2017-02-10, Version 9.3.1 (Stable), @josephchapman
170
+ * Allow GA script to load js and images form any path
171
+
172
+ ## 2017-02-10, Version 9.3.0 (Stable), @josephchapman
173
+ * CSP directives auto-amended with google url when gaTagId set
174
+
175
+ ## 2017-02-09, Version 9.2.0 (Stable), @josephchapman
176
+ * CSP directives can be extended with `csp` config
177
+ * Documentation reorganised
178
+ * Test fixtures reorganised
179
+
180
+ ## 2017-01-27, Version 9.1.0 (Stable), @lennym
181
+ * Allow CSP to be disabled to enable acceptance test to run
182
+
183
+ ## 2017-01-27, Version 9.0.1 (Stable), @lennym
184
+ * Major version update of hof-template-mixins
185
+
186
+ ## 2017-01-27, Version 9.0.0 (Stable), @lennym
187
+ * Major version updates of hof-form-wizard and hof-controllers
188
+
189
+ ## 2017-01-16, Version 8.1.0 (Stable), @josephchapman
190
+ * Add basic Content Security Policy (CSP) middleware
191
+ * Throw error if session.secret is not set in production
192
+
193
+ ## 2017-01-06, Version 8.0.1 (Stable), @josephchapman
194
+ * Fixes issue causing an error to be thrown when mounting middleware.
195
+
196
+ ## 2017-01-05, Version 8.0.0 (Stable), @josephchapman
197
+ * Add router in middleware stack for insertion of user middleware (#100)
198
+ * Potential **breaking change**: Prevent overwriting initialisation config with custom start config.
199
+ * Allow custom protocol, port and host to start method.
200
+ * Do not allow this configuration to override the global config
201
+ * Fix broken paths to views and translations
202
+
203
+ ## 2016-12-13, Version 7.0.0 (~~Stable~~), @josephchapman
204
+ * Pass `appConfig` through to **hof-wizard**
205
+ * Update to latest **hof-wizard** v1.1.0 so `appConfig` is passed to each `controller`
206
+ * Make `views` use **hof-template-partials** as default
207
+ * Remove `views` and `fields` from `defaults.js`
208
+ * **BREAKING CHANGE**: Throw if no base `fields` or route `fields` option is specified
209
+ * Breaks all instances of bootstrap overriding `views` and `fields` with boolean `false`
210
+ * Update documentation, typos
211
+ * Update tests, specifically where optional controller provided
212
+
213
+ ## 2016-07-20, Version 3.0.0 (Stable), @josephchapman
214
+ * Use hof-middleware.deepTranslate
215
+ * Use hof-middleware.notFound
216
+ * Remove assetPath option (Breaking)
217
+
218
+ ## 2016-07-18, Version 2.0.0 (Stable), @josephchapman
219
+ * Make async tests run and not fail on travis
220
+ * Use cookie middleware
221
+ * Hard-code local assetPath (`/public`)
222
+ * Replace `assets` option with `assetpath` (breaking change)
223
+
224
+ ## 2016-07-12, Version 1.0.1 (Stable), @josephchapman
225
+ * **hof-template-partials** 1.0.1 for common views and translations
226
+ * Fix i18n usage
227
+ * Invoke i18n
228
+ * Wait for i18n to become ready
229
+ * Fix router's optional paths
230
+ * Set the app to trust proxy
231
+ * Update cookies settings
232
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.