@@ -12,10 +12,12 @@ import { WorkerAdapterOptions, WorkerMessageSubject } from '../types/workers';
1212import { AxiosError , RawAxiosResponseHeaders , isAxiosError } from 'axios' ;
1313import { getCircularReplacer } from '../common/helpers' ;
1414import { EventContext } from '../types/extraction' ;
15+ import { INTERNAL_CHANNEL , verificationToken } from './private_logger' ;
1516
1617export class Logger extends Console {
1718 private options ?: WorkerAdapterOptions ;
1819 private tags : EventContext & { dev_oid : string } ;
20+ private isVerifiedChannel : boolean = false ; // false = unverified (default), true = verified
1921
2022 constructor ( { event, options } : LoggerFactoryInterface ) {
2123 super ( process . stdout , process . stderr ) ;
@@ -26,6 +28,33 @@ export class Logger extends Console {
2628 } ;
2729 }
2830
31+ // Internal method to create a verified logger
32+ private [ INTERNAL_CHANNEL ] ( token : string ) : Logger {
33+ if ( token === verificationToken ) {
34+ const verifiedLogger = Object . create ( this ) ;
35+ verifiedLogger . isVerifiedChannel = true ;
36+ // Ensure the verified logger retains the internal channel method
37+ verifiedLogger [ INTERNAL_CHANNEL ] = this [ INTERNAL_CHANNEL ] . bind ( this ) ;
38+ // Override the logFn method to use the verified logger's context
39+ verifiedLogger . logFn = this . logFn . bind ( verifiedLogger ) ;
40+ // Override the logging methods to use the custom logFn
41+ verifiedLogger . log = ( ...args : unknown [ ] ) : void => {
42+ verifiedLogger . logFn ( args , LogLevel . INFO ) ;
43+ } ;
44+ verifiedLogger . info = ( ...args : unknown [ ] ) : void => {
45+ verifiedLogger . logFn ( args , LogLevel . INFO ) ;
46+ } ;
47+ verifiedLogger . warn = ( ...args : unknown [ ] ) : void => {
48+ verifiedLogger . logFn ( args , LogLevel . WARN ) ;
49+ } ;
50+ verifiedLogger . error = ( ...args : unknown [ ] ) : void => {
51+ verifiedLogger . logFn ( args , LogLevel . ERROR ) ;
52+ } ;
53+ return verifiedLogger ;
54+ }
55+ throw new Error ( 'Unauthorized access to internal channel' ) ;
56+ }
57+
2958 private valueToString ( value : unknown ) : string {
3059 if ( typeof value === 'string' ) {
3160 return value ;
@@ -39,20 +68,25 @@ export class Logger extends Console {
3968 }
4069
4170 logFn ( args : unknown [ ] , level : LogLevel ) : void {
71+ // Always add prefix based on verification status
72+ // false = unverified ([USER] prefix), true = verified ([SDK] prefix)
73+ const prefix = this . isVerifiedChannel ? '[SDK]' : '[USER]' ;
74+ const processedArgs = [ prefix , ...args ] ;
75+
4276 if ( isMainThread ) {
4377 if ( this . options ?. isLocalDevelopment ) {
44- console [ level ] ( ...args ) ;
78+ console [ level ] ( ...processedArgs ) ;
4579 } else {
4680 let message : string ;
47- if ( args . length === 1 && typeof args [ 0 ] === 'string' ) {
81+ if ( processedArgs . length === 1 && typeof processedArgs [ 0 ] === 'string' ) {
4882 // Single string argument - use directly
49- message = args [ 0 ] ;
50- } else if ( args . length === 1 ) {
83+ message = processedArgs [ 0 ] ;
84+ } else if ( processedArgs . length === 1 ) {
5185 // Single non-string argument - convert to string properly
52- message = this . valueToString ( args [ 0 ] ) ;
86+ message = this . valueToString ( processedArgs [ 0 ] ) ;
5387 } else {
5488 // Multiple arguments - create a readable format
55- message = args . map ( ( arg ) => this . valueToString ( arg ) ) . join ( ' ' ) ;
89+ message = processedArgs . map ( ( arg ) => this . valueToString ( arg ) ) . join ( ' ' ) ;
5690 }
5791
5892 const logObject = {
@@ -66,7 +100,7 @@ export class Logger extends Console {
66100 parentPort ?. postMessage ( {
67101 subject : WorkerMessageSubject . WorkerMessageLog ,
68102 payload : {
69- args : args . map ( ( arg ) => this . valueToString ( arg ) ) ,
103+ args : processedArgs . map ( ( arg ) => this . valueToString ( arg ) ) ,
70104 level,
71105 } ,
72106 } ) ;
0 commit comments