@capgo/capacitor-updater 7.45.10 → 7.50.2

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 (33) hide show
  1. package/Package.swift +1 -1
  2. package/README.md +510 -92
  3. package/android/src/main/java/ee/forgr/capacitor_updater/AndroidAppExitReporter.java +92 -0
  4. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +3192 -777
  5. package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +798 -299
  6. package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +45 -30
  7. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +46 -28
  8. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +2 -0
  9. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +3 -3
  10. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +359 -25
  11. package/android/src/main/java/ee/forgr/capacitor_updater/ThreeFingerPinchDetector.java +323 -0
  12. package/dist/docs.json +1283 -169
  13. package/dist/esm/definitions.d.ts +621 -44
  14. package/dist/esm/definitions.js.map +1 -1
  15. package/dist/esm/web.d.ts +11 -1
  16. package/dist/esm/web.js +59 -1
  17. package/dist/esm/web.js.map +1 -1
  18. package/dist/plugin.cjs.js +59 -1
  19. package/dist/plugin.cjs.js.map +1 -1
  20. package/dist/plugin.js +59 -1
  21. package/dist/plugin.js.map +1 -1
  22. package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +0 -1
  23. package/ios/Sources/CapacitorUpdaterPlugin/AppHealthTracker.swift +82 -0
  24. package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +0 -16
  25. package/ios/Sources/CapacitorUpdaterPlugin/BundleInfo.swift +2 -2
  26. package/ios/Sources/CapacitorUpdaterPlugin/BundleStatus.swift +78 -2
  27. package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2116 -223
  28. package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +997 -332
  29. package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +0 -1
  30. package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +78 -1
  31. package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +418 -36
  32. package/ios/Sources/CapacitorUpdaterPlugin/WebViewStatsReporter.swift +276 -0
  33. package/package.json +15 -3
package/dist/docs.json CHANGED
@@ -156,7 +156,7 @@
156
156
  "text": "{Error} If the download fails or the bundle is invalid."
157
157
  }
158
158
  ],
159
- "docs": "Download a new bundle from the provided URL for later installation.\n\nThe downloaded bundle is stored locally but not activated. To use it:\n- Call {@link next} to set it for installation on next app backgrounding/restart\n- Call {@link set} to activate it immediately (destroys current JavaScript context)\n\nThe URL should point to a zip file containing either:\n- Your app files directly in the zip root, or\n- A single folder containing all your app files\n\nThe bundle must include an `index.html` file at the root level.\n\nFor encrypted bundles, provide the `sessionKey` and `checksum` parameters.\nFor multi-file delta updates, provide the `manifest` array.",
159
+ "docs": "Download a new bundle from the provided URL for later installation.\n\nThe downloaded bundle is stored locally but not activated. To use it:\n- Call {@link next} to set it for installation on next app backgrounding/restart\n- Call {@link set} to activate it immediately (destroys current JavaScript context)\n\nThe URL should point to a zip file containing either:\n- Your app files directly in the zip root, or\n- A single folder containing all your app files\n\nThe bundle must include an `index.html` file at the root level.\n\nFor encrypted bundles, provide the `sessionKey` and `checksum` parameters.\nFor multi-file delta updates, provide the `manifest` array.\n\n**Android Background Runner note:** `@capacitor/background-runner` loads its\nconfigured runner script from native APK assets. Live updates cannot replace\nthat runner script. Keep it stable across OTA updates and ship a native app\nupdate when the runner code changes.",
160
160
  "complexTypes": [
161
161
  "BundleInfo",
162
162
  "DownloadOptions"
@@ -226,6 +226,228 @@
226
226
  ],
227
227
  "slug": "set"
228
228
  },
229
+ {
230
+ "name": "startPreviewSession",
231
+ "signature": "(options?: StartPreviewSessionOptions | undefined) => Promise<void>",
232
+ "parameters": [
233
+ {
234
+ "name": "options",
235
+ "docs": "Optional preview session options.",
236
+ "type": "StartPreviewSessionOptions | undefined"
237
+ }
238
+ ],
239
+ "returns": "Promise<void>",
240
+ "tags": [
241
+ {
242
+ "name": "param",
243
+ "text": "options Optional preview session options."
244
+ },
245
+ {
246
+ "name": "returns",
247
+ "text": "Resolves when preview session state is prepared."
248
+ },
249
+ {
250
+ "name": "since",
251
+ "text": "8.47.0"
252
+ }
253
+ ],
254
+ "docs": "Start a temporary preview/testing session.\n\nThis stores the currently active bundle as the pending fallback, enables the\nnative shake menu, and makes the next applied bundle show a native notice\nexplaining that shaking the device can reload or leave the preview.\nRequires {@link PluginsConfig.CapacitorUpdater.allowPreview} to be `true`.\nWhen `appId` is provided, the preview session temporarily uses that app id\nfor update checks until the user leaves the preview. Native updater stats are\nskipped while the preview session is active.\n\nUse this before calling {@link set} for Expo Go-style preview flows.\nUse {@link listPreviews}, {@link setPreview}, {@link resetPreview},\n{@link deletePreview}, {@link checkPreviewUpdate}, and\n{@link updatePreview} to manage saved local previews.",
255
+ "complexTypes": [
256
+ "StartPreviewSessionOptions"
257
+ ],
258
+ "slug": "startpreviewsession"
259
+ },
260
+ {
261
+ "name": "listPreviews",
262
+ "signature": "() => Promise<PreviewListResult>",
263
+ "parameters": [],
264
+ "returns": "Promise<PreviewListResult>",
265
+ "tags": [
266
+ {
267
+ "name": "returns",
268
+ "text": "Locally available previews and current preview state."
269
+ },
270
+ {
271
+ "name": "throws",
272
+ "text": "{Error} If preview sessions are not enabled by config."
273
+ },
274
+ {
275
+ "name": "since",
276
+ "text": "8.49.0"
277
+ }
278
+ ],
279
+ "docs": "Get every locally available preview bundle that was registered by\n{@link startPreviewSession} and later applied with {@link set}.\n\nThis only returns previews whose bundles are still available locally. It is\nsafe to show this in a preview switcher or native debug menu.",
280
+ "complexTypes": [
281
+ "PreviewListResult"
282
+ ],
283
+ "slug": "listpreviews"
284
+ },
285
+ {
286
+ "name": "setPreview",
287
+ "signature": "(options: BundleId) => Promise<void>",
288
+ "parameters": [
289
+ {
290
+ "name": "options",
291
+ "docs": "A {@link BundleId} object containing the preview bundle ID.",
292
+ "type": "BundleId"
293
+ }
294
+ ],
295
+ "returns": "Promise<void>",
296
+ "tags": [
297
+ {
298
+ "name": "param",
299
+ "text": "options A {@link BundleId} object containing the preview bundle ID."
300
+ },
301
+ {
302
+ "name": "returns",
303
+ "text": "Resolves once the preview switch is staged."
304
+ },
305
+ {
306
+ "name": "throws",
307
+ "text": "{Error} If preview sessions are disabled or the preview is not available locally."
308
+ },
309
+ {
310
+ "name": "since",
311
+ "text": "8.49.0"
312
+ }
313
+ ],
314
+ "docs": "Switch to a locally available preview bundle and reload the WebView.\n\nIf the app is not already in a preview session, the current live bundle is\nsaved as the fallback so {@link resetPreview} or the native shake menu can\nreturn to it later.",
315
+ "complexTypes": [
316
+ "BundleId"
317
+ ],
318
+ "slug": "setpreview"
319
+ },
320
+ {
321
+ "name": "resetPreview",
322
+ "signature": "() => Promise<void>",
323
+ "parameters": [],
324
+ "returns": "Promise<void>",
325
+ "tags": [
326
+ {
327
+ "name": "returns",
328
+ "text": "Resolves once the live bundle reload is staged."
329
+ },
330
+ {
331
+ "name": "throws",
332
+ "text": "{Error} If there is no preview fallback bundle available."
333
+ },
334
+ {
335
+ "name": "since",
336
+ "text": "8.49.0"
337
+ }
338
+ ],
339
+ "docs": "Leave the active preview session and reload the saved live bundle.\n\nThis does not delete any saved previews. Use {@link deletePreview} to remove\na preview from local storage.",
340
+ "complexTypes": [],
341
+ "slug": "resetpreview"
342
+ },
343
+ {
344
+ "name": "deletePreview",
345
+ "signature": "(options: BundleId) => Promise<DeletePreviewResult>",
346
+ "parameters": [
347
+ {
348
+ "name": "options",
349
+ "docs": "A {@link BundleId} object containing the preview bundle ID.",
350
+ "type": "BundleId"
351
+ }
352
+ ],
353
+ "returns": "Promise<DeletePreviewResult>",
354
+ "tags": [
355
+ {
356
+ "name": "param",
357
+ "text": "options A {@link BundleId} object containing the preview bundle ID."
358
+ },
359
+ {
360
+ "name": "returns",
361
+ "text": "Whether the underlying bundle was deleted."
362
+ },
363
+ {
364
+ "name": "throws",
365
+ "text": "{Error} If preview sessions are disabled."
366
+ },
367
+ {
368
+ "name": "since",
369
+ "text": "8.49.0"
370
+ }
371
+ ],
372
+ "docs": "Delete a locally saved preview and its bundle when possible.\n\nActive previews cannot be deleted until you switch away from them or call\n{@link resetPreview}. If only the preview metadata can be removed, the\nmethod still resolves with `deleted: false`.",
373
+ "complexTypes": [
374
+ "DeletePreviewResult",
375
+ "BundleId"
376
+ ],
377
+ "slug": "deletepreview"
378
+ },
379
+ {
380
+ "name": "checkPreviewUpdate",
381
+ "signature": "(options: BundleId) => Promise<PreviewUpdateResult>",
382
+ "parameters": [
383
+ {
384
+ "name": "options",
385
+ "docs": "A {@link BundleId} object containing the preview bundle ID.",
386
+ "type": "BundleId"
387
+ }
388
+ ],
389
+ "returns": "Promise<PreviewUpdateResult>",
390
+ "tags": [
391
+ {
392
+ "name": "param",
393
+ "text": "options A {@link BundleId} object containing the preview bundle ID."
394
+ },
395
+ {
396
+ "name": "returns",
397
+ "text": "Update status for the preview."
398
+ },
399
+ {
400
+ "name": "throws",
401
+ "text": "{Error} If preview sessions are disabled or the preview has no payload URL."
402
+ },
403
+ {
404
+ "name": "since",
405
+ "text": "8.49.0"
406
+ }
407
+ ],
408
+ "docs": "Check whether a saved preview's payload URL points to a newer preview bundle.\n\nOnly previews started with a `payloadUrl` can be checked natively. Direct URL\npreviews can still be switched or deleted locally, but the updater does not\nknow where to check for newer versions.",
409
+ "complexTypes": [
410
+ "PreviewUpdateResult",
411
+ "BundleId"
412
+ ],
413
+ "slug": "checkpreviewupdate"
414
+ },
415
+ {
416
+ "name": "updatePreview",
417
+ "signature": "(options: BundleId) => Promise<PreviewUpdateResult>",
418
+ "parameters": [
419
+ {
420
+ "name": "options",
421
+ "docs": "A {@link BundleId} object containing the preview bundle ID.",
422
+ "type": "BundleId"
423
+ }
424
+ ],
425
+ "returns": "Promise<PreviewUpdateResult>",
426
+ "tags": [
427
+ {
428
+ "name": "param",
429
+ "text": "options A {@link BundleId} object containing the preview bundle ID."
430
+ },
431
+ {
432
+ "name": "returns",
433
+ "text": "The update result and saved preview metadata."
434
+ },
435
+ {
436
+ "name": "throws",
437
+ "text": "{Error} If preview sessions are disabled or the preview cannot be updated."
438
+ },
439
+ {
440
+ "name": "since",
441
+ "text": "8.49.0"
442
+ }
443
+ ],
444
+ "docs": "Download the newest bundle for a saved preview payload URL.\n\nIf the preview being updated is active, the new bundle is applied and the\nWebView reloads. Otherwise, the saved preview entry is moved to the newly\ndownloaded bundle and can be selected later with {@link setPreview}.",
445
+ "complexTypes": [
446
+ "PreviewUpdateResult",
447
+ "BundleId"
448
+ ],
449
+ "slug": "updatepreview"
450
+ },
229
451
  {
230
452
  "name": "delete",
231
453
  "signature": "(options: BundleId) => Promise<void>",
@@ -470,6 +692,23 @@
470
692
  "complexTypes": [],
471
693
  "slug": "canceldelay"
472
694
  },
