@dwp/govuk-casa 8.11.1 → 8.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/casa.d.ts +29 -1
- package/dist/casa.js +24 -1
- package/dist/casa.js.map +1 -1
- package/dist/lib/JourneyContext.d.ts +32 -6
- package/dist/lib/JourneyContext.js +70 -11
- package/dist/lib/JourneyContext.js.map +1 -1
- package/dist/lib/configuration-ingestor.d.ts +11 -1
- package/dist/lib/configuration-ingestor.js +61 -1
- package/dist/lib/configuration-ingestor.js.map +1 -1
- package/dist/lib/configure.js +6 -2
- package/dist/lib/configure.js.map +1 -1
- package/dist/lib/constants.d.ts +2 -0
- package/dist/lib/constants.js +3 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/context-id-generators.d.ts +27 -0
- package/dist/lib/context-id-generators.js +54 -0
- package/dist/lib/context-id-generators.js.map +1 -0
- package/dist/middleware/data.d.ts +2 -1
- package/dist/middleware/data.js +7 -1
- package/dist/middleware/data.js.map +1 -1
- package/dist/middleware/gather-fields.js +1 -1
- package/dist/middleware/gather-fields.js.map +1 -1
- package/dist/middleware/sanitise-fields.js +1 -1
- package/dist/middleware/sanitise-fields.js.map +1 -1
- package/dist/mjs/esm-wrapper.js +1 -0
- package/dist/routes/journey.d.ts +1 -1
- package/dist/routes/journey.js +35 -10
- package/dist/routes/journey.js.map +1 -1
- package/package.json +1 -2
- package/src/casa.js +27 -0
- package/src/lib/JourneyContext.js +79 -11
- package/src/lib/configuration-ingestor.js +42 -0
- package/src/lib/configure.js +7 -0
- package/src/lib/constants.js +2 -0
- package/src/lib/context-id-generators.js +71 -0
- package/src/middleware/data.js +8 -0
- package/src/middleware/gather-fields.js +4 -1
- package/src/middleware/sanitise-fields.js +1 -1
- package/src/routes/journey.js +36 -9
package/dist/lib/configure.js
CHANGED
|
@@ -21,6 +21,7 @@ const i18n_js_1 = __importDefault(require("../middleware/i18n.js"));
|
|
|
21
21
|
const data_js_1 = __importDefault(require("../middleware/data.js"));
|
|
22
22
|
const body_parser_js_1 = __importDefault(require("../middleware/body-parser.js"));
|
|
23
23
|
const csrf_js_1 = __importDefault(require("../middleware/csrf.js"));
|
|
24
|
+
const constants_js_1 = require("./constants.js");
|
|
24
25
|
/**
|
|
25
26
|
* @access private
|
|
26
27
|
* @typedef {import('../casa').ConfigurationOptions} ConfigurationOptions
|
|
@@ -49,7 +50,7 @@ function configure(config = {}) {
|
|
|
49
50
|
});
|
|
50
51
|
// Extract config
|
|
51
52
|
const ingestedConfig = (0, configuration_ingestor_js_1.default)(config);
|
|
52
|
-
const { mountUrl, views = [], session = {
|
|
53
|
+
const { mountUrl, errorVisibility = constants_js_1.CONFIG_ERROR_VISIBILITY_ONSUBMIT, views = [], session = {
|
|
53
54
|
secret: 'secret',
|
|
54
55
|
name: 'casasession',
|
|
55
56
|
secure: false,
|
|
@@ -60,7 +61,7 @@ function configure(config = {}) {
|
|
|
60
61
|
}, pages = [], plan = null, hooks = [], plugins = [], events = [], i18n = {
|
|
61
62
|
dirs: [],
|
|
62
63
|
locales: ['en', 'cy'],
|
|
63
|
-
}, helmetConfigurator = undefined, formMaxParams, formMaxBytes, } = ingestedConfig;
|
|
64
|
+
}, helmetConfigurator = undefined, formMaxParams, formMaxBytes, contextIdGenerator, } = ingestedConfig;
|
|
64
65
|
// Prepare all page hooks so they are prefixed with the `journey.` scope.
|
|
65
66
|
pages.forEach((page) => {
|
|
66
67
|
var _a;
|
|
@@ -104,6 +105,7 @@ function configure(config = {}) {
|
|
|
104
105
|
const dataMiddleware = (0, data_js_1.default)({
|
|
105
106
|
plan,
|
|
106
107
|
events,
|
|
108
|
+
contextIdGenerator,
|
|
107
109
|
});
|
|
108
110
|
// Prepare form middleware and its constituent parts
|
|
109
111
|
// These are used for any forms, including waypoint page forms.
|
|
@@ -119,11 +121,13 @@ function configure(config = {}) {
|
|
|
119
121
|
sessionTtl: session.ttl,
|
|
120
122
|
});
|
|
121
123
|
// Setup waypoint router, which includes routes for every defined waypoint
|
|
124
|
+
const globalErrorVisibility = errorVisibility;
|
|
122
125
|
const journeyRouter = (0, journey_js_1.default)({
|
|
123
126
|
globalHooks: hooks,
|
|
124
127
|
pages,
|
|
125
128
|
plan,
|
|
126
129
|
csrfMiddleware,
|
|
130
|
+
globalErrorVisibility,
|
|
127
131
|
});
|
|
128
132
|
// Create the mounting function
|
|
129
133
|
const mount = (0, mount_js_1.default)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/lib/configure.js"],"names":[],"mappings":";;;;;AAAA,qDAA8C;AAC9C,+BAA+B;AAC/B,mCAAuC;AACvC,kEAAgD;AAChD,gEAAoC;AAEpC,4FAAgE;AAChE,gEAAqC;AACrC,0DAAsC;AAEtC,oEAA+C;AAC/C,0EAAqD;AACrD,sEAAiD;AAEjD,kEAAwD;AACxD,oEAA0D;AAE1D,0EAAgE;AAChE,oEAA0D;AAC1D,oEAA0D;AAE1D,kFAAuE;AACvE,oEAA0D;AAE1D;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AACH,SAAwB,SAAS,CAAC,MAAM,GAAG,EAAE;;IAC3C,wEAAwE;IACxE,uBAAuB;IACvB,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACxC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,cAAc,GAAG,IAAA,mCAAqB,EAAC,MAAM,CAAC,CAAC;IACrD,MAAM,EACJ,QAAQ,EACR,KAAK,GAAG,EAAE,EACV,OAAO,GAAG;QACR,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,IAAI;QACT,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,SAAS;KACjB,EACD,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,IAAI,EACX,KAAK,GAAG,EAAE,EACV,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,EAAE,EACX,IAAI,GAAG;QACL,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACtB,EACD,kBAAkB,GAAG,SAAS,EAC9B,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/lib/configure.js"],"names":[],"mappings":"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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -7,3 +7,5 @@ export const REQUEST_PHASE_GATHER: unique symbol;
|
|
|
7
7
|
export const REQUEST_PHASE_VALIDATE: unique symbol;
|
|
8
8
|
export const REQUEST_PHASE_REDIRECT: unique symbol;
|
|
9
9
|
export const REQUEST_PHASE_RENDER: unique symbol;
|
|
10
|
+
export const CONFIG_ERROR_VISIBILITY_ONSUBMIT: unique symbol;
|
|
11
|
+
export const CONFIG_ERROR_VISIBILITY_ALWAYS: unique symbol;
|
package/dist/lib/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REQUEST_PHASE_RENDER = exports.REQUEST_PHASE_REDIRECT = exports.REQUEST_PHASE_VALIDATE = exports.REQUEST_PHASE_GATHER = exports.REQUEST_PHASE_SANITISE = exports.REQUEST_PHASE_STEER = void 0;
|
|
3
|
+
exports.CONFIG_ERROR_VISIBILITY_ALWAYS = exports.CONFIG_ERROR_VISIBILITY_ONSUBMIT = exports.REQUEST_PHASE_RENDER = exports.REQUEST_PHASE_REDIRECT = exports.REQUEST_PHASE_VALIDATE = exports.REQUEST_PHASE_GATHER = exports.REQUEST_PHASE_SANITISE = exports.REQUEST_PHASE_STEER = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* General-purpose references to the different request lifecycle phases.
|
|
6
6
|
*/
|
|
@@ -10,4 +10,6 @@ exports.REQUEST_PHASE_GATHER = Symbol('gather');
|
|
|
10
10
|
exports.REQUEST_PHASE_VALIDATE = Symbol('validate');
|
|
11
11
|
exports.REQUEST_PHASE_REDIRECT = Symbol('redirect');
|
|
12
12
|
exports.REQUEST_PHASE_RENDER = Symbol('render');
|
|
13
|
+
exports.CONFIG_ERROR_VISIBILITY_ONSUBMIT = Symbol('onsubmit');
|
|
14
|
+
exports.CONFIG_ERROR_VISIBILITY_ALWAYS = Symbol('always');
|
|
13
15
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.js"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.js"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,sBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,gCAAgC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACtD,QAAA,8BAA8B,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type ContextIdGenerator = import('../casa.js').ContextIdGenerator;
|
|
2
|
+
/**
|
|
3
|
+
* @typedef {import('../casa.js').ContextIdGenerator} ContextIdGenerator
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Creates an instance of a UUID generator.
|
|
7
|
+
*
|
|
8
|
+
* @returns {ContextIdGenerator} Generator function
|
|
9
|
+
*/
|
|
10
|
+
export function uuid(): ContextIdGenerator;
|
|
11
|
+
/**
|
|
12
|
+
* Returns a generator that returns the next incremental integer in a sequence.
|
|
13
|
+
*
|
|
14
|
+
* This generator does not take into account the removal of any contexts from
|
|
15
|
+
* session that were previously assigned a sequential ID. This means that IDs
|
|
16
|
+
* will be re-used when they are freed up.
|
|
17
|
+
*
|
|
18
|
+
* @returns {ContextIdGenerator} Generator function
|
|
19
|
+
*/
|
|
20
|
+
export function sequentialInteger(): ContextIdGenerator;
|
|
21
|
+
export function shortGuid({ length, prefix, pool, }?: {
|
|
22
|
+
length?: number | undefined;
|
|
23
|
+
prefix?: string | undefined;
|
|
24
|
+
pool?: string | undefined;
|
|
25
|
+
}): ({ reservedIds }: {
|
|
26
|
+
reservedIds: any;
|
|
27
|
+
}) => string;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shortGuid = exports.sequentialInteger = exports.uuid = void 0;
|
|
4
|
+
/* eslint-disable import/no-cycle */
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import('../casa.js').ContextIdGenerator} ContextIdGenerator
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Creates an instance of a UUID generator.
|
|
11
|
+
*
|
|
12
|
+
* @returns {ContextIdGenerator} Generator function
|
|
13
|
+
*/
|
|
14
|
+
const uuid = () => () => (0, node_crypto_1.randomUUID)();
|
|
15
|
+
exports.uuid = uuid;
|
|
16
|
+
/**
|
|
17
|
+
* Returns a generator that returns the next incremental integer in a sequence.
|
|
18
|
+
*
|
|
19
|
+
* This generator does not take into account the removal of any contexts from
|
|
20
|
+
* session that were previously assigned a sequential ID. This means that IDs
|
|
21
|
+
* will be re-used when they are freed up.
|
|
22
|
+
*
|
|
23
|
+
* @returns {ContextIdGenerator} Generator function
|
|
24
|
+
*/
|
|
25
|
+
const sequentialInteger = () => ({ reservedIds }) => {
|
|
26
|
+
const contextIds = Array.from(reservedIds).sort();
|
|
27
|
+
if (!contextIds.length) {
|
|
28
|
+
return '1';
|
|
29
|
+
}
|
|
30
|
+
// Find the first numeric ID that we can increment
|
|
31
|
+
let lastInSequence;
|
|
32
|
+
do {
|
|
33
|
+
lastInSequence = Number.parseInt(contextIds.pop(), 10);
|
|
34
|
+
} while (contextIds.length && Number.isNaN(lastInSequence));
|
|
35
|
+
return String(!Number.isNaN(lastInSequence) ? lastInSequence + 1 : 1);
|
|
36
|
+
};
|
|
37
|
+
exports.sequentialInteger = sequentialInteger;
|
|
38
|
+
const shortGuid = ({ length = 5, prefix = '', pool = 'abcdefhkmnprtwxy346789', } = {}) => ({ reservedIds }) => {
|
|
39
|
+
// Ambiguous characters excluded
|
|
40
|
+
const poolSize = pool.length;
|
|
41
|
+
const maxAttempts = 10;
|
|
42
|
+
let attempts = maxAttempts;
|
|
43
|
+
let id;
|
|
44
|
+
do {
|
|
45
|
+
id = Array(length).fill(0).map(() => pool.charAt(Math.floor(Math.random() * poolSize))).join('');
|
|
46
|
+
attempts--;
|
|
47
|
+
} while (attempts > 0 && reservedIds.includes(id));
|
|
48
|
+
if (attempts === 0) {
|
|
49
|
+
throw new Error(`Failed to generate GUID after ${maxAttempts} iterations`);
|
|
50
|
+
}
|
|
51
|
+
return `${prefix}${id}`;
|
|
52
|
+
};
|
|
53
|
+
exports.shortGuid = shortGuid;
|
|
54
|
+
//# sourceMappingURL=context-id-generators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-id-generators.js","sourceRoot":"","sources":["../../src/lib/context-id-generators.js"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,6CAAyC;AAEzC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,IAAA,wBAAU,GAAE,CAAC;AAuDpC,oBAAI;AArDN;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACtB,OAAO,GAAG,CAAC;KACZ;IAED,kDAAkD;IAClD,IAAI,cAAc,CAAC;IACnB,GAAG;QACD,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;KACxD,QAAQ,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;IAE5D,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AA+BA,8CAAiB;AA7BnB,MAAM,SAAS,GAAG,CAAC,EACjB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,wBAAwB,GAChC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC7B,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAE7B,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,QAAQ,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,CAAC;IAEP,GAAG;QACD,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,QAAQ,EAAE,CAAC;KACZ,QAAQ,QAAQ,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;IAEnD,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,WAAW,aAAa,CAAC,CAAC;KAC5E;IAED,OAAO,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC;AAC1B,CAAC,CAAA;AAQC,8BAAS"}
|
package/dist/middleware/data.js
CHANGED
|
@@ -19,7 +19,7 @@ const editOrigin = (req) => {
|
|
|
19
19
|
}
|
|
20
20
|
return '';
|
|
21
21
|
};
|
|
22
|
-
function dataMiddleware({ plan, events, }) {
|
|
22
|
+
function dataMiddleware({ plan, events, contextIdGenerator, }) {
|
|
23
23
|
return [
|
|
24
24
|
(req, res, next) => {
|
|
25
25
|
/* ------------------------------------------------ Request decorations */
|
|
@@ -34,6 +34,12 @@ function dataMiddleware({ plan, events, }) {
|
|
|
34
34
|
editMode: (has(req === null || req === void 0 ? void 0 : req.query, 'edit') && has(req === null || req === void 0 ? void 0 : req.query, 'editorigin')) || (has(req === null || req === void 0 ? void 0 : req.body, 'edit') && has(req === null || req === void 0 ? void 0 : req.body, 'editorigin')), editOrigin: editOrigin(req) });
|
|
35
35
|
// Grab chosen language from session
|
|
36
36
|
req.casa.journeyContext.nav.language = req.session.language;
|
|
37
|
+
// Context ID generator
|
|
38
|
+
Object.defineProperty(req, JourneyContext_js_1.default.ID_GENERATOR_REQ_KEY, {
|
|
39
|
+
value: contextIdGenerator,
|
|
40
|
+
enumerable: false,
|
|
41
|
+
writable: false,
|
|
42
|
+
});
|
|
37
43
|
/* ------------------------------------------------- Template variables */
|
|
38
44
|
// Capture mount URL that will be used in generating all browser URLs
|
|
39
45
|
const mountUrl = (0, utils_js_1.validateUrlPath)(`${req.baseUrl}/`.replace(/\/+/g, '/'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/middleware/data.js"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,gFAAgF;;;;;AAEhF,oDAA4B;AAC5B,iFAAsD;AACtD,8CAAkD;AAClD,6EAAiD;AAEjD,MAAM,EAAE,GAAG,EAAE,GAAG,gBAAM,CAAC;AAEvB,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE;IACzB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;QAChC,OAAO,IAAA,yBAAW,EAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;KACxD;IACD,IAAI,GAAG,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,EAAE,YAAY,CAAC,EAAE;QAChC,OAAO,IAAA,yBAAW,EAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KACvD;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAA;AAED,SAAwB,cAAc,CAAC,EACrC,IAAI,EACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/middleware/data.js"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ exports.default = ({ waypoint, fields = [], }) => [
|
|
|
28
28
|
(req, res, next) => {
|
|
29
29
|
// Store a copy of the journey context before modifying it. This is useful
|
|
30
30
|
// for any comparison work that may be done in subsequent middleware.
|
|
31
|
-
req.casa.archivedJourneyContext = JourneyContext_js_1.default.fromContext(req.casa.journeyContext);
|
|
31
|
+
req.casa.archivedJourneyContext = JourneyContext_js_1.default.fromContext(req.casa.journeyContext, req);
|
|
32
32
|
// Ignore data for any non-persistent fields
|
|
33
33
|
// ESLint disabled as `fields`, `i` and `name` are dev-controlled
|
|
34
34
|
/* eslint-disable security/detect-object-injection */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gather-fields.js","sourceRoot":"","sources":["../../src/middleware/gather-fields.js"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,iCAAiC;AACjC,wDAAwD;AACxD,mEAAmE;;;;;AAEnE,iFAAsD;AACtD,sDAA2D;AAE3D;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,kBAAe,CAAC,EACd,QAAQ,EACR,MAAM,GAAG,EAAE,GACZ,EAAE,EAAE,CAAC;IACJ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,0EAA0E;QAC1E,qEAAqE;QACrE,GAAG,CAAC,IAAI,CAAC,sBAAsB,GAAG,2BAAc,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"gather-fields.js","sourceRoot":"","sources":["../../src/middleware/gather-fields.js"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,iCAAiC;AACjC,wDAAwD;AACxD,mEAAmE;;;;;AAEnE,iFAAsD;AACtD,sDAA2D;AAE3D;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,kBAAe,CAAC,EACd,QAAQ,EACR,MAAM,GAAG,EAAE,GACZ,EAAE,EAAE,CAAC;IACJ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,0EAA0E;QAC1E,qEAAqE;QACrE,GAAG,CAAC,IAAI,CAAC,sBAAsB,GAAG,2BAAc,CAAC,WAAW,CAC1D,GAAG,CAAC,IAAI,CAAC,cAAc,EACvB,GAAG,CACJ,CAAC;QAEF,4CAA4C;QAC5C,iEAAiE;QACjE,qDAAqD;QACrD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACxE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAC/D;SACF;QACD,oDAAoD;QAEpD,wEAAwE;QACxE,2EAA2E;QAC3E,0EAA0E;QAC1E,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAC/D,2BAAc,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;YAC9D,QAAQ,EAAE;gBACR,gBAAgB,EAAE,mCAAoB;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC;CACF,CAAC"}
|
|
@@ -29,7 +29,7 @@ exports.default = ({ waypoint, fields = [], }) => {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
/* eslint-enable security/detect-object-injection */
|
|
32
|
-
const journeyContext = JourneyContext_js_1.default.fromContext(req.casa.journeyContext);
|
|
32
|
+
const journeyContext = JourneyContext_js_1.default.fromContext(req.casa.journeyContext, req);
|
|
33
33
|
journeyContext.setDataForPage(waypoint, prunedBody);
|
|
34
34
|
// Second, prune any fields that do not pass the validation conditional,
|
|
35
35
|
// and process those that do.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitise-fields.js","sourceRoot":"","sources":["../../src/middleware/sanitise-fields.js"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,0CAA0C;AAC1C,qEAAqE;;;;;AAErE,oDAAuB;AACvB,+DAA2C;AAC3C,iFAAsD;AAEtD,kBAAe,CAAC,EACd,QAAQ,EACR,MAAM,GAAG,EAAE,GACZ,EAAE,EAAE;IACH,4FAA4F;IAC5F,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhG,aAAa;IACb,OAAO;QACL,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACjB,sEAAsE;YACtE,+CAA+C;YAC/C,uEAAuE;YACvE,qDAAqD;YACrD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,gBAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBAC7E,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACvD;aACF;YACD,oDAAoD;YAEpD,MAAM,cAAc,GAAG,2BAAc,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sanitise-fields.js","sourceRoot":"","sources":["../../src/middleware/sanitise-fields.js"],"names":[],"mappings":"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"}
|
package/dist/mjs/esm-wrapper.js
CHANGED
|
@@ -10,6 +10,7 @@ export const { ValidationError } = casa;
|
|
|
10
10
|
export const { ValidatorFactory } = casa;
|
|
11
11
|
export const { configure } = casa;
|
|
12
12
|
export const { constants } = casa;
|
|
13
|
+
export const { contextIdGenerators } = casa;
|
|
13
14
|
export const { endSession } = casa;
|
|
14
15
|
export const { field } = casa;
|
|
15
16
|
export const { nunjucksFilters } = casa;
|
package/dist/routes/journey.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @param {JourneyRouterOptions} opts Options
|
|
7
7
|
* @returns {MutableRouter} Router
|
|
8
8
|
*/
|
|
9
|
-
export default function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, }: JourneyRouterOptions): MutableRouter;
|
|
9
|
+
export default function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, globalErrorVisibility, }: JourneyRouterOptions): MutableRouter;
|
|
10
10
|
/**
|
|
11
11
|
* Options to configure static router
|
|
12
12
|
*/
|
package/dist/routes/journey.js
CHANGED
|
@@ -14,6 +14,7 @@ const progress_journey_js_1 = __importDefault(require("../middleware/progress-jo
|
|
|
14
14
|
const waypoint_url_js_1 = __importDefault(require("../lib/waypoint-url.js"));
|
|
15
15
|
const logger_js_1 = __importDefault(require("../lib/logger.js"));
|
|
16
16
|
const utils_js_1 = require("../lib/utils.js");
|
|
17
|
+
const constants_js_1 = require("../lib/constants.js");
|
|
17
18
|
const log = (0, logger_js_1.default)('routes:journey');
|
|
18
19
|
/**
|
|
19
20
|
* @access private
|
|
@@ -48,6 +49,25 @@ const renderMiddlewareFactory = (view, contextFactory) => [
|
|
|
48
49
|
});
|
|
49
50
|
},
|
|
50
51
|
];
|
|
52
|
+
/**
|
|
53
|
+
* generate page validation error
|
|
54
|
+
*
|
|
55
|
+
* @param {object} errors object of page validation error
|
|
56
|
+
* @param {object} req casa request object
|
|
57
|
+
* @returns {object[]} array of error objects
|
|
58
|
+
*/
|
|
59
|
+
const generateGovukErrors = (errors, req) => Object.values(errors || {}).map(([error]) => ({
|
|
60
|
+
text: req.t(error.summary, error.variables),
|
|
61
|
+
href: error.fieldHref,
|
|
62
|
+
}));
|
|
63
|
+
/**
|
|
64
|
+
* handle errorVisibility flag and function and return boolean
|
|
65
|
+
*
|
|
66
|
+
* @param {symbol | Function} errorVisibility errorVisibility config option
|
|
67
|
+
* @param {object} req casa request object
|
|
68
|
+
* @returns {boolean} true if errorVisibility is "always" or function condition true
|
|
69
|
+
*/
|
|
70
|
+
const resolveErrorVisibility = (req, errorVisibility) => (typeof errorVisibility === 'function' ? errorVisibility({ req }) : errorVisibility === constants_js_1.CONFIG_ERROR_VISIBILITY_ALWAYS);
|
|
51
71
|
/**
|
|
52
72
|
* Create an instance of the router for all waypoints visited during a Journey
|
|
53
73
|
* through the Plan.
|
|
@@ -56,7 +76,7 @@ const renderMiddlewareFactory = (view, contextFactory) => [
|
|
|
56
76
|
* @param {JourneyRouterOptions} opts Options
|
|
57
77
|
* @returns {MutableRouter} Router
|
|
58
78
|
*/
|
|
59
|
-
function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, }) {
|
|
79
|
+
function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, globalErrorVisibility, }) {
|
|
60
80
|
// Router
|
|
61
81
|
const router = new MutableRouter_js_1.default();
|
|
62
82
|
// Special "_" route which handles redirecting the user between sub-apps
|
|
@@ -102,7 +122,7 @@ function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, }) {
|
|
|
102
122
|
...csrfMiddleware,
|
|
103
123
|
];
|
|
104
124
|
pages.forEach((page) => {
|
|
105
|
-
const { waypoint, view, hooks: pageHooks = [], fields } = page;
|
|
125
|
+
const { waypoint, view, hooks: pageHooks = [], fields, errorVisibility } = page;
|
|
106
126
|
const waypointPath = `/${waypoint}`;
|
|
107
127
|
let commonWaypointMiddleware = [
|
|
108
128
|
(req, res, next) => {
|
|
@@ -118,10 +138,18 @@ function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, }) {
|
|
|
118
138
|
...(0, skip_waypoint_js_1.default)({ waypoint }),
|
|
119
139
|
];
|
|
120
140
|
}
|
|
121
|
-
router.get(waypointPath, ...commonMiddleware, ...commonWaypointMiddleware, ...(0, utils_js_1.resolveMiddlewareHooks)('journey.presteer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, steer_journey_js_1.default)({ waypoint, plan }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.poststeer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.prerender', waypointPath, [...globalHooks, ...pageHooks]), renderMiddlewareFactory(view, (req) =>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
141
|
+
router.get(waypointPath, ...commonMiddleware, ...commonWaypointMiddleware, ...(0, utils_js_1.resolveMiddlewareHooks)('journey.presteer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, steer_journey_js_1.default)({ waypoint, plan }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.poststeer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.prerender', waypointPath, [...globalHooks, ...pageHooks]), renderMiddlewareFactory(view, (req) => {
|
|
142
|
+
var _a;
|
|
143
|
+
const displayErrors = resolveErrorVisibility(req, globalErrorVisibility) || resolveErrorVisibility(req, errorVisibility);
|
|
144
|
+
const errors = displayErrors && ((_a = req.casa.journeyContext.getValidationErrorsForPageByField(waypoint)) !== null && _a !== void 0 ? _a : Object.create(null));
|
|
145
|
+
const govukErrors = displayErrors && generateGovukErrors(errors, req);
|
|
146
|
+
return ({
|
|
147
|
+
formUrl: (0, waypoint_url_js_1.default)({ mountUrl: `${req.baseUrl}/`, waypoint }),
|
|
148
|
+
formData: req.casa.journeyContext.getDataForPage(waypoint),
|
|
149
|
+
formErrors: (Object.keys(errors).length && displayErrors) ? errors : null,
|
|
150
|
+
formErrorsGovukArray: (govukErrors.length && displayErrors) ? govukErrors : null,
|
|
151
|
+
});
|
|
152
|
+
}));
|
|
125
153
|
router.post(waypointPath, ...commonMiddleware, ...commonWaypointMiddleware, ...(0, utils_js_1.resolveMiddlewareHooks)('journey.presteer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, steer_journey_js_1.default)({ waypoint, plan }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.poststeer', waypointPath, [...globalHooks, ...pageHooks]), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.presanitise', waypointPath, [...globalHooks, ...pageHooks]), ...(0, sanitise_fields_js_1.default)({ waypoint, fields }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.postsanitise', waypointPath, [...globalHooks, ...pageHooks]), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.pregather', waypointPath, [...globalHooks, ...pageHooks]), ...(0, gather_fields_js_1.default)({ waypoint, fields }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.postgather', waypointPath, [...globalHooks, ...pageHooks]), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.prevalidate', waypointPath, [...globalHooks, ...pageHooks]), ...(0, validate_fields_js_1.default)({ waypoint, fields, plan }), ...(0, utils_js_1.resolveMiddlewareHooks)('journey.postvalidate', waypointPath, [...globalHooks, ...pageHooks]),
|
|
126
154
|
// If there were validation errors, jump out of this route and into the
|
|
127
155
|
// next, where the errors will be rendered
|
|
@@ -136,10 +164,7 @@ function journeyRouter({ globalHooks, pages, plan, csrfMiddleware, }) {
|
|
|
136
164
|
// first one is shown.
|
|
137
165
|
// Disabling security/detect-object-injection rule because both `errors`
|
|
138
166
|
// and the `k` property are known entities
|
|
139
|
-
const govukErrors =
|
|
140
|
-
text: req.t(errors[k][0].summary, errors[k][0].variables),
|
|
141
|
-
href: errors[k][0].fieldHref, /* eslint-disable-line security/detect-object-injection */
|
|
142
|
-
}));
|
|
167
|
+
const govukErrors = generateGovukErrors(errors, req);
|
|
143
168
|
return {
|
|
144
169
|
formUrl: (0, waypoint_url_js_1.default)({ mountUrl: `${req.baseUrl}/`, waypoint }),
|
|
145
170
|
formData: req.body,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey.js","sourceRoot":"","sources":["../../src/routes/journey.js"],"names":[],"mappings":";;;;;AAAA,iDAAiD;AACjD,+EAAoD;AACpD,sFAA2E;AAC3E,sFAA2E;AAC3E,0FAA+E;AAC/E,sFAA2E;AAC3E,0FAA+E;AAC/E,4FAAiF;AACjF,6EAAiD;AACjD,iEAAsC;AACtC,8CAAyD;
|
|
1
|
+
{"version":3,"file":"journey.js","sourceRoot":"","sources":["../../src/routes/journey.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dwp/govuk-casa",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.13.0",
|
|
4
4
|
"description": "A framework for building GOVUK Collect-And-Submit-Applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"luxon": "3.3.0",
|
|
66
66
|
"nunjucks": "3.2.4",
|
|
67
67
|
"path-to-regexp": "6.2.1",
|
|
68
|
-
"uuid": "9.0.0",
|
|
69
68
|
"validator": "13.9.0"
|
|
70
69
|
},
|
|
71
70
|
"devDependencies": {
|
package/src/casa.js
CHANGED
|
@@ -11,6 +11,7 @@ import waypointUrl from './lib/waypoint-url.js';
|
|
|
11
11
|
import endSession from './lib/end-session.js';
|
|
12
12
|
import * as nunjucksFilters from './lib/nunjucks-filters.js';
|
|
13
13
|
import * as constants from './lib/constants.js';
|
|
14
|
+
import * as contextIdGenerators from './lib/context-id-generators.js';
|
|
14
15
|
|
|
15
16
|
/** @module @dwp/govuk-casa */
|
|
16
17
|
export {
|
|
@@ -32,6 +33,9 @@ export {
|
|
|
32
33
|
|
|
33
34
|
// Constants
|
|
34
35
|
constants,
|
|
36
|
+
|
|
37
|
+
// Context ID generators
|
|
38
|
+
contextIdGenerators,
|
|
35
39
|
};
|
|
36
40
|
|
|
37
41
|
/* ----------------------------------------------------------------- Typedefs */
|
|
@@ -160,6 +164,8 @@ export {
|
|
|
160
164
|
* @property {HelmetConfigurator} [helmetConfigurator] Helmet configuration manipulator function
|
|
161
165
|
* @property {number} [formMaxParams=25] Max number of form parameters to ingest
|
|
162
166
|
* @property {number|string} [formMaxBytes="50KB"] Max total form payload size to ingest
|
|
167
|
+
* @property {ContextIdGenerator} [contextIdGenerator] Custom context ID generator
|
|
168
|
+
* @property {symbol|Function} [errorVisibility] option to keep page errors active on GET request
|
|
163
169
|
*/
|
|
164
170
|
|
|
165
171
|
/**
|
|
@@ -330,3 +336,24 @@ export {
|
|
|
330
336
|
* @property {any} [nav] Navigation meta
|
|
331
337
|
* @property {any} [identity] Identity meta
|
|
332
338
|
*/
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* @typedef ContextIdGeneratorParams
|
|
342
|
+
* @property {object} args Arguments
|
|
343
|
+
* @property {import('express').Request} args.req Request
|
|
344
|
+
* @property {[string]} args.reservedIds List of IDs already in use in session or request
|
|
345
|
+
*/
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Generates a GUID for use as a journey context ID. This ID must not clash with
|
|
349
|
+
* any other context IDs in the given session.
|
|
350
|
+
*
|
|
351
|
+
* The resulting ID must match these criteria:
|
|
352
|
+
* - A string
|
|
353
|
+
* - Between 1 and 64 characters
|
|
354
|
+
* - Contain only the characters a-z, 0-9, -
|
|
355
|
+
*
|
|
356
|
+
* @callback ContextIdGenerator
|
|
357
|
+
* @param {ContextIdGeneratorParams} params Parameters
|
|
358
|
+
* @returns {string} A newly generated GUID
|
|
359
|
+
*/
|