@newtonschool/react_proctoring_library 0.0.18 → 0.0.21

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.
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.object.assign.js");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -13,8 +15,6 @@ var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  require("./index.scss");
15
17
 
16
- var _ = require(".");
17
-
18
18
  var _utils = require("../utils");
19
19
 
20
20
  var _hooks = require("../hooks");
@@ -29,12 +29,18 @@ var _webcamMicrophoneUtils = require("../utils/webcamMicrophoneUtils");
29
29
 
30
30
  var _defaults = require("../constants/defaults");
31
31
 
32
+ var _activityTracker = _interopRequireDefault(require("./activity-tracker"));
33
+
34
+ var _browserUtils = require("../utils/browserUtils");
35
+
32
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
37
 
34
38
  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); }
35
39
 
36
40
  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; }
37
41
 
42
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
43
+
38
44
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
45
 
40
46
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -46,25 +52,43 @@ const isWebcamProcessingReliable = (0, _utils.isGPUAvailable)();
46
52
  const ProctorApp = _ref => {
47
53
  let {
48
54
  proctoringIdentifier,
55
+ customPermissionView = null,
56
+ shouldRenderChildren = false,
57
+ permissionPassedProps = {},
49
58
  children,
59
+ proctoredContext,
50
60
  config,
51
- screensharePermission,
52
- requestScreenshare = () => {},
53
61
  getProctorParamValues = () => {},
54
62
  getWebcamSnapshot = () => {},
55
63
  getScreengrab = () => {}
56
64
  } = _ref;
57
- const webcamReference = (0, _react.useRef)(null);
58
- const canvasReference = (0, _react.useRef)(null);
65
+ const [renderChildren, setRenderChildren] = (0, _react.useState)();
66
+ const context = (0, _react.useContext)(proctoredContext);
67
+ const {
68
+ actions,
69
+ permissions,
70
+ references,
71
+ permissionSetter,
72
+ customProps,
73
+ customSetter
74
+ } = context;
75
+ (0, _react.useEffect)(() => {
76
+ if (customProps.childrenRenderer === undefined) {
77
+ setRenderChildren(!shouldRenderChildren);
78
+ } else {
79
+ setRenderChildren(customProps.childrenRenderer);
80
+ }
81
+ }, [customProps]);
82
+ const CustomPermissionView = customPermissionView;
83
+ const browserDetails = {
84
+ isChrome: (0, _browserUtils.isChrome)()
85
+ };
59
86
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
60
87
  const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
61
88
  const {
62
89
  recurring = false,
63
90
  recurringFetchInterval = 0
64
91
  } = config;
65
- const [audioPermission, setAudioPermission] = (0, _react.useState)();
66
- const [videoPermission, setVideoPermission] = (0, _react.useState)();
67
- const firstFullScreenDone = (0, _react.useRef)(false);
68
92
  const recurringFetchIntervalRef = (0, _react.useRef)(null);
69
93
  const sendScreengrab = (0, _react.useCallback)(async function () {
70
94
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
@@ -80,9 +104,9 @@ const ProctorApp = _ref => {
80
104
  let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
81
105
 
82
106
  if (proctorParams.webcamSnapshots) {
83
- const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(webcamReference);
107
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(references.webcamReference);
84
108
 
85
- if (webcamReference) {
109
+ if (references.webcamReference) {
86
110
  getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
87
111
  }
88
112
  }
@@ -92,12 +116,8 @@ const ProctorApp = _ref => {
92
116
  let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
93
117
  getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
94
118
  }, [proctoringIdentifier, getProctorParamValues]);
95
- const {
96
- isFullscreen,
97
- setFullscreen
98
- } = (0, _hooks.useFullscreenData)(firstFullScreenDone, proctorParams.fullscreenExit);
99
- const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(webcamReference, canvasReference, proctorParams);
100
- const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch) && firstFullScreenDone.current;
119
+ const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
120
+ const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch);
101
121
  (0, _react.useEffect)(() => {
102
122
  if (recurring) {
103
123
  recurringFetchIntervalRef.current = setInterval(() => {
@@ -115,9 +135,9 @@ const ProctorApp = _ref => {
115
135
  const currentStats = {
116
136
  userCount,
117
137
  isTabSwitched,
118
- isFullscreen,
138
+ isFullScreen: permissions.fullscreen,
119
139
  lookedAwayCount,
120
- isWebcamDataReliable: isWebcamProcessingReliable
140
+ isWebcamDataNotReliable: !isWebcamProcessingReliable
121
141
  };
122
142
  const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
123
143
  (0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
@@ -127,28 +147,32 @@ const ProctorApp = _ref => {
127
147
  sendWebcamSnapshot(true, breachData.breachedParam);
128
148
  sendScreengrab(true, breachData.breachedParam);
129
149
  }
130
- }, [userCount, isTabSwitched, isFullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
150
+ }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
131
151
  return /*#__PURE__*/_react.default.createElement("div", {
132
152
  className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth" : "fullwidth")
133
- }, (0, _breachUtils.showProctoredComponent)(proctorParams, {
134
- isFullscreen,
135
- audioPermission,
136
- videoPermission,
137
- screensharePermission
138
- }) && children, /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
153
+ }, (0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren && children, !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
154
+ permissions: permissions,
155
+ hasAllPermission: actions.hasAllPermission,
156
+ askPermission: actions.askPermission,
157
+ references: references,
158
+ actions: actions,
159
+ browserDetails: browserDetails,
160
+ renderChildren: () => {
161
+ setRenderChildren(true);
162
+ customSetter.childrenRenderer(true);
163
+ }
164
+ }, permissionPassedProps)), !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
139
165
  proctorParams: proctorParams,
140
- isFullscreen: isFullscreen,
141
- audioPermisison: audioPermission,
142
- videoPermission: videoPermission,
143
- setFullscreen: setFullscreen,
144
- screensharePermission: screensharePermission,
145
- requestScreenshare: requestScreenshare
146
- }), /*#__PURE__*/_react.default.createElement(_.ActivityTracker, {
166
+ permissions: permissions,
167
+ askPermission: actions.askPermission,
168
+ hasAllPermission: actions.hasAllPermission
169
+ }), /*#__PURE__*/_react.default.createElement(_activityTracker.default, {
147
170
  proctorParams: proctorParams,
148
- setAudioPermission: setAudioPermission,
149
- setVideoPermission: setVideoPermission,
150
- webcamReference: webcamReference,
151
- canvasReference: canvasReference
171
+ setAudioPermission: permissionSetter.audio,
172
+ setVideoPermission: permissionSetter.video,
173
+ webcamReference: references.webcamReference,
174
+ canvasReference: references.canvasReference,
175
+ screenshareReference: references.screenshareReference
152
176
  }));
153
177
  };
154
178
 
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/web.dom-collections.iterator.js");
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _hooks = require("../hooks");
13
+
14
+ var _webcamMicrophoneUtils = require("../utils/webcamMicrophoneUtils");
15
+
16
+ var _defaults = require("../constants/defaults");
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
23
+
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
25
+
26
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
+
28
+ const ProctoredContextApp = _ref => {
29
+ let {
30
+ contextProvider,
31
+ config = {
32
+ proctorParams: _defaults.defaultConfig
33
+ },
34
+ children
35
+ } = _ref;
36
+ const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
37
+ const {
38
+ isFullscreen,
39
+ setFullscreen
40
+ } = (0, _hooks.useFullscreenData)(proctorParams.fullscreenExit);
41
+ const [audioPermisison, setAudioPermission] = (0, _react.useState)();
42
+ const [videoPermission, setVideoPermission] = (0, _react.useState)();
43
+ const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
44
+ const [customRenderer, setCustomRenderer] = (0, _react.useState)();
45
+ const webcamReference = (0, _react.useRef)(null);
46
+ const canvasReference = (0, _react.useRef)(null);
47
+ const screenshareReference = (0, _react.useRef)(null);
48
+ const Context = contextProvider;
49
+ const askPermissionAction = {
50
+ 'screenshare': () => {
51
+ (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference);
52
+ },
53
+ 'fullscreen': () => {
54
+ setFullscreen();
55
+ }
56
+ };
57
+ const getPermissionObj = {
58
+ 'video': videoPermission,
59
+ 'audio': audioPermisison,
60
+ 'fullscreen': isFullscreen,
61
+ 'screenshare': screensharePermission
62
+ };
63
+ const askPermission = (0, _react.useCallback)(requiredPermissions => {
64
+ requiredPermissions.forEach(element => {
65
+ if (!getPermissionObj[element] && askPermissionAction[element]) {
66
+ askPermissionAction[element]();
67
+ }
68
+ });
69
+ }, [getPermissionObj, askPermissionAction]);
70
+ const hasAllPermission = (0, _react.useCallback)(requiredPermissions => {
71
+ let hasPermission = true;
72
+ requiredPermissions.forEach(element => {
73
+ if (!getPermissionObj[element]) {
74
+ hasPermission = hasPermission && false;
75
+ }
76
+ });
77
+ return hasPermission;
78
+ }, [getPermissionObj]);
79
+ return /*#__PURE__*/_react.default.createElement(Context.Provider, {
80
+ value: {
81
+ permissions: getPermissionObj,
82
+ permissionSetter: {
83
+ 'audio': setAudioPermission,
84
+ 'video': setVideoPermission,
85
+ 'screenshare': setScreensharePermission
86
+ },
87
+ customProps: {
88
+ 'childrenRenderer': customRenderer
89
+ },
90
+ customSetter: {
91
+ 'childrenRenderer': setCustomRenderer
92
+ },
93
+ proctorParams,
94
+ actions: {
95
+ 'askPermission': askPermission,
96
+ 'hasAllPermission': hasAllPermission
97
+ },
98
+ references: {
99
+ 'webcamReference': webcamReference,
100
+ 'canvasReference': canvasReference,
101
+ 'screenshareReference': screenshareReference
102
+ }
103
+ }
104
+ }, children);
105
+ };
106
+
107
+ var _default = ProctoredContextApp;
108
+ exports.default = _default;
@@ -32,6 +32,7 @@ const ActivityTracker = _ref => {
32
32
  proctorParams,
33
33
  webcamReference,
34
34
  canvasReference,
35
+ screenshareReference,
35
36
  setAudioPermission,
36
37
  setVideoPermission
37
38
  } = _ref;
@@ -140,7 +141,11 @@ const ActivityTracker = _ref => {
140
141
  ref: canvasReference,
141
142
  className: "captured-video-canvas",
142
143
  id: "wc-ref"
143
- })));
144
+ })), /*#__PURE__*/_react.default.createElement("video", {
145
+ ref: screenshareReference,
146
+ className: "captured-video-canvas",
147
+ id: "ss-ref"
148
+ }));
144
149
  };