695
+ {
696
+ "name": "triggerUpdateCheck",
697
+ "signature": "() => Promise<TriggerUpdateCheckResult>",
698
+ "parameters": [],
699
+ "returns": "Promise<TriggerUpdateCheckResult>",
700
+ "tags": [
701
+ {
702
+ "name": "returns",
703
+ "text": "Whether a native update check was queued."
704
+ }
705
+ ],
706
+ "docs": "Trigger the native auto-update check/download pipeline immediately.\n\nThis starts the same background update flow used when the app moves to the\nforeground with auto-update enabled. It is useful for native integrations\nsuch as a silent push notification asking the app to check for a Capgo\nbundle without reimplementing the update protocol in JavaScript.\n\nThe promise resolves after the native background work has been queued, not\nafter the update has been downloaded or installed. Listen to updater events\nsuch as `updateAvailable`, `downloadComplete`, `downloadFailed`, and\n`noNeedUpdate` for the final result.\n\nNative support is available on iOS and Android. On Web, this method returns\na result with `status: 'unavailable'`. Native platforms also return\n`unavailable` when the native auto-update system is disabled.",
707
+ "complexTypes": [
708
+ "TriggerUpdateCheckResult"
709
+ ],
710
+ "slug": "triggerupdatecheck"
711
+ },
473
712
  {
474
713
  "name": "getLatest",
475
714
  "signature": "(options?: GetLatestOptions | undefined) => Promise<LatestVersion>",
@@ -506,6 +745,78 @@
506
745
  ],
507
746
  "slug": "getlatest"
508
747
  },
748
+ {
749
+ "name": "getMissingBundleFiles",
750
+ "signature": "(options: GetMissingBundleFilesOptions) => Promise<GetMissingBundleFilesResult>",
751
+ "parameters": [
752
+ {
753
+ "name": "options",
754
+ "docs": "A {@link GetMissingBundleFilesOptions} object, or a {@link LatestVersion} response containing `manifest`.",
755
+ "type": "GetMissingBundleFilesOptions"
756
+ }
757
+ ],
758
+ "returns": "Promise<GetMissingBundleFilesResult>",
759
+ "tags": [
760
+ {
761
+ "name": "param",
762
+ "text": "options A {@link GetMissingBundleFilesOptions} object, or a {@link LatestVersion} response containing `manifest`."
763
+ },
764
+ {
765
+ "name": "returns",
766
+ "text": "The manifest entries that require network download."
767
+ },
768
+ {
769
+ "name": "throws",
770
+ "text": "{Error} If the manifest is missing or invalid."
771
+ },
772
+ {
773
+ "name": "since",
774
+ "text": "8.47.0"
775
+ }
776
+ ],
777
+ "docs": "Return the manifest entries that still need to be downloaded for a partial update.\n\nPass the result from {@link getLatest} directly when it includes a `manifest`.\nThe native plugin compares each manifest entry with the files already available\nin the builtin bundle and the local delta cache. Entries that can be reused are\nomitted from the returned `missing` list.\n\nFor encrypted manifests, pass the `sessionKey` returned by {@link getLatest} so\nencrypted file hashes can be checked against local files.\n\n```typescript\nconst latest = await CapacitorUpdater.getLatest();\nconst missing = await CapacitorUpdater.getMissingBundleFiles(latest);\n```",
778
+ "complexTypes": [
779
+ "GetMissingBundleFilesResult",
780
+ "GetMissingBundleFilesOptions"
781
+ ],
782
+ "slug": "getmissingbundlefiles"
783
+ },
784
+ {
785
+ "name": "getBundleDownloadSize",
786
+ "signature": "(options: GetBundleDownloadSizeOptions) => Promise<GetBundleDownloadSizeResult>",
787
+ "parameters": [
788
+ {
789
+ "name": "options",
790
+ "docs": "A {@link GetBundleDownloadSizeOptions} object containing manifest entries.",
791
+ "type": "GetBundleDownloadSizeOptions"
792
+ }
793
+ ],
794
+ "returns": "Promise<GetBundleDownloadSizeResult>",
795
+ "tags": [
796
+ {
797
+ "name": "param",
798
+ "text": "options A {@link GetBundleDownloadSizeOptions} object containing manifest entries."
799
+ },
800
+ {
801
+ "name": "returns",
802
+ "text": "Known byte totals and per-file size results."
803
+ },
804
+ {
805
+ "name": "throws",
806
+ "text": "{Error} If the manifest is missing or invalid."
807
+ },
808
+ {
809
+ "name": "since",
810
+ "text": "8.47.0"
811
+ }
812
+ ],
813
+ "docs": "Estimate the download size for manifest entries before downloading them.\n\nThis method sends the provided manifest entries to the Capgo update endpoint\nonce and reads the stored manifest `file_size` metadata. It does not perform\nper-file `HEAD` requests from the app.\n\nUse this after {@link getMissingBundleFiles} to estimate only the files this\ndevice still needs:\n\n```typescript\nconst latest = await CapacitorUpdater.getLatest();\nconst missing = await CapacitorUpdater.getMissingBundleFiles(latest);\nconst size = await CapacitorUpdater.getBundleDownloadSize({\n version: latest.version,\n manifest: missing.missing,\n});\n```",
814
+ "complexTypes": [
815
+ "GetBundleDownloadSizeResult",
816
+ "GetBundleDownloadSizeOptions"
817
+ ],
818
+ "slug": "getbundledownloadsize"
819
+ },
509
820
  {
510
821
  "name": "setChannel",
511
822
  "signature": "(options: SetChannelOptions) => Promise<ChannelRes>",
@@ -535,7 +846,7 @@
535
846
  "text": "4.7.0"
536
847
  }
537
848
  ],
538
- "docs": "Assign this device to a specific update channel at runtime.\n\nChannels allow you to distribute different bundle versions to different groups of users\n(e.g., \"production\", \"beta\", \"staging\"). This method switches the device to a new channel.\n\n**Requirements:**\n- The target channel must allow self-assignment (configured in your Capgo dashboard or backend)\n- The backend may accept or reject the request based on channel settings\n\n**When to use:**\n- After the app is ready and the user has interacted (e.g., opted into beta program)\n- To implement in-app channel switching (beta toggle, tester access, etc.)\n- For user-driven channel changes\n\n**When NOT to use:**\n- At app boot/initialization - use {@link PluginsConfig.CapacitorUpdater.defaultChannel} config instead\n- Before user interaction\n\n**Important: Listen for the `channelPrivate` event**\n\nWhen a user attempts to set a channel that doesn't allow device self-assignment, the method will\nthrow an error AND fire a {@link addListener}('channelPrivate') event. You should listen to this event\nto provide appropriate feedback to users:\n\n```typescript\nCapacitorUpdater.addListener('channelPrivate', (data) => {\n console.warn(`Cannot access channel \"${data.channel}\": ${data.message}`);\n // Show user-friendly message\n});\n```\n\nThis sends a request to the Capgo backend linking your device ID to the specified channel.",
849
+ "docs": "Assign this device to a specific update channel at runtime.\n\nChannels allow you to distribute different bundle versions to different groups of users\n(e.g., \"production\", \"beta\", \"staging\"). This method switches the device to a new channel.\n\n**Device Override UI:** `setChannel()` validates the channel with the backend, then stores the\nselected channel locally on the device. It does not create or update a backend Device Override,\nso the device will not appear as overridden in the Capgo dashboard. Only assignments created\nfrom the dashboard or the Public API are shown in the Device Override UI.\n\n**Requirements:**\n- The target channel must allow self-assignment (configured in your Capgo dashboard or backend)\n- The backend may accept or reject the request based on channel settings\n\n**When to use:**\n- After the app is ready and the user has interacted (e.g., opted into beta program)\n- To implement in-app channel switching (beta toggle, tester access, etc.)\n- For user-driven channel changes\n\n**When NOT to use:**\n- At app boot/initialization - use {@link PluginsConfig.CapacitorUpdater.defaultChannel} config instead\n- Before user interaction\n\n**Important: Listen for the `channelPrivate` event**\n\nWhen a user attempts to set a channel that doesn't allow device self-assignment, the method will\nthrow an error AND fire a {@link addListener}('channelPrivate') event. You should listen to this event\nto provide appropriate feedback to users:\n\n```typescript\nCapacitorUpdater.addListener('channelPrivate', (data) => {\n console.warn(`Cannot access channel \"${data.channel}\": ${data.message}`);\n // Show user-friendly message\n});\n```\n\nThis sends a request to the Capgo backend to validate the specified channel, then stores the\nchannel locally on the device.",
539
850
  "complexTypes": [
540
851
  "ChannelRes",
541
852
  "SetChannelOptions"
@@ -575,7 +886,7 @@
575
886
  "text": "4.7.0"
576
887
  }
