@newtonschool/react_proctoring_library 0.0.41 → 0.0.43

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.
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.weak-map.js");
4
+ require("core-js/modules/web.dom-collections.iterator.js");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactWebcam = _interopRequireDefault(require("react-webcam"));
11
+ var _utils = require("../../utils");
12
+ var _breachUtils = require("../../utils/breachUtils");
13
+ var _browserUtils = require("../../utils/browserUtils");
14
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
15
+ require("./index.scss");
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ 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); }
18
+ 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; }
19
+ const ActivityTracker = _ref => {
20
+ let {
21
+ proctorParams,
22
+ webcamReference,
23
+ canvasReference,
24
+ screenshareReference,
25
+ setAudioPermission,
26
+ setVideoPermission
27
+ } = _ref;
28
+ const screenshareVideoReference = (0, _react.useRef)(null);
29
+ (0, _react.useEffect)(() => {
30
+ if (screenshareReference.current) {
31
+ screenshareVideoReference.current.srcObject = screenshareReference.current;
32
+ screenshareVideoReference.current.onloadedmetadata = e => {
33
+ screenshareVideoReference.current.play();
34
+ };
35
+ }
36
+ return () => {
37
+ screenshareVideoReference.current.srcObject = null;
38
+ };
39
+ }, [screenshareReference.current]);
40
+ (0, _react.useEffect)(() => {
41
+ if ((0, _browserUtils.isChrome)()) {
42
+ if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
43
+ (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
44
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
45
+ (0, _webcamMicrophoneUtils.getVideoPermissionQuery)().then(status => {
46
+ status.onchange = evt => {
47
+ (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
48
+ };
49
+ }).catch(err => {});
50
+ (0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
51
+ status.onchange = evt => {
52
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
53
+ };
54
+ }).catch(err => {
55
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
56
+ });
57
+ }
58
+ }
59
+ }, [setVideoPermission, setAudioPermission, proctorParams]);
60
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.isWebcamRequired)(proctorParams) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
61
+ audio: true,
62
+ muted: true,
63
+ screenshotFormat: "image/jpeg",
64
+ ref: webcamReference,
65
+ onUserMedia: stream => {
66
+ if (!(0, _browserUtils.isChrome)()) {
67
+ const {
68
+ audio,
69
+ video
70
+ } = (0, _utils.getAudioVideoPermission)(stream);
71
+ setAudioPermission(audio);
72
+ setVideoPermission(video);
73
+ stream.onaddtrack = p => {
74
+ const {
75
+ audio,
76
+ video
77
+ } = (0, _utils.getAudioVideoPermission)(stream);
78
+ setAudioPermission(audio);
79
+ setVideoPermission(video);
80
+ };
81
+ stream.onremovetrack = p => {
82
+ const {
83
+ audio,
84
+ video
85
+ } = (0, _utils.getAudioVideoPermission)(stream);
86
+ setAudioPermission(audio);
87
+ setVideoPermission(video);
88
+ };
89
+ stream.onactive = p => {
90
+ const {
91
+ audio,
92
+ video
93
+ } = (0, _utils.getAudioVideoPermission)(stream);
94
+ setAudioPermission(audio);
95
+ setVideoPermission(video);
96
+ };
97
+ stream.oninactive = e => {
98
+ setAudioPermission(false);
99
+ setVideoPermission(false);
100
+ };
101
+ const audioTracks = stream.getAudioTracks().filter(track => track.enabled && track.label);
102
+ audioTracks.forEach(track => {
103
+ track.onended = e => {
104
+ const audio = (0, _utils.getAudioPermission)(stream);
105
+ setAudioPermission(audio, e.currentTarget.id);
106
+ };
107
+ track.onmute = e => {
108
+ const audio = (0, _utils.getAudioPermission)(stream);
109
+ setAudioPermission(audio, e.currentTarget.id);
110
+ };
111
+ track.onunmute = e => {
112
+ const audio = (0, _utils.getAudioPermission)(stream);
113
+ setAudioPermission(audio);
114
+ };
115
+ });
116
+ const videoTracks = stream.getVideoTracks().filter(track => track.enabled && track.label);
117
+ videoTracks.forEach(track => {
118
+ track.onended = e => {
119
+ const video = (0, _utils.getVideoPermission)(stream, e.currentTarget.id);
120
+ setVideoPermission(video);
121
+ };
122
+ });
123
+ }
124
+ },
125
+ onUserMediaError: error => {
126
+ if (!(0, _browserUtils.isChrome)()) {
127
+ setVideoPermission(false);
128
+ setAudioPermission(false);
129
+ }
130
+ },
131
+ className: "hide"
132
+ }), /*#__PURE__*/_react.default.createElement("canvas", {
133
+ ref: canvasReference,
134
+ className: "captured-video-canvas hide",
135
+ id: "wc-ref"
136
+ })), /*#__PURE__*/_react.default.createElement("video", {
137
+ ref: screenshareVideoReference,
138
+ className: "captured-video-canvas hide",
139
+ id: "ss-ref"
140
+ }));
141
+ };
142
+ var _default = ActivityTracker;
143
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ .captured-video-canvas {
2
+ position: absolute;
3
+ bottom: 0px;
4
+ }
5
+ .hide {
6
+ visibility: hidden;
7
+ }
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.symbol.description.js");
3
4
  require("core-js/modules/es.object.assign.js");
