@capgo/capacitor-updater 7.43.3 → 7.50.1

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 (36) hide show
  1. package/Package.swift +5 -2
  2. package/README.md +643 -115
  3. package/android/build.gradle +3 -3
  4. package/android/src/main/java/ee/forgr/capacitor_updater/AndroidAppExitReporter.java +92 -0
  5. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +3121 -353
  6. package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +924 -290
  7. package/android/src/main/java/ee/forgr/capacitor_updater/DelayUpdateUtils.java +49 -13
  8. package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +45 -30
  9. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +75 -32
  10. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +2 -0
  11. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +3 -3
  12. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +401 -27
  13. package/android/src/main/java/ee/forgr/capacitor_updater/ThreeFingerPinchDetector.java +323 -0
  14. package/dist/docs.json +1590 -196
  15. package/dist/esm/definitions.d.ts +755 -66
  16. package/dist/esm/definitions.js.map +1 -1
  17. package/dist/esm/web.d.ts +11 -2
  18. package/dist/esm/web.js +59 -5
  19. package/dist/esm/web.js.map +1 -1
  20. package/dist/plugin.cjs.js +59 -5
  21. package/dist/plugin.cjs.js.map +1 -1
  22. package/dist/plugin.js +59 -5
  23. package/dist/plugin.js.map +1 -1
  24. package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +0 -1
  25. package/ios/Sources/CapacitorUpdaterPlugin/AppHealthTracker.swift +82 -0
  26. package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +0 -16
  27. package/ios/Sources/CapacitorUpdaterPlugin/BundleInfo.swift +2 -2
  28. package/ios/Sources/CapacitorUpdaterPlugin/BundleStatus.swift +78 -2
  29. package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2732 -417
  30. package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +1191 -363
  31. package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +0 -1
  32. package/ios/Sources/CapacitorUpdaterPlugin/DelayUpdateUtils.swift +37 -16
  33. package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +80 -1
  34. package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +438 -39
  35. package/ios/Sources/CapacitorUpdaterPlugin/WebViewStatsReporter.swift +276 -0
  36. package/package.json +24 -9
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>",
@@ -343,7 +565,7 @@
343
565
  },
344
566
  {
345
567
  "name": "link",
346
- "text": "ResetOptions} to control reset behavior. If `toLastSuccessful` is `false` (or omitted), resets to builtin. If `true`, resets to last successful bundle."
568
+ "text": "ResetOptions} to control reset behavior.\nIf `toLastSuccessful` is `false` (or omitted), resets to builtin.\nIf `true`, resets to last successful bundle.\nIf `usePendingBundle` is `true`, applies the pending bundle set via {@link next} and clears it."
347
569
  },
348
570
  {
349
571
  "name": "returns",
@@ -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>",
@@ -492,20 +731,92 @@
492
731
  },
493
732
  {
494
733
  "name": "throws",
495
- "text": "{Error} Always throws when no new version is available (`error: \"no_new_version_available\"`), or when the request fails."
734
+ "text": "{Error} Throws for failed update checks or transport/request failures."
496
735
  },
497
736
  {
498
737
  "name": "since",
499
738
  "text": "4.0.0"
500
739
  }
501
740
  ],
502
- "docs": "Check the update server for the latest available bundle version.\n\nThis queries your configured update URL (or Capgo backend) to see if a newer bundle\nis available for download. It does NOT download the bundle automatically.\n\nThe response includes:\n- `version`: The latest available version identifier\n- `url`: Download URL for the bundle (if available)\n- `breaking`: Whether this update is marked as incompatible (requires native app update)\n- `message`: Optional message from the server\n- `manifest`: File list for delta updates (if using multi-file downloads)\n\nAfter receiving the latest version info, you can:\n1. Compare it with your current version\n2. Download it using {@link download}\n3. Apply it using {@link next} or {@link set}\n\n**Important: Error handling for \"no new version available\"**\n\nWhen the device's current version matches the latest version on the server (i.e., the device is already\nup-to-date), the server returns a 200 response with `error: \"no_new_version_available\"` and\n`message: \"No new version available\"`. **This causes `getLatest()` to throw an error**, even though\nthis is a normal, expected condition.\n\nYou should catch this specific error to handle it gracefully:\n\n```typescript\ntry {\n const latest = await CapacitorUpdater.getLatest();\n // New version is available, proceed with download\n} catch (error) {\n if (error.message === 'No new version available') {\n // Device is already on the latest version - this is normal\n console.log('Already up to date');\n } else {\n // Actual error occurred\n console.error('Failed to check for updates:', error);\n }\n}\n```\n\nIn this scenario, the server:\n- Logs the request with a \"No new version available\" message\n- Sends a \"noNew\" stat action to track that the device checked for updates but was already current (done on the backend)",
741
+ "docs": "Check the update server for the latest available bundle version.\n\nThis queries your configured update URL (or Capgo backend) to see if a newer bundle\nis available for download. It does NOT download the bundle automatically.\n\nThe response includes:\n- `version`: The latest available version identifier\n- `url`: Download URL for the bundle (if available)\n- `breaking`: Whether this update is marked as incompatible (requires native app update)\n- `message`: Optional message from the server\n- `manifest`: File list for delta updates (if using multi-file downloads)\n\nAfter receiving the latest version info, you can:\n1. Compare it with your current version\n2. Download it using {@link download}\n3. Apply it using {@link next} or {@link set}\n\n**Important: Handling \"no new version available\"**\n\nWhen the device's current version matches the latest version on the server (i.e., the device is already\nup-to-date), the server returns a 200 response with `error: \"no_new_version_available\"` and\n`message: \"No new version available\"`. This is a normal, expected condition and resolves with\n`kind: \"up_to_date\"` when the backend provides that classification.\n\nYou should check `kind` and `error` before attempting to download:\n\n```typescript\nconst latest = await CapacitorUpdater.getLatest();\nif (latest.kind === 'up_to_date') {\n console.log('Already up to date');\n} else if (latest.kind === 'blocked') {\n console.log('Update is blocked:', latest.error);\n} else if (latest.url) {\n // New version is available, proceed with download\n}\n```\n\nIn this scenario, the server:\n- Logs the request with a \"No new version available\" message\n- Sends a \"noNew\" stat action to track that the device checked for updates but was already current (done on the backend)",
503
742
  "complexTypes": [
504
743
  "LatestVersion",
505
744
  "GetLatestOptions"
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
  ],