577
888
  ],
578
- "docs": "Remove the device's channel assignment and return to the default channel.\n\nThis unlinks the device from any specifically assigned channel, causing it to fall back to:\n- The {@link PluginsConfig.CapacitorUpdater.defaultChannel} if configured, or\n- Your backend's default channel for this app\n\nUse this when:\n- Users opt out of beta/testing programs\n- You want to reset a device to standard update distribution\n- Testing channel switching behavior",
889
+ "docs": "Remove the plugin-managed local channel assignment and return to the default channel.\n\nThis clears only the channel stored locally by {@link setChannel}; it does not delete Dashboard or Public API Device Override records. After the local assignment is cleared, normal channel precedence applies:\n- An existing Dashboard or Public API Device Override, if one exists\n- The {@link PluginsConfig.CapacitorUpdater.defaultChannel} if configured, or\n- Your backend default channel for this app\n\nUse this when:\n- Users opt out of beta/testing programs\n- You want to reset a device to standard update distribution\n- Testing channel switching behavior",
579
890
  "complexTypes": [
580
891
  "UnsetChannelOptions"
581
892
  ],
@@ -600,7 +911,7 @@
600
911
  "text": "4.8.0"
601
912
  }
602
913
  ],
603
- "docs": "Get the current channel assigned to this device.\n\nReturns information about:\n- `channel`: The currently assigned channel name (if any)\n- `allowSet`: Whether the channel allows self-assignment\n- `status`: Operation status\n- `error`/`message`: Additional information (if applicable)\n\nUse this to:\n- Display current channel to users (e.g., \"You're on the Beta channel\")\n- Check if a device is on a specific channel before showing features\n- Verify channel assignment after calling {@link setChannel}",
914
+ "docs": "Get the current channel assigned to this device.\n\nReturns information about:\n- `channel`: The currently assigned channel name (if any)\n- `allowSet`: Whether the channel allows self-assignment\n- `status`: Operation status\n- `error`/`message`: Additional information (if applicable)\n\nUse this to:\n- Display current channel to users (e.g., \"You're on the Beta channel\")\n- Check if a device is on a specific channel before showing features\n- Verify channel assignment after calling {@link setChannel}\n\nOn native platforms, a successful response also refreshes the locally persisted\ndefault channel used by update checks.",
604
915
  "complexTypes": [
605
916
  "GetChannelRes"
606
917
  ],
@@ -702,7 +1013,7 @@
702
1013
  "text": "{Error} If the operation fails."
703
1014
  }
704
1015
  ],
705
- "docs": "Get the unique, privacy-friendly identifier for this device.\n\nThis ID is used to identify the device when communicating with update servers.\nIt's automatically generated and stored securely by the plugin.\n\n**Privacy & Security characteristics:**\n- Generated as a UUID (not based on hardware identifiers)\n- Stored securely in platform-specific secure storage\n- Android: Android Keystore (persists across app reinstalls on API 23+)\n- iOS: Keychain with `kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`\n- Not synced to cloud (iOS)\n- Follows Apple and Google privacy best practices\n- Users can clear it via system settings (Android) or keychain access (iOS)\n\n**Persistence:**\nThe device ID persists across app reinstalls to maintain consistent device identity\nfor update tracking and analytics.\n\nUse this to:\n- Debug update delivery issues (check what ID the server sees)\n- Implement device-specific features\n- Correlate server logs with specific devices",
1016
+ "docs": "Get the unique, privacy-friendly identifier for this device.\n\nThis ID is used to identify the device when communicating with update servers.\nIt's automatically generated and stored securely by the plugin.\n\n**Privacy & Security characteristics:**\n- Generated as a UUID (not based on hardware identifiers)\n- Stored securely in platform-specific secure storage\n- Android: mirrored into backup-restorable app preferences for reinstall restore\n- iOS: Keychain with `kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`\n- Not synced to cloud (iOS)\n- Follows Apple and Google privacy best practices\n- Users can clear it via system settings (Android) or keychain access (iOS)\n\n**Persistence:**\nThe device ID persists across app reinstalls to maintain consistent device identity\nfor update tracking and analytics when platform storage is preserved. On Android,\napps with custom backup rules must keep the plugin app preferences eligible for\nbackup/restore; disabling Android backup or clearing app data creates a new ID.\n\nUse this to:\n- Debug update delivery issues (check what ID the server sees)\n- Implement device-specific features\n- Correlate server logs with specific devices",
706
1017
  "complexTypes": [
707
1018
  "DeviceId"
708
1019
  ],
@@ -1311,7 +1622,7 @@
1311
1622
  "text": "7.5.0"
1312
1623
  }
1313
1624
  ],
1314
- "docs": "Enable or disable the shake gesture menu for debugging and testing.\n\nWhen enabled, users can shake their device to open a debug menu that shows:\n- Current bundle information\n- Available bundles\n- Options to switch bundles manually\n- Update status\n\nThis is useful during development and testing to:\n- Quickly test different bundle versions\n- Debug update flows\n- Switch between production and test bundles\n- Verify bundle installations\n\n**Important:** Disable this in production builds or only enable for internal testers.\n\nCan also be configured via {@link PluginsConfig.CapacitorUpdater.shakeMenu}.",
1625
+ "docs": "Enable or disable the native preview menu gesture.\n\nDuring preview sessions, users can use the configured native gesture to:\n- Reload the current preview\n- Leave the test app and return to the fallback bundle\n- Switch update channel, when {@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector} is also enabled\n\nOutside preview sessions, this preview menu is ignored. The channel selector can still be\nshown outside preview sessions when {@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector} is enabled.\n\n**Important:** Disable this in production builds or only enable for internal testers.\n\nThis can also be configured via {@link PluginsConfig.CapacitorUpdater.shakeMenu}.\nThe native gesture is configured via {@link PluginsConfig.CapacitorUpdater.shakeMenuGesture}.",
1315
1626
  "complexTypes": [
1316
1627
  "SetShakeMenuOptions"
1317
1628
  ],
@@ -1325,7 +1636,7 @@
1325
1636
  "tags": [
1326
1637
  {
1327
1638
  "name": "returns",
1328
- "text": "Object with `enabled: true` or `enabled: false`."
1639
+ "text": "Object with the current enabled state and gesture."
1329
1640
  },
1330
1641
  {
1331
1642
  "name": "throws",
@@ -1336,7 +1647,7 @@
1336
1647
  "text": "7.5.0"
1337
1648
  }
1338
1649
  ],
1339
- "docs": "Check if the shake gesture debug menu is currently enabled.\n\nReturns the current state of the shake menu feature that can be toggled via\n{@link setShakeMenu} or configured via {@link PluginsConfig.CapacitorUpdater.shakeMenu}.\n\nUse this to:\n- Check if debug features are enabled\n- Show/hide debug settings UI\n- Verify configuration during testing",
1650
+ "docs": "Check if the native preview menu gesture is currently enabled.\n\nReturns the current state of the shake menu feature that can be toggled via\n{@link setShakeMenu} or configured via {@link PluginsConfig.CapacitorUpdater.shakeMenu}.\n\nUse this to:\n- Check if debug features are enabled\n- Show/hide debug settings UI\n- Verify configuration during testing",
1340
1651
  "complexTypes": [
1341
1652
  "ShakeMenuEnabled"
1342
1653
  ],
@@ -1375,7 +1686,7 @@
1375
1686
  "text": "8.43.0"
1376
1687
  }
1377
1688
  ],
1378
- "docs": "Enable or disable the shake channel selector at runtime.\n\nWhen enabled AND shakeMenu is true, shaking the device shows a channel\nselector instead of the debug menu. This allows users to switch between\nupdate channels by shaking their device.\n\nAfter selecting a channel, the app automatically checks for updates\nand downloads if available.\n\nCan also be configured via {@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector}.",
1689
+ "docs": "Enable or disable the channel selector menu gesture at runtime.\n\nWhen enabled, the configured native gesture can show a channel selector, including outside preview sessions.\nIf {@link setShakeMenu} is also enabled while a preview session is active, the shake menu includes\nboth preview actions and channel switching.\n\nThis can also be configured via {@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector}.\nThe native gesture is configured via {@link PluginsConfig.CapacitorUpdater.shakeMenuGesture}.",
1379
1690
  "complexTypes": [
1380
1691
  "SetShakeChannelSelectorOptions"
1381
1692
  ],
@@ -1850,334 +2161,1070 @@
1850
2161
  ]
1851
2162
  },
