@dwp/govuk-casa 9.7.0 → 10.1.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/dist/assets/css/casa.css +1 -1
- package/dist/assets/css/casa.css.map +1 -1
- package/dist/casa.d.ts +90 -44
- package/dist/casa.d.ts.map +1 -0
- package/dist/casa.js +85 -101
- package/dist/core-plugins/edit-snapshot/src/configure.d.ts +1 -0
- package/dist/core-plugins/edit-snapshot/src/configure.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/configure.js +7 -14
- package/dist/core-plugins/edit-snapshot/src/index.d.ts +1 -0
- package/dist/core-plugins/edit-snapshot/src/index.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/index.js +3 -9
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts +2 -1
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js +8 -13
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts +2 -1
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js +13 -18
- package/dist/core-plugins/edit-snapshot/src/utils.d.ts +8 -5
- package/dist/core-plugins/edit-snapshot/src/utils.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/utils.js +37 -19
- package/dist/core-plugins/index.d.ts +1 -0
- package/dist/core-plugins/index.d.ts.map +1 -0
- package/dist/core-plugins/index.js +1 -9
- package/dist/lib/CasaTemplateLoader.d.ts +1 -0
- package/dist/lib/CasaTemplateLoader.d.ts.map +1 -0
- package/dist/lib/CasaTemplateLoader.js +2 -6
- package/dist/lib/JourneyContext.d.ts +22 -11
- package/dist/lib/JourneyContext.d.ts.map +1 -0
- package/dist/lib/JourneyContext.js +40 -45
- package/dist/lib/MutableRouter.d.ts +79 -55
- package/dist/lib/MutableRouter.d.ts.map +1 -0
- package/dist/lib/MutableRouter.js +53 -45
- package/dist/lib/NullObject.d.ts +3 -0
- package/dist/lib/NullObject.d.ts.map +1 -0
- package/dist/lib/NullObject.js +3 -0
- package/dist/lib/Plan.d.ts +2 -1
- package/dist/lib/Plan.d.ts.map +1 -0
- package/dist/lib/Plan.js +44 -62
- package/dist/lib/ValidationError.d.ts +2 -1
- package/dist/lib/ValidationError.d.ts.map +1 -0
- package/dist/lib/ValidationError.js +3 -11
- package/dist/lib/ValidatorFactory.d.ts +5 -6
- package/dist/lib/ValidatorFactory.d.ts.map +1 -0
- package/dist/lib/ValidatorFactory.js +4 -12
- package/dist/lib/configuration-ingestor.d.ts +10 -22
- package/dist/lib/configuration-ingestor.d.ts.map +1 -0
- package/dist/lib/configuration-ingestor.js +61 -143
- package/dist/lib/configure.d.ts +2 -1
- package/dist/lib/configure.d.ts.map +1 -0
- package/dist/lib/configure.js +40 -52
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +8 -12
- package/dist/lib/context-id-generators.d.ts +1 -0
- package/dist/lib/context-id-generators.d.ts.map +1 -0
- package/dist/lib/context-id-generators.js +4 -9
- package/dist/lib/end-session.d.ts +2 -1
- package/dist/lib/end-session.d.ts.map +1 -0
- package/dist/lib/end-session.js +4 -11
- package/dist/lib/field.d.ts +2 -1
- package/dist/lib/field.d.ts.map +1 -0
- package/dist/lib/field.js +11 -21
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +13 -65
- package/dist/lib/logger.d.ts +25 -2
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +18 -9
- package/dist/lib/mount.d.ts +1 -0
- package/dist/lib/mount.d.ts.map +1 -0
- package/dist/lib/mount.js +10 -16
- package/dist/lib/nunjucks-filters.d.ts +7 -3
- package/dist/lib/nunjucks-filters.d.ts.map +1 -0
- package/dist/lib/nunjucks-filters.js +58 -71
- package/dist/lib/nunjucks.d.ts +4 -4
- package/dist/lib/nunjucks.d.ts.map +1 -0
- package/dist/lib/nunjucks.js +14 -26
- package/dist/lib/utils.d.ts +4 -2
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +14 -28
- package/dist/lib/validators/dateObject.d.ts +1 -0
- package/dist/lib/validators/dateObject.d.ts.map +1 -0
- package/dist/lib/validators/dateObject.js +14 -21
- package/dist/lib/validators/email.d.ts +1 -0
- package/dist/lib/validators/email.d.ts.map +1 -0
- package/dist/lib/validators/email.js +8 -15
- package/dist/lib/validators/inArray.d.ts +1 -0
- package/dist/lib/validators/inArray.d.ts.map +1 -0
- package/dist/lib/validators/inArray.js +8 -15
- package/dist/lib/validators/index.d.ts +1 -0
- package/dist/lib/validators/index.d.ts.map +1 -0
- package/dist/lib/validators/index.js +21 -27
- package/dist/lib/validators/nino.d.ts +1 -0
- package/dist/lib/validators/nino.d.ts.map +1 -0
- package/dist/lib/validators/nino.js +6 -13
- package/dist/lib/validators/postalAddressObject.d.ts +1 -0
- package/dist/lib/validators/postalAddressObject.d.ts.map +1 -0
- package/dist/lib/validators/postalAddressObject.js +12 -19
- package/dist/lib/validators/range.d.ts +1 -0
- package/dist/lib/validators/range.d.ts.map +1 -0
- package/dist/lib/validators/range.js +6 -13
- package/dist/lib/validators/regex.d.ts +1 -0
- package/dist/lib/validators/regex.d.ts.map +1 -0
- package/dist/lib/validators/regex.js +6 -13
- package/dist/lib/validators/required.d.ts +1 -0
- package/dist/lib/validators/required.d.ts.map +1 -0
- package/dist/lib/validators/required.js +9 -17
- package/dist/lib/validators/strlen.d.ts +1 -0
- package/dist/lib/validators/strlen.d.ts.map +1 -0
- package/dist/lib/validators/strlen.js +6 -13
- package/dist/lib/validators/wordCount.d.ts +1 -0
- package/dist/lib/validators/wordCount.d.ts.map +1 -0
- package/dist/lib/validators/wordCount.js +6 -13
- package/dist/lib/waypoint-url.d.ts +3 -2
- package/dist/lib/waypoint-url.d.ts.map +1 -0
- package/dist/lib/waypoint-url.js +12 -19
- package/dist/middleware/body-parser.d.ts +1 -0
- package/dist/middleware/body-parser.d.ts.map +1 -0
- package/dist/middleware/body-parser.js +4 -9
- package/dist/middleware/csrf.d.ts +1 -0
- package/dist/middleware/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf.js +4 -8
- package/dist/middleware/data.d.ts +2 -3
- package/dist/middleware/data.d.ts.map +1 -0
- package/dist/middleware/data.js +23 -25
- package/dist/middleware/gather-fields.d.ts +3 -1
- package/dist/middleware/gather-fields.d.ts.map +1 -0
- package/dist/middleware/gather-fields.js +13 -14
- package/dist/middleware/i18n.d.ts +1 -0
- package/dist/middleware/i18n.d.ts.map +1 -0
- package/dist/middleware/i18n.js +26 -31
- package/dist/middleware/post.d.ts +4 -2
- package/dist/middleware/post.d.ts.map +1 -0
- package/dist/middleware/post.js +6 -11
- package/dist/middleware/pre.d.ts +2 -1
- package/dist/middleware/pre.d.ts.map +1 -0
- package/dist/middleware/pre.js +6 -12
- package/dist/middleware/progress-journey.d.ts +5 -3
- package/dist/middleware/progress-journey.d.ts.map +1 -0
- package/dist/middleware/progress-journey.js +20 -18
- package/dist/middleware/sanitise-fields.d.ts +5 -3
- package/dist/middleware/sanitise-fields.d.ts.map +1 -0
- package/dist/middleware/sanitise-fields.js +25 -17
- package/dist/middleware/serve-first-waypoint.d.ts +1 -0
- package/dist/middleware/serve-first-waypoint.d.ts.map +1 -0
- package/dist/middleware/serve-first-waypoint.js +3 -6
- package/dist/middleware/session.d.ts +15 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +53 -57
- package/dist/middleware/skip-waypoint.d.ts +3 -2
- package/dist/middleware/skip-waypoint.d.ts.map +1 -0
- package/dist/middleware/skip-waypoint.js +15 -14
- package/dist/middleware/steer-journey.d.ts +2 -1
- package/dist/middleware/steer-journey.d.ts.map +1 -0
- package/dist/middleware/steer-journey.js +7 -13
- package/dist/middleware/strip-proxy-path.d.ts +3 -2
- package/dist/middleware/strip-proxy-path.d.ts.map +1 -0
- package/dist/middleware/strip-proxy-path.js +24 -24
- package/dist/middleware/validate-fields.d.ts +7 -4
- package/dist/middleware/validate-fields.d.ts.map +1 -0
- package/dist/middleware/validate-fields.js +22 -11
- package/dist/routes/ancillary.d.ts +1 -0
- package/dist/routes/ancillary.d.ts.map +1 -0
- package/dist/routes/ancillary.js +3 -10
- package/dist/routes/journey.d.ts +7 -2
- package/dist/routes/journey.d.ts.map +1 -0
- package/dist/routes/journey.js +56 -55
- package/dist/routes/static.d.ts +1 -0
- package/dist/routes/static.d.ts.map +1 -0
- package/dist/routes/static.js +15 -23
- package/package.json +30 -36
- package/src/casa.js +63 -31
- package/src/core-plugins/edit-snapshot/src/post-steer-hook.js +1 -0
- package/src/core-plugins/edit-snapshot/src/pre-steer-hook.js +2 -1
- package/src/core-plugins/edit-snapshot/src/utils.js +29 -1
- package/src/lib/JourneyContext.js +31 -28
- package/src/lib/MutableRouter.js +52 -38
- package/src/lib/NullObject.js +4 -0
- package/src/lib/Plan.js +41 -55
- package/src/lib/ValidationError.js +2 -4
- package/src/lib/ValidatorFactory.js +3 -5
- package/src/lib/configuration-ingestor.js +18 -38
- package/src/lib/configure.js +7 -10
- package/src/lib/end-session.js +1 -1
- package/src/lib/field.js +7 -12
- package/src/lib/logger.js +16 -0
- package/src/lib/mount.js +1 -1
- package/src/lib/nunjucks-filters.js +51 -61
- package/src/lib/nunjucks.js +5 -13
- package/src/lib/utils.js +2 -1
- package/src/lib/validators/dateObject.js +3 -4
- package/src/lib/validators/postalAddressObject.js +6 -7
- package/src/lib/validators/required.js +1 -3
- package/src/lib/waypoint-url.js +15 -19
- package/src/middleware/csrf.js +1 -1
- package/src/middleware/data.js +13 -13
- package/src/middleware/gather-fields.js +8 -2
- package/src/middleware/i18n.js +9 -6
- package/src/middleware/post.js +3 -1
- package/src/middleware/pre.js +1 -1
- package/src/middleware/progress-journey.js +8 -0
- package/src/middleware/sanitise-fields.js +17 -2
- package/src/middleware/session.js +53 -12
- package/src/middleware/skip-waypoint.js +8 -1
- package/src/middleware/steer-journey.js +1 -1
- package/src/middleware/strip-proxy-path.js +21 -16
- package/src/middleware/validate-fields.js +19 -0
- package/src/routes/journey.js +18 -8
- package/src/routes/static.js +5 -4
- package/views/casa/layouts/journey.njk +1 -1
- package/views/casa/layouts/main.njk +11 -21
- package/dist/casa.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/configure.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/index.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/utils.js.map +0 -1
- package/dist/core-plugins/index.js.map +0 -1
- package/dist/lib/CasaTemplateLoader.js.map +0 -1
- package/dist/lib/JourneyContext.js.map +0 -1
- package/dist/lib/MutableRouter.js.map +0 -1
- package/dist/lib/Plan.js.map +0 -1
- package/dist/lib/ValidationError.js.map +0 -1
- package/dist/lib/ValidatorFactory.js.map +0 -1
- package/dist/lib/configuration-ingestor.js.map +0 -1
- package/dist/lib/configure.js.map +0 -1
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/context-id-generators.js.map +0 -1
- package/dist/lib/dirname.cjs +0 -1
- package/dist/lib/dirname.d.cts +0 -2
- package/dist/lib/end-session.js.map +0 -1
- package/dist/lib/field.js.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/mount.js.map +0 -1
- package/dist/lib/nunjucks-filters.js.map +0 -1
- package/dist/lib/nunjucks.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/dist/lib/validators/dateObject.js.map +0 -1
- package/dist/lib/validators/email.js.map +0 -1
- package/dist/lib/validators/inArray.js.map +0 -1
- package/dist/lib/validators/index.js.map +0 -1
- package/dist/lib/validators/nino.js.map +0 -1
- package/dist/lib/validators/postalAddressObject.js.map +0 -1
- package/dist/lib/validators/range.js.map +0 -1
- package/dist/lib/validators/regex.js.map +0 -1
- package/dist/lib/validators/required.js.map +0 -1
- package/dist/lib/validators/strlen.js.map +0 -1
- package/dist/lib/validators/wordCount.js.map +0 -1
- package/dist/lib/waypoint-url.js.map +0 -1
- package/dist/middleware/body-parser.js.map +0 -1
- package/dist/middleware/csrf.js.map +0 -1
- package/dist/middleware/data.js.map +0 -1
- package/dist/middleware/dirname.cjs +0 -1
- package/dist/middleware/dirname.d.cts +0 -2
- package/dist/middleware/gather-fields.js.map +0 -1
- package/dist/middleware/i18n.js.map +0 -1
- package/dist/middleware/post.js.map +0 -1
- package/dist/middleware/pre.js.map +0 -1
- package/dist/middleware/progress-journey.js.map +0 -1
- package/dist/middleware/sanitise-fields.js.map +0 -1
- package/dist/middleware/serve-first-waypoint.js.map +0 -1
- package/dist/middleware/session.js.map +0 -1
- package/dist/middleware/skip-waypoint.js.map +0 -1
- package/dist/middleware/steer-journey.js.map +0 -1
- package/dist/middleware/strip-proxy-path.js.map +0 -1
- package/dist/middleware/validate-fields.js.map +0 -1
- package/dist/mjs/esm-wrapper.js +0 -20
- package/dist/mjs/package.json +0 -3
- package/dist/package.json +0 -3
- package/dist/routes/ancillary.js.map +0 -1
- package/dist/routes/dirname.cjs +0 -1
- package/dist/routes/dirname.d.cts +0 -2
- package/dist/routes/journey.js.map +0 -1
- package/dist/routes/static.js.map +0 -1
- package/src/lib/dirname.cjs +0 -1
- package/src/middleware/dirname.cjs +0 -1
- package/src/routes/dirname.cjs +0 -1
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.verifyBody = verifyBody;
|
|
4
|
-
exports.default = bodyParserMiddleware;
|
|
5
|
-
const express_1 = require("express");
|
|
1
|
+
import { urlencoded as expressBodyParser } from "express";
|
|
6
2
|
/**
|
|
7
3
|
* @typedef {import("express").RequestHandler} RequestHandler
|
|
8
4
|
* @access private
|
|
@@ -28,7 +24,7 @@ const rConstructor = /constructor[='"[\]]/i;
|
|
|
28
24
|
* @returns {void}
|
|
29
25
|
* @throws {Error} For invalid bodies
|
|
30
26
|
*/
|
|
31
|
-
function verifyBody(req, res, buf, encoding) {
|
|
27
|
+
export function verifyBody(req, res, buf, encoding) {
|
|
32
28
|
const body = decodeURI(buf.toString(encoding)).replace(/[\s\u200B-\u200D\uFEFF]/g, "");
|
|
33
29
|
if (rProto.test(body)) {
|
|
34
30
|
throw new Error("Request body verification failed (__proto__)");
|
|
@@ -49,9 +45,9 @@ function verifyBody(req, res, buf, encoding) {
|
|
|
49
45
|
* @param {number} opts.formMaxBytes Max bytes that should be read
|
|
50
46
|
* @returns {RequestHandler[]} Middleware functions
|
|
51
47
|
*/
|
|
52
|
-
function bodyParserMiddleware({ formMaxParams, formMaxBytes }) {
|
|
48
|
+
export default function bodyParserMiddleware({ formMaxParams, formMaxBytes }) {
|
|
53
49
|
return [
|
|
54
|
-
(
|
|
50
|
+
expressBodyParser({
|
|
55
51
|
extended: true,
|
|
56
52
|
type: "application/x-www-form-urlencoded",
|
|
57
53
|
inflate: true,
|
|
@@ -61,4 +57,3 @@ function bodyParserMiddleware({ formMaxParams, formMaxBytes }) {
|
|
|
61
57
|
}),
|
|
62
58
|
];
|
|
63
59
|
}
|
|
64
|
-
//# sourceMappingURL=body-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.js"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,0CAFa,cAAc,EAAE,CAgB5B;6BA3BY,OAAO,SAAS,EAAE,cAAc"}
|
package/dist/middleware/csrf.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = csrfMiddleware;
|
|
4
|
-
const csrf_sync_1 = require("csrf-sync");
|
|
1
|
+
import { csrfSync } from "csrf-sync";
|
|
5
2
|
/**
|
|
6
3
|
* @typedef {import("express").RequestHandler} RequestHandler
|
|
7
4
|
* @access private
|
|
@@ -15,9 +12,9 @@ const csrf_sync_1 = require("csrf-sync");
|
|
|
15
12
|
*
|
|
16
13
|
* @returns {RequestHandler[]} Middleware functions
|
|
17
14
|
*/
|
|
18
|
-
function csrfMiddleware() {
|
|
19
|
-
const { csrfSynchronisedProtection } =
|
|
20
|
-
getTokenFromRequest: (req) => req.body
|
|
15
|
+
export default function csrfMiddleware() {
|
|
16
|
+
const { csrfSynchronisedProtection } = csrfSync({
|
|
17
|
+
getTokenFromRequest: (req) => req.body?._csrf,
|
|
21
18
|
});
|
|
22
19
|
return [
|
|
23
20
|
csrfSynchronisedProtection,
|
|
@@ -30,4 +27,3 @@ function csrfMiddleware() {
|
|
|
30
27
|
},
|
|
31
28
|
];
|
|
32
29
|
}
|
|
33
|
-
//# sourceMappingURL=csrf.js.map
|
|
@@ -9,11 +9,9 @@
|
|
|
9
9
|
* @param {Plan} opts.plan CASA Plan
|
|
10
10
|
* @param {ContextEventHandler[]} opts.events Event handlers
|
|
11
11
|
* @param {ContextIdGenerator} opts.contextIdGenerator Content ID generator
|
|
12
|
-
* @param {boolean} ops.govukRebrand Govuk rebrand feature flag
|
|
13
|
-
* @param opts.govukRebrand
|
|
14
12
|
* @returns {RequestHandler[]} Middleware functions
|
|
15
13
|
*/
|
|
16
|
-
export default function dataMiddleware({ plan, events, contextIdGenerator
|
|
14
|
+
export default function dataMiddleware({ plan, events, contextIdGenerator }: {
|
|
17
15
|
plan: Plan;
|
|
18
16
|
events: ContextEventHandler[];
|
|
19
17
|
contextIdGenerator: ContextIdGenerator;
|
|
@@ -22,3 +20,4 @@ export type RequestHandler = import("express").RequestHandler;
|
|
|
22
20
|
export type Plan = import("../casa.js").Plan;
|
|
23
21
|
export type ContextEventHandler = import("../casa.js").ContextEventHandler;
|
|
24
22
|
export type ContextIdGenerator = import("../casa.js").ContextIdGenerator;
|
|
23
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/middleware/data.js"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;GAYG;AACH,6EALG;IAAmB,IAAI,EAAf,IAAI;IACwB,MAAM,EAAlC,mBAAmB,EAAE;IACI,kBAAkB,EAA3C,kBAAkB;CAC1B,GAAU,cAAc,EAAE,CAsG5B;6BApJY,OAAO,SAAS,EAAE,cAAc;mBAKhC,OAAO,YAAY,EAAE,IAAI;kCAKzB,OAAO,YAAY,EAAE,mBAAmB;iCAKxC,OAAO,YAAY,EAAE,kBAAkB"}
|
package/dist/middleware/data.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = dataMiddleware;
|
|
7
|
-
const JourneyContext_js_1 = __importDefault(require("../lib/JourneyContext.js"));
|
|
8
|
-
const utils_js_1 = require("../lib/utils.js");
|
|
9
|
-
const waypoint_url_js_1 = __importDefault(require("../lib/waypoint-url.js"));
|
|
1
|
+
import JourneyContext from "../lib/JourneyContext.js";
|
|
2
|
+
import { validateUrlPath } from "../lib/utils.js";
|
|
3
|
+
import waypointUrl from "../lib/waypoint-url.js";
|
|
10
4
|
/**
|
|
11
5
|
* @typedef {import("express").RequestHandler} RequestHandler
|
|
12
6
|
* @access private
|
|
@@ -23,12 +17,18 @@ const waypoint_url_js_1 = __importDefault(require("../lib/waypoint-url.js"));
|
|
|
23
17
|
* @typedef {import("../casa.js").ContextIdGenerator} ContextIdGenerator
|
|
24
18
|
* @access private
|
|
25
19
|
*/
|
|
20
|
+
/**
|
|
21
|
+
* Get edit orgin
|
|
22
|
+
*
|
|
23
|
+
* @param {import("express").Request} req Express request
|
|
24
|
+
* @returns {string} Currently set edit origin
|
|
25
|
+
*/
|
|
26
26
|
const editOrigin = (req) => {
|
|
27
|
-
if (Object.hasOwn(req.query, "editorigin")) {
|
|
28
|
-
return (
|
|
27
|
+
if (req.query && Object.hasOwn(req.query, "editorigin")) {
|
|
28
|
+
return waypointUrl({ waypoint: req.query.editorigin });
|
|
29
29
|
}
|
|
30
30
|
if (req.body && Object.hasOwn(req.body, "editorigin")) {
|
|
31
|
-
return (
|
|
31
|
+
return waypointUrl({ waypoint: req.body.editorigin });
|
|
32
32
|
}
|
|
33
33
|
return "";
|
|
34
34
|
};
|
|
@@ -43,11 +43,9 @@ const editOrigin = (req) => {
|
|
|
43
43
|
* @param {Plan} opts.plan CASA Plan
|
|
44
44
|
* @param {ContextEventHandler[]} opts.events Event handlers
|
|
45
45
|
* @param {ContextIdGenerator} opts.contextIdGenerator Content ID generator
|
|
46
|
-
* @param {boolean} ops.govukRebrand Govuk rebrand feature flag
|
|
47
|
-
* @param opts.govukRebrand
|
|
48
46
|
* @returns {RequestHandler[]} Middleware functions
|
|
49
47
|
*/
|
|
50
|
-
function dataMiddleware({ plan, events, contextIdGenerator
|
|
48
|
+
export default function dataMiddleware({ plan, events, contextIdGenerator }) {
|
|
51
49
|
return [
|
|
52
50
|
(req, res, next) => {
|
|
53
51
|
/* ------------------------------------------------ Request decorations */
|
|
@@ -58,25 +56,27 @@ function dataMiddleware({ plan, events, contextIdGenerator, govukRebrand, }) {
|
|
|
58
56
|
plan,
|
|
59
57
|
// Current journey context, loaded from session, specified by
|
|
60
58
|
// `contextid` request parameter
|
|
61
|
-
journeyContext:
|
|
59
|
+
journeyContext: JourneyContext.extractContextFromRequest(req).addEventListeners(events),
|
|
62
60
|
// Edit mode
|
|
63
|
-
editMode: (
|
|
61
|
+
editMode: (req.query &&
|
|
62
|
+
Object.hasOwn(req.query, "edit") &&
|
|
64
63
|
Object.hasOwn(req.query, "editorigin")) ||
|
|
65
|
-
(
|
|
64
|
+
(req.body &&
|
|
65
|
+
Object.hasOwn(req.body, "edit") &&
|
|
66
66
|
Object.hasOwn(req.body, "editorigin")),
|
|
67
67
|
editOrigin: editOrigin(req),
|
|
68
68
|
};
|
|
69
69
|
// Grab chosen language from session
|
|
70
70
|
req.casa.journeyContext.nav.language = req.session.language;
|
|
71
71
|
// Context ID generator
|
|
72
|
-
Object.defineProperty(req,
|
|
72
|
+
Object.defineProperty(req, JourneyContext.ID_GENERATOR_REQ_KEY, {
|
|
73
73
|
value: contextIdGenerator,
|
|
74
74
|
enumerable: false,
|
|
75
75
|
writable: false,
|
|
76
76
|
});
|
|
77
77
|
/* ------------------------------------------------- Template variables */
|
|
78
78
|
// Capture mount URL that will be used in generating all browser URLs
|
|
79
|
-
const mountUrl =
|
|
79
|
+
const mountUrl = validateUrlPath(`${req.baseUrl}/`.replace(/\/+/g, "/"));
|
|
80
80
|
// If this CASA app is mounted on a parameterised route, then all of its
|
|
81
81
|
// static assets (served by `staticRouter`) will, by default, be served
|
|
82
82
|
// from that dynamic path, for example:
|
|
@@ -96,7 +96,7 @@ function dataMiddleware({ plan, events, contextIdGenerator, govukRebrand, }) {
|
|
|
96
96
|
// Router, the `baseUrl` is different in each case, so we cannot rely
|
|
97
97
|
// on it to be consistent. Hence the need for this property, which will
|
|
98
98
|
// always be the non-parameterised version of the baseUrl.
|
|
99
|
-
const staticMountUrl =
|
|
99
|
+
const staticMountUrl = validateUrlPath(`${req.unparameterisedBaseUrl}/`.replace(/\/+/g, "/"));
|
|
100
100
|
// CASA and userland templates
|
|
101
101
|
res.locals.casa = {
|
|
102
102
|
mountUrl,
|
|
@@ -109,14 +109,13 @@ function dataMiddleware({ plan, events, contextIdGenerator, govukRebrand, }) {
|
|
|
109
109
|
// htmlLang = req.language is provided by i18n-http-middleware
|
|
110
110
|
// assetPath = used for linking to static assets in the govuk-frontend module
|
|
111
111
|
res.locals.htmlLang = req.language;
|
|
112
|
-
|
|
113
|
-
res.locals.assetPath = `${staticMountUrl}govuk/assets${rebrandAssetPath}`;
|
|
112
|
+
res.locals.assetPath = `${staticMountUrl}govuk/assets`;
|
|
114
113
|
// Function for building URLs. This will be curried with the `mountUrl`,
|
|
115
114
|
// `journeyContext`, `edit` and `editOrigin` for convenience. This means
|
|
116
115
|
// the template author does not have to be concerned about the current
|
|
117
116
|
// "state" when generating URLs, but still has the ability to override
|
|
118
117
|
// these curried defaults if needs be.
|
|
119
|
-
res.locals.waypointUrl = (args) => (
|
|
118
|
+
res.locals.waypointUrl = (args) => waypointUrl({
|
|
120
119
|
mountUrl,
|
|
121
120
|
journeyContext: req.casa.journeyContext,
|
|
122
121
|
edit: req.casa.editMode,
|
|
@@ -127,4 +126,3 @@ function dataMiddleware({ plan, events, contextIdGenerator, govukRebrand, }) {
|
|
|
127
126
|
},
|
|
128
127
|
];
|
|
129
128
|
}
|
|
130
|
-
//# sourceMappingURL=data.js.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
declare function _default({ waypoint, fields }: {
|
|
2
2
|
waypoint: string;
|
|
3
3
|
fields?: import("../lib/field").PageField[] | undefined;
|
|
4
|
-
}):
|
|
4
|
+
}): RequestHandler[];
|
|
5
5
|
export default _default;
|
|
6
6
|
export type PageField = import("../lib/field").PageField;
|
|
7
|
+
export type RequestHandler = import("express").RequestHandler;
|
|
8
|
+
//# sourceMappingURL=gather-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gather-fields.d.ts","sourceRoot":"","sources":["../../src/middleware/gather-fields.js"],"names":[],"mappings":"AA+Be,gDAJZ;IAAoB,QAAQ,EAApB,MAAM;IACY,MAAM;CAChC,GAAU,cAAc,EAAE,CAsC5B;;wBAzDY,OAAO,cAAc,EAAE,SAAS;6BAKhC,OAAO,SAAS,EAAE,cAAc"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Gather the field data from `req.body` into the current JourneyContext
|
|
3
2
|
// - Store in the current session
|
|
4
3
|
// - Update the user's journey context with the new data
|
|
5
4
|
// - Remove validation date of JourneyContext so it can re-evaluted
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const JourneyContext_js_1 = __importDefault(require("../lib/JourneyContext.js"));
|
|
11
|
-
const constants_js_1 = require("../lib/constants.js");
|
|
5
|
+
import JourneyContext from "../lib/JourneyContext.js";
|
|
6
|
+
import NullObject from "../lib/NullObject.js";
|
|
7
|
+
import { REQUEST_PHASE_GATHER } from "../lib/constants.js";
|
|
12
8
|
/**
|
|
13
9
|
* @typedef {import("../lib/field").PageField} PageField
|
|
14
10
|
* @access private
|
|
15
11
|
*/
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {import("express").RequestHandler} RequestHandler
|
|
14
|
+
* @access private
|
|
15
|
+
*/
|
|
16
16
|
/**
|
|
17
17
|
* Gather the field data from `req.body` into the current JourneyContext
|
|
18
18
|
*
|
|
@@ -23,17 +23,17 @@ const constants_js_1 = require("../lib/constants.js");
|
|
|
23
23
|
* @param {object} obj Options
|
|
24
24
|
* @param {string} obj.waypoint Waypoint
|
|
25
25
|
* @param {PageField[]} [obj.fields] Fields. Default is `[]`
|
|
26
|
-
* @returns {
|
|
26
|
+
* @returns {RequestHandler[]} Array of middleware
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
export default ({ waypoint, fields = [] }) => [
|
|
29
29
|
(req, res, next) => {
|
|
30
30
|
// Store a copy of the journey context before modifying it. This is useful
|
|
31
31
|
// for any comparison work that may be done in subsequent middleware.
|
|
32
|
-
req.casa.archivedJourneyContext =
|
|
32
|
+
req.casa.archivedJourneyContext = JourneyContext.fromContext(req.casa.journeyContext, req);
|
|
33
33
|
// Ignore data for any non-persistent fields
|
|
34
34
|
// ESLint disabled as `fields`, `i` and `name` are dev-controlled
|
|
35
35
|
/* eslint-disable security/detect-object-injection */
|
|
36
|
-
const persistentBody =
|
|
36
|
+
const persistentBody = new NullObject();
|
|
37
37
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
38
38
|
if (fields[i].meta.persist &&
|
|
39
39
|
fields[i].getValue(req.body) !== undefined) {
|
|
@@ -46,12 +46,11 @@ exports.default = ({ waypoint, fields = [] }) => [
|
|
|
46
46
|
// data is invalid until proven otherwise when the validation step is run.
|
|
47
47
|
req.casa.journeyContext.setDataForPage(waypoint, persistentBody);
|
|
48
48
|
req.casa.journeyContext.removeValidationStateForPage(waypoint);
|
|
49
|
-
|
|
49
|
+
JourneyContext.putContext(req.session, req.casa.journeyContext, {
|
|
50
50
|
userInfo: {
|
|
51
|
-
casaRequestPhase:
|
|
51
|
+
casaRequestPhase: REQUEST_PHASE_GATHER,
|
|
52
52
|
},
|
|
53
53
|
});
|
|
54
54
|
next();
|
|
55
55
|
},
|
|
56
56
|
];
|
|
57
|
-
//# sourceMappingURL=gather-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/middleware/i18n.js"],"names":[],"mappings":"AAyEA;;;;;;;;GAQG;AACH,iFALG;IAAwB,SAAS;IACT,WAAW;IACX,WAAW;CACnC,GAAU,cAAc,EAAE,CA+C5B;6BArHY,OAAO,SAAS,EAAE,cAAc"}
|
package/dist/middleware/i18n.js
CHANGED
|
@@ -1,59 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const node_path_1 = require("node:path");
|
|
10
|
-
const node_fs_1 = require("node:fs");
|
|
11
|
-
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
12
|
-
const js_yaml_1 = require("js-yaml");
|
|
13
|
-
const logger_js_1 = __importDefault(require("../lib/logger.js"));
|
|
1
|
+
import { createInstance } from "i18next";
|
|
2
|
+
import { LanguageDetector, handle } from "i18next-http-middleware";
|
|
3
|
+
import { resolve, basename } from "node:path";
|
|
4
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
5
|
+
import deepmerge from "@fastify/deepmerge";
|
|
6
|
+
import { load as jsYamlLoad } from "js-yaml";
|
|
7
|
+
import logger from "../lib/logger.js";
|
|
8
|
+
import NullObject from "../lib/NullObject.js";
|
|
14
9
|
/**
|
|
15
10
|
* @typedef {import("express").RequestHandler} RequestHandler
|
|
16
11
|
* @access private
|
|
17
12
|
*/
|
|
18
|
-
const log = (
|
|
13
|
+
const log = logger("middleware:i18n");
|
|
14
|
+
const merge = deepmerge({ onlyDefinedProperties: true });
|
|
19
15
|
const loadJson = (file) => {
|
|
20
16
|
// Strip out newlines (this is a legacy feature which we're keeping for
|
|
21
17
|
// backwards compatibility).
|
|
22
18
|
/* eslint-disable-next-line security/detect-non-literal-fs-filename */
|
|
23
|
-
const json =
|
|
19
|
+
const json = readFileSync(file, "utf8");
|
|
24
20
|
return JSON.parse(json.replace(/[\r\n]/g, ""));
|
|
25
21
|
};
|
|
26
22
|
/* eslint-disable-next-line security/detect-non-literal-fs-filename */
|
|
27
|
-
const loadYaml = (file) => (
|
|
23
|
+
const loadYaml = (file) => jsYamlLoad(readFileSync(file, "utf8"));
|
|
28
24
|
const extract = (file) => {
|
|
29
25
|
const ext = /.yaml$/i.test(file) ? ".yaml" : ".json";
|
|
30
26
|
const data = ext === ".yaml" ? loadYaml(file) : loadJson(file);
|
|
31
27
|
return {
|
|
32
|
-
ns:
|
|
28
|
+
ns: basename(file, ext),
|
|
33
29
|
data,
|
|
34
30
|
};
|
|
35
31
|
};
|
|
36
32
|
const loadResources = (languages, directories) => {
|
|
37
|
-
const store =
|
|
33
|
+
const store = new NullObject();
|
|
38
34
|
for (const language of languages) {
|
|
39
35
|
// ESLint disabled as `store`, `language` and `ns` are all dev-controlled,
|
|
40
36
|
// and this function is only called once, at boot-time.
|
|
41
37
|
/* eslint-disable security/detect-object-injection */
|
|
42
|
-
store[language] =
|
|
38
|
+
store[language] = new NullObject();
|
|
43
39
|
for (const basedir of directories) {
|
|
44
|
-
const dir =
|
|
40
|
+
const dir = resolve(basedir, language);
|
|
45
41
|
/* eslint-disable-next-line security/detect-non-literal-fs-filename */
|
|
46
|
-
if (!
|
|
42
|
+
if (!existsSync(dir)) {
|
|
47
43
|
continue;
|
|
48
44
|
}
|
|
49
45
|
log.info("Loading %s language from %s ...", language, dir);
|
|
50
46
|
/* eslint-disable-next-line security/detect-non-literal-fs-filename */
|
|
51
|
-
for (const file of
|
|
52
|
-
const { ns, data } = extract(
|
|
47
|
+
for (const file of readdirSync(dir)) {
|
|
48
|
+
const { ns, data } = extract(resolve(dir, file));
|
|
53
49
|
if (store[language][ns] === undefined) {
|
|
54
|
-
store[language][ns] =
|
|
50
|
+
store[language][ns] = new NullObject();
|
|
55
51
|
}
|
|
56
|
-
store[language][ns] = (
|
|
52
|
+
store[language][ns] = merge(store[language][ns], data);
|
|
57
53
|
}
|
|
58
54
|
}
|
|
59
55
|
/* eslint-enable security/detect-object-injection */
|
|
@@ -69,12 +65,12 @@ const loadResources = (languages, directories) => {
|
|
|
69
65
|
* @param {string[]} [opts.directories] Source translations directories
|
|
70
66
|
* @returns {RequestHandler[]} Middleware functions
|
|
71
67
|
*/
|
|
72
|
-
function i18nMiddleware({ languages = ["en", "cy"], fallbackLng = false, directories = [], }) {
|
|
68
|
+
export default function i18nMiddleware({ languages = ["en", "cy"], fallbackLng = false, directories = [], }) {
|
|
73
69
|
// Load _all_ translations, from all directories into memory.
|
|
74
70
|
const resources = loadResources(languages, directories);
|
|
75
71
|
// Configure i18next
|
|
76
|
-
const i18nInstance =
|
|
77
|
-
i18nInstance.use(
|
|
72
|
+
const i18nInstance = createInstance();
|
|
73
|
+
i18nInstance.use(LanguageDetector).init({
|
|
78
74
|
initAsync: false, // because we need synchronous loading
|
|
79
75
|
supportedLngs: languages,
|
|
80
76
|
fallbackLng,
|
|
@@ -98,12 +94,11 @@ function i18nMiddleware({ languages = ["en", "cy"], fallbackLng = false, directo
|
|
|
98
94
|
if (!req.session.language) {
|
|
99
95
|
req.session.language = languages[0];
|
|
100
96
|
}
|
|
101
|
-
if (req?.
|
|
97
|
+
if (req.query?.lang && languages.includes(req.query.lang)) {
|
|
102
98
|
req.session.language = String(req.query.lang);
|
|
103
99
|
}
|
|
104
100
|
next();
|
|
105
101
|
},
|
|
106
|
-
|
|
102
|
+
handle(i18nInstance),
|
|
107
103
|
];
|
|
108
104
|
}
|
|
109
|
-
//# sourceMappingURL=i18n.js.map
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
/** @returns {RequestHandler
|
|
2
|
-
export default function postMiddleware(): RequestHandler
|
|
1
|
+
/** @returns {[RequestHandler, ErrorRequestHandler]} Middleware functions */
|
|
2
|
+
export default function postMiddleware(): [RequestHandler, ErrorRequestHandler];
|
|
3
3
|
export type RequestHandler = import("express").RequestHandler;
|
|
4
|
+
export type ErrorRequestHandler = import("express").ErrorRequestHandler;
|
|
5
|
+
//# sourceMappingURL=post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/middleware/post.js"],"names":[],"mappings":"AAYA,4EAA4E;AAC5E,0CADc,CAAC,cAAc,EAAE,mBAAmB,CAAC,CA4ElD;6BApFY,OAAO,SAAS,EAAE,cAAc;kCAEhC,OAAO,SAAS,EAAE,mBAAmB"}
|
package/dist/middleware/post.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = postMiddleware;
|
|
7
1
|
// 2 middleware: one as a fallback 404 handler, one to handle thrown errors
|
|
8
|
-
|
|
2
|
+
import logger from "../lib/logger.js";
|
|
9
3
|
/**
|
|
10
4
|
* @typedef {import("express").RequestHandler} RequestHandler
|
|
5
|
+
*
|
|
6
|
+
* @typedef {import("express").ErrorRequestHandler} ErrorRequestHandler
|
|
11
7
|
* @access private
|
|
12
8
|
*/
|
|
13
|
-
const log = (
|
|
14
|
-
/** @returns {RequestHandler
|
|
15
|
-
function postMiddleware() {
|
|
9
|
+
const log = logger("middleware:post");
|
|
10
|
+
/** @returns {[RequestHandler, ErrorRequestHandler]} Middleware functions */
|
|
11
|
+
export default function postMiddleware() {
|
|
16
12
|
return [
|
|
17
13
|
(req, res) => {
|
|
18
14
|
res.status(404).render("casa/errors/404.njk");
|
|
@@ -74,4 +70,3 @@ function postMiddleware() {
|
|
|
74
70
|
},
|
|
75
71
|
];
|
|
76
72
|
}
|
|
77
|
-
//# sourceMappingURL=post.js.map
|
package/dist/middleware/pre.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
declare function _default({ helmetConfigurator }?: {
|
|
2
2
|
helmetConfigurator: HelmetConfigurator;
|
|
3
|
-
}):
|
|
3
|
+
}): import("express").RequestHandler[];
|
|
4
4
|
export default _default;
|
|
5
5
|
export type HelmetConfigurator = import("../casa").HelmetConfigurator;
|
|
6
|
+
//# sourceMappingURL=pre.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre.d.ts","sourceRoot":"","sources":["../../src/middleware/pre.js"],"names":[],"mappings":"AAqCe,mDAJZ;IAAiC,kBAAkB,EAA3C,kBAAkB;CAE1B,GAAU,OAAO,SAAS,EAAE,cAAc,EAAE,CA4E9C;;iCA3GY,OAAO,SAAS,EAAE,kBAAkB"}
|
package/dist/middleware/pre.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_crypto_1 = require("node:crypto");
|
|
7
|
-
const helmet_1 = __importDefault(require("helmet"));
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import helmet from "helmet";
|
|
8
3
|
/**
|
|
9
4
|
* @typedef {import("../casa").HelmetConfigurator} HelmetConfigurator
|
|
10
5
|
* @access private
|
|
@@ -34,9 +29,9 @@ function casaCspNonce(req, res) {
|
|
|
34
29
|
* @param {object} opts Options
|
|
35
30
|
* @param {HelmetConfigurator} opts.helmetConfigurator Function to customise
|
|
36
31
|
* Helmet configuration
|
|
37
|
-
* @returns {
|
|
32
|
+
* @returns {import("express").RequestHandler[]} List of middleware
|
|
38
33
|
*/
|
|
39
|
-
|
|
34
|
+
export default ({ helmetConfigurator = (config) => config } = {}) => [
|
|
40
35
|
// Only allow certain request methods
|
|
41
36
|
(req, res, next) => {
|
|
42
37
|
if (req.method !== "GET" && req.method !== "POST") {
|
|
@@ -61,11 +56,11 @@ exports.default = ({ helmetConfigurator = (config) => config } = {}) => [
|
|
|
61
56
|
// Generate nonces ready for use in Content-Security-Policy header and
|
|
62
57
|
// govuk-frontend template. This same none can be used wherever required.
|
|
63
58
|
(req, res, next) => {
|
|
64
|
-
res.locals.cspNonce =
|
|
59
|
+
res.locals.cspNonce = randomBytes(16).toString("hex");
|
|
65
60
|
next();
|
|
66
61
|
},
|
|
67
62
|
// Helmet suite of headers
|
|
68
|
-
(
|
|
63
|
+
helmet(helmetConfigurator({
|
|
69
64
|
// Allows GA which is typically used, and a known inline script nonce
|
|
70
65
|
contentSecurityPolicy: {
|
|
71
66
|
useDefaults: true,
|
|
@@ -104,4 +99,3 @@ exports.default = ({ helmetConfigurator = (config) => config } = {}) => [
|
|
|
104
99
|
// referrerPolicy: 'no-referrer, same-origin',
|
|
105
100
|
})),
|
|
106
101
|
];
|
|
107
|
-
//# sourceMappingURL=pre.js.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare function _default({ waypoint, plan }: {
|
|
2
|
-
waypoint:
|
|
3
|
-
plan:
|
|
4
|
-
}): (
|
|
2
|
+
waypoint: string;
|
|
3
|
+
plan: Plan;
|
|
4
|
+
}): import("express").RequestHandler[];
|
|
5
5
|
export default _default;
|
|
6
|
+
import Plan from "../lib/Plan.js";
|
|
7
|
+
//# sourceMappingURL=progress-journey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-journey.d.ts","sourceRoot":"","sources":["../../src/middleware/progress-journey.js"],"names":[],"mappings":"AAmCe,8CAJZ;IAAqB,QAAQ,EAArB,MAAM;IACK,IAAI,EAAf,IAAI;CACZ,GAAU,OAAO,SAAS,EAAE,cAAc,EAAE,CAoF9C;;iBAjHgB,gBAAgB"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Determine where to take the user next
|
|
3
2
|
// We assume that the waypoint has been validated prior to reaching this
|
|
4
3
|
// middleware.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const waypoint_url_js_1 = __importDefault(require("../lib/waypoint-url.js"));
|
|
12
|
-
const logger_js_1 = __importDefault(require("../lib/logger.js"));
|
|
13
|
-
const constants_js_1 = require("../lib/constants.js");
|
|
14
|
-
const log = (0, logger_js_1.default)("middleware:progress-journey");
|
|
4
|
+
import Plan from "../lib/Plan.js";
|
|
5
|
+
import JourneyContext from "../lib/JourneyContext.js";
|
|
6
|
+
import waypointUrl from "../lib/waypoint-url.js";
|
|
7
|
+
import logger from "../lib/logger.js";
|
|
8
|
+
import { REQUEST_PHASE_REDIRECT } from "../lib/constants.js";
|
|
9
|
+
const log = logger("middleware:progress-journey");
|
|
15
10
|
const saveAndRedirect = (session, journeyContext, url, res, next) => {
|
|
16
|
-
|
|
11
|
+
JourneyContext.putContext(session, journeyContext, {
|
|
17
12
|
userInfo: {
|
|
18
|
-
casaRequestPhase:
|
|
13
|
+
casaRequestPhase: REQUEST_PHASE_REDIRECT,
|
|
19
14
|
},
|
|
20
15
|
});
|
|
21
16
|
session.save((err) => {
|
|
@@ -25,7 +20,15 @@ const saveAndRedirect = (session, journeyContext, url, res, next) => {
|
|
|
25
20
|
res.redirect(302, url);
|
|
26
21
|
});
|
|
27
22
|
};
|
|
28
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Get "progress journey" middleware for a given waypoint
|
|
25
|
+
*
|
|
26
|
+
* @param {object} opts Options
|
|
27
|
+
* @param {string} opts.waypoint Waypoint
|
|
28
|
+
* @param {Plan} opts.plan CASA Plan
|
|
29
|
+
* @returns {import("express").RequestHandler[]} Middleware functions
|
|
30
|
+
*/
|
|
31
|
+
export default ({ waypoint, plan }) => [
|
|
29
32
|
(req, res, next) => {
|
|
30
33
|
// Determine the next available waypoint after the current one
|
|
31
34
|
const traversed = plan.traverse(req.casa.journeyContext);
|
|
@@ -51,7 +54,7 @@ exports.default = ({ waypoint, plan }) => [
|
|
|
51
54
|
const url = new URL(req.casa.editOrigin, "https://placeholder.test/");
|
|
52
55
|
url.searchParams.append("edit", "true");
|
|
53
56
|
url.searchParams.append("editorigin", req.casa.editOrigin);
|
|
54
|
-
const redirectUrl = (
|
|
57
|
+
const redirectUrl = waypointUrl({ waypoint: url.pathname }) + url.search.toString();
|
|
55
58
|
log.debug(`Edit mode detected; redirecting to ${redirectUrl}`);
|
|
56
59
|
return saveAndRedirect(req.session, req.casa.journeyContext, redirectUrl, res, next);
|
|
57
60
|
}
|
|
@@ -65,12 +68,12 @@ exports.default = ({ waypoint, plan }) => [
|
|
|
65
68
|
// setRoute('a', 'b');
|
|
66
69
|
// setRoute('b', 'url:///otherapp/')
|
|
67
70
|
// setRoute('url:////otherapp/', 'c', (r, c) => checkIfOtherAppIsFinished())
|
|
68
|
-
if (
|
|
71
|
+
if (Plan.isExitNode(nextWaypoint)) {
|
|
69
72
|
log.trace(`Next waypoint is an exit node; clearing validation state on ${nextWaypoint}`);
|
|
70
73
|
req.casa.journeyContext.clearValidationErrorsForPage(nextWaypoint);
|
|
71
74
|
}
|
|
72
75
|
// Construct the next url
|
|
73
|
-
const nextUrl = (
|
|
76
|
+
const nextUrl = waypointUrl({
|
|
74
77
|
waypoint: nextWaypoint,
|
|
75
78
|
mountUrl: `${req.baseUrl}/`,
|
|
76
79
|
journeyContext: req.casa.journeyContext,
|
|
@@ -82,4 +85,3 @@ exports.default = ({ waypoint, plan }) => [
|
|
|
82
85
|
return saveAndRedirect(req.session, req.casa.journeyContext, nextUrl, res, next);
|
|
83
86
|
},
|
|
84
87
|
];
|
|
85
|
-
//# sourceMappingURL=progress-journey.js.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare function _default({ waypoint, fields }: {
|
|
2
|
-
waypoint:
|
|
3
|
-
fields
|
|
4
|
-
}): (
|
|
2
|
+
waypoint: string;
|
|
3
|
+
fields: PageField[];
|
|
4
|
+
}): import("express").RequestHandler[];
|
|
5
5
|
export default _default;
|
|
6
|
+
export type PageField = import("../casa").PageField;
|
|
7
|
+
//# sourceMappingURL=sanitise-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitise-fields.d.ts","sourceRoot":"","sources":["../../src/middleware/sanitise-fields.js"],"names":[],"mappings":"AAgBe,gDAJZ;IAAqB,QAAQ,EAArB,MAAM;IACY,MAAM,EAAxB,SAAS,EAAE;CACnB,GAAU,OAAO,SAAS,EAAE,cAAc,EAAE,CA2E9C;;wBAGY,OAAO,SAAS,EAAE,SAAS"}
|