4
5
  require("core-js/modules/es.weak-map.js");
5
6
  Object.defineProperty(exports, "__esModule", {
6
7
  value: true
7
8
  });
8
9
  exports.default = exports.ProctorApp = void 0;
9
- require("core-js/modules/es.promise.js");
10
10
  require("core-js/modules/web.dom-collections.iterator.js");
11
- require("core-js/modules/es.symbol.description.js");
11
+ require("core-js/modules/es.promise.js");
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  require("./index.scss");
14
14
  var _utils = require("../../utils");
@@ -18,10 +18,8 @@ var _useWebcamData = _interopRequireDefault(require("../../hooks/useWebcamData")
18
18
  var _breachUtils = require("../../utils/breachUtils");
19
19
  var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
20
20
  var _defaults = require("../../constants/defaults");
21
- var _webcamActivityTracker = _interopRequireDefault(require("../webcam-activity-tracker"));
21
+ var _activityTracker = _interopRequireDefault(require("../activity-tracker"));
22
22
  var _browserUtils = require("../../utils/browserUtils");
23
- var _screenshareActivityTracker = require("../screenshare-activity-tracker");
24
- var _dom = require("../../constants/dom");
25
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
24
  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); }
27
25
  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; }
@@ -36,6 +34,7 @@ const ProctorApp = _ref => {
36
34
  let {
37
35
  proctoringIdentifier,
38
36
  customPermissionView = null,
37
+ shouldRenderChildren = false,
39
38
  permissionPassedProps = {},
40
39
  children,
41
40
  proctoredContext,
@@ -44,14 +43,27 @@ const ProctorApp = _ref => {
44
43
  getWebcamSnapshot = () => {},
45
44
  getScreengrab = () => {}
46
45
  } = _ref;
46
+ const [renderChildren, setRenderChildren] = (0, _react.useState)();
47
47
  const context = (0, _react.useContext)(proctoredContext);
48
48
  const {
49
49
  actions,
50
50
  permissions,
51
51
  references,
52
- permissionSetter
52
+ permissionSetter,
53
+ customProps,
54
+ customSetter
53
55
  } = context;
56
+ (0, _react.useEffect)(() => {
57
+ if (customProps.childrenRenderer === undefined) {
58
+ setRenderChildren(!shouldRenderChildren);
59
+ } else {
60
+ setRenderChildren(customProps.childrenRenderer);
61
+ }
62
+ }, [customProps]);
54
63
  const CustomPermissionView = customPermissionView;
64
+ const browserDetails = {
65
+ isChrome: (0, _browserUtils.isChrome)()
66
+ };
55
67
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
56
68
  const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
57
69
  const {
@@ -63,18 +75,20 @@ const ProctorApp = _ref => {
63
75
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
64
76
  let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
65
77
  if (proctorParams.screenshareSnapshots && permissions.screenshare) {
66
- const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.SCREENSHARE_REFERENCE_ID));
78
+ const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)();
67
79
  getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
68
80
  }
69
81
  }, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
