@@ -61,6 +61,7 @@ const trustPortalSwitchSchema = z.object({
6161 primaryColor : z . string ( ) . optional ( ) ,
6262 soc2type1 : z . boolean ( ) ,
6363 soc2type2 : z . boolean ( ) ,
64+ soc3 : z . boolean ( ) ,
6465 iso27001 : z . boolean ( ) ,
6566 iso42001 : z . boolean ( ) ,
6667 gdpr : z . boolean ( ) ,
@@ -70,6 +71,7 @@ const trustPortalSwitchSchema = z.object({
7071 iso9001 : z . boolean ( ) ,
7172 soc2type1Status : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
7273 soc2type2Status : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
74+ soc3Status : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
7375 iso27001Status : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
7476 iso42001Status : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
7577 gdprStatus : z . enum ( [ 'started' , 'in_progress' , 'compliant' ] ) ,
@@ -93,6 +95,7 @@ const FRAMEWORK_KEY_TO_API_SLUG: Record<string, string> = {
9395 hipaa : 'hipaa' ,
9496 soc2type1 : 'soc2_type1' ,
9597 soc2type2 : 'soc2_type2' ,
98+ soc3 : 'soc3' ,
9699 pcidss : 'pci_dss' ,
97100 nen7510 : 'nen_7510' ,
98101 iso9001 : 'iso_9001' ,
@@ -151,13 +154,15 @@ export function TrustPortalSwitch({
151154 orgId,
152155 soc2type1,
153156 soc2type2,
157+ soc3,
154158 iso27001,
155159 iso42001,
156160 gdpr,
157161 hipaa,
158162 pcidss,
159163 soc2type1Status,
160164 soc2type2Status,
165+ soc3Status,
161166 iso27001Status,
162167 iso42001Status,
163168 gdprStatus,
@@ -174,6 +179,7 @@ export function TrustPortalSwitch({
174179 hipaaFileName,
175180 soc2type1FileName,
176181 soc2type2FileName,
182+ soc3FileName,
177183 pcidssFileName,
178184 nen7510FileName,
179185 iso9001FileName,
@@ -192,6 +198,7 @@ export function TrustPortalSwitch({
192198 orgId : string ;
193199 soc2type1 : boolean ;
194200 soc2type2 : boolean ;
201+ soc3 : boolean ;
195202 iso27001 : boolean ;
196203 iso42001 : boolean ;
197204 gdpr : boolean ;
@@ -200,6 +207,7 @@ export function TrustPortalSwitch({
200207 nen7510 : boolean ;
201208 soc2type1Status : 'started' | 'in_progress' | 'compliant' ;
202209 soc2type2Status : 'started' | 'in_progress' | 'compliant' ;
210+ soc3Status : 'started' | 'in_progress' | 'compliant' ;
203211 iso27001Status : 'started' | 'in_progress' | 'compliant' ;
204212 iso42001Status : 'started' | 'in_progress' | 'compliant' ;
205213 gdprStatus : 'started' | 'in_progress' | 'compliant' ;
@@ -215,6 +223,7 @@ export function TrustPortalSwitch({
215223 hipaaFileName ?: string | null ;
216224 soc2type1FileName ?: string | null ;
217225 soc2type2FileName ?: string | null ;
226+ soc3FileName ?: string | null ;
218227 pcidssFileName ?: string | null ;
219228 nen7510FileName ?: string | null ;
220229 iso9001FileName ?: string | null ;
@@ -240,6 +249,7 @@ export function TrustPortalSwitch({
240249 hipaa : hipaaFileName ?? null ,
241250 soc2type1 : soc2type1FileName ?? null ,
242251 soc2type2 : soc2type2FileName ?? null ,
252+ soc3 : soc3FileName ?? null ,
243253 pcidss : pcidssFileName ?? null ,
244254 nen7510 : nen7510FileName ?? null ,
245255 iso9001 : iso9001FileName ?? null ,
@@ -253,6 +263,7 @@ export function TrustPortalSwitch({
253263 hipaa : hipaaFileName ?? null ,
254264 soc2type1 : soc2type1FileName ?? null ,
255265 soc2type2 : soc2type2FileName ?? null ,
266+ soc3 : soc3FileName ?? null ,
256267 pcidss : pcidssFileName ?? null ,
257268 nen7510 : nen7510FileName ?? null ,
258269 iso9001 : iso9001FileName ?? null ,
@@ -264,6 +275,7 @@ export function TrustPortalSwitch({
264275 hipaaFileName ,
265276 soc2type1FileName ,
266277 soc2type2FileName ,
278+ soc3FileName ,
267279 pcidssFileName ,
268280 nen7510FileName ,
269281 iso9001FileName ,
@@ -323,6 +335,7 @@ export function TrustPortalSwitch({
323335 primaryColor : primaryColor ?? undefined ,
324336 soc2type1 : soc2type1 ?? false ,
325337 soc2type2 : soc2type2 ?? false ,
338+ soc3 : soc3 ?? false ,
326339 iso27001 : iso27001 ?? false ,
327340 iso42001 : iso42001 ?? false ,
328341 gdpr : gdpr ?? false ,
@@ -332,6 +345,7 @@ export function TrustPortalSwitch({
332345 iso9001 : iso9001 ?? false ,
333346 soc2type1Status : soc2type1Status ?? 'started' ,
334347 soc2type2Status : soc2type2Status ?? 'started' ,
348+ soc3Status : soc3Status ?? 'started' ,
335349 iso27001Status : iso27001Status ?? 'started' ,
336350 iso42001Status : iso42001Status ?? 'started' ,
337351 gdprStatus : gdprStatus ?? 'started' ,
@@ -685,6 +699,39 @@ export function TrustPortalSwitch({
685699 orgId = { orgId }
686700 disabled = { ! canUpdate }
687701 />
702+ { /* SOC 3 */ }
703+ < ComplianceFramework
704+ title = "SOC 3"
705+ description = "A compliance framework focused on data security, availability, and confidentiality."
706+ isEnabled = { soc3 }
707+ status = { soc3Status }
708+ onStatusChange = { async ( value ) => {
709+ try {
710+ await updateFrameworkSettings ( {
711+ soc3Status : value as 'started' | 'in_progress' | 'compliant' ,
712+ } ) ;
713+ toast . success ( 'SOC 3 status updated' ) ;
714+ } catch ( error ) {
715+ toast . error ( 'Failed to update SOC 3 status' ) ;
716+ }
717+ } }
718+ onToggle = { async ( checked ) => {
719+ try {
720+ await updateFrameworkSettings ( {
721+ soc3 : checked ,
722+ } ) ;
723+ toast . success ( 'SOC 3 status updated' ) ;
724+ } catch ( error ) {
725+ toast . error ( 'Failed to update SOC 3 status' ) ;
726+ }
727+ } }
728+ fileName = { certificateFiles . soc3 }
729+ onFileUpload = { handleFileUpload }
730+ onFilePreview = { handleFilePreview }
731+ frameworkKey = "soc3"
732+ orgId = { orgId }
733+ disabled = { ! canUpdate }
734+ />
688735 { /* PCI DSS */ }
689736 < ComplianceFramework
690737 title = "PCI DSS"
0 commit comments