@defra/forms-engine-plugin 0.1.18 → 0.1.20

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 (116) hide show
  1. package/.server/client/javascripts/application.d.ts +1 -0
  2. package/.server/client/javascripts/file-upload.d.ts +9 -0
  3. package/.server/config/index.d.ts +45 -0
  4. package/.server/config/index.js +1 -1
  5. package/.server/config/index.js.map +1 -1
  6. package/.server/index.d.ts +1 -0
  7. package/.server/server/common/helpers/logging/logger-options.d.ts +80 -0
  8. package/.server/server/common/helpers/logging/logger.d.ts +1 -0
  9. package/.server/server/common/helpers/logging/request-logger.d.ts +83 -0
  10. package/.server/server/common/helpers/logging/request-tracing.d.ts +7 -0
  11. package/.server/server/common/helpers/redis-client.d.ts +9 -0
  12. package/.server/server/constants.d.ts +3 -0
  13. package/.server/server/devserver/dxt-devtool-baselayout.html +1 -1
  14. package/.server/server/index.d.ts +3 -0
  15. package/.server/server/plugins/crumb.d.ts +4 -0
  16. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +55 -0
  17. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +15 -0
  18. package/.server/server/plugins/engine/components/ComponentBase.d.ts +33 -0
  19. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +60 -0
  20. package/.server/server/plugins/engine/components/DatePartsField.d.ts +76 -0
  21. package/.server/server/plugins/engine/components/Details.d.ts +53 -0
  22. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +59 -0
  23. package/.server/server/plugins/engine/components/FileUploadField.d.ts +79 -0
  24. package/.server/server/plugins/engine/components/FormComponent.d.ts +95 -0
  25. package/.server/server/plugins/engine/components/Html.d.ts +53 -0
  26. package/.server/server/plugins/engine/components/InsetText.d.ts +52 -0
  27. package/.server/server/plugins/engine/components/List.d.ts +56 -0
  28. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +71 -0
  29. package/.server/server/plugins/engine/components/Markdown.d.ts +53 -0
  30. package/.server/server/plugins/engine/components/MonthYearField.d.ts +75 -0
  31. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +67 -0
  32. package/.server/server/plugins/engine/components/NumberField.d.ts +68 -0
  33. package/.server/server/plugins/engine/components/RadiosField.d.ts +6 -0
  34. package/.server/server/plugins/engine/components/SelectField.d.ts +55 -0
  35. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +60 -0
  36. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +62 -0
  37. package/.server/server/plugins/engine/components/TextField.d.ts +19 -0
  38. package/.server/server/plugins/engine/components/UkAddressField.d.ts +80 -0
  39. package/.server/server/plugins/engine/components/YesNoField.d.ts +15 -0
  40. package/.server/server/plugins/engine/components/constants.d.ts +1 -0
  41. package/.server/server/plugins/engine/components/helpers.d.ts +40 -0
  42. package/.server/server/plugins/engine/components/index.d.ts +24 -0
  43. package/.server/server/plugins/engine/components/types.d.ts +100 -0
  44. package/.server/server/plugins/engine/configureEnginePlugin.d.ts +8 -0
  45. package/.server/server/plugins/engine/helpers.d.ts +74 -0
  46. package/.server/server/plugins/engine/index.d.ts +10 -0
  47. package/.server/server/plugins/engine/models/FormModel.d.ts +59 -0
  48. package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.d.ts +1 -0
  49. package/.server/server/plugins/engine/models/Section.d.ts +1 -0
  50. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +25 -0
  51. package/.server/server/plugins/engine/models/index.d.ts +2 -0
  52. package/.server/server/plugins/engine/models/types.d.ts +87 -0
  53. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +5 -0
  54. package/.server/server/plugins/engine/outputFormatters/index.d.ts +7 -0
  55. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +5 -0
  56. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +5 -0
  57. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +61 -0
  58. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +43 -0
  59. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +58 -0
  60. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +35 -0
  61. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +50 -0
  62. package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +12 -0
  63. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +26 -0
  64. package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +9 -0
  65. package/.server/server/plugins/engine/pageControllers/helpers.d.ts +19 -0
  66. package/.server/server/plugins/engine/pageControllers/index.d.ts +8 -0
  67. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +8 -0
  68. package/.server/server/plugins/engine/plugin.d.ts +33 -0
  69. package/.server/server/plugins/engine/referenceNumbers.d.ts +5 -0
  70. package/.server/server/plugins/engine/services/formSubmissionService.d.ts +24 -0
  71. package/.server/server/plugins/engine/services/formsService.d.ts +16 -0
  72. package/.server/server/plugins/engine/services/index.d.ts +3 -0
  73. package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -0
  74. package/.server/server/plugins/engine/services/notifyService.d.ts +5 -0
  75. package/.server/server/plugins/engine/services/uploadService.d.ts +14 -0
  76. package/.server/server/plugins/engine/types.d.ts +256 -0
  77. package/.server/server/plugins/errorPages.d.ts +7 -0
  78. package/.server/server/plugins/nunjucks/context.d.ts +16 -0
  79. package/.server/server/plugins/nunjucks/context.js +8 -10
  80. package/.server/server/plugins/nunjucks/context.js.map +1 -1
  81. package/.server/server/plugins/nunjucks/environment.d.ts +21 -0
  82. package/.server/server/plugins/nunjucks/filters/answer.d.ts +7 -0
  83. package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +8 -0
  84. package/.server/server/plugins/nunjucks/filters/field.d.ts +7 -0
  85. package/.server/server/plugins/nunjucks/filters/highlight.d.ts +7 -0
  86. package/.server/server/plugins/nunjucks/filters/href.d.ts +7 -0
  87. package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -0
  88. package/.server/server/plugins/nunjucks/filters/inspect.d.ts +6 -0
  89. package/.server/server/plugins/nunjucks/filters/page.d.ts +7 -0
  90. package/.server/server/plugins/nunjucks/index.d.ts +3 -0
  91. package/.server/server/plugins/nunjucks/plugin.d.ts +6 -0
  92. package/.server/server/plugins/nunjucks/render.d.ts +21 -0
  93. package/.server/server/plugins/nunjucks/types.d.ts +56 -0
  94. package/.server/server/plugins/nunjucks/types.js +0 -7
  95. package/.server/server/plugins/nunjucks/types.js.map +1 -1
  96. package/.server/server/plugins/pulse.d.ts +11 -0
  97. package/.server/server/plugins/session.d.ts +24 -0
  98. package/.server/server/routes/index.d.ts +1 -0
  99. package/.server/server/routes/public.d.ts +15 -0
  100. package/.server/server/routes/types.d.ts +38 -0
  101. package/.server/server/schemas/index.d.ts +10 -0
  102. package/.server/server/secure-context.d.ts +12 -0
  103. package/.server/server/services/cacheService.d.ts +49 -0
  104. package/.server/server/services/httpService.d.ts +57 -0
  105. package/.server/server/services/index.d.ts +1 -0
  106. package/.server/server/types.d.ts +31 -0
  107. package/.server/server/utils/file-form-service.d.ts +50 -0
  108. package/.server/server/utils/notify.d.ts +17 -0
  109. package/.server/server/utils/secure-context/get-trust-store-certs.d.ts +1 -0
  110. package/.server/server/utils/type-utils.d.ts +3 -0
  111. package/.server/server/utils/utils.d.ts +7 -0
  112. package/package.json +3 -2
  113. package/src/config/index.ts +1 -1
  114. package/src/server/devserver/dxt-devtool-baselayout.html +1 -1
  115. package/src/server/plugins/nunjucks/context.js +9 -10
  116. package/src/server/plugins/nunjucks/types.js +0 -7
