@newtonschool/react_proctoring_library 0.0.25 → 0.0.28

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,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.object.assign.js");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -15,6 +13,8 @@ var _react = _interopRequireWildcard(require("react"));
15
13
 
16
14
  require("./index.scss");
17
15
 
16
+ var _ = require(".");
17
+
18
18
  var _utils = require("../utils");
19
19
 
20
20
  var _hooks = require("../hooks");
@@ -29,18 +29,12 @@ 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
-
36
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
33
 
38
34
  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); }
39
35
 
40
36
  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; }
41
37
 
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
-
44
38
  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; }
45
39
 
46
40
  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; }
@@ -52,43 +46,25 @@ const isWebcamProcessingReliable = (0, _utils.isGPUAvailable)();
52
46
  const ProctorApp = _ref => {
53
47
  let {
54
48
  proctoringIdentifier,
55
- customPermissionView = null,
56
- shouldRenderChildren = false,
57
- permissionPassedProps = {},
58
49
  children,
59
- proctoredContext,
60
50
  config,
51
+ screensharePermission,
52
+ requestScreenshare = () => {},
61
53
  getProctorParamValues = () => {},
62
54
  getWebcamSnapshot = () => {},
63
55
  getScreengrab = () => {}
64
56
  } = _ref;
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
- };
57
+ const webcamReference = (0, _react.useRef)(null);
58
+ const canvasReference = (0, _react.useRef)(null);
86
59
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
87
60
  const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
88
61
  const {
89
62
  recurring = false,
90
63
  recurringFetchInterval = 0
91
64
  } = config;
65
+ const [audioPermission, setAudioPermission] = (0, _react.useState)();
66
+ const [videoPermission, setVideoPermission] = (0, _react.useState)();
67
+ const firstFullScreenDone = (0, _react.useRef)(false);
92
68
  const recurringFetchIntervalRef = (0, _react.useRef)(null);
