@newtonschool/react_proctoring_library 0.0.65 → 0.0.67-staging

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.
Files changed (38) hide show
  1. package/dist/components/breach-parameters/index.js +24 -0
  2. package/dist/components/fullscreen/index.js +31 -0
  3. package/dist/components/index.js +1 -1
  4. package/dist/components/permissions/index.js +2 -2
  5. package/dist/components/permissions/permission-body.js +2 -2
  6. package/dist/components/proctor-app/Loadable.js +2 -2
  7. package/dist/components/proctor-app/index.js +56 -94
  8. package/dist/components/proctor-context-app/Loadable.js +2 -2
  9. package/dist/components/proctor-context-app/index.js +43 -32
  10. package/dist/components/screenshare-activity-tracker/electron.js +104 -0
  11. package/dist/components/screenshare-activity-tracker/index.js +31 -16
  12. package/dist/components/screenshare-activity-tracker/web.js +94 -0
  13. package/dist/components/webcam-activity-tracker/electron.js +110 -0
  14. package/dist/components/webcam-activity-tracker/index.js +32 -50
  15. package/dist/components/webcam-activity-tracker/web.js +126 -0
  16. package/dist/contexts/ElectronContext.js +9 -0
  17. package/dist/hooks/electron/useFullScreenData.js +40 -0
  18. package/dist/hooks/electron/useIsElectron.js +31 -0
  19. package/dist/hooks/electron/useIsPageFocussed.js +25 -0
  20. package/dist/hooks/electron/usePageVisibility.js +37 -0
  21. package/dist/hooks/electron/useWakeUpLock.js +33 -0
  22. package/dist/hooks/useBreachData.js +39 -0
  23. package/dist/hooks/useGenericFullScreenData.js +29 -0
  24. package/dist/hooks/useGenericPageFocus.js +17 -0
  25. package/dist/hooks/useGenericPageVisibility.js +17 -0
  26. package/dist/hooks/useGenericWakeUpLock.js +29 -0
  27. package/dist/hooks/useTrackBreachParameters.js +63 -0
  28. package/dist/hooks/{index.js → web/index.js} +1 -1
  29. package/dist/hooks/{useFullScreenData.js → web/useFullScreenData.js} +12 -10
  30. package/dist/hooks/{useIsPageFocussed.js → web/useIsPageFocussed.js} +1 -1
  31. package/dist/hooks/{usePageVisibility.js → web/usePageVisibility.js} +1 -1
  32. package/dist/hooks/{useWakeUpLock.js → web/useWakeUpLock.js} +2 -2
  33. package/dist/utils/breachUtils.js +2 -2
  34. package/dist/utils/browserUtils.js +22 -22
  35. package/dist/utils/fullScreen.js +31 -0
  36. package/dist/utils/loadable.js +1 -1
  37. package/dist/utils/webcamMicrophoneUtils.js +27 -4
  38. package/package.json +3 -1
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = BreachParameters;
7
+ var _useTrackBreachParameters = require("../../hooks/useTrackBreachParameters");
8
+ function BreachParameters(_ref) {
9
+ let {
10
+ config,
11
+ getProctorParamValues,
12
+ proctoringIdentifier,
13
+ permissions,
14
+ proctorParams
15
+ } = _ref;
16
+ (0, _useTrackBreachParameters.useTrackBreachParameters)({
17
+ config,
18
+ getProctorParamValues,
19
+ proctoringIdentifier,
20
+ permissions,
21
+ proctorParams
22
+ });
23
+ return null;
24
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = FullScreen;
7
+ require("core-js/modules/es.symbol.description.js");
8
+ var _react = require("react");
9
+ var _useGenericFullScreenData = _interopRequireDefault(require("../../hooks/useGenericFullScreenData"));
10
+ var _ElectronContext = require("../../contexts/ElectronContext");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
16
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
17
+ function FullScreen(_ref) {
18
+ let {
19
+ setAskPermissionAction
20
+ } = _ref;
21
+ const isElectronApp = (0, _react.useContext)(_ElectronContext.ElectronContext);
22
+ const {
23
+ setFullscreen
24
+ } = (0, _useGenericFullScreenData.default)(isElectronApp);
25
+ (0, _react.useEffect)(() => {
26
+ setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
27
+ fullscreen: () => setFullscreen(true)
28
+ }));
29
+ }, [setAskPermissionAction, setFullscreen]);
30
+ return null;
31
+ }
@@ -24,4 +24,4 @@ Object.defineProperty(exports, "ProctoredContextApp", {
24
24
  var _permissions = require("./permissions");
25
25
  var _proctorApp = _interopRequireDefault(require("./proctor-app"));
26
26
  var _proctorContextApp = _interopRequireDefault(require("./proctor-context-app"));
27
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -14,8 +14,8 @@ var _permissionBody = require("./permission-body");
14
14
  var _breachUtils = require("../../utils/breachUtils");
15
15
  var _permission = require("../../utils/permission");
16
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
19
  const Permission = _ref => {
20
20
  let {
21
21
  proctorParams,
@@ -12,8 +12,8 @@ require("./index.scss");
12
12
  var text = _interopRequireWildcard(require("../../constants/text"));
13
13
  var _browserUtils = require("../../utils/browserUtils");
14
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
17
  const PermissionBody = _ref => {
18
18
  let {
19
19
  showFullscreenText,
@@ -9,9 +9,9 @@ require("core-js/modules/es.weak-map.js");
9
9
  require("core-js/modules/web.dom-collections.iterator.js");
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
  var _loadable = _interopRequireDefault(require("../../utils/loadable"));
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /**
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /**
15
15
  * Asynchronously loads the component for FeaturePage
16
16
  */
17
17
  var _default = exports.default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
@@ -1,38 +1,34 @@
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
- require("core-js/modules/web.dom-collections.iterator.js");
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.default = exports.ProctorApp = void 0;
10
- require("core-js/modules/es.promise.js");
11
- require("core-js/modules/es.symbol.description.js");
10
+ require("core-js/modules/web.dom-collections.iterator.js");
12
11
  var _react = _interopRequireWildcard(require("react"));
13
- var _useWakeUpLock = require("../../hooks/useWakeUpLock");
14
12
  require("./index.scss");
15
- var _utils = require("../../utils");
16
- var _hooks = require("../../hooks");
17
13
  var _permissions = require("../permissions");
18
14
  var _breachUtils = require("../../utils/breachUtils");
19
- var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
20
15
  var _defaults = require("../../constants/defaults");
21
- var _webcamActivityTracker = _interopRequireDefault(require("../webcam-activity-tracker"));
22
16
  var _browserUtils = require("../../utils/browserUtils");
23
- var _screenshareActivityTracker = require("../screenshare-activity-tracker");
24
- var _dom = require("../../constants/dom");
25
- var _useIsPageFocussed = _interopRequireDefault(require("../../hooks/useIsPageFocussed"));
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ var _screenshareActivityTracker = _interopRequireDefault(require("../screenshare-activity-tracker"));
18
+ var _webcamActivityTracker = _interopRequireDefault(require("../webcam-activity-tracker"));
19
+ var _fullscreen = _interopRequireDefault(require("../fullscreen"));
20
+ var _ElectronContext = require("../../contexts/ElectronContext");
21
+ var _useGenericWakeUpLock = _interopRequireDefault(require("../../hooks/useGenericWakeUpLock"));
22
+ var _breachParameters = _interopRequireDefault(require("../breach-parameters"));
23
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
28
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
29
- 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); }
25
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
30
27
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
31
28
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
32
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
29
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
30
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
34
31
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
35
- const isWebcamProcessingReliable = (0, _utils.isGPUAvailable)();
36
32
  const ProctorApp = _ref => {
37
33
  let {
38
34
  proctoringIdentifier,
@@ -48,106 +44,72 @@ const ProctorApp = _ref => {
48
44
  } = _ref;
49
45
  const context = (0, _react.useContext)(proctoredContext);
50
46
  const {
51
- actions,
52
47
  permissions,
53
48
  references,
54
- permissionSetter,
55
- screenshareStream
49
+ permissionErrors
56
50
  } = context;
57
51
  const {
58
52
  acquireWakeUpLock,
59
53
  releaseWakeUpLock
60
- } = (0, _useWakeUpLock.useWakeUpLock)();
54
+ } = (0, _useGenericWakeUpLock.default)();
55
+ const [askPermissionAction, setAskPermissionAction] = (0, _react.useState)({
56
+ screenshare: () => {},
57
+ fullscreen: () => {},
58
+ video: () => {}
59
+ });
61
60
  (0, _react.useEffect)(() => {
62
61
  acquireWakeUpLock();
63
62
  return releaseWakeUpLock;
64
63
  }, []);
64
+ const isElectronApp = (0, _react.useContext)(_ElectronContext.ElectronContext);
65
65
  const CustomPermissionView = customPermissionView;
66
66
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
67
- const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
68
- const {
69
- recurring = false,
70
- recurringFetchInterval = 0
71
- } = config;
72
- const recurringFetchIntervalRef = (0, _react.useRef)(null);
73
- const sendScreengrab = (0, _react.useCallback)(async function () {
74
- let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
75
- let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
76
- if (proctorParams.screenshareSnapshots && permissions.screenshare) {
77
- const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.SCREENSHARE_REFERENCE_ID));
78
- getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
79
- }
80
- }, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
81
- const sendWebcamSnapshot = (0, _react.useCallback)(async function () {
82
- let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
83
- let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
84
- if (proctorParams.webcamSnapshots && permissions.video) {
85
- const webcamSnapshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.WEBCAM_REFERENCE_ID));
86
- getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
87
- }
88
- }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video]);
89
- const sendProctoredParamValues = (0, _react.useCallback)(function () {
90
- let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
91
- let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
92
- getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
93
- }, [proctoringIdentifier, getProctorParamValues]);
94
- const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch);
95
- const isPageFocussed = (0, _useIsPageFocussed.default)(proctorParams.pageFocus);
96
- (0, _react.useEffect)(() => {
97
- let timeoutId = null;
98
- if (recurring) {
99
- const randomStartDelay = 1000 * (Math.floor(Math.random() * 10) + 1);
100
- timeoutId = setTimeout(() => {
101
- recurringFetchIntervalRef.current = setInterval(() => {
102
- sendProctoredParamValues();
103
- sendWebcamSnapshot();
104
- sendScreengrab();
105
- }, recurringFetchInterval);
106
- }, randomStartDelay);
107
- }
108
- return () => {
109
- clearInterval(recurringFetchIntervalRef.current);
110
- clearTimeout(timeoutId);
111
- };
112
- }, [recurring, recurringFetchInterval, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab]);
113
- (0, _react.useEffect)(() => {
114
- const currentStats = {
115
- isTabSwitched,
116
- isFullScreen: permissions.fullscreen,
117
- isWebcamDataNotReliable: !isWebcamProcessingReliable,
118
- isPageFocussed
119
- };
120
- const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
121
- (0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
122
- if (breachData) {
123
- sendProctoredParamValues(true, breachData.breachedParam);
124
- sendWebcamSnapshot(true, breachData.breachedParam);
125
- sendScreengrab(true, breachData.breachedParam);
126
- }
127
- }, [isTabSwitched, isPageFocussed, permissions.fullscreen, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
128
67
  const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, permissions);
68
+ const askPermission = (0, _react.useCallback)(requiredPermissions => {
69
+ requiredPermissions.forEach(element => {
70
+ if (!permissions[element] && askPermissionAction[element]) {
71
+ askPermissionAction[element]();
72
+ }
73
+ });
74
+ }, [permissions, askPermissionAction]);
129
75
  return /*#__PURE__*/_react.default.createElement("div", {
130
76
  className: "".concat(proctorParams.copyPasteProctoring ? 'disable-copy-paste fullwidth fullheight' : 'fullwidth fullheight')
131
77
  }, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
132
78
  permissions: permissions,
133
79
  proctorParams: proctorParams,
134
80
  references: references,
135
- actions: actions,
136
- browserDetails: (0, _browserUtils.getBrowserDetails)()
81
+ actions: {
82
+ askPermission
83
+ },
84
+ browserDetails: (0, _browserUtils.getBrowserDetails)(),
85
+ permissionErrors: permissionErrors
137
86
  }, permissionPassedProps)), !shouldShowProctoredComponent && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
