Online module discovery system for Shevery ADB modules.
Modules are discovered via GitHub Topics search (topic:shevery-modules). Module authors tag their repos with this topic. No central registry required.
Flow:
- User enters GitHub PAT (Personal Access Token) on first launch
- App searches GitHub:
GET /search/repositories?q=topic:shevery-modules - Each repo is validated — checks for
module.propin root or subdirectories - Modules are cached locally (6h TTL)
- User browses catalog, selects install mode (sources or release ZIP)
- Max 4 modules per user (across all their repos)
- Official owner (
HmnDev-Tech) is exempt from limits - Repos from users exceeding the limit are skipped during discovery
From Sources:
- Fetches files from GitHub Contents API
- Resolves default branch dynamically (not hardcoded)
- Builds clean ZIP: module.prop, .sh, banner., webui/** (all files)
- Installs via existing
AdbModuleManager.install()
From Release ZIP:
- Downloads asset from GitHub Releases
- Matches asset by module ID pattern
- Installs directly
- Token stored in SharedPreferences (not encrypted — trade-off for emulator compatibility)
- Token validated for
ghp_/github_pat_prefix (30+ chars) - Token NOT logged to logcat
- Token only sent to
api.github.com/github.comdomains (not leaked to updateJson URLs)
| Platform | Catalog UI | Token Settings | Lab Menu |
|---|---|---|---|
| Phone | CatalogScreen.kt | UpdateSettingsScreen.kt | Via SettingsScreen |
- Unauthenticated: 60 req/hour (limited)
- With PAT: 5,000 req/hour
- Rate limit tracked across all API calls
- ETag conditional requests used where possible (304 = free)
module/discovery/
├── ModuleDiscoveryManager.kt # Orchestrator: search → validate → cache
├── ModuleValidator.kt # module.prop validation + nested dir scan
├── DiscoveredModule.kt # Data class for discovered modules
├── GitHubModels.kt # GitHub API response models
├── DiscoveryCache.kt # SharedPreferences cache (6h TTL)
└── RateLimitTracker.kt # GitHub rate limit tracking
module/update/
├── ModuleInstaller.kt # Install flow (sources + release)
├── SourceZipBuilder.kt # Clean ZIP from source files
├── UpdateChecker.kt # Check for module updates
├── UpdateResult.kt # Update check result model
├── UpdateSettingsScreen.kt # Phone settings for updates
└── GitHubReleaseModels.kt # GitHub Release API models
module/catalog/
├── CatalogScreen.kt # Phone catalog UI
├── TokenStore.kt # Token storage