@@ -765,7 +1076,7 @@
765
1076
  "text": "1.0.0"
766
1077
  }
767
1078
  ],
768
- "docs": "Remove all event listeners registered for this plugin.\n\nThis unregisters all listeners added via {@link addListener} for all event types:\n- `download`\n- `noNeedUpdate`\n- `updateAvailable`\n- `downloadComplete`\n- `downloadFailed`\n- `breakingAvailable` / `majorAvailable`\n- `updateFailed`\n- `appReloaded`\n- `appReady`\n\nUse this during cleanup (e.g., when unmounting components or closing screens)\nto prevent memory leaks from lingering event listeners.",
1079
+ "docs": "Remove all event listeners registered for this plugin.\n\nThis unregisters all listeners added via {@link addListener} for all event types:\n- `download`\n- `noNeedUpdate`\n- `updateCheckResult`\n- `updateAvailable`\n- `downloadComplete`\n- `downloadFailed`\n- `breakingAvailable` / `majorAvailable`\n- `updateFailed`\n- `appReloaded`\n- `appReady`\n\nUse this during cleanup (e.g., when unmounting components or closing screens)\nto prevent memory leaks from lingering event listeners.",
769
1080
  "complexTypes": [],
770
1081
  "slug": "removealllisteners"
771
1082
  },
@@ -827,6 +1138,35 @@
827
1138
  ],
828
1139
  "slug": "addlistenernoneedupdate-"
829
1140
  },
1141
+ {
1142
+ "name": "addListener",
1143
+ "signature": "(eventName: 'updateCheckResult', listenerFunc: (state: UpdateCheckResultEvent) => void) => Promise<PluginListenerHandle>",
1144
+ "parameters": [
1145
+ {
1146
+ "name": "eventName",
1147
+ "docs": "",
1148
+ "type": "'updateCheckResult'"
1149
+ },
1150
+ {
1151
+ "name": "listenerFunc",
1152
+ "docs": "",
1153
+ "type": "(state: UpdateCheckResultEvent) => void"
1154
+ }
1155
+ ],
1156
+ "returns": "Promise<PluginListenerHandle>",
1157
+ "tags": [
1158
+ {
1159
+ "name": "since",
1160
+ "text": "8.45.11"
1161
+ }
1162
+ ],
1163
+ "docs": "Listen for update check results before the updater decides whether to download.\nThe backend can classify the UpdateCheckResultEvent payload as `up_to_date`, `blocked`, or `failed`.\n\nThis event is emitted alongside legacy events. For `up_to_date` and `blocked`, it is emitted before\n`noNeedUpdate` and does not emit `downloadFailed`. For `failed`, it is emitted before the legacy\n`downloadFailed` event and keeps the existing failure stats behavior.",
1164
+ "complexTypes": [
1165
+ "PluginListenerHandle",
1166
+ "UpdateCheckResultEvent"
1167
+ ],
1168
+ "slug": "addlistenerupdatecheckresult-"
1169
+ },
830
1170
  {
831
1171
  "name": "addListener",
832
1172
  "signature": "(eventName: 'updateAvailable', listenerFunc: (state: UpdateAvailableEvent) => void) => Promise<PluginListenerHandle>",
@@ -978,84 +1318,142 @@
978
1318
  },
979
1319
  {
980
1320
  "name": "addListener",
981
- "signature": "(eventName: 'downloadFailed', listenerFunc: (state: DownloadFailedEvent) => void) => Promise<PluginListenerHandle>",
1321
+ "signature": "(eventName: 'set', listenerFunc: (state: SetEvent) => void) => Promise<PluginListenerHandle>",
982
1322
  "parameters": [
983
1323
  {
984
1324
  "name": "eventName",
985
1325
  "docs": "",
986
- "type": "'downloadFailed'"
1326
+ "type": "'set'"
987
1327
  },
988
1328
  {
989
1329
  "name": "listenerFunc",
990
1330
  "docs": "",
991
- "type": "(state: DownloadFailedEvent) => void"
1331
+ "type": "(state: SetEvent) => void"
992
1332
  }
993
1333
  ],
994
1334
  "returns": "Promise<PluginListenerHandle>",
995
1335
  "tags": [
996
1336
  {
997
1337
  "name": "since",
998
- "text": "4.0.0"
1338
+ "text": "8.43.12"
999
1339
  }
1000
1340
  ],
1001
- "docs": "Listen for download fail event in the App, let you know when a bundle download has failed",
1341
+ "docs": "Listen for set event in the App, let you know when a bundle has been applied successfully.\nThis event is retained natively until JavaScript consumes it, so if the app reloads before your\nlistener is attached, the last pending `set` event is delivered once the listener subscribes.",
1002
1342
  "complexTypes": [
1003
1343
  "PluginListenerHandle",
1004
- "DownloadFailedEvent"
1344
+ "SetEvent"
1005
1345
  ],
1006
- "slug": "addlistenerdownloadfailed-"
1346
+ "slug": "addlistenerset-"
1007
1347
  },
