Skip to content
901 changes: 875 additions & 26 deletions apps/sim/blocks/blocks/vercel.ts

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/add_domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,19 @@ export const vercelAddDomainTool: ToolConfig<VercelAddDomainParams, VercelAddDom
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelAddDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v7/domains${qs ? `?${qs}` : ''}`
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/add_project_domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,19 @@ export const vercelAddProjectDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelAddProjectDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/domains${qs ? `?${qs}` : ''}`
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/cancel_deployment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,19 @@ export const vercelCancelDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCancelDeploymentParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v12/deployments/${params.deploymentId.trim()}/cancel${qs ? `?${qs}` : ''}`
},
Expand Down
24 changes: 21 additions & 3 deletions apps/sim/tools/vercel/create_alias.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,32 @@ export const vercelCreateAliasTool: ToolConfig<VercelCreateAliasParams, VercelCr
visibility: 'user-or-llm',
description: 'The domain or subdomain to assign as an alias',
},
redirect: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Hostname to 307-redirect the alias to instead of serving the deployment directly',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateAliasParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/deployments/${params.deploymentId.trim()}/aliases${qs ? `?${qs}` : ''}`
},
Expand All @@ -47,9 +61,13 @@ export const vercelCreateAliasTool: ToolConfig<VercelCreateAliasParams, VercelCr
Authorization: `Bearer ${params.apiKey}`,
'Content-Type': 'application/json',
}),
body: (params: VercelCreateAliasParams) => ({
alias: params.alias.trim(),
}),
body: (params: VercelCreateAliasParams) => {
const body: Record<string, unknown> = { alias: params.alias.trim() }
if (params.redirect != null && params.redirect !== '') {
body.redirect = params.redirect.trim()
}
return body
},
},

transformResponse: async (response: Response) => {
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/create_check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,19 @@ export const vercelCreateCheckTool: ToolConfig<VercelCreateCheckParams, VercelCh
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateCheckParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks${qs ? `?${qs}` : ''}`
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/create_deployment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,20 @@ export const vercelCreateDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateDeploymentParams) => {
const query = new URLSearchParams()
if (params.forceNew) query.set('forceNew', params.forceNew)
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v13/deployments${qs ? `?${qs}` : ''}`
},
Expand Down
84 changes: 79 additions & 5 deletions apps/sim/tools/vercel/create_dns_record.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ export const vercelCreateDnsRecordTool: ToolConfig<
},
value: {
type: 'string',
required: true,
required: false,
visibility: 'user-or-llm',
description: 'The value of the DNS record',
description: 'The value of the DNS record (not used for SRV/HTTPS records)',
},
ttl: {
type: 'number',
Expand All @@ -56,18 +56,73 @@ export const vercelCreateDnsRecordTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Priority for MX records',
},
srvTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for SRV records (required when recordType is SRV)',
},
srvWeight: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Weight for SRV records (required when recordType is SRV)',
},
srvPort: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Port for SRV records (required when recordType is SRV)',
},
srvPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for SRV records (required when recordType is SRV)',
},
httpsTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for HTTPS records (required when recordType is HTTPS)',
},
httpsPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for HTTPS records (required when recordType is HTTPS)',
},
httpsParams: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Optional service parameters for HTTPS records (e.g. "alpn=h2,h3")',
},
comment: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'A comment to add context on what this DNS record is for (max 500 characters)',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateDnsRecordParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/domains/${params.domain.trim()}/records${qs ? `?${qs}` : ''}`
},
Expand All @@ -77,13 +132,32 @@ export const vercelCreateDnsRecordTool: ToolConfig<
'Content-Type': 'application/json',
}),
body: (params: VercelCreateDnsRecordParams) => {
const type = params.recordType.trim().toUpperCase()
const body: Record<string, unknown> = {
name: params.recordName.trim(),
type: params.recordType.trim(),
value: params.value.trim(),
type,
}
if (params.ttl != null) body.ttl = params.ttl
if (params.mxPriority != null) body.mxPriority = params.mxPriority

if (type === 'SRV') {
body.srv = {
target: params.srvTarget?.trim(),
weight: params.srvWeight,
port: params.srvPort,
priority: params.srvPriority,
}
} else if (type === 'HTTPS') {
body.https = {
target: params.httpsTarget?.trim(),
priority: params.httpsPriority,
...(params.httpsParams ? { params: params.httpsParams.trim() } : {}),
}
} else {
if (params.value != null) body.value = params.value.trim()
if (type === 'MX' && params.mxPriority != null) body.mxPriority = params.mxPriority
}

if (params.comment != null && params.comment !== '') body.comment = params.comment
return body
},
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/create_env_var.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,19 @@ export const vercelCreateEnvVarTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateEnvVarParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/env${qs ? `?${qs}` : ''}`
},
Expand Down
28 changes: 28 additions & 0 deletions apps/sim/tools/vercel/create_project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,43 @@ export const vercelCreateProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Custom install command',
},
rootDirectory: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Subdirectory of the repository the project lives in (for monorepos)',
},
nodeVersion: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Node.js version to use (e.g. 22.x, 20.x, 18.x)',
},
devCommand: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Custom dev server command',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelCreateProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v11/projects${qs ? `?${qs}` : ''}`
},
Expand All @@ -80,6 +105,9 @@ export const vercelCreateProjectTool: ToolConfig<
if (params.buildCommand) body.buildCommand = params.buildCommand.trim()
if (params.outputDirectory) body.outputDirectory = params.outputDirectory.trim()
if (params.installCommand) body.installCommand = params.installCommand.trim()
if (params.rootDirectory) body.rootDirectory = params.rootDirectory.trim()
if (params.nodeVersion) body.nodeVersion = params.nodeVersion.trim()
if (params.devCommand) body.devCommand = params.devCommand.trim()
return body
},
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/delete_alias.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,19 @@ export const vercelDeleteAliasTool: ToolConfig<VercelDeleteAliasParams, VercelDe
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelDeleteAliasParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/aliases/${params.aliasId.trim()}${qs ? `?${qs}` : ''}`
},
Expand Down
7 changes: 7 additions & 0 deletions apps/sim/tools/vercel/delete_deployment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,19 @@ export const vercelDeleteDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},

request: {
url: (params: VercelDeleteDeploymentParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const id = params.deploymentId.trim()
if (id.includes('.')) {
query.set('url', id)
Expand Down
Loading
Loading