Skip to content

Commit 835f5a1

Browse files
committed
feat: rename golden templates to builtin
1 parent fbc8451 commit 835f5a1

7 files changed

Lines changed: 66 additions & 55 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@transloadit/mcp-server": minor
3+
"@transloadit/node": minor
4+
---
5+
6+
Fetch builtin templates from the API and remove bundled builtin template data.

.changeset/golden-templates-api.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/fingerprint/transloadit-baseline.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
"packageDir": "/home/kvz/code/node-sdk/packages/transloadit",
33
"tarball": {
44
"filename": "transloadit-4.4.0.tgz",
5-
"sizeBytes": 1231681,
6-
"sha256": "ec460c59a74d8d0e3ae826819f16b8a12e2134975995341461f99711b58dfd93"
5+
"sizeBytes": 1231694,
6+
"sha256": "80d6b260663a7dbec0157560788fb2aaa9902b051d07004ba46746815cb404ca"
77
},
88
"packageJson": {
99
"name": "transloadit",
@@ -723,8 +723,8 @@
723723
},
724724
{
725725
"path": "dist/apiTypes.d.ts.map",
726-
"sizeBytes": 3668,
727-
"sha256": "f3812c67e402777b133ee0676e5b89a569c5e172b15c1322b0a71797793cdbda"
726+
"sizeBytes": 3662,
727+
"sha256": "0b54ad2511e77feebc1831ff78dbe9c74d7198ac91ad24f8d44f3fd2b19a71dc"
728728
},
729729
{
730730
"path": "dist/apiTypes.js.map",
@@ -2038,13 +2038,13 @@
20382038
},
20392039
{
20402040
"path": "dist/apiTypes.d.ts",
2041-
"sizeBytes": 3864,
2042-
"sha256": "326478834139f0974e5f5a37263b3fae8b95622847e87cf4f2c2bc9b48d0bd2a"
2041+
"sizeBytes": 3881,
2042+
"sha256": "2069dce5782d8371b6b697336b340d71d0914de9418654155078d27297dc01bf"
20432043
},
20442044
{
20452045
"path": "src/apiTypes.ts",
2046-
"sizeBytes": 4167,
2047-
"sha256": "ad038624f0b527b4f406b76a6120a6e27c1659dde28c22cbaee7e3d85f2e99e7"
2046+
"sizeBytes": 4184,
2047+
"sha256": "06d958942ffd07d5d63a7f49d50dd492af3fac2f2df32545f7c5b36743d27548"
20482048
},
20492049
{
20502050
"path": "dist/cli/commands/assemblies.d.ts",

packages/mcp-server/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ If `assembly_url` is provided, the MCP server resumes uploads using Assembly sta
118118
- `transloadit_lint_assembly_instructions`
119119
- `transloadit_list_robots`
120120
- `transloadit_get_robot_help`
121-
- `transloadit_list_golden_templates`
121+
- `transloadit_list_builtin_templates`
122122
123123
## Roadmap
124124

packages/mcp-server/src/server.ts

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type ToolExtra = {
4848
}
4949

5050
const maxBase64Bytes = 512_000
51-
type GoldenTemplate = {
51+
type BuiltinTemplate = {
5252
slug: string
5353
version: string
5454
description: string
@@ -144,7 +144,7 @@ const inputFileSchema = z.discriminatedUnion('kind', [
144144

145145
const createAssemblyInputSchema = z.object({
146146
instructions: z.unknown().optional(),
147-
golden_template: z
147+
builtin_template: z
148148
.object({
149149
slug: z.string(),
150150
version: z.string().optional(),
@@ -205,9 +205,9 @@ const waitForAssemblyOutputSchema = z.object({
205205
warnings: z.array(toolMessageSchema).optional(),
206206
})
207207

208-
const listGoldenTemplatesInputSchema = z.object({})
208+
const listBuiltinTemplatesInputSchema = z.object({})
209209

210-
const listGoldenTemplatesOutputSchema = z.object({
210+
const listBuiltinTemplatesOutputSchema = z.object({
211211
status: z.enum(['ok', 'error']),
212212
templates: z.array(
213213
z.object({
@@ -387,11 +387,11 @@ type ApiTemplateRecord = {
387387
id?: unknown
388388
name?: unknown
389389
description?: unknown
390-
golden_version?: unknown
390+
builtin_version?: unknown
391391
content?: unknown
392392
}
393393

394-
const buildGoldenTemplateId = (slug: string, version?: string): string => {
394+
const buildBuiltinTemplateId = (slug: string, version?: string): string => {
395395
if (slug.includes('@')) return slug
396396
if (version) return `${slug}@${version}`
397397
return slug
@@ -403,20 +403,20 @@ const extractTemplateSteps = (content: unknown): Record<string, unknown> | undef
403403
return isRecord(steps) ? (steps as Record<string, unknown>) : undefined
404404
}
405405

406-
const mapGoldenTemplate = (template: ApiTemplateRecord): GoldenTemplate | undefined => {
406+
const mapBuiltinTemplate = (template: ApiTemplateRecord): BuiltinTemplate | undefined => {
407407
const slug = isNonEmptyString(template.name)
408408
? template.name
409409
: isNonEmptyString(template.id)
410410
? template.id
411411
: undefined
412412

413-
if (!slug || !slug.startsWith('~')) return undefined
413+
if (!slug || !slug.startsWith('builtin/')) return undefined
414414

415415
const steps = extractTemplateSteps(template.content)
416416
if (!steps) return undefined
417417

418-
const version = isNonEmptyString(template.golden_version)
419-
? template.golden_version
418+
const version = isNonEmptyString(template.builtin_version)
419+
? template.builtin_version
420420
: slug.includes('@')
421421
? (slug.split('@')[1] ?? '')
422422
: ''
@@ -429,9 +429,9 @@ const mapGoldenTemplate = (template: ApiTemplateRecord): GoldenTemplate | undefi
429429
}
430430
}
431431

432-
const fetchGoldenTemplates = async (client: Transloadit): Promise<GoldenTemplate[]> => {
432+
const fetchBuiltinTemplates = async (client: Transloadit): Promise<BuiltinTemplate[]> => {
433433
const response = (await client.listTemplates({
434-
include_golden: 'latest',
434+
include_builtin: 'exclusively-latest',
435435
page: 1,
436436
pagesize: 100,
437437
})) as {
@@ -440,16 +440,16 @@ const fetchGoldenTemplates = async (client: Transloadit): Promise<GoldenTemplate
440440

441441
const items = Array.isArray(response.items) ? response.items : []
442442
return items
443-
.map((template) => mapGoldenTemplate(template))
444-
.filter((template): template is GoldenTemplate => Boolean(template))
443+
.map((template) => mapBuiltinTemplate(template))
444+
.filter((template): template is BuiltinTemplate => Boolean(template))
445445
}
446446

447-
const fetchGoldenTemplateContent = async (
447+
const fetchBuiltinTemplateContent = async (
448448
client: Transloadit,
449449
slug: string,
450450
version?: string,
451451
): Promise<TemplateContent | undefined> => {
452-
const templateId = buildGoldenTemplateId(slug, version)
452+
const templateId = buildBuiltinTemplateId(slug, version)
453453
const template = (await client.getTemplate(templateId)) as {
454454
content?: unknown
455455
}
@@ -524,7 +524,7 @@ export const createTransloaditMcpServer = (
524524
async (
525525
{
526526
instructions,
527-
golden_template,
527+
builtin_template,
528528
files,
529529
fields,
530530
wait_for_completion,
@@ -537,10 +537,10 @@ export const createTransloaditMcpServer = (
537537
},
538538
extra,
539539
) => {
540-
if (instructions && golden_template) {
540+
if (instructions && builtin_template) {
541541
return buildToolError(
542542
'mcp_invalid_args',
543-
'Provide either instructions or golden_template, not both.',
543+
'Provide either instructions or builtin_template, not both.',
544544
{ path: 'instructions' },
545545
)
546546
}
@@ -554,22 +554,22 @@ export const createTransloaditMcpServer = (
554554
const fileInputs = files ?? []
555555
let params = parseInstructions(instructions) ?? ({} as CreateAssemblyParams)
556556

557-
if (golden_template) {
558-
const templateContent = await fetchGoldenTemplateContent(
557+
if (builtin_template) {
558+
const templateContent = await fetchBuiltinTemplateContent(
559559
client,
560-
golden_template.slug,
561-
golden_template.version,
560+
builtin_template.slug,
561+
builtin_template.version,
562562
)
563563

564564
if (!templateContent) {
565565
return buildToolError(
566566
'mcp_unknown_template',
567-
`Unknown golden template: ${golden_template.slug}`,
568-
{ path: 'golden_template.slug' },
567+
`Unknown builtin template: ${builtin_template.slug}`,
568+
{ path: 'builtin_template.slug' },
569569
)
570570
}
571571

572-
const overrides = golden_template.overrides
572+
const overrides = builtin_template.overrides
573573
params = mergeTemplateContent(
574574
templateContent,
575575
overrides && isRecord(overrides) ? (overrides as Record<string, unknown>) : undefined,
@@ -775,12 +775,12 @@ export const createTransloaditMcpServer = (
775775
)
776776

777777
server.registerTool(
778-
'transloadit_list_golden_templates',
778+
'transloadit_list_builtin_templates',
779779
{
780-
title: 'List golden templates',
780+
title: 'List builtin templates',
781781
description: 'Returns curated starter templates with ready-to-run steps.',
782-
inputSchema: listGoldenTemplatesInputSchema,
783-
outputSchema: listGoldenTemplatesOutputSchema,
782+
inputSchema: listBuiltinTemplatesInputSchema,
783+
outputSchema: listBuiltinTemplatesOutputSchema,
784784
},
785785
async (_args, extra) => {
786786
const liveClient = createLiveClient(options, extra)
@@ -799,19 +799,20 @@ export const createTransloaditMcpServer = (
799799
}
800800

801801
try {
802-
const templates = await fetchGoldenTemplates(liveClient.client)
802+
const templates = await fetchBuiltinTemplates(liveClient.client)
803803
return buildToolResponse({
804804
status: 'ok',
805805
templates,
806806
})
807807
} catch (error) {
808-
const message = error instanceof Error ? error.message : 'Failed to fetch golden templates.'
808+
const message =
809+
error instanceof Error ? error.message : 'Failed to fetch builtin templates.'
809810
return buildToolResponse({
810811
status: 'error',
811812
templates: [],
812813
errors: [
813814
{
814-
code: 'mcp_golden_templates_failed',
815+
code: 'mcp_builtin_templates_failed',
815816
message,
816817
},
817818
],

packages/mcp-server/test/e2e/golden-templates.test.ts renamed to packages/mcp-server/test/e2e/builtin-templates.test.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Client } from '@modelcontextprotocol/sdk/client'
22
import { afterAll, beforeAll, describe, expect, it } from 'vitest'
33
import { createMcpClient, isRecord, parseToolPayload } from './mcp-client.ts'
44

5-
describe('mcp-server golden templates', { timeout: 20000 }, () => {
5+
describe('mcp-server builtin templates', { timeout: 20000 }, () => {
66
let client: Client
77

88
beforeAll(async () => {
@@ -13,9 +13,9 @@ describe('mcp-server golden templates', { timeout: 20000 }, () => {
1313
await client?.close()
1414
})
1515

16-
it('lists golden templates with steps', async () => {
16+
it('lists builtin templates with steps', async () => {
1717
const result = await client.callTool({
18-
name: 'transloadit_list_golden_templates',
18+
name: 'transloadit_list_builtin_templates',
1919
arguments: {},
2020
})
2121

@@ -25,8 +25,18 @@ describe('mcp-server golden templates', { timeout: 20000 }, () => {
2525
expect(Array.isArray(payload.templates)).toBe(true)
2626

2727
const templates = payload.templates as Array<Record<string, unknown>>
28-
const hls = templates.find(
29-
(template) => template.slug === '~transloadit/encode-hls-video@0.0.1',
28+
const builtins = templates.filter((template) =>
29+
typeof template.slug === 'string' ? template.slug.startsWith('builtin/') : false,
30+
)
31+
32+
if (process.env.TRANSLOADIT_ENDPOINT?.includes('devdock')) {
33+
expect(builtins.length).toBe(2)
34+
} else {
35+
expect(builtins.length).toBeGreaterThan(0)
36+
}
37+
38+
const hls = builtins.find((template) =>
39+
typeof template.slug === 'string' ? template.slug.includes('encode-hls-video') : false,
3040
)
3141

3242
expect(isRecord(hls)).toBe(true)

packages/node/src/apiTypes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export type ListTemplatesParams = OptionalAuthParams & {
9898
fromdate?: string
9999
todate?: string
100100
keywords?: string[]
101-
include_golden?: 'none' | 'latest' | 'all'
101+
include_builtin?: 'exclusively-all' | 'exclusively-latest'
102102
}
103103

104104
interface TemplateResponseBase {
@@ -114,7 +114,7 @@ export interface ListedTemplate extends TemplateResponseBase {
114114
created?: string | null
115115
modified?: string | null
116116
description?: string
117-
golden_version?: string
117+
builtin_version?: string
118118
}
119119

120120
export interface TemplateResponse extends TemplateResponseBase, BaseResponse {}

0 commit comments

Comments
 (0)