1008
1348
  {
1009
1349
  "name": "addListener",
1010
- "signature": "(eventName: 'appReloaded', listenerFunc: () => void) => Promise<PluginListenerHandle>",
1350
+ "signature": "(eventName: 'setNext', listenerFunc: (state: SetNextEvent) => void) => Promise<PluginListenerHandle>",
1011
1351
  "parameters": [
1012
1352
  {
1013
1353
  "name": "eventName",
1014
1354
  "docs": "",
1015
- "type": "'appReloaded'"
1355
+ "type": "'setNext'"
1016
1356
  },
1017
1357
  {
1018
1358
  "name": "listenerFunc",
1019
1359
  "docs": "",
1020
- "type": "() => void"
1360
+ "type": "(state: SetNextEvent) => void"
1021
1361
  }
1022
1362
  ],
1023
1363
  "returns": "Promise<PluginListenerHandle>",
1024
1364
  "tags": [
1025
1365
  {
1026
1366
  "name": "since",
1027
- "text": "4.3.0"
1367
+ "text": "6.14.0"
1028
1368
  }
1029
1369
  ],
1030
- "docs": "Listen for reload event in the App, let you know when reload has happened",
1370
+ "docs": "Listen for set next event in the App, let you know when a bundle is queued as the next bundle to install.",
1031
1371
  "complexTypes": [
1032
- "PluginListenerHandle"
1372
+ "PluginListenerHandle",
1373
+ "SetNextEvent"
1033
1374
  ],
1034
- "slug": "addlistenerappreloaded-"
1375
+ "slug": "addlistenersetnext-"
1035
1376
  },
1036
1377
  {
1037
1378
  "name": "addListener",
1038
- "signature": "(eventName: 'appReady', listenerFunc: (state: AppReadyEvent) => void) => Promise<PluginListenerHandle>",
1379
+ "signature": "(eventName: 'downloadFailed', listenerFunc: (state: DownloadFailedEvent) => void) => Promise<PluginListenerHandle>",
1039
1380
  "parameters": [
1040
1381
  {
1041
1382
  "name": "eventName",
1042
1383
  "docs": "",
1043
- "type": "'appReady'"
1384
+ "type": "'downloadFailed'"
1044
1385
  },
1045
1386
  {
1046
1387
  "name": "listenerFunc",
1047
1388
  "docs": "",
1048
- "type": "(state: AppReadyEvent) => void"
1389
+ "type": "(state: DownloadFailedEvent) => void"
1049
1390
  }
1050
1391
  ],
1051
1392
  "returns": "Promise<PluginListenerHandle>",
1052
1393
  "tags": [
1053
1394
  {
1054
1395
  "name": "since",
1055
- "text": "5.1.0"
1396
+ "text": "4.0.0"
1397
+ }
1398
+ ],
1399
+ "docs": "Listen for download fail event in the App, let you know when a bundle download has failed",
1400
+ "complexTypes": [
1401
+ "PluginListenerHandle",
1402
+ "DownloadFailedEvent"
1403
+ ],
1404
+ "slug": "addlistenerdownloadfailed-"
1405
+ },
1406
+ {
1407
+ "name": "addListener",
1408
+ "signature": "(eventName: 'appReloaded', listenerFunc: () => void) => Promise<PluginListenerHandle>",
1409
+ "parameters": [
1410
+ {
1411
+ "name": "eventName",
1412
+ "docs": "",
1413
+ "type": "'appReloaded'"
1414
+ },
1415
+ {
1416
+ "name": "listenerFunc",
1417
+ "docs": "",
1418
+ "type": "() => void"
1419
+ }
1420
+ ],
1421
+ "returns": "Promise<PluginListenerHandle>",
1422
+ "tags": [
1423
+ {
1424
+ "name": "since",
1425
+ "text": "4.3.0"
1426
+ }
1427
+ ],
1428
+ "docs": "Listen for reload event in the App, let you know when reload has happened",
1429
+ "complexTypes": [
1430
+ "PluginListenerHandle"
1431
+ ],
1432
+ "slug": "addlistenerappreloaded-"
1433
+ },
1434
+ {
1435
+ "name": "addListener",
1436
+ "signature": "(eventName: 'appReady', listenerFunc: (state: AppReadyEvent) => void) => Promise<PluginListenerHandle>",
1437
+ "parameters": [
1438
+ {
1439
+ "name": "eventName",
1440
+ "docs": "",
1441
+ "type": "'appReady'"
1442
+ },
1443
+ {
1444
+ "name": "listenerFunc",
1445
+ "docs": "",
1446
+ "type": "(state: AppReadyEvent) => void"
1447
+ }
1448
+ ],
1449
+ "returns": "Promise<PluginListenerHandle>",
1450
+ "tags": [
1451
+ {
1452
+ "name": "since",
1453
+ "text": "5.1.0"
1056
1454
  }
1057
1455
  ],
1058
- "docs": "Listen for app ready event in the App, let you know when app is ready to use, this event is retain till consumed.",
1456
+ "docs": "Listen for app ready event in the App, let you know when app is ready to use.\nThis event is retained natively until JavaScript consumes it, so it can still be delivered after\na reload even if the listener is attached later in app startup.",
1059
1457
  "complexTypes": [
1060
1458
  "PluginListenerHandle",
1061
1459
  "AppReadyEvent"
@@ -1224,7 +1622,7 @@
1224
1622
  "text": "7.5.0"
1225
1623
  }
1226
1624
  ],
