From 5b7e312de6f79e2854a64a973971c1a344f56f82 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Sat, 14 Mar 2026 10:34:14 -0700 Subject: [PATCH 1/3] fix(files): new file bun error --- apps/sim/app/api/files/upload/route.ts | 8 ++++-- .../app/api/workspaces/[id]/files/route.ts | 26 +++++++++++-------- apps/sim/executor/constants.ts | 3 +++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/apps/sim/app/api/files/upload/route.ts b/apps/sim/app/api/files/upload/route.ts index cd2baf45d90..69ee924e451 100644 --- a/apps/sim/app/api/files/upload/route.ts +++ b/apps/sim/app/api/files/upload/route.ts @@ -46,9 +46,10 @@ export async function POST(request: NextRequest) { const formData = await request.formData() - const files = formData.getAll('file') as File[] + const rawFiles = formData.getAll('file') + const files = rawFiles.filter((f): f is File => f instanceof File) - if (!files || files.length === 0) { + if (files.length === 0) { throw new InvalidRequestError('No files provided') } @@ -74,6 +75,9 @@ export async function POST(request: NextRequest) { for (const file of files) { const originalName = file.name + if (!originalName || typeof originalName !== 'string') { + throw new InvalidRequestError('File name is missing') + } if (!validateFileExtension(originalName)) { const extension = originalName.split('.').pop()?.toLowerCase() || 'unknown' diff --git a/apps/sim/app/api/workspaces/[id]/files/route.ts b/apps/sim/app/api/workspaces/[id]/files/route.ts index d6ceb728e00..bbee154f5b1 100644 --- a/apps/sim/app/api/workspaces/[id]/files/route.ts +++ b/apps/sim/app/api/workspaces/[id]/files/route.ts @@ -87,32 +87,36 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ } const formData = await request.formData() - const file = formData.get('file') as File + const rawFile = formData.get('file') - if (!file) { + if (!rawFile || !(rawFile instanceof File)) { return NextResponse.json({ error: 'No file provided' }, { status: 400 }) } - // Validate file size (100MB limit) + const fileName = rawFile.name + if (!fileName || typeof fileName !== 'string') { + return NextResponse.json({ error: 'File name is missing' }, { status: 400 }) + } + const maxSize = 100 * 1024 * 1024 - if (file.size > maxSize) { + if (rawFile.size > maxSize) { return NextResponse.json( - { error: `File size exceeds 100MB limit (${(file.size / (1024 * 1024)).toFixed(2)}MB)` }, + { error: `File size exceeds 100MB limit (${(rawFile.size / (1024 * 1024)).toFixed(2)}MB)` }, { status: 400 } ) } - const buffer = Buffer.from(await file.arrayBuffer()) + const buffer = Buffer.from(await rawFile.arrayBuffer()) const userFile = await uploadWorkspaceFile( workspaceId, session.user.id, buffer, - file.name, - file.type || 'application/octet-stream' + fileName, + rawFile.type || 'application/octet-stream' ) - logger.info(`[${requestId}] Uploaded workspace file: ${file.name}`) + logger.info(`[${requestId}] Uploaded workspace file: ${fileName}`) recordAudit({ workspaceId, @@ -122,8 +126,8 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ action: AuditAction.FILE_UPLOADED, resourceType: AuditResourceType.FILE, resourceId: userFile.id, - resourceName: file.name, - description: `Uploaded file "${file.name}"`, + resourceName: fileName, + description: `Uploaded file "${fileName}"`, request, }) diff --git a/apps/sim/executor/constants.ts b/apps/sim/executor/constants.ts index cd5592576c0..959c43d5da8 100644 --- a/apps/sim/executor/constants.ts +++ b/apps/sim/executor/constants.ts @@ -440,6 +440,9 @@ export function isValidEnvVarName(name: string): boolean { } export function sanitizeFileName(fileName: string): string { + if (!fileName || typeof fileName !== 'string') { + return 'file' + } return fileName.replace(/\s+/g, '-').replace(/[^a-zA-Z0-9.-]/g, '_') } From f706eb5744fe26bd9539d61626cf81c80b11fca5 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Sat, 14 Mar 2026 10:34:24 -0700 Subject: [PATCH 2/3] update constant --- apps/sim/executor/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sim/executor/constants.ts b/apps/sim/executor/constants.ts index 959c43d5da8..436c36b7f8f 100644 --- a/apps/sim/executor/constants.ts +++ b/apps/sim/executor/constants.ts @@ -441,7 +441,7 @@ export function isValidEnvVarName(name: string): boolean { export function sanitizeFileName(fileName: string): string { if (!fileName || typeof fileName !== 'string') { - return 'file' + return 'untitled' } return fileName.replace(/\s+/g, '-').replace(/[^a-zA-Z0-9.-]/g, '_') } From 22fca37c4dc3b9ed5cc5c5a974b9314e33fa0866 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Sat, 14 Mar 2026 10:39:07 -0700 Subject: [PATCH 3/3] fix types --- apps/sim/app/api/files/upload/route.ts | 2 +- apps/sim/app/api/workspaces/[id]/files/route.ts | 2 +- apps/sim/executor/constants.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/sim/app/api/files/upload/route.ts b/apps/sim/app/api/files/upload/route.ts index 69ee924e451..a8f0d1c8067 100644 --- a/apps/sim/app/api/files/upload/route.ts +++ b/apps/sim/app/api/files/upload/route.ts @@ -75,7 +75,7 @@ export async function POST(request: NextRequest) { for (const file of files) { const originalName = file.name - if (!originalName || typeof originalName !== 'string') { + if (!originalName) { throw new InvalidRequestError('File name is missing') } diff --git a/apps/sim/app/api/workspaces/[id]/files/route.ts b/apps/sim/app/api/workspaces/[id]/files/route.ts index bbee154f5b1..f733660b52c 100644 --- a/apps/sim/app/api/workspaces/[id]/files/route.ts +++ b/apps/sim/app/api/workspaces/[id]/files/route.ts @@ -94,7 +94,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ } const fileName = rawFile.name - if (!fileName || typeof fileName !== 'string') { + if (!fileName) { return NextResponse.json({ error: 'File name is missing' }, { status: 400 }) } diff --git a/apps/sim/executor/constants.ts b/apps/sim/executor/constants.ts index 436c36b7f8f..1e05ce865b2 100644 --- a/apps/sim/executor/constants.ts +++ b/apps/sim/executor/constants.ts @@ -439,7 +439,7 @@ export function isValidEnvVarName(name: string): boolean { return PATTERNS.ENV_VAR_NAME.test(name) } -export function sanitizeFileName(fileName: string): string { +export function sanitizeFileName(fileName: string | null | undefined): string { if (!fileName || typeof fileName !== 'string') { return 'untitled' }