Fixed TypeError "WidgetRenderer is not a constructor" in dashboard.js
by removing the 'new' keyword. LuCI's baseclass.extend() creates callable
classes that should not be instantiated with 'new'.
Changes:
- dashboard.js: Changed from 'new WidgetRenderer({...})' to 'WidgetRenderer({...})'
- Added comprehensive try-catch error handling with fallback error display
- Incremented PKG_RELEASE: 5 → 6
- Updated DEPLOY_UPDATES.md with v1.0.0-6 details
This fix allows the widget system to initialize properly on the dashboard.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix 'No related RPC reply' errors by wrapping RPC calls in L.resolveDefault()
to provide fallback values when backend methods aren't available yet.
## Problem
When new LuCI views are deployed before backend packages, RPC calls fail with:
Error: No related RPC reply
This happens because:
- Frontend (luci-app-secubox-admin) calls check_updates, get_catalog_sources
- Backend (secubox-core) hasn't been deployed yet with new RPCD methods
- RPCD returns no reply, causing frontend to crash
## Solution
Wrap all new RPC calls in L.resolveDefault() with sensible fallbacks:
**catalog-sources.js**:
- getCatalogSources() → fallback: { sources: [] }
- checkUpdates() → fallback: { updates: [] }
**updates.js**:
- checkUpdates() → fallback: { updates: [] }
This allows pages to load gracefully with empty data instead of crashing.
## Benefits
1. **Graceful degradation**: Pages load even without backend
2. **Deployment flexibility**: Can deploy frontend before backend
3. **Better UX**: Shows 'No updates' / 'No sources' instead of errors
4. **Production-ready**: Handles missing backends in production
## Testing
Before backend deployment:
- Catalog Sources page shows: 'No sources configured'
- Updates page shows: 'All applications are up to date'
After backend deployment:
- Pages populate with real data from RPCD
Incremented PKG_RELEASE: 4 → 5
Fix TypeError when WidgetRenderer is instantiated with undefined options
parameter by adding defensive check at start of __init__ method.
Error:
TypeError: can't access property "containerId", options is undefined
Fix:
options = options || {};
This ensures the constructor works even if called without parameters,
preventing the TypeError when accessing options.containerId.
Incremented PKG_RELEASE: 3 → 4
Fix RPC -32002 "Access denied" errors by adding proper ACL permissions
for all new catalog source and version management methods.
## Problem
New RPC methods added in Phases 1-3 were accessible in the RPCD backend
but lacked ACL (Access Control List) permissions, causing browser errors:
```
RPCError: RPC call to luci.secubox/get_catalog_sources failed with error -32002: Access denied
RPCError: RPC call to luci.secubox/check_updates failed with error -32002: Access denied
```
## Solution
Updated `/usr/share/rpcd/acl.d/luci-app-secubox-admin.json` to grant
permissions for all 7 new methods introduced in the multi-source AppStore.
### Read Permissions (added 5 methods)
These methods only read data and don't modify system state:
- `get_catalog_sources` - List configured catalog sources
- `check_updates` - Check for available app updates
- `get_app_versions` - Get version info for specific app
- `get_changelog` - Retrieve app changelog
- `get_widget_data` - Get widget metrics for dashboard
### Write Permissions (added 2 methods)
These methods modify system configuration:
- `set_catalog_source` - Set active catalog source (UCI write)
- `sync_catalog` - Trigger catalog synchronization
### UCI Access (added 1 config)
Added `secubox-appstore` to UCI read/write lists for source management.
## Files Changed
**Modified**:
- `luci-app-secubox-admin/root/usr/share/rpcd/acl.d/luci-app-secubox-admin.json`
- Read permissions: 9 → 14 methods
- Write permissions: 6 → 8 methods
- UCI access: Added `secubox-appstore`
- `luci-app-secubox-admin/Makefile`
- PKG_RELEASE: 2 → 3
## Deployment
After updating the package:
1. `opkg install luci-app-secubox-admin_*.ipk`
2. ACL file automatically installed to `/usr/share/rpcd/acl.d/`
3. RPCD reloads ACLs automatically
4. Methods now accessible from LuCI frontend
No manual RPCD restart required - ACL changes are picked up automatically.
## Verification
Test with:
```bash
ubus -S call luci.secubox get_catalog_sources
ubus -S call luci.secubox check_updates
```
Should return data instead of "Access denied" error.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed critical Makefile structure issue that prevented luci-app-secubox-admin from
being indexed by the feed system and built by the SDK.
Changes:
1. Added `include $(TOPDIR)/rules.mk` at the beginning (required for all OpenWrt packages)
2. Added PKG_LICENSE and PKG_MAINTAINER fields (best practices)
3. Added LUCI_PKGARCH:=all to match other LuCI packages
4. Added closing comment `# call BuildPackage - OpenWrt buildroot`
5. Moved include statements to proper positions
This fix aligns the Makefile with the standard OpenWrt/LuCI package structure used
by luci-app-secubox and other working packages.
Additionally:
- Suppressed kconfig warnings in local-build.sh by redirecting stderr to /dev/null
for all `make defconfig` commands (lines 532, 782, 1278)
Build verification:
✅ Package now appears in feeds/secubox.index
✅ Successfully builds: luci-app-secubox-admin_1.0.0-r2_all.ipk (8.3KB)
✅ Total SecuBox packages built: 33
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>