@newtonschool/react_proctoring_library 0.0.32 → 0.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/web.dom-collections.iterator.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _reactWebcam = _interopRequireDefault(require("react-webcam"));
13
+
14
+ var _utils = require("../../utils");
15
+
16
+ var _breachUtils = require("../../utils/breachUtils");
17
+
18
+ var _browserUtils = require("../../utils/browserUtils");
19
+
20
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
21
+
22
+ require("./index.scss");
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ 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; }
29
+
30
+ const ActivityTracker = _ref => {
31
+ let {
32
+ proctorParams,
33
+ webcamReference,
34
+ canvasReference,
35
+ screenshareReference,
36
+ setAudioPermission,
37
+ setVideoPermission
38
+ } = _ref;
39
+ const screenshareVideoReference = (0, _react.useRef)(null);
40
+ (0, _react.useEffect)(() => {
41
+ if (screenshareReference.current) {
42
+ screenshareVideoReference.current.srcObject = screenshareReference.current;
43
+
44
+ screenshareVideoReference.current.onloadedmetadata = e => {
45
+ screenshareVideoReference.current.play();
46
+ };
47
+ }
48
+
49
+ return () => {
50
+ screenshareVideoReference.current.srcObject = null;
51
+ };
52
+ }, [screenshareReference.current]);
53
+ (0, _react.useEffect)(() => {
54
+ if ((0, _browserUtils.isChrome)()) {
55
+ if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
56
+ (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
57
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
58
+ (0, _webcamMicrophoneUtils.getVideoPermissionQuery)().then(status => {
59
+ status.onchange = evt => {
60
+ (0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
61
+ };
62
+ }).catch(err => {});
63
+ (0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
64
+ status.onchange = evt => {
65
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
66
+ };
67
+ }).catch(err => {
68
+ (0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
69
+ });
70
+ }
71
+ }
72
+ }, [setVideoPermission, setAudioPermission, proctorParams]);
73
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.isWebcamRequired)(proctorParams) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactWebcam.default, {
74
+ audio: true,
75
+ muted: true,
76
+ screenshotFormat: "image/jpeg",
77
+ ref: webcamReference,
78
+ onUserMedia: stream => {
79
+ if (!(0, _browserUtils.isChrome)()) {
80
+ const {
81
+ audio,
82
+ video
83
+ } = (0, _utils.getAudioVideoPermission)(stream);
84
+ setAudioPermission(audio);
85
+ setVideoPermission(video);
86
+
87
+ stream.onaddtrack = p => {
88
+ const {
89
+ audio,
90
+ video
91
+ } = (0, _utils.getAudioVideoPermission)(stream);
92
+ setAudioPermission(audio);
93
+ setVideoPermission(video);
94
+ };
95
+
96
+ stream.onremovetrack = p => {
97
+ const {
98
+ audio,
99
+ video
100
+ } = (0, _utils.getAudioVideoPermission)(stream);
101
+ setAudioPermission(audio);
102
+ setVideoPermission(video);
103
+ };
104
+
105
+ stream.onactive = p => {
106
+ const {
107
+ audio,
108
+ video
109
+ } = (0, _utils.getAudioVideoPermission)(stream);
110
+ setAudioPermission(audio);
111
+ setVideoPermission(video);
112
+ };
113
+
114
+ stream.oninactive = e => {
115
+ setAudioPermission(false);
116
+ setVideoPermission(false);
117
+ };
118
+
119
+ const audioTracks = stream.getAudioTracks().filter(track => track.enabled && track.label);
120
+ audioTracks.forEach(track => {
121
+ track.onended = e => {
122
+ const audio = (0, _utils.getAudioPermission)(stream);
123
+ setAudioPermission(audio, e.currentTarget.id);
124
+ };
125
+
126
+ track.onmute = e => {
127
+ const audio = (0, _utils.getAudioPermission)(stream);
128
+ setAudioPermission(audio, e.currentTarget.id);
129
+ };
130
+
131
+ track.onunmute = e => {
132
+ const audio = (0, _utils.getAudioPermission)(stream);
133
+ setAudioPermission(audio);
134
+ };
135
+ });
136
+ const videoTracks = stream.getVideoTracks().filter(track => track.enabled && track.label);
137
+ videoTracks.forEach(track => {
138
+ track.onended = e => {
139
+ const video = (0, _utils.getVideoPermission)(stream, e.currentTarget.id);
140
+ setVideoPermission(video);
141
+ };
142
+ });
143
+ }
144
+ },
145
+ onUserMediaError: error => {
146
+ if (!(0, _browserUtils.isChrome)()) {
147
+ setVideoPermission(false);
148
+ setAudioPermission(false);
149
+ }
150
+ },
151
+ className: "hide"
152
+ }), /*#__PURE__*/_react.default.createElement("canvas", {
153
+ ref: canvasReference,
154
+ className: "captured-video-canvas hide",
155
+ id: "wc-ref"
156
+ })), /*#__PURE__*/_react.default.createElement("video", {
157
+ ref: screenshareVideoReference,
158
+ className: "captured-video-canvas hide",
159
+ id: "ss-ref"
160
+ }));
161
+ };
162
+
163
+ var _default = ActivityTracker;
164
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ .captured-video-canvas {
2
+ position: absolute;
3
+ bottom: 0px;
4
+ }
5
+ .hide {
6
+ visibility: hidden;
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ActivityTracker", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _activityTracker.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "FullScreenPermission", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _permissions.FullScreenPermission;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "ProctorApp", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _Loadable.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "ProctoredContextApp", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _Loadable2.default;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "ScreenshareTracker", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _screenshare.ScreenshareTracker;
34
+ }
35
+ });
36
+
37
+ var _activityTracker = _interopRequireDefault(require("./activity-tracker"));
38
+
39
+ var _permissions = require("./permissions");
40
+
41
+ var _screenshare = require("./screenshare");
42
+
43
+ var _Loadable = _interopRequireDefault(require("./proctor-app/Loadable"));
44
+
45
+ var _Loadable2 = _interopRequireDefault(require("./proctor-context-app/Loadable"));
46
+
47
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/web.dom-collections.iterator.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Permission = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _reactBootstrap = require("react-bootstrap");
13
+
14
+ var _askPermission = _interopRequireDefault(require("../../assets/videos/ask-permission.mp4"));
15
+
16
+ require("./index.scss");
17
+
18
+ var text = _interopRequireWildcard(require("../../constants/text"));
19
+
20
+ var _permissionBody = require("./permission-body");
21
+
22
+ var _breachUtils = require("../../utils/breachUtils");
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ 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; }
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const Permission = _ref => {
31
+ let {
32
+ proctorParams,
33
+ permissions,
34
+ askPermission,
35
+ hasAllPermission
36
+ } = _ref;
37
+ const showPermissionModal = !hasAllPermission((0, _breachUtils.getRequiredPermissionsFromProctorParams)(proctorParams));
38
+ return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
39
+ show: showPermissionModal,
40
+ size: "lg",
41
+ backdrop: "static",
42
+ "aria-labelledby": "contained-modal-title-vcenter",
43
+ centered: true
44
+ }, /*#__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, {
45
+ className: "font-medium"
46
+ }, /*#__PURE__*/_react.default.createElement("div", {
47
+ style: {
48
+ borderRadius: "20px"
49
+ }
50
+ }, /*#__PURE__*/_react.default.createElement("video", {
51
+ className: "videoStyles",
52
+ width: "100%",
53
+ height: "240",
54
+ autoPlay: true,
55
+ muted: true,
56
+ loop: true,
57
+ playsInline: true
58
+ }, /*#__PURE__*/_react.default.createElement("source", {
59
+ src: _askPermission.default
60
+ }), text.VIDEO_UNSUPPORTED_IN_BROWSER)), /*#__PURE__*/_react.default.createElement(_permissionBody.PermissionBody, {
61
+ showFullscreenText: !permissions.fullscreen,
62
+ showAudioPermissionText: !permissions.audio && (0, _breachUtils.isWebcamRequired)(proctorParams),
63
+ showVideoPermissionText: !permissions.video && (0, _breachUtils.isWebcamRequired)(proctorParams),
64
+ showScreensharePermission: !permissions.screenshare && proctorParams.screenshareSnapshots
65
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !permissions.screenshare && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
66
+ onClick: () => {
67
+ askPermission(['screenshare']);
68
+ }
69
+ }, text.ALLOW_SCREENSHARE), !permissions.fullscreen && proctorParams.fullscreenExit && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
70
+ variant: "primary",
71
+ onClick: () => {
72
+ askPermission(['fullscreen']);
73
+ }
74
+ }, text.ALLOW_FULLSCREEN)));
75
+ };
76
+
77
+ exports.Permission = Permission;
@@ -0,0 +1,6 @@
1
+ .modal-dialog {
2
+ width: 400px;
3
+ }
4
+ .video-permission-img {
5
+ width: 200px;
6
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/web.dom-collections.iterator.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PermissionBody = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _urlVideoPermissionHighlight = _interopRequireDefault(require("../../assets/images/url-video-permission-highlight.png"));
13
+
14
+ require("./index.scss");
15
+
16
+ var text = _interopRequireWildcard(require("../../constants/text"));
17
+
18
+ var _browserUtils = require("../../utils/browserUtils");
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
26
+ const PermissionBody = _ref => {
27
+ let {
28
+ showFullscreenText,
29
+ showAudioPermissionText,
30
+ showVideoPermissionText,
31
+ showScreensharePermission
32
+ } = _ref;
33
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
34
+ className: "mb-2"
35
+ }, text.PERMISSION_GENERIC), showScreensharePermission && /*#__PURE__*/_react.default.createElement("div", {
36
+ className: "mb-2"
37
+ }, !(0, _browserUtils.isChrome)() && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("strong", null, "Please switch to chrome"), /*#__PURE__*/_react.default.createElement("br", null)), /*#__PURE__*/_react.default.createElement("span", {
38
+ className: "pr-2 font-weight-bold"
39
+ }, "Screenshare:"), text.PERMISSION_SCREENSHARE), showAudioPermissionText && showVideoPermissionText ? /*#__PURE__*/_react.default.createElement("div", {
40
+ className: "mb-2"
41
+ }, /*#__PURE__*/_react.default.createElement("span", {
42
+ className: "pr-2 font-weight-bold"
43
+ }, "Camera/Microphone:"), text.PERMISSION_AUDIO_VIDEO) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showVideoPermissionText && /*#__PURE__*/_react.default.createElement("div", {
44
+ className: "mb-2"
45
+ }, /*#__PURE__*/_react.default.createElement("span", {
46
+ className: "pr-2 font-weight-bold"
47
+ }, "Camera:"), text.PERMISSION_VIDEO), showAudioPermissionText && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("span", {
48
+ className: "pr-2 font-weight-bold"
49
+ }, "Microphone:"), text.PERMISSION_AUDIO)), (showAudioPermissionText || showVideoPermissionText) && /*#__PURE__*/_react.default.createElement("div", {
50
+ className: "d-flex justify-content-center"
51
+ }, /*#__PURE__*/_react.default.createElement("img", {
52
+ className: "video-permission-img",
53
+ alt: "url_video_permission_highlight",
54
+ src: _urlVideoPermissionHighlight.default
55
+ })), showFullscreenText && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("span", {
56
+ className: "pr-2 font-weight-bold"
57
+ }, "Fullscreen:"), text.PERMISSION_FULLSCREEN));
58
+ };
59
+
60
+ exports.PermissionBody = PermissionBody;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _loadable = _interopRequireDefault(require("../../utils/loadable"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
23
+ fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
24
+ });
25
+
26
+ exports.default = _default;
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.assign.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.ProctorApp = void 0;
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ require("core-js/modules/es.promise.js");
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ require("./index.scss");
17
+
18
+ var _utils = require("../../utils");
19
+
20
+ var _hooks = require("../../hooks");
21
+
22
+ var _permissions = require("../permissions");
23
+
24
+ var _useWebcamData = _interopRequireDefault(require("../../hooks/useWebcamData"));
25
+
26
+ var _breachUtils = require("../../utils/breachUtils");
27
+
28
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
29
+
30
+ var _defaults = require("../../constants/defaults");
31
+
32
+ var _activityTracker = _interopRequireDefault(require("../activity-tracker"));
33
+
34
+ var _browserUtils = require("../../utils/browserUtils");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
38
+ 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); }
39
+
40
+ 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; }
41
+
42
+ 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); }
43
+
44
+ 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; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
48
+ 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; }
49
+
50
+ const isWebcamProcessingReliable = (0, _utils.isGPUAvailable)();
51
+
52
+ const ProctorApp = _ref => {
53
+ let {
54
+ proctoringIdentifier,
55
+ customPermissionView = null,
56
+ shouldRenderChildren = false,
57
+ permissionPassedProps = {},
58
+ children,
59
+ proctoredContext,
60
+ config,
61
+ getProctorParamValues = () => {},
62
+ getWebcamSnapshot = () => {},
63
+ getScreengrab = () => {}
64
+ } = _ref;
65
+ const [renderChildren, setRenderChildren] = (0, _react.useState)();
66
+ const context = (0, _react.useContext)(proctoredContext);
67
+ const {
68
+ actions,
69
+ permissions,
70
+ references,
71
+ permissionSetter,
72
+ customProps,
73
+ customSetter
74
+ } = context;
75
+ (0, _react.useEffect)(() => {
76
+ if (customProps.childrenRenderer === undefined) {
77
+ setRenderChildren(!shouldRenderChildren);
78
+ } else {
79
+ setRenderChildren(customProps.childrenRenderer);
80
+ }
81
+ }, [customProps]);
82
+ const CustomPermissionView = customPermissionView;
83
+ const browserDetails = {
84
+ isChrome: (0, _browserUtils.isChrome)()
85
+ };
86
+ const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
87
+ const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
88
+ const {
89
+ recurring = false,
90
+ recurringFetchInterval = 0
91
+ } = config;
92
+ const recurringFetchIntervalRef = (0, _react.useRef)(null);
93
+ const sendScreengrab = (0, _react.useCallback)(async function () {
94
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
95
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
96
+
97
+ if (proctorParams.screenshareSnapshots && permissions.screenshare) {
98
+ const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)();
99
+ getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
100
+ }
101
+ }, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
102
+ const sendWebcamSnapshot = (0, _react.useCallback)(function () {
103
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
104
+ let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
105
+
106
+ if (proctorParams.webcamSnapshots && permissions.video) {
107
+ const webcamSnapshot = (0, _utils.captureWebcamSnapshot)(references.webcamReference);
108
+
109
+ if (references.webcamReference) {
110
+ getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
111
+ }
112
+ }
113
+ }, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video, references.webcamReference]);
114
+ const sendProctoredParamValues = (0, _react.useCallback)(function () {
115
+ let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
116
+ let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
117
+ getProctorParamValues(proctoringIdentifier, statistics.current, isBreach, breachParam);
118
+ }, [proctoringIdentifier, getProctorParamValues]);
119
+ const [userCount, lookedAwayCount] = (0, _useWebcamData.default)(references.webcamReference, references.canvasReference, proctorParams);
120
+ const isTabSwitched = !(0, _hooks.usePageVisibility)(proctorParams.tabSwitch);
121
+ (0, _react.useEffect)(() => {
122
+ if (recurring) {
123
+ recurringFetchIntervalRef.current = setInterval(() => {
124
+ sendProctoredParamValues();
125
+ sendWebcamSnapshot();
126
+ sendScreengrab();
127
+ }, recurringFetchInterval);
128
+ }
129
+
130
+ return () => {
131
+ clearInterval(recurringFetchIntervalRef.current);
132
+ };
133
+ }, [recurring, recurringFetchInterval, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab]);
134
+ (0, _react.useEffect)(() => {
135
+ const currentStats = {
136
+ userCount,
137
+ isTabSwitched,
138
+ isFullScreen: permissions.fullscreen,
139
+ lookedAwayCount,
140
+ isWebcamDataNotReliable: !isWebcamProcessingReliable
141
+ };
142
+ const breachData = (0, _breachUtils.getDataOnBreach)(statistics, currentStats, proctorParams);
143
+ (0, _utils.updateStatistics)(statistics, currentStats, proctorParams);
144
+
145
+ if (breachData) {
146
+ sendProctoredParamValues(true, breachData.breachedParam);
147
+ sendWebcamSnapshot(true, breachData.breachedParam);
148
+ sendScreengrab(true, breachData.breachedParam);
149
+ }
150
+ }, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
151
+ return /*#__PURE__*/_react.default.createElement("div", {
152
+ className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
153
+ }, (0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren && children, !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
154
+ permissions: permissions,
155
+ hasAllPermission: actions.hasAllPermission,
156
+ askPermission: actions.askPermission,
157
+ references: references,
158
+ actions: actions,
159
+ browserDetails: browserDetails,
160
+ renderChildren: () => {
161
+ setRenderChildren(true);
162
+ customSetter.childrenRenderer(true);
163
+ }
164
+ }, permissionPassedProps)), !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
165
+ proctorParams: proctorParams,
166
+ permissions: permissions,
167
+ askPermission: actions.askPermission,
168
+ hasAllPermission: actions.hasAllPermission
169
+ }), /*#__PURE__*/_react.default.createElement(_activityTracker.default, {
170
+ proctorParams: proctorParams,
171
+ setAudioPermission: permissionSetter.audio,
172
+ setVideoPermission: permissionSetter.video,
173
+ webcamReference: references.webcamReference,
174
+ canvasReference: references.canvasReference,
175
+ screenshareReference: references.screenshareReference
176
+ }));
177
+ };
178
+
179
+ exports.ProctorApp = ProctorApp;
180
+ var _default = ProctorApp;
181
+ exports.default = _default;
@@ -0,0 +1,12 @@
1
+ .disable-copy-paste {
2
+ -webkit-user-select: none;
3
+ -ms-user-select: none;
4
+ user-select: none;
5
+ }
6
+ .fullwidth {
7
+ width: 100%;
8
+ }
9
+ .fullheight {
10
+ height: 100%;
11
+ overflow-y: scroll;
12
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _loadable = _interopRequireDefault(require("../../utils/loadable"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ var _default = (0, _loadable.default)(() => Promise.resolve().then(() => _interopRequireWildcard(require("./index"))), {
23
+ fallback: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)
24
+ });
25
+
26
+ exports.default = _default;