feat: dedicated Instance Settings modal with admin controls

Move instance-level administration out of Space Settings into its own
modal. Adds admin UI for instance name, registration toggle, and
discovery toggle. Streaming limits panel relocated from SpaceSettings.

- Add InstanceAdminSettings type and GET/PATCH /api/settings/instance
- Add registration_open DB column (nullable, env var fallback)
- Auth registration and instance info now check DB override
- New InstanceSettings modal with General and Streaming tabs
- Admin shield button in UserAreaPanel (visible to admins only)
- Remove Streaming tab from SpaceSettings
This commit is contained in:
Jannis Braun
2026-03-09 03:52:01 +01:00
parent 096251e5b0
commit 450df432b2
15 changed files with 575 additions and 239 deletions
+6
View File
@@ -26,6 +26,7 @@ import type {
Friend,
FriendRequest,
InstanceStreamingLimits,
InstanceAdminSettings,
InstanceInfoResponse,
VerifyPasswordResponse,
ExploreSpace,
@@ -112,6 +113,8 @@ export class BackspaceApiClient {
readonly settings: {
getStreaming: () => Promise<InstanceStreamingLimits>;
updateStreaming: (data: Partial<InstanceStreamingLimits>) => Promise<InstanceStreamingLimits>;
getInstance: () => Promise<InstanceAdminSettings>;
updateInstance: (data: Partial<InstanceAdminSettings>) => Promise<InstanceAdminSettings>;
};
readonly instance: {
@@ -300,6 +303,9 @@ export class BackspaceApiClient {
getStreaming: () => request<InstanceStreamingLimits>('GET', '/settings/streaming'),
updateStreaming: (data: Partial<InstanceStreamingLimits>) =>
request<InstanceStreamingLimits>('PATCH', '/settings/streaming', data),
getInstance: () => request<InstanceAdminSettings>('GET', '/settings/instance'),
updateInstance: (data: Partial<InstanceAdminSettings>) =>
request<InstanceAdminSettings>('PATCH', '/settings/instance', data),
};
this.instance = {