Files
cfw-autumn/shared/api/customers/cusFeatures/utils/convert/apiBalanceV1ToOverage.ts
2026-02-11 08:49:23 -08:00

38 lines
943 B
TypeScript

import { sumValues } from "@utils/utils.js";
import { Decimal } from "decimal.js";
import type {
ApiBalanceBreakdownV1,
ApiBalanceV1,
} from "../../apiBalanceV1.js";
export const apiBalanceBreakdownV1ToOverage = ({
apiBalanceBreakdown,
}: {
apiBalanceBreakdown: ApiBalanceBreakdownV1;
}) => {
// Overage = usage beyond what was granted and prepaid, clamped to 0
return Math.max(
0,
new Decimal(apiBalanceBreakdown.usage)
.sub(apiBalanceBreakdown.included_grant)
.sub(apiBalanceBreakdown.prepaid_grant)
.toNumber(),
);
};
export const apiBalanceV1ToOverage = ({
apiBalance,
}: {
apiBalance: ApiBalanceV1;
}) => {
const breakdownItems = apiBalance.breakdown ?? [];
// Sum per-breakdown overage to preserve historical overage
// when additional granted balance is added from other products
return sumValues(
breakdownItems.map((item) =>
apiBalanceBreakdownV1ToOverage({ apiBalanceBreakdown: item }),
),
);
};