From 3866254ad2239722b029f50dacd39990e0170610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Mon, 25 May 2026 16:42:12 +0000 Subject: [PATCH] fix(studio): tighten media decode filter with error_name + sampled counter Address review feedback: - AND with error_name === "EncodingError" for tighter filtering - Add sampled composition_asset_error_filtered tracking event (fires on 1st occurrence, then every 100th) so filtered errors aren't completely invisible in telemetry --- packages/studio/src/main.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index e6a627158..4bf058743 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -23,10 +23,10 @@ function errorProps(value: unknown): { } // fallow-ignore-next-line complexity -function isCompositionAssetError(msg: string): boolean { +function isCompositionAssetError(msg: string, name: string | null): boolean { if (msg.includes("Error fetching") && (msg.includes("404") || msg.includes("Not Found"))) return true; - if (msg.includes("unsupported or unrecognizable format")) return true; + if (name === "EncodingError" || msg.includes("unsupported or unrecognizable format")) return true; if (msg.includes("MEDIA_ERR_SRC_NOT_SUPPORTED")) return true; return false; } @@ -62,9 +62,22 @@ window.addEventListener("error", (event) => { }); }); +let filteredAssetErrorCount = 0; + +// fallow-ignore-next-line complexity window.addEventListener("unhandledrejection", (event) => { const props = errorProps(event.reason); - if (isCompositionAssetError(props.error_message)) return; + if (isCompositionAssetError(props.error_message, props.error_name)) { + filteredAssetErrorCount++; + if (filteredAssetErrorCount === 1 || filteredAssetErrorCount % 100 === 0) { + trackStudioEvent("composition_asset_error_filtered", { + error_message: props.error_message.slice(0, 200), + error_name: props.error_name, + total_filtered: filteredAssetErrorCount, + }); + } + return; + } rejectionCount++; if (rejectionCount > ERROR_CAP) {