@@ -6,6 +6,7 @@ import type OnyxState from '@src/types/onyx/OnyxState';
66import type { MaskOnyxState } from './types' ;
77
88const MASKING_PATTERN = '***' ;
9+
910const keysToMask = [
1011 'plaidLinkToken' ,
1112 'plaidAccessToken' ,
@@ -21,8 +22,51 @@ const keysToMask = [
2122 'edits' ,
2223 'lastMessageHtml' ,
2324 'lastMessageText' ,
25+ 'login' ,
26+ 'avatar' ,
27+ 'avatarURL' ,
28+ 'email' ,
29+ 'remainingWalletLimit' ,
30+ 'walletLimit' ,
31+ 'availableBalance' ,
32+ 'currentBalance' ,
33+ 'walletLinkedAccountType' ,
34+ 'walletLimitEnforcementPeriod' ,
35+ 'tier' ,
36+ 'tierName' ,
37+ 'primaryLogin' ,
38+ 'validateCode' ,
39+ 'displayName' ,
40+ 'zipCode' ,
41+ 'owner' ,
42+ 'name' ,
43+ 'oldPolicyName' ,
44+ 'policyAvatar' ,
45+ 'policyName' ,
46+ 'receivableAccount' ,
47+ 'payableAcct' ,
48+ 'invoiceItem' ,
49+ 'payableList' ,
50+ 'merchant' ,
51+ 'cardName' ,
52+ 'cardNumber' ,
53+ 'amount' ,
54+ 'comment' ,
55+ 'bank' ,
56+ 'modifiedMerchant' ,
57+ 'originalAmount'
2458] ;
2559
60+ function getMaskingPattern ( value : unknown ) {
61+ if ( typeof value === 'string' ) {
62+ return '*' . repeat ( value . length ) ;
63+ }
64+ if ( Array . isArray ( value ) ) {
65+ return value . map ( v => ( typeof v === 'string' ? '*' . repeat ( v . length ) : '' ) ) ;
66+ }
67+ return MASKING_PATTERN ;
68+ }
69+
2670const onyxKeysToRemove : Array < ValueOf < typeof ONYXKEYS > > = [ ONYXKEYS . NVP_PRIVATE_PUSH_NOTIFICATION_ID ] ;
2771
2872const emailRegex = / [ a - z A - Z 0 - 9 . _ % + - ] + @ [ a - z A - Z 0 - 9 . - ] + \. [ a - z A - Z ] { 2 , } / ;
@@ -64,7 +108,7 @@ const maskSessionDetails = (onyxState: OnyxState): OnyxState => {
64108 maskedData [ key ] = session [ key as keyof Session ] ;
65109 return ;
66110 }
67- maskedData [ key ] = MASKING_PATTERN ;
111+ maskedData [ key ] = getMaskingPattern ( session [ key as keyof Session ] ) ;
68112 } ) ;
69113
70114 return {
@@ -118,20 +162,20 @@ const maskFragileData = (data: OnyxState | unknown[] | null, parentKey?: string)
118162
119163 if ( keysToMask . includes ( key ) ) {
120164 if ( Array . isArray ( value ) ) {
121- maskedData [ key ] = value . map ( ( ) => MASKING_PATTERN ) ;
165+ maskedData [ key ] = value . map ( ( v ) => getMaskingPattern ( v ) ) ;
122166 } else {
123- maskedData [ key ] = MASKING_PATTERN ;
167+ maskedData [ key ] = getMaskingPattern ( value ) ;
124168 }
125169 } else if ( typeof value === 'string' && Str . isValidEmail ( value ) ) {
126170 maskedData [ propertyName ] = maskEmail ( value ) ;
127171 } else if ( typeof value === 'string' && stringContainsEmail ( value ) ) {
128172 maskedData [ propertyName ] = replaceEmailInString ( value , maskEmail ( extractEmail ( value ) ?? '' ) ) ;
129173 } else if ( parentKey && parentKey . includes ( ONYXKEYS . COLLECTION . REPORT_ACTIONS ) && ( propertyName === 'text' || propertyName === 'html' ) ) {
130- maskedData [ key ] = MASKING_PATTERN ;
174+ maskedData [ key ] = getMaskingPattern ( value ) ;
131175 } else if ( typeof value === 'object' ) {
132176 maskedData [ propertyName ] = maskFragileData ( value as OnyxState , propertyName . includes ( ONYXKEYS . COLLECTION . REPORT_ACTIONS ) ? propertyName : parentKey ) ;
133177 } else {
134- maskedData [ propertyName ] = value ;
178+ maskedData [ propertyName ] = getMaskingPattern ( value ) ;
135179 }
136180 } ) ;
137181
0 commit comments