{"version":3,"file":"ngx-device-permission.mjs","sources":["../../../../packages/ngx-device-permission/src/core/device-permission.service.ts","../../../../packages/ngx-device-permission/src/media/media-device.service.ts","../../../../packages/ngx-device-permission/src/geolocation/geolocation.service.ts","../../../../packages/ngx-device-permission/src/clipboard/clipboard.service.ts","../../../../packages/ngx-device-permission/src/ngx-device-permission.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, from, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Represents the permission state returned by the Permissions API.\n */\nexport type PermissionState = PermissionStatus['state']; // 'granted' | 'denied' | 'prompt'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DevicePermissionService {\n  /**\n   * Returns the current state of a given permission.\n   * @param name Name of the permission (e.g., 'camera', 'microphone', 'geolocation', etc.)\n   */\n  getPermissionStatus(name: PermissionName): Observable<PermissionState> {\n    if (!this.isSupported()) {\n      return of('prompt');\n    }\n\n    return from(navigator.permissions.query({ name })).pipe(\n      map((status) => status.state)\n    );\n  }\n\n  /**\n   * Observes changes to the state of a given permission.\n   * @param name Name of the permission to observe\n   */\n  observePermissionChange(name: PermissionName): Observable<PermissionState> {\n    if (!this.isSupported()) {\n      return of('prompt');\n    }\n\n    return new Observable<PermissionState>((observer) => {\n      navigator.permissions.query({ name }).then((status) => {\n        const emit = () => observer.next(status.state);\n        emit();\n        status.onchange = emit;\n      });\n    });\n  }\n\n  /**\n   * Checks if the Permissions API is available in the current environment.\n   */\n  private isSupported(): boolean {\n    return typeof window !== 'undefined' && 'permissions' in navigator;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { from, Observable, of, throwError } from 'rxjs';\n\n/**\n * A service for accessing media devices such as microphone and camera\n * using the MediaDevices API in a reactive (RxJS) way.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class MediaDeviceService {\n  /**\n   * Requests access to media devices (camera and/or microphone).\n   * @param constraints MediaStreamConstraints (e.g., { audio: true, video: true })\n   * @returns Observable that emits the MediaStream or error.\n   */\n  requestAccess(constraints: MediaStreamConstraints): Observable<MediaStream> {\n    if (!this.isSupported()) {\n      return throwError(\n        () =>\n          new Error('MediaDevices API is not supported in this environment.')\n      );\n    }\n\n    return from(navigator.mediaDevices.getUserMedia(constraints));\n  }\n\n  /**\n   * Retrieves a list of all connected media input and output devices.\n   * @returns Observable that emits the array of MediaDeviceInfo.\n   */\n  enumerateDevices(): Observable<MediaDeviceInfo[]> {\n    if (!this.isSupported()) {\n      return of([]);\n    }\n\n    return from(navigator.mediaDevices.enumerateDevices());\n  }\n\n  /**\n   * Checks whether the MediaDevices API is available.\n   */\n  private isSupported(): boolean {\n    return (\n      typeof navigator !== 'undefined' &&\n      !!navigator.mediaDevices &&\n      typeof navigator.mediaDevices.getUserMedia === 'function'\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class GeolocationService {\n  /**\n   * Requests the current location of the user.\n   * Emits coordinates if successful, or an error if denied or unavailable.\n   */\n  requestLocation(): Observable<GeolocationPosition> {\n    return new Observable((observer) => {\n      if (!navigator.geolocation) {\n        observer.error(\n          new Error('Geolocation API is not supported in this browser.')\n        );\n        return;\n      }\n\n      navigator.geolocation.getCurrentPosition(\n        (position) => {\n          observer.next(position);\n          observer.complete();\n        },\n        (error) => observer.error(error)\n      );\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ClipboardService {\n  /**\n   * Try to request access to clipboard-read permission\n   * by invoking navigator.clipboard.readText()\n   */\n  requestClipboardReadAccess(): Observable<string> {\n    return new Observable((observer) => {\n      if (!navigator.clipboard?.readText) {\n        observer.error(\n          new Error('Clipboard API not supported in this browser.')\n        );\n        return;\n      }\n\n      navigator.clipboard\n        .readText()\n        .then((text) => {\n          observer.next(text);\n          observer.complete();\n        })\n        .catch((error) => observer.error(error));\n    });\n  }\n\n  /**\n   * Try to write text to clipboard to trigger clipboard-write permission\n   */\n  requestClipboardWriteAccess(text: string): Observable<void> {\n    return new Observable((observer) => {\n      if (!navigator.clipboard?.writeText) {\n        observer.error(\n          new Error('Clipboard API not supported in this browser.')\n        );\n        return;\n      }\n\n      navigator.clipboard\n        .writeText(text)\n        .then(() => {\n          observer.next();\n          observer.complete();\n        })\n        .catch((error) => observer.error(error));\n    });\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}