1227
- "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}.",
1228
1626
  "complexTypes": [
1229
1627
  "SetShakeMenuOptions"
1230
1628
  ],
@@ -1238,7 +1636,7 @@
1238
1636
  "tags": [
1239
1637
  {
1240
1638
  "name": "returns",
1241
- "text": "Object with `enabled: true` or `enabled: false`."
1639
+ "text": "Object with the current enabled state and gesture."
1242
1640
  },
1243
1641
  {
1244
1642
  "name": "throws",
@@ -1249,7 +1647,7 @@
1249
1647
  "text": "7.5.0"
1250
1648
  }
1251
1649
  ],
1252
- "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",
1253
1651
  "complexTypes": [
1254
1652
  "ShakeMenuEnabled"
1255
1653
  ],
@@ -1288,7 +1686,7 @@
1288
1686
  "text": "8.43.0"
1289
1687
  }
1290
1688
  ],
1291
- "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}.",
1292
1690
  "complexTypes": [
1293
1691
  "SetShakeChannelSelectorOptions"
1294
1692
  ],
@@ -1763,291 +2161,1070 @@
1763
2161
  ]
1764
2162
  },
1765
2163
  {
1766
- "name": "BundleListResult",
1767
- "slug": "bundlelistresult",
2164
+ "name": "StartPreviewSessionOptions",
2165
+ "slug": "startpreviewsessionoptions",
1768
2166
  "docs": "",
1769
2167
  "tags": [],
1770
2168
  "methods": [],
1771
2169
  "properties": [
1772
2170
  {
1773
- "name": "bundles",
1774
- "tags": [],
1775
- "docs": "",
1776
- "complexTypes": [
1777
- "BundleInfo"
2171
+ "name": "appId",
2172
+ "tags": [
2173
+ {
2174
+ "text": "8.47.0",
2175
+ "name": "since"
2176
+ },
2177
+ {
2178
+ "text": "undefined",
2179
+ "name": "default"
2180
+ }
1778
2181
  ],
1779
- "type": "BundleInfo[]"
1780
- }
1781
- ]
1782
- },
1783
- {
1784
- "name": "ListOptions",
1785
- "slug": "listoptions",
1786
- "docs": "",
1787
- "tags": [],
1788
- "methods": [],
1789
- "properties": [
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`.",
2183
+ "complexTypes": [],
2184
+ "type": "string | undefined"
2185
+ },
1790
2186
  {
1791
- "name": "raw",
2187
+ "name": "payloadUrl",
1792
2188
  "tags": [
1793
2189
  {
1794
- "text": "6.14.0",
2190
+ "text": "8.48.0",
1795
2191
  "name": "since"
1796
2192
  },
1797
2193
  {
1798
- "text": "false",
2194
+ "text": "undefined",
1799
2195
  "name": "default"
1800
2196
  }
1801
2197
  ],
1802
- "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.",
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`.",
1803
2199
  "complexTypes": [],
1804
- "type": "boolean | undefined"
1805
- }
1806
- ]
1807
- },
1808
- {
1809
- "name": "ResetOptions",
1810
- "slug": "resetoptions",
1811
- "docs": "",
1812
- "tags": [],
1813
- "methods": [],
1814
- "properties": [
2200
+ "type": "string | undefined"
2201
+ },
1815
2202
  {
1816
- "name": "toLastSuccessful",
1817
- "tags": [],
1818
- "docs": "",
2203
+ "name": "name",
2204
+ "tags": [
2205
+ {
2206
+ "text": "8.49.0",
2207
+ "name": "since"
2208
+ },
2209
+ {
2210
+ "text": "undefined",
2211
+ "name": "default"
2212
+ }
2213
+ ],
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.",
1819
2215
  "complexTypes": [],
1820
- "type": "boolean"
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"
1821
2233
  }
1822
2234
  ]
1823
2235
  },
1824
2236
  {
1825
- "name": "CurrentBundleResult",
1826
- "slug": "currentbundleresult",
2237
+ "name": "PreviewListResult",
2238
+ "slug": "previewlistresult",
1827
2239
  "docs": "",
1828
2240
  "tags": [],
1829
2241
  "methods": [],
1830
2242
  "properties": [
1831
2243
  {
1832
- "name": "bundle",
1833
- "tags": [],
1834
- "docs": "",
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.",
1835
2280
  "complexTypes": [
1836
2281
  "BundleInfo"
1837
2282
  ],
1838
2283
  "type": "BundleInfo"
1839
2284
  },
1840
2285
  {
1841
- "name": "native",
1842
- "tags": [],
1843
- "docs": "",
1844
- "complexTypes": [],
1845
- "type": "string"
1846
- }
1847
- ]
1848
- },
1849
- {
1850
- "name": "MultiDelayConditions",
1851
- "slug": "multidelayconditions",
1852
- "docs": "",
1853
- "tags": [],
1854
- "methods": [],
1855
- "properties": [
1856
- {
1857
- "name": "delayConditions",
1858
- "tags": [],
1859
- "docs": "",
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.",
1860
2294
  "complexTypes": [
1861
- "DelayCondition"
2295
+ "BundleInfo"
1862
2296
  ],
1863
- "type": "DelayCondition[]"
2297
+ "type": "BundleInfo"
1864
2298
  }
1865
2299
  ]
1866
2300
  },
