ngx-device-permission
Version:
Angular library for handling device permissions
1 lines • 9.8 kB
Source Map (JSON)
{"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":";;;;;MAYa,uBAAuB,CAAA;AAClC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,IAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;;AAGrB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,CAC9B;;AAGH;;;AAGG;AACH,IAAA,uBAAuB,CAAC,IAAoB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;;AAGrB,QAAA,OAAO,IAAI,UAAU,CAAkB,CAAC,QAAQ,KAAI;AAClD,YAAA,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpD,gBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9C,gBAAA,IAAI,EAAE;AACN,gBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;AACxB,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ;;AAEG;IACK,WAAW,GAAA;QACjB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,aAAa,IAAI,SAAS;;wGArCzD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACRD;;;AAGG;MAIU,kBAAkB,CAAA;AAC7B;;;;AAIG;AACH,IAAA,aAAa,CAAC,WAAmC,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CAAC,wDAAwD,CAAC,CACtE;;QAGH,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;;AAG/D;;;AAGG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;QAGf,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;;AAGxD;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,QACE,OAAO,SAAS,KAAK,WAAW;YAChC,CAAC,CAAC,SAAS,CAAC,YAAY;YACxB,OAAO,SAAS,CAAC,YAAY,CAAC,YAAY,KAAK,UAAU;;wGApClD,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,kBAAkB,CAAA;AAC7B;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC1B,QAAQ,CAAC,KAAK,CACZ,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAC/D;gBACD;;YAGF,SAAS,CAAC,WAAW,CAAC,kBAAkB,CACtC,CAAC,QAAQ,KAAI;AACX,gBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EACD,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CACjC;AACH,SAAC,CAAC;;wGArBO,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,gBAAgB,CAAA;AAC3B;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAClC,QAAQ,CAAC,KAAK,CACZ,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAC1D;gBACD;;AAGF,YAAA,SAAS,CAAC;AACP,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,2BAA2B,CAAC,IAAY,EAAA;AACtC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE;gBACnC,QAAQ,CAAC,KAAK,CACZ,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAC1D;gBACD;;AAGF,YAAA,SAAS,CAAC;iBACP,SAAS,CAAC,IAAI;iBACd,IAAI,CAAC,MAAK;gBACT,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAC,CAAC;;wGA3CO,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLD;;AAEG;;;;"}