@capgo/capacitor-updater 6.14.10 → 6.14.12

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.
@@ -10,7 +10,6 @@ import android.app.Activity;
10
10
  import android.content.Context;
11
11
  import android.content.SharedPreferences;
12
12
  import android.os.Build;
13
- import android.util.Base64;
14
13
  import android.util.Log;
15
14
  import androidx.annotation.NonNull;
16
15
  import androidx.lifecycle.LifecycleOwner;
@@ -22,27 +21,20 @@ import com.getcapacitor.plugin.WebView;
22
21
  import com.google.common.util.concurrent.Futures;
23
22
  import com.google.common.util.concurrent.ListenableFuture;
24
23
  import java.io.BufferedInputStream;
25
- import java.io.DataInputStream;
26
24
  import java.io.File;
27
25
  import java.io.FileInputStream;
28
26
  import java.io.FileNotFoundException;
29
27
  import java.io.FileOutputStream;
30
28
  import java.io.FilenameFilter;
31
29
  import java.io.IOException;
32
- import java.security.GeneralSecurityException;
33
- import java.security.MessageDigest;
34
- import java.security.PrivateKey;
35
- import java.security.PublicKey;
36
30
  import java.security.SecureRandom;
37
31
  import java.util.ArrayList;
38
32
  import java.util.Date;
39
33
  import java.util.Iterator;
40
34
  import java.util.List;
41
35
  import java.util.Objects;
42
- import java.util.zip.CRC32;
43
36
  import java.util.zip.ZipEntry;
44
37
  import java.util.zip.ZipInputStream;
45
- import javax.crypto.SecretKey;
46
38
  import okhttp3.*;
47
39
  import org.json.JSONArray;
48
40
  import org.json.JSONException;
@@ -245,6 +237,7 @@ public class CapacitorUpdater {
245
237
 
246
238
  boolean success = finishDownload(id, dest, version, sessionKey, checksum, true, isManifest);
247
239
  if (!success) {
240
+ Log.e(TAG, "Finish download failed: " + version);
248
241
  saveBundleInfo(
249
242
  id,
250
243
  new BundleInfo(id, version, BundleStatus.ERROR, new Date(System.currentTimeMillis()), "")
@@ -259,6 +252,7 @@ public class CapacitorUpdater {
259
252
  case FAILED:
260
253
  Data failedData = workInfo.getOutputData();
261
254
  String error = failedData.getString(DownloadService.ERROR);
255
+ Log.e(TAG, "Download failed: " + error + " " + workInfo.getState());
262
256
  String failedVersion = failedData.getString(DownloadService.VERSION);
263
257
  saveBundleInfo(
264
258
  id,
@@ -344,7 +338,7 @@ public class CapacitorUpdater {
344
338
  }
345
339
  }
346
340
  // Remove the decryption for manifest downloads
347
- } catch (IOException e) {
341
+ } catch (Exception e) {
348
342
  final Boolean res = this.delete(id);
349
343
  if (!res) {
350
344
  Log.i(CapacitorUpdater.TAG, "Double error, cannot cleanup: " + version);
@@ -57,7 +57,7 @@ public class CapacitorUpdaterPlugin extends Plugin {
57
57
  private static final String statsUrlDefault = "https://plugin.capgo.app/stats";
58
58
  private static final String channelUrlDefault = "https://plugin.capgo.app/channel_self";
59
59
 
60
- private final String PLUGIN_VERSION = "6.14.10";
60
+ private final String PLUGIN_VERSION = "6.14.12";
61
61
  private static final String DELAY_CONDITION_PREFERENCES = "";
62
62
 
63
63
  private SharedPreferences.Editor editor;
@@ -35,6 +35,7 @@ import okhttp3.ResponseBody;
35
35
  import org.brotli.dec.BrotliInputStream;
36
36
  import org.json.JSONArray;
37
37
  import org.json.JSONObject;
38
+ import java.nio.file.Files;
38
39
 
39
40
  public class DownloadService extends Worker {
40
41
 
@@ -109,7 +110,6 @@ public class DownloadService extends Worker {
109
110
  return createSuccessResult(dest, version, sessionKey, checksum, false);
110
111
  }
111
112
  } catch (Exception e) {
112
- Log.e(TAG, "Error in doWork", e);
113
113
  return createFailureResult(e.getMessage());
114
114
  }
115
115
  }
@@ -219,7 +219,7 @@ public class DownloadService extends Worker {
219
219
  throw new IOException("One or more files failed to download");
220
220
  }
221
221
  } catch (Exception e) {
222
- Log.e(TAG, "Error in handleManifestDownload", e);
222
+ throw new RuntimeException(e.getLocalizedMessage());
223
223
  }
224
224
  }
225
225
 
@@ -317,10 +317,8 @@ public class DownloadService extends Worker {
317
317
  }
318
318
  }
319
319
  } catch (OutOfMemoryError e) {
320
- e.printStackTrace();
321
320
  throw new RuntimeException("low_mem_fail");
322
321
  } catch (Exception e) {
323
- e.printStackTrace();
324
322
  throw new RuntimeException(e.getLocalizedMessage());
325
323
  }
326
324
  }
