File size: 1,335 Bytes
98fbc6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { z } from 'zod';

/**
 * Admin API contract for /api/admin (admin-only).
 *
 * The admin service validates most bodies itself (returning {error,status}), so
 * these schemas pin the well-defined ones: user create/update, the permission
 * matrix, invites and the boolean feature toggles. Free-form bodies (OIDC
 * settings, addon config, default user settings) stay with the service.
 */
export const adminUserCreateRequestSchema = z.object({
  email: z.string(),
  password: z.string().optional(),
  username: z.string().optional(),
  role: z.enum(['user', 'admin']).optional(),
});
export type AdminUserCreateRequest = z.infer<
  typeof adminUserCreateRequestSchema
>;

export const adminPermissionsRequestSchema = z.object({
  permissions: z.record(z.string(), z.unknown()),
});
export type AdminPermissionsRequest = z.infer<
  typeof adminPermissionsRequestSchema
>;

export const adminInviteCreateRequestSchema = z.object({
  max_uses: z.number().optional(),
  expires_in_days: z.number().optional(),
  role: z.enum(['user', 'admin']).optional(),
});
export type AdminInviteCreateRequest = z.infer<
  typeof adminInviteCreateRequestSchema
>;

export const adminFeatureToggleRequestSchema = z.object({
  enabled: z.boolean(),
});
export type AdminFeatureToggleRequest = z.infer<
  typeof adminFeatureToggleRequestSchema
>;