1867
2301
  {
1868
- "name": "DelayCondition",
1869
- "slug": "delaycondition",
2302
+ "name": "PreviewInfo",
2303
+ "slug": "previewinfo",
1870
2304
  "docs": "",
1871
2305
  "tags": [],
1872
2306
  "methods": [],
1873
2307
  "properties": [
1874
2308
  {
1875
- "name": "kind",
2309
+ "name": "id",
1876
2310
  "tags": [
1877
2311
  {
1878
- "text": "value is useless for",
1879
- "name": "param"
1880
- },
2312
+ "text": "8.49.0",
2313
+ "name": "since"
2314
+ }
2315
+ ],
2316
+ "docs": "Preview bundle id.",
2317
+ "complexTypes": [],
2318
+ "type": "string"
2319
+ },
2320
+ {
2321
+ "name": "bundle",
2322
+ "tags": [
1881
2323
  {
1882
- "text": "kind \"kill\", optional for \"background\" (default value: \"0\") and required for \"nativeVersion\" and \"date\"",
1883
- "name": "param"
2324
+ "text": "8.49.0",
2325
+ "name": "since"
1884
2326
  }
1885
2327
  ],
1886
- "docs": "Set up delay conditions in setMultiDelay",
2328
+ "docs": "Locally downloaded bundle backing this preview.",
1887
2329
  "complexTypes": [
1888
- "DelayUntilNext"
2330
+ "BundleInfo"
1889
2331
  ],
1890
- "type": "DelayUntilNext"
2332
+ "type": "BundleInfo"
1891
2333
  },
1892
2334
  {
1893
- "name": "value",
1894
- "tags": [],
1895
- "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.",
1896
2343
  "complexTypes": [],
1897
2344
  "type": "string | undefined"
1898
- }
1899
- ]
1900
- },
1901
- {
1902
- "name": "LatestVersion",
1903
- "slug": "latestversion",
1904
- "docs": "",
1905
- "tags": [],
1906
- "methods": [],
1907
- "properties": [
2345
+ },
1908
2346
  {
1909
- "name": "version",
2347
+ "name": "source",
1910
2348
  "tags": [
1911
2349
  {
1912
- "text": "4.0.0",
2350
+ "text": "8.49.0",
1913
2351
  "name": "since"
1914
2352
  }
1915
2353
  ],
1916
- "docs": "Result of getLatest method",
2354
+ "docs": "Metadata source label supplied when the preview was started.",
1917
2355
  "complexTypes": [],
1918
- "type": "string"
2356
+ "type": "string | undefined"
1919
2357
  },
1920
2358
  {
1921
- "name": "checksum",
2359
+ "name": "appId",
1922
2360
  "tags": [
1923
2361
  {
1924
- "text": "6",
2362
+ "text": "8.49.0",
1925
2363
  "name": "since"
1926
2364
  }
1927
2365
  ],
1928
- "docs": "",
2366
+ "docs": "Preview app id, when the session uses an app id override.",
1929
2367
  "complexTypes": [],
1930
2368
  "type": "string | undefined"
1931
2369
  },
1932
2370
  {
1933
- "name": "breaking",
2371
+ "name": "payloadUrl",
1934
2372
  "tags": [
1935
2373
  {
1936
- "text": "7.22.0",
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",
1937
2387
  "name": "since"
1938
2388
  }
1939
2389
  ],
1940
- "docs": "Indicates whether the update was flagged as breaking by the backend.",
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.",
2415
+ "complexTypes": [],
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"
2429
+ }
2430
+ ]
2431
+ },
2432
+ {
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",
2541
+ "docs": "",
2542
+ "tags": [],
2543
+ "methods": [],
2544
+ "properties": [
2545
+ {
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
+ }
2959
+ ],
2960
+ "docs": "Number of entries that can be reused from builtin files or local cache.",
2961
+ "complexTypes": [],
2962
+ "type": "number"
2963
+ }
2964
+ ]
2965
+ },
2966
+ {
2967
+ "name": "GetBundleDownloadSizeResult",
2968
+ "slug": "getbundledownloadsizeresult",
2969
+ "docs": "",
2970
+ "tags": [],
2971
+ "methods": [],
2972
+ "properties": [
2973
+ {
2974
+ "name": "totalSize",
2975
+ "tags": [
2976
+ {
2977
+ "text": "8.47.0",
2978
+ "name": "since"
2979
+ }
2980
+ ],
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
+ }
2992
+ ],
2993
+ "docs": "Number of files with a known size.",
2994
+ "complexTypes": [],
2995
+ "type": "number"
2996
+ },
2997
+ {
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.",
3006
+ "complexTypes": [],
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[]"
3022
+ }
3023
+ ]
3024
+ },
3025
+ {
3026
+ "name": "BundleFileSize",
3027
+ "slug": "bundlefilesize",
3028
+ "docs": "",
3029
+ "tags": [],
3030
+ "methods": [],
3031
+ "properties": [
3032
+ {
3033
+ "name": "file_name",
3034
+ "tags": [
3035
+ {
3036
+ "text": "8.47.0",
3037
+ "name": "since"
3038
+ }
3039
+ ],
3040
+ "docs": "File name from the manifest entry.",
3041
+ "complexTypes": [],
3042
+ "type": "string | null"
3043
+ },
3044
+ {
3045
+ "name": "file_hash",
3046
+ "tags": [
3047
+ {
3048
+ "text": "8.47.0",
3049
+ "name": "since"
3050
+ }
3051
+ ],
3052
+ "docs": "File hash from the manifest entry.",
3053
+ "complexTypes": [],
3054
+ "type": "string | null"
3055
+ },
3056
+ {
3057
+ "name": "download_url",
3058
+ "tags": [
3059
+ {
3060
+ "text": "8.47.0",
3061
+ "name": "since"
3062
+ }
3063
+ ],
3064
+ "docs": "Download URL from the manifest entry.",
3065
+ "complexTypes": [],
3066
+ "type": "string | null"
3067
+ },
3068
+ {
3069
+ "name": "size",
3070
+ "tags": [
3071
+ {
3072
+ "text": "8.47.0",
3073
+ "name": "since"
3074
+ }
3075
+ ],
3076
+ "docs": "Estimated bytes to download when the server exposes a size.",
3077
+ "complexTypes": [],
3078
+ "type": "number | undefined"
3079
+ },
3080
+ {
3081
+ "name": "error",
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.",
3089
+ "complexTypes": [],
3090
+ "type": "string | undefined"
3091
+ }
3092
+ ]
3093
+ },
3094
+ {
3095
+ "name": "GetLatestOptions",
3096
+ "slug": "getlatestoptions",
3097
+ "docs": "",
3098
+ "tags": [],
3099
+ "methods": [],
3100
+ "properties": [
3101
+ {
3102
+ "name": "channel",
3103
+ "tags": [
3104
+ {
3105
+ "text": "6.8.0",
3106
+ "name": "since"
3107
+ },
3108
+ {
3109
+ "text": "undefined",
3110
+ "name": "default"
3111
+ }
3112
+ ],
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"
3116
+ },
3117
+ {
3118
+ "name": "appId",
3119
+ "tags": [
3120
+ {
3121
+ "text": "8.47.0",
3122
+ "name": "since"
3123
+ },
3124
+ {
3125
+ "text": "undefined",
3126
+ "name": "default"
3127
+ }
3128
+ ],
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`.",
1941
3130
  "complexTypes": [],
1942
- "type": "boolean | undefined"
3131
+ "type": "string | undefined"
1943
3132
  },
1944
3133
  {
1945
- "name": "major",
3134
+ "name": "includeBundleSize",
1946
3135
  "tags": [
1947
3136
  {
1948
- "text": "Use {@link LatestVersion.breaking} instead.",
1949
- "name": "deprecated"
3137
+ "text": "8.47.0",
3138
+ "name": "since"
3139
+ },
3140
+ {
3141
+ "text": "false",
3142
+ "name": "default"
1950
3143
  }
1951
3144
  ],
1952
- "docs": "",
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.",
1953
3146
  "complexTypes": [],
1954
3147
  "type": "boolean | undefined"
1955
- },
1956
- {
1957
- "name": "message",
1958
- "tags": [],
1959
- "docs": "Optional message from the server.\nWhen no new version is available, this will be \"No new version available\".",
1960
- "complexTypes": [],
1961
- "type": "string | undefined"
1962
- },
1963
- {
1964
- "name": "sessionKey",
1965
- "tags": [],
1966
- "docs": "",
1967
- "complexTypes": [],
1968
- "type": "string | undefined"
1969
- },
1970
- {
1971
- "name": "error",
1972
- "tags": [],
1973
- "docs": "Error code from the server, if any.\nCommon values:\n- `\"no_new_version_available\"`: Device is already on the latest version (not a failure)\n- Other error codes indicate actual failures in the update process",
1974
- "complexTypes": [],
1975
- "type": "string | undefined"
1976
- },
1977
- {
1978
- "name": "old",
1979
- "tags": [],
1980
- "docs": "The previous/current version name (provided for reference).",
1981
- "complexTypes": [],
1982
- "type": "string | undefined"
1983
- },
1984
- {
1985
- "name": "url",
1986
- "tags": [],
1987
- "docs": "Download URL for the bundle (when a new version is available).",
1988
- "complexTypes": [],
1989
- "type": "string | undefined"
1990
- },
3148
+ }
3149
+ ]
3150
+ },
3151
+ {
3152
+ "name": "GetMissingBundleFilesOptions",
3153
+ "slug": "getmissingbundlefilesoptions",
3154
+ "docs": "",
3155
+ "tags": [],
3156
+ "methods": [],
3157
+ "properties": [
1991
3158
  {
1992
3159
  "name": "manifest",
1993
3160
  "tags": [
1994
3161
  {
1995
- "text": "6.1",
3162
+ "text": "8.47.0",
1996
3163
  "name": "since"
1997
3164
  }
1998
3165
  ],
1999
- "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.",
2000
3167
  "complexTypes": [
2001
3168
  "ManifestEntry"
2002
3169
  ],
2003
3170
  "type": "ManifestEntry[] | undefined"
2004
3171
  },
2005
3172
  {
2006
- "name": "link",
3173
+ "name": "version",
2007
3174
  "tags": [
2008
3175
  {
2009
- "text": "7.35.0",
3176
+ "text": "8.47.0",
2010
3177
  "name": "since"
2011
3178
  }
2012
3179
  ],
2013
- "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.",
2014
3181
  "complexTypes": [],
2015
3182
  "type": "string | undefined"
2016
3183
  },
2017
3184
  {
2018
- "name": "comment",
3185
+ "name": "sessionKey",
2019
3186
  "tags": [
2020
3187
  {
2021
- "text": "7.35.0",
3188
+ "text": "8.47.0",
2022
3189
  "name": "since"
2023
3190
  }
2024
3191
  ],
2025
- "docs": "Optional comment or description for this bundle version.",
3192
+ "docs": "Session key returned by {@link getLatest}, required only when file hashes are encrypted.",
2026
3193
  "complexTypes": [],
2027
3194
  "type": "string | undefined"
2028
3195
  }
2029
3196
  ]
2030
3197
  },
