57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import { Decimal } from "decimal.js";
|
|
import type {
|
|
ApiBalanceBreakdownInput,
|
|
ApiBalanceInput,
|
|
} from "./apiBalanceToAllowed";
|
|
import { apiBalanceV1ToOverage } from "./apiBalanceV1ToOverage";
|
|
|
|
const sumValues = (values: number[]) =>
|
|
values.reduce((total, value) => total + value, 0);
|
|
|
|
export const apiBalanceBreakdownV1ToMaxOverage = ({
|
|
apiBalanceBreakdown,
|
|
}: {
|
|
apiBalanceBreakdown: ApiBalanceBreakdownInput;
|
|
}): number | undefined => {
|
|
if (apiBalanceBreakdown.price?.billing_method === "usage_based") {
|
|
return apiBalanceBreakdown.price?.max_purchase ?? undefined;
|
|
}
|
|
|
|
return 0;
|
|
};
|
|
|
|
export const apiBalanceV1ToMaxOverage = ({
|
|
apiBalance,
|
|
}: {
|
|
apiBalance: ApiBalanceInput;
|
|
}): number | undefined => {
|
|
const breakdownItems = apiBalance.breakdown ?? [];
|
|
|
|
const availableOverages = breakdownItems.map((item) =>
|
|
apiBalanceBreakdownV1ToMaxOverage({ apiBalanceBreakdown: item }),
|
|
);
|
|
|
|
if (availableOverages.some((overage) => overage === undefined)) {
|
|
return undefined;
|
|
}
|
|
|
|
return sumValues(
|
|
availableOverages.filter((overage) => overage !== undefined),
|
|
);
|
|
};
|
|
|
|
export const apiBalanceV1ToAvailableOverage = ({
|
|
apiBalance,
|
|
}: {
|
|
apiBalance: ApiBalanceInput;
|
|
}): number | undefined => {
|
|
const maxOverage = apiBalanceV1ToMaxOverage({ apiBalance });
|
|
const overage = apiBalanceV1ToOverage({ apiBalance });
|
|
|
|
if (maxOverage === undefined) {
|
|
return undefined;
|
|
}
|
|
|
|
return Math.max(0, new Decimal(maxOverage).sub(overage).toNumber());
|
|
};
|