import { WebPlugin } from '@capacitor/core'; import type { CallbackID, GeolocationPlugin, PermissionStatus, Position, PositionOptions, WatchPositionCallback, } from './definitions'; export class GeolocationWeb extends WebPlugin implements GeolocationPlugin { async getCurrentPosition(options?: PositionOptions): Promise { return new Promise((resolve, reject) => { navigator.geolocation.getCurrentPosition( pos => { resolve(pos); }, err => { reject(err); }, { enableHighAccuracy: false, timeout: 10000, maximumAge: 0, ...options, }, ); }); } async watchPosition( options: PositionOptions, callback: WatchPositionCallback, ): Promise { const id = navigator.geolocation.watchPosition( pos => { callback(pos); }, err => { callback(null, err); }, { enableHighAccuracy: false, timeout: 10000, maximumAge: 0, ...options, }, ); return `${id}`; } async clearWatch(options: { id: string }): Promise { window.navigator.geolocation.clearWatch(parseInt(options.id, 10)); } async checkPermissions(): Promise { if (typeof navigator === 'undefined' || !navigator.permissions) { throw this.unavailable('Permissions API not available in this browser'); } const permission = await window.navigator.permissions.query({ name: 'geolocation', }); return { location: permission.state, coarseLocation: permission.state }; } async requestPermissions(): Promise { throw this.unimplemented('Not implemented on web.'); } } const Geolocation = new GeolocationWeb(); export { Geolocation };