@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.
- package/.server/client/javascripts/application.d.ts +1 -0
- package/.server/client/javascripts/file-upload.d.ts +9 -0
- package/.server/config/index.d.ts +45 -0
- package/.server/config/index.js +1 -1
- package/.server/config/index.js.map +1 -1
- package/.server/index.d.ts +1 -0
- package/.server/server/common/helpers/logging/logger-options.d.ts +80 -0
- package/.server/server/common/helpers/logging/logger.d.ts +1 -0
- package/.server/server/common/helpers/logging/request-logger.d.ts +83 -0
- package/.server/server/common/helpers/logging/request-tracing.d.ts +7 -0
- package/.server/server/common/helpers/redis-client.d.ts +9 -0
- package/.server/server/constants.d.ts +3 -0
- package/.server/server/devserver/dxt-devtool-baselayout.html +1 -1
- package/.server/server/index.d.ts +3 -0
- package/.server/server/plugins/crumb.d.ts +4 -0
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +55 -0
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +15 -0
- package/.server/server/plugins/engine/components/ComponentBase.d.ts +33 -0
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +60 -0
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +76 -0
- package/.server/server/plugins/engine/components/Details.d.ts +53 -0
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +59 -0
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +79 -0
- package/.server/server/plugins/engine/components/FormComponent.d.ts +95 -0
- package/.server/server/plugins/engine/components/Html.d.ts +53 -0
- package/.server/server/plugins/engine/components/InsetText.d.ts +52 -0
- package/.server/server/plugins/engine/components/List.d.ts +56 -0
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +71 -0
- package/.server/server/plugins/engine/components/Markdown.d.ts +53 -0
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +75 -0
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +67 -0
- package/.server/server/plugins/engine/components/NumberField.d.ts +68 -0
- package/.server/server/plugins/engine/components/RadiosField.d.ts +6 -0
- package/.server/server/plugins/engine/components/SelectField.d.ts +55 -0
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +60 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +62 -0
- package/.server/server/plugins/engine/components/TextField.d.ts +19 -0
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +80 -0
- package/.server/server/plugins/engine/components/YesNoField.d.ts +15 -0
- package/.server/server/plugins/engine/components/constants.d.ts +1 -0
- package/.server/server/plugins/engine/components/helpers.d.ts +40 -0
- package/.server/server/plugins/engine/components/index.d.ts +24 -0
- package/.server/server/plugins/engine/components/types.d.ts +100 -0
- package/.server/server/plugins/engine/configureEnginePlugin.d.ts +8 -0
- package/.server/server/plugins/engine/helpers.d.ts +74 -0
- package/.server/server/plugins/engine/index.d.ts +10 -0
- package/.server/server/plugins/engine/models/FormModel.d.ts +59 -0
- package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.d.ts +1 -0
- package/.server/server/plugins/engine/models/Section.d.ts +1 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +25 -0
- package/.server/server/plugins/engine/models/index.d.ts +2 -0
- package/.server/server/plugins/engine/models/types.d.ts +87 -0
- package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +5 -0
- package/.server/server/plugins/engine/outputFormatters/index.d.ts +7 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +5 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +5 -0
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +61 -0
- package/.server/server/plugins/engine/pageControllers/PageController.d.ts +43 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +58 -0
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +35 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +50 -0
- package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +12 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +26 -0
- package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +9 -0
- package/.server/server/plugins/engine/pageControllers/helpers.d.ts +19 -0
- package/.server/server/plugins/engine/pageControllers/index.d.ts +8 -0
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +8 -0
- package/.server/server/plugins/engine/plugin.d.ts +33 -0
- package/.server/server/plugins/engine/referenceNumbers.d.ts +5 -0
- package/.server/server/plugins/engine/services/formSubmissionService.d.ts +24 -0
- package/.server/server/plugins/engine/services/formsService.d.ts +16 -0
- package/.server/server/plugins/engine/services/index.d.ts +3 -0
- package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -0
- package/.server/server/plugins/engine/services/notifyService.d.ts +5 -0
- package/.server/server/plugins/engine/services/uploadService.d.ts +14 -0
- package/.server/server/plugins/engine/types.d.ts +256 -0
- package/.server/server/plugins/errorPages.d.ts +7 -0
- package/.server/server/plugins/nunjucks/context.d.ts +16 -0
- package/.server/server/plugins/nunjucks/context.js +8 -10
- package/.server/server/plugins/nunjucks/context.js.map +1 -1
- package/.server/server/plugins/nunjucks/environment.d.ts +21 -0
- package/.server/server/plugins/nunjucks/filters/answer.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +8 -0
- package/.server/server/plugins/nunjucks/filters/field.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/highlight.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/href.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -0
- package/.server/server/plugins/nunjucks/filters/inspect.d.ts +6 -0
- package/.server/server/plugins/nunjucks/filters/page.d.ts +7 -0
- package/.server/server/plugins/nunjucks/index.d.ts +3 -0
- package/.server/server/plugins/nunjucks/plugin.d.ts +6 -0
- package/.server/server/plugins/nunjucks/render.d.ts +21 -0
- package/.server/server/plugins/nunjucks/types.d.ts +56 -0
- package/.server/server/plugins/nunjucks/types.js +0 -7
- package/.server/server/plugins/nunjucks/types.js.map +1 -1
- package/.server/server/plugins/pulse.d.ts +11 -0
- package/.server/server/plugins/session.d.ts +24 -0
- package/.server/server/routes/index.d.ts +1 -0
- package/.server/server/routes/public.d.ts +15 -0
- package/.server/server/routes/types.d.ts +38 -0
- package/.server/server/schemas/index.d.ts +10 -0
- package/.server/server/secure-context.d.ts +12 -0
- package/.server/server/services/cacheService.d.ts +49 -0
- package/.server/server/services/httpService.d.ts +57 -0
- package/.server/server/services/index.d.ts +1 -0
- package/.server/server/types.d.ts +31 -0
- package/.server/server/utils/file-form-service.d.ts +50 -0
- package/.server/server/utils/notify.d.ts +17 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.d.ts +1 -0
- package/.server/server/utils/type-utils.d.ts +3 -0
- package/.server/server/utils/utils.d.ts +7 -0
- package/package.json +3 -2
- package/src/config/index.ts +1 -1
- package/src/server/devserver/dxt-devtool-baselayout.html +1 -1
- package/src/server/plugins/nunjucks/context.js +9 -10
- 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,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.
|
|
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",
|
package/src/config/index.ts
CHANGED
|
@@ -84,7 +84,7 @@ export const config = convict({
|
|
|
84
84
|
serviceName: {
|
|
85
85
|
doc: 'Applications Service Name',
|
|
86
86
|
format: String,
|
|
87
|
-
default: '
|
|
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:
|
|
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
|
/**
|