1852
2163
  {
1853
- "name": "BundleListResult",
1854
- "slug": "bundlelistresult",
1855
- "docs": "",
1856
- "tags": [],
1857
- "methods": [],
1858
- "properties": [
1859
- {
1860
- "name": "bundles",
1861
- "tags": [],
1862
- "docs": "",
1863
- "complexTypes": [
1864
- "BundleInfo"
1865
- ],
1866
- "type": "BundleInfo[]"
1867
- }
1868
- ]
1869
- },
1870
- {
1871
- "name": "ListOptions",
1872
- "slug": "listoptions",
2164
+ "name": "StartPreviewSessionOptions",
2165
+ "slug": "startpreviewsessionoptions",
1873
2166
  "docs": "",
1874
2167
  "tags": [],
1875
2168
  "methods": [],
1876
2169
  "properties": [
1877
2170
  {
1878
- "name": "raw",
2171
+ "name": "appId",
1879
2172
  "tags": [
1880
2173
  {
1881
- "text": "6.14.0",
2174
+ "text": "8.47.0",
1882
2175
  "name": "since"
1883
2176
  },
1884
2177
  {
1885
- "text": "false",
2178
+ "text": "undefined",
1886
2179
  "name": "default"
1887
2180
  }
1888
2181
  ],
1889
- "docs": "Whether to return the raw bundle list or the manifest. If true, the list will attempt to read the internal database instead of files on disk.",
2182
+ "docs": "App id to use while the preview session is active.\nThe previous app id is restored when leaving the preview session.\nRequires {@link PluginsConfig.CapacitorUpdater.allowPreview} to be `true`.",
1890
2183
  "complexTypes": [],
1891
- "type": "boolean | undefined"
1892
- }
1893
- ]
1894
- },
1895
- {
1896
- "name": "ResetOptions",
1897
- "slug": "resetoptions",
1898
- "docs": "",
1899
- "tags": [],
1900
- "methods": [],
1901
- "properties": [
2184
+ "type": "string | undefined"
2185
+ },
1902
2186
  {
1903
- "name": "toLastSuccessful",
2187
+ "name": "payloadUrl",
1904
2188
  "tags": [
1905
2189
  {
1906
- "text": "false",
1907
- "name": "default"
1908
- }
2190
+ "text": "8.48.0",
2191
+ "name": "since"
2192
+ },
2193
+ {
2194
+ "text": "undefined",
2195
+ "name": "default"
2196
+ }
1909
2197
  ],
1910
- "docs": "Reset to the last successfully loaded bundle instead of the builtin one.",
2198
+ "docs": "HTTP(S) URL returning a preview download payload.\nWhen provided, the native shake reload action fetches this payload again\nbefore reloading so channel previews can move to the latest bundle.\nRequires {@link PluginsConfig.CapacitorUpdater.allowPreview} to be `true`.",
1911
2199
  "complexTypes": [],
1912
- "type": "boolean | undefined"
2200
+ "type": "string | undefined"
1913
2201
  },
1914
2202
  {
1915
- "name": "usePendingBundle",
2203
+ "name": "name",
1916
2204
  "tags": [
1917
2205
  {
1918
- "text": "false",
2206
+ "text": "8.49.0",
2207
+ "name": "since"
2208
+ },
2209
+ {
2210
+ "text": "undefined",
1919
2211
  "name": "default"
1920
2212
  }
1921
2213
  ],
1922
- "docs": "Apply the pending bundle set via {@link next} while resetting.\n\nWhen `true`, the plugin will switch to the pending bundle immediately and clear the pending flag.\nIf no pending bundle exists, the reset will fail.",
2214
+ "docs": "Human-readable preview name stored with the next preview bundle applied by\n{@link set}. Native preview menus and {@link listPreviews} can display it.",
1923
2215
  "complexTypes": [],
1924
- "type": "boolean | undefined"
2216
+ "type": "string | undefined"
2217
+ },
2218
+ {
2219
+ "name": "source",
2220
+ "tags": [
2221
+ {
2222
+ "text": "8.49.0",
2223
+ "name": "since"
2224
+ },
2225
+ {
2226
+ "text": "undefined",
2227
+ "name": "default"
2228
+ }
2229
+ ],
2230
+ "docs": "Optional source label for the preview, such as `channel`, `bundle`, `url`,\nor `payload`. This is stored as metadata only.",
2231
+ "complexTypes": [],
2232
+ "type": "string | undefined"
1925
2233
  }
1926
2234
  ]
1927
2235
  },
1928
2236
  {
1929
- "name": "CurrentBundleResult",
1930
- "slug": "currentbundleresult",
2237
+ "name": "PreviewListResult",
2238
+ "slug": "previewlistresult",
2239
+ "docs": "",
2240
+ "tags": [],
2241
+ "methods": [],
2242
+ "properties": [
2243
+ {
2244
+ "name": "previews",
2245
+ "tags": [
2246
+ {
2247
+ "text": "8.49.0",
2248
+ "name": "since"
2249
+ }
2250
+ ],
2251
+ "docs": "Locally available preview bundles.",
2252
+ "complexTypes": [
2253
+ "PreviewInfo"
2254
+ ],
2255
+ "type": "PreviewInfo[]"
2256
+ },
2257
+ {
2258
+ "name": "current",
2259
+ "tags": [
2260
+ {
2261
+ "text": "8.49.0",
2262
+ "name": "since"
2263
+ }
2264
+ ],
2265
+ "docs": "Current preview when a preview session is active.",
2266
+ "complexTypes": [
2267
+ "PreviewInfo"
2268
+ ],
2269
+ "type": "PreviewInfo"
2270
+ },
2271
+ {
2272
+ "name": "currentBundle",
2273
+ "tags": [
2274
+ {
2275
+ "text": "8.49.0",
2276
+ "name": "since"
2277
+ }
2278
+ ],
2279
+ "docs": "Bundle currently loaded by the WebView.",
2280
+ "complexTypes": [
2281
+ "BundleInfo"
2282
+ ],
2283
+ "type": "BundleInfo"
2284
+ },
2285
+ {
2286
+ "name": "liveBundle",
2287
+ "tags": [
2288
+ {
2289
+ "text": "8.49.0",
2290
+ "name": "since"
2291
+ }
2292
+ ],
2293
+ "docs": "Bundle that will be restored when leaving preview mode.",
2294
+ "complexTypes": [
2295
+ "BundleInfo"
2296
+ ],
2297
+ "type": "BundleInfo"
2298
+ }
2299
+ ]
2300
+ },
2301
+ {
2302
+ "name": "PreviewInfo",
2303
+ "slug": "previewinfo",
1931
2304
  "docs": "",
1932
2305
  "tags": [],
1933
2306
  "methods": [],
1934
2307
  "properties": [
2308
+ {
2309
+ "name": "id",
2310
+ "tags": [
2311
+ {
2312
+ "text": "8.49.0",
2313
+ "name": "since"
2314
+ }
2315
+ ],
2316
+ "docs": "Preview bundle id.",
2317
+ "complexTypes": [],
2318
+ "type": "string"
2319
+ },
1935
2320
  {
1936
2321
  "name": "bundle",
1937
- "tags": [],
1938
- "docs": "",
2322
+ "tags": [
2323
+ {
2324
+ "text": "8.49.0",
2325
+ "name": "since"
2326
+ }
2327
+ ],
2328
+ "docs": "Locally downloaded bundle backing this preview.",
1939
2329
  "complexTypes": [
1940
2330
  "BundleInfo"
1941
2331
  ],
1942
2332
  "type": "BundleInfo"
1943
2333
  },
1944
2334
  {
1945
- "name": "native",
1946
- "tags": [],
1947
- "docs": "",
2335
+ "name": "name",
2336
+ "tags": [
2337
+ {
2338
+ "text": "8.49.0",
2339
+ "name": "since"
2340
+ }
2341
+ ],
2342
+ "docs": "Human-readable name supplied when the preview was started.",
2343
+ "complexTypes": [],
2344
+ "type": "string | undefined"
2345
+ },
2346
+ {
2347
+ "name": "source",
2348
+ "tags": [
2349
+ {
2350
+ "text": "8.49.0",
2351
+ "name": "since"
2352
+ }
2353
+ ],
2354
+ "docs": "Metadata source label supplied when the preview was started.",
2355
+ "complexTypes": [],
2356
+ "type": "string | undefined"
2357
+ },
2358
+ {
2359
+ "name": "appId",
2360
+ "tags": [
2361
+ {
2362
+ "text": "8.49.0",
2363
+ "name": "since"
2364
+ }
2365
+ ],
2366
+ "docs": "Preview app id, when the session uses an app id override.",
2367
+ "complexTypes": [],
2368
+ "type": "string | undefined"
2369
+ },
2370
+ {
2371
+ "name": "payloadUrl",
2372
+ "tags": [
2373
+ {
2374
+ "text": "8.49.0",
2375
+ "name": "since"
2376
+ }
2377
+ ],
2378
+ "docs": "Payload URL used to refresh this preview.",
2379
+ "complexTypes": [],
2380
+ "type": "string | undefined"
2381
+ },
2382
+ {
2383
+ "name": "createdAt",
2384
+ "tags": [
2385
+ {
2386
+ "text": "8.49.0",
2387
+ "name": "since"
2388
+ }
2389
+ ],
2390
+ "docs": "ISO timestamp for when this preview was first saved.",
2391
+ "complexTypes": [],
2392
+ "type": "string"
2393
+ },
2394
+ {
2395
+ "name": "updatedAt",
2396
+ "tags": [
2397
+ {
2398
+ "text": "8.49.0",
2399
+ "name": "since"
2400
+ }
2401
+ ],
2402
+ "docs": "ISO timestamp for the last metadata or bundle update.",
2403
+ "complexTypes": [],
2404
+ "type": "string"
2405
+ },
2406
+ {
2407
+ "name": "lastUsedAt",
2408
+ "tags": [
2409
+ {
2410
+ "text": "8.49.0",
2411
+ "name": "since"
2412
+ }
2413
+ ],
2414
+ "docs": "ISO timestamp for the last time this preview was activated.",
1948
2415
  "complexTypes": [],
1949
2416
  "type": "string"
2417
+ },
2418
+ {
2419
+ "name": "isActive",
2420
+ "tags": [
2421
+ {
2422
+ "text": "8.49.0",
2423
+ "name": "since"
2424
+ }
2425
+ ],
2426
+ "docs": "Whether this preview is the currently active bundle in a preview session.",
2427
+ "complexTypes": [],
2428
+ "type": "boolean"
1950
2429
  }
1951
2430
  ]
1952
2431
  },
