native-update 1.0.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/CapacitorNativeUpdate.podspec +18 -0
- package/LICENSE +21 -0
- package/Readme.md +451 -0
- package/android/build.gradle +92 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/android/gradle.properties +17 -0
- package/android/proguard-rules.pro +29 -0
- package/android/settings.gradle +2 -0
- package/android/src/main/AndroidManifest.xml +34 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/AppReviewPlugin.kt +153 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/AppUpdatePlugin.kt +275 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundNotificationManager.kt +390 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateManager.kt +46 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdatePlugin.kt +333 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateWorker.kt +251 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/CapacitorNativeUpdatePlugin.kt +265 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/LiveUpdatePlugin.kt +526 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/NotificationActionReceiver.kt +99 -0
- package/android/src/main/java/com/aoneahsan/nativeupdate/SecurityManager.kt +249 -0
- package/dist/esm/__tests__/bundle-manager.test.d.ts +1 -0
- package/dist/esm/__tests__/bundle-manager.test.js +123 -0
- package/dist/esm/__tests__/bundle-manager.test.js.map +1 -0
- package/dist/esm/__tests__/config.test.d.ts +1 -0
- package/dist/esm/__tests__/config.test.js +69 -0
- package/dist/esm/__tests__/config.test.js.map +1 -0
- package/dist/esm/__tests__/integration.test.d.ts +1 -0
- package/dist/esm/__tests__/integration.test.js +78 -0
- package/dist/esm/__tests__/integration.test.js.map +1 -0
- package/dist/esm/__tests__/security.test.d.ts +1 -0
- package/dist/esm/__tests__/security.test.js +54 -0
- package/dist/esm/__tests__/security.test.js.map +1 -0
- package/dist/esm/__tests__/version-manager.test.d.ts +1 -0
- package/dist/esm/__tests__/version-manager.test.js +45 -0
- package/dist/esm/__tests__/version-manager.test.js.map +1 -0
- package/dist/esm/app-review/app-review-manager.d.ts +24 -0
- package/dist/esm/app-review/app-review-manager.js +195 -0
- package/dist/esm/app-review/app-review-manager.js.map +1 -0
- package/dist/esm/app-review/index.d.ts +5 -0
- package/dist/esm/app-review/index.js +6 -0
- package/dist/esm/app-review/index.js.map +1 -0
- package/dist/esm/app-review/platform-review-handler.d.ts +20 -0
- package/dist/esm/app-review/platform-review-handler.js +138 -0
- package/dist/esm/app-review/platform-review-handler.js.map +1 -0
- package/dist/esm/app-review/review-conditions-checker.d.ts +22 -0
- package/dist/esm/app-review/review-conditions-checker.js +155 -0
- package/dist/esm/app-review/review-conditions-checker.js.map +1 -0
- package/dist/esm/app-review/review-rate-limiter.d.ts +23 -0
- package/dist/esm/app-review/review-rate-limiter.js +164 -0
- package/dist/esm/app-review/review-rate-limiter.js.map +1 -0
- package/dist/esm/app-review/types.d.ts +41 -0
- package/dist/esm/app-review/types.js +2 -0
- package/dist/esm/app-review/types.js.map +1 -0
- package/dist/esm/app-update/app-update-checker.d.ts +13 -0
- package/dist/esm/app-update/app-update-checker.js +104 -0
- package/dist/esm/app-update/app-update-checker.js.map +1 -0
- package/dist/esm/app-update/app-update-installer.d.ts +19 -0
- package/dist/esm/app-update/app-update-installer.js +123 -0
- package/dist/esm/app-update/app-update-installer.js.map +1 -0
- package/dist/esm/app-update/app-update-manager.d.ts +28 -0
- package/dist/esm/app-update/app-update-manager.js +199 -0
- package/dist/esm/app-update/app-update-manager.js.map +1 -0
- package/dist/esm/app-update/app-update-notifier.d.ts +14 -0
- package/dist/esm/app-update/app-update-notifier.js +100 -0
- package/dist/esm/app-update/app-update-notifier.js.map +1 -0
- package/dist/esm/app-update/index.d.ts +6 -0
- package/dist/esm/app-update/index.js +7 -0
- package/dist/esm/app-update/index.js.map +1 -0
- package/dist/esm/app-update/platform-app-update.d.ts +19 -0
- package/dist/esm/app-update/platform-app-update.js +129 -0
- package/dist/esm/app-update/platform-app-update.js.map +1 -0
- package/dist/esm/app-update/types.d.ts +58 -0
- package/dist/esm/app-update/types.js +12 -0
- package/dist/esm/app-update/types.js.map +1 -0
- package/dist/esm/background-update/background-scheduler.d.ts +17 -0
- package/dist/esm/background-update/background-scheduler.js +195 -0
- package/dist/esm/background-update/background-scheduler.js.map +1 -0
- package/dist/esm/background-update/index.d.ts +3 -0
- package/dist/esm/background-update/index.js +3 -0
- package/dist/esm/background-update/index.js.map +1 -0
- package/dist/esm/background-update/notification-manager.d.ts +29 -0
- package/dist/esm/background-update/notification-manager.js +89 -0
- package/dist/esm/background-update/notification-manager.js.map +1 -0
- package/dist/esm/core/analytics.d.ts +70 -0
- package/dist/esm/core/analytics.js +137 -0
- package/dist/esm/core/analytics.js.map +1 -0
- package/dist/esm/core/cache-manager.d.ts +72 -0
- package/dist/esm/core/cache-manager.js +275 -0
- package/dist/esm/core/cache-manager.js.map +1 -0
- package/dist/esm/core/config.d.ts +48 -0
- package/dist/esm/core/config.js +83 -0
- package/dist/esm/core/config.js.map +1 -0
- package/dist/esm/core/errors.d.ts +51 -0
- package/dist/esm/core/errors.js +80 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/logger.d.ts +21 -0
- package/dist/esm/core/logger.js +109 -0
- package/dist/esm/core/logger.js.map +1 -0
- package/dist/esm/core/performance.d.ts +53 -0
- package/dist/esm/core/performance.js +140 -0
- package/dist/esm/core/performance.js.map +1 -0
- package/dist/esm/core/plugin-manager.d.ts +66 -0
- package/dist/esm/core/plugin-manager.js +148 -0
- package/dist/esm/core/plugin-manager.js.map +1 -0
- package/dist/esm/core/security.d.ts +93 -0
- package/dist/esm/core/security.js +315 -0
- package/dist/esm/core/security.js.map +1 -0
- package/dist/esm/definitions.d.ts +639 -0
- package/dist/esm/definitions.js +103 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/live-update/bundle-manager.d.ts +94 -0
- package/dist/esm/live-update/bundle-manager.js +310 -0
- package/dist/esm/live-update/bundle-manager.js.map +1 -0
- package/dist/esm/live-update/certificate-pinning.d.ts +38 -0
- package/dist/esm/live-update/certificate-pinning.js +78 -0
- package/dist/esm/live-update/certificate-pinning.js.map +1 -0
- package/dist/esm/live-update/download-manager.d.ts +67 -0
- package/dist/esm/live-update/download-manager.js +319 -0
- package/dist/esm/live-update/download-manager.js.map +1 -0
- package/dist/esm/live-update/update-manager.d.ts +52 -0
- package/dist/esm/live-update/update-manager.js +294 -0
- package/dist/esm/live-update/update-manager.js.map +1 -0
- package/dist/esm/live-update/version-manager.d.ts +84 -0
- package/dist/esm/live-update/version-manager.js +335 -0
- package/dist/esm/live-update/version-manager.js.map +1 -0
- package/dist/esm/plugin.d.ts +6 -0
- package/dist/esm/plugin.js +283 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/security/crypto.d.ts +25 -0
- package/dist/esm/security/crypto.js +70 -0
- package/dist/esm/security/crypto.js.map +1 -0
- package/dist/esm/security/validator.d.ts +60 -0
- package/dist/esm/security/validator.js +143 -0
- package/dist/esm/security/validator.js.map +1 -0
- package/dist/esm/web.d.ts +74 -0
- package/dist/esm/web.js +595 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +2 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.esm.js +2 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/plugin.js +3 -0
- package/dist/plugin.js.map +1 -0
- package/docs/APP_REVIEW_GUIDE.md +768 -0
- package/docs/BUNDLE_SIGNING.md +264 -0
- package/docs/LIVE_UPDATES_GUIDE.md +650 -0
- package/docs/MIGRATION.md +192 -0
- package/docs/NATIVE_UPDATES_GUIDE.md +694 -0
- package/docs/QUICK_START.md +606 -0
- package/docs/README.md +111 -0
- package/docs/REMAINING_FEATURES.md +139 -0
- package/docs/api/app-review-api.md +259 -0
- package/docs/api/app-update-api.md +238 -0
- package/docs/api/events-api.md +451 -0
- package/docs/api/live-update-api.md +265 -0
- package/docs/background-updates.md +392 -0
- package/docs/examples/advanced-scenarios.md +410 -0
- package/docs/examples/basic-usage.md +185 -0
- package/docs/features/app-reviews.md +975 -0
- package/docs/features/app-updates.md +785 -0
- package/docs/features/live-updates.md +633 -0
- package/docs/getting-started/configuration.md +468 -0
- package/docs/getting-started/installation.md +209 -0
- package/docs/getting-started/quick-start.md +379 -0
- package/docs/guides/deployment-guide.md +333 -0
- package/docs/guides/migration-from-codepush.md +142 -0
- package/docs/guides/security-best-practices.md +1057 -0
- package/docs/guides/testing-guide.md +373 -0
- package/docs/production-readiness.md +478 -0
- package/docs/security/certificate-pinning.md +122 -0
- package/docs/server-requirements.md +147 -0
- package/ios/Plugin/AppReview/AppReviewPlugin.swift +158 -0
- package/ios/Plugin/AppUpdate/AppUpdatePlugin.swift +234 -0
- package/ios/Plugin/BackgroundUpdate/BackgroundNotificationManager.swift +329 -0
- package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +396 -0
- package/ios/Plugin/CapacitorNativeUpdatePlugin.m +45 -0
- package/ios/Plugin/CapacitorNativeUpdatePlugin.swift +190 -0
- package/ios/Plugin/Info.plist +43 -0
- package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +689 -0
- package/ios/Plugin/LiveUpdate/WebViewConfiguration.swift +45 -0
- package/ios/Plugin/Security/SecurityManager.swift +289 -0
- package/package.json +90 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { PluginManager } from '../core/plugin-manager';
|
|
2
|
+
import { UpdateError, ValidationError, ErrorCode } from '../core/errors';
|
|
3
|
+
import { SecurityValidator } from '../core/security';
|
|
4
|
+
import { Directory } from '@capacitor/filesystem';
|
|
5
|
+
/**
|
|
6
|
+
* Manages atomic bundle installation with rollback capability
|
|
7
|
+
*/
|
|
8
|
+
export class UpdateManager {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.filesystem = null;
|
|
11
|
+
this.updateInProgress = false;
|
|
12
|
+
this.currentState = null;
|
|
13
|
+
this.pluginManager = PluginManager.getInstance();
|
|
14
|
+
this.securityValidator = SecurityValidator.getInstance();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize update manager
|
|
18
|
+
*/
|
|
19
|
+
async initialize() {
|
|
20
|
+
this.filesystem = this.pluginManager.getConfigManager().get('filesystem');
|
|
21
|
+
if (!this.filesystem) {
|
|
22
|
+
throw new UpdateError(ErrorCode.MISSING_DEPENDENCY, 'Filesystem not configured');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply bundle update atomically
|
|
27
|
+
*/
|
|
28
|
+
async applyUpdate(bundleId, options) {
|
|
29
|
+
if (this.updateInProgress) {
|
|
30
|
+
throw new UpdateError(ErrorCode.UPDATE_FAILED, 'Another update is already in progress');
|
|
31
|
+
}
|
|
32
|
+
const logger = this.pluginManager.getLogger();
|
|
33
|
+
const bundleManager = this.pluginManager.getBundleManager();
|
|
34
|
+
try {
|
|
35
|
+
this.updateInProgress = true;
|
|
36
|
+
logger.info('Starting bundle update', { bundleId });
|
|
37
|
+
// Get the new bundle
|
|
38
|
+
const newBundle = await bundleManager.getBundle(bundleId);
|
|
39
|
+
if (!newBundle) {
|
|
40
|
+
throw new UpdateError(ErrorCode.FILE_NOT_FOUND, `Bundle ${bundleId} not found`);
|
|
41
|
+
}
|
|
42
|
+
// Verify bundle is ready
|
|
43
|
+
if (newBundle.status !== 'READY' && newBundle.status !== 'ACTIVE') {
|
|
44
|
+
throw new UpdateError(ErrorCode.BUNDLE_NOT_READY, `Bundle ${bundleId} is not ready for installation`);
|
|
45
|
+
}
|
|
46
|
+
// Get current active bundle
|
|
47
|
+
const currentBundle = await bundleManager.getActiveBundle();
|
|
48
|
+
// Initialize update state
|
|
49
|
+
this.currentState = {
|
|
50
|
+
currentBundle,
|
|
51
|
+
newBundle,
|
|
52
|
+
backupPath: null,
|
|
53
|
+
startTime: Date.now(),
|
|
54
|
+
};
|
|
55
|
+
// Validate update
|
|
56
|
+
await this.validateUpdate(currentBundle, newBundle, options);
|
|
57
|
+
// Create backup of current state
|
|
58
|
+
if (currentBundle && currentBundle.bundleId !== 'default') {
|
|
59
|
+
this.currentState.backupPath = await this.createBackup(currentBundle);
|
|
60
|
+
}
|
|
61
|
+
// Apply the update
|
|
62
|
+
await this.performUpdate(newBundle);
|
|
63
|
+
// Verify the update
|
|
64
|
+
await this.verifyUpdate(newBundle);
|
|
65
|
+
// Mark as active
|
|
66
|
+
await bundleManager.setActiveBundle(bundleId);
|
|
67
|
+
// Clean up old bundles if configured
|
|
68
|
+
if (options === null || options === void 0 ? void 0 : options.cleanupOldBundles) {
|
|
69
|
+
await bundleManager.cleanupOldBundles(options.keepBundleCount || 3);
|
|
70
|
+
}
|
|
71
|
+
logger.info('Bundle update completed successfully', {
|
|
72
|
+
bundleId,
|
|
73
|
+
version: newBundle.version,
|
|
74
|
+
duration: Date.now() - this.currentState.startTime,
|
|
75
|
+
});
|
|
76
|
+
// Clear state
|
|
77
|
+
this.currentState = null;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.error('Bundle update failed', error);
|
|
81
|
+
// Attempt rollback
|
|
82
|
+
if (this.currentState) {
|
|
83
|
+
await this.rollback();
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
this.updateInProgress = false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate update before applying
|
|
93
|
+
*/
|
|
94
|
+
async validateUpdate(currentBundle, newBundle, options) {
|
|
95
|
+
const logger = this.pluginManager.getLogger();
|
|
96
|
+
const versionManager = this.pluginManager.getVersionManager();
|
|
97
|
+
// Check if downgrade
|
|
98
|
+
if (currentBundle && !(options === null || options === void 0 ? void 0 : options.allowDowngrade)) {
|
|
99
|
+
if (versionManager.shouldBlockDowngrade(currentBundle.version, newBundle.version)) {
|
|
100
|
+
throw new ValidationError(ErrorCode.VERSION_DOWNGRADE, `Cannot downgrade from ${currentBundle.version} to ${newBundle.version}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Verify bundle integrity
|
|
104
|
+
if (!newBundle.verified) {
|
|
105
|
+
logger.warn('Bundle not verified, verifying now', {
|
|
106
|
+
bundleId: newBundle.bundleId,
|
|
107
|
+
});
|
|
108
|
+
// Load bundle data
|
|
109
|
+
const downloadManager = this.pluginManager.getDownloadManager();
|
|
110
|
+
const blob = await downloadManager.loadBlob(newBundle.bundleId);
|
|
111
|
+
if (!blob) {
|
|
112
|
+
throw new UpdateError(ErrorCode.FILE_NOT_FOUND, 'Bundle data not found');
|
|
113
|
+
}
|
|
114
|
+
// Verify checksum
|
|
115
|
+
const arrayBuffer = await blob.arrayBuffer();
|
|
116
|
+
const isValid = await this.securityValidator.verifyChecksum(arrayBuffer, newBundle.checksum);
|
|
117
|
+
if (!isValid) {
|
|
118
|
+
throw new ValidationError(ErrorCode.CHECKSUM_MISMATCH, 'Bundle checksum verification failed');
|
|
119
|
+
}
|
|
120
|
+
// Verify signature if enabled
|
|
121
|
+
if (newBundle.signature) {
|
|
122
|
+
const signatureValid = await this.securityValidator.verifySignature(arrayBuffer, newBundle.signature);
|
|
123
|
+
if (!signatureValid) {
|
|
124
|
+
throw new ValidationError(ErrorCode.SIGNATURE_INVALID, 'Bundle signature verification failed');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Mark as verified
|
|
128
|
+
await this.pluginManager
|
|
129
|
+
.getBundleManager()
|
|
130
|
+
.markBundleAsVerified(newBundle.bundleId);
|
|
131
|
+
}
|
|
132
|
+
logger.debug('Bundle validation passed', { bundleId: newBundle.bundleId });
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create backup of current bundle
|
|
136
|
+
*/
|
|
137
|
+
async createBackup(bundle) {
|
|
138
|
+
const backupPath = `backups/${bundle.bundleId}_${Date.now()}`;
|
|
139
|
+
const logger = this.pluginManager.getLogger();
|
|
140
|
+
try {
|
|
141
|
+
// Create backup directory
|
|
142
|
+
await this.filesystem.mkdir({
|
|
143
|
+
path: backupPath,
|
|
144
|
+
directory: Directory.Data,
|
|
145
|
+
recursive: true,
|
|
146
|
+
});
|
|
147
|
+
// Copy bundle files
|
|
148
|
+
await this.filesystem.copy({
|
|
149
|
+
from: bundle.path,
|
|
150
|
+
to: backupPath,
|
|
151
|
+
directory: Directory.Data,
|
|
152
|
+
});
|
|
153
|
+
logger.info('Backup created', { bundleId: bundle.bundleId, backupPath });
|
|
154
|
+
return backupPath;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
logger.error('Failed to create backup', error);
|
|
158
|
+
throw new UpdateError(ErrorCode.UPDATE_FAILED, 'Failed to create backup', undefined, error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Perform the actual update
|
|
163
|
+
*/
|
|
164
|
+
async performUpdate(bundle) {
|
|
165
|
+
const logger = this.pluginManager.getLogger();
|
|
166
|
+
try {
|
|
167
|
+
// Extract bundle to target location
|
|
168
|
+
const targetPath = `active/${bundle.bundleId}`;
|
|
169
|
+
// Create target directory
|
|
170
|
+
await this.filesystem.mkdir({
|
|
171
|
+
path: targetPath,
|
|
172
|
+
directory: Directory.Data,
|
|
173
|
+
recursive: true,
|
|
174
|
+
});
|
|
175
|
+
// Copy bundle files
|
|
176
|
+
await this.filesystem.copy({
|
|
177
|
+
from: bundle.path,
|
|
178
|
+
to: targetPath,
|
|
179
|
+
directory: Directory.Data,
|
|
180
|
+
});
|
|
181
|
+
// Update bundle path
|
|
182
|
+
bundle.path = targetPath;
|
|
183
|
+
logger.debug('Bundle files installed', {
|
|
184
|
+
bundleId: bundle.bundleId,
|
|
185
|
+
targetPath,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
throw new UpdateError(ErrorCode.UPDATE_FAILED, 'Failed to install bundle files', undefined, error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Verify update was successful
|
|
194
|
+
*/
|
|
195
|
+
async verifyUpdate(bundle) {
|
|
196
|
+
try {
|
|
197
|
+
// Check if main bundle files exist
|
|
198
|
+
const indexPath = `${bundle.path}/index.html`;
|
|
199
|
+
await this.filesystem.stat({
|
|
200
|
+
path: indexPath,
|
|
201
|
+
directory: Directory.Data,
|
|
202
|
+
});
|
|
203
|
+
// Additional verification can be added here
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
throw new UpdateError(ErrorCode.UPDATE_FAILED, 'Bundle verification failed after installation', undefined, error);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Rollback to previous state
|
|
211
|
+
*/
|
|
212
|
+
async rollback() {
|
|
213
|
+
var _a;
|
|
214
|
+
if (!this.currentState) {
|
|
215
|
+
throw new UpdateError(ErrorCode.ROLLBACK_FAILED, 'No update state to rollback');
|
|
216
|
+
}
|
|
217
|
+
const logger = this.pluginManager.getLogger();
|
|
218
|
+
logger.warn('Starting rollback', {
|
|
219
|
+
from: this.currentState.newBundle.bundleId,
|
|
220
|
+
to: ((_a = this.currentState.currentBundle) === null || _a === void 0 ? void 0 : _a.bundleId) || 'default',
|
|
221
|
+
});
|
|
222
|
+
try {
|
|
223
|
+
const bundleManager = this.pluginManager.getBundleManager();
|
|
224
|
+
// Restore from backup if available
|
|
225
|
+
if (this.currentState.backupPath && this.currentState.currentBundle) {
|
|
226
|
+
const restoredPath = `active/${this.currentState.currentBundle.bundleId}`;
|
|
227
|
+
await this.filesystem.copy({
|
|
228
|
+
from: this.currentState.backupPath,
|
|
229
|
+
to: restoredPath,
|
|
230
|
+
directory: Directory.Data,
|
|
231
|
+
});
|
|
232
|
+
// Update bundle path
|
|
233
|
+
this.currentState.currentBundle.path = restoredPath;
|
|
234
|
+
await bundleManager.saveBundleInfo(this.currentState.currentBundle);
|
|
235
|
+
}
|
|
236
|
+
// Restore active bundle
|
|
237
|
+
if (this.currentState.currentBundle) {
|
|
238
|
+
await bundleManager.setActiveBundle(this.currentState.currentBundle.bundleId);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// No previous bundle, clear active
|
|
242
|
+
await bundleManager.clearActiveBundle();
|
|
243
|
+
}
|
|
244
|
+
logger.info('Rollback completed successfully');
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
logger.error('Rollback failed', error);
|
|
248
|
+
throw new UpdateError(ErrorCode.ROLLBACK_FAILED, 'Failed to rollback update', undefined, error);
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
// Clean up backup
|
|
252
|
+
if (this.currentState.backupPath) {
|
|
253
|
+
try {
|
|
254
|
+
await this.filesystem.rmdir({
|
|
255
|
+
path: this.currentState.backupPath,
|
|
256
|
+
directory: Directory.Data,
|
|
257
|
+
recursive: true,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
logger.warn('Failed to clean up backup', error);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get current update progress
|
|
268
|
+
*/
|
|
269
|
+
getUpdateProgress() {
|
|
270
|
+
var _a, _b;
|
|
271
|
+
return {
|
|
272
|
+
inProgress: this.updateInProgress,
|
|
273
|
+
bundleId: (_a = this.currentState) === null || _a === void 0 ? void 0 : _a.newBundle.bundleId,
|
|
274
|
+
startTime: (_b = this.currentState) === null || _b === void 0 ? void 0 : _b.startTime,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Cancel current update (if possible)
|
|
279
|
+
*/
|
|
280
|
+
async cancelUpdate() {
|
|
281
|
+
if (!this.updateInProgress || !this.currentState) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const logger = this.pluginManager.getLogger();
|
|
285
|
+
logger.warn('Cancelling update', {
|
|
286
|
+
bundleId: this.currentState.newBundle.bundleId,
|
|
287
|
+
});
|
|
288
|
+
// Attempt rollback
|
|
289
|
+
await this.rollback();
|
|
290
|
+
this.updateInProgress = false;
|
|
291
|
+
this.currentState = null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=update-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../../src/live-update/update-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { LatestVersion } from '../definitions';
|
|
2
|
+
/**
|
|
3
|
+
* Manages version checking and comparison
|
|
4
|
+
*/
|
|
5
|
+
export declare class VersionManager {
|
|
6
|
+
private readonly VERSION_CHECK_CACHE_KEY;
|
|
7
|
+
private readonly CACHE_DURATION;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly configManager;
|
|
10
|
+
private readonly securityValidator;
|
|
11
|
+
private preferences;
|
|
12
|
+
private memoryCache;
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Compare two semantic versions
|
|
16
|
+
*/
|
|
17
|
+
static compareVersions(version1: string, version2: string): number;
|
|
18
|
+
/**
|
|
19
|
+
* Validate semantic version format
|
|
20
|
+
*/
|
|
21
|
+
static isValidVersion(version: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Check if update should be performed
|
|
24
|
+
*/
|
|
25
|
+
static shouldUpdate(currentVersion: string, newVersion: string, minAppVersion?: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the version manager
|
|
28
|
+
*/
|
|
29
|
+
initialize(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Check for latest version from server
|
|
32
|
+
*/
|
|
33
|
+
checkForUpdates(serverUrl: string, channel: string, currentVersion: string, appId: string): Promise<LatestVersion | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Compare two versions
|
|
36
|
+
*/
|
|
37
|
+
isNewerVersion(version1: string, version2: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Check if update is mandatory based on minimum version
|
|
40
|
+
*/
|
|
41
|
+
isUpdateMandatory(currentVersion: string, minimumVersion?: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Parse version metadata
|
|
44
|
+
*/
|
|
45
|
+
parseVersion(version: string): {
|
|
46
|
+
major: number;
|
|
47
|
+
minor: number;
|
|
48
|
+
patch: number;
|
|
49
|
+
prerelease?: string;
|
|
50
|
+
build?: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Generate version string from components
|
|
54
|
+
*/
|
|
55
|
+
buildVersionString(components: {
|
|
56
|
+
major: number;
|
|
57
|
+
minor: number;
|
|
58
|
+
patch: number;
|
|
59
|
+
prerelease?: string;
|
|
60
|
+
build?: string;
|
|
61
|
+
}): string;
|
|
62
|
+
/**
|
|
63
|
+
* Check if version is compatible with native version requirements
|
|
64
|
+
*/
|
|
65
|
+
isCompatibleWithNativeVersion(bundleVersion: string, nativeVersion: string, compatibility?: {
|
|
66
|
+
[key: string]: string;
|
|
67
|
+
}): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get version from cache
|
|
70
|
+
*/
|
|
71
|
+
private getCachedVersionInfo;
|
|
72
|
+
/**
|
|
73
|
+
* Cache version info
|
|
74
|
+
*/
|
|
75
|
+
private cacheVersionInfo;
|
|
76
|
+
/**
|
|
77
|
+
* Clear version cache
|
|
78
|
+
*/
|
|
79
|
+
clearVersionCache(): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Check if downgrade protection should block update
|
|
82
|
+
*/
|
|
83
|
+
shouldBlockDowngrade(currentVersion: string, newVersion: string): boolean;
|
|
84
|
+
}
|