@newtonschool/react_proctoring_library 0.0.51 → 0.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.Permission = void 0;
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _reactBootstrap = require("react-bootstrap");
11
- var _askPermission = _interopRequireDefault(require("../../assets/videos/ask-permission.mp4"));
12
11
  require("./index.scss");
13
12
  var text = _interopRequireWildcard(require("../../constants/text"));
14
13
  var _permissionBody = require("./permission-body");
@@ -32,33 +31,19 @@ const Permission = _ref => {
32
31
  centered: true
33
32
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Title, null, text.PERMISSION_TITLE)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, {
34
33
  className: "font-medium"
35
- }, /*#__PURE__*/_react.default.createElement("div", {
36
- style: {
37
- borderRadius: "20px"
38
- }
39
- }, /*#__PURE__*/_react.default.createElement("video", {
40
- className: "videoStyles",
41
- width: "100%",
42
- height: "240",
43
- autoPlay: true,
44
- muted: true,
45
- loop: true,
46
- playsInline: true
47
- }, /*#__PURE__*/_react.default.createElement("source", {
48
- src: _askPermission.default
49
- }), text.VIDEO_UNSUPPORTED_IN_BROWSER)), /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
34
+ }, /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
50
35
  showFullscreenText: !permissions.fullscreen,
51
- showAudioPermissionText: !permissions.audio && (0, _breachUtils.isWebcamRequired)(proctorParams),
36
+ showAudioPermissionText: !permissions.audio && (0, _breachUtils.isAudioRequired)(proctorParams),
52
37
  showVideoPermissionText: !permissions.video && (0, _breachUtils.isWebcamRequired)(proctorParams),
53
38
  showScreensharePermission: !permissions.screenshare && proctorParams.screenshareSnapshots
54
39
  })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !permissions.screenshare && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
55
40
  onClick: () => {
56
- askPermission(["screenshare"]);
41
+ askPermission(['screenshare']);
57
42
  }
58
43
  }, text.ALLOW_SCREENSHARE), !permissions.fullscreen && proctorParams.fullscreenExit && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
59
44
  variant: "primary",
60
45
  onClick: () => {
61
- askPermission(["fullscreen"]);
46
+ askPermission(['fullscreen']);
62
47
  }
63
48
  }, text.ALLOW_FULLSCREEN)));
64
49
  };
@@ -11,7 +11,9 @@ var _react = _interopRequireDefault(require("react"));
11
11
  var _loadable = _interopRequireDefault(require("../../utils/loadable"));
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
  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); }
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; }
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
+ * Asynchronously loads the component for FeaturePage
16
+ */
15
17
  var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
16
18
  fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
17
19
  });
@@ -42,7 +42,8 @@ const ProctorApp = _ref => {
42
42
  config,
43
43
  getProctorParamValues = () => {},
44
44
  getWebcamSnapshot = () => {},
45
- getScreengrab = () => {}
45
+ getScreengrab = () => {},
46
+ logger = () => {}
46
47
  } = _ref;
47
48
  const context = (0, _react.useContext)(proctoredContext);
48
49
  const {
@@ -62,7 +63,7 @@ const ProctorApp = _ref => {
62
63
  const recurringFetchIntervalRef = (0, _react.useRef)(null);
63
64
  const sendScreengrab = (0, _react.useCallback)(async function () {
64
65
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
65
- let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
66
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
66
67
  if (proctorParams.screenshareSnapshots && permissions.screenshare) {
67
68
  const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.SCREENSHARE_REFERENCE_ID));
68
69
  getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
@@ -70,7 +71,7 @@ const ProctorApp = _ref => {
70
71
  }, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
71
72
  const sendWebcamSnapshot = (0, _react.useCallback)(async function () {
72
73
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
73
- let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
74
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
74
75
  if (proctorParams.webcamSnapshots && permissions.video) {
75
76
  const webcamSnapshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.WEBCAM_REFERENCE_ID));
76
77
  getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
@@ -78,7 +79,7 @@ const ProctorApp = _ref => {
78
79
  }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video]);
79
80
  const sendProctoredParamValues = (0, _react.useCallback)(function () {
80
81
  let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
81
- let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
82
+ let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
82
83
  getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
83
84
  }, [proctoringIdentifier, getProctorParamValues]);
84
85
  const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
@@ -113,7 +114,7 @@ const ProctorApp = _ref => {
113
114
  }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
114
115
  const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, permissions);
115
116
  return /*#__PURE__*/_react.default.createElement("div", {
116
- className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
117
+ className: "".concat(proctorParams.copyPasteProctoring ? 'disable-copy-paste fullwidth fullheight' : 'fullwidth fullheight')
117
118
  }, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
118
119
  permissions: permissions,
119
120
  references: references,
@@ -128,7 +129,8 @@ const ProctorApp = _ref => {
128
129
  setAudioPermission: permissionSetter.audio,
129
130
  setVideoPermission: permissionSetter.video,
130
131
  webcamReference: references.webcamReference,
131
- canvasReference: references.canvasReference
132
+ canvasReference: references.canvasReference,
133
+ logger: logger
132
134
  }), /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
133
135
  screenshareStream: screenshareStream,
134
136
  ref: references.screenshareReference
@@ -11,7 +11,9 @@ var _react = _interopRequireDefault(require("react"));
11
11
  var _loadable = _interopRequireDefault(require("../../utils/loadable"));
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
  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); }
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; }
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
+ * Asynchronously loads the component for FeaturePage
16
+ */
15
17
  var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
