@newtonschool/react_proctoring_library 0.0.13 → 0.0.14

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.
@@ -21,6 +21,8 @@ var _permissions = require("./permissions");
21
21
 
22
22
  var _useWebcamData = _interopRequireDefault(require("../hooks/useWebcamData"));
23
23
 
24
+ var _breachUtils = require("../utils/breachUtils");
25
+
24
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
27
 
26
28
  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); }
@@ -33,21 +35,29 @@ const ProctorApp = _ref => {
33
35
  let {
34
36
  proctoringIdentifier,
35
37
  children,
36
- proctoringParams = {
37
- userCount: true,
38
- tabSwitch: true,
39
- fullscreenExit: true,
40
- lookedAway: true,
41
- isWebcamDataReliable: true
42
- },
43
- sendData = () => {},
44
- shouldSendDataOnBreach = false
38
+ config,
39
+ getProctorParamValues = () => {},
40
+ getWebcamSnapshot = () => {},
41
+ getScreengrab = () => {}
45
42
  } = _ref;
46
43
  const webcamReference = (0, _react.useRef)(null);
47
44
  const canvasReference = (0, _react.useRef)(null);
48
45
  const statistics = (0, _react.useRef)(_defaults.INITIAL_STATISTICS);
46
+ const {
47
+ proctorParams,
48
+ recurring = false,
49
+ recurringFetchInterval = 0,
50
+ trackScreenshare = false
51
+ } = config; // const {
52
+ // userCount = true,
53
+ // tabSwitch = true,
54
+ // fullscreenExit = true,
55
+ // lookedAway = true,
56
+ // } = proctorParams;
57
+
49
58
  const [audioPermission, setAudioPermission] = (0, _react.useState)(false);
50
59
  const [videoPermission, setVideoPermission] = (0, _react.useState)(false);
60
+ const [screensharePermission, setScreensharePermission] = (0, _react.useState)(!trackScreenshare);
51
61
  const firstFullScreenDone = (0, _react.useRef)(false);
52
62
  const {
53
63
  isFullscreen,
@@ -56,9 +66,23 @@ const ProctorApp = _ref => {
56
66
  } = (0, _hooks.useFullscreenData)(firstFullScreenDone);
57
67
  const [userCount, lookedAwayCount, isWebcamDataReliable] = (0, _useWebcamData.default)(webcamReference, canvasReference);
58
68
  const tabSwitchCount = (0, _hooks.useTabSwitchCount)(firstFullScreenDone);
69
+ let recurringFetchIntervalRef = (0, _react.useRef)(null);
59
70
  (0, _react.useEffect)(() => {
60
- (0, _utils.removeStatsFromLocalStorage)(proctoringIdentifier);
61
- }, [proctoringIdentifier]);
71
+ if (recurring) {
72
+ recurringFetchIntervalRef.current = setInterval(() => {
73
+ getProctorParamValues(proctoringIdentifier, statistics.current, false);
74
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(webcamReference);
75
+
76
+ if (webcamReference) {
77
+ getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, false);
78
+ }
79
+ }, recurringFetchInterval);
80
+ }
81
+
82
+ return () => {
83
+ clearInterval(recurringFetchIntervalRef.current);
84
+ };
85
+ }, [proctoringIdentifier, recurring, recurringFetchInterval, getWebcamSnapshot, getProctorParamValues]);
62
86
  (0, _react.useEffect)(() => {
63
87
  const currentStats = {
64
88
  userCount,
@@ -67,14 +91,23 @@ const ProctorApp = _ref => {
67
91
  lookedAwayCount,
68
92
  isWebcamDataReliable: isWebcamProcessingReliable
69
93
  };
94
+ const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctoringIdentifier);
70
95
 
71
- if (shouldSendDataOnBreach) {
72
- (0, _utils.sendDataOnBreach)(statistics, currentStats, proctoringIdentifier, sendData, webcamReference);
73
- }
96
+ if (breachData) {
97
+ getProctorParamValues(breachData.proctoringIdentifier, breachData.data, true, breachData.breachedParam);
98
+
99
+ if (breachData.breachedParam === "LOOKED_AWAY_COUNT" || breachData.breachedParam === "USER_COUNT_MAX") {
100
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(webcamReference);
74
101
 
75
- (0, _utils.updateStatistics)(statistics, currentStats);
76
- (0, _utils.addOrUpdateStatsToLocalStorage)(proctoringIdentifier, statistics.current);
77
- }, [userCount, tabSwitchCount, fullScreenExitCount, lookedAwayCount, isWebcamDataReliable, proctoringIdentifier, sendData, shouldSendDataOnBreach]);
102
+ if (webcamSnapshot) {
103
+ getWebcamSnapshot(breachData.proctoringIdentifier, webcamSnapshot, true, breachData.breachedParam);
104
+ }
105
+ } else {// getScreengrab();
106
+ }
107
+
108
+ (0, _utils.updateStatistics)(statistics, currentStats);
109
+ }
110
+ }, [userCount, tabSwitchCount, fullScreenExitCount, lookedAwayCount, isWebcamDataReliable, proctoringIdentifier, getProctorParamValues, getWebcamSnapshot]);
78
111
 
