Files
cfw-autumn/shared/utils/usageWindowUtils/getCurrentUsageWindowUsage.ts
2026-06-11 15:28:59 +01:00

31 lines
1.0 KiB
TypeScript

import type { UsageWindowLimit } from "../../models/cusProductModels/cusEntModels/usageWindowModels.js";
import type { UsageWindow } from "../../models/cusProductModels/cusEntModels/usageWindowTable.js";
import { findUsageWindowByLimit } from "./findUsageWindow/findUsageWindowByLimit.js";
/**
* Usage already consumed in the limit's current window: the scope's single
* mutable counter row, derived as 0 when its stored window closed OR no
* longer matches the current derivation (the lazy roll persists the zero;
* reads never trust a dead count).
*/
export const getCurrentUsageWindowUsage = ({
usageWindows,
limit,
now = Date.now(),
}: {
usageWindows: UsageWindow[];
limit: UsageWindowLimit;
now?: number;
}): number => {
const scopeRow = findUsageWindowByLimit({ usageWindows, limit });
if (
!scopeRow ||
Number(scopeRow.window_end_at) <= now ||
Number(scopeRow.window_start_at) !== limit.window_start_at
)
return 0;
const usage = Number(scopeRow.usage);
return Number.isFinite(usage) ? Math.max(0, usage) : 0;
};