@capgo/capacitor-updater 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CapgoCapacitorUpdater.podspec +7 -5
  2. package/Package.swift +37 -0
  3. package/README.md +1461 -231
  4. package/android/build.gradle +29 -12
  5. package/android/proguard-rules.pro +45 -0
  6. package/android/src/main/AndroidManifest.xml +0 -1
  7. package/android/src/main/java/ee/forgr/capacitor_updater/BundleInfo.java +223 -195
  8. package/android/src/main/java/ee/forgr/capacitor_updater/BundleStatus.java +23 -23
  9. package/android/src/main/java/ee/forgr/capacitor_updater/Callback.java +13 -0
  10. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +2159 -1234
  11. package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +1507 -0
  12. package/android/src/main/java/ee/forgr/capacitor_updater/CryptoCipher.java +330 -121
  13. package/android/src/main/java/ee/forgr/capacitor_updater/DataManager.java +28 -0
  14. package/android/src/main/java/ee/forgr/capacitor_updater/DelayCondition.java +43 -49
  15. package/android/src/main/java/ee/forgr/capacitor_updater/DelayUntilNext.java +4 -4
  16. package/android/src/main/java/ee/forgr/capacitor_updater/DelayUpdateUtils.java +260 -0
  17. package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +221 -0
  18. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +808 -117
  19. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +156 -0
  20. package/android/src/main/java/ee/forgr/capacitor_updater/InternalUtils.java +32 -0
  21. package/android/src/main/java/ee/forgr/capacitor_updater/Logger.java +338 -0
  22. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +72 -0
  23. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +169 -0
  24. package/dist/docs.json +2187 -625
  25. package/dist/esm/definitions.d.ts +1286 -249
  26. package/dist/esm/definitions.js.map +1 -1
  27. package/dist/esm/history.d.ts +1 -0
  28. package/dist/esm/history.js +283 -0
  29. package/dist/esm/history.js.map +1 -0
  30. package/dist/esm/index.d.ts +3 -2
  31. package/dist/esm/index.js +5 -4
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/web.d.ts +36 -41
  34. package/dist/esm/web.js +94 -35
  35. package/dist/esm/web.js.map +1 -1
  36. package/dist/plugin.cjs.js +376 -35
  37. package/dist/plugin.cjs.js.map +1 -1
  38. package/dist/plugin.js +376 -35
  39. package/dist/plugin.js.map +1 -1
  40. package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +69 -0
  41. package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +55 -0
  42. package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/BundleInfo.swift +37 -10
  43. package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/BundleStatus.swift +1 -1
  44. package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +1605 -0
  45. package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +1526 -0
  46. package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +267 -0
  47. package/ios/Sources/CapacitorUpdaterPlugin/DelayUpdateUtils.swift +220 -0
  48. package/ios/Sources/CapacitorUpdaterPlugin/DeviceIdHelper.swift +120 -0
  49. package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +311 -0
  50. package/ios/Sources/CapacitorUpdaterPlugin/Logger.swift +310 -0
  51. package/ios/Sources/CapacitorUpdaterPlugin/RSA.swift +274 -0
  52. package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +112 -0
  53. package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/UserDefaultsExtension.swift +0 -2
  54. package/package.json +41 -35
  55. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdater.java +0 -1130
  56. package/ios/Plugin/CapacitorUpdater.swift +0 -858
  57. package/ios/Plugin/CapacitorUpdaterPlugin.h +0 -10
  58. package/ios/Plugin/CapacitorUpdaterPlugin.m +0 -27
  59. package/ios/Plugin/CapacitorUpdaterPlugin.swift +0 -675
  60. package/ios/Plugin/CryptoCipher.swift +0 -240
  61. /package/{LICENCE → LICENSE} +0 -0
  62. /package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/DelayCondition.swift +0 -0
  63. /package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/DelayUntilNext.swift +0 -0
  64. /package/ios/{Plugin → Sources/CapacitorUpdaterPlugin}/Info.plist +0 -0
@@ -2,12 +2,294 @@
2
2
 
3
3
  var core = require('@capacitor/core');
4
4
 
