@newtonschool/react_proctoring_library 0.0.75 → 0.0.78

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.
@@ -8,7 +8,7 @@ require("core-js/modules/es.symbol.description.js");
8
8
  var _react = require("react");
9
9
  var _useGenericFullScreenData = _interopRequireDefault(require("../../hooks/useGenericFullScreenData"));
10
10
  var _ElectronContext = require("../../contexts/ElectronContext");
11
- var _useKishokMode = _interopRequireDefault(require("../../hooks/electron/useKishokMode"));
11
+ var _useKioskMode = _interopRequireDefault(require("../../hooks/electron/useKioskMode"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  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; }
14
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -25,13 +25,15 @@ function FullScreen(_ref) {
25
25
  const {
26
26
  setFullscreen
27
27
  } = (0, _useGenericFullScreenData.default)(isElectronApp);
28
- (0, _useKishokMode.default)({
28
+ (0, _useKioskMode.default)({
29
29
  proctoredContext,
30
30
  proctorParams
31
31
  });
32
32
  (0, _react.useEffect)(() => {
33
33
  setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
34
- fullscreen: () => setFullscreen(true)
34
+ fullscreen: () => {
35
+ setFullscreen(true);
36
+ }
35
37
  }));
36
38
  }, [setAskPermissionAction, setFullscreen]);
37
39
  return null;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = exports.ProctorApp = void 0;
9
9
  require("core-js/modules/web.dom-collections.iterator.js");
10
+ require("core-js/modules/es.promise.js");
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  require("./index.scss");
12
13
  var _permissions = require("../permissions");
@@ -64,12 +65,14 @@ const ProctorApp = _ref => {
64
65
  const CustomPermissionView = customPermissionView;
65
66
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
66
67
  const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, permissions);
67
- const askPermission = (0, _react.useCallback)(requiredPermissions => {
68
+ const askPermission = (0, _react.useCallback)(async requiredPermissions => {
69
+ const allPromises = [];
68
70
  requiredPermissions.forEach(element => {
69
71
  if (!permissions[element] && askPermissionAction[element]) {
70
- askPermissionAction[element]();
72
+ allPromises.push(askPermissionAction[element]());
71
73
  }
72
74
  });
75
+ await Promise.all(allPromises);
73
76
  }, [permissions, askPermissionAction]);
74
77
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
75
78
  className: "".concat(proctorParams.copyPasteProctoring ? 'disable-copy-paste fullwidth fullheight' : 'fullwidth fullheight'),
@@ -43,6 +43,7 @@ const ProctoredContextApp = _ref => {
43
43
  screenshare: null
44
44
  });
45
45
  const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
46
+ const [_, setUpdateId] = (0, _react.useState)(0);
46
47
  const webcamReference = (0, _react.useRef)(null);
47
48
  const screenshareReference = (0, _react.useRef)(null);
48
49
  const [screenshareStream, setScreenshareStream] = (0, _react.useState)(null);
@@ -57,6 +58,9 @@ const ProctoredContextApp = _ref => {
57
58
  fullscreen: isFullscreen,
58
59
  screenshare: screensharePermission
59
60
  }), [videoPermission, audioPermisison, isFullscreen, screensharePermission]);
61
+ const forceUpdate = () => {
62
+ setUpdateId(oldId => oldId + 1);
63
+ };
60
64
  const endTest = () => {
61
65
  if (isElectronApp) {
62
66
  window.electron.actions.stopProctoring();
@@ -91,7 +95,8 @@ const ProctoredContextApp = _ref => {
91
95
  webcamReference,
92
96
  screenshareReference
93
97
  },
94
- screenshareStream
98
+ screenshareStream,
99
+ forceUpdate
95
100
  }),
96
101
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ElectronContext.ElectronContextProvider, {
97
102
  value: isElectronApp,
@@ -29,7 +29,7 @@ function ElectronScreenShare(_ref) {
29
29
  (0, _react.useEffect)(() => {
30
30
  setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
31
31
  screenshare: async () => {
32
- device.setScreenShareDeviceId(false);
32
+ device.setScreenShareDeviceId(undefined);
33
33
  setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
34
34
  screenshare: null
35
35
  }));
@@ -89,18 +89,16 @@ function ElectronScreenShare(_ref) {
89
89
  }
90
90
  }, [streamDeviceId, config]);
