@newtonschool/react_proctoring_library 0.0.30 → 0.0.32
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/package.json +1 -1
- package/dist/assets/images/newton-school-logo.png +0 -0
- package/dist/assets/images/url-video-permission-highlight.png +0 -0
- package/dist/assets/videos/ask-permission.mp4 +0 -0
- package/dist/components/ProctorApp.js +0 -181
- package/dist/components/ProctoredContextApp.js +0 -109
- package/dist/components/activity-tracker/index.js +0 -150
- package/dist/components/activity-tracker/index.scss +0 -7
- package/dist/components/index.js +0 -47
- package/dist/components/index.scss +0 -8
- package/dist/components/permissions/index.js +0 -77
- package/dist/components/permissions/index.scss +0 -6
- package/dist/components/permissions/permission-body.js +0 -60
- package/dist/components/proctor-app/Loadable.js +0 -26
- package/dist/components/proctor-app/index.js +0 -181
- package/dist/components/proctor-app/index.scss +0 -12
- package/dist/components/proctor-context-app/Loadable.js +0 -26
- package/dist/components/proctor-context-app/index.js +0 -108
- package/dist/components/screenshare/index.js +0 -40
- package/dist/components/screenshare/index.scss +0 -4
- package/dist/constants/defaults.js +0 -54
- package/dist/constants/text.js +0 -60
- package/dist/hooks/index.js +0 -23
- package/dist/hooks/useFullScreenData.js +0 -43
- package/dist/hooks/usePageVisibility.js +0 -31
- package/dist/hooks/useTabSwitchCount.js +0 -25
- package/dist/hooks/useWebcamData.js +0 -82
- package/dist/index.js +0 -19
- package/dist/proctoringTracker/tracker.js +0 -17
- package/dist/proctoringTracker/trackerWrapper.js +0 -1
- package/dist/utils/arrayUtils.js +0 -16
- package/dist/utils/breachUtils.js +0 -135
- package/dist/utils/browserUtils.js +0 -72
- package/dist/utils/gpuUtils.js +0 -29
- package/dist/utils/index.js +0 -79
- package/dist/utils/loadable.js +0 -29
- package/dist/utils/webcamMicrophoneUtils.js +0 -223
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
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;
|
|
7
|
-
|
|
8
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
9
|
-
|
|
10
|
-
require("core-js/modules/es.string.split.js");
|
|
11
|
-
|
|
12
|
-
require("core-js/modules/es.array-buffer.slice.js");
|
|
13
|
-
|
|
14
|
-
require("core-js/modules/es.typed-array.uint8-array.js");
|
|
15
|
-
|
|
16
|
-
require("core-js/modules/es.typed-array.fill.js");
|
|
17
|
-
|
|
18
|
-
require("core-js/modules/es.typed-array.set.js");
|
|
19
|
-
|
|
20
|
-
require("core-js/modules/es.typed-array.sort.js");
|
|
21
|
-
|
|
22
|
-
require("core-js/modules/es.typed-array.to-locale-string.js");
|
|
23
|
-
|
|
24
|
-
require("core-js/modules/es.promise.js");
|
|
25
|
-
|
|
26
|
-
var _ = require(".");
|
|
27
|
-
|
|
28
|
-
var _html2canvas = _interopRequireDefault(require("html2canvas"));
|
|
29
|
-
|
|
30
|
-
var _defaults = require("../constants/defaults");
|
|
31
|
-
|
|
32
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
33
|
-
|
|
34
|
-
const isWebcamVideoValid = webcamReference => webcamReference !== null && webcamReference !== undefined && typeof webcamReference.current !== "undefined" && webcamReference.current !== null && webcamReference.current.video.readyState === 4;
|
|
35
|
-
|
|
36
|
-
exports.isWebcamVideoValid = isWebcamVideoValid;
|
|
37
|
-
|
|
38
|
-
const updateStatistics = (statistics, currentStats, proctorParams) => {
|
|
39
|
-
const {
|
|
40
|
-
isTabSwitched,
|
|
41
|
-
isFullscreen,
|
|
42
|
-
lookedAwayCount,
|
|
43
|
-
userCount,
|
|
44
|
-
isWebcamDataReliable
|
|
45
|
-
} = currentStats;
|
|
46
|
-
|
|
47
|
-
if (proctorParams.tabSwitch) {
|
|
48
|
-
statistics.current[_defaults.STATS_PARAMS.isTabSwitched] = isTabSwitched;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (proctorParams.fullscreenExit) {
|
|
52
|
-
statistics.current[_defaults.STATS_PARAMS.isFullscreen] = isFullscreen;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (proctorParams.lookedAway) {
|
|
56
|
-
statistics.current[_defaults.STATS_PARAMS.lookedAwayCount] = lookedAwayCount;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (proctorParams.people) {
|
|
60
|
-
statistics.current[_defaults.STATS_PARAMS.userCountMax] = Math.max(userCount, statistics.current[_defaults.STATS_PARAMS.userCountMax]);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
statistics.current.IS_WEBCAM_DATA_RELIABLE = isWebcamDataReliable;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
exports.updateStatistics = updateStatistics;
|
|
67
|
-
|
|
68
|
-
const getGlancePercentage = partSegmentation => {
|
|
69
|
-
if (!partSegmentation || !(partSegmentation instanceof Object) || !(0, _.isArrayValid)(partSegmentation.allPoses)) {
|
|
70
|
-
return 0.0;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const allPoses = partSegmentation.allPoses;
|
|
74
|
-
let totalScoreLeftEye = 0.0,
|
|
75
|
-
totalScoreRightEye = 0.0,
|
|
76
|
-
totalScoreNose = 0.0,
|
|
77
|
-
totalScoreLeftEar = 0.0,
|
|
78
|
-
totalScoreRightEar = 0.0;
|
|
79
|
-
let noseIndex = 0,
|
|
80
|
-
leftEyeIndex = 1,
|
|
81
|
-
rightEyeIndex = 2,
|
|
82
|
-
leftEarIndex = 3,
|
|
83
|
-
rightEarIndex = 4;
|
|
84
|
-
allPoses.forEach(poseArray => {
|
|
85
|
-
let keypointsArray = poseArray.keypoints;
|
|
86
|
-
totalScoreNose += keypointsArray[noseIndex].score;
|
|
87
|
-
totalScoreLeftEye += keypointsArray[leftEyeIndex].score;
|
|
88
|
-
totalScoreRightEye += keypointsArray[rightEyeIndex].score;
|
|
89
|
-
totalScoreLeftEar += keypointsArray[leftEarIndex].score;
|
|
90
|
-
totalScoreRightEar += keypointsArray[rightEarIndex].score;
|
|
91
|
-
});
|
|
92
|
-
const avgScoreLeftEye = totalScoreLeftEye / allPoses.length,
|
|
93
|
-
avgScoreRightEye = totalScoreRightEye / allPoses.length,
|
|
94
|
-
avgScoreNose = totalScoreNose / allPoses.length,
|
|
95
|
-
avgScoreLeftEar = totalScoreLeftEar / allPoses.length,
|
|
96
|
-
avgScoreRightEar = totalScoreRightEar / allPoses.length;
|
|
97
|
-
const avgPercentage = 100 * (avgScoreLeftEye + avgScoreRightEye + avgScoreNose + avgScoreLeftEar + avgScoreRightEar) / 5;
|
|
98
|
-
return Math.ceil(avgPercentage);
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
exports.getGlancePercentage = getGlancePercentage;
|
|
102
|
-
|
|
103
|
-
const getVideoPermission = function getVideoPermission(stream) {
|
|
104
|
-
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
105
|
-
return stream.getVideoTracks().filter(track => track.enabled && track.label && track.id !== exludeTrackId).length > 0;
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
exports.getVideoPermission = getVideoPermission;
|
|
109
|
-
|
|
110
|
-
const getAudioPermission = function getAudioPermission(stream) {
|
|
111
|
-
let exludeTrackId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
112
|
-
return stream.getAudioTracks().filter(track => track.enabled && track.label && !track.muted && track.id !== exludeTrackId).length > 0;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
exports.getAudioPermission = getAudioPermission;
|
|
116
|
-
|
|
117
|
-
const getAudioVideoPermission = stream => {
|
|
118
|
-
return {
|
|
119
|
-
audio: getAudioPermission(stream),
|
|
120
|
-
video: getVideoPermission(stream)
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
exports.getAudioVideoPermission = getAudioVideoPermission;
|
|
125
|
-
|
|
126
|
-
const updateAudioPermissions = setAudioPermission => {
|
|
127
|
-
navigator.mediaDevices.getUserMedia({
|
|
128
|
-
audio: true
|
|
129
|
-
}).then(() => {
|
|
130
|
-
setAudioPermission(true);
|
|
131
|
-
}).catch(err => {
|
|
132
|
-
setAudioPermission(false);
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
exports.updateAudioPermissions = updateAudioPermissions;
|
|
137
|
-
|
|
138
|
-
const updateVideoPermissions = setVideoPermission => {
|
|
139
|
-
navigator.mediaDevices.getUserMedia({
|
|
140
|
-
video: true
|
|
141
|
-
}).then(() => {
|
|
142
|
-
setVideoPermission(true);
|
|
143
|
-
}).catch(err => {
|
|
144
|
-
setVideoPermission(false);
|
|
145
|
-
});
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
exports.updateVideoPermissions = updateVideoPermissions;
|
|
149
|
-
|
|
150
|
-
const setupScreensharePermission = (setScreensharePermission, screenshareReference) => navigator.mediaDevices.getDisplayMedia({
|
|
151
|
-
video: true
|
|
152
|
-
}).then(stream => {
|
|
153
|
-
const track = stream.getTracks()[0];
|
|
154
|
-
|
|
155
|
-
if (track.getSettings().displaySurface === "monitor") {
|
|
156
|
-
setScreensharePermission(true);
|
|
157
|
-
screenshareReference.current.srcObject = stream;
|
|
158
|
-
|
|
159
|
-
screenshareReference.current.onloadedmetadata = e => {
|
|
160
|
-
screenshareReference.current.play();
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
track.onended = e => {
|
|
164
|
-
setScreensharePermission(false);
|
|
165
|
-
screenshareReference.current.srcObject = null;
|
|
166
|
-
};
|
|
167
|
-
} else {
|
|
168
|
-
screenshareReference.current = null;
|
|
169
|
-
setScreensharePermission(false);
|
|
170
|
-
}
|
|
171
|
-
}).catch(e => {
|
|
172
|
-
screenshareReference.current = null;
|
|
173
|
-
setScreensharePermission(false);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
exports.setupScreensharePermission = setupScreensharePermission;
|
|
177
|
-
|
|
178
|
-
const getVideoPermissionQuery = () => navigator.permissions.query({
|
|
179
|
-
name: "camera"
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
exports.getVideoPermissionQuery = getVideoPermissionQuery;
|
|
183
|
-
|
|
184
|
-
const getAudioPermissionQuery = () => navigator.permissions.query({
|
|
185
|
-
name: "microphone"
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
exports.getAudioPermissionQuery = getAudioPermissionQuery;
|
|
189
|
-
|
|
190
|
-
const b64DataURItoBlob = dataURI => {
|
|
191
|
-
const byteString = window.atob(dataURI.split(",")[1]);
|
|
192
|
-
const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
|
|
193
|
-
const u8arr = new Uint8Array(byteString.length);
|
|
194
|
-
|
|
195
|
-
for (let i = 0; i < byteString.length; i += 1) {
|
|
196
|
-
u8arr[i] = byteString.charCodeAt(i);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return new Blob([u8arr], {
|
|
200
|
-
type: mimeString
|
|
201
|
-
});
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
const captureWebcamSnapshot = webcamReference => {
|
|
205
|
-
try {
|
|
206
|
-
const b64Snapshot = webcamReference.current.getScreenshot();
|
|
207
|
-
return b64DataURItoBlob(b64Snapshot);
|
|
208
|
-
} catch (e) {// pass
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
exports.captureWebcamSnapshot = captureWebcamSnapshot;
|
|
213
|
-
|
|
214
|
-
const captureScreenshot = async () => {
|
|
215
|
-
try {
|
|
216
|
-
const canvas = await (0, _html2canvas.default)(document.querySelector("#ss-ref"));
|
|
217
|
-
const b64Snapshot = canvas.toDataURL("image/jpeg");
|
|
218
|
-
return b64DataURItoBlob(b64Snapshot);
|
|
219
|
-
} catch (e) {// pass
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
exports.captureScreenshot = captureScreenshot;
|