16
18
  fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
17
19
  });
@@ -74,7 +74,7 @@ const ProctoredContextApp = _ref => {
74
74
  },
75
75
  proctorParams,
76
76
  actions: {
77
- askPermission: askPermission
77
+ askPermission
78
78
  },
79
79
  references: {
80
80
  webcamReference,
@@ -1,55 +1,63 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.weak-map.js");
4
- require("core-js/modules/web.dom-collections.iterator.js");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
8
+ require("core-js/modules/web.dom-collections.iterator.js");
9
+ require("core-js/modules/es.regexp.to-string.js");
9
10
  var _react = _interopRequireWildcard(require("react"));
10
11
  var _reactWebcam = _interopRequireDefault(require("react-webcam"));
11
- var _dom = require("../../constants/dom");
12
12
  var _breachUtils = require("../../utils/breachUtils");
13
13
  var _browserUtils = require("../../utils/browserUtils");
14
14
  var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
15
+ var _dom = require("../../constants/dom");
15
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
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); }
17
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 WEBCAM_PERMISISON_RETRIES_COUNT = 2;
18
20
  const WebcamActivityTracker = _ref => {
19
21
  let {
20
22
  proctorParams,
21
23
  setAudioPermission,
22
24
  setVideoPermission,
23
- webcamReference
25
+ webcamReference,
26
+ logger
24
27
  } = _ref;
28
+ const [retryCount, setRetryCount] = (0, _react.useState)(WEBCAM_PERMISISON_RETRIES_COUNT);
25
29
  (0, _react.useEffect)(() => {
26
30
  if ((0, _browserUtils.isChrome)()) {
27
- if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
31
+ if ((0, _breachUtils.isAudioRequired)()) {
28
32
  (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
29
33
  (0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
30
34
  status.onchange = evt => {
31
35
  (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
32
36
  };
33
37
  }).catch(err => {
34
- (0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
38
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)('Audio Permission', err);
35
39
  });
36
40
  }
37
41
  }
38
42
  }, [setVideoPermission, setAudioPermission, proctorParams]);
39
43
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.isWebcamRequired)(proctorParams) && /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
40
- audio: true,
41
- muted: true,
44
+ audio: (0, _breachUtils.isAudioRequired)(),
42
45
  screenshotFormat: "image/jpeg",
43
46
  ref: webcamReference,
44
47
  onUserMedia: () => {
45
48
  setVideoPermission(true);
46
49
  },
47
50
  onUserMediaError: err => {
48
- console.log("Webcam Error", err);
49
- setVideoPermission(false);
51
+ logger("Retry Count = ".concat(retryCount, " | Webcam error, onUserMediaError | ").concat(err.toString()));
52
+ if (retryCount === 0) {
53
+ setVideoPermission(false);
54
+ } else {
55
+ setRetryCount(retryCount - 1);
56
+ }
50
57
  },
51
58
  className: "captured-video-canvas hide",
52
- id: _dom.WEBCAM_REFERENCE_ID
59
+ id: _dom.WEBCAM_REFERENCE_ID,
60
+ key: retryCount
53
61
  }));
54
62
  };
55
63
  var _default = WebcamActivityTracker;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.showProctoredComponent = exports.isWebcamRequired = exports.getRequiredPermissionsFromProctorParams = exports.getInitialStats = exports.getDataOnBreach = void 0;
6
+ exports.showProctoredComponent = exports.isWebcamRequired = exports.isAudioRequired = exports.getRequiredPermissionsFromProctorParams = exports.getInitialStats = exports.getDataOnBreach = void 0;
7
7
  require("core-js/modules/es.symbol.description.js");
8
8
  var _defaults = require("../constants/defaults");
9
9
  var _permission = require("./permission");
