@govuk-pay/pay-js-commons 3.8.7 → 3.8.8

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 (86) hide show
  1. package/.github/workflows/run-tests.yml +3 -3
  2. package/.idea/codeStyles/Project.xml +2 -5
  3. package/.idea/misc.xml +0 -3
  4. package/.idea/sonarlint/issuestore/index.pb +0 -119
  5. package/images/custom/gwent-police.png +0 -0
  6. package/lib/analytics/cookies/validate.js +1 -24
  7. package/lib/analytics/dist/cookies.js +1 -24
  8. package/lib/analytics/index.js +0 -1
  9. package/lib/browsered/field-validation/field-validation.js +4 -22
  10. package/lib/constants/index.js +1 -1
  11. package/lib/index.js +2 -7
  12. package/lib/logging/format.js +1 -2
  13. package/lib/logging/index.js +1 -4
  14. package/lib/logging/keys.js +66 -33
  15. package/lib/logging/request-log-format.js +0 -2
  16. package/lib/nunjucks-filters/country-iso-to-name.js +1 -2
  17. package/lib/nunjucks-filters/datetime.js +0 -3
  18. package/lib/nunjucks-filters/remove-indefinite-articles.js +1 -0
  19. package/lib/nunjucks-filters/slugify.js +0 -1
  20. package/lib/utils/countries.js +8 -10
  21. package/lib/utils/currency-formatter.js +2 -10
  22. package/lib/utils/field-validation-checks.js +6 -22
  23. package/lib/utils/is-valid-email.js +2 -3
  24. package/package.json +3 -3
  25. package/sass/custom/gwent-police.scss +55 -0
  26. package/.idea/aws.xml +0 -11
  27. package/.idea/jpa-buddy.xml +0 -6
  28. package/.idea/sonarlint/issuestore/0/3/0398ccd0f49298b10a3d76a47800d2ebecd49859 +0 -0
  29. package/.idea/sonarlint/issuestore/0/a/0aafd45b83a7a2f2979edee0ecd4f69921cb6914 +0 -0
  30. package/.idea/sonarlint/issuestore/0/a/0ab90bbd755fb821ff9a7a389d27ecf24fde7721 +0 -0
  31. package/.idea/sonarlint/issuestore/0/f/0f2db5e04bd1a4d58f88f0b5e06da8f75879068c +0 -0
  32. package/.idea/sonarlint/issuestore/1/0/1059ffd486aaf829fa5d1e15979d3afff31267be +0 -0
  33. package/.idea/sonarlint/issuestore/1/b/1b953f6fcfc364492f8d5a0320de136123cf5e7b +0 -0
  34. package/.idea/sonarlint/issuestore/1/d/1d086eb8ad446fac3834cef1541ba21ae3251bcc +0 -0
  35. package/.idea/sonarlint/issuestore/1/f/1f037704682f11e39f492baff56efed0cdebda24 +0 -0
  36. package/.idea/sonarlint/issuestore/2/2/2237bd8a346687a1cac0fa10af53b9f44b83975d +0 -0
  37. package/.idea/sonarlint/issuestore/2/7/279de1c4b2460f3d77db4439c32d24a5e8f4daa5 +0 -0
  38. package/.idea/sonarlint/issuestore/2/8/28a669ba97fc48322050d552b704fee882e22ea1 +0 -0
  39. package/.idea/sonarlint/issuestore/2/c/2c2e25e54af134656f786492369f2d309af6fc5d +0 -0
  40. package/.idea/sonarlint/issuestore/2/d/2d83766dd283a47d86fda16cefdc1d9ff0e10ebf +0 -0
  41. package/.idea/sonarlint/issuestore/3/0/3095dbf3cf3c05f05d4f32eadb2235861331dceb +0 -0
  42. package/.idea/sonarlint/issuestore/3/f/3f1338f565197b8d3fae4ce389ffcf4781c0940a +0 -0
  43. package/.idea/sonarlint/issuestore/4/6/4618075fb32da882b46f5fa15732392152d50ecb +0 -0
  44. package/.idea/sonarlint/issuestore/5/9/59403cebb5f53e0d0d6a43d33c6d48735b723ef2 +0 -0
  45. package/.idea/sonarlint/issuestore/6/1/61f351241eb319746c9e47ca6a4c3a5d1622a391 +0 -0
  46. package/.idea/sonarlint/issuestore/6/6/66d847400b1fd796f14ab3b04c1c578a7266cde3 +0 -0
  47. package/.idea/sonarlint/issuestore/6/b/6bc677a389caa5fb3a8e282cbf69ade319fc9a21 +0 -0
  48. package/.idea/sonarlint/issuestore/6/d/6d5c5d647c0e0271ba0ce9383f68956c485b7109 +0 -0
  49. package/.idea/sonarlint/issuestore/6/d/6d86fb56fc16c3b07b7720091ec21623bfd901b6 +0 -0
  50. package/.idea/sonarlint/issuestore/6/f/6facc008124fe02a29743441c6504e92d6552fa4 +0 -0
  51. package/.idea/sonarlint/issuestore/7/2/72f6352a42775f83fdc03e7894ace532dbb6f517 +0 -0
  52. package/.idea/sonarlint/issuestore/7/3/73f8180a536551397babaf20e8ba02db8fcc8018 +0 -0
  53. package/.idea/sonarlint/issuestore/7/4/74f3a79eac0dbec82b9a27402e12d0073e08a5f8 +0 -0
  54. package/.idea/sonarlint/issuestore/7/5/758a4f5d479af1e5210875f0f98433be652f3fbe +0 -0
  55. package/.idea/sonarlint/issuestore/7/8/7876a5b99181b0fabab7cc0139177b0d28437231 +0 -0
  56. package/.idea/sonarlint/issuestore/7/a/7af2f4f8529d55f0d321898d1d1432bc82062bfb +0 -0
  57. package/.idea/sonarlint/issuestore/7/f/7f9487bbbd0beaa9bb22a2869949b73f98bcb381 +0 -0
  58. package/.idea/sonarlint/issuestore/8/1/8136864071632c6a6005186e654fffb6c71ab55c +0 -0
  59. package/.idea/sonarlint/issuestore/8/2/8278e8d1860b14a402edb0bf2dd8635b9494b825 +0 -0
  60. package/.idea/sonarlint/issuestore/8/9/89d7784ed3c4a135de160b8d15fa1ba408a1b95b +0 -0
  61. package/.idea/sonarlint/issuestore/8/c/8c479353042b750132c1b668ab300ad15cf62b6b +0 -0
  62. package/.idea/sonarlint/issuestore/8/e/8e8b5c51bd5ce0407afd8f6a27b00b6a4de1f7cc +0 -0
  63. package/.idea/sonarlint/issuestore/a/1/a16ffce9c4014536b0d5997f1ff408f19a8510f7 +0 -0
  64. package/.idea/sonarlint/issuestore/a/3/a3882a485e785ac85771fbc3472bc0f8db07e074 +0 -0
  65. package/.idea/sonarlint/issuestore/a/b/ab50b2d311d3896c85a763e50b918113b4ef432d +0 -0
  66. package/.idea/sonarlint/issuestore/a/c/ac144cdcf526351c17f77f4845a5e6d0c46c5420 +0 -0
  67. package/.idea/sonarlint/issuestore/b/3/b32d76c4339f54eb551e11b44e4442dba06ab61e +0 -0
  68. package/.idea/sonarlint/issuestore/b/3/b3f38ade028e88019dd06ebcf5ca13096ca42238 +0 -0
  69. package/.idea/sonarlint/issuestore/b/8/b8c547eabe39aba372c866c1536d31bb75113eae +0 -0
  70. package/.idea/sonarlint/issuestore/b/9/b990dd75f097078d3650d1f96db34389de3006f0 +0 -0
  71. package/.idea/sonarlint/issuestore/b/9/b9ccc38dcaeab6f307ef082a1949fb667086e1d4 +0 -0
  72. package/.idea/sonarlint/issuestore/b/f/bf508a13685ded4f0ec65ce26175cc8817dff2a4 +0 -0
  73. package/.idea/sonarlint/issuestore/c/0/c05b26827bd656232e66b52c6308aa5964872576 +0 -0
  74. package/.idea/sonarlint/issuestore/c/5/c58a0bc65aae46f70f89ccc3ee87b23d1ed6450a +0 -0
  75. package/.idea/sonarlint/issuestore/c/5/c5befeaa8e93d7c83f1cc31a8d2813217dcdb78a +0 -0
  76. package/.idea/sonarlint/issuestore/c/8/c8effc650c46f8b8849324e542704a2a4590fda1 +0 -0
  77. package/.idea/sonarlint/issuestore/d/6/d6ca95ce28b96fac596da957816f6d5c412d710e +0 -0
  78. package/.idea/sonarlint/issuestore/d/9/d90a7ced84c440cd9d5a64b40706da73ad5ddcc7 +0 -0
  79. package/.idea/sonarlint/issuestore/d/b/db86b36380665f2fa5018837e2883be30ccecfce +0 -0
  80. package/.idea/sonarlint/issuestore/e/5/e5132d8ae9db481b8157a52af70817a8c75a4285 +0 -0
  81. package/.idea/sonarlint/issuestore/e/8/e8dbcbeccb811bc561c49e95a487033a5e7b28fe +0 -0
  82. package/.idea/sonarlint/issuestore/e/a/ea864c9949202498771817849e38d80c7cba1e2b +0 -0
  83. package/.idea/sonarlint/issuestore/f/7/f7a87ae0426cafc2323c6c7ea540fb129c638c87 +0 -0
  84. package/.idea/sonarlint/issuestore/f/a/fa288d1472d29beccb489a676f68739ad365fc47 +0 -0
  85. package/.idea/sonarlint/issuestore/f/c/fc17fd10e100b024763ee6c8df2361587d6f282a +0 -0
  86. package/.idea/sonarlint/issuestore/f/c/fce3b30bccc478e9ebb36570f32eb3de1e4205cf +0 -0
