@newtonschool/react_proctoring_library 0.0.82 → 0.0.84
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/breach-parameters/index.js +4 -2
- package/dist/components/proctor-app/index.js +3 -1
- package/dist/components/proctor-context-app/index.js +6 -9
- package/dist/components/webcam-activity-tracker/electron.js +2 -2
- package/dist/hooks/useCleanupPermissions.js +30 -0
- package/dist/hooks/useTrackBreachParameters.js +3 -2
- package/dist/index.js +7 -0
- package/dist/utils/breachUtils.js +1 -1
- package/dist/utils/permission.js +30 -2
- package/package.json +1 -1
|
@@ -11,14 +11,16 @@ function BreachParameters(_ref) {
|
|
|
11
11
|
getProctorParamValues,
|
|
12
12
|
proctoringIdentifier,
|
|
13
13
|
permissions,
|
|
14
|
-
proctorParams
|
|
14
|
+
proctorParams,
|
|
15
|
+
allPermissionGrantedOnce
|
|
15
16
|
} = _ref;
|
|
16
17
|
(0, _useTrackBreachParameters.useTrackBreachParameters)({
|
|
17
18
|
config,
|
|
18
19
|
getProctorParamValues,
|
|
19
20
|
proctoringIdentifier,
|
|
20
21
|
permissions,
|
|
21
|
-
proctorParams
|
|
22
|
+
proctorParams,
|
|
23
|
+
allPermissionGrantedOnce
|
|
22
24
|
});
|
|
23
25
|
return null;
|
|
24
26
|
}
|
|
@@ -46,7 +46,8 @@ const ProctorApp = _ref => {
|
|
|
46
46
|
const {
|
|
47
47
|
permissions,
|
|
48
48
|
references,
|
|
49
|
-
permissionErrors
|
|
49
|
+
permissionErrors,
|
|
50
|
+
allPermissionGrantedOnce
|
|
50
51
|
} = context;
|
|
51
52
|
const {
|
|
52
53
|
acquireWakeUpLock,
|
|
@@ -113,6 +114,7 @@ const ProctorApp = _ref => {
|
|
|
113
114
|
getProctorParamValues: getProctorParamValues,
|
|
114
115
|
permissions: permissions,
|
|
115
116
|
proctorParams: proctorParams,
|
|
117
|
+
allPermissionGrantedOnce: allPermissionGrantedOnce,
|
|
116
118
|
proctoringIdentifier: proctoringIdentifier
|
|
117
119
|
})]
|
|
118
120
|
});
|
|
@@ -36,6 +36,7 @@ const ProctoredContextApp = _ref => {
|
|
|
36
36
|
const [screenShareDeviceId, setScreenShareDeviceId] = (0, _react.useState)();
|
|
37
37
|
const [audioPermisison, setAudioPermission] = (0, _react.useState)();
|
|
38
38
|
const [videoPermission, setVideoPermission] = (0, _react.useState)();
|
|
39
|
+
const allPermissionGrantedOnce = (0, _react.useRef)(false);
|
|
39
40
|
const [permissionErrors, setPermissionErrors] = (0, _react.useState)({
|
|
40
41
|
audio: null,
|
|
41
42
|
video: null,
|
|
@@ -61,19 +62,15 @@ const ProctoredContextApp = _ref => {
|
|
|
61
62
|
const forceUpdate = () => {
|
|
62
63
|
setUpdateId(oldId => oldId + 1);
|
|
63
64
|
};
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
|
|
65
|
+
(0, _react.useEffect)(() => {
|
|
66
|
+
if (videoPermission && screensharePermission && isFullscreen) {
|
|
67
|
+
allPermissionGrantedOnce.current = true;
|
|
67
68
|
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// useEffect(()=>{
|
|
71
|
-
// endTest
|
|
72
|
-
// })
|
|
73
|
-
|
|
69
|
+
}, [videoPermission, isFullscreen, screensharePermission]);
|
|
74
70
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Context.Provider, {
|
|
75
71
|
value: _objectSpread(_objectSpread({}, customContext), {}, {
|
|
76
72
|
permissions,
|
|
73
|
+
allPermissionGrantedOnce,
|
|
77
74
|
permissionSetter: {
|
|
78
75
|
audio: setAudioPermission,
|
|
79
76
|
video: setVideoPermission,
|
|
@@ -10,7 +10,7 @@ require("core-js/modules/es.string.includes.js");
|
|
|
10
10
|
require("core-js/modules/es.promise.js");
|
|
11
11
|
var _react = require("react");
|
|
12
12
|
var _reactWebcam = _interopRequireDefault(require("react-webcam"));
|
|
13
|
-
var
|
|
13
|
+
var _useGenericSleepDetected = _interopRequireDefault(require("../../hooks/useGenericSleepDetected"));
|
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
16
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -49,7 +49,7 @@ function ElectronWebCam(_ref) {
|
|
|
49
49
|
recurringFetchInterval = 30000
|
|
50
50
|
} = config;
|
|
51
51
|
const deviceId = device === null || device === void 0 ? void 0 : device.webCamDeviceId;
|
|
52
|
-
const deviceWentToSleepCount = (0,
|
|
52
|
+
const deviceWentToSleepCount = (0, _useGenericSleepDetected.default)();
|
|
53
53
|
(0, _react.useEffect)(() => {
|
|
54
54
|
setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
|
|
55
55
|
video: async () => {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCleanupPermissions = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _permission = require("../utils/permission");
|
|
9
|
+
const useCleanupPermissions = _ref => {
|
|
10
|
+
let {
|
|
11
|
+
proctoredContext
|
|
12
|
+
} = _ref;
|
|
13
|
+
const {
|
|
14
|
+
references,
|
|
15
|
+
screenshareStream,
|
|
16
|
+
permissionSetter,
|
|
17
|
+
streamSetter,
|
|
18
|
+
allPermissionGrantedOnce
|
|
19
|
+
} = (0, _react.useContext)(proctoredContext);
|
|
20
|
+
const cleanupPermissions = () => {
|
|
21
|
+
const screenShareReference = references.screenshareReference;
|
|
22
|
+
const setScreensharePermission = permissionSetter.screenshare;
|
|
23
|
+
const setScreenshareStream = streamSetter.screenshare;
|
|
24
|
+
(0, _permission.stopScreenshare)(screenshareStream, setScreensharePermission, screenShareReference, setScreenshareStream);
|
|
25
|
+
allPermissionGrantedOnce.current = false;
|
|
26
|
+
(0, _permission.exitFullscreen)();
|
|
27
|
+
};
|
|
28
|
+
return cleanupPermissions;
|
|
29
|
+
};
|
|
30
|
+
exports.useCleanupPermissions = useCleanupPermissions;
|
|
@@ -18,7 +18,8 @@ const useTrackBreachParameters = _ref => {
|
|
|
18
18
|
getProctorParamValues,
|
|
19
19
|
proctoringIdentifier,
|
|
20
20
|
proctorParams,
|
|
21
|
-
permissions
|
|
21
|
+
permissions,
|
|
22
|
+
allPermissionGrantedOnce
|
|
22
23
|
} = _ref;
|
|
23
24
|
const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
|
|
24
25
|
const {
|
|
@@ -65,7 +66,7 @@ const useTrackBreachParameters = _ref => {
|
|
|
65
66
|
};
|
|
66
67
|
const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
|
|
67
68
|
(0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
|
|
68
|
-
if (breachData) {
|
|
69
|
+
if (breachData && allPermissionGrantedOnce.current) {
|
|
69
70
|
sendProctoredParamValues(true, breachData.breachedParam);
|
|
70
71
|
}
|
|
71
72
|
previousIllegalKeysCombinationCount.current = illegalKeysCombinationCount;
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "ProctoredContextApp", {
|
|
|
15
15
|
return _components.ProctoredContextApp;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
+
Object.defineProperty(exports, "useCleanupPermissions", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _useCleanupPermissions.useCleanupPermissions;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
18
24
|
Object.defineProperty(exports, "useIsElectron", {
|
|
19
25
|
enumerable: true,
|
|
20
26
|
get: function get() {
|
|
@@ -23,4 +29,5 @@ Object.defineProperty(exports, "useIsElectron", {
|
|
|
23
29
|
});
|
|
24
30
|
var _components = require("./components");
|
|
25
31
|
var _useIsElectron = _interopRequireDefault(require("./hooks/electron/useIsElectron"));
|
|
32
|
+
var _useCleanupPermissions = require("./hooks/useCleanupPermissions");
|
|
26
33
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -74,7 +74,7 @@ const getDataOnBreach = (statistics, currentData, proctorParams) => {
|
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
const illegalKeyCombinationDetectedParam = _defaults.STATS_PARAMS.illegalKeysCombinationDetected;
|
|
77
|
-
if (proctorParams.illegalKeysCombinationDetected && isIllegalKeysCombinationDetected
|
|
77
|
+
if (proctorParams.illegalKeysCombinationDetected && isIllegalKeysCombinationDetected) {
|
|
78
78
|
return {
|
|
79
79
|
breachedParam: illegalKeyCombinationDetectedParam,
|
|
80
80
|
timestamp,
|
package/dist/utils/permission.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.hasAllPermissions = void 0;
|
|
6
|
+
exports.stopScreenshare = exports.hasAllPermissions = exports.exitFullscreen = void 0;
|
|
7
7
|
const hasAllPermissions = (requiredPermissions, permissions) => {
|
|
8
8
|
let hasPermission = true;
|
|
9
9
|
requiredPermissions.forEach(element => {
|
|
@@ -15,4 +15,32 @@ const hasAllPermissions = (requiredPermissions, permissions) => {
|
|
|
15
15
|
});
|
|
16
16
|
return hasPermission;
|
|
17
17
|
};
|
|
18
|
-
exports.hasAllPermissions = hasAllPermissions;
|
|
18
|
+
exports.hasAllPermissions = hasAllPermissions;
|
|
19
|
+
const exitFullscreen = () => {
|
|
20
|
+
if (!document) return;
|
|
21
|
+
if (document.exitFullscreen) {
|
|
22
|
+
var _document;
|
|
23
|
+
(_document = document) === null || _document === void 0 ? void 0 : _document.exitFullscreen();
|
|
24
|
+
} else if (document.mozCancelFullScreen) {
|
|
25
|
+
var _document2;
|
|
26
|
+
(_document2 = document) === null || _document2 === void 0 ? void 0 : _document2.mozCancelFullScreen();
|
|
27
|
+
} else if (document.webkitExitFullscreen) {
|
|
28
|
+
var _document3;
|
|
29
|
+
(_document3 = document) === null || _document3 === void 0 ? void 0 : _document3.webkitExitFullscreen();
|
|
30
|
+
} else if (document.msExitFullscreen) {
|
|
31
|
+
var _document4;
|
|
32
|
+
(_document4 = document) === null || _document4 === void 0 ? void 0 : _document4.msExitFullscreen();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.exitFullscreen = exitFullscreen;
|
|
36
|
+
const stopScreenshare = (screenshareStream, setScreensharePermission, screenshareReference, setScreenshareStream) => {
|
|
37
|
+
if (screenshareStream) {
|
|
38
|
+
screenshareStream.getTracks().forEach(track => track.stop());
|
|
39
|
+
if (screenshareReference.current) {
|
|
40
|
+
screenshareReference.current.srcObject = null;
|
|
41
|
+
}
|
|
42
|
+
setScreenshareStream(null);
|
|
43
|
+
setScreensharePermission(false);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.stopScreenshare = stopScreenshare;
|