145
150
 
146
151
  var _default = ActivityTracker;
@@ -1,4 +1,6 @@
1
1
  .captured-video-canvas {
2
2
  visibility: hidden;
3
3
  position: absolute;
4
+ height: 0px;
5
+ width: 0px;
4
6
  }
@@ -21,6 +21,12 @@ Object.defineProperty(exports, "ProctorApp", {
21
21
  return _ProctorApp.default;
22
22
  }
23
23
  });
24
+ Object.defineProperty(exports, "ProctoredContextApp", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _ProctoredContextApp.default;
28
+ }
29
+ });
24
30
  Object.defineProperty(exports, "ScreenshareTracker", {
25
31
  enumerable: true,
26
32
  get: function get() {
@@ -36,4 +42,6 @@ var _screenshare = require("./screenshare");
36
42
 
37
43
  var _ProctorApp = _interopRequireDefault(require("./ProctorApp"));
38
44
 
45
+ var _ProctoredContextApp = _interopRequireDefault(require("./ProctoredContextApp"));
46
+
39
47
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -30,14 +30,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
30
30
  const Permission = _ref => {
31
31
  let {
32
32
  proctorParams,
33
- isFullscreen,
34
- audioPermisison,
35
- videoPermission,
36
- setFullscreen,
37
- screensharePermission,
38
- requestScreenshare
33
+ permissions,
34
+ askPermission,
35
+ hasAllPermission
39
36
  } = _ref;
40
- const showPermissionModal = isFullscreen === false || (0, _breachUtils.isWebcamRequired)(proctorParams) && audioPermisison === false || (0, _breachUtils.isWebcamRequired)(proctorParams) && videoPermission === false || !screensharePermission;
37
+ const showPermissionModal = !hasAllPermission((0, _breachUtils.getRequiredPermissionsFromProctorParams)(proctorParams));
41
38
  return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
42
39
  show: showPermissionModal,
43
40
  size: "lg",
@@ -61,18 +58,18 @@ const Permission = _ref => {
61
58
  }, /*#__PURE__*/_react.default.createElement("source", {
62
59
  src: _askPermission.default
63
60
  }), text.VIDEO_UNSUPPORTED_IN_BROWSER)), /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
64
- showFullscreenText: !isFullscreen,
65
- showAudioPermissionText: !audioPermisison && (0, _breachUtils.isWebcamRequired)(proctorParams),
66
- showVideoPermissionText: !videoPermission && (0, _breachUtils.isWebcamRequired)(proctorParams),
67
- showScreensharePermission: !screensharePermission && proctorParams.screenshareSnapshots
68
- })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !screensharePermission && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
61
+ showFullscreenText: !permissions.fullscreen,
62
+ showAudioPermissionText: !permissions.audio && (0, _breachUtils.isWebcamRequired)(proctorParams),
63
+ showVideoPermissionText: !permissions.video && (0, _breachUtils.isWebcamRequired)(proctorParams),
64
+ showScreensharePermission: !permissions.screenshare && proctorParams.screenshareSnapshots
65
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !permissions.screenshare && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
69
66
  onClick: () => {
70
- requestScreenshare();
67
+ askPermission(['screenshare']);
71
68
  }
