@newtonschool/react_proctoring_library 0.0.39 → 0.0.41
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.
- package/dist/components/permissions/index.js +1 -0
- package/dist/components/permissions/permission-body.js +1 -0
- package/dist/components/proctor-app/Loadable.js +1 -0
- package/dist/components/proctor-app/index.js +20 -35
- package/dist/components/proctor-app/index.scss +7 -0
- package/dist/components/proctor-context-app/Loadable.js +1 -0
- package/dist/components/proctor-context-app/index.js +4 -10
- package/dist/components/screenshare-activity-tracker/index.js +26 -0
- package/dist/components/webcam-activity-tracker/index.js +55 -0
- package/dist/constants/dom.js +10 -0
- package/dist/hooks/useIsPageFocussed.js +29 -0
- package/dist/hooks/usePageVisibility.js +7 -12
- package/dist/hooks/useWebcamData.js +1 -0
- package/dist/utils/browserUtils.js +6 -2
- package/dist/utils/loadable.js +1 -0
- package/dist/utils/webcamMicrophoneUtils.js +22 -6
- package/package.json +1 -1
- package/dist/components/activity-tracker/index.js +0 -142
- package/dist/components/activity-tracker/index.scss +0 -7
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
require("core-js/modules/es.promise.js");
|
|
8
|
+
require("core-js/modules/es.weak-map.js");
|
|
8
9
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
9
10
|
var _react = _interopRequireDefault(require("react"));
|
|
10
11
|
var _loadable = _interopRequireDefault(require("../../utils/loadable"));
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/es.symbol.description.js");
|
|
4
3
|
require("core-js/modules/es.object.assign.js");
|
|
4
|
+
require("core-js/modules/es.weak-map.js");
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = exports.ProctorApp = void 0;
|
|
9
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
10
9
|
require("core-js/modules/es.promise.js");
|
|
10
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
11
|
+
require("core-js/modules/es.symbol.description.js");
|
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
require("./index.scss");
|
|
13
14
|
var _utils = require("../../utils");
|
|
@@ -17,8 +18,10 @@ var _useWebcamData = _interopRequireDefault(require("../../hooks/useWebcamData")
|
|
|
17
18
|
var _breachUtils = require("../../utils/breachUtils");
|
|
18
19
|
var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
|
|
19
20
|
var _defaults = require("../../constants/defaults");
|
|
20
|
-
var
|
|
21
|
+
var _webcamActivityTracker = _interopRequireDefault(require("../webcam-activity-tracker"));
|
|
21
22
|
var _browserUtils = require("../../utils/browserUtils");
|
|
23
|
+
var _screenshareActivityTracker = require("../screenshare-activity-tracker");
|
|
24
|
+
var _dom = require("../../constants/dom");
|
|
22
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
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); }
|
|
24
27
|
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; }
|
|
@@ -33,7 +36,6 @@ const ProctorApp = _ref => {
|
|
|
33
36
|
let {
|
|
34
37
|
proctoringIdentifier,
|
|
35
38
|
customPermissionView = null,
|
|
36
|
-
shouldRenderChildren = false,
|
|
37
39
|
permissionPassedProps = {},
|
|
38
40
|
children,
|
|
39
41
|
proctoredContext,
|
|
@@ -42,27 +44,14 @@ const ProctorApp = _ref => {
|
|
|
42
44
|
getWebcamSnapshot = () => {},
|
|
43
45
|
getScreengrab = () => {}
|
|
44
46
|
} = _ref;
|
|
45
|
-
const [renderChildren, setRenderChildren] = (0, _react.useState)();
|
|
46
47
|
const context = (0, _react.useContext)(proctoredContext);
|
|
47
48
|
const {
|
|
48
49
|
actions,
|
|
49
50
|
permissions,
|
|
50
51
|
references,
|
|
51
|
-
permissionSetter
|
|
52
|
-
customProps,
|
|
53
|
-
customSetter
|
|
52
|
+
permissionSetter
|
|
54
53
|
} = context;
|
|
55
|
-
(0, _react.useEffect)(() => {
|
|
56
|
-
if (customProps.childrenRenderer === undefined) {
|
|
57
|
-
setRenderChildren(!shouldRenderChildren);
|
|
58
|
-
} else {
|
|
59
|
-
setRenderChildren(customProps.childrenRenderer);
|
|
60
|
-
}
|
|
61
|
-
}, [customProps]);
|
|
62
54
|
const CustomPermissionView = customPermissionView;
|
|
63
|
-
const browserDetails = {
|
|
64
|
-
isChrome: (0, _browserUtils.isChrome)()
|
|
65
|
-
};
|
|
66
55
|
const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
|
|
67
56
|
const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
|
|
68
57
|
const {
|
|
@@ -74,20 +63,18 @@ const ProctorApp = _ref => {
|
|
|
74
63
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
75
64
|
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
76
65
|
if (proctorParams.screenshareSnapshots && permissions.screenshare) {
|
|
77
|
-
const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)();
|
|
66
|
+
const screenshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.SCREENSHARE_REFERENCE_ID));
|
|
78
67
|
getScreengrab(proctoringIdentifier, screenshot, isBreach, breachedParam);
|
|
79
68
|
}
|
|
80
69
|
}, [getScreengrab, proctoringIdentifier, proctorParams.screenshareSnapshots, permissions.screenshare]);
|
|
81
|
-
const sendWebcamSnapshot = (0, _react.useCallback)(function () {
|
|
70
|
+
const sendWebcamSnapshot = (0, _react.useCallback)(async function () {
|
|
82
71
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
83
72
|
let breachedParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
84
73
|
if (proctorParams.webcamSnapshots && permissions.video) {
|
|
85
|
-
const webcamSnapshot = (0,
|
|
86
|
-
|
|
87
|
-
getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
|
|
88
|
-
}
|
|
74
|
+
const webcamSnapshot = await (0, _webcamMicrophoneUtils.captureScreenshot)("#".concat(_dom.WEBCAM_REFERENCE_ID));
|
|
75
|
+
getWebcamSnapshot(proctoringIdentifier, webcamSnapshot, isBreach, breachedParam);
|
|
89
76
|
}
|
|
90
|
-
}, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video
|
|
77
|
+
}, [proctoringIdentifier, getWebcamSnapshot, proctorParams.webcamSnapshots, permissions.video]);
|
|
91
78
|
const sendProctoredParamValues = (0, _react.useCallback)(function () {
|
|
92
79
|
let isBreach = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
93
80
|
let breachParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
@@ -123,31 +110,29 @@ const ProctorApp = _ref => {
|
|
|
123
110
|
sendScreengrab(true, breachData.breachedParam);
|
|
124
111
|
}
|
|
125
112
|
}, [userCount, isTabSwitched, permissions.fullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
|
|
113
|
+
const shouldShowProctoredComponent = (0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission);
|
|
126
114
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
127
115
|
className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth fullheight" : "fullwidth fullheight")
|
|
128
|
-
},
|
|
116
|
+
}, shouldShowProctoredComponent && children, !shouldShowProctoredComponent && customPermissionView && /*#__PURE__*/_react.default.createElement(CustomPermissionView, _extends({
|
|
129
117
|
permissions: permissions,
|
|
130
118
|
hasAllPermission: actions.hasAllPermission,
|
|
131
119
|
askPermission: actions.askPermission,
|
|
132
120
|
references: references,
|
|
133
121
|
actions: actions,
|
|
134
|
-
browserDetails:
|
|
135
|
-
|
|
136
|
-
setRenderChildren(true);
|
|
137
|
-
customSetter.childrenRenderer(true);
|
|
138
|
-
}
|
|
139
|
-
}, permissionPassedProps)), !((0, _breachUtils.showProctoredComponent)(proctorParams, actions.hasAllPermission) && renderChildren) && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
|
|
122
|
+
browserDetails: (0, _browserUtils.getBrowserDetails)()
|
|
123
|
+
}, permissionPassedProps)), !shouldShowProctoredComponent && !customPermissionView && /*#__PURE__*/_react.default.createElement(_permissions.Permission, {
|
|
140
124
|
proctorParams: proctorParams,
|
|
141
125
|
permissions: permissions,
|
|
142
126
|
askPermission: actions.askPermission,
|
|
143
127
|
hasAllPermission: actions.hasAllPermission
|
|
144
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
128
|
+
}), /*#__PURE__*/_react.default.createElement(_webcamActivityTracker.default, {
|
|
145
129
|
proctorParams: proctorParams,
|
|
146
130
|
setAudioPermission: permissionSetter.audio,
|
|
147
131
|
setVideoPermission: permissionSetter.video,
|
|
148
132
|
webcamReference: references.webcamReference,
|
|
149
|
-
canvasReference: references.canvasReference
|
|
150
|
-
|
|
133
|
+
canvasReference: references.canvasReference
|
|
134
|
+
}), /*#__PURE__*/_react.default.createElement(_screenshareActivityTracker.ScreenshareActivityTracker, {
|
|
135
|
+
ref: references.screenshareReference
|
|
151
136
|
}));
|
|
152
137
|
};
|
|
153
138
|
exports.ProctorApp = ProctorApp;
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
require("core-js/modules/es.promise.js");
|
|
8
|
+
require("core-js/modules/es.weak-map.js");
|
|
8
9
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
9
10
|
var _react = _interopRequireDefault(require("react"));
|
|
10
11
|
var _loadable = _interopRequireDefault(require("../../utils/loadable"));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
require("core-js/modules/es.weak-map.js");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -34,7 +35,6 @@ const ProctoredContextApp = _ref => {
|
|
|
34
35
|
const [audioPermisison, setAudioPermission] = (0, _react.useState)();
|
|
35
36
|
const [videoPermission, setVideoPermission] = (0, _react.useState)();
|
|
36
37
|
const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
|
|
37
|
-
const [customRenderer, setCustomRenderer] = (0, _react.useState)();
|
|
38
38
|
const webcamReference = (0, _react.useRef)(null);
|
|
39
39
|
const canvasReference = (0, _react.useRef)(null);
|
|
40
40
|
const screenshareReference = (0, _react.useRef)(null);
|
|
@@ -77,21 +77,15 @@ const ProctoredContextApp = _ref => {
|
|
|
77
77
|
video: setVideoPermission,
|
|
78
78
|
screenshare: setScreensharePermission
|
|
79
79
|
},
|
|
80
|
-
customProps: {
|
|
81
|
-
childrenRenderer: customRenderer
|
|
82
|
-
},
|
|
83
|
-
customSetter: {
|
|
84
|
-
childrenRenderer: setCustomRenderer
|
|
85
|
-
},
|
|
86
80
|
proctorParams,
|
|
87
81
|
actions: {
|
|
88
82
|
askPermission: askPermission,
|
|
89
83
|
hasAllPermission: hasAllPermission
|
|
90
84
|
},
|
|
91
85
|
references: {
|
|
92
|
-
webcamReference
|
|
93
|
-
canvasReference
|
|
94
|
-
screenshareReference
|
|
86
|
+
webcamReference,
|
|
87
|
+
canvasReference,
|
|
88
|
+
screenshareReference
|
|
95
89
|
}
|
|
96
90
|
})
|
|
97
91
|
}, children);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.weak-map.js");
|
|
4
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ScreenshareActivityTracker = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _dom = require("../../constants/dom");
|
|
11
|
+
var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
|
|
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
|
+
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) => {
|
|
15
|
+
(0, _react.useEffect)(() => {
|
|
16
|
+
if (screenshareReference.stream) {
|
|
17
|
+
(0, _webcamMicrophoneUtils.collectScreenshare)(screenshareReference);
|
|
18
|
+
}
|
|
19
|
+
}, []);
|
|
20
|
+
return /*#__PURE__*/_react.default.createElement("video", {
|
|
21
|
+
ref: screenshareReference,
|
|
22
|
+
className: "captured-video-canvas hide",
|
|
23
|
+
id: _dom.SCREENSHARE_REFERENCE_ID
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
exports.ScreenshareActivityTracker = ScreenshareActivityTracker;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.weak-map.js");
|
|
4
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactWebcam = _interopRequireDefault(require("react-webcam"));
|
|
11
|
+
var _dom = require("../../constants/dom");
|
|
12
|
+
var _breachUtils = require("../../utils/breachUtils");
|
|
13
|
+
var _browserUtils = require("../../utils/browserUtils");
|
|
14
|
+
var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
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
|
+
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; }
|
|
18
|
+
const WebcamActivityTracker = _ref => {
|
|
19
|
+
let {
|
|
20
|
+
proctorParams,
|
|
21
|
+
setAudioPermission,
|
|
22
|
+
setVideoPermission,
|
|
23
|
+
webcamReference
|
|
24
|
+
} = _ref;
|
|
25
|
+
(0, _react.useEffect)(() => {
|
|
26
|
+
if ((0, _browserUtils.isChrome)()) {
|
|
27
|
+
if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
|
|
28
|
+
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
29
|
+
(0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
|
|
30
|
+
status.onchange = evt => {
|
|
31
|
+
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
32
|
+
};
|
|
33
|
+
}).catch(err => {
|
|
34
|
+
(0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, [setVideoPermission, setAudioPermission, proctorParams]);
|
|
39
|
+
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, {
|
|
40
|
+
audio: true,
|
|
41
|
+
muted: true,
|
|
42
|
+
screenshotFormat: "image/jpeg",
|
|
43
|
+
ref: webcamReference,
|
|
44
|
+
onUserMedia: () => {
|
|
45
|
+
setVideoPermission(true);
|
|
46
|
+
},
|
|
47
|
+
onUserMediaError: () => {
|
|
48
|
+
setVideoPermission(false);
|
|
49
|
+
},
|
|
50
|
+
className: "captured-video-canvas hide",
|
|
51
|
+
id: _dom.WEBCAM_REFERENCE_ID
|
|
52
|
+
})));
|
|
53
|
+
};
|
|
54
|
+
var _default = WebcamActivityTracker;
|
|
55
|
+
exports.default = _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WEBCAM_REFERENCE_ID = exports.SCREENSHARE_REFERENCE_ID = void 0;
|
|
7
|
+
const WEBCAM_REFERENCE_ID = "wc-ref";
|
|
8
|
+
exports.WEBCAM_REFERENCE_ID = WEBCAM_REFERENCE_ID;
|
|
9
|
+
const SCREENSHARE_REFERENCE_ID = "ss-ref";
|
|
10
|
+
exports.SCREENSHARE_REFERENCE_ID = SCREENSHARE_REFERENCE_ID;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useIsPageFocussed;
|
|
7
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
const focusEvent = (0, _utils.getFocusEventName)();
|
|
11
|
+
const blurEvent = (0, _utils.getBlurEventName)();
|
|
12
|
+
function useIsPageFocussed(isProctorParam) {
|
|
13
|
+
const [isFocussed, setIsFocussed] = (0, _react.useState)(true);
|
|
14
|
+
const updateVisibilityOnFocus = () => {
|
|
15
|
+
setIsFocussed(true);
|
|
16
|
+
};
|
|
17
|
+
const updateVisibilityOnBlur = () => {
|
|
18
|
+
setIsFocussed(false);
|
|
19
|
+
};
|
|
20
|
+
(0, _react.useEffect)(() => {
|
|
21
|
+
window.addEventListener(focusEvent, updateVisibilityOnFocus, false);
|
|
22
|
+
window.addEventListener(blurEvent, updateVisibilityOnBlur, false);
|
|
23
|
+
return () => {
|
|
24
|
+
window.removeEventListener(focusEvent, updateVisibilityOnFocus);
|
|
25
|
+
window.removeEventListener(blurEvent, updateVisibilityOnBlur);
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
|
+
return isFocussed && isProctorParam;
|
|
29
|
+
}
|
|
@@ -7,22 +7,17 @@ exports.default = usePageVisibility;
|
|
|
7
7
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _utils = require("../utils");
|
|
10
|
-
const
|
|
11
|
-
const blurEvent = (0, _utils.getBlurEventName)();
|
|
10
|
+
const visibilityChangeEvent = (0, _utils.getVisibilityChangeEventName)();
|
|
12
11
|
function usePageVisibility(isProctorParam) {
|
|
13
|
-
const [isVisible, setIsVisible] = (0, _react.useState)(
|
|
14
|
-
const
|
|
15
|
-
setIsVisible(
|
|
16
|
-
};
|
|
17
|
-
const updateVisibilityOnBlur = () => {
|
|
18
|
-
setIsVisible(false);
|
|
12
|
+
const [isVisible, setIsVisible] = (0, _react.useState)((0, _utils.getIsDocumentVisible)());
|
|
13
|
+
const updateVisibility = () => {
|
|
14
|
+
setIsVisible((0, _utils.getIsDocumentVisible)());
|
|
19
15
|
};
|
|
20
16
|
(0, _react.useEffect)(() => {
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
updateVisibility();
|
|
18
|
+
window.addEventListener(visibilityChangeEvent, updateVisibility, false);
|
|
23
19
|
return () => {
|
|
24
|
-
|
|
25
|
-
document.removeEventListener(blurEvent, updateVisibilityOnBlur);
|
|
20
|
+
window.removeEventListener(visibilityChangeEvent, updateVisibility);
|
|
26
21
|
};
|
|
27
22
|
}, []);
|
|
28
23
|
return isVisible && isProctorParam;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isChrome = exports.getVisibilityChangeEventName = exports.getIsDocumentVisible = exports.getFocusEventName = exports.getBrowserFullscreenElementProp = exports.getBlurEventName = void 0;
|
|
6
|
+
exports.isChrome = exports.getVisibilityChangeEventName = exports.getIsDocumentVisible = exports.getFocusEventName = exports.getBrowserFullscreenElementProp = exports.getBrowserDetails = exports.getBlurEventName = void 0;
|
|
7
7
|
require("core-js/modules/es.regexp.exec.js");
|
|
8
8
|
require("core-js/modules/es.string.match.js");
|
|
9
9
|
const PROPERTY_TYPES = {
|
|
@@ -61,4 +61,8 @@ const getBrowserFullscreenElementProp = () => {
|
|
|
61
61
|
};
|
|
62
62
|
exports.getBrowserFullscreenElementProp = getBrowserFullscreenElementProp;
|
|
63
63
|
const isChrome = () => !!navigator.userAgent.match(/chrome|chromium/i);
|
|
64
|
-
exports.isChrome = isChrome;
|
|
64
|
+
exports.isChrome = isChrome;
|
|
65
|
+
const getBrowserDetails = () => ({
|
|
66
|
+
isChrome: isChrome()
|
|
67
|
+
});
|
|
68
|
+
exports.getBrowserDetails = getBrowserDetails;
|
package/dist/utils/loadable.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.updateVideoPermissions = exports.updateStatistics = exports.updateAudioPermissions = exports.setupScreensharePermission = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.captureWebcamSnapshot = exports.captureScreenshot = void 0;
|
|
6
|
+
exports.updateVideoPermissions = exports.updateStatistics = exports.updateAudioPermissions = exports.setupScreensharePermission = exports.resetWebcamReference = exports.resetScreenshotReference = exports.isWebcamVideoValid = exports.getVideoPermissionQuery = exports.getVideoPermission = exports.getGlancePercentage = exports.getAudioVideoPermission = exports.getAudioPermissionQuery = exports.getAudioPermission = exports.collectScreenshare = exports.captureWebcamSnapshot = exports.captureScreenshot = void 0;
|
|
7
7
|
require("core-js/modules/es.array-buffer.slice.js");
|
|
8
8
|
require("core-js/modules/es.typed-array.uint8-array.js");
|
|
9
9
|
require("core-js/modules/es.typed-array.fill.js");
|
|
@@ -115,10 +115,11 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
|
|
|
115
115
|
const track = stream.getTracks()[0];
|
|
116
116
|
if (track.getSettings().displaySurface === "monitor") {
|
|
117
117
|
setScreensharePermission(true);
|
|
118
|
-
screenshareReference.
|
|
118
|
+
screenshareReference.stream = stream;
|
|
119
|
+
collectScreenshare(screenshareReference);
|
|
119
120
|
track.onended = e => {
|
|
120
121
|
setScreensharePermission(false);
|
|
121
|
-
screenshareReference.current = null;
|
|
122
|
+
screenshareReference.current.srcObject = null;
|
|
122
123
|
};
|
|
123
124
|
} else {
|
|
124
125
|
track.stop();
|
|
@@ -126,10 +127,25 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
|
|
|
126
127
|
setScreensharePermission(false);
|
|
127
128
|
}
|
|
128
129
|
}).catch(e => {
|
|
129
|
-
screenshareReference
|
|
130
|
+
resetScreenshotReference(screenshareReference);
|
|
130
131
|
setScreensharePermission(false);
|
|
131
132
|
});
|
|
132
133
|
exports.setupScreensharePermission = setupScreensharePermission;
|
|
134
|
+
const collectScreenshare = screenshareReference => {
|
|
135
|
+
screenshareReference.current.srcObject = screenshareReference.stream;
|
|
136
|
+
screenshareReference.current.onloadedmetadata = e => {
|
|
137
|
+
screenshareReference.current.play();
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
exports.collectScreenshare = collectScreenshare;
|
|
141
|
+
const resetScreenshotReference = screenshareReference => {
|
|
142
|
+
screenshareReference.current = null;
|
|
143
|
+
};
|
|
144
|
+
exports.resetScreenshotReference = resetScreenshotReference;
|
|
145
|
+
const resetWebcamReference = webcamReference => {
|
|
146
|
+
webcamReference.current = null;
|
|
147
|
+
};
|
|
148
|
+
exports.resetWebcamReference = resetWebcamReference;
|
|
133
149
|
const getVideoPermissionQuery = () => navigator.permissions.query({
|
|
134
150
|
name: "camera"
|
|
135
151
|
});
|
|
@@ -158,9 +174,9 @@ const captureWebcamSnapshot = webcamReference => {
|
|
|
158
174
|
}
|
|
159
175
|
};
|
|
160
176
|
exports.captureWebcamSnapshot = captureWebcamSnapshot;
|
|
161
|
-
const captureScreenshot = async
|
|
177
|
+
const captureScreenshot = async elementIdSelector => {
|
|
162
178
|
try {
|
|
163
|
-
const canvas = await (0, _html2canvas.default)(document.querySelector(
|
|
179
|
+
const canvas = await (0, _html2canvas.default)(document.querySelector(elementIdSelector));
|
|
164
180
|
const b64Snapshot = canvas.toDataURL("image/jpeg");
|
|
165
181
|
return b64DataURItoBlob(b64Snapshot);
|
|
166
182
|
} catch (e) {
|
package/package.json
CHANGED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = void 0;
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _reactWebcam = _interopRequireDefault(require("react-webcam"));
|
|
10
|
-
var _utils = require("../../utils");
|
|
11
|
-
var _breachUtils = require("../../utils/breachUtils");
|
|
12
|
-
var _browserUtils = require("../../utils/browserUtils");
|
|
13
|
-
var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
|
|
14
|
-
require("./index.scss");
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
-
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
|
-
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; }
|
|
18
|
-
const ActivityTracker = _ref => {
|
|
19
|
-
let {
|
|
20
|
-
proctorParams,
|
|
21
|
-
webcamReference,
|
|
22
|
-
canvasReference,
|
|
23
|
-
screenshareReference,
|
|
24
|
-
setAudioPermission,
|
|
25
|
-
setVideoPermission
|
|
26
|
-
} = _ref;
|
|
27
|
-
const screenshareVideoReference = (0, _react.useRef)(null);
|
|
28
|
-
(0, _react.useEffect)(() => {
|
|
29
|
-
if (screenshareReference.current) {
|
|
30
|
-
screenshareVideoReference.current.srcObject = screenshareReference.current;
|
|
31
|
-
screenshareVideoReference.current.onloadedmetadata = e => {
|
|
32
|
-
screenshareVideoReference.current.play();
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return () => {
|
|
36
|
-
screenshareVideoReference.current.srcObject = null;
|
|
37
|
-
};
|
|
38
|
-
}, [screenshareReference.current]);
|
|
39
|
-
(0, _react.useEffect)(() => {
|
|
40
|
-
if ((0, _browserUtils.isChrome)()) {
|
|
41
|
-
if ((0, _breachUtils.isWebcamRequired)(proctorParams)) {
|
|
42
|
-
(0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
|
|
43
|
-
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
44
|
-
(0, _webcamMicrophoneUtils.getVideoPermissionQuery)().then(status => {
|
|
45
|
-
status.onchange = evt => {
|
|
46
|
-
(0, _webcamMicrophoneUtils.updateVideoPermissions)(setVideoPermission);
|
|
47
|
-
};
|
|
48
|
-
}).catch(err => {});
|
|
49
|
-
(0, _webcamMicrophoneUtils.getAudioPermissionQuery)().then(status => {
|
|
50
|
-
status.onchange = evt => {
|
|
51
|
-
(0, _webcamMicrophoneUtils.updateAudioPermissions)(setAudioPermission);
|
|
52
|
-
};
|
|
53
|
-
}).catch(err => {
|
|
54
|
-
(0, _webcamMicrophoneUtils.updateAudioPermissions)("Audio Permission", err);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, [setVideoPermission, setAudioPermission, proctorParams]);
|
|
59
|
-
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, {
|
|
60
|
-
audio: true,
|
|
61
|
-
muted: true,
|
|
62
|
-
screenshotFormat: "image/jpeg",
|
|
63
|
-
ref: webcamReference,
|
|
64
|
-
onUserMedia: stream => {
|
|
65
|
-
if (!(0, _browserUtils.isChrome)()) {
|
|
66
|
-
const {
|
|
67
|
-
audio,
|
|
68
|
-
video
|
|
69
|
-
} = (0, _utils.getAudioVideoPermission)(stream);
|
|
70
|
-
setAudioPermission(audio);
|
|
71
|
-
setVideoPermission(video);
|
|
72
|
-
stream.onaddtrack = p => {
|
|
73
|
-
const {
|
|
74
|
-
audio,
|
|
75
|
-
video
|
|
76
|
-
} = (0, _utils.getAudioVideoPermission)(stream);
|
|
77
|
-
setAudioPermission(audio);
|
|
78
|
-
setVideoPermission(video);
|
|
79
|
-
};
|
|
80
|
-
stream.onremovetrack = p => {
|
|
81
|
-
const {
|
|
82
|
-
audio,
|
|
83
|
-
video
|
|
84
|
-
} = (0, _utils.getAudioVideoPermission)(stream);
|
|
85
|
-
setAudioPermission(audio);
|
|
86
|
-
setVideoPermission(video);
|
|
87
|
-
};
|
|
88
|
-
stream.onactive = p => {
|
|
89
|
-
const {
|
|
90
|
-
audio,
|
|
91
|
-
video
|
|
92
|
-
} = (0, _utils.getAudioVideoPermission)(stream);
|
|
93
|
-
setAudioPermission(audio);
|
|
94
|
-
setVideoPermission(video);
|
|
95
|
-
};
|
|
96
|
-
stream.oninactive = e => {
|
|
97
|
-
setAudioPermission(false);
|
|
98
|
-
setVideoPermission(false);
|
|
99
|
-
};
|
|
100
|
-
const audioTracks = stream.getAudioTracks().filter(track => track.enabled && track.label);
|
|
101
|
-
audioTracks.forEach(track => {
|
|
102
|
-
track.onended = e => {
|
|
103
|
-
const audio = (0, _utils.getAudioPermission)(stream);
|
|
104
|
-
setAudioPermission(audio, e.currentTarget.id);
|
|
105
|
-
};
|
|
106
|
-
track.onmute = e => {
|
|
107
|
-
const audio = (0, _utils.getAudioPermission)(stream);
|
|
108
|
-
setAudioPermission(audio, e.currentTarget.id);
|
|
109
|
-
};
|
|
110
|
-
track.onunmute = e => {
|
|
111
|
-
const audio = (0, _utils.getAudioPermission)(stream);
|
|
112
|
-
setAudioPermission(audio);
|
|
113
|
-
};
|
|
114
|
-
});
|
|
115
|
-
const videoTracks = stream.getVideoTracks().filter(track => track.enabled && track.label);
|
|
116
|
-
videoTracks.forEach(track => {
|
|
117
|
-
track.onended = e => {
|
|
118
|
-
const video = (0, _utils.getVideoPermission)(stream, e.currentTarget.id);
|
|
119
|
-
setVideoPermission(video);
|
|
120
|
-
};
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
onUserMediaError: error => {
|
|
125
|
-
if (!(0, _browserUtils.isChrome)()) {
|
|
126
|
-
setVideoPermission(false);
|
|
127
|
-
setAudioPermission(false);
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
className: "hide"
|
|
131
|
-
}), /*#__PURE__*/_react.default.createElement("canvas", {
|
|
132
|
-
ref: canvasReference,
|
|
133
|
-
className: "captured-video-canvas hide",
|
|
134
|
-
id: "wc-ref"
|
|
135
|
-
})), /*#__PURE__*/_react.default.createElement("video", {
|
|
136
|
-
ref: screenshareVideoReference,
|
|
137
|
-
className: "captured-video-canvas hide",
|
|
138
|
-
id: "ss-ref"
|
|
139
|
-
}));
|
|
140
|
-
};
|
|
141
|
-
var _default = ActivityTracker;
|
|
142
|
-
exports.default = _default;
|