93
69
  const sendScreengrab = (0, _react.useCallback)(async function () {
94
70
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
@@ -104,9 +80,9 @@ const ProctorApp = _ref => {
104
80
  let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
105
81
 
106
82
  if (proctorParams.webcamSnapshots) {
107
- const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(references.webcamReference);
83
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(webcamReference);
108
84
 
109
- if (references.webcamReference) {
85
+ if (webcamReference) {
110
86
  getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
111
87
  }
112
88
  }
@@ -116,8 +92,12 @@ const ProctorApp = _ref => {
116
92
  let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
117
93
  getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
118
94
  }, [proctoringIdentifier, getProctorParamValues]);
119
- const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
120
- const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch);
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;
121
101
  (0, _react.useEffect)(() => {
122
102
  if (recurring) {
123
103
  recurringFetchIntervalRef.current = setInterval(() => {
@@ -135,9 +115,9 @@ const ProctorApp = _ref => {
135
115
  const currentStats = {
136
116
  userCount,
137
117
  isTabSwitched,
138
- isFullScreen: permissions.fullscreen,
118
+ isFullscreen,
139
119
  lookedAwayCount,
140
- isWebcamDataNotReliable: !isWebcamProcessingReliable
120
+ isWebcamDataReliable: isWebcamProcessingReliable
141
121
  };
142
122
  const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
143
123
  (0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
@@ -147,32 +127,28 @@ const ProctorApp = _ref => {
147
127
  sendWebcamSnapshot(true, breachData.breachedParam);
148
128
  sendScreengrab(true, breachData.breachedParam);
149
129
  }
150
- }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
130
+ }, [userCount, isTabSwitched, isFullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
151
131
  return /*#__PURE__*/_react.default.createElement("div", {
152
- className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth" : "fullwidth")
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, {
132
+ className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
133
+ }, (0, _breachUtils.showProctoredComponent)(proctorParams, {
134
+ isFullscreen,
135
+ audioPermission,
136
+ videoPermission,
137
+ screensharePermission
138
+ }) && children, /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
165
139
  proctorParams: proctorParams,
166
- permissions: permissions,
167
- askPermission: actions.askPermission,
168
- hasAllPermission: actions.hasAllPermission
169
- }), /*#__PURE__*/_react.default.createElement(_activityTracker.default, {
140
+ isFullscreen: isFullscreen,
141
+ audioPermisison: audioPermission,
142
+ videoPermission: videoPermission,
143
+ setFullscreen: setFullscreen,
144
+ screensharePermission: screensharePermission,
145
+ requestScreenshare: requestScreenshare
146
+ }), /*#__PURE__*/_react.default.createElement(_.ActivityTracker, {
170
147
  proctorParams: proctorParams,
171
- setAudioPermission: permissionSetter.audio,
172
- setVideoPermission: permissionSetter.video,
173
- webcamReference: references.webcamReference,
174
- canvasReference: references.canvasReference,
175
- screenshareReference: references.screenshareReference
148
+ setAudioPermission: setAudioPermission,
149
+ setVideoPermission: setVideoPermission,
150
+ webcamReference: webcamReference,
151
+ canvasReference: canvasReference
176
152
  }));
177
153
  };
178
154
 
@@ -45,9 +45,7 @@ const ActivityTracker = _ref => {
45
45
  status.onchange = evt => {
46
46
  (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
47
47
  };
48
- }).catch(err => {
49
- console.log("Video Permission", err);
50
- });
48
+ }).catch(err => {});
51
49
  (0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
52
50
  status.onchange = evt => {
53
51
  (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
@@ -136,14 +134,14 @@ const ActivityTracker = _ref => {
136
134
  setAudioPermission(false);
137
135
  }
138
136
  },
139
- className: "captured-video-canvas"
137
+ className: "hide"
140
138
  }), /*#__PURE__*/_react.default.createElement("canvas", {
141
139
  ref: canvasReference,
142
- className: "captured-video-canvas",
140
+ className: "captured-video-canvas hide",
143
141
  id: "wc-ref"
144
142
  })), /*#__PURE__*/_react.default.createElement("video", {
145
143
  ref: screenshareReference,
146
- className: "captured-video-canvas",
144
+ className: "captured-video-canvas hide",
147
145
  id: "ss-ref"
148
146
  }));
149
147
  };
@@ -1,4 +1,7 @@
1
1
  .captured-video-canvas {
2
- visibility: hidden;
3
2
  position: absolute;
3
+ bottom: 0px;
4
+ }
5
+ .hide {
6
+ visibility: hidden;
4
7
  }
@@ -18,13 +18,13 @@ Object.defineProperty(exports, "FullScreenPermission", {
18
18
  Object.defineProperty(exports, "ProctorApp", {
19
19
  enumerable: true,
20
20
  get: function get() {
21
- return _ProctorApp.default;
21
+ return _Loadable.default;
22
22
  }
23
23
  });
24
24
  Object.defineProperty(exports, "ProctoredContextApp", {
25
25
  enumerable: true,
26
26
  get: function get() {
27
- return _ProctoredContextApp.default;
27
+ return _Loadable2.default;
28
28
  }
29
29
  });
30
30
  Object.defineProperty(exports, "ScreenshareTracker", {
@@ -40,8 +40,8 @@ var _permissions = require("./permissions");
40
40
 
41
41
  var _screenshare = require("./screenshare");
42
42
 
43
- var _ProctorApp = _interopRequireDefault(require("./ProctorApp"));
43
+ var _Loadable = _interopRequireDefault(require("./proctor-app/Loadable"));
44
44
 
45
- var _ProctoredContextApp = _interopRequireDefault(require("./ProctoredContextApp"));
45
+ var _Loadable2 = _interopRequireDefault(require("./proctor-context-app/Loadable"));
46
46
 
47
47
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -6,3 +6,7 @@
6
6
  .fullwidth {
7
7
  width: 100%;
8
8
  }
9
+ .fullheight {
10
+ height: 100%;
11
+ overflow-y: scroll;
12
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _loadable = _interopRequireDefault(require("../../utils/loadable"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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
+ var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
23
+ fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
24
+ });
25
+
26
+ exports.default = _default;
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.assign.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.ProctorApp = void 0;
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ require("core-js/modules/es.promise.js");
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ require("./index.scss");
17
+
18
+ var _utils = require("../../utils");
19
+
20
+ var _hooks = require("../../hooks");
21
+
22
+ var _permissions = require("../permissions");
23
+
24
+ var _useWebcamData = _interopRequireDefault(require("../../hooks/useWebcamData"));
25
+
26
+ var _breachUtils = require("../../utils/breachUtils");
27
+
28
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
29
+
30
+ var _defaults = require("../../constants/defaults");
31
+
32
+ var _activityTracker = _interopRequireDefault(require("../activity-tracker"));
33
+
34
+ var _browserUtils = require("../../utils/browserUtils");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
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); }
39
+
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; }
41
+
42
+ function _extends() { _extends = Object.assign || 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
+
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; }
45
+
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; }
47
+
48
+ 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; }
49
+
50
+ const isWebcamProcessingReliable = (0, _utils.isGPUAvailable)();
51
+
52
+ const ProctorApp = _ref => {
53
+ let {
54
+ proctoringIdentifier,
55
+ customPermissionView = null,
56
+ shouldRenderChildren = false,
57
+ permissionPassedProps = {},
58
+ children,
59
+ proctoredContext,
60
+ config,
61
+ getProctorParamValues = () => {},
62
+ getWebcamSnapshot = () => {},
63
+ getScreengrab = () => {}
64
+ } = _ref;
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
+ };
86
+ const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
87
+ const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
88
+ const {
89
+ recurring = false,
90
+ recurringFetchInterval = 0
91
+ } = config;
92
+ const recurringFetchIntervalRef = (0, _react.useRef)(null);
93
+ const sendScreengrab = (0, _react.useCallback)(async function () {
94
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
95
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
96
+
97
+ if (proctorParams.screenshareSnapshots && permissions.screenshare) {
98
+ const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)();
99
+ getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
100
+ }
101
+ }, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
102
+ const sendWebcamSnapshot = (0, _react.useCallback)(function () {
103
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
104
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
105
+
106
+ if (proctorParams.webcamSnapshots && permissions.video) {
107
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(references.webcamReference);
108
+
109
+ if (references.webcamReference) {
110
+ getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
111
+ }
112
+ }
113
+ }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video, references.webcamReference]);
114
+ const sendProctoredParamValues = (0, _react.useCallback)(function () {
115
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
116
+ let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
117
+ getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
118
+ }, [proctoringIdentifier, getProctorParamValues]);
119
+ const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
120
+ const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch);
121
+ (0, _react.useEffect)(() => {
122
+ if (recurring) {
123
+ recurringFetchIntervalRef.current = setInterval(() => {
124
+ sendProctoredParamValues();
125
+ sendWebcamSnapshot();
126
+ sendScreengrab();
127
+ }, recurringFetchInterval);
128
+ }
129
+
130
+ return () => {
131
+ clearInterval(recurringFetchIntervalRef.current);
132
+ };
133
+ }, [recurring, recurringFetchInterval, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab]);
134
+ (0, _react.useEffect)(() => {
135
+ const currentStats = {
136
+ userCount,
137
+ isTabSwitched,
138
+ isFullScreen: permissions.fullscreen,
139
+ lookedAwayCount,
140
+ isWebcamDataNotReliable: !isWebcamProcessingReliable
141
+ };
142
+ const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
143
+ (0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
144
+
145
+ if (breachData) {
146
+ sendProctoredParamValues(true, breachData.breachedParam);
147
+ sendWebcamSnapshot(true, breachData.breachedParam);
148
+ sendScreengrab(true, breachData.breachedParam);
149
+ }
150
+ }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
151
+ return /*#__PURE__*/_react.default.createElement("div", {
152
+ className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
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, {
165
+ proctorParams: proctorParams,
166
+ permissions: permissions,
167
+ askPermission: actions.askPermission,
168
+ hasAllPermission: actions.hasAllPermission
169
+ }), /*#__PURE__*/_react.default.createElement(_activityTracker.default, {
170
+ proctorParams: proctorParams,
171
+ setAudioPermission: permissionSetter.audio,
172
+ setVideoPermission: permissionSetter.video,
173
+ webcamReference: references.webcamReference,
174
+ canvasReference: references.canvasReference,
175
+ screenshareReference: references.screenshareReference
176
+ }));
177
+ };
178
+
179
+ exports.ProctorApp = ProctorApp;
180
+ var _default = ProctorApp;
181
+ exports.default = _default;
@@ -0,0 +1,12 @@
1
+ .disable-copy-paste {
2
+ -webkit-user-select: none;
3
+ -ms-user-select: none;
4
+ user-select: none;
5
+ }
6
+ .fullwidth {
7
+ width: 100%;
8
+ }
9
+ .fullheight {
10
+ height: 100%;
11
+ overflow-y: scroll;
12
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _loadable = _interopRequireDefault(require("../../utils/loadable"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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
+ var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
23
+ fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
24
+ });
25
+
26
+ exports.default = _default;
@@ -9,11 +9,11 @@ require("core-js/modules/web.dom-collections.iterator.js");
9
9
 
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
 
12
- var _hooks = require("../hooks");
12
+ var _hooks = require("../../hooks");
13
13
 
14
- var _webcamMicrophoneUtils = require("../utils/webcamMicrophoneUtils");
14
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
15
15
 
16
- var _defaults = require("../constants/defaults");
16
+ var _defaults = require("../../constants/defaults");
17
17
 
18
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
19
 
@@ -46,22 +46,21 @@ const ProctoredContextApp = _ref => {
46
46
  const canvasReference = (0, _react.useRef)(null);
47
47
  const screenshareReference = (0, _react.useRef)(null);
48
48
  const Context = contextProvider;
49
- const askPermissionAction = {
50
- 'screenshare': () => {
49
+ const askPermissionAction = (0, _react.useMemo)(() => ({
50
+ screenshare: () => {
51
51
  (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference);
52
52
  },
53
- 'fullscreen': () => {
53
+ fullscreen: () => {
54
54
  setFullscreen();
55
55
  }
56
- };
57
- const getPermissionObj = {
58
- 'video': videoPermission,
59
- 'audio': audioPermisison,
60
- 'fullscreen': isFullscreen,
61
- 'screenshare': screensharePermission
62
- };
56
+ }), [screenshareReference, setFullscreen]);
57
+ const getPermissionObj = (0, _react.useMemo)(() => ({
58
+ video: videoPermission,
59
+ audio: audioPermisison,
60
+ fullscreen: isFullscreen,
61
+ screenshare: screensharePermission
62
+ }), [videoPermission, audioPermisison, isFullscreen, screensharePermission]);
63
63
  const askPermission = (0, _react.useCallback)(requiredPermissions => {
64
- console.log(requiredPermissions);
65
64
  requiredPermissions.forEach(element => {
66
65
  if (!getPermissionObj[element] && askPermissionAction[element]) {
67
66
  askPermissionAction[element]();
@@ -81,25 +80,25 @@ const ProctoredContextApp = _ref => {
81
80
  value: {
82
81
  permissions: getPermissionObj,
83
82
  permissionSetter: {
84
- 'audio': setAudioPermission,
85
- 'video': setVideoPermission,
86
- 'screenshare': setScreensharePermission
83
+ audio: setAudioPermission,
84
+ video: setVideoPermission,
85
+ screenshare: setScreensharePermission
87
86
  },
88
87
  customProps: {
89
- 'childrenRenderer': customRenderer
88
+ childrenRenderer: customRenderer
90
89
  },
91
90
  customSetter: {
92
- 'childrenRenderer': setCustomRenderer
91
+ childrenRenderer: setCustomRenderer
93
92
  },
94
93
  proctorParams,
95
94
  actions: {
96
- 'askPermission': askPermission,
97
- 'hasAllPermission': hasAllPermission
95
+ askPermission: askPermission,
96
+ hasAllPermission: hasAllPermission
98
97
  },
99
98
  references: {
100
- 'webcamReference': webcamReference,
101
- 'canvasReference': canvasReference,
102
- 'screenshareReference': screenshareReference
99
+ webcamReference: webcamReference,
100
+ canvasReference: canvasReference,
101
+ screenshareReference: screenshareReference
103
102
  }
104
103
  }
105
104
  }, children);
@@ -7,14 +7,10 @@ exports.default = useFullscreenData;
7
7
 
8
8
  require("core-js/modules/web.dom-collections.iterator.js");
9
9
 
10
- var _react = _interopRequireWildcard(require("react"));
10
+ var _react = 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
-
18
14
  const browserFullscreenElementProp = (0, _utils.getBrowserFullscreenElementProp)();
19
15
 
20
16
  function useFullscreenData(isProctorParam) {
@@ -33,9 +33,7 @@ const getUserCount = async (model, image) => {
33
33
  }
34
34
  });
35
35
  return numOfUsers;
36
- } catch (err) {
37
- console.log("Error Trace:", err);
38
- }
36
+ } catch (err) {}
39
37
  };
40
38
 
41
39
  function useWebcamData(webcamReference, canvasReference, proctorParams) {
@@ -68,7 +66,6 @@ function useWebcamData(webcamReference, canvasReference, proctorParams) {
68
66
  }
69
67
  }, _defaults.evaluateVideoIntervalInSeconds * 1000);
70
68
  } catch (err) {
71
- console.log("Error Trace:", err);
72
69
  return;
73
70
  }
74
71
  };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/web.dom-collections.iterator.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ 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); }