79
112
  if (proctoringIdentifier === undefined) {
80
113
  // todo
@@ -85,12 +118,16 @@ const ProctorApp = _ref => {
85
118
  isFullscreen: isFullscreen,
86
119
  audioPermisison: audioPermission,
87
120
  videoPermission: videoPermission,
121
+ screensharePermission: screensharePermission,
122
+ trackScreenshare: trackScreenshare,
88
123
  setFullscreen: setFullscreen
89
124
  }), /*#__PURE__*/_react.default.createElement(_.ActivityTracker, {
90
125
  setAudioPermission: setAudioPermission,
91
126
  setVideoPermission: setVideoPermission,
92
127
  webcamReference: webcamReference,
93
- canvasReference: canvasReference
128
+ canvasReference: canvasReference,
129
+ trackScreenshare: trackScreenshare,
130
+ setScreensharePermission: setScreensharePermission
94
131
  }), isFullscreen && audioPermission && videoPermission && children);
95
132
  };
96
133
 
@@ -34,12 +34,20 @@ const ActivityTracker = _ref => {
34
34
  webcamReference,
35
35
  canvasReference,
36
36
  setAudioPermission,
37
- setVideoPermission
37
+ setVideoPermission,
38
+ trackScreenshare,
39
+ setScreensharePermission
38
40
  } = _ref;
41
+ const videoReference = (0, _react.useRef)(null);
39
42
  (0, _react.useEffect)(() => {
40
43
  if (isChrome) {
41
44
  (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
42
45
  (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
46
+
47
+ if (trackScreenshare) {
48
+ (0, _webcamMicrophoneUtils.updateScreensharePermission)(setScreensharePermission, videoReference);
49
+ }
50
+
43
51
  (0, _webcamMicrophoneUtils.getVideoPermissionQuery)().then(status => {
44
52
  status.onchange = evt => {
45
53
  (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
@@ -55,7 +63,7 @@ const ActivityTracker = _ref => {
55
63
  (0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
56
64
  });
57
65
  }
58
- }, [setVideoPermission, setAudioPermission]);
66
+ }, [setVideoPermission, setAudioPermission, setScreensharePermission, trackScreenshare]);
59
67
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
60
68
  audio: true,
61
69
  muted: true,
@@ -138,6 +146,8 @@ const ActivityTracker = _ref => {
138
146
  }), /*#__PURE__*/_react.default.createElement("canvas", {
139
147
  ref: canvasReference,
140
148
  className: "captured-video-canvas"
149
+ }), /*#__PURE__*/_react.default.createElement("video", {
150
+ src: videoReference.current
141
151
  }));
142
152
  };
143
153
 
@@ -30,6 +30,8 @@ const Permission = _ref => {
30
30
  isFullscreen,
31
31
  audioPermisison,
32
32
  videoPermission,
33
+ screensharePermission,
34
+ trackScreenshare,
33
35
  setFullscreen
34
36
  } = _ref;
35
37
  const showPermissionModal = !isFullscreen || !audioPermisison || !videoPermission;
@@ -58,7 +60,8 @@ const Permission = _ref => {
58
60
  }), text.VIDEO_UNSUPPORTED_IN_BROWSER)), /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