138
- proctorParams: proctorParams,
139
87
  permissions: permissions,
140
- askPermission: actions.askPermission
88
+ proctorParams: proctorParams,
89
+ askPermission: askPermission
141
90
  }), proctorParams.webcamSnapshots && /*#__PURE__*/_react.default.createElement(_webcamActivityTracker.default, {
91
+ logger: logger,
92
+ config: config,
93
+ proctorParams: proctorParams,
94
+ proctoredContext: proctoredContext,
95
+ getWebcamSnapshot: getWebcamSnapshot,
96
+ proctoringIdentifier: proctoringIdentifier,
97
+ setAskPermissionAction: setAskPermissionAction
98
+ }), proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.default, {
99
+ config: config,
100
+ getScreengrab: getScreengrab,
101
+ proctorParams: proctorParams,
102
+ proctoredContext: proctoredContext,
103
+ proctoringIdentifier: proctoringIdentifier,
104
+ setAskPermissionAction: setAskPermissionAction
105
+ }), proctorParams.fullscreenExit && /*#__PURE__*/_react.default.createElement(_fullscreen.default, {
106
+ setAskPermissionAction: setAskPermissionAction
107
+ }), /*#__PURE__*/_react.default.createElement(_breachParameters.default, {
108
+ config: config,
109
+ getProctorParamValues: getProctorParamValues,
110
+ permissions: permissions,
142
111
  proctorParams: proctorParams,
143
- setAudioPermission: permissionSetter.audio,
144
- setVideoPermission: permissionSetter.video,
145
- webcamReference: references.webcamReference,
146
- canvasReference: references.canvasReference,
147
- logger: logger
148
- }), proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
149
- screenshareStream: screenshareStream,
150
- ref: references.screenshareReference
112
+ proctoringIdentifier: proctoringIdentifier
151
113
  }));