2031
3198
  {
2032
- "name": "GetLatestOptions",
2033
- "slug": "getlatestoptions",
3199
+ "name": "GetBundleDownloadSizeOptions",
3200
+ "slug": "getbundledownloadsizeoptions",
2034
3201
  "docs": "",
2035
3202
  "tags": [],
2036
3203
  "methods": [],
2037
3204
  "properties": [
2038
3205
  {
2039
- "name": "channel",
3206
+ "name": "manifest",
2040
3207
  "tags": [
2041
3208
  {
2042
- "text": "6.8.0",
3209
+ "text": "8.47.0",
2043
3210
  "name": "since"
2044
- },
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": [
2045
3222
  {
2046
- "text": "undefined",
2047
- "name": "default"
3223
+ "text": "8.47.0",
3224
+ "name": "since"
2048
3225
  }
2049
3226
  ],
2050
- "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}.",
2051
3228
  "complexTypes": [],
2052
3229
  "type": "string | undefined"
2053
3230
  }
@@ -2216,7 +3393,7 @@
2216
3393
  ],
2217
3394
  "docs": "The channel ID",
2218
3395
  "complexTypes": [],
2219
- "type": "string"
3396
+ "type": "number"
2220
3397
  },
2221
3398
  {
2222
3399
  "name": "name",
@@ -2405,6 +3582,91 @@
2405
3582
  }
