import { apiFetch } from './client' import type { AdminRoom, AdminUser, AuditLogEntry, EventSubscriptionAdmin, SiteInvite, SmtpSettings, UploadSettings, WebhookIncomingAdmin, } from '../types' export function listAdminUsers(): Promise { return apiFetch('/api/admin/users') } export function deactivateUser(userId: string): Promise { return apiFetch(`/api/admin/users/${userId}/deactivate`, { method: 'POST' }) } export function reactivateUser(userId: string): Promise { return apiFetch(`/api/admin/users/${userId}/reactivate`, { method: 'POST' }) } export function resetUserPassword(userId: string, newPassword: string): Promise { return apiFetch(`/api/admin/users/${userId}/reset-password`, { method: 'POST', body: JSON.stringify({ new_password: newPassword }), }) } export function promoteUser(userId: string): Promise { return apiFetch(`/api/admin/users/${userId}/promote`, { method: 'POST' }) } export function demoteUser(userId: string): Promise { return apiFetch(`/api/admin/users/${userId}/demote`, { method: 'POST' }) } export function listAdminRooms(): Promise { return apiFetch('/api/admin/rooms') } export function archiveRoom(roomId: string): Promise { return apiFetch(`/api/admin/rooms/${roomId}/archive`, { method: 'POST' }) } export function unarchiveRoom(roomId: string): Promise { return apiFetch(`/api/admin/rooms/${roomId}/unarchive`, { method: 'POST' }) } export function transferOwnershipAdmin(roomId: string, newOwnerId: string): Promise { return apiFetch(`/api/admin/rooms/${roomId}/transfer-ownership`, { method: 'POST', body: JSON.stringify({ new_owner_id: newOwnerId }), }) } export function listAuditLog(limit = 50, offset = 0): Promise { return apiFetch(`/api/admin/audit-log?limit=${limit}&offset=${offset}`) } export function listAllIncomingWebhooks(): Promise { return apiFetch('/api/admin/webhooks/incoming') } export function listAllEventSubscriptions(): Promise { return apiFetch('/api/admin/event-subscriptions') } export function inviteUser(email: string): Promise { return apiFetch('/api/admin/invites', { method: 'POST', body: JSON.stringify({ email }), }) } export function listSiteInvites(): Promise { return apiFetch('/api/admin/invites') } export function revokeSiteInvite(inviteId: string): Promise { return apiFetch(`/api/admin/invites/${inviteId}`, { method: 'DELETE' }) } // #60: same invite row, not a new one -- a fresh token/expiry, and the old // link stops working the moment this is called (see the backend's own // resend_site_invite for why). export function resendSiteInvite(inviteId: string): Promise { return apiFetch(`/api/admin/invites/${inviteId}/resend`, { method: 'POST' }) } export function getSmtpSettings(): Promise { return apiFetch('/api/admin/settings/smtp') } export interface SmtpSettingsPayload { host: string port: number username?: string | null password?: string | null from_address: string use_tls: boolean } export function updateSmtpSettings(payload: SmtpSettingsPayload): Promise { return apiFetch('/api/admin/settings/smtp', { method: 'PUT', body: JSON.stringify(payload), }) } export function sendTestSmtpEmail(): Promise { return apiFetch('/api/admin/settings/smtp/test', { method: 'POST' }) } export function getUploadSettings(): Promise { return apiFetch('/api/admin/settings/uploads') } export function updateUploadSettings(maxUploadBytes: number): Promise { return apiFetch('/api/admin/settings/uploads', { method: 'PUT', body: JSON.stringify({ max_upload_bytes: maxUploadBytes }), }) }