native-update 1.4.9 → 2.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/Readme.md +13 -1
- 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 +152 -4
- package/android/src/main/java/com/aoneahsan/nativeupdate/NativeUpdatePlugin.kt +14 -1
- 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 +29 -0
- package/cli/CLAUDE.md +51 -0
- package/dist/esm/__tests__/security-enforcement.test.d.ts +1 -0
- package/dist/esm/__tests__/security-enforcement.test.js +95 -0
- package/dist/esm/__tests__/security-enforcement.test.js.map +1 -0
- package/dist/esm/core/config.d.ts +6 -15
- package/dist/esm/core/config.js +1 -4
- package/dist/esm/core/config.js.map +1 -1
- package/dist/esm/core/security.d.ts +11 -3
- package/dist/esm/core/security.js +19 -6
- package/dist/esm/core/security.js.map +1 -1
- package/dist/esm/definitions.d.ts +13 -29
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.d.ts +0 -2
- package/dist/esm/index.js +0 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/live-update/download-manager.d.ts +36 -5
- package/dist/esm/live-update/download-manager.js +61 -22
- package/dist/esm/live-update/download-manager.js.map +1 -1
- package/dist/esm/live-update/update-manager.d.ts +12 -1
- package/dist/esm/live-update/update-manager.js +38 -10
- package/dist/esm/live-update/update-manager.js.map +1 -1
- package/dist/esm/live-update/version-manager.d.ts +9 -0
- package/dist/esm/live-update/version-manager.js +40 -0
- package/dist/esm/live-update/version-manager.js.map +1 -1
- package/dist/esm/plugin.js +13 -46
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/web.d.ts +18 -1
- package/dist/esm/web.js +69 -24
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +1 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/dist/plugin.js +2 -2
- package/dist/plugin.js.map +1 -1
- package/docs/AGENTS.md +38 -0
- package/docs/CHANGELOG.md +151 -0
- package/docs/CLAUDE.md +101 -0
- package/docs/MIGRATION.md +87 -0
- package/docs/README.md +13 -2
- package/docs/deployment/HOSTINGER_DEPLOY.md +329 -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/credentials.ignore.md +34 -0
- package/docs/features/laravel-nova-backend/progress-tracker.json +184 -0
- package/docs/project-knowledge-base/01-system-overview.md +218 -0
- package/docs/project-knowledge-base/02-routes-pages-forms-users.md +346 -0
- package/docs/project-knowledge-base/03-tech-stack-modules-services.md +347 -0
- package/docs/project-knowledge-base/04-data-models-integrations.md +307 -0
- package/docs/project-knowledge-base/05-docs-corpus-inventory.md +193 -0
- package/docs/project-knowledge-base/06-operations-testing-legal-content.md +170 -0
- package/docs/project-knowledge-base/README.md +90 -0
- package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-03-16.md +454 -0
- package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-03-24.md +66 -0
- package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-03-25.md +67 -0
- package/docs/seo-aeo-rules.json +3043 -0
- package/docs/tracking/seo-checklist-tracker.json +333 -0
- package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +50 -6
- package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +238 -8
- package/ios/Plugin/NativeUpdatePlugin.swift +8 -0
- package/ios/Plugin/Security/SecurityManager.swift +13 -14
- package/package.json +30 -31
- package/docs/play-console-rejection-rules.json +0 -428
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAmFA,MAAM,OAAO,aAAa;IAIxB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEO,gBAAgB;QACtB,OAAO;YACL,UAAU,EAAE,IAAoC;YAChD,WAAW,EAAE,IAAqC;YAClD,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;YAC1C,eAAe,EAAE,KAAK,EAAE,aAAa;YACrC,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,IAAI,EAAE,WAAW;YAC7B,yBAAyB,EAAE,IAAI;YAC/B,SAAS,EAAE,EAAE;YACb,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;YACjD,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,YAA8B;YAC9C,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,SAA8B;YACjD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;YAC/C,QAAQ,EAAE;gBACR,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,KAAK;aACzB;YACD,oBAAoB;YACpB,yBAAyB,EAAE,KAAK;YAChC,oBAAoB,EAAE,CAAC;YACvB,0BAA0B,EAAE,CAAC;YAC7B,aAAa,EAAE,KAAK;YACpB,2BAA2B;YAC3B,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,OAAO;YACvB,kCAAkC;YAClC,WAAW,EAAE,MAAqB;YAClC,SAAS,EAAE,IAAkC;YAC7C,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,IAAI;SAC3B,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,MAAoB;QAC5B,IAAI,CAAC,MAAM,mCAAQ,IAAI,CAAC,MAAM,GAAK,MAAM,CAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,oDAAoD;QACpD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,GAAG,CACD,GAAM;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CACD,GAAM,EACN,KAAgC;QAEhC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,yBAAY,IAAI,CAAC,MAAM,EAAG;IAC5B,CAAC;IAED,YAAY;QACV,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -25,7 +25,10 @@ export declare class SecurityValidator {
|
|
|
25
25
|
*/
|
|
26
26
|
calculateChecksum(data: ArrayBuffer): Promise<string>;
|
|
27
27
|
/**
|
|
28
|
-
* Verify checksum matches expected value
|
|
28
|
+
* Verify checksum matches expected value.
|
|
29
|
+
* Fails closed when a checksum is required but missing. Only a configuration
|
|
30
|
+
* that explicitly disables signature+HTTPS enforcement AND omits the
|
|
31
|
+
* checksum will skip verification — OTA code paths must always pass one.
|
|
29
32
|
*/
|
|
30
33
|
verifyChecksum(data: ArrayBuffer, expectedChecksum: string): Promise<boolean>;
|
|
31
34
|
/**
|
|
@@ -33,9 +36,14 @@ export declare class SecurityValidator {
|
|
|
33
36
|
*/
|
|
34
37
|
validateChecksum(data: ArrayBuffer, expectedChecksum: string): Promise<boolean>;
|
|
35
38
|
/**
|
|
36
|
-
* Verify digital signature using Web Crypto API
|
|
39
|
+
* Verify digital signature using Web Crypto API.
|
|
40
|
+
*
|
|
41
|
+
* Fails closed: if signature verification is enabled (the default), any of
|
|
42
|
+
* `publicKey`, `enableSignatureValidation`, or `requireSignature` being set
|
|
43
|
+
* makes a signature mandatory. A missing signature in that state throws —
|
|
44
|
+
* never silently returns true. Silent-pass was a P0 gap in prior releases.
|
|
37
45
|
*/
|
|
38
|
-
verifySignature(data: ArrayBuffer, signature: string): Promise<boolean>;
|
|
46
|
+
verifySignature(data: ArrayBuffer, signature: string | null | undefined): Promise<boolean>;
|
|
39
47
|
/**
|
|
40
48
|
* Convert PEM to ArrayBuffer
|
|
41
49
|
*/
|
|
@@ -54,12 +54,14 @@ export class SecurityValidator {
|
|
|
54
54
|
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Verify checksum matches expected value
|
|
57
|
+
* Verify checksum matches expected value.
|
|
58
|
+
* Fails closed when a checksum is required but missing. Only a configuration
|
|
59
|
+
* that explicitly disables signature+HTTPS enforcement AND omits the
|
|
60
|
+
* checksum will skip verification — OTA code paths must always pass one.
|
|
58
61
|
*/
|
|
59
62
|
async verifyChecksum(data, expectedChecksum) {
|
|
60
63
|
if (!expectedChecksum) {
|
|
61
|
-
|
|
62
|
-
return true; // Allow if no checksum provided
|
|
64
|
+
throw new ValidationError(ErrorCode.CHECKSUM_MISMATCH, 'Checksum is required but was not provided');
|
|
63
65
|
}
|
|
64
66
|
const actualChecksum = await this.calculateChecksum(data);
|
|
65
67
|
const isValid = actualChecksum === expectedChecksum.toLowerCase();
|
|
@@ -78,13 +80,24 @@ export class SecurityValidator {
|
|
|
78
80
|
return this.verifyChecksum(data, expectedChecksum);
|
|
79
81
|
}
|
|
80
82
|
/**
|
|
81
|
-
* Verify digital signature using Web Crypto API
|
|
83
|
+
* Verify digital signature using Web Crypto API.
|
|
84
|
+
*
|
|
85
|
+
* Fails closed: if signature verification is enabled (the default), any of
|
|
86
|
+
* `publicKey`, `enableSignatureValidation`, or `requireSignature` being set
|
|
87
|
+
* makes a signature mandatory. A missing signature in that state throws —
|
|
88
|
+
* never silently returns true. Silent-pass was a P0 gap in prior releases.
|
|
82
89
|
*/
|
|
83
90
|
async verifySignature(data, signature) {
|
|
84
|
-
|
|
91
|
+
const enabled = this.configManager.get('enableSignatureValidation');
|
|
92
|
+
const requireSignature = this.configManager.get('requireSignature');
|
|
93
|
+
const publicKey = this.configManager.get('publicKey');
|
|
94
|
+
const signatureRequired = enabled || requireSignature || !!publicKey;
|
|
95
|
+
if (!signature) {
|
|
96
|
+
if (signatureRequired) {
|
|
97
|
+
throw new ValidationError(ErrorCode.SIGNATURE_INVALID, 'Signature is required but was not provided');
|
|
98
|
+
}
|
|
85
99
|
return true;
|
|
86
100
|
}
|
|
87
|
-
const publicKey = this.configManager.get('publicKey');
|
|
88
101
|
if (!publicKey) {
|
|
89
102
|
throw new ValidationError(ErrorCode.SIGNATURE_INVALID, 'Public key not configured for signature validation');
|
|
90
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/core/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,OAAO,iBAAiB;IAK5B;QACE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAChC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,iBAAiB,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACtC,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAgB;QACtC,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAY;QACpC,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;QAC5C,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAiB;QACvC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/core/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -212,20 +212,6 @@ export interface LiveUpdateConfig {
|
|
|
212
212
|
optionalInstallMode?: InstallMode;
|
|
213
213
|
maxBundleSize?: number;
|
|
214
214
|
allowedHosts?: string[];
|
|
215
|
-
/**
|
|
216
|
-
* Enable bundle encryption (AES-256-GCM)
|
|
217
|
-
*/
|
|
218
|
-
enableEncryption?: boolean;
|
|
219
|
-
/**
|
|
220
|
-
* Encryption key for decrypting bundles
|
|
221
|
-
* Should be stored securely and not hardcoded
|
|
222
|
-
*/
|
|
223
|
-
encryptionKey?: string;
|
|
224
|
-
/**
|
|
225
|
-
* Salt for key derivation (base64 encoded)
|
|
226
|
-
* Required when enableEncryption is true
|
|
227
|
-
*/
|
|
228
|
-
encryptionSalt?: string;
|
|
229
215
|
}
|
|
230
216
|
export interface AppUpdateConfig {
|
|
231
217
|
minimumVersion?: string;
|
|
@@ -265,6 +251,12 @@ export interface SecurityConfig {
|
|
|
265
251
|
enforceHttps?: boolean;
|
|
266
252
|
certificatePinning?: CertificatePinning;
|
|
267
253
|
validateInputs?: boolean;
|
|
254
|
+
/**
|
|
255
|
+
* @deprecated since v2. Secure storage is always on. Android uses
|
|
256
|
+
* EncryptedSharedPreferences (Keystore-backed), iOS uses Keychain,
|
|
257
|
+
* web does not persist sensitive config fields to localStorage.
|
|
258
|
+
* Setting this to `false` is ignored.
|
|
259
|
+
*/
|
|
268
260
|
secureStorage?: boolean;
|
|
269
261
|
logSecurityEvents?: boolean;
|
|
270
262
|
}
|
|
@@ -316,7 +308,6 @@ export interface DeleteOptions {
|
|
|
316
308
|
olderThan?: number;
|
|
317
309
|
}
|
|
318
310
|
export interface UpdateOptions {
|
|
319
|
-
allowDowngrade?: boolean;
|
|
320
311
|
cleanupOldBundles?: boolean;
|
|
321
312
|
keepBundleCount?: number;
|
|
322
313
|
}
|
|
@@ -725,6 +716,13 @@ export interface PluginInitConfig {
|
|
|
725
716
|
* Server URL for update checks
|
|
726
717
|
*/
|
|
727
718
|
serverUrl?: string;
|
|
719
|
+
/**
|
|
720
|
+
* API key bound to this app in the Native Update dashboard. Sent as
|
|
721
|
+
* the `X-API-Key` header on every request to the backend. As of v2
|
|
722
|
+
* the plugin does not persist this across sessions — the host app
|
|
723
|
+
* must pass it on every `initialize()` call.
|
|
724
|
+
*/
|
|
725
|
+
apiKey?: string;
|
|
728
726
|
/**
|
|
729
727
|
* Update channel
|
|
730
728
|
*/
|
|
@@ -769,20 +767,6 @@ export interface PluginInitConfig {
|
|
|
769
767
|
* Review URL fallback for web platforms
|
|
770
768
|
*/
|
|
771
769
|
webReviewUrl?: string;
|
|
772
|
-
/**
|
|
773
|
-
* Enable bundle encryption (AES-256-GCM)
|
|
774
|
-
*/
|
|
775
|
-
enableEncryption?: boolean;
|
|
776
|
-
/**
|
|
777
|
-
* Encryption key for decrypting bundles
|
|
778
|
-
* Should be stored securely and not hardcoded
|
|
779
|
-
*/
|
|
780
|
-
encryptionKey?: string;
|
|
781
|
-
/**
|
|
782
|
-
* Salt for key derivation (base64 encoded)
|
|
783
|
-
* Required when enableEncryption is true
|
|
784
|
-
*/
|
|
785
|
-
encryptionSalt?: string;
|
|
786
770
|
}
|
|
787
771
|
/**
|
|
788
772
|
* Main plugin interface with initialization
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA,qEAAqE;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -7,8 +7,6 @@ export { Logger, LogLevel } from './core/logger';
|
|
|
7
7
|
export { SecurityValidator } from './core/security';
|
|
8
8
|
export { PluginManager } from './core/plugin-manager';
|
|
9
9
|
export { CacheManager } from './core/cache-manager';
|
|
10
|
-
export { CryptoUtils } from './security/crypto';
|
|
11
|
-
export type { EncryptionConfig, EncryptedBundle } from './security/crypto';
|
|
12
10
|
export { BundleManager } from './live-update/bundle-manager';
|
|
13
11
|
export { DownloadManager } from './live-update/download-manager';
|
|
14
12
|
export { VersionManager } from './live-update/version-manager';
|
package/dist/esm/index.js
CHANGED
|
@@ -8,8 +8,6 @@ export { Logger, LogLevel } from './core/logger';
|
|
|
8
8
|
export { SecurityValidator } from './core/security';
|
|
9
9
|
export { PluginManager } from './core/plugin-manager';
|
|
10
10
|
export { CacheManager } from './core/cache-manager';
|
|
11
|
-
// Security/Crypto exports
|
|
12
|
-
export { CryptoUtils } from './security/crypto';
|
|
13
11
|
// Manager exports for advanced users
|
|
14
12
|
export { BundleManager } from './live-update/bundle-manager';
|
|
15
13
|
export { DownloadManager } from './live-update/download-manager';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAwFxC,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,IAAI,gBAAgB,GAChC,MAAM,eAAe,CAAC;AAEvB,kCAAkC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAwFxC,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,IAAI,gBAAgB,GAChC,MAAM,eAAe,CAAC;AAEvB,kCAAkC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qCAAqC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
import type { DownloadProgressEvent } from '../definitions';
|
|
2
|
+
export interface DownloadOptions {
|
|
3
|
+
onProgress?: (event: DownloadProgressEvent) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Byte offset to resume from. When set, the request carries a
|
|
6
|
+
* `Range: bytes=<N>-` header. If the server responds with 200 instead
|
|
7
|
+
* of 206, the plugin discards any partial data the caller held and
|
|
8
|
+
* treats the response as a full download (see resumeDownload).
|
|
9
|
+
*/
|
|
10
|
+
resumePosition?: number;
|
|
11
|
+
}
|
|
2
12
|
/**
|
|
3
13
|
* Manages file downloads with progress tracking and resume capability
|
|
4
14
|
*/
|
|
5
15
|
export declare class DownloadManager {
|
|
6
16
|
private activeDownloads;
|
|
17
|
+
/**
|
|
18
|
+
* Persisted-past-request metadata for the most recent `download()`
|
|
19
|
+
* call per bundleId. Today we only stash whether the server honoured
|
|
20
|
+
* a Range request (HTTP 206 vs 200). resumeDownload() consults this
|
|
21
|
+
* to decide whether to concatenate or discard its partial prefix.
|
|
22
|
+
*/
|
|
23
|
+
private lastResponseMeta;
|
|
7
24
|
private readonly logger;
|
|
8
25
|
private readonly configManager;
|
|
9
26
|
private filesystem;
|
|
@@ -17,11 +34,25 @@ export declare class DownloadManager {
|
|
|
17
34
|
*/
|
|
18
35
|
private validateUrl;
|
|
19
36
|
/**
|
|
20
|
-
* Download a file with progress tracking
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
37
|
+
* Download a file with progress tracking.
|
|
38
|
+
*
|
|
39
|
+
* Accepts either a bare `onProgress` callback (back-compat) or a full
|
|
40
|
+
* DownloadOptions object. When `resumePosition` is set, the request
|
|
41
|
+
* carries a Range header; the resulting download state records
|
|
42
|
+
* whether the server actually honoured it (`serverReturnedPartial`).
|
|
43
|
+
*/
|
|
44
|
+
download(url: string, bundleId: string, onProgressOrOptions?: ((event: DownloadProgressEvent) => void) | DownloadOptions): Promise<Blob>;
|
|
45
|
+
/**
|
|
46
|
+
* Resume a previously interrupted download.
|
|
47
|
+
*
|
|
48
|
+
* Emits a Range-request download starting at the partial-data offset.
|
|
49
|
+
* If the server honours the range (HTTP 206), the partial + remaining
|
|
50
|
+
* bytes are concatenated. If the server returns a full response
|
|
51
|
+
* (HTTP 200 — common when the upstream URL's ETag changed, or when a
|
|
52
|
+
* CDN doesn't honour ranges) the partial data is discarded and the
|
|
53
|
+
* full response is used. Previously this path silently double-wrote
|
|
54
|
+
* bytes when the server fell back to 200; this was a latent
|
|
55
|
+
* bundle-corruption bug.
|
|
25
56
|
*/
|
|
26
57
|
resumeDownload(url: string, bundleId: string, partialData: Blob, onProgress?: (event: DownloadProgressEvent) => void): Promise<Blob>;
|
|
27
58
|
/**
|
|
@@ -8,6 +8,13 @@ import { Directory } from '@capacitor/filesystem';
|
|
|
8
8
|
export class DownloadManager {
|
|
9
9
|
constructor() {
|
|
10
10
|
this.activeDownloads = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Persisted-past-request metadata for the most recent `download()`
|
|
13
|
+
* call per bundleId. Today we only stash whether the server honoured
|
|
14
|
+
* a Range request (HTTP 206 vs 200). resumeDownload() consults this
|
|
15
|
+
* to decide whether to concatenate or discard its partial prefix.
|
|
16
|
+
*/
|
|
17
|
+
this.lastResponseMeta = new Map();
|
|
11
18
|
this.filesystem = null;
|
|
12
19
|
this.logger = Logger.getInstance();
|
|
13
20
|
this.configManager = ConfigManager.getInstance();
|
|
@@ -45,9 +52,20 @@ export class DownloadManager {
|
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
54
|
/**
|
|
48
|
-
* Download a file with progress tracking
|
|
55
|
+
* Download a file with progress tracking.
|
|
56
|
+
*
|
|
57
|
+
* Accepts either a bare `onProgress` callback (back-compat) or a full
|
|
58
|
+
* DownloadOptions object. When `resumePosition` is set, the request
|
|
59
|
+
* carries a Range header; the resulting download state records
|
|
60
|
+
* whether the server actually honoured it (`serverReturnedPartial`).
|
|
49
61
|
*/
|
|
50
|
-
async download(url, bundleId,
|
|
62
|
+
async download(url, bundleId, onProgressOrOptions) {
|
|
63
|
+
var _a;
|
|
64
|
+
const options = typeof onProgressOrOptions === 'function'
|
|
65
|
+
? { onProgress: onProgressOrOptions }
|
|
66
|
+
: onProgressOrOptions !== null && onProgressOrOptions !== void 0 ? onProgressOrOptions : {};
|
|
67
|
+
const onProgress = options.onProgress;
|
|
68
|
+
const resumePosition = (_a = options.resumePosition) !== null && _a !== void 0 ? _a : 0;
|
|
51
69
|
// Validate inputs
|
|
52
70
|
this.validateUrl(url);
|
|
53
71
|
if (!bundleId) {
|
|
@@ -62,6 +80,7 @@ export class DownloadManager {
|
|
|
62
80
|
const downloadState = {
|
|
63
81
|
controller: abortController,
|
|
64
82
|
startTime: Date.now(),
|
|
83
|
+
resumePosition: resumePosition > 0 ? resumePosition : undefined,
|
|
65
84
|
};
|
|
66
85
|
this.activeDownloads.set(bundleId, downloadState);
|
|
67
86
|
try {
|
|
@@ -73,8 +92,8 @@ export class DownloadManager {
|
|
|
73
92
|
Accept: 'application/octet-stream, application/zip',
|
|
74
93
|
};
|
|
75
94
|
// Add Range header if resuming from a previous position
|
|
76
|
-
if (
|
|
77
|
-
headers['Range'] = `bytes=${
|
|
95
|
+
if (resumePosition > 0) {
|
|
96
|
+
headers['Range'] = `bytes=${resumePosition}-`;
|
|
78
97
|
}
|
|
79
98
|
const response = await fetch(url, {
|
|
80
99
|
signal: abortController.signal,
|
|
@@ -84,6 +103,13 @@ export class DownloadManager {
|
|
|
84
103
|
if (!response.ok) {
|
|
85
104
|
throw new DownloadError(ErrorCode.DOWNLOAD_FAILED, `Download failed: ${response.status} ${response.statusText}`, { status: response.status, statusText: response.statusText });
|
|
86
105
|
}
|
|
106
|
+
// Record whether the server actually honoured the Range request.
|
|
107
|
+
// Stored on both the live state (for introspection during the
|
|
108
|
+
// download) and the lastResponseMeta map (so resumeDownload can
|
|
109
|
+
// read it after download() cleans up the live state).
|
|
110
|
+
const serverReturnedPartial = resumePosition > 0 && response.status === 206;
|
|
111
|
+
downloadState.serverReturnedPartial = serverReturnedPartial;
|
|
112
|
+
this.lastResponseMeta.set(bundleId, { partial: serverReturnedPartial });
|
|
87
113
|
// Validate content type
|
|
88
114
|
const contentType = response.headers.get('content-type');
|
|
89
115
|
if (contentType && !this.isValidContentType(contentType)) {
|
|
@@ -155,25 +181,31 @@ export class DownloadManager {
|
|
|
155
181
|
}
|
|
156
182
|
}
|
|
157
183
|
/**
|
|
158
|
-
* Resume a previously interrupted download
|
|
184
|
+
* Resume a previously interrupted download.
|
|
185
|
+
*
|
|
186
|
+
* Emits a Range-request download starting at the partial-data offset.
|
|
187
|
+
* If the server honours the range (HTTP 206), the partial + remaining
|
|
188
|
+
* bytes are concatenated. If the server returns a full response
|
|
189
|
+
* (HTTP 200 — common when the upstream URL's ETag changed, or when a
|
|
190
|
+
* CDN doesn't honour ranges) the partial data is discarded and the
|
|
191
|
+
* full response is used. Previously this path silently double-wrote
|
|
192
|
+
* bytes when the server fell back to 200; this was a latent
|
|
193
|
+
* bundle-corruption bug.
|
|
159
194
|
*/
|
|
160
195
|
async resumeDownload(url, bundleId, partialData, onProgress) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return new Blob([partialData,
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
// Resume failed, clean up
|
|
174
|
-
this.activeDownloads.delete(bundleId);
|
|
175
|
-
throw error;
|
|
196
|
+
const responseBlob = await this.download(url, bundleId, {
|
|
197
|
+
onProgress,
|
|
198
|
+
resumePosition: partialData.size,
|
|
199
|
+
});
|
|
200
|
+
// Read the flag download() set in lastResponseMeta. If the server
|
|
201
|
+
// returned 206 we concatenate; if 200 we discard the partial.
|
|
202
|
+
const meta = this.lastResponseMeta.get(bundleId);
|
|
203
|
+
this.lastResponseMeta.delete(bundleId);
|
|
204
|
+
if (meta === null || meta === void 0 ? void 0 : meta.partial) {
|
|
205
|
+
return new Blob([partialData, responseBlob]);
|
|
176
206
|
}
|
|
207
|
+
this.logger.info('Resume: server returned full response; discarding partial data', { bundleId, partialSize: partialData.size, responseSize: responseBlob.size });
|
|
208
|
+
return responseBlob;
|
|
177
209
|
}
|
|
178
210
|
/**
|
|
179
211
|
* Check if a download can be resumed
|
|
@@ -259,9 +291,16 @@ export class DownloadManager {
|
|
|
259
291
|
let lastError = null;
|
|
260
292
|
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
261
293
|
try {
|
|
262
|
-
//
|
|
294
|
+
// Exponential backoff with ±25% jitter, capped at 30s. Jitter
|
|
295
|
+
// avoids a thundering-herd when many clients retry in lockstep
|
|
296
|
+
// after a common failure (CDN blip, server restart) — without
|
|
297
|
+
// it every client would wake up at exactly the same moment and
|
|
298
|
+
// DDoS the recovering server. 25% is enough desync without
|
|
299
|
+
// making the retry interval feel unpredictable.
|
|
263
300
|
if (attempt > 0) {
|
|
264
|
-
const
|
|
301
|
+
const base = retryDelay * Math.pow(2, attempt - 1);
|
|
302
|
+
const jitter = (Math.random() - 0.5) * 0.5 * base;
|
|
303
|
+
const delay = Math.min(Math.max(base + jitter, 100), 30000);
|
|
265
304
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
266
305
|
this.logger.debug('Retrying download', { bundleId, attempt, delay });
|
|
267
306
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-manager.js","sourceRoot":"","sources":["../../../src/live-update/download-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"download-manager.js","sourceRoot":"","sources":["../../../src/live-update/download-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,18 @@ export declare class UpdateManager {
|
|
|
18
18
|
*/
|
|
19
19
|
applyUpdate(bundleId: string, options?: UpdateOptions): Promise<void>;
|
|
20
20
|
/**
|
|
21
|
-
* Validate update before applying
|
|
21
|
+
* Validate update before applying.
|
|
22
|
+
*
|
|
23
|
+
* Version-safety checks here are the last line of defense before a bundle
|
|
24
|
+
* is activated. We enforce two invariants:
|
|
25
|
+
* 1. Active-bundle monotonicity — new bundle must be strictly newer than
|
|
26
|
+
* whatever is currently active on this device.
|
|
27
|
+
* 2. Persisted high-water-mark — new bundle must be strictly newer than
|
|
28
|
+
* the highest version this device has ever applied in this channel.
|
|
29
|
+
* Catches an attacker who wipes the download cache (or serves an
|
|
30
|
+
* older manifest) to force a downgrade to a vulnerable build.
|
|
31
|
+
* The old `allowDowngrade` escape hatch was removed in v2 — downgrades are
|
|
32
|
+
* a debug/recovery flow and belong in a dedicated API, not an option flag.
|
|
22
33
|
*/
|
|
23
34
|
private validateUpdate;
|
|
24
35
|
/**
|
|
@@ -26,6 +26,7 @@ export class UpdateManager {
|
|
|
26
26
|
* Apply bundle update atomically
|
|
27
27
|
*/
|
|
28
28
|
async applyUpdate(bundleId, options) {
|
|
29
|
+
var _a;
|
|
29
30
|
if (this.updateInProgress) {
|
|
30
31
|
throw new UpdateError(ErrorCode.UPDATE_FAILED, 'Another update is already in progress');
|
|
31
32
|
}
|
|
@@ -64,9 +65,20 @@ export class UpdateManager {
|
|
|
64
65
|
await this.verifyUpdate(newBundle);
|
|
65
66
|
// Mark as active
|
|
66
67
|
await bundleManager.setActiveBundle(bundleId);
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
// Advance the monotonic high-water mark so future update checks and
|
|
69
|
+
// reinstalls cannot be tricked into applying an older version.
|
|
70
|
+
const versionManager = this.pluginManager.getVersionManager();
|
|
71
|
+
const configManager = this.pluginManager.getConfigManager();
|
|
72
|
+
await versionManager.rememberAppliedVersion(configManager.get('channel'), newBundle.version);
|
|
73
|
+
// Auto-cleanup by default. The old opt-in flag left most
|
|
74
|
+
// integrations accumulating bundles forever, which is a disk
|
|
75
|
+
// exhaustion path on devices with limited storage. Host apps
|
|
76
|
+
// that genuinely want every historical bundle can pass
|
|
77
|
+
// cleanupOldBundles: false explicitly.
|
|
78
|
+
const shouldCleanup = (options === null || options === void 0 ? void 0 : options.cleanupOldBundles) !== false;
|
|
79
|
+
if (shouldCleanup) {
|
|
80
|
+
const keep = (_a = options === null || options === void 0 ? void 0 : options.keepBundleCount) !== null && _a !== void 0 ? _a : 3;
|
|
81
|
+
await bundleManager.cleanupOldBundles(keep);
|
|
70
82
|
}
|
|
71
83
|
logger.info('Bundle update completed successfully', {
|
|
72
84
|
bundleId,
|
|
@@ -89,16 +101,32 @@ export class UpdateManager {
|
|
|
89
101
|
}
|
|
90
102
|
}
|
|
91
103
|
/**
|
|
92
|
-
* Validate update before applying
|
|
104
|
+
* Validate update before applying.
|
|
105
|
+
*
|
|
106
|
+
* Version-safety checks here are the last line of defense before a bundle
|
|
107
|
+
* is activated. We enforce two invariants:
|
|
108
|
+
* 1. Active-bundle monotonicity — new bundle must be strictly newer than
|
|
109
|
+
* whatever is currently active on this device.
|
|
110
|
+
* 2. Persisted high-water-mark — new bundle must be strictly newer than
|
|
111
|
+
* the highest version this device has ever applied in this channel.
|
|
112
|
+
* Catches an attacker who wipes the download cache (or serves an
|
|
113
|
+
* older manifest) to force a downgrade to a vulnerable build.
|
|
114
|
+
* The old `allowDowngrade` escape hatch was removed in v2 — downgrades are
|
|
115
|
+
* a debug/recovery flow and belong in a dedicated API, not an option flag.
|
|
93
116
|
*/
|
|
94
|
-
async validateUpdate(currentBundle, newBundle,
|
|
117
|
+
async validateUpdate(currentBundle, newBundle, _options) {
|
|
95
118
|
const logger = this.pluginManager.getLogger();
|
|
96
119
|
const versionManager = this.pluginManager.getVersionManager();
|
|
97
|
-
|
|
98
|
-
if (currentBundle &&
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
120
|
+
const configManager = this.pluginManager.getConfigManager();
|
|
121
|
+
if (currentBundle &&
|
|
122
|
+
versionManager.shouldBlockDowngrade(currentBundle.version, newBundle.version)) {
|
|
123
|
+
throw new ValidationError(ErrorCode.VERSION_DOWNGRADE, `Cannot downgrade from ${currentBundle.version} to ${newBundle.version}`);
|
|
124
|
+
}
|
|
125
|
+
const channel = configManager.get('channel');
|
|
126
|
+
const maxSeen = await versionManager.getMaxSeenVersion(channel);
|
|
127
|
+
if (maxSeen &&
|
|
128
|
+
versionManager.shouldBlockDowngrade(maxSeen, newBundle.version)) {
|
|
129
|
+
throw new ValidationError(ErrorCode.VERSION_DOWNGRADE, `Cannot apply ${newBundle.version} - device has previously applied ${maxSeen} on channel ${channel}`);
|
|
102
130
|
}
|
|
103
131
|
// Verify bundle integrity
|
|
104
132
|
if (!newBundle.verified) {
|