@@ -0,0 +1,24 @@
1
+ import yar from '@hapi/yar';
2
+ /**
3
+ * Yar is used for temporary session data but not form submissions, e.g. UI helpers, session flags.
4
+ */
5
+ declare const _default: {
6
+ plugin: import("@hapi/hapi").Plugin<yar.YarOptions>;
7
+ options: {
8
+ maxCookieSize: number;
9
+ cache: {
10
+ cache: string;
11
+ segment: string;
12
+ expiresIn: number;
13
+ };
14
+ /**
15
+ * @todo storeBlank is current commented out as it's a minor efficiency gain but breaks the auth tests if enabled.
16
+ * this only seems to affect the auth code, which we might remove anyway so it's temporarily disabled.
17
+ */
18
+ cookieOptions: {
19
+ password: string;
20
+ isSecure: boolean;
21
+ };
22
+ };
23
+ };
24
+ export default _default;
@@ -0,0 +1 @@
1
+ export { default as publicRoutes } from '~/src/server/routes/public.js';
@@ -0,0 +1,15 @@
1
+ declare const _default: {
2
+ method: "GET";
3
+ path: string;
4
+ options: {
5
+ cache: {
6
+ otherwise: string;
7
+ };
8
+ handler: {
9
+ directory: {
10
+ path: string;
11
+ };
12
+ };
13
+ };
14
+ }[];
15
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { type ReqRefDefaults, type Request } from '@hapi/hapi';
2
+ import { type FormPayload } from '~/src/server/plugins/engine/types.js';
3
+ export interface FormQuery extends Partial<Record<string, string>> {
4
+ /**
5
+ * Allow preview URL direct access without relevant page checks
6
+ */
7
+ force?: string;
8
+ /**
9
+ * Redirect location after 'continue' form action
10
+ */
11
+ returnUrl?: string;
12
+ }
13
+ export interface FormParams extends Partial<Record<string, string>> {
14
+ path: string;
15
+ slug: string;
16
+ state?: FormStatus;
17
+ }
18
+ export interface FormRequestRefs extends Omit<ReqRefDefaults, 'Params' | 'Payload' | 'Query'> {
19
+ Params: FormParams;
20
+ Payload: object | undefined;
21
+ Query: FormQuery;
22
+ }
23
+ export interface FormRequestPayloadRefs extends FormRequestRefs {
24
+ Payload: FormPayload;
25
+ }
26
+ export type FormRequest = Request<FormRequestRefs>;
27
+ export type FormRequestPayload = Request<FormRequestPayloadRefs>;
28
+ export declare enum FormAction {
29
+ Continue = "continue",
30
+ Validate = "validate",
31
+ Delete = "delete",
32
+ AddAnother = "add-another",
33
+ Send = "send"
34
+ }
35
+ export declare enum FormStatus {
36
+ Draft = "draft",
37
+ Live = "live"
38
+ }
@@ -0,0 +1,10 @@
1
+ import Joi from 'joi';
2
+ import { type FormParams } from '~/src/server/plugins/engine/types.js';
3
+ import { FormAction, FormStatus } from '~/src/server/routes/types.js';
4
+ export declare const stateSchema: Joi.StringSchema<FormStatus>;
5
+ export declare const actionSchema: Joi.StringSchema<FormAction>;
6
+ export declare const pathSchema: Joi.StringSchema<string>;
7
+ export declare const itemIdSchema: Joi.StringSchema<string>;
8
+ export declare const crumbSchema: Joi.StringSchema<string>;
9
+ export declare const confirmSchema: Joi.BooleanSchema<boolean>;
10
+ export declare const paramsSchema: Joi.ObjectSchema<FormParams>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Prepares the TLS secure context
3
+ * @param {Server} server
4
+ * @returns
5
+ */
6
+ export function prepareSecureContext(server: Server): tls.SecureContext;
7
+ /**
8
+ * @type {SecureContext}
9
+ */
10
+ export let secureContext: tls.SecureContext;
11
+ import type { Server } from '@hapi/hapi';
12
+ import tls from 'node:tls';
@@ -0,0 +1,49 @@
1
+ import { type Request, type Server } from '@hapi/hapi';
2
+ import { type FormPayload, type FormState, type FormSubmissionError, type FormSubmissionState } from '~/src/server/plugins/engine/types.js';
3
+ import { type FormRequest, type FormRequestPayload } from '~/src/server/routes/types.js';
4
+ declare enum ADDITIONAL_IDENTIFIER {
5
+ Confirmation = ":confirmation"
6
+ }
7
+ export declare class CacheService {
8
+ /**
9
+ * This service is responsible for getting, storing or deleting a user's session data in the cache. This service has been registered by {@link createServer}
10
+ */
11
+ cache: import("@hapi/catbox").Policy<unknown, {
12
+ cache: string | undefined;
13
+ segment: string;
14
+ }>;
15
+ logger: Server['logger'];
16
+ constructor(server: Server, cacheName?: string);
17
+ getState(request: Request | FormRequest | FormRequestPayload): Promise<FormSubmissionState>;
18
+ setState(request: FormRequest | FormRequestPayload, state: FormSubmissionState): Promise<FormSubmissionState>;
19
+ getConfirmationState(request: FormRequest | FormRequestPayload): Promise<{
20
+ confirmed?: true;
21
+ }>;
22
+ setConfirmationState(request: FormRequest | FormRequestPayload, confirmationState: {
23
+ confirmed?: true;
24
+ }): Promise<void>;
25
+ clearState(request: FormRequest | FormRequestPayload): Promise<void>;
26
+ getFlash(request: FormRequest | FormRequestPayload): {
27
+ errors: FormSubmissionError[];
28
+ } | undefined;
29
+ setFlash(request: FormRequest | FormRequestPayload, message: {
30
+ errors: FormSubmissionError[];
31
+ }): void;
32
+ /**
33
+ * The key used to store user session data against.
34
+ * If there are multiple forms on the same runner instance, for example `form-a` and `form-a-feedback` this will prevent CacheService from clearing data from `form-a` if a user gave feedback before they finished `form-a`
35
+ * @param request - hapi request object
36
+ * @param additionalIdentifier - appended to the id
37
+ */
38
+ Key(request: Request | FormRequest | FormRequestPayload, additionalIdentifier?: ADDITIONAL_IDENTIFIER): {
39
+ segment: string;
40
+ id: string;
41
+ };
42
+ }
43
+ /**
44
+ * State merge helper
45
+ * 1. Merges objects (form fields)
46
+ * 2. Overwrites arrays
47
+ */
48
+ export declare function merge<StateType extends FormState | FormPayload>(state: StateType, update: object): StateType;
49
+ export {};
@@ -0,0 +1,57 @@
1
+ import Wreck from '@hapi/wreck';
2
+ export type Method = keyof Pick<typeof Wreck, 'get' | 'post' | 'put' | 'delete'>;
3
+ export type RequestOptions = Parameters<typeof Wreck.defaults>[0];
4
+ export declare const request: <BodyType = Buffer<ArrayBufferLike>>(method: Method, url: string, options?: RequestOptions) => Promise<{
5
+ res: import("http").IncomingMessage;
6
+ error: Error | NonNullable<BodyType>;
7
+ payload?: undefined;
8
+ } | {
9
+ res: import("http").IncomingMessage;
10
+ payload: BodyType;
11
+ error?: undefined;
12
+ }>;
13
+ export declare const get: <BodyType>(url: string, options?: RequestOptions) => Promise<{
14
+ res: import("http").IncomingMessage;
15
+ error: Error | NonNullable<BodyType>;
16
+ payload?: undefined;
17
+ } | {
18
+ res: import("http").IncomingMessage;
19
+ payload: BodyType;
20
+ error?: undefined;
21
+ }>;
22
+ export declare const getJson: <BodyType extends object>(url: string) => Promise<{
23
+ res: import("http").IncomingMessage;
24
+ error: Error | BodyType;
25
+ payload?: undefined;
26
+ } | {
27
+ res: import("http").IncomingMessage;
28
+ payload: BodyType;
29
+ error?: undefined;
30
+ }>;
31
+ export declare const post: <BodyType>(url: string, options: RequestOptions) => Promise<{
32
+ res: import("http").IncomingMessage;
33
+ error: Error | NonNullable<BodyType>;
34
+ payload?: undefined;
35
+ } | {
36
+ res: import("http").IncomingMessage;
37
+ payload: BodyType;
38
+ error?: undefined;
39
+ }>;
40
+ export declare const postJson: <BodyType extends object>(url: string, options: RequestOptions) => Promise<{
41
+ res: import("http").IncomingMessage;
42
+ error: Error | BodyType;
43
+ payload?: undefined;
44
+ } | {
45
+ res: import("http").IncomingMessage;
46
+ payload: BodyType;
47
+ error?: undefined;
48
+ }>;
49
+ export declare const put: <BodyType>(url: string, options: RequestOptions) => Promise<{
50
+ res: import("http").IncomingMessage;
51
+ error: Error | NonNullable<BodyType>;
52
+ payload?: undefined;
53
+ } | {
54
+ res: import("http").IncomingMessage;
55
+ payload: BodyType;
56
+ error?: undefined;
57
+ }>;
@@ -0,0 +1 @@
1
+ export { CacheService } from '~/src/server/services/cacheService.js';
@@ -0,0 +1,31 @@
1
+ import { type FormDefinition, type FormMetadata, type SubmitPayload, type SubmitResponsePayload } from '@defra/forms-model';
2
+ import { type FormModel } from '~/src/server/plugins/engine/models/index.js';
3
+ import { type DetailItem } from '~/src/server/plugins/engine/models/types.js';
4
+ import { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js';
5
+ import { type FormRequestPayload, type FormStatus } from '~/src/server/routes/types.js';
6
+ export interface FormsService {
7
+ getFormMetadata: (slug: string) => Promise<FormMetadata>;
8
+ getFormDefinition: (id: string, state: FormStatus) => Promise<FormDefinition | undefined>;
9
+ }
10
+ export interface FormSubmissionService {
11
+ persistFiles: (files: {
12
+ fileId: string;
13
+ initiatedRetrievalKey: string;
14
+ }[], persistedRetrievalKey: string) => Promise<object>;
15
+ submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>;
16
+ }
17
+ export interface Services {
18
+ formsService: FormsService;
19
+ formSubmissionService: FormSubmissionService;
20
+ outputService: OutputService;
21
+ }
22
+ export interface RouteConfig {
23
+ formFileName?: string;
24
+ formFilePath?: string;
25
+ enforceCsrf?: boolean;
26
+ services?: Services;
27
+ controllers?: Record<string, typeof PageController>;
28
+ }
29
+ export interface OutputService {
30
+ submit: (request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload) => Promise<void>;
31
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * FileFormService class
3
+ */
4
+ export class FileFormService {
5
+ /**
6
+ * Add form from a file
7
+ * @param {string} filepath - the file path
8
+ * @param {FormMetadata} metadata - the metadata to use for this form
9
+ * @returns {Promise<FormDefinition>}
10
+ */
11
+ addForm(filepath: string, metadata: FormMetadata): Promise<FormDefinition>;
12
+ /**
13
+ * Read the form definition from file
14
+ * @param {string} filepath - the file path
15
+ * @returns {Promise<FormDefinition>}
16
+ */
17
+ readForm(filepath: string): Promise<FormDefinition>;
18
+ /**
19
+ * Read the form definition from a json file
20
+ * @param {string} filepath - the file path
21
+ * @returns {Promise<FormDefinition>}
22
+ */
23
+ readJsonForm(filepath: string): Promise<FormDefinition>;
24
+ /**
25
+ * Read the form definition from a yaml file
26
+ * @param {string} filepath - the file path
27
+ * @returns {Promise<FormDefinition>}
28
+ */
29
+ readYamlForm(filepath: string): Promise<FormDefinition>;
30
+ /**
31
+ * Get the form metadata by slug
32
+ * @param {string} slug - the form slug
33
+ * @returns {FormMetadata}
34
+ */
35
+ getFormMetadata(slug: string): FormMetadata;
36
+ /**
37
+ * Get the form defintion by id
38
+ * @param {string} id - the form id
39
+ * @returns {FormDefinition}
40
+ */
41
+ getFormDefinition(id: string): FormDefinition;
42
+ /**
43
+ * Returns a FormsService compliant interface
44
+ * @returns {import('~/src/server/types.js').FormsService}
45
+ */
46
+ toFormsService(): import("~/src/server/types.js").FormsService;
47
+ #private;
48
+ }
49
+ import type { FormMetadata } from '@defra/forms-model';
50
+ import type { FormDefinition } from '@defra/forms-model';
@@ -0,0 +1,17 @@
1
+ export interface SendNotificationArgs {
2
+ templateId: string;
3
+ emailAddress: string;
4
+ personalisation: {
5
+ subject: string;
6
+ body: string;
7
+ };
8
+ }
9
+ export declare function sendNotification(args: SendNotificationArgs): Promise<{
10
+ res: import("http").IncomingMessage;
11
+ error: object | Error;
12
+ payload?: undefined;
13
+ } | {
14
+ res: import("http").IncomingMessage;
15
+ payload: object;
16
+ error?: undefined;
17
+ }>;
@@ -0,0 +1 @@
1
+ export function getTrustStoreCerts(envs: NodeJS.ProcessEnv): string[];
@@ -0,0 +1,3 @@
1
+ import { type JoiExpression, type LanguageMessages, type LanguageMessagesExt } from 'joi';
2
+ export declare function convertToLanguageMessages(extLanguageMessages: LanguageMessagesExt): LanguageMessages;
3
+ export declare function createJoiExpression(expr: string): JoiExpression;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.
3
+ * @param {Record<string, string> | undefined} [existingHeaders] - Optional existing headers to merge with the tracing headers.
4
+ * @param {string} [header] - The tracing header name to use.
5
+ * @returns {Record<string, string> | undefined} The merged headers, or undefined if no tracing header is available.
6
+ */
7
+ export function applyTraceHeaders(existingHeaders?: Record<string, string> | undefined, header?: string): Record<string, string> | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-engine-plugin",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "Defra forms engine",
5
5
  "type": "module",
6
6
  "files": [
@@ -29,9 +29,10 @@
29
29
  "./package.json": "./package.json"
30
30
  },
31
31
  "scripts": {
32
- "build": "npm run build:server && npm run build:client",
32
+ "build": "rm -rf ./.server && npm run build:server && npm run build:client && npm run build:types",
33
33
  "build:client": "NODE_ENV=${NODE_ENV:-production} webpack",
34
34
  "build:server": "babel --delete-dir-on-start --extensions \".js\",\".ts\" --ignore \"**/*.test.ts\" --copy-files --no-copy-ignored --source-maps --out-dir ./.server ./src",
35
+ "build:types": "tsc -p tsconfig.build.json",
35
36
  "dev": "concurrently \"npm run client:watch\" \"npm run server:watch:dev\" --kill-others --names \"client,server\" --prefix-colors \"red.dim,blue.dim\"",
36
37
  "dev:debug": "concurrently \"npm run client:watch\" \"npm run server:watch:debug\" --kill-others --names \"client,server\" --prefix-colors \"red.dim,blue.dim\"",
37
38
  "format": "npm run format:check -- --write",
@@ -84,7 +84,7 @@ export const config = convict({
84
84
  serviceName: {
85
85
  doc: 'Applications Service Name',
86
86
  format: String,
87
- default: 'Submit a form to Defra'
87
+ default: 'Digital Express Toolkit'
88
88
  },
89
89
  serviceVersion: {
90
90
  doc: 'The service version, this variable is injected into your docker container in CDP environments',
@@ -36,7 +36,7 @@
36
36
  homepageUrl: currentPath if context.isForceAccess else "https://defra.github.io/forms-engine-plugin/",
37
37
  containerClasses: "govuk-width-container",
38
38
  productName: productName | safe | trim,
39
- serviceName: "Digital Express Toolkit",
39
+ serviceName: config.serviceName,
40
40
  serviceUrl: currentPath if context.isForceAccess else serviceUrl
41
41
  }) }}
42
42
  {% endblock %}
@@ -4,7 +4,6 @@ import { basename, join } from 'node:path'
4
4
  import Boom from '@hapi/boom'
5
5
  import { StatusCodes } from 'http-status-codes'
6
6
 
7
- import pkg from '~/package.json' with { type: 'json' }
8
7
  import { config } from '~/src/config/index.js'
9
8
  import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
10
9
  import {
@@ -32,6 +31,7 @@ export async function context(request) {
32
31
  !Boom.isBoom(response) && response?.statusCode === StatusCodes.OK
33
32
 
34
33
  const pluginStorage = request?.server.plugins['forms-engine-plugin']
34
+
35
35
  let consumerViewContext = {}
36
36
 
37
37
  if (!pluginStorage) {
@@ -51,15 +51,6 @@ export async function context(request) {
51
51
  // take consumers props first so we can override it
52
52
  ...consumerViewContext,
53
53
  baseLayoutPath: pluginStorage.baseLayoutPath,
54
- appVersion: pkg.version,
55
- config: {
56
- cdpEnvironment: config.get('cdpEnvironment'),
57
- designerUrl: config.get('designerUrl'),
58
- feedbackLink: encodeUrl(config.get('feedbackLink')),
59
- phaseTag: config.get('phaseTag'),
60
- serviceName: config.get('serviceName'),
61
- serviceVersion: config.get('serviceVersion')
62
- },
63
54
  crumb: safeGenerateCrumb(request),
64
55
  currentPath: `${request.path}${request.url.search}`,
65
56
  previewMode: isPreviewMode ? formState : undefined,
@@ -87,6 +78,14 @@ export function devtoolContext(_request) {
87
78
  }
88
79
 
89
80
  return {
81
+ config: {
82
+ cdpEnvironment: config.get('cdpEnvironment'),
83
+ designerUrl: config.get('designerUrl'),
84
+ feedbackLink: encodeUrl(config.get('feedbackLink')),
85
+ phaseTag: config.get('phaseTag'),
86
+ serviceName: config.get('serviceName'),
87
+ serviceVersion: config.get('serviceVersion')
88
+ },
90
89
  assetPath: '/assets',
91
90
  getDxtAssetPath: (asset = '') => {
92
91
  return `/${webpackManifest?.[asset] ?? asset}`
@@ -11,20 +11,13 @@
11
11
 
12
12
  /**
13
13
  * @typedef {object} ViewContext - Nunjucks view context
14
- * @property {string} appVersion - Application version
15
14
  * @property {string} [baseLayoutPath] - Base layout path
16
- * @property {Partial<Config>} config - Application config properties
17
15
  * @property {string} [crumb] - Cross-Site Request Forgery (CSRF) token
18
16
  * @property {string} [cspNonce] - Content Security Policy (CSP) nonce
19
17
  * @property {string} [currentPath] - Current path
20
18
  * @property {string} [previewMode] - Preview mode
21
19
  * @property {string} [slug] - Form slug
22
20
  * @property {FormContext} [context] - the current form context
23
- * @property {PluginOptions['viewContext']} [injectedViewContext] - the current form context
24
- */
25
-
26
- /**
27
- * @typedef {ReturnType<typeof config['getProperties']>} Config - Application config properties
28
21
  */
29
22
 
30
23
  /**