@@ -56,7 +56,7 @@ export class TraceService {
5656 timestamp : Date ;
5757 type : PersistedTraceEventType ;
5858 message : string | null ;
59- error : string | null ;
59+ error : unknown ;
6060 outputSummary : unknown | null ;
6161 level : string ;
6262 data : unknown | null ;
@@ -77,7 +77,7 @@ export class TraceService {
7777 level,
7878 timestamp : record . timestamp . toISOString ( ) ,
7979 message : record . message ?? undefined ,
80- error : record . error ? { message : record . error } : undefined ,
80+ error : this . toTraceError ( record . error ) ,
8181 outputSummary,
8282 } ;
8383
@@ -154,6 +154,42 @@ export class TraceService {
154154 return { payload, metadata } ;
155155 }
156156
157+ private toTraceError ( error : unknown ) : TraceEventPayload [ 'error' ] {
158+ if ( ! error ) {
159+ return undefined ;
160+ }
161+
162+ if ( typeof error === 'string' ) {
163+ return { message : error } ;
164+ }
165+
166+ if ( typeof error === 'object' && error !== null ) {
167+ const errObj = error as Record < string , unknown > ;
168+
169+ // Extract fieldErrors if present and valid
170+ let fieldErrors : Record < string , string [ ] > | undefined ;
171+ if ( 'fieldErrors' in errObj && errObj . fieldErrors !== null && typeof errObj . fieldErrors === 'object' ) {
172+ const fieldErrorsObj = errObj . fieldErrors as Record < string , unknown > ;
173+ const isValidFieldErrors = Object . values ( fieldErrorsObj ) . every (
174+ ( value ) => Array . isArray ( value ) && value . every ( ( item ) => typeof item === 'string' )
175+ ) ;
176+ if ( isValidFieldErrors ) {
177+ fieldErrors = fieldErrorsObj as Record < string , string [ ] > ;
178+ }
179+ }
180+
181+ return {
182+ message : typeof errObj . message === 'string' ? errObj . message : String ( error ) ,
183+ type : typeof errObj . type === 'string' ? errObj . type : undefined ,
184+ stack : typeof errObj . stack === 'string' ? errObj . stack : undefined ,
185+ details : this . toRecord ( errObj . details ) ,
186+ fieldErrors,
187+ } ;
188+ }
189+
190+ return { message : String ( error ) } ;
191+ }
192+
157193 private parseMetadata ( metadataRaw : unknown ) : TraceEventMetadata | undefined {
158194 if ( ! metadataRaw || typeof metadataRaw !== 'object' || Array . isArray ( metadataRaw ) ) {
159195 return undefined ;
0 commit comments