Skip to content

Commit 9bc437c

Browse files
Copilothotlong
andcommitted
refactor: deduplicate data classification and compliance framework enums via shared schemas from security-context.zod.ts
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 3809fbd commit 9bc437c

5 files changed

Lines changed: 40 additions & 22 deletions

File tree

packages/spec/src/system/change-management.zod.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { z } from 'zod';
4+
import { DataClassificationSchema } from './security-context.zod';
45

56
/**
67
* Change Type Enum
@@ -337,9 +338,8 @@ export const ChangeRequestSchema = z.object({
337338
/**
338339
* Data classifications affected by this change
339340
*/
340-
affectedDataClassifications: z.array(z.enum([
341-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
342-
])).optional().describe('Affected data classifications'),
341+
affectedDataClassifications: z.array(DataClassificationSchema)
342+
.optional().describe('Affected data classifications'),
343343

344344
/**
345345
* Whether the change requires security team approval

packages/spec/src/system/compliance.zod.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { z } from 'zod';
4+
import { ComplianceFrameworkSchema } from './security-context.zod';
45

56
/**
67
* Compliance protocol for GDPR, CCPA, HIPAA, SOX, PCI-DSS
@@ -161,7 +162,7 @@ export const AuditFindingSchema = z.object({
161162
/**
162163
* Compliance framework
163164
*/
164-
framework: z.enum(['gdpr', 'hipaa', 'sox', 'pci_dss', 'ccpa', 'iso27001']).optional()
165+
framework: ComplianceFrameworkSchema.optional()
165166
.describe('Related compliance framework'),
166167

167168
/**
@@ -240,7 +241,7 @@ export const AuditScheduleSchema = z.object({
240241
/**
241242
* Target compliance framework
242243
*/
243-
framework: z.enum(['gdpr', 'hipaa', 'sox', 'pci_dss', 'ccpa', 'iso27001'])
244+
framework: ComplianceFrameworkSchema
244245
.describe('Target compliance framework'),
245246

246247
/**

packages/spec/src/system/incident-response.zod.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { z } from 'zod';
4+
import { DataClassificationSchema } from './security-context.zod';
45

56
/**
67
* Incident Response Protocol — ISO 27001:2022 (A.5.24–A.5.28)
@@ -270,9 +271,8 @@ export const IncidentSchema = z.object({
270271
/**
271272
* Data classifications affected (for data breach assessment)
272273
*/
273-
affectedDataClassifications: z.array(z.enum([
274-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
275-
])).optional().describe('Affected data classifications'),
274+
affectedDataClassifications: z.array(DataClassificationSchema)
275+
.optional().describe('Affected data classifications'),
276276

277277
/**
278278
* Structured response phases tracking

packages/spec/src/system/security-context.zod.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,32 @@ import { z } from 'zod';
2121
* @category Security
2222
*/
2323

24+
/**
25+
* Shared data classification enum used across security subsystems.
26+
* Defines the canonical set of data sensitivity labels.
27+
*/
28+
export const DataClassificationSchema = z.enum([
29+
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
30+
]).describe('Data classification level');
31+
32+
export type DataClassification = z.infer<typeof DataClassificationSchema>;
33+
34+
/**
35+
* Shared compliance framework enum used across compliance and security schemas.
36+
* Defines the canonical set of regulatory frameworks.
37+
*/
38+
export const ComplianceFrameworkSchema = z.enum([
39+
'gdpr', 'hipaa', 'sox', 'pci_dss', 'ccpa', 'iso27001',
40+
]).describe('Compliance framework identifier');
41+
42+
export type ComplianceFramework = z.infer<typeof ComplianceFrameworkSchema>;
43+
2444
/**
2545
* Compliance-driven audit requirement.
2646
* Maps specific compliance frameworks to the audit event types that MUST be captured.
2747
*/
2848
export const ComplianceAuditRequirementSchema = z.object({
29-
framework: z.enum(['gdpr', 'hipaa', 'sox', 'pci_dss', 'ccpa', 'iso27001'])
49+
framework: ComplianceFrameworkSchema
3050
.describe('Compliance framework identifier'),
3151
requiredEvents: z.array(z.string())
3252
.describe('Audit event types required by this framework (e.g., "data.delete", "auth.login")'),
@@ -43,11 +63,10 @@ export type ComplianceAuditRequirement = z.infer<typeof ComplianceAuditRequireme
4363
* Maps compliance frameworks to encryption mandates for specific data classifications.
4464
*/
4565
export const ComplianceEncryptionRequirementSchema = z.object({
46-
framework: z.enum(['gdpr', 'hipaa', 'sox', 'pci_dss', 'ccpa', 'iso27001'])
66+
framework: ComplianceFrameworkSchema
4767
.describe('Compliance framework identifier'),
48-
dataClassifications: z.array(z.enum([
49-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
50-
])).describe('Data classifications that must be encrypted under this framework'),
68+
dataClassifications: z.array(DataClassificationSchema)
69+
.describe('Data classifications that must be encrypted under this framework'),
5170
minimumAlgorithm: z.enum(['aes-256-gcm', 'aes-256-cbc', 'chacha20-poly1305']).default('aes-256-gcm')
5271
.describe('Minimum encryption algorithm strength required'),
5372
keyRotationMaxDays: z.number().min(1).default(90)
@@ -61,9 +80,8 @@ export type ComplianceEncryptionRequirement = z.infer<typeof ComplianceEncryptio
6180
* Controls which roles can view unmasked data with audit trail enforcement.
6281
*/
6382
export const MaskingVisibilityRuleSchema = z.object({
64-
dataClassification: z.enum([
65-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
66-
]).describe('Data classification this rule applies to'),
83+
dataClassification: DataClassificationSchema
84+
.describe('Data classification this rule applies to'),
6785
defaultMasked: z.boolean().default(true)
6886
.describe('Whether data is masked by default'),
6987
unmaskRoles: z.array(z.string()).optional()
@@ -102,9 +120,8 @@ export type SecurityEventCorrelation = z.infer<typeof SecurityEventCorrelationSc
102120
* Assigns classification labels to fields/objects for unified security enforcement.
103121
*/
104122
export const DataClassificationPolicySchema = z.object({
105-
classification: z.enum([
106-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
107-
]).describe('Data classification level'),
123+
classification: DataClassificationSchema
124+
.describe('Data classification level'),
108125
requireEncryption: z.boolean().default(false)
109126
.describe('Encryption required for this classification'),
110127
requireMasking: z.boolean().default(false)

packages/spec/src/system/supplier-security.zod.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { z } from 'zod';
4+
import { DataClassificationSchema } from './security-context.zod';
45

56
/**
67
* Supplier Security Protocol — ISO 27001:2022 (A.5.19–A.5.22)
@@ -160,9 +161,8 @@ export const SupplierSecurityAssessmentSchema = z.object({
160161
/**
161162
* Data classifications shared with this supplier
162163
*/
163-
dataClassificationsShared: z.array(z.enum([
164-
'pii', 'phi', 'pci', 'financial', 'confidential', 'internal', 'public',
165-
])).optional().describe('Data classifications shared with supplier'),
164+
dataClassificationsShared: z.array(DataClassificationSchema)
165+
.optional().describe('Data classifications shared with supplier'),
166166

167167
/**
168168
* Services provided by the supplier

0 commit comments

Comments
 (0)