@gravito/zenith 1.1.3 → 1.1.6

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 (70) hide show
  1. package/README.md +28 -10
  2. package/dist/bin.js +43235 -76691
  3. package/dist/client/index.html +13 -0
  4. package/dist/server/index.js +43235 -76691
  5. package/package.json +16 -7
  6. package/CHANGELOG.md +0 -62
  7. package/Dockerfile +0 -46
  8. package/Dockerfile.demo-worker +0 -29
  9. package/bin/flux-console.ts +0 -2
  10. package/doc/ECOSYSTEM_EXPANSION_RFC.md +0 -130
  11. package/docker-compose.yml +0 -40
  12. package/docs/ALERTING_GUIDE.md +0 -71
  13. package/docs/DEPLOYMENT.md +0 -157
  14. package/docs/DOCS_INTERNAL.md +0 -73
  15. package/docs/LARAVEL_ZENITH_ROADMAP.md +0 -109
  16. package/docs/QUASAR_MASTER_PLAN.md +0 -140
  17. package/docs/QUICK_TEST_GUIDE.md +0 -72
  18. package/docs/ROADMAP.md +0 -85
  19. package/docs/integrations/LARAVEL.md +0 -207
  20. package/postcss.config.js +0 -6
  21. package/scripts/debug_redis_keys.ts +0 -24
  22. package/scripts/flood-logs.ts +0 -21
  23. package/scripts/seed.ts +0 -213
  24. package/scripts/verify-throttle.ts +0 -49
  25. package/scripts/worker.ts +0 -124
  26. package/specs/PULSE_SPEC.md +0 -86
  27. package/src/bin.ts +0 -6
  28. package/src/client/App.tsx +0 -72
  29. package/src/client/Layout.tsx +0 -669
  30. package/src/client/Sidebar.tsx +0 -112
  31. package/src/client/ThroughputChart.tsx +0 -158
  32. package/src/client/WorkerStatus.tsx +0 -202
  33. package/src/client/components/BrandIcons.tsx +0 -168
  34. package/src/client/components/ConfirmDialog.tsx +0 -134
  35. package/src/client/components/JobInspector.tsx +0 -487
  36. package/src/client/components/LogArchiveModal.tsx +0 -432
  37. package/src/client/components/NotificationBell.tsx +0 -212
  38. package/src/client/components/PageHeader.tsx +0 -47
  39. package/src/client/components/Toaster.tsx +0 -90
  40. package/src/client/components/UserProfileDropdown.tsx +0 -186
  41. package/src/client/contexts/AuthContext.tsx +0 -105
  42. package/src/client/contexts/NotificationContext.tsx +0 -128
  43. package/src/client/index.css +0 -172
  44. package/src/client/main.tsx +0 -15
  45. package/src/client/pages/LoginPage.tsx +0 -164
  46. package/src/client/pages/MetricsPage.tsx +0 -445
  47. package/src/client/pages/OverviewPage.tsx +0 -519
  48. package/src/client/pages/PulsePage.tsx +0 -409
  49. package/src/client/pages/QueuesPage.tsx +0 -378
  50. package/src/client/pages/SchedulesPage.tsx +0 -535
  51. package/src/client/pages/SettingsPage.tsx +0 -1001
  52. package/src/client/pages/WorkersPage.tsx +0 -380
  53. package/src/client/pages/index.ts +0 -8
  54. package/src/client/utils.ts +0 -15
  55. package/src/server/config/ServerConfigManager.ts +0 -90
  56. package/src/server/index.ts +0 -860
  57. package/src/server/middleware/auth.ts +0 -127
  58. package/src/server/services/AlertService.ts +0 -321
  59. package/src/server/services/CommandService.ts +0 -136
  60. package/src/server/services/LogStreamProcessor.ts +0 -93
  61. package/src/server/services/MaintenanceScheduler.ts +0 -78
  62. package/src/server/services/PulseService.ts +0 -148
  63. package/src/server/services/QueueMetricsCollector.ts +0 -138
  64. package/src/server/services/QueueService.ts +0 -924
  65. package/src/shared/types.ts +0 -223
  66. package/tailwind.config.js +0 -80
  67. package/tests/placeholder.test.ts +0 -7
  68. package/tsconfig.json +0 -29
  69. package/tsconfig.node.json +0 -10
  70. package/vite.config.ts +0 -27
