From 26916b7bddbcc2ef782a59bd31c79801ff5258b4 Mon Sep 17 00:00:00 2001 From: James Russo Date: Wed, 9 Sep 2026 08:50:48 -0400 Subject: [PATCH] fix(cli): validate captured Lottie archives and previews (#3811) * fix(cli): validate captured Lottie archives and previews * fix(cli): bound Lottie discovery before buffering * fix(cli): bound Lottie discovery lifecycle and archive paths * fix(cli): retain highest-priority Lottie candidates --- packages/cli/src/capture/index.ts | 48 ++----- .../capture/lottieArchiveEntryLimit.test.ts | 19 +++ .../cli/src/capture/lottieArchivePreflight.ts | 59 +++++++++ .../cli/src/capture/lottieDiscovery.test.ts | 122 ++++++++++++++++++ packages/cli/src/capture/lottieDiscovery.ts | 105 +++++++++++++++ .../src/capture/lottiePreviewRequests.test.ts | 23 ++++ .../cli/src/capture/lottiePreviewRequests.ts | 24 ++++ .../cli/src/capture/lottieValidation.test.ts | 66 ++++++++++ packages/cli/src/capture/lottieValidation.ts | 107 +++++++++++++++ packages/cli/src/capture/mediaCapture.test.ts | 35 ++++- packages/cli/src/capture/mediaCapture.ts | 63 ++++----- 11 files changed, 596 insertions(+), 75 deletions(-) create mode 100644 packages/cli/src/capture/lottieArchiveEntryLimit.test.ts create mode 100644 packages/cli/src/capture/lottieArchivePreflight.ts create mode 100644 packages/cli/src/capture/lottieDiscovery.test.ts create mode 100644 packages/cli/src/capture/lottieDiscovery.ts create mode 100644 packages/cli/src/capture/lottiePreviewRequests.test.ts create mode 100644 packages/cli/src/capture/lottiePreviewRequests.ts create mode 100644 packages/cli/src/capture/lottieValidation.test.ts create mode 100644 packages/cli/src/capture/lottieValidation.ts diff --git a/packages/cli/src/capture/index.ts b/packages/cli/src/capture/index.ts index b29285de37..e7dbb3076d 100644 --- a/packages/cli/src/capture/index.ts +++ b/packages/cli/src/capture/index.ts @@ -1,3 +1,4 @@ +import { LottieDiscovery } from "./lottieDiscovery.js"; import { createCaptureDownloadBudget } from "./readBoundedResponse.js"; /** * Website capture orchestrator. @@ -84,6 +85,7 @@ export async function captureWebsite( onPhase, } = opts; + const downloadByteBudget = createCaptureDownloadBudget(); const warnings: string[] = []; const progress = (stage: string, detail?: string) => { onProgress?.(stage, detail); @@ -204,51 +206,20 @@ export async function captureWebsite( // Intercept network responses to detect Lottie JSON files const discoveredLotties: DiscoveredLottie[] = []; + const lottieDiscovery = new LottieDiscovery(); // Layer 1 (passive video discovery): every direct-video URL the page fetches // over the whole session (load / scroll / carousel rotation), independent of // whether a