import { z } from 'zod';
/**
* Configuration schema using Zod for validation
*/
/**
* Environment configuration schema
*/
export const envConfigSchema = z.object({
// Late API Configuration (REQUIRED)
LATE_API_KEY: z.string().min(1, 'LATE_API_KEY is required'),
LATE_PROFILE_ID: z.string().min(1, 'LATE_PROFILE_ID is required'),
LATE_INSTAGRAM_ACCOUNT_ID: z.string().min(1, 'LATE_INSTAGRAM_ACCOUNT_ID is required'),
LATE_PINTEREST_ACCOUNT_ID: z.string().min(1, 'LATE_PINTEREST_ACCOUNT_ID is required'),
// OpenAI API (optional)
OPENAI_API_KEY: z.string().optional(),
// Content Settings
INSTAGRAM_USERNAME: z.string().min(1, 'INSTAGRAM_USERNAME is required'),
// Instagram Collaborators (optional, max 3)
INSTAGRAM_COLLABORATORS: z.string().optional(),
// CDN Configuration (optional)
CDN_BASE_URL: z.string().url().optional().or(z.literal('')),
// Scheduling
TIMEZONE: z.string().default('UTC'),
DEFAULT_PUBLISH_TIME: z.string().regex(/^\d{2}:\d{2}$/, 'DEFAULT_PUBLISH_TIME must be in HH:MM format').default('18:00'),
// Development Mode
DEV_MODE: z.string().optional(),
NODE_ENV: z.enum(['development', 'production', 'test']).optional(),
});
/**
* Parsed configuration type
*/
export type EnvConfig = z.infer<typeof envConfigSchema>;
/**
* Configuration with defaults applied
*/
export interface AppConfig {
// Late API
lateApi: {
key: string;
profileId: string;
instagramAccountId: string;
pinterestAccountId: string;
};
// OpenAI
openai?: {
apiKey: string;
};
// Content
content: {
instagramUsername: string;
instagramCollaborators: string[];
};
// CDN
cdn?: {
baseUrl: string;
};
// Scheduling
scheduling: {
timezone: string;
defaultPublishTime: {
hour: number;
minute: number;
};
};
// Development
dev: {
isDevMode: boolean;
nodeEnv: string;
};
}