@defra/forms-engine-plugin 2.1.4 → 2.1.5

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 (48) hide show
  1. package/.server/server/plugins/engine/outputFormatters/adapter/v1.d.ts +6 -0
  2. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +23 -0
  3. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -0
  4. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +2 -2
  5. package/.server/server/plugins/engine/outputFormatters/human/v1.js +1 -1
  6. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  7. package/.server/server/plugins/engine/outputFormatters/index.d.ts +4 -3
  8. package/.server/server/plugins/engine/outputFormatters/index.js +4 -0
  9. package/.server/server/plugins/engine/outputFormatters/index.js.map +1 -1
  10. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +2 -2
  11. package/.server/server/plugins/engine/outputFormatters/machine/v1.js +1 -1
  12. package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
  13. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +4 -1
  14. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  15. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +5 -4
  16. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  17. package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -1
  18. package/.server/server/plugins/engine/services/notifyService.d.ts +7 -2
  19. package/.server/server/plugins/engine/services/notifyService.js +11 -2
  20. package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
  21. package/.server/server/plugins/engine/types/index.d.ts +10 -0
  22. package/.server/server/plugins/engine/types/index.js +4 -0
  23. package/.server/server/plugins/engine/types/index.js.map +1 -0
  24. package/.server/server/plugins/engine/types/schema.d.ts +5 -0
  25. package/.server/server/plugins/engine/types/schema.js +24 -0
  26. package/.server/server/plugins/engine/types/schema.js.map +1 -0
  27. package/.server/server/plugins/engine/types.d.ts +37 -1
  28. package/.server/server/plugins/engine/types.js +4 -0
  29. package/.server/server/plugins/engine/types.js.map +1 -1
  30. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  31. package/.server/server/plugins/nunjucks/filters/page.d.ts +1 -1
  32. package/.server/server/types.d.ts +1 -1
  33. package/.server/server/types.js.map +1 -1
  34. package/package.json +6 -1
  35. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +506 -0
  36. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +53 -0
  37. package/src/server/plugins/engine/outputFormatters/human/v1.ts +6 -2
  38. package/src/server/plugins/engine/outputFormatters/index.ts +11 -3
  39. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +6 -2
  40. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +1 -1
  41. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  42. package/src/server/plugins/engine/services/notifyService.test.ts +156 -1
  43. package/src/server/plugins/engine/services/notifyService.ts +24 -3
  44. package/src/server/plugins/engine/types/index.ts +96 -0
  45. package/src/server/plugins/engine/types/schema.test.ts +152 -0
  46. package/src/server/plugins/engine/types/schema.ts +45 -0
  47. package/src/server/plugins/engine/types.ts +51 -1
  48. package/src/server/types.ts +2 -1
@@ -0,0 +1,45 @@
1
+ import {
2
+ FormStatus,
3
+ idSchema,
4
+ notificationEmailAddressSchema,
5
+ slugSchema,
6
+ titleSchema
7
+ } from '@defra/forms-model'
8
+ import Joi from 'joi'
9
+
10
+ import {
11
+ FormAdapterSubmissionSchemaVersion,
12
+ type FormAdapterSubmissionMessageData,
13
+ type FormAdapterSubmissionMessageMeta,
14
+ type FormAdapterSubmissionMessagePayload
15
+ } from '~/src/server/plugins/engine/types.js'
16
+
17
+ export const formAdapterSubmissionMessageMetaSchema =
18
+ Joi.object<FormAdapterSubmissionMessageMeta>().keys({
19
+ schemaVersion: Joi.string().valid(
20
+ ...Object.values(FormAdapterSubmissionSchemaVersion)
21
+ ),
22
+ timestamp: Joi.date().required(),
23
+ referenceNumber: Joi.string().required(),
24
+ formName: titleSchema,
25
+ formId: idSchema,
26
+ formSlug: slugSchema,
27
+ status: Joi.string()
28
+ .valid(...Object.values(FormStatus))
29
+ .required(),
30
+ isPreview: Joi.boolean().required(),
31
+ notificationEmail: notificationEmailAddressSchema.required()
32
+ })
33
+
34
+ export const formAdapterSubmissionMessageDataSchema =
35
+ Joi.object<FormAdapterSubmissionMessageData>().keys({
36
+ main: Joi.object(),
37
+ repeaters: Joi.object(),
38
+ files: Joi.object()
39
+ })
40
+
41
+ export const formAdapterSubmissionMessagePayloadSchema =
42
+ Joi.object<FormAdapterSubmissionMessagePayload>().keys({
43
+ meta: formAdapterSubmissionMessageMetaSchema.required(),
44
+ data: formAdapterSubmissionMessageDataSchema.required()
45
+ })
@@ -18,6 +18,7 @@ import {
18
18
  type ComponentViewModel
19
19
  } from '~/src/server/plugins/engine/components/types.js'
