@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.
@@ -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
- const endTest = () => {
65
- if (isElectronApp) {
66
- window.electron.actions.stopProctoring();
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 _useSleepDetetected = require("../../hooks/useSleepDetetected");
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, _useSleepDetetected.useSleepDetected)();
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 && !data[illegalKeyCombinationDetectedParam]) {
77
+ if (proctorParams.illegalKeysCombinationDetected && isIllegalKeysCombinationDetected) {
78
78
  return {
79
79
  breachedParam: illegalKeyCombinationDetectedParam,
80
80
  timestamp,
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.82",
3
+ "version": "0.0.84",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
6
6
  "main": "dist/index.js",