@@ -14,7 +14,7 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
16
  - name: Git checkout
17
- uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f
17
+ uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3
18
18
  - name: Detect secrets
19
19
  uses: alphagov/pay-ci/actions/detect-secrets@master
20
20
 
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  steps:
26
26
  - name: Checkout
27
- uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f
27
+ uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3
28
28
  - name: Parse Node version
29
29
  run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT
30
30
  id: parse-node-version
@@ -33,7 +33,7 @@ jobs:
33
33
  with:
34
34
  node-version: "${{ steps.parse-node-version.outputs.NVMRC }}"
35
35
  - name: Cache NPM packages
36
- uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68
36
+ uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
37
37
  with:
38
38
  path: ~/.npm
39
39
  key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
@@ -10,12 +10,9 @@
10
10
  <option name="SPACES_WITHIN_IMPORTS" value="true" />
11
11
  </JSCodeStyleSettings>
12
12
  <JavaCodeStyleSettings>
13
- <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="20" />
14
- <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="20" />
13
+ <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="1000" />
14
+ <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="1000" />
15
15
  </JavaCodeStyleSettings>
16
- <ScalaCodeStyleSettings>
17
- <option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
18
- </ScalaCodeStyleSettings>
19
16
  <codeStyleSettings language="JavaScript">
