@defra/forms-model 3.0.514 → 3.0.516

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 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-audit/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAA;AAEvC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAA;IACX,GAAG,EAAE,CAAC,CAAA;CACP;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,8BAA+B,SAAQ,eAAe;IACrE,OAAO,EAAE,kBAAkB,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED,MAAM,MAAM,WAAW,GACnB,sBAAsB,GACtB,8BAA8B,CAAA;AAElC,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,EAAE,yBAAyB,CAAA;IACnC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAA;QACV,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,QAAQ,EAAE,yBAAyB,CAAC,IAAI,CAAA;IACxC,IAAI,EAAE,qBAAqB,CAAC,YAAY,CAAA;IACxC,IAAI,EAAE,sBAAsB,CAAA;CAC7B;AAED,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,QAAQ,EAAE,yBAAyB,CAAC,IAAI,CAAA;IACxC,IAAI,EAAE,qBAAqB,CAAC,0BAA0B,CAAA;IACtD,IAAI,EAAE,8BAA8B,CAAA;CACrC;AAED,MAAM,MAAM,OAAO,GAAG,kBAAkB,GAAG,0BAA0B,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-audit/types.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,5 @@ export { buildMarkdownComponent } from './__stubs__/components.js';
15
15
  export { QuestionRendererStub } from './form/form-editor/__stubs__/preview.js';
16
16
  export { PageRendererStub } from './form/form-editor/__stubs__/preview.js';
17
17
  export { QuestionPreviewElements } from './form/form-editor/__stubs__/preview.js';
18
+ export * from './form/form-audit/__stubs__/events.js';
18
19
  //# sourceMappingURL=stubs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/stubs.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAA"}
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/stubs.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAA;AACrF,cAAc,2CAA2C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.514",
3
+ "version": "3.0.516",
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",
@@ -0,0 +1,48 @@
1
+ import {
2
+ AuditEventMessageCategory,
3
+ AuditEventMessageSchemaVersion,
4
+ AuditEventMessageType
5
+ } from '~/src/form/form-audit/enums.js'
6
+ import {
7
+ type AuditUser,
8
+ type FormCreatedMessage,
9
+ type FormCreatedMessageData
10
+ } from '~/src/form/form-audit/types.js'
11
+
12
+ export const formCreatedFormId = '8c772d00-beac-4a29-95cb-033a263d0f1b'
13
+
14
+ export function buildFormCreatedMessageData(
15
+ partialFormCreatedMessageData: Partial<FormCreatedMessageData> = {}
16
+ ): FormCreatedMessageData {
17
+ return {
18
+ formId: formCreatedFormId,
19
+ slug: 'chemistry',
20
+ title: 'Chemistry',
21
+ organisation: 'Defra',
22
+ teamName: 'Forms Team',
23
+ teamEmail: 'forms@example.com',
24
+ ...partialFormCreatedMessageData
25
+ }
26
+ }
27
+
28
+ export function buildAuditUser(auditUser: Partial<AuditUser> = {}): AuditUser {
29
+ return {
30
+ displayName: 'Enrique Chase',
31
+ id: '18ab1e08-c921-4bb6-a19c-e677c709cc6d',
32
+ ...auditUser
33
+ }
34
+ }
35
+
36
+ export function buildFormCreatedMessage(
37
+ partialFormCreatedMessage: Partial<FormCreatedMessage> = {}
38
+ ): FormCreatedMessage {
39
+ return {
40
+ type: AuditEventMessageType.FORM_CREATED,
41
+ category: AuditEventMessageCategory.FORM,
42
+ createdAt: new Date('2025-07-23'),
43
+ createdBy: buildAuditUser(),
44
+ data: buildFormCreatedMessageData(),
45
+ schemaVersion: AuditEventMessageSchemaVersion.V1,
46
+ ...partialFormCreatedMessage
47
+ } as FormCreatedMessage
48
+ }
@@ -16,19 +16,20 @@ export enum AuditEventMessageSubCategory {
16
16
  export enum AuditEventMessageType {
17
17
  FORM_CREATED = 'FORM_CREATED',
18
18
  FORM_PUBLISHED = 'FORM_PUBLISHED',
19
- FORM_NAME_UPDATED = 'FORM_NAME_UPDATED',
19
+ FORM_TITLE_UPDATED = 'FORM_TITLE_UPDATED',
20
20
  FORM_ORGANISATION_UPDATED = 'FORM_ORGANISATION_UPDATED',
21
21
  FORM_TEAM_NAME_UPDATED = 'FORM_TEAM_NAME_UPDATED',
22
22
  FORM_TEAM_EMAIL_UPDATED = 'FORM_TEAM_EMAIL_UPDATED',
23
23
  FORM_SUPPORT_PHONE_UPDATED = 'FORM_SUPPORT_PHONE_UPDATED',
24
24
  FORM_SUPPORT_EMAIL_UPDATED = 'FORM_SUPPORT_EMAIL_UPDATED',
25
- FORM_SUPPORT_LINK_UPDATED = 'FORM_SUPPORT_LINK_UPDATED',
26
- FORM_PRIVACY_POLICY_LINK_UPDATED = 'FORM_PRIVACY_POLICY_LINK_UPDATED',
25
+ FORM_SUPPORT_ONLINE_UPDATED = 'FORM_SUPPORT_ONLINE_UPDATED',
26
+ FORM_PRIVACY_NOTICE_UPDATED = 'FORM_PRIVACY_NOTICE_UPDATED',
27
27
  FORM_NOTIFICATION_EMAIL_UPDATED = 'FORM_NOTIFICATION_EMAIL_UPDATED',
28
28
  FORM_SUBMISSION_GUIDANCE_UPDATED = 'FORM_SUBMISSION_GUIDANCE_UPDATED',
29
29
  FORM_JSON_UPLOADED = 'FORM_JSON_UPLOADED',
30
30
  FORM_JSON_DOWNLOADED = 'FORM_JSON_DOWNLOADED',
31
31
  FORM_DRAFT_CREATED_FROM_LIVE = 'FORM_DRAFT_CREATED_FROM_LIVE',
32
+ FORM_LIVE_CREATED_FROM_DRAFT = 'FORM_LIVE_CREATED_FROM_DRAFT',
32
33
  FORM_DRAFT_DELETED = 'FORM_DRAFT_DELETED',
33
34
  FORM_MIGRATED = 'FORM_MIGRATED',
34
35
  FORM_UPDATED = 'FORM_UPDATED'
@@ -0,0 +1,303 @@
1
+ import Joi, { type ObjectSchema } from 'joi'
2
+
3
+ import {
4
+ AuditEventMessageCategory,
5
+ AuditEventMessageSchemaVersion,
6
+ AuditEventMessageType
7
+ } from '~/src/form/form-audit/enums.js'
8
+ import {
9
+ type AuditEvent,
10
+ type AuditMessage,
11
+ type AuditRecord,
12
+ type AuditUser,
13
+ type ChangesMessageData,
14
+ type FormCreatedMessageData,
15
+ type FormMessageChangesData,
16
+ type FormMessageDataBase,
17
+ type FormNotificationEmailChanges,
18
+ type FormNotificationEmailUpdatedMessageData,
19
+ type FormOrganisationChanges,
20
+ type FormOrganisationUpdatedMessageData,
21
+ type FormPrivacyNoticeChanges,
22
+ type FormPrivacyNoticeUpdatedMessageData,
23
+ type FormSubmissionGuidanceChanges,
24
+ type FormSubmissionGuidanceUpdatedMessageData,
25
+ type FormSupportEmailChanges,
26
+ type FormSupportEmailUpdatedMessageData,
27
+ type FormSupportOnlineChanges,
28
+ type FormSupportOnlineUpdatedMessageData,
29
+ type FormSupportPhoneChanges,
30
+ type FormSupportPhoneUpdatedMessageData,
31
+ type FormTeamEmailChanges,
32
+ type FormTeamEmailUpdatedMessageData,
33
+ type FormTeamNameChanges,
34
+ type FormTeamNameUpdatedMessageData,
35
+ type FormTitleChanges,
36
+ type FormTitleUpdatedMessageData,
37
+ type FormUpdatedMessageData,
38
+ type FormUploadedChanges,
39
+ type FormUploadedMessageData
40
+ } from '~/src/form/form-audit/types.js'
41
+
42
+ export const formMessageDataBase = Joi.object<FormMessageDataBase>({
43
+ formId: Joi.string().required(),
44
+ slug: Joi.string().required()
45
+ })
46
+
47
+ export const formCreatedMessageData =
48
+ formMessageDataBase.append<FormCreatedMessageData>({
49
+ title: Joi.string().required(),
50
+ organisation: Joi.string().required(),
51
+ teamName: Joi.string().required(),
52
+ teamEmail: Joi.string().required()
53
+ })
54
+
55
+ export const formUpdatedMessageData =
56
+ formMessageDataBase.append<FormUpdatedMessageData>({
57
+ description: Joi.string().trim().required()
58
+ })
59
+
60
+ export const formTitleChanges = Joi.object<FormTitleChanges>()
61
+ .keys({
62
+ title: Joi.string().required()
63
+ })
64
+ .required()
65
+
66
+ export const formOrganisationChanges = Joi.object<FormOrganisationChanges>()
67
+ .keys({
68
+ organisation: Joi.string().required()
69
+ })
70
+ .required()
71
+
72
+ export const formTeamNameChanges = Joi.object<FormTeamNameChanges>()
73
+ .keys({
74
+ teamName: Joi.string().required()
75
+ })
76
+ .required()
77
+
78
+ export const formTeamEmailChanges = Joi.object<FormTeamEmailChanges>()
79
+ .keys({
80
+ teamEmail: Joi.string().required()
81
+ })
82
+ .required()
83
+
84
+ export const formSupportPhoneChanges = Joi.object<FormSupportPhoneChanges>()
85
+ .keys({
86
+ phone: Joi.string().required()
87
+ })
88
+ .required()
89
+
90
+ export const formSupportOnlineChanges = Joi.object<FormSupportOnlineChanges>()
91
+ .keys({
92
+ url: Joi.string().required(),
93
+ text: Joi.string().required()
94
+ })
95
+ .required()
96
+
97
+ export const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()
98
+ .keys({
99
+ privacyNoticeUrl: Joi.string().required()
100
+ })
101
+ .required()
102
+
103
+ export const formNotificationEmailChanges =
104
+ Joi.object<FormNotificationEmailChanges>()
105
+ .keys({
106
+ notificationEmail: Joi.string().required()
107
+ })
108
+ .required()
109
+
110
+ export const formSubmissionGuidanceChanges =
111
+ Joi.object<FormSubmissionGuidanceChanges>()
112
+ .keys({
113
+ submissionGuidance: Joi.string().required()
114
+ })
115
+ .required()
116
+
117
+ export const formUploadedChanges = Joi.object<FormUploadedChanges>()
118
+ .keys({
119
+ value: Joi.string().required()
120
+ })
121
+ .required()
122
+
123
+ export const formSupportEmailChanges =
124
+ Joi.object<FormSupportEmailChanges>().keys({
125
+ address: Joi.string().email().required(),
126
+ responseTime: Joi.string().required()
127
+ })
128
+
129
+ export function formChangesMessageData<T, U extends FormMessageChangesData>(
130
+ schema: ObjectSchema<T>
131
+ ): ObjectSchema<U> {
132
+ return formMessageDataBase.append<U>({
133
+ changes: Joi.object<ChangesMessageData<T>>().keys({
134
+ previous: schema,
135
+ new: schema
136
+ })
137
+ })
138
+ }
139
+
140
+ export const auditUserSchema = Joi.object<AuditUser>().keys({
141
+ id: Joi.string().uuid().required(),
142
+ displayName: Joi.string().required()
143
+ })
144
+
145
+ export const validCategories = [
146
+ AuditEventMessageCategory.FORM,
147
+ AuditEventMessageCategory.ENTITLEMENT
148
+ ]
149
+
150
+ export const validTypes = [
151
+ AuditEventMessageType.FORM_CREATED,
152
+ AuditEventMessageType.FORM_PUBLISHED,
153
+ AuditEventMessageType.FORM_TITLE_UPDATED,
154
+ AuditEventMessageType.FORM_ORGANISATION_UPDATED,
155
+ AuditEventMessageType.FORM_TEAM_NAME_UPDATED,
156
+ AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED,
157
+ AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED,
158
+ AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED,
159
+ AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED,
160
+ AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED,
161
+ AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED,
162
+ AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED,
163
+ AuditEventMessageType.FORM_UPDATED,
164
+ AuditEventMessageType.FORM_JSON_UPLOADED,
165
+ AuditEventMessageType.FORM_JSON_DOWNLOADED,
166
+ AuditEventMessageType.FORM_DRAFT_CREATED_FROM_LIVE,
167
+ AuditEventMessageType.FORM_LIVE_CREATED_FROM_DRAFT,
168
+ AuditEventMessageType.FORM_DRAFT_DELETED,
169
+ AuditEventMessageType.FORM_MIGRATED
170
+ ]
171
+
172
+ export const validMessageSchemaVersions = [AuditEventMessageSchemaVersion.V1]
173
+
174
+ export const messageSchema = Joi.object<AuditMessage>().keys({
175
+ entityId: Joi.string().required(),
176
+ schemaVersion: Joi.string()
177
+ .valid(...validMessageSchemaVersions)
178
+ .required(),
179
+ type: Joi.string().valid(...validTypes),
180
+ category: Joi.string()
181
+ .valid(...validCategories)
182
+ .required(),
183
+ createdAt: Joi.date().required(),
184
+ createdBy: auditUserSchema.required(),
185
+ data: Joi.when('type', {
186
+ switch: [
187
+ {
188
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
189
+ then: formCreatedMessageData
190
+ },
191
+ {
192
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_TITLE_UPDATED),
193
+ then: formChangesMessageData<
194
+ FormTitleChanges,
195
+ FormTitleUpdatedMessageData
196
+ >(formTitleChanges)
197
+ },
198
+ {
199
+ is: Joi.string()
200
+ .trim()
201
+ .valid(AuditEventMessageType.FORM_ORGANISATION_UPDATED),
202
+ then: formChangesMessageData<
203
+ FormOrganisationChanges,
204
+ FormOrganisationUpdatedMessageData
205
+ >(formOrganisationChanges)
206
+ },
207
+ {
208
+ is: Joi.string()
209
+ .trim()
210
+ .valid(AuditEventMessageType.FORM_TEAM_NAME_UPDATED),
211
+ then: formChangesMessageData<
212
+ FormTeamNameChanges,
213
+ FormTeamNameUpdatedMessageData
214
+ >(formTeamNameChanges)
215
+ },
216
+ {
217
+ is: Joi.string()
218
+ .trim()
219
+ .valid(AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED),
220
+ then: formChangesMessageData<
221
+ FormTeamEmailChanges,
222
+ FormTeamEmailUpdatedMessageData
223
+ >(formTeamEmailChanges)
224
+ },
225
+ {
226
+ is: Joi.string()
227
+ .trim()
228
+ .valid(AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED),
229
+ then: formChangesMessageData<
230
+ FormSupportPhoneChanges,
231
+ FormSupportPhoneUpdatedMessageData
232
+ >(formSupportPhoneChanges)
233
+ },
234
+ {
235
+ is: Joi.string()
236
+ .trim()
237
+ .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
238
+ then: formChangesMessageData<
239
+ FormSupportEmailChanges,
240
+ FormSupportEmailUpdatedMessageData
241
+ >(formSupportEmailChanges)
242
+ },
243
+ {
244
+ is: Joi.string()
245
+ .trim()
246
+ .valid(AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED),
247
+ then: formChangesMessageData<
248
+ FormSupportOnlineChanges,
249
+ FormSupportOnlineUpdatedMessageData
250
+ >(formSupportOnlineChanges)
251
+ },
252
+ {
253
+ is: Joi.string()
254
+ .trim()
255
+ .valid(AuditEventMessageType.FORM_PRIVACY_NOTICE_UPDATED),
256
+ then: formChangesMessageData<
257
+ FormPrivacyNoticeChanges,
258
+ FormPrivacyNoticeUpdatedMessageData
259
+ >(formPrivacyNoticeChanges)
260
+ },
261
+ {
262
+ is: Joi.string()
263
+ .trim()
264
+ .valid(AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED),
265
+ then: formChangesMessageData<
266
+ FormNotificationEmailChanges,
267
+ FormNotificationEmailUpdatedMessageData
268
+ >(formNotificationEmailChanges)
269
+ },
270
+ {
271
+ is: Joi.string()
272
+ .trim()
273
+ .valid(AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED),
274
+ then: formChangesMessageData<
275
+ FormSubmissionGuidanceChanges,
276
+ FormSubmissionGuidanceUpdatedMessageData
277
+ >(formSubmissionGuidanceChanges)
278
+ },
279
+ {
280
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_JSON_UPLOADED),
281
+ then: formChangesMessageData<
282
+ FormUploadedChanges,
283
+ FormUploadedMessageData
284
+ >(formUploadedChanges)
285
+ },
286
+ {
287
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_UPDATED),
288
+ then: formUpdatedMessageData
289
+ }
290
+ ]
291
+ }),
292
+ messageCreatedAt: Joi.date().required()
293
+ })
294
+
295
+ export const auditEvent = Joi.object<AuditEvent>().keys({
296
+ message: messageSchema
297
+ })
298
+
299
+ export const auditRecord = messageSchema.append<AuditRecord>({
300
+ messageId: Joi.string().uuid().required(),
301
+ entityId: Joi.string().required(),
302
+ recordCreatedAt: Joi.date().required()
303
+ })