2406
3583
  ]
2407
3584
  },
3585
+ {
3586
+ "name": "UpdateCheckResultEvent",
3587
+ "slug": "updatecheckresultevent",
3588
+ "docs": "",
3589
+ "tags": [],
3590
+ "methods": [],
3591
+ "properties": [
3592
+ {
3593
+ "name": "kind",
3594
+ "tags": [
3595
+ {
3596
+ "text": "8.45.11",
3597
+ "name": "since"
3598
+ }
3599
+ ],
3600
+ "docs": "Classification for the update check result, provided by the backend.",
3601
+ "complexTypes": [
3602
+ "UpdateResponseKind"
3603
+ ],
3604
+ "type": "UpdateResponseKind"
3605
+ },
3606
+ {
3607
+ "name": "error",
3608
+ "tags": [
3609
+ {
3610
+ "text": "8.45.11",
3611
+ "name": "since"
3612
+ }
3613
+ ],
3614
+ "docs": "Backend error code, when provided.",
3615
+ "complexTypes": [],
3616
+ "type": "string | undefined"
3617
+ },
3618
+ {
3619
+ "name": "message",
3620
+ "tags": [
3621
+ {
3622
+ "text": "8.45.11",
3623
+ "name": "since"
3624
+ }
3625
+ ],
3626
+ "docs": "Backend message, when provided.",
3627
+ "complexTypes": [],
3628
+ "type": "string | undefined"
3629
+ },
3630
+ {
3631
+ "name": "statusCode",
3632
+ "tags": [
3633
+ {
3634
+ "text": "8.45.11",
3635
+ "name": "since"
3636
+ }
3637
+ ],
3638
+ "docs": "HTTP status code returned by the update endpoint.",
3639
+ "complexTypes": [],
3640
+ "type": "number | undefined"
3641
+ },
3642
+ {
3643
+ "name": "version",
3644
+ "tags": [
3645
+ {
3646
+ "text": "8.45.11",
3647
+ "name": "since"
3648
+ }
3649
+ ],
3650
+ "docs": "Version referenced by the update check result.",
3651
+ "complexTypes": [],
3652
+ "type": "string | undefined"
3653
+ },
3654
+ {
3655
+ "name": "bundle",
3656
+ "tags": [
3657
+ {
3658
+ "text": "8.45.11",
3659
+ "name": "since"
3660
+ }
3661
+ ],
3662
+ "docs": "Current bundle on the device.",
3663
+ "complexTypes": [
3664
+ "BundleInfo"
3665
+ ],
3666
+ "type": "BundleInfo"
3667
+ }
3668
+ ]
3669
+ },
2408
3670
  {
2409
3671
  "name": "UpdateAvailableEvent",
2410
3672
  "slug": "updateavailableevent",
@@ -2499,6 +3761,52 @@
2499
3761
  }
2500
3762
  ]
2501
3763
  },
