@@ -207,6 +207,8 @@ const listBuiltinTemplatesOutputSchema = z.object({
207207 steps : z . record ( z . string ( ) , z . unknown ( ) ) ,
208208 } ) ,
209209 ) ,
210+ errors : z . array ( toolMessageSchema ) . optional ( ) ,
211+ warnings : z . array ( toolMessageSchema ) . optional ( ) ,
210212} )
211213
212214const lintAssemblyInputSchema = z . object ( {
@@ -379,13 +381,23 @@ const resolveAssemblyAccess = (
379381 }
380382}
381383
382- type ApiTemplateRecord = {
383- id ?: unknown
384- name ?: unknown
385- description ?: unknown
386- builtin_version ?: unknown
387- content ?: unknown
388- }
384+ const apiTemplateSchema = z
385+ . object ( {
386+ id : z . string ( ) . optional ( ) ,
387+ name : z . string ( ) . optional ( ) ,
388+ description : z . string ( ) . optional ( ) ,
389+ builtin_version : z . string ( ) . optional ( ) ,
390+ content : z . unknown ( ) . optional ( ) ,
391+ } )
392+ . passthrough ( )
393+
394+ const listTemplatesResponseSchema = z
395+ . object ( {
396+ items : z . array ( apiTemplateSchema ) . optional ( ) ,
397+ } )
398+ . passthrough ( )
399+
400+ type ApiTemplateRecord = z . infer < typeof apiTemplateSchema >
389401
390402const buildBuiltinTemplateId = ( slug : string , version ?: string ) : string => {
391403 if ( slug . includes ( '@' ) ) return slug
@@ -426,15 +438,18 @@ const mapBuiltinTemplate = (template: ApiTemplateRecord): BuiltinTemplate | unde
426438}
427439
428440const fetchBuiltinTemplates = async ( client : Transloadit ) : Promise < BuiltinTemplate [ ] > => {
429- const response = ( await client . listTemplates ( {
441+ const response = await client . listTemplates ( {
430442 include_builtin : 'exclusively-latest' ,
431443 page : 1 ,
432444 pagesize : 100 ,
433- } ) ) as {
434- items ?: ApiTemplateRecord [ ]
445+ } )
446+
447+ const parsed = listTemplatesResponseSchema . safeParse ( response )
448+ if ( ! parsed . success ) {
449+ throw new Error ( 'Unexpected listTemplates response shape.' )
435450 }
436451
437- const items = Array . isArray ( response . items ) ? response . items : [ ]
452+ const items = parsed . data . items ?? [ ]
438453 return items
439454 . map ( ( template ) => mapBuiltinTemplate ( template ) )
440455 . filter ( ( template ) : template is BuiltinTemplate => Boolean ( template ) )
0 commit comments