13
+
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
+
16
+ const loadable = function loadable(importFunc) {
17
+ let {
18
+ fallback = null
19
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
20
+ fallback: null
21
+ };
22
+ const LazyComponent = /*#__PURE__*/(0, _react.lazy)(importFunc);
23
+ return props => /*#__PURE__*/_react.default.createElement(_react.Suspense, {
24
+ fallback: fallback
25
+ }, /*#__PURE__*/_react.default.createElement(LazyComponent, props));
26
+ };
27
+
28
+ var _default = loadable;
29
+ exports.default = _default;
@@ -0,0 +1,33 @@
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;
@@ -13,8 +13,6 @@ 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
-
18
16
  require("core-js/modules/es.typed-array.set.js");
19
17
 
20
18
  require("core-js/modules/es.typed-array.sort.js");
@@ -162,17 +160,14 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
162
160
 
163
161
  track.onended = e => {
164
162
  setScreensharePermission(false);
165
- console.log(e, "Track Onended Error");
166
163
  screenshareReference.current.srcObject = null;
167
164
  };
168
165
  } else {
169
- console.log("Display Surface != Monitor");
170
166
  screenshareReference.current = null;
171
167
  setScreensharePermission(false);
172
168
  }
173
169
  }).catch(e => {
174
170
  screenshareReference.current = null;
175
- console.log(e, "Try Catch Error");
176
171
  setScreensharePermission(false);
177
172
  });
178
173
 
@@ -218,7 +213,6 @@ const captureScreenshot = async () => {
218
213
  try {
219
214
  const canvas = await (0, _html2canvas.default)(document.querySelector("#ss-ref"));
220
215
  const b64Snapshot = canvas.toDataURL("image/jpeg");
221
- console.log(b64Snapshot);
222
216
  return b64DataURItoBlob(b64Snapshot);
223
217
  } catch (e) {// pass
224
218
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.25",
3
+ "version": "0.0.28",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
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,17 +0,0 @@
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;
@@ -1 +0,0 @@
1
- "use strict";