@@ -1,172 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @import url("https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Poppins:wght@400;500;600;700;800;900&display=swap");
6
-
7
- @layer base {
8
- :root {
9
- --background: 0 0% 100%;
10
- --foreground: 224 71.4% 4.1%;
11
- --card: 0 0% 100%;
12
- --card-foreground: 224 71.4% 4.1%;
13
- --popover: 0 0% 100%;
14
- --popover-foreground: 224 71.4% 4.1%;
15
- --primary: 238.7 83.5% 66.7%;
16
- /* Indigo 500 */
17
- --primary-foreground: 210 20% 98%;
18
- --secondary: 220 14.3% 95.9%;
19
- --secondary-foreground: 238.7 83.5% 66.7%;
20
- --muted: 220 14.3% 95.9%;
21
- --muted-foreground: 220 8.9% 46.1%;
22
- --accent: 220 14.3% 95.9%;
23
- --accent-foreground: 238.7 83.5% 66.7%;
24
- --destructive: 0 84.2% 60.2%;
25
- --destructive-foreground: 210 20% 98%;
26
- --border: 220 13% 91%;
27
- --input: 220 13% 91%;
28
- --ring: 238.7 83.5% 66.7%;
29
- --radius: 1.25rem;
30
- }
31
-
32
- .dark {
33
- --background: 240 10% 3.9%;
34
- --foreground: 0 0% 98%;
35
- --card: 240 10% 3.9%;
36
- --card-foreground: 0 0% 98%;
37
- --popover: 240 10% 3.9%;
38
- --popover-foreground: 0 0% 98%;
39
- --primary: 180 100% 50%; /* Electric Cyan */
40
- --primary-foreground: 240 5.9% 10%;
41
- --secondary: 240 3.7% 15.9%;
42
- --secondary-foreground: 0 0% 98%;
43
- --muted: 240 3.7% 10%;
44
- --muted-foreground: 240 5% 64.9%;
45
- --accent: 240 3.7% 15.9%;
46
- --accent-foreground: 0 0% 98%;
47
- --destructive: 0 62.8% 30.6%;
48
- --destructive-foreground: 0 0% 98%;
49
- --border: 240 3.7% 15.9%;
50
- --input: 240 3.7% 15.9%;
51
- --ring: 180 100% 50%;
52
- }
53
- }
54
-
55
- @layer base {
56
- * {
57
- @apply border-border;
58
- }
59
-
60
- body {
61
- @apply bg-background text-foreground antialiased;
62
- font-feature-settings: "ss01", "ss02", "cv01", "cv02", "cv03";
63
- }
64
-
65
- .dark body {
66
- background-image:
67
- radial-gradient(at 50% 0%, hsla(238, 83%, 66%, 0.05) 0%, transparent 50%),
68
- radial-gradient(at 100% 100%, hsla(238, 83%, 66%, 0.02) 0%, transparent 50%);
69
- background-attachment: fixed;
70
- }
71
- }
72
-
73
- @layer utilities {
74
- .scrollbar-thin::-webkit-scrollbar {
75
- width: 6px;
76
- height: 6px;
77
- }
78
-
79
- .scrollbar-thin::-webkit-scrollbar-track {
80
- background: transparent;
81
- }
82
-
83
- .scrollbar-thin::-webkit-scrollbar-thumb {
84
- @apply bg-muted-foreground/20 rounded-full hover:bg-muted-foreground/40 transition-colors;
85
- }
86
-
87
- .glass {
88
- @apply bg-card/60 backdrop-blur-xl border-white/10;
89
- }
90
-
91
- .scanline {
92
- position: relative;
93
- overflow: hidden;
94
- }
95
-
96
- .scanline::after {
97
- content: " ";
98
- display: block;
99
- position: absolute;
100
- top: 0;
101
- left: 0;
102
- right: 0;
103
- bottom: 0;
104
- background: linear-gradient(to bottom, transparent 50%, rgba(var(--primary), 0.02) 50%);
105
- background-size: 100% 4px;
106
- z-index: 2;
107
- pointer-events: none;
108
- animation: scanline-move 10s linear infinite;
109
- }
110
-
111
- @keyframes scanline-move {
112
- 0% {
113
- background-position: 0 0;
114
- }
115
-
116
- 100% {
117
- background-position: 0 100%;
118
- }
119
- }
120
-
121
- .glow-pulse {
122
- animation: glow-pulse 2.5s ease-in-out infinite;
123
- }
124
-
125
- @keyframes glow-pulse {
126
- 0%,
127
- 100% {
128
- opacity: 0.3;
129
- transform: scale(1);
130
- filter: blur(2px);
131
- }
132
-
133
- 50% {
134
- opacity: 0.7;
135
- transform: scale(1.5);
136
- filter: blur(4px);
137
- }
138
- }
139
-
140
- .card-premium {
141
- @apply bg-card border border-border/50 shadow-sm transition-all duration-300;
142
- }
143
-
144
- .dark .card-premium {
145
- @apply bg-zinc-900/40 backdrop-blur-xl border-white/5;
146
- box-shadow: 0 4px 30px rgba(0, 0, 0, 0.8);
147
- }
148
-
149
- .dark .card-premium:hover {
150
- @apply border-primary/20 bg-zinc-900/60;
151
- box-shadow: 0 8px 40px rgba(0, 240, 255, 0.05);
152
- }
153
- }
154
-
155
- .animate-in {
156
- animation-duration: 400ms;
157
- animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
158
- fill-mode: forwards;
159
- }
160
-
161
- @keyframes toast-progress {
162
- from {
163
- transform: scaleX(1);
164
- }
165
- to {
166
- transform: scaleX(0);
167
- }
168
- }
169
-
170
- .animate-toast-progress {
171
- animation: toast-progress 5s linear forwards;
172
- }
@@ -1,15 +0,0 @@
1
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2
- import React from 'react'
3
- import ReactDOM from 'react-dom/client'
4
- import App from './App'
5
- import './index.css'
6
-
7
- const queryClient = new QueryClient()
8
-
9
- ReactDOM.createRoot(document.getElementById('root')!).render(
10
- <React.StrictMode>
11
- <QueryClientProvider client={queryClient}>
12
- <App />
13
- </QueryClientProvider>
14
- </React.StrictMode>
15
- )
@@ -1,164 +0,0 @@
1
- import { motion } from 'framer-motion'
2
- import { Activity, AlertCircle, ArrowRight, Eye, EyeOff, Lock } from 'lucide-react'
3
- import { useState } from 'react'
4
- import { useAuth } from '../contexts/AuthContext'
5
- import { cn } from '../utils'
6
-
7
- /**
8
- * The login page for the Zenith dashboard.
9
- *
10
- * Provides a secure, password-protected entry point to the administration
11
- * console with modern UI effects and smooth animations.
12
- *
13
- * @public
14
- * @since 3.0.0
15
- */
16
- export function LoginPage() {
17
- const { login } = useAuth()
18
- const [password, setPassword] = useState('')
19
- const [showPassword, setShowPassword] = useState(false)
20
- const [error, setError] = useState('')
21
- const [isLoading, setIsLoading] = useState(false)
22
-
23
- const handleSubmit = async (e: React.FormEvent) => {
24
- e.preventDefault()
25
- setError('')
26
- setIsLoading(true)
27
-
28
- const result = await login(password)
29
-
30
- if (!result.success) {
31
- setError(result.error || 'Authentication failed')
32
- setIsLoading(false)
33
- }
34
- }
35
-
36
- return (
37
- <div className="min-h-screen bg-background flex items-center justify-center p-4 relative overflow-hidden">
38
- {/* Background Effects */}
39
- <div className="absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-indigo-500/5" />
40
- <div className="absolute top-1/4 -left-1/4 w-96 h-96 bg-primary/10 rounded-full blur-3xl animate-pulse" />
41
- <div
42
- className="absolute bottom-1/4 -right-1/4 w-96 h-96 bg-indigo-500/10 rounded-full blur-3xl animate-pulse"
43
- style={{ animationDelay: '1s' }}
44
- />
45
-
46
- {/* Grid Pattern */}
47
- <div className="absolute inset-0 bg-[linear-gradient(rgba(var(--primary-rgb),0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(var(--primary-rgb),0.03)_1px,transparent_1px)] bg-[size:64px_64px]" />
48
-
49
- <motion.div
50
- initial={{ opacity: 0, y: 20 }}
51
- animate={{ opacity: 1, y: 0 }}
52
- transition={{ duration: 0.5 }}
53
- className="relative z-10 w-full max-w-md"
54
- >
55
- {/* Logo & Title */}
56
- <div className="text-center mb-8 font-heading">
57
- <motion.div
58
- initial={{ scale: 0 }}
59
- animate={{ scale: 1 }}
60
- transition={{ type: 'spring', delay: 0.2 }}
61
- className="inline-flex items-center justify-center w-24 h-24 bg-primary rounded-3xl shadow-[0_0_40px_rgba(0,240,255,0.2)] mb-8"
62
- >
63
- <Activity size={48} className="text-black" />
64
- </motion.div>
65
- <h1 className="text-5xl font-black tracking-tighter mb-2 text-white italic uppercase">
66
- ZENITH
67
- </h1>
68
- <p className="text-[10px] font-black text-primary uppercase tracking-[0.5em] ml-1">
69
- Quantum Control Plane
70
- </p>
71
- </div>
72
-
73
- {/* Login Card */}
74
- <div className="card-premium p-10 backdrop-blur-2xl bg-zinc-900/40 border-white/5">
75
- <div className="text-center mb-10">
76
- <h2 className="text-xl font-black text-white uppercase tracking-tight font-heading">
77
- Secure Access
78
- </h2>
79
- <p className="text-xs text-muted-foreground mt-2 font-bold uppercase tracking-widest opacity-60">
80
- Biometric or Password verification required
81
- </p>
82
- </div>
83
-
84
- <form onSubmit={handleSubmit} className="space-y-8 font-heading">
85
- {/* Error Message */}
86
- {error && (
87
- <motion.div
88
- initial={{ opacity: 0, y: -10 }}
89
- animate={{ opacity: 1, y: 0 }}
90
- className="flex items-center gap-3 p-4 bg-red-500/10 border border-red-500/20 rounded-xl text-red-500"
91
- >
92
- <AlertCircle size={18} />
93
- <span className="text-[11px] font-black uppercase tracking-widest">{error}</span>
94
- </motion.div>
95
- )}
96
-
97
- {/* Password Field */}
98
- <div className="space-y-3">
99
- <label
100
- htmlFor="password"
101
- className="text-[10px] font-black text-muted-foreground uppercase tracking-[0.2em] ml-1"
102
- >
103
- System Authentication
104
- </label>
105
- <div className="relative">
106
- <Lock
107
- className="absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground/40"
108
- size={18}
109
- />
110
- <input
111
- id="password"
112
- type={showPassword ? 'text' : 'password'}
113
- value={password}
114
- onChange={(e) => setPassword(e.target.value)}
115
- placeholder="Enter access code..."
116
- className={cn(
117
- 'w-full bg-black/40 border border-white/5 rounded-xl py-4 pl-12 pr-12 font-mono',
118
- 'text-sm font-bold placeholder:text-white/10 tracking-widest',
119
- 'focus:outline-none focus:ring-1 focus:ring-primary/40 focus:border-primary/40',
120
- 'transition-all'
121
- )}
122
- disabled={isLoading}
123
- />
124
- <button
125
- type="button"
126
- onClick={() => setShowPassword(!showPassword)}
127
- className="absolute right-4 top-1/2 -translate-y-1/2 text-muted-foreground/40 hover:text-primary transition-colors"
128
- >
129
- {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}
130
- </button>
131
- </div>
132
- </div>
133
-
134
- {/* Submit Button */}
135
- <button
136
- type="submit"
137
- disabled={isLoading || !password}
138
- className={cn(
139
- 'w-full py-4 rounded-xl font-black text-xs uppercase tracking-[0.3em]',
140
- 'bg-primary text-black font-heading shadow-[0_0_30px_rgba(0,240,255,0.2)] hover:shadow-[0_0_40px_rgba(0,240,255,0.4)]',
141
- 'transition-all duration-500 hover:scale-[1.02] active:scale-95',
142
- 'disabled:opacity-20 disabled:cursor-not-allowed disabled:hover:scale-100',
143
- 'flex items-center justify-center gap-3'
144
- )}
145
- >
146
- {isLoading ? (
147
- <div className="w-5 h-5 border-2 border-black/30 border-t-black rounded-full animate-spin" />
148
- ) : (
149
- <>
150
- Connect <ArrowRight size={18} />
151
- </>
152
- )}
153
- </button>
154
- </form>
155
- </div>
156
-
157
- {/* Footer */}
158
- <p className="text-center mt-6 text-xs text-muted-foreground/50">
159
- Protected by Gravito Security Layer
160
- </p>
161
- </motion.div>
162
- </div>
163
- )
164
- }