MCPcopy
hub / github.com/simstudioai/sim / convertFilesToBase64

Method convertFilesToBase64

packages/ts-sdk/src/index.ts:150–193  ·  view source on GitHub ↗

* Convert File objects in input to API format (base64) * Recursively processes nested objects and arrays

(
    value: any,
    visited: WeakSet<object> = new WeakSet()
  )

Source from the content-addressed store, hash-verified

148 * Recursively processes nested objects and arrays
149 */
150 private async convertFilesToBase64(
151 value: any,
152 visited: WeakSet<object> = new WeakSet()
153 ): Promise<any> {
154 if (typeof File !== 'undefined' && value instanceof File) {
155 const arrayBuffer = await value.arrayBuffer()
156 const buffer = Buffer.from(arrayBuffer)
157 const base64 = buffer.toString('base64')
158
159 return {
160 type: 'file',
161 data: `data:${value.type || 'application/octet-stream'};base64,${base64}`,
162 name: value.name,
163 mime: value.type || 'application/octet-stream',
164 }
165 }
166
167 if (Array.isArray(value)) {
168 if (visited.has(value)) {
169 return '[Circular]'
170 }
171 visited.add(value)
172 const result = await Promise.all(
173 value.map((item) => this.convertFilesToBase64(item, visited))
174 )
175 visited.delete(value)
176 return result
177 }
178
179 if (value !== null && typeof value === 'object') {
180 if (visited.has(value)) {
181 return '[Circular]'
182 }
183 visited.add(value)
184 const converted: any = {}
185 for (const [key, val] of Object.entries(value)) {
186 converted[key] = await this.convertFilesToBase64(val, visited)
187 }
188 visited.delete(value)
189 return converted
190 }
191
192 return value
193 }
194
195 /**
196 * Execute a workflow with optional input data

Callers 1

executeWorkflowMethod · 0.95

Calls 3

deleteMethod · 0.65
toStringMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected