diff --git a/apps/sim/lib/core/utils/user-file.ts b/apps/sim/lib/core/utils/user-file.ts index f2b034047..0069eb4fb 100644 --- a/apps/sim/lib/core/utils/user-file.ts +++ b/apps/sim/lib/core/utils/user-file.ts @@ -55,3 +55,20 @@ export function filterUserFileForDisplay(data: Record): Record< } return filtered } + +/** + * Extracts base64 content from either a raw base64 string or a UserFile object. + * Useful for tools that accept file input in either format. + * @returns The base64 string, or undefined if not found + */ +export function extractBase64FromFileInput( + input: string | UserFileLike | null | undefined +): string | undefined { + if (typeof input === 'string') { + return input + } + if (input?.base64) { + return input.base64 + } + return undefined +} diff --git a/apps/sim/tools/dropbox/types.ts b/apps/sim/tools/dropbox/types.ts index f789bcfce..197dd49ec 100644 --- a/apps/sim/tools/dropbox/types.ts +++ b/apps/sim/tools/dropbox/types.ts @@ -1,3 +1,4 @@ +import type { UserFileLike } from '@/lib/core/utils/user-file' import type { ToolFileData, ToolResponse } from '@/tools/types' // ===== Core Types ===== @@ -70,7 +71,7 @@ export interface DropboxBaseParams { export interface DropboxUploadParams extends DropboxBaseParams { path: string - fileContent: string // Base64 encoded file content + fileContent: string | UserFileLike fileName?: string mode?: 'add' | 'overwrite' autorename?: boolean diff --git a/apps/sim/tools/dropbox/upload.ts b/apps/sim/tools/dropbox/upload.ts index e162679f3..b43ce6884 100644 --- a/apps/sim/tools/dropbox/upload.ts +++ b/apps/sim/tools/dropbox/upload.ts @@ -1,3 +1,4 @@ +import { extractBase64FromFileInput } from '@/lib/core/utils/user-file' import type { DropboxUploadParams, DropboxUploadResponse } from '@/tools/dropbox/types' import type { ToolConfig } from '@/tools/types' @@ -31,10 +32,10 @@ export const dropboxUploadTool: ToolConfig { + const base64Content = extractBase64FromFileInput(params.fileContent) + if (!base64Content) { + throw new Error('File Content cannot be extracted') + } // Decode base64 to raw binary bytes - Dropbox expects raw binary, not base64 text - return Buffer.from(params.fileContent, 'base64') + return Buffer.from(base64Content, 'base64') }, },