admin.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { JsonValue } from '@shared/types'
  2. import { apiRequest } from './client'
  3. export interface ManagedUser {
  4. id: string
  5. username: string
  6. role: 'admin' | 'user'
  7. enabled: boolean
  8. mustChangePassword: boolean
  9. createdAt: number
  10. updatedAt: number
  11. }
  12. export async function listUsers(): Promise<ManagedUser[]> {
  13. const response = await apiRequest<{ items: ManagedUser[] }>('/api/app/admin/users')
  14. return response.items
  15. }
  16. export async function createUser(username: string, password: string): Promise<ManagedUser> {
  17. return apiRequest('/api/app/admin/users', {
  18. method: 'POST', body: { username, password } as unknown as JsonValue,
  19. })
  20. }
  21. export async function updateUser(id: string, input: { enabled?: boolean; password?: string }): Promise<ManagedUser> {
  22. return apiRequest(`/api/app/admin/users/${encodeURIComponent(id)}`, {
  23. method: 'PATCH', body: input as unknown as JsonValue,
  24. })
  25. }
  26. export async function deleteUser(id: string): Promise<void> {
  27. await apiRequest(`/api/app/admin/users/${encodeURIComponent(id)}`, { method: 'DELETE', body: {} })
  28. }
  29. export async function setUpstreamCredentials(username: string, password: string): Promise<void> {
  30. await apiRequest('/api/app/admin/upstream-credentials', {
  31. method: 'PUT', body: { username, password } as unknown as JsonValue,
  32. })
  33. }
  34. export interface UpstreamConnectionStatus {
  35. endpoint: string
  36. authMode: 'unknown' | 'loopback-token' | 'loopback-direct' | 'password'
  37. networkScope: 'local' | 'network'
  38. webNetworkScope: 'local' | 'network'
  39. ready: boolean
  40. error?: string
  41. lastVerifiedAt?: number
  42. }
  43. export function getUpstreamConnectionStatus(): Promise<UpstreamConnectionStatus> {
  44. return apiRequest('/api/app/admin/upstream-connection')
  45. }
  46. export interface AllowedHostsSettings {
  47. source: 'none' | 'file' | 'environment'
  48. hosts: string[]
  49. editableHosts: string[]
  50. environmentHosts: string[]
  51. configurationError?: string
  52. }
  53. export function getAllowedHostsSettings(): Promise<AllowedHostsSettings> {
  54. return apiRequest('/api/app/system/allowed-hosts')
  55. }
  56. export function saveAllowedHostsSettings(hosts: string[]): Promise<AllowedHostsSettings> {
  57. return apiRequest('/api/app/system/allowed-hosts', {
  58. method: 'PUT', body: { hosts } as unknown as JsonValue,
  59. })
  60. }