fix(providers): validate before limiting and tighten capped image reads

Apply shared Places validation, owned image chunks, and response-header deadline tests to the provider modules.
This commit is contained in:
Bilawal Sidhu authored and Sameh Khamis committed 2026-09-12 16:35:11 -07:00
1 parent 59a20e2d18
commit 3d956177ab
8 files changed
+440 -60

No files matched your search

+18 -13
View File
@@ -8,6 +8,7 @@ import {
buildSyntheticCctvSvg,
proxyMediaResponse,
fetchCctvImageFromUpstream,
fetchCctvMediaUpstream,
} from './cctv/media.js';
import { CCTV_FRAME_FETCH_TIMEOUT_MS } from './cctv/constants.js';
import { googleServerApiKey } from './places/google-key.js';
@@ -216,19 +217,16 @@ export function cctvProxy({ sourceRoot = process.cwd() } = {}) {
};
const requestRange = req.headers?.range;
if (requestRange) upstreamHeaders.Range = requestRange;
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 15_000);
let upstream;
try {
upstream = await fetch(mediaUrl, {
headers: upstreamHeaders,
signal: controller.signal,
});
} finally {
clearTimeout(timeoutId);
}
const upstream = await fetchCctvMediaUpstream(mediaUrl, {
headers: upstreamHeaders,
});
const contentType = upstream.headers.get('content-type') || '';
if (!upstream.ok) {
try {
await upstream.body?.cancel();
} catch {
/* already closed */
}
setHealth(cameraId, {
status: 'degraded',
sourceKind: 'upstream',
@@ -278,7 +276,8 @@ export function cctvProxy({ sourceRoot = process.cwd() } = {}) {
});
return;
} catch (error) {
const timedOut = error?.name === 'AbortError' || error?.name === 'TimeoutError';
const timedOut =
error?.name === 'AbortError' || error?.name === 'TimeoutError';
setHealth(cameraId, {
status: 'degraded',
sourceKind: 'upstream',
@@ -289,7 +288,13 @@ export function cctvProxy({ sourceRoot = process.cwd() } = {}) {
'Content-Type': 'application/json',
'Cache-Control': 'no-store',
});
res.end(JSON.stringify({ error: timedOut ? 'Upstream media timeout' : 'Media proxy failed' }));
res.end(
JSON.stringify({
error: timedOut
? 'Upstream media timeout'
: 'Media proxy failed',
}),
);
return;
}
}