@untemps/user-permissions-utils 1.1.38 → 1.2.1

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/README.md CHANGED
@@ -16,7 +16,7 @@ yarn add @untemps/user-permissions-utils
16
16
 
17
17
  `getPermission`:
18
18
 
19
- Returns a promise resolved when the permission is granted
19
+ Returns a promise resolved when the permission is granted. Accepts an optional `signal` to cancel the pending wait.
20
20
 
21
21
  ```javascript
22
22
  import { getPermission } from '@untemps/user-permissions-utils'
@@ -31,6 +31,27 @@ const init = async () => {
31
31
  }
32
32
  ```
33
33
 
34
+ To cancel a pending permission wait:
35
+
36
+ ```javascript
37
+ import { getPermission } from '@untemps/user-permissions-utils'
38
+
39
+ const controller = new AbortController()
40
+
41
+ const init = async () => {
42
+ try {
43
+ await getPermission('microphone', { signal: controller.signal })
44
+ ...
45
+ } catch (error) {
46
+ if (error.name === 'AbortError') return
47
+ console.error(error)
48
+ }
49
+ }
50
+
51
+ // Cancel before the user responds to the permission dialog
52
+ controller.abort()
53
+ ```
54
+
34
55
  `getUserMediaStream`:
35
56
 
36
57
  Returns a promise resolved when the permission is granted and the stream is retrieved
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- export declare function getPermission(permissionName: PermissionName): Promise<PermissionState>
1
+ export declare function getPermission(
2
+ permissionName: PermissionName,
3
+ options?: { signal?: AbortSignal }
4
+ ): Promise<'granted'>
2
5
  export declare function getUserMediaStream(
3
6
  permissionName: PermissionName,
4
7
  constraints: MediaStreamConstraints
package/dist/index.es.js CHANGED
@@ -1,18 +1,22 @@
1
1
  //#region src/isNavigatorPermissionsSupported.js
2
- var e = () => !!navigator.permissions, t = () => !!navigator.mediaDevices, n = async (t) => {
2
+ var e = () => !!navigator.permissions, t = () => !!navigator.mediaDevices, n = async (t, { signal: n } = {}) => {
3
3
  if (!e()) throw new DOMException("Navigator API: permissions not supported", "NOT_SUPPORTED_ERR");
4
- let n = await navigator.permissions.query({ name: t });
5
- return n.state === "prompt" ? new Promise((e, t) => {
6
- let i = (a) => {
7
- n.removeEventListener("change", i);
4
+ n?.throwIfAborted();
5
+ let i = await navigator.permissions.query({ name: t });
6
+ return i.state === "prompt" ? new Promise((e, t) => {
7
+ n?.throwIfAborted();
8
+ let a = (s) => {
9
+ i.removeEventListener("change", a), n?.removeEventListener("abort", o);
8
10
  try {
9
- e(r(a.target.state));
11
+ e(r(s.target.state));
10
12
  } catch (e) {
11
13
  t(e);
12
14
  }
15
+ }, o = () => {
16
+ i.removeEventListener("change", a), t(n.reason);
13
17
  };
14
- n.addEventListener("change", i);
15
- }) : r(n.state);
18
+ i.addEventListener("change", a), n?.addEventListener("abort", o, { once: !0 });
19
+ }) : r(i.state);
16
20
  }, r = (e) => {
17
21
  if (e === "denied") throw new DOMException("Permission denied", "NOT_ALLOWED_ERR");
18
22
  return e;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=()=>!!navigator.permissions,t=()=>!!navigator.mediaDevices,n=async t=>{if(!e())throw new DOMException(`Navigator API: permissions not supported`,`NOT_SUPPORTED_ERR`);let n=await navigator.permissions.query({name:t});return n.state===`prompt`?new Promise((e,t)=>{let i=a=>{n.removeEventListener(`change`,i);try{e(r(a.target.state))}catch(e){t(e)}};n.addEventListener(`change`,i)}):r(n.state)},r=e=>{if(e===`denied`)throw new DOMException(`Permission denied`,`NOT_ALLOWED_ERR`);return e},i=async(r,i)=>{if(!e()||!t())throw new DOMException(`Navigator API: permissions or Navigator API: mediaDevices not supported`,`NOT_SUPPORTED_ERR`);return await n(r),navigator.mediaDevices.getUserMedia(i)};exports.getPermission=n,exports.getUserMediaStream=i,exports.isNavigatorMediaDevicesSupported=t,exports.isNavigatorPermissionsSupported=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=()=>!!navigator.permissions,t=()=>!!navigator.mediaDevices,n=async(t,{signal:n}={})=>{if(!e())throw new DOMException(`Navigator API: permissions not supported`,`NOT_SUPPORTED_ERR`);n?.throwIfAborted();let i=await navigator.permissions.query({name:t});return i.state===`prompt`?new Promise((e,t)=>{n?.throwIfAborted();let a=s=>{i.removeEventListener(`change`,a),n?.removeEventListener(`abort`,o);try{e(r(s.target.state))}catch(e){t(e)}},o=()=>{i.removeEventListener(`change`,a),t(n.reason)};i.addEventListener(`change`,a),n?.addEventListener(`abort`,o,{once:!0})}):r(i.state)},r=e=>{if(e===`denied`)throw new DOMException(`Permission denied`,`NOT_ALLOWED_ERR`);return e},i=async(r,i)=>{if(!e()||!t())throw new DOMException(`Navigator API: permissions or Navigator API: mediaDevices not supported`,`NOT_SUPPORTED_ERR`);return await n(r),navigator.mediaDevices.getUserMedia(i)};exports.getPermission=n,exports.getUserMediaStream=i,exports.isNavigatorMediaDevicesSupported=t,exports.isNavigatorPermissionsSupported=e;
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UserPermissionsUtils={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=()=>!!navigator.permissions,n=()=>!!navigator.mediaDevices,r=async e=>{if(!t())throw new DOMException(`Navigator API: permissions not supported`,`NOT_SUPPORTED_ERR`);let n=await navigator.permissions.query({name:e});return n.state===`prompt`?new Promise((e,t)=>{let r=a=>{n.removeEventListener(`change`,r);try{e(i(a.target.state))}catch(e){t(e)}};n.addEventListener(`change`,r)}):i(n.state)},i=e=>{if(e===`denied`)throw new DOMException(`Permission denied`,`NOT_ALLOWED_ERR`);return e};e.getPermission=r,e.getUserMediaStream=async(e,i)=>{if(!t()||!n())throw new DOMException(`Navigator API: permissions or Navigator API: mediaDevices not supported`,`NOT_SUPPORTED_ERR`);return await r(e),navigator.mediaDevices.getUserMedia(i)},e.isNavigatorMediaDevicesSupported=n,e.isNavigatorPermissionsSupported=t});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UserPermissionsUtils={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=()=>!!navigator.permissions,n=()=>!!navigator.mediaDevices,r=async(e,{signal:n}={})=>{if(!t())throw new DOMException(`Navigator API: permissions not supported`,`NOT_SUPPORTED_ERR`);n?.throwIfAborted();let r=await navigator.permissions.query({name:e});return r.state===`prompt`?new Promise((e,t)=>{n?.throwIfAborted();let a=s=>{r.removeEventListener(`change`,a),n?.removeEventListener(`abort`,o);try{e(i(s.target.state))}catch(e){t(e)}},o=()=>{r.removeEventListener(`change`,a),t(n.reason)};r.addEventListener(`change`,a),n?.addEventListener(`abort`,o,{once:!0})}):i(r.state)},i=e=>{if(e===`denied`)throw new DOMException(`Permission denied`,`NOT_ALLOWED_ERR`);return e};e.getPermission=r,e.getUserMediaStream=async(e,i)=>{if(!t()||!n())throw new DOMException(`Navigator API: permissions or Navigator API: mediaDevices not supported`,`NOT_SUPPORTED_ERR`);return await r(e),navigator.mediaDevices.getUserMedia(i)},e.isNavigatorMediaDevicesSupported=n,e.isNavigatorPermissionsSupported=t});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@untemps/user-permissions-utils",
3
- "version": "1.1.38",
3
+ "version": "1.2.1",
4
4
  "description": "Collection of utility functions to manage user permissions",
5
5
  "repository": "git@github.com:untemps/user-permissions-utils.git",
6
6
  "keywords": [