@defra/forms-model 3.0.626 → 3.0.628

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/module/common/rtrim-only.js +14 -0
  2. package/dist/module/common/rtrim-only.js.map +1 -0
  3. package/dist/module/form/form-audit/consolidation.js +1 -1
  4. package/dist/module/form/form-audit/consolidation.js.map +1 -1
  5. package/dist/module/form/form-audit/index.js +1 -3
  6. package/dist/module/form/form-audit/index.js.map +1 -1
  7. package/dist/module/form/form-definition/index.js +2 -1
  8. package/dist/module/form/form-definition/index.js.map +1 -1
  9. package/dist/module/form/form-editor/index.js +2 -1
  10. package/dist/module/form/form-editor/index.js.map +1 -1
  11. package/dist/module/form/form-editor/types.js.map +1 -1
  12. package/dist/module/form/form-manager/types.js.map +1 -1
  13. package/dist/types/common/rtrim-only.d.ts +8 -0
  14. package/dist/types/common/rtrim-only.d.ts.map +1 -0
  15. package/dist/types/form/form-audit/consolidation.d.ts.map +1 -1
  16. package/dist/types/form/form-audit/index.d.ts.map +1 -1
  17. package/dist/types/form/form-definition/index.d.ts.map +1 -1
  18. package/dist/types/form/form-editor/index.d.ts.map +1 -1
  19. package/dist/types/form/form-editor/types.d.ts +1 -0
  20. package/dist/types/form/form-editor/types.d.ts.map +1 -1
  21. package/dist/types/form/form-manager/types.d.ts +8 -0
  22. package/dist/types/form/form-manager/types.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/src/common/rtrim-only.ts +16 -0
  25. package/src/form/form-audit/consolidation.ts +2 -1
  26. package/src/form/form-audit/index.ts +1 -3
  27. package/src/form/form-definition/index.ts +2 -1
  28. package/src/form/form-editor/index.ts +2 -1
  29. package/src/form/form-editor/types.ts +1 -0
  30. package/src/form/form-manager/types.ts +10 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Custom Joi validator to right trim but leave the left side with one or zero spaces