72
- }, text.ALLOW_SCREENSHARE), screensharePermission && !isFullscreen && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
69
+ }, text.ALLOW_SCREENSHARE), !permissions.fullscreen && proctorParams.fullscreenExit && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
73
70
  variant: "primary",
74
71
  onClick: () => {
75
- setFullscreen();
72
+ askPermission(['fullscreen']);
76
73
  }
77
74
  }, text.ALLOW_FULLSCREEN)));
78
75
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.initialValues = exports.gpuTypes = exports.evaluateVideoIntervalInSeconds = exports.defaultConfig = exports.STATS_PARAMS = exports.INITIAL_STATISTICS = void 0;
6
+ exports.proctorParamsToPermission = exports.initialValues = exports.gpuTypes = exports.evaluateVideoIntervalInSeconds = exports.defaultConfig = exports.STATS_PARAMS = exports.INITIAL_STATISTICS = void 0;
7
7
  const defaultConfig = {
8
8
  people: true,
9
9
  tabSwitch: true,
@@ -17,7 +17,7 @@ exports.defaultConfig = defaultConfig;
17
17
  const initialValues = {
18
18
  isTabSwitched: false,
19
19
  userCount: 0,
20
- isWebcamDataReliable: true,
20
+ isWebcamDataNotReliable: true,
21
21
  isWatching: true,
22
22
  canOpenFullScreen: false,
23
23
  isFullscreen: false,
@@ -30,7 +30,7 @@ const STATS_PARAMS = {
30
30
  isFullscreen: "IS_FULLSCREEN",
31
31
  lookedAwayCount: "LOOKED_AWAY_COUNT",
32
32
  userCountMax: "USER_COUNT_MAX",
33
- isWebcamReliable: "IS_WEBCAM_DATA_RELIABLE"
33
+ isWebcamNotReliable: "IS_WEBCAM_DATA_NOT_RELIABLE"
34
34
  };
35
35
  exports.STATS_PARAMS = STATS_PARAMS;
36
36
  const INITIAL_STATISTICS = {
@@ -38,9 +38,16 @@ const INITIAL_STATISTICS = {
38
38
  [STATS_PARAMS.isFullscreen]: initialValues.isFullscreen,
39
39
  [STATS_PARAMS.lookedAwayCount]: initialValues.lookedAwayCount,
40
40
  [STATS_PARAMS.userCountMax]: initialValues.userCount,
41
- [STATS_PARAMS.isWebcamReliable]: initialValues.isWebcamDataReliable
41
+ [STATS_PARAMS.isWebcamNotReliable]: initialValues.isWebcamDataNotReliable
42
42
  };
43
43
  exports.INITIAL_STATISTICS = INITIAL_STATISTICS;
44
+ const proctorParamsToPermission = {
45
+ fullscreenExit: "fullscreen",
46
+ lookedAway: "video",
47
+ webcamSnapshots: "video",
48
+ screenshareSnapshots: "screenshare"
49
+ };
50
+ exports.proctorParamsToPermission = proctorParamsToPermission;
44
51
  const evaluateVideoIntervalInSeconds = 5;
45
52
  exports.evaluateVideoIntervalInSeconds = evaluateVideoIntervalInSeconds;
46
53
  const gpuTypes = ["intel", "apple", "amd", "radeon", "nvidia", "geforce"];
@@ -7,20 +7,19 @@ exports.default = useFullscreenData;
7
7
 
8
8
  require("core-js/modules/web.dom-collections.iterator.js");
9
9
 
10
- var _react = require("react");
10
+ var _react = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _utils = require("../utils");
13
13
 
14
+ 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); }
15
+
16
+ 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; }
17
+
14
18
  const browserFullscreenElementProp = (0, _utils.getBrowserFullscreenElementProp)();
