@@ -69,8 +69,19 @@ export const RUN_IDENTITY_FIELDS = [
6969
7070const IDENTITY_TOKEN = / ^ [ A - Z a - z 0 - 9 ] [ A - Z a - z 0 - 9 _ . : - ] { 0 , 120 } $ / u
7171const SUMMARY_TOKEN = / ^ [ A - Z a - z 0 - 9 ] [ A - Z a - z 0 - 9 _ . / : - ] { 0 , 79 } $ / u
72- const LOCAL_PATH_SURFACE = / (?< ! [: / A - Z a - z 0 - 9 ] ) (?: \/ (?: U s e r s | h o m e | V o l u m e s | p r i v a t e | t m p | v a r | e t c | o p t | s r v | m n t | r o o t | w o r k s p a c e | w o r k s p a c e s ) \/ [ ^ \s ` ' " < > ] + | [ A - Z a - z ] : [ \\ / ] (?: U s e r s | D o c u m e n t s a n d S e t t i n g s ) [ \\ / ] [ ^ \s ` ' " < > ] + ) / iu
73- const SECRET_LIKE_SURFACE = / (?: \b b e a r e r \s + [ a - z 0 - 9 . _ ~ + \/ = - ] { 16 , } | \b (?: a c c e s s | s e c r e t ) [ _ - ] ? k e y \s * [ = : ] \s * [ ^ \s ` ' " < > ] + | \b (?: a k | s k ) \s * [ = : ] \s * [ ^ \s ` ' " < > ] + | (?< ! [ a - z 0 - 9 _ ] ) (?: a k | s k ) [ - _ = : ] [ a - z 0 - 9 _ = - ] { 10 , } | \b g h [ p o u s r ] _ [ a - z 0 - 9 ] { 20 , } \b | \b e y j [ a - z 0 - 9 _ - ] { 10 , } \. [ a - z 0 - 9 _ - ] { 10 , } \. [ a - z 0 - 9 _ - ] { 10 , } \b | \b t o k e n \s * [ = : ] \s * [ ^ \s ` ' " < > ] { 12 , } ) / iu
72+ const LOCAL_PATH_SURFACES = [
73+ / (?< ! [: / a - z 0 - 9 ] ) \/ (?: u s e r s | h o m e | v o l u m e s | p r i v a t e | t m p | v a r | e t c | o p t | s r v | m n t | r o o t | w o r k s p a c e | w o r k s p a c e s ) \/ [ ^ \s ` ' " < > ] + / iu,
74+ / (?< ! [: / a - z 0 - 9 ] ) [ a - z ] : [ / \\ ] (?: u s e r s | d o c u m e n t s a n d s e t t i n g s ) [ / \\ ] [ ^ \s ` ' " < > ] + / iu,
75+ ] as const
76+ const SECRET_LIKE_SURFACES = [
77+ / \b b e a r e r \s + [ a - z 0 - 9 . _ ~ + / = - ] { 16 , } / iu,
78+ / \b (?: a c c e s s | s e c r e t ) [ _ - ] ? k e y \s * [ = : ] \s * [ ^ \s ` ' " < > ] + / iu,
79+ / \b (?: a k | s k ) \s * [ = : ] \s * [ ^ \s ` ' " < > ] + / iu,
80+ / (?< ! [ a - z 0 - 9 _ ] ) (?: a k | s k ) [ - _ = : ] [ a - z 0 - 9 _ = - ] { 10 , } / iu,
81+ / \b g h [ p o u s r ] _ [ a - z 0 - 9 ] { 20 , } \b / iu,
82+ / \b e y j [ a - z 0 - 9 _ - ] { 10 , } \. [ a - z 0 - 9 _ - ] { 10 , } \. [ a - z 0 - 9 _ - ] { 10 , } \b / iu,
83+ / \b t o k e n \s * [ = : ] \s * [ ^ \s ` ' " < > ] { 12 , } / iu,
84+ ] as const
7485const CREDENTIAL_FIELD_FAMILIES = new Set ( [
7586 'accesskey' , 'accesstoken' , 'apikey' , 'authtoken' , 'authorization' ,
7687 'clientsecret' , 'cookie' , 'credential' , 'credentials' , 'password' ,
@@ -176,15 +187,17 @@ export interface ShadowObserverOptions {
176187}
177188
178189function normalizePublicSafeFieldName ( value : string ) : string {
179- return value
190+ const normalized = value
180191 . replace ( / ( [ a - z 0 - 9 ] ) ( [ A - Z ] ) / gu, '$1_$2' )
181- . replace ( / [ ^ A - Z a - z 0 - 9 ] + / gu, '_' )
182- . replace ( / ^ _ + | _ + $ / gu, '' )
192+ . replace ( / [ ^ a - z 0 - 9 ] + / giu, '_' )
183193 . toLowerCase ( )
194+ const withoutLeading = normalized . startsWith ( '_' ) ? normalized . slice ( 1 ) : normalized
195+ return withoutLeading . endsWith ( '_' ) ? withoutLeading . slice ( 0 , - 1 ) : withoutLeading
184196}
185197
186198function isPublicSafeText ( value : string ) : boolean {
187- return ! LOCAL_PATH_SURFACE . test ( value ) && ! SECRET_LIKE_SURFACE . test ( value )
199+ return ! LOCAL_PATH_SURFACES . some ( pattern => pattern . test ( value ) )
200+ && ! SECRET_LIKE_SURFACES . some ( pattern => pattern . test ( value ) )
188201}
189202
190203/** Keep the producer boundary equivalent to LoopX's recursive Python guard. */
0 commit comments