easyproctor 0.0.82 → 0.0.83

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 CHANGED
@@ -219,9 +219,10 @@ const {
219
219
  });
220
220
  ```
221
221
 
222
- ## Release Note V 0.0.82
222
+ ## Release Note V 0.0.83
223
223
 
224
- - Mudança de verificação do safe browser
224
+ - Download do exame sem internet
225
+ - Adicionado trackers para verificar o fluxo e os arquivos
225
226
 
226
227
  ## License
227
228
 
package/esm/index.js CHANGED
@@ -22459,7 +22459,9 @@ var eventNames = {
22459
22459
  START: "start",
22460
22460
  FINISH: "finish",
22461
22461
  ERROR: "error",
22462
- UPLOAD_VIDEO: "upload_video"
22462
+ UPLOAD_VIDEO: "upload_video",
22463
+ START_RECORD: "start_record",
22464
+ FILE: "file"
22463
22465
  };
22464
22466
  var trackError = (exception) => insights.trackException({ exception });
22465
22467
  var registerCustomEvent = (eventName, properties) => insights.trackEvent({ name: eventName, properties });
@@ -22470,7 +22472,8 @@ var trackers = {
22470
22472
  registerStart: (proctoringId, success, description) => registerCustomEvent(eventNames.START, { proctoringId, success, description }),
22471
22473
  registerFinish: (proctoringId, success, description) => registerCustomEvent(eventNames.FINISH, { proctoringId, success, description }),
22472
22474
  registerError: (proctoringId, description) => registerCustomEvent(eventNames.ERROR, { proctoringId, description }),
22473
- registerUploadVideo: (proctoringId, success, description, uploadTime) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, success, description, uploadTime })
22475
+ registerUploadVideo: (proctoringId, success, description, uploadTime) => registerCustomEvent(eventNames.UPLOAD_VIDEO, { proctoringId, success, description, uploadTime }),
22476
+ registerRecord: (proctoringId, success, description) => registerCustomEvent(eventNames.START_RECORD, { proctoringId, success, description })
22474
22477
  };
22475
22478
 
22476
22479
  // node_modules/axios/lib/helpers/bind.js
@@ -24256,7 +24259,6 @@ var axios_default2 = axios_default;
24256
24259
  // src/modules/http.ts
24257
24260
  var baseUrl = "https://proctoring-api.easyproctor.tech/api";
24258
24261
  async function setBaseUrl(homol) {
24259
- console.log("homol -> ", homol);
24260
24262
  if (homol)
24261
24263
  baseUrl = "https://proctoring-api-hml.easyproctor.tech/api";
24262
24264
  }
@@ -24309,9 +24311,6 @@ async function setConfiguration(_account, _cointainerName, _sas) {
24309
24311
  containerName = _cointainerName;
24310
24312
  sas = _sas;
24311
24313
  blobServiceClient = new BlobServiceClient(`https://${account}.blob.core.windows.net${sas}`);
24312
- console.log(account);
24313
- console.log(containerName);
24314
- console.log(sas);
24315
24314
  }