1953
2432
  {
1954
- "name": "MultiDelayConditions",
1955
- "slug": "multidelayconditions",
2433
+ "name": "DeletePreviewResult",
2434
+ "slug": "deletepreviewresult",
2435
+ "docs": "",
2436
+ "tags": [],
2437
+ "methods": [],
2438
+ "properties": [
2439
+ {
2440
+ "name": "removed",
2441
+ "tags": [
2442
+ {
2443
+ "text": "8.49.0",
2444
+ "name": "since"
2445
+ }
2446
+ ],
2447
+ "docs": "Whether preview metadata was removed.",
2448
+ "complexTypes": [],
2449
+ "type": "boolean"
2450
+ },
2451
+ {
2452
+ "name": "deleted",
2453
+ "tags": [
2454
+ {
2455
+ "text": "8.49.0",
2456
+ "name": "since"
2457
+ }
2458
+ ],
2459
+ "docs": "Whether the underlying local bundle was deleted.",
2460
+ "complexTypes": [],
2461
+ "type": "boolean"
2462
+ }
2463
+ ]
2464
+ },
2465
+ {
2466
+ "name": "PreviewUpdateResult",
2467
+ "slug": "previewupdateresult",
2468
+ "docs": "",
2469
+ "tags": [],
2470
+ "methods": [],
2471
+ "properties": [
2472
+ {
2473
+ "name": "preview",
2474
+ "tags": [
2475
+ {
2476
+ "text": "8.49.0",
2477
+ "name": "since"
2478
+ }
2479
+ ],
2480
+ "docs": "Saved preview metadata after the check or update.",
2481
+ "complexTypes": [
2482
+ "PreviewInfo"
2483
+ ],
2484
+ "type": "PreviewInfo"
2485
+ },
2486
+ {
2487
+ "name": "latestVersion",
2488
+ "tags": [
2489
+ {
2490
+ "text": "8.49.0",
2491
+ "name": "since"
2492
+ }
2493
+ ],
2494
+ "docs": "Latest version returned by the preview payload endpoint.",
2495
+ "complexTypes": [],
2496
+ "type": "string | undefined"
2497
+ },
2498
+ {
2499
+ "name": "upToDate",
2500
+ "tags": [
2501
+ {
2502
+ "text": "8.49.0",
2503
+ "name": "since"
2504
+ }
2505
+ ],
2506
+ "docs": "Whether the saved preview already matches the latest payload version.",
2507
+ "complexTypes": [],
2508
+ "type": "boolean"
2509
+ },
2510
+ {
2511
+ "name": "updated",
2512
+ "tags": [
2513
+ {
2514
+ "text": "8.49.0",
2515
+ "name": "since"
2516
+ }
2517
+ ],
2518
+ "docs": "Whether a newer bundle was downloaded and saved.",
2519
+ "complexTypes": [],
2520
+ "type": "boolean"
2521
+ },
2522
+ {
2523
+ "name": "bundle",
2524
+ "tags": [
2525
+ {
2526
+ "text": "8.49.0",
2527
+ "name": "since"
2528
+ }
2529
+ ],
2530
+ "docs": "New bundle when {@link updatePreview} downloaded one.",
2531
+ "complexTypes": [
2532
+ "BundleInfo"
2533
+ ],
2534
+ "type": "BundleInfo"
2535
+ }
2536
+ ]
2537
+ },
2538
+ {
2539
+ "name": "BundleListResult",
2540
+ "slug": "bundlelistresult",
1956
2541
  "docs": "",
1957
2542
  "tags": [],
1958
2543
  "methods": [],
1959
2544
  "properties": [
1960
2545
  {
1961
- "name": "delayConditions",
1962
- "tags": [],
1963
- "docs": "",
1964
- "complexTypes": [
1965
- "DelayCondition"
2546
+ "name": "bundles",
2547
+ "tags": [],
2548
+ "docs": "",
2549
+ "complexTypes": [
2550
+ "BundleInfo"
2551
+ ],
2552
+ "type": "BundleInfo[]"
2553
+ }
2554
+ ]
2555
+ },
2556
+ {
2557
+ "name": "ListOptions",
2558
+ "slug": "listoptions",
2559
+ "docs": "",
2560
+ "tags": [],
2561
+ "methods": [],
2562
+ "properties": [
2563
+ {
2564
+ "name": "raw",
2565
+ "tags": [
2566
+ {
2567
+ "text": "6.14.0",
2568
+ "name": "since"
2569
+ },
2570
+ {
2571
+ "text": "false",
2572
+ "name": "default"
2573
+ }
2574
+ ],
2575
+ "docs": "Whether to return the raw bundle list or the manifest. If true, the list will attempt to read the internal database instead of files on disk.",
2576
+ "complexTypes": [],
2577
+ "type": "boolean | undefined"
2578
+ }
2579
+ ]
2580
+ },
2581
+ {
2582
+ "name": "ResetOptions",
2583
+ "slug": "resetoptions",
2584
+ "docs": "",
2585
+ "tags": [],
2586
+ "methods": [],
2587
+ "properties": [
2588
+ {
2589
+ "name": "toLastSuccessful",
2590
+ "tags": [
2591
+ {
2592
+ "text": "false",
2593
+ "name": "default"
2594
+ }
2595
+ ],
2596
+ "docs": "Reset to the last successfully loaded bundle instead of the builtin one.",
2597
+ "complexTypes": [],
2598
+ "type": "boolean | undefined"
2599
+ },
2600
+ {
2601
+ "name": "usePendingBundle",
2602
+ "tags": [
2603
+ {
2604
+ "text": "false",
2605
+ "name": "default"
2606
+ }
2607
+ ],
2608
+ "docs": "Apply the pending bundle set via {@link next} while resetting.\n\nWhen `true`, the plugin will switch to the pending bundle immediately and clear the pending flag.\nIf no pending bundle exists, the reset will fail.",
2609
+ "complexTypes": [],
2610
+ "type": "boolean | undefined"
2611
+ }
2612
+ ]
2613
+ },
2614
+ {
2615
+ "name": "CurrentBundleResult",
2616
+ "slug": "currentbundleresult",
2617
+ "docs": "",
2618
+ "tags": [],
2619
+ "methods": [],
2620
+ "properties": [
2621
+ {
2622
+ "name": "bundle",
2623
+ "tags": [],
2624
+ "docs": "",
2625
+ "complexTypes": [
2626
+ "BundleInfo"
2627
+ ],
2628
+ "type": "BundleInfo"
2629
+ },
2630
+ {
2631
+ "name": "native",
2632
+ "tags": [],
2633
+ "docs": "",
2634
+ "complexTypes": [],
2635
+ "type": "string"
2636
+ }
2637
+ ]
2638
+ },
2639
+ {
2640
+ "name": "MultiDelayConditions",
2641
+ "slug": "multidelayconditions",
2642
+ "docs": "",
2643
+ "tags": [],
2644
+ "methods": [],
2645
+ "properties": [
2646
+ {
2647
+ "name": "delayConditions",
2648
+ "tags": [],
2649
+ "docs": "",
2650
+ "complexTypes": [
2651
+ "DelayCondition"
2652
+ ],
2653
+ "type": "DelayCondition[]"
2654
+ }
2655
+ ]
2656
+ },
2657
+ {
2658
+ "name": "DelayCondition",
2659
+ "slug": "delaycondition",
2660
+ "docs": "",
2661
+ "tags": [],
2662
+ "methods": [],
2663
+ "properties": [
2664
+ {
2665
+ "name": "kind",
2666
+ "tags": [
2667
+ {
2668
+ "text": "value is useless for",
2669
+ "name": "param"
2670
+ },
2671
+ {
2672
+ "text": "kind \"kill\", optional for \"background\" (default value: \"0\") and required for \"nativeVersion\" and \"date\"",
2673
+ "name": "param"
2674
+ }
2675
+ ],
2676
+ "docs": "Set up delay conditions in setMultiDelay",
2677
+ "complexTypes": [
2678
+ "DelayUntilNext"
2679
+ ],
2680
+ "type": "DelayUntilNext"
2681
+ },
2682
+ {
2683
+ "name": "value",
2684
+ "tags": [],
2685
+ "docs": "",
2686
+ "complexTypes": [],
2687
+ "type": "string | undefined"
2688
+ }
2689
+ ]
2690
+ },
2691
+ {
2692
+ "name": "TriggerUpdateCheckResult",
2693
+ "slug": "triggerupdatecheckresult",
2694
+ "docs": "Result returned after requesting an immediate native auto-update check.",
2695
+ "tags": [
2696
+ {
2697
+ "text": "status - Native trigger state: `queued` when a check was queued,\n`already_running` when the native update pipeline is already active, or\n`unavailable` on Web or when native auto-update is disabled.",
2698
+ "name": "property"
2699
+ },
2700
+ {
2701
+ "text": "queued - Whether a new native update check was queued. This is\n`true` only when `status` is `queued`; otherwise it is `false`.",
2702
+ "name": "property"
2703
+ }
2704
+ ],
2705
+ "methods": [],
2706
+ "properties": [
2707
+ {
2708
+ "name": "status",
2709
+ "tags": [],
2710
+ "docs": "Native trigger state: `queued` when a check was queued, `already_running`\nwhen the native update pipeline is already active, or `unavailable` on Web\nor when native auto-update is disabled.",
2711
+ "complexTypes": [],
2712
+ "type": "'queued' | 'already_running' | 'unavailable'"
2713
+ },
2714
+ {
2715
+ "name": "queued",
2716
+ "tags": [],
2717
+ "docs": "Whether a new native update check was queued. This is `true` only when\n`status` is `queued`; otherwise it is `false`.",
2718
+ "complexTypes": [],
2719
+ "type": "boolean"
2720
+ }
2721
+ ]
2722
+ },
2723
+ {
2724
+ "name": "LatestVersion",
2725
+ "slug": "latestversion",
2726
+ "docs": "",
2727
+ "tags": [],
2728
+ "methods": [],
2729
+ "properties": [
2730
+ {
2731
+ "name": "version",
2732
+ "tags": [
2733
+ {
2734
+ "text": "4.0.0",
2735
+ "name": "since"
2736
+ }
2737
+ ],
2738
+ "docs": "Result of getLatest method",
2739
+ "complexTypes": [],
2740
+ "type": "string"
2741
+ },
2742
+ {
2743
+ "name": "checksum",
2744
+ "tags": [
2745
+ {
2746
+ "text": "6",
2747
+ "name": "since"
2748
+ }
2749
+ ],
2750
+ "docs": "",
2751
+ "complexTypes": [],
2752
+ "type": "string | undefined"
2753
+ },
2754
+ {
2755
+ "name": "breaking",
2756
+ "tags": [
2757
+ {
2758
+ "text": "7.22.0",
2759
+ "name": "since"
2760
+ }
2761
+ ],
2762
+ "docs": "Indicates whether the update was flagged as breaking by the backend.",
2763
+ "complexTypes": [],
2764
+ "type": "boolean | undefined"
2765
+ },
2766
+ {
2767
+ "name": "major",
2768
+ "tags": [
2769
+ {
2770
+ "text": "Use {@link LatestVersion.breaking} instead.",
2771
+ "name": "deprecated"
2772
+ }
2773
+ ],
2774
+ "docs": "",
2775
+ "complexTypes": [],
2776
+ "type": "boolean | undefined"
2777
+ },
2778
+ {
2779
+ "name": "message",
2780
+ "tags": [],
2781
+ "docs": "Optional message from the server.\nWhen no new version is available, this will be \"No new version available\".",
2782
+ "complexTypes": [],
2783
+ "type": "string | undefined"
2784
+ },
2785
+ {
2786
+ "name": "sessionKey",
2787
+ "tags": [],
2788
+ "docs": "",
2789
+ "complexTypes": [],
2790
+ "type": "string | undefined"
2791
+ },
2792
+ {
2793
+ "name": "error",
2794
+ "tags": [],
2795
+ "docs": "Error code from the server, if any. Use `kind` for classification instead of parsing this value.",
2796
+ "complexTypes": [],
2797
+ "type": "string | undefined"
2798
+ },
2799
+ {
2800
+ "name": "kind",
2801
+ "tags": [
2802
+ {
2803
+ "text": "8.45.11",
2804
+ "name": "since"
2805
+ }
2806
+ ],
2807
+ "docs": "Classification for this response, provided by the backend.",
2808
+ "complexTypes": [
2809
+ "UpdateResponseKind"
2810
+ ],
2811
+ "type": "UpdateResponseKind"
2812
+ },
2813
+ {
2814
+ "name": "statusCode",
2815
+ "tags": [
2816
+ {
2817
+ "text": "8.45.11",
2818
+ "name": "since"
2819
+ }
2820
+ ],
2821
+ "docs": "HTTP status code returned by the update server for classified update-check responses.",
2822
+ "complexTypes": [],
2823
+ "type": "number | undefined"
2824
+ },
2825
+ {
2826
+ "name": "old",
2827
+ "tags": [],
2828
+ "docs": "The previous/current version name (provided for reference).",
2829
+ "complexTypes": [],
2830
+ "type": "string | undefined"
2831
+ },
2832
+ {
2833
+ "name": "url",
2834
+ "tags": [],
2835
+ "docs": "Download URL for the bundle (when a new version is available).",
2836
+ "complexTypes": [],
2837
+ "type": "string | undefined"
2838
+ },
2839
+ {
2840
+ "name": "manifest",
2841
+ "tags": [
2842
+ {
2843
+ "text": "6.1",
2844
+ "name": "since"
2845
+ }
2846
+ ],
2847
+ "docs": "File list for delta updates (when using multi-file downloads).",
2848
+ "complexTypes": [
2849
+ "ManifestEntry"
2850
+ ],
2851
+ "type": "ManifestEntry[] | undefined"
2852
+ },
2853
+ {
2854
+ "name": "missing",
2855
+ "tags": [
2856
+ {
2857
+ "text": "8.47.0",
2858
+ "name": "since"
2859
+ }
2860
+ ],
2861
+ "docs": "Missing manifest entries for this device when {@link GetLatestOptions.includeBundleSize}\nis enabled.",
2862
+ "complexTypes": [
2863
+ "GetMissingBundleFilesResult"
2864
+ ],
2865
+ "type": "GetMissingBundleFilesResult"
2866
+ },
2867
+ {
2868
+ "name": "downloadSize",
2869
+ "tags": [
2870
+ {
2871
+ "text": "8.47.0",
2872
+ "name": "since"
2873
+ }
2874
+ ],
2875
+ "docs": "Estimated download size for missing manifest entries when\n{@link GetLatestOptions.includeBundleSize} is enabled.",
2876
+ "complexTypes": [
2877
+ "GetBundleDownloadSizeResult"
2878
+ ],
2879
+ "type": "GetBundleDownloadSizeResult"
2880
+ },
2881
+ {
2882
+ "name": "link",
2883
+ "tags": [
2884
+ {
2885
+ "text": "7.35.0",
2886
+ "name": "since"
2887
+ }
2888
+ ],
2889
+ "docs": "Optional link associated with this bundle version (e.g., release notes URL, changelog, GitHub release).",
2890
+ "complexTypes": [],
2891
+ "type": "string | undefined"
2892
+ },
2893
+ {
2894
+ "name": "comment",
2895
+ "tags": [
2896
+ {
2897
+ "text": "7.35.0",
2898
+ "name": "since"
2899
+ }
2900
+ ],
2901
+ "docs": "Optional comment or description for this bundle version.",
2902
+ "complexTypes": [],
2903
+ "type": "string | undefined"
2904
+ }
2905
+ ]
2906
+ },
2907
+ {
2908
+ "name": "GetMissingBundleFilesResult",
2909
+ "slug": "getmissingbundlefilesresult",
2910
+ "docs": "",
2911
+ "tags": [],
2912
+ "methods": [],
2913
+ "properties": [
2914
+ {
2915
+ "name": "missing",
2916
+ "tags": [
2917
+ {
2918
+ "text": "8.47.0",
2919
+ "name": "since"
2920
+ }
2921
+ ],
2922
+ "docs": "Entries that are not available locally and need to be downloaded.",
2923
+ "complexTypes": [
2924
+ "ManifestEntry"
2925
+ ],
2926
+ "type": "ManifestEntry[]"
2927
+ },
2928
+ {
2929
+ "name": "total",
2930
+ "tags": [
2931
+ {
2932
+ "text": "8.47.0",
2933
+ "name": "since"
2934
+ }
2935
+ ],
2936
+ "docs": "Total entries in the provided manifest.",
2937
+ "complexTypes": [],
2938
+ "type": "number"
2939
+ },
2940
+ {
2941
+ "name": "missingCount",
2942
+ "tags": [
2943
+ {
2944
+ "text": "8.47.0",
2945
+ "name": "since"
2946
+ }
2947
+ ],
2948
+ "docs": "Number of entries that need to be downloaded.",
2949
+ "complexTypes": [],
2950
+ "type": "number"
2951
+ },
2952
+ {
2953
+ "name": "reusableCount",
2954
+ "tags": [
2955
+ {
2956
+ "text": "8.47.0",
2957
+ "name": "since"
2958
+ }
1966
2959
  ],
1967
- "type": "DelayCondition[]"
2960
+ "docs": "Number of entries that can be reused from builtin files or local cache.",
2961
+ "complexTypes": [],
2962
+ "type": "number"
1968
2963
  }
1969
2964
  ]
1970
2965
  },
1971
2966
  {
1972
- "name": "DelayCondition",
1973
- "slug": "delaycondition",
2967
+ "name": "GetBundleDownloadSizeResult",
2968
+ "slug": "getbundledownloadsizeresult",
1974
2969
  "docs": "",
1975
2970
  "tags": [],
1976
2971
  "methods": [],
1977
2972
  "properties": [
1978
2973
  {
1979
- "name": "kind",
2974
+ "name": "totalSize",
1980
2975
  "tags": [
1981
2976
  {
1982
- "text": "value is useless for",
1983
- "name": "param"
1984
- },
1985
- {
1986
- "text": "kind \"kill\", optional for \"background\" (default value: \"0\") and required for \"nativeVersion\" and \"date\"",
1987
- "name": "param"
2977
+ "text": "8.47.0",
2978
+ "name": "since"
1988
2979
  }
1989
2980
  ],
1990
- "docs": "Set up delay conditions in setMultiDelay",
1991
- "complexTypes": [
1992
- "DelayUntilNext"
2981
+ "docs": "Sum of all known file sizes in bytes.",
2982
+ "complexTypes": [],
2983
+ "type": "number"
2984
+ },
2985
+ {
2986
+ "name": "knownFiles",
2987
+ "tags": [
2988
+ {
2989
+ "text": "8.47.0",
2990
+ "name": "since"
2991
+ }
1993
2992
  ],
1994
- "type": "DelayUntilNext"
2993
+ "docs": "Number of files with a known size.",
2994
+ "complexTypes": [],
2995
+ "type": "number"
1995
2996
  },
1996
2997
  {
1997
- "name": "value",
1998
- "tags": [],
1999
- "docs": "",
2998
+ "name": "unknownFiles",
2999
+ "tags": [
3000
+ {
3001
+ "text": "8.47.0",
3002
+ "name": "since"
3003
+ }
3004
+ ],
3005
+ "docs": "Number of files whose size could not be determined.",
2000
3006
  "complexTypes": [],
2001
- "type": "string | undefined"
3007
+ "type": "number"
3008
+ },
3009
+ {
3010
+ "name": "files",
3011
+ "tags": [
3012
+ {
3013
+ "text": "8.47.0",
3014
+ "name": "since"
3015
+ }
3016
+ ],
3017
+ "docs": "Per-file size results.",
3018
+ "complexTypes": [
3019
+ "BundleFileSize"
3020
+ ],
3021
+ "type": "BundleFileSize[]"
2002
3022
  }
2003
3023
  ]
2004
3024
  },
2005
3025
  {
2006
- "name": "LatestVersion",
2007
- "slug": "latestversion",
3026
+ "name": "BundleFileSize",
3027
+ "slug": "bundlefilesize",
2008
3028
  "docs": "",
2009
3029
  "tags": [],
2010
3030
  "methods": [],
2011
3031
  "properties": [
2012
3032
  {
2013
- "name": "version",
3033
+ "name": "file_name",
2014
3034
  "tags": [
2015
3035
  {
2016
- "text": "4.0.0",
3036
+ "text": "8.47.0",
2017
3037
  "name": "since"
2018
3038
  }
2019
3039
  ],
2020
- "docs": "Result of getLatest method",
3040
+ "docs": "File name from the manifest entry.",
2021
3041
  "complexTypes": [],
2022
- "type": "string"
3042
+ "type": "string | null"
2023
3043
  },
2024
3044
  {
2025
- "name": "checksum",
3045
+ "name": "file_hash",
2026
3046
  "tags": [
2027
3047
  {
2028
- "text": "6",
3048
+ "text": "8.47.0",
2029
3049
  "name": "since"
2030
3050
  }
2031
3051
  ],
2032
- "docs": "",
3052
+ "docs": "File hash from the manifest entry.",
2033
3053
  "complexTypes": [],
2034
- "type": "string | undefined"
3054
+ "type": "string | null"
2035
3055
  },
2036
3056
  {
2037
- "name": "breaking",
3057
+ "name": "download_url",
2038
3058
  "tags": [
2039
3059
  {
2040
- "text": "7.22.0",
3060
+ "text": "8.47.0",
2041
3061
  "name": "since"
2042
3062
  }
2043
3063
  ],
2044
- "docs": "Indicates whether the update was flagged as breaking by the backend.",
3064
+ "docs": "Download URL from the manifest entry.",
2045
3065
  "complexTypes": [],
2046
- "type": "boolean | undefined"
3066
+ "type": "string | null"
2047
3067
  },
2048
3068
  {
2049
- "name": "major",
3069
+ "name": "size",
2050
3070
  "tags": [
2051
3071
  {
2052
- "text": "Use {@link LatestVersion.breaking} instead.",
2053
- "name": "deprecated"
3072
+ "text": "8.47.0",
3073
+ "name": "since"
2054
3074
  }
2055
3075
  ],
2056
- "docs": "",
2057
- "complexTypes": [],
2058
- "type": "boolean | undefined"
2059
- },
2060
- {
2061
- "name": "message",
2062
- "tags": [],
2063
- "docs": "Optional message from the server.\nWhen no new version is available, this will be \"No new version available\".",
2064
- "complexTypes": [],
2065
- "type": "string | undefined"
2066
- },
2067
- {
2068
- "name": "sessionKey",
2069
- "tags": [],
2070
- "docs": "",
3076
+ "docs": "Estimated bytes to download when the server exposes a size.",
2071
3077
  "complexTypes": [],
2072
- "type": "string | undefined"
3078
+ "type": "number | undefined"
2073
3079
  },
2074
3080
  {
2075
3081
  "name": "error",
2076
- "tags": [],
2077
- "docs": "Error code from the server, if any. Use `kind` for classification instead of parsing this value.",
3082
+ "tags": [
3083
+ {
3084
+ "text": "8.47.0",
3085
+ "name": "since"
3086
+ }
3087
+ ],
3088
+ "docs": "Error for this entry when the size could not be determined.",
2078
3089
  "complexTypes": [],
2079
3090
  "type": "string | undefined"
2080
- },
3091
+ }
3092
+ ]
3093
+ },
3094
+ {
3095
+ "name": "GetLatestOptions",
3096
+ "slug": "getlatestoptions",
3097
+ "docs": "",
3098
+ "tags": [],
3099
+ "methods": [],
3100
+ "properties": [
2081
3101
  {
2082
- "name": "kind",
3102
+ "name": "channel",
2083
3103
  "tags": [
2084
3104
  {
2085
- "text": "8.45.11",
3105
+ "text": "6.8.0",
2086
3106
  "name": "since"
3107
+ },
3108
+ {
3109
+ "text": "undefined",
3110
+ "name": "default"
2087
3111
  }
2088
3112
  ],
2089
- "docs": "Classification for this response, provided by the backend.",
2090
- "complexTypes": [
2091
- "UpdateResponseKind"
2092
- ],
2093
- "type": "UpdateResponseKind"
3113
+ "docs": "The channel to get the latest version for\nThe channel must allow 'self_assign' for this to work",
3114
+ "complexTypes": [],
3115
+ "type": "string | undefined"
2094
3116
  },
2095
3117
  {
2096
- "name": "statusCode",
3118
+ "name": "appId",
2097
3119
  "tags": [
2098
3120
  {
2099
- "text": "8.45.11",
3121
+ "text": "8.47.0",
2100
3122
  "name": "since"
3123
+ },
3124
+ {
3125
+ "text": "undefined",
3126
+ "name": "default"
2101
3127
  }
2102
3128
  ],
2103
- "docs": "HTTP status code returned by the update server for classified update-check responses.",
2104
- "complexTypes": [],
2105
- "type": "number | undefined"
2106
- },
2107
- {
2108
- "name": "old",
2109
- "tags": [],
2110
- "docs": "The previous/current version name (provided for reference).",
3129
+ "docs": "Temporarily use another app id for this update check while using a trusted preview container.\nThis only changes the app id sent by this request; it does not persist a preview session.\nRequires {@link PluginsConfig.CapacitorUpdater.allowPreview} to be `true`.",
2111
3130
  "complexTypes": [],
2112
3131
  "type": "string | undefined"
2113
3132
  },
2114
3133
  {
2115
- "name": "url",
2116
- "tags": [],
2117
- "docs": "Download URL for the bundle (when a new version is available).",
3134
+ "name": "includeBundleSize",
3135
+ "tags": [
3136
+ {
3137
+ "text": "8.47.0",
3138
+ "name": "since"
3139
+ },
3140
+ {
3141
+ "text": "false",
3142
+ "name": "default"
3143
+ }
3144
+ ],
3145
+ "docs": "When true, the native plugin computes which manifest files are missing on\nthis device and asks the Capgo update endpoint for their stored sizes before\nresolving {@link getLatest}.\n\nThis adds one backend request only when the update response contains a\nmanifest. It does not perform per-file network checks.",
2118
3146
  "complexTypes": [],
2119
- "type": "string | undefined"
2120
- },
3147
+ "type": "boolean | undefined"
3148
+ }
3149
+ ]
3150
+ },
3151
+ {
3152
+ "name": "GetMissingBundleFilesOptions",
3153
+ "slug": "getmissingbundlefilesoptions",
3154
+ "docs": "",
3155
+ "tags": [],
3156
+ "methods": [],
3157
+ "properties": [
2121
3158
  {
2122
3159
  "name": "manifest",
2123
3160
  "tags": [
2124
3161
  {
2125
- "text": "6.1",
3162
+ "text": "8.47.0",
2126
3163
  "name": "since"
2127
3164
  }
2128
3165
  ],
2129
- "docs": "File list for delta updates (when using multi-file downloads).",
3166
+ "docs": "Manifest returned by {@link getLatest}. Passing the full {@link LatestVersion}\nresponse is supported because it contains this field.",
2130
3167
  "complexTypes": [
2131
3168
  "ManifestEntry"
2132
3169
  ],
2133
3170
  "type": "ManifestEntry[] | undefined"
2134
3171
  },
2135
3172
  {
2136
- "name": "link",
3173
+ "name": "version",
2137
3174
  "tags": [
2138
3175
  {
2139
- "text": "7.35.0",
3176
+ "text": "8.47.0",
2140
3177
  "name": "since"
2141
3178
  }
2142
3179
  ],
2143
- "docs": "Optional link associated with this bundle version (e.g., release notes URL, changelog, GitHub release).",
3180
+ "docs": "Target bundle version. Passing the full {@link LatestVersion} response is\nsupported because it contains this field.",
2144
3181
  "complexTypes": [],
2145
3182
  "type": "string | undefined"
2146
3183
  },
2147
3184
  {
2148
- "name": "comment",
3185
+ "name": "sessionKey",
2149
3186
  "tags": [
2150
3187
  {
2151
- "text": "7.35.0",
3188
+ "text": "8.47.0",
2152
3189
  "name": "since"
2153
3190
  }
2154
3191
  ],
2155
- "docs": "Optional comment or description for this bundle version.",
3192
+ "docs": "Session key returned by {@link getLatest}, required only when file hashes are encrypted.",
2156
3193
  "complexTypes": [],
2157
3194
  "type": "string | undefined"
2158
3195
  }
2159
3196
  ]
2160
3197
  },