152
114
  };
153
115
  exports.ProctorApp = ProctorApp;
@@ -9,9 +9,9 @@ require("core-js/modules/es.weak-map.js");
9
9
  require("core-js/modules/web.dom-collections.iterator.js");
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
  var _loadable = _interopRequireDefault(require("../../utils/loadable"));
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /**
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /**
15
15
  * Asynchronously loads the component for FeaturePage
16
16
  */
17
17
  var _default = exports.default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
@@ -8,15 +8,17 @@ exports.default = void 0;
8
8
  require("core-js/modules/web.dom-collections.iterator.js");
9
9
  require("core-js/modules/es.symbol.description.js");
10
10
  var _react = _interopRequireWildcard(require("react"));
11
- var _hooks = require("../../hooks");
12
- var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
13
11
  var _defaults = require("../../constants/defaults");
12
+ var _useIsElectron = _interopRequireDefault(require("../../hooks/electron/useIsElectron"));
13
+ var _ElectronContext = require("../../contexts/ElectronContext");
14
+ var _useGenericFullScreenData = _interopRequireDefault(require("../../hooks/useGenericFullScreenData"));
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
18
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
17
19
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
20
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
20
22
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
21
23
  const ProctoredContextApp = _ref => {
22
24
  let {
@@ -28,17 +30,25 @@ const ProctoredContextApp = _ref => {
28
30
  customContext = {}
29
31
  } = _ref;
30
32
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
31
- const {
32
- isFullscreen,
33
- setFullscreen
34
- } = (0, _hooks.useFullscreenData)(proctorParams.fullscreenExit);
33
+ const [, isElectronApp] = (0, _useIsElectron.default)();
34
+ const [webCamDeviceId, setWebCamDeviceId] = (0, _react.useState)();
35
+ const [screenShareDeviceId, setScreenShareDeviceId] = (0, _react.useState)();
35
36
  const [audioPermisison, setAudioPermission] = (0, _react.useState)();
36
37
  const [videoPermission, setVideoPermission] = (0, _react.useState)();
38
+ const [permissionErrors, setPermissionErrors] = (0, _react.useState)({
39
+ audio: null,
40
+ video: null,
41
+ fullscreen: null,
42
+ screenshare: null
43
+ });
37
44
  const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
38
45
  const webcamReference = (0, _react.useRef)(null);
39
- const canvasReference = (0, _react.useRef)(null);
40
46
  const screenshareReference = (0, _react.useRef)(null);
41
47
  const [screenshareStream, setScreenshareStream] = (0, _react.useState)(null);
48
+ const data = (0, _useGenericFullScreenData.default)(isElectronApp);
49
+ const {
50
+ isFullscreen
51
+ } = data;
42
52
  const Context = contextProvider;
43
53
  const permissions = (0, _react.useMemo)(() => ({
44
54
  video: videoPermission,
@@ -46,24 +56,16 @@ const ProctoredContextApp = _ref => {
46
56
  fullscreen: isFullscreen,
47
57
  screenshare: screensharePermission
48
58
  }), [videoPermission, audioPermisison, isFullscreen, screensharePermission]);
49
- const askPermissionAction = (0, _react.useMemo)(() => ({
50
- screenshare: () => {
51
- (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference, setScreenshareStream);
52
- },
53
- fullscreen: () => {
54
- setFullscreen();
55
- },
56
- video: () => {
57
- window.location.reload();
59
+ const endTest = () => {
60
+ if (isElectronApp) {
61
+ window.electron.actions.stopProctoring();
58
62
  }
59
- }), [screenshareReference, setFullscreen]);
60
- const askPermission = (0, _react.useCallback)(requiredPermissions => {
61
- requiredPermissions.forEach(element => {
62
- if (!permissions[element] && askPermissionAction[element]) {
63
- askPermissionAction[element]();
64
- }
65
- });
66
- }, [permissions, askPermissionAction]);
63
+ };
64
+
65
+ // useEffect(()=>{
66
+ // endTest
67
+ // })
68
+
67
69
  return /*#__PURE__*/_react.default.createElement(Context.Provider, {
68
70
  value: _objectSpread(_objectSpread({}, customContext), {}, {
69
71
  permissions,
@@ -72,17 +74,26 @@ const ProctoredContextApp = _ref => {
72
74
  video: setVideoPermission,
73
75
  screenshare: setScreensharePermission
74
76
  },
75
- proctorParams,
76
- actions: {
77
- askPermission
77
+ streamSetter: {
78
+ screenshare: setScreenshareStream
78
79
  },
80
+ device: {
81
+ webCamDeviceId,
82
+ screenShareDeviceId,
83
+ setWebCamDeviceId,
84
+ setScreenShareDeviceId
85
+ },
86
+ permissionErrors,
87
+ setPermissionErrors,
88
+ proctorParams,
79
89
  references: {
80
90
  webcamReference,
81
- canvasReference,
82
91
  screenshareReference
83
92
  },
84
93
  screenshareStream
85
94
  })
86
- }, children);
95
+ }, /*#__PURE__*/_react.default.createElement(_ElectronContext.ElectronContextProvider, {
96
+ value: isElectronApp
97
+ }, children));
87
98
  };
88
99
  var _default = exports.default = ProctoredContextApp;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ElectronScreenShare;
7
+ require("core-js/modules/es.promise.js");
8
+ require("core-js/modules/es.symbol.description.js");
9
+ var _react = require("react");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ function ElectronScreenShare(_ref) {
16
+ let {
17
+ setAskPermissionAction,
18
+ proctoredContext,
19
+ config,
20
+ proctorParams
21
+ } = _ref;
22
+ const {
23
+ permissionSetter,
24
+ setPermissionErrors,
25
+ device
26
+ } = (0, _react.useContext)(proctoredContext);
27
+ const setScreensharePermission = permissionSetter.screenshare;
28
+ const streamDeviceId = device === null || device === void 0 ? void 0 : device.screenShareDeviceId;
29
+ (0, _react.useEffect)(() => {
30
+ setAskPermissionAction(oldAskPermissionAction => _objectSpread(_objectSpread({}, oldAskPermissionAction), {}, {
31
+ screenshare: async () => {
32
+ device.setScreenShareDeviceId(false);
33
+ setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
34
+ screenshare: null
35
+ }));
36
+ try {
37
+ await window.electron.permissions.requestScreenCapturePermission();
38
+ const streams = await window.electron.streams.getScreenStream();
39
+ const startedScreenShareRecording = await window.electron.actions.startScreenShareRecording(streams[0].id);
40
+ if (!startedScreenShareRecording) {
41
+ throw new Error('Error starting screen share recording');
42
+ }
43
+ device.setScreenShareDeviceId(streams[0].id);
44
+ } catch (error) {
45
+ console.error(error);
46
+ setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
47
+ screenshare: (error === null || error === void 0 ? void 0 : error.message) || 'Failed to start screen share'
48
+ }));
49
+ }
50
+ }
51
+ }));
52
+ }, []);
53
+ const startScreenShareSnapshot = async newStreamId => {
54
+ try {
55
+ setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
56
+ screenshare: null
57
+ }));
58
+ const snapshotIntervalID = await window.electron.actions.startScreenShareSnapshot({
59
+ streamId: newStreamId,
60
+ interval: config.recurringFetchInterval,
61
+ fileUploadConfig: config.fileUploadConfig
62
+ });
63
+ if (!snapshotIntervalID) {
64
+ throw Error('Error starting screen share snapshot');
65
+ }
66
+ return snapshotIntervalID;
67
+ } catch (error) {
68
+ console.error(error);
69
+ setPermissionErrors(oldErrors => _objectSpread(_objectSpread({}, oldErrors || {}), {}, {
70
+ screenshare: (error === null || error === void 0 ? void 0 : error.message) || 'Failed to start screen share'
71
+ }));
72
+ }
73
+ };
74
+ const endScreenShareSnapshot = async newStreamId => {
75
+ await window.electron.actions.stopScreenShareSnapshot({
76
+ streamId: newStreamId
77
+ });
78
+ };
79
+ (0, _react.useEffect)(() => {
80
+ var _config$fileUploadCon;
81
+ if (streamDeviceId && config !== null && config !== void 0 && (_config$fileUploadCon = config.fileUploadConfig) !== null && _config$fileUploadCon !== void 0 && _config$fileUploadCon.screenShare && config !== null && config !== void 0 && config.recurring) {
82
+ const snapshotIntervalID = startScreenShareSnapshot(streamDeviceId);
83
+ return () => {
84
+ console.log(snapshotIntervalID, 'snapshotIntervalID');
85
+ endScreenShareSnapshot(snapshotIntervalID);
86
+ };
87
+ }
88
+ }, [streamDeviceId, config]);
89
+ (0, _react.useEffect)(() => {
90
+ if (streamDeviceId) {
91
+ const permissionSetter = permission => {
92
+ setScreensharePermission(permission);
93
+ };
94
+ window.electron.states.isScreenShareRecordingStarted(streamDeviceId).then(recordingStarted => {
95
+ permissionSetter(recordingStarted);
96
+ });
97
+ const id = window.electron.listener.screenShareRecordingStatusChanged(streamDeviceId, permissionSetter);
98
+ return () => {
99
+ window.electron.listener.removeListener(id, permissionSetter);
100
+ };
101
+ }
102
+ }, [streamDeviceId]);
103
+ return null;
104
+ }
@@ -5,24 +5,39 @@ require("core-js/modules/web.dom-collections.iterator.js");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.ScreenshareActivityTracker = void 0;
8
+ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _dom = require("../../constants/dom");
11
- var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
10
+ var _ElectronContext = require("../../contexts/ElectronContext");
11
+ var _electron = _interopRequireDefault(require("./electron"));
12
+ var _web = _interopRequireDefault(require("./web"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
- const ScreenshareActivityTracker = exports.ScreenshareActivityTracker = /*#__PURE__*/(0, _react.forwardRef)((_ref, screenshareReference) => {
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ const ScreenShare = _ref => {
15
17
  let {
16
- screenshareStream
18
+ proctoredContext,
19
+ setAskPermissionAction,
20
+ proctorParams,
21
+ proctoringIdentifier,
22
+ getScreengrab,
23
+ config
17
24
  } = _ref;
18
- (0, _react.useEffect)(() => {
19
- if (screenshareStream) {
20
- (0, _webcamMicrophoneUtils.collectScreenshare)(screenshareReference, screenshareStream);
21
- }
22
- }, []);
23
- return /*#__PURE__*/_react.default.createElement("video", {
24
- ref: screenshareReference,
25
- className: "captured-video-canvas hide",
26
- id: _dom.SCREENSHARE_REFERENCE_ID
25
+ const isElectronApp = (0, _react.useContext)(_ElectronContext.ElectronContext);
26
+ if (isElectronApp) {
27
+ return /*#__PURE__*/_react.default.createElement(_electron.default, {
28
+ setAskPermissionAction: setAskPermissionAction,
29
+ proctorParams: proctorParams,
30
+ proctoredContext: proctoredContext,
31
+ config: config
32
+ });
33
+ }
34
+ return /*#__PURE__*/_react.default.createElement(_web.default, {
35
+ proctoredContext: proctoredContext,
36
+ setAskPermissionAction: setAskPermissionAction,
37
+ getScreengrab: getScreengrab,
38
+ proctorParams: proctorParams,
39
+ proctoringIdentifier: proctoringIdentifier,
40
+ config: config
27
41
  });
28
- });
42
+ };
43
+ var _default = exports.default = ScreenShare;