feat: add shared dashboard API contracts
This commit is contained in:
1 parent
939cf408a0
commit
59c3a61a88
14 files changed
+648
No files matched your search
@@ -0,0 +1,53 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const ToneKeySchema = z.union([
|
||||
z.literal('default'),
|
||||
z.literal('dominant'),
|
||||
z.literal('submissive'),
|
||||
z.literal('playful'),
|
||||
z.literal('direct'),
|
||||
z.literal('gentle'),
|
||||
z.literal('kink-friendly'),
|
||||
z.literal('teasing'),
|
||||
]);
|
||||
|
||||
export const RateLimitConfigSchema = z.strictObject({
|
||||
minDelayBetweenMessagesMs: z.number(),
|
||||
maxMessagesPerHour: z.number(),
|
||||
jitterMs: z.number(),
|
||||
});
|
||||
export const RuntimeRedditConfigSchema = z.strictObject({
|
||||
prioritizeRecentPosts: z.boolean(),
|
||||
recentWindowMinutes: z.number(),
|
||||
});
|
||||
export const RuntimeConfigSchema = z.strictObject({
|
||||
rateLimit: RateLimitConfigSchema,
|
||||
browser: z.strictObject({ dryRun: z.boolean() }),
|
||||
reddit: RuntimeRedditConfigSchema,
|
||||
});
|
||||
export const SubredditConfigSchema = z.strictObject({
|
||||
name: z.string(),
|
||||
type: z.union([z.literal('image'), z.literal('chat')]),
|
||||
weight: z.number().optional(),
|
||||
tone: ToneKeySchema,
|
||||
scripted: z.string().optional(),
|
||||
});
|
||||
export const ConfigResponseSchema = RuntimeConfigSchema.extend({
|
||||
subreddits: z.array(SubredditConfigSchema),
|
||||
tones: z.array(ToneKeySchema),
|
||||
});
|
||||
export const ConfigUpdateRequestSchema = z.strictObject({
|
||||
rateLimit: RateLimitConfigSchema.partial().optional(),
|
||||
browser: z.strictObject({ dryRun: z.boolean().optional() }).optional(),
|
||||
reddit: RuntimeRedditConfigSchema.partial().optional(),
|
||||
subreddits: z.array(SubredditConfigSchema).min(1).optional(),
|
||||
});
|
||||
export const ConfigUpdateResponseSchema = z.strictObject({
|
||||
success: z.literal(true),
|
||||
config: RuntimeConfigSchema,
|
||||
subreddits: z.array(SubredditConfigSchema),
|
||||
});
|
||||
|
||||
export type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
|
||||
export type ConfigResponse = z.infer<typeof ConfigResponseSchema>;
|
||||
export type ConfigUpdateRequest = z.infer<typeof ConfigUpdateRequestSchema>;
|
||||
Reference in new issue
Block a user