@syncular/console 0.0.0 → 0.0.3-23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +14 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +33 -0
- package/dist/App.js.map +1 -0
- package/dist/browser-main.d.ts +2 -0
- package/dist/browser-main.d.ts.map +1 -0
- package/dist/browser-main.js +9 -0
- package/dist/browser-main.js.map +1 -0
- package/dist/hooks/ConnectionContext.d.ts +30 -0
- package/dist/hooks/ConnectionContext.d.ts.map +1 -0
- package/dist/hooks/ConnectionContext.js +127 -0
- package/dist/hooks/ConnectionContext.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useConsoleApi.d.ts +152 -0
- package/dist/hooks/useConsoleApi.d.ts.map +1 -0
- package/dist/hooks/useConsoleApi.js +623 -0
- package/dist/hooks/useConsoleApi.js.map +1 -0
- package/dist/hooks/useInstanceContext.d.ts +9 -0
- package/dist/hooks/useInstanceContext.d.ts.map +1 -0
- package/dist/hooks/useInstanceContext.js +14 -0
- package/dist/hooks/useInstanceContext.js.map +1 -0
- package/dist/hooks/useLiveEvents.d.ts +33 -0
- package/dist/hooks/useLiveEvents.d.ts.map +1 -0
- package/dist/hooks/useLiveEvents.js +199 -0
- package/dist/hooks/useLiveEvents.js.map +1 -0
- package/dist/hooks/useLocalStorage.d.ts +2 -0
- package/dist/hooks/useLocalStorage.d.ts.map +1 -0
- package/dist/hooks/useLocalStorage.js +36 -0
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/hooks/usePartitionContext.d.ts +9 -0
- package/dist/hooks/usePartitionContext.d.ts.map +1 -0
- package/dist/hooks/usePartitionContext.js +14 -0
- package/dist/hooks/usePartitionContext.js.map +1 -0
- package/dist/hooks/usePreferences.d.ts +35 -0
- package/dist/hooks/usePreferences.d.ts.map +1 -0
- package/dist/hooks/usePreferences.js +48 -0
- package/dist/hooks/usePreferences.js.map +1 -0
- package/dist/hooks/useRequestEvents.d.ts +7 -0
- package/dist/hooks/useRequestEvents.d.ts.map +1 -0
- package/dist/hooks/useRequestEvents.js +33 -0
- package/dist/hooks/useRequestEvents.js.map +1 -0
- package/dist/hooks/useTimeRange.d.ts +18 -0
- package/dist/hooks/useTimeRange.d.ts.map +1 -0
- package/dist/hooks/useTimeRange.js +18 -0
- package/dist/hooks/useTimeRange.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +6 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +85 -0
- package/dist/layout.js.map +1 -0
- package/dist/lib/api.d.ts +11 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +20 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/topology.d.ts +8 -0
- package/dist/lib/topology.d.ts.map +1 -0
- package/dist/lib/topology.js +76 -0
- package/dist/lib/topology.js.map +1 -0
- package/dist/lib/types.d.ts +194 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +5 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/mount.d.ts +10 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +25 -0
- package/dist/mount.js.map +1 -0
- package/dist/pages/Command.d.ts +2 -0
- package/dist/pages/Command.d.ts.map +1 -0
- package/dist/pages/Command.js +215 -0
- package/dist/pages/Command.js.map +1 -0
- package/dist/pages/Config.d.ts +2 -0
- package/dist/pages/Config.d.ts.map +1 -0
- package/dist/pages/Config.js +504 -0
- package/dist/pages/Config.js.map +1 -0
- package/dist/pages/Fleet.d.ts +2 -0
- package/dist/pages/Fleet.d.ts.map +1 -0
- package/dist/pages/Fleet.js +126 -0
- package/dist/pages/Fleet.js.map +1 -0
- package/dist/pages/Ops.d.ts +2 -0
- package/dist/pages/Ops.d.ts.map +1 -0
- package/dist/pages/Ops.js +294 -0
- package/dist/pages/Ops.js.map +1 -0
- package/dist/pages/Stream.d.ts +6 -0
- package/dist/pages/Stream.d.ts.map +1 -0
- package/dist/pages/Stream.js +403 -0
- package/dist/pages/Stream.js.map +1 -0
- package/dist/pages/index.d.ts +6 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +6 -0
- package/dist/pages/index.js.map +1 -0
- package/dist/routeTree.d.ts +2 -0
- package/dist/routeTree.d.ts.map +1 -0
- package/dist/routeTree.js +18 -0
- package/dist/routeTree.js.map +1 -0
- package/dist/routes/__root.d.ts +2 -0
- package/dist/routes/__root.d.ts.map +1 -0
- package/dist/routes/__root.js +6 -0
- package/dist/routes/__root.js.map +1 -0
- package/dist/routes/config.d.ts +2 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +9 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/fleet.d.ts +2 -0
- package/dist/routes/fleet.d.ts.map +1 -0
- package/dist/routes/fleet.js +9 -0
- package/dist/routes/fleet.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +9 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/investigate-commit.d.ts +2 -0
- package/dist/routes/investigate-commit.d.ts.map +1 -0
- package/dist/routes/investigate-commit.js +14 -0
- package/dist/routes/investigate-commit.js.map +1 -0
- package/dist/routes/investigate-event.d.ts +2 -0
- package/dist/routes/investigate-event.d.ts.map +1 -0
- package/dist/routes/investigate-event.js +14 -0
- package/dist/routes/investigate-event.js.map +1 -0
- package/dist/routes/ops.d.ts +2 -0
- package/dist/routes/ops.d.ts.map +1 -0
- package/dist/routes/ops.js +9 -0
- package/dist/routes/ops.js.map +1 -0
- package/dist/routes/stream.d.ts +2 -0
- package/dist/routes/stream.d.ts.map +1 -0
- package/dist/routes/stream.js +9 -0
- package/dist/routes/stream.js.map +1 -0
- package/dist/runtime-config.d.ts +12 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +35 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/sentry.d.ts +11 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +60 -0
- package/dist/sentry.js.map +1 -0
- package/package.json +27 -7
- package/src/App.tsx +46 -25
- package/src/browser-main.tsx +10 -0
- package/src/index.ts +1 -0
- package/src/mount.tsx +6 -3
- package/src/runtime-config.ts +50 -0
- package/web-dist/apple-touch-icon.png +0 -0
- package/web-dist/chunk-7ayekhzx.css +1 -0
- package/web-dist/chunk-xrafhx03.js +90 -0
- package/web-dist/favicon-96x96.png +0 -0
- package/web-dist/favicon.ico +0 -0
- package/web-dist/favicon.svg +3 -0
- package/web-dist/index.html +19 -0
- package/web-dist/site.webmanifest +21 -0
- package/web-dist/web-app-manifest-192x192.png +0 -0
- package/web-dist/web-app-manifest-512x512.png +0 -0
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, AlertDescription, Badge, Button, Checkbox, ConnectionForm, Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, EmptyState, Field, FieldDescription, FieldLabel, Input, PreferencesPanel, SectionCard, Spinner, Switch, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, ToggleGroup, ToggleGroupItem, } from '@syncular/ui';
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { PAGE_SIZE_OPTIONS, REFRESH_INTERVAL_OPTIONS, useApiKeys, useBulkRevokeApiKeysMutation, useCreateApiKeyMutation, useLocalStorage, usePreferences, useRevokeApiKeyMutation, useRotateApiKeyMutation, useStageRotateApiKeyMutation, } from '../hooks/index.js';
|
|
5
|
+
import { useConnection } from '../hooks/ConnectionContext.js';
|
|
6
|
+
export function Config() {
|
|
7
|
+
return (_jsxs("div", { className: "space-y-4 px-5 py-5", children: [
|
|
8
|
+
_jsx(ConnectionTab, {}), _jsx(ApiKeysTab, {}), _jsx(PreferencesTab, {})
|
|
9
|
+
] }));
|
|
10
|
+
}
|
|
11
|
+
function ConnectionTab() {
|
|
12
|
+
const { clearError, config, connect, disconnect, error, isConnected, isConnecting, } = useConnection();
|
|
13
|
+
const [serverUrl, setServerUrl] = useState(config?.serverUrl ?? '/api');
|
|
14
|
+
const [token, setToken] = useState(config?.token ?? '');
|
|
15
|
+
const [testLatency, setTestLatency] = useState(null);
|
|
16
|
+
const [isTesting, setIsTesting] = useState(false);
|
|
17
|
+
const [connectMessage, setConnectMessage] = useState(null);
|
|
18
|
+
const [clearSavedConfigOnDisconnect, setClearSavedConfigOnDisconnect] = useLocalStorage('console:disconnect-clear-saved-config', false);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const params = new URLSearchParams(window.location.search);
|
|
21
|
+
const urlToken = params.get('token');
|
|
22
|
+
const urlServer = params.get('server');
|
|
23
|
+
if (urlToken) {
|
|
24
|
+
setToken(urlToken);
|
|
25
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
26
|
+
}
|
|
27
|
+
if (urlServer) {
|
|
28
|
+
setServerUrl(urlServer);
|
|
29
|
+
}
|
|
30
|
+
}, []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (config?.serverUrl) {
|
|
33
|
+
setServerUrl(config.serverUrl);
|
|
34
|
+
}
|
|
35
|
+
if (config?.token) {
|
|
36
|
+
setToken(config.token);
|
|
37
|
+
}
|
|
38
|
+
}, [config?.serverUrl, config?.token]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
setConnectMessage(null);
|
|
41
|
+
}, []);
|
|
42
|
+
const handleSaveAndConnect = async () => {
|
|
43
|
+
clearError();
|
|
44
|
+
setTestLatency(null);
|
|
45
|
+
const ok = await connect({
|
|
46
|
+
serverUrl: serverUrl.trim(),
|
|
47
|
+
token: token.trim(),
|
|
48
|
+
}, { persistOverride: true });
|
|
49
|
+
setConnectMessage(ok
|
|
50
|
+
? 'Connected successfully and configuration saved.'
|
|
51
|
+
: 'Failed to connect with the provided settings.');
|
|
52
|
+
};
|
|
53
|
+
const handleDisconnect = () => {
|
|
54
|
+
disconnect({ clearSavedConfig: clearSavedConfigOnDisconnect });
|
|
55
|
+
if (clearSavedConfigOnDisconnect) {
|
|
56
|
+
setServerUrl('/api');
|
|
57
|
+
setToken('');
|
|
58
|
+
}
|
|
59
|
+
setConnectMessage(clearSavedConfigOnDisconnect
|
|
60
|
+
? 'Disconnected and saved credentials cleared.'
|
|
61
|
+
: 'Disconnected.');
|
|
62
|
+
setTestLatency(null);
|
|
63
|
+
};
|
|
64
|
+
const handleTestConnection = async () => {
|
|
65
|
+
setIsTesting(true);
|
|
66
|
+
setTestLatency(null);
|
|
67
|
+
setConnectMessage(null);
|
|
68
|
+
const start = performance.now();
|
|
69
|
+
try {
|
|
70
|
+
const targetServerUrl = serverUrl.trim();
|
|
71
|
+
const targetToken = token.trim();
|
|
72
|
+
if (!targetServerUrl || !targetToken) {
|
|
73
|
+
throw new Error('Missing server URL or token');
|
|
74
|
+
}
|
|
75
|
+
const response = await fetch(`${targetServerUrl}/console/stats`, {
|
|
76
|
+
headers: { Authorization: `Bearer ${targetToken}` },
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error('Failed to connect');
|
|
80
|
+
}
|
|
81
|
+
setTestLatency(Math.round(performance.now() - start));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
setTestLatency(-1);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
setIsTesting(false);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const statusMessage = error ??
|
|
91
|
+
connectMessage ??
|
|
92
|
+
(testLatency !== null
|
|
93
|
+
? testLatency < 0
|
|
94
|
+
? 'Connection failed'
|
|
95
|
+
: `Connection successful (${testLatency}ms latency)`
|
|
96
|
+
: undefined);
|
|
97
|
+
return (_jsx(ConnectionForm, { isConnected: isConnected, isConnecting: isConnecting, isTestingConnection: isTesting, serverUrl: serverUrl, onServerUrlChange: setServerUrl, consoleToken: token, onConsoleTokenChange: setToken, onSaveAndConnect: handleSaveAndConnect, onDisconnect: handleDisconnect, onTestConnection: handleTestConnection, statusMessage: statusMessage, children: _jsx("div", { className: "px-5 pb-5 -mt-2", children: _jsxs("div", { className: "flex items-center justify-between rounded-md border border-border px-3 py-2", children: [
|
|
98
|
+
_jsxs("div", { children: [
|
|
99
|
+
_jsx("p", { className: "font-mono text-[10px] text-neutral-400", children: "Clear saved credentials on disconnect" }), _jsx("p", { className: "font-mono text-[9px] text-neutral-500", children: "Removes stored server URL and token from this browser." })
|
|
100
|
+
] }), _jsx(Switch, { checked: clearSavedConfigOnDisconnect, onCheckedChange: setClearSavedConfigOnDisconnect })
|
|
101
|
+
] }) }) }));
|
|
102
|
+
}
|
|
103
|
+
const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
104
|
+
function parsePositiveInteger(value) {
|
|
105
|
+
const normalized = value.trim();
|
|
106
|
+
if (!normalized)
|
|
107
|
+
return null;
|
|
108
|
+
const parsed = Number.parseInt(normalized, 10);
|
|
109
|
+
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
110
|
+
return null;
|
|
111
|
+
return parsed;
|
|
112
|
+
}
|
|
113
|
+
function formatOptionalDateTime(iso) {
|
|
114
|
+
if (!iso)
|
|
115
|
+
return 'Never';
|
|
116
|
+
const timestamp = Date.parse(iso);
|
|
117
|
+
if (!Number.isFinite(timestamp))
|
|
118
|
+
return 'Invalid date';
|
|
119
|
+
return new Date(timestamp).toLocaleString();
|
|
120
|
+
}
|
|
121
|
+
function summarizeScopeKeys(scopeKeys) {
|
|
122
|
+
if (scopeKeys.length === 0)
|
|
123
|
+
return 'all scopes';
|
|
124
|
+
if (scopeKeys.length <= 2)
|
|
125
|
+
return scopeKeys.join(', ');
|
|
126
|
+
return `${scopeKeys.slice(0, 2).join(', ')} +${scopeKeys.length - 2}`;
|
|
127
|
+
}
|
|
128
|
+
function getApiKeyLifecycleStatus(apiKey, expiringWindowDays) {
|
|
129
|
+
if (apiKey.revokedAt)
|
|
130
|
+
return 'revoked';
|
|
131
|
+
if (!apiKey.expiresAt)
|
|
132
|
+
return 'active';
|
|
133
|
+
const expiresAtMs = Date.parse(apiKey.expiresAt);
|
|
134
|
+
if (!Number.isFinite(expiresAtMs))
|
|
135
|
+
return 'active';
|
|
136
|
+
const nowMs = Date.now();
|
|
137
|
+
if (expiresAtMs <= nowMs)
|
|
138
|
+
return 'expired';
|
|
139
|
+
if (expiresAtMs <= nowMs + expiringWindowDays * MILLISECONDS_PER_DAY) {
|
|
140
|
+
return 'expiring';
|
|
141
|
+
}
|
|
142
|
+
return 'active';
|
|
143
|
+
}
|
|
144
|
+
function getApiKeyStatusBadgeVariant(status) {
|
|
145
|
+
if (status === 'revoked')
|
|
146
|
+
return 'destructive';
|
|
147
|
+
if (status === 'expired')
|
|
148
|
+
return 'offline';
|
|
149
|
+
if (status === 'expiring')
|
|
150
|
+
return 'syncing';
|
|
151
|
+
return 'healthy';
|
|
152
|
+
}
|
|
153
|
+
function ApiKeysTab() {
|
|
154
|
+
const [apiKeyTypeFilter, setApiKeyTypeFilter] = useState('all');
|
|
155
|
+
const [apiKeyStatusFilter, setApiKeyStatusFilter] = useState('all');
|
|
156
|
+
const [expiringWithinDaysInput, setExpiringWithinDaysInput] = useState('14');
|
|
157
|
+
const [showCreateDialog, setShowCreateDialog] = useState(false);
|
|
158
|
+
const [showBulkRevokeDialog, setShowBulkRevokeDialog] = useState(false);
|
|
159
|
+
const [newKeyName, setNewKeyName] = useState('');
|
|
160
|
+
const [newKeyType, setNewKeyType] = useState('relay');
|
|
161
|
+
const [newKeyActorId, setNewKeyActorId] = useState('');
|
|
162
|
+
const [newKeyScopeKeys, setNewKeyScopeKeys] = useState('');
|
|
163
|
+
const [newKeyExpiresInDays, setNewKeyExpiresInDays] = useState('');
|
|
164
|
+
const [createdSecretKey, setCreatedSecretKey] = useState(null);
|
|
165
|
+
const [selectedKeyIds, setSelectedKeyIds] = useState([]);
|
|
166
|
+
const [bulkRevokeResult, setBulkRevokeResult] = useState(null);
|
|
167
|
+
const [copiedKeyId, setCopiedKeyId] = useState(null);
|
|
168
|
+
const [revokingKeyId, setRevokingKeyId] = useState(null);
|
|
169
|
+
const [stagingRotateKey, setStagingRotateKey] = useState(null);
|
|
170
|
+
const [stagedRotateResult, setStagedRotateResult] = useState(null);
|
|
171
|
+
const [rotatingKeyId, setRotatingKeyId] = useState(null);
|
|
172
|
+
const [rotatedSecretKey, setRotatedSecretKey] = useState(null);
|
|
173
|
+
const parsedExpiringWithinDays = useMemo(() => parsePositiveInteger(expiringWithinDaysInput), [expiringWithinDaysInput]);
|
|
174
|
+
const effectiveExpiringWithinDays = parsedExpiringWithinDays ?? 14;
|
|
175
|
+
const parsedNewKeyExpiresInDays = useMemo(() => parsePositiveInteger(newKeyExpiresInDays), [newKeyExpiresInDays]);
|
|
176
|
+
const hasNewKeyExpiry = newKeyExpiresInDays.trim().length > 0;
|
|
177
|
+
const isNewKeyExpiryValid = !hasNewKeyExpiry || parsedNewKeyExpiresInDays !== null;
|
|
178
|
+
const apiKeyQuery = useMemo(() => ({
|
|
179
|
+
type: apiKeyTypeFilter === 'all' ? undefined : apiKeyTypeFilter,
|
|
180
|
+
status: apiKeyStatusFilter === 'all' ? undefined : apiKeyStatusFilter,
|
|
181
|
+
expiresWithinDays: apiKeyStatusFilter === 'expiring'
|
|
182
|
+
? effectiveExpiringWithinDays
|
|
183
|
+
: undefined,
|
|
184
|
+
}), [apiKeyTypeFilter, apiKeyStatusFilter, effectiveExpiringWithinDays]);
|
|
185
|
+
const { data, isLoading, error } = useApiKeys(apiKeyQuery);
|
|
186
|
+
const createMutation = useCreateApiKeyMutation();
|
|
187
|
+
const bulkRevokeMutation = useBulkRevokeApiKeysMutation();
|
|
188
|
+
const revokeMutation = useRevokeApiKeyMutation();
|
|
189
|
+
const rotateMutation = useRotateApiKeyMutation();
|
|
190
|
+
const stageRotateMutation = useStageRotateApiKeyMutation();
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
const visibleKeyIds = new Set((data?.items ?? []).map((apiKey) => apiKey.keyId));
|
|
193
|
+
setSelectedKeyIds((current) => current.filter((keyId) => visibleKeyIds.has(keyId)));
|
|
194
|
+
}, [data?.items]);
|
|
195
|
+
const handleCreate = async () => {
|
|
196
|
+
try {
|
|
197
|
+
const parsedScopeKeys = newKeyScopeKeys
|
|
198
|
+
.split(',')
|
|
199
|
+
.map((scope) => scope.trim())
|
|
200
|
+
.filter((scope) => scope.length > 0);
|
|
201
|
+
const result = await createMutation.mutateAsync({
|
|
202
|
+
name: newKeyName,
|
|
203
|
+
keyType: newKeyType,
|
|
204
|
+
actorId: newKeyActorId || undefined,
|
|
205
|
+
scopeKeys: parsedScopeKeys.length > 0 ? parsedScopeKeys : undefined,
|
|
206
|
+
expiresInDays: hasNewKeyExpiry
|
|
207
|
+
? (parsedNewKeyExpiresInDays ?? undefined)
|
|
208
|
+
: undefined,
|
|
209
|
+
});
|
|
210
|
+
setCreatedSecretKey(result.secretKey);
|
|
211
|
+
setNewKeyName('');
|
|
212
|
+
setNewKeyActorId('');
|
|
213
|
+
setNewKeyScopeKeys('');
|
|
214
|
+
setNewKeyExpiresInDays('');
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// handled by mutation state
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
const handleCopyKey = (key) => {
|
|
221
|
+
navigator.clipboard.writeText(key);
|
|
222
|
+
setCopiedKeyId(key);
|
|
223
|
+
setTimeout(() => setCopiedKeyId(null), 2000);
|
|
224
|
+
};
|
|
225
|
+
const handleRevoke = async () => {
|
|
226
|
+
if (!revokingKeyId)
|
|
227
|
+
return;
|
|
228
|
+
try {
|
|
229
|
+
await revokeMutation.mutateAsync(revokingKeyId);
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
setRevokingKeyId(null);
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
const handleBulkRevoke = async () => {
|
|
236
|
+
if (selectedKeyIds.length === 0)
|
|
237
|
+
return;
|
|
238
|
+
try {
|
|
239
|
+
const result = await bulkRevokeMutation.mutateAsync({
|
|
240
|
+
keyIds: selectedKeyIds,
|
|
241
|
+
});
|
|
242
|
+
setBulkRevokeResult(result);
|
|
243
|
+
setSelectedKeyIds([]);
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// handled by mutation state
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
const handleStageRotate = async () => {
|
|
250
|
+
if (!stagingRotateKey)
|
|
251
|
+
return;
|
|
252
|
+
try {
|
|
253
|
+
const result = await stageRotateMutation.mutateAsync(stagingRotateKey.keyId);
|
|
254
|
+
setStagedRotateResult({
|
|
255
|
+
oldKeyId: stagingRotateKey.keyId,
|
|
256
|
+
oldKeyName: stagingRotateKey.name,
|
|
257
|
+
secretKey: result.secretKey,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// handled by mutation state
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
const handleFinalizeStagedRotate = async () => {
|
|
265
|
+
if (!stagedRotateResult)
|
|
266
|
+
return;
|
|
267
|
+
try {
|
|
268
|
+
await revokeMutation.mutateAsync(stagedRotateResult.oldKeyId);
|
|
269
|
+
}
|
|
270
|
+
finally {
|
|
271
|
+
setStagedRotateResult(null);
|
|
272
|
+
setStagingRotateKey(null);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
const handleRotate = async () => {
|
|
276
|
+
if (!rotatingKeyId)
|
|
277
|
+
return;
|
|
278
|
+
try {
|
|
279
|
+
const result = await rotateMutation.mutateAsync(rotatingKeyId);
|
|
280
|
+
setRotatedSecretKey(result.secretKey);
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
setRotatingKeyId(null);
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
if (isLoading) {
|
|
287
|
+
return (_jsx("div", { className: "flex h-[200px] items-center justify-center", children: _jsx(Spinner, { size: "lg" }) }));
|
|
288
|
+
}
|
|
289
|
+
if (error) {
|
|
290
|
+
return (_jsx("div", { className: "flex h-[200px] items-center justify-center", children: _jsxs("p", { className: "text-danger", children: ["Failed to load API keys: ", error.message] }) }));
|
|
291
|
+
}
|
|
292
|
+
const selectableKeyIds = (data?.items ?? [])
|
|
293
|
+
.filter((apiKey) => apiKey.revokedAt === null)
|
|
294
|
+
.map((apiKey) => apiKey.keyId);
|
|
295
|
+
const allSelectableChecked = selectableKeyIds.length > 0 &&
|
|
296
|
+
selectableKeyIds.every((keyId) => selectedKeyIds.includes(keyId));
|
|
297
|
+
const someSelectableChecked = selectedKeyIds.length > 0;
|
|
298
|
+
const selectedKeyNames = (data?.items ?? [])
|
|
299
|
+
.filter((apiKey) => selectedKeyIds.includes(apiKey.keyId))
|
|
300
|
+
.map((apiKey) => apiKey.name);
|
|
301
|
+
return (_jsxs(_Fragment, { children: [
|
|
302
|
+
_jsxs(SectionCard, { title: "API Keys", description: "Issue, rotate, revoke, and audit key lifecycle state.", actions: _jsxs("div", { className: "flex items-center gap-2", children: [
|
|
303
|
+
_jsxs(Button, { size: "sm", variant: "destructive", onClick: () => setShowBulkRevokeDialog(true), disabled: selectedKeyIds.length === 0, children: ["Revoke Selected (", selectedKeyIds.length, ")"] }), _jsx(Button, { size: "sm", onClick: () => setShowCreateDialog(true), children: "Create Key" })
|
|
304
|
+
] }), children: [
|
|
305
|
+
_jsxs("div", { className: "mb-4 grid gap-3 lg:grid-cols-3", children: [
|
|
306
|
+
_jsxs(Field, { children: [
|
|
307
|
+
_jsx(FieldLabel, { children: "Type filter" }), _jsxs(ToggleGroup, { value: [apiKeyTypeFilter], multiple: false, onValueChange: (nextValues) => {
|
|
308
|
+
const nextValue = nextValues.find((value) => typeof value === 'string');
|
|
309
|
+
if (nextValue === 'all' ||
|
|
310
|
+
nextValue === 'relay' ||
|
|
311
|
+
nextValue === 'proxy' ||
|
|
312
|
+
nextValue === 'admin') {
|
|
313
|
+
setApiKeyTypeFilter(nextValue);
|
|
314
|
+
}
|
|
315
|
+
}, children: [
|
|
316
|
+
_jsx(ToggleGroupItem, { value: "all", children: "all" }), _jsx(ToggleGroupItem, { value: "relay", children: "relay" }), _jsx(ToggleGroupItem, { value: "proxy", children: "proxy" }), _jsx(ToggleGroupItem, { value: "admin", children: "admin" })
|
|
317
|
+
] })
|
|
318
|
+
] }), _jsxs(Field, { children: [
|
|
319
|
+
_jsx(FieldLabel, { children: "Status filter" }), _jsxs(ToggleGroup, { value: [apiKeyStatusFilter], multiple: false, onValueChange: (nextValues) => {
|
|
320
|
+
const nextValue = nextValues.find((value) => typeof value === 'string');
|
|
321
|
+
if (nextValue === 'all' ||
|
|
322
|
+
nextValue === 'active' ||
|
|
323
|
+
nextValue === 'revoked' ||
|
|
324
|
+
nextValue === 'expiring') {
|
|
325
|
+
setApiKeyStatusFilter(nextValue);
|
|
326
|
+
}
|
|
327
|
+
}, children: [
|
|
328
|
+
_jsx(ToggleGroupItem, { value: "all", children: "all" }), _jsx(ToggleGroupItem, { value: "active", children: "active" }), _jsx(ToggleGroupItem, { value: "revoked", children: "revoked" }), _jsx(ToggleGroupItem, { value: "expiring", children: "expiring" })
|
|
329
|
+
] })
|
|
330
|
+
] }), _jsxs(Field, { children: [
|
|
331
|
+
_jsx(FieldLabel, { htmlFor: "api-key-expiring-window", children: "Expiring window (days)" }), _jsx(FieldDescription, { children: "Used when status filter is set to expiring." }), _jsx(Input, { id: "api-key-expiring-window", placeholder: "14", value: expiringWithinDaysInput, inputMode: "numeric", onChange: (event) => setExpiringWithinDaysInput(event.target.value) }), parsedExpiringWithinDays === null &&
|
|
332
|
+
expiringWithinDaysInput.trim().length > 0 ? (_jsx("p", { className: "font-mono text-[10px] text-offline", children: "Enter a positive whole number." })) : null] })
|
|
333
|
+
] }), data?.items.length === 0 ? (_jsx(EmptyState, { message: "No API keys match the current filters." })) : (_jsxs(Table, { children: [
|
|
334
|
+
_jsx(TableHeader, { children: _jsxs(TableRow, { children: [
|
|
335
|
+
_jsx(TableHead, { children: _jsx(Checkbox, { checked: allSelectableChecked, indeterminate: !allSelectableChecked &&
|
|
336
|
+
someSelectableChecked &&
|
|
337
|
+
selectableKeyIds.length > 0, onCheckedChange: (checked) => {
|
|
338
|
+
if (checked) {
|
|
339
|
+
setSelectedKeyIds(selectableKeyIds);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
setSelectedKeyIds([]);
|
|
343
|
+
}
|
|
344
|
+
}, "aria-label": "Select all active keys" }) }), _jsx(TableHead, { children: "NAME" }), _jsx(TableHead, { children: "TYPE" }), _jsx(TableHead, { children: "KEY PREFIX" }), _jsx(TableHead, { children: "ACTOR" }), _jsx(TableHead, { children: "SCOPES" }), _jsx(TableHead, { children: "CREATED" }), _jsx(TableHead, { children: "LAST USED" }), _jsx(TableHead, { children: "EXPIRES" }), _jsx(TableHead, { children: "STATUS" }), _jsx(TableHead, { children: "ACTIONS" })
|
|
345
|
+
] }) }), _jsx(TableBody, { children: (data?.items ?? []).map((apiKey) => {
|
|
346
|
+
const lifecycleStatus = getApiKeyLifecycleStatus(apiKey, effectiveExpiringWithinDays);
|
|
347
|
+
return (_jsxs(TableRow, { children: [
|
|
348
|
+
_jsx(TableCell, { children: _jsx(Checkbox, { checked: selectedKeyIds.includes(apiKey.keyId), onCheckedChange: (checked) => {
|
|
349
|
+
setSelectedKeyIds((current) => checked
|
|
350
|
+
? [...new Set([...current, apiKey.keyId])]
|
|
351
|
+
: current.filter((keyId) => keyId !== apiKey.keyId));
|
|
352
|
+
}, "aria-label": `Select ${apiKey.name}`, disabled: apiKey.revokedAt !== null }) }), _jsx(TableCell, { className: "font-medium", children: apiKey.name }), _jsx(TableCell, { children: _jsx(Badge, { variant: apiKey.keyType === 'admin'
|
|
353
|
+
? 'flow'
|
|
354
|
+
: apiKey.keyType === 'proxy'
|
|
355
|
+
? 'ghost'
|
|
356
|
+
: 'relay', children: apiKey.keyType }) }), _jsx(TableCell, { children: _jsxs("code", { className: "font-mono text-[11px]", children: [apiKey.keyPrefix, "..."] }) }), _jsx(TableCell, { className: "text-neutral-500", children: apiKey.actorId ?? '-' }), _jsx(TableCell, { className: "max-w-[220px] text-neutral-500", children: _jsx("code", { className: "font-mono text-[10px]", children: summarizeScopeKeys(apiKey.scopeKeys) }) }), _jsx(TableCell, { className: "text-neutral-500", children: formatOptionalDateTime(apiKey.createdAt) }), _jsx(TableCell, { className: "text-neutral-500", children: formatOptionalDateTime(apiKey.lastUsedAt) }), _jsx(TableCell, { className: "text-neutral-500", children: formatOptionalDateTime(apiKey.expiresAt) }), _jsx(TableCell, { children: _jsx(Badge, { variant: getApiKeyStatusBadgeVariant(lifecycleStatus), children: lifecycleStatus }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-1", children: [
|
|
357
|
+
_jsx(Button, { variant: "default", size: "sm", onClick: () => setStagingRotateKey(apiKey), disabled: apiKey.revokedAt !== null, children: "Stage" }), _jsx(Button, { variant: "default", size: "sm", onClick: () => setRotatingKeyId(apiKey.keyId), disabled: apiKey.revokedAt !== null, children: "Rotate" }), _jsx(Button, { variant: "destructive", size: "sm", onClick: () => setRevokingKeyId(apiKey.keyId), disabled: apiKey.revokedAt !== null, children: "Revoke" })
|
|
358
|
+
] }) })
|
|
359
|
+
] }, apiKey.keyId));
|
|
360
|
+
}) })
|
|
361
|
+
] }))] }), _jsx(Dialog, { open: showCreateDialog, onOpenChange: setShowCreateDialog, children: _jsxs(DialogContent, { children: [
|
|
362
|
+
_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Create API Key" }) }), createdSecretKey ? (_jsx(SecretKeyReveal, { copiedKeyId: copiedKeyId, onClose: () => {
|
|
363
|
+
setCreatedSecretKey(null);
|
|
364
|
+
setShowCreateDialog(false);
|
|
365
|
+
}, onCopy: handleCopyKey, secretKey: createdSecretKey, warning: "Copy this key now. You will not be able to view it again." })) : (_jsxs("div", { className: "px-5 py-4 flex flex-col gap-4", children: [
|
|
366
|
+
_jsxs(Field, { children: [
|
|
367
|
+
_jsx(FieldLabel, { htmlFor: "api-key-name", children: "Name" }), _jsx(Input, { id: "api-key-name", placeholder: "Backend Relay Key", value: newKeyName, onChange: (event) => setNewKeyName(event.target.value) })
|
|
368
|
+
] }), _jsxs(Field, { children: [
|
|
369
|
+
_jsx(FieldLabel, { children: "Key type" }), _jsxs(ToggleGroup, { value: [newKeyType], multiple: false, onValueChange: (nextValues) => {
|
|
370
|
+
const nextValue = nextValues.find((value) => typeof value === 'string');
|
|
371
|
+
if (nextValue === 'relay' ||
|
|
372
|
+
nextValue === 'proxy' ||
|
|
373
|
+
nextValue === 'admin') {
|
|
374
|
+
setNewKeyType(nextValue);
|
|
375
|
+
}
|
|
376
|
+
}, children: [
|
|
377
|
+
_jsx(ToggleGroupItem, { value: "relay", children: "relay" }), _jsx(ToggleGroupItem, { value: "proxy", children: "proxy" }), _jsx(ToggleGroupItem, { value: "admin", children: "admin" })
|
|
378
|
+
] })
|
|
379
|
+
] }), _jsxs(Field, { children: [
|
|
380
|
+
_jsx(FieldLabel, { htmlFor: "api-key-actor-id", children: "Actor ID (optional)" }), _jsx(FieldDescription, { children: "Pin this key to a fixed actor ID" }), _jsx(Input, { id: "api-key-actor-id", placeholder: "actor-123", value: newKeyActorId, onChange: (event) => setNewKeyActorId(event.target.value) })
|
|
381
|
+
] }), _jsxs(Field, { children: [
|
|
382
|
+
_jsx(FieldLabel, { htmlFor: "api-key-scope-keys", children: "Scope keys (optional)" }), _jsx(FieldDescription, { children: "Comma-separated list of allowed scope keys" }), _jsx(Input, { id: "api-key-scope-keys", placeholder: "scope-a, scope-b", value: newKeyScopeKeys, onChange: (event) => setNewKeyScopeKeys(event.target.value) })
|
|
383
|
+
] }), _jsxs(Field, { children: [
|
|
384
|
+
_jsx(FieldLabel, { htmlFor: "api-key-expires-days", children: "Expires in days (optional)" }), _jsx(FieldDescription, { children: "Leave empty to keep the key non-expiring." }), _jsx(Input, { id: "api-key-expires-days", placeholder: "30", value: newKeyExpiresInDays, inputMode: "numeric", onChange: (event) => setNewKeyExpiresInDays(event.target.value) }), !isNewKeyExpiryValid ? (_jsx("p", { className: "font-mono text-[10px] text-offline", children: "Enter a positive whole number." })) : null] }), _jsxs(DialogFooter, { children: [
|
|
385
|
+
_jsx(Button, { variant: "default", onClick: () => setShowCreateDialog(false), children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleCreate, disabled: createMutation.isPending ||
|
|
386
|
+
!newKeyName ||
|
|
387
|
+
!isNewKeyExpiryValid, children: createMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
388
|
+
_jsx(Spinner, { size: "sm" }),
|
|
389
|
+
"Creating..."] })) : ('Create') })
|
|
390
|
+
] })
|
|
391
|
+
] }))] }) }), _jsx(Dialog, { open: showBulkRevokeDialog, onOpenChange: (open) => {
|
|
392
|
+
setShowBulkRevokeDialog(open);
|
|
393
|
+
if (!open) {
|
|
394
|
+
setBulkRevokeResult(null);
|
|
395
|
+
}
|
|
396
|
+
}, children: _jsxs(DialogContent, { children: [
|
|
397
|
+
_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Bulk Revoke API Keys" }) }), bulkRevokeResult ? (_jsxs("div", { className: "px-5 py-4 flex flex-col gap-3", children: [
|
|
398
|
+
_jsx(Alert, { variant: "destructive", children: _jsxs(AlertDescription, { children: ["Requested ", bulkRevokeResult.requestedCount, " keys. Revoked", ' ', bulkRevokeResult.revokedCount, ", already revoked", ' ', bulkRevokeResult.alreadyRevokedCount, ", not found", ' ', bulkRevokeResult.notFoundCount, "."] }) }), _jsx(DialogFooter, { children: _jsx(Button, { variant: "primary", onClick: () => {
|
|
399
|
+
setShowBulkRevokeDialog(false);
|
|
400
|
+
setBulkRevokeResult(null);
|
|
401
|
+
}, children: "Done" }) })
|
|
402
|
+
] })) : (_jsxs(_Fragment, { children: [
|
|
403
|
+
_jsxs("div", { className: "px-5 py-4 flex flex-col gap-3", children: [
|
|
404
|
+
_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: "This revokes selected keys immediately and cannot be undone." }) }), _jsxs("p", { className: "font-mono text-[10px] text-neutral-500", children: ["Selected keys: ", selectedKeyNames.slice(0, 5).join(', '), selectedKeyNames.length > 5
|
|
405
|
+
? ` +${selectedKeyNames.length - 5} more`
|
|
406
|
+
: ''] })
|
|
407
|
+
] }), _jsxs(DialogFooter, { children: [
|
|
408
|
+
_jsx(Button, { variant: "default", onClick: () => setShowBulkRevokeDialog(false), children: "Cancel" }), _jsx(Button, { variant: "destructive", onClick: handleBulkRevoke, disabled: bulkRevokeMutation.isPending || selectedKeyIds.length === 0, children: bulkRevokeMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
409
|
+
_jsx(Spinner, { size: "sm" }),
|
|
410
|
+
"Revoking..."] })) : ('Revoke Selected') })
|
|
411
|
+
] })
|
|
412
|
+
] }))] }) }), _jsx(Dialog, { open: stagingRotateKey !== null || stagedRotateResult !== null, onOpenChange: () => {
|
|
413
|
+
setStagingRotateKey(null);
|
|
414
|
+
setStagedRotateResult(null);
|
|
415
|
+
}, children: _jsxs(DialogContent, { children: [
|
|
416
|
+
_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Stage Rotate API Key" }) }), stagedRotateResult ? (_jsxs("div", { className: "px-5 py-4 flex flex-col gap-4", children: [
|
|
417
|
+
_jsx(Alert, { variant: "default", children: _jsxs(AlertDescription, { children: ["Replacement key created for ", stagedRotateResult.oldKeyName, ". The old key is still active until you revoke it."] }) }), _jsxs("div", { className: "flex items-center gap-2", children: [
|
|
418
|
+
_jsx("code", { className: "flex-1 rounded-md border border-border bg-surface p-3 font-mono text-[11px] text-white break-all", children: stagedRotateResult.secretKey }), _jsx(Button, { variant: "default", size: "sm", onClick: () => handleCopyKey(stagedRotateResult.secretKey), children: copiedKeyId === stagedRotateResult.secretKey
|
|
419
|
+
? 'Copied'
|
|
420
|
+
: 'Copy' })
|
|
421
|
+
] }), _jsxs(DialogFooter, { children: [
|
|
422
|
+
_jsx(Button, { variant: "default", onClick: () => {
|
|
423
|
+
setStagedRotateResult(null);
|
|
424
|
+
setStagingRotateKey(null);
|
|
425
|
+
}, children: "Keep Old Key Active" }), _jsx(Button, { variant: "destructive", onClick: handleFinalizeStagedRotate, disabled: revokeMutation.isPending, children: revokeMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
426
|
+
_jsx(Spinner, { size: "sm" }),
|
|
427
|
+
"Revoking Old Key..."] })) : ('Finalize and Revoke Old Key') })
|
|
428
|
+
] })
|
|
429
|
+
] })) : (_jsxs(_Fragment, { children: [
|
|
430
|
+
_jsx("div", { className: "px-5 py-4", children: _jsx("p", { className: "font-mono text-[10px] text-neutral-500", children: "Staged rotation creates a replacement key now and keeps the current key active until you explicitly revoke it." }) }), _jsxs(DialogFooter, { children: [
|
|
431
|
+
_jsx(Button, { variant: "default", onClick: () => setStagingRotateKey(null), children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleStageRotate, disabled: stageRotateMutation.isPending || !stagingRotateKey, children: stageRotateMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
432
|
+
_jsx(Spinner, { size: "sm" }),
|
|
433
|
+
"Staging..."] })) : ('Create Replacement Key') })
|
|
434
|
+
] })
|
|
435
|
+
] }))] }) }), _jsx(Dialog, { open: revokingKeyId !== null, onOpenChange: () => setRevokingKeyId(null), children: _jsxs(DialogContent, { children: [
|
|
436
|
+
_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Revoke API Key" }) }), _jsx("div", { className: "px-5 py-4", children: _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: "Revoking a key immediately invalidates it for all requests." }) }) }), _jsxs(DialogFooter, { children: [
|
|
437
|
+
_jsx(Button, { variant: "default", onClick: () => setRevokingKeyId(null), children: "Cancel" }), _jsx(Button, { variant: "destructive", onClick: handleRevoke, disabled: revokeMutation.isPending, children: revokeMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
438
|
+
_jsx(Spinner, { size: "sm" }),
|
|
439
|
+
"Revoking..."] })) : ('Revoke') })
|
|
440
|
+
] })
|
|
441
|
+
] }) }), _jsx(Dialog, { open: rotatingKeyId !== null || rotatedSecretKey !== null, onOpenChange: () => {
|
|
442
|
+
setRotatingKeyId(null);
|
|
443
|
+
setRotatedSecretKey(null);
|
|
444
|
+
}, children: _jsxs(DialogContent, { children: [
|
|
445
|
+
_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Rotate API Key" }) }), rotatedSecretKey ? (_jsx(SecretKeyReveal, { copiedKeyId: copiedKeyId, onClose: () => setRotatedSecretKey(null), onCopy: handleCopyKey, secretKey: rotatedSecretKey, warning: "The previous key has been invalidated. Store this replacement securely." })) : (_jsxs(_Fragment, { children: [
|
|
446
|
+
_jsx("div", { className: "px-5 py-4", children: _jsx("p", { className: "font-mono text-[10px] text-neutral-500", children: "Rotating a key invalidates the previous secret immediately." }) }), _jsxs(DialogFooter, { children: [
|
|
447
|
+
_jsx(Button, { variant: "default", onClick: () => setRotatingKeyId(null), children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleRotate, disabled: rotateMutation.isPending, children: rotateMutation.isPending ? (_jsxs(_Fragment, { children: [
|
|
448
|
+
_jsx(Spinner, { size: "sm" }),
|
|
449
|
+
"Rotating..."] })) : ('Rotate') })
|
|
450
|
+
] })
|
|
451
|
+
] }))] }) })
|
|
452
|
+
] }));
|
|
453
|
+
}
|
|
454
|
+
function PreferencesTab() {
|
|
455
|
+
const { preferences, updatePreference, resetPreferences } = usePreferences();
|
|
456
|
+
const rows = [
|
|
457
|
+
{
|
|
458
|
+
type: 'filter',
|
|
459
|
+
label: 'Auto-refresh interval',
|
|
460
|
+
options: REFRESH_INTERVAL_OPTIONS.map((o) => ({
|
|
461
|
+
id: `${o.value}`,
|
|
462
|
+
label: o.label,
|
|
463
|
+
})),
|
|
464
|
+
activeId: `${preferences.refreshInterval}`,
|
|
465
|
+
onActiveChange: (id) => updatePreference('refreshInterval', Number.parseInt(id, 10)),
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
type: 'filter',
|
|
469
|
+
label: 'Items per page',
|
|
470
|
+
options: PAGE_SIZE_OPTIONS.map((o) => ({
|
|
471
|
+
id: `${o.value}`,
|
|
472
|
+
label: o.label,
|
|
473
|
+
})),
|
|
474
|
+
activeId: `${preferences.pageSize}`,
|
|
475
|
+
onActiveChange: (id) => updatePreference('pageSize', Number.parseInt(id, 10)),
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
type: 'filter',
|
|
479
|
+
label: 'Time format',
|
|
480
|
+
options: [
|
|
481
|
+
{ id: 'relative', label: 'Relative' },
|
|
482
|
+
{ id: 'absolute', label: 'Absolute' },
|
|
483
|
+
],
|
|
484
|
+
activeId: preferences.timeFormat,
|
|
485
|
+
onActiveChange: (id) => updatePreference('timeFormat', id),
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
type: 'toggle',
|
|
489
|
+
label: 'Show sparklines',
|
|
490
|
+
description: 'Display mini trend charts in dashboard metric cards',
|
|
491
|
+
checked: preferences.showSparklines,
|
|
492
|
+
onCheckedChange: (checked) => updatePreference('showSparklines', checked),
|
|
493
|
+
},
|
|
494
|
+
];
|
|
495
|
+
return _jsx(PreferencesPanel, { rows: rows, onResetDefaults: resetPreferences });
|
|
496
|
+
}
|
|
497
|
+
function SecretKeyReveal({ copiedKeyId, onClose, onCopy, secretKey, warning, }) {
|
|
498
|
+
return (_jsxs("div", { className: "px-5 py-4 flex flex-col gap-4", children: [
|
|
499
|
+
_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: warning }) }), _jsxs("div", { className: "flex items-center gap-2", children: [
|
|
500
|
+
_jsx("code", { className: "flex-1 rounded-md border border-border bg-surface p-3 font-mono text-[11px] text-white break-all", children: secretKey }), _jsx(Button, { variant: "default", size: "sm", onClick: () => onCopy(secretKey), children: copiedKeyId === secretKey ? 'Copied' : 'Copy' })
|
|
501
|
+
] }), _jsx(DialogFooter, { children: _jsx(Button, { variant: "primary", onClick: onClose, children: "Done" }) })
|
|
502
|
+
] }));
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=Config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/pages/Config.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fleet.d.ts","sourceRoot":"","sources":["../../src/pages/Fleet.tsx"],"names":[],"mappings":"AAqGA,wBAAgB,KAAK,4CA4IpB"}
|