2161
3198
  {
2162
- "name": "GetLatestOptions",
2163
- "slug": "getlatestoptions",
3199
+ "name": "GetBundleDownloadSizeOptions",
3200
+ "slug": "getbundledownloadsizeoptions",
2164
3201
  "docs": "",
2165
3202
  "tags": [],
2166
3203
  "methods": [],
2167
3204
  "properties": [
2168
3205
  {
2169
- "name": "channel",
3206
+ "name": "manifest",
2170
3207
  "tags": [
2171
3208
  {
2172
- "text": "6.8.0",
3209
+ "text": "8.47.0",
2173
3210
  "name": "since"
2174
- },
3211
+ }
3212
+ ],
3213
+ "docs": "Manifest entries to estimate. Pass `missing.missing` from {@link getMissingBundleFiles}\nto estimate only the bytes this device still needs to download.",
3214
+ "complexTypes": [
3215
+ "ManifestEntry"
3216
+ ],
3217
+ "type": "ManifestEntry[] | undefined"
3218
+ },
3219
+ {
3220
+ "name": "version",
3221
+ "tags": [
2175
3222
  {
2176
- "text": "undefined",
2177
- "name": "default"
3223
+ "text": "8.47.0",
3224
+ "name": "since"
2178
3225
  }
2179
3226
  ],
2180
- "docs": "The channel to get the latest version for\nThe channel must allow 'self_assign' for this to work",
3227
+ "docs": "Target bundle version. Pass `latest.version` when estimating files returned\nby {@link getLatest}.",
2181
3228
  "complexTypes": [],
2182
3229
  "type": "string | undefined"
2183
3230
  }
@@ -2346,7 +3393,7 @@
2346
3393
  ],
