Skip to content

Commit ab771ed

Browse files
committed
harden builtin template mapping
1 parent f7f45c7 commit ab771ed

4 files changed

Lines changed: 34 additions & 6 deletions

File tree

packages/mcp-server/src/server.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,13 +412,11 @@ const extractTemplateSteps = (content: unknown): Record<string, unknown> | undef
412412
}
413413

414414
const mapBuiltinTemplate = (template: ApiTemplateRecord): BuiltinTemplate | undefined => {
415-
const slug = isNonEmptyString(template.name)
416-
? template.name
417-
: isNonEmptyString(template.id)
418-
? template.id
419-
: undefined
415+
const name = isNonEmptyString(template.name) ? template.name : undefined
416+
const id = isNonEmptyString(template.id) ? template.id : undefined
417+
const slug = name?.startsWith('builtin/') ? name : id?.startsWith('builtin/') ? id : undefined
420418

421-
if (!slug || !slug.startsWith('builtin/')) return undefined
419+
if (!slug) return undefined
422420

423421
const steps = extractTemplateSteps(template.content)
424422
if (!steps) return undefined
@@ -438,6 +436,7 @@ const mapBuiltinTemplate = (template: ApiTemplateRecord): BuiltinTemplate | unde
438436
}
439437

440438
const fetchBuiltinTemplates = async (client: Transloadit): Promise<BuiltinTemplate[]> => {
439+
// NOTE: Builtin templates are curated; we intentionally fetch the first page only for now.
441440
const response = await client.listTemplates({
442441
include_builtin: 'exclusively-latest',
443442
page: 1,
@@ -478,6 +477,7 @@ export const createTransloaditMcpServer = (
478477
version: options.serverVersion ?? packageJson.version,
479478
})
480479

480+
// Builtin templates supersede the old golden template tool; no legacy alias by design.
481481
server.registerTool(
482482
'transloadit_lint_assembly_instructions',
483483
{
@@ -835,3 +835,8 @@ export const createTransloaditMcpServer = (
835835

836836
return server
837837
}
838+
839+
// Expose tiny internals for unit tests only.
840+
export const __test__ = {
841+
mapBuiltinTemplate,
842+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { __test__ } from '../../src/server.ts'
3+
4+
describe('mapBuiltinTemplate', () => {
5+
it('falls back to id when name is not a builtin slug', () => {
6+
const result = __test__.mapBuiltinTemplate({
7+
id: 'builtin/encode-hls-video@0.0.1',
8+
name: 'Encode HLS',
9+
description: 'A test template',
10+
content: {
11+
steps: {
12+
':original': { robot: '/upload/handle' },
13+
},
14+
},
15+
})
16+
17+
expect(result).toBeDefined()
18+
expect(result?.slug).toBe('builtin/encode-hls-video@0.0.1')
19+
expect(result?.version).toBe('0.0.1')
20+
})
21+
})

packages/node/src/Transloadit.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export {
6969
export type { AssemblyStatus } from './alphalib/types/assemblyStatus.ts'
7070
export * from './apiTypes.ts'
7171
export { InconsistentResponseError, ApiError }
72+
// Builtin templates replace the legacy golden template helpers.
7273
export { mergeTemplateContent } from './alphalib/templateMerge.ts'
7374
export type {
7475
Base64Strategy,

packages/node/src/apiTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ interface TemplateResponseBase {
109109
}
110110

111111
export interface ListedTemplate extends TemplateResponseBase {
112+
// API responses may omit or null these fields for builtin or legacy templates.
112113
encryption_version?: number | null
113114
last_used?: string | null
114115
created?: string | null

0 commit comments

Comments
 (0)