@newtonschool/react_proctoring_library 0.0.44 → 0.0.46

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.
@@ -49,7 +49,8 @@ const ProctorApp = _ref => {
49
49
  actions,
50
50
  permissions,
51
51
  references,
52
- permissionSetter
52
+ permissionSetter,
53
+ screenshareStream
53
54
  } = context;
54
55
  const CustomPermissionView = customPermissionView;
55
56
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
@@ -115,8 +116,6 @@ const ProctorApp = _ref => {
115
116
  className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
116
117
  }, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
117
118
  permissions: permissions,
118
- hasAllPermission: actions.hasAllPermission,
119
- askPermission: actions.askPermission,
120
119
  references: references,
121
120
  actions: actions,
122
121
  browserDetails: (0, _browserUtils.getBrowserDetails)()
@@ -132,6 +131,7 @@ const ProctorApp = _ref => {
132
131
  webcamReference: references.webcamReference,
133
132
  canvasReference: references.canvasReference
134
133
  }), /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
134
+ screenshareStream: screenshareStream,
135
135
  ref: references.screenshareReference
136
136
  }));
137
137
  };
@@ -38,10 +38,11 @@ const ProctoredContextApp = _ref => {
38
38
  const webcamReference = (0, _react.useRef)(null);
39
39
  const canvasReference = (0, _react.useRef)(null);
40
40
  const screenshareReference = (0, _react.useRef)(null);
41
+ const [screenshareStream, setScreenshareStream] = (0, _react.useState)(null);
41
42
  const Context = contextProvider;
42
43
  const askPermissionAction = (0, _react.useMemo)(() => ({
43
44
  screenshare: () => {
44
- (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference);
45
+ (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference, setScreenshareStream);
45
46
  },
46
47
  fullscreen: () => {
47
48
  setFullscreen();
@@ -86,7 +87,8 @@ const ProctoredContextApp = _ref => {
86
87
  webcamReference,
87
88
  canvasReference,
88
89
  screenshareReference
89
- }
90
+ },
91
+ screenshareStream
90
92
  })
91
93
  }, children);
92
94
  };
@@ -11,10 +11,13 @@ var _dom = require("../../constants/dom");
11
11
  var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
12
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
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) => {
14
+ const ScreenshareActivityTracker = /*#__PURE__*/(0, _react.forwardRef)((_ref, screenshareReference) => {
15
+ let {
16
+ screenshareStream
17
+ } = _ref;
15
18
  (0, _react.useEffect)(() => {
16
- if (screenshareReference.stream) {
17
- (0, _webcamMicrophoneUtils.collectScreenshare)(screenshareReference);
19
+ if (screenshareStream) {
20
+ (0, _webcamMicrophoneUtils.collectScreenshare)(screenshareReference, screenshareStream);
18
21
  }
19
22
  }, []);
20
23
  return /*#__PURE__*/_react.default.createElement("video", {
@@ -12,9 +12,7 @@ require("core-js/modules/es.typed-array.sort.js");
12
12
  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
- var _html2canvas = _interopRequireDefault(require("html2canvas"));
16
15
  var _defaults = require("../constants/defaults");
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
16
  const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !== "undefined" && webcamReference.current !== null && webcamReference.current.video.readyState === 4;
19
17
  exports.isWebcamVideoValid = isWebcamVideoValid;
20
18
  const updateStatistics = (statistics, currentStats, proctorParams) => {
@@ -109,21 +107,21 @@ const updateVideoPermissions = setVideoPermission => {
109
107
  });
110
108
  };
111
109
  exports.updateVideoPermissions = updateVideoPermissions;
112
- const setupScreensharePermission = (setScreensharePermission, screenshareReference) => navigator.mediaDevices.getDisplayMedia({
110
+ const setupScreensharePermission = (setScreensharePermission, screenshareReference, setScreenshareStream) => navigator.mediaDevices.getDisplayMedia({
113
111
  video: true
114
112
  }).then(stream => {
115
113
  const track = stream.getTracks()[0];
116
114
  if (track.getSettings().displaySurface === "monitor") {
117
115
  setScreensharePermission(true);
118
- screenshareReference.stream = stream;
119
- collectScreenshare(screenshareReference);
116
+ setScreenshareStream(stream);
117
+ collectScreenshare(screenshareReference, stream);
120
118
  track.onended = e => {
121
119
  setScreensharePermission(false);
122
120
  screenshareReference.current.srcObject = null;
123
121
  };
124
122
  } else {
125
123
  track.stop();
126
- screenshareReference.current = null;
124
+ resetScreenshotReference(screenshareReference);
127
125
  setScreensharePermission(false);
128
126
  }
129
127
  }).catch(e => {
@@ -131,8 +129,8 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
131
129
  setScreensharePermission(false);
132
130
  });
133
131
  exports.setupScreensharePermission = setupScreensharePermission;
134
- const collectScreenshare = screenshareReference => {
135
- screenshareReference.current.srcObject = screenshareReference.stream;
132
+ const collectScreenshare = (screenshareReference, stream) => {
133
+ screenshareReference.current.srcObject = stream;
136
134
  screenshareReference.current.onloadedmetadata = e => {
137
135
  screenshareReference.current.play();
138
136
  };
@@ -176,9 +174,13 @@ const captureWebcamSnapshot = webcamReference => {
176
174
  exports.captureWebcamSnapshot = captureWebcamSnapshot;
177
175
  const captureScreenshot = async elementIdSelector => {
178
176
  try {
179
- const canvas = await (0, _html2canvas.default)(document.querySelector(elementIdSelector));
180
- const b64Snapshot = canvas.toDataURL("image/jpeg");
181
- return b64DataURItoBlob(b64Snapshot);
177
+ const canvas = document.createElement("canvas");
178
+ const video = document.querySelector(elementIdSelector);
179
+ canvas.width = video.videoWidth;
180
+ canvas.height = video.videoHeight;
181
+ canvas.getContext("2d").drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
182
+ const blob = await new Promise(resolve => canvas.toBlob(resolve));
183
+ return blob;
182
184
  } catch (e) {
183
185
  // pass
184
186
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.44",
3
+ "version": "0.0.46",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra,weastel",
6
6
  "main": "dist/index.js",
@@ -17,7 +17,6 @@
17
17
  "@tensorflow/tfjs": "^3.9.0",
18
18
  "bootstrap": "^5.1.3",
19
19
  "core-js": "^3.22.7",
20
- "html2canvas": "^1.4.1",
21
20
  "react-bootstrap": "^2.0.4",
22
21
  "react-webcam": "^6.0.0"
23
22
  },