2347
3394
  "docs": "The channel ID",
2348
3395
  "complexTypes": [],
2349
- "type": "string"
3396
+ "type": "number"
2350
3397
  },
2351
3398
  {
2352
3399
  "name": "name",
@@ -2936,6 +3983,20 @@
2936
3983
  "docs": "",
2937
3984
  "complexTypes": [],
2938
3985
  "type": "boolean"
3986
+ },
3987
+ {
3988
+ "name": "gesture",
3989
+ "tags": [
3990
+ {
3991
+ "text": "8.48.0",
3992
+ "name": "since"
3993
+ }
3994
+ ],
3995
+ "docs": "The currently configured native gesture used to open the preview/channel menu.\nUndefined means consumers should treat the gesture as the default `shake` behavior.",
3996
+ "complexTypes": [
3997
+ "ShakeMenuGesture"
3998
+ ],
3999
+ "type": "ShakeMenuGesture"
2939
4000
  }
2940
4001
  ]
2941
4002
  },
@@ -3464,6 +4525,21 @@
3464
4525
  ]
3465
4526
  }
3466
4527
  ]
4528
+ },
4529
+ {
4530
+ "name": "ShakeMenuGesture",
4531
+ "slug": "shakemenugesture",
4532
+ "docs": "Native gesture options that open the shake menu.\n\nSupported values are `shake` and `threeFingerPinch`.",
4533
+ "types": [
4534
+ {
4535
+ "text": "'shake'",
4536
+ "complexTypes": []
4537
+ },
4538
+ {
4539
+ "text": "'threeFingerPinch'",
4540
+ "complexTypes": []
4541
+ }
4542
+ ]
3467
4543
  }