70
- const sendWebcamSnapshot = (0, _react.useCallback)(async function () {
82
+ const sendWebcamSnapshot = (0, _react.useCallback)(function () {
71
83
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
72
84
  let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
73
85
  if (proctorParams.webcamSnapshots && permissions.video) {
74
- const webcamSnapshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.WEBCAM_REFERENCE_ID));
75
- getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
86
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(references.webcamReference);
87
+ if (references.webcamReference) {
88
+ getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
89
+ }
76
90
  }
77
- }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video]);
91
+ }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video, references.webcamReference]);
78
92
  const sendProctoredParamValues = (0, _react.useCallback)(function () {
79
93
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
80
94
  let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
@@ -110,29 +124,31 @@ const ProctorApp = _ref => {
110
124
  sendScreengrab(true, breachData.breachedParam);
111
125
  }
112
126
  }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
113
- const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission);
114
127
  return /*#__PURE__*/_react.default.createElement("div", {
115
128
  className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
116
- }, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
129
+ }, (0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren && children, !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
117
130
  permissions: permissions,
118
131
  hasAllPermission: actions.hasAllPermission,
119
132
  askPermission: actions.askPermission,
120
133
  references: references,
121
134
  actions: actions,
122
- browserDetails: (0, _browserUtils.getBrowserDetails)()
123
- }, permissionPassedProps)), !shouldShowProctoredComponent && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
135
+ browserDetails: browserDetails,
136
+ renderChildren: () => {
137
+ setRenderChildren(true);
138
+ customSetter.childrenRenderer(true);
139
+ }
140
+ }, permissionPassedProps)), !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
124
141
  proctorParams: proctorParams,
125
142
  permissions: permissions,
126
143
  askPermission: actions.askPermission,
127
144
  hasAllPermission: actions.hasAllPermission
128
- }), /*#__PURE__*/_react.default.createElement(_webcamActivityTracker.default, {
145
+ }), /*#__PURE__*/_react.default.createElement(_activityTracker.default, {
129
146
  proctorParams: proctorParams,
130
147
  setAudioPermission: permissionSetter.audio,
131
148
  setVideoPermission: permissionSetter.video,
132
149
  webcamReference: references.webcamReference,
133
- canvasReference: references.canvasReference
134
- }), /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
135
- ref: references.screenshareReference
150
+ canvasReference: references.canvasReference,
151
+ screenshareReference: references.screenshareReference
136
152
  }));
137
153
  };
138
154
  exports.ProctorApp = ProctorApp;
@@ -10,10 +10,3 @@
10
10
  height: 100%;
11
11
  overflow-y: scroll;
12
12
  }
13
- .captured-video-canvas {
14
- position: absolute;
15
- bottom: 0px;
16
- }
17
- .hide {
18
- visibility: hidden;
19
- }
@@ -35,6 +35,7 @@ const ProctoredContextApp = _ref => {
35
35
  const [audioPermisison, setAudioPermission] = (0, _react.useState)();
36
36
  const [videoPermission, setVideoPermission] = (0, _react.useState)();
37
37
  const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
38
+ const [customRenderer, setCustomRenderer] = (0, _react.useState)();
38
39
  const webcamReference = (0, _react.useRef)(null);
39
40
  const canvasReference = (0, _react.useRef)(null);
40
41
  const screenshareReference = (0, _react.useRef)(null);
@@ -77,15 +78,21 @@ const ProctoredContextApp = _ref => {
77
78
  video: setVideoPermission,
78
79
  screenshare: setScreensharePermission
79
80
  },
81
+ customProps: {
82
+ childrenRenderer: customRenderer
83
+ },
84
+ customSetter: {
85
+ childrenRenderer: setCustomRenderer
86
+ },
80
87
  proctorParams,
81
88
  actions: {
82
89
  askPermission: askPermission,
83
90
  hasAllPermission: hasAllPermission
84
91
  },
85
92
  references: {
86
- webcamReference,
87
- canvasReference,
88
- screenshareReference
93
+ webcamReference: webcamReference,
94
+ canvasReference: canvasReference,
95
+ screenshareReference: screenshareReference
89
96
  }
90
97
  })
91
98
  }, children);
@@ -15,9 +15,9 @@ function usePageVisibility(isProctorParam) {
15
15
  };
16
16
  (0, _react.useEffect)(() => {
17
17
  updateVisibility();
18
- window.addEventListener(visibilityChangeEvent, updateVisibility, false);
18
+ document.addEventListener(visibilityChangeEvent, updateVisibility, false);
19
19
  return () => {
20
- window.removeEventListener(visibilityChangeEvent, updateVisibility);
20
+ document.removeEventListener(visibilityChangeEvent, updateVisibility);
21
21
  };
22
22
  }, []);
