1import { PermissionStatus, UnavailabilityError } from 'expo-modules-core';
2function getUserMedia(constraints) {
3    if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
4        return navigator.mediaDevices.getUserMedia(constraints);
5    }
6    // Some browsers partially implement mediaDevices. We can't just assign an object
7    // with getUserMedia as it would overwrite existing properties.
8    // Here, we will just add the getUserMedia property if it's missing.
9    // First get ahold of the legacy getUserMedia, if present
10    const getUserMedia =
11    // TODO: this method is deprecated, migrate to https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
12    navigator.getUserMedia ||
13        navigator.webkitGetUserMedia ||
14        navigator.mozGetUserMedia ||
15        function () {
16            const error = new Error('Permission unimplemented');
17            error.code = 0;
18            error.name = 'NotAllowedError';
19            throw error;
20        };
21    return new Promise((resolve, reject) => {
22        getUserMedia.call(navigator, constraints, resolve, reject);
23    });
24}
25function handleGetUserMediaError({ message }) {
26    // name: NotAllowedError
27    // code: 0
28    if (message === 'Permission dismissed') {
29        return {
30            status: PermissionStatus.UNDETERMINED,
31            expires: 'never',
32            canAskAgain: true,
33            granted: false,
34        };
35    }
36    else {
37        return {
38            status: PermissionStatus.DENIED,
39            expires: 'never',
40            canAskAgain: true,
41            granted: false,
42        };
43    }
44}
45async function handleRequestPermissionsAsync() {
46    try {
47        await getUserMedia({
48            video: true,
49        });
50        return {
51            status: PermissionStatus.GRANTED,
52            expires: 'never',
53            canAskAgain: true,
54            granted: true,
55        };
56    }
57    catch ({ message }) {
58        return handleGetUserMediaError({ message });
59    }
60}
61async function handlePermissionsQueryAsync() {
62    if (!navigator?.permissions?.query) {
63        throw new UnavailabilityError('expo-barcode-scanner', 'navigator.permissions API is not available');
64    }
65    const { state } = await navigator.permissions.query({ name: 'camera' });
66    switch (state) {
67        case 'prompt':
68            return {
69                status: PermissionStatus.UNDETERMINED,
70                expires: 'never',
71                canAskAgain: true,
72                granted: false,
73            };
74        case 'granted':
75            return {
76                status: PermissionStatus.GRANTED,
77                expires: 'never',
78                canAskAgain: true,
79                granted: true,
80            };
81        case 'denied':
82            return {
83                status: PermissionStatus.DENIED,
84                expires: 'never',
85                canAskAgain: true,
86                granted: false,
87            };
88    }
89}
90export default {
91    get name() {
92        return 'ExpoBarCodeScannerModule';
93    },
94    get BarCodeType() {
95        return {
96            code39mod43: 'code39mod43',
97            code138: 'code138',
98            interleaved2of5: 'interleaved2of5',
99            aztec: 'aztec',
100            ean13: 'ean13',
101            ean8: 'ean8',
102            qr: 'qr',
103            pdf417: 'pdf417',
104            upc_e: 'upc_e',
105            datamatrix: 'datamatrix',
106            code39: 'code39',
107            code93: 'code93',
108            itf14: 'itf14',
109            codabar: 'codabar',
110            code128: 'code128',
111            upc_a: 'upc_a',
112        };
113    },
114    get Type() {
115        return { front: 'front', back: 'back' };
116    },
117    async requestPermissionsAsync() {
118        return handleRequestPermissionsAsync();
119    },
120    async getPermissionsAsync() {
121        return handlePermissionsQueryAsync();
122    },
123};
124//# sourceMappingURL=ExpoBarCodeScannerModule.web.js.map