@defra/forms-model 3.0.533 → 3.0.535

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.
@@ -1,64 +1,64 @@
1
1
  import Joi from 'joi';
2
2
  import { AuditEventMessageCategory, AuditEventMessageSchemaVersion, AuditEventMessageSource, AuditEventMessageType, FormDefinitionRequestType } from "./enums.js";
3
- import { contactSchema, idSchema } from "../form-metadata/index.js";
3
+ import { contactSchema, emailAddressSchema, emailResponseTimeSchema, idSchema, notificationEmailAddressSchema, onlineTextSchema, onlineUrlSchema, organisationSchema, phoneSchema, privacyNoticeUrlSchema, slugSchema, submissionGuidanceSchema, teamEmailSchema, teamNameSchema, titleSchema } from "../form-metadata/index.js";
4
4
  export const formMessageDataBase = Joi.object({
5
- formId: Joi.string().required(),
6
- slug: Joi.string().required(),
5
+ formId: idSchema,
6
+ slug: slugSchema,
7
7
  payload: Joi.object().optional()
8
- });
8
+ }).required().description('The base data object for Form Messages');
9
9
  export const formCreatedMessageData = formMessageDataBase.append({
10
- title: Joi.string().required(),
11
- organisation: Joi.string().required(),
12
- teamName: Joi.string().required(),
13
- teamEmail: Joi.string().required()
14
- });
10
+ title: titleSchema,
11
+ organisation: organisationSchema,
12
+ teamName: teamNameSchema,
13
+ teamEmail: teamEmailSchema
14
+ }).required().description('Message data schema for when a form is created');
15
15
  export const formDefinitionS3Meta = Joi.object().keys({
16
16
  fileId: Joi.string().required(),
17
17
  filename: Joi.string().required(),
18
18
  s3Key: Joi.string().required()
19
- });
19
+ }).description('Schema for form data S3 object in message');
20
20
  export const formUpdatedMessageData = formMessageDataBase.append({
21
21
  requestType: Joi.string().valid(...Object.values(FormDefinitionRequestType)).required(),
22
- s3Meta: formDefinitionS3Meta
23
- });
24
- export const formTitleChanges = Joi.object().keys({
25
- title: Joi.string().required()
22
+ s3Meta: formDefinitionS3Meta.optional()
26
23
  }).required();
24
+ export const formTitleChanges = Joi.object().keys({
25
+ title: titleSchema
26
+ }).required().description('Changes schema for FORM_TITLE_UPDATED event');
27
27
  export const formOrganisationChanges = Joi.object().keys({
28
- organisation: Joi.string().required()
29
- }).required();
28
+ organisation: organisationSchema
29
+ }).required().description('Changes schema for FORM_ORGANISATION_UPDATED event');
30
30
  export const formTeamNameChanges = Joi.object().keys({
31
- teamName: Joi.string().required()
32
- }).required();
31
+ teamName: teamNameSchema
32
+ }).required().description('Changes schema for FORM_TEAM_NAME_UPDATED event');
33
33
  export const formTeamEmailChanges = Joi.object().keys({
34
- teamEmail: Joi.string().required()
35
- }).required();
34
+ teamEmail: teamEmailSchema
35
+ }).required().description('Changes schema for FORM_TEAM_EMAIL_UPDATED event');
36
36
  export const formSupportContactChanges = Joi.object().keys({
37
37
  contact: contactSchema
38
- }).required();
38
+ }).required().description('Changes schema for FORM_SUPPORT_CONTACT_UPDATED event');
39
39
  export const formSupportPhoneChanges = Joi.object().keys({
40
- phone: Joi.string().required()
41
- }).required();
40
+ phone: phoneSchema
41
+ }).required().description('Changes schema for FORM_SUPPORT_PHONE_UPDATED event');
42
42
  export const formSupportOnlineChanges = Joi.object().keys({
43
- url: Joi.string().required(),
44
- text: Joi.string().required()
45
- }).required();
43
+ url: onlineUrlSchema,
44
+ text: onlineTextSchema
45
+ }).required().description('Changes schema for FORM_SUPPORT_ONLINE_UPDATED event');
46
46
  export const formSupportEmailChanges = Joi.object().keys({
47
- address: Joi.string().email().required(),
48
- responseTime: Joi.string().required()
49
- });
47
+ address: emailAddressSchema,
48
+ responseTime: emailResponseTimeSchema
49
+ }).description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event');
50
50
  export const formPrivacyNoticeChanges = Joi.object().keys({
51
- privacyNoticeUrl: Joi.string()
52
- }).required();
51
+ privacyNoticeUrl: privacyNoticeUrlSchema.required()
52
+ }).required().description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event');
53
53
  export const formNotificationEmailChanges = Joi.object().keys({
54
- notificationEmail: Joi.string()
55
- }).required();
54
+ notificationEmail: notificationEmailAddressSchema.required()
55
+ }).required().description('Changes schema for FORM_NOTIFICATION_EMAIL_UPDATED event');
56
56
  export const formSubmissionGuidanceChanges = Joi.object().keys({
57
- submissionGuidance: Joi.string()
58
- }).required();
57
+ submissionGuidance: submissionGuidanceSchema.required()
58
+ }).required().description('Changes schema for FORM_SUBMISSION_GUIDANCE_UPDATED event');
59
59
  export const formUploadedChanges = Joi.object().keys({
60
60
  value: Joi.string().required()
61
- }).required();
61
+ }).required().description('Changes schema for FORM_JSON_UPLOADED event');
62
62
  export const entitlementMessageData = Joi.object().keys({
63
63
  userId: Joi.string().required(),
64
64
  displayName: Joi.string().required(),
@@ -68,24 +68,24 @@ export const entitlementMessageData = Joi.object().keys({
68
68
  export const auditUserSchema = Joi.object().keys({
69
69
  id: Joi.string().uuid().required(),
70
70
  displayName: Joi.string().required()
71
- });
71
+ }).description('Schema for CREATED_BY audit event');
72
72
  export function formChangesMessageData(schema) {
73
73
  return formMessageDataBase.append({
74
74
  changes: Joi.object().keys({
75
75
  previous: schema,
76
76
  new: schema
77
- })
77
+ }).description('Changes schema')
78
78
  });
79
79
  }
