86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { ApiFeatureType } from "@api/features/apiFeature.js";
|
|
import { EntInterval } from "@models/productModels/entModels/entEnums.js";
|
|
import { z } from "zod/v4";
|
|
|
|
export const ApiCusRolloverSchema = z.object({
|
|
balance: z.number(),
|
|
expires_at: z.number(),
|
|
});
|
|
|
|
// OLD CUS FEATURE RESPONSE
|
|
|
|
// Version 2 of cus feature response
|
|
export const CusEntResponseSchema = z.object({
|
|
feature_id: z.string(),
|
|
interval: z.enum(EntInterval).nullish(),
|
|
interval_count: z.number().nullish(),
|
|
unlimited: z.boolean().nullish(),
|
|
balance: z.number().nullish(), //
|
|
usage: z.number().nullish(),
|
|
included_usage: z.number().nullish(),
|
|
next_reset_at: z.number().nullish(),
|
|
overage_allowed: z.boolean().nullish(),
|
|
usage_limit: z.number().nullish(),
|
|
rollovers: z.array(ApiCusRolloverSchema).nullish(),
|
|
});
|
|
|
|
// Version 3 of cus feature response
|
|
export const ApiCusFeatureBreakdownSchema = z.object({
|
|
interval: z.enum(EntInterval),
|
|
interval_count: z.number().nullish(),
|
|
balance: z.number().nullish(),
|
|
usage: z.number().nullish(),
|
|
included_usage: z.number().nullish(),
|
|
next_reset_at: z.number().nullish(),
|
|
});
|
|
|
|
export const CoreCusFeatureSchema = z.object({
|
|
interval: z.enum(EntInterval).or(z.literal("multiple")).nullish(),
|
|
interval_count: z.number().nullish(),
|
|
unlimited: z.boolean().nullish(),
|
|
balance: z.number().nullish(),
|
|
usage: z.number().nullish(),
|
|
included_usage: z.number().nullish(),
|
|
next_reset_at: z.number().nullish(),
|
|
overage_allowed: z.boolean().nullish(),
|
|
|
|
breakdown: z
|
|
.array(
|
|
z.object({
|
|
interval: z.enum(EntInterval),
|
|
interval_count: z.number().nullish(),
|
|
balance: z.number().nullish(),
|
|
usage: z.number().nullish(),
|
|
included_usage: z.number().nullish(),
|
|
next_reset_at: z.number().nullish(),
|
|
}),
|
|
)
|
|
.nullish(),
|
|
credit_schema: z
|
|
.array(
|
|
z.object({
|
|
feature_id: z.string(),
|
|
credit_amount: z.number(),
|
|
}),
|
|
)
|
|
.nullish(),
|
|
|
|
usage_limit: z.number().nullish(),
|
|
rollovers: z.array(ApiCusRolloverSchema).nullish(),
|
|
});
|
|
|
|
export const ApiCusFeatureSchema = z
|
|
.object({
|
|
id: z.string(),
|
|
type: z.enum(ApiFeatureType),
|
|
name: z.string().nullish(),
|
|
})
|
|
.extend(CoreCusFeatureSchema.shape);
|
|
|
|
export type CusEntResponse = z.infer<typeof CusEntResponseSchema>;
|
|
export type ApiCusFeature = z.infer<typeof ApiCusFeatureSchema>;
|
|
export type ApiCusRollover = z.infer<typeof ApiCusRolloverSchema>;
|
|
export type ApiCusFeatureBreakdown = z.infer<
|
|
typeof ApiCusFeatureBreakdownSchema
|
|
>;
|