@defra/forms-model 3.0.532 → 3.0.534

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
+ }).required().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
22
  s3Meta: formDefinitionS3Meta
23
- });
24
- export const formTitleChanges = Joi.object().keys({
25
- title: Joi.string().required()
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),
@@ -132,6 +132,9 @@ export const messageSchema = Joi.object().keys({
132
132
  }, {
133
133
  is: Joi.string().trim().valid(AuditEventMessageType.ENTITLEMENT_CREATED),
134
134
  then: entitlementMessageData
135
+ }, {
136
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_DRAFT_DELETED),
137
+ then: formMessageDataBase
135
138
  }, {
136
139
  is: Joi.string().trim().valid(AuditEventMessageType.ENTITLEMENT_UPDATED),
137
140
  then: entitlementMessageData
@@ -140,16 +143,16 @@ export const messageSchema = Joi.object().keys({
140
143
  then: entitlementMessageData
141
144
  }],
142
145
  otherwise: Joi.forbidden()
143
- }),
144
- messageCreatedAt: Joi.date().required()
145
- });
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');
146
149
  export const auditEvent = Joi.object().keys({
147
150
  message: messageSchema
148
- });
151
+ }).description('The Body of the audit event');
149
152
  export const auditRecord = messageSchema.append({
150
153
  id: idSchema,
151
154
  messageId: Joi.string().uuid().required(),
152
155
  entityId: Joi.string().required(),
153
156
  recordCreatedAt: Joi.date().required()
154
- });
157
+ }).description('The audit record persisted into the DB');
155
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","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()\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 .required()\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\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,gCAuJxB,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,wCAO0B,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.532",
3
+ "version": "3.0.534",
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,146 @@ 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
+ .required()
90
+ .description('Schema for form data S3 object in message')
68
91
 
