astro-ghostcms/packages/starlight-ghostcms/src/utils/api/content-api/schemas/tiers/tiers.ts

41 lines
1.1 KiB
TypeScript

import { ghostIdentitySchema, ghostVisibilitySchema } from "@ts-ghost/core-api";
import { z } from "astro/zod";
export const tiersSchema = z.object({
...ghostIdentitySchema.shape,
name: z.string(),
description: z.string().nullable(),
active: z.boolean(),
type: z.union([z.literal("free"), z.literal("paid")]),
welcome_page_url: z.string().nullable(),
created_at: z.string(),
updated_at: z.string().nullable(),
stripe_prices: z
.array(z.number())
.optional()
.transform((v) => (v?.length ? v : [])),
monthly_price: z
.number()
.nullable()
.optional()
.transform((v) => (v ? v : null)),
yearly_price: z
.number()
.nullable()
.optional()
.transform((v) => (v ? v : null)),
benefits: z.array(z.string()),
visibility: ghostVisibilitySchema,
currency: z.string().nullish(),
trial_days: z.number().default(0),
});
export type Tier = z.infer<typeof tiersSchema>;
export const tiersIncludeSchema = z.object({
monthly_price: z.literal(true).optional(),
yearly_price: z.literal(true).optional(),
benefits: z.literal(true).optional(),
});
export type TiersIncludeSchema = z.infer<typeof tiersIncludeSchema>;