24316
24315
  function sendError(proctoringId) {
24317
24316
  trackers.registerError(proctoringId, message);
@@ -24589,16 +24588,33 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24589
24588
  try {
24590
24589
  let _screenStream = void 0;
24591
24590
  if (captureScreen) {
24592
- const { screenStream, stopScreenRecorder } = await startScreenCapture(screenBuffer, {
24593
- allowOnlyFirstMonitor,
24594
- onStopSharingScreenCallback: () => onStopSharingScreenCallback && onStopSharingScreenCallback()
24595
- });
24596
- cancelScreenCapture = stopScreenRecorder;
24597
- _screenStream = screenStream;
24591
+ try {
24592
+ const { screenStream, stopScreenRecorder } = await startScreenCapture(screenBuffer, {
24593
+ allowOnlyFirstMonitor,
24594
+ onStopSharingScreenCallback: () => onStopSharingScreenCallback && onStopSharingScreenCallback()
24595
+ });
24596
+ cancelScreenCapture = stopScreenRecorder;
24597
+ trackers.registerRecord(proctoringId, true, `Start Screen Recorder`);
24598
+ _screenStream = screenStream;
24599
+ } catch (e) {
24600
+ trackers.registerRecord(proctoringId, false, `Start Screen Recorder Error: ${e}`);
24601
+ }
24602
+ }
24603
+ let cameraStream = new MediaStream();
24604
+ try {
24605
+ const cameraCaptureResponse = await startCameraCapture(cameraBuffer, { cameraId, microphoneId }, videoOptions);
24606
+ cameraStream = cameraCaptureResponse.cameraStream;
24607
+ cancelCameraCapture = await cameraCaptureResponse.stopCameraRecording;
24608
+ trackers.registerRecord(proctoringId, true, `Start Camera Recorder`);
24609
+ } catch (e) {
24610
+ trackers.registerRecord(proctoringId, false, `Start Camera Recorder Error: ${e}`);
24611
+ }
24612
+ try {
24613
+ startAudio();
24614
+ trackers.registerRecord(proctoringId, true, `Start Audio Recorder`);
24615
+ } catch (e) {
24616
+ trackers.registerRecord(proctoringId, false, `Start Audio Recorder Error: ${e}`);
24598
24617
  }
24599
- const { cameraStream, stopCameraRecording } = await startCameraCapture(cameraBuffer, { cameraId, microphoneId }, videoOptions);
24600
- startAudio();
24601
- cancelCameraCapture = await stopCameraRecording;
24602
24618
  if (captureScreen) {
24603
24619
  cancelCallback = async function() {
24604
24620
  await Promise.all([cancelCameraCapture(), cancelScreenCapture()]);
@@ -24665,11 +24681,34 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24665
24681
  const cameraFileName = `EP_${proctoringId}_camera_${index}.webm`;
24666
24682
  const audioFileName = `EP_${proctoringId}_audio_${index}.mp3`;
24667
24683
  const screenFIleName = `EP_${proctoringId}_screen_${index}.webm`;
24668
- const cameraFile = new File(finalCameraBuffer, cameraFileName, { type: "video/webm" });
24669
- const audioFile = new File(finalAudioBuffer, audioFileName, { type: blob.type });
24684
+ let cameraFile = new File([], "null");
24685
+ let audioFile = new File([], "null");
24670
24686
  let screenFile;
24687
+ try {
24688
+ cameraFile = new File(finalCameraBuffer, cameraFileName, { type: "video/webm" });
24689
+ trackers.registerRecord(proctoringId, true, `Camera Recorder File
24690
+ name: ${cameraFile.name}
24691
+ size: ${cameraFile.size}`);
24692
+ } catch (e) {
24693
+ trackers.registerRecord(proctoringId, false, `Camera Recorder File Error: ${e}`);
24694
+ }
24695
+ try {
24696
+ audioFile = new File(finalAudioBuffer, audioFileName, { type: blob.type });
24697
+ trackers.registerRecord(proctoringId, true, `Audio Recorder File
24698
+ name: ${audioFile.name}
24699
+ size: ${audioFile.size}`);
24700
+ } catch (e) {
24701
+ trackers.registerRecord(proctoringId, false, `Audio Recorder File Error: ${e}`);
24702
+ }
24671
24703
  if (finalScreenBuffer.length != 0) {
24672
- screenFile = new File(finalScreenBuffer, screenFIleName, { type: "video/webm" });
24704
+ try {
24705
+ screenFile = new File(finalScreenBuffer, screenFIleName, { type: "video/webm" });
24706
+ trackers.registerRecord(proctoringId, true, `Screen Recorder File
24707
+ name: ${screenFile.name}
24708
+ size: ${screenFile.size}`);
24709
+ } catch (e) {
24710
+ trackers.registerRecord(proctoringId, false, `Screen Recorder File Error: ${e}`);
24711
+ }
24673
24712
  }
24674
24713
  return { cameraFile, audioFile, screenFile };
24675
24714
  };
@@ -24685,7 +24724,6 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24685
24724
  init(config.insights);
24686
24725
  }
24687
24726
  async function start(options = defaultProctoringOptions, videoOptions = { width: 640, height: 480 }) {
24688
- console.log(lastClick);
24689
24727
  if (lastClick >= Date.now() - delay)
24690
24728
  throw PROCTORING_ALREADY_STARTED;
24691
24729
  lastClick = Date.now();
@@ -24737,7 +24775,6 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24737
24775
  sessions: []
24738
24776
  });
24739
24777
  proctoringId = resp.id;
24740
- console.log("proctoringId", proctoringId);
24741
24778
  trackers.registerStart(proctoringId, true, "");
24742
24779
  _addListeners(captureScreen);
24743
24780
  return resp;
@@ -24760,11 +24797,9 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24760
24797
  checkPermissions();
24761
24798
  startAudio();
24762
24799
  const { cameraStream, _screenStream } = await _startCapture({ cameraId, microphoneId, allowOnlyFirstMonitor, captureScreen, proctoringType }, videoOptions);
24763
- console.log("Recording...");
24764
24800
  return { cameraStream, _screenStream };
24765
24801
  }