3468
4544
  ],
3469
4545
  "pluginConfigs": [
@@ -3543,13 +4619,13 @@
3543
4619
  "name": "default"
3544
4620
  },
3545
4621
  {
3546
- "text": "false",
4622
+ "text": "\"onlyDownload\"",
3547
4623
  "name": "example"
3548
4624
  }
3549
4625
  ],
3550
- "docs": "Configure whether the plugin should use Auto Update via an update server.\n\nOnly available for Android and iOS.",
4626
+ "docs": "Configure how the plugin checks for, downloads, and applies live updates.\n\nThe plugin checks for updates when the app moves to the foreground and, if\n{@link periodCheckDelay} is set, on a repeating timer while the app stays open.\n\nBoolean values keep their existing behavior:\n- `true`: Same as `\"atBackground\"`.\n- `false`: Same as `\"off\"`.\n\nString values merge the previous Auto Update and Direct Update configuration:\n- `\"off\"`: Disable automatic update checks.\n- `\"atBackground\"`: Check and download automatically on each foreground check, then apply the update the next time the app moves to background.\n- `\"atInstall\"`: Apply immediately only after a fresh install or native app store update; otherwise use `\"atBackground\"` behavior.\n- `\"onLaunch\"`: Apply immediately only when the app is brought to the foreground from a killed state (cold start). After that first check, fall back to `\"atBackground\"` behavior.\n- `\"always\"`: Check on every foreground transition and apply immediately whenever an update is available.\n- `\"onlyDownload\"`: Check and download automatically, emit `updateAvailable`, and never set the next bundle or apply an update automatically.\n\nOnly available for Android and iOS.",
3551
4627
  "complexTypes": [],
3552
- "type": "boolean | undefined"
4628
+ "type": "boolean | 'always' | 'off' | 'atBackground' | 'atInstall' | 'onLaunch' | 'onlyDownload' | undefined"
3553
4629
  },
3554
4630
  {
3555
4631
  "name": "resetWhenUpdate",
@@ -3611,7 +4687,7 @@
3611
4687
  "name": "example"
3612
4688
  }
3613
4689
  ],
3614
- "docs": "Configure the URL / endpoint to which update statistics are sent.\n\nOnly available for Android and iOS. Set to \"\" to disable stats reporting.",
4690
+ "docs": "Configure the URL / endpoint to which update statistics are sent.\n\nOnly available for Android and iOS. Set to \"\" to disable stats reporting.\nNative stats include update lifecycle events, app health signals such as crashes,\nAndroid ANRs, low-memory exits, iOS memory warnings, and WebView health signals\nsuch as JavaScript errors, unhandled promise rejections, resource load failures,\nWebView renderer exits, and unclean WebView restarts when available.",
3615
4691
  "complexTypes": [],
3616
4692
  "type": "string | undefined"
3617
4693
  },
@@ -3650,6 +4726,10 @@
3650
4726
  {
3651
4727
  "name": "directUpdate",
3652
4728
  "tags": [
4729
+ {
4730
+ "text": "Use {@link PluginsConfig.CapacitorUpdater.autoUpdate} string modes instead.\nWorks well for apps less than 10MB and with uploads done using --delta flag.\nZip or apps more than 10MB will be relatively slow for users to update.\n- false: Never do direct updates (use default behavior: download on foreground check, apply when backgrounded)\n- atInstall: Direct update only after app install or native app store update, otherwise act as directUpdate = false\n- onLaunch: Direct update only when the app is brought to the foreground from a killed state, otherwise act as directUpdate = false\n- always: Direct update on every foreground check whenever an update is available, never act as directUpdate = false\n- true: (deprecated) Same as \"always\" for backward compatibility\n\nActivate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads.\nOnly available for Android and iOS.",
4731
+ "name": "deprecated"
4732
+ },
3653
4733
  {
3654
4734
  "text": "false",
3655
4735
  "name": "default"
@@ -3659,7 +4739,7 @@
3659
4739
  "name": "since"
3660
4740
  }
3661
4741
  ],
3662
- "docs": "Configure when the plugin should direct install updates. Only for autoUpdate mode.\nWorks well for apps less than 10MB and with uploads done using --delta flag.\nZip or apps more than 10MB will be relatively slow for users to update.\n- false: Never do direct updates (use default behavior: download at start, set when backgrounded)\n- atInstall: Direct update only when app is installed, updated from store, otherwise act as directUpdate = false\n- onLaunch: Direct update only on app installed, updated from store or after app kill, otherwise act as directUpdate = false\n- always: Direct update in all previous cases (app installed, updated from store, after app kill or app resume), never act as directUpdate = false\n- true: (deprecated) Same as \"always\" for backward compatibility\n\nActivate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads.\nOnly available for Android and iOS.",
4742
+ "docs": "Configure when the plugin should direct install updates. Only for autoUpdate mode.",
3663
4743
  "complexTypes": [],
3664
4744
  "type": "boolean | 'always' | 'atInstall' | 'onLaunch' | undefined"
3665
4745
  },
@@ -3675,7 +4755,7 @@
3675
4755
  "name": "since"
3676
4756
  }
3677
4757
  ],
3678
- "docs": "Automatically handle splashscreen hiding when using directUpdate. When enabled, the plugin will automatically hide the splashscreen after updates are applied or when no update is needed.\nThis removes the need to manually listen for appReady events and call SplashScreen.hide().\nOnly works when directUpdate is set to \"atInstall\", \"always\", \"onLaunch\", or true.\nRequires the @capacitor/splash-screen plugin to be installed and configured with launchAutoHide: false.\nRequires autoUpdate and directUpdate to be enabled.\n\nOnly available for Android and iOS.",
4758
+ "docs": "Automatically handle splashscreen hiding when using directUpdate. When enabled, the plugin will automatically hide the splashscreen after updates are applied or when no update is needed.\nThis removes the need to manually listen for appReady events and call SplashScreen.hide().\nOnly works when autoUpdate is set to \"atInstall\", \"always\", or \"onLaunch\", or when the deprecated directUpdate option is set to \"atInstall\", \"always\", \"onLaunch\", or true.\nRequires the @capacitor/splash-screen plugin to be installed and configured with launchAutoHide: false.\nRequires Auto Update and Direct Update behavior to be enabled.\n\nOnly available for Android and iOS.",
3679
4759
  "complexTypes": [],
3680
4760
  "type": "boolean | undefined"
3681
4761
  },
@@ -3891,6 +4971,22 @@
3891
4971
  "complexTypes": [],
3892
4972
  "type": "boolean | undefined"
3893
4973
  },
4974
+ {
4975
+ "name": "allowPreview",
4976
+ "tags": [
4977
+ {
4978
+ "text": "false",
4979
+ "name": "default"
4980
+ },
4981
+ {
4982
+ "text": "8.47.0",
4983
+ "name": "since"
4984
+ }
4985
+ ],
4986
+ "docs": "Allow JavaScript to start a native preview session and temporarily request updates for another app id.\nThis is intended for trusted container apps that implement Expo Go-style preview flows.\n\nOnly available for Android and iOS.",
4987
+ "complexTypes": [],
4988
+ "type": "boolean | undefined"
4989
+ },
3894
4990
  {
3895
4991
  "name": "persistCustomId",
3896
4992
  "tags": [
@@ -4031,10 +5127,28 @@
4031
5127
  "name": "since"
4032
5128
  }
4033
5129
  ],
4034
- "docs": "Enable shake gesture to show update menu for debugging/testing purposes",
5130
+ "docs": "Enable the native preview menu gesture while a preview session is active.\nOutside preview sessions this preview menu is ignored, unless\n{@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector} is enabled.",
4035
5131
  "complexTypes": [],
4036
5132
  "type": "boolean | undefined"
4037
5133
  },
5134
+ {
5135
+ "name": "shakeMenuGesture",
5136
+ "tags": [
5137
+ {
5138
+ "text": "'shake'",
5139
+ "name": "default"
5140
+ },
5141
+ {
5142
+ "text": "8.48.0",
5143
+ "name": "since"
5144
+ }
5145
+ ],
5146
+ "docs": "Choose which native gesture opens the preview/channel menu.\nThis applies to both {@link PluginsConfig.CapacitorUpdater.shakeMenu}\nand {@link PluginsConfig.CapacitorUpdater.allowShakeChannelSelector}.\n\nOnly available for Android and iOS.",
5147
+ "complexTypes": [
5148
+ "ShakeMenuGesture"
5149
+ ],
5150
+ "type": "ShakeMenuGesture"
5151
+ },
4038
5152
  {
4039
5153
  "name": "allowShakeChannelSelector",
4040
5154
  "tags": [
@@ -4047,7 +5161,7 @@
4047
5161
  "name": "since"
4048
5162
  }
4049
5163
  ],
4050
- "docs": "Enable the shake gesture to show a channel selector menu for switching between update channels.\nWhen enabled AND `shakeMenu` is true, the shake gesture shows a channel selector\ninstead of the default debug menu (Go Home/Reload/Close).\n\nAfter selecting a channel, the app automatically checks for updates and downloads if available.\nOnly works if channels have `allow_self_set` enabled on the backend.\n\nOnly available for Android and iOS.",
5164
+ "docs": "Enable the native menu gesture to show a channel selector menu for switching between update channels.\nIf {@link PluginsConfig.CapacitorUpdater.shakeMenu} is also enabled while a preview session is active,\nthe shake menu includes both preview actions and channel switching.\nThe native gesture can be changed with {@link PluginsConfig.CapacitorUpdater.shakeMenuGesture}.\n\nOnly available for Android and iOS.",
4051
5165
  "complexTypes": [],
4052
5166
  "type": "boolean | undefined"
4053
5167
  }