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.
Files changed (184) hide show
  1. package/CapacitorNativeUpdate.podspec +18 -0
  2. package/LICENSE +21 -0
  3. package/Readme.md +451 -0
  4. package/android/build.gradle +92 -0
  5. package/android/gradle/wrapper/gradle-wrapper.properties +8 -0
  6. package/android/gradle.properties +17 -0
  7. package/android/proguard-rules.pro +29 -0
  8. package/android/settings.gradle +2 -0
  9. package/android/src/main/AndroidManifest.xml +34 -0
  10. package/android/src/main/java/com/aoneahsan/nativeupdate/AppReviewPlugin.kt +153 -0
  11. package/android/src/main/java/com/aoneahsan/nativeupdate/AppUpdatePlugin.kt +275 -0
  12. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundNotificationManager.kt +390 -0
  13. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateManager.kt +46 -0
  14. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdatePlugin.kt +333 -0
  15. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateWorker.kt +251 -0
  16. package/android/src/main/java/com/aoneahsan/nativeupdate/CapacitorNativeUpdatePlugin.kt +265 -0
  17. package/android/src/main/java/com/aoneahsan/nativeupdate/LiveUpdatePlugin.kt +526 -0
  18. package/android/src/main/java/com/aoneahsan/nativeupdate/NotificationActionReceiver.kt +99 -0
  19. package/android/src/main/java/com/aoneahsan/nativeupdate/SecurityManager.kt +249 -0
  20. package/dist/esm/__tests__/bundle-manager.test.d.ts +1 -0
  21. package/dist/esm/__tests__/bundle-manager.test.js +123 -0
  22. package/dist/esm/__tests__/bundle-manager.test.js.map +1 -0
  23. package/dist/esm/__tests__/config.test.d.ts +1 -0
  24. package/dist/esm/__tests__/config.test.js +69 -0
  25. package/dist/esm/__tests__/config.test.js.map +1 -0
  26. package/dist/esm/__tests__/integration.test.d.ts +1 -0
  27. package/dist/esm/__tests__/integration.test.js +78 -0
  28. package/dist/esm/__tests__/integration.test.js.map +1 -0
  29. package/dist/esm/__tests__/security.test.d.ts +1 -0
  30. package/dist/esm/__tests__/security.test.js +54 -0
  31. package/dist/esm/__tests__/security.test.js.map +1 -0
  32. package/dist/esm/__tests__/version-manager.test.d.ts +1 -0
  33. package/dist/esm/__tests__/version-manager.test.js +45 -0
  34. package/dist/esm/__tests__/version-manager.test.js.map +1 -0
  35. package/dist/esm/app-review/app-review-manager.d.ts +24 -0
  36. package/dist/esm/app-review/app-review-manager.js +195 -0
  37. package/dist/esm/app-review/app-review-manager.js.map +1 -0
  38. package/dist/esm/app-review/index.d.ts +5 -0
  39. package/dist/esm/app-review/index.js +6 -0
  40. package/dist/esm/app-review/index.js.map +1 -0
  41. package/dist/esm/app-review/platform-review-handler.d.ts +20 -0
  42. package/dist/esm/app-review/platform-review-handler.js +138 -0
  43. package/dist/esm/app-review/platform-review-handler.js.map +1 -0
  44. package/dist/esm/app-review/review-conditions-checker.d.ts +22 -0
  45. package/dist/esm/app-review/review-conditions-checker.js +155 -0
  46. package/dist/esm/app-review/review-conditions-checker.js.map +1 -0
  47. package/dist/esm/app-review/review-rate-limiter.d.ts +23 -0
  48. package/dist/esm/app-review/review-rate-limiter.js +164 -0
  49. package/dist/esm/app-review/review-rate-limiter.js.map +1 -0
  50. package/dist/esm/app-review/types.d.ts +41 -0
  51. package/dist/esm/app-review/types.js +2 -0
  52. package/dist/esm/app-review/types.js.map +1 -0
  53. package/dist/esm/app-update/app-update-checker.d.ts +13 -0
  54. package/dist/esm/app-update/app-update-checker.js +104 -0
  55. package/dist/esm/app-update/app-update-checker.js.map +1 -0
  56. package/dist/esm/app-update/app-update-installer.d.ts +19 -0
  57. package/dist/esm/app-update/app-update-installer.js +123 -0
  58. package/dist/esm/app-update/app-update-installer.js.map +1 -0
  59. package/dist/esm/app-update/app-update-manager.d.ts +28 -0
  60. package/dist/esm/app-update/app-update-manager.js +199 -0
  61. package/dist/esm/app-update/app-update-manager.js.map +1 -0
  62. package/dist/esm/app-update/app-update-notifier.d.ts +14 -0
  63. package/dist/esm/app-update/app-update-notifier.js +100 -0
  64. package/dist/esm/app-update/app-update-notifier.js.map +1 -0
  65. package/dist/esm/app-update/index.d.ts +6 -0
  66. package/dist/esm/app-update/index.js +7 -0
  67. package/dist/esm/app-update/index.js.map +1 -0
  68. package/dist/esm/app-update/platform-app-update.d.ts +19 -0
  69. package/dist/esm/app-update/platform-app-update.js +129 -0
  70. package/dist/esm/app-update/platform-app-update.js.map +1 -0
  71. package/dist/esm/app-update/types.d.ts +58 -0
  72. package/dist/esm/app-update/types.js +12 -0
  73. package/dist/esm/app-update/types.js.map +1 -0
  74. package/dist/esm/background-update/background-scheduler.d.ts +17 -0
  75. package/dist/esm/background-update/background-scheduler.js +195 -0
  76. package/dist/esm/background-update/background-scheduler.js.map +1 -0
  77. package/dist/esm/background-update/index.d.ts +3 -0
  78. package/dist/esm/background-update/index.js +3 -0
  79. package/dist/esm/background-update/index.js.map +1 -0
  80. package/dist/esm/background-update/notification-manager.d.ts +29 -0
  81. package/dist/esm/background-update/notification-manager.js +89 -0
  82. package/dist/esm/background-update/notification-manager.js.map +1 -0
  83. package/dist/esm/core/analytics.d.ts +70 -0
  84. package/dist/esm/core/analytics.js +137 -0
  85. package/dist/esm/core/analytics.js.map +1 -0
  86. package/dist/esm/core/cache-manager.d.ts +72 -0
  87. package/dist/esm/core/cache-manager.js +275 -0
  88. package/dist/esm/core/cache-manager.js.map +1 -0
  89. package/dist/esm/core/config.d.ts +48 -0
  90. package/dist/esm/core/config.js +83 -0
  91. package/dist/esm/core/config.js.map +1 -0
  92. package/dist/esm/core/errors.d.ts +51 -0
  93. package/dist/esm/core/errors.js +80 -0
  94. package/dist/esm/core/errors.js.map +1 -0
  95. package/dist/esm/core/logger.d.ts +21 -0
  96. package/dist/esm/core/logger.js +109 -0
  97. package/dist/esm/core/logger.js.map +1 -0
  98. package/dist/esm/core/performance.d.ts +53 -0
  99. package/dist/esm/core/performance.js +140 -0
  100. package/dist/esm/core/performance.js.map +1 -0
  101. package/dist/esm/core/plugin-manager.d.ts +66 -0
  102. package/dist/esm/core/plugin-manager.js +148 -0
  103. package/dist/esm/core/plugin-manager.js.map +1 -0
  104. package/dist/esm/core/security.d.ts +93 -0
  105. package/dist/esm/core/security.js +315 -0
  106. package/dist/esm/core/security.js.map +1 -0
  107. package/dist/esm/definitions.d.ts +639 -0
  108. package/dist/esm/definitions.js +103 -0
  109. package/dist/esm/definitions.js.map +1 -0
  110. package/dist/esm/index.d.ts +12 -0
  111. package/dist/esm/index.js +16 -0
  112. package/dist/esm/index.js.map +1 -0
  113. package/dist/esm/live-update/bundle-manager.d.ts +94 -0
  114. package/dist/esm/live-update/bundle-manager.js +310 -0
  115. package/dist/esm/live-update/bundle-manager.js.map +1 -0
  116. package/dist/esm/live-update/certificate-pinning.d.ts +38 -0
  117. package/dist/esm/live-update/certificate-pinning.js +78 -0
  118. package/dist/esm/live-update/certificate-pinning.js.map +1 -0
  119. package/dist/esm/live-update/download-manager.d.ts +67 -0
  120. package/dist/esm/live-update/download-manager.js +319 -0
  121. package/dist/esm/live-update/download-manager.js.map +1 -0
  122. package/dist/esm/live-update/update-manager.d.ts +52 -0
  123. package/dist/esm/live-update/update-manager.js +294 -0
  124. package/dist/esm/live-update/update-manager.js.map +1 -0
  125. package/dist/esm/live-update/version-manager.d.ts +84 -0
  126. package/dist/esm/live-update/version-manager.js +335 -0
  127. package/dist/esm/live-update/version-manager.js.map +1 -0
  128. package/dist/esm/plugin.d.ts +6 -0
  129. package/dist/esm/plugin.js +283 -0
  130. package/dist/esm/plugin.js.map +1 -0
  131. package/dist/esm/security/crypto.d.ts +25 -0
  132. package/dist/esm/security/crypto.js +70 -0
  133. package/dist/esm/security/crypto.js.map +1 -0
  134. package/dist/esm/security/validator.d.ts +60 -0
  135. package/dist/esm/security/validator.js +143 -0
  136. package/dist/esm/security/validator.js.map +1 -0
  137. package/dist/esm/web.d.ts +74 -0
  138. package/dist/esm/web.js +595 -0
  139. package/dist/esm/web.js.map +1 -0
  140. package/dist/plugin.cjs.js +2 -0
  141. package/dist/plugin.cjs.js.map +1 -0
  142. package/dist/plugin.esm.js +2 -0
  143. package/dist/plugin.esm.js.map +1 -0
  144. package/dist/plugin.js +3 -0
  145. package/dist/plugin.js.map +1 -0
  146. package/docs/APP_REVIEW_GUIDE.md +768 -0
  147. package/docs/BUNDLE_SIGNING.md +264 -0
  148. package/docs/LIVE_UPDATES_GUIDE.md +650 -0
  149. package/docs/MIGRATION.md +192 -0
  150. package/docs/NATIVE_UPDATES_GUIDE.md +694 -0
  151. package/docs/QUICK_START.md +606 -0
  152. package/docs/README.md +111 -0
  153. package/docs/REMAINING_FEATURES.md +139 -0
  154. package/docs/api/app-review-api.md +259 -0
  155. package/docs/api/app-update-api.md +238 -0
  156. package/docs/api/events-api.md +451 -0
  157. package/docs/api/live-update-api.md +265 -0
  158. package/docs/background-updates.md +392 -0
  159. package/docs/examples/advanced-scenarios.md +410 -0
  160. package/docs/examples/basic-usage.md +185 -0
  161. package/docs/features/app-reviews.md +975 -0
  162. package/docs/features/app-updates.md +785 -0
  163. package/docs/features/live-updates.md +633 -0
  164. package/docs/getting-started/configuration.md +468 -0
  165. package/docs/getting-started/installation.md +209 -0
  166. package/docs/getting-started/quick-start.md +379 -0
  167. package/docs/guides/deployment-guide.md +333 -0
  168. package/docs/guides/migration-from-codepush.md +142 -0
  169. package/docs/guides/security-best-practices.md +1057 -0
  170. package/docs/guides/testing-guide.md +373 -0
  171. package/docs/production-readiness.md +478 -0
  172. package/docs/security/certificate-pinning.md +122 -0
  173. package/docs/server-requirements.md +147 -0
  174. package/ios/Plugin/AppReview/AppReviewPlugin.swift +158 -0
  175. package/ios/Plugin/AppUpdate/AppUpdatePlugin.swift +234 -0
  176. package/ios/Plugin/BackgroundUpdate/BackgroundNotificationManager.swift +329 -0
  177. package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +396 -0
  178. package/ios/Plugin/CapacitorNativeUpdatePlugin.m +45 -0
  179. package/ios/Plugin/CapacitorNativeUpdatePlugin.swift +190 -0
  180. package/ios/Plugin/Info.plist +43 -0
  181. package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +689 -0
  182. package/ios/Plugin/LiveUpdate/WebViewConfiguration.swift +45 -0
  183. package/ios/Plugin/Security/SecurityManager.swift +289 -0
  184. package/package.json +90 -0