3764
+ {
3765
+ "name": "SetEvent",
3766
+ "slug": "setevent",
3767
+ "docs": "",
3768
+ "tags": [],
3769
+ "methods": [],
3770
+ "properties": [
3771
+ {
3772
+ "name": "bundle",
3773
+ "tags": [
3774
+ {
3775
+ "text": "8.43.12",
3776
+ "name": "since"
3777
+ }
3778
+ ],
3779
+ "docs": "Emit when a bundle has been applied successfully.\nThis event uses native `retainUntilConsumed` behavior.",
3780
+ "complexTypes": [
3781
+ "BundleInfo"
3782
+ ],
3783
+ "type": "BundleInfo"
3784
+ }
3785
+ ]
3786
+ },
3787
+ {
3788
+ "name": "SetNextEvent",
3789
+ "slug": "setnextevent",
3790
+ "docs": "",
3791
+ "tags": [],
3792
+ "methods": [],
3793
+ "properties": [
3794
+ {
3795
+ "name": "bundle",
3796
+ "tags": [
3797
+ {
3798
+ "text": "6.14.0",
3799
+ "name": "since"
3800
+ }
3801
+ ],
3802
+ "docs": "Emit when a bundle is queued as the next bundle to install.",
3803
+ "complexTypes": [
3804
+ "BundleInfo"
3805
+ ],
3806
+ "type": "BundleInfo"
3807
+ }
3808
+ ]
3809
+ },
2502
3810
  {
2503
3811
  "name": "DownloadFailedEvent",
2504
3812
  "slug": "downloadfailedevent",
@@ -2535,7 +3843,7 @@
2535
3843
  "name": "since"
2536
3844
  }
2537
3845
  ],
2538
- "docs": "Emitted when the app is ready to use.",
3846
+ "docs": "Emitted when the app is ready to use.\nThis event uses native `retainUntilConsumed` behavior.",
2539
3847
  "complexTypes": [
2540
3848
  "BundleInfo"
2541
3849
  ],
@@ -2675,6 +3983,20 @@
2675
3983
  "docs": "",
2676
3984
  "complexTypes": [],
2677
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"
2678
4000
  }
2679
4001
  ]
2680
4002
  },
@@ -3172,6 +4494,25 @@
3172
4494
  }
3173
4495
  ]
3174
4496
  },
4497
+ {
4498
+ "name": "UpdateResponseKind",
4499
+ "slug": "updateresponsekind",
4500
+ "docs": "Classification for update-check responses that do not provide a downloadable bundle.\nThe update backend provides this field directly. Missing or unknown values are treated as\nfailed by native clients.",
4501
+ "types": [
4502
+ {
4503
+ "text": "'up_to_date'",
4504
+ "complexTypes": []
4505
+ },
4506
+ {
4507
+ "text": "'blocked'",
4508
+ "complexTypes": []
4509
+ },
4510
+ {
4511
+ "text": "'failed'",
4512
+ "complexTypes": []
4513
+ }
4514
+ ]
4515
+ },
3175
4516
  {
3176
4517
  "name": "BreakingAvailableEvent",
3177
4518
  "slug": "breakingavailableevent",
@@ -3184,6 +4525,21 @@
3184
4525
  ]
3185
4526
  }
3186
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
+ ]
3187
4543
  }
3188
4544
  ],
3189
4545
  "pluginConfigs": [
@@ -3263,13 +4619,13 @@
3263
4619
  "name": "default"
3264
4620
  },
3265
4621
  {
3266
- "text": "false",
4622
+ "text": "\"onlyDownload\"",
3267
4623
  "name": "example"
3268
4624
  }
3269
4625
  ],
3270
- "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.",
3271
4627
  "complexTypes": [],
3272
- "type": "boolean | undefined"
4628
+ "type": "boolean | 'always' | 'off' | 'atBackground' | 'atInstall' | 'onLaunch' | 'onlyDownload' | undefined"
3273
4629
  },
3274
4630
  {
3275
4631
  "name": "resetWhenUpdate",
@@ -3331,7 +4687,7 @@
3331
4687
  "name": "example"
3332
4688
  }
3333
4689
  ],
3334
- "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.",
3335
4691
  "complexTypes": [],
3336
4692
  "type": "string | undefined"
3337
4693
  },
@@ -3370,6 +4726,10 @@
3370
4726
  {
3371
4727
  "name": "directUpdate",
3372
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
+ },
3373
4733
  {
3374
4734
  "text": "false",
3375
4735
  "name": "default"
@@ -3379,7 +4739,7 @@
3379
4739
  "name": "since"
3380
4740
  }
3381
4741
  ],
3382
- "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.",
3383
4743
  "complexTypes": [],
3384
4744
  "type": "boolean | 'always' | 'atInstall' | 'onLaunch' | undefined"
3385
4745
  },
@@ -3395,7 +4755,7 @@
3395
4755
  "name": "since"
3396
4756
  }
3397
4757
  ],
3398
- "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.",
3399
4759
  "complexTypes": [],
3400
4760
  "type": "boolean | undefined"
3401
4761
  },
@@ -3611,6 +4971,22 @@
3611
4971
  "complexTypes": [],
3612
4972
  "type": "boolean | undefined"
3613
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
+ },
3614
4990
  {
3615
4991
  "name": "persistCustomId",
3616
4992
  "tags": [
@@ -3751,10 +5127,28 @@
3751
5127
  "name": "since"
3752
5128
  }
3753
5129
  ],
3754
- "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.",
3755
5131
  "complexTypes": [],
3756
5132
  "type": "boolean | undefined"
3757
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
+ },
3758
5152
  {
3759
5153
  "name": "allowShakeChannelSelector",
3760
5154
  "tags": [
@@ -3767,7 +5161,7 @@
3767
5161
  "name": "since"
3768
5162
  }
3769
5163
  ],
3770
- "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.",
3771
5165
  "complexTypes": [],
3772
5166
  "type": "boolean | undefined"
3773
5167
  }