24766
24802
  async function closeCheckDevices() {
24767
- console.log("Stoping record...");
24768
24803
  onStopSharingScreenCallback = void 0;
24769
24804
  if (cancelCallback) {
24770
24805
  await cancelCallback();
@@ -24777,7 +24812,6 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24777
24812
  screenBuffer = [];
24778
24813
  alerts = [];
24779
24814
  cancelCallback = null;
24780
- console.log("Finish record");
24781
24815
  return { cameraBlob, screenBlob };
24782
24816
  }
24783
24817
  async function pause() {
@@ -24853,157 +24887,214 @@ function useProctoring(proctoringOptions, homolConfig = false) {
24853
24887
  trackers.registerError(proctoringId, "N\xE3o foi poss\xEDvel requisitar a data do servidor!" + e);
24854
24888
  }
24855
24889
  proctoringId = record.id;
24856
- console.log("procotoringId resume", proctoringId);
24857
24890
  startDate = serverTime ? new Date(serverTime.toString()) : new Date();
24858
24891
  startTime = startDate.getTime();
24859
24892
  return { cameraStream, _screenStream };
24860
24893
  }
24861
24894
  async function finish(options = {}) {
24895
+ let step = 0;
24862
24896
  const { onProgress } = options;
24863
24897
  const record = await getRecord("exams");
24864
24898
  if (!record) {
24865
24899
  trackers.registerError(proctoringId, "Proctoring n\xE3o iniciado!");
24866
24900
  throw PROCTORING_NOT_STARTED;
24867
24901
  }
24868
- try {
24869
- if (azureBlobUrl == "") {
24870
- setBaseUrl(homolConfig);
24871
- config = await makeRequest({
24872
- url: `/AzureKey`,
24873
- method: "GET",
24874
- jwt: proctoringOptions.token
24875
- });
24876
- setConfiguration(config.account, config.containerName, config.sas);
24877
- azureBlobUrl = config.azureBlobUrl;
24878
- }
24879
- } catch (error) {
24880
- trackers.registerError(proctoringId, "Erro ao buscar credenciais!");
24881
- throw "Erro ao buscar credenciais!";
24882
- }
24883
- onStopSharingScreenCallback = void 0;
24884
24902
  let serverTime;
24885
- console.log("cancelCallback: ", cancelCallback);
24886
- if (cancelCallback) {
24887
- await cancelCallback();
24888
- try {
24889
- serverTime = await makeRequest({
24890
- url: `/Proctoring/server-hour`,
24891
- method: "GET",
24892
- jwt: proctoringOptions.token
24893
- });
24894
- } catch (e) {
24895
- trackers.registerError(proctoringId, "N\xE3o foi poss\xEDvel requisitar a data do servidor!" + e);
24896
- }
24897
- const { cameraFile, audioFile, screenFile } = await _closeSession(record.sessions.length);
24898
- record.sessions.push({
24899
- alerts,
24900
- cameraFile,
24901
- audioFile,
24902
- screenFile,
24903
- id: "" + record.sessions.length + 1,
24904
- start: startDate ? startDate.toISOString() : (serverTime ? new Date(serverTime.toString()) : new Date()).toISOString(),
24905
- end: serverTime ? new Date(serverTime.toString()).toISOString() : new Date().toISOString()
24906
- });
24907
- }
24908
- if (record.sessions.length == 0) {
24909
- trackers.registerError(proctoringId, "Nenhum v\xEDdeo gravado!");
24910
- throw NO_VIDEOS_RECORDED;
24911
- }
24912
- const time = serverTime ? new Date(serverTime.toString()).toISOString() : new Date().toISOString();
24903
+ let cameraFile = new File([], "null");
24904
+ let audioFile = new File([], "null");
24905
+ let screenFile;
24913
24906
  const allFiles = [];
24914
- record.sessions.forEach((session) => {
24915
- if (session.cameraFile)
24916
- allFiles.push(session.cameraFile);
24917
- if (session.audioFile)
24918
- allFiles.push(session.audioFile);
24919
- if (session.screenFile != void 0)
24920
- allFiles.push(session.screenFile);
24921
- });
24922
- const totalFiles = allFiles.length;
24923
- const uploadProgress = Array(totalFiles).fill(0);
24924
- const handleOnProgress = () => {
24925
- onProgress && onProgress(uploadProgress.reduce((acc, el) => acc += el, 0) / totalFiles);
24926
- };
24927
- _removeListeners();
24928
- const sessionsDto = [];
24929
- record.sessions.forEach((session) => {
24930
- sessionsDto.push({
24931
- alerts: session.alerts,
24932
- id: session.id,
24933
- end: session.end,
24934
- start: session.start,
24935
- videoCameraUrl: session.cameraFile.name,
24936
- audioCameraUrl: session.audioFile.name,
24937
- videoScreenUrl: session.screenFile ? session.screenFile.name : ""
24938
- });
24939
- });
24940
24907
  try {
24941
- await makeRequest({
24942
- url: "/proctoring/save-screen",
24943
- method: "POST",
24944
- jwt: proctoringOptions.token,
24945
- body: {
24946
- proctoringId,
24947
- alerts: [...sessionsDto[sessionsDto.length - 1].alerts]
24908
+ try {
24909
+ if (azureBlobUrl == "") {
24910
+ setBaseUrl(homolConfig);
24911
+ config = await makeRequest({
24912
+ url: `/AzureKey`,
24913
+ method: "GET",
24914
+ jwt: proctoringOptions.token
24915
+ });
24916
+ setConfiguration(config.account, config.containerName, config.sas);
24917
+ azureBlobUrl = config.azureBlobUrl;
24948
24918
  }
24919
+ } catch (error) {
24920
+ trackers.registerError(proctoringId, "Erro ao buscar credenciais!");
24921
+ throw "Erro ao buscar credenciais!";
24922
+ }
24923
+ onStopSharingScreenCallback = void 0;
24924
+ if (cancelCallback) {
24925
+ await cancelCallback();
24926
+ step++;
24927
+ try {
24928
+ serverTime = await makeRequest({
24929
+ url: `/Proctoring/server-hour`,
24930
+ method: "GET",
24931
+ jwt: proctoringOptions.token
24932
+ });
24933
+ } catch (e) {
24934
+ trackers.registerError(proctoringId, "N\xE3o foi poss\xEDvel requisitar a data do servidor!" + e);
24935
+ throw "N\xE3o foi poss\xEDvel requisitar a data do servidor! -> " + e;
24936
+ }
24937
+ await closeSession();
24938
+ step++;
24939
+ record.sessions.push({
24940
+ alerts,
24941
+ cameraFile,
24942
+ audioFile,
24943
+ screenFile,
24944
+ id: "" + record.sessions.length + 1,
24945
+ start: startDate ? startDate.toISOString() : (serverTime ? new Date(serverTime.toString()) : new Date()).toISOString(),
24946
+ end: serverTime ? new Date(serverTime.toString()).toISOString() : new Date().toISOString()
24947
+ });
24948
+ step++;
24949
+ }
24950
+ if (record.sessions.length == 0) {
24951
+ trackers.registerError(proctoringId, "Nenhum v\xEDdeo gravado!");
24952
+ throw NO_VIDEOS_RECORDED;
24953
+ }
24954
+ const time = serverTime ? new Date(serverTime.toString()).toISOString() : new Date().toISOString();
24955
+ pushAllFiles();
24956
+ step++;
24957
+ const totalFiles = allFiles.length;
24958
+ const uploadProgress = Array(totalFiles).fill(0);
24959
+ const handleOnProgress = () => {
24960
+ onProgress && onProgress(uploadProgress.reduce((acc, el) => acc += el, 0) / totalFiles);
24961
+ };
24962
+ const sessionsDto = [];
24963
+ record.sessions.forEach((session) => {
24964
+ sessionsDto.push({
24965
+ alerts: session.alerts,
24966
+ id: session.id,
24967
+ end: session.end,
24968
+ start: session.start,
24969
+ videoCameraUrl: session.cameraFile.name,
24970
+ audioCameraUrl: session.audioFile.name,
24971
+ videoScreenUrl: session.screenFile ? session.screenFile.name : ""
24972
+ });
24949
24973
  });
24950
- } catch (error) {
24951
- trackers.registerFinish(proctoringId, false, "save-screen error: " + error);
24952
- }
24953
- try {
24954
- await makeRequest({
24955
- url: `/proctoring/finish/${proctoringOptions.examId}`,
24956
- method: "POST",
24957
- body: {
24958
- endDate: time,
24959
- videoCameraUrl: `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].videoCameraUrl,
24960
- audioCameraUrl: `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].audioCameraUrl,
24961
- videoScreenUrl: _captureScreen ? `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].videoScreenUrl : ""
24962
- },
24963
- jwt: proctoringOptions.token
24964
- });
24965
- trackers.registerFinish(proctoringId, true, "");
24966
- } catch (error) {
24967
- trackers.registerFinish(proctoringId, false, "finish error: " + error);
24968
- }
24969
- if (versionVerify() !== "1.0.0.0") {
24970
24974
  try {
24971
- trackers.registerUploadVideo(proctoringId, true, "Starting download");
24972
- allFiles.map((c) => {
24973
- download2(c);
24975
+ await makeRequest({
24976
+ url: "/proctoring/save-screen",
24977
+ method: "POST",
24978
+ jwt: proctoringOptions.token,
24979
+ body: {
24980
+ proctoringId,
24981
+ alerts: [...sessionsDto[sessionsDto.length - 1].alerts]
24982
+ }
24974
24983
  });
24975
- onProgress && onProgress(Math.round(100));
24976
- trackers.registerUploadVideo(proctoringId, true, "Finish download");
24977
24984
  } catch (error) {
24978
- console.log("Enviando tracker de error");
24979
- trackers.registerUploadVideo(proctoringId, false, "erro no download " + error);
24985
+ trackers.registerFinish(proctoringId, false, "save-screen error: " + error);
24986
+ throw "save-screen error: " + error;
24980
24987
  }
24981
- } else {
24982
24988
  try {
24983
- trackers.registerUploadVideo(proctoringId, true, "Starting upload");
24984
- const timeBefore = performance.now();
24985
- const uploadPromises = allFiles.map((c, i) => {
24986
- return upload({
24987
- file: c,
24988
- onProgress: (progress) => {
24989
- uploadProgress[i] = progress;
24990
- handleOnProgress();
24991
- }
24992
- }, proctoringId, config, proctoringOptions.token);
24989
+ await makeRequest({
24990
+ url: `/proctoring/finish/${proctoringOptions.examId}`,
24991
+ method: "POST",
24992
+ body: {
24993
+ endDate: time,
24994
+ videoCameraUrl: `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].videoCameraUrl,
24995
+ audioCameraUrl: `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].audioCameraUrl,
24996
+ videoScreenUrl: _captureScreen ? `${azureBlobUrl}/` + sessionsDto[sessionsDto.length - 1].videoScreenUrl : ""
24997
+ },
24998
+ jwt: proctoringOptions.token
24993
24999
  });
24994
- const timeAfter = performance.now();
24995
- await Promise.all(uploadPromises);
24996
- const executionTime = timeAfter - timeBefore;
24997
- trackers.registerUploadVideo(proctoringId, true, "Finish upload", executionTime);
25000
+ trackers.registerFinish(proctoringId, true, "");
24998
25001
  } catch (error) {
24999
- console.log("Enviando tracker de error");
25000
- trackers.registerUploadVideo(proctoringId, false, "" + error);
25002
+ trackers.registerFinish(proctoringId, false, "finish error: " + error);
25001
25003
  }
25004
+ checkVersionAndDownload();
25005
+ if (versionVerify() === "1.0.0.0") {
25006
+ try {
25007
+ trackers.registerUploadVideo(proctoringId, true, "Starting upload");
25008
+ const timeBefore = performance.now();
25009
+ const uploadPromises = allFiles.map((c, i) => {
25010
+ trackers.registerUploadVideo(proctoringId, true, `file: ${c.name}, size ${c.size}`);
25011
+ return upload({
25012
+ file: c,
25013
+ onProgress: (progress) => {
25014
+ uploadProgress[i] = progress;
25015
+ handleOnProgress();
25016
+ }
25017
+ }, proctoringId, config, proctoringOptions.token);
25018
+ });
25019
+ const timeAfter = performance.now();
25020
+ await Promise.all(uploadPromises);
25021
+ const executionTime = timeAfter - timeBefore;
25022
+ trackers.registerUploadVideo(proctoringId, true, "Finish upload", executionTime);
25023
+ } catch (error) {
25024
+ trackers.registerUploadVideo(proctoringId, false, "" + error);
25025
+ }
25026
+ }
25027
+ } catch (e) {
25028
+ console.log("Erro no fluxo de finish, iniciando download de backup\nError: " + e);
25029
+ trackers.registerError(proctoringId, "Erro no fluxo de finish, iniciando download de backup\n" + e);
25030
+ switch (step) {
25031
+ case 0:
25032
+ if (cancelCallback) {
25033
+ await cancelCallback();
25034
+ }
25035
+ case 1: {
25036
+ await closeSession();
25037
+ }
25038
+ case 2:
25039
+ pushRecord();
25040
+ case 3: {
25041
+ pushAllFiles();
25042
+ }
25043
+ case 4: {
25044
+ checkVersionAndDownload();
25045
+ }
25046
+ }
25047
+ console.log("Enviando tracker de error");
25048
+ trackers.registerUploadVideo(proctoringId, false, "Download feito como backup no Catch");
25002
25049
  }
25003
25050
  cameraBuffer = [];
25004
25051
  screenBuffer = [];
25005
25052
  alerts = [];
25006
25053
  cancelCallback = null;
25054
+ async function closeSession() {
25055
+ const closeSessionReturn = await _closeSession(record.sessions.length);
25056
+ cameraFile = closeSessionReturn.cameraFile;
25057
+ audioFile = closeSessionReturn.audioFile;
25058
+ screenFile = closeSessionReturn.screenFile;
25059
+ }
25060
+ function pushRecord() {
25061
+ record.sessions.push({
25062
+ alerts,
25063
+ cameraFile,
25064
+ audioFile,
25065
+ screenFile,
25066
+ id: "" + record.sessions.length + 1,
25067
+ start: startDate ? startDate.toISOString() : new Date().toISOString(),
25068
+ end: new Date().toISOString()
25069
+ });
25070
+ _removeListeners();
25071
+ }
25072
+ function pushAllFiles() {
25073
+ record.sessions.forEach((session) => {
25074
+ if (session.cameraFile)
25075
+ allFiles.push(session.cameraFile);
25076
+ if (session.audioFile)
25077
+ allFiles.push(session.audioFile);
25078
+ if (session.screenFile != void 0)
25079
+ allFiles.push(session.screenFile);
25080
+ });
25081
+ }
25082
+ function checkVersionAndDownload() {
25083
+ if (versionVerify() !== "1.0.0.0") {
25084
+ try {
25085
+ trackers.registerUploadVideo(proctoringId, true, "Starting download");
25086
+ allFiles.map((c) => {
25087
+ trackers.registerUploadVideo(proctoringId, true, `file: ${c.name}, size ${c.size}`);
25088
+ download2(c);
25089
+ });
25090
+ onProgress && onProgress(Math.round(100));
25091
+ trackers.registerUploadVideo(proctoringId, true, "Finish download");
25092
+ } catch (error) {
25093
+ console.log("Enviando tracker de error");
25094
+ trackers.registerUploadVideo(proctoringId, false, "erro no download " + error);
25095
+ }
25096
+ }
25097
+ }
25007
25098
  }
25008
25099
  function onFocus(cb) {
25009
25100
  onFocusCallback = cb;