Barazo AppView backend
barazo.forum
1import { z } from 'zod'
2
3// ---------------------------------------------------------------------------
4// Trust seed schemas
5// ---------------------------------------------------------------------------
6
7export const trustSeedCreateSchema = z.object({
8 did: z.string().min(1),
9 communityId: z.string().optional(),
10 reason: z.string().max(500).optional(),
11})
12
13export const trustSeedQuerySchema = z.object({
14 cursor: z.string().optional(),
15 limit: z.coerce.number().int().min(1).max(100).default(25),
16})
17
18// ---------------------------------------------------------------------------
19// Sybil cluster schemas
20// ---------------------------------------------------------------------------
21
22export const clusterQuerySchema = z.object({
23 status: z.enum(['flagged', 'dismissed', 'monitoring', 'banned']).optional(),
24 cursor: z.string().optional(),
25 limit: z.coerce.number().int().min(1).max(100).default(25),
26 sort: z.enum(['detected_at', 'member_count', 'confidence']).optional(),
27})
28
29export const clusterStatusUpdateSchema = z.object({
30 status: z.enum(['dismissed', 'monitoring', 'banned']),
31})
32
33// ---------------------------------------------------------------------------
34// PDS trust factor schemas
35// ---------------------------------------------------------------------------
36
37export const pdsTrustUpdateSchema = z.object({
38 pdsHost: z
39 .string()
40 .min(1)
41 .max(253)
42 .regex(
43 /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,
44 'Must be a valid hostname'
45 ),
46 trustFactor: z.number().min(0.0).max(1.0),
47})
48
49export const pdsTrustQuerySchema = z.object({
50 cursor: z.string().optional(),
51 limit: z.coerce.number().int().min(1).max(100).default(25),
52})
53
54// ---------------------------------------------------------------------------
55// Behavioral flag schemas
56// ---------------------------------------------------------------------------
57
58export const behavioralFlagUpdateSchema = z.object({
59 status: z.enum(['dismissed', 'action_taken']),
60})
61
62export const behavioralFlagQuerySchema = z.object({
63 flagType: z.enum(['burst_voting', 'content_similarity', 'low_diversity']).optional(),
64 status: z.enum(['pending', 'dismissed', 'action_taken']).optional(),
65 cursor: z.string().optional(),
66 limit: z.coerce.number().int().min(1).max(100).default(25),
67})