91
91
  (0, _react.useEffect)(() => {
92
- if (streamDeviceId) {
93
- const permissionSetter = permission => {
94
- setScreensharePermission(permission);
95
- };
96
- window.electron.states.isScreenShareRecordingStarted(streamDeviceId).then(recordingStarted => {
97
- permissionSetter(recordingStarted);
98
- });
99
- const id = window.electron.listener.screenShareRecordingStatusChanged(streamDeviceId, permissionSetter);
100
- return () => {
101
- window.electron.listener.removeListener(id, permissionSetter);
102
- };
103
- }
92
+ const permissionSetter = permission => {
93
+ setScreensharePermission(permission);
94
+ };
95
+ window.electron.states.isScreenShareRecordingStarted(streamDeviceId).then(recordingStarted => {
96
+ permissionSetter(recordingStarted);
97
+ });
98
+ const id = window.electron.listener.screenShareRecordingStatusChanged(streamDeviceId, permissionSetter);
99
+ return () => {
100
+ window.electron.listener.removeListener(id, permissionSetter);
101
+ };
104
102
  }, [streamDeviceId]);
105
103
  return null;
106
104
  }
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = ElectronWebCam;
8
- require("core-js/modules/web.dom-collections.iterator.js");
8
+ require("core-js/modules/es.array.includes.js");
9
+ require("core-js/modules/es.string.includes.js");
9
10
  require("core-js/modules/es.promise.js");
10
11
  var _react = require("react");
11
12
  var _reactWebcam = _interopRequireDefault(require("react-webcam"));
