native-update 1.4.9 → 3.1.0
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.
- package/Readme.md +35 -9
- package/android/manifest-additions.xml +28 -0
- package/android/src/main/AndroidManifest.xml +3 -7
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundNotificationManager.kt +21 -13
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdatePlugin.kt +15 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateWorker.kt +23 -7
- package/android/src/main/java/com/aoneahsan/nativeupdate/LiveUpdatePlugin.kt +346 -31
- package/android/src/main/java/com/aoneahsan/nativeupdate/NativeUpdatePlugin.kt +32 -34
- package/android/src/main/java/com/aoneahsan/nativeupdate/NotificationActionReceiver.kt +10 -1
- package/android/src/main/java/com/aoneahsan/nativeupdate/SecurityManager.kt +18 -18
- package/cli/AGENTS.md +43 -0
- package/cli/CLAUDE.md +65 -0
- package/cli/commands/backend-create.js +56 -15
- package/cli/commands/bundle-create.js +39 -7
- package/cli/commands/monitor.js +72 -51
- package/cli/index.js +10 -24
- package/cli/package.json +11 -3
- package/dist/esm/app-review/app-review-manager.js +0 -1
- package/dist/esm/app-review/index.js +0 -1
- package/dist/esm/app-review/platform-review-handler.js +0 -1
- package/dist/esm/app-review/review-conditions-checker.js +0 -1
- package/dist/esm/app-review/review-rate-limiter.js +0 -1
- package/dist/esm/app-review/types.js +0 -1
- package/dist/esm/app-update/app-update-checker.js +0 -1
- package/dist/esm/app-update/app-update-installer.d.ts +1 -0
- package/dist/esm/app-update/app-update-installer.js +19 -8
- package/dist/esm/app-update/app-update-manager.js +0 -1
- package/dist/esm/app-update/app-update-notifier.js +0 -1
- package/dist/esm/app-update/index.js +0 -1
- package/dist/esm/app-update/platform-app-update.js +12 -3
- package/dist/esm/app-update/types.js +0 -1
- package/dist/esm/background-update/background-scheduler.js +0 -1
- package/dist/esm/background-update/index.js +0 -1
- package/dist/esm/background-update/notification-manager.js +0 -1
- package/dist/esm/config/support.js +0 -1
- package/dist/esm/core/analytics.d.ts +13 -0
- package/dist/esm/core/analytics.js +15 -1
- package/dist/esm/core/cache-manager.js +0 -1
- package/dist/esm/core/config.d.ts +6 -30
- package/dist/esm/core/config.js +1 -8
- package/dist/esm/core/errors.d.ts +1 -0
- package/dist/esm/core/errors.js +1 -1
- package/dist/esm/core/event-emitter.d.ts +0 -3
- package/dist/esm/core/event-emitter.js +8 -3
- package/dist/esm/core/logger.js +0 -1
- package/dist/esm/core/performance.js +0 -1
- package/dist/esm/core/plugin-manager.js +3 -1
- package/dist/esm/core/security.d.ts +22 -3
- package/dist/esm/core/security.js +46 -7
- package/dist/esm/definitions.d.ts +13 -40
- package/dist/esm/definitions.js +0 -1
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.js +3 -3
- package/dist/esm/live-update/bundle-manager.d.ts +8 -0
- package/dist/esm/live-update/bundle-manager.js +20 -1
- package/dist/esm/live-update/certificate-pinning.js +0 -1
- package/dist/esm/live-update/delta-processor.d.ts +1 -1
- package/dist/esm/live-update/delta-processor.js +3 -1
- package/dist/esm/live-update/download-manager.d.ts +36 -5
- package/dist/esm/live-update/download-manager.js +70 -24
- package/dist/esm/live-update/rollout-checker.d.ts +1 -1
- package/dist/esm/live-update/rollout-checker.js +5 -6
- package/dist/esm/live-update/update-manager.d.ts +12 -1
- package/dist/esm/live-update/update-manager.js +38 -11
- package/dist/esm/live-update/version-manager.d.ts +9 -12
- package/dist/esm/live-update/version-manager.js +40 -68
- package/dist/esm/plugin.js +82 -89
- package/dist/esm/security/crypto.js +11 -7
- package/dist/esm/security/validator.js +0 -1
- package/dist/esm/types/rollout.d.ts +85 -0
- package/dist/esm/types/rollout.js +25 -0
- package/dist/esm/web.d.ts +26 -1
- package/dist/esm/web.js +214 -75
- package/dist/plugin.cjs.js +1 -2
- package/dist/plugin.esm.js +1 -2
- package/dist/plugin.js +2 -3
- package/docs/AGENTS.md +38 -0
- package/docs/CHANGELOG.md +275 -0
- package/docs/CLAUDE.md +101 -0
- package/docs/MANUAL-TASKS.md +17 -0
- package/docs/MARKETING_WEBSITE_TRACKER.md +18 -2
- package/docs/MIGRATION.md +170 -0
- package/docs/PACKAGES.md +167 -0
- package/docs/PERFORMANCE.md +110 -0
- package/docs/PROJECT_COMPLETION_TRACKER.md +4 -35
- package/docs/README.md +12 -2
- package/docs/REMAINING_FEATURES.md +123 -76
- package/docs/ROADMAP.md +200 -120
- package/docs/SECURITY-IF-REPO-PUBLIC.md +232 -0
- package/docs/TESTING_REQUIREMENTS.md +1 -112
- package/docs/ai-knowledge-base/00-project-profile.md +38 -0
- package/docs/ai-knowledge-base/01-features.md +46 -0
- package/docs/ai-knowledge-base/02-routes.md +72 -0
- package/docs/ai-knowledge-base/03-tech-stack.md +57 -0
- package/docs/ai-knowledge-base/README.md +23 -0
- package/docs/analytics-tracking.md +37 -0
- package/docs/capacitor-official-plugins.md +46 -0
- package/docs/capawesome-plugins.md +29 -0
- package/docs/deployment/HOSTINGER_DEPLOY.md +370 -0
- package/docs/deployment/PRODUCTION-DEPLOY-CHECKLIST.md +184 -0
- package/docs/docs-site/plan.md +201 -0
- package/docs/docs-site/scope.md +127 -0
- package/docs/docs-site/tracker.json +235 -0
- package/docs/error-handling-tracking.md +37 -0
- package/docs/features/laravel-nova-backend/ASSESSMENT-SUMMARY.md +96 -0
- package/docs/features/laravel-nova-backend/IMPLEMENTATION-PLAN.md +504 -0
- package/docs/features/laravel-nova-backend/progress-tracker.json +184 -0
- package/docs/guides/testing-guide.md +15 -41
- package/docs/package-audit.md +41 -0
- package/docs/play-store/ASO-METADATA.md +5 -0
- package/docs/play-store/DATA-SAFETY.md +5 -0
- package/docs/play-store/DECLARATIONS.md +5 -0
- package/docs/play-store/README.md +27 -0
- package/docs/play-store/RELEASE-NOTES.md +99 -0
- package/docs/play-store/RELEASE-STEPS.md +6 -0
- package/docs/play-store/STORE-LISTING.md +7 -0
- package/docs/play-store/SUBMISSION-CHECKLIST.md +5 -0
- package/docs/production-readiness.md +1 -1
- package/docs/project-audit/2026-05-16/00-FINALIZATION-PLAN.md +123 -0
- package/docs/project-audit/2026-05-16/01-BATCH-PLAN.md +227 -0
- package/docs/project-audit/2026-05-16/02-AUDIT-FINDINGS.md +144 -0
- package/docs/project-audit/2026-05-16/sessions/batch-01.md +42 -0
- package/docs/project-audit/2026-05-16/sessions/batch-02.md +74 -0
- package/docs/project-audit/2026-05-16/sessions/batch-03.md +71 -0
- package/docs/project-audit/2026-05-16/sessions/batch-04.md +88 -0
- package/docs/project-audit/2026-05-16/sessions/batch-05.md +63 -0
- package/docs/project-audit/2026-05-16/sessions/batch-06.md +103 -0
- package/docs/project-audit/2026-05-16/sessions/batch-07.md +61 -0
- package/docs/project-audit/2026-05-16/sessions/batch-08.md +101 -0
- package/docs/project-audit/2026-05-16/sessions/batch-09.md +105 -0
- package/docs/project-audit/2026-05-16/sessions/batch-10.md +102 -0
- package/docs/project-audit/AUDIT-HISTORY.md +74 -0
- package/docs/project-audit/BATCH-PLAN.md +168 -0
- package/docs/project-audit/MARKETING-WEBSITE-FINDINGS-2026-05-11.md +73 -0
- package/docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md +275 -0
- package/docs/project-finalization/00-tracker.json +60 -0
- package/docs/project-knowledge-base/01-system-overview.md +227 -0
- package/docs/project-knowledge-base/02-routes-pages-forms-users.md +352 -0
- package/docs/project-knowledge-base/03-tech-stack-modules-services.md +379 -0
- package/docs/project-knowledge-base/04-data-models-integrations.md +244 -0
- package/docs/project-knowledge-base/05-docs-corpus-inventory.md +256 -0
- package/docs/project-knowledge-base/06-operations-testing-legal-content.md +208 -0
- package/docs/project-knowledge-base/README.md +103 -0
- package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-05-19.md +81 -0
- package/docs/rules-tracker.md +102 -0
- package/docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md +116 -0
- package/docs/seo-aeo-rules.json +3043 -0
- package/docs/social-media-marketing/README.md +81 -0
- package/docs/social-media-marketing/posts-batch-01.md +613 -0
- package/docs/social-media-marketing/posts-batch-02.md +528 -0
- package/docs/social-media-marketing/whatsapp-messages-batch-01.md +458 -0
- package/docs/social-media-marketing/whatsapp-status-batch-01.md +355 -0
- package/docs/tracking/finalization-2026-05-16-tracker.json +346 -0
- package/docs/tracking/full-audit-tracker.json +121 -0
- package/docs/tracking/production-readiness-audit-tracker.json +429 -0
- package/docs/tracking/seo-checklist-tracker.json +333 -0
- package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +66 -9
- package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +306 -52
- package/ios/Plugin/NativeUpdatePlugin.swift +22 -9
- package/ios/Plugin/Security/SecurityManager.swift +13 -14
- package/package.json +37 -38
- package/cli/node_modules/.yarn-integrity +0 -16
- package/cli/node_modules/commander/LICENSE +0 -22
- package/cli/node_modules/commander/Readme.md +0 -1148
- package/cli/node_modules/commander/esm.mjs +0 -16
- package/cli/node_modules/commander/index.js +0 -26
- package/cli/node_modules/commander/lib/argument.js +0 -145
- package/cli/node_modules/commander/lib/command.js +0 -2179
- package/cli/node_modules/commander/lib/error.js +0 -43
- package/cli/node_modules/commander/lib/help.js +0 -462
- package/cli/node_modules/commander/lib/option.js +0 -329
- package/cli/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/cli/node_modules/commander/package-support.json +0 -16
- package/cli/node_modules/commander/package.json +0 -80
- package/cli/node_modules/commander/typings/esm.d.mts +0 -3
- package/cli/node_modules/commander/typings/index.d.ts +0 -884
- package/cli/yarn.lock +0 -8
- package/dist/esm/__tests__/bundle-manager.test.d.ts +0 -1
- package/dist/esm/__tests__/bundle-manager.test.js +0 -151
- package/dist/esm/__tests__/bundle-manager.test.js.map +0 -1
- package/dist/esm/__tests__/config.test.d.ts +0 -1
- package/dist/esm/__tests__/config.test.js +0 -70
- package/dist/esm/__tests__/config.test.js.map +0 -1
- package/dist/esm/__tests__/delta-processor.test.d.ts +0 -1
- package/dist/esm/__tests__/delta-processor.test.js +0 -77
- package/dist/esm/__tests__/delta-processor.test.js.map +0 -1
- package/dist/esm/__tests__/firestore-schema.test.d.ts +0 -1
- package/dist/esm/__tests__/firestore-schema.test.js +0 -74
- package/dist/esm/__tests__/firestore-schema.test.js.map +0 -1
- package/dist/esm/__tests__/integration.test.d.ts +0 -1
- package/dist/esm/__tests__/integration.test.js +0 -78
- package/dist/esm/__tests__/integration.test.js.map +0 -1
- package/dist/esm/__tests__/manifest-reader.test.d.ts +0 -1
- package/dist/esm/__tests__/manifest-reader.test.js +0 -271
- package/dist/esm/__tests__/manifest-reader.test.js.map +0 -1
- package/dist/esm/__tests__/rollout-checker.test.d.ts +0 -1
- package/dist/esm/__tests__/rollout-checker.test.js +0 -210
- package/dist/esm/__tests__/rollout-checker.test.js.map +0 -1
- package/dist/esm/__tests__/security.test.d.ts +0 -1
- package/dist/esm/__tests__/security.test.js +0 -54
- package/dist/esm/__tests__/security.test.js.map +0 -1
- package/dist/esm/__tests__/version-manager.test.d.ts +0 -1
- package/dist/esm/__tests__/version-manager.test.js +0 -45
- package/dist/esm/__tests__/version-manager.test.js.map +0 -1
- package/dist/esm/app-review/app-review-manager.js.map +0 -1
- package/dist/esm/app-review/index.js.map +0 -1
- package/dist/esm/app-review/platform-review-handler.js.map +0 -1
- package/dist/esm/app-review/review-conditions-checker.js.map +0 -1
- package/dist/esm/app-review/review-rate-limiter.js.map +0 -1
- package/dist/esm/app-review/types.js.map +0 -1
- package/dist/esm/app-update/app-update-checker.js.map +0 -1
- package/dist/esm/app-update/app-update-installer.js.map +0 -1
- package/dist/esm/app-update/app-update-manager.js.map +0 -1
- package/dist/esm/app-update/app-update-notifier.js.map +0 -1
- package/dist/esm/app-update/index.js.map +0 -1
- package/dist/esm/app-update/platform-app-update.js.map +0 -1
- package/dist/esm/app-update/types.js.map +0 -1
- package/dist/esm/background-update/background-scheduler.js.map +0 -1
- package/dist/esm/background-update/index.js.map +0 -1
- package/dist/esm/background-update/notification-manager.js.map +0 -1
- package/dist/esm/config/support.js.map +0 -1
- package/dist/esm/core/analytics.js.map +0 -1
- package/dist/esm/core/cache-manager.js.map +0 -1
- package/dist/esm/core/config.js.map +0 -1
- package/dist/esm/core/errors.js.map +0 -1
- package/dist/esm/core/event-emitter.js.map +0 -1
- package/dist/esm/core/logger.js.map +0 -1
- package/dist/esm/core/performance.js.map +0 -1
- package/dist/esm/core/plugin-manager.js.map +0 -1
- package/dist/esm/core/security.js.map +0 -1
- package/dist/esm/definitions.js.map +0 -1
- package/dist/esm/firestore/firestore-client.d.ts +0 -109
- package/dist/esm/firestore/firestore-client.js +0 -264
- package/dist/esm/firestore/firestore-client.js.map +0 -1
- package/dist/esm/firestore/index.d.ts +0 -11
- package/dist/esm/firestore/index.js +0 -11
- package/dist/esm/firestore/index.js.map +0 -1
- package/dist/esm/firestore/manifest-reader.d.ts +0 -87
- package/dist/esm/firestore/manifest-reader.js +0 -294
- package/dist/esm/firestore/manifest-reader.js.map +0 -1
- package/dist/esm/firestore/schema.d.ts +0 -507
- package/dist/esm/firestore/schema.js +0 -73
- package/dist/esm/firestore/schema.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/live-update/bundle-manager.js.map +0 -1
- package/dist/esm/live-update/certificate-pinning.js.map +0 -1
- package/dist/esm/live-update/delta-processor.js.map +0 -1
- package/dist/esm/live-update/download-manager.js.map +0 -1
- package/dist/esm/live-update/rollout-checker.js.map +0 -1
- package/dist/esm/live-update/update-manager.js.map +0 -1
- package/dist/esm/live-update/version-manager.js.map +0 -1
- package/dist/esm/plugin.js.map +0 -1
- package/dist/esm/security/crypto.js.map +0 -1
- package/dist/esm/security/validator.js.map +0 -1
- package/dist/esm/web.js.map +0 -1
- package/dist/plugin.cjs.js.map +0 -1
- package/dist/plugin.esm.js.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/docs/FIREBASE_INTEGRATION_TRACKER.md +0 -321
- package/docs/FIREBASE_QUERIES_AND_INDEXES_AUDIT.md +0 -221
- package/docs/examples/firebase-backend-example.md +0 -27
- package/docs/guides/no-cost-backend-implementation-plan.md +0 -77
- package/docs/guides/no-cost-firestore-google-drive-backend.md +0 -60
- package/docs/play-console-rejection-rules.json +0 -428
- /package/docs/{MARKETING_WEBSITE_PLAN.md → archive/MARKETING_WEBSITE_PLAN.md} +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
# Native Update Routes, Pages, Forms, and Users
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
|
|
5
|
+
- **Reference Date:** 2026-05-18
|
|
6
|
+
- **Last Updated:** 2026-05-18
|
|
7
|
+
|
|
8
|
+
## Route Inventory
|
|
9
|
+
|
|
10
|
+
### Public Marketing and Info Routes
|
|
11
|
+
|
|
12
|
+
| Route | Page | Access | Purpose |
|
|
13
|
+
|------|------|--------|---------|
|
|
14
|
+
| `/` | HomePage | Public | Main landing page and primary product pitch |
|
|
15
|
+
| `/features` | FeaturesPage | Public | Feature breakdown across OTA, app updates, and reviews |
|
|
16
|
+
| `/pricing` | PricingPage | Public | Pricing/beta/commercial positioning page |
|
|
17
|
+
| `/docs` | DocsPage | Public | Docs hub and guided docs entry |
|
|
18
|
+
| `/docs/*` | DocsMarkdownPage | Public | Render markdown docs pages from public docs set |
|
|
19
|
+
| `/examples` | ExamplesPage | Public | Code snippets + sample-app links |
|
|
20
|
+
| `/about` | AboutPage | Public | Mission, project story, differentiators, creator profile |
|
|
21
|
+
| `/contact` | ContactPage | Public | Contact methods, support info, FAQ |
|
|
22
|
+
| `/privacy` | PrivacyPage | Public | Privacy policy |
|
|
23
|
+
| `/terms` | TermsPage | Public | Terms of service |
|
|
24
|
+
| `/data-deletion` | DataDeletionPage | Public | Data/account deletion policy |
|
|
25
|
+
| `/cookies` | CookiePolicyPage | Public | Cookie policy |
|
|
26
|
+
| `/security` | SecurityPage | Public | Security messaging and practices |
|
|
27
|
+
| `/sitemap` | SitemapPage | Public | Human-friendly route explorer/search |
|
|
28
|
+
| `/feed` | FeedPage | Public | Human-facing public content feed/search |
|
|
29
|
+
|
|
30
|
+
### Auth Routes
|
|
31
|
+
|
|
32
|
+
| Route | Page | Access | Purpose |
|
|
33
|
+
|------|------|--------|---------|
|
|
34
|
+
| `/login` | LoginPage | Public | Sign in with Google (redirects to Laravel Socialite) |
|
|
35
|
+
| `/signup` | SignupPage | Public | Same OAuth flow as `/login`; account auto-created on first callback |
|
|
36
|
+
| `/auth/callback` | CallbackPage | Public | Receives the Sanctum token from Laravel's OAuth callback and persists it |
|
|
37
|
+
| `/oauth/google-drive/callback` | DriveCallbackPage | Public | Receives Drive OAuth code and posts it to the Laravel backend |
|
|
38
|
+
|
|
39
|
+
### Protected Dashboard Routes
|
|
40
|
+
|
|
41
|
+
| Route | Page | Access | Purpose |
|
|
42
|
+
|------|------|--------|---------|
|
|
43
|
+
| `/dashboard` | DashboardOverview | Authenticated user | Main dashboard metrics and quick actions |
|
|
44
|
+
| `/dashboard/apps` | AppsPage | Authenticated user | Create, edit, delete, and browse owned apps |
|
|
45
|
+
| `/dashboard/apps/:appId` | AppDetailPage | Authenticated user | Per-app details, builds, channels, and rollout state |
|
|
46
|
+
| `/dashboard/builds` | BuildsPage | Authenticated user | Browse/filter builds |
|
|
47
|
+
| `/dashboard/builds/:buildId` | BuildDetailPage | Authenticated user | Detailed build record view |
|
|
48
|
+
| `/dashboard/upload` | UploadPage | Authenticated user | Publish ZIP bundle, write manifest |
|
|
49
|
+
| `/dashboard/drive` | GoogleDrivePage | Authenticated user | Connect/disconnect Drive and review storage footprint |
|
|
50
|
+
| `/dashboard/config` | ConfigPage | Authenticated user | Show recommended backend/config integration guidance |
|
|
51
|
+
| `/dashboard/settings` | SettingsPage | Authenticated user | Account preferences, account deletion |
|
|
52
|
+
| `/dashboard/rollouts` | RolloutsPage | Authenticated user | Manage rollout percentages and pause/resume rollouts |
|
|
53
|
+
| `/dashboard/analytics` | AnalyticsPage | Authenticated user | View aggregated update analytics |
|
|
54
|
+
|
|
55
|
+
### Admin Routes (SPA)
|
|
56
|
+
|
|
57
|
+
| Route | Page | Access | Purpose |
|
|
58
|
+
|------|------|--------|---------|
|
|
59
|
+
| `/admin` | AdminOverview | `admin` or `super-admin` role | Admin overview metrics |
|
|
60
|
+
| `/admin/users` | AdminUsersPage | `admin` or `super-admin` role | Search/browse user accounts |
|
|
61
|
+
| `/admin/apps` | AdminAppsPage | `admin` or `super-admin` role | Search/browse all apps |
|
|
62
|
+
| `/admin/builds` | AdminBuildsPage | `admin` or `super-admin` role | Search/filter all builds |
|
|
63
|
+
|
|
64
|
+
### Admin Routes (Nova)
|
|
65
|
+
|
|
66
|
+
Laravel Nova 5 lives at `/nova` on the backend host. Same MySQL store, separate UI. Resources include User, App, ApiKey, SigningKey, Build, Subscription, AnalyticsEvent. Custom Nova actions exist for rotating signing keys, promoting builds, etc.
|
|
67
|
+
|
|
68
|
+
## Access and Guard Behavior
|
|
69
|
+
|
|
70
|
+
### ProtectedRoute (SPA)
|
|
71
|
+
|
|
72
|
+
- Requires a Sanctum token stored in `@capacitor/preferences` (native) or `localStorage` (web)
|
|
73
|
+
- The 401-handling axios interceptor clears the token and event-broadcasts a logout, redirecting to `/login`
|
|
74
|
+
- Token is sent as a `Bearer` header on every `/api/dashboard/*` and `/api/admin/*` request
|
|
75
|
+
|
|
76
|
+
### AdminRoute (SPA)
|
|
77
|
+
|
|
78
|
+
- Requires a Sanctum token AND the SPA-side cached `me.roles` to include `admin` or `super-admin`
|
|
79
|
+
- Backend enforcement: every Laravel admin route also carries `auth:sanctum` + `can:<permission>` middleware; an unauthorized request returns 403 regardless of SPA state
|
|
80
|
+
|
|
81
|
+
### Backend gate model
|
|
82
|
+
|
|
83
|
+
- `auth:sanctum` middleware on `/api/dashboard/*` and `/api/admin/*`
|
|
84
|
+
- `can:<permission>` middleware on every dashboard/admin route (per-permission, not per-role)
|
|
85
|
+
- `Gate::before` returns `true` for any user with the `super-admin` role (full bypass)
|
|
86
|
+
- First sign-in assigns the `user` role; emails in `ADMIN_EMAILS` env auto-assign `super-admin`
|
|
87
|
+
|
|
88
|
+
## User Types and Permissions
|
|
89
|
+
|
|
90
|
+
### Public Visitor
|
|
91
|
+
|
|
92
|
+
- Can view product, docs, legal, sitemap, feed, and contact pages
|
|
93
|
+
- Cannot access dashboard or admin
|
|
94
|
+
|
|
95
|
+
### Signed-In Product User
|
|
96
|
+
|
|
97
|
+
- Signs in via Google (Laravel Socialite redirect)
|
|
98
|
+
- has a MySQL `users` row keyed by `google_id`
|
|
99
|
+
- holds a Sanctum personal access token (default 7-day TTL, configurable via `SANCTUM_TOKEN_EXPIRATION`)
|
|
100
|
+
- carries the `user` role by default
|
|
101
|
+
- can manage their own apps/builds/settings
|
|
102
|
+
- can connect Google Drive (server-side OAuth — tokens encrypted at rest on the User row)
|
|
103
|
+
|
|
104
|
+
### Admin User
|
|
105
|
+
|
|
106
|
+
- Same as signed-in user plus `admin` or `super-admin` role
|
|
107
|
+
- can access SPA admin pages and Nova admin
|
|
108
|
+
- super-admin bypasses every `can:` gate
|
|
109
|
+
|
|
110
|
+
### App Runtime Consumer
|
|
111
|
+
|
|
112
|
+
- Uses plugin APIs and manifest endpoints
|
|
113
|
+
- authenticates with a per-app API key (separate `ValidateApiKey` middleware on `/api/v1/*`)
|
|
114
|
+
- not a website operator account
|
|
115
|
+
|
|
116
|
+
## Page-Level Notes
|
|
117
|
+
|
|
118
|
+
### HomePage
|
|
119
|
+
|
|
120
|
+
- Hero positioning: complete update solution for Capacitor
|
|
121
|
+
- Calls to action: get started, view docs
|
|
122
|
+
- Highlights three core pillars: OTA updates, native app updates, in-app reviews
|
|
123
|
+
|
|
124
|
+
### FeaturesPage
|
|
125
|
+
|
|
126
|
+
- Feature cards for OTA, native app updates, and reviews
|
|
127
|
+
- Messaging includes delta updates, rollback, channels, encryption, analytics, priority levels, and rate limiting
|
|
128
|
+
|
|
129
|
+
### AboutPage
|
|
130
|
+
|
|
131
|
+
- Includes project mission
|
|
132
|
+
- explains why project exists
|
|
133
|
+
- highlights open-source positioning
|
|
134
|
+
- includes creator profile and contact links
|
|
135
|
+
|
|
136
|
+
### ContactPage
|
|
137
|
+
|
|
138
|
+
- No typed form submission flow
|
|
139
|
+
- Uses direct contact methods: email, WhatsApp, LinkedIn, portfolio, docs, NPM link
|
|
140
|
+
- Includes support-hour information and FAQ
|
|
141
|
+
|
|
142
|
+
### DocsPage / DocsMarkdownPage
|
|
143
|
+
|
|
144
|
+
- DocsPage acts as a rich docs landing surface
|
|
145
|
+
- DocsMarkdownPage renders markdown docs pages from the public docs payload
|
|
146
|
+
|
|
147
|
+
### ExamplesPage
|
|
148
|
+
|
|
149
|
+
- Hero + quick-start code snippets (OTA basic, React hook, background, app-store, self-hosted backend pattern)
|
|
150
|
+
- Two canonical example-app cards (React + Capacitor, Node.js + Express)
|
|
151
|
+
|
|
152
|
+
### SitemapPage and FeedPage
|
|
153
|
+
|
|
154
|
+
- Search/filter style discovery experiences
|
|
155
|
+
- use Input fields for route/content lookup
|
|
156
|
+
- intended as human-friendly content navigation surfaces
|
|
157
|
+
|
|
158
|
+
### DashboardOverview
|
|
159
|
+
|
|
160
|
+
- Shows owned app/build summary state
|
|
161
|
+
- includes CTA to upload first build
|
|
162
|
+
|
|
163
|
+
### AppsPage
|
|
164
|
+
|
|
165
|
+
- Central app management page
|
|
166
|
+
- create/edit/delete dialog workflows (URL-state driven: `?formMode`, `?editId`, `?deleteId`)
|
|
167
|
+
- stores package id, description, platforms, and generates an API key on creation
|
|
168
|
+
|
|
169
|
+
### AppDetailPage
|
|
170
|
+
|
|
171
|
+
- per-app management view
|
|
172
|
+
- shows builds and rollout state
|
|
173
|
+
- links to upload and rollout workflows
|
|
174
|
+
|
|
175
|
+
### BuildsPage / BuildDetailPage
|
|
176
|
+
|
|
177
|
+
- list and inspect build history
|
|
178
|
+
- filter by app/channel/status/platform
|
|
179
|
+
- build detail includes upload time, uploader, duration, and release metadata
|
|
180
|
+
|
|
181
|
+
### UploadPage
|
|
182
|
+
|
|
183
|
+
- Core publish UI
|
|
184
|
+
- requires Google Drive connection (server-side OAuth must be completed)
|
|
185
|
+
- multipart-POST ZIP to Laravel `/api/dashboard/apps/{app}/builds`
|
|
186
|
+
- Laravel computes SHA-256, signs with the app's signing key, stages in user's Drive, persists Build row in MySQL
|
|
187
|
+
|
|
188
|
+
### GoogleDrivePage
|
|
189
|
+
|
|
190
|
+
- starts the Drive OAuth flow (`/api/dashboard/google-drive/auth-url` → full-window Google redirect → `/oauth/google-drive/callback` → POST code to backend)
|
|
191
|
+
- shows Drive connection status, connected email, folder list, file count, and total size
|
|
192
|
+
|
|
193
|
+
### ConfigPage
|
|
194
|
+
|
|
195
|
+
- instructional/configuration surface
|
|
196
|
+
- presents the recommended path: dashboard publishes through the Laravel backend; plugin polls the Laravel manifest endpoint
|
|
197
|
+
|
|
198
|
+
### SettingsPage
|
|
199
|
+
|
|
200
|
+
- account profile details
|
|
201
|
+
- preferences (`users.preferences` JSON column via `/api/dashboard/preferences`)
|
|
202
|
+
- appearance/theme controls
|
|
203
|
+
- account deletion confirmation flow (Sanctum tokens revoked, MySQL row soft-deleted, encrypted Drive tokens cleared)
|
|
204
|
+
|
|
205
|
+
### RolloutsPage
|
|
206
|
+
|
|
207
|
+
- percentage controls
|
|
208
|
+
- pause/resume actions
|
|
209
|
+
- edit modal with numeric and range input
|
|
210
|
+
- rollout best practices guidance
|
|
211
|
+
|
|
212
|
+
### AnalyticsPage
|
|
213
|
+
|
|
214
|
+
- filters by app and channel
|
|
215
|
+
- aggregates analytics data across time range from `analytics_events` table
|
|
216
|
+
- intended for download/install/error/rollback analysis
|
|
217
|
+
|
|
218
|
+
### Admin Pages
|
|
219
|
+
|
|
220
|
+
- AdminOverview aggregates cross-system metrics
|
|
221
|
+
- AdminUsersPage supports user search/filtering
|
|
222
|
+
- AdminAppsPage supports app search/filtering
|
|
223
|
+
- AdminBuildsPage supports build search/filtering by multiple fields
|
|
224
|
+
- Full admin tooling (resource editors, custom actions) lives in Nova at `/nova`
|
|
225
|
+
|
|
226
|
+
## Form and Input Inventory
|
|
227
|
+
|
|
228
|
+
### LoginPage
|
|
229
|
+
|
|
230
|
+
- **Action:** Google sign-in button → SPA navigates to `${VITE_API_URL}/auth/google/redirect`
|
|
231
|
+
- **Inputs:** No text input fields
|
|
232
|
+
- **Errors handled:** popup blocked (unlikely with full-window redirect), generic OAuth failure displayed on `/auth/callback`
|
|
233
|
+
|
|
234
|
+
### SignupPage
|
|
235
|
+
|
|
236
|
+
- **Action:** Same Google flow as LoginPage; backend auto-provisions the User row + assigns `user` role
|
|
237
|
+
- **Inputs:** No text input fields
|
|
238
|
+
- **Purpose:** fast account creation for beta onboarding
|
|
239
|
+
|
|
240
|
+
### AppsPage Create/Edit App Dialog
|
|
241
|
+
|
|
242
|
+
- **Fields:**
|
|
243
|
+
- App name
|
|
244
|
+
- Package ID
|
|
245
|
+
- Description
|
|
246
|
+
- Platforms: Android, iOS, Web
|
|
247
|
+
- **Validation:**
|
|
248
|
+
- app name required, minimum length
|
|
249
|
+
- package ID required and regex-validated
|
|
250
|
+
- at least one platform required
|
|
251
|
+
- **Backend side effects on create (Laravel `AppController` + `UpdateBuildRequest`):**
|
|
252
|
+
- inserts row in `apps` table (RBAC-gated by `can:apps.create`)
|
|
253
|
+
- generates an API key, inserts row in `api_keys` table
|
|
254
|
+
- increments user `apps_count`
|
|
255
|
+
|
|
256
|
+
### AppsPage Delete Dialog
|
|
257
|
+
|
|
258
|
+
- **Purpose:** destructive app deletion
|
|
259
|
+
- **Backend side effects:** soft-deletes app row, revokes related API keys, decrements user `apps_count`, optionally archives builds
|
|
260
|
+
|
|
261
|
+
### UploadPage Publish Form
|
|
262
|
+
|
|
263
|
+
- **Fields:**
|
|
264
|
+
- file picker / drag-drop ZIP
|
|
265
|
+
- app select
|
|
266
|
+
- channel select
|
|
267
|
+
- platform select
|
|
268
|
+
- version input
|
|
269
|
+
- build number input
|
|
270
|
+
- release notes textarea
|
|
271
|
+
- **Validation (server-side `UpdateBuildRequest` FormRequest):**
|
|
272
|
+
- app_id required + ownership-checked
|
|
273
|
+
- version required + semver-validated
|
|
274
|
+
- build_number required + numeric
|
|
275
|
+
- ZIP file required + max-size enforced
|
|
276
|
+
- Drive connection required (backend rejects otherwise)
|
|
277
|
+
- **Flow:**
|
|
278
|
+
- browser multipart POST → Laravel `/api/dashboard/apps/{app}/builds`
|
|
279
|
+
- Laravel validates, computes SHA-256, signs with RSA-SHA256 using the app's signing key
|
|
280
|
+
- Laravel uploads the ZIP to the user's Drive folder (server-side OAuth tokens)
|
|
281
|
+
- Laravel writes the Build row, updates the App's active manifest pointer
|
|
282
|
+
- SPA navigates to app detail
|
|
283
|
+
|
|
284
|
+
### SettingsPage Preferences
|
|
285
|
+
|
|
286
|
+
- **Fields:**
|
|
287
|
+
- email notifications toggle
|
|
288
|
+
- update notifications toggle
|
|
289
|
+
- theme select
|
|
290
|
+
- language select
|
|
291
|
+
- **Action:** PATCH `/api/dashboard/preferences` → updates `users.preferences` JSON column
|
|
292
|
+
|
|
293
|
+
### SettingsPage Delete Account
|
|
294
|
+
|
|
295
|
+
- **Field:** confirmation input requiring exact `DELETE`
|
|
296
|
+
- **Action:** DELETE `/api/dashboard/me` → revokes Sanctum tokens, soft-deletes user row, clears encrypted Drive tokens, cascades to apps/builds
|
|
297
|
+
|
|
298
|
+
### RolloutsPage Edit Modal
|
|
299
|
+
|
|
300
|
+
- **Fields:**
|
|
301
|
+
- rollout percentage numeric input
|
|
302
|
+
- rollout percentage range slider
|
|
303
|
+
- **Action:** PATCH `/api/dashboard/builds/{build}/rollout` → updates rollout config on the Build row
|
|
304
|
+
|
|
305
|
+
### BuildsPage Filters
|
|
306
|
+
|
|
307
|
+
- search input
|
|
308
|
+
- app filter
|
|
309
|
+
- channel filter
|
|
310
|
+
- platform filter
|
|
311
|
+
- status filter
|
|
312
|
+
- URL-state driven (`?q=`, `?app=`, `?channel=`, `?platform=`, `?status=`, `?page=`)
|
|
313
|
+
|
|
314
|
+
### AdminBuildsPage Filters
|
|
315
|
+
|
|
316
|
+
- search input
|
|
317
|
+
- app filter
|
|
318
|
+
- user filter
|
|
319
|
+
- channel/status/platform filters
|
|
320
|
+
|
|
321
|
+
### AdminUsersPage Filters
|
|
322
|
+
|
|
323
|
+
- search input
|
|
324
|
+
|
|
325
|
+
### AdminAppsPage Filters
|
|
326
|
+
|
|
327
|
+
- search input
|
|
328
|
+
|
|
329
|
+
### FeedPage and SitemapPage
|
|
330
|
+
|
|
331
|
+
- search input for route/content discovery
|
|
332
|
+
|
|
333
|
+
## Contact and Support Surfaces
|
|
334
|
+
|
|
335
|
+
### ContactPage URLs
|
|
336
|
+
|
|
337
|
+
- `mailto:aoneahsan@gmail.com`
|
|
338
|
+
- `https://www.npmjs.com/package/native-update`
|
|
339
|
+
- `https://wa.me/923046619706`
|
|
340
|
+
- `https://linkedin.com/in/aoneahsan`
|
|
341
|
+
- `https://aoneahsan.com`
|
|
342
|
+
- internal docs link: `/docs`
|
|
343
|
+
|
|
344
|
+
## Important UX and Product Notes
|
|
345
|
+
|
|
346
|
+
- Dashboard is clearly owner/operator tooling, not consumer UI
|
|
347
|
+
- Google sign-in is the only auth path
|
|
348
|
+
- Google Drive is central to the publishing workflow (server-side OAuth, not browser SDK)
|
|
349
|
+
- App creation is a prerequisite for upload
|
|
350
|
+
- Drive connection is a prerequisite for upload
|
|
351
|
+
- Rollouts are edited on the Build row, not from a separate dedicated rollout service
|
|
352
|
+
- All user-visible state that should survive refresh (modal open, edit/delete dialogs, filters, tabs) is encoded in URL search params via the shared `useUrlState` hooks
|