80
80
  export const messageSchema = Joi.object().keys({
81
- schemaVersion: Joi.string().valid(...Object.values(AuditEventMessageSchemaVersion)).required(),
82
- category: Joi.string().valid(...Object.values(AuditEventMessageCategory)).required(),
83
- source: Joi.string().valid(...Object.values(AuditEventMessageSource)).required(),
84
- type: Joi.string().valid(...Object.values(AuditEventMessageType)),
85
- entityId: Joi.string().required(),
86
- traceId: Joi.string().optional(),
87
- createdAt: Joi.date().required(),
88
- createdBy: auditUserSchema.required(),
81
+ schemaVersion: Joi.string().valid(...Object.values(AuditEventMessageSchemaVersion)).required().description('The version of the AuditMessage - bumped with breaking changes'),
82
+ category: Joi.string().valid(...Object.values(AuditEventMessageCategory)).required().description('The message category - what does the entityId represent?'),
83
+ source: Joi.string().valid(...Object.values(AuditEventMessageSource)).required().description('Source of the message - which service?'),
84
+ type: Joi.string().valid(...Object.values(AuditEventMessageType)).description('Event type'),
85
+ entityId: Joi.string().required().description('The id of the entity the category relates to'),
86
+ traceId: Joi.string().optional().description('Trace id of the event - to link events across multiple services'),
87
+ createdAt: Joi.date().required().description('The ISO timestamp where the action took place - should be the same as updated_at field in DB'),
88
+ createdBy: auditUserSchema.required().description('The user who performed the action being audited'),
89
89
  data: Joi.when('type', {
90
90
  switch: [{
91
91
  is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
@@ -143,16 +143,16 @@ export const messageSchema = Joi.object().keys({
143
143
  then: entitlementMessageData
144
144
  }],
145
145
  otherwise: Joi.forbidden()
146
- }),
147
- messageCreatedAt: Joi.date().required()
148
- });
146
+ }).description('The data/payload of the audit message'),
147
+ messageCreatedAt: Joi.date().required().description('ISO timestamp when the message was published')
148
+ }).required().description('The audit message issued by the publishing service');
149
149
  export const auditEvent = Joi.object().keys({
150
150
  message: messageSchema
151
- });
151
+ }).description('The Body of the audit event');
152
152
  export const auditRecord = messageSchema.append({
153
153
  id: idSchema,
154
154
  messageId: Joi.string().uuid().required(),
155
155
  entityId: Joi.string().required(),
156
156
  recordCreatedAt: Joi.date().required()
157
- });
157
+ }).description('The audit record persisted into the DB');
158
158
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Joi","AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageSource","AuditEventMessageType","FormDefinitionRequestType","contactSchema","idSchema","formMessageDataBase","object","formId","string","required","slug","payload","optional","formCreatedMessageData","append","title","organisation","teamName","teamEmail","formDefinitionS3Meta","keys","fileId","filename","s3Key","formUpdatedMessageData","requestType","valid","Object","values","s3Meta","formTitleChanges","formOrganisationChanges","formTeamNameChanges","formTeamEmailChanges","formSupportContactChanges","contact","formSupportPhoneChanges","phone","formSupportOnlineChanges","url","text","formSupportEmailChanges","address","email","responseTime","formPrivacyNoticeChanges","privacyNoticeUrl","formNotificationEmailChanges","notificationEmail","formSubmissionGuidanceChanges","submissionGuidance","formUploadedChanges","value","entitlementMessageData","userId","displayName","roles","array","items","auditUserSchema","id","uuid","formChangesMessageData","schema","changes","previous","new","messageSchema","schemaVersion","category","source","type","entityId","traceId","createdAt","date","createdBy","data","when","switch","is","trim","FORM_CREATED","then","FORM_TITLE_UPDATED","FORM_ORGANISATION_UPDATED","FORM_TEAM_NAME_UPDATED","FORM_TEAM_EMAIL_UPDATED","FORM_SUPPORT_CONTACT_UPDATED","FORM_SUPPORT_PHONE_UPDATED","FORM_SUPPORT_EMAIL_UPDATED","FORM_SUPPORT_ONLINE_UPDATED","FORM_PRIVACY_NOTICE_UPDATED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_JSON_UPLOADED","FORM_UPDATED","ENTITLEMENT_CREATED","FORM_DRAFT_DELETED","ENTITLEMENT_UPDATED","ENTITLEMENT_DELETED","otherwise","forbidden","messageCreatedAt","auditEvent","message","auditRecord","messageId","recordCreatedAt"],"sources":["../../../../src/form/form-audit/index.ts"],"sourcesContent":["import Joi, { type ObjectSchema } from 'joi'\n\nimport {\n AuditEventMessageCategory,\n AuditEventMessageSchemaVersion,\n AuditEventMessageSource,\n AuditEventMessageType,\n FormDefinitionRequestType\n} from '~/src/form/form-audit/enums.js'\nimport {\n type AuditEvent,\n type AuditMessage,\n type AuditRecord,\n type AuditUser,\n type ChangesMessageData,\n type EntitlementMessageData,\n type FormCreatedMessageData,\n type FormDefinitionS3Meta,\n type FormMessageChangesData,\n type FormMessageDataBase,\n type FormNotificationEmailChanges,\n type FormNotificationEmailUpdatedMessageData,\n type FormOrganisationChanges,\n type FormOrganisationUpdatedMessageData,\n type FormPrivacyNoticeChanges,\n type FormPrivacyNoticeUpdatedMessageData,\n type FormSubmissionGuidanceChanges,\n type FormSubmissionGuidanceUpdatedMessageData,\n type FormSupportContactChanges,\n type FormSupportContactUpdatedMessageData,\n type FormSupportEmailChanges,\n type FormSupportEmailUpdatedMessageData,\n type FormSupportOnlineChanges,\n type FormSupportOnlineUpdatedMessageData,\n type FormSupportPhoneChanges,\n type FormSupportPhoneUpdatedMessageData,\n type FormTeamEmailChanges,\n type FormTeamEmailUpdatedMessageData,\n type FormTeamNameChanges,\n type FormTeamNameUpdatedMessageData,\n type FormTitleChanges,\n type FormTitleUpdatedMessageData,\n type FormUpdatedMessageData,\n type FormUploadedChanges,\n type FormUploadedMessageData\n} from '~/src/form/form-audit/types.js'\nimport { contactSchema, idSchema } from '~/src/form/form-metadata/index.js'\n\nexport const formMessageDataBase = Joi.object<FormMessageDataBase>({\n formId: Joi.string().required(),\n slug: Joi.string().required(),\n payload: Joi.object().optional()\n})\n\nexport const formCreatedMessageData =\n formMessageDataBase.append<FormCreatedMessageData>({\n title: Joi.string().required(),\n organisation: Joi.string().required(),\n teamName: Joi.string().required(),\n teamEmail: Joi.string().required()\n })\n\nexport const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>().keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n s3Key: Joi.string().required()\n})\n\nexport const formUpdatedMessageData =\n formMessageDataBase.append<FormUpdatedMessageData>({\n requestType: Joi.string()\n .valid(...Object.values(FormDefinitionRequestType))\n .required(),\n s3Meta: formDefinitionS3Meta\n })\n\nexport const formTitleChanges = Joi.object<FormTitleChanges>()\n .keys({\n title: Joi.string().required()\n })\n .required()\n\nexport const formOrganisationChanges = Joi.object<FormOrganisationChanges>()\n .keys({\n organisation: Joi.string().required()\n })\n .required()\n\nexport const formTeamNameChanges = Joi.object<FormTeamNameChanges>()\n .keys({\n teamName: Joi.string().required()\n })\n .required()\n\nexport const formTeamEmailChanges = Joi.object<FormTeamEmailChanges>()\n .keys({\n teamEmail: Joi.string().required()\n })\n .required()\n\nexport const formSupportContactChanges = Joi.object<FormSupportContactChanges>()\n .keys({\n contact: contactSchema\n })\n .required()\n\nexport const formSupportPhoneChanges = Joi.object<FormSupportPhoneChanges>()\n .keys({\n phone: Joi.string().required()\n })\n .required()\n\nexport const formSupportOnlineChanges = Joi.object<FormSupportOnlineChanges>()\n .keys({\n url: Joi.string().required(),\n text: Joi.string().required()\n })\n .required()\n\nexport const formSupportEmailChanges =\n Joi.object<FormSupportEmailChanges>().keys({\n address: Joi.string().email().required(),\n responseTime: Joi.string().required()\n })\n\nexport const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()\n .keys({\n privacyNoticeUrl: Joi.string()\n })\n .required()\n\nexport const formNotificationEmailChanges =\n Joi.object<FormNotificationEmailChanges>()\n .keys({\n notificationEmail: Joi.string()\n })\n .required()\n\nexport const formSubmissionGuidanceChanges =\n Joi.object<FormSubmissionGuidanceChanges>()\n .keys({\n submissionGuidance: Joi.string()\n })\n .required()\n\nexport const formUploadedChanges = Joi.object<FormUploadedChanges>()\n .keys({\n value: Joi.string().required()\n })\n .required()\n\nexport const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(\n {\n userId: Joi.string().required(),\n displayName: Joi.string().required(),\n email: Joi.string().email().required(),\n roles: Joi.array().items(Joi.string())\n }\n)\n\nexport const auditUserSchema = Joi.object<AuditUser>().keys({\n id: Joi.string().uuid().required(),\n displayName: Joi.string().required()\n})\n\nexport function formChangesMessageData<T, U extends FormMessageChangesData>(\n schema: ObjectSchema<T>\n): ObjectSchema<U> {\n return formMessageDataBase.append<U>({\n changes: Joi.object<ChangesMessageData<T>>().keys({\n previous: schema,\n new: schema\n })\n })\n}\n\nexport const messageSchema = Joi.object<AuditMessage>().keys({\n schemaVersion: Joi.string()\n .valid(...Object.values(AuditEventMessageSchemaVersion))\n .required(),\n category: Joi.string()\n .valid(...Object.values(AuditEventMessageCategory))\n .required(),\n source: Joi.string()\n .valid(...Object.values(AuditEventMessageSource))\n .required(),\n type: Joi.string().valid(...Object.values(AuditEventMessageType)),\n entityId: Joi.string().required(),\n traceId: Joi.string().optional(),\n createdAt: Joi.date().required(),\n createdBy: auditUserSchema.required(),\n data: Joi.when('type', {\n switch: [\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),\n then: formCreatedMessageData\n },\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_TITLE_UPDATED),\n then: formChangesMessageData<\n FormTitleChanges,\n FormTitleUpdatedMessageData\n >(formTitleChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),\n then: formChangesMessageData<\n FormOrganisationChanges,\n FormOrganisationUpdatedMessageData\n >(formOrganisationChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),\n then: formChangesMessageData<\n FormTeamNameChanges,\n FormTeamNameUpdatedMessageData\n >(formTeamNameChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormTeamEmailChanges,\n FormTeamEmailUpdatedMessageData\n >(formTeamEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_CONTACT_UPDATED),\n then: formChangesMessageData<\n FormSupportContactChanges,\n FormSupportContactUpdatedMessageData\n >(formSupportContactChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),\n then: formChangesMessageData<\n FormSupportPhoneChanges,\n FormSupportPhoneUpdatedMessageData\n >(formSupportPhoneChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormSupportEmailChanges,\n FormSupportEmailUpdatedMessageData\n >(formSupportEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),\n then: formChangesMessageData<\n FormSupportOnlineChanges,\n FormSupportOnlineUpdatedMessageData\n >(formSupportOnlineChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),\n then: formChangesMessageData<\n FormPrivacyNoticeChanges,\n FormPrivacyNoticeUpdatedMessageData\n >(formPrivacyNoticeChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormNotificationEmailChanges,\n FormNotificationEmailUpdatedMessageData\n >(formNotificationEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),\n then: formChangesMessageData<\n FormSubmissionGuidanceChanges,\n FormSubmissionGuidanceUpdatedMessageData\n >(formSubmissionGuidanceChanges)\n },\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_JSON_UPLOADED),\n then: formChangesMessageData<\n FormUploadedChanges,\n FormUploadedMessageData\n >(formUploadedChanges)\n },\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),\n then: formUpdatedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_CREATED),\n then: entitlementMessageData\n },\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_DRAFT_DELETED),\n then: formMessageDataBase\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),\n then: entitlementMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_DELETED),\n then: entitlementMessageData\n }\n ],\n otherwise: Joi.forbidden()\n }),\n messageCreatedAt: Joi.date().required()\n})\n\nexport const auditEvent = Joi.object<AuditEvent>().keys({\n message: messageSchema\n})\n\nexport const auditRecord = messageSchema.append<AuditRecord>({\n id: idSchema,\n messageId: Joi.string().uuid().required(),\n entityId: Joi.string().required(),\n recordCreatedAt: Joi.date().required()\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Joi","AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageSource","AuditEventMessageType","FormDefinitionRequestType","contactSchema","emailAddressSchema","emailResponseTimeSchema","idSchema","notificationEmailAddressSchema","onlineTextSchema","onlineUrlSchema","organisationSchema","phoneSchema","privacyNoticeUrlSchema","slugSchema","submissionGuidanceSchema","teamEmailSchema","teamNameSchema","titleSchema","formMessageDataBase","object","formId","slug","payload","optional","required","description","formCreatedMessageData","append","title","organisation","teamName","teamEmail","formDefinitionS3Meta","keys","fileId","string","filename","s3Key","formUpdatedMessageData","requestType","valid","Object","values","s3Meta","formTitleChanges","formOrganisationChanges","formTeamNameChanges","formTeamEmailChanges","formSupportContactChanges","contact","formSupportPhoneChanges","phone","formSupportOnlineChanges","url","text","formSupportEmailChanges","address","responseTime","formPrivacyNoticeChanges","privacyNoticeUrl","formNotificationEmailChanges","notificationEmail","formSubmissionGuidanceChanges","submissionGuidance","formUploadedChanges","value","entitlementMessageData","userId","displayName","email","roles","array","items","auditUserSchema","id","uuid","formChangesMessageData","schema","changes","previous","new","messageSchema","schemaVersion","category","source","type","entityId","traceId","createdAt","date","createdBy","data","when","switch","is","trim","FORM_CREATED","then","FORM_TITLE_UPDATED","FORM_ORGANISATION_UPDATED","FORM_TEAM_NAME_UPDATED","FORM_TEAM_EMAIL_UPDATED","FORM_SUPPORT_CONTACT_UPDATED","FORM_SUPPORT_PHONE_UPDATED","FORM_SUPPORT_EMAIL_UPDATED","FORM_SUPPORT_ONLINE_UPDATED","FORM_PRIVACY_NOTICE_UPDATED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_JSON_UPLOADED","FORM_UPDATED","ENTITLEMENT_CREATED","FORM_DRAFT_DELETED","ENTITLEMENT_UPDATED","ENTITLEMENT_DELETED","otherwise","forbidden","messageCreatedAt","auditEvent","message","auditRecord","messageId","recordCreatedAt"],"sources":["../../../../src/form/form-audit/index.ts"],"sourcesContent":["import Joi, { type ObjectSchema } from 'joi'\n\nimport {\n AuditEventMessageCategory,\n AuditEventMessageSchemaVersion,\n AuditEventMessageSource,\n AuditEventMessageType,\n FormDefinitionRequestType\n} from '~/src/form/form-audit/enums.js'\nimport {\n type AuditEvent,\n type AuditMessage,\n type AuditRecord,\n type AuditUser,\n type ChangesMessageData,\n type EntitlementMessageData,\n type FormCreatedMessageData,\n type FormDefinitionS3Meta,\n type FormMessageChangesData,\n type FormMessageDataBase,\n type FormNotificationEmailChanges,\n type FormNotificationEmailUpdatedMessageData,\n type FormOrganisationChanges,\n type FormOrganisationUpdatedMessageData,\n type FormPrivacyNoticeChanges,\n type FormPrivacyNoticeUpdatedMessageData,\n type FormSubmissionGuidanceChanges,\n type FormSubmissionGuidanceUpdatedMessageData,\n type FormSupportContactChanges,\n type FormSupportContactUpdatedMessageData,\n type FormSupportEmailChanges,\n type FormSupportEmailUpdatedMessageData,\n type FormSupportOnlineChanges,\n type FormSupportOnlineUpdatedMessageData,\n type FormSupportPhoneChanges,\n type FormSupportPhoneUpdatedMessageData,\n type FormTeamEmailChanges,\n type FormTeamEmailUpdatedMessageData,\n type FormTeamNameChanges,\n type FormTeamNameUpdatedMessageData,\n type FormTitleChanges,\n type FormTitleUpdatedMessageData,\n type FormUpdatedMessageData,\n type FormUploadedChanges,\n type FormUploadedMessageData\n} from '~/src/form/form-audit/types.js'\nimport {\n contactSchema,\n emailAddressSchema,\n emailResponseTimeSchema,\n idSchema,\n notificationEmailAddressSchema,\n onlineTextSchema,\n onlineUrlSchema,\n organisationSchema,\n phoneSchema,\n privacyNoticeUrlSchema,\n slugSchema,\n submissionGuidanceSchema,\n teamEmailSchema,\n teamNameSchema,\n titleSchema\n} from '~/src/form/form-metadata/index.js'\n\nexport const formMessageDataBase = Joi.object<FormMessageDataBase>({\n formId: idSchema,\n slug: slugSchema,\n payload: Joi.object().optional()\n})\n .required()\n .description('The base data object for Form Messages')\n\nexport const formCreatedMessageData = formMessageDataBase\n .append<FormCreatedMessageData>({\n title: titleSchema,\n organisation: organisationSchema,\n teamName: teamNameSchema,\n teamEmail: teamEmailSchema\n })\n .required()\n .description('Message data schema for when a form is created')\n\nexport const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>()\n .keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n s3Key: Joi.string().required()\n })\n .description('Schema for form data S3 object in message')\n\nexport const formUpdatedMessageData = formMessageDataBase\n .append<FormUpdatedMessageData>({\n requestType: Joi.string()\n .valid(...Object.values(FormDefinitionRequestType))\n .required(),\n s3Meta: formDefinitionS3Meta.optional()\n })\n .required()\n\nexport const formTitleChanges = Joi.object<FormTitleChanges>()\n .keys({\n title: titleSchema\n })\n .required()\n .description('Changes schema for FORM_TITLE_UPDATED event')\n\nexport const formOrganisationChanges = Joi.object<FormOrganisationChanges>()\n .keys({\n organisation: organisationSchema\n })\n .required()\n .description('Changes schema for FORM_ORGANISATION_UPDATED event')\n\nexport const formTeamNameChanges = Joi.object<FormTeamNameChanges>()\n .keys({\n teamName: teamNameSchema\n })\n .required()\n .description('Changes schema for FORM_TEAM_NAME_UPDATED event')\n\nexport const formTeamEmailChanges = Joi.object<FormTeamEmailChanges>()\n .keys({\n teamEmail: teamEmailSchema\n })\n .required()\n .description('Changes schema for FORM_TEAM_EMAIL_UPDATED event')\n\nexport const formSupportContactChanges = Joi.object<FormSupportContactChanges>()\n .keys({\n contact: contactSchema\n })\n .required()\n .description('Changes schema for FORM_SUPPORT_CONTACT_UPDATED event')\n\nexport const formSupportPhoneChanges = Joi.object<FormSupportPhoneChanges>()\n .keys({\n phone: phoneSchema\n })\n .required()\n .description('Changes schema for FORM_SUPPORT_PHONE_UPDATED event')\n\nexport const formSupportOnlineChanges = Joi.object<FormSupportOnlineChanges>()\n .keys({\n url: onlineUrlSchema,\n text: onlineTextSchema\n })\n .required()\n .description('Changes schema for FORM_SUPPORT_ONLINE_UPDATED event')\n\nexport const formSupportEmailChanges = Joi.object<FormSupportEmailChanges>()\n .keys({\n address: emailAddressSchema,\n responseTime: emailResponseTimeSchema\n })\n .description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event')\n\nexport const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()\n .keys({\n privacyNoticeUrl: privacyNoticeUrlSchema.required()\n })\n .required()\n .description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event')\n\nexport const formNotificationEmailChanges =\n Joi.object<FormNotificationEmailChanges>()\n .keys({\n notificationEmail: notificationEmailAddressSchema.required()\n })\n .required()\n .description('Changes schema for FORM_NOTIFICATION_EMAIL_UPDATED event')\n\nexport const formSubmissionGuidanceChanges =\n Joi.object<FormSubmissionGuidanceChanges>()\n .keys({\n submissionGuidance: submissionGuidanceSchema.required()\n })\n .required()\n .description('Changes schema for FORM_SUBMISSION_GUIDANCE_UPDATED event')\n\nexport const formUploadedChanges = Joi.object<FormUploadedChanges>()\n .keys({\n value: Joi.string().required()\n })\n .required()\n .description('Changes schema for FORM_JSON_UPLOADED event')\n\nexport const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(\n {\n userId: Joi.string().required(),\n displayName: Joi.string().required(),\n email: Joi.string().email().required(),\n roles: Joi.array().items(Joi.string())\n }\n)\n\nexport const auditUserSchema = Joi.object<AuditUser>()\n .keys({\n id: Joi.string().uuid().required(),\n displayName: Joi.string().required()\n })\n .description('Schema for CREATED_BY audit event')\n\nexport function formChangesMessageData<T, U extends FormMessageChangesData>(\n schema: ObjectSchema<T>\n): ObjectSchema<U> {\n return formMessageDataBase.append<U>({\n changes: Joi.object<ChangesMessageData<T>>()\n .keys({\n previous: schema,\n new: schema\n })\n .description('Changes schema')\n })\n}\n\nexport const messageSchema = Joi.object<AuditMessage>()\n .keys({\n schemaVersion: Joi.string()\n .valid(...Object.values(AuditEventMessageSchemaVersion))\n .required()\n .description(\n 'The version of the AuditMessage - bumped with breaking changes'\n ),\n category: Joi.string()\n .valid(...Object.values(AuditEventMessageCategory))\n .required()\n .description('The message category - what does the entityId represent?'),\n source: Joi.string()\n .valid(...Object.values(AuditEventMessageSource))\n .required()\n .description('Source of the message - which service?'),\n type: Joi.string()\n .valid(...Object.values(AuditEventMessageType))\n .description('Event type'),\n entityId: Joi.string()\n .required()\n .description('The id of the entity the category relates to'),\n traceId: Joi.string()\n .optional()\n .description(\n 'Trace id of the event - to link events across multiple services'\n ),\n createdAt: Joi.date()\n .required()\n .description(\n 'The ISO timestamp where the action took place - should be the same as updated_at field in DB'\n ),\n createdBy: auditUserSchema\n .required()\n .description('The user who performed the action being audited'),\n data: Joi.when('type', {\n switch: [\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),\n then: formCreatedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_TITLE_UPDATED),\n then: formChangesMessageData<\n FormTitleChanges,\n FormTitleUpdatedMessageData\n >(formTitleChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),\n then: formChangesMessageData<\n FormOrganisationChanges,\n FormOrganisationUpdatedMessageData\n >(formOrganisationChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),\n then: formChangesMessageData<\n FormTeamNameChanges,\n FormTeamNameUpdatedMessageData\n >(formTeamNameChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormTeamEmailChanges,\n FormTeamEmailUpdatedMessageData\n >(formTeamEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_CONTACT_UPDATED),\n then: formChangesMessageData<\n FormSupportContactChanges,\n FormSupportContactUpdatedMessageData\n >(formSupportContactChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),\n then: formChangesMessageData<\n FormSupportPhoneChanges,\n FormSupportPhoneUpdatedMessageData\n >(formSupportPhoneChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormSupportEmailChanges,\n FormSupportEmailUpdatedMessageData\n >(formSupportEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),\n then: formChangesMessageData<\n FormSupportOnlineChanges,\n FormSupportOnlineUpdatedMessageData\n >(formSupportOnlineChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),\n then: formChangesMessageData<\n FormPrivacyNoticeChanges,\n FormPrivacyNoticeUpdatedMessageData\n >(formPrivacyNoticeChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),\n then: formChangesMessageData<\n FormNotificationEmailChanges,\n FormNotificationEmailUpdatedMessageData\n >(formNotificationEmailChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),\n then: formChangesMessageData<\n FormSubmissionGuidanceChanges,\n FormSubmissionGuidanceUpdatedMessageData\n >(formSubmissionGuidanceChanges)\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_JSON_UPLOADED),\n then: formChangesMessageData<\n FormUploadedChanges,\n FormUploadedMessageData\n >(formUploadedChanges)\n },\n {\n is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),\n then: formUpdatedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_CREATED),\n then: entitlementMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_DRAFT_DELETED),\n then: formMessageDataBase\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),\n then: entitlementMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.ENTITLEMENT_DELETED),\n then: entitlementMessageData\n }\n ],\n otherwise: Joi.forbidden()\n }).description('The data/payload of the audit message'),\n messageCreatedAt: Joi.date()\n .required()\n .description('ISO timestamp when the message was published')\n })\n .required()\n .description('The audit message issued by the publishing service')\n\nexport const auditEvent = Joi.object<AuditEvent>()\n .keys({\n message: messageSchema\n })\n .description('The Body of the audit event')\n\nexport const auditRecord = messageSchema\n .append<AuditRecord>({\n id: idSchema,\n messageId: Joi.string().uuid().required(),\n entityId: Joi.string().required(),\n recordCreatedAt: Joi.date().required()\n })\n .description('The audit record persisted into the DB')\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,KAAK,CAAA;AAS5C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EAEjC,KAAK,uBAAuB,EAE5B,KAAK,wBAAwB,EAE7B,KAAK,6BAA6B,EAElC,KAAK,yBAAyB,EAE9B,KAAK,uBAAuB,EAE5B,KAAK,wBAAwB,EAE7B,KAAK,uBAAuB,EAE5B,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAEzB,MAAM,gCAAgC,CAAA;AAGvC,eAAO,MAAM,mBAAmB,uCAI9B,CAAA;AAEF,eAAO,MAAM,sBAAsB,0CAM/B,CAAA;AAEJ,eAAO,MAAM,oBAAoB,wCAI/B,CAAA;AAEF,eAAO,MAAM,sBAAsB,0CAM/B,CAAA;AAEJ,eAAO,MAAM,gBAAgB,oCAIhB,CAAA;AAEb,eAAO,MAAM,uBAAuB,2CAIvB,CAAA;AAEb,eAAO,MAAM,mBAAmB,uCAInB,CAAA;AAEb,eAAO,MAAM,oBAAoB,wCAIpB,CAAA;AAEb,eAAO,MAAM,yBAAyB,6CAIzB,CAAA;AAEb,eAAO,MAAM,uBAAuB,2CAIvB,CAAA;AAEb,eAAO,MAAM,wBAAwB,4CAKxB,CAAA;AAEb,eAAO,MAAM,uBAAuB,2CAIhC,CAAA;AAEJ,eAAO,MAAM,wBAAwB,4CAIxB,CAAA;AAEb,eAAO,MAAM,4BAA4B,gDAK1B,CAAA;AAEf,eAAO,MAAM,6BAA6B,iDAK3B,CAAA;AAEf,eAAO,MAAM,mBAAmB,uCAInB,CAAA;AAEb,eAAO,MAAM,sBAAsB,0CAOlC,CAAA;AAED,eAAO,MAAM,eAAe,6BAG1B,CAAA;AAEF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,CAAC,SAAS,sBAAsB,EACxE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,YAAY,CAAC,CAAC,CAAC,CAOjB;AAED,eAAO,MAAM,aAAa,gCA2JxB,CAAA;AAEF,eAAO,MAAM,UAAU,8BAErB,CAAA;AAEF,eAAO,MAAM,WAAW,+BAKtB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,KAAK,CAAA;AAS5C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EAEjC,KAAK,uBAAuB,EAE5B,KAAK,wBAAwB,EAE7B,KAAK,6BAA6B,EAElC,KAAK,yBAAyB,EAE9B,KAAK,uBAAuB,EAE5B,KAAK,wBAAwB,EAE7B,KAAK,uBAAuB,EAE5B,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAEzB,MAAM,gCAAgC,CAAA;AAmBvC,eAAO,MAAM,mBAAmB,uCAMwB,CAAA;AAExD,eAAO,MAAM,sBAAsB,0CAQ6B,CAAA;AAEhE,eAAO,MAAM,oBAAoB,wCAM0B,CAAA;AAE3D,eAAO,MAAM,sBAAsB,0CAOtB,CAAA;AAEb,eAAO,MAAM,gBAAgB,oCAKgC,CAAA;AAE7D,eAAO,MAAM,uBAAuB,2CAKgC,CAAA;AAEpE,eAAO,MAAM,mBAAmB,uCAKiC,CAAA;AAEjE,eAAO,MAAM,oBAAoB,wCAKiC,CAAA;AAElE,eAAO,MAAM,yBAAyB,6CAKiC,CAAA;AAEvE,eAAO,MAAM,uBAAuB,2CAKiC,CAAA;AAErE,eAAO,MAAM,wBAAwB,4CAMiC,CAAA;AAEtE,eAAO,MAAM,uBAAuB,2CAKiC,CAAA;AAErE,eAAO,MAAM,wBAAwB,4CAKiC,CAAA;AAEtE,eAAO,MAAM,4BAA4B,gDAMmC,CAAA;AAE5E,eAAO,MAAM,6BAA6B,iDAMmC,CAAA;AAE7E,eAAO,MAAM,mBAAmB,uCAK6B,CAAA;AAE7D,eAAO,MAAM,sBAAsB,0CAOlC,CAAA;AAED,eAAO,MAAM,eAAe,6BAKuB,CAAA;AAEnD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,CAAC,SAAS,sBAAsB,EACxE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,YAAY,CAAC,CAAC,CAAC,CASjB;AAED,eAAO,MAAM,aAAa,gCAyL0C,CAAA;AAEpE,eAAO,MAAM,UAAU,8BAIsB,CAAA;AAE7C,eAAO,MAAM,WAAW,+BAOgC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.533",
3
+ "version": "3.0.535",
4
4
  "description": "A hapi plugin providing the model for Defra forms",