@@ -16,20 +17,27 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
16
17
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
17
18
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
18
19
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
+ const getMacBookDevice = function getMacBookDevice() {
21
+ let devices = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
22
+ if (devices.length === 1) {
23
+ return devices[0];
24
+ }
25
+ return devices.find(device => device.label.includes('FaceTime HD Camera'));
26
+ };
19
27
  function ElectronWebCam(_ref) {
20
28
  let {
21
29
  setAskPermissionAction,
22
30
  proctoredContext,
23
- proctorParams,
24
31
  config
25
32
  } = _ref;
26
33
  const {
27
34
  permissionSetter,
28
35
  references,
36
+ permissions,
29
37
  setPermissionErrors,
30
- device
38
+ device,
39
+ forceUpdate
31
40
  } = (0, _react.useContext)(proctoredContext);
32
- const [permissionGrantedInElectron, setPermissionGrantedInElectron] = (0, _react.useState)(false);
33
41
  const setVideoPermission = permissionSetter.video;
34
42
  const webcamReference = references.webcamReference;
35
43
  const {
@@ -37,7 +45,6 @@ function ElectronWebCam(_ref) {
37
45
  recurringFetchInterval = 30000
38
46
  } = config;
39
47
  const deviceId = device === null || device === void 0 ? void 0 : device.webCamDeviceId;
40
- const [retry, setRetry] = (0, _react.useState)(0);
41
48
  (0, _react.useEffect)(() => {
42
49
  setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
43
50
  video: async () => {
@@ -54,9 +61,13 @@ function ElectronWebCam(_ref) {
54
61
  if (devices.length === 0) {
55
62
  throw new Error('No webcam devices found');
56
63
  }
57
- const permissionGranted = await window.electron.actions.startWebCamRecording(devices[0].deviceId);
64
+ const macBookDevice = getMacBookDevice(devices);
65
+ if (!device) {
66
+ throw new Error('No webcam devices found');
67
+ }
68
+ const permissionGranted = await window.electron.actions.startWebCamRecording(macBookDevice.deviceId);
58
69
  if (permissionGranted) {
59
- device.setWebCamDeviceId(devices[0].deviceId);
70
+ device.setWebCamDeviceId(macBookDevice.deviceId);
60
71
  } else {
61
72
  throw new Error('Error starting webcam recording');
62
73
  }
@@ -82,7 +93,7 @@ function ElectronWebCam(_ref) {
82
93
  fileUploadConfig: config.fileUploadConfig
83
94
  });
84
95
  }
85
- setPermissionGrantedInElectron(true);
96
+ setVideoPermission(true);
86
97
  } catch (error) {
87
98
  setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
88
99
  video: (error === null || error === void 0 ? void 0 : error.message) || 'Error while taking webcam snapshot'
@@ -96,10 +107,10 @@ function ElectronWebCam(_ref) {
96
107
  (0, _react.useEffect)(() => {
97
108
  if (deviceId) {
98
109
  const permissionSetter = permission => {
99
- setPermissionGrantedInElectron(permission);
110
+ setVideoPermission(permission);
100
111
  };
101
112
  window.electron.states.isWebCamRecordingStarted(deviceId).then(permission => {
102
- setPermissionGrantedInElectron(permission);
113
+ setVideoPermission(true);
103
114
  });
104
115
  const id = window.electron.listener.webCamSnapshotRecordingStatusChanged(deviceId, permissionSetter);
105
116
  return () => {
@@ -107,27 +118,17 @@ function ElectronWebCam(_ref) {
107
118
  };
108
119
  }
109
120
  }, [deviceId]);
110
- (0, _react.useEffect)(() => {
111
- if (!permissionGrantedInElectron) {
112
- setVideoPermission(false);
113
- }
114
- }, [permissionGrantedInElectron]);
115
- if (!permissionGrantedInElectron) {
121
+ if (!permissions.video) {
116
122
  return;
117
123
  }
118
124
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactWebcam.default, {
119
125
  audio: false,
120
126
  screenshotFormat: "image/jpeg",
121
127
  onUserMedia: () => {
122
- setVideoPermission(true);
123
- },
124
- onUserMediaError: () => {
125
- if (retry < 3) {
126
- setRetry(retry + 1);
127
- }
128
+ forceUpdate(true);
128
129
  },
129
130
  ref: webcamReference,
130
131
  className: "captured-video-canvas hide",
131
132
  id: 'WEBCAM_REFERENCE_ID'
132
- }, "".concat(deviceId, "-").concat(retry));
133
+ });
133
134
  }
@@ -3,14 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = useKishokMode;
6
+ exports.default = useKioskMode;
7
7
  require("core-js/modules/web.dom-collections.iterator.js");
8
8
  var _react = require("react");
9
9
  var _breachUtils = require("../../utils/breachUtils");
10
10
  var _useGenericFullScreenData = _interopRequireDefault(require("../useGenericFullScreenData"));
11
11
  var _ElectronContext = require("../../contexts/ElectronContext");
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
- function useKishokMode(_ref) {
13
+ function useKioskMode(_ref) {
14
14
  let {
15
15
  proctoredContext,
16
16
  proctorParams
@@ -3,35 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = useWakeUpLock;
6
+ exports.default = usePageVisibility;
7
7
  require("core-js/modules/web.dom-collections.iterator.js");
8
- require("core-js/modules/es.promise.js");
9
8
  var _react = require("react");
10
9
  var _ElectronContext = require("../../contexts/ElectronContext");
11
- function useWakeUpLock() {
12
- const [isWakeUpLockAcquired, setIsWakeUpLockAcquired] = (0, _react.useState)(0);
10
+ function usePageVisibility(isProctorParam) {
11
+ const [isPageFocused, setIsPageFocused] = (0, _react.useState)(true);
13
12
  const isElectronApp = (0, _react.useContext)(_ElectronContext.ElectronContext);
14
- const acquireWakeUpLock = async () => {
15
- const id = await window.electron.actions.startWakeLock();
16
- setIsWakeUpLockAcquired(id);
17
- };
18
- const releaseWakeUpLock = async () => {
19
- window.electron.actions.stopWakeLock(isWakeUpLockAcquired);
20
- setIsWakeUpLockAcquired(0);
21
- };
22
13
  (0, _react.useEffect)(() => {
23
14
  if (isElectronApp) {
24
- const isWakeUpLockChangeHandler = isPageFocused => {
25
- setIsWakeUpLockAcquired(isPageFocused);
15
+ const isPageFocusChanged = isPageFocused => {
16
+ setIsPageFocused(isPageFocused);
26
17
  };
27
- const signal = window.electron.listener.isPageVisibilityChanged(isWakeUpLockChangeHandler);
18
+ const signal = window.electron.listener.isPageFocusedChanged(isPageFocusChanged);
28
19
  return () => {
29
- window.electron.listener.removeListener(signal, isWakeUpLockChangeHandler);
20
+ window.electron.listener.removeListener(signal, isPageFocusChanged);
30
21
  };
31
22
  }
32
23
  }, [isElectronApp]);
33
- return {
34
- acquireWakeUpLock,
35
- releaseWakeUpLock
36
- };
24
+ return isPageFocused && isProctorParam;
37
25
  }
@@ -8,6 +8,7 @@ var _useFullScreenData = _interopRequireDefault(require("./web/useFullScreenData
8
8
  var _useFullScreenData2 = _interopRequireDefault(require("./electron/useFullScreenData"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  function useGenericFullScreenData(isElectronApp) {
11
+ console.log(isElectronApp, 'isElectronApp');
11
12
  const {
12
13
  isFullscreen: webIsFullScreen,
13
14
  setFullscreen: setWebIsFullScreen
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.75",
3
+ "version": "0.0.78",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
6
6
  "main": "dist/index.js",