diff --git a/kustomize/base/api/server.mjs b/kustomize/base/api/server.mjs index a2e2547..00233fb 100644 --- a/kustomize/base/api/server.mjs +++ b/kustomize/base/api/server.mjs @@ -744,7 +744,7 @@ function computeCandleFlowMovesFromTicks({ candle, bucketSeconds, points, rows, } function parseTimeframeToSeconds(tf) { - const v = String(tf || '').trim().toLowerCase(); + const v = normalizeChartTimeframe(tf); if (!v) return 60; const m = v.match(/^(\d+)(s|m|h|d)$/); if (!m) throw new Error(`invalid_tf`); @@ -755,6 +755,40 @@ function parseTimeframeToSeconds(tf) { return num * mult; } +const SUPPORTED_CHART_TIMEFRAMES = new Set([ + '1s', + '5s', + '15s', + '30s', + '1m', + '5m', + '15m', + '30m', + '1h', + '4h', + '8h', + '12h', + '1d', +]); + +function normalizeChartTimeframe(tf) { + const raw = String(tf || '').trim(); + if (!raw) return '1m'; + + const aliased = + raw === '1D' || raw === '24h' || raw === '24H' + ? '1d' + : raw === '1H' + ? '1h' + : raw.toLowerCase(); + + if (!SUPPORTED_CHART_TIMEFRAMES.has(aliased)) { + throw new Error('invalid_tf'); + } + + return aliased; +} + function fillForwardCandles(candles, { bucketSeconds, limit, nowSec }) { if (!Array.isArray(candles) || candles.length === 0) return []; if (!Number.isFinite(bucketSeconds) || bucketSeconds <= 0) return candles;