@@ -41,6 +41,8 @@ const getRequiredPermissionsFromProctorParams = proctorParams => {
41
41
  exports.getRequiredPermissionsFromProctorParams = getRequiredPermissionsFromProctorParams;
42
42
  const isWebcamRequired = proctorParams => proctorParams.people || proctorParams.lookedAway || proctorParams.webcamSnapshots;
43
43
  exports.isWebcamRequired = isWebcamRequired;
44
+ const isAudioRequired = () => false;
45
+ exports.isAudioRequired = isAudioRequired;
44
46
  const showProctoredComponent = (proctorParams, permissions) => {
45
47
  return (0, _permission.hasAllPermissions)(getRequiredPermissionsFromProctorParams(proctorParams), permissions);
46
48
  };
@@ -13,7 +13,7 @@ require("core-js/modules/es.typed-array.to-locale-string.js");
13
13
  require("core-js/modules/es.promise.js");
14
14
  var _ = require(".");
15
15
  var _defaults = require("../constants/defaults");
16
- const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !== "undefined" && webcamReference.current !== null && webcamReference.current.video.readyState === 4;
16
+ const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !== 'undefined' && webcamReference.current !== null && webcamReference.current.video.readyState === 4;
17
17
  exports.isWebcamVideoValid = isWebcamVideoValid;
18
18
  const updateStatistics = (statistics, currentStats, proctorParams) => {
19
19
  const {
@@ -71,12 +71,12 @@ const getGlancePercentage = partSegmentation => {
71
71
  };
72
72
  exports.getGlancePercentage = getGlancePercentage;
73
73
  const getVideoPermission = function getVideoPermission(stream) {
74
- let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
74
+ let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
75
75
  return stream.getVideoTracks().filter(track => track.enabled && track.label && track.id !== exludeTrackId).length > 0;
76
76
  };
77
77
  exports.getVideoPermission = getVideoPermission;
78
78
  const getAudioPermission = function getAudioPermission(stream) {
79
- let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
79
+ let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
80
80
  return stream.getAudioTracks().filter(track => track.enabled && track.label && !track.muted && track.id !== exludeTrackId).length > 0;
81
81
  };
82
82
  exports.getAudioPermission = getAudioPermission;
@@ -108,10 +108,14 @@ const updateVideoPermissions = setVideoPermission => {
108
108
  };
109
109
  exports.updateVideoPermissions = updateVideoPermissions;
110
110
  const setupScreensharePermission = (setScreensharePermission, screenshareReference, setScreenshareStream) => navigator.mediaDevices.getDisplayMedia({
111
+ video: {
112
+ displaySurface: 'monitor'
113
+ }
114
+ }).catch(() => navigator.mediaDevices.getDisplayMedia({
111
115
  video: true
112
- }).then(stream => {
116
+ })).then(stream => {
113
117
  const track = stream.getTracks()[0];
114
- if (track.getSettings().displaySurface === "monitor") {
118
+ if (track.getSettings().displaySurface === 'monitor') {
115
119
  setScreensharePermission(true);
116
120
  setScreenshareStream(stream);
117
121
  collectScreenshare(screenshareReference, stream);
@@ -145,16 +149,16 @@ const resetWebcamReference = webcamReference => {
145
149
  };
146
150
  exports.resetWebcamReference = resetWebcamReference;
147
151
  const getVideoPermissionQuery = () => navigator.permissions.query({
148
- name: "camera"
152
+ name: 'camera'
149
153
  });
150
154
  exports.getVideoPermissionQuery = getVideoPermissionQuery;
151
155
  const getAudioPermissionQuery = () => navigator.permissions.query({
152
- name: "microphone"
156
+ name: 'microphone'
153
157
  });
154
158
  exports.getAudioPermissionQuery = getAudioPermissionQuery;
155
159
  const b64DataURItoBlob = dataURI => {
156
- const byteString = window.atob(dataURI.split(",")[1]);
157
- const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
160
+ const byteString = window.atob(dataURI.split(',')[1]);
161
+ const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
158
162
  const u8arr = new Uint8Array(byteString.length);
159
163
  for (let i = 0; i < byteString.length; i += 1) {
160
164
  u8arr[i] = byteString.charCodeAt(i);
@@ -175,18 +179,18 @@ exports.captureWebcamSnapshot = captureWebcamSnapshot;
175
179
  const captureScreenshot = async elementIdSelector => {
176
180
  try {
177
181
  const video = document.querySelector(elementIdSelector);
178
- const canvas = document.createElement("canvas");
182
+ const canvas = document.createElement('canvas');
179
183
  if (window.createImageBitmap) {
180
184
  const bitmap = await createImageBitmap(video);
181
185
  canvas.width = bitmap.width;
182
186
  canvas.height = bitmap.height;
183
- canvas.getContext("bitmaprenderer").transferFromImageBitmap(bitmap);
187
+ canvas.getContext('bitmaprenderer').transferFromImageBitmap(bitmap);
184
188
  const blob = await new Promise(res => canvas.toBlob(res));
185
189
  return blob;
186
190
  } else {
187
191
  canvas.width = video.videoWidth;
188
192
  canvas.height = video.videoHeight;
189
- canvas.getContext("2d").drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
193
+ canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
190
194
  const blob = await new Promise(resolve => canvas.toBlob(resolve));
191
195
  return blob;
192
196
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.51",
3
+ "version": "0.0.53",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
6
6
  "main": "dist/index.js",