@@ -0,0 +1,335 @@
1
+ import { ConfigManager } from '../core/config';
2
+ import { Logger } from '../core/logger';
3
+ import { SecurityValidator } from '../core/security';
4
+ import { ValidationError, ErrorCode } from '../core/errors';
5
+ /**
6
+ * Manages version checking and comparison
7
+ */
8
+ export class VersionManager {
9
+ constructor() {
10
+ this.VERSION_CHECK_CACHE_KEY = 'capacitor_native_update_version_cache';
11
+ this.CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
12
+ this.preferences = null;
13
+ this.memoryCache = new Map();
14
+ this.logger = Logger.getInstance();
15
+ this.configManager = ConfigManager.getInstance();
16
+ this.securityValidator = SecurityValidator.getInstance();
17
+ }
18
+ /**
19
+ * Compare two semantic versions
20
+ */
21
+ static compareVersions(version1, version2) {
22
+ try {
23
+ // Split version and pre-release
24
+ const [v1Base, v1Pre] = version1.split('-');
25
+ const [v2Base, v2Pre] = version2.split('-');
26
+ const v1Parts = v1Base.split('.').map(Number);
27
+ const v2Parts = v2Base.split('.').map(Number);
28
+ // Compare major.minor.patch
29
+ for (let i = 0; i < 3; i++) {
30
+ const v1Part = v1Parts[i] || 0;
31
+ const v2Part = v2Parts[i] || 0;
32
+ if (v1Part > v2Part)
33
+ return 1;
34
+ if (v1Part < v2Part)
35
+ return -1;
36
+ }
37
+ // If base versions are equal, compare pre-release
38
+ if (v1Pre && !v2Pre)
39
+ return -1; // 1.0.0-alpha < 1.0.0
40
+ if (!v1Pre && v2Pre)
41
+ return 1; // 1.0.0 > 1.0.0-alpha
42
+ if (v1Pre && v2Pre) {
43
+ return v1Pre.localeCompare(v2Pre);
44
+ }
45
+ return 0;
46
+ }
47
+ catch (_a) {
48
+ if (version1 === version2)
49
+ return 0;
50
+ return version1 > version2 ? 1 : -1;
51
+ }
52
+ }
53
+ /**
54
+ * Validate semantic version format
55
+ */
56
+ static isValidVersion(version) {
57
+ return /^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(version);
58
+ }
59
+ /**
60
+ * Check if update should be performed
61
+ */
62
+ static shouldUpdate(currentVersion, newVersion, minAppVersion) {
63
+ if (minAppVersion &&
64
+ VersionManager.compareVersions(currentVersion, minAppVersion) < 0) {
65
+ return false;
66
+ }
67
+ return VersionManager.compareVersions(currentVersion, newVersion) < 0;
68
+ }
69
+ /**
70
+ * Initialize the version manager
71
+ */
72
+ async initialize() {
73
+ this.preferences = this.configManager.get('preferences');
74
+ if (!this.preferences) {
75
+ throw new ValidationError(ErrorCode.MISSING_DEPENDENCY, 'Preferences not configured. Please configure the plugin first.');
76
+ }
77
+ }
78
+ /**
79
+ * Check for latest version from server
80
+ */
81
+ async checkForUpdates(serverUrl, channel, currentVersion, appId) {
82
+ // Validate inputs
83
+ this.securityValidator.validateUrl(serverUrl);
84
+ this.securityValidator.validateVersion(currentVersion);
85
+ if (!channel || !appId) {
86
+ throw new ValidationError(ErrorCode.INVALID_CONFIG, 'Channel and appId are required');
87
+ }
88
+ // Check cache first
89
+ const cacheKey = `${channel}-${appId}`;
90
+ const cached = await this.getCachedVersionInfo(cacheKey);
91
+ if (cached &&
92
+ cached.channel === channel &&
93
+ Date.now() - cached.timestamp < this.CACHE_DURATION) {
94
+ this.logger.debug('Returning cached version info', {
95
+ channel,
96
+ version: cached.data.version,
97
+ });
98
+ return cached.data;
99
+ }
100
+ try {
101
+ const url = new URL(`${serverUrl}/check`);
102
+ url.searchParams.append('channel', channel);
103
+ url.searchParams.append('version', currentVersion);
104
+ url.searchParams.append('appId', appId);
105
+ url.searchParams.append('platform', 'web'); // Will be overridden by native platforms
106
+ const response = await fetch(url.toString(), {
107
+ method: 'GET',
108
+ headers: {
109
+ 'Content-Type': 'application/json',
110
+ 'X-App-Version': currentVersion,
111
+ 'X-App-Id': appId,
112
+ },
113
+ signal: AbortSignal.timeout(this.configManager.get('downloadTimeout')),
114
+ });
115
+ if (!response.ok) {
116
+ throw new Error(`Version check failed: ${response.status}`);
117
+ }
118
+ const data = await response.json();
119
+ // Validate response
120
+ if (!data.version) {
121
+ throw new ValidationError(ErrorCode.INVALID_BUNDLE_FORMAT, 'No version in server response');
122
+ }
123
+ this.securityValidator.validateVersion(data.version);
124
+ // Additional validation
125
+ if (data.bundleUrl) {
126
+ this.securityValidator.validateUrl(data.bundleUrl);
127
+ }
128
+ if (data.minAppVersion) {
129
+ this.securityValidator.validateVersion(data.minAppVersion);
130
+ }
131
+ // Cache the result
132
+ await this.cacheVersionInfo(cacheKey, channel, data);
133
+ this.logger.info('Version check completed', {
134
+ channel,
135
+ currentVersion,
136
+ latestVersion: data.version,
137
+ updateAvailable: this.isNewerVersion(data.version, currentVersion),
138
+ });
139
+ return data;
140
+ }
141
+ catch (error) {
142
+ this.logger.error('Failed to check for updates', error);
143
+ return null;
144
+ }
145
+ }
146
+ /**
147
+ * Compare two versions
148
+ */
149
+ isNewerVersion(version1, version2) {
150
+ try {
151
+ const v1 = this.parseVersion(version1);
152
+ const v2 = this.parseVersion(version2);
153
+ if (v1.major !== v2.major)
154
+ return v1.major > v2.major;
155
+ if (v1.minor !== v2.minor)
156
+ return v1.minor > v2.minor;
157
+ if (v1.patch !== v2.patch)
158
+ return v1.patch > v2.patch;
159
+ // If main versions are equal, check pre-release
160
+ if (v1.prerelease && !v2.prerelease)
161
+ return false; // v1 is pre-release, v2 is not
162
+ if (!v1.prerelease && v2.prerelease)
163
+ return true; // v1 is not pre-release, v2 is
164
+ if (v1.prerelease && v2.prerelease) {
165
+ return v1.prerelease > v2.prerelease;
166
+ }
167
+ return false; // Versions are equal
168
+ }
169
+ catch (error) {
170
+ this.logger.error('Failed to compare versions', {
171
+ version1,
172
+ version2,
173
+ error,
174
+ });
175
+ return false;
176
+ }
177
+ }
178
+ /**
179
+ * Check if update is mandatory based on minimum version
180
+ */
181
+ isUpdateMandatory(currentVersion, minimumVersion) {
182
+ if (!minimumVersion)
183
+ return false;
184
+ try {
185
+ this.securityValidator.validateVersion(currentVersion);
186
+ this.securityValidator.validateVersion(minimumVersion);
187
+ return (!this.isNewerVersion(currentVersion, minimumVersion) &&
188
+ currentVersion !== minimumVersion);
189
+ }
190
+ catch (error) {
191
+ this.logger.error('Failed to check mandatory update', error);
192
+ return false;
193
+ }
194
+ }
195
+ /**
196
+ * Parse version metadata
197
+ */
198
+ parseVersion(version) {
199
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/);
200
+ if (!match) {
201
+ throw new ValidationError(ErrorCode.INVALID_BUNDLE_FORMAT, 'Invalid version format');
202
+ }
203
+ return {
204
+ major: parseInt(match[1], 10),
205
+ minor: parseInt(match[2], 10),
206
+ patch: parseInt(match[3], 10),
207
+ prerelease: match[4],
208
+ build: match[5],
209
+ };
210
+ }
211
+ /**
212
+ * Generate version string from components
213
+ */
214
+ buildVersionString(components) {
215
+ let version = `${components.major}.${components.minor}.${components.patch}`;
216
+ if (components.prerelease) {
217
+ version += `-${components.prerelease}`;
218
+ }
219
+ if (components.build) {
220
+ version += `+${components.build}`;
221
+ }
222
+ return version;
223
+ }
224
+ /**
225
+ * Check if version is compatible with native version requirements
226
+ */
227
+ isCompatibleWithNativeVersion(bundleVersion, nativeVersion, compatibility) {
228
+ if (!compatibility)
229
+ return true;
230
+ try {
231
+ // Check if there's a specific native version requirement for this bundle version
232
+ const requiredNativeVersion = compatibility[bundleVersion];
233
+ if (!requiredNativeVersion)
234
+ return true;
235
+ this.securityValidator.validateVersion(nativeVersion);
236
+ this.securityValidator.validateVersion(requiredNativeVersion);
237
+ return !this.isNewerVersion(requiredNativeVersion, nativeVersion);
238
+ }
239
+ catch (error) {
240
+ this.logger.error('Failed to check compatibility', error);
241
+ return false;
242
+ }
243
+ }
244
+ /**
245
+ * Get version from cache
246
+ */
247
+ async getCachedVersionInfo(cacheKey) {
248
+ // Check memory cache first
249
+ const memCached = this.memoryCache.get(cacheKey);
250
+ if (memCached && Date.now() - memCached.timestamp < this.CACHE_DURATION) {
251
+ return memCached;
252
+ }
253
+ // Check persistent cache
254
+ try {
255
+ const { value } = await this.preferences.get({
256
+ key: this.VERSION_CHECK_CACHE_KEY,
257
+ });
258
+ if (!value)
259
+ return null;
260
+ const allCached = JSON.parse(value);
261
+ const cached = allCached[cacheKey];
262
+ if (cached && Date.now() - cached.timestamp < this.CACHE_DURATION) {
263
+ // Update memory cache
264
+ this.memoryCache.set(cacheKey, cached);
265
+ return cached;
266
+ }
267
+ }
268
+ catch (error) {
269
+ this.logger.debug('Failed to load cached version info', error);
270
+ }
271
+ return null;
272
+ }
273
+ /**
274
+ * Cache version info
275
+ */
276
+ async cacheVersionInfo(cacheKey, channel, data) {
277
+ const cacheEntry = {
278
+ channel,
279
+ data,
280
+ timestamp: Date.now(),
281
+ };
282
+ // Update memory cache
283
+ this.memoryCache.set(cacheKey, cacheEntry);
284
+ // Update persistent cache
285
+ try {
286
+ const { value } = await this.preferences.get({
287
+ key: this.VERSION_CHECK_CACHE_KEY,
288
+ });
289
+ const allCached = value
290
+ ? JSON.parse(value)
291
+ : {};
292
+ // Clean old entries
293
+ const now = Date.now();
294
+ for (const key in allCached) {
295
+ if (now - allCached[key].timestamp > this.CACHE_DURATION * 2) {
296
+ delete allCached[key];
297
+ }
298
+ }
299
+ allCached[cacheKey] = cacheEntry;
300
+ await this.preferences.set({
301
+ key: this.VERSION_CHECK_CACHE_KEY,
302
+ value: JSON.stringify(allCached),
303
+ });
304
+ }
305
+ catch (error) {
306
+ this.logger.warn('Failed to cache version info', error);
307
+ }
308
+ }
309
+ /**
310
+ * Clear version cache
311
+ */
312
+ async clearVersionCache() {
313
+ this.memoryCache.clear();
314
+ try {
315
+ await this.preferences.remove({ key: this.VERSION_CHECK_CACHE_KEY });
316
+ }
317
+ catch (error) {
318
+ this.logger.warn('Failed to clear version cache', error);
319
+ }
320
+ }
321
+ /**
322
+ * Check if downgrade protection should block update
323
+ */
324
+ shouldBlockDowngrade(currentVersion, newVersion) {
325
+ try {
326
+ return this.securityValidator.isVersionDowngrade(currentVersion, newVersion);
327
+ }
328
+ catch (error) {
329
+ this.logger.error('Failed to check downgrade', error);
330
+ // Default to safe behavior - block if we can't determine
331
+ return true;
332
+ }
333
+ }
334
+ }
335
+ //# sourceMappingURL=version-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-manager.js","sourceRoot":"","sources":["../../../src/live-update/version-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CapacitorNativeUpdatePlugin } from './definitions';
2
+ /**
3
+ * Register the plugin
4
+ */
5
+ declare const CapacitorNativeUpdate: CapacitorNativeUpdatePlugin;
6
+ export { CapacitorNativeUpdate };
@@ -0,0 +1,283 @@
1
+ import { registerPlugin } from '@capacitor/core';
2
+ import { SyncStatus, BundleStatus, UpdateErrorCode } from './definitions';
3
+ import { PluginManager } from './core/plugin-manager';
4
+ import { CapacitorNativeUpdateError, ErrorCode } from './core/errors';
5
+ /**
6
+ * Web implementation of the Capacitor Native Update Plugin
7
+ */
8
+ class CapacitorNativeUpdatePluginWeb {
9
+ constructor() {
10
+ this.initialized = false;
11
+ this.pluginManager = PluginManager.getInstance();
12
+ }
13
+ // Main plugin methods
14
+ async initialize(config) {
15
+ await this.pluginManager.initialize(config);
16
+ this.initialized = true;
17
+ }
18
+ isInitialized() {
19
+ return this.initialized && this.pluginManager.isInitialized();
20
+ }
21
+ async reset() {
22
+ await this.pluginManager.reset();
23
+ }
24
+ async cleanup() {
25
+ await this.pluginManager.cleanup();
26
+ }
27
+ // NativeUpdatePlugin methods
28
+ async configure(options) {
29
+ if (!this.initialized) {
30
+ throw new CapacitorNativeUpdateError(ErrorCode.NOT_CONFIGURED, 'Plugin not initialized. Call initialize() first.');
31
+ }
32
+ // Apply plugin configuration
33
+ const configManager = this.pluginManager.getConfigManager();
34
+ configManager.configure(options.config);
35
+ }
36
+ async getSecurityInfo() {
37
+ return {
38
+ enforceHttps: true,
39
+ certificatePinning: {
40
+ enabled: false,
41
+ pins: [],
42
+ },
43
+ validateInputs: true,
44
+ secureStorage: true,
45
+ };
46
+ }
47
+ // LiveUpdatePlugin methods
48
+ async sync(_options) {
49
+ const bundleManager = this.pluginManager.getBundleManager();
50
+ try {
51
+ // Check for updates
52
+ const currentBundle = await bundleManager.getActiveBundle();
53
+ const currentVersion = (currentBundle === null || currentBundle === void 0 ? void 0 : currentBundle.version) || '1.0.0';
54
+ // For now, return up-to-date status
55
+ return {
56
+ status: SyncStatus.UP_TO_DATE,
57
+ version: currentVersion,
58
+ };
59
+ }
60
+ catch (error) {
61
+ return {
62
+ status: SyncStatus.ERROR,
63
+ error: {
64
+ code: UpdateErrorCode.UNKNOWN_ERROR,
65
+ message: error instanceof Error ? error.message : 'Sync failed',
66
+ },
67
+ };
68
+ }
69
+ }
70
+ async download(options) {
71
+ const downloadManager = this.pluginManager.getDownloadManager();
72
+ const bundleManager = this.pluginManager.getBundleManager();
73
+ const blob = await downloadManager.downloadWithRetry(options.url, options.version);
74
+ const path = await downloadManager.saveBlob(options.version, blob);
75
+ const bundleInfo = {
76
+ bundleId: options.version,
77
+ version: options.version,
78
+ path,
79
+ downloadTime: Date.now(),
80
+ size: blob.size,
81
+ status: BundleStatus.READY,
82
+ checksum: options.checksum,
83
+ signature: options.signature,
84
+ verified: false,
85
+ };
86
+ await bundleManager.saveBundleInfo(bundleInfo);
87
+ return bundleInfo;
88
+ }
89
+ async set(bundle) {
90
+ const bundleManager = this.pluginManager.getBundleManager();
91
+ await bundleManager.setActiveBundle(bundle.bundleId);
92
+ }
93
+ async reload() {
94
+ // In web implementation, we can reload the page
95
+ if (typeof window !== 'undefined') {
96
+ window.location.reload();
97
+ }
98
+ }
99
+ async current() {
100
+ const bundleManager = this.pluginManager.getBundleManager();
101
+ const bundle = await bundleManager.getActiveBundle();
102
+ if (!bundle) {
103
+ throw new CapacitorNativeUpdateError(ErrorCode.FILE_NOT_FOUND, 'No active bundle found');
104
+ }
105
+ return bundle;
106
+ }
107
+ async list() {
108
+ const bundleManager = this.pluginManager.getBundleManager();
109
+ return bundleManager.getAllBundles();
110
+ }
111
+ async delete(options) {
112
+ const bundleManager = this.pluginManager.getBundleManager();
113
+ if (options.bundleId) {
114
+ await bundleManager.deleteBundle(options.bundleId);
115
+ }
116
+ else if (options.keepVersions !== undefined) {
117
+ // Delete old versions keeping the specified number
118
+ const bundles = await bundleManager.getAllBundles();
119
+ const sortedBundles = bundles.sort((a, b) => b.downloadTime - a.downloadTime);
120
+ for (let i = options.keepVersions; i < sortedBundles.length; i++) {
121
+ await bundleManager.deleteBundle(sortedBundles[i].bundleId);
122
+ }
123
+ }
124
+ }
125
+ async notifyAppReady() {
126
+ // Mark the current bundle as stable
127
+ const bundleManager = this.pluginManager.getBundleManager();
128
+ const activeBundle = await bundleManager.getActiveBundle();
129
+ if (activeBundle) {
130
+ activeBundle.status = BundleStatus.ACTIVE;
131
+ await bundleManager.saveBundleInfo(activeBundle);
132
+ }
133
+ }
134
+ async getLatest() {
135
+ // For web, we'll return no update available
136
+ return {
137
+ available: false,
138
+ };
139
+ }
140
+ async setChannel(channel) {
141
+ // Store the channel preference
142
+ const preferences = this.pluginManager
143
+ .getConfigManager()
144
+ .get('preferences');
145
+ if (preferences) {
146
+ await preferences.set({
147
+ key: 'update_channel',
148
+ value: channel,
149
+ });
150
+ }
151
+ }
152
+ async setUpdateUrl(url) {
153
+ const configManager = this.pluginManager.getConfigManager();
154
+ configManager.configure({ baseUrl: url });
155
+ }
156
+ async validateUpdate(options) {
157
+ const securityValidator = this.pluginManager.getSecurityValidator();
158
+ try {
159
+ // Validate checksum
160
+ const isValid = await securityValidator.validateChecksum(new ArrayBuffer(0), // Placeholder for bundle data
161
+ options.checksum);
162
+ return {
163
+ isValid,
164
+ details: {
165
+ checksumValid: isValid,
166
+ signatureValid: true,
167
+ sizeValid: true,
168
+ versionValid: true,
169
+ },
170
+ };
171
+ }
172
+ catch (error) {
173
+ return {
174
+ isValid: false,
175
+ error: error instanceof Error ? error.message : 'Validation failed',
176
+ };
177
+ }
178
+ }
179
+ // AppUpdatePlugin methods
180
+ async getAppUpdateInfo() {
181
+ // Web doesn't have native app updates
182
+ return {
183
+ updateAvailable: false,
184
+ currentVersion: '1.0.0',
185
+ };
186
+ }
187
+ async performImmediateUpdate() {
188
+ throw new CapacitorNativeUpdateError(ErrorCode.PLATFORM_NOT_SUPPORTED, 'Native app updates are not supported on web');
189
+ }
190
+ async startFlexibleUpdate() {
191
+ throw new CapacitorNativeUpdateError(ErrorCode.PLATFORM_NOT_SUPPORTED, 'Native app updates are not supported on web');
192
+ }
193
+ async completeFlexibleUpdate() {
194
+ throw new CapacitorNativeUpdateError(ErrorCode.PLATFORM_NOT_SUPPORTED, 'Native app updates are not supported on web');
195
+ }
196
+ async openAppStore(_options) {
197
+ throw new CapacitorNativeUpdateError(ErrorCode.PLATFORM_NOT_SUPPORTED, 'App store is not available on web');
198
+ }
199
+ // AppReviewPlugin methods
200
+ async requestReview() {
201
+ return {
202
+ displayed: false,
203
+ error: 'Reviews are not supported on web',
204
+ };
205
+ }
206
+ async canRequestReview() {
207
+ return {
208
+ canRequest: false,
209
+ reason: 'Reviews are not supported on web',
210
+ };
211
+ }
212
+ // BackgroundUpdatePlugin methods
213
+ async enableBackgroundUpdates(config) {
214
+ // Store the configuration
215
+ const preferences = this.pluginManager
216
+ .getConfigManager()
217
+ .get('preferences');
218
+ if (preferences) {
219
+ await preferences.set({
220
+ key: 'background_update_config',
221
+ value: JSON.stringify(config),
222
+ });
223
+ }
224
+ }
225
+ async disableBackgroundUpdates() {
226
+ const preferences = this.pluginManager
227
+ .getConfigManager()
228
+ .get('preferences');
229
+ if (preferences) {
230
+ await preferences.remove({ key: 'background_update_config' });
231
+ }
232
+ }
233
+ async getBackgroundUpdateStatus() {
234
+ return {
235
+ enabled: false,
236
+ isRunning: false,
237
+ checkCount: 0,
238
+ failureCount: 0,
239
+ };
240
+ }
241
+ async scheduleBackgroundCheck(_interval) {
242
+ // Not supported on web
243
+ throw new CapacitorNativeUpdateError(ErrorCode.PLATFORM_NOT_SUPPORTED, 'Background updates are not supported on web');
244
+ }
245
+ async triggerBackgroundCheck() {
246
+ return {
247
+ success: false,
248
+ updatesFound: false,
249
+ notificationSent: false,
250
+ error: {
251
+ code: UpdateErrorCode.PLATFORM_NOT_SUPPORTED,
252
+ message: 'Background updates are not supported on web',
253
+ },
254
+ };
255
+ }
256
+ async setNotificationPreferences(preferences) {
257
+ // Store preferences but notifications aren't supported on web
258
+ const prefs = this.pluginManager.getConfigManager().get('preferences');
259
+ if (prefs) {
260
+ await prefs.set({
261
+ key: 'notification_preferences',
262
+ value: JSON.stringify(preferences),
263
+ });
264
+ }
265
+ }
266
+ async getNotificationPermissions() {
267
+ return {
268
+ granted: false,
269
+ canRequest: false,
270
+ };
271
+ }
272
+ async requestNotificationPermissions() {
273
+ return false;
274
+ }
275
+ }
276
+ /**
277
+ * Register the plugin
278
+ */
279
+ const CapacitorNativeUpdate = registerPlugin('CapacitorNativeUpdate', {
280
+ web: () => new CapacitorNativeUpdatePluginWeb(),
281
+ });
282
+ export { CapacitorNativeUpdate };
283
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Cryptographic utilities for bundle verification
3
+ */
4
+ export declare class CryptoUtils {
5
+ /**
6
+ * Calculate SHA-256 checksum of data
7
+ */
8
+ static calculateChecksum(data: ArrayBuffer | string): Promise<string>;
9
+ /**
10
+ * Verify signature using public key
11
+ */
12
+ static verifySignature(data: ArrayBuffer | string, signature: string, publicKey: string): Promise<boolean>;
13
+ /**
14
+ * Convert base64 string to ArrayBuffer
15
+ */
16
+ private static base64ToArrayBuffer;
17
+ /**
18
+ * Generate a random nonce
19
+ */
20
+ static generateNonce(length?: number): string;
21
+ /**
22
+ * Validate checksum format
23
+ */
24
+ static isValidChecksum(checksum: string, algorithm?: 'SHA-256' | 'SHA-512'): boolean;
25
+ }