15
19
 
16
- function useFullscreenData(firstFullScreenDone, isProctorParam) {
20
+ function useFullscreenData(isProctorParam) {
17
21
  const fullScreenElement = (0, _react.useRef)(document.documentElement);
18
22
  const [isFullscreen, setIsFullscreen] = (0, _react.useState)(document[browserFullscreenElementProp] != null);
19
- (0, _react.useEffect)(() => {
20
- if (isFullscreen && !firstFullScreenDone.current || !isProctorParam) {
21
- firstFullScreenDone.current = true;
22
- }
23
- }, [isFullscreen, firstFullScreenDone, isProctorParam]);
24
23
 
25
24
  const setFullscreen = () => {
26
25
  if (!fullScreenElement || !fullScreenElement.current) {
@@ -27,5 +27,5 @@ function usePageVisibility(isProctorParam) {
27
27
  document.removeEventListener(visibilityChangeEvent, updateVisibility);
28
28
  };
29
29
  }, []);
30
- return !isVisible && isProctorParam;
30
+ return isVisible && isProctorParam;
31
31
  }
package/dist/index.js CHANGED
@@ -9,10 +9,10 @@ Object.defineProperty(exports, "ProctorApp", {
9
9
  return _components.ProctorApp;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "ScreenshareTracker", {
12
+ Object.defineProperty(exports, "ProctoredContextApp", {
13
13
  enumerable: true,
14
14
  get: function get() {
15
- return _components.ScreenshareTracker;
15
+ return _components.ProctoredContextApp;
16
16
  }
17
17
  });
18
18
 
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ class ProctoringTracker {
9
+ constructor() {}
10
+
11
+ askProctoredPermission() {}
12
+
13
+ hasProctoredPermission() {}
14
+
15
+ }
16
+
17
+ exports.default = ProctoringTracker;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.showProctoredComponent = exports.isWebcamRequired = exports.getInitialStats = exports.getDataOnBreach = void 0;
6
+ exports.showProctoredComponent = exports.isWebcamRequired = exports.getRequiredPermissionsFromProctorParams = exports.getInitialStats = exports.getDataOnBreach = void 0;
7
7
 
8
8
  var _defaults = require("../constants/defaults");
9
9
 
@@ -37,12 +37,26 @@ const getInitialStats = proctorParams => {
37
37
 
38
38
  exports.getInitialStats = getInitialStats;
39
39
 
40
+ const getRequiredPermissionsFromProctorParams = proctorParams => {
41
+ const requiredPermissions = [];
42
+
43
+ for (const key in proctorParams) {
44
+ if (proctorParams[key] && _defaults.proctorParamsToPermission[key]) {
45
+ requiredPermissions.push(_defaults.proctorParamsToPermission[key]);
46
+ }
47
+ }
48
+
49
+ return requiredPermissions;
50
+ };
51
+
52
+ exports.getRequiredPermissionsFromProctorParams = getRequiredPermissionsFromProctorParams;
53
+
40
54
  const isWebcamRequired = proctorParams => proctorParams.people || proctorParams.lookedAway || proctorParams.webcamSnapshots;
41
55
 
42
56
  exports.isWebcamRequired = isWebcamRequired;
43
57
 
44
- const showProctoredComponent = (proctorParams, permissions) => {
45
- return (!proctorParams.fullscreenExit || permissions.isFullscreen) && (!isWebcamRequired(proctorParams) || permissions.audioPermission && permissions.videoPermission) && (!proctorParams.screenshareSnapshots || permissions.screensharePermission);
58
+ const showProctoredComponent = (proctorParams, hasAllPermission) => {
59
+ return hasAllPermission(getRequiredPermissionsFromProctorParams(proctorParams));
46
60
  };
47
61
 
48
62
  exports.showProctoredComponent = showProctoredComponent;
@@ -53,18 +67,18 @@ const getDataOnBreach = (statistics, currentData, proctorParams) => {
53
67
  isTabSwitched,
54
68
  isFullscreen,
55
69
  lookedAwayCount,
56
- isWebcamDataReliable
70
+ isWebcamDataNotReliable
57
71
  } = currentData;
58
72
  const timestamp = Date.now();
59
73
  const data = statistics.current;
60
- const isWebCamReliableParam = _defaults.STATS_PARAMS.isWebcamReliable;
74
+ const isWebCamNotReliableParam = _defaults.STATS_PARAMS.isWebcamNotReliable;
61
75
 
62
- if (isWebcamRequired(proctorParams) && data[isWebCamReliableParam] !== isWebcamDataReliable) {
76
+ if (isWebcamRequired(proctorParams) && data[isWebCamNotReliableParam]) {
63
77
  return {
64
- breachedParam: isWebCamReliableParam,
78
+ breachedParam: isWebCamNotReliableParam,
65
79
  timestamp,
66
80
  data: _objectSpread(_objectSpread({}, data), {}, {
67
- [isWebCamReliableParam]: isWebcamDataReliable
81
+ [isWebCamNotReliableParam]: isWebCamNotReliableParam
68
82
  })
69
83
  };
70
84
  }
@@ -13,6 +13,8 @@ require("core-js/modules/es.array-buffer.slice.js");
13
13
 
14
14
  require("core-js/modules/es.typed-array.uint8-array.js");
15
15
 
16
+ require("core-js/modules/es.typed-array.fill.js");
17
+
16
18
  require("core-js/modules/es.typed-array.set.js");
17
19
 
18
20
  require("core-js/modules/es.typed-array.sort.js");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.18",
3
+ "version": "0.0.21",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra",
6
6
  "main": "dist/index.js",
@@ -54,4 +54,4 @@
54
54
  "@babel/preset-env": "^7.16.7",
55
55
  "react-scripts": ">=5.0.0"
56
56
  }
57
- }
57
+ }
@@ -1,33 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.retrieveStatsFromLocalStorage = exports.removeStatsFromLocalStorage = exports.getStatistics = exports.addOrUpdateStatsToLocalStorage = void 0;
7
-
8
- require("core-js/modules/es.json.stringify.js");
9
-
10
- const addOrUpdateStatsToLocalStorage = (proctoringIdentifier, data) => {
11
- const stringifiedData = JSON.stringify(data);
12
- localStorage.setItem(proctoringIdentifier, stringifiedData);
13
- };
14
-
15
- exports.addOrUpdateStatsToLocalStorage = addOrUpdateStatsToLocalStorage;
16
-
17
- const retrieveStatsFromLocalStorage = proctoringIdentifier => {
18
- return localStorage.getItem(proctoringIdentifier);
19
- };
20
-
21
- exports.retrieveStatsFromLocalStorage = retrieveStatsFromLocalStorage;
22
-
23
- const removeStatsFromLocalStorage = proctoringIdentifier => {
24
- localStorage.removeItem(proctoringIdentifier);
25
- };
26
-
27
- exports.removeStatsFromLocalStorage = removeStatsFromLocalStorage;
28
-
29
- const getStatistics = proctoringIdentifier => {
30
- return JSON.parse(retrieveStatsFromLocalStorage(proctoringIdentifier));
31
- };
32
-
33
- exports.getStatistics = getStatistics;