@@ -334,7 +332,8 @@ public class DownloadService extends Worker {
334
332
  infoFile.createNewFile();
335
333
  tempFile.createNewFile();
336
334
  } catch (IOException e) {
337
- e.printStackTrace();
335
+ Log.e(TAG, "Error in clearDownloadData", e);
336
+ // not a fatal error, so we don't throw an exception
338
337
  }
339
338
  }
340
339
 
@@ -394,18 +393,10 @@ public class DownloadService extends Worker {
394
393
  decryptedExpectedHash = CryptoCipherV2.decryptChecksum(decryptedExpectedHash, publicKey);
395
394
  }
396
395
 
397
- // Decompress the file
398
- try (
399
- FileInputStream fis = new FileInputStream(compressedFile);
400
- BrotliInputStream brotliInputStream = new BrotliInputStream(fis);
401
- FileOutputStream fos = new FileOutputStream(targetFile)
402
- ) {
403
- byte[] buffer = new byte[8192];
404
- int len;
405
- while ((len = brotliInputStream.read(buffer)) != -1) {
406
- fos.write(buffer, 0, len);
407
- }
408
- }
396
+ // Use new decompression method
397
+ byte[] compressedData = Files.readAllBytes(compressedFile.toPath());
398
+ byte[] decompressedData = decompressBrotli(compressedData, targetFile.getName());
399
+ Files.write(targetFile.toPath(), decompressedData);
409
400
 
410
401
  // Delete the compressed file
411
402
  compressedFile.delete();
@@ -417,8 +408,19 @@ public class DownloadService extends Worker {
417
408
  copyFile(targetFile, cacheFile);
418
409
  } else {
419
410
  targetFile.delete();
420
- throw new IOException("Checksum verification failed for " + targetFile.getName());
411
+ throw new IOException(
412
+ "Checksum verification failed for: " +
413
+ downloadUrl +
414
+ " " +
415
+ targetFile.getName() +
416
+ " expected: " +
417
+ decryptedExpectedHash +
418
+ " calculated: " +
419
+ calculatedHash
420
+ );
421
421
  }
422
+ } catch (Exception e) {
423
+ throw new IOException("Error in downloadAndVerify: " + e.getMessage());
422
424
  }
423
425
  }
424
426
 
@@ -450,4 +452,63 @@ public class DownloadService extends Worker {
450
452
  }
451
453
  return sb.toString();
452
454
  }
455
+
456
+ private byte[] decompressBrotli(byte[] data, String fileName) throws IOException {
457
+ // Validate input
458
+ if (data == null) {
459
+ Log.e(TAG, "Error: Null data received for " + fileName);
460
+ throw new IOException("Null data received");
461
+ }
462
+
463
+ // Handle empty files
464
+ if (data.length == 0) {
465
+ return new byte[0];
466
+ }
467
+
468
+ // Handle the special EMPTY_BROTLI_STREAM case
469
+ if (data.length == 3 && data[0] == 0x1B && data[1] == 0x00 && data[2] == 0x06) {
470
+ return new byte[0];
471
+ }
472
+
473
+ // For small files, check if it's a minimal Brotli wrapper
474
+ if (data.length > 3) {
475
+ try {
476
+ // Handle our minimal wrapper pattern
477
+ if (data[0] == 0x1B && data[1] == 0x00 && data[2] == 0x06 && data[data.length - 1] == 0x03) {
478
+ return Arrays.copyOfRange(data, 3, data.length - 1);
479
+ }
480
+
481
+ // Handle brotli.compress minimal wrapper (quality 0)
482
+ if (data[0] == 0x0b && data[1] == 0x02 && data[2] == (byte)0x80 && data[data.length - 1] == 0x03) {
483
+ return Arrays.copyOfRange(data, 3, data.length - 1);
484
+ }
485
+ } catch (ArrayIndexOutOfBoundsException e) {
486
+ Log.e(TAG, "Error: Malformed data for " + fileName);
487
+ throw new IOException("Malformed data structure");
488
+ }
489
+ }
490
+
491
+ // For all other cases, try standard decompression
492
+ try (
493
+ ByteArrayInputStream bis = new ByteArrayInputStream(data);
494
+ BrotliInputStream brotliInputStream = new BrotliInputStream(bis);
495
+ ByteArrayOutputStream bos = new ByteArrayOutputStream()
496
+ ) {
497
+ byte[] buffer = new byte[8192];
498
+ int len;
499
+ while ((len = brotliInputStream.read(buffer)) != -1) {
500
+ bos.write(buffer, 0, len);
501
+ }
502
+ return bos.toByteArray();
503
+ } catch (IOException e) {
504
+ Log.e(TAG, "Error: Brotli process failed for " + fileName + ". Status: " + e.getMessage());
505
+ // Add hex dump for debugging
506
+ StringBuilder hexDump = new StringBuilder();
507
+ for (int i = 0; i < Math.min(32, data.length); i++) {
508
+ hexDump.append(String.format("%02x ", data[i]));
509
+ }
510
+ Log.e(TAG, "Error: Raw data (" + fileName + "): " + hexDump.toString());
511
+ throw e;
512
+ }
513
+ }
453
514
  }