20
17
  <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
21
18
  <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
package/.idea/misc.xml CHANGED
@@ -3,7 +3,4 @@
3
3
  <component name="ProjectRootManager">
4
4
  <output url="file://$PROJECT_DIR$/out" />
5
5
  </component>
6
- <component name="ProjectType">
7
- <option name="id" value="jpab" />
8
- </component>
9
6
  </project>
@@ -1,119 +0,0 @@
1
-
2
- A
3
- package-lock.json,f/a/fa288d1472d29beccb489a676f68739ad365fc47
4
- F
5
- src/browsered/index.js,8/1/8136864071632c6a6005186e654fffb6c71ab55c
6
- `
7
- 0images/custom/north-yorkshire-county-council.svg,8/c/8c479353042b750132c1b668ab300ad15cf62b6b
8
- _
9
- /images/custom/somerset-west-taunton-council.svg,7/5/758a4f5d479af1e5210875f0f98433be652f3fbe
10
- M
11
- images/custom/Sutton-logo.svg,6/b/6bc677a389caa5fb3a8e282cbf69ade319fc9a21
12
- Q
13
- !images/custom/portsmouth-logo.svg,c/0/c05b26827bd656232e66b52c6308aa5964872576
14
- M
15
- images/custom/nhsbsa-logo.svg,1/f/1f037704682f11e39f492baff56efed0cdebda24
16
- Z
17
- *images/custom/social-security-scotland.svg,8/9/89d7784ed3c4a135de160b8d15fa1ba408a1b95b
18
- T
19
- $sass/custom/disclosure-scotland.scss,d/b/db86b36380665f2fa5018837e2883be30ccecfce
20
- I
21
- sass/custom/rushmoor.scss,a/b/ab50b2d311d3896c85a763e50b918113b4ef432d
22
- ^
23
- .images/custom/scottish-government-planning.svg,b/9/b990dd75f097078d3650d1f96db34389de3006f0
24
- V
25
- &sass/custom/food-standards-agency.scss,6/1/61f351241eb319746c9e47ca6a4c3a5d1622a391
26
- T
27
- $sass/custom/gambling-commission.scss,7/8/7876a5b99181b0fabab7cc0139177b0d28437231
28
- h
29
- 8sass/custom/guys-and-st-thomas-nhs-foundation-trust.scss,2/7/279de1c4b2460f3d77db4439c32d24a5e8f4daa5
30
- q
31
- Asass/custom/guys-and-st-thomas-nhs-foundation-trust-nhs-care.scss,6/6/66d847400b1fd796f14ab3b04c1c578a7266cde3
32
- D
33
- sass/custom/hiw.scss,c/8/c8effc650c46f8b8849324e542704a2a4590fda1
34
- D
35
- sass/custom/kcc.scss,b/9/b9ccc38dcaeab6f307ef082a1949fb667086e1d4
36
- I
37
- sass/custom/kingston.scss,4/6/4618075fb32da882b46f5fa15732392152d50ecb
38
- E
39
- sass/custom/lbbd.scss,1/b/1b953f6fcfc364492f8d5a0320de136123cf5e7b
40
- S
41
- #sass/custom/leeds-city-council.scss,d/9/d90a7ced84c440cd9d5a64b40706da73ad5ddcc7
42
- a
43
- 1sass/custom/lewisham-and-greenwich-nhs-trust.scss,2/8/28a669ba97fc48322050d552b704fee882e22ea1
44
- T
45
- $sass/custom/london-fire-brigade.scss,2/2/2237bd8a346687a1cac0fa10af53b9f44b83975d
46
- R
47
- "sass/custom/merseyside-police.scss,a/3/a3882a485e785ac85771fbc3472bc0f8db07e074
48
- E
49
- sass/custom/mhra.scss,7/f/7f9487bbbd0beaa9bb22a2869949b73f98bcb381
50
- K
51
- sass/custom/mhra-black.scss,3/f/3f1338f565197b8d3fae4ce389ffcf4781c0940a
52
- \
53
- ,sass/custom/ministry-of-defence-dbs-fps.scss,7/2/72f6352a42775f83fdc03e7894ace532dbb6f517
54
- T
55
- $sass/custom/national-museums-ni.scss,6/f/6facc008124fe02a29743441c6504e92d6552fa4
56
- Z
57
- *sass/custom/neath_port_talbet_council.scss,e/5/e5132d8ae9db481b8157a52af70817a8c75a4285
58
- G
59
- sass/custom/nhsbsa.scss,c/5/c58a0bc65aae46f70f89ccc3ee87b23d1ed6450a
60
- P
61
- sass/custom/nibsc-standards.scss,0/a/0aafd45b83a7a2f2979edee0ecd4f69921cb6914
62
- X
63
- (sass/custom/nibsc-standards-2023-01.scss,0/f/0f2db5e04bd1a4d58f88f0b5e06da8f75879068c
64
- _
65
- /sass/custom/north-yorkshire-county-council.scss,a/1/a16ffce9c4014536b0d5997f1ff408f19a8510f7
66
- f
67
- 6sass/custom/nottingham-university-hospitals-trust.scss,b/8/b8c547eabe39aba372c866c1536d31bb75113eae
68
- i
69
- 9sass/custom/planning-and-building-services-edinburgh.scss,a/c/ac144cdcf526351c17f77f4845a5e6d0c46c5420
70
- K
71
- sass/custom/portsmouth.scss,2/d/2d83766dd283a47d86fda16cefdc1d9ff0e10ebf
72
- Y
73
- )sass/custom/social-security-scotland.scss,7/4/74f3a79eac0dbec82b9a27402e12d0073e08a5f8
74
- ]
75
- -sass/custom/scottish-government-planning.scss,f/7/f7a87ae0426cafc2323c6c7ea540fb129c638c87
76
- Y
77
- )sass/custom/someret-west-and-taunton.scss,b/3/b32d76c4339f54eb551e11b44e4442dba06ab61e
78
- S
79
- #sass/custom/south-wales-police.scss,1/d/1d086eb8ad446fac3834cef1541ba21ae3251bcc
80
- G
81
- sass/custom/sutton.scss,c/5/c5befeaa8e93d7c83f1cc31a8d2813217dcdb78a
82
- X
83
- (sass/custom/canterbury-city-council.scss,2/c/2c2e25e54af134656f786492369f2d309af6fc5d
84
- T
85
- $images/custom/leeds-city-council.svg,b/3/b3f38ade028e88019dd06ebcf5ca13096ca42238
86
- 7
87
- LICENSE,0/3/0398ccd0f49298b10a3d76a47800d2ebecd49859
88
- Z
89
- *sass/custom/adur-and-worthing-council.scss,3/0/3095dbf3cf3c05f05d4f32eadb2235861331dceb
90
- e
91
- 5sass/custom/barking-havering-redbridge-nhs-trust.scss,b/f/bf508a13685ded4f0ec65ce26175cc8817dff2a4
92
- V
93
- &sass/custom/cadw-welsh-government.scss,e/a/ea864c9949202498771817849e38d80c7cba1e2b
94
- P
95
- sass/custom/croydon-council.scss,1/0/1059ffd486aaf829fa5d1e15979d3afff31267be
96
- G
97
- sass/custom/custom.scss,f/c/fce3b30bccc478e9ebb36570f32eb3de1e4205cf
98
- _
99
- /sass/custom/edinburgh-council-pest-control.scss,d/6/d6ca95ce28b96fac596da957816f6d5c412d710e
100
- I
101
- sass/custom/ea-defra.scss,0/a/0ab90bbd755fb821ff9a7a389d27ecf24fde7721
102
- L
103
- images/custom/kcc-mobile.svg,7/a/7af2f4f8529d55f0d321898d1d1432bc82062bfb
104
- E
105
- images/custom/kcc.svg,f/c/fc17fd10e100b024763ee6c8df2361587d6f282a
106
- U
107
- %images/custom/disclosure-scotland.svg,7/3/73f8180a536551397babaf20e8ba02db8fcc8018
108
- H
109
- sass/custom/dacorum.scss,5/9/59403cebb5f53e0d0d6a43d33c6d48735b723ef2
110
- [
111
- +images/custom/adur-and-worthing-council.svg,8/2/8278e8d1860b14a402edb0bf2dd8635b9494b825
112
- R
113
- "images/custom/bracknell-forest.svg,6/d/6d5c5d647c0e0271ba0ce9383f68956c485b7109
114
- Q
115
- !sass/custom/bracknell-forest.scss,e/8/e8dbcbeccb811bc561c49e95a487033a5e7b28fe
116
- W
117
- 'images/custom/cadw-welsh-government.svg,6/d/6d86fb56fc16c3b07b7720091ec21623bfd901b6
118
- Y
119
- )images/custom/canterbury-city-council.svg,8/e/8e8b5c51bd5ce0407afd8f6a27b00b6a4de1f7cc
Binary file
@@ -1,31 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var fs = require('fs');
4
-
5
4
  var Cookies = require('js-cookie');
6
-
7
5
  var path = require('path');
8
-
9
6
  var template = fs.readFileSync(path.join(__dirname, 'banner.html'), 'utf-8');
10
7
  var GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME = 'govuk_pay_cookie_policy';
11
8
  var ANALYTICS_CONSENT_BANNER_ID = 'pay-cookie-banner';
12
-
13
9
  function hasAnalyticsConsent() {
14
10
  var cookie = Cookies.get(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME);
15
11
  var parsed = cookie && JSON.parse(cookie);
16
12
  return Boolean(parsed) && parsed.analytics === true;
17
13
  }
18
-
19
14
  function getCookieDomain() {
20
15
  var PROD_HOSTNAME = 'payments.service.gov.uk';
21
-
22
16
  if (window.location.hostname.includes(PROD_HOSTNAME)) {
23
17
  return PROD_HOSTNAME;
24
18
  }
25
-
26
19
  return undefined;
27
20
  }
28
-
29
21
  function setAnalyticsCookie() {
30
22
  var userConsentedToAnalytics = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
31
23
  var cookieValue = JSON.stringify({
@@ -38,19 +30,15 @@ function setAnalyticsCookie() {
38
30
  };
39
31
  Cookies.set(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME, cookieValue, cookieAttributes);
40
32
  }
41
-
42
33
  function hideBannerIfExists(event) {
43
34
  var banner = document.querySelector("#".concat(ANALYTICS_CONSENT_BANNER_ID));
44
-
45
35
  if (banner) {
46
36
  banner.style.display = 'none';
47
37
  }
48
-
49
38
  if (event.target) {
50
39
  event.preventDefault();
51
40
  }
52
41
  }
53
-
54
42
  function showConfirmationMessage(analyticsConsent) {
55
43
  var messagePrefix = analyticsConsent ? 'You’ve accepted analytics cookies.' : 'You told us not to use analytics cookies.';
56
44
  var $cookieBannerMainContent = document.querySelector('.pay-cookie-banner__wrapper');
@@ -60,17 +48,14 @@ function showConfirmationMessage(analyticsConsent) {
60
48
  var $cookieBannerConfirmationWrapper = document.querySelector('.pay-cookie-banner__confirmation');
61
49
  $cookieBannerConfirmationWrapper.style.display = 'block';
62
50
  }
63
-
64
51
  function acceptAnalyticsCookies() {
65
52
  setAnalyticsCookie(true);
66
53
  showConfirmationMessage(true);
67
54
  }
68
-
69
55
  function rejectAnalyticsCookies() {
70
56
  setAnalyticsCookie(false);
71
57
  showConfirmationMessage(false);
72
58
  }
73
-
74
59
  function createBannerHTMLElement() {
75
60
  var consentProvidedCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
76
61
  var banner = document.createElement('div');
@@ -78,39 +63,31 @@ function createBannerHTMLElement() {
78
63
  banner.innerHTML = template.trim();
79
64
  var acceptButton = banner.querySelector('button[data-accept-cookies=true]');
80
65
  var rejectButton = banner.querySelector('button[data-accept-cookies=false]');
81
-
82
66
  if (acceptButton && rejectButton) {
83
67
  acceptButton.addEventListener('click', acceptAnalyticsCookies);
84
68
  acceptButton.addEventListener('click', consentProvidedCallback);
85
69
  rejectButton.addEventListener('click', rejectAnalyticsCookies);
86
70
  }
87
-
88
71
  var hideCookieBannerLink = banner.querySelector('button[data-hide-cookie-banner]');
89
-
90
72
  if (hideCookieBannerLink) {
91
73
  hideCookieBannerLink.addEventListener('click', hideBannerIfExists);
92
74
  }
93
-
94
75
  return banner;
95
76
  }
77
+
96
78
  /**
97
79
  * ConsentProvidedCallback: function - generic callback that will be called
98
80
  * if and only if the user provides consent
99
81
  */
100
-
101
-
102
82
  function showBannerIfConsentNotSet() {
103
83
  var consentProvidedCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
104
84
  var consentCookieNotSet = !Cookies.get(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME);
105
85
  var banner = document.querySelector("#".concat(ANALYTICS_CONSENT_BANNER_ID));
106
-
107
86
  if (consentCookieNotSet && !banner) {
108
87
  var _banner = createBannerHTMLElement(consentProvidedCallback);
109
-
110
88
  document.body.prepend(_banner);
111
89
  }
112
90
  }
113
-
114
91
  module.exports = {
115
92
  hasAnalyticsConsent: hasAnalyticsConsent,
116
93
  showBannerIfConsentNotSet: showBannerIfConsentNotSet
@@ -870,29 +870,22 @@ process.umask = function() { return 0; };
870
870
  "use strict";
871
871
 
872
872
  var Cookies = require('js-cookie');
873
-
874
873
  var path = require('path');
875
-
876
874
  var template = "<style>\n\t/* component should only be shown if JS is available, by the cookieMessage JS, so hide by default */\n\t.pay-cookie-banner {\n\t\tdisplay: block;\n\t}\n\n\t.pay-cookie-banner__wrapper {\n\t\tpadding-top: 15px;\n \tpadding-bottom: 15px;\n\t}\n\n\t.pay-cookie-banner__buttons {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t@media (min-width: 40.0625em){\n\t\t.pay-cookie-banner__buttons {\n\t\t\tflex-wrap: nowrap;\n\t\t}\n\t}\n\n\n\t.pay-cookie-banner__button,\n\t.pay-cookie-banner__link {\n\t\tvertical-align: baseline;\n\t}\n\n\t.pay-cookie-banner__button {\n\t\tdisplay: inline-block;\n\t\tflex: 1 0;\n\t\tpadding-left: 60px;\n\t\tpadding-right: 60px;\n\t\tmargin-bottom: 10px;\n\t\tmargin-right: 20px;\n\t}\n\n\t@media (min-width: 40.0625em){\n\t\t.pay-cookie-banner__button {\n\t\t\tflex: 0 0 150px;\n\t\t\tpadding-left: 10px;\n\t\t\tpadding-right: 10px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\t}\n\t\n\t.pay-cookie-banner__link {\n\t\tfont-family: \"GDS Transport\", Arial, sans-serif;\n\t\tfont-weight: 400;\n\t\tfont-size: 16px;\n\t\tfont-size: 1rem;\n\t\tline-height: 1.25;\n\t\tline-height: 1;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t padding: 9px 0px 6px;\n\t}\n\t\n\t@media (min-width: 40.0625em){\n\t\t.pay-cookie-banner__link {\n\t\t\tdisplay: inline;\n\t\t\twidth: auto;\n\t\t\tmargin-left: 30px;\n\t\t}\n\t}\n\n\n\t.pay-cookie-banner__confirmation {\n\t\tdisplay: none;\n\t\tposition: relative;\n\t\tpadding: 20px 0;\n\n\t\t\n\t}\n\n\t/* This element is focused using JavaScript so that it's being read out by screen readers\n\tor this reason we don't want to show the default outline or emphasise it visually using `govuk-focused-text`*/\n\t.pay-cookie-banner__confirmation:focus {\n\t outline: none;\n\t}\n\n\n\t.pay-cookie-banner__confirmation-message,\n\t.pay-cookie-banner__hide-button {\n\t\tdisplay: block;\n\t}\n\n\n\t@media (min-width: 48.0625em){\n\t\t.pay-cookie-banner__confirmation-message, \n\t\t.pay-cookie-banner__hide-button {\n\t\t display: inline-block;\n\t\t}\n\t}\n\n\t.pay-cookie-banner__confirmation-message {\n\t\tmargin-right: 20px;\n\t}\n\n\t@media (min-width: 48.0625em){\n\t\t.pay-cookie-banner__confirmation-message {\n\t\t\tmax-width: 90%;\n\t\t}\n\t}\n\n\t.pay-cookie-banner__hide-button {\n\t\tfont-family: \"GDS Transport\", Arial, sans-serif;\n\t\tfont-weight: 400;\n\t\tfont-size: 16px;\n\t\tfont-size: 1rem;\n\t\tline-height: 1.25;\n\t\tcolor: #1d70b8;\n\t\toutline: 0;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\ttext-decoration: underline;\n\t\tpadding: 0;\n\t\tmargin-top: 10px;\n\t\tright: 15px;\n\t\tcursor: pointer;\n\t}\n\n\t@media (min-width: 40.0625em){\n\t\t.pay-cookie-banner__hide-button {\n\t\t\tfont-size: 19px;\n\t\t\tfont-size: 1.1875rem;\n\t\t\tline-height: 1.3157894737;\n\t\t}\n\t}\n</style>\n<div id=\"pay-cookie-banner\" class=\"pay-cookie-banner govuk-width-container\" data-module=\"pay-cookie-banner\" role=\"region\" aria-label=\"cookie banner\">\n\t<div class=\"pay-cookie-banner__wrapper\">\n\t\t<h2 class=\"pay-cookie-banner__heading govuk-heading-m\" id=\"pay-cookie-banner__heading\">\n\t\t\tCan we store analytics cookies on your device?\n\t\t</h2>\n\t\t<p class=\"govuk-body\">\n\t\t\tAnalytics cookies help us understand how our website is being used.\n\t\t</p>\n\t\t<div class=\"pay-cookie-banner__buttons\">\n\t\t\t<button class=\"govuk-button pay-cookie-banner__button pay-cookie-banner__button--accept\" type=\"submit\" data-accept-cookies=\"true\" aria-describedby=\"pay-cookie-banner__heading\">\n\t\t\t\tYes<span class=\"govuk-visually-hidden\">, GOV.UK Pay can store analytics cookies on your device</span>\n\t\t\t</button>\n\t\t\t<button class=\"govuk-button pay-cookie-banner__button pay-cookie-banner__button--reject\" type=\"submit\" data-accept-cookies=\"false\" aria-describedby=\"pay-cookie-banner__heading\">\n\t\t\t\tNo<span class=\"govuk-visually-hidden\">, GOV.UK Pay cannot store analytics cookies on your device</span>\n\t\t\t</button>\n\t\t\t<a class=\"govuk-link pay-cookie-banner__link\" href=\"https://www.payments.service.gov.uk/cookies\">How GOV.UK Pay uses cookies</a>\n\t\t</div>\n\t</div>\n\n\t<div class=\"pay-cookie-banner__confirmation\" tabindex=\"-1\">\n\t\t<p class=\"pay-cookie-banner__confirmation-message govuk-body\">\n\t\t\tYou can <a class=\"govuk-link\" href=\"https://www.payments.service.gov.uk/cookies/\">change your cookie settings</a> at any time.\n\t\t</p>\n\t\t<button class=\"pay-cookie-banner__hide-button govuk-link\" data-hide-cookie-banner=\"true\" role=\"link\">Hide</button>\n\t</div>\n</div>\n";
877
875
  var GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME = 'govuk_pay_cookie_policy';
878
876
  var ANALYTICS_CONSENT_BANNER_ID = 'pay-cookie-banner';
879
-
880
877
  function hasAnalyticsConsent() {
881
878
  var cookie = Cookies.get(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME);
882
879
  var parsed = cookie && JSON.parse(cookie);
883
880
  return Boolean(parsed) && parsed.analytics === true;
884
881
  }
885
-
886
882
  function getCookieDomain() {
887
883
  var PROD_HOSTNAME = 'payments.service.gov.uk';
888
-
889
884
  if (window.location.hostname.includes(PROD_HOSTNAME)) {
890
885
  return PROD_HOSTNAME;
891
886
  }
892
-
893
887
  return undefined;
894
888
  }
895
-
896
889
  function setAnalyticsCookie() {
897
890
  var userConsentedToAnalytics = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
898
891
  var cookieValue = JSON.stringify({
@@ -905,19 +898,15 @@ function setAnalyticsCookie() {
905
898
  };
906
899
  Cookies.set(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME, cookieValue, cookieAttributes);
907
900
  }
908
-
909
901
  function hideBannerIfExists(event) {
910
902
  var banner = document.querySelector("#".concat(ANALYTICS_CONSENT_BANNER_ID));
911
-
912
903
  if (banner) {
913
904
  banner.style.display = 'none';
914
905
  }
915
-
916
906
  if (event.target) {
917
907
  event.preventDefault();
918
908
  }
919
909
  }
920
-
921
910
  function showConfirmationMessage(analyticsConsent) {
922
911
  var messagePrefix = analyticsConsent ? 'You’ve accepted analytics cookies.' : 'You told us not to use analytics cookies.';
923
912
  var $cookieBannerMainContent = document.querySelector('.pay-cookie-banner__wrapper');
@@ -927,17 +916,14 @@ function showConfirmationMessage(analyticsConsent) {
927
916
  var $cookieBannerConfirmationWrapper = document.querySelector('.pay-cookie-banner__confirmation');
928
917
  $cookieBannerConfirmationWrapper.style.display = 'block';
929
918
  }
930
-
931
919
  function acceptAnalyticsCookies() {
932
920
  setAnalyticsCookie(true);
933
921
  showConfirmationMessage(true);
934
922
  }
935
-
936
923
  function rejectAnalyticsCookies() {
937
924
  setAnalyticsCookie(false);
938
925
  showConfirmationMessage(false);
939
926
  }
940
-
941
927
  function createBannerHTMLElement() {
942
928
  var consentProvidedCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
943
929
  var banner = document.createElement('div');
@@ -945,39 +931,31 @@ function createBannerHTMLElement() {
945
931
  banner.innerHTML = template.trim();
946
932
  var acceptButton = banner.querySelector('button[data-accept-cookies=true]');
947
933
  var rejectButton = banner.querySelector('button[data-accept-cookies=false]');
948
-
949
934
  if (acceptButton && rejectButton) {
950
935
  acceptButton.addEventListener('click', acceptAnalyticsCookies);
951
936
  acceptButton.addEventListener('click', consentProvidedCallback);
952
937
  rejectButton.addEventListener('click', rejectAnalyticsCookies);
953
938
  }
954
-
955
939
  var hideCookieBannerLink = banner.querySelector('button[data-hide-cookie-banner]');
956
-
957
940
  if (hideCookieBannerLink) {
958
941
  hideCookieBannerLink.addEventListener('click', hideBannerIfExists);
959
942
  }
960
-
961
943
  return banner;
962
944
  }
945
+
963
946
  /**
964
947
  * ConsentProvidedCallback: function - generic callback that will be called
965
948
  * if and only if the user provides consent
966
949
  */
967
-
968
-
969
950
  function showBannerIfConsentNotSet() {
970
951
  var consentProvidedCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
971
952
  var consentCookieNotSet = !Cookies.get(GOVUK_PAY_ANALYTICS_CONSENT_COOKIE_NAME);
972
953
  var banner = document.querySelector("#".concat(ANALYTICS_CONSENT_BANNER_ID));
973
-
974
954
  if (consentCookieNotSet && !banner) {
975
955
  var _banner = createBannerHTMLElement(consentProvidedCallback);
976
-
977
956
  document.body.prepend(_banner);
978
957
  }
979
958
  }
980
-
981
959
  module.exports = {
982
960
  hasAnalyticsConsent: hasAnalyticsConsent,
983
961
  showBannerIfConsentNotSet: showBannerIfConsentNotSet
@@ -987,7 +965,6 @@ module.exports = {
987
965
  "use strict";
988
966
 
989
967
  var cookies = require('./cookies/validate');
990
-
991
968
  window.GovUkPay = {
992
969
  cookies: cookies
993
970
  };
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var cookies = require('./cookies/validate');
4
-
5
4
  window.GovUkPay = {
6
5
  cookies: cookies
7
6
  };
@@ -1,10 +1,10 @@
1
- 'use strict'; // NPM Dependencies
2
-
3
- var every = require('lodash/every'); // Local Dependencies
1
+ 'use strict';
4
2
 
3
+ // NPM Dependencies
4
+ var every = require('lodash/every');
5
5
 
6
+ // Local Dependencies
6
7
  var checks = require('../../utils/field-validation-checks');
7
-
8
8
  exports.enableFieldValidation = function () {
9
9
  var allForms = Array.prototype.slice.call(document.getElementsByTagName('form'));
10
10
  allForms.filter(function (form) {
@@ -13,7 +13,6 @@ exports.enableFieldValidation = function () {
13
13
  return form.addEventListener('submit', initValidation, false);
14
14
  });
15
15
  };
16
-
17
16
  function initValidation(e) {
18
17
  var form = e.target;
19
18
  e.preventDefault();
@@ -21,14 +20,12 @@ function initValidation(e) {
21
20
  var validatedFields = findFields(form).map(function (field) {
22
21
  return validateField(form, field);
23
22
  });
24
-
25
23
  if (every(validatedFields)) {
26
24
  form.submit();
27
25
  } else {
28
26
  populateErrorSummary(form);
29
27
  }
30
28
  }
31
-
32
29
  function clearPreviousErrors() {
33
30
  var previousErrorsMessages = Array.prototype.slice.call(document.querySelectorAll('.error-message, .error-summary'));
34
31
  var previousErrorsFields = Array.prototype.slice.call(document.querySelectorAll('.form-group.error'));
@@ -39,14 +36,12 @@ function clearPreviousErrors() {
39
36
  return errorField.classList.remove('error');
40
37
  });
41
38
  }
42
-
43
39
  function findFields(form) {
44
40
  var formFields = Array.prototype.slice.call(form.querySelectorAll('input, textarea, select'));
45
41
  return formFields.filter(function (field) {
46
42
  return field.hasAttribute('data-validate');
47
43
  });
48
44
  }
49
-
50
45
  function validateField(form, field) {
51
46
  var result;
52
47
  var validationTypes = field.getAttribute('data-validate').split(' ');
@@ -55,60 +50,47 @@ function validateField(form, field) {
55
50
  case 'required':
56
51
  result = checks.isEmpty(field.value);
57
52
  break;
58
-
59
53
  case 'currency':
60
54
  result = checks.isCurrency(field.value);
61
55
  break;
62
-
63
56
  case 'email':
64
57
  result = checks.isValidEmail(field.value);
65
58
  break;
66
-
67
59
  case 'phone':
68
60
  result = checks.isPhoneNumber(field.value);
69
61
  break;
70
-
71
62
  case 'https':
72
63
  result = checks.isHttps(field.value);
73
64
  break;
74
-
75
65
  case 'belowMaxAmount':
76
66
  result = checks.isAboveMaxAmount(field.value);
77
67
  break;
78
-
79
68
  case 'passwordLessThanTenChars':
80
69
  result = checks.isPasswordLessThanTenChars(field.value);
81
70
  break;
82
-
83
71
  case 'isFieldGreaterThanMaxLengthChars':
84
72
  result = checks.isFieldGreaterThanMaxLengthChars(field.value, field.getAttribute('data-validate-max-length'));
85
73
  break;
86
-
87
74
  case 'isNaxsiSafe':
88
75
  result = checks.isNaxsiSafe(field.value);
89
76
  break;
90
-
91
77
  default:
92
78
  result = false;
93
79
  break;
94
80
  }
95
-
96
81
  if (result) {
97
82
  applyErrorMessaging(form, field, result);
98
83
  }
99
84
  });
100
85
  return !field.closest('.form-group').classList.contains('error');
101
86
  }
102
-
103
87
  function applyErrorMessaging(form, field, result) {
104
88
  var formGroup = field.closest('.form-group');
105
-
106
89
  if (!formGroup.classList.contains('error')) {
107
90
  formGroup.classList.add('error');
108
91
  document.querySelector('label[for="' + field.id + '"]').insertAdjacentHTML('beforeend', '<span class="error-message">' + result + '</span>');
109
92
  }
110
93
  }
111
-
112
94
  function populateErrorSummary(form) {
113
95
  var erroringFields = Array.prototype.slice.call(form.querySelectorAll('.form-group.error label'));
114
96
  var errorMessages = erroringFields.map(function (field) {
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
+
2
3
  /*
3
4
  Metadata Column constants match up those defined:
4
5
  https://github.com/alphagov/pay-java-commons/blob/master/model/src/main/java/uk/gov/pay/commons/model/charge/ExternalMetadata.java
5
6
  */
6
-
7
7
  module.exports = {
8
8
  externalMetadata: {
9
9
  MAX_KEY_VALUE_PAIRS: 10,
package/lib/index.js CHANGED
@@ -1,23 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  var browsered = require('./browsered');
4
-
5
4
  var utils = require('./utils');
6
-
7
5
  var nunjucksFilters = require('./nunjucks-filters');
8
-
9
6
  var logging = require('./logging');
7
+ var constants = require('./constants');
10
8
 
11
- var constants = require('./constants'); // Add to window.GOVUKPAY if in browser context
12
-
13
-
9
+ // Add to window.GOVUKPAY if in browser context
14
10
  if (typeof window !== 'undefined') {
15
11
  window.GOVUKPAY = window.GOVUKPAY || {};
16
12
  window.GOVUKPAY = {
17
13
  browsered: browsered
18
14
  };
19
15
  }
20
-
21
16
  module.exports = {
22
17
  browsered: browsered,
23
18
  utils: utils,
@@ -1,8 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var _require = require('winston'),
4
- format = _require.format;
5
-
4
+ format = _require.format;
6
5
  var govUkPayLoggingFormat = format(function (info, opts) {
7
6
  info['@timestamp'] = new Date().toISOString();
8
7
  info['@version'] = 1;
@@ -1,12 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var keys = require('./keys');
4
-
5
4
  var _require = require('./format'),
6
- govUkPayLoggingFormat = _require.govUkPayLoggingFormat;
7
-
5
+ govUkPayLoggingFormat = _require.govUkPayLoggingFormat;
8
6
  var requestLogFormat = require('./request-log-format');
9
-
10
7
  module.exports = {
11
8
  govUkPayLoggingFormat: govUkPayLoggingFormat,
12
9
  keys: keys,