@@ -5,6 +5,8 @@ const SECRET_TOKEN_RE =
55const SENSITIVE_ASSIGNMENT_RE =
66 / \b ( [ a - z 0 - 9 _ - ] * (?: a p i [ _ - ] ? k e y | t o k e n | s e c r e t | p a s s w o r d | u s e r [ _ - ] ? c o d e | d e v i c e [ _ - ] ? c o d e | r e f r e s h [ _ - ] ? c r e d e n t i a l ) [ a - z 0 - 9 _ - ] * ) ( \s * [ = : ] \s * ) ( " [ ^ " ] * " | ' [ ^ ' ] * ' | \S + ) / gi;
77const URL_RE = / h t t p s ? : \/ \/ [ ^ \s " ' < > ] + / gi;
8+ const REDACTED_STRING_MAX_LENGTH = 400 ;
9+ const TRUNCATION_SUFFIX = '...<truncated>' ;
810
911export function redactDiagnosticData < T > ( input : T ) : T {
1012 return redactValue ( input , new WeakSet < object > ( ) ) as T ;
@@ -48,7 +50,7 @@ function redactValue(value: unknown, seen: WeakSet<object>, keyHint?: string): u
4850
4951function redactString ( value : string , keyHint ?: string ) : string {
5052 const trimmed = value . trim ( ) ;
51- if ( ! trimmed ) return value ;
53+ if ( ! trimmed ) return boundRedactedString ( value ) ;
5254 if ( keyHint && SENSITIVE_KEY_RE . test ( keyHint ) ) return '[REDACTED]' ;
5355 let output = redactUrls ( trimmed ) ;
5456 output = output . replace ( SECRET_TOKEN_RE , '[REDACTED]' ) ;
@@ -60,9 +62,12 @@ function redactString(value: string, keyHint?: string): string {
6062 return `${ key } ${ separator } [REDACTED]` ;
6163 } ,
6264 ) ;
63- if ( output !== trimmed ) return output ;
64- if ( trimmed . length > 400 ) return `${ trimmed . slice ( 0 , 200 ) } ...<truncated>` ;
65- return trimmed ;
65+ return boundRedactedString ( output ) ;
66+ }
67+
68+ function boundRedactedString ( value : string ) : string {
69+ if ( value . length <= REDACTED_STRING_MAX_LENGTH ) return value ;
70+ return `${ value . slice ( 0 , REDACTED_STRING_MAX_LENGTH - TRUNCATION_SUFFIX . length ) } ${ TRUNCATION_SUFFIX } ` ;
6671}
6772
6873function redactUrls ( value : string ) : string {
0 commit comments