11import { createLogger } from '@/lib/logs/console/logger'
22import type { GoogleDriveToolParams , GoogleDriveUploadResponse } from '@/tools/google_drive/types'
3- import { GOOGLE_WORKSPACE_MIME_TYPES , SOURCE_MIME_TYPES } from '@/tools/google_drive/utils'
3+ import {
4+ GOOGLE_WORKSPACE_MIME_TYPES ,
5+ handleSheetsFormat ,
6+ SOURCE_MIME_TYPES ,
7+ } from '@/tools/google_drive/utils'
48import type { ToolConfig } from '@/tools/types'
59
610const logger = createLogger ( 'GoogleDriveUploadTool' )
@@ -96,13 +100,27 @@ export const uploadTool: ToolConfig<GoogleDriveToolParams, GoogleDriveUploadResp
96100 throw new Error ( data . error ?. message || 'Failed to create file in Google Drive' )
97101 }
98102
99- // Now upload content to the created file
100103 const fileId = data . id
101104 const requestedMimeType = params ?. mimeType || 'text/plain'
102105 const authHeader =
103106 response . headers . get ( 'Authorization' ) || `Bearer ${ params ?. accessToken || '' } `
104107
105- // For Google Workspace formats, use the appropriate source MIME type for content upload
108+ let preparedContent : string | undefined =
109+ typeof params ?. content === 'string' ? ( params ?. content as string ) : undefined
110+
111+ if ( requestedMimeType === 'application/vnd.google-apps.spreadsheet' && params ?. content ) {
112+ const { csv, rowCount, columnCount } = handleSheetsFormat ( params . content as unknown )
113+ if ( csv !== undefined ) {
114+ preparedContent = csv
115+ logger . info ( 'Prepared CSV content for Google Sheets upload' , {
116+ fileId,
117+ fileName : params ?. fileName ,
118+ rowCount,
119+ columnCount,
120+ } )
121+ }
122+ }
123+
106124 const uploadMimeType = GOOGLE_WORKSPACE_MIME_TYPES . includes ( requestedMimeType )
107125 ? SOURCE_MIME_TYPES [ requestedMimeType ] || 'text/plain'
108126 : requestedMimeType
@@ -122,7 +140,7 @@ export const uploadTool: ToolConfig<GoogleDriveToolParams, GoogleDriveUploadResp
122140 Authorization : authHeader ,
123141 'Content-Type' : uploadMimeType ,
124142 } ,
125- body : params ?. content || '' ,
143+ body : preparedContent !== undefined ? preparedContent : params ?. content || '' ,
126144 }
127145 )
128146
@@ -136,7 +154,6 @@ export const uploadTool: ToolConfig<GoogleDriveToolParams, GoogleDriveUploadResp
136154 throw new Error ( uploadError . error ?. message || 'Failed to upload content to file' )
137155 }
138156
139- // For Google Workspace documents, update the name again to ensure it sticks after conversion
140157 if ( GOOGLE_WORKSPACE_MIME_TYPES . includes ( requestedMimeType ) ) {
141158 logger . info ( 'Updating file name to ensure it persists after conversion' , {
142159 fileId,
@@ -165,7 +182,6 @@ export const uploadTool: ToolConfig<GoogleDriveToolParams, GoogleDriveUploadResp
165182 }
166183 }
167184
168- // Get the final file data
169185 const finalFileResponse = await fetch (
170186 `https://www.googleapis.com/drive/v3/files/${ fileId } ?supportsAllDrives=true&fields=id,name,mimeType,webViewLink,webContentLink,size,createdTime,modifiedTime,parents` ,
171187 {
0 commit comments