69
- export const formUpdatedMessageData =
70
- formMessageDataBase.append<FormUpdatedMessageData>({
92
+ export const formUpdatedMessageData = formMessageDataBase
93
+ .append<FormUpdatedMessageData>({
71
94
  requestType: Joi.string()
72
95
  .valid(...Object.values(FormDefinitionRequestType))
73
96
  .required(),
74
97
  s3Meta: formDefinitionS3Meta
75
98
  })
99
+ .required()
76
100
 
77
101
  export const formTitleChanges = Joi.object<FormTitleChanges>()
78
102
  .keys({
79
- title: Joi.string().required()
103
+ title: titleSchema
80
104
  })
81
105
  .required()
106
+ .description('Changes schema for FORM_TITLE_UPDATED event')
82
107
 
83
108
  export const formOrganisationChanges = Joi.object<FormOrganisationChanges>()
84
109
  .keys({
85
- organisation: Joi.string().required()
110
+ organisation: organisationSchema
86
111
  })
87
112
  .required()
113
+ .description('Changes schema for FORM_ORGANISATION_UPDATED event')
88
114
 
89
115
  export const formTeamNameChanges = Joi.object<FormTeamNameChanges>()
90
116
  .keys({
91
- teamName: Joi.string().required()
117
+ teamName: teamNameSchema
92
118
  })
93
119
  .required()
120
+ .description('Changes schema for FORM_TEAM_NAME_UPDATED event')
94
121
 
95
122
  export const formTeamEmailChanges = Joi.object<FormTeamEmailChanges>()
96
123
  .keys({
97
- teamEmail: Joi.string().required()
124
+ teamEmail: teamEmailSchema
98
125
  })
99
126
  .required()
127
+ .description('Changes schema for FORM_TEAM_EMAIL_UPDATED event')
100
128
 
101
129
  export const formSupportContactChanges = Joi.object<FormSupportContactChanges>()
102
130
  .keys({
103
131
  contact: contactSchema
104
132
  })
105
133
  .required()
134
+ .description('Changes schema for FORM_SUPPORT_CONTACT_UPDATED event')
106
135
 
107
136
  export const formSupportPhoneChanges = Joi.object<FormSupportPhoneChanges>()
108
137
  .keys({
109
- phone: Joi.string().required()
138
+ phone: phoneSchema
110
139
  })
111
140
  .required()
141
+ .description('Changes schema for FORM_SUPPORT_PHONE_UPDATED event')
112
142
 
113
143
  export const formSupportOnlineChanges = Joi.object<FormSupportOnlineChanges>()
114
144
  .keys({
115
- url: Joi.string().required(),
116
- text: Joi.string().required()
145
+ url: onlineUrlSchema,
146
+ text: onlineTextSchema
117
147
  })
118
148
  .required()
149
+ .description('Changes schema for FORM_SUPPORT_ONLINE_UPDATED event')
119
150
 
120
- export const formSupportEmailChanges =
121
- Joi.object<FormSupportEmailChanges>().keys({
122
- address: Joi.string().email().required(),
123
- responseTime: Joi.string().required()
151
+ export const formSupportEmailChanges = Joi.object<FormSupportEmailChanges>()
152
+ .keys({
153
+ address: emailAddressSchema,
154
+ responseTime: emailResponseTimeSchema
124
155
  })
156
+ .description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event')
125
157
 
126
158
  export const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()
127
159
  .keys({
128
- privacyNoticeUrl: Joi.string()
160
+ privacyNoticeUrl: privacyNoticeUrlSchema.required()
129
161
  })
130
162
  .required()
163
+ .description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event')
131
164
 
132
165
  export const formNotificationEmailChanges =
133
166
  Joi.object<FormNotificationEmailChanges>()
134
167
  .keys({
135
- notificationEmail: Joi.string()
168
+ notificationEmail: notificationEmailAddressSchema.required()
136
169
  })
137
170
  .required()
171
+ .description('Changes schema for FORM_NOTIFICATION_EMAIL_UPDATED event')
138
172
 
139
173
  export const formSubmissionGuidanceChanges =
140
174
  Joi.object<FormSubmissionGuidanceChanges>()
141
175
  .keys({
142
- submissionGuidance: Joi.string()
176
+ submissionGuidance: submissionGuidanceSchema.required()
143
177
  })
144
178
  .required()
179
+ .description('Changes schema for FORM_SUBMISSION_GUIDANCE_UPDATED event')
145
180
 
146
181
  export const formUploadedChanges = Joi.object<FormUploadedChanges>()
147
182
  .keys({
148
183
  value: Joi.string().required()
149
184
  })
150
185
  .required()
186
+ .description('Changes schema for FORM_JSON_UPLOADED event')
151
187
 
152
188
  export const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(
153
189
  {
@@ -158,182 +194,224 @@ export const entitlementMessageData = Joi.object<EntitlementMessageData>().keys(
158
194
  }
159
195
  )
160
196
 
161
- export const auditUserSchema = Joi.object<AuditUser>().keys({
162
- id: Joi.string().uuid().required(),
163
- displayName: Joi.string().required()
164
- })
197
+ export const auditUserSchema = Joi.object<AuditUser>()
198
+ .keys({
199
+ id: Joi.string().uuid().required(),
200
+ displayName: Joi.string().required()
201
+ })
202
+ .description('Schema for CREATED_BY audit event')
165
203
 
166
204
  export function formChangesMessageData<T, U extends FormMessageChangesData>(
167
205
  schema: ObjectSchema<T>
168
206
  ): ObjectSchema<U> {
169
207
  return formMessageDataBase.append<U>({
170
- changes: Joi.object<ChangesMessageData<T>>().keys({
171
- previous: schema,
172
- new: schema
173
- })
208
+ changes: Joi.object<ChangesMessageData<T>>()
209
+ .keys({
210
+ previous: schema,
211
+ new: schema
212
+ })
213
+ .description('Changes schema')
174
214
  })
175
215
  }
176
216
 
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()
314
- .trim()
315
- .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),
316
- then: entitlementMessageData
317
- },
318
- {
319
- is: Joi.string()
320
- .trim()
321
- .valid(AuditEventMessageType.ENTITLEMENT_DELETED),
322
- then: entitlementMessageData
323
- }
324
- ],
325
- otherwise: Joi.forbidden()
326
- }),
327
- messageCreatedAt: Joi.date().required()
328
- })
217
+ export const messageSchema = Joi.object<AuditMessage>()
218
+ .keys({
219
+ schemaVersion: Joi.string()
220
+ .valid(...Object.values(AuditEventMessageSchemaVersion))
221
+ .required()
222
+ .description(
223
+ 'The version of the AuditMessage - bumped with breaking changes'
224
+ ),
225
+ category: Joi.string()
226
+ .valid(...Object.values(AuditEventMessageCategory))
227
+ .required()
228
+ .description('The message category - what does the entityId represent?'),
229
+ source: Joi.string()
230
+ .valid(...Object.values(AuditEventMessageSource))
231
+ .required()
232
+ .description('Source of the message - which service?'),
233
+ type: Joi.string()
234
+ .valid(...Object.values(AuditEventMessageType))
235
+ .description('Event type'),
236
+ entityId: Joi.string()
237
+ .required()
238
+ .description('The id of the entity the category relates to'),
239
+ traceId: Joi.string()
240
+ .optional()
241
+ .description(
242
+ 'Trace id of the event - to link events across multiple services'
243
+ ),
244
+ createdAt: Joi.date()
245
+ .required()
246
+ .description(
247
+ 'The ISO timestamp where the action took place - should be the same as updated_at field in DB'
248
+ ),
249
+ createdBy: auditUserSchema
250
+ .required()
251
+ .description('The user who performed the action being audited'),
252
+ data: Joi.when('type', {
253
+ switch: [
254
+ {
255
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
256
+ then: formCreatedMessageData
257
+ },
258
+ {
259
+ is: Joi.string()
260
+ .trim()
261
+ .valid(AuditEventMessageType.FORM_TITLE_UPDATED),
262
+ then: formChangesMessageData<
263
+ FormTitleChanges,
264
+ FormTitleUpdatedMessageData
265
+ >(formTitleChanges)
266
+ },
267
+ {
268
+ is: Joi.string()
269
+ .trim()
270
+ .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),
271
+ then: formChangesMessageData<
272
+ FormOrganisationChanges,
273
+ FormOrganisationUpdatedMessageData
274
+ >(formOrganisationChanges)
275
+ },
276
+ {
277
+ is: Joi.string()
278
+ .trim()
279
+ .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),
280
+ then: formChangesMessageData<
281
+ FormTeamNameChanges,
282
+ FormTeamNameUpdatedMessageData
283
+ >(formTeamNameChanges)
284
+ },
285
+ {
286
+ is: Joi.string()
287
+ .trim()
288
+ .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),
289
+ then: formChangesMessageData<
290
+ FormTeamEmailChanges,
291
+ FormTeamEmailUpdatedMessageData
292
+ >(formTeamEmailChanges)
293
+ },
294
+ {
295
+ is: Joi.string()
296
+ .trim()
297
+ .valid(AuditEventMessageType.FORM_SUPPORT_CONTACT_UPDATED),
298
+ then: formChangesMessageData<
299
+ FormSupportContactChanges,
300
+ FormSupportContactUpdatedMessageData
301
+ >(formSupportContactChanges)
302
+ },
303
+ {
304
+ is: Joi.string()
305
+ .trim()
306
+ .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),
307
+ then: formChangesMessageData<
308
+ FormSupportPhoneChanges,
309
+ FormSupportPhoneUpdatedMessageData
310
+ >(formSupportPhoneChanges)
311
+ },
312
+ {
313
+ is: Joi.string()
314
+ .trim()
315
+ .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
316
+ then: formChangesMessageData<
317
+ FormSupportEmailChanges,
318
+ FormSupportEmailUpdatedMessageData
319
+ >(formSupportEmailChanges)
320
+ },
321
+ {
322
+ is: Joi.string()
323
+ .trim()
324
+ .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),
325
+ then: formChangesMessageData<
326
+ FormSupportOnlineChanges,
327
+ FormSupportOnlineUpdatedMessageData
328
+ >(formSupportOnlineChanges)
329
+ },
330
+ {
331
+ is: Joi.string()
332
+ .trim()
333
+ .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),
334
+ then: formChangesMessageData<
335
+ FormPrivacyNoticeChanges,
336
+ FormPrivacyNoticeUpdatedMessageData
337
+ >(formPrivacyNoticeChanges)
338
+ },
339
+ {
340
+ is: Joi.string()
341
+ .trim()
342
+ .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),
343
+ then: formChangesMessageData<
344
+ FormNotificationEmailChanges,
345
+ FormNotificationEmailUpdatedMessageData
346
+ >(formNotificationEmailChanges)
347
+ },
348
+ {
349
+ is: Joi.string()
350
+ .trim()
351
+ .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),
352
+ then: formChangesMessageData<
353
+ FormSubmissionGuidanceChanges,
354
+ FormSubmissionGuidanceUpdatedMessageData
355
+ >(formSubmissionGuidanceChanges)
356
+ },
357
+ {
358
+ is: Joi.string()
359
+ .trim()
360
+ .valid(AuditEventMessageType.FORM_JSON_UPLOADED),
361
+ then: formChangesMessageData<
362
+ FormUploadedChanges,
363
+ FormUploadedMessageData
364
+ >(formUploadedChanges)
365
+ },
366
+ {
367
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),
368
+ then: formUpdatedMessageData
369
+ },
370
+ {
371
+ is: Joi.string()
372
+ .trim()
373
+ .valid(AuditEventMessageType.ENTITLEMENT_CREATED),
374
+ then: entitlementMessageData
375
+ },
376
+ {
377
+ is: Joi.string()
378
+ .trim()
379
+ .valid(AuditEventMessageType.FORM_DRAFT_DELETED),
380
+ then: formMessageDataBase
381
+ },
382
+ {
383
+ is: Joi.string()
384
+ .trim()
385
+ .valid(AuditEventMessageType.ENTITLEMENT_UPDATED),
386
+ then: entitlementMessageData
387
+ },
388
+ {
389
+ is: Joi.string()
390
+ .trim()
391
+ .valid(AuditEventMessageType.ENTITLEMENT_DELETED),
392
+ then: entitlementMessageData
393
+ }
394
+ ],
395
+ otherwise: Joi.forbidden()
396
+ }).description('The data/payload of the audit message'),
397
+ messageCreatedAt: Joi.date()
398
+ .required()
399
+ .description('ISO timestamp when the message was published')
400
+ })
401
+ .required()
402
+ .description('The audit message issued by the publishing service')
329
403
 
330
- export const auditEvent = Joi.object<AuditEvent>().keys({
331
- message: messageSchema
332
- })
404
+ export const auditEvent = Joi.object<AuditEvent>()
405
+ .keys({
406
+ message: messageSchema
407
+ })
408
+ .description('The Body of the audit event')
333
409
 
334
- export const auditRecord = messageSchema.append<AuditRecord>({
335
- id: idSchema,
336
- messageId: Joi.string().uuid().required(),
337
- entityId: Joi.string().required(),
338
- recordCreatedAt: Joi.date().required()
339
- })
410
+ export const auditRecord = messageSchema
411
+ .append<AuditRecord>({
412
+ id: idSchema,
413
+ messageId: Joi.string().uuid().required(),
414
+ entityId: Joi.string().required(),
415
+ recordCreatedAt: Joi.date().required()
416
+ })
417
+ .description('The audit record persisted into the DB')