3
+ * This is primarily for shortDescription so a user can enter a spcae at the beginning to
4
+ * override the lowercase first letter e.g. ' CE mark' would still get lowercased as ' CE mark'
5
+ */
6
+ export function rtrimOnly(value, helpers) {
7
+ if (!value || typeof value !== 'string') {
8
+ return helpers.error('any.required');
9
+ }
10
+ const trimmed = value.trim();
11
+ const hasSpaceAtTheStart = value.startsWith(' ');
12
+ return hasSpaceAtTheStart ? ` ${trimmed}` : trimmed;
13
+ }
14
+ //# sourceMappingURL=rtrim-only.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtrim-only.js","names":["rtrimOnly","value","helpers","error","trimmed","trim","hasSpaceAtTheStart","startsWith"],"sources":["../../../src/common/rtrim-only.ts"],"sourcesContent":["import { type CustomHelpers } from 'joi'\n\n/**\n * Custom Joi validator to right trim but leave the left side with one or zero spaces\n * This is primarily for shortDescription so a user can enter a spcae at the beginning to\n * override the lowercase first letter e.g. ' CE mark' would still get lowercased as ' CE mark'\n */\nexport function rtrimOnly(value: string, helpers: CustomHelpers<string>) {\n if (!value || typeof value !== 'string') {\n return helpers.error('any.required')\n }\n\n const trimmed = value.trim()\n const hasSpaceAtTheStart = value.startsWith(' ')\n return hasSpaceAtTheStart ? ` ${trimmed}` : trimmed\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,SAASA,CAACC,KAAa,EAAEC,OAA8B,EAAE;EACvE,IAAI,CAACD,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IACvC,OAAOC,OAAO,CAACC,KAAK,CAAC,cAAc,CAAC;EACtC;EAEA,MAAMC,OAAO,GAAGH,KAAK,CAACI,IAAI,CAAC,CAAC;EAC5B,MAAMC,kBAAkB,GAAGL,KAAK,CAACM,UAAU,CAAC,GAAG,CAAC;EAChD,OAAOD,kBAAkB,GAAG,IAAIF,OAAO,EAAE,GAAGA,OAAO;AACrD","ignoreList":[]}
@@ -64,7 +64,7 @@ export const privacyNoticeFields = [createMultiField('privacy notice type', 'pri
64
64
  * Event types that are always considered valid (don't need change comparison).
65
65
  * These events represent actions rather than field updates.
66
66
  */
67
- export const alwaysValidEvents = new Set([AuditEventMessageType.FORM_CREATED, AuditEventMessageType.FORM_UPDATED, AuditEventMessageType.FORM_LIVE_CREATED_FROM_DRAFT, AuditEventMessageType.FORM_DRAFT_CREATED_FROM_LIVE, AuditEventMessageType.FORM_DRAFT_DELETED, AuditEventMessageType.FORM_MIGRATED, AuditEventMessageType.FORM_JSON_UPLOADED, AuditEventMessageType.FORM_JSON_DOWNLOADED, AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED, AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED, AuditEventMessageType.FORM_TERMS_AND_CONDITIONS_AGREED]);
67
+ export const alwaysValidEvents = new Set([AuditEventMessageType.FORM_CREATED, AuditEventMessageType.FORM_UPDATED, AuditEventMessageType.FORM_LIVE_CREATED_FROM_DRAFT, AuditEventMessageType.FORM_DRAFT_CREATED_FROM_LIVE, AuditEventMessageType.FORM_DRAFT_DELETED, AuditEventMessageType.FORM_MIGRATED, AuditEventMessageType.FORM_JSON_UPLOADED, AuditEventMessageType.FORM_JSON_DOWNLOADED, AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED, AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED, AuditEventMessageType.FORM_TERMS_AND_CONDITIONS_AGREED, AuditEventMessageType.FORM_SECRET_SAVED]);
68
68
 
69
69
  /**
70
70
  * Type guard to check if an audit record is consolidated.
@@ -1 +1 @@
1
- {"version":3,"file":"consolidation.js","names":["AuditEventMessageType","createFieldConfig","label","verb","fieldName","prevPath","newPath","createMultiField","contactPath","fieldConfigs","FORM_TITLE_UPDATED","FORM_ORGANISATION_UPDATED","FORM_TEAM_NAME_UPDATED","FORM_TEAM_EMAIL_UPDATED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_SUPPORT_PHONE_UPDATED","FORM_SUPPORT_EMAIL_UPDATED","FORM_SUPPORT_ONLINE_UPDATED","supportContactFields","privacyNoticeFields","alwaysValidEvents","Set","FORM_CREATED","FORM_UPDATED","FORM_LIVE_CREATED_FROM_DRAFT","FORM_DRAFT_CREATED_FROM_LIVE","FORM_DRAFT_DELETED","FORM_MIGRATED","FORM_JSON_UPLOADED","FORM_JSON_DOWNLOADED","FORM_SUBMISSION_EXCEL_REQUESTED","FORM_CSAT_EXCEL_REQUESTED","FORM_TERMS_AND_CONDITIONS_AGREED","isConsolidatedRecord","record","consolidatedCount"],"sources":["../../../../src/form/form-audit/consolidation.ts"],"sourcesContent":["import { AuditEventMessageType } from '~/src/form/form-audit/enums.js'\nimport {\n type AuditRecord,\n type ConsolidatedAuditRecord\n} from '~/src/form/form-audit/types.js'\n\n/**\n * Field configuration for audit events with change tracking.\n * Used by change detection logic to compare previous and new values.\n */\nexport interface FieldConfig {\n label: string\n verb: 'Updated' | 'Changed'\n prevPath: string\n newPath: string\n}\n\n/**\n * Audit field that comprises multiple fields - configuration for change detection.\n */\nexport interface MultiAuditFieldConfig {\n label: string\n prevPath: string\n newPath: string\n}\n\n/**\n * Creates a field configuration for audit events.\n */\nfunction createFieldConfig(\n label: string,\n verb: 'Updated' | 'Changed',\n fieldName: string\n): FieldConfig {\n return {\n label,\n verb,\n prevPath: `changes.previous.${fieldName}`,\n newPath: `changes.new.${fieldName}`\n }\n}\n\n/**\n * Creates a support contact field configuration.\n */\nfunction createMultiField(\n label: string,\n contactPath: string\n): MultiAuditFieldConfig {\n return {\n label,\n prevPath: `changes.previous.${contactPath}`,\n newPath: `changes.new.${contactPath}`\n }\n}\n\n/**\n * Field configurations for audit events with change tracking.\n * Maps event types to their data paths and display labels.\n */\nexport const fieldConfigs: Record<string, FieldConfig> = {\n [AuditEventMessageType.FORM_TITLE_UPDATED]: createFieldConfig(\n 'the form name',\n 'Updated',\n 'title'\n ),\n [AuditEventMessageType.FORM_ORGANISATION_UPDATED]: createFieldConfig(\n 'the lead organisation',\n 'Changed',\n 'organisation'\n ),\n [AuditEventMessageType.FORM_TEAM_NAME_UPDATED]: createFieldConfig(\n 'the team name',\n 'Changed',\n 'teamName'\n ),\n [AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED]: createFieldConfig(\n 'the shared team address',\n 'Updated',\n 'teamEmail'\n ),\n [AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED]: createFieldConfig(\n 'where submitted forms are sent',\n 'Updated',\n 'notificationEmail'\n ),\n [AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED]: createFieldConfig(\n 'the next steps guidance',\n 'Updated',\n 'submissionGuidance'\n ),\n [AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED]: createFieldConfig(\n 'the support phone number',\n 'Updated',\n 'phone'\n ),\n [AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED]: createFieldConfig(\n 'the support email address',\n 'Updated',\n 'address'\n ),\n [AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED]: createFieldConfig(\n 'the support contact link',\n 'Updated',\n 'url'\n )\n}\n\n/**\n * Support contact field configurations for change detection.\n * Used when checking FORM_SUPPORT_CONTACT_UPDATED events.\n */\nexport const supportContactFields: MultiAuditFieldConfig[] = [\n createMultiField('phone number', 'contact.phone'),\n createMultiField('email address', 'contact.email.address'),\n createMultiField('email response time', 'contact.email.responseTime'),\n createMultiField('online contact link', 'contact.online.url'),\n createMultiField('online contact text', 'contact.online.text')\n]\n\n/**\n * Privacy notice field configurations for change detection.\n * Used when checking FORM_PRIVACY_NOTICE_UPDATED events.\n */\nexport const privacyNoticeFields: MultiAuditFieldConfig[] = [\n createMultiField('privacy notice type', 'privacyNoticeType'),\n createMultiField('privacy notice text', 'privacyNoticeText'),\n createMultiField('privacy notice url', 'privacyNoticeUrl')\n]\n\n/**\n * Event types that are always considered valid (don't need change comparison).\n * These events represent actions rather than field updates.\n */\nexport const alwaysValidEvents = new Set<string>([\n AuditEventMessageType.FORM_CREATED,\n AuditEventMessageType.FORM_UPDATED,\n AuditEventMessageType.FORM_LIVE_CREATED_FROM_DRAFT,\n AuditEventMessageType.FORM_DRAFT_CREATED_FROM_LIVE,\n AuditEventMessageType.FORM_DRAFT_DELETED,\n AuditEventMessageType.FORM_MIGRATED,\n AuditEventMessageType.FORM_JSON_UPLOADED,\n AuditEventMessageType.FORM_JSON_DOWNLOADED,\n AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_TERMS_AND_CONDITIONS_AGREED\n])\n\n/**\n * Type guard to check if an audit record is consolidated.\n * @param record - The audit record to check\n * @returns True if the record has consolidation metadata with count > 1\n */\nexport function isConsolidatedRecord(\n record: AuditRecord | ConsolidatedAuditRecord\n): record is ConsolidatedAuditRecord {\n return (\n 'consolidatedCount' in record &&\n typeof record.consolidatedCount === 'number' &&\n record.consolidatedCount > 1\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"consolidation.js","names":["AuditEventMessageType","createFieldConfig","label","verb","fieldName","prevPath","newPath","createMultiField","contactPath","fieldConfigs","FORM_TITLE_UPDATED","FORM_ORGANISATION_UPDATED","FORM_TEAM_NAME_UPDATED","FORM_TEAM_EMAIL_UPDATED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_SUPPORT_PHONE_UPDATED","FORM_SUPPORT_EMAIL_UPDATED","FORM_SUPPORT_ONLINE_UPDATED","supportContactFields","privacyNoticeFields","alwaysValidEvents","Set","FORM_CREATED","FORM_UPDATED","FORM_LIVE_CREATED_FROM_DRAFT","FORM_DRAFT_CREATED_FROM_LIVE","FORM_DRAFT_DELETED","FORM_MIGRATED","FORM_JSON_UPLOADED","FORM_JSON_DOWNLOADED","FORM_SUBMISSION_EXCEL_REQUESTED","FORM_CSAT_EXCEL_REQUESTED","FORM_TERMS_AND_CONDITIONS_AGREED","FORM_SECRET_SAVED","isConsolidatedRecord","record","consolidatedCount"],"sources":["../../../../src/form/form-audit/consolidation.ts"],"sourcesContent":["import { AuditEventMessageType } from '~/src/form/form-audit/enums.js'\nimport {\n type AuditRecord,\n type ConsolidatedAuditRecord\n} from '~/src/form/form-audit/types.js'\n\n/**\n * Field configuration for audit events with change tracking.\n * Used by change detection logic to compare previous and new values.\n */\nexport interface FieldConfig {\n label: string\n verb: 'Updated' | 'Changed'\n prevPath: string\n newPath: string\n}\n\n/**\n * Audit field that comprises multiple fields - configuration for change detection.\n */\nexport interface MultiAuditFieldConfig {\n label: string\n prevPath: string\n newPath: string\n}\n\n/**\n * Creates a field configuration for audit events.\n */\nfunction createFieldConfig(\n label: string,\n verb: 'Updated' | 'Changed',\n fieldName: string\n): FieldConfig {\n return {\n label,\n verb,\n prevPath: `changes.previous.${fieldName}`,\n newPath: `changes.new.${fieldName}`\n }\n}\n\n/**\n * Creates a support contact field configuration.\n */\nfunction createMultiField(\n label: string,\n contactPath: string\n): MultiAuditFieldConfig {\n return {\n label,\n prevPath: `changes.previous.${contactPath}`,\n newPath: `changes.new.${contactPath}`\n }\n}\n\n/**\n * Field configurations for audit events with change tracking.\n * Maps event types to their data paths and display labels.\n */\nexport const fieldConfigs: Record<string, FieldConfig> = {\n [AuditEventMessageType.FORM_TITLE_UPDATED]: createFieldConfig(\n 'the form name',\n 'Updated',\n 'title'\n ),\n [AuditEventMessageType.FORM_ORGANISATION_UPDATED]: createFieldConfig(\n 'the lead organisation',\n 'Changed',\n 'organisation'\n ),\n [AuditEventMessageType.FORM_TEAM_NAME_UPDATED]: createFieldConfig(\n 'the team name',\n 'Changed',\n 'teamName'\n ),\n [AuditEventMessageType.FORM_TEAM_EMAIL_UPDATED]: createFieldConfig(\n 'the shared team address',\n 'Updated',\n 'teamEmail'\n ),\n [AuditEventMessageType.FORM_NOTIFICATION_EMAIL_UPDATED]: createFieldConfig(\n 'where submitted forms are sent',\n 'Updated',\n 'notificationEmail'\n ),\n [AuditEventMessageType.FORM_SUBMISSION_GUIDANCE_UPDATED]: createFieldConfig(\n 'the next steps guidance',\n 'Updated',\n 'submissionGuidance'\n ),\n [AuditEventMessageType.FORM_SUPPORT_PHONE_UPDATED]: createFieldConfig(\n 'the support phone number',\n 'Updated',\n 'phone'\n ),\n [AuditEventMessageType.FORM_SUPPORT_EMAIL_UPDATED]: createFieldConfig(\n 'the support email address',\n 'Updated',\n 'address'\n ),\n [AuditEventMessageType.FORM_SUPPORT_ONLINE_UPDATED]: createFieldConfig(\n 'the support contact link',\n 'Updated',\n 'url'\n )\n}\n\n/**\n * Support contact field configurations for change detection.\n * Used when checking FORM_SUPPORT_CONTACT_UPDATED events.\n */\nexport const supportContactFields: MultiAuditFieldConfig[] = [\n createMultiField('phone number', 'contact.phone'),\n createMultiField('email address', 'contact.email.address'),\n createMultiField('email response time', 'contact.email.responseTime'),\n createMultiField('online contact link', 'contact.online.url'),\n createMultiField('online contact text', 'contact.online.text')\n]\n\n/**\n * Privacy notice field configurations for change detection.\n * Used when checking FORM_PRIVACY_NOTICE_UPDATED events.\n */\nexport const privacyNoticeFields: MultiAuditFieldConfig[] = [\n createMultiField('privacy notice type', 'privacyNoticeType'),\n createMultiField('privacy notice text', 'privacyNoticeText'),\n createMultiField('privacy notice url', 'privacyNoticeUrl')\n]\n\n/**\n * Event types that are always considered valid (don't need change comparison).\n * These events represent actions rather than field updates.\n */\nexport const alwaysValidEvents = new Set<string>([\n AuditEventMessageType.FORM_CREATED,\n AuditEventMessageType.FORM_UPDATED,\n AuditEventMessageType.FORM_LIVE_CREATED_FROM_DRAFT,\n AuditEventMessageType.FORM_DRAFT_CREATED_FROM_LIVE,\n AuditEventMessageType.FORM_DRAFT_DELETED,\n AuditEventMessageType.FORM_MIGRATED,\n AuditEventMessageType.FORM_JSON_UPLOADED,\n AuditEventMessageType.FORM_JSON_DOWNLOADED,\n AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_TERMS_AND_CONDITIONS_AGREED,\n AuditEventMessageType.FORM_SECRET_SAVED\n])\n\n/**\n * Type guard to check if an audit record is consolidated.\n * @param record - The audit record to check\n * @returns True if the record has consolidation metadata with count > 1\n */\nexport function isConsolidatedRecord(\n record: AuditRecord | ConsolidatedAuditRecord\n): record is ConsolidatedAuditRecord {\n return (\n 'consolidatedCount' in record &&\n typeof record.consolidatedCount === 'number' &&\n record.consolidatedCount > 1\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -25,9 +25,7 @@ export const formsBackupRequestedMessageData = Joi.object().keys({
25
25
  totalForms: Joi.number().integer().min(0).required(),
26
26
  durationMs: Joi.number().min(0).required()
27
27
  });
28
- export const formsSecretSavedMessageData = Joi.object().keys({
29
- formId: Joi.string().required(),
30
- slug: Joi.string().required(),
28
+ export const formsSecretSavedMessageData = formMessageDataBase.append({
31
29
  secretName: Joi.string().required()
32
30
  });
33
31
  export const formTitleChanges = Joi.object().keys({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Joi","AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageSource","AuditEventMessageType","FormDefinitionRequestType","contactSchema","emailAddressSchema","emailResponseTimeSchema","idSchema","notificationEmailAddressSchema","onlineTextSchema","onlineUrlSchema","organisationSchema","phoneSchema","privacyNoticeTextSchema","privacyNoticeTypeSchema","privacyNoticeUrlSchema","slugSchema","submissionGuidanceSchema","teamEmailSchema","teamNameSchema","termsAndConditionsAgreedSchema","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","formsBackupRequestedMessageData","totalForms","number","integer","min","durationMs","formsSecretSavedMessageData","secretName","formTitleChanges","formOrganisationChanges","formTeamNameChanges","formTeamEmailChanges","formSupportContactChanges","contact","formSupportPhoneChanges","phone","formSupportOnlineChanges","url","text","formSupportEmailChanges","address","responseTime","formPrivacyNoticeChanges","privacyNoticeType","privacyNoticeText","when","is","then","otherwise","allow","privacyNoticeUrl","formTermsAndConditionsChanges","termsAndConditionsAgreed","formNotificationEmailChanges","notificationEmail","formSubmissionGuidanceChanges","submissionGuidance","formUploadedChanges","value","entitlementMessageData","userId","displayName","email","roles","array","items","formFileDownloadedMessageData","fileLink","excelGenerationMessageData","formName","authenticationMessageData","auditUserSchema","id","formChangesMessageData","schema","changes","previous","new","messageSchema","schemaVersion","category","source","type","entityId","traceId","createdAt","date","createdBy","data","switch","trim","FORM_CREATED","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_TERMS_AND_CONDITIONS_AGREED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_JSON_UPLOADED","FORM_UPDATED","ENTITLEMENT_CREATED","ENTITLEMENT_UPDATED","ENTITLEMENT_DELETED","FORM_DRAFT_DELETED","FORM_JSON_DOWNLOADED","AUTHENTICATION_LOGIN","AUTHENTICATION_LOGOUT_MANUAL","AUTHENTICATION_LOGOUT_AUTO","AUTHENTICATION_LOGOUT_DIFFERENT_DEVICE","FORM_FILE_DOWNLOAD_SUCCESS","FORM_FILE_DOWNLOAD_FAILURE","FORM_SUBMISSION_EXCEL_REQUESTED","FORM_CSAT_EXCEL_REQUESTED","PLATFORM_CSAT_EXCEL_REQUESTED","FORMS_BACKUP_REQUESTED","FORM_SECRET_SAVED","forbidden","messageCreatedAt","auditEvent","message","auditRecord","messageId","uuid","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 AuthenticationMessageData,\n type ChangesMessageData,\n type EntitlementMessageData,\n type ExcelGenerationMessageData,\n type FormCreatedMessageData,\n type FormDefinitionS3Meta,\n type FormFileDownloadedMessageData,\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 FormSecretSavedMessageData,\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 FormTermsAndConditionsAgreedMessageData,\n type FormTermsAndConditionsChanges,\n type FormTitleChanges,\n type FormTitleUpdatedMessageData,\n type FormUpdatedMessageData,\n type FormUploadedChanges,\n type FormUploadedMessageData,\n type FormsBackupRequestedMessageData\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 privacyNoticeTextSchema,\n privacyNoticeTypeSchema,\n privacyNoticeUrlSchema,\n slugSchema,\n submissionGuidanceSchema,\n teamEmailSchema,\n teamNameSchema,\n termsAndConditionsAgreedSchema,\n titleSchema\n} from '~/src/form/form-metadata/index.js'\n\nexport const formMessageDataBase = Joi.object<FormMessageDataBase>({\n formId: idSchema,\n slug: slugSchema,\n payload: Joi.object().optional()\n})\n .required()\n .description('The base data object for Form Messages')\n\nexport const formCreatedMessageData = formMessageDataBase\n .append<FormCreatedMessageData>({\n title: titleSchema,\n organisation: organisationSchema,\n teamName: teamNameSchema,\n teamEmail: teamEmailSchema\n })\n .required()\n .description('Message data schema for when a form is created')\n\nexport const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>()\n .keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n s3Key: Joi.string().required()\n })\n .description('Schema for form data S3 object in message')\n\nexport const formUpdatedMessageData = formMessageDataBase\n .append<FormUpdatedMessageData>({\n requestType: Joi.string()\n .valid(...Object.values(FormDefinitionRequestType))\n .required(),\n s3Meta: formDefinitionS3Meta.optional()\n })\n .required()\n\nexport const formsBackupRequestedMessageData =\n Joi.object<FormsBackupRequestedMessageData>().keys({\n totalForms: Joi.number().integer().min(0).required(),\n durationMs: Joi.number().min(0).required()\n })\n\nexport const formsSecretSavedMessageData =\n Joi.object<FormSecretSavedMessageData>().keys({\n formId: Joi.string().required(),\n slug: Joi.string().required(),\n secretName: Joi.string().required()\n })\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.optional(),\n text: onlineTextSchema.optional()\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.optional(),\n responseTime: emailResponseTimeSchema.optional()\n })\n .description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event')\n\nexport const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()\n .keys({\n privacyNoticeType: privacyNoticeTypeSchema,\n privacyNoticeText: Joi.when('privacyNoticeType', {\n is: 'text',\n then: privacyNoticeTextSchema,\n otherwise: privacyNoticeTextSchema.allow('')\n }),\n privacyNoticeUrl: Joi.when('privacyNoticeType', {\n is: 'link',\n then: privacyNoticeUrlSchema,\n otherwise: privacyNoticeUrlSchema.allow('')\n })\n })\n .required()\n .description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event')\n\nexport const formTermsAndConditionsChanges =\n Joi.object<FormTermsAndConditionsChanges>()\n .keys({\n termsAndConditionsAgreed: termsAndConditionsAgreedSchema\n })\n .required()\n .description('Changes schema for FORM_TERMS_AND_CONDITIONS_AGREED event')\n\nexport const formNotificationEmailChanges =\n Joi.object<FormNotificationEmailChanges>()\n .keys({\n notificationEmail: notificationEmailAddressSchema\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\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 formFileDownloadedMessageData =\n Joi.object<FormFileDownloadedMessageData>()\n .keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n fileLink: Joi.string().required()\n })\n .required()\n .description(\n 'Schema for FORM_FILE_DOWNLOAD_SUCCESS and FORM_FILE_DOWNLOAD_FAILURE events'\n )\n\nexport const excelGenerationMessageData =\n Joi.object<ExcelGenerationMessageData>()\n .keys({\n formId: Joi.string().required(),\n formName: Joi.string().required(),\n notificationEmail: Joi.string().email().required()\n })\n .required()\n .description(\n 'Schema for Excel generation audit events (submissions and CSAT)'\n )\n\nexport const authenticationMessageData =\n Joi.object<AuthenticationMessageData>().keys({\n userId: Joi.string().required(),\n displayName: Joi.string().required()\n })\n\nexport const auditUserSchema = Joi.object<AuditUser>()\n .keys({\n id: Joi.string().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_TERMS_AND_CONDITIONS_AGREED),\n then: formChangesMessageData<\n FormTermsAndConditionsChanges,\n FormTermsAndConditionsAgreedMessageData\n >(formTermsAndConditionsChanges)\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(\n AuditEventMessageType.ENTITLEMENT_CREATED,\n AuditEventMessageType.ENTITLEMENT_UPDATED,\n AuditEventMessageType.ENTITLEMENT_DELETED\n ),\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.FORM_JSON_DOWNLOADED),\n then: formMessageDataBase\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.AUTHENTICATION_LOGIN,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_MANUAL,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_AUTO,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_DIFFERENT_DEVICE\n ),\n then: authenticationMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.FORM_FILE_DOWNLOAD_SUCCESS,\n AuditEventMessageType.FORM_FILE_DOWNLOAD_FAILURE\n ),\n then: formFileDownloadedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED,\n AuditEventMessageType.PLATFORM_CSAT_EXCEL_REQUESTED\n ),\n then: excelGenerationMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORMS_BACKUP_REQUESTED),\n then: formsBackupRequestedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SECRET_SAVED),\n then: formsSecretSavedMessageData\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