5
5
  "homepage": "https://github.com/DEFRA/forms-designer/tree/main/model#readme",
6
6
  "types": "dist/types/index.d.ts",
@@ -44,110 +44,145 @@ import {
44
44
  type FormUploadedChanges,
45
45
  type FormUploadedMessageData
46
46
  } from '~/src/form/form-audit/types.js'
47
- import { contactSchema, idSchema } from '~/src/form/form-metadata/index.js'
47
+ import {
48
+ contactSchema,
49
+ emailAddressSchema,
50
+ emailResponseTimeSchema,
51
+ idSchema,
52
+ notificationEmailAddressSchema,
53
+ onlineTextSchema,
54
+ onlineUrlSchema,
55
+ organisationSchema,
56
+ phoneSchema,
57
+ privacyNoticeUrlSchema,
58
+ slugSchema,
59
+ submissionGuidanceSchema,
60
+ teamEmailSchema,
61
+ teamNameSchema,
62
+ titleSchema
63
+ } from '~/src/form/form-metadata/index.js'
48
64
 
49
65
  export const formMessageDataBase = Joi.object<FormMessageDataBase>({
50
- formId: Joi.string().required(),
51
- slug: Joi.string().required(),
66
+ formId: idSchema,
67
+ slug: slugSchema,
52
68
  payload: Joi.object().optional()
53
69
  })