5
+ /*
6
+ * Maintains navigation history across Capgo-controlled reloads when keepUrlPathAfterReload is enabled.
7
+ */
8
+ const KEEP_FLAG_KEY = '__capgo_keep_url_path_after_reload';
9
+ const HISTORY_STORAGE_KEY = '__capgo_history_stack__';
10
+ const MAX_STACK_ENTRIES = 100;
11
+ const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof history !== 'undefined';
12
+ if (isBrowser) {
13
+ const win = window;
14
+ if (!win.__capgoHistoryPatched) {
15
+ win.__capgoHistoryPatched = true;
16
+ const isFeatureConfigured = () => {
17
+ try {
18
+ if (win.__capgoKeepUrlPathAfterReload) {
19
+ return true;
20
+ }
21
+ }
22
+ catch (err) {
23
+ // ignore access issues
24
+ }
25
+ try {
26
+ return window.localStorage.getItem(KEEP_FLAG_KEY) === '1';
27
+ }
28
+ catch (err) {
29
+ return false;
30
+ }
31
+ };
32
+ const readStored = () => {
33
+ try {
34
+ const raw = window.sessionStorage.getItem(HISTORY_STORAGE_KEY);
35
+ if (!raw) {
36
+ return { stack: [], index: -1 };
37
+ }
38
+ const parsed = JSON.parse(raw);
39
+ if (!parsed || !Array.isArray(parsed.stack) || typeof parsed.index !== 'number') {
40
+ return { stack: [], index: -1 };
41
+ }
42
+ return parsed;
43
+ }
44
+ catch (err) {
45
+ return { stack: [], index: -1 };
46
+ }
47
+ };
48
+ const writeStored = (stack, index) => {
49
+ try {
50
+ window.sessionStorage.setItem(HISTORY_STORAGE_KEY, JSON.stringify({ stack, index }));
51
+ }
52
+ catch (err) {
53
+ // Storage might be unavailable; fail silently.
54
+ }
55
+ };
56
+ const clearStored = () => {
57
+ try {
58
+ window.sessionStorage.removeItem(HISTORY_STORAGE_KEY);
59
+ }
60
+ catch (err) {
61
+ // ignore
62
+ }
63
+ };
64
+ const normalize = (url) => {
65
+ try {
66
+ const base = url !== null && url !== void 0 ? url : window.location.href;
67
+ const parsed = new URL(base instanceof URL ? base.toString() : base, window.location.href);
68
+ return `${parsed.pathname}${parsed.search}${parsed.hash}`;
69
+ }
70
+ catch (err) {
71
+ return null;
72
+ }
73
+ };
74
+ const trimStack = (stack, index) => {
75
+ if (stack.length <= MAX_STACK_ENTRIES) {
76
+ return { stack, index };
77
+ }
78
+ const start = stack.length - MAX_STACK_ENTRIES;
79
+ const trimmed = stack.slice(start);
80
+ const adjustedIndex = Math.max(0, index - start);
81
+ return { stack: trimmed, index: adjustedIndex };
82
+ };
83
+ const runWhenReady = (fn) => {
84
+ if (document.readyState === 'complete' || document.readyState === 'interactive') {
85
+ fn();
86
+ }
87
+ else {
88
+ window.addEventListener('DOMContentLoaded', fn, { once: true });
89
+ }
90
+ };
91
+ let featureActive = false;
92
+ let isRestoring = false;
93
+ let restoreScheduled = false;
94
+ const ensureCurrentTracked = () => {
95
+ if (!featureActive) {
96
+ return;
97
+ }
98
+ const stored = readStored();
99
+ const current = normalize();
100
+ if (!current) {
101
+ return;
102
+ }
103
+ if (stored.stack.length === 0) {
104
+ stored.stack.push(current);
105
+ stored.index = 0;
106
+ writeStored(stored.stack, stored.index);
107
+ return;
108
+ }
109
+ if (stored.index < 0 || stored.index >= stored.stack.length) {
110
+ stored.index = stored.stack.length - 1;
111
+ }
112
+ if (stored.stack[stored.index] !== current) {
113
+ stored.stack[stored.index] = current;
114
+ writeStored(stored.stack, stored.index);
115
+ }
116
+ };
117
+ const record = (url, replace) => {
118
+ if (!featureActive || isRestoring) {
119
+ return;
120
+ }
121
+ const normalized = normalize(url);
122
+ if (!normalized) {
123
+ return;
124
+ }
125
+ let { stack, index } = readStored();
126
+ if (stack.length === 0) {
127
+ stack.push(normalized);
128
+ index = stack.length - 1;
129
+ }
130
+ else if (replace) {
131
+ if (index < 0 || index >= stack.length) {
132
+ index = stack.length - 1;
133
+ }
134
+ stack[index] = normalized;
135
+ }
136
+ else {
137
+ if (index >= stack.length - 1) {
138
+ stack.push(normalized);
139
+ index = stack.length - 1;
140
+ }
141
+ else {
142
+ stack = stack.slice(0, index + 1);
143
+ stack.push(normalized);
144
+ index = stack.length - 1;
145
+ }
146
+ }
147
+ ({ stack, index } = trimStack(stack, index));
148
+ writeStored(stack, index);
149
+ };
150
+ const restoreHistory = () => {
151
+ if (!featureActive || isRestoring) {
152
+ return;
153
+ }
154
+ const stored = readStored();
155
+ if (stored.stack.length === 0) {
156
+ ensureCurrentTracked();
157
+ return;
158
+ }
159
+ const targetIndex = stored.index >= 0 && stored.index < stored.stack.length ? stored.index : stored.stack.length - 1;
160
+ const normalizedCurrent = normalize();
161
+ if (stored.stack.length === 1 && normalizedCurrent === stored.stack[0]) {
162
+ return;
163
+ }
164
+ const firstEntry = stored.stack[0];
165
+ if (!firstEntry) {
166
+ return;
167
+ }
168
+ isRestoring = true;
169
+ try {
170
+ history.replaceState(history.state, document.title, firstEntry);
171
+ for (let i = 1; i < stored.stack.length; i += 1) {
172
+ history.pushState(history.state, document.title, stored.stack[i]);
173
+ }
174
+ }
175
+ catch (err) {
176
+ isRestoring = false;
177
+ return;
178
+ }
179
+ isRestoring = false;
180
+ const currentIndex = stored.stack.length - 1;
181
+ const offset = targetIndex - currentIndex;
182
+ if (offset !== 0) {
183
+ history.go(offset);
184
+ }
185
+ else {
186
+ history.replaceState(history.state, document.title, stored.stack[targetIndex]);
187
+ window.dispatchEvent(new PopStateEvent('popstate'));
188
+ }
189
+ };
190
+ const scheduleRestore = () => {
191
+ if (!featureActive || restoreScheduled) {
192
+ return;
193
+ }
194
+ restoreScheduled = true;
195
+ runWhenReady(() => {
196
+ restoreScheduled = false;
197
+ restoreHistory();
198
+ });
199
+ };
200
+ let originalPushState = null;
201
+ let originalReplaceState = null;
202
+ const popstateHandler = () => {
203
+ if (!featureActive || isRestoring) {
204
+ return;
205
+ }
206
+ const normalized = normalize();
207
+ if (!normalized) {
208
+ return;
209
+ }
210
+ const stored = readStored();
211
+ const idx = stored.stack.lastIndexOf(normalized);
212
+ if (idx >= 0) {
213
+ stored.index = idx;
214
+ }
215
+ else {
216
+ stored.stack.push(normalized);
217
+ stored.index = stored.stack.length - 1;
218
+ }
219
+ const trimmed = trimStack(stored.stack, stored.index);
220
+ writeStored(trimmed.stack, trimmed.index);
221
+ };
222
+ const patchHistory = () => {
223
+ if (originalPushState && originalReplaceState) {
224
+ return;
225
+ }
226
+ originalPushState = history.pushState;
227
+ originalReplaceState = history.replaceState;
228
+ history.pushState = function pushStatePatched(state, title, url) {
229
+ const result = originalPushState.call(history, state, title, url);
230
+ record(url, false);
231
+ return result;
232
+ };
233
+ history.replaceState = function replaceStatePatched(state, title, url) {
234
+ const result = originalReplaceState.call(history, state, title, url);
235
+ record(url, true);
236
+ return result;
237
+ };
238
+ window.addEventListener('popstate', popstateHandler);
239
+ };
240
+ const unpatchHistory = () => {
241
+ if (originalPushState) {
242
+ history.pushState = originalPushState;
243
+ originalPushState = null;
244
+ }
245
+ if (originalReplaceState) {
246
+ history.replaceState = originalReplaceState;
247
+ originalReplaceState = null;
248
+ }
249
+ window.removeEventListener('popstate', popstateHandler);
250
+ };
251
+ const setFeatureActive = (enabled) => {
252
+ if (featureActive === enabled) {
253
+ if (featureActive) {
254
+ ensureCurrentTracked();
255
+ scheduleRestore();
256
+ }
257
+ return;
258
+ }
259
+ featureActive = enabled;
260
+ if (featureActive) {
261
+ patchHistory();
262
+ ensureCurrentTracked();
263
+ scheduleRestore();
264
+ }
265
+ else {
266
+ unpatchHistory();
267
+ clearStored();
268
+ }
269
+ };
270
+ window.addEventListener('CapacitorUpdaterKeepUrlPathAfterReload', (event) => {
271
+ var _a;
272
+ const evt = event;
273
+ const enabled = (_a = evt === null || evt === void 0 ? void 0 : evt.detail) === null || _a === void 0 ? void 0 : _a.enabled;
274
+ if (typeof enabled === 'boolean') {
275
+ win.__capgoKeepUrlPathAfterReload = enabled;
276
+ setFeatureActive(enabled);
277
+ }
278
+ else {
279
+ win.__capgoKeepUrlPathAfterReload = true;
280
+ setFeatureActive(true);
281
+ }
282
+ });
283
+ setFeatureActive(isFeatureConfigured());
284
+ }
285
+ }
286
+
5
287
  /*
6
288
  * This Source Code Form is subject to the terms of the Mozilla Public
7
289
  * License, v. 2.0. If a copy of the MPL was not distributed with this
8
290
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
9
291
  */
