pkgs/config/src/schema.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import z from "zod";
import { ENVIRONMENT, IS_PROD } from ".";
const discordSchema = z.object({
token: z.string(),
app_id: z.string(),
client_secret: z.string(),
server: z.object({
id: z.string(),
ticket_category: z.string(),
transcript_channel: z.string(),
}),
});
const dbSchema = z.discriminatedUnion("dialect", [
z.object({
dialect: z.literal("turso"),
url: z.string(),
auth: z.string(),
}),
z.object({
dialect: z.literal("sqlite"),
url: z.string(),
auth: z.string().optional(),
}),
]);
const robloxSchema = z.object({
apiKey: z.string(),
cookie: z.string(),
});
const apiSchema = z.object({
port: z.number().default(3000),
});
const s3Schema = z.object({
accessKeyId: z.string(),
secretAccessKey: z.string(),
bucket: z.string(),
endpoint: z.string().optional(),
region: z.string().optional(),
publicUrl: z.string().optional(),
});
const schema = z
.object({
discord: discordSchema,
db: dbSchema,
api: apiSchema,
s3: s3Schema,
roblox: robloxSchema,
})
.transform((config) => {
return {
...config,
environment: ENVIRONMENT,
isProd: IS_PROD,
};
});
export default schema;
export type Config = z.infer<typeof schema>;
|