70
+ .required()
71
+ .description('The base data object for Form Messages')
54
72
 
55
- export const formCreatedMessageData =
56
- formMessageDataBase.append<FormCreatedMessageData>({
57
- title: Joi.string().required(),
58
- organisation: Joi.string().required(),
59
- teamName: Joi.string().required(),
60
- teamEmail: Joi.string().required()
73
+ export const formCreatedMessageData = formMessageDataBase
74
+ .append<FormCreatedMessageData>({
75
+ title: titleSchema,
76
+ organisation: organisationSchema,
77
+ teamName: teamNameSchema,
78
+ teamEmail: teamEmailSchema
61
79
  })
80
+ .required()
81
+ .description('Message data schema for when a form is created')
62
82
 
63
- export const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>().keys({
64
- fileId: Joi.string().required(),
65
- filename: Joi.string().required(),
66
- s3Key: Joi.string().required()
67
- })
83
+ export const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>()
84
+ .keys({
85
+ fileId: Joi.string().required(),
86
+ filename: Joi.string().required(),
87
+ s3Key: Joi.string().required()
88
+ })
89
+ .description('Schema for form data S3 object in message')
68
90
 
69
- export const formUpdatedMessageData =
70
- formMessageDataBase.append<FormUpdatedMessageData>({
91
+ export const formUpdatedMessageData = formMessageDataBase
92
+ .append<FormUpdatedMessageData>({
71
93
  requestType: Joi.string()
72
94
  .valid(...Object.values(FormDefinitionRequestType))
73
95
  .required(),
74
- s3Meta: formDefinitionS3Meta
96
+ s3Meta: formDefinitionS3Meta.optional()
75
97
  })
98
+ .required()
76
99
 
77
100
  export const formTitleChanges = Joi.object<FormTitleChanges>()
78
101
  .keys({
79
- title: Joi.string().required()
102
+ title: titleSchema
80
103
  })
81
104
  .required()
105
+ .description('Changes schema for FORM_TITLE_UPDATED event')
82
106
 
83
107
  export const formOrganisationChanges = Joi.object<FormOrganisationChanges>()
84
108
  .keys({
85
- organisation: Joi.string().required()
109
+ organisation: organisationSchema
86
110
  })
87
111
  .required()
112
+ .description('Changes schema for FORM_ORGANISATION_UPDATED event')
88
113
 
89
114
  export const formTeamNameChanges = Joi.object<FormTeamNameChanges>()
90
115
  .keys({
91
- teamName: Joi.string().required()
116
+ teamName: teamNameSchema
92
117
  })
93
118
  .required()
119
+ .description('Changes schema for FORM_TEAM_NAME_UPDATED event')
94
120
 
95
121
  export const formTeamEmailChanges = Joi.object<FormTeamEmailChanges>()
96
122
  .keys({
97
- teamEmail: Joi.string().required()
123
+ teamEmail: teamEmailSchema
98
124
  })
99
125
  .required()
126
+ .description('Changes schema for FORM_TEAM_EMAIL_UPDATED event')
100
127
 
101
128
  export const formSupportContactChanges = Joi.object<FormSupportContactChanges>()
102
129
  .keys({
103
130
  contact: contactSchema
104
131
  })
105
132
  .required()
133
+ .description('Changes schema for FORM_SUPPORT_CONTACT_UPDATED event')
106
134
 
107
135
  export const formSupportPhoneChanges = Joi.object<FormSupportPhoneChanges>()
108
136
  .keys({
109
- phone: Joi.string().required()
137
+ phone: phoneSchema
110
138
  })
111
139
  .required()
140
+ .description('Changes schema for FORM_SUPPORT_PHONE_UPDATED event')
112
141
 
113
142
  export const formSupportOnlineChanges = Joi.object<FormSupportOnlineChanges>()
114
143
  .keys({
115
- url: Joi.string().required(),
116
- text: Joi.string().required()
144
+ url: onlineUrlSchema,
145
+ text: onlineTextSchema
117
146
  })
118
147
  .required()
148
+ .description('Changes schema for FORM_SUPPORT_ONLINE_UPDATED event')
119
149
 
120
- export const formSupportEmailChanges =
121
- Joi.object<FormSupportEmailChanges>().keys({
122
- address: Joi.string().email().required(),
123
- responseTime: Joi.string().required()
150
+ export const formSupportEmailChanges = Joi.object<FormSupportEmailChanges>()
151
+ .keys({
152
+ address: emailAddressSchema,
153
+ responseTime: emailResponseTimeSchema
124
154
  })
155
+ .description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event')
125
156
 
126
157
  export const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()
127
158
  .keys({
128
- privacyNoticeUrl: Joi.string()
159
+ privacyNoticeUrl: privacyNoticeUrlSchema.required()
129
160
  })
130
161
  .required()
162
+ .description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event')
131
163
 
132
164
  export const formNotificationEmailChanges =
133
165
  Joi.object<FormNotificationEmailChanges>()
134
166
  .keys({
135
- notificationEmail: Joi.string()
167
+ notificationEmail: notificationEmailAddressSchema.required()
136
168
  })
137
169
  .required()
170
+ .description('Changes schema for FORM_NOTIFICATION_EMAIL_UPDATED event')
138
171
 
139
172
  export const formSubmissionGuidanceChanges =
140
173
  Joi.object<FormSubmissionGuidanceChanges>()
141
174
  .keys({
142
- submissionGuidance: Joi.string()
175
+ submissionGuidance: submissionGuidanceSchema.required()
143
176
  })
144
177
  .required()
178
+ .description('Changes schema for FORM_SUBMISSION_GUIDANCE_UPDATED event')
145
179
 
146
180
  export const formUploadedChanges = Joi.object<FormUploadedChanges>()
147
181
  .keys({
148
182
  value: Joi.string().required()
149
183
  })
150
184
  .required()
185
+ .description('Changes schema for FORM_JSON_UPLOADED event')
151
186
 
152
187
  export const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(
153
188
  {
@@ -158,186 +193,224 @@ export const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(
158
193
  }
159
194
  )
160
195
 
161
- export const auditUserSchema = Joi.object<AuditUser>().keys({
162
- id: Joi.string().uuid().required(),
163
- displayName: Joi.string().required()
164
- })
196
+ export const auditUserSchema = Joi.object<AuditUser>()
197
+ .keys({
198
+ id: Joi.string().uuid().required(),
199
+ displayName: Joi.string().required()
200
+ })
201
+ .description('Schema for CREATED_BY audit event')
165
202
 
166
203
  export function formChangesMessageData<T, U extends FormMessageChangesData>(
167
204
  schema: ObjectSchema<T>
168
205
  ): ObjectSchema<U> {
169
206
  return formMessageDataBase.append<U>({
170
- changes: Joi.object<ChangesMessageData<T>>().keys({
171
- previous: schema,
172
- new: schema
173
- })
207
+ changes: Joi.object<ChangesMessageData<T>>()
208
+ .keys({
209
+ previous: schema,
210
+ new: schema
211
+ })
212
+ .description('Changes schema')
174
213
  })
175
214
  }
176
215
 
177
- export const messageSchema = Joi.object<AuditMessage>().keys({
178
- schemaVersion: Joi.string()
179
- .valid(...Object.values(AuditEventMessageSchemaVersion))
180
- .required(),
181
- category: Joi.string()
182
- .valid(...Object.values(AuditEventMessageCategory))
183
- .required(),
184
- source: Joi.string()
185
- .valid(...Object.values(AuditEventMessageSource))
186
- .required(),
187
- type: Joi.string().valid(...Object.values(AuditEventMessageType)),
188
- entityId: Joi.string().required(),
189
- traceId: Joi.string().optional(),
190
- createdAt: Joi.date().required(),
191
- createdBy: auditUserSchema.required(),
192
- data: Joi.when('type', {
193
- switch: [
194
- {
195
- is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
196
- then: formCreatedMessageData
197
- },
198
- {
199
- is: Joi.string().trim().valid(AuditEventMessageType.FORM_TITLE_UPDATED),
200
- then: formChangesMessageData<
201
- FormTitleChanges,
202
- FormTitleUpdatedMessageData
203
- >(formTitleChanges)
204
- },
205
- {
206
- is: Joi.string()
207
- .trim()
208
- .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),
209
- then: formChangesMessageData<
210
- FormOrganisationChanges,
211
- FormOrganisationUpdatedMessageData
212
- >(formOrganisationChanges)
213
- },
214
- {
215
- is: Joi.string()
216
- .trim()
217
- .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),
218
- then: formChangesMessageData<
219
- FormTeamNameChanges,
220
- FormTeamNameUpdatedMessageData
221
- >(formTeamNameChanges)
222
- },
223
- {
224
- is: Joi.string()
225
- .trim()
226
- .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),
227
- then: formChangesMessageData<
228
- FormTeamEmailChanges,
229
- FormTeamEmailUpdatedMessageData
230
- >(formTeamEmailChanges)
231
- },
232
- {
233
- is: Joi.string()
234
- .trim()
235
- .valid(AuditEventMessageType.FORM_SUPPORT_CONTACT_UPDATED),
236
- then: formChangesMessageData<
237
- FormSupportContactChanges,
238
- FormSupportContactUpdatedMessageData
239
- >(formSupportContactChanges)
240
- },
241
- {
242
- is: Joi.string()
243
- .trim()
244
- .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),
245
- then: formChangesMessageData<
246
- FormSupportPhoneChanges,
247
- FormSupportPhoneUpdatedMessageData
248
- >(formSupportPhoneChanges)
249
- },
250
- {
251
- is: Joi.string()
252
- .trim()
253
- .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
254
- then: formChangesMessageData<
255
- FormSupportEmailChanges,
256
- FormSupportEmailUpdatedMessageData
257
- >(formSupportEmailChanges)
258
- },
259
- {
260
- is: Joi.string()
261
- .trim()
262
- .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),
263
- then: formChangesMessageData<
264
- FormSupportOnlineChanges,
265
- FormSupportOnlineUpdatedMessageData
266
- >(formSupportOnlineChanges)
267
- },
268
- {
269
- is: Joi.string()
270
- .trim()
271
- .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),
272
- then: formChangesMessageData<
273
- FormPrivacyNoticeChanges,
274
- FormPrivacyNoticeUpdatedMessageData
275
- >(formPrivacyNoticeChanges)
276
- },
277
- {
278
- is: Joi.string()
279
- .trim()
280
- .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),
281
- then: formChangesMessageData<
282
- FormNotificationEmailChanges,
283
- FormNotificationEmailUpdatedMessageData
284
- >(formNotificationEmailChanges)
285
- },
286
- {
287
- is: Joi.string()
288
- .trim()
289
- .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),
290
- then: formChangesMessageData<
291
- FormSubmissionGuidanceChanges,
292
- FormSubmissionGuidanceUpdatedMessageData
293
- >(formSubmissionGuidanceChanges)
294
- },
295
- {
296
- is: Joi.string().trim().valid(AuditEventMessageType.FORM_JSON_UPLOADED),
297
- then: formChangesMessageData<
298
- FormUploadedChanges,
299
- FormUploadedMessageData
300
- >(formUploadedChanges)
301
- },
302
- {
303
- is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),
304
- then: formUpdatedMessageData
305
- },
306
- {
307
- is: Joi.string()
308
- .trim()
309
- .valid(AuditEventMessageType.ENTITLEMENT_CREATED),
310
- then: entitlementMessageData
311
- },
312
- {
313
- is: Joi.string().trim().valid(AuditEventMessageType.FORM_DRAFT_DELETED),
314
- then: formMessageDataBase
315
- },
316
- {
317
- is: Joi.string()
318
- .trim()
319
- .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),
320
- then: entitlementMessageData
321
- },
322
- {
323
- is: Joi.string()
324
- .trim()
325
- .valid(AuditEventMessageType.ENTITLEMENT_DELETED),
326
- then: entitlementMessageData
327
- }
328
- ],
329
- otherwise: Joi.forbidden()
330
- }),
331
- messageCreatedAt: Joi.date().required()
332
- })
216
+ export const messageSchema = Joi.object<AuditMessage>()
217
+ .keys({
218
+ schemaVersion: Joi.string()
219
+ .valid(...Object.values(AuditEventMessageSchemaVersion))
220
+ .required()
221
+ .description(
222
+ 'The version of the AuditMessage - bumped with breaking changes'
223
+ ),
224
+ category: Joi.string()
225
+ .valid(...Object.values(AuditEventMessageCategory))
226
+ .required()
227
+ .description('The message category - what does the entityId represent?'),
228
+ source: Joi.string()
229
+ .valid(...Object.values(AuditEventMessageSource))
230
+ .required()
231
+ .description('Source of the message - which service?'),
232
+ type: Joi.string()
233
+ .valid(...Object.values(AuditEventMessageType))
234
+ .description('Event type'),
235
+ entityId: Joi.string()
236
+ .required()
237
+ .description('The id of the entity the category relates to'),
238
+ traceId: Joi.string()
239
+ .optional()
240
+ .description(
241
+ 'Trace id of the event - to link events across multiple services'
242
+ ),
243
+ createdAt: Joi.date()
244
+ .required()
245
+ .description(
246
+ 'The ISO timestamp where the action took place - should be the same as updated_at field in DB'
247
+ ),
248
+ createdBy: auditUserSchema
249
+ .required()
250
+ .description('The user who performed the action being audited'),
251
+ data: Joi.when('type', {
252
+ switch: [
253
+ {
254
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
255
+ then: formCreatedMessageData
256
+ },
257
+ {
258
+ is: Joi.string()
259
+ .trim()
260
+ .valid(AuditEventMessageType.FORM_TITLE_UPDATED),
261
+ then: formChangesMessageData<
262
+ FormTitleChanges,
263
+ FormTitleUpdatedMessageData
264
+ >(formTitleChanges)
265
+ },
266
+ {
267
+ is: Joi.string()
268
+ .trim()
269
+ .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),
270
+ then: formChangesMessageData<
271
+ FormOrganisationChanges,
272
+ FormOrganisationUpdatedMessageData
273
+ >(formOrganisationChanges)
274
+ },
275
+ {
276
+ is: Joi.string()
277
+ .trim()
278
+ .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),
279
+ then: formChangesMessageData<
280
+ FormTeamNameChanges,
281
+ FormTeamNameUpdatedMessageData
282
+ >(formTeamNameChanges)
283
+ },
284
+ {
285
+ is: Joi.string()
286
+ .trim()
287
+ .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),
288
+ then: formChangesMessageData<
289
+ FormTeamEmailChanges,
290
+ FormTeamEmailUpdatedMessageData
291
+ >(formTeamEmailChanges)
292
+ },
293
+ {
294
+ is: Joi.string()
295
+ .trim()
296
+ .valid(AuditEventMessageType.FORM_SUPPORT_CONTACT_UPDATED),
297
+ then: formChangesMessageData<
298
+ FormSupportContactChanges,
299
+ FormSupportContactUpdatedMessageData
300
+ >(formSupportContactChanges)
301
+ },
302
+ {
303
+ is: Joi.string()
304
+ .trim()
305
+ .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),
306
+ then: formChangesMessageData<
307
+ FormSupportPhoneChanges,
308
+ FormSupportPhoneUpdatedMessageData
309
+ >(formSupportPhoneChanges)
310
+ },
311
+ {
312
+ is: Joi.string()
313
+ .trim()
314
+ .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
315
+ then: formChangesMessageData<
316
+ FormSupportEmailChanges,
317
+ FormSupportEmailUpdatedMessageData
318
+ >(formSupportEmailChanges)
319
+ },
320
+ {
321
+ is: Joi.string()
322
+ .trim()
323
+ .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),
324
+ then: formChangesMessageData<
325
+ FormSupportOnlineChanges,
326
+ FormSupportOnlineUpdatedMessageData
327
+ >(formSupportOnlineChanges)
328
+ },
329
+ {
330
+ is: Joi.string()
331
+ .trim()
332
+ .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),
333
+ then: formChangesMessageData<
334
+ FormPrivacyNoticeChanges,
335
+ FormPrivacyNoticeUpdatedMessageData
336
+ >(formPrivacyNoticeChanges)
337
+ },
338
+ {
339
+ is: Joi.string()
340
+ .trim()
341
+ .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),
342
+ then: formChangesMessageData<
343
+ FormNotificationEmailChanges,
344
+ FormNotificationEmailUpdatedMessageData
345
+ >(formNotificationEmailChanges)
346
+ },
347
+ {
348
+ is: Joi.string()
349
+ .trim()
350
+ .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),
351
+ then: formChangesMessageData<
352
+ FormSubmissionGuidanceChanges,
353
+ FormSubmissionGuidanceUpdatedMessageData
354
+ >(formSubmissionGuidanceChanges)
355
+ },
356
+ {
357
+ is: Joi.string()
358
+ .trim()
359
+ .valid(AuditEventMessageType.FORM_JSON_UPLOADED),
360
+ then: formChangesMessageData<
361
+ FormUploadedChanges,
362
+ FormUploadedMessageData
363
+ >(formUploadedChanges)
364
+ },
365
+ {
366
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),
367
+ then: formUpdatedMessageData
368
+ },
369
+ {
370
+ is: Joi.string()
371
+ .trim()
372
+ .valid(AuditEventMessageType.ENTITLEMENT_CREATED),
373
+ then: entitlementMessageData
374
+ },
375
+ {
376
+ is: Joi.string()
377
+ .trim()
378
+ .valid(AuditEventMessageType.FORM_DRAFT_DELETED),
379
+ then: formMessageDataBase
380
+ },
381
+ {
382
+ is: Joi.string()
383
+ .trim()
384
+ .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),
385
+ then: entitlementMessageData
386
+ },
387
+ {
388
+ is: Joi.string()
389
+ .trim()
390
+ .valid(AuditEventMessageType.ENTITLEMENT_DELETED),
391
+ then: entitlementMessageData
392
+ }
393
+ ],
394
+ otherwise: Joi.forbidden()
395
+ }).description('The data/payload of the audit message'),
396
+ messageCreatedAt: Joi.date()
397
+ .required()
398
+ .description('ISO timestamp when the message was published')
399
+ })
400
+ .required()
401
+ .description('The audit message issued by the publishing service')
333
402
 
334
- export const auditEvent = Joi.object<AuditEvent>().keys({
335
- message: messageSchema
336
- })
403
+ export const auditEvent = Joi.object<AuditEvent>()
404
+ .keys({
405
+ message: messageSchema
406
+ })
407
+ .description('The Body of the audit event')
337
408
 
338
- export const auditRecord = messageSchema.append<AuditRecord>({
339
- id: idSchema,
340
- messageId: Joi.string().uuid().required(),
341
- entityId: Joi.string().required(),
342
- recordCreatedAt: Joi.date().required()
343
- })
409
+ export const auditRecord = messageSchema
410
+ .append<AuditRecord>({
411
+ id: idSchema,
412
+ messageId: Joi.string().uuid().required(),
413
+ entityId: Joi.string().required(),
414
+ recordCreatedAt: Joi.date().required()
415
+ })
416
+ .description('The audit record persisted into the DB')