10
- const CapacitorUpdater = core.registerPlugin("CapacitorUpdater", {
292
+ const CapacitorUpdater = core.registerPlugin('CapacitorUpdater', {
11
293
  web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.CapacitorUpdaterWeb()),
12
294
  });
13
295
 
@@ -17,94 +299,153 @@ const CapacitorUpdater = core.registerPlugin("CapacitorUpdater", {
17
299
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
18
300
  */
19
301
  const BUNDLE_BUILTIN = {
20
- status: "success",
21
- version: "",
22
- downloaded: "1970-01-01T00:00:00.000Z",
23
- id: "builtin",
24
- checksum: "",
302
+ status: 'success',
303
+ version: '',
304
+ downloaded: '1970-01-01T00:00:00.000Z',
305
+ id: 'builtin',
306
+ checksum: '',
25
307
  };
26
308
  class CapacitorUpdaterWeb extends core.WebPlugin {
309
+ async setStatsUrl(options) {
310
+ console.warn('Cannot setStatsUrl in web', options);
311
+ return;
312
+ }
313
+ async setUpdateUrl(options) {
314
+ console.warn('Cannot setUpdateUrl in web', options);
315
+ return;
316
+ }
317
+ async setChannelUrl(options) {
318
+ console.warn('Cannot setChannelUrl in web', options);
319
+ return;
320
+ }
27
321
  async download(options) {
28
- console.warn("Cannot download version in web", options);
322
+ console.warn('Cannot download version in web', options);
29
323
  return BUNDLE_BUILTIN;
30
324
  }
31
325
  async next(options) {
32
- console.warn("Cannot set next version in web", options);
326
+ console.warn('Cannot set next version in web', options);
33
327
  return BUNDLE_BUILTIN;
34
328
  }
35
329
  async isAutoUpdateEnabled() {
36
- console.warn("Cannot get isAutoUpdateEnabled in web");
330
+ console.warn('Cannot get isAutoUpdateEnabled in web');
37
331
  return { enabled: false };
38
332
  }
39
333
  async set(options) {
40
- console.warn("Cannot set active bundle in web", options);
334
+ console.warn('Cannot set active bundle in web', options);
41
335
  return;
42
336
  }
43
337
  async getDeviceId() {
44
- console.warn("Cannot get ID in web");
45
- return { deviceId: "default" };
338
+ console.warn('Cannot get ID in web');
339
+ return { deviceId: 'default' };
340
+ }
341
+ async getBuiltinVersion() {
342
+ console.warn('Cannot get version in web');
343
+ return { version: 'default' };
46
344
  }
47
345
  async getPluginVersion() {
48
- console.warn("Cannot get plugin version in web");
49
- return { version: "default" };
346
+ console.warn('Cannot get plugin version in web');
347
+ return { version: 'default' };
50
348
  }
51
349
  async delete(options) {
52
- console.warn("Cannot delete bundle in web", options);
350
+ console.warn('Cannot delete bundle in web', options);
351
+ }
352
+ async setBundleError(options) {
353
+ console.warn('Cannot setBundleError in web', options);
354
+ return BUNDLE_BUILTIN;
53
355
  }
54
356
  async list() {
55
- console.warn("Cannot list bundles in web");
357
+ console.warn('Cannot list bundles in web');
56
358
  return { bundles: [] };
57
359
  }
58
360
  async reset(options) {
59
- console.warn("Cannot reset version in web", options);
361
+ console.warn('Cannot reset version in web', options);
60
362
  }
61
363
  async current() {
62
- console.warn("Cannot get current bundle in web");
63
- return { bundle: BUNDLE_BUILTIN, native: "0.0.0" };
364
+ console.warn('Cannot get current bundle in web');
365
+ return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };
64
366
  }
65
367
  async reload() {
66
- console.warn("Cannot reload current bundle in web");
368
+ console.warn('Cannot reload current bundle in web');
67
369
  return;
68
370
  }
69
371
  async getLatest() {
70
- console.warn("Cannot getLatest current bundle in web");
372
+ console.warn('Cannot getLatest current bundle in web');
71
373
  return {
72
- version: "0.0.0",
73
- message: "Cannot getLatest current bundle in web",
374
+ version: '0.0.0',
375
+ message: 'Cannot getLatest current bundle in web',
74
376
  };
75
377
  }
76
378
  async setChannel(options) {
77
- console.warn("Cannot setChannel in web", options);
379
+ console.warn('Cannot setChannel in web', options);
78
380
  return {
79
- status: "error",
80
- error: "Cannot setChannel in web",
381
+ status: 'error',
382
+ error: 'Cannot setChannel in web',
81
383
  };
82
384
  }
385
+ async unsetChannel(options) {
386
+ console.warn('Cannot unsetChannel in web', options);
387
+ return;
388
+ }
83
389
  async setCustomId(options) {
84
- console.warn("Cannot setCustomId in web", options);
390
+ console.warn('Cannot setCustomId in web', options);
85
391
  return;
86
392
  }
87
393
  async getChannel() {
88
- console.warn("Cannot getChannel in web");
394
+ console.warn('Cannot getChannel in web');
89
395
  return {
90
- status: "error",
91
- error: "Cannot getChannel in web",
396
+ status: 'error',
397
+ error: 'Cannot getChannel in web',
398
+ };
399
+ }
400
+ async listChannels() {
401
+ console.warn('Cannot listChannels in web');
402
+ throw {
403
+ message: 'Cannot listChannels in web',
404
+ error: 'platform_not_supported',
92
405
  };
93
406
  }
94
407
  async notifyAppReady() {
95
- console.warn("Cannot notify App Ready in web");
96
- return BUNDLE_BUILTIN;
408
+ return { bundle: BUNDLE_BUILTIN };
97
409
  }
98
410
  async setMultiDelay(options) {
99
- console.warn("Cannot setMultiDelay in web", options === null || options === void 0 ? void 0 : options.delayConditions);
411
+ console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);
100
412
  return;
101
413
  }
102
414
  async setDelay(option) {
103
- console.warn("Cannot setDelay in web", option);
415
+ console.warn('Cannot setDelay in web', option);
104
416
  return;
105
417
  }
106
418
  async cancelDelay() {
107
- console.warn("Cannot cancelDelay in web");
419
+ console.warn('Cannot cancelDelay in web');
420
+ return;
421
+ }
422
+ async isAutoUpdateAvailable() {
423
+ console.warn('Cannot isAutoUpdateAvailable in web');
424
+ return { available: false };
425
+ }
426
+ async getCurrentBundle() {
427
+ console.warn('Cannot get current bundle in web');
428
+ return BUNDLE_BUILTIN;
429
+ }
430
+ async getNextBundle() {
431
+ return Promise.resolve(null);
432
+ }
433
+ async getFailedUpdate() {
434
+ console.warn('Cannot getFailedUpdate in web');
435
+ return null;
436
+ }
437
+ async setShakeMenu(_options) {
438
+ throw this.unimplemented('Shake menu not available on web platform');
439
+ }
440
+ async isShakeMenuEnabled() {
441
+ return Promise.resolve({ enabled: false });
442
+ }
443
+ async getAppId() {
444
+ console.warn('Cannot getAppId in web');
445
+ return { appId: 'default' };
446
+ }
447
+ async setAppId(options) {
448
+ console.warn('Cannot setAppId in web', options);
108
449
  return;
109
450
  }
110
451
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from \"@capacitor/core\";\nconst CapacitorUpdater = registerPlugin(\"CapacitorUpdater\", {\n web: () => import(\"./web\").then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from \"./definitions\";\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from \"@capacitor/core\";\nconst BUNDLE_BUILTIN = {\n status: \"success\",\n version: \"\",\n downloaded: \"1970-01-01T00:00:00.000Z\",\n id: \"builtin\",\n checksum: \"\",\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async download(options) {\n console.warn(\"Cannot download version in web\", options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn(\"Cannot set next version in web\", options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn(\"Cannot get isAutoUpdateEnabled in web\");\n return { enabled: false };\n }\n async set(options) {\n console.warn(\"Cannot set active bundle in web\", options);\n return;\n }\n async getDeviceId() {\n console.warn(\"Cannot get ID in web\");\n return { deviceId: \"default\" };\n }\n async getPluginVersion() {\n console.warn(\"Cannot get plugin version in web\");\n return { version: \"default\" };\n }\n async delete(options) {\n console.warn(\"Cannot delete bundle in web\", options);\n }\n async list() {\n console.warn(\"Cannot list bundles in web\");\n return { bundles: [] };\n }\n async reset(options) {\n console.warn(\"Cannot reset version in web\", options);\n }\n async current() {\n console.warn(\"Cannot get current bundle in web\");\n return { bundle: BUNDLE_BUILTIN, native: \"0.0.0\" };\n }\n async reload() {\n console.warn(\"Cannot reload current bundle in web\");\n return;\n }\n async getLatest() {\n console.warn(\"Cannot getLatest current bundle in web\");\n return {\n version: \"0.0.0\",\n message: \"Cannot getLatest current bundle in web\",\n };\n }\n async setChannel(options) {\n console.warn(\"Cannot setChannel in web\", options);\n return {\n status: \"error\",\n error: \"Cannot setChannel in web\",\n };\n }\n async setCustomId(options) {\n console.warn(\"Cannot setCustomId in web\", options);\n return;\n }\n async getChannel() {\n console.warn(\"Cannot getChannel in web\");\n return {\n status: \"error\",\n error: \"Cannot getChannel in web\",\n };\n }\n async notifyAppReady() {\n console.warn(\"Cannot notify App Ready in web\");\n return BUNDLE_BUILTIN;\n }\n async setMultiDelay(options) {\n console.warn(\"Cannot setMultiDelay in web\", options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn(\"Cannot setDelay in web\", option);\n return;\n }\n async cancelDelay() {\n console.warn(\"Cannot cancelDelay in web\");\n return;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/history.js","esm/index.js","esm/web.js"],"sourcesContent":["/*\n * Maintains navigation history across Capgo-controlled reloads when keepUrlPathAfterReload is enabled.\n */\nconst KEEP_FLAG_KEY = '__capgo_keep_url_path_after_reload';\nconst HISTORY_STORAGE_KEY = '__capgo_history_stack__';\nconst MAX_STACK_ENTRIES = 100;\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof history !== 'undefined';\nif (isBrowser) {\n const win = window;\n if (!win.__capgoHistoryPatched) {\n win.__capgoHistoryPatched = true;\n const isFeatureConfigured = () => {\n try {\n if (win.__capgoKeepUrlPathAfterReload) {\n return true;\n }\n }\n catch (err) {\n // ignore access issues\n }\n try {\n return window.localStorage.getItem(KEEP_FLAG_KEY) === '1';\n }\n catch (err) {\n return false;\n }\n };\n const readStored = () => {\n try {\n const raw = window.sessionStorage.getItem(HISTORY_STORAGE_KEY);\n if (!raw) {\n return { stack: [], index: -1 };\n }\n const parsed = JSON.parse(raw);\n if (!parsed || !Array.isArray(parsed.stack) || typeof parsed.index !== 'number') {\n return { stack: [], index: -1 };\n }\n return parsed;\n }\n catch (err) {\n return { stack: [], index: -1 };\n }\n };\n const writeStored = (stack, index) => {\n try {\n window.sessionStorage.setItem(HISTORY_STORAGE_KEY, JSON.stringify({ stack, index }));\n }\n catch (err) {\n // Storage might be unavailable; fail silently.\n }\n };\n const clearStored = () => {\n try {\n window.sessionStorage.removeItem(HISTORY_STORAGE_KEY);\n }\n catch (err) {\n // ignore\n }\n };\n const normalize = (url) => {\n try {\n const base = url !== null && url !== void 0 ? url : window.location.href;\n const parsed = new URL(base instanceof URL ? base.toString() : base, window.location.href);\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n catch (err) {\n return null;\n }\n };\n const trimStack = (stack, index) => {\n if (stack.length <= MAX_STACK_ENTRIES) {\n return { stack, index };\n }\n const start = stack.length - MAX_STACK_ENTRIES;\n const trimmed = stack.slice(start);\n const adjustedIndex = Math.max(0, index - start);\n return { stack: trimmed, index: adjustedIndex };\n };\n const runWhenReady = (fn) => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n fn();\n }\n else {\n window.addEventListener('DOMContentLoaded', fn, { once: true });\n }\n };\n let featureActive = false;\n let isRestoring = false;\n let restoreScheduled = false;\n const ensureCurrentTracked = () => {\n if (!featureActive) {\n return;\n }\n const stored = readStored();\n const current = normalize();\n if (!current) {\n return;\n }\n if (stored.stack.length === 0) {\n stored.stack.push(current);\n stored.index = 0;\n writeStored(stored.stack, stored.index);\n return;\n }\n if (stored.index < 0 || stored.index >= stored.stack.length) {\n stored.index = stored.stack.length - 1;\n }\n if (stored.stack[stored.index] !== current) {\n stored.stack[stored.index] = current;\n writeStored(stored.stack, stored.index);\n }\n };\n const record = (url, replace) => {\n if (!featureActive || isRestoring) {\n return;\n }\n const normalized = normalize(url);\n if (!normalized) {\n return;\n }\n let { stack, index } = readStored();\n if (stack.length === 0) {\n stack.push(normalized);\n index = stack.length - 1;\n }\n else if (replace) {\n if (index < 0 || index >= stack.length) {\n index = stack.length - 1;\n }\n stack[index] = normalized;\n }\n else {\n if (index >= stack.length - 1) {\n stack.push(normalized);\n index = stack.length - 1;\n }\n else {\n stack = stack.slice(0, index + 1);\n stack.push(normalized);\n index = stack.length - 1;\n }\n }\n ({ stack, index } = trimStack(stack, index));\n writeStored(stack, index);\n };\n const restoreHistory = () => {\n if (!featureActive || isRestoring) {\n return;\n }\n const stored = readStored();\n if (stored.stack.length === 0) {\n ensureCurrentTracked();\n return;\n }\n const targetIndex = stored.index >= 0 && stored.index < stored.stack.length ? stored.index : stored.stack.length - 1;\n const normalizedCurrent = normalize();\n if (stored.stack.length === 1 && normalizedCurrent === stored.stack[0]) {\n return;\n }\n const firstEntry = stored.stack[0];\n if (!firstEntry) {\n return;\n }\n isRestoring = true;\n try {\n history.replaceState(history.state, document.title, firstEntry);\n for (let i = 1; i < stored.stack.length; i += 1) {\n history.pushState(history.state, document.title, stored.stack[i]);\n }\n }\n catch (err) {\n isRestoring = false;\n return;\n }\n isRestoring = false;\n const currentIndex = stored.stack.length - 1;\n const offset = targetIndex - currentIndex;\n if (offset !== 0) {\n history.go(offset);\n }\n else {\n history.replaceState(history.state, document.title, stored.stack[targetIndex]);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n };\n const scheduleRestore = () => {\n if (!featureActive || restoreScheduled) {\n return;\n }\n restoreScheduled = true;\n runWhenReady(() => {\n restoreScheduled = false;\n restoreHistory();\n });\n };\n let originalPushState = null;\n let originalReplaceState = null;\n const popstateHandler = () => {\n if (!featureActive || isRestoring) {\n return;\n }\n const normalized = normalize();\n if (!normalized) {\n return;\n }\n const stored = readStored();\n const idx = stored.stack.lastIndexOf(normalized);\n if (idx >= 0) {\n stored.index = idx;\n }\n else {\n stored.stack.push(normalized);\n stored.index = stored.stack.length - 1;\n }\n const trimmed = trimStack(stored.stack, stored.index);\n writeStored(trimmed.stack, trimmed.index);\n };\n const patchHistory = () => {\n if (originalPushState && originalReplaceState) {\n return;\n }\n originalPushState = history.pushState;\n originalReplaceState = history.replaceState;\n history.pushState = function pushStatePatched(state, title, url) {\n const result = originalPushState.call(history, state, title, url);\n record(url, false);\n return result;\n };\n history.replaceState = function replaceStatePatched(state, title, url) {\n const result = originalReplaceState.call(history, state, title, url);\n record(url, true);\n return result;\n };\n window.addEventListener('popstate', popstateHandler);\n };\n const unpatchHistory = () => {\n if (originalPushState) {\n history.pushState = originalPushState;\n originalPushState = null;\n }\n if (originalReplaceState) {\n history.replaceState = originalReplaceState;\n originalReplaceState = null;\n }\n window.removeEventListener('popstate', popstateHandler);\n };\n const setFeatureActive = (enabled) => {\n if (featureActive === enabled) {\n if (featureActive) {\n ensureCurrentTracked();\n scheduleRestore();\n }\n return;\n }\n featureActive = enabled;\n if (featureActive) {\n patchHistory();\n ensureCurrentTracked();\n scheduleRestore();\n }\n else {\n unpatchHistory();\n clearStored();\n }\n };\n window.addEventListener('CapacitorUpdaterKeepUrlPathAfterReload', (event) => {\n var _a;\n const evt = event;\n const enabled = (_a = evt === null || evt === void 0 ? void 0 : evt.detail) === null || _a === void 0 ? void 0 : _a.enabled;\n if (typeof enabled === 'boolean') {\n win.__capgoKeepUrlPathAfterReload = enabled;\n setFeatureActive(enabled);\n }\n else {\n win.__capgoKeepUrlPathAfterReload = true;\n setFeatureActive(true);\n }\n });\n setFeatureActive(isFeatureConfigured());\n }\n}\nexport {};\n//# sourceMappingURL=history.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { registerPlugin } from '@capacitor/core';\nimport './history';\nconst CapacitorUpdater = registerPlugin('CapacitorUpdater', {\n web: () => import('./web').then((m) => new m.CapacitorUpdaterWeb()),\n});\nexport * from './definitions';\nexport { CapacitorUpdater };\n//# sourceMappingURL=index.js.map","/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport { WebPlugin } from '@capacitor/core';\nconst BUNDLE_BUILTIN = {\n status: 'success',\n version: '',\n downloaded: '1970-01-01T00:00:00.000Z',\n id: 'builtin',\n checksum: '',\n};\nexport class CapacitorUpdaterWeb extends WebPlugin {\n async setStatsUrl(options) {\n console.warn('Cannot setStatsUrl in web', options);\n return;\n }\n async setUpdateUrl(options) {\n console.warn('Cannot setUpdateUrl in web', options);\n return;\n }\n async setChannelUrl(options) {\n console.warn('Cannot setChannelUrl in web', options);\n return;\n }\n async download(options) {\n console.warn('Cannot download version in web', options);\n return BUNDLE_BUILTIN;\n }\n async next(options) {\n console.warn('Cannot set next version in web', options);\n return BUNDLE_BUILTIN;\n }\n async isAutoUpdateEnabled() {\n console.warn('Cannot get isAutoUpdateEnabled in web');\n return { enabled: false };\n }\n async set(options) {\n console.warn('Cannot set active bundle in web', options);\n return;\n }\n async getDeviceId() {\n console.warn('Cannot get ID in web');\n return { deviceId: 'default' };\n }\n async getBuiltinVersion() {\n console.warn('Cannot get version in web');\n return { version: 'default' };\n }\n async getPluginVersion() {\n console.warn('Cannot get plugin version in web');\n return { version: 'default' };\n }\n async delete(options) {\n console.warn('Cannot delete bundle in web', options);\n }\n async setBundleError(options) {\n console.warn('Cannot setBundleError in web', options);\n return BUNDLE_BUILTIN;\n }\n async list() {\n console.warn('Cannot list bundles in web');\n return { bundles: [] };\n }\n async reset(options) {\n console.warn('Cannot reset version in web', options);\n }\n async current() {\n console.warn('Cannot get current bundle in web');\n return { bundle: BUNDLE_BUILTIN, native: '0.0.0' };\n }\n async reload() {\n console.warn('Cannot reload current bundle in web');\n return;\n }\n async getLatest() {\n console.warn('Cannot getLatest current bundle in web');\n return {\n version: '0.0.0',\n message: 'Cannot getLatest current bundle in web',\n };\n }\n async setChannel(options) {\n console.warn('Cannot setChannel in web', options);\n return {\n status: 'error',\n error: 'Cannot setChannel in web',\n };\n }\n async unsetChannel(options) {\n console.warn('Cannot unsetChannel in web', options);\n return;\n }\n async setCustomId(options) {\n console.warn('Cannot setCustomId in web', options);\n return;\n }\n async getChannel() {\n console.warn('Cannot getChannel in web');\n return {\n status: 'error',\n error: 'Cannot getChannel in web',\n };\n }\n async listChannels() {\n console.warn('Cannot listChannels in web');\n throw {\n message: 'Cannot listChannels in web',\n error: 'platform_not_supported',\n };\n }\n async notifyAppReady() {\n return { bundle: BUNDLE_BUILTIN };\n }\n async setMultiDelay(options) {\n console.warn('Cannot setMultiDelay in web', options === null || options === void 0 ? void 0 : options.delayConditions);\n return;\n }\n async setDelay(option) {\n console.warn('Cannot setDelay in web', option);\n return;\n }\n async cancelDelay() {\n console.warn('Cannot cancelDelay in web');\n return;\n }\n async isAutoUpdateAvailable() {\n console.warn('Cannot isAutoUpdateAvailable in web');\n return { available: false };\n }\n async getCurrentBundle() {\n console.warn('Cannot get current bundle in web');\n return BUNDLE_BUILTIN;\n }\n async getNextBundle() {\n return Promise.resolve(null);\n }\n async getFailedUpdate() {\n console.warn('Cannot getFailedUpdate in web');\n return null;\n }\n async setShakeMenu(_options) {\n throw this.unimplemented('Shake menu not available on web platform');\n }\n async isShakeMenuEnabled() {\n return Promise.resolve({ enabled: false });\n }\n async getAppId() {\n console.warn('Cannot getAppId in web');\n return { appId: 'default' };\n }\n async setAppId(options) {\n console.warn('Cannot setAppId in web', options);\n return;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}