2025-12-23 17:53:18 +00:00
|
|
|
'use strict';
|
|
|
|
|
'require baseclass';
|
|
|
|
|
'require rpc';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SecuBox Master API
|
|
|
|
|
* Package: luci-app-secubox
|
|
|
|
|
* RPCD object: luci.secubox
|
|
|
|
|
*/
|
|
|
|
|
|
2025-12-28 01:19:30 +00:00
|
|
|
// Version: 0.3.1
|
feat: apply Design System v0.3.0 to all 15 SecuBox modules
Extended the demo-inspired design system from system-hub to all SecuBox modules
for complete visual consistency across the entire platform.
🎨 Design System v0.3.0 Applied
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Modules Updated (15 total):
- ✅ luci-app-auth-guardian
- ✅ luci-app-bandwidth-manager
- ✅ luci-app-cdn-cache
- ✅ luci-app-client-guardian
- ✅ luci-app-crowdsec-dashboard
- ✅ luci-app-ksm-manager
- ✅ luci-app-media-flow
- ✅ luci-app-netdata-dashboard
- ✅ luci-app-netifyd-dashboard
- ✅ luci-app-network-modes
- ✅ luci-app-secubox
- ✅ luci-app-system-hub
- ✅ luci-app-traffic-shaper
- ✅ luci-app-vhost-manager
- ✅ luci-app-wireguard-dashboard
🎨 Design System Features
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Dark Mode Palette (Demo-inspired):
- Background: #0a0a0f → #12121a → #1a1a24
- Text: #fafafa / #a0a0b0
- Borders: #2a2a35
- Primary gradient: #6366f1 → #8b5cf6 (Indigo-Violet)
Typography:
- Body: Inter (Google Fonts)
- Monospace: JetBrains Mono (for metrics, IDs, code)
Components:
- Compact stats badges (130px min)
- Gradient text titles with background-clip
- Cards with gradient border hover effects
- Sticky navigation tabs with backdrop-filter
- Filter tabs with gradient active state
- Buttons with cubic-bezier transitions
- Status badges (success/danger/warning/info)
Responsive Grid Layouts:
- Stats: repeat(auto-fit, minmax(130px, 1fr))
- Metrics: repeat(auto-fit, minmax(240px, 1fr))
- Cards: repeat(auto-fit, minmax(300px, 1fr))
📄 Files Added (14 new):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Created common.css for each module:
- templates/common-css-template.css (master template)
- */resources/*/common.css (14 modules)
📝 Files Modified (42):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Makefiles (13 modules):
- Updated PKG_VERSION from 0.0.9 → 0.2.2
- auth-guardian, bandwidth-manager, cdn-cache, client-guardian
- crowdsec-dashboard, ksm-manager, media-flow, netdata-dashboard
- netifyd-dashboard, network-modes, traffic-shaper, vhost-manager
- wireguard-dashboard
API.js files (14 modules):
- Added "// Version: 0.2.2" comment
- Consistent version tracking across all modules
Dashboard CSS (13 modules):
- Added "Version: 0.3.0" in file headers
- Updated to use Design System variables
SecuBox CSS (6 files):
- alerts.css, dashboard.css, modules.css
- monitoring.css, secubox.css
- All updated to version 0.3.0
🔧 CSS Variables System
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
All modules now use consistent --sh-* CSS variables:
- --sh-text-primary / --sh-text-secondary
- --sh-bg-primary / --sh-bg-secondary / --sh-bg-tertiary / --sh-bg-card
- --sh-border / --sh-hover-bg / --sh-hover-shadow
- --sh-primary / --sh-primary-end (for gradients)
- --sh-success / --sh-danger / --sh-warning / --sh-info
- --sh-shadow
Benefits:
✓ Instant theme switching (light/dark mode)
✓ Easy color customization via CSS variables
✓ Consistent branding across all modules
✓ Reduced CSS duplication
✓ Better maintainability
📊 Statistics
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Files changed: 56 total
- New files: 14 (common.css + template)
- Modified files: 42
- 13 Makefiles (version updates)
- 14 API.js (version tracking)
- 13 dashboard.css (version headers)
- 6 secubox CSS files
- 1 settings.local.json
Total lines added: ~8,000+ (common.css templates)
Common CSS size: ~420 lines per module
Design system coverage: 100% (all 15 modules)
✅ Validation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Validation script passed successfully:
- ✓ Check 1: RPCD naming (15 modules)
- ✓ Check 2: Menu paths (100+ views)
- ✓ Check 3: View files (2 warnings - debug files)
- ✓ Check 4: Permissions (15 RPCD scripts)
- ✓ Check 5: JSON syntax (30 files)
- ✓ Check 6: ubus naming (17 objects)
🎯 Migration Notes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Developers:
1. Import common.css in your HTML/views
2. Use --sh-* CSS variables instead of hardcoded colors
3. Leverage pre-built components (.sh-card, .sh-btn-primary, etc.)
4. Follow responsive grid patterns
5. Test in both light and dark modes
Users:
- All modules now have consistent modern design
- Unified color scheme across entire SecuBox platform
- Better accessibility with improved contrast ratios
- Smooth animations and transitions
- Responsive design for mobile/tablet/desktop
📚 Documentation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Reference:
- Design demo: https://cybermind.fr/apps/system-hub/demo.html
- Template: templates/common-css-template.css
- Guidelines: DEVELOPMENT-GUIDELINES.md
- Quick start: QUICK-START.md
Next Steps:
- Deploy modules to test environment
- Verify visual consistency
- Collect user feedback
- Fine-tune responsive breakpoints if needed
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 19:15:33 +00:00
|
|
|
|
2025-12-23 17:53:18 +00:00
|
|
|
var callStatus = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'status',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callModules = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'modules',
|
2025-12-26 16:25:45 +00:00
|
|
|
expect: {}
|
2025-12-23 17:53:18 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callModulesByCategory = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'modules_by_category',
|
|
|
|
|
params: ['category'],
|
2025-12-26 16:25:45 +00:00
|
|
|
expect: {}
|
2025-12-23 17:53:18 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callModuleInfo = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'module_info',
|
|
|
|
|
params: ['module'],
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callStartModule = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'start_module',
|
|
|
|
|
params: ['module']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callStopModule = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'stop_module',
|
|
|
|
|
params: ['module']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callRestartModule = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'restart_module',
|
|
|
|
|
params: ['module']
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-28 01:19:30 +00:00
|
|
|
// NEW v0.3.1: Enable/Disable module methods
|
|
|
|
|
var callEnableModule = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'enable_module',
|
|
|
|
|
params: ['module'],
|
|
|
|
|
expect: { success: false, message: '' }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callDisableModule = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'disable_module',
|
|
|
|
|
params: ['module'],
|
|
|
|
|
expect: { success: false, message: '' }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callCheckModuleEnabled = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'check_module_enabled',
|
|
|
|
|
params: ['module'],
|
|
|
|
|
expect: { enabled: false }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-23 17:53:18 +00:00
|
|
|
var callHealth = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'health',
|
|
|
|
|
expect: { checks: [], overall: '' }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callDiagnostics = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'diagnostics',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-23 19:38:36 +00:00
|
|
|
var callSystemHealth = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_system_health',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callAlerts = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_alerts',
|
|
|
|
|
expect: { alerts: [] }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callQuickAction = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'quick_action',
|
|
|
|
|
params: ['action'],
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callDashboardData = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_dashboard_data',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
release: v0.1.1 - Unified Theme System with Dark/Light Mode Support
Major Features:
• Centralized theme system across SecuBox and System Hub
• Three theme modes: dark (default), light, and system (auto-detect)
• Single theme setting in SecuBox controls both plugins
• Real-time theme switching with OS preference detection
SecuBox Changes:
• Added theme.js manager for centralized theme control
• Implemented CSS variables for dark/light mode (secubox.css)
• Fixed hardcoded colors in dashboard.css, alerts.css, monitoring.css
• Integrated theme.js in all 7 views (dashboard, modules, alerts, monitoring, settings, etc.)
• Added get_theme RPC method to luci.secubox backend
• Updated ACL permissions to include get_theme (read access)
• Version updated to 0.1.1
System Hub Changes:
• Added theme.js manager using SecuBox theme API
• Implemented CSS variables for dark/light mode (dashboard.css)
• Integrated theme.js in all 9 views (overview, health, services, logs, backup, components, remote, settings, diagnostics)
• Version updated to 0.1.1
• README updated with maintainer info
Theme System Architecture:
• Configuration: /etc/config/secubox (option theme: dark|light|system)
• RPCD Backend: luci.secubox/get_theme method
• Frontend: theme.js modules (secubox/theme.js, system-hub/theme.js)
• CSS Variables: --sb-bg, --sb-bg-card, --sb-border, --sb-text, --sb-text-muted, --sb-shadow
• Auto-detection: prefers-color-scheme media query for system mode
Documentation:
• Added LUCI_DEVELOPMENT_REFERENCE.md with comprehensive LuCI development patterns
• Documented ubus/RPC types, baseclass.extend() patterns, ACL structure
• Common errors and solutions from implementation experience
Bug Fixes:
• Fixed SecuBox theme not applying visually (CSS variables now used)
• Fixed missing secubox.css in view imports
• Fixed ACL access denied for get_theme method
• Fixed hardcoded colors preventing theme switching
Testing:
• Verified theme switching works in all SecuBox tabs
• Verified theme switching works in all System Hub tabs
• Verified dark/light/system modes function correctly
• Verified single setting controls both plugins
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 15:08:53 +00:00
|
|
|
var callGetTheme = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_theme',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-29 09:51:11 +00:00
|
|
|
var callSetTheme = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'set_theme',
|
|
|
|
|
params: ['theme'],
|
|
|
|
|
expect: { success: false, theme: '' }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-27 09:28:12 +00:00
|
|
|
var callDismissAlert = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'dismiss_alert',
|
|
|
|
|
params: ['alert_id'],
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callClearAlerts = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'clear_alerts',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-28 01:19:30 +00:00
|
|
|
var callFixPermissions = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'fix_permissions',
|
|
|
|
|
expect: { success: false, message: '', output: '' }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-29 16:14:04 +00:00
|
|
|
var callFirstRunStatus = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'first_run_status',
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callApplyFirstRun = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'apply_first_run'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callListApps = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'list_apps',
|
|
|
|
|
expect: { apps: [] }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callGetAppManifest = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_app_manifest',
|
|
|
|
|
params: ['app_id']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callApplyAppWizard = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'apply_app_wizard',
|
|
|
|
|
params: ['app_id', 'values']
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-29 16:22:34 +00:00
|
|
|
var callListProfiles = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'list_profiles',
|
|
|
|
|
expect: { profiles: [] }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callApplyProfile = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'apply_profile',
|
|
|
|
|
params: ['profile_id']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callRollbackProfile = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'rollback_profile'
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-30 13:42:45 +00:00
|
|
|
// App Store methods
|
|
|
|
|
var callGetAppstoreApps = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_appstore_apps',
|
|
|
|
|
expect: { apps: [], categories: {} }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callGetAppstoreApp = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'get_appstore_app',
|
|
|
|
|
params: ['app_id'],
|
|
|
|
|
expect: { }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callInstallAppstoreApp = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'install_appstore_app',
|
|
|
|
|
params: ['app_id'],
|
|
|
|
|
expect: { success: false }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var callRemoveAppstoreApp = rpc.declare({
|
|
|
|
|
object: 'luci.secubox',
|
|
|
|
|
method: 'remove_appstore_app',
|
|
|
|
|
params: ['app_id'],
|
|
|
|
|
expect: { success: false }
|
|
|
|
|
});
|
|
|
|
|
|
2025-12-23 17:53:18 +00:00
|
|
|
function formatUptime(seconds) {
|
|
|
|
|
if (!seconds) return '0s';
|
|
|
|
|
var d = Math.floor(seconds / 86400);
|
|
|
|
|
var h = Math.floor((seconds % 86400) / 3600);
|
|
|
|
|
var m = Math.floor((seconds % 3600) / 60);
|
|
|
|
|
if (d > 0) return d + 'd ' + h + 'h';
|
|
|
|
|
if (h > 0) return h + 'h ' + m + 'm';
|
|
|
|
|
return m + 'm';
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-23 19:38:36 +00:00
|
|
|
function formatBytes(bytes) {
|
|
|
|
|
if (!bytes) return '0 B';
|
|
|
|
|
var k = 1024;
|
|
|
|
|
var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
|
|
|
var i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
|
|
|
return (bytes / Math.pow(k, i)).toFixed(2) + ' ' + sizes[i];
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-23 17:53:18 +00:00
|
|
|
return baseclass.extend({
|
|
|
|
|
getStatus: callStatus,
|
|
|
|
|
getModules: callModules,
|
|
|
|
|
getModulesByCategory: callModulesByCategory,
|
|
|
|
|
getModuleInfo: callModuleInfo,
|
2025-12-28 01:19:30 +00:00
|
|
|
// DEPRECATED: Use enable/disable instead
|
2025-12-23 17:53:18 +00:00
|
|
|
startModule: callStartModule,
|
|
|
|
|
stopModule: callStopModule,
|
|
|
|
|
restartModule: callRestartModule,
|
2025-12-28 01:19:30 +00:00
|
|
|
// NEW v0.3.1: Enable/Disable methods
|
|
|
|
|
enableModule: callEnableModule,
|
|
|
|
|
disableModule: callDisableModule,
|
|
|
|
|
checkModuleEnabled: callCheckModuleEnabled,
|
|
|
|
|
// Health & diagnostics
|
2025-12-23 17:53:18 +00:00
|
|
|
getHealth: callHealth,
|
|
|
|
|
getDiagnostics: callDiagnostics,
|
2025-12-23 19:38:36 +00:00
|
|
|
getSystemHealth: callSystemHealth,
|
|
|
|
|
getAlerts: callAlerts,
|
|
|
|
|
quickAction: callQuickAction,
|
|
|
|
|
getDashboardData: callDashboardData,
|
release: v0.1.1 - Unified Theme System with Dark/Light Mode Support
Major Features:
• Centralized theme system across SecuBox and System Hub
• Three theme modes: dark (default), light, and system (auto-detect)
• Single theme setting in SecuBox controls both plugins
• Real-time theme switching with OS preference detection
SecuBox Changes:
• Added theme.js manager for centralized theme control
• Implemented CSS variables for dark/light mode (secubox.css)
• Fixed hardcoded colors in dashboard.css, alerts.css, monitoring.css
• Integrated theme.js in all 7 views (dashboard, modules, alerts, monitoring, settings, etc.)
• Added get_theme RPC method to luci.secubox backend
• Updated ACL permissions to include get_theme (read access)
• Version updated to 0.1.1
System Hub Changes:
• Added theme.js manager using SecuBox theme API
• Implemented CSS variables for dark/light mode (dashboard.css)
• Integrated theme.js in all 9 views (overview, health, services, logs, backup, components, remote, settings, diagnostics)
• Version updated to 0.1.1
• README updated with maintainer info
Theme System Architecture:
• Configuration: /etc/config/secubox (option theme: dark|light|system)
• RPCD Backend: luci.secubox/get_theme method
• Frontend: theme.js modules (secubox/theme.js, system-hub/theme.js)
• CSS Variables: --sb-bg, --sb-bg-card, --sb-border, --sb-text, --sb-text-muted, --sb-shadow
• Auto-detection: prefers-color-scheme media query for system mode
Documentation:
• Added LUCI_DEVELOPMENT_REFERENCE.md with comprehensive LuCI development patterns
• Documented ubus/RPC types, baseclass.extend() patterns, ACL structure
• Common errors and solutions from implementation experience
Bug Fixes:
• Fixed SecuBox theme not applying visually (CSS variables now used)
• Fixed missing secubox.css in view imports
• Fixed ACL access denied for get_theme method
• Fixed hardcoded colors preventing theme switching
Testing:
• Verified theme switching works in all SecuBox tabs
• Verified theme switching works in all System Hub tabs
• Verified dark/light/system modes function correctly
• Verified single setting controls both plugins
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 15:08:53 +00:00
|
|
|
getTheme: callGetTheme,
|
2025-12-29 09:51:11 +00:00
|
|
|
setTheme: callSetTheme,
|
2025-12-27 09:28:12 +00:00
|
|
|
dismissAlert: callDismissAlert,
|
|
|
|
|
clearAlerts: callClearAlerts,
|
2025-12-28 01:19:30 +00:00
|
|
|
fixPermissions: callFixPermissions,
|
2025-12-29 16:14:04 +00:00
|
|
|
getFirstRunStatus: callFirstRunStatus,
|
|
|
|
|
applyFirstRun: callApplyFirstRun,
|
|
|
|
|
listApps: callListApps,
|
|
|
|
|
getAppManifest: callGetAppManifest,
|
|
|
|
|
applyAppWizard: callApplyAppWizard,
|
2025-12-29 16:22:34 +00:00
|
|
|
listProfiles: callListProfiles,
|
|
|
|
|
applyProfile: callApplyProfile,
|
|
|
|
|
rollbackProfile: callRollbackProfile,
|
2025-12-30 13:42:45 +00:00
|
|
|
// App Store
|
|
|
|
|
getAppstoreApps: callGetAppstoreApps,
|
|
|
|
|
getAppstoreApp: callGetAppstoreApp,
|
|
|
|
|
installAppstoreApp: callInstallAppstoreApp,
|
|
|
|
|
removeAppstoreApp: callRemoveAppstoreApp,
|
2025-12-28 01:19:30 +00:00
|
|
|
// Utilities
|
2025-12-23 19:38:36 +00:00
|
|
|
formatUptime: formatUptime,
|
|
|
|
|
formatBytes: formatBytes
|
2025-12-23 17:53:18 +00:00
|
|
|
});
|