+ {"version":3,"file":"index.js","names":["Joi","AuditEventMessageCategory","AuditEventMessageSchemaVersion","AuditEventMessageSource","AuditEventMessageType","FormDefinitionRequestType","contactSchema","emailAddressSchema","emailResponseTimeSchema","idSchema","notificationEmailAddressSchema","onlineTextSchema","onlineUrlSchema","organisationSchema","phoneSchema","privacyNoticeTextSchema","privacyNoticeTypeSchema","privacyNoticeUrlSchema","slugSchema","submissionGuidanceSchema","teamEmailSchema","teamNameSchema","termsAndConditionsAgreedSchema","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","formsBackupRequestedMessageData","totalForms","number","integer","min","durationMs","formsSecretSavedMessageData","secretName","formTitleChanges","formOrganisationChanges","formTeamNameChanges","formTeamEmailChanges","formSupportContactChanges","contact","formSupportPhoneChanges","phone","formSupportOnlineChanges","url","text","formSupportEmailChanges","address","responseTime","formPrivacyNoticeChanges","privacyNoticeType","privacyNoticeText","when","is","then","otherwise","allow","privacyNoticeUrl","formTermsAndConditionsChanges","termsAndConditionsAgreed","formNotificationEmailChanges","notificationEmail","formSubmissionGuidanceChanges","submissionGuidance","formUploadedChanges","value","entitlementMessageData","userId","displayName","email","roles","array","items","formFileDownloadedMessageData","fileLink","excelGenerationMessageData","formName","authenticationMessageData","auditUserSchema","id","formChangesMessageData","schema","changes","previous","new","messageSchema","schemaVersion","category","source","type","entityId","traceId","createdAt","date","createdBy","data","switch","trim","FORM_CREATED","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_TERMS_AND_CONDITIONS_AGREED","FORM_NOTIFICATION_EMAIL_UPDATED","FORM_SUBMISSION_GUIDANCE_UPDATED","FORM_JSON_UPLOADED","FORM_UPDATED","ENTITLEMENT_CREATED","ENTITLEMENT_UPDATED","ENTITLEMENT_DELETED","FORM_DRAFT_DELETED","FORM_JSON_DOWNLOADED","AUTHENTICATION_LOGIN","AUTHENTICATION_LOGOUT_MANUAL","AUTHENTICATION_LOGOUT_AUTO","AUTHENTICATION_LOGOUT_DIFFERENT_DEVICE","FORM_FILE_DOWNLOAD_SUCCESS","FORM_FILE_DOWNLOAD_FAILURE","FORM_SUBMISSION_EXCEL_REQUESTED","FORM_CSAT_EXCEL_REQUESTED","PLATFORM_CSAT_EXCEL_REQUESTED","FORMS_BACKUP_REQUESTED","FORM_SECRET_SAVED","forbidden","messageCreatedAt","auditEvent","message","auditRecord","messageId","uuid","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 AuthenticationMessageData,\n type ChangesMessageData,\n type EntitlementMessageData,\n type ExcelGenerationMessageData,\n type FormCreatedMessageData,\n type FormDefinitionS3Meta,\n type FormFileDownloadedMessageData,\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 FormSecretSavedMessageData,\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 FormTermsAndConditionsAgreedMessageData,\n type FormTermsAndConditionsChanges,\n type FormTitleChanges,\n type FormTitleUpdatedMessageData,\n type FormUpdatedMessageData,\n type FormUploadedChanges,\n type FormUploadedMessageData,\n type FormsBackupRequestedMessageData\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 privacyNoticeTextSchema,\n privacyNoticeTypeSchema,\n privacyNoticeUrlSchema,\n slugSchema,\n submissionGuidanceSchema,\n teamEmailSchema,\n teamNameSchema,\n termsAndConditionsAgreedSchema,\n titleSchema\n} from '~/src/form/form-metadata/index.js'\n\nexport const formMessageDataBase = Joi.object<FormMessageDataBase>({\n formId: idSchema,\n slug: slugSchema,\n payload: Joi.object().optional()\n})\n .required()\n .description('The base data object for Form Messages')\n\nexport const formCreatedMessageData = formMessageDataBase\n .append<FormCreatedMessageData>({\n title: titleSchema,\n organisation: organisationSchema,\n teamName: teamNameSchema,\n teamEmail: teamEmailSchema\n })\n .required()\n .description('Message data schema for when a form is created')\n\nexport const formDefinitionS3Meta = Joi.object<FormDefinitionS3Meta>()\n .keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n s3Key: Joi.string().required()\n })\n .description('Schema for form data S3 object in message')\n\nexport const formUpdatedMessageData = formMessageDataBase\n .append<FormUpdatedMessageData>({\n requestType: Joi.string()\n .valid(...Object.values(FormDefinitionRequestType))\n .required(),\n s3Meta: formDefinitionS3Meta.optional()\n })\n .required()\n\nexport const formsBackupRequestedMessageData =\n Joi.object<FormsBackupRequestedMessageData>().keys({\n totalForms: Joi.number().integer().min(0).required(),\n durationMs: Joi.number().min(0).required()\n })\n\nexport const formsSecretSavedMessageData =\n formMessageDataBase.append<FormSecretSavedMessageData>({\n secretName: Joi.string().required()\n })\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.optional(),\n text: onlineTextSchema.optional()\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.optional(),\n responseTime: emailResponseTimeSchema.optional()\n })\n .description('Changes schema for FORM_SUPPORT_EMAIL_UPDATED event')\n\nexport const formPrivacyNoticeChanges = Joi.object<FormPrivacyNoticeChanges>()\n .keys({\n privacyNoticeType: privacyNoticeTypeSchema,\n privacyNoticeText: Joi.when('privacyNoticeType', {\n is: 'text',\n then: privacyNoticeTextSchema,\n otherwise: privacyNoticeTextSchema.allow('')\n }),\n privacyNoticeUrl: Joi.when('privacyNoticeType', {\n is: 'link',\n then: privacyNoticeUrlSchema,\n otherwise: privacyNoticeUrlSchema.allow('')\n })\n })\n .required()\n .description('Changes schema for FORM_PRIVACY_NOTICE_UPDATED event')\n\nexport const formTermsAndConditionsChanges =\n Joi.object<FormTermsAndConditionsChanges>()\n .keys({\n termsAndConditionsAgreed: termsAndConditionsAgreedSchema\n })\n .required()\n .description('Changes schema for FORM_TERMS_AND_CONDITIONS_AGREED event')\n\nexport const formNotificationEmailChanges =\n Joi.object<FormNotificationEmailChanges>()\n .keys({\n notificationEmail: notificationEmailAddressSchema\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\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 formFileDownloadedMessageData =\n Joi.object<FormFileDownloadedMessageData>()\n .keys({\n fileId: Joi.string().required(),\n filename: Joi.string().required(),\n fileLink: Joi.string().required()\n })\n .required()\n .description(\n 'Schema for FORM_FILE_DOWNLOAD_SUCCESS and FORM_FILE_DOWNLOAD_FAILURE events'\n )\n\nexport const excelGenerationMessageData =\n Joi.object<ExcelGenerationMessageData>()\n .keys({\n formId: Joi.string().required(),\n formName: Joi.string().required(),\n notificationEmail: Joi.string().email().required()\n })\n .required()\n .description(\n 'Schema for Excel generation audit events (submissions and CSAT)'\n )\n\nexport const authenticationMessageData =\n Joi.object<AuthenticationMessageData>().keys({\n userId: Joi.string().required(),\n displayName: Joi.string().required()\n })\n\nexport const auditUserSchema = Joi.object<AuditUser>()\n .keys({\n id: Joi.string().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_TERMS_AND_CONDITIONS_AGREED),\n then: formChangesMessageData<\n FormTermsAndConditionsChanges,\n FormTermsAndConditionsAgreedMessageData\n >(formTermsAndConditionsChanges)\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(\n AuditEventMessageType.ENTITLEMENT_CREATED,\n AuditEventMessageType.ENTITLEMENT_UPDATED,\n AuditEventMessageType.ENTITLEMENT_DELETED\n ),\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.FORM_JSON_DOWNLOADED),\n then: formMessageDataBase\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.AUTHENTICATION_LOGIN,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_MANUAL,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_AUTO,\n AuditEventMessageType.AUTHENTICATION_LOGOUT_DIFFERENT_DEVICE\n ),\n then: authenticationMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.FORM_FILE_DOWNLOAD_SUCCESS,\n AuditEventMessageType.FORM_FILE_DOWNLOAD_FAILURE\n ),\n then: formFileDownloadedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(\n AuditEventMessageType.FORM_SUBMISSION_EXCEL_REQUESTED,\n AuditEventMessageType.FORM_CSAT_EXCEL_REQUESTED,\n AuditEventMessageType.PLATFORM_CSAT_EXCEL_REQUESTED\n ),\n then: excelGenerationMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORMS_BACKUP_REQUESTED),\n then: formsBackupRequestedMessageData\n },\n {\n is: Joi.string()\n .trim()\n .valid(AuditEventMessageType.FORM_SECRET_SAVED),\n then: formsSecretSavedMessageData\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,6 +1,7 @@
1
1
  import JoiDate from '@joi/date';
2
2
  import JoiBase from 'joi';
3
3
  import { v4 as uuidV4 } from 'uuid';
4
+ import { rtrimOnly } from "../../common/rtrim-only.js";
4
5
  import { ComponentType } from "../../components/enums.js";
5
6
  import { isConditionalType } from "../../components/helpers.js";
6
7
  import { ConditionType, OperatorName } from "../../conditions/enums.js";
@@ -205,7 +206,7 @@ export const regexCustomValidator = (value, helpers) => {
205
206
  export const componentSchema = Joi.object().description('Form component definition specifying UI element behavior').keys({
206
207
  id: idSchemaOptional.description('Unique identifier for the component'),
207
208
  type: Joi.string().trim().required().description('Component type (TextField, RadioButtons, DateField, etc.)'),
208
- shortDescription: Joi.string().trim().optional().description('Brief description of the component purpose'),
209
+ shortDescription: Joi.string().custom(rtrimOnly).optional().description('Brief description of the component purpose'),
209
210
  name: Joi.when('type', {
210
211
  is: Joi.string().valid(ComponentType.Details, ComponentType.Html, ComponentType.InsetText, ComponentType.Markdown),
211
212
  then: Joi.string().trim().pattern(/^[a-zA-Z]+$/).optional().description('Optional identifier for display-only components'),