@@ -7,6 +7,7 @@ import { inputSanitizer } from '../auth/input-sanitizer';
77import { Tool } from '../decorators/tool.decorator' ;
88import { ApiStatus , IToolRegistrationContext } from '../types' ;
99import { formatEntityList , FormattedTextResponse , JsonToTextResponse } from '../utils/responses' ;
10+ import { ToolErrorHandler } from '../utils' ;
1011import { logger } from '../utils' ;
1112
1213const entityFilterSchema = z . object ( {
@@ -29,42 +30,42 @@ const paramsSchema = z.object({
2930} )
3031export class GetEntitiesTool {
3132 static async execute ( request : z . infer < typeof paramsSchema > , context : IToolRegistrationContext ) {
32- logger . debug ( 'Executing get_entities tool' , { request } ) ;
33- try {
34- // Sanitize and validate inputs
35- const sanitizedRequest = {
36- filter : request . filter ? inputSanitizer . sanitizeFilter ( request . filter ) : undefined ,
37- fields : request . fields
38- ? inputSanitizer . sanitizeArray ( request . fields , 'fields' , ( field ) =>
39- inputSanitizer . sanitizeString ( field , 'field' )
40- )
41- : undefined ,
42- limit : request . limit ,
43- offset : request . offset ,
44- } ;
33+ return ToolErrorHandler . executeTool (
34+ 'get_entities' ,
35+ 'get_entities' ,
36+ async ( req : z . infer < typeof paramsSchema > , ctx : IToolRegistrationContext ) => {
37+ logger . debug ( 'Executing get_entities tool' , { request : req } ) ;
4538
46- const result = await context . catalogClient . getEntities ( sanitizedRequest ) ;
39+ // Sanitize and validate inputs
40+ const sanitizedRequest = {
41+ filter : req . filter ? inputSanitizer . sanitizeFilter ( req . filter ) : undefined ,
42+ fields : req . fields
43+ ? inputSanitizer . sanitizeArray ( req . fields , 'fields' , ( field ) =>
44+ inputSanitizer . sanitizeString ( field , 'field' )
45+ )
46+ : undefined ,
47+ limit : req . limit ,
48+ offset : req . offset ,
49+ } ;
4750
48- if ( request . format === 'jsonapi' ) {
49- const jsonApiResult = await ( context . catalogClient as BackstageCatalogApi ) . getEntitiesJsonApi ( sanitizedRequest ) ;
50- const count = Array . isArray ( jsonApiResult . data ) ? jsonApiResult . data . length : jsonApiResult . data ? 1 : 0 ;
51- logger . debug ( 'Returning JSON:API formatted entities' , { count } ) ;
52- return JsonToTextResponse ( {
53- status : ApiStatus . SUCCESS ,
54- data : jsonApiResult ,
55- } ) ;
56- }
51+ const result = await ctx . catalogClient . getEntities ( sanitizedRequest ) ;
5752
58- logger . debug ( 'Returning standard formatted entities' , { count : result . items ?. length || 0 } ) ;
59- return FormattedTextResponse ( { status : ApiStatus . SUCCESS , data : result } , formatEntityList ) ;
60- } catch ( error ) {
61- logger . error ( 'Error getting entities' , { error : error instanceof Error ? error . message : String ( error ) } ) ;
62- return JsonToTextResponse ( {
63- status : ApiStatus . ERROR ,
64- data : {
65- message : `Failed to get entities: ${ error instanceof Error ? error . message : 'Unknown error' } ` ,
66- } ,
67- } ) ;
68- }
53+ if ( req . format === 'jsonapi' ) {
54+ const jsonApiResult = await ( ctx . catalogClient as BackstageCatalogApi ) . getEntitiesJsonApi ( sanitizedRequest ) ;
55+ const count = Array . isArray ( jsonApiResult . data ) ? jsonApiResult . data . length : jsonApiResult . data ? 1 : 0 ;
56+ logger . debug ( 'Returning JSON:API formatted entities' , { count } ) ;
57+ return JsonToTextResponse ( {
58+ status : ApiStatus . SUCCESS ,
59+ data : jsonApiResult ,
60+ } ) ;
61+ }
62+
63+ logger . debug ( 'Returning standard formatted entities' , { count : result . items ?. length || 0 } ) ;
64+ return FormattedTextResponse ( { status : ApiStatus . SUCCESS , data : result } , formatEntityList ) ;
65+ } ,
66+ request ,
67+ context ,
68+ false // Use simple error format for now
69+ ) ;
6970 }
7071}
0 commit comments