33 */
44
55import { env } from './lib/core/config/env'
6+ import { sanitizeEventData } from './lib/core/security/redaction'
67
78if ( typeof window !== 'undefined' ) {
89 const TELEMETRY_STATUS_KEY = 'simstudio-telemetry-status'
@@ -41,37 +42,6 @@ if (typeof window !== 'undefined') {
4142 }
4243 }
4344
44- /**
45- * Sanitize event data to remove sensitive information
46- */
47- function sanitizeEvent ( event : any ) : any {
48- const patterns = [ 'password' , 'token' , 'secret' , 'key' , 'auth' , 'credential' , 'private' ]
49- const sensitiveRe = new RegExp ( patterns . join ( '|' ) , 'i' )
50-
51- const scrubString = ( s : string ) => ( s && sensitiveRe . test ( s ) ? '[redacted]' : s )
52-
53- if ( event == null ) return event
54- if ( typeof event === 'string' ) return scrubString ( event )
55- if ( typeof event !== 'object' ) return event
56-
57- if ( Array . isArray ( event ) ) {
58- return event . map ( ( item ) => sanitizeEvent ( item ) )
59- }
60-
61- const sanitized : Record < string , unknown > = { }
62- for ( const [ key , value ] of Object . entries ( event ) ) {
63- const lowerKey = key . toLowerCase ( )
64- if ( patterns . some ( ( p ) => lowerKey . includes ( p ) ) ) continue
65-
66- if ( typeof value === 'string' ) sanitized [ key ] = scrubString ( value )
67- else if ( Array . isArray ( value ) ) sanitized [ key ] = value . map ( ( v ) => sanitizeEvent ( v ) )
68- else if ( value && typeof value === 'object' ) sanitized [ key ] = sanitizeEvent ( value )
69- else sanitized [ key ] = value
70- }
71-
72- return sanitized
73- }
74-
7545 /**
7646 * Flush batch of events to server
7747 */
@@ -84,7 +54,7 @@ if (typeof window !== 'undefined') {
8454 batchTimer = null
8555 }
8656
87- const sanitizedBatch = batch . map ( sanitizeEvent )
57+ const sanitizedBatch = batch . map ( sanitizeEventData )
8858
8959 const payload = JSON . stringify ( {
9060 category : 'batch' ,
0 commit comments