hof 21.0.19-axios-beta → 22.0.0-timeout-warning-beta.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.
Files changed (36) hide show
  1. package/.nyc_output/39337dba-f075-4b5c-ad46-31665a16d443.json +1 -0
  2. package/.nyc_output/processinfo/39337dba-f075-4b5c-ad46-31665a16d443.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/CHANGELOG.md +16 -0
  5. package/codeReviewChecklist.md +22 -0
  6. package/config/hof-defaults.js +11 -1
  7. package/frontend/govuk-template/build/govuk_template.html +20 -22
  8. package/frontend/govuk-template/govuk_template_generated.html +20 -22
  9. package/frontend/template-mixins/mixins/template-mixins.js +1 -0
  10. package/frontend/template-mixins/partials/forms/checkbox.html +5 -0
  11. package/frontend/template-mixins/partials/forms/input-text-group.html +1 -1
  12. package/frontend/template-mixins/partials/forms/select.html +6 -6
  13. package/frontend/template-mixins/partials/forms/textarea-group.html +4 -4
  14. package/frontend/template-partials/views/partials/gatag.html +0 -1
  15. package/frontend/template-partials/views/partials/head.html +26 -0
  16. package/frontend/template-partials/views/partials/page.html +1 -0
  17. package/frontend/template-partials/views/partials/session-timeout-warning.html +17 -0
  18. package/frontend/themes/gov-uk/client-js/index.js +2 -0
  19. package/frontend/themes/gov-uk/client-js/session-timeout-dialog.js +345 -0
  20. package/frontend/themes/gov-uk/styles/_session-timeout-dialog.scss +209 -0
  21. package/frontend/themes/gov-uk/styles/govuk.scss +1 -0
  22. package/index.js +8 -4
  23. package/lib/ga-tag.js +33 -7
  24. package/middleware/cookies.js +2 -0
  25. package/model/apis/html-to-pdf-converter.js +8 -11
  26. package/model/index.js +31 -47
  27. package/package.json +9 -10
  28. package/pull_request.md +16 -0
  29. package/sandbox/apps/sandbox/index.js +1 -0
  30. package/sandbox/package.json +1 -1
  31. package/sandbox/public/css/app.css +251 -6
  32. package/sandbox/public/js/bundle.js +37331 -26262
  33. package/sandbox/yarn.lock +14 -9
  34. package/.nyc_output/61a079f0-003b-4167-8f31-77e3abe4f072.json +0 -1
  35. package/.nyc_output/processinfo/61a079f0-003b-4167-8f31-77e3abe4f072.json +0 -1
  36. package/model/apis/axios-settings.js +0 -9
package/model/index.js CHANGED
@@ -2,12 +2,10 @@
2
2
  'use strict';
3
3
 
4
4
  const _ = require('lodash');
5
- const axios = require('axios').default;
5
+ const request = require('request');
6
6
  const url = require('url');
7
7
  const EventEmitter = require('events').EventEmitter;
8
8
 
9
- const axiosSetting = require('./apis/axios-settings')
10
-
11
9
  const REFERENCE = /^\$ref:/;
12
10
 
13
11
  function timeDiff(from, to, d) {
@@ -29,7 +27,7 @@ module.exports = class Model extends EventEmitter {
29
27
  this.set(attributes, {
30
28
  silent: true
31
29
  });
32
- this._request = axios;
30
+ this._request = request;
33
31
  }
34
32
 
35
33
  save(options, callback) {
@@ -47,9 +45,9 @@ module.exports = class Model extends EventEmitter {
47
45
 
48
46
  reqConf.headers = Object.assign({
49
47
  'Content-Type': 'application/json',
50
- 'User-Agent': 'Axios 0.25.0',
51
48
  'Content-Length': Buffer.byteLength(data)
52
49
  }, reqConf.headers || {});
50
+
53
51
  return this.request(reqConf, data, callback);
54
52
  });
55
53
  }