@@ -116,7 +116,7 @@ class CapacitorUpdaterWeb extends core.WebPlugin {
116
116
  return { bundle: BUNDLE_BUILTIN };
117
117
  }
118
118
  async setMultiDelay(options) {
119
- console.warn('Cannot setMultiDelay in web', options === null || options === undefined ? undefined : options.delayConditions);
119
+ console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);
120
120
  return;
121
121
  }
122
122
  async setDelay(option) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from '@capacitor/core';\nconst CapacitorUpdater = registerPlugin('CapacitorUpdater', {\n web: () => import('./web').then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from './definitions';\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from '@capacitor/core';\nconst BUNDLE_BUILTIN = {\n status: 'success',\n version: '',\n downloaded: '1970-01-01T00:00:00.000Z',\n id: 'builtin',\n checksum: '',\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async setStatsUrl(options) {\n console.warn('Cannot setStatsUrl in web', options);\n return;\n }\n async setUpdateUrl(options) {\n console.warn('Cannot setUpdateUrl in web', options);\n return;\n }\n async setChannelUrl(options) {\n console.warn('Cannot setChannelUrl in web', options);\n return;\n }\n async download(options) {\n console.warn('Cannot download version in web', options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn('Cannot set next version in web', options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn('Cannot get isAutoUpdateEnabled in web');\n return { enabled: false };\n }\n async set(options) {\n console.warn('Cannot set active bundle in web', options);\n return;\n }\n async getDeviceId() {\n console.warn('Cannot get ID in web');\n return { deviceId: 'default' };\n }\n async getBuiltinVersion() {\n console.warn('Cannot get version in web');\n return { version: 'default' };\n }\n async getPluginVersion() {\n console.warn('Cannot get plugin version in web');\n return { version: 'default' };\n }\n async delete(options) {\n console.warn('Cannot delete bundle in web', options);\n }\n async list() {\n console.warn('Cannot list bundles in web');\n return { bundles: [] };\n }\n async reset(options) {\n console.warn('Cannot reset version in web', options);\n }\n async current() {\n console.warn('Cannot get current bundle in web');\n return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };\n }\n async reload() {\n console.warn('Cannot reload current bundle in web');\n return;\n }\n async getLatest() {\n console.warn('Cannot getLatest current bundle in web');\n return {\n version: '0.0.0',\n message: 'Cannot getLatest current bundle in web',\n };\n }\n async setChannel(options) {\n console.warn('Cannot setChannel in web', options);\n return {\n status: 'error',\n error: 'Cannot setChannel in web',\n };\n }\n async unsetChannel(options) {\n console.warn('Cannot unsetChannel in web', options);\n return;\n }\n async setCustomId(options) {\n console.warn('Cannot setCustomId in web', options);\n return;\n }\n async getChannel() {\n console.warn('Cannot getChannel in web');\n return {\n status: 'error',\n error: 'Cannot getChannel in web',\n };\n }\n async notifyAppReady() {\n console.warn('Cannot notify App Ready in web');\n return { bundle: BUNDLE_BUILTIN };\n }\n async setMultiDelay(options) {\n console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn('Cannot setDelay in web', option);\n return;\n }\n async cancelDelay() {\n console.warn('Cannot cancelDelay in web');\n return;\n }\n async isAutoUpdateAvailable() {\n console.warn('Cannot isAutoUpdateAvailable in web');\n return { available: false };\n }\n async getCurrentBundle() {\n console.warn('Cannot get current bundle in web');\n return BUNDLE_BUILTIN;\n }\n async getNextBundle() {\n console.warn('Cannot get next bundle in web');\n return null;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from '@capacitor/core';\nconst CapacitorUpdater = registerPlugin('CapacitorUpdater', {\n web: () => import('./web').then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from './definitions';\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from '@capacitor/core';\nconst BUNDLE_BUILTIN = {\n status: 'success',\n version: '',\n downloaded: '1970-01-01T00:00:00.000Z',\n id: 'builtin',\n checksum: '',\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async setStatsUrl(options) {\n console.warn('Cannot setStatsUrl in web', options);\n return;\n }\n async setUpdateUrl(options) {\n console.warn('Cannot setUpdateUrl in web', options);\n return;\n }\n async setChannelUrl(options) {\n console.warn('Cannot setChannelUrl in web', options);\n return;\n }\n async download(options) {\n console.warn('Cannot download version in web', options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn('Cannot set next version in web', options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn('Cannot get isAutoUpdateEnabled in web');\n return { enabled: false };\n }\n async set(options) {\n console.warn('Cannot set active bundle in web', options);\n return;\n }\n async getDeviceId() {\n console.warn('Cannot get ID in web');\n return { deviceId: 'default' };\n }\n async getBuiltinVersion() {\n console.warn('Cannot get version in web');\n return { version: 'default' };\n }\n async getPluginVersion() {\n console.warn('Cannot get plugin version in web');\n return { version: 'default' };\n }\n async delete(options) {\n console.warn('Cannot delete bundle in web', options);\n }\n async list() {\n console.warn('Cannot list bundles in web');\n return { bundles: [] };\n }\n async reset(options) {\n console.warn('Cannot reset version in web', options);\n }\n async current() {\n console.warn('Cannot get current bundle in web');\n return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };\n }\n async reload() {\n console.warn('Cannot reload current bundle in web');\n return;\n }\n async getLatest() {\n console.warn('Cannot getLatest current bundle in web');\n return {\n version: '0.0.0',\n message: 'Cannot getLatest current bundle in web',\n };\n }\n async setChannel(options) {\n console.warn('Cannot setChannel in web', options);\n return {\n status: 'error',\n error: 'Cannot setChannel in web',\n };\n }\n async unsetChannel(options) {\n console.warn('Cannot unsetChannel in web', options);\n return;\n }\n async setCustomId(options) {\n console.warn('Cannot setCustomId in web', options);\n return;\n }\n async getChannel() {\n console.warn('Cannot getChannel in web');\n return {\n status: 'error',\n error: 'Cannot getChannel in web',\n };\n }\n async notifyAppReady() {\n console.warn('Cannot notify App Ready in web');\n return { bundle: BUNDLE_BUILTIN };\n }\n async setMultiDelay(options) {\n console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn('Cannot setDelay in web', option);\n return;\n }\n async cancelDelay() {\n console.warn('Cannot cancelDelay in web');\n return;\n }\n async isAutoUpdateAvailable() {\n console.warn('Cannot isAutoUpdateAvailable in web');\n return { available: false };\n }\n async getCurrentBundle() {\n console.warn('Cannot get current bundle in web');\n return BUNDLE_BUILTIN;\n }\n async getNextBundle() {\n console.warn('Cannot get next bundle in web');\n return null;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -115,7 +115,7 @@ var capacitorCapacitorUpdater = (function (exports, core) {
115
115
  return { bundle: BUNDLE_BUILTIN };
116
116
  }
117
117
  async setMultiDelay(options) {
118
- console.warn('Cannot setMultiDelay in web', options === null || options === undefined ? undefined : options.delayConditions);
118
+ console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);
119
119
  return;
120
120
  }
121
121
  async setDelay(option) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from '@capacitor/core';\nconst CapacitorUpdater = registerPlugin('CapacitorUpdater', {\n web: () => import('./web').then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from './definitions';\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from '@capacitor/core';\nconst BUNDLE_BUILTIN = {\n status: 'success',\n version: '',\n downloaded: '1970-01-01T00:00:00.000Z',\n id: 'builtin',\n checksum: '',\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async setStatsUrl(options) {\n console.warn('Cannot setStatsUrl in web', options);\n return;\n }\n async setUpdateUrl(options) {\n console.warn('Cannot setUpdateUrl in web', options);\n return;\n }\n async setChannelUrl(options) {\n console.warn('Cannot setChannelUrl in web', options);\n return;\n }\n async download(options) {\n console.warn('Cannot download version in web', options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn('Cannot set next version in web', options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn('Cannot get isAutoUpdateEnabled in web');\n return { enabled: false };\n }\n async set(options) {\n console.warn('Cannot set active bundle in web', options);\n return;\n }\n async getDeviceId() {\n console.warn('Cannot get ID in web');\n return { deviceId: 'default' };\n }\n async getBuiltinVersion() {\n console.warn('Cannot get version in web');\n return { version: 'default' };\n }\n async getPluginVersion() {\n console.warn('Cannot get plugin version in web');\n return { version: 'default' };\n }\n async delete(options) {\n console.warn('Cannot delete bundle in web', options);\n }\n async list() {\n console.warn('Cannot list bundles in web');\n return { bundles: [] };\n }\n async reset(options) {\n console.warn('Cannot reset version in web', options);\n }\n async current() {\n console.warn('Cannot get current bundle in web');\n return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };\n }\n async reload() {\n console.warn('Cannot reload current bundle in web');\n return;\n }\n async getLatest() {\n console.warn('Cannot getLatest current bundle in web');\n return {\n version: '0.0.0',\n message: 'Cannot getLatest current bundle in web',\n };\n }\n async setChannel(options) {\n console.warn('Cannot setChannel in web', options);\n return {\n status: 'error',\n error: 'Cannot setChannel in web',\n };\n }\n async unsetChannel(options) {\n console.warn('Cannot unsetChannel in web', options);\n return;\n }\n async setCustomId(options) {\n console.warn('Cannot setCustomId in web', options);\n return;\n }\n async getChannel() {\n console.warn('Cannot getChannel in web');\n return {\n status: 'error',\n error: 'Cannot getChannel in web',\n };\n }\n async notifyAppReady() {\n console.warn('Cannot notify App Ready in web');\n return { bundle: BUNDLE_BUILTIN };\n }\n async setMultiDelay(options) {\n console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn('Cannot setDelay in web', option);\n return;\n }\n async cancelDelay() {\n console.warn('Cannot cancelDelay in web');\n return;\n }\n async isAutoUpdateAvailable() {\n console.warn('Cannot isAutoUpdateAvailable in web');\n return { available: false };\n }\n async getCurrentBundle() {\n console.warn('Cannot get current bundle in web');\n return BUNDLE_BUILTIN;\n }\n async getNextBundle() {\n console.warn('Cannot get next bundle in web');\n return null;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from '@capacitor/core';\nconst CapacitorUpdater = registerPlugin('CapacitorUpdater', {\n web: () => import('./web').then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from './definitions';\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from '@capacitor/core';\nconst BUNDLE_BUILTIN = {\n status: 'success',\n version: '',\n downloaded: '1970-01-01T00:00:00.000Z',\n id: 'builtin',\n checksum: '',\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async setStatsUrl(options) {\n console.warn('Cannot setStatsUrl in web', options);\n return;\n }\n async setUpdateUrl(options) {\n console.warn('Cannot setUpdateUrl in web', options);\n return;\n }\n async setChannelUrl(options) {\n console.warn('Cannot setChannelUrl in web', options);\n return;\n }\n async download(options) {\n console.warn('Cannot download version in web', options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn('Cannot set next version in web', options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn('Cannot get isAutoUpdateEnabled in web');\n return { enabled: false };\n }\n async set(options) {\n console.warn('Cannot set active bundle in web', options);\n return;\n }\n async getDeviceId() {\n console.warn('Cannot get ID in web');\n return { deviceId: 'default' };\n }\n async getBuiltinVersion() {\n console.warn('Cannot get version in web');\n return { version: 'default' };\n }\n async getPluginVersion() {\n console.warn('Cannot get plugin version in web');\n return { version: 'default' };\n }\n async delete(options) {\n console.warn('Cannot delete bundle in web', options);\n }\n async list() {\n console.warn('Cannot list bundles in web');\n return { bundles: [] };\n }\n async reset(options) {\n console.warn('Cannot reset version in web', options);\n }\n async current() {\n console.warn('Cannot get current bundle in web');\n return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };\n }\n async reload() {\n console.warn('Cannot reload current bundle in web');\n return;\n }\n async getLatest() {\n console.warn('Cannot getLatest current bundle in web');\n return {\n version: '0.0.0',\n message: 'Cannot getLatest current bundle in web',\n };\n }\n async setChannel(options) {\n console.warn('Cannot setChannel in web', options);\n return {\n status: 'error',\n error: 'Cannot setChannel in web',\n };\n }\n async unsetChannel(options) {\n console.warn('Cannot unsetChannel in web', options);\n return;\n }\n async setCustomId(options) {\n console.warn('Cannot setCustomId in web', options);\n return;\n }\n async getChannel() {\n console.warn('Cannot getChannel in web');\n return {\n status: 'error',\n error: 'Cannot getChannel in web',\n };\n }\n async notifyAppReady() {\n console.warn('Cannot notify App Ready in web');\n return { bundle: BUNDLE_BUILTIN };\n }\n async setMultiDelay(options) {\n console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn('Cannot setDelay in web', option);\n return;\n }\n async cancelDelay() {\n console.warn('Cannot cancelDelay in web');\n return;\n }\n async isAutoUpdateAvailable() {\n console.warn('Cannot isAutoUpdateAvailable in web');\n return { available: false };\n }\n async getCurrentBundle() {\n console.warn('Cannot get current bundle in web');\n return BUNDLE_BUILTIN;\n }\n async getNextBundle() {\n console.warn('Cannot get next bundle in web');\n return null;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
@@ -383,9 +383,9 @@ import UIKit
383
383
  let statusCode = response.response?.statusCode ?? 200
384
384
  if statusCode < 200 || statusCode >= 300 {
385
385
  if let stringData = String(data: data, encoding: .utf8) {
386
- throw NSError(domain: "StatusCodeError", code: 2, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch. Status code (\(statusCode)) invalid. Data: \(stringData)"])
386
+ throw NSError(domain: "StatusCodeError", code: 2, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch. Status code (\(statusCode)) invalid. Data: \(stringData) for file \(fileName) at url \(downloadUrl)"])
387
387
  } else {
388
- throw NSError(domain: "StatusCodeError", code: 2, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch. Status code (\(statusCode)) invalid"])
388
+ throw NSError(domain: "StatusCodeError", code: 2, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch. Status code (\(statusCode)) invalid for file \(fileName) at url \(downloadUrl)"])
389
389
  }
390
390
  }
391
391
 
@@ -407,7 +407,7 @@ import UIKit
407
407
 
408
408
  // Decompress the Brotli data
409
409
  guard let decompressedData = self.decompressBrotli(data: finalData, fileName: fileName) else {
410
- throw NSError(domain: "BrotliDecompressionError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Failed to decompress Brotli data"])
410
+ throw NSError(domain: "BrotliDecompressionError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Failed to decompress Brotli data for file \(fileName) at url \(downloadUrl)"])
411
411
  }
412
412
  finalData = decompressedData
413
413
 
@@ -416,7 +416,7 @@ import UIKit
416
416
  // assume that calcChecksum != null
417
417
  let calculatedChecksum = CryptoCipherV2.calcChecksum(filePath: destFilePath)
418
418
  if calculatedChecksum != fileHash {
419
- throw NSError(domain: "ChecksumError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Computed checksum is not equal to required checksum (\(calculatedChecksum) != \(fileHash))"])
419
+ throw NSError(domain: "ChecksumError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Computed checksum is not equal to required checksum (\(calculatedChecksum) != \(fileHash)) for file \(fileName) at url \(downloadUrl)"])
420
420
  }
421
421
  }
422
422
 
@@ -428,10 +428,10 @@ import UIKit
428
428
  print("\(CapacitorUpdater.TAG) downloadManifest \(id) \(fileName) downloaded, decompressed\(!self.publicKey.isEmpty && !sessionKey.isEmpty ? ", decrypted" : ""), and cached")
429
429
  } catch {
430
430
  downloadError = error
431
- print("\(CapacitorUpdater.TAG) downloadManifest \(id) \(fileName) error: \(error)")
431
+ NSLog("\(CapacitorUpdater.TAG) downloadManifest \(id) \(fileName) error: \(error.localizedDescription)")
432
432
  }
433
433
  case .failure(let error):
434
- print("\(CapacitorUpdater.TAG) downloadManifest \(id) \(fileName) download error: \(error). Debug response: \(response.debugDescription).")
434
+ NSLog("\(CapacitorUpdater.TAG) downloadManifest \(id) \(fileName) download error: \(error.localizedDescription). Debug response: \(response.debugDescription).")
435
435
  }
436
436
  }
437
437
  }
@@ -455,14 +455,43 @@ import UIKit
455
455
  }
456
456
 
457
457
  private func decompressBrotli(data: Data, fileName: String) -> Data? {
458
+ // Handle empty files
459
+ if data.count == 0 {
460
+ return data
461
+ }
462
+
463
+ // Handle the special EMPTY_BROTLI_STREAM case
464
+ if data.count == 3 && data[0] == 0x1B && data[1] == 0x00 && data[2] == 0x06 {
465
+ return Data()
466
+ }
467
+
468
+ // For small files, check if it's a minimal Brotli wrapper
469
+ if data.count > 3 {
470
+ let maxBytes = min(32, data.count)
471
+ let hexDump = data.prefix(maxBytes).map { String(format: "%02x", $0) }.joined(separator: " ")
472
+ // Handle our minimal wrapper pattern
473
+ if data[0] == 0x1B && data[1] == 0x00 && data[2] == 0x06 && data.last == 0x03 {
474
+ let range = data.index(data.startIndex, offsetBy: 3)..<data.index(data.endIndex, offsetBy: -1)
475
+ return data[range]
476
+ }
477
+
478
+ // Handle brotli.compress minimal wrapper (quality 0)
479
+ if data[0] == 0x0b && data[1] == 0x02 && data[2] == 0x80 && data.last == 0x03 {
480
+ let range = data.index(data.startIndex, offsetBy: 3)..<data.index(data.endIndex, offsetBy: -1)
481
+ return data[range]
482
+ }
483
+ }
484
+
485
+ // For all other cases, try standard decompression
458
486
  let outputBufferSize = 65536
459
487
  var outputBuffer = [UInt8](repeating: 0, count: outputBufferSize)
460
488
  var decompressedData = Data()
461
489
 
462
490
  let streamPointer = UnsafeMutablePointer<compression_stream>.allocate(capacity: 1)
463
491
  var status = compression_stream_init(streamPointer, COMPRESSION_STREAM_DECODE, COMPRESSION_BROTLI)
492
+
464
493
  guard status != COMPRESSION_STATUS_ERROR else {
465
- print("\(CapacitorUpdater.TAG) Unable to initialize the decompression stream. \(fileName)")
494
+ print("\(CapacitorUpdater.TAG) Error: Failed to initialize Brotli stream for \(fileName). Status: \(status)")
466
495
  return nil
467
496
  }
468
497
 
@@ -484,7 +513,7 @@ import UIKit
484
513
  if let baseAddress = rawBufferPointer.baseAddress {
485
514
  streamPointer.pointee.src_ptr = baseAddress.assumingMemoryBound(to: UInt8.self)
486
515
  } else {
487
- print("\(CapacitorUpdater.TAG) Error: Unable to get base address of input data. \(fileName)")
516
+ print("\(CapacitorUpdater.TAG) Error: Failed to get base address for \(fileName)")
488
517
  status = COMPRESSION_STATUS_ERROR
489
518
  return
490
519
  }
@@ -492,6 +521,9 @@ import UIKit
492
521
  }
493
522
 
494
523
  if status == COMPRESSION_STATUS_ERROR {
524
+ let maxBytes = min(32, data.count)
525
+ let hexDump = data.prefix(maxBytes).map { String(format: "%02x", $0) }.joined(separator: " ")
526
+ print("\(CapacitorUpdater.TAG) Error: Brotli decompression failed for \(fileName). First \(maxBytes) bytes: \(hexDump)")
495
527
  break
496
528
  }
497
529
 
@@ -505,15 +537,19 @@ import UIKit
505
537
  if status == COMPRESSION_STATUS_END {
506
538
  break
507
539
  } else if status == COMPRESSION_STATUS_ERROR {
508
- print("\(CapacitorUpdater.TAG) Error during Brotli decompression. \(fileName)")
509
- // Try to decode as text if mostly ASCII
540
+ print("\(CapacitorUpdater.TAG) Error: Brotli process failed for \(fileName). Status: \(status)")
510
541
  if let text = String(data: data, encoding: .utf8) {
511
542
  let asciiCount = text.unicodeScalars.filter { $0.isASCII }.count
512
543
  let totalCount = text.unicodeScalars.count
513
544
  if totalCount > 0 && Double(asciiCount) / Double(totalCount) >= 0.8 {
514
- print("\(CapacitorUpdater.TAG) Compressed data as text: \(text)")
545
+ print("\(CapacitorUpdater.TAG) Error: Input appears to be plain text: \(text)")
515
546
  }
516
547
  }
548
+
549
+ let maxBytes = min(32, data.count)
550
+ let hexDump = data.prefix(maxBytes).map { String(format: "%02x", $0) }.joined(separator: " ")
551
+ print("\(CapacitorUpdater.TAG) Error: Raw data (\(fileName)): \(hexDump)")
552
+
517
553
  return nil
518
554
  }
519
555
 
@@ -523,6 +559,7 @@ import UIKit
523
559
  }
524
560
 
525
561
  if input.count == 0 {
562
+ print("\(CapacitorUpdater.TAG) Error: Zero input size for \(fileName)")
526
563
  break
527
564
  }
528
565
  }
@@ -557,7 +594,7 @@ import UIKit
557
594
  }
558
595
  let session = Session(eventMonitors: [monitor])
559
596
 
560
- var request = session.streamRequest(url, headers: requestHeaders).validate().onHTTPResponse(perform: { response in
597
+ let request = session.streamRequest(url, headers: requestHeaders).validate().onHTTPResponse(perform: { response in
561
598
  if let contentLength = response.headers.value(for: "Content-Length") {
562
599
  targetSize = (Int(contentLength) ?? -1) + Int(totalReceivedBytes)
563
600
  }
@@ -45,7 +45,7 @@ public class CapacitorUpdaterPlugin: CAPPlugin, CAPBridgedPlugin {
45
45
  CAPPluginMethod(name: "getNextBundle", returnType: CAPPluginReturnPromise)
46
46
  ]
47
47
  public var implementation = CapacitorUpdater()
48
- private let PLUGIN_VERSION: String = "6.14.10"
48
+ private let PLUGIN_VERSION: String = "6.14.12"
49
49
  static let updateUrlDefault = "https://plugin.capgo.app/updates"
50
50
  static let statsUrlDefault = "https://plugin.capgo.app/stats"
51
51
  static let channelUrlDefault = "https://plugin.capgo.app/channel_self"
@@ -17,56 +17,6 @@ private enum CryptoCipherConstants {
17
17
  static let aesOptions: CCOptions = CCOptions(kCCOptionPKCS7Padding)
18
18
  static let rsaAlgorithm: SecKeyAlgorithm = .rsaEncryptionOAEPSHA256
19
19
  }
20
- ///
21
- /// The AES key. Contains both the initialization vector and secret key.
22
- ///
23
- public struct AES128Key {
24
- /// Initialization vector
25
- private let iv: Data
26
- private let aes128Key: Data
27
- #if DEBUG
28
- public var __debug_iv: Data { iv }
29
- public var __debug_aes128Key: Data { aes128Key }
30
- #endif
31
- init(iv: Data, aes128Key: Data) {
32
- self.iv = iv
33
- self.aes128Key = aes128Key
34
- }
35
- ///
36
- /// Takes the data and uses the private key to decrypt it. Will call `CCCrypt` in CommonCrypto
37
- /// and provide it `ivData` for the initialization vector. Will use cipher block chaining (CBC) as
38
- /// the mode of operation.
39
- ///
40
- /// Returns the decrypted data.
41
- ///
42
- public func decrypt(data: Data) -> Data? {
43
- let encryptedData: UnsafePointer<UInt8> = (data as NSData).bytes.bindMemory(to: UInt8.self, capacity: data.count)
44
- let encryptedDataLength: Int = data.count
45
-
46
- if let result: NSMutableData = NSMutableData(length: encryptedDataLength) {
47
- let keyData: UnsafePointer<UInt8> = (self.aes128Key as NSData).bytes.bindMemory(to: UInt8.self, capacity: self.aes128Key.count)
48
- let keyLength: size_t = size_t(self.aes128Key.count)
49
- let ivData: UnsafePointer<UInt8> = (iv as NSData).bytes.bindMemory(to: UInt8.self, capacity: self.iv.count)
50
-
51
- let decryptedData: UnsafeMutablePointer<UInt8> = UnsafeMutablePointer<UInt8>(result.mutableBytes.assumingMemoryBound(to: UInt8.self))
52
- let decryptedDataLength: size_t = size_t(result.length)
53
-
54
- var decryptedLength: size_t = 0
55
-
56
- let status: CCCryptorStatus = CCCrypt(CCOperation(kCCDecrypt), CryptoCipherConstants.aesAlgorithm, CryptoCipherConstants.aesOptions, keyData, keyLength, ivData, encryptedData, encryptedDataLength, decryptedData, decryptedDataLength, &decryptedLength)
57
-
58
- if Int32(status) == Int32(kCCSuccess) {
59
- result.length = Int(decryptedLength)
60
- return result as Data
61
- } else {
62
- return nil
63
- }
64
- } else {
65
- return nil
66
- }
67
- }
68
- }
69
-
70
20
  ///
71
21
  /// The RSA keypair. Includes both private and public key.
72
22
  ///
@@ -18,37 +18,48 @@ private enum CryptoCipherConstants {
18
18
  static let rsaAlgorithm: SecKeyAlgorithm = .rsaEncryptionOAEPSHA256
19
19
  }
20
20
  ///
21
- /// The RSA keypair. Includes both private and public key.
21
+ /// The AES key. Contains both the initialization vector and secret key.
22
22
  ///
23
- public struct RSAKeyPairV2 {
24
- private let privateKey: SecKey
25
- private let publicKey: SecKey
26
-
23
+ public struct AES128Key {
24
+ /// Initialization vector
25
+ private let iv: Data
26
+ private let aes128Key: Data
27
27
  #if DEBUG
28
- public var __debug_privateKey: SecKey { self.privateKey }
29
- public var __debug_publicKey: SecKey { self.publicKey }
28
+ public var __debug_iv: Data { iv }
29
+ public var __debug_aes128Key: Data { aes128Key }
30
30
  #endif
31
-
32
- fileprivate init(privateKey: SecKey, publicKey: SecKey) {
33
- self.privateKey = privateKey
34
- self.publicKey = publicKey
31
+ init(iv: Data, aes128Key: Data) {
32
+ self.iv = iv
33
+ self.aes128Key = aes128Key
35
34
  }
36
-
37
- public func extractPublicKey() -> RSAPublicKey {
38
- RSAPublicKey(publicKey: publicKey)
39
- }
40
-
41
35
  ///
42
- /// Takes the data and uses the private key to decrypt it.
36
+ /// Takes the data and uses the private key to decrypt it. Will call `CCCrypt` in CommonCrypto
37
+ /// and provide it `ivData` for the initialization vector. Will use cipher block chaining (CBC) as
38
+ /// the mode of operation.
39
+ ///
43
40
  /// Returns the decrypted data.
44
41
  ///
45
42
  public func decrypt(data: Data) -> Data? {
46
- var error: Unmanaged<CFError>?
47
- if let decryptedData: CFData = SecKeyCreateDecryptedData(self.privateKey, CryptoCipherConstants.rsaAlgorithm, data as CFData, &error) {
48
- if error != nil {
49
- return nil
43
+ let encryptedData: UnsafePointer<UInt8> = (data as NSData).bytes.bindMemory(to: UInt8.self, capacity: data.count)
44
+ let encryptedDataLength: Int = data.count
45
+
46
+ if let result: NSMutableData = NSMutableData(length: encryptedDataLength) {
47
+ let keyData: UnsafePointer<UInt8> = (self.aes128Key as NSData).bytes.bindMemory(to: UInt8.self, capacity: self.aes128Key.count)
48
+ let keyLength: size_t = size_t(self.aes128Key.count)
49
+ let ivData: UnsafePointer<UInt8> = (iv as NSData).bytes.bindMemory(to: UInt8.self, capacity: self.iv.count)
50
+
51
+ let decryptedData: UnsafeMutablePointer<UInt8> = UnsafeMutablePointer<UInt8>(result.mutableBytes.assumingMemoryBound(to: UInt8.self))
52
+ let decryptedDataLength: size_t = size_t(result.length)
53
+
54
+ var decryptedLength: size_t = 0
55
+
56
+ let status: CCCryptorStatus = CCCrypt(CCOperation(kCCDecrypt), CryptoCipherConstants.aesAlgorithm, CryptoCipherConstants.aesOptions, keyData, keyLength, ivData, encryptedData, encryptedDataLength, decryptedData, decryptedDataLength, &decryptedLength)
57
+
58
+ if Int32(status) == Int32(kCCSuccess) {
59
+ result.length = Int(decryptedLength)
60
+ return result as Data
50
61
  } else {
51
- return decryptedData as Data
62
+ return nil
52
63
  }
53
64
  } else {
54
65
  return nil
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/capacitor-updater",
3
- "version": "6.14.10",
3
+ "version": "6.14.12",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Live update for capacitor apps",
6
6
  "main": "dist/plugin.cjs.js",