@newtonschool/react_proctoring_library 0.0.51 → 0.0.53
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/dist/components/permissions/index.js +4 -19
- package/dist/components/proctor-app/Loadable.js +3 -1
- package/dist/components/proctor-app/index.js +8 -6
- package/dist/components/proctor-context-app/Loadable.js +3 -1
- package/dist/components/proctor-context-app/index.js +1 -1
- package/dist/components/webcam-activity-tracker/index.js +18 -10
- package/dist/utils/breachUtils.js +3 -1
- package/dist/utils/webcamMicrophoneUtils.js +16 -12
- package/package.json +1 -1
- package/dist/assets/videos/ask-permission.mp4 +0 -0
|
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.Permission = void 0;
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
10
|
var _reactBootstrap = require("react-bootstrap");
|
|
11
|
-
var _askPermission = _interopRequireDefault(require("../../assets/videos/ask-permission.mp4"));
|
|
12
11
|
require("./index.scss");
|
|
13
12
|
var text = _interopRequireWildcard(require("../../constants/text"));
|
|
14
13
|
var _permissionBody = require("./permission-body");
|
|
@@ -32,33 +31,19 @@ const Permission = _ref => {
|
|
|
32
31
|
centered: true
|
|
33
32
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Title, null, text.PERMISSION_TITLE)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, {
|
|
34
33
|
className: "font-medium"
|
|
35
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
36
|
-
style: {
|
|
37
|
-
borderRadius: "20px"
|
|
38
|
-
}
|
|
39
|
-
}, /*#__PURE__*/_react.default.createElement("video", {
|
|
40
|
-
className: "videoStyles",
|
|
41
|
-
width: "100%",
|
|
42
|
-
height: "240",
|
|
43
|
-
autoPlay: true,
|
|
44
|
-
muted: true,
|
|
45
|
-
loop: true,
|
|
46
|
-
playsInline: true
|
|
47
|
-
}, /*#__PURE__*/_react.default.createElement("source", {
|
|
48
|
-
src: _askPermission.default
|
|
49
|
-
}), text.VIDEO_UNSUPPORTED_IN_BROWSER)), /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
|
|
34
|
+
}, /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
|
|
50
35
|
showFullscreenText: !permissions.fullscreen,
|
|
51
|
-
showAudioPermissionText: !permissions.audio && (0, _breachUtils.
|
|
36
|
+
showAudioPermissionText: !permissions.audio && (0, _breachUtils.isAudioRequired)(proctorParams),
|
|
52
37
|
showVideoPermissionText: !permissions.video && (0, _breachUtils.isWebcamRequired)(proctorParams),
|
|
53
38
|
showScreensharePermission: !permissions.screenshare && proctorParams.screenshareSnapshots
|
|
54
39
|
})), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !permissions.screenshare && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
55
40
|
onClick: () => {
|
|
56
|
-
askPermission([
|
|
41
|
+
askPermission(['screenshare']);
|
|
57
42
|
}
|
|
58
43
|
}, text.ALLOW_SCREENSHARE), !permissions.fullscreen && proctorParams.fullscreenExit && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
59
44
|
variant: "primary",
|
|
60
45
|
onClick: () => {
|
|
61
|
-
askPermission([
|
|
46
|
+
askPermission(['fullscreen']);
|
|
62
47
|
}
|
|
63
48
|
}, text.ALLOW_FULLSCREEN)));
|
|
64
49
|
};
|
|
@@ -11,7 +11,9 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
var _loadable = _interopRequireDefault(require("../../utils/loadable"));
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /**
|
|
15
|
+
* Asynchronously loads the component for FeaturePage
|
|
16
|
+
*/
|
|
15
17
|
var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
|
|
16
18
|
fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
|
|
17
19
|
});
|
|
@@ -42,7 +42,8 @@ const ProctorApp = _ref => {
|
|
|
42
42
|
config,
|
|
43
43
|
getProctorParamValues = () => {},
|
|
44
44
|
getWebcamSnapshot = () => {},
|
|
45
|
-
getScreengrab = () => {}
|
|
45
|
+
getScreengrab = () => {},
|
|
46
|
+
logger = () => {}
|
|
46
47
|
} = _ref;
|
|
47
48
|
const context = (0, _react.useContext)(proctoredContext);
|
|
48
49
|
const {
|
|
@@ -62,7 +63,7 @@ const ProctorApp = _ref => {
|
|
|
62
63
|
const recurringFetchIntervalRef = (0, _react.useRef)(null);
|
|
63
64
|
const sendScreengrab = (0, _react.useCallback)(async function () {
|
|
64
65
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
65
|
-
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
66
|
+
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
66
67
|
if (proctorParams.screenshareSnapshots && permissions.screenshare) {
|
|
67
68
|
const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.SCREENSHARE_REFERENCE_ID));
|
|
68
69
|
getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
|
|
@@ -70,7 +71,7 @@ const ProctorApp = _ref => {
|
|
|
70
71
|
}, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
|
|
71
72
|
const sendWebcamSnapshot = (0, _react.useCallback)(async function () {
|
|
72
73
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
73
|
-
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
74
|
+
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
74
75
|
if (proctorParams.webcamSnapshots && permissions.video) {
|
|
75
76
|
const webcamSnapshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.WEBCAM_REFERENCE_ID));
|
|
76
77
|
getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
|
|
@@ -78,7 +79,7 @@ const ProctorApp = _ref => {
|
|
|
78
79
|
}, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video]);
|
|
79
80
|
const sendProctoredParamValues = (0, _react.useCallback)(function () {
|
|
80
81
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
81
|
-
let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
82
|
+
let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
82
83
|
getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
|
|
83
84
|
}, [proctoringIdentifier, getProctorParamValues]);
|
|
84
85
|
const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
|
|
@@ -113,7 +114,7 @@ const ProctorApp = _ref => {
|
|
|
113
114
|
}, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
|
|
114
115
|
const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, permissions);
|
|
115
116
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
116
|
-
className: "".concat(proctorParams.copyPasteProctoring ?
|
|
117
|
+
className: "".concat(proctorParams.copyPasteProctoring ? 'disable-copy-paste fullwidth fullheight' : 'fullwidth fullheight')
|
|
117
118
|
}, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
|
|
118
119
|
permissions: permissions,
|
|
119
120
|
references: references,
|
|
@@ -128,7 +129,8 @@ const ProctorApp = _ref => {
|
|
|
128
129
|
setAudioPermission: permissionSetter.audio,
|
|
129
130
|
setVideoPermission: permissionSetter.video,
|
|
130
131
|
webcamReference: references.webcamReference,
|
|
131
|
-
canvasReference: references.canvasReference
|
|
132
|
+
canvasReference: references.canvasReference,
|
|
133
|
+
logger: logger
|
|
132
134
|
}), /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
|
|
133
135
|
screenshareStream: screenshareStream,
|
|
134
136
|
ref: references.screenshareReference
|
|
@@ -11,7 +11,9 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
var _loadable = _interopRequireDefault(require("../../utils/loadable"));
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /**
|
|
15
|
+
* Asynchronously loads the component for FeaturePage
|
|
16
|
+
*/
|
|
15
17
|
var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
|
|
16
18
|
fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
|
|
17
19
|
});
|
|
@@ -1,55 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.weak-map.js");
|
|
4
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
8
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
9
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _reactWebcam = _interopRequireDefault(require("react-webcam"));
|
|
11
|
-
var _dom = require("../../constants/dom");
|
|
12
12
|
var _breachUtils = require("../../utils/breachUtils");
|
|
13
13
|
var _browserUtils = require("../../utils/browserUtils");
|
|
14
14
|
var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
|
|
15
|
+
var _dom = require("../../constants/dom");
|
|
15
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
17
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
18
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
const WEBCAM_PERMISISON_RETRIES_COUNT = 2;
|
|
18
20
|
const WebcamActivityTracker = _ref => {
|
|
19
21
|
let {
|
|
20
22
|
proctorParams,
|
|
21
23
|
setAudioPermission,
|
|
22
24
|
setVideoPermission,
|
|
23
|
-
webcamReference
|
|
25
|
+
webcamReference,
|
|
26
|
+
logger
|
|
24
27
|
} = _ref;
|
|
28
|
+
const [retryCount, setRetryCount] = (0, _react.useState)(WEBCAM_PERMISISON_RETRIES_COUNT);
|
|
25
29
|
(0, _react.useEffect)(() => {
|
|
26
30
|
if ((0, _browserUtils.isChrome)()) {
|
|
27
|
-
if ((0, _breachUtils.
|
|
31
|
+
if ((0, _breachUtils.isAudioRequired)()) {
|
|
28
32
|
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
29
33
|
(0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
|
|
30
34
|
status.onchange = evt => {
|
|
31
35
|
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
32
36
|
};
|
|
33
37
|
}).catch(err => {
|
|
34
|
-
(0, _webcamMicrophoneUtils.updateAudioPermissions)(
|
|
38
|
+
(0, _webcamMicrophoneUtils.updateAudioPermissions)('Audio Permission', err);
|
|
35
39
|
});
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
}, [setVideoPermission, setAudioPermission, proctorParams]);
|
|
39
43
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.isWebcamRequired)(proctorParams) && /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
|
|
40
|
-
audio:
|
|
41
|
-
muted: true,
|
|
44
|
+
audio: (0, _breachUtils.isAudioRequired)(),
|
|
42
45
|
screenshotFormat: "image/jpeg",
|
|
43
46
|
ref: webcamReference,
|
|
44
47
|
onUserMedia: () => {
|
|
45
48
|
setVideoPermission(true);
|
|
46
49
|
},
|
|
47
50
|
onUserMediaError: err => {
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
logger("Retry Count = ".concat(retryCount, " | Webcam error, onUserMediaError | ").concat(err.toString()));
|
|
52
|
+
if (retryCount === 0) {
|
|
53
|
+
setVideoPermission(false);
|
|
54
|
+
} else {
|
|
55
|
+
setRetryCount(retryCount - 1);
|
|
56
|
+
}
|
|
50
57
|
},
|
|
51
58
|
className: "captured-video-canvas hide",
|
|
52
|
-
id: _dom.WEBCAM_REFERENCE_ID
|
|
59
|
+
id: _dom.WEBCAM_REFERENCE_ID,
|
|
60
|
+
key: retryCount
|
|
53
61
|
}));
|
|
54
62
|
};
|
|
55
63
|
var _default = WebcamActivityTracker;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.showProctoredComponent = exports.isWebcamRequired = exports.getRequiredPermissionsFromProctorParams = exports.getInitialStats = exports.getDataOnBreach = void 0;
|
|
6
|
+
exports.showProctoredComponent = exports.isWebcamRequired = exports.isAudioRequired = exports.getRequiredPermissionsFromProctorParams = exports.getInitialStats = exports.getDataOnBreach = void 0;
|
|
7
7
|
require("core-js/modules/es.symbol.description.js");
|
|
8
8
|
var _defaults = require("../constants/defaults");
|
|
9
9
|
var _permission = require("./permission");
|
|
@@ -41,6 +41,8 @@ const getRequiredPermissionsFromProctorParams = proctorParams => {
|
|
|
41
41
|
exports.getRequiredPermissionsFromProctorParams = getRequiredPermissionsFromProctorParams;
|
|
42
42
|
const isWebcamRequired = proctorParams => proctorParams.people || proctorParams.lookedAway || proctorParams.webcamSnapshots;
|
|
43
43
|
exports.isWebcamRequired = isWebcamRequired;
|
|
44
|
+
const isAudioRequired = () => false;
|
|
45
|
+
exports.isAudioRequired = isAudioRequired;
|
|
44
46
|
const showProctoredComponent = (proctorParams, permissions) => {
|
|
45
47
|
return (0, _permission.hasAllPermissions)(getRequiredPermissionsFromProctorParams(proctorParams), permissions);
|
|
46
48
|
};
|
|
@@ -13,7 +13,7 @@ require("core-js/modules/es.typed-array.to-locale-string.js");
|
|
|
13
13
|
require("core-js/modules/es.promise.js");
|
|
14
14
|
var _ = require(".");
|
|
15
15
|
var _defaults = require("../constants/defaults");
|
|
16
|
-
const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !==
|
|
16
|
+
const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !== 'undefined' && webcamReference.current !== null && webcamReference.current.video.readyState === 4;
|
|
17
17
|
exports.isWebcamVideoValid = isWebcamVideoValid;
|
|
18
18
|
const updateStatistics = (statistics, currentStats, proctorParams) => {
|
|
19
19
|
const {
|
|
@@ -71,12 +71,12 @@ const getGlancePercentage = partSegmentation => {
|
|
|
71
71
|
};
|
|
72
72
|
exports.getGlancePercentage = getGlancePercentage;
|
|
73
73
|
const getVideoPermission = function getVideoPermission(stream) {
|
|
74
|
-
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
74
|
+
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
75
75
|
return stream.getVideoTracks().filter(track => track.enabled && track.label && track.id !== exludeTrackId).length > 0;
|
|
76
76
|
};
|
|
77
77
|
exports.getVideoPermission = getVideoPermission;
|
|
78
78
|
const getAudioPermission = function getAudioPermission(stream) {
|
|
79
|
-
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
79
|
+
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
80
80
|
return stream.getAudioTracks().filter(track => track.enabled && track.label && !track.muted && track.id !== exludeTrackId).length > 0;
|
|
81
81
|
};
|
|
82
82
|
exports.getAudioPermission = getAudioPermission;
|
|
@@ -108,10 +108,14 @@ const updateVideoPermissions = setVideoPermission => {
|
|
|
108
108
|
};
|
|
109
109
|
exports.updateVideoPermissions = updateVideoPermissions;
|
|
110
110
|
const setupScreensharePermission = (setScreensharePermission, screenshareReference, setScreenshareStream) => navigator.mediaDevices.getDisplayMedia({
|
|
111
|
+
video: {
|
|
112
|
+
displaySurface: 'monitor'
|
|
113
|
+
}
|
|
114
|
+
}).catch(() => navigator.mediaDevices.getDisplayMedia({
|
|
111
115
|
video: true
|
|
112
|
-
}).then(stream => {
|
|
116
|
+
})).then(stream => {
|
|
113
117
|
const track = stream.getTracks()[0];
|
|
114
|
-
if (track.getSettings().displaySurface ===
|
|
118
|
+
if (track.getSettings().displaySurface === 'monitor') {
|
|
115
119
|
setScreensharePermission(true);
|
|
116
120
|
setScreenshareStream(stream);
|
|
117
121
|
collectScreenshare(screenshareReference, stream);
|
|
@@ -145,16 +149,16 @@ const resetWebcamReference = webcamReference => {
|
|
|
145
149
|
};
|
|
146
150
|
exports.resetWebcamReference = resetWebcamReference;
|
|
147
151
|
const getVideoPermissionQuery = () => navigator.permissions.query({
|
|
148
|
-
name:
|
|
152
|
+
name: 'camera'
|
|
149
153
|
});
|
|
150
154
|
exports.getVideoPermissionQuery = getVideoPermissionQuery;
|
|
151
155
|
const getAudioPermissionQuery = () => navigator.permissions.query({
|
|
152
|
-
name:
|
|
156
|
+
name: 'microphone'
|
|
153
157
|
});
|
|
154
158
|
exports.getAudioPermissionQuery = getAudioPermissionQuery;
|
|
155
159
|
const b64DataURItoBlob = dataURI => {
|
|
156
|
-
const byteString = window.atob(dataURI.split(
|
|
157
|
-
const mimeString = dataURI.split(
|
|
160
|
+
const byteString = window.atob(dataURI.split(',')[1]);
|
|
161
|
+
const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
|
158
162
|
const u8arr = new Uint8Array(byteString.length);
|
|
159
163
|
for (let i = 0; i < byteString.length; i += 1) {
|
|
160
164
|
u8arr[i] = byteString.charCodeAt(i);
|
|
@@ -175,18 +179,18 @@ exports.captureWebcamSnapshot = captureWebcamSnapshot;
|
|
|
175
179
|
const captureScreenshot = async elementIdSelector => {
|
|
176
180
|
try {
|
|
177
181
|
const video = document.querySelector(elementIdSelector);
|
|
178
|
-
const canvas = document.createElement(
|
|
182
|
+
const canvas = document.createElement('canvas');
|
|
179
183
|
if (window.createImageBitmap) {
|
|
180
184
|
const bitmap = await createImageBitmap(video);
|
|
181
185
|
canvas.width = bitmap.width;
|
|
182
186
|
canvas.height = bitmap.height;
|
|
183
|
-
canvas.getContext(
|
|
187
|
+
canvas.getContext('bitmaprenderer').transferFromImageBitmap(bitmap);
|
|
184
188
|
const blob = await new Promise(res => canvas.toBlob(res));
|
|
185
189
|
return blob;
|
|
186
190
|
} else {
|
|
187
191
|
canvas.width = video.videoWidth;
|
|
188
192
|
canvas.height = video.videoHeight;
|
|
189
|
-
canvas.getContext(
|
|
193
|
+
canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
|
|
190
194
|
const blob = await new Promise(resolve => canvas.toBlob(resolve));
|
|
191
195
|
return blob;
|
|
192
196
|
}
|
package/package.json
CHANGED
|
Binary file
|