@@ -96,28 +94,22 @@ module.exports = class Model extends EventEmitter {
96
94
 
97
95
  let settings = Object.assign({}, originalSettings);
98
96
  settings.timeout = settings.timeout || this.options.timeout;
99
- settings = axiosSetting(settings, body)
100
- settings = _.omit(settings, urlKeys);
97
+ settings.uri = settings.uri || settings.url || url.format(settings);
98
+ settings.body = settings.body || body || settings.data;
99
+
100
+ settings = _.omit(settings, urlKeys, 'data', 'url');
101
101
  this.emit('sync', originalSettings);
102
102
 
103
103
  const promise = Promise.resolve().then(() => this.auth()).then(authData => {
104
- console.log("@@@@@@@@@@@@@@@@")
105
- console.log(authData)
106
- console.log("@@@@@@@@@@@@@@@@")
107
- let authVal = authData;
108
- if (typeof authVal === 'string') {
109
- const auth = authVal.split(':');
110
- authVal = {
111
- username: auth.shift(),
112
- password: auth.join(':')
104
+ settings.auth = authData;
105
+ if (typeof settings.auth === 'string') {
106
+ const auth = settings.auth.split(':');
107
+ settings.auth = {
108
+ user: auth.shift(),
109
+ pass: auth.join(':'),
110
+ sendImmediately: true
113
111
  };
114
112
  }
115
- if(authVal) {
116
- settings.headers = Object.assign({}, settings.headers, {Authorization: `Bearer ${authVal.bearer}`});
117
- }
118
- console.log("SETTINGS ************")
119
- console.log(settings)
120
- console.log("SETTINGS ************")
121
113
  })
122
114
  .then(() => {
123
115
  const startTime = process.hrtime();
@@ -132,43 +124,35 @@ module.exports = class Model extends EventEmitter {
132
124
 
133
125
  const endTime = process.hrtime();
134
126
  const responseTime = timeDiff(startTime, endTime);
127
+
135
128
  if (err) {
136
129
  this.emit('fail', err, data, originalSettings, statusCode, responseTime);
137
130
  } else {
138
131
  this.emit('success', data, originalSettings, statusCode, responseTime);
139
132
  }
140
133
  if (err) {
141
- console.log("************************************************")
142
- console.error(err?.response ? err.response : err)
143
- console.log("************************************************")
144
134
  reject(err);
145
135
  } else {
146
- console.log(data)
147
136
  resolve(data);
148
137
  }
149
138
  };
150
- this._request(settings)
151
- .then(response => {
152
- return this.handleResponse(response, (error, data, status) => {
153
- console.log("$$$$$$$$$$4RESPONSE")
154
- console.log(response.headers)
155
- console.log("$$$$$$$$$$4RESPONSE")
156
- if (error) {
157
- error.headers = response.headers;
158
- }
159
- console.log("$$$$$$$$$$4RESPONSE")
160
- console.log(response.headers)
161
- console.log("$$$$$$$$$$4RESPONSE")
162
- _callback(error, data, status);
163
- });
164
- }).catch(err => {
139
+
140
+ this._request(settings, (err, response) => {
141
+ if (err) {
165
142
  if (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT') {
166
143
  err.message = 'Connection timed out';
167
144
  err.status = 504;
168
145
  }
169
- err.status = err.status || 503;
146
+ err.status = err.status || (response && response.statusCode) || 503;
170
147
  return _callback(err, null, err.status);
148
+ }
149
+ return this.handleResponse(response, (error, data, status) => {
150
+ if (error) {
151
+ error.headers = response.headers;
152
+ }
153
+ _callback(error, data, status);
171
154
  });
155
+ });
172
156
  });
173
157
  });
174
158
 
@@ -181,13 +165,13 @@ module.exports = class Model extends EventEmitter {
181
165
  handleResponse(response, callback) {
182
166
  let data = {};
183
167
  try {
184
- data = typeof response.data === 'object' ? response.data : JSON.parse(response.data || '{}');
168
+ data = JSON.parse(response.body || '{}');
185
169
  } catch (err) {
186
- err.status = response.status;
187
- err.body = response.data;
188
- return callback(err, null, response.status);
170
+ err.status = response.statusCode;
171
+ err.body = response.body;
172
+ return callback(err, null, response.statusCode);
189
173
  }
190
- return this.parseResponse(response.status, data, callback);
174
+ return this.parseResponse(response.statusCode, data, callback);
191
175
  }
192
176
 
193
177
  parseResponse(statusCode, data, callback) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hof",
3
3
  "description": "A bootstrap for HOF projects",
4
- "version": "21.0.19-axios-beta",
4
+ "version": "22.0.0-timeout-warning-beta.1",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
7
7
  "author": "HomeOffice",
@@ -32,12 +32,10 @@
32
32
  "test:acceptance_browser": "ACCEPTANCE_WITH_BROWSER=true TAGS=\"${TAGS:=@feature}\" yarn run test:cucumber",
33
33
  "test:cucumber": "cucumber-js -f @cucumber/pretty-formatter \"sandbox/test/_features/**/*.feature\" --require sandbox/test/_features/test.setup.js --require \"sandbox/test/_features/step_definitions/**/*.js\" --tags $TAGS",
34
34
  "ci": "travis-conditions",
35
- "postversion": "git push && git push --tags",
36
- "test-single": "mocha"
35
+ "postversion": "git push && git push --tags"
37
36
  },
38
37
  "dependencies": {
39
38
  "aliasify": "^2.1.0",
40
- "axios": "^1.5.1",
41
39
  "bluebird": "^3.7.2",
42
40
  "body-parser": "^1.15.1",
43
41
  "browserify": "^17.0.0",
@@ -50,6 +48,7 @@
50
48
  "csrf": "^3.1.0",
51
49
  "debug": "^4.3.1",
52
50
  "deprecate": "^1.0.0",
51
+ "dialog-polyfill": "^0.5.6",
53
52
  "dotenv": "^4.0.0",
54
53
  "duplexify": "^3.5.0",
55
54
  "express": "^4.17.1",
@@ -59,7 +58,7 @@
59
58
  "findup": "^0.1.5",
60
59
  "glob": "^7.2.0",
61
60
  "govuk-elements-sass": "^3.1.3",
62
- "govuk-frontend": "3.14",
61
+ "govuk-frontend": "3.15",
63
62
  "govuk_template_mustache": "^0.26.0",
64
63
  "helmet": "^3.22.0",
65
64
  "hogan-express-strict": "^0.5.4",
@@ -68,7 +67,7 @@
68
67
  "i18n-future": "^2.0.0",
69
68
  "i18n-lookup": "^0.1.0",
70
69
  "is-pdf": "^1.0.0",
71
- "libphonenumber-js": "^1.9.37",
70
+ "libphonenumber-js": "^1.9.44",
72
71
  "lodash": "^4.17.21",
73
72
  "markdown-it": "^12.3.2",
74
73
  "minimatch": "^3.0.7",
@@ -82,9 +81,9 @@
82
81
  "nodemailer-smtp-transport": "^2.7.4",
83
82
  "nodemailer-stub-transport": "^1.1.0",
84
83
  "notifications-node-client": "^6.0.0",
85
- "object-mapper": "^6.2.0",
86
84
  "redis": "^3.1.2",
87
85
  "reqres": "^3.0.1",
86
+ "request": "^2.79.0",
88
87
  "rimraf": "^3.0.2",
89
88
  "sass": "^1.56.2",
90
89
  "serve-static": "^1.14.1",
@@ -98,6 +97,7 @@
98
97
  "@cucumber/cucumber": "^7.3.0",
99
98
  "@cucumber/pretty-formatter": "^1.0.0-alpha.1",
100
99
  "@types/jest": "^26.0.14",
100
+ "@xmldom/xmldom": "~0.8.4",
101
101
  "chai": "^3.5.0",
102
102
  "chai-as-promised": "^7.1.1",
103
103
  "chai-subset": "^1.6.0",
@@ -124,14 +124,13 @@
124
124
  "playwright": "^1.16.3",
125
125
  "postcode": "0.2.2",
126
126
  "proxyquire": "^1.7.11",
127
- "release-it": "^14.10.0",
127
+ "release-it": "^16.2.1",
128
128
  "sinon": "^11.1.1",
129
129
  "sinon-chai": "^3.7.0",
130
130
  "supertest": "^3.0.0",
131
131
  "travis-conditions": "0.0.0",
132
132
  "watchify": "^4.0.0",
133
- "webdriverio": "^4.14.4",
134
- "xmldom": "^0.6.0"
133
+ "webdriverio": "^4.14.4"
135
134
  },
136
135
  "mocha": {
137
136
  "reporter": "spec",
@@ -0,0 +1,16 @@
1
+ ## What?
2
+ ## Why?
3
+ ## How?
4
+ ## Testing?
5
+ ## Screenshots (optional)
6
+ ## Anything Else? (optional)
7
+ ## Check list
8
+
9
+ - [ ] I have reviewed my own pull request for linting issues (e.g. adding new lines)
10
+ - [ ] I have written tests (if relevant)
11
+ - [ ] I have created a JIRA number for my branch
12
+ - [ ] I have created a JIRA number for my commit
13
+ - [ ] I have followed the chris beams method for my commit https://cbea.ms/git-commit/
14
+ here is an [example commit](https://github.com/UKHomeOfficeForms/hof/commit/810959f391187c7c4af6db262bcd143b50093a6e)
15
+ - [ ] Ensure drone builds are green especially tests
16
+ - [ ] I will squash the commits before merging
@@ -91,5 +91,6 @@ module.exports = {
91
91
  ],
92
92
  next: '/confirm'
93
93
  },
94
+ '/session-timeout': {}
94
95
  }
95
96
  };
@@ -16,7 +16,7 @@
16
16
  "author": "",
17
17
  "dependencies": {
18
18
  "govuk-frontend": "3.14",
19
- "jquery": "^3.6.0",
19
+ "jquery": "^3.7.1",
20
20
  "sass": "^1.53.0",
21
21
  "typeahead-aria": "^1.0.4"
22
22
  },
@@ -5627,6 +5627,11 @@ input[type=number] {
5627
5627
  vertical-align: top;
5628
5628
  }
5629
5629
 
5630
+ .govuk-header__logotype-crown[width="32"] {
5631
+ top: -3px;
5632
+ margin-right: 2px;
5633
+ }
5634
+
5630
5635
  .govuk-header__logotype-crown-fallback-image {
5631
5636
  width: 36px;
5632
5637
  height: 32px;
@@ -5634,6 +5639,11 @@ input[type=number] {
5634
5639
  vertical-align: bottom;
5635
5640
  }
5636
5641
 
5642
+ .govuk-header__logotype-crown-fallback-image[width="32"] {
5643
+ width: 32px;
5644
+ height: 30px;
5645
+ }
5646
+
5637
5647
  .govuk-header__product-name {
5638
5648
  font-family: "GDS Transport", arial, sans-serif;
5639
5649
  -webkit-font-smoothing: antialiased;
@@ -6675,8 +6685,6 @@ input[type=number] {
6675
6685
  .js-enabled .govuk-tabs__tab:hover {
6676
6686
  color: rgba(11, 12, 12, 0.99);
6677
6687
  }
6678
- }
6679
- @media (min-width: 40.0625em) {
6680
6688
  .js-enabled .govuk-tabs__tab:active, .js-enabled .govuk-tabs__tab:focus {
6681
6689
  color: #0b0c0c;
6682
6690
  }
@@ -6695,8 +6703,6 @@ input[type=number] {
6695
6703
  bottom: 0;
6696
6704
  left: 0;
6697
6705
  }
6698
- }
6699
- @media (min-width: 40.0625em) {
6700
6706
  .js-enabled .govuk-tabs__panel {
6701
6707
  margin-bottom: 0;
6702
6708
  padding: 30px 20px;
@@ -6713,8 +6719,6 @@ input[type=number] {
6713
6719
  .js-enabled .govuk-tabs__panel > :last-child {
6714
6720
  margin-bottom: 0;
6715
6721
  }
6716
- }
6717
- @media (min-width: 40.0625em) {
6718
6722
  .js-enabled .govuk-tabs__panel--hidden {
6719
6723
  display: none;
6720
6724
  }
@@ -9169,6 +9173,247 @@ dl {
9169
9173
  padding-bottom: 0;
9170
9174
  }
9171
9175
 
9176
+ .modal-dialog {
9177
+ display: none;
9178
+ }
9179
+
9180
+ .modal-dialog--no-js-persistent {
9181
+ display: inline-block;
9182
+ }
9183
+
9184
+ .js-enabled .modal-dialog--no-js-persistent {
9185
+ display: none;
9186
+ }
9187
+ .js-enabled .modal-dialog--no-js-persistent[open], .js-enabled .modal-dialog--no-js-persistent .dialog-button {
9188
+ display: inline-block;
9189
+ }
9190
+ .js-enabled .modal-dialog[open] {
9191
+ display: inline-block;
9192
+ }
9193
+
9194
+ .modal-dialog[open] {
9195
+ overflow-x: hidden;
9196
+ overflow-y: auto;
9197
+ max-height: 90vh;
9198
+ padding: 0;
9199
+ margin-bottom: 0;
9200
+ margin-top: 0;
9201
+ position: fixed;
9202
+ top: 50% !important;
9203
+ -webkit-transform: translate(0, -50%);
9204
+ -ms-transform: translate(0, -50%);
9205
+ transform: translate(0, -50%);
9206
+ }
9207
+
9208
+ @media (min-width: 641px) {
9209
+ .modal-dialog[open] {
9210
+ padding: 0;
9211
+ }
9212
+ }
9213
+ .modal-dialog__inner {
9214
+ padding: 20px;
9215
+ }
9216
+
9217
+ @media (min-width: 641px) {
9218
+ .modal-dialog__inner {
9219
+ padding: 30px;
9220
+ }
9221
+ }
9222
+ .modal-dialog__inner__text {
9223
+ font-family: "nta", Arial, sans-serif;
9224
+ font-weight: 400;
9225
+ text-transform: none;
9226
+ font-size: 16px;
9227
+ line-height: 1.25;
9228
+ padding-top: 2px;
9229
+ padding-bottom: 8px;
9230
+ margin-bottom: 20px;
9231
+ }
9232
+
9233
+ @media (min-width: 641px) {
9234
+ .modal-dialog__inner__text {
9235
+ font-size: 19px;
9236
+ line-height: 1.31579;
9237
+ }
9238
+ }
9239
+ @media (min-width: 641px) {
9240
+ .modal-dialog__inner__text {
9241
+ padding-top: 0;
9242
+ padding-bottom: 5px;
9243
+ }
9244
+ }
9245
+ .modal-dialog__inner__button {
9246
+ font-size: 19px;
9247
+ margin-top: 10px;
9248
+ }
9249
+
9250
+ .modal-dialog__inner__link {
9251
+ font-family: "nta", Arial, sans-serif;
9252
+ font-weight: 400;
9253
+ text-transform: none;
9254
+ font-size: 16px;
9255
+ line-height: 1.25;
9256
+ padding-top: 2px;
9257
+ padding-bottom: 8px;
9258
+ background: none;
9259
+ border: none;
9260
+ vertical-align: middle;
9261
+ margin-top: 20px;
9262
+ }
9263
+ .modal-dialog__inner__link:hover {
9264
+ cursor: pointer;
9265
+ }
9266
+
9267
+ @media (min-width: 641px) {
9268
+ .modal-dialog__inner__link {
9269
+ font-size: 19px;
9270
+ line-height: 1.31579;
9271
+ }
9272
+ }
9273
+ @media (min-width: 641px) {
9274
+ .modal-dialog__inner__link {
9275
+ padding-top: 0;
9276
+ padding-bottom: 5px;
9277
+ }
9278
+ }
9279
+ @media (max-width: 640px) {
9280
+ .modal-dialog__inner__link {
9281
+ text-align: center;
9282
+ display: block;
9283
+ margin-top: 25px;
9284
+ }
9285
+ }
9286
+ @media (min-width: 641px) {
9287
+ .modal-dialog__inner__link {
9288
+ position: absolute;
9289
+ top: 50%;
9290
+ transform: translateY(-50%);
9291
+ padding: 0;
9292
+ margin: 0 0 0 30px;
9293
+ }
9294
+ }
9295
+ .modal-dialog__inner__block {
9296
+ position: relative;
9297
+ }
9298
+
9299
+ .modal-dialog #dialog-title {
9300
+ margin-top: 0;
9301
+ }
9302
+
9303
+ .dialog-is-open {
9304
+ overflow: hidden;
9305
+ }
9306
+
9307
+ dialog {
9308
+ left: 0;
9309
+ right: 0;
9310
+ width: -moz-fit-content;
9311
+ width: -webkit-fit-content;
9312
+ width: fit-content;
9313
+ height: -moz-fit-content;
9314
+ height: -webkit-fit-content;
9315
+ height: fit-content;
9316
+ margin: auto;
9317
+ border: solid;
9318
+ padding: 1em;
9319
+ background: white;
9320
+ color: black;
9321
+ display: none;
9322
+ border: 5px solid black;
9323
+ }
9324
+ dialog + .backdrop {
9325
+ position: fixed;
9326
+ top: 0;
9327
+ right: 0;
9328
+ bottom: 0;
9329
+ left: 0;
9330
+ background: rgba(0, 0, 0, 0.8);
9331
+ }
9332
+ dialog[open] {
9333
+ display: block;
9334
+ box-sizing: border-box;
9335
+ margin: 0 auto;
9336
+ padding: 15px;
9337
+ width: 90%;
9338
+ }
9339
+ dialog[open] + .backdrop, dialog[open]::backdrop {
9340
+ background: rgba(0, 0, 0, 0.8);
9341
+ }
9342
+
9343
+ @media (min-width: 641px) {
9344
+ dialog[open] {
9345
+ padding: 30px;
9346
+ margin: 30px auto;
9347
+ max-width: 500px;
9348
+ }
9349
+ }
9350
+ .tabular-numbers {
9351
+ font-family: "ntatabularnumbers", "nta", Arial, sans-serif;
9352
+ }
9353
+
9354
+ .dialog-sign-out-link {
9355
+ font-family: "GDS Transport", arial, sans-serif;
9356
+ -webkit-font-smoothing: antialiased;
9357
+ -moz-osx-font-smoothing: grayscale;
9358
+ font-weight: 400;
9359
+ font-size: 18px;
9360
+ font-size: 1.125rem;
9361
+ line-height: 1.1111111111;
9362
+ display: inline-block;
9363
+ margin: 5px;
9364
+ }
9365
+ @media print {
9366
+ .dialog-sign-out-link {
9367
+ font-family: sans-serif;
9368
+ }
9369
+ }
9370
+ @media (min-width: 40.0625em) {
9371
+ .dialog-sign-out-link {
9372
+ font-size: 24px;
9373
+ font-size: 1.5rem;
9374
+ line-height: 1.25;
9375
+ }
9376
+ }
9377
+ @media print {
9378
+ .dialog-sign-out-link {
9379
+ font-size: 18pt;
9380
+ line-height: 1.15;
9381
+ }
9382
+ }
9383
+ @media (min-width: 40.0625em) {
9384
+ .dialog-sign-out-link {
9385
+ font-family: "GDS Transport", arial, sans-serif;
9386
+ -webkit-font-smoothing: antialiased;
9387
+ -moz-osx-font-smoothing: grayscale;
9388
+ font-weight: 400;
9389
+ font-size: 16px;
9390
+ font-size: 1rem;
9391
+ line-height: 1.25;
9392
+ position: relative;
9393
+ top: 2px;
9394
+ padding: 0.526315em 0.789473em 0.263157em;
9395
+ line-height: 1.5;
9396
+ }
9397
+ }
9398
+ @media print and (min-width: 40.0625em) {
9399
+ .dialog-sign-out-link {
9400
+ font-family: sans-serif;
9401
+ }
9402
+ }
9403
+ @media (min-width: 40.0625em) and (min-width: 40.0625em) {
9404
+ .dialog-sign-out-link {
9405
+ font-size: 19px;
9406
+ font-size: 1.1875rem;
9407
+ line-height: 1.3157894737;
9408
+ }
9409
+ }
9410
+ @media print and (min-width: 40.0625em) {
9411
+ .dialog-sign-out-link {
9412
+ font-size: 14pt;
9413
+ line-height: 1.15;
9414
+ }
9415
+ }
9416
+
9172
9417
  .validation-summary {
9173
9418
  padding-left: 11px;
9174
9419
  padding-right: 15px;