@syncular/console 0.0.0 → 0.0.4-25

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.
Files changed (156) hide show
  1. package/dist/App.d.ts +14 -0
  2. package/dist/App.d.ts.map +1 -0
  3. package/dist/App.js +33 -0
  4. package/dist/App.js.map +1 -0
  5. package/dist/browser-main.d.ts +2 -0
  6. package/dist/browser-main.d.ts.map +1 -0
  7. package/dist/browser-main.js +9 -0
  8. package/dist/browser-main.js.map +1 -0
  9. package/dist/hooks/ConnectionContext.d.ts +30 -0
  10. package/dist/hooks/ConnectionContext.d.ts.map +1 -0
  11. package/dist/hooks/ConnectionContext.js +127 -0
  12. package/dist/hooks/ConnectionContext.js.map +1 -0
  13. package/dist/hooks/index.d.ts +10 -0
  14. package/dist/hooks/index.d.ts.map +1 -0
  15. package/dist/hooks/index.js +10 -0
  16. package/dist/hooks/index.js.map +1 -0
  17. package/dist/hooks/useConsoleApi.d.ts +152 -0
  18. package/dist/hooks/useConsoleApi.d.ts.map +1 -0
  19. package/dist/hooks/useConsoleApi.js +623 -0
  20. package/dist/hooks/useConsoleApi.js.map +1 -0
  21. package/dist/hooks/useInstanceContext.d.ts +9 -0
  22. package/dist/hooks/useInstanceContext.d.ts.map +1 -0
  23. package/dist/hooks/useInstanceContext.js +14 -0
  24. package/dist/hooks/useInstanceContext.js.map +1 -0
  25. package/dist/hooks/useLiveEvents.d.ts +33 -0
  26. package/dist/hooks/useLiveEvents.d.ts.map +1 -0
  27. package/dist/hooks/useLiveEvents.js +199 -0
  28. package/dist/hooks/useLiveEvents.js.map +1 -0
  29. package/dist/hooks/useLocalStorage.d.ts +2 -0
  30. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  31. package/dist/hooks/useLocalStorage.js +36 -0
  32. package/dist/hooks/useLocalStorage.js.map +1 -0
  33. package/dist/hooks/usePartitionContext.d.ts +9 -0
  34. package/dist/hooks/usePartitionContext.d.ts.map +1 -0
  35. package/dist/hooks/usePartitionContext.js +14 -0
  36. package/dist/hooks/usePartitionContext.js.map +1 -0
  37. package/dist/hooks/usePreferences.d.ts +35 -0
  38. package/dist/hooks/usePreferences.d.ts.map +1 -0
  39. package/dist/hooks/usePreferences.js +48 -0
  40. package/dist/hooks/usePreferences.js.map +1 -0
  41. package/dist/hooks/useRequestEvents.d.ts +7 -0
  42. package/dist/hooks/useRequestEvents.d.ts.map +1 -0
  43. package/dist/hooks/useRequestEvents.js +33 -0
  44. package/dist/hooks/useRequestEvents.js.map +1 -0
  45. package/dist/hooks/useTimeRange.d.ts +18 -0
  46. package/dist/hooks/useTimeRange.d.ts.map +1 -0
  47. package/dist/hooks/useTimeRange.js +18 -0
  48. package/dist/hooks/useTimeRange.js.map +1 -0
  49. package/dist/index.d.ts +10 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +10 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/layout.d.ts +6 -0
  54. package/dist/layout.d.ts.map +1 -0
  55. package/dist/layout.js +85 -0
  56. package/dist/layout.js.map +1 -0
  57. package/dist/lib/api.d.ts +11 -0
  58. package/dist/lib/api.d.ts.map +1 -0
  59. package/dist/lib/api.js +20 -0
  60. package/dist/lib/api.js.map +1 -0
  61. package/dist/lib/topology.d.ts +8 -0
  62. package/dist/lib/topology.d.ts.map +1 -0
  63. package/dist/lib/topology.js +76 -0
  64. package/dist/lib/topology.js.map +1 -0
  65. package/dist/lib/types.d.ts +194 -0
  66. package/dist/lib/types.d.ts.map +1 -0
  67. package/dist/lib/types.js +5 -0
  68. package/dist/lib/types.js.map +1 -0
  69. package/dist/mount.d.ts +10 -0
  70. package/dist/mount.d.ts.map +1 -0
  71. package/dist/mount.js +25 -0
  72. package/dist/mount.js.map +1 -0
  73. package/dist/pages/Command.d.ts +2 -0
  74. package/dist/pages/Command.d.ts.map +1 -0
  75. package/dist/pages/Command.js +215 -0
  76. package/dist/pages/Command.js.map +1 -0
  77. package/dist/pages/Config.d.ts +2 -0
  78. package/dist/pages/Config.d.ts.map +1 -0
  79. package/dist/pages/Config.js +504 -0
  80. package/dist/pages/Config.js.map +1 -0
  81. package/dist/pages/Fleet.d.ts +2 -0
  82. package/dist/pages/Fleet.d.ts.map +1 -0
  83. package/dist/pages/Fleet.js +126 -0
  84. package/dist/pages/Fleet.js.map +1 -0
  85. package/dist/pages/Ops.d.ts +2 -0
  86. package/dist/pages/Ops.d.ts.map +1 -0
  87. package/dist/pages/Ops.js +294 -0
  88. package/dist/pages/Ops.js.map +1 -0
  89. package/dist/pages/Stream.d.ts +6 -0
  90. package/dist/pages/Stream.d.ts.map +1 -0
  91. package/dist/pages/Stream.js +403 -0
  92. package/dist/pages/Stream.js.map +1 -0
  93. package/dist/pages/index.d.ts +6 -0
  94. package/dist/pages/index.d.ts.map +1 -0
  95. package/dist/pages/index.js +6 -0
  96. package/dist/pages/index.js.map +1 -0
  97. package/dist/routeTree.d.ts +2 -0
  98. package/dist/routeTree.d.ts.map +1 -0
  99. package/dist/routeTree.js +18 -0
  100. package/dist/routeTree.js.map +1 -0
  101. package/dist/routes/__root.d.ts +2 -0
  102. package/dist/routes/__root.d.ts.map +1 -0
  103. package/dist/routes/__root.js +6 -0
  104. package/dist/routes/__root.js.map +1 -0
  105. package/dist/routes/config.d.ts +2 -0
  106. package/dist/routes/config.d.ts.map +1 -0
  107. package/dist/routes/config.js +9 -0
  108. package/dist/routes/config.js.map +1 -0
  109. package/dist/routes/fleet.d.ts +2 -0
  110. package/dist/routes/fleet.d.ts.map +1 -0
  111. package/dist/routes/fleet.js +9 -0
  112. package/dist/routes/fleet.js.map +1 -0
  113. package/dist/routes/index.d.ts +2 -0
  114. package/dist/routes/index.d.ts.map +1 -0
  115. package/dist/routes/index.js +9 -0
  116. package/dist/routes/index.js.map +1 -0
  117. package/dist/routes/investigate-commit.d.ts +2 -0
  118. package/dist/routes/investigate-commit.d.ts.map +1 -0
  119. package/dist/routes/investigate-commit.js +14 -0
  120. package/dist/routes/investigate-commit.js.map +1 -0
  121. package/dist/routes/investigate-event.d.ts +2 -0
  122. package/dist/routes/investigate-event.d.ts.map +1 -0
  123. package/dist/routes/investigate-event.js +14 -0
  124. package/dist/routes/investigate-event.js.map +1 -0
  125. package/dist/routes/ops.d.ts +2 -0
  126. package/dist/routes/ops.d.ts.map +1 -0
  127. package/dist/routes/ops.js +9 -0
  128. package/dist/routes/ops.js.map +1 -0
  129. package/dist/routes/stream.d.ts +2 -0
  130. package/dist/routes/stream.d.ts.map +1 -0
  131. package/dist/routes/stream.js +9 -0
  132. package/dist/routes/stream.js.map +1 -0
  133. package/dist/runtime-config.d.ts +12 -0
  134. package/dist/runtime-config.d.ts.map +1 -0
  135. package/dist/runtime-config.js +35 -0
  136. package/dist/runtime-config.js.map +1 -0
  137. package/dist/sentry.d.ts +11 -0
  138. package/dist/sentry.d.ts.map +1 -0
  139. package/dist/sentry.js +60 -0
  140. package/dist/sentry.js.map +1 -0
  141. package/package.json +27 -7
  142. package/src/App.tsx +46 -25
  143. package/src/browser-main.tsx +10 -0
  144. package/src/index.ts +1 -0
  145. package/src/mount.tsx +6 -3
  146. package/src/runtime-config.ts +50 -0
  147. package/web-dist/apple-touch-icon.png +0 -0
  148. package/web-dist/chunk-7ayekhzx.css +1 -0
  149. package/web-dist/chunk-myppbvt5.js +90 -0
  150. package/web-dist/favicon-96x96.png +0 -0
  151. package/web-dist/favicon.ico +0 -0
  152. package/web-dist/favicon.svg +3 -0
  153. package/web-dist/index.html +19 -0
  154. package/web-dist/site.webmanifest +21 -0
  155. package/web-dist/web-app-manifest-192x192.png +0 -0
  156. 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,2 @@
1
+ export declare function Fleet(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=Fleet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fleet.d.ts","sourceRoot":"","sources":["../../src/pages/Fleet.tsx"],"names":[],"mappings":"AAqGA,wBAAgB,KAAK,4CA4IpB"}