38 lines
943 B
TypeScript
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 }),
|
|
),
|
|
);
|
|
};
|