20
20
  import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
21
+ import { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'
21
22
  import { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'
22
23
  import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
23
24
  import { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'
@@ -25,7 +26,8 @@ import {
25
26
  type FormAction,
26
27
  type FormParams,
27
28
  type FormRequest,
28
- type FormRequestPayload
29
+ type FormRequestPayload,
30
+ type FormStatus
29
31
  } from '~/src/server/routes/types.js'
30
32
  import { type RequestOptions } from '~/src/server/services/httpService.js'
31
33
  import { type Services } from '~/src/server/types.js'
@@ -384,3 +386,51 @@ export interface PluginOptions {
384
386
  onRequest?: OnRequestCallback
385
387
  baseUrl: string // base URL of the application, protocol and hostname e.g. "https://myapp.com"
386
388
  }
389
+
390
+ export interface FormAdapterSubmissionMessageMeta {
391
+ schemaVersion: FormAdapterSubmissionSchemaVersion
392
+ timestamp: Date
393
+ referenceNumber: string
394
+ formName: string
395
+ formId: string
396
+ formSlug: string
397
+ status: FormStatus
398
+ isPreview: boolean
399
+ notificationEmail: string
400
+ }
401
+
402
+ export type FormAdapterSubmissionMessageMetaSerialised = Omit<
403
+ FormAdapterSubmissionMessageMeta,
404
+ 'schemaVersion' | 'timestamp' | 'status'
405
+ > & {
406
+ schemaVersion: string
407
+ status: string
408
+ timestamp: string
409
+ }
410
+
411
+ export interface FormAdapterSubmissionMessageData {
412
+ main: Record<string, RichFormValue>
413
+ repeaters: Record<string, Record<string, RichFormValue>[]>
414
+ files: Record<string, Record<string, string>[]>
415
+ }
416
+
417
+ export enum FormAdapterSubmissionSchemaVersion {
418
+ V1 = 1
419
+ }
420
+
421
+ export interface FormAdapterSubmissionMessagePayload {
422
+ meta: FormAdapterSubmissionMessageMeta
423
+ data: FormAdapterSubmissionMessageData
424
+ }
425
+
426
+ export interface FormAdapterSubmissionMessage
427
+ extends FormAdapterSubmissionMessagePayload {
428
+ messageId: string
429
+ recordCreatedAt: Date
430
+ }
431
+
432
+ export interface FormAdapterSubmissionService {
433
+ handleFormSubmission: (
434
+ submissionMessage: FormAdapterSubmissionMessage
435
+ ) => unknown
436
+ }
@@ -59,6 +59,7 @@ export interface OutputService {
59
59
  model: FormModel,
60
60
  emailAddress: string,
61
61
  items: DetailItem[],
62
- submitResponse: SubmitResponsePayload
62
+ submitResponse: SubmitResponsePayload,
63
+ formMetadata?: FormMetadata
63
64
  ) => Promise<void>
64
65
  }