The plugin was importing from internal Headlamp paths like
'@kinvolk/headlamp-plugin/lib/lib/k8s/cluster' instead of using the
official public API '@kinvolk/headlamp-plugin/lib'.
This caused the plugin to fail loading in the browser with:
"TypeError: undefined is not an object (evaluating 'Ot.KubeObject')"
Changes:
- Updated imports to use K8s.cluster and ApiProxy from main export
- Added vite.config.js with custom globals (now obsolete with this fix)
- Moved node-forge to dependencies for proper bundling
The plugin now uses only the official documented Headlamp plugin API.
Fixes: #[issue number if exists]
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add automatic detection of SealedSecrets CRD API version from cluster.
The plugin now adapts to installed versions (v1alpha1, v1, etc.) and
provides warnings when CRD is missing or non-default versions are used.
Changes:
- Add detectApiVersion() to SealedSecretCRD class
- Queries CRD definition from Kubernetes API
- Uses storage version (canonical version for etcd)
- Caches result to avoid repeated API calls
- Falls back to v1alpha1 if detection fails
- Create VersionWarning component
- Auto-detects version on mount
- Shows error alert for missing CRD (with install instructions)
- Shows info alert for non-default versions
- Provides retry button for failed detections
- Configurable detail level (showDetails prop)
- Integrate version warnings into UI
- SealedSecretList: minimal warnings (errors only)
- SettingsPage: detailed version info always shown
- Add version management methods
- getApiEndpoint(): auto-versioned endpoint
- getDetectedVersion(): get cached version
- clearVersionCache(): force re-detection
Benefits:
- Future-proof: automatically supports new API versions
- Better UX: clear error messages with installation help
- Performance: version detected once and cached
- Version awareness: users see which API version is active
Build: 351.34 kB (96.75 kB gzipped), +2.88 kB (+0.8%)
Phase 2.4 complete. 7 of 14 phases done (50% milestone).
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Features:
- Complete SealedSecret CRD integration with Headlamp
- Client-side encryption using controller's public key
- Support for all three scoping modes (strict, namespace-wide, cluster-wide)
- List and detail views for SealedSecrets
- Encryption dialog for creating new SealedSecrets
- Decryption support with RBAC awareness
- Sealing keys management
- Settings page for controller configuration
- Integration with Secret detail view
Technical:
- Full TypeScript with strict mode
- ~1,345 lines of code
- Build size: 339.42 kB (93.21 kB gzipped)
- Compatible with Headlamp v0.13.0+
- Apache 2.0 license
Security:
- All encryption performed client-side
- RSA-OAEP + AES-256-GCM (kubeseal-compatible)
- Auto-hide decrypted values after 30 seconds
Closes: Initial implementation