23
23
  return isVisible && isProctorParam;
@@ -31,7 +31,7 @@ function useWebcamData(webcamReference, canvasReference, proctorParams) {
31
31
  const isWatching = (0, _react.useState)(_defaults.initialValues.isWatching);
32
32
  const [lookedAwayCount, setLookedAwayCount] = (0, _react.useState)(_defaults.initialValues.lookedAwayCount);
33
33
  (0, _react.useEffect)(() => {
34
- if ((0, _utils.isGPUAvailable)() && proctorParams.people && proctorParams.lookedAwayCount) {
34
+ if (proctorParams.people && proctorParams.lookedAwayCount && (0, _utils.isGPUAvailable)()) {
35
35
  const loadCocoSSDModel = async () => {
36
36
  try {
37
37
  const model = await cocoSsd.load();
@@ -3,14 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isChrome = exports.getVisibilityChangeEventName = exports.getIsDocumentVisible = exports.getFocusEventName = exports.getBrowserFullscreenElementProp = exports.getBrowserDetails = exports.getBlurEventName = void 0;
6
+ exports.isChrome = exports.getVisibilityChangeEventName = exports.getIsDocumentVisible = exports.getBrowserFullscreenElementProp = void 0;
7
7
  require("core-js/modules/es.regexp.exec.js");
8
8
  require("core-js/modules/es.string.match.js");
9
9
  const PROPERTY_TYPES = {
10
10
  HIDDEN: "hidden",
11
- VISIBILITY_CHANGE: "visibilitychange",
12
- FOCUS: "focus",
13
- BLUR: "blur"
11
+ VISIBILITY_CHANGE: "visibilitychange"
14
12
  };
15
13
  const getBrowserPropPrefix = () => {
16
14
  if (typeof document.msHidden !== "undefined") {
@@ -32,10 +30,6 @@ const getBrowserDocumentProp = type => {
32
30
  return getBrowserPropForHidden();
33
31
  case PROPERTY_TYPES.VISIBILITY_CHANGE:
34
32
  return "".concat(getBrowserPropPrefix(), "visibilitychange");
35
- case PROPERTY_TYPES.FOCUS:
36
- return "focus";
37
- case PROPERTY_TYPES.BLUR:
38
- return "blur";
39
33
  default:
40
34
  return "";
41
35
  }
@@ -44,10 +38,6 @@ const getIsDocumentVisible = () => !document[getBrowserDocumentProp(PROPERTY_TYP
44
38
  exports.getIsDocumentVisible = getIsDocumentVisible;
45
39
  const getVisibilityChangeEventName = () => getBrowserDocumentProp(PROPERTY_TYPES.VISIBILITY_CHANGE);
46
40
  exports.getVisibilityChangeEventName = getVisibilityChangeEventName;
47
- const getFocusEventName = () => getBrowserDocumentProp(PROPERTY_TYPES.FOCUS);
48
- exports.getFocusEventName = getFocusEventName;
49
- const getBlurEventName = () => getBrowserDocumentProp(PROPERTY_TYPES.BLUR);
50
- exports.getBlurEventName = getBlurEventName;
51
41
  const getBrowserFullscreenElementProp = () => {
52
42
  if (typeof document.fullscreenElement !== "undefined") {
53
43
  return "fullscreenElement";
@@ -61,8 +51,4 @@ const getBrowserFullscreenElementProp = () => {
61
51
  };
62
52
  exports.getBrowserFullscreenElementProp = getBrowserFullscreenElementProp;
63
53
  const isChrome = () => !!navigator.userAgent.match(/chrome|chromium/i);
64
- exports.isChrome = isChrome;
65
- const getBrowserDetails = () => ({
66
- isChrome: isChrome()
67
- });
68
- exports.getBrowserDetails = getBrowserDetails;
54
+ exports.isChrome = isChrome;
@@ -11,10 +11,13 @@ var _defaults = require("../constants/defaults");
11
11
  const isGPUAvailable = () => {
12
12
  const canvas = document.createElement("canvas");
13
13
  const webgl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
14
- const debugInfo = webgl.getExtension("webgl_debug_renderer_info");
15
- const gpu = webgl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL).toLowerCase();
14
+ const debugInfo = webgl === null || webgl === void 0 ? void 0 : webgl.getExtension("webgl_debug_renderer_info");
15
+ if (!debugInfo) {
16
+ return false;
17
+ }
18
+ const gpu = webgl.getParameter(debugInfo === null || debugInfo === void 0 ? void 0 : debugInfo.UNMASKED_RENDERER_WEBGL).toLowerCase();
16
19
  for (const gpuType of _defaults.gpuTypes) {
17
- if (gpu.includes(gpuType)) return true;
20
+ if (gpu !== null && gpu !== void 0 && gpu.includes(gpuType)) return true;
18
21
  }
19
22
  return false;
20
23
  };
@@ -21,24 +21,12 @@ Object.defineProperty(exports, "getAudioVideoPermission", {
21
21
  return _webcamMicrophoneUtils.getAudioVideoPermission;
22
22
  }
23
23
  });
24
- Object.defineProperty(exports, "getBlurEventName", {
25
- enumerable: true,
26
- get: function get() {
27
- return _browserUtils.getBlurEventName;
28
- }
29
- });
30
24
  Object.defineProperty(exports, "getBrowserFullscreenElementProp", {
31
25
  enumerable: true,
32
26
  get: function get() {
33
27
  return _browserUtils.getBrowserFullscreenElementProp;
34
28
  }
35
29
  });
36
- Object.defineProperty(exports, "getFocusEventName", {
37
- enumerable: true,
38
- get: function get() {
39
- return _browserUtils.getFocusEventName;
40
- }
41
- });
42
30
  Object.defineProperty(exports, "getIsDocumentVisible", {
43
31
  enumerable: true,
44
32
  get: function get() {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.updateVideoPermissions = exports.updateStatistics = exports.updateAudioPermissions = exports.setupScreensharePermission = exports.resetWebcamReference = exports.resetScreenshotReference = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.collectScreenshare = exports.captureWebcamSnapshot = exports.captureScreenshot = void 0;
6
+ exports.updateVideoPermissions = exports.updateStatistics = exports.updateAudioPermissions = exports.setupScreensharePermission = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.captureWebcamSnapshot = exports.captureScreenshot = void 0;
7
7
  require("core-js/modules/es.array-buffer.slice.js");
8
8
  require("core-js/modules/es.typed-array.uint8-array.js");
9
9
  require("core-js/modules/es.typed-array.fill.js");
@@ -115,11 +115,10 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
115
115
  const track = stream.getTracks()[0];
116
116
  if (track.getSettings().displaySurface === "monitor") {
117
117
  setScreensharePermission(true);
118
- screenshareReference.stream = stream;
119
- collectScreenshare(screenshareReference);
118
+ screenshareReference.current = stream;
120
119
  track.onended = e => {
121
120
  setScreensharePermission(false);
122
- screenshareReference.current.srcObject = null;
121
+ screenshareReference.current = null;
123
122
  };
124
123
  } else {
125
124
  track.stop();
@@ -127,25 +126,10 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
127
126
  setScreensharePermission(false);
128
127
  }
129
128
  }).catch(e => {
130
- resetScreenshotReference(screenshareReference);
129
+ screenshareReference.current = null;
131
130
  setScreensharePermission(false);
132
131
  });
133
132
  exports.setupScreensharePermission = setupScreensharePermission;
134
- const collectScreenshare = screenshareReference => {
135
- screenshareReference.current.srcObject = screenshareReference.stream;
136
- screenshareReference.current.onloadedmetadata = e => {
137
- screenshareReference.current.play();
138
- };
139
- };
140
- exports.collectScreenshare = collectScreenshare;
141
- const resetScreenshotReference = screenshareReference => {
142
- screenshareReference.current = null;
143
- };
144
- exports.resetScreenshotReference = resetScreenshotReference;
145
- const resetWebcamReference = webcamReference => {
146
- webcamReference.current = null;
147
- };
148
- exports.resetWebcamReference = resetWebcamReference;
149
133
  const getVideoPermissionQuery = () => navigator.permissions.query({
150
134
  name: "camera"
151
135
  });
@@ -174,9 +158,9 @@ const captureWebcamSnapshot = webcamReference => {
174
158
  }
175
159
  };
176
160
  exports.captureWebcamSnapshot = captureWebcamSnapshot;
177
- const captureScreenshot = async elementIdSelector => {
161
+ const captureScreenshot = async () => {
178
162
  try {
179
- const canvas = await (0, _html2canvas.default)(document.querySelector(elementIdSelector));
163
+ const canvas = await (0, _html2canvas.default)(document.querySelector("#ss-ref"));
180
164
  const b64Snapshot = canvas.toDataURL("image/jpeg");
181
165
  return b64DataURItoBlob(b64Snapshot);
182
166
  } catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
6
6
  "main": "dist/index.js",
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.weak-map.js");
4
- require("core-js/modules/web.dom-collections.iterator.js");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.ScreenshareActivityTracker = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _dom = require("../../constants/dom");
11
- var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
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
- 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; }
14
- const ScreenshareActivityTracker = /*#__PURE__*/(0, _react.forwardRef)((props, screenshareReference) => {
15
- (0, _react.useEffect)(() => {
16
- if (screenshareReference.stream) {
17
- (0, _webcamMicrophoneUtils.collectScreenshare)(screenshareReference);
18
- }
19
- }, []);
20
- return /*#__PURE__*/_react.default.createElement("video", {
21
- ref: screenshareReference,
22
- className: "captured-video-canvas hide",
23
- id: _dom.SCREENSHARE_REFERENCE_ID
24
- });
25
- });
26
- exports.ScreenshareActivityTracker = ScreenshareActivityTracker;
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.weak-map.js");
4
- require("core-js/modules/web.dom-collections.iterator.js");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _reactWebcam = _interopRequireDefault(require("react-webcam"));
11
- var _dom = require("../../constants/dom");
12
- var _breachUtils = require("../../utils/breachUtils");
13
- var _browserUtils = require("../../utils/browserUtils");
14
- var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
- 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); }
17
- 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; }
18
- const WebcamActivityTracker = _ref => {
19
- let {
20
- proctorParams,
21
- setAudioPermission,
22
- setVideoPermission,
23
- webcamReference
24
- } = _ref;
25
- (0, _react.useEffect)(() => {
26
- if ((0, _browserUtils.isChrome)()) {
27
- if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
28
- (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
29
- (0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
30
- status.onchange = evt => {
31
- (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
32
- };
33
- }).catch(err => {
34
- (0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
35
- });
36
- }
37
- }
38
- }, [setVideoPermission, setAudioPermission, proctorParams]);
39
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.isWebcamRequired)(proctorParams) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
40
- audio: true,
41
- muted: true,
42
- screenshotFormat: "image/jpeg",
43
- ref: webcamReference,
44
- onUserMedia: () => {
45
- setVideoPermission(true);
46
- },
47
- onUserMediaError: () => {
48
- setVideoPermission(false);
49
- },
50
- className: "captured-video-canvas hide",
51
- id: _dom.WEBCAM_REFERENCE_ID
52
- })));
53
- };
54
- var _default = WebcamActivityTracker;
55
- exports.default = _default;
@@ -1,10 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.WEBCAM_REFERENCE_ID = exports.SCREENSHARE_REFERENCE_ID = void 0;
7
- const WEBCAM_REFERENCE_ID = "wc-ref";
8
- exports.WEBCAM_REFERENCE_ID = WEBCAM_REFERENCE_ID;
9
- const SCREENSHARE_REFERENCE_ID = "ss-ref";
10
- exports.SCREENSHARE_REFERENCE_ID = SCREENSHARE_REFERENCE_ID;
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = useIsPageFocussed;
7
- require("core-js/modules/web.dom-collections.iterator.js");
8
- var _react = require("react");
9
- var _utils = require("../utils");
10
- const focusEvent = (0, _utils.getFocusEventName)();
11
- const blurEvent = (0, _utils.getBlurEventName)();
12
- function useIsPageFocussed(isProctorParam) {
13
- const [isFocussed, setIsFocussed] = (0, _react.useState)(true);
14
- const updateVisibilityOnFocus = () => {
15
- setIsFocussed(true);
16
- };
17
- const updateVisibilityOnBlur = () => {
18
- setIsFocussed(false);
19
- };
20
- (0, _react.useEffect)(() => {
21
- window.addEventListener(focusEvent, updateVisibilityOnFocus, false);
22
- window.addEventListener(blurEvent, updateVisibilityOnBlur, false);
23
- return () => {
24
- window.removeEventListener(focusEvent, updateVisibilityOnFocus);
25
- window.removeEventListener(blurEvent, updateVisibilityOnBlur);
26
- };
27
- }, []);
28
- return isFocussed && isProctorParam;
29
- }