import type { JsonValue } from '@shared/types' import { apiRequest } from './client' export interface ManagedUser { id: string username: string role: 'admin' | 'user' enabled: boolean mustChangePassword: boolean createdAt: number updatedAt: number } export async function listUsers(): Promise { const response = await apiRequest<{ items: ManagedUser[] }>('/api/app/admin/users') return response.items } export async function createUser(username: string, password: string): Promise { return apiRequest('/api/app/admin/users', { method: 'POST', body: { username, password } as unknown as JsonValue, }) } export async function updateUser(id: string, input: { enabled?: boolean; password?: string }): Promise { return apiRequest(`/api/app/admin/users/${encodeURIComponent(id)}`, { method: 'PATCH', body: input as unknown as JsonValue, }) } export async function deleteUser(id: string): Promise { await apiRequest(`/api/app/admin/users/${encodeURIComponent(id)}`, { method: 'DELETE', body: {} }) } export async function setUpstreamCredentials(username: string, password: string): Promise { await apiRequest('/api/app/admin/upstream-credentials', { method: 'PUT', body: { username, password } as unknown as JsonValue, }) } export interface UpstreamConnectionStatus { endpoint: string authMode: 'unknown' | 'loopback-token' | 'loopback-direct' | 'password' networkScope: 'local' | 'network' webNetworkScope: 'local' | 'network' ready: boolean error?: string lastVerifiedAt?: number } export function getUpstreamConnectionStatus(): Promise { return apiRequest('/api/app/admin/upstream-connection') } export interface AllowedHostsSettings { source: 'none' | 'file' | 'environment' hosts: string[] editableHosts: string[] environmentHosts: string[] configurationError?: string } export function getAllowedHostsSettings(): Promise { return apiRequest('/api/app/system/allowed-hosts') } export function saveAllowedHostsSettings(hosts: string[]): Promise { return apiRequest('/api/app/system/allowed-hosts', { method: 'PUT', body: { hosts } as unknown as JsonValue, }) }