@capgo/capacitor-launch-navigator 8.0.20 → 8.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/plugin.js CHANGED
@@ -20,9 +20,14 @@ var capacitorLaunchNavigator = (function (exports, core) {
20
20
  IOSNavigationApp["MOOVIT"] = "moovit";
21
21
  IOSNavigationApp["LYFT"] = "lyft";
22
22
  IOSNavigationApp["MAPS_ME"] = "mapsme";
23
+ IOSNavigationApp["GURU_MAPS"] = "guru_maps";
24
+ IOSNavigationApp["ORGANIC_MAPS"] = "organic_maps";
25
+ IOSNavigationApp["YANDEX_MAPS"] = "yandex_maps";
26
+ IOSNavigationApp["TWO_GIS"] = "2gis";
23
27
  IOSNavigationApp["CABIFY"] = "cabify";
24
28
  IOSNavigationApp["BAIDU"] = "baidu";
25
29
  IOSNavigationApp["GAODE"] = "gaode";
30
+ IOSNavigationApp["TESLA"] = "tesla";
26
31
  IOSNavigationApp["TAXI_99"] = "99taxi";
27
32
  })(exports.IOSNavigationApp || (exports.IOSNavigationApp = {}));
28
33
  /**
@@ -40,9 +45,16 @@ var capacitorLaunchNavigator = (function (exports, core) {
40
45
  AndroidNavigationApp["MOOVIT"] = "moovit";
41
46
  AndroidNavigationApp["LYFT"] = "lyft";
42
47
  AndroidNavigationApp["MAPS_ME"] = "mapsme";
48
+ AndroidNavigationApp["TOMTOM"] = "tomtom";
49
+ AndroidNavigationApp["GURU_MAPS"] = "guru_maps";
50
+ AndroidNavigationApp["ORGANIC_MAPS"] = "organic_maps";
51
+ AndroidNavigationApp["YANDEX_MAPS"] = "yandex_maps";
52
+ AndroidNavigationApp["MAPY"] = "mapy";
53
+ AndroidNavigationApp["TWO_GIS"] = "2gis";
43
54
  AndroidNavigationApp["CABIFY"] = "cabify";
44
55
  AndroidNavigationApp["BAIDU"] = "baidu";
45
56
  AndroidNavigationApp["GAODE"] = "gaode";
57
+ AndroidNavigationApp["TESLA"] = "tesla";
46
58
  })(exports.AndroidNavigationApp || (exports.AndroidNavigationApp = {}));
47
59
  /**
48
60
  * Transport modes
@@ -68,6 +80,44 @@ var capacitorLaunchNavigator = (function (exports, core) {
68
80
  web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.LaunchNavigatorWeb()),
69
81
  });
70
82
 
83
+ const DEFAULT_ICON_CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000;
84
+ const ICON_CACHE_NAME = 'capgo-launch-navigator-icons';
85
+ const ICON_METADATA_PREFIX = 'capgo-launch-navigator-icon:';
86
+ const BUILT_IN_ICON_PROVIDERS = [
87
+ iconProvider('google_maps', 'Google Maps', 'https://www.google.com/maps'),
88
+ iconProvider('waze', 'Waze', 'https://www.waze.com'),
89
+ iconProvider('citymapper', 'Citymapper', 'https://citymapper.com'),
90
+ iconProvider('uber', 'Uber', 'https://www.uber.com'),
91
+ iconProvider('yandex', 'Yandex Navigator', 'https://yandex.com/maps'),
92
+ iconProvider('sygic', 'Sygic', 'https://www.sygic.com/gps-navigation'),
93
+ iconProvider('here', 'HERE Maps', 'https://wego.here.com'),
94
+ iconProvider('moovit', 'Moovit', 'https://moovitapp.com'),
95
+ iconProvider('lyft', 'Lyft', 'https://www.lyft.com'),
96
+ iconProvider('mapsme', 'MAPS.ME', 'https://maps.me'),
97
+ iconProvider('guru_maps', 'Guru Maps', 'https://gurumaps.app'),
98
+ iconProvider('organic_maps', 'Organic Maps', 'https://organicmaps.app'),
99
+ iconProvider('yandex_maps', 'Yandex Maps', 'https://yandex.com/maps'),
100
+ iconProvider('mapy', 'Mapy.com', 'https://mapy.com'),
101
+ iconProvider('2gis', '2GIS', 'https://2gis.com'),
102
+ iconProvider('cabify', 'Cabify', 'https://cabify.com'),
103
+ iconProvider('baidu', 'Baidu Maps', 'https://map.baidu.com'),
104
+ iconProvider('gaode', 'Gaode Maps', 'https://www.amap.com'),
105
+ iconProvider('tesla', 'Tesla', 'https://www.tesla.com'),
106
+ iconProvider('apple_maps', 'Apple Maps', 'https://www.apple.com/maps/'),
107
+ iconProvider('tomtom', 'TomTom', 'https://www.tomtom.com'),
108
+ iconProvider('transit_app', 'Transit App', 'https://transitapp.com'),
109
+ iconProvider('garmin_navigon', 'Garmin Navigon', 'https://www.garmin.com'),
110
+ iconProvider('99taxi', '99 Taxi', 'https://99app.com'),
111
+ ];
112
+ function iconProvider(app, name, url) {
113
+ return {
114
+ app,
115
+ name,
116
+ url,
117
+ iconUrl: `https://favicone.com/${new URL(url).hostname}?s=128`,
118
+ };
119
+ }
120
+ const objectUrls = new Map();
71
121
  class LaunchNavigatorWeb extends core.WebPlugin {
72
122
  /**
73
123
  * Navigate to a location using latitude and longitude
@@ -139,9 +189,303 @@ var capacitorLaunchNavigator = (function (exports, core) {
139
189
  app: 'google_maps',
140
190
  };
141
191
  }
192
+ async getAppIcons(options = {}) {
193
+ const providers = resolveIconProviders(options);
194
+ const maxAgeMs = normalizeMaxAge(options.maxAgeMs);
195
+ const forceRefresh = options.forceRefresh === true;
196
+ const icons = [];
197
+ const failures = [];
198
+ await Promise.all(providers.map(async (provider) => {
199
+ try {
200
+ icons.push(await this.getProviderIcon(provider, maxAgeMs, forceRefresh));
201
+ }
202
+ catch (error) {
203
+ failures.push({
204
+ app: String(provider.app),
205
+ name: provider.name,
206
+ sourceUrl: provider.iconUrl || provider.url,
207
+ message: error instanceof Error ? error.message : String(error),
208
+ });
209
+ }
210
+ }));
211
+ return { icons, failures };
212
+ }
213
+ async refreshAppIcons(options = {}) {
214
+ return this.getAppIcons(Object.assign(Object.assign({}, options), { forceRefresh: true }));
215
+ }
216
+ async clearIconCache(options = {}) {
217
+ var _a;
218
+ const appIds = (_a = options.apps) === null || _a === void 0 ? void 0 : _a.map(String);
219
+ const cache = await getCache();
220
+ let cleared = 0;
221
+ if (appIds && appIds.length > 0) {
222
+ for (const app of appIds) {
223
+ cleared += (await deleteCachedIcon(app, cache)) ? 1 : 0;
224
+ }
225
+ return { cleared };
226
+ }
227
+ const storedApps = await getStoredAppIds(cache);
228
+ for (const app of storedApps) {
229
+ cleared += (await deleteCachedIcon(app, cache)) ? 1 : 0;
230
+ }
231
+ return { cleared };
232
+ }
142
233
  async getPluginVersion() {
143
234
  return { version: 'web' };
144
235
  }
236
+ async getProviderIcon(provider, maxAgeMs, forceRefresh) {
237
+ const app = String(provider.app);
238
+ const cached = await readCachedIcon(app);
239
+ const now = Date.now();
240
+ if (cached && !forceRefresh && now - cached.metadata.fetchedAt < maxAgeMs) {
241
+ return toProviderIcon(cached, true, false);
242
+ }
243
+ try {
244
+ const sourceUrl = provider.iconUrl
245
+ ? absolutizeUrl(provider.iconUrl, provider.url)
246
+ : await discoverIconUrl(provider);
247
+ const response = await fetch(sourceUrl);
248
+ if (!response.ok) {
249
+ throw new Error(`Icon request failed with status ${response.status}`);
250
+ }
251
+ const blob = await response.blob();
252
+ const mimeType = blob.type || response.headers.get('content-type') || undefined;
253
+ const cache = await getCache();
254
+ const metadata = {
255
+ app,
256
+ name: provider.name,
257
+ sourceUrl,
258
+ mimeType,
259
+ fetchedAt: now,
260
+ };
261
+ const localUrl = URL.createObjectURL(blob);
262
+ setObjectUrl(app, localUrl);
263
+ if (cache) {
264
+ try {
265
+ await cache.put(cacheRequest(app), new Response(blob, { headers: mimeType ? { 'content-type': mimeType } : undefined }));
266
+ }
267
+ catch (error) {
268
+ console.warn('Unable to persist provider icon in Cache Storage', error);
269
+ }
270
+ }
271
+ writeMetadata(metadata);
272
+ return {
273
+ app,
274
+ name: metadata.name,
275
+ localUrl,
276
+ sourceUrl,
277
+ mimeType,
278
+ fetchedAt: metadata.fetchedAt,
279
+ fromCache: false,
280
+ stale: false,
281
+ };
282
+ }
283
+ catch (error) {
284
+ if (cached) {
285
+ return toProviderIcon(cached, true, true);
286
+ }
287
+ throw error;
288
+ }
289
+ }
290
+ }
291
+ function resolveIconProviders(options) {
292
+ const builtIns = new Map(BUILT_IN_ICON_PROVIDERS.map((provider) => [String(provider.app), provider]));
293
+ const customProviders = options.providers || [];
294
+ for (const provider of customProviders) {
295
+ const app = String(provider.app);
296
+ builtIns.set(app, Object.assign(Object.assign(Object.assign({}, builtIns.get(app)), provider), { app }));
297
+ }
298
+ if (options.apps && options.apps.length > 0) {
299
+ return options.apps.map((app) => builtIns.get(String(app)) || { app: String(app) });
300
+ }
301
+ return Array.from(builtIns.values());
302
+ }
303
+ function normalizeMaxAge(maxAgeMs) {
304
+ if (typeof maxAgeMs !== 'number' || !Number.isFinite(maxAgeMs) || maxAgeMs < 0) {
305
+ return DEFAULT_ICON_CACHE_MAX_AGE_MS;
306
+ }
307
+ return maxAgeMs;
308
+ }
309
+ async function discoverIconUrl(provider) {
310
+ var _a;
311
+ if (!provider.url) {
312
+ throw new Error('Provider url or iconUrl is required');
313
+ }
314
+ const response = await fetch(provider.url);
315
+ if (!response.ok) {
316
+ throw new Error(`Provider page request failed with status ${response.status}`);
317
+ }
318
+ const html = await response.text();
319
+ const linkMatch = html.match(/<link\s+[^>]*rel=["'][^"']*(?:apple-touch-icon|icon)[^"']*["'][^>]*>/i);
320
+ const href = (_a = linkMatch === null || linkMatch === void 0 ? void 0 : linkMatch[0].match(/\shref=["']([^"']+)["']/i)) === null || _a === void 0 ? void 0 : _a[1];
321
+ if (href) {
322
+ return absolutizeUrl(href, provider.url);
323
+ }
324
+ return absolutizeUrl('/favicon.ico', provider.url);
325
+ }
326
+ function absolutizeUrl(url, baseUrl) {
327
+ try {
328
+ return new URL(url, baseUrl).toString();
329
+ }
330
+ catch (_a) {
331
+ throw new Error(`Invalid icon URL: ${url}`);
332
+ }
333
+ }
334
+ async function readCachedIcon(app) {
335
+ const metadata = readMetadata(app);
336
+ const cachedObjectUrl = objectUrls.get(app);
337
+ if (!metadata) {
338
+ return undefined;
339
+ }
340
+ if (cachedObjectUrl) {
341
+ return { metadata, localUrl: cachedObjectUrl };
342
+ }
343
+ const cache = await getCache();
344
+ const response = await (cache === null || cache === void 0 ? void 0 : cache.match(cacheRequest(app)));
345
+ if (!response) {
346
+ return undefined;
347
+ }
348
+ const blob = await response.blob();
349
+ const localUrl = URL.createObjectURL(blob);
350
+ setObjectUrl(app, localUrl);
351
+ return { metadata, localUrl };
352
+ }
353
+ function toProviderIcon(cached, fromCache, stale) {
354
+ return {
355
+ app: cached.metadata.app,
356
+ name: cached.metadata.name,
357
+ localUrl: cached.localUrl,
358
+ sourceUrl: cached.metadata.sourceUrl,
359
+ mimeType: cached.metadata.mimeType,
360
+ fetchedAt: cached.metadata.fetchedAt,
361
+ fromCache,
362
+ stale,
363
+ };
364
+ }
365
+ async function getCache() {
366
+ if (!('caches' in window)) {
367
+ return undefined;
368
+ }
369
+ try {
370
+ return await caches.open(ICON_CACHE_NAME);
371
+ }
372
+ catch (error) {
373
+ console.warn('Unable to open provider icon cache', error);
374
+ return undefined;
375
+ }
376
+ }
377
+ function cacheRequest(app) {
378
+ return new Request(`https://capgo.local/launch-navigator-icons/${encodeURIComponent(app)}`);
379
+ }
380
+ function readMetadata(app) {
381
+ try {
382
+ const raw = localStorage.getItem(metadataKey(app));
383
+ return raw ? JSON.parse(raw) : undefined;
384
+ }
385
+ catch (_a) {
386
+ return undefined;
387
+ }
388
+ }
389
+ function writeMetadata(metadata) {
390
+ try {
391
+ localStorage.setItem(metadataKey(metadata.app), JSON.stringify(metadata));
392
+ }
393
+ catch (error) {
394
+ console.warn('Unable to persist provider icon metadata', error);
395
+ }
396
+ }
397
+ async function getStoredAppIds(cache) {
398
+ const apps = new Set();
399
+ try {
400
+ for (let i = 0; i < localStorage.length; i++) {
401
+ const key = localStorage.key(i);
402
+ if (key === null || key === void 0 ? void 0 : key.startsWith(ICON_METADATA_PREFIX)) {
403
+ apps.add(key.slice(ICON_METADATA_PREFIX.length));
404
+ }
405
+ }
406
+ }
407
+ catch (error) {
408
+ console.warn('Unable to read provider icon metadata', error);
409
+ }
410
+ const cachesToRead = new Map();
411
+ if (cache) {
412
+ cachesToRead.set(ICON_CACHE_NAME, cache);
413
+ }
414
+ try {
415
+ if ('caches' in window) {
416
+ const cacheNames = await caches.keys();
417
+ for (const cacheName of cacheNames) {
418
+ if (cacheName === ICON_CACHE_NAME && !cachesToRead.has(cacheName)) {
419
+ cachesToRead.set(cacheName, await caches.open(cacheName));
420
+ }
421
+ }
422
+ }
423
+ }
424
+ catch (error) {
425
+ console.warn('Unable to enumerate provider icon caches', error);
426
+ }
427
+ try {
428
+ for (const iconCache of cachesToRead.values()) {
429
+ const requests = await iconCache.keys();
430
+ for (const request of requests) {
431
+ const app = appFromCacheRequest(request);
432
+ if (app) {
433
+ apps.add(app);
434
+ }
435
+ }
436
+ }
437
+ }
438
+ catch (error) {
439
+ console.warn('Unable to read provider icon cache entries', error);
440
+ }
441
+ return Array.from(apps);
442
+ }
443
+ async function deleteCachedIcon(app, cache) {
444
+ let hadMetadata = false;
445
+ try {
446
+ hadMetadata = localStorage.getItem(metadataKey(app)) !== null;
447
+ localStorage.removeItem(metadataKey(app));
448
+ }
449
+ catch (error) {
450
+ console.warn('Unable to clear provider icon metadata', error);
451
+ }
452
+ const objectUrl = objectUrls.get(app);
453
+ if (objectUrl) {
454
+ URL.revokeObjectURL(objectUrl);
455
+ objectUrls.delete(app);
456
+ }
457
+ let deletedFromCache = false;
458
+ try {
459
+ deletedFromCache = (await (cache === null || cache === void 0 ? void 0 : cache.delete(cacheRequest(app)))) || false;
460
+ }
461
+ catch (error) {
462
+ console.warn('Unable to clear provider icon cache entry', error);
463
+ }
464
+ return hadMetadata || deletedFromCache;
465
+ }
466
+ function metadataKey(app) {
467
+ return `${ICON_METADATA_PREFIX}${app}`;
468
+ }
469
+ function appFromCacheRequest(request) {
470
+ try {
471
+ const url = new URL(request.url);
472
+ const prefix = '/launch-navigator-icons/';
473
+ if (url.origin !== 'https://capgo.local' || !url.pathname.startsWith(prefix)) {
474
+ return undefined;
475
+ }
476
+ const app = decodeURIComponent(url.pathname.slice(prefix.length));
477
+ return app || undefined;
478
+ }
479
+ catch (_a) {
480
+ return undefined;
481
+ }
482
+ }
483
+ function setObjectUrl(app, url) {
484
+ const existing = objectUrls.get(app);
485
+ if (existing) {
486
+ URL.revokeObjectURL(existing);
487
+ }
488
+ objectUrls.set(app, url);
145
489
  }
146
490
 
147
491
  var web = /*#__PURE__*/Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/**\n * Available navigation apps for iOS\n */\nexport var IOSNavigationApp;\n(function (IOSNavigationApp) {\n IOSNavigationApp[\"APPLE_MAPS\"] = \"apple_maps\";\n IOSNavigationApp[\"GOOGLE_MAPS\"] = \"google_maps\";\n IOSNavigationApp[\"WAZE\"] = \"waze\";\n IOSNavigationApp[\"CITYMAPPER\"] = \"citymapper\";\n IOSNavigationApp[\"GARMIN_NAVIGON\"] = \"garmin_navigon\";\n IOSNavigationApp[\"TRANSIT_APP\"] = \"transit_app\";\n IOSNavigationApp[\"YANDEX_NAVIGATOR\"] = \"yandex\";\n IOSNavigationApp[\"UBER\"] = \"uber\";\n IOSNavigationApp[\"TOMTOM\"] = \"tomtom\";\n IOSNavigationApp[\"SYGIC\"] = \"sygic\";\n IOSNavigationApp[\"HERE_MAPS\"] = \"here\";\n IOSNavigationApp[\"MOOVIT\"] = \"moovit\";\n IOSNavigationApp[\"LYFT\"] = \"lyft\";\n IOSNavigationApp[\"MAPS_ME\"] = \"mapsme\";\n IOSNavigationApp[\"CABIFY\"] = \"cabify\";\n IOSNavigationApp[\"BAIDU\"] = \"baidu\";\n IOSNavigationApp[\"GAODE\"] = \"gaode\";\n IOSNavigationApp[\"TAXI_99\"] = \"99taxi\";\n})(IOSNavigationApp || (IOSNavigationApp = {}));\n/**\n * Available navigation apps for Android\n */\nexport var AndroidNavigationApp;\n(function (AndroidNavigationApp) {\n AndroidNavigationApp[\"GOOGLE_MAPS\"] = \"google_maps\";\n AndroidNavigationApp[\"WAZE\"] = \"waze\";\n AndroidNavigationApp[\"CITYMAPPER\"] = \"citymapper\";\n AndroidNavigationApp[\"UBER\"] = \"uber\";\n AndroidNavigationApp[\"YANDEX\"] = \"yandex\";\n AndroidNavigationApp[\"SYGIC\"] = \"sygic\";\n AndroidNavigationApp[\"HERE_MAPS\"] = \"here\";\n AndroidNavigationApp[\"MOOVIT\"] = \"moovit\";\n AndroidNavigationApp[\"LYFT\"] = \"lyft\";\n AndroidNavigationApp[\"MAPS_ME\"] = \"mapsme\";\n AndroidNavigationApp[\"CABIFY\"] = \"cabify\";\n AndroidNavigationApp[\"BAIDU\"] = \"baidu\";\n AndroidNavigationApp[\"GAODE\"] = \"gaode\";\n})(AndroidNavigationApp || (AndroidNavigationApp = {}));\n/**\n * Transport modes\n */\nexport var TransportMode;\n(function (TransportMode) {\n TransportMode[\"DRIVING\"] = \"driving\";\n TransportMode[\"WALKING\"] = \"walking\";\n TransportMode[\"BICYCLING\"] = \"bicycling\";\n TransportMode[\"TRANSIT\"] = \"transit\";\n})(TransportMode || (TransportMode = {}));\n/**\n * Launch modes\n */\nexport var LaunchMode;\n(function (LaunchMode) {\n LaunchMode[\"MAPS\"] = \"maps\";\n LaunchMode[\"TURN_BY_TURN\"] = \"turn_by_turn\";\n LaunchMode[\"GEO\"] = \"geo\";\n})(LaunchMode || (LaunchMode = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst LaunchNavigator = registerPlugin('LaunchNavigator', {\n web: () => import('./web').then((m) => new m.LaunchNavigatorWeb()),\n});\nexport * from './definitions';\nexport { LaunchNavigator };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class LaunchNavigatorWeb extends WebPlugin {\n /**\n * Navigate to a location using latitude and longitude\n * Opens the location in the default map application or Google Maps web\n */\n async navigate(options) {\n const [lat, lon] = options.destination;\n const navOptions = options.options || {};\n let url;\n if (navOptions.start) {\n const [startLat, startLon] = navOptions.start;\n url = `https://www.google.com/maps/dir/${startLat},${startLon}/${lat},${lon}`;\n }\n else {\n url = `https://www.google.com/maps/search/?api=1&query=${lat},${lon}`;\n }\n if (navOptions.transportMode) {\n const modeMap = {\n driving: 'driving',\n walking: 'walking',\n bicycling: 'bicycling',\n transit: 'transit',\n };\n const mode = modeMap[navOptions.transportMode];\n if (mode && navOptions.start) {\n url += `&travelmode=${mode}`;\n }\n }\n window.open(url, '_blank');\n }\n /**\n * Check if a specific navigation app is available\n * Always returns false on web\n */\n async isAppAvailable(options) {\n console.log('isAppAvailable called with app:', options.app);\n return { available: false };\n }\n /**\n * Get list of available navigation apps\n * Returns only Google Maps as available on web\n */\n async getAvailableApps() {\n return {\n apps: [\n {\n app: 'google_maps',\n name: 'Google Maps (Web)',\n available: true,\n },\n ],\n };\n }\n /**\n * Get list of supported apps for the current platform\n * Returns only Google Maps for web\n */\n async getSupportedApps() {\n return {\n apps: ['google_maps'],\n };\n }\n /**\n * Get the default app for navigation\n * Returns Google Maps for web\n */\n async getDefaultApp() {\n return {\n app: 'google_maps',\n };\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["IOSNavigationApp","AndroidNavigationApp","TransportMode","LaunchMode","registerPlugin","WebPlugin"],"mappings":";;;IAAA;IACA;IACA;AACWA;IACX,CAAC,UAAU,gBAAgB,EAAE;IAC7B,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,YAAY;IACjD,IAAI,gBAAgB,CAAC,aAAa,CAAC,GAAG,aAAa;IACnD,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM;IACrC,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,YAAY;IACjD,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;IACzD,IAAI,gBAAgB,CAAC,aAAa,CAAC,GAAG,aAAa;IACnD,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,QAAQ;IACnD,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM;IACrC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,WAAW,CAAC,GAAG,MAAM;IAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzC,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM;IACrC,IAAI,gBAAgB,CAAC,SAAS,CAAC,GAAG,QAAQ;IAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,SAAS,CAAC,GAAG,QAAQ;IAC1C,CAAC,EAAEA,wBAAgB,KAAKA,wBAAgB,GAAG,EAAE,CAAC,CAAC;IAC/C;IACA;IACA;AACWC;IACX,CAAC,UAAU,oBAAoB,EAAE;IACjC,IAAI,oBAAoB,CAAC,aAAa,CAAC,GAAG,aAAa;IACvD,IAAI,oBAAoB,CAAC,MAAM,CAAC,GAAG,MAAM;IACzC,IAAI,oBAAoB,CAAC,YAAY,CAAC,GAAG,YAAY;IACrD,IAAI,oBAAoB,CAAC,MAAM,CAAC,GAAG,MAAM;IACzC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAC7C,IAAI,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO;IAC3C,IAAI,oBAAoB,CAAC,WAAW,CAAC,GAAG,MAAM;IAC9C,IAAI,oBAAoB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAC7C,IAAI,oBAAoB,CAAC,MAAM,CAAC,GAAG,MAAM;IACzC,IAAI,oBAAoB,CAAC,SAAS,CAAC,GAAG,QAAQ;IAC9C,IAAI,oBAAoB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAC7C,IAAI,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO;IAC3C,IAAI,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO;IAC3C,CAAC,EAAEA,4BAAoB,KAAKA,4BAAoB,GAAG,EAAE,CAAC,CAAC;IACvD;IACA;IACA;AACWC;IACX,CAAC,UAAU,aAAa,EAAE;IAC1B,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS;IACxC,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS;IACxC,IAAI,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW;IAC5C,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS;IACxC,CAAC,EAAEA,qBAAa,KAAKA,qBAAa,GAAG,EAAE,CAAC,CAAC;IACzC;IACA;IACA;AACWC;IACX,CAAC,UAAU,UAAU,EAAE;IACvB,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM;IAC/B,IAAI,UAAU,CAAC,cAAc,CAAC,GAAG,cAAc;IAC/C,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;IAC7B,CAAC,EAAEA,kBAAU,KAAKA,kBAAU,GAAG,EAAE,CAAC,CAAC;;AC5D9B,UAAC,eAAe,GAAGC,mBAAc,CAAC,iBAAiB,EAAE;IAC1D,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACtE,CAAC;;ICFM,MAAM,kBAAkB,SAASC,cAAS,CAAC;IAClD;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,CAAC,OAAO,EAAE;IAC5B,QAAQ,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW;IAC9C,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;IAChD,QAAQ,IAAI,GAAG;IACf,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE;IAC9B,YAAY,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK;IACzD,YAAY,GAAG,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzF,QAAQ;IACR,aAAa;IACb,YAAY,GAAG,GAAG,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjF,QAAQ;IACR,QAAQ,IAAI,UAAU,CAAC,aAAa,EAAE;IACtC,YAAY,MAAM,OAAO,GAAG;IAC5B,gBAAgB,OAAO,EAAE,SAAS;IAClC,gBAAgB,OAAO,EAAE,SAAS;IAClC,gBAAgB,SAAS,EAAE,WAAW;IACtC,gBAAgB,OAAO,EAAE,SAAS;IAClC,aAAa;IACb,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;IAC1D,YAAY,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE;IAC1C,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC5C,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;IAClC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,cAAc,CAAC,OAAO,EAAE;IAClC,QAAQ,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,CAAC,GAAG,CAAC;IACnE,QAAQ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;IACnC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,OAAO;IACf,YAAY,IAAI,EAAE;IAClB,gBAAgB;IAChB,oBAAoB,GAAG,EAAE,aAAa;IACtC,oBAAoB,IAAI,EAAE,mBAAmB;IAC7C,oBAAoB,SAAS,EAAE,IAAI;IACnC,iBAAiB;IACjB,aAAa;IACb,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,OAAO;IACf,YAAY,IAAI,EAAE,CAAC,aAAa,CAAC;IACjC,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,aAAa,GAAG;IAC1B,QAAQ,OAAO;IACf,YAAY,GAAG,EAAE,aAAa;IAC9B,SAAS;IACT,IAAI;IACJ,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IACjC,IAAI;IACJ;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/**\n * Available navigation apps for iOS\n */\nexport var IOSNavigationApp;\n(function (IOSNavigationApp) {\n IOSNavigationApp[\"APPLE_MAPS\"] = \"apple_maps\";\n IOSNavigationApp[\"GOOGLE_MAPS\"] = \"google_maps\";\n IOSNavigationApp[\"WAZE\"] = \"waze\";\n IOSNavigationApp[\"CITYMAPPER\"] = \"citymapper\";\n IOSNavigationApp[\"GARMIN_NAVIGON\"] = \"garmin_navigon\";\n IOSNavigationApp[\"TRANSIT_APP\"] = \"transit_app\";\n IOSNavigationApp[\"YANDEX_NAVIGATOR\"] = \"yandex\";\n IOSNavigationApp[\"UBER\"] = \"uber\";\n IOSNavigationApp[\"TOMTOM\"] = \"tomtom\";\n IOSNavigationApp[\"SYGIC\"] = \"sygic\";\n IOSNavigationApp[\"HERE_MAPS\"] = \"here\";\n IOSNavigationApp[\"MOOVIT\"] = \"moovit\";\n IOSNavigationApp[\"LYFT\"] = \"lyft\";\n IOSNavigationApp[\"MAPS_ME\"] = \"mapsme\";\n IOSNavigationApp[\"GURU_MAPS\"] = \"guru_maps\";\n IOSNavigationApp[\"ORGANIC_MAPS\"] = \"organic_maps\";\n IOSNavigationApp[\"YANDEX_MAPS\"] = \"yandex_maps\";\n IOSNavigationApp[\"TWO_GIS\"] = \"2gis\";\n IOSNavigationApp[\"CABIFY\"] = \"cabify\";\n IOSNavigationApp[\"BAIDU\"] = \"baidu\";\n IOSNavigationApp[\"GAODE\"] = \"gaode\";\n IOSNavigationApp[\"TESLA\"] = \"tesla\";\n IOSNavigationApp[\"TAXI_99\"] = \"99taxi\";\n})(IOSNavigationApp || (IOSNavigationApp = {}));\n/**\n * Available navigation apps for Android\n */\nexport var AndroidNavigationApp;\n(function (AndroidNavigationApp) {\n AndroidNavigationApp[\"GOOGLE_MAPS\"] = \"google_maps\";\n AndroidNavigationApp[\"WAZE\"] = \"waze\";\n AndroidNavigationApp[\"CITYMAPPER\"] = \"citymapper\";\n AndroidNavigationApp[\"UBER\"] = \"uber\";\n AndroidNavigationApp[\"YANDEX\"] = \"yandex\";\n AndroidNavigationApp[\"SYGIC\"] = \"sygic\";\n AndroidNavigationApp[\"HERE_MAPS\"] = \"here\";\n AndroidNavigationApp[\"MOOVIT\"] = \"moovit\";\n AndroidNavigationApp[\"LYFT\"] = \"lyft\";\n AndroidNavigationApp[\"MAPS_ME\"] = \"mapsme\";\n AndroidNavigationApp[\"TOMTOM\"] = \"tomtom\";\n AndroidNavigationApp[\"GURU_MAPS\"] = \"guru_maps\";\n AndroidNavigationApp[\"ORGANIC_MAPS\"] = \"organic_maps\";\n AndroidNavigationApp[\"YANDEX_MAPS\"] = \"yandex_maps\";\n AndroidNavigationApp[\"MAPY\"] = \"mapy\";\n AndroidNavigationApp[\"TWO_GIS\"] = \"2gis\";\n AndroidNavigationApp[\"CABIFY\"] = \"cabify\";\n AndroidNavigationApp[\"BAIDU\"] = \"baidu\";\n AndroidNavigationApp[\"GAODE\"] = \"gaode\";\n AndroidNavigationApp[\"TESLA\"] = \"tesla\";\n})(AndroidNavigationApp || (AndroidNavigationApp = {}));\n/**\n * Transport modes\n */\nexport var TransportMode;\n(function (TransportMode) {\n TransportMode[\"DRIVING\"] = \"driving\";\n TransportMode[\"WALKING\"] = \"walking\";\n TransportMode[\"BICYCLING\"] = \"bicycling\";\n TransportMode[\"TRANSIT\"] = \"transit\";\n})(TransportMode || (TransportMode = {}));\n/**\n * Launch modes\n */\nexport var LaunchMode;\n(function (LaunchMode) {\n LaunchMode[\"MAPS\"] = \"maps\";\n LaunchMode[\"TURN_BY_TURN\"] = \"turn_by_turn\";\n LaunchMode[\"GEO\"] = \"geo\";\n})(LaunchMode || (LaunchMode = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst LaunchNavigator = registerPlugin('LaunchNavigator', {\n web: () => import('./web').then((m) => new m.LaunchNavigatorWeb()),\n});\nexport * from './definitions';\nexport { LaunchNavigator };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nconst DEFAULT_ICON_CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000;\nconst ICON_CACHE_NAME = 'capgo-launch-navigator-icons';\nconst ICON_METADATA_PREFIX = 'capgo-launch-navigator-icon:';\nconst BUILT_IN_ICON_PROVIDERS = [\n iconProvider('google_maps', 'Google Maps', 'https://www.google.com/maps'),\n iconProvider('waze', 'Waze', 'https://www.waze.com'),\n iconProvider('citymapper', 'Citymapper', 'https://citymapper.com'),\n iconProvider('uber', 'Uber', 'https://www.uber.com'),\n iconProvider('yandex', 'Yandex Navigator', 'https://yandex.com/maps'),\n iconProvider('sygic', 'Sygic', 'https://www.sygic.com/gps-navigation'),\n iconProvider('here', 'HERE Maps', 'https://wego.here.com'),\n iconProvider('moovit', 'Moovit', 'https://moovitapp.com'),\n iconProvider('lyft', 'Lyft', 'https://www.lyft.com'),\n iconProvider('mapsme', 'MAPS.ME', 'https://maps.me'),\n iconProvider('guru_maps', 'Guru Maps', 'https://gurumaps.app'),\n iconProvider('organic_maps', 'Organic Maps', 'https://organicmaps.app'),\n iconProvider('yandex_maps', 'Yandex Maps', 'https://yandex.com/maps'),\n iconProvider('mapy', 'Mapy.com', 'https://mapy.com'),\n iconProvider('2gis', '2GIS', 'https://2gis.com'),\n iconProvider('cabify', 'Cabify', 'https://cabify.com'),\n iconProvider('baidu', 'Baidu Maps', 'https://map.baidu.com'),\n iconProvider('gaode', 'Gaode Maps', 'https://www.amap.com'),\n iconProvider('tesla', 'Tesla', 'https://www.tesla.com'),\n iconProvider('apple_maps', 'Apple Maps', 'https://www.apple.com/maps/'),\n iconProvider('tomtom', 'TomTom', 'https://www.tomtom.com'),\n iconProvider('transit_app', 'Transit App', 'https://transitapp.com'),\n iconProvider('garmin_navigon', 'Garmin Navigon', 'https://www.garmin.com'),\n iconProvider('99taxi', '99 Taxi', 'https://99app.com'),\n];\nfunction iconProvider(app, name, url) {\n return {\n app,\n name,\n url,\n iconUrl: `https://favicone.com/${new URL(url).hostname}?s=128`,\n };\n}\nconst objectUrls = new Map();\nexport class LaunchNavigatorWeb extends WebPlugin {\n /**\n * Navigate to a location using latitude and longitude\n * Opens the location in the default map application or Google Maps web\n */\n async navigate(options) {\n const [lat, lon] = options.destination;\n const navOptions = options.options || {};\n let url;\n if (navOptions.start) {\n const [startLat, startLon] = navOptions.start;\n url = `https://www.google.com/maps/dir/${startLat},${startLon}/${lat},${lon}`;\n }\n else {\n url = `https://www.google.com/maps/search/?api=1&query=${lat},${lon}`;\n }\n if (navOptions.transportMode) {\n const modeMap = {\n driving: 'driving',\n walking: 'walking',\n bicycling: 'bicycling',\n transit: 'transit',\n };\n const mode = modeMap[navOptions.transportMode];\n if (mode && navOptions.start) {\n url += `&travelmode=${mode}`;\n }\n }\n window.open(url, '_blank');\n }\n /**\n * Check if a specific navigation app is available\n * Always returns false on web\n */\n async isAppAvailable(options) {\n console.log('isAppAvailable called with app:', options.app);\n return { available: false };\n }\n /**\n * Get list of available navigation apps\n * Returns only Google Maps as available on web\n */\n async getAvailableApps() {\n return {\n apps: [\n {\n app: 'google_maps',\n name: 'Google Maps (Web)',\n available: true,\n },\n ],\n };\n }\n /**\n * Get list of supported apps for the current platform\n * Returns only Google Maps for web\n */\n async getSupportedApps() {\n return {\n apps: ['google_maps'],\n };\n }\n /**\n * Get the default app for navigation\n * Returns Google Maps for web\n */\n async getDefaultApp() {\n return {\n app: 'google_maps',\n };\n }\n async getAppIcons(options = {}) {\n const providers = resolveIconProviders(options);\n const maxAgeMs = normalizeMaxAge(options.maxAgeMs);\n const forceRefresh = options.forceRefresh === true;\n const icons = [];\n const failures = [];\n await Promise.all(providers.map(async (provider) => {\n try {\n icons.push(await this.getProviderIcon(provider, maxAgeMs, forceRefresh));\n }\n catch (error) {\n failures.push({\n app: String(provider.app),\n name: provider.name,\n sourceUrl: provider.iconUrl || provider.url,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }));\n return { icons, failures };\n }\n async refreshAppIcons(options = {}) {\n return this.getAppIcons(Object.assign(Object.assign({}, options), { forceRefresh: true }));\n }\n async clearIconCache(options = {}) {\n var _a;\n const appIds = (_a = options.apps) === null || _a === void 0 ? void 0 : _a.map(String);\n const cache = await getCache();\n let cleared = 0;\n if (appIds && appIds.length > 0) {\n for (const app of appIds) {\n cleared += (await deleteCachedIcon(app, cache)) ? 1 : 0;\n }\n return { cleared };\n }\n const storedApps = await getStoredAppIds(cache);\n for (const app of storedApps) {\n cleared += (await deleteCachedIcon(app, cache)) ? 1 : 0;\n }\n return { cleared };\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n async getProviderIcon(provider, maxAgeMs, forceRefresh) {\n const app = String(provider.app);\n const cached = await readCachedIcon(app);\n const now = Date.now();\n if (cached && !forceRefresh && now - cached.metadata.fetchedAt < maxAgeMs) {\n return toProviderIcon(cached, true, false);\n }\n try {\n const sourceUrl = provider.iconUrl\n ? absolutizeUrl(provider.iconUrl, provider.url)\n : await discoverIconUrl(provider);\n const response = await fetch(sourceUrl);\n if (!response.ok) {\n throw new Error(`Icon request failed with status ${response.status}`);\n }\n const blob = await response.blob();\n const mimeType = blob.type || response.headers.get('content-type') || undefined;\n const cache = await getCache();\n const metadata = {\n app,\n name: provider.name,\n sourceUrl,\n mimeType,\n fetchedAt: now,\n };\n const localUrl = URL.createObjectURL(blob);\n setObjectUrl(app, localUrl);\n if (cache) {\n try {\n await cache.put(cacheRequest(app), new Response(blob, { headers: mimeType ? { 'content-type': mimeType } : undefined }));\n }\n catch (error) {\n console.warn('Unable to persist provider icon in Cache Storage', error);\n }\n }\n writeMetadata(metadata);\n return {\n app,\n name: metadata.name,\n localUrl,\n sourceUrl,\n mimeType,\n fetchedAt: metadata.fetchedAt,\n fromCache: false,\n stale: false,\n };\n }\n catch (error) {\n if (cached) {\n return toProviderIcon(cached, true, true);\n }\n throw error;\n }\n }\n}\nfunction resolveIconProviders(options) {\n const builtIns = new Map(BUILT_IN_ICON_PROVIDERS.map((provider) => [String(provider.app), provider]));\n const customProviders = options.providers || [];\n for (const provider of customProviders) {\n const app = String(provider.app);\n builtIns.set(app, Object.assign(Object.assign(Object.assign({}, builtIns.get(app)), provider), { app }));\n }\n if (options.apps && options.apps.length > 0) {\n return options.apps.map((app) => builtIns.get(String(app)) || { app: String(app) });\n }\n return Array.from(builtIns.values());\n}\nfunction normalizeMaxAge(maxAgeMs) {\n if (typeof maxAgeMs !== 'number' || !Number.isFinite(maxAgeMs) || maxAgeMs < 0) {\n return DEFAULT_ICON_CACHE_MAX_AGE_MS;\n }\n return maxAgeMs;\n}\nasync function discoverIconUrl(provider) {\n var _a;\n if (!provider.url) {\n throw new Error('Provider url or iconUrl is required');\n }\n const response = await fetch(provider.url);\n if (!response.ok) {\n throw new Error(`Provider page request failed with status ${response.status}`);\n }\n const html = await response.text();\n const linkMatch = html.match(/<link\\s+[^>]*rel=[\"'][^\"']*(?:apple-touch-icon|icon)[^\"']*[\"'][^>]*>/i);\n const href = (_a = linkMatch === null || linkMatch === void 0 ? void 0 : linkMatch[0].match(/\\shref=[\"']([^\"']+)[\"']/i)) === null || _a === void 0 ? void 0 : _a[1];\n if (href) {\n return absolutizeUrl(href, provider.url);\n }\n return absolutizeUrl('/favicon.ico', provider.url);\n}\nfunction absolutizeUrl(url, baseUrl) {\n try {\n return new URL(url, baseUrl).toString();\n }\n catch (_a) {\n throw new Error(`Invalid icon URL: ${url}`);\n }\n}\nasync function readCachedIcon(app) {\n const metadata = readMetadata(app);\n const cachedObjectUrl = objectUrls.get(app);\n if (!metadata) {\n return undefined;\n }\n if (cachedObjectUrl) {\n return { metadata, localUrl: cachedObjectUrl };\n }\n const cache = await getCache();\n const response = await (cache === null || cache === void 0 ? void 0 : cache.match(cacheRequest(app)));\n if (!response) {\n return undefined;\n }\n const blob = await response.blob();\n const localUrl = URL.createObjectURL(blob);\n setObjectUrl(app, localUrl);\n return { metadata, localUrl };\n}\nfunction toProviderIcon(cached, fromCache, stale) {\n return {\n app: cached.metadata.app,\n name: cached.metadata.name,\n localUrl: cached.localUrl,\n sourceUrl: cached.metadata.sourceUrl,\n mimeType: cached.metadata.mimeType,\n fetchedAt: cached.metadata.fetchedAt,\n fromCache,\n stale,\n };\n}\nasync function getCache() {\n if (!('caches' in window)) {\n return undefined;\n }\n try {\n return await caches.open(ICON_CACHE_NAME);\n }\n catch (error) {\n console.warn('Unable to open provider icon cache', error);\n return undefined;\n }\n}\nfunction cacheRequest(app) {\n return new Request(`https://capgo.local/launch-navigator-icons/${encodeURIComponent(app)}`);\n}\nfunction readMetadata(app) {\n try {\n const raw = localStorage.getItem(metadataKey(app));\n return raw ? JSON.parse(raw) : undefined;\n }\n catch (_a) {\n return undefined;\n }\n}\nfunction writeMetadata(metadata) {\n try {\n localStorage.setItem(metadataKey(metadata.app), JSON.stringify(metadata));\n }\n catch (error) {\n console.warn('Unable to persist provider icon metadata', error);\n }\n}\nasync function getStoredAppIds(cache) {\n const apps = new Set();\n try {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key === null || key === void 0 ? void 0 : key.startsWith(ICON_METADATA_PREFIX)) {\n apps.add(key.slice(ICON_METADATA_PREFIX.length));\n }\n }\n }\n catch (error) {\n console.warn('Unable to read provider icon metadata', error);\n }\n const cachesToRead = new Map();\n if (cache) {\n cachesToRead.set(ICON_CACHE_NAME, cache);\n }\n try {\n if ('caches' in window) {\n const cacheNames = await caches.keys();\n for (const cacheName of cacheNames) {\n if (cacheName === ICON_CACHE_NAME && !cachesToRead.has(cacheName)) {\n cachesToRead.set(cacheName, await caches.open(cacheName));\n }\n }\n }\n }\n catch (error) {\n console.warn('Unable to enumerate provider icon caches', error);\n }\n try {\n for (const iconCache of cachesToRead.values()) {\n const requests = await iconCache.keys();\n for (const request of requests) {\n const app = appFromCacheRequest(request);\n if (app) {\n apps.add(app);\n }\n }\n }\n }\n catch (error) {\n console.warn('Unable to read provider icon cache entries', error);\n }\n return Array.from(apps);\n}\nasync function deleteCachedIcon(app, cache) {\n let hadMetadata = false;\n try {\n hadMetadata = localStorage.getItem(metadataKey(app)) !== null;\n localStorage.removeItem(metadataKey(app));\n }\n catch (error) {\n console.warn('Unable to clear provider icon metadata', error);\n }\n const objectUrl = objectUrls.get(app);\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n objectUrls.delete(app);\n }\n let deletedFromCache = false;\n try {\n deletedFromCache = (await (cache === null || cache === void 0 ? void 0 : cache.delete(cacheRequest(app)))) || false;\n }\n catch (error) {\n console.warn('Unable to clear provider icon cache entry', error);\n }\n return hadMetadata || deletedFromCache;\n}\nfunction metadataKey(app) {\n return `${ICON_METADATA_PREFIX}${app}`;\n}\nfunction appFromCacheRequest(request) {\n try {\n const url = new URL(request.url);\n const prefix = '/launch-navigator-icons/';\n if (url.origin !== 'https://capgo.local' || !url.pathname.startsWith(prefix)) {\n return undefined;\n }\n const app = decodeURIComponent(url.pathname.slice(prefix.length));\n return app || undefined;\n }\n catch (_a) {\n return undefined;\n }\n}\nfunction setObjectUrl(app, url) {\n const existing = objectUrls.get(app);\n if (existing) {\n URL.revokeObjectURL(existing);\n }\n objectUrls.set(app, url);\n}\n//# sourceMappingURL=web.js.map"],"names":["IOSNavigationApp","AndroidNavigationApp","TransportMode","LaunchMode","registerPlugin","WebPlugin"],"mappings":"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"}