59
61
  showFullscreenText: !isFullscreen,
60
62
  showAudioPermissionText: !audioPermisison,
61
- showVideoPermissionText: !videoPermission
63
+ showVideoPermissionText: !videoPermission,
64
+ showScreensharePermission: !screensharePermission && trackScreenshare
62
65
  }))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !isFullscreen && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
63
66
  variant: "primary",
64
67
  onClick: () => {
@@ -25,11 +25,16 @@ const PermissionBody = _ref => {
25
25
  let {
26
26
  showFullscreenText,
27
27
  showAudioPermissionText,
28
- showVideoPermissionText
28
+ showVideoPermissionText,
29
+ showScreensharePermission
29
30
  } = _ref;
30
31
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
31
32
  className: "mb-2"
32
- }, text.PERMISSION_GENERIC), showAudioPermissionText && showVideoPermissionText ? /*#__PURE__*/_react.default.createElement("div", {
33
+ }, text.PERMISSION_GENERIC), showScreensharePermission && /*#__PURE__*/_react.default.createElement("div", {
34
+ className: "mb-2"
35
+ }, /*#__PURE__*/_react.default.createElement("span", {
36
+ className: "pr-2 font-weight-bold"
37
+ }, "Screen Share:"), text.PERMISSION_SCREENSHARE), showAudioPermissionText && showVideoPermissionText ? /*#__PURE__*/_react.default.createElement("div", {
33
38
  className: "mb-2"
34
39
  }, /*#__PURE__*/_react.default.createElement("span", {
35
40
  className: "pr-2 font-weight-bold"
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WATCHING_SCREEN = exports.VIDEO_UNSUPPORTED_IN_BROWSER = exports.USER_COUNT_LABEL = exports.REQUEST_VIDEO_AUDIO_PERMISSIONS_HEADING = exports.REQUEST_VIDEO_AUDIO_PERMISSIONS_DESC = exports.REQUEST_PERMISSION = exports.PERMISSION_VIDEO = exports.PERMISSION_TITLE = exports.PERMISSION_GENERIC = exports.PERMISSION_FULLSCREEN = exports.PERMISSION_AUDIO_VIDEO = exports.PERMISSION_AUDIO = exports.NO_CAMERA_AVAILABLE = exports.NO_AUDIO_DEVICE_AVAILABLE = exports.NOT_WATCHING_SCREEN = exports.MESSAGE = exports.FULLSCREEN_ERROR_MESSAGE = exports.DENY_FULLSCREEN = exports.CAMERA_UNAVAILABLE_INSECURE_CONN = exports.BROWSER_BLOCKED_PERMISSION_RESOLVED_RECHECK = exports.BROWSER_BLOCKED_PERMISSION_NEXT_STEP = exports.BROWSER_BLOCKED_PERMISSION_DIRECTION = exports.BROWSER_BLOCKED_PERMISSION_DIALOG = exports.BROWSER_BLOCKED_PERMISSION = exports.ALLOW_FULLSCREEN = void 0;
6
+ exports.WATCHING_SCREEN = exports.VIDEO_UNSUPPORTED_IN_BROWSER = exports.USER_COUNT_LABEL = exports.REQUEST_VIDEO_AUDIO_PERMISSIONS_HEADING = exports.REQUEST_VIDEO_AUDIO_PERMISSIONS_DESC = exports.REQUEST_PERMISSION = exports.PERMISSION_VIDEO = exports.PERMISSION_TITLE = exports.PERMISSION_SCREENSHARE = exports.PERMISSION_GENERIC = exports.PERMISSION_FULLSCREEN = exports.PERMISSION_AUDIO_VIDEO = exports.PERMISSION_AUDIO = exports.NO_CAMERA_AVAILABLE = exports.NO_AUDIO_DEVICE_AVAILABLE = exports.NOT_WATCHING_SCREEN = exports.MESSAGE = exports.FULLSCREEN_ERROR_MESSAGE = exports.DENY_FULLSCREEN = exports.CAMERA_UNAVAILABLE_INSECURE_CONN = exports.BROWSER_BLOCKED_PERMISSION_RESOLVED_RECHECK = exports.BROWSER_BLOCKED_PERMISSION_NEXT_STEP = exports.BROWSER_BLOCKED_PERMISSION_DIRECTION = exports.BROWSER_BLOCKED_PERMISSION_DIALOG = exports.BROWSER_BLOCKED_PERMISSION = exports.ALLOW_FULLSCREEN = void 0;
7
7
  const WATCHING_SCREEN = "You are watching the screen";
8
8
  exports.WATCHING_SCREEN = WATCHING_SCREEN;
9
9
  const NOT_WATCHING_SCREEN = "You are not watching the screen";
@@ -48,6 +48,8 @@ const PERMISSION_GENERIC = "This screen requires following permissions for conti
48
48
  exports.PERMISSION_GENERIC = PERMISSION_GENERIC;
49
49
  const PERMISSION_FULLSCREEN = "Please allow us to switch your screen to fullscreen mode.";
50
50
  exports.PERMISSION_FULLSCREEN = PERMISSION_FULLSCREEN;
51
+ const PERMISSION_SCREENSHARE = "Please choose to share the entire screen out of all the screen share options.";
52
+ exports.PERMISSION_SCREENSHARE = PERMISSION_SCREENSHARE;
51
53
  const PERMISSION_AUDIO_VIDEO = "Your browser or system settings have disallowed Microphone and Camera permissions. Please permit this website to access microphone and camera. Refresh after you've given the permission to access the screen";
52
54
  exports.PERMISSION_AUDIO_VIDEO = PERMISSION_AUDIO_VIDEO;
53
55
  const PERMISSION_VIDEO = "Your browser or system settings have disallowed Camera permissions. Please permit this website to access the camera. Refresh after you've given the permission to access the screen";
package/dist/index.js CHANGED
@@ -9,13 +9,5 @@ Object.defineProperty(exports, "ProctorApp", {
9
9
  return _components.ProctorApp;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "getStatistics", {
13
- enumerable: true,
14
- get: function get() {
15
- return _utils.getStatistics;
16
- }
17
- });
18
-
19
- var _components = require("./components");
20
12
 
21
- var _utils = require("./utils");
13
+ var _components = require("./components");
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.sendDataOnBreach = void 0;
7
-
8
- var _ = require(".");
6
+ exports.getDataOnBreach = void 0;
9
7
 
10
8
  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; }
11
9
 
@@ -13,7 +11,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
13
11
 
14
12
  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; }
15
13
 
16
- const sendDataOnBreach = (statistics, currentData, proctoringIdentifier, sendData, webcamReference) => {
14
+ const getDataOnBreach = (statistics, currentData, proctoringIdentifier) => {
17
15
  const {
18
16
  userCount,
19
17
  tabSwitchCount,
@@ -25,63 +23,59 @@ const sendDataOnBreach = (statistics, currentData, proctoringIdentifier, sendDat
25
23
  const data = statistics.current;
26
24
 
27
25
  if (data.IS_WEBCAM_DATA_RELIABLE !== isWebcamDataReliable) {
28
- sendData({
26
+ return {
29
27
  proctoringIdentifier,
30
- breach: "IS_WEBCAM_DATA_RELIABLE",
28
+ breachedParam: "IS_WEBCAM_DATA_RELIABLE",
31
29
  timestamp,
32
30
  data: _objectSpread(_objectSpread({}, data), {}, {
33
31
  IS_WEBCAM_DATA_RELIABLE: isWebcamDataReliable
34
32
  })
35
- });
33
+ };
36
34
  }
37
35
 
38
36
  if (data.USER_COUNT_MAX < userCount) {
39
- const webcamSnapshot = (0, _.captureWebcamSnapshot)(webcamReference);
40
- sendData({
37
+ return {
41
38
  proctoringIdentifier,
42
- breach: "USER_COUNT_MAX",
39
+ breachedParam: "USER_COUNT_MAX",
43
40
  timestamp,
44
41
  data: _objectSpread(_objectSpread({}, data), {}, {
45
42
  USER_COUNT_MAX: userCount
46
- }),
47
- webcamSnapshot
48
- });
43
+ })
44
+ };
49
45
  }
50
46
 
51
47
  if (data.TAB_SWITCH_COUNT !== tabSwitchCount) {
52
- sendData({
48
+ return {
53
49
  proctoringIdentifier,
54
- breach: "TAB_SWITCH_COUNT",
50
+ breachedParam: "TAB_SWITCH_COUNT",
55
51
  timestamp,
56
52
  data: _objectSpread(_objectSpread({}, data), {}, {
57
53
  TAB_SWITCH_COUNT: tabSwitchCount
58
54
  })
59
- });
55
+ };
60
56
  }
61
57
 
62
58
  if (data.FULLSCREEN_EXIT_COUNT !== fullScreenExitCount) {
63
- sendData({
59
+ return {
64
60
  proctoringIdentifier,
65
- breach: "FULLSCREEN_EXIT_COUNT",
61
+ breachedParam: "FULLSCREEN_EXIT_COUNT",
66
62
  timestamp,
67
63
  data: _objectSpread(_objectSpread({}, data), {}, {
68
64
  FULLSCREEN_EXIT_COUNT: fullScreenExitCount
69
65
  })
70
- });
66
+ };
71
67
  }
72
68
 
73
69
  if (data.LOOKED_AWAY_COUNT !== lookedAwayCount) {
74
- const webcamSnapshot = (0, _.captureWebcamSnapshot)(webcamReference);
75
- sendData({
70
+ return {
76
71
  proctoringIdentifier,
77
- breach: "LOOKED_AWAY_COUNT",
72
+ breachedParam: "LOOKED_AWAY_COUNT",
78
73
  timestamp,
79
74
  data: _objectSpread(_objectSpread({}, data), {}, {
80
75
  LOOKED_AWAY_COUNT: lookedAwayCount
81
- }),
82
- webcamSnapshot
83
- });
76
+ })
77
+ };
84
78
  }
85
79
  };
86
80
 
87
- exports.sendDataOnBreach = sendDataOnBreach;
81
+ exports.getDataOnBreach = getDataOnBreach;
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "addOrUpdateStatsToLocalStorage", {
7
- enumerable: true,
8
- get: function get() {
9
- return _localStorageUtils.addOrUpdateStatsToLocalStorage;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "captureWebcamSnapshot", {
13
7
  enumerable: true,
14
8
  get: function get() {
@@ -45,12 +39,6 @@ Object.defineProperty(exports, "getIsDocumentVisible", {
45
39
  return _browserUtils.getIsDocumentVisible;
46
40
  }
47
41
  });
48
- Object.defineProperty(exports, "getStatistics", {
49
- enumerable: true,
50
- get: function get() {
51
- return _localStorageUtils.getStatistics;
52
- }
53
- });
54
42
  Object.defineProperty(exports, "getVideoPermission", {
55
43
  enumerable: true,
56
44
  get: function get() {
@@ -81,18 +69,6 @@ Object.defineProperty(exports, "isWebcamVideoValid", {
81
69
  return _webcamMicrophoneUtils.isWebcamVideoValid;
82
70
  }
83
71
  });
84
- Object.defineProperty(exports, "removeStatsFromLocalStorage", {
85
- enumerable: true,
86
- get: function get() {
87
- return _localStorageUtils.removeStatsFromLocalStorage;
88
- }
89
- });
90
- Object.defineProperty(exports, "retrieveStatsFromLocalStorage", {
91
- enumerable: true,
92
- get: function get() {
93
- return _localStorageUtils.retrieveStatsFromLocalStorage;
94
- }
95
- });
96
72
  Object.defineProperty(exports, "sendDataOnBreach", {
97
73
  enumerable: true,
98
74
  get: function get() {
@@ -106,8 +82,6 @@ Object.defineProperty(exports, "updateStatistics", {
106
82
  }
107
83
  });
108
84
 
109
- var _localStorageUtils = require("./localStorageUtils");
110
-
111
85
  var _webcamMicrophoneUtils = require("./webcamMicrophoneUtils");
112
86
 
113
87
  var _browserUtils = require("./browserUtils");
@@ -3,7 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.updateVideoPermissions = exports.updateStatistics = exports.updateAudioPermissions = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.captureWebcamSnapshot = void 0;
6
+ exports.updateVideoPermissions = exports.updateStatistics = exports.updateScreensharePermission = exports.updateAudioPermissions = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.captureWebcamSnapshot = void 0;
7
+
8
+ require("core-js/modules/es.regexp.exec.js");
9
+
10
+ require("core-js/modules/es.string.split.js");
11
+
12
+ require("core-js/modules/es.array-buffer.slice.js");
13
+
14
+ require("core-js/modules/es.typed-array.uint8-array.js");
15
+
16
+ require("core-js/modules/es.typed-array.set.js");
17
+
18
+ require("core-js/modules/es.typed-array.sort.js");
19
+
20
+ require("core-js/modules/es.typed-array.to-locale-string.js");
7
21
 
8
22
  var _ = require(".");
9
23
 
@@ -110,6 +124,22 @@ const updateVideoPermissions = setVideoPermission => {
110
124
 
111
125
  exports.updateVideoPermissions = updateVideoPermissions;
112
126
 
127
+ const updateScreensharePermission = (setScreensharePermission, videoReference) => navigator.mediaDevices.getDisplayMedia({
128
+ video: true,
129
+ audio: true
130
+ }).then(stream => {
131
+ if (stream.getTracks()[0].getSettings().displaySurface === "monitor") {
132
+ videoReference.current = stream;
133
+ setScreensharePermission(true);
134
+ } else {
135
+ setScreensharePermission(false);
136
+ }
137
+ }).catch(() => {
138
+ setScreensharePermission(false);
139
+ });
140
+
141
+ exports.updateScreensharePermission = updateScreensharePermission;
142
+
113
143
  const getVideoPermissionQuery = () => navigator.permissions.query({
114
144
  name: "camera"
115
145
  });
@@ -122,8 +152,26 @@ const getAudioPermissionQuery = () => navigator.permissions.query({
122
152
 
123
153
  exports.getAudioPermissionQuery = getAudioPermissionQuery;
124
154
 
155
+ const b64DataURItoBlob = dataURI => {
156
+ const byteString = window.atob(dataURI.split(",")[1]);
157
+ const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
158
+ const u8arr = new Uint8Array(byteString.length);
159
+
160
+ for (let i = 0; i < byteString.length; i += 1) {
161
+ u8arr[i] = byteString.charCodeAt(i);
162
+ }
163
+
164
+ return new Blob([u8arr], {
165
+ type: mimeString
166
+ });
167
+ };
168
+
125
169
  const captureWebcamSnapshot = webcamReference => {
126
- return webcamReference.current.getScreenshot();
170
+ try {
171
+ const b64Snapshot = webcamReference.current.getScreenshot();
172
+ return b64DataURItoBlob(b64Snapshot);
173
+ } catch (_unused) {// pass
174
+ }
127
175
  };
128
176
 
129
177
  exports.captureWebcamSnapshot = captureWebcamSnapshot;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra",
6
6
  "main": "dist/index.js",