( files: File[], config: FilesApiConfig, concurrency: number = DEFAULT_CONCURRENCY, )
| 316 | * @returns Array of download results in the same order as input |
| 317 | */ |
| 318 | export async function downloadSessionFiles( |
| 319 | files: File[], |
| 320 | config: FilesApiConfig, |
| 321 | concurrency: number = DEFAULT_CONCURRENCY, |
| 322 | ): Promise<DownloadResult[]> { |
| 323 | if (files.length === 0) { |
| 324 | return [] |
| 325 | } |
| 326 | |
| 327 | logDebug( |
| 328 | `Downloading ${files.length} file(s) for session ${config.sessionId}`, |
| 329 | ) |
| 330 | const startTime = Date.now() |
| 331 | |
| 332 | // Download files in parallel with concurrency limit |
| 333 | const results = await parallelWithLimit( |
| 334 | files, |
| 335 | file => downloadAndSaveFile(file, config), |
| 336 | concurrency, |
| 337 | ) |
| 338 | |
| 339 | const elapsedMs = Date.now() - startTime |
| 340 | const successCount = count(results, r => r.success) |
| 341 | logDebug( |
| 342 | `Downloaded ${successCount}/${files.length} file(s) in ${elapsedMs}ms`, |
| 343 | ) |
| 344 | |
| 345 | return results |
| 346 | } |
| 347 | |
| 348 | // ============================================================================ |
| 349 | // Upload Functions (BYOC mode) |
no test coverage detected