@defra/forms-model 3.0.514 → 3.0.515

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.
@@ -0,0 +1,32 @@
1
+ import { AuditEventMessageCategory, AuditEventMessageSchemaVersion, AuditEventMessageType } from "../enums.js";
2
+ export const formCreatedFormId = '8c772d00-beac-4a29-95cb-033a263d0f1b';
3
+ export function buildFormCreatedMessageData(partialFormCreatedMessageData = {}) {
4
+ return {
5
+ formId: formCreatedFormId,
6
+ slug: 'chemistry',
7
+ title: 'Chemistry',
8
+ organisation: 'Defra',
9
+ teamName: 'Forms Team',
10
+ teamEmail: 'forms@example.com',
11
+ ...partialFormCreatedMessageData
12
+ };
13
+ }
14
+ export function buildAuditUser(auditUser = {}) {
15
+ return {
16
+ displayName: 'Enrique Chase',
17
+ id: '18ab1e08-c921-4bb6-a19c-e677c709cc6d',
18
+ ...auditUser
19
+ };
20
+ }
21
+ export function buildFormCreatedMessage(partialFormCreatedMessage = {}) {
22
+ return {
23
+ type: AuditEventMessageType.FORM_CREATED,
24
+ category: AuditEventMessageCategory.FORM,
25
+ createdAt: new Date('2025-07-23'),
26
+ createdBy: buildAuditUser(),
27
+ data: buildFormCreatedMessageData(),
28
+ schemaVersion: AuditEventMessageSchemaVersion.V1,
29
+ ...partialFormCreatedMessage
30
+ };
31
+ }
32
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","names":["AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageType","formCreatedFormId","buildFormCreatedMessageData","partialFormCreatedMessageData","formId","slug","title","organisation","teamName","teamEmail","buildAuditUser","auditUser","displayName","id","buildFormCreatedMessage","partialFormCreatedMessage","type","FORM_CREATED","category","FORM","createdAt","Date","createdBy","data","schemaVersion","V1"],"sources":["../../../../../src/form/form-audit/__stubs__/events.ts"],"sourcesContent":["import {\n AuditEventMessageCategory,\n AuditEventMessageSchemaVersion,\n AuditEventMessageType\n} from '~/src/form/form-audit/enums.js'\nimport {\n type AuditUser,\n type FormCreatedMessage,\n type FormCreatedMessageData\n} from '~/src/form/form-audit/types.js'\n\nexport const formCreatedFormId = '8c772d00-beac-4a29-95cb-033a263d0f1b'\n\nexport function buildFormCreatedMessageData(\n partialFormCreatedMessageData: Partial<FormCreatedMessageData> = {}\n): FormCreatedMessageData {\n return {\n formId: formCreatedFormId,\n slug: 'chemistry',\n title: 'Chemistry',\n organisation: 'Defra',\n teamName: 'Forms Team',\n teamEmail: 'forms@example.com',\n ...partialFormCreatedMessageData\n }\n}\n\nexport function buildAuditUser(auditUser: Partial<AuditUser> = {}): AuditUser {\n return {\n displayName: 'Enrique Chase',\n id: '18ab1e08-c921-4bb6-a19c-e677c709cc6d',\n ...auditUser\n }\n}\n\nexport function buildFormCreatedMessage(\n partialFormCreatedMessage: Partial<FormCreatedMessage> = {}\n): FormCreatedMessage {\n return {\n type: AuditEventMessageType.FORM_CREATED,\n category: AuditEventMessageCategory.FORM,\n createdAt: new Date('2025-07-23'),\n createdBy: buildAuditUser(),\n data: buildFormCreatedMessageData(),\n schemaVersion: AuditEventMessageSchemaVersion.V1,\n ...partialFormCreatedMessage\n } as FormCreatedMessage\n}\n"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,8BAA8B,EAC9BC,qBAAqB;AAQvB,OAAO,MAAMC,iBAAiB,GAAG,sCAAsC;AAEvE,OAAO,SAASC,2BAA2BA,CACzCC,6BAA8D,GAAG,CAAC,CAAC,EAC3C;EACxB,OAAO;IACLC,MAAM,EAAEH,iBAAiB;IACzBI,IAAI,EAAE,WAAW;IACjBC,KAAK,EAAE,WAAW;IAClBC,YAAY,EAAE,OAAO;IACrBC,QAAQ,EAAE,YAAY;IACtBC,SAAS,EAAE,mBAAmB;IAC9B,GAAGN;EACL,CAAC;AACH;AAEA,OAAO,SAASO,cAAcA,CAACC,SAA6B,GAAG,CAAC,CAAC,EAAa;EAC5E,OAAO;IACLC,WAAW,EAAE,eAAe;IAC5BC,EAAE,EAAE,sCAAsC;IAC1C,GAAGF;EACL,CAAC;AACH;AAEA,OAAO,SAASG,uBAAuBA,CACrCC,yBAAsD,GAAG,CAAC,CAAC,EACvC;EACpB,OAAO;IACLC,IAAI,EAAEhB,qBAAqB,CAACiB,YAAY;IACxCC,QAAQ,EAAEpB,yBAAyB,CAACqB,IAAI;IACxCC,SAAS,EAAE,IAAIC,IAAI,CAAC,YAAY,CAAC;IACjCC,SAAS,EAAEZ,cAAc,CAAC,CAAC;IAC3Ba,IAAI,EAAErB,2BAA2B,CAAC,CAAC;IACnCsB,aAAa,EAAEzB,8BAA8B,CAAC0B,EAAE;IAChD,GAAGV;EACL,CAAC;AACH","ignoreList":[]}
@@ -1,2 +1,57 @@
1
-
1
+ import Joi from 'joi';
2
+ import { AuditEventMessageCategory, AuditEventMessageSchemaVersion, AuditEventMessageType } from "./enums.js";
3
+ export const formMessageDataBase = Joi.object({
4
+ formId: Joi.string().trim().required(),
5
+ slug: Joi.string().trim().required()
6
+ });
7
+ export const formCreatedMessageData = formMessageDataBase.append({
8
+ title: Joi.string().trim().required(),
9
+ organisation: Joi.string().trim().required(),
10
+ teamName: Joi.string().trim().required(),
11
+ teamEmail: Joi.string().trim().required()
12
+ });
13
+ export const supportEmailChanges = Joi.object().keys({
14
+ supportEmail: Joi.string().email().required(),
15
+ responseTime: Joi.string().required()
16
+ });
17
+ export function supportEmailUpdatedMessageData(schema) {
18
+ return formMessageDataBase.append({
19
+ changes: Joi.object().keys({
20
+ previous: schema,
21
+ new: schema
22
+ })
23
+ });
24
+ }
25
+ export const auditUserSchema = Joi.object().keys({
26
+ id: Joi.string().uuid().required(),
27
+ displayName: Joi.string().required()
28
+ });
29
+ export const validCategories = [AuditEventMessageCategory.FORM, AuditEventMessageCategory.ENTITLEMENT];
30
+ export const validTypes = [AuditEventMessageType.FORM_CREATED, AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED];
31
+ export const validMessageSchemaVersions = [AuditEventMessageSchemaVersion.V1];
32
+ export const messageSchema = Joi.object().keys({
33
+ schemaVersion: Joi.string().valid(...validMessageSchemaVersions).required(),
34
+ type: Joi.string().valid(...validTypes),
35
+ category: Joi.string().valid(...validCategories).required(),
36
+ createdAt: Joi.date().required(),
37
+ createdBy: auditUserSchema.required(),
38
+ data: Joi.when('type', {
39
+ switch: [{
40
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
41
+ then: formCreatedMessageData
42
+ }, {
43
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
44
+ then: supportEmailUpdatedMessageData(supportEmailChanges)
45
+ }]
46
+ }),
47
+ messageCreatedAt: Joi.date().required()
48
+ });
49
+ export const auditEvent = Joi.object().keys({
50
+ message: messageSchema
51
+ });
52
+ export const auditRecord = messageSchema.append({
53
+ messageId: Joi.string().uuid().required(),
54
+ entityId: Joi.string().required(),
55
+ recordCreatedAt: Joi.date().required()
56
+ });
2
57
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/form/form-audit/index.ts"],"sourcesContent":[""],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Joi","AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageType","formMessageDataBase","object","formId","string","trim","required","slug","formCreatedMessageData","append","title","organisation","teamName","teamEmail","supportEmailChanges","keys","supportEmail","email","responseTime","supportEmailUpdatedMessageData","schema","changes","previous","new","auditUserSchema","id","uuid","displayName","validCategories","FORM","ENTITLEMENT","validTypes","FORM_CREATED","FORM_SUPPORT_EMAIL_UPDATED","validMessageSchemaVersions","V1","messageSchema","schemaVersion","valid","type","category","createdAt","date","createdBy","data","when","switch","is","then","messageCreatedAt","auditEvent","message","auditRecord","messageId","entityId","recordCreatedAt"],"sources":["../../../../src/form/form-audit/index.ts"],"sourcesContent":["import Joi, { type ObjectSchema } from 'joi'\n\nimport {\n AuditEventMessageCategory,\n AuditEventMessageSchemaVersion,\n AuditEventMessageType\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 FormCreatedMessageData,\n type FormMessageDataBase,\n type SupportEmailChanges,\n type SupportEmailUpdatedMessageData\n} from '~/src/form/form-audit/types.js'\n\nexport const formMessageDataBase = Joi.object<FormMessageDataBase>({\n formId: Joi.string().trim().required(),\n slug: Joi.string().trim().required()\n})\n\nexport const formCreatedMessageData =\n formMessageDataBase.append<FormCreatedMessageData>({\n title: Joi.string().trim().required(),\n organisation: Joi.string().trim().required(),\n teamName: Joi.string().trim().required(),\n teamEmail: Joi.string().trim().required()\n })\n\nexport const supportEmailChanges = Joi.object<SupportEmailChanges>().keys({\n supportEmail: Joi.string().email().required(),\n responseTime: Joi.string().required()\n})\n\nexport function supportEmailUpdatedMessageData<T>(schema: ObjectSchema<T>) {\n return formMessageDataBase.append<SupportEmailUpdatedMessageData>({\n changes: Joi.object<ChangesMessageData<T>>().keys({\n previous: schema,\n new: schema\n })\n })\n}\n\nexport const auditUserSchema = Joi.object<AuditUser>().keys({\n id: Joi.string().uuid().required(),\n displayName: Joi.string().required()\n})\n\nexport const validCategories = [\n AuditEventMessageCategory.FORM,\n AuditEventMessageCategory.ENTITLEMENT\n]\n\nexport const validTypes = [\n AuditEventMessageType.FORM_CREATED,\n AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED\n]\n\nexport const validMessageSchemaVersions = [AuditEventMessageSchemaVersion.V1]\n\nexport const messageSchema = Joi.object<AuditMessage>().keys({\n schemaVersion: Joi.string()\n .valid(...validMessageSchemaVersions)\n .required(),\n type: Joi.string().valid(...validTypes),\n category: Joi.string()\n .valid(...validCategories)\n .required(),\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()\n .trim()\n .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),\n then: supportEmailUpdatedMessageData(supportEmailChanges)\n }\n ]\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 messageId: Joi.string().uuid().required(),\n entityId: Joi.string().required(),\n recordCreatedAt: Joi.date().required()\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-audit/types.ts"],"sourcesContent":["import {\n type AuditEventMessageCategory,\n type AuditEventMessageSchemaVersion,\n type AuditEventMessageType\n} from '~/src/form/form-audit/enums.js'\n\nexport interface FormMessageData {\n formId: string\n slug: string\n}\n\nexport interface ChangesMessageData<T> {\n previous: T\n new: T\n}\n\nexport interface FormCreatedMessageData extends FormMessageData {\n title: string\n organisation: string\n teamName: string\n teamEmail: string\n}\n\nexport interface SupportEmailUpdatedMessageData extends FormMessageData {\n changes: ChangesMessageData<{ supportEmail: string; responseTime: string }>\n}\n\nexport type MessageData =\n | FormCreatedMessageData\n | SupportEmailUpdatedMessageData\n\nexport interface BaseMessage {\n schemaVersion: AuditEventMessageSchemaVersion\n category: AuditEventMessageCategory\n type: AuditEventMessageType\n createdAt: Date\n createdBy: {\n id: string\n displayName: string\n }\n data: MessageData\n}\n\nexport interface FormCreatedMessage extends BaseMessage {\n category: AuditEventMessageCategory.FORM\n type: AuditEventMessageType.FORM_CREATED\n data: FormCreatedMessageData\n}\n\nexport interface SupportEmailUpdatedMessage extends BaseMessage {\n category: AuditEventMessageCategory.FORM\n type: AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED\n data: SupportEmailUpdatedMessageData\n}\n\nexport type Message = FormCreatedMessage | SupportEmailUpdatedMessage\n\nexport interface AuditEvent {\n message: Message\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-audit/types.ts"],"sourcesContent":["import {\n type AuditEventMessageCategory,\n type AuditEventMessageSchemaVersion,\n type AuditEventMessageType\n} from '~/src/form/form-audit/enums.js'\n\nexport interface FormMessageDataBase {\n formId: string\n slug: string\n}\n\nexport interface ChangesMessageData<T> {\n previous: T\n new: T\n}\n\nexport interface FormCreatedMessageData extends FormMessageDataBase {\n title: string\n organisation: string\n teamName: string\n teamEmail: string\n}\n\nexport interface SupportEmailChanges {\n supportEmail: string\n responseTime: string\n}\n\nexport interface SupportEmailUpdatedMessageData extends FormMessageDataBase {\n changes: ChangesMessageData<SupportEmailChanges>\n}\n\nexport interface AuditUser {\n id: string\n displayName: string\n}\n\nexport type MessageData =\n | FormCreatedMessageData\n | SupportEmailUpdatedMessageData\n\nexport interface MessageBase {\n schemaVersion: AuditEventMessageSchemaVersion\n category: AuditEventMessageCategory\n type: AuditEventMessageType\n createdAt: Date\n createdBy: AuditUser\n data: MessageData\n messageCreatedAt: Date\n}\n\nexport interface FormCreatedMessage extends MessageBase {\n category: AuditEventMessageCategory.FORM\n type: AuditEventMessageType.FORM_CREATED\n data: FormCreatedMessageData\n}\n\nexport interface FormSupportEmailUpdatedMessage extends MessageBase {\n category: AuditEventMessageCategory.FORM\n type: AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED\n data: SupportEmailUpdatedMessageData\n}\n\nexport type AuditMessage = FormCreatedMessage | FormSupportEmailUpdatedMessage\n\nexport interface AuditEvent {\n message: AuditMessage\n}\n\nexport type AuditRecord = AuditMessage & {\n messageId: string\n entityId: string\n recordCreatedAt: Date\n}\n\nexport interface MessageBody {\n Message: string\n}\n"],"mappings":"","ignoreList":[]}
@@ -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.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.js","names":["buildList","buildListItem","buildCheckboxComponent","buildRadioComponent","buildAutoCompleteComponent","buildNumberFieldComponent","buildFileUploadComponent","buildTextFieldComponent","buildRepeaterPage","buildFileUploadPage","buildSummaryPage","buildQuestionPage","buildMarkdownComponent","QuestionRendererStub","PageRendererStub","QuestionPreviewElements"],"sources":["../../src/stubs.ts"],"sourcesContent":["export * from '~/src/__stubs__/form-definition.js'\nexport { buildList } from '~/src/__stubs__/components.js'\nexport { buildListItem } from '~/src/__stubs__/components.js'\nexport { buildCheckboxComponent } from '~/src/__stubs__/components.js'\nexport { buildRadioComponent } from '~/src/__stubs__/components.js'\nexport { buildAutoCompleteComponent } from '~/src/__stubs__/components.js'\nexport { buildNumberFieldComponent } from '~/src/__stubs__/components.js'\nexport { buildFileUploadComponent } from '~/src/__stubs__/components.js'\nexport { buildTextFieldComponent } from '~/src/__stubs__/components.js'\nexport { buildRepeaterPage } from '~/src/__stubs__/pages.js'\nexport { buildFileUploadPage } from '~/src/__stubs__/pages.js'\nexport { buildSummaryPage } from '~/src/__stubs__/pages.js'\nexport { buildQuestionPage } from '~/src/__stubs__/pages.js'\nexport { buildMarkdownComponent } from '~/src/__stubs__/components.js'\nexport { QuestionRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'\nexport { PageRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'\nexport { QuestionPreviewElements } from '~/src/form/form-editor/__stubs__/preview.js'\n"],"mappings":"AAAA;AACA,SAASA,SAAS;AAClB,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,mBAAmB;AAC5B,SAASC,0BAA0B;AACnC,SAASC,yBAAyB;AAClC,SAASC,wBAAwB;AACjC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAC7B,SAASC,gBAAgB;AACzB,SAASC,uBAAuB","ignoreList":[]}
1
+ {"version":3,"file":"stubs.js","names":["buildList","buildListItem","buildCheckboxComponent","buildRadioComponent","buildAutoCompleteComponent","buildNumberFieldComponent","buildFileUploadComponent","buildTextFieldComponent","buildRepeaterPage","buildFileUploadPage","buildSummaryPage","buildQuestionPage","buildMarkdownComponent","QuestionRendererStub","PageRendererStub","QuestionPreviewElements"],"sources":["../../src/stubs.ts"],"sourcesContent":["export * from '~/src/__stubs__/form-definition.js'\nexport { buildList } from '~/src/__stubs__/components.js'\nexport { buildListItem } from '~/src/__stubs__/components.js'\nexport { buildCheckboxComponent } from '~/src/__stubs__/components.js'\nexport { buildRadioComponent } from '~/src/__stubs__/components.js'\nexport { buildAutoCompleteComponent } from '~/src/__stubs__/components.js'\nexport { buildNumberFieldComponent } from '~/src/__stubs__/components.js'\nexport { buildFileUploadComponent } from '~/src/__stubs__/components.js'\nexport { buildTextFieldComponent } from '~/src/__stubs__/components.js'\nexport { buildRepeaterPage } from '~/src/__stubs__/pages.js'\nexport { buildFileUploadPage } from '~/src/__stubs__/pages.js'\nexport { buildSummaryPage } from '~/src/__stubs__/pages.js'\nexport { buildQuestionPage } from '~/src/__stubs__/pages.js'\nexport { buildMarkdownComponent } from '~/src/__stubs__/components.js'\nexport { QuestionRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'\nexport { PageRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'\nexport { QuestionPreviewElements } from '~/src/form/form-editor/__stubs__/preview.js'\nexport * from '~/src/form/form-audit/__stubs__/events.js'\n"],"mappings":"AAAA;AACA,SAASA,SAAS;AAClB,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,mBAAmB;AAC5B,SAASC,0BAA0B;AACnC,SAASC,yBAAyB;AAClC,SAASC,wBAAwB;AACjC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAC7B,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAChC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import { type AuditUser, type FormCreatedMessage, type FormCreatedMessageData } from '../../../form/form-audit/types.js';
2
+ export declare const formCreatedFormId = "8c772d00-beac-4a29-95cb-033a263d0f1b";
3
+ export declare function buildFormCreatedMessageData(partialFormCreatedMessageData?: Partial<FormCreatedMessageData>): FormCreatedMessageData;
4
+ export declare function buildAuditUser(auditUser?: Partial<AuditUser>): AuditUser;
5
+ export declare function buildFormCreatedMessage(partialFormCreatedMessage?: Partial<FormCreatedMessage>): FormCreatedMessage;
6
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-audit/__stubs__/events.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAA;AAEvC,eAAO,MAAM,iBAAiB,yCAAyC,CAAA;AAEvE,wBAAgB,2BAA2B,CACzC,6BAA6B,GAAE,OAAO,CAAC,sBAAsB,CAAM,GAClE,sBAAsB,CAUxB;AAED,wBAAgB,cAAc,CAAC,SAAS,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,SAAS,CAM5E;AAED,wBAAgB,uBAAuB,CACrC,yBAAyB,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1D,kBAAkB,CAUpB"}
@@ -1,2 +1,15 @@
1
- export {};
1
+ import Joi, { type ObjectSchema } from 'joi';
2
+ import { AuditEventMessageCategory, AuditEventMessageSchemaVersion, AuditEventMessageType } from '../../form/form-audit/enums.js';
3
+ import { type AuditEvent, type AuditMessage, type AuditRecord, type AuditUser, type FormCreatedMessageData, type FormMessageDataBase, type SupportEmailChanges, type SupportEmailUpdatedMessageData } from '../../form/form-audit/types.js';
4
+ export declare const formMessageDataBase: Joi.ObjectSchema<FormMessageDataBase>;
5
+ export declare const formCreatedMessageData: Joi.ObjectSchema<FormCreatedMessageData>;
6
+ export declare const supportEmailChanges: Joi.ObjectSchema<SupportEmailChanges>;
7
+ export declare function supportEmailUpdatedMessageData<T>(schema: ObjectSchema<T>): Joi.ObjectSchema<SupportEmailUpdatedMessageData>;
8
+ export declare const auditUserSchema: Joi.ObjectSchema<AuditUser>;
9
+ export declare const validCategories: AuditEventMessageCategory[];
10
+ export declare const validTypes: AuditEventMessageType[];
11
+ export declare const validMessageSchemaVersions: AuditEventMessageSchemaVersion[];
12
+ export declare const messageSchema: Joi.ObjectSchema<AuditMessage>;
13
+ export declare const auditEvent: Joi.ObjectSchema<AuditEvent>;
14
+ export declare const auditRecord: Joi.ObjectSchema<AuditRecord>;
2
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-audit/index.ts"],"names":[],"mappings":""}
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;AAE5C,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,qBAAqB,EACtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACpC,MAAM,gCAAgC,CAAA;AAEvC,eAAO,MAAM,mBAAmB,uCAG9B,CAAA;AAEF,eAAO,MAAM,sBAAsB,0CAM/B,CAAA;AAEJ,eAAO,MAAM,mBAAmB,uCAG9B,CAAA;AAEF,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,oDAOxE;AAED,eAAO,MAAM,eAAe,6BAG1B,CAAA;AAEF,eAAO,MAAM,eAAe,6BAG3B,CAAA;AAED,eAAO,MAAM,UAAU,yBAGtB,CAAA;AAED,eAAO,MAAM,0BAA0B,kCAAsC,CAAA;AAE7E,eAAO,MAAM,aAAa,gCAyBxB,CAAA;AAEF,eAAO,MAAM,UAAU,8BAErB,CAAA;AAEF,eAAO,MAAM,WAAW,+BAItB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { type AuditEventMessageCategory, type AuditEventMessageSchemaVersion, type AuditEventMessageType } from '../../form/form-audit/enums.js';
2
- export interface FormMessageData {
2
+ export interface FormMessageDataBase {
3
3
  formId: string;
4
4
  slug: string;
5
5
  }
@@ -7,42 +7,53 @@ export interface ChangesMessageData<T> {
7
7
  previous: T;
8
8
  new: T;
9
9
  }
10
- export interface FormCreatedMessageData extends FormMessageData {
10
+ export interface FormCreatedMessageData extends FormMessageDataBase {
11
11
  title: string;
12
12
  organisation: string;
13
13
  teamName: string;
14
14
  teamEmail: string;
15
15
  }
16
- export interface SupportEmailUpdatedMessageData extends FormMessageData {
17
- changes: ChangesMessageData<{
18
- supportEmail: string;
19
- responseTime: string;
20
- }>;
16
+ export interface SupportEmailChanges {
17
+ supportEmail: string;
18
+ responseTime: string;
19
+ }
20
+ export interface SupportEmailUpdatedMessageData extends FormMessageDataBase {
21
+ changes: ChangesMessageData<SupportEmailChanges>;
22
+ }
23
+ export interface AuditUser {
24
+ id: string;
25
+ displayName: string;
21
26
  }
22
27
  export type MessageData = FormCreatedMessageData | SupportEmailUpdatedMessageData;
23
- export interface BaseMessage {
28
+ export interface MessageBase {
24
29
  schemaVersion: AuditEventMessageSchemaVersion;
25
30
  category: AuditEventMessageCategory;
26
31
  type: AuditEventMessageType;
27
32
  createdAt: Date;
28
- createdBy: {
29
- id: string;
30
- displayName: string;
31
- };
33
+ createdBy: AuditUser;
32
34
  data: MessageData;
35
+ messageCreatedAt: Date;
33
36
  }
34
- export interface FormCreatedMessage extends BaseMessage {
37
+ export interface FormCreatedMessage extends MessageBase {
35
38
  category: AuditEventMessageCategory.FORM;
36
39
  type: AuditEventMessageType.FORM_CREATED;
37
40
  data: FormCreatedMessageData;
38
41
  }
39
- export interface SupportEmailUpdatedMessage extends BaseMessage {
42
+ export interface FormSupportEmailUpdatedMessage extends MessageBase {
40
43
  category: AuditEventMessageCategory.FORM;
41
44
  type: AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED;
42
45
  data: SupportEmailUpdatedMessageData;
43
46
  }
44
- export type Message = FormCreatedMessage | SupportEmailUpdatedMessage;
47
+ export type AuditMessage = FormCreatedMessage | FormSupportEmailUpdatedMessage;
45
48
  export interface AuditEvent {
46
- message: Message;
49
+ message: AuditMessage;
50
+ }
51
+ export type AuditRecord = AuditMessage & {
52
+ messageId: string;
53
+ entityId: string;
54
+ recordCreatedAt: Date;
55
+ };
56
+ export interface MessageBody {
57
+ Message: string;
47
58
  }
48
59
  //# sourceMappingURL=types.d.ts.map
@@ -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":"AAAA,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAA;AAEvC,MAAM,WAAW,mBAAmB;IAClC,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,mBAAmB;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE,OAAO,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;CACpB;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,SAAS,CAAA;IACpB,IAAI,EAAE,WAAW,CAAA;IACjB,gBAAgB,EAAE,IAAI,CAAA;CACvB;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,8BAA+B,SAAQ,WAAW;IACjE,QAAQ,EAAE,yBAAyB,CAAC,IAAI,CAAA;IACxC,IAAI,EAAE,qBAAqB,CAAC,0BAA0B,CAAA;IACtD,IAAI,EAAE,8BAA8B,CAAA;CACrC;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,8BAA8B,CAAA;AAE9E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAA;CACtB;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,IAAI,CAAA;CACtB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB"}
@@ -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.515",
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
+ }
@@ -0,0 +1,99 @@
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 FormMessageDataBase,
16
+ type SupportEmailChanges,
17
+ type SupportEmailUpdatedMessageData
18
+ } from '~/src/form/form-audit/types.js'
19
+
20
+ export const formMessageDataBase = Joi.object<FormMessageDataBase>({
21
+ formId: Joi.string().trim().required(),
22
+ slug: Joi.string().trim().required()
23
+ })
24
+
25
+ export const formCreatedMessageData =
26
+ formMessageDataBase.append<FormCreatedMessageData>({
27
+ title: Joi.string().trim().required(),
28
+ organisation: Joi.string().trim().required(),
29
+ teamName: Joi.string().trim().required(),
30
+ teamEmail: Joi.string().trim().required()
31
+ })
32
+
33
+ export const supportEmailChanges = Joi.object<SupportEmailChanges>().keys({
34
+ supportEmail: Joi.string().email().required(),
35
+ responseTime: Joi.string().required()
36
+ })
37
+
38
+ export function supportEmailUpdatedMessageData<T>(schema: ObjectSchema<T>) {
39
+ return formMessageDataBase.append<SupportEmailUpdatedMessageData>({
40
+ changes: Joi.object<ChangesMessageData<T>>().keys({
41
+ previous: schema,
42
+ new: schema
43
+ })
44
+ })
45
+ }
46
+
47
+ export const auditUserSchema = Joi.object<AuditUser>().keys({
48
+ id: Joi.string().uuid().required(),
49
+ displayName: Joi.string().required()
50
+ })
51
+
52
+ export const validCategories = [
53
+ AuditEventMessageCategory.FORM,
54
+ AuditEventMessageCategory.ENTITLEMENT
55
+ ]
56
+
57
+ export const validTypes = [
58
+ AuditEventMessageType.FORM_CREATED,
59
+ AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED
60
+ ]
61
+
62
+ export const validMessageSchemaVersions = [AuditEventMessageSchemaVersion.V1]
63
+
64
+ export const messageSchema = Joi.object<AuditMessage>().keys({
65
+ schemaVersion: Joi.string()
66
+ .valid(...validMessageSchemaVersions)
67
+ .required(),
68
+ type: Joi.string().valid(...validTypes),
69
+ category: Joi.string()
70
+ .valid(...validCategories)
71
+ .required(),
72
+ createdAt: Joi.date().required(),
73
+ createdBy: auditUserSchema.required(),
74
+ data: Joi.when('type', {
75
+ switch: [
76
+ {
77
+ is: Joi.string().trim().valid(AuditEventMessageType.FORM_CREATED),
78
+ then: formCreatedMessageData
79
+ },
80
+ {
81
+ is: Joi.string()
82
+ .trim()
83
+ .valid(AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED),
84
+ then: supportEmailUpdatedMessageData(supportEmailChanges)
85
+ }
86
+ ]
87
+ }),
88
+ messageCreatedAt: Joi.date().required()
89
+ })
90
+
91
+ export const auditEvent = Joi.object<AuditEvent>().keys({
92
+ message: messageSchema
93
+ })
94
+
95
+ export const auditRecord = messageSchema.append<AuditRecord>({
96
+ messageId: Joi.string().uuid().required(),
97
+ entityId: Joi.string().required(),
98
+ recordCreatedAt: Joi.date().required()
99
+ })
@@ -4,7 +4,7 @@ import {
4
4
  type AuditEventMessageType
5
5
  } from '~/src/form/form-audit/enums.js'
6
6
 
7
- export interface FormMessageData {
7
+ export interface FormMessageDataBase {
8
8
  formId: string
9
9
  slug: string
10
10
  }
@@ -14,47 +14,65 @@ export interface ChangesMessageData<T> {
14
14
  new: T
15
15
  }
16
16
 
17
- export interface FormCreatedMessageData extends FormMessageData {
17
+ export interface FormCreatedMessageData extends FormMessageDataBase {
18
18
  title: string
19
19
  organisation: string
20
20
  teamName: string
21
21
  teamEmail: string
22
22
  }
23
23
 
24
- export interface SupportEmailUpdatedMessageData extends FormMessageData {
25
- changes: ChangesMessageData<{ supportEmail: string; responseTime: string }>
24
+ export interface SupportEmailChanges {
25
+ supportEmail: string
26
+ responseTime: string
27
+ }
28
+
29
+ export interface SupportEmailUpdatedMessageData extends FormMessageDataBase {
30
+ changes: ChangesMessageData<SupportEmailChanges>
31
+ }
32
+
33
+ export interface AuditUser {
34
+ id: string
35
+ displayName: string
26
36
  }
27
37
 
28
38
  export type MessageData =
29
39
  | FormCreatedMessageData
30
40
  | SupportEmailUpdatedMessageData
31
41
 
32
- export interface BaseMessage {
42
+ export interface MessageBase {
33
43
  schemaVersion: AuditEventMessageSchemaVersion
34
44
  category: AuditEventMessageCategory
35
45
  type: AuditEventMessageType
36
46
  createdAt: Date
37
- createdBy: {
38
- id: string
39
- displayName: string
40
- }
47
+ createdBy: AuditUser
41
48
  data: MessageData
49
+ messageCreatedAt: Date
42
50
  }
43
51
 
44
- export interface FormCreatedMessage extends BaseMessage {
52
+ export interface FormCreatedMessage extends MessageBase {
45
53
  category: AuditEventMessageCategory.FORM
46
54
  type: AuditEventMessageType.FORM_CREATED
47
55
  data: FormCreatedMessageData
48
56
  }
49
57
 
50
- export interface SupportEmailUpdatedMessage extends BaseMessage {
58
+ export interface FormSupportEmailUpdatedMessage extends MessageBase {
51
59
  category: AuditEventMessageCategory.FORM
52
60
  type: AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED
53
61
  data: SupportEmailUpdatedMessageData
54
62
  }
55
63
 
56
- export type Message = FormCreatedMessage | SupportEmailUpdatedMessage
64
+ export type AuditMessage = FormCreatedMessage | FormSupportEmailUpdatedMessage
57
65
 
58
66
  export interface AuditEvent {
59
- message: Message
67
+ message: AuditMessage
68
+ }
69
+
70
+ export type AuditRecord = AuditMessage & {
71
+ messageId: string
72
+ entityId: string
73
+ recordCreatedAt: Date
74
+ }
75
+
76
+ export interface MessageBody {
77
+ Message: string
60
78
  }
package/src/stubs.ts CHANGED
@@ -15,3 +15,4 @@ export { buildMarkdownComponent } from '~/src/__stubs__/components.js'
15
15
  export { QuestionRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'
16
16
  export { PageRendererStub } from '~/src/form/form-editor/__stubs__/preview.js'
17
17
  export { QuestionPreviewElements } from '~/src/form/form-editor/__stubs__/preview.js'
18
+ export * from '~/src/form/form-audit/__stubs__/events.js'