easyproctor 0.0.89 → 1.0.0
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/README.md +5 -5
- package/esm/index.js +210 -90
- package/extension/extension.d.ts +1 -1
- package/index.js +24981 -24861
- package/new-flow/backend/BackendService.d.ts +3 -2
- package/new-flow/proctoring/ProctoringRecorder.d.ts +2 -0
- package/new-flow/proctoring/ProctoringSession.d.ts +3 -0
- package/new-flow/proctoring/ProctoringUploader.d.ts +2 -1
- package/new-flow/recorders/AlertRecorder.d.ts +2 -0
- package/new-flow/recorders/AudioRecorder.d.ts +6 -0
- package/new-flow/recorders/CameraRecorder.d.ts +5 -0
- package/new-flow/recorders/IRecorder.d.ts +2 -0
- package/new-flow/recorders/ScreenRecorder.d.ts +6 -0
- package/package.json +1 -1
- package/plugins/insights.d.ts +3 -1
- package/plugins/recorder.d.ts +6 -1
- package/proctoring/DeviceChecker.d.ts +1 -0
- package/proctoring/proctoring.d.ts +9 -5
- package/proctoring/useProctoring.d.ts +4 -5
- package/unpkg/easyproctor.min.js +28 -16
package/README.md
CHANGED
|
@@ -219,12 +219,12 @@ const {
|
|
|
219
219
|
});
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
## Release Note V 0.0
|
|
222
|
+
## Release Note V 1.0.0
|
|
223
223
|
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
224
|
+
- Salvando informações da gravação de Áudio
|
|
225
|
+
- Adicionado mais eventos da Azure
|
|
226
|
+
- Correção de eventos da Azure
|
|
227
|
+
- Atualização da comunicação com a Extensão do Chrome
|
|
228
228
|
|
|
229
229
|
|
|
230
230
|
## License
|
package/esm/index.js
CHANGED
|
@@ -18,13 +18,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
20
|
|
|
21
|
-
// node_modules/form-data/lib/browser.js
|
|
22
|
-
var require_browser = __commonJS({
|
|
23
|
-
"node_modules/form-data/lib/browser.js"(exports, module) {
|
|
24
|
-
module.exports = typeof self == "object" ? self.FormData : window.FormData;
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
|
|
28
21
|
// src/plugins/mp3.js
|
|
29
22
|
var require_mp3 = __commonJS({
|
|
30
23
|
"src/plugins/mp3.js"(exports, module) {
|
|
@@ -14308,6 +14301,13 @@ var require_mp3 = __commonJS({
|
|
|
14308
14301
|
}
|
|
14309
14302
|
});
|
|
14310
14303
|
|
|
14304
|
+
// node_modules/form-data/lib/browser.js
|
|
14305
|
+
var require_browser = __commonJS({
|
|
14306
|
+
"node_modules/form-data/lib/browser.js"(exports, module) {
|
|
14307
|
+
module.exports = typeof self == "object" ? self.FormData : window.FormData;
|
|
14308
|
+
}
|
|
14309
|
+
});
|
|
14310
|
+
|
|
14311
14311
|
// src/modules/checkPermissions.ts
|
|
14312
14312
|
async function checkPermissions() {
|
|
14313
14313
|
try {
|
|
@@ -14356,6 +14356,12 @@ async function enumarateDevices() {
|
|
|
14356
14356
|
return devices;
|
|
14357
14357
|
}
|
|
14358
14358
|
|
|
14359
|
+
// src/plugins/MicRecorder2.ts
|
|
14360
|
+
var MicRecorder = require_mp3();
|
|
14361
|
+
function createMicRecorder(config) {
|
|
14362
|
+
return new MicRecorder(config);
|
|
14363
|
+
}
|
|
14364
|
+
|
|
14359
14365
|
// src/new-flow/proctoring/ProctoringSession.ts
|
|
14360
14366
|
var ProctoringSession = class {
|
|
14361
14367
|
constructor(id) {
|
|
@@ -14378,6 +14384,12 @@ var ProctoringSession = class {
|
|
|
14378
14384
|
this.state = "Recording" /* Recording */;
|
|
14379
14385
|
this.startedAt = new Date(Date.now());
|
|
14380
14386
|
}
|
|
14387
|
+
pause() {
|
|
14388
|
+
this.state = "Paused" /* Paused */;
|
|
14389
|
+
}
|
|
14390
|
+
resume() {
|
|
14391
|
+
this.state = "Recording" /* Recording */;
|
|
14392
|
+
}
|
|
14381
14393
|
stop() {
|
|
14382
14394
|
this.state = "Ended" /* Ended */;
|
|
14383
14395
|
this.sessionDuration = Date.now() - this.startedAt.getTime();
|
|
@@ -14399,22 +14411,78 @@ var ProctoringSession = class {
|
|
|
14399
14411
|
}
|
|
14400
14412
|
};
|
|
14401
14413
|
|
|
14414
|
+
// src/new-flow/recorders/AudioRecorder.ts
|
|
14415
|
+
var AudioRecorder = class {
|
|
14416
|
+
constructor() {
|
|
14417
|
+
this.blobs = [];
|
|
14418
|
+
}
|
|
14419
|
+
async startRecording() {
|
|
14420
|
+
this.recorder = createMicRecorder({
|
|
14421
|
+
bitRate: 128
|
|
14422
|
+
});
|
|
14423
|
+
this.recorder.start().catch((e) => {
|
|
14424
|
+
throw new Error("Error on Audio to Start Recording");
|
|
14425
|
+
});
|
|
14426
|
+
}
|
|
14427
|
+
async pauseRecording() {
|
|
14428
|
+
}
|
|
14429
|
+
async resumeRecording() {
|
|
14430
|
+
}
|
|
14431
|
+
async stopRecording() {
|
|
14432
|
+
if (!this.recorder)
|
|
14433
|
+
return;
|
|
14434
|
+
const response = await this.recorder.stop().getMp3().then(async ([buffer, blob]) => {
|
|
14435
|
+
return { buffer, blob };
|
|
14436
|
+
}).catch((e) => {
|
|
14437
|
+
alert("We could not retrieve your message");
|
|
14438
|
+
return void 0;
|
|
14439
|
+
});
|
|
14440
|
+
if (response) {
|
|
14441
|
+
this.blobs.push(response.blob);
|
|
14442
|
+
}
|
|
14443
|
+
}
|
|
14444
|
+
async saveOnSession(session) {
|
|
14445
|
+
session.addRecording({
|
|
14446
|
+
device: "",
|
|
14447
|
+
file: new File(this.blobs, `EP_${session.id}_audio_0.mp3`, {
|
|
14448
|
+
type: "audio/mp3"
|
|
14449
|
+
}),
|
|
14450
|
+
origin: "Mic" /* Mic */
|
|
14451
|
+
});
|
|
14452
|
+
}
|
|
14453
|
+
};
|
|
14454
|
+
|
|
14402
14455
|
// src/plugins/recorder.ts
|
|
14403
|
-
function recorder(stream, buffer) {
|
|
14456
|
+
function recorder(stream, buffer, audio = false) {
|
|
14404
14457
|
let resolvePromise;
|
|
14405
|
-
|
|
14458
|
+
let options = {
|
|
14406
14459
|
mimeType: "video/webm;codecs=vp9",
|
|
14407
14460
|
videoBitsPerSecond: 128e3,
|
|
14408
14461
|
audioBitsPerSecond: 64 * 1e3
|
|
14409
14462
|
};
|
|
14463
|
+
if (audio) {
|
|
14464
|
+
options = {
|
|
14465
|
+
mimeType: "audio/webm",
|
|
14466
|
+
audioBitsPerSecond: 64 * 1e3
|
|
14467
|
+
};
|
|
14468
|
+
}
|
|
14410
14469
|
const mediaRecorder = new MediaRecorder(stream, options);
|
|
14411
14470
|
mediaRecorder.ondataavailable = (e) => {
|
|
14412
14471
|
if (e.data.size > 0) {
|
|
14413
14472
|
buffer.push(e.data);
|
|
14414
14473
|
}
|
|
14474
|
+
if (audio && mediaRecorder.state == "inactive") {
|
|
14475
|
+
const blob = new Blob(buffer, { type: "audio/mpeg-3" });
|
|
14476
|
+
buffer = [blob];
|
|
14477
|
+
}
|
|
14415
14478
|
resolvePromise && resolvePromise();
|
|
14416
14479
|
};
|
|
14417
|
-
|
|
14480
|
+
function startRecording() {
|
|
14481
|
+
return new Promise((resolve) => {
|
|
14482
|
+
resolvePromise = resolve;
|
|
14483
|
+
mediaRecorder.start();
|
|
14484
|
+
});
|
|
14485
|
+
}
|
|
14418
14486
|
function stopRecording() {
|
|
14419
14487
|
return new Promise((resolve) => {
|
|
14420
14488
|
if (mediaRecorder.state == "recording") {
|
|
@@ -14428,7 +14496,28 @@ function recorder(stream, buffer) {
|
|
|
14428
14496
|
}
|
|
14429
14497
|
});
|
|
14430
14498
|
}
|
|
14431
|
-
|
|
14499
|
+
function pauseRecording() {
|
|
14500
|
+
return new Promise((resolve) => {
|
|
14501
|
+
if (mediaRecorder.state == "recording") {
|
|
14502
|
+
mediaRecorder.pause();
|
|
14503
|
+
resolve();
|
|
14504
|
+
} else {
|
|
14505
|
+
resolve();
|
|
14506
|
+
}
|
|
14507
|
+
});
|
|
14508
|
+
}
|
|
14509
|
+
function resumeRecording() {
|
|
14510
|
+
return new Promise((resolve) => {
|
|
14511
|
+
console.log("Resumindo...");
|
|
14512
|
+
if (mediaRecorder.state == "paused") {
|
|
14513
|
+
mediaRecorder.resume();
|
|
14514
|
+
resolve();
|
|
14515
|
+
} else {
|
|
14516
|
+
resolve();
|
|
14517
|
+
}
|
|
14518
|
+
});
|
|
14519
|
+
}
|
|
14520
|
+
return { startRecording, stopRecording, pauseRecording, resumeRecording };
|
|
14432
14521
|
}
|
|
14433
14522
|
|
|
14434
14523
|
// src/new-flow/recorders/CameraRecorder.ts
|
|
@@ -14458,15 +14547,33 @@ var CameraRecorder = class {
|
|
|
14458
14547
|
}
|
|
14459
14548
|
};
|
|
14460
14549
|
this.cameraStream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
14461
|
-
const stopRecording = recorder(this.cameraStream, this.blobs);
|
|
14550
|
+
const { startRecording, stopRecording, pauseRecording, resumeRecording } = recorder(this.cameraStream, this.blobs);
|
|
14551
|
+
this.recordingStart = startRecording;
|
|
14462
14552
|
this.recordingStop = stopRecording;
|
|
14553
|
+
this.recordingPause = pauseRecording;
|
|
14554
|
+
this.recordingResume = resumeRecording;
|
|
14555
|
+
this.recordingStart();
|
|
14463
14556
|
}
|
|
14464
14557
|
async stopRecording() {
|
|
14465
14558
|
await this.recordingStop();
|
|
14466
14559
|
}
|
|
14560
|
+
async pauseRecording() {
|
|
14561
|
+
console.log("Pausing...");
|
|
14562
|
+
await this.recordingPause();
|
|
14563
|
+
console.log("Paused");
|
|
14564
|
+
}
|
|
14565
|
+
async resumeRecording() {
|
|
14566
|
+
console.log("Resuming...");
|
|
14567
|
+
await this.recordingResume();
|
|
14568
|
+
console.log("Resumed");
|
|
14569
|
+
}
|
|
14467
14570
|
async saveOnSession(session) {
|
|
14571
|
+
const settings = this.cameraStream.getVideoTracks()[0].getSettings();
|
|
14572
|
+
const settingsAudio = this.cameraStream.getAudioTracks()[0].getSettings();
|
|
14468
14573
|
session.addRecording({
|
|
14469
|
-
device:
|
|
14574
|
+
device: `Audio
|
|
14575
|
+
Sample Rate: ${settingsAudio.sampleRate}
|
|
14576
|
+
Sample Size: ${settingsAudio.sampleSize}`,
|
|
14470
14577
|
file: new File(this.blobs, `EP_${session.id}_camera_0.webm`, {
|
|
14471
14578
|
type: "video/webm"
|
|
14472
14579
|
}),
|
|
@@ -14485,6 +14592,7 @@ var PROCTORING_NOT_STARTED = "proctoring_not_started";
|
|
|
14485
14592
|
var ScreenRecorder = class {
|
|
14486
14593
|
constructor(options) {
|
|
14487
14594
|
this.blobs = [];
|
|
14595
|
+
this.blobsFinal = [];
|
|
14488
14596
|
this.options = options;
|
|
14489
14597
|
}
|
|
14490
14598
|
async startRecording() {
|
|
@@ -14515,8 +14623,14 @@ var ScreenRecorder = class {
|
|
|
14515
14623
|
});
|
|
14516
14624
|
throw NOT_SHARED_FIRST_SCREEN;
|
|
14517
14625
|
}
|
|
14518
|
-
const stopRecording = recorder(this.screenStream, this.blobs);
|
|
14626
|
+
const { startRecording, stopRecording } = recorder(this.screenStream, this.blobs);
|
|
14627
|
+
this.recordingStart = startRecording;
|
|
14519
14628
|
this.recordingStop = stopRecording;
|
|
14629
|
+
this.recordingStart();
|
|
14630
|
+
}
|
|
14631
|
+
async pauseRecording() {
|
|
14632
|
+
}
|
|
14633
|
+
async resumeRecording() {
|
|
14520
14634
|
}
|
|
14521
14635
|
async stopRecording() {
|
|
14522
14636
|
await this.recordingStop();
|
|
@@ -14660,12 +14774,14 @@ var DeviceChecker = class {
|
|
|
14660
14774
|
width: this.videoOptions.width,
|
|
14661
14775
|
height: this.videoOptions.height
|
|
14662
14776
|
});
|
|
14777
|
+
this.audioRecorder = new AudioRecorder();
|
|
14663
14778
|
this.screenRecorder = options.captureScreen ? new ScreenRecorder({
|
|
14664
14779
|
allowOnlyFirstMonitor: options.allowOnlyFirstMonitor || options.allowOnlyFirstMonitor == void 0 ? true : false,
|
|
14665
14780
|
onStopSharingScreenCallback: () => {
|
|
14666
14781
|
}
|
|
14667
14782
|
}) : void 0;
|
|
14668
14783
|
await this.cameraRecorder.startRecording();
|
|
14784
|
+
await this.audioRecorder.startRecording();
|
|
14669
14785
|
if (this.screenRecorder) {
|
|
14670
14786
|
await this.screenRecorder.startRecording();
|
|
14671
14787
|
}
|
|
@@ -14678,6 +14794,7 @@ var DeviceChecker = class {
|
|
|
14678
14794
|
const checkDevices = document.querySelector("#checkDevices");
|
|
14679
14795
|
checkDevices == null ? void 0 : checkDevices.remove();
|
|
14680
14796
|
await this.cameraRecorder.stopRecording();
|
|
14797
|
+
await this.audioRecorder.stopRecording();
|
|
14681
14798
|
if (this.screenRecorder) {
|
|
14682
14799
|
await this.screenRecorder.stopRecording();
|
|
14683
14800
|
}
|
|
@@ -14708,8 +14825,8 @@ var Extension = class {
|
|
|
14708
14825
|
}, 1e3);
|
|
14709
14826
|
});
|
|
14710
14827
|
}
|
|
14711
|
-
sendVerifyMsg() {
|
|
14712
|
-
window.postMessage({ type: "easyproctor", func: "verifyExtensionEasyproctor" }, "*");
|
|
14828
|
+
sendVerifyMsg(link, token) {
|
|
14829
|
+
window.postMessage({ type: "easyproctor", func: "verifyExtensionEasyproctor", url: link, token }, "*");
|
|
14713
14830
|
}
|
|
14714
14831
|
verify(event) {
|
|
14715
14832
|
if (event.source == window && event.data.sender && event.data.sender === "easyproctor-extension" && event.data.message_name && event.data.message_name === "progress") {
|
|
@@ -14727,7 +14844,6 @@ var Extension = class {
|
|
|
14727
14844
|
}
|
|
14728
14845
|
addEventListener() {
|
|
14729
14846
|
window.addEventListener("message", (event) => this.verify(event));
|
|
14730
|
-
setTimeout(() => this.sendVerifyMsg(), 5e3);
|
|
14731
14847
|
}
|
|
14732
14848
|
};
|
|
14733
14849
|
|
|
@@ -22772,8 +22888,10 @@ var trackers = {
|
|
|
22772
22888
|
registerStart: (proctoringId, success, description) => registerCustomEvent(eventNames.START, { proctoringId, success, description }),
|
|
22773
22889
|
registerFinish: (proctoringId, success, description) => registerCustomEvent(eventNames.FINISH, { proctoringId, success, description }),
|
|
22774
22890
|
registerError: (proctoringId, description) => registerCustomEvent(eventNames.ERROR, { proctoringId, description }),
|
|
22775
|
-
|
|
22776
|
-
|
|
22891
|
+
registerUpload: (proctoringId, success, description, serviceType, uploadTime) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, success, description, serviceType, uploadTime }),
|
|
22892
|
+
registerUploadFile: (proctoringId, description, fileType) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, description, fileType }),
|
|
22893
|
+
registerChangeDevice: (proctoringId, inOrOut, devicesChanged) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, inOrOut, devicesChanged }),
|
|
22894
|
+
registerStopSharingScreen: (proctoringId, description) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, description })
|
|
22777
22895
|
};
|
|
22778
22896
|
|
|
22779
22897
|
// src/modules/onChangeDevices.ts
|
|
@@ -24607,10 +24725,12 @@ var BackendService = class {
|
|
|
24607
24725
|
this.baseUrl = this.selectBaseUrl(options.type);
|
|
24608
24726
|
}
|
|
24609
24727
|
selectBaseUrl(type) {
|
|
24610
|
-
if (type === "dev") {
|
|
24728
|
+
if (type === "dev" /* dev */) {
|
|
24611
24729
|
return DEV_BASE_URL;
|
|
24612
|
-
} else if (type === "homol") {
|
|
24730
|
+
} else if (type === "homol" /* homol */) {
|
|
24613
24731
|
return HOMOL_BASE_URL;
|
|
24732
|
+
} else if (type === "prod" /* prod */) {
|
|
24733
|
+
return PROD_BASE_URL;
|
|
24614
24734
|
} else {
|
|
24615
24735
|
return PROD_BASE_URL;
|
|
24616
24736
|
}
|
|
@@ -24631,6 +24751,8 @@ var BackendService = class {
|
|
|
24631
24751
|
path: `/AzureKey/getInsights`,
|
|
24632
24752
|
method: "GET",
|
|
24633
24753
|
jwt: proctoringOptions.token
|
|
24754
|
+
}).catch((error) => {
|
|
24755
|
+
throw "N\xE3o foi poss\xEDvel realizar a requisi\xE7\xE3o, tente novamente mais tarde";
|
|
24634
24756
|
});
|
|
24635
24757
|
return insights2.data;
|
|
24636
24758
|
}
|
|
@@ -24806,6 +24928,16 @@ var ProctoringRecorder = class {
|
|
|
24806
24928
|
const startPromises = this.recorders.map((rec) => rec.startRecording());
|
|
24807
24929
|
await Promise.all(startPromises);
|
|
24808
24930
|
}
|
|
24931
|
+
async pauseAll() {
|
|
24932
|
+
this.session.pause();
|
|
24933
|
+
const pausePromises = this.recorders.map((rec) => rec.pauseRecording());
|
|
24934
|
+
await Promise.all(pausePromises);
|
|
24935
|
+
}
|
|
24936
|
+
async resumeAll() {
|
|
24937
|
+
this.session.resume();
|
|
24938
|
+
const resumePromises = this.recorders.map((rec) => rec.resumeRecording());
|
|
24939
|
+
await Promise.all(resumePromises);
|
|
24940
|
+
}
|
|
24809
24941
|
async stopAll() {
|
|
24810
24942
|
const stopPromises = this.recorders.map((rec) => rec.stopRecording());
|
|
24811
24943
|
await Promise.all(stopPromises);
|
|
@@ -24821,8 +24953,9 @@ var ProctoringRecorder = class {
|
|
|
24821
24953
|
|
|
24822
24954
|
// src/new-flow/proctoring/ProctoringUploader.ts
|
|
24823
24955
|
var ProctoringUploader = class {
|
|
24824
|
-
constructor(session, uploadServices) {
|
|
24956
|
+
constructor(session, proctoringId, uploadServices) {
|
|
24825
24957
|
this.session = session;
|
|
24958
|
+
this.proctoringId = proctoringId;
|
|
24826
24959
|
this.uploadServices = uploadServices;
|
|
24827
24960
|
}
|
|
24828
24961
|
async upload(token, progress) {
|
|
@@ -24879,6 +25012,18 @@ var ProctoringUploader = class {
|
|
|
24879
25012
|
}
|
|
24880
25013
|
}, token);
|
|
24881
25014
|
if (result) {
|
|
25015
|
+
let fileType = "";
|
|
25016
|
+
if (rec.file.name.search("camera") !== -1) {
|
|
25017
|
+
fileType = "Camera";
|
|
25018
|
+
} else if (rec.file.name.search("screen") !== -1) {
|
|
25019
|
+
fileType = "Screen";
|
|
25020
|
+
} else if (rec.file.name.search("audio") !== -1) {
|
|
25021
|
+
fileType = "Audio";
|
|
25022
|
+
}
|
|
25023
|
+
trackers.registerUploadFile(this.proctoringId, `Upload File
|
|
25024
|
+
Name: ${rec.file.name}
|
|
25025
|
+
Type: ${rec.file.type}
|
|
25026
|
+
Size: ${rec.file.size}`, fileType);
|
|
24882
25027
|
return result;
|
|
24883
25028
|
}
|
|
24884
25029
|
}
|
|
@@ -24901,6 +25046,16 @@ var AlertRecorder = class {
|
|
|
24901
25046
|
window.addEventListener("focus", () => this.onReturnFocus());
|
|
24902
25047
|
}
|
|
24903
25048
|
}
|
|
25049
|
+
async pauseRecording() {
|
|
25050
|
+
window.removeEventListener("blur", () => this.onLostFocus());
|
|
25051
|
+
window.removeEventListener("focus", () => this.onReturnFocus());
|
|
25052
|
+
}
|
|
25053
|
+
async resumeRecording() {
|
|
25054
|
+
if (this.optionsProctoring.captureScreen) {
|
|
25055
|
+
window.addEventListener("blur", () => this.onLostFocus());
|
|
25056
|
+
window.addEventListener("focus", () => this.onReturnFocus());
|
|
25057
|
+
}
|
|
25058
|
+
}
|
|
24904
25059
|
async stopRecording() {
|
|
24905
25060
|
window.removeEventListener("blur", () => this.onLostFocus());
|
|
24906
25061
|
window.removeEventListener("focus", () => this.onReturnFocus());
|
|
@@ -24930,49 +25085,6 @@ var AlertRecorder = class {
|
|
|
24930
25085
|
}
|
|
24931
25086
|
};
|
|
24932
25087
|
|
|
24933
|
-
// src/plugins/MicRecorder2.ts
|
|
24934
|
-
var MicRecorder = require_mp3();
|
|
24935
|
-
function createMicRecorder(config) {
|
|
24936
|
-
return new MicRecorder(config);
|
|
24937
|
-
}
|
|
24938
|
-
|
|
24939
|
-
// src/new-flow/recorders/AudioRecorder.ts
|
|
24940
|
-
var AudioRecorder = class {
|
|
24941
|
-
constructor() {
|
|
24942
|
-
this.blobs = [];
|
|
24943
|
-
}
|
|
24944
|
-
async startRecording() {
|
|
24945
|
-
this.recorder = createMicRecorder({
|
|
24946
|
-
bitRate: 128
|
|
24947
|
-
});
|
|
24948
|
-
this.recorder.start().catch((e) => {
|
|
24949
|
-
throw new Error("Error on Audio to Start Recording");
|
|
24950
|
-
});
|
|
24951
|
-
}
|
|
24952
|
-
async stopRecording() {
|
|
24953
|
-
if (!this.recorder)
|
|
24954
|
-
return;
|
|
24955
|
-
const response = await this.recorder.stop().getMp3().then(async ([buffer, blob]) => {
|
|
24956
|
-
return { buffer, blob };
|
|
24957
|
-
}).catch((e) => {
|
|
24958
|
-
alert("We could not retrieve your message");
|
|
24959
|
-
return void 0;
|
|
24960
|
-
});
|
|
24961
|
-
if (response) {
|
|
24962
|
-
this.blobs.push(response.blob);
|
|
24963
|
-
}
|
|
24964
|
-
}
|
|
24965
|
-
async saveOnSession(session) {
|
|
24966
|
-
session.addRecording({
|
|
24967
|
-
device: "",
|
|
24968
|
-
file: new File(this.blobs, `EP_${session.id}_audio_0.mp3`, {
|
|
24969
|
-
type: "audio/mp3"
|
|
24970
|
-
}),
|
|
24971
|
-
origin: "Mic" /* Mic */
|
|
24972
|
-
});
|
|
24973
|
-
}
|
|
24974
|
-
};
|
|
24975
|
-
|
|
24976
25088
|
// src/new-flow/repository/IndexDbSessionRepository.ts
|
|
24977
25089
|
var IndexDbSessionRepository = class {
|
|
24978
25090
|
constructor(dbName, storeName) {
|
|
@@ -25059,8 +25171,8 @@ var AwsUploadService = class {
|
|
|
25059
25171
|
this.proctoringId = proctoringId;
|
|
25060
25172
|
}
|
|
25061
25173
|
async upload(data, token) {
|
|
25174
|
+
const { file, onProgress } = data;
|
|
25062
25175
|
try {
|
|
25063
|
-
const { file, onProgress } = data;
|
|
25064
25176
|
const progressCallback = (e) => {
|
|
25065
25177
|
const progress = e.loadedBytes / file.size * 100;
|
|
25066
25178
|
onProgress && onProgress(Math.round(progress));
|
|
@@ -25084,8 +25196,11 @@ var AwsUploadService = class {
|
|
|
25084
25196
|
uploaded
|
|
25085
25197
|
};
|
|
25086
25198
|
} catch (err) {
|
|
25087
|
-
trackers.registerError(this.proctoringId,
|
|
25088
|
-
|
|
25199
|
+
trackers.registerError(this.proctoringId, `Failed to upload to AWS
|
|
25200
|
+
File name: ${file.name}
|
|
25201
|
+
File type: ${file.type}
|
|
25202
|
+
File size: ${file.size}`);
|
|
25203
|
+
throw new Error("Failed to upload to AWS");
|
|
25089
25204
|
}
|
|
25090
25205
|
}
|
|
25091
25206
|
};
|
|
@@ -25097,8 +25212,8 @@ var AzureUploadService = class {
|
|
|
25097
25212
|
this.proctoringId = proctoringId;
|
|
25098
25213
|
}
|
|
25099
25214
|
async upload(data, token) {
|
|
25215
|
+
const { file, onProgress } = data;
|
|
25100
25216
|
try {
|
|
25101
|
-
const { file, onProgress } = data;
|
|
25102
25217
|
const progressCallback = (e) => {
|
|
25103
25218
|
const progress = e.loadedBytes / file.size * 100;
|
|
25104
25219
|
onProgress && onProgress(Math.round(progress));
|
|
@@ -25121,7 +25236,10 @@ var AzureUploadService = class {
|
|
|
25121
25236
|
uploaded
|
|
25122
25237
|
};
|
|
25123
25238
|
} catch (err) {
|
|
25124
|
-
trackers.registerError(this.proctoringId,
|
|
25239
|
+
trackers.registerError(this.proctoringId, `Failed to upload to Azure
|
|
25240
|
+
File name: ${file.name}
|
|
25241
|
+
File type: ${file.type}
|
|
25242
|
+
File size: ${file.size}`);
|
|
25125
25243
|
throw new Error("Failed to upload to azure");
|
|
25126
25244
|
}
|
|
25127
25245
|
}
|
|
@@ -25145,6 +25263,8 @@ var Proctoring = class {
|
|
|
25145
25263
|
this.state = "Stop" /* Stop */;
|
|
25146
25264
|
this.serviceType = "Upload" /* Upload */;
|
|
25147
25265
|
this.onStopSharingScreenCallback = () => {
|
|
25266
|
+
console.log("Stop sharing screen");
|
|
25267
|
+
trackers.registerStopSharingScreen(this.proctoringId, "Stop sharing screen");
|
|
25148
25268
|
};
|
|
25149
25269
|
this.onLostFocusCallback = () => {
|
|
25150
25270
|
};
|
|
@@ -25200,6 +25320,8 @@ var Proctoring = class {
|
|
|
25200
25320
|
async start(options = getDefaultProctoringOptions(), _videoOptions = {}) {
|
|
25201
25321
|
this.extension = new Extension();
|
|
25202
25322
|
this.extension.addEventListener();
|
|
25323
|
+
const baseURL = this.backend.selectBaseUrl(this.context.type);
|
|
25324
|
+
setTimeout(() => this.extension.sendVerifyMsg(baseURL, this.context.token), 5e3);
|
|
25203
25325
|
const devices = await enumarateDevices();
|
|
25204
25326
|
await this.repositoryDevices.save({ ...devices, id: "devices" });
|
|
25205
25327
|
this.sessionOptions = options;
|
|
@@ -25221,19 +25343,20 @@ var Proctoring = class {
|
|
|
25221
25343
|
}, this.sessionOptions.proctoringType);
|
|
25222
25344
|
this.proctoringId = startResponse.id;
|
|
25223
25345
|
this.proctoringSession = new ProctoringSession(this.proctoringId);
|
|
25224
|
-
|
|
25346
|
+
this.allRecorders = this.createRecorders(options);
|
|
25225
25347
|
await this.recorder.startAll();
|
|
25226
25348
|
await this.repository.save(this.proctoringSession);
|
|
25227
25349
|
trackers.registerStart(this.proctoringId, true, "");
|
|
25228
|
-
startResponse.cameraStream = allRecorders.cameraRecorder.cameraStream;
|
|
25229
|
-
if (allRecorders.screenRecorder) {
|
|
25230
|
-
startResponse.screenStream = allRecorders.screenRecorder.screenStream;
|
|
25350
|
+
startResponse.cameraStream = this.allRecorders.cameraRecorder.cameraStream;
|
|
25351
|
+
if (this.allRecorders.screenRecorder) {
|
|
25352
|
+
startResponse.screenStream = this.allRecorders.screenRecorder.screenStream;
|
|
25231
25353
|
}
|
|
25232
25354
|
this.state = "Recording" /* Recording */;
|
|
25233
25355
|
return startResponse;
|
|
25234
25356
|
} catch (error) {
|
|
25235
25357
|
await this.cancel();
|
|
25236
|
-
trackers.registerStart(this.proctoringId, false,
|
|
25358
|
+
trackers.registerStart(this.proctoringId, false, `Token: ${this.context.token}
|
|
25359
|
+
Error: ` + error);
|
|
25237
25360
|
this.state = "Stop" /* Stop */;
|
|
25238
25361
|
throw error;
|
|
25239
25362
|
}
|
|
@@ -25255,13 +25378,13 @@ var Proctoring = class {
|
|
|
25255
25378
|
let uploader;
|
|
25256
25379
|
let uploaderServices;
|
|
25257
25380
|
if (versionVerify() !== "1.0.0.0") {
|
|
25258
|
-
uploader = new ProctoringUploader(this.proctoringSession, [
|
|
25381
|
+
uploader = new ProctoringUploader(this.proctoringSession, this.proctoringId, [
|
|
25259
25382
|
new DownloadService(this.proctoringId)
|
|
25260
25383
|
]);
|
|
25261
25384
|
uploaderServices = "Download";
|
|
25262
25385
|
this.serviceType = "Download" /* Download */;
|
|
25263
25386
|
} else {
|
|
25264
|
-
uploader = new ProctoringUploader(this.proctoringSession, [
|
|
25387
|
+
uploader = new ProctoringUploader(this.proctoringSession, this.proctoringId, [
|
|
25265
25388
|
new AzureUploadService(this.proctoringId, this.backend),
|
|
25266
25389
|
new AwsUploadService(this.proctoringId, this.backend),
|
|
25267
25390
|
new DownloadService(this.proctoringId)
|
|
@@ -25279,11 +25402,11 @@ var Proctoring = class {
|
|
|
25279
25402
|
}
|
|
25280
25403
|
if (!extensionSuccess || !this.extension.hasExtension) {
|
|
25281
25404
|
await uploader.upload(this.context.token, options.onProgress).catch(async (error) => {
|
|
25282
|
-
trackers.
|
|
25405
|
+
trackers.registerUpload(this.proctoringSession.id, false, `upload error: ${error}
|
|
25283
25406
|
|
|
25284
25407
|
Upload Services: ${uploaderServices}`, this.serviceType);
|
|
25285
25408
|
if (versionVerify() !== "1.0.0.0") {
|
|
25286
|
-
uploader = new ProctoringUploader(this.proctoringSession, [
|
|
25409
|
+
uploader = new ProctoringUploader(this.proctoringSession, this.proctoringId, [
|
|
25287
25410
|
new AzureUploadService(this.proctoringId, this.backend),
|
|
25288
25411
|
new AwsUploadService(this.proctoringId, this.backend),
|
|
25289
25412
|
new DownloadService(this.proctoringId)
|
|
@@ -25291,14 +25414,14 @@ Upload Services: ${uploaderServices}`, this.serviceType);
|
|
|
25291
25414
|
uploaderServices = "Azure, AWS, Download";
|
|
25292
25415
|
this.serviceType = "Upload" /* Upload */;
|
|
25293
25416
|
await uploader.upload(this.context.token, options.onProgress).catch((error2) => {
|
|
25294
|
-
trackers.
|
|
25417
|
+
trackers.registerUpload(this.proctoringSession.id, false, `upload backup error: ${error2}
|
|
25295
25418
|
|
|
25296
25419
|
Upload Services: ${uploaderServices}
|
|
25297
25420
|
Upload backup for Safe Browser`, this.serviceType);
|
|
25298
25421
|
});
|
|
25299
25422
|
}
|
|
25300
25423
|
});
|
|
25301
|
-
trackers.
|
|
25424
|
+
trackers.registerUpload(this.proctoringSession.id, true, `upload success
|
|
25302
25425
|
|
|
25303
25426
|
Upload Services: ${uploaderServices}`, this.serviceType);
|
|
25304
25427
|
}
|
|
@@ -25351,31 +25474,28 @@ Upload Services: ${uploaderServices}`, this.serviceType);
|
|
|
25351
25474
|
await this.repository.save(this.proctoringSession);
|
|
25352
25475
|
this.state = "Paused" /* Paused */;
|
|
25353
25476
|
}
|
|
25354
|
-
async resume(
|
|
25355
|
-
width: 640,
|
|
25356
|
-
height: 480
|
|
25357
|
-
}) {
|
|
25477
|
+
async resume() {
|
|
25358
25478
|
var _a2;
|
|
25359
25479
|
if (this.state != "Paused" /* Paused */) {
|
|
25360
25480
|
throw PROCTORING_NOT_STARTED;
|
|
25361
25481
|
}
|
|
25362
25482
|
await this.verifyMultipleMonitors(this.sessionOptions);
|
|
25363
|
-
const allRecorders = this.createRecorders(
|
|
25483
|
+
const allRecorders = this.createRecorders(this.sessionOptions);
|
|
25364
25484
|
await this.recorder.startAll();
|
|
25365
25485
|
this.proctoringSession.recordings = [];
|
|
25366
25486
|
await this.repository.save(this.proctoringSession);
|
|
25367
25487
|
this.state = "Recording" /* Recording */;
|
|
25368
25488
|
return {
|
|
25369
|
-
cameraStream: allRecorders.cameraRecorder.cameraStream,
|
|
25370
|
-
_screenStream: (_a2 = allRecorders.screenRecorder) == null ? void 0 : _a2.screenStream
|
|
25489
|
+
cameraStream: this.allRecorders.cameraRecorder.cameraStream,
|
|
25490
|
+
_screenStream: (_a2 = this.allRecorders.screenRecorder) == null ? void 0 : _a2.screenStream
|
|
25371
25491
|
};
|
|
25372
25492
|
}
|
|
25373
25493
|
};
|
|
25374
25494
|
|
|
25375
25495
|
// src/proctoring/useProctoring.ts
|
|
25376
|
-
function useProctoring(proctoringOptions,
|
|
25496
|
+
function useProctoring(proctoringOptions, enviromentConfig = "prod" /* prod */) {
|
|
25377
25497
|
const proctoring = new Proctoring({
|
|
25378
|
-
type:
|
|
25498
|
+
type: enviromentConfig,
|
|
25379
25499
|
clientId: proctoringOptions.clientId,
|
|
25380
25500
|
examId: proctoringOptions.examId,
|
|
25381
25501
|
token: proctoringOptions.token
|
package/extension/extension.d.ts
CHANGED