easyproctor 0.0.75 → 0.0.76

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,9 @@ const {
219
219
  });
220
220
  ```
221
221
 
222
- ## Release Note V 0.0.75
222
+ ## Release Note V 0.0.76
223
223
 
224
- - Mudança de fluxo de upload e download para safeBrowser e não safeBrowser
224
+ - Add 100% progress no download
225
225
 
226
226
  ## License
227
227
 
package/esm/index.js CHANGED
@@ -29243,6 +29243,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
29243
29243
  allFiles.map((c) => {
29244
29244
  download2(c);
29245
29245
  });
29246
+ onProgress && onProgress(Math.round(100));
29246
29247
  trackers.registerUploadVideo(proctoringId, true, "Finish download");
29247
29248
  } catch (error) {
29248
29249
  console.log("Enviando tracker de error");
package/index.js CHANGED
@@ -40764,6 +40764,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
40764
40764
  allFiles.map((c) => {
40765
40765
  download2(c);
40766
40766
  });
40767
+ onProgress && onProgress(Math.round(100));
40767
40768
  trackers.registerUploadVideo(proctoringId, true, "Finish download");
40768
40769
  } catch (error) {
40769
40770
  console.log("Enviando tracker de error");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyproctor",
3
- "version": "0.0.75",
3
+ "version": "0.0.76",
4
4
  "description": "Modulo web de gravação do EasyProctor",
5
5
  "main": "./index.js",
6
6
  "module": "./esm/index.js",
@@ -30,7 +30,7 @@ bitsperframe: %d
30
30
  \u2022 Error on AWS upload
31
31
  `,C0+=a;try{xI(r)}catch(n){throw n}throw a}}function xI(r){try{let{file:e,onProgress:t}=r,a=URL.createObjectURL(e),n=document.createElement("a");document.body.appendChild(n),n.style.display="none",n.href=a,n.download=e.name,n.click(),window.URL.revokeObjectURL(a),pI=!1,clearInterval(uI),t&&t(Math.round(100))}catch(e){throw C0+=`
32
32
  \u2022 Error on machine download -> ${r.file.name}
33
- `,e}}async function ug(){let r=await navigator.mediaDevices.enumerateDevices();return{cameras:r.filter(t=>t.kind=="videoinput"&&t.deviceId).map(t=>({label:t.label||"Generic Device",id:t.deviceId})),microphones:r.filter(t=>t.kind=="audioinput"&&t.deviceId).map(t=>({label:t.label||"Generic Device",id:t.deviceId}))}}async function pg(){try{let r={audio:!0,video:!0};return(await navigator.mediaDevices.getUserMedia(r)).getTracks().forEach(t=>{t.stop()}),!0}catch{return!1}}async function cp(){return new Promise((r,e)=>{typeof PresentationRequest>"u"&&r(!1),new PresentationRequest("receiver.html").getAvailability().then(a=>{let n=a.value;a.addEventListener("change",function(){n=a.value}),setTimeout(()=>{r(n)},1e3)}).catch(a=>e(a))})}var yI="EasyProctorPlugin",vI=2;function fg(r){return new Promise((e,t)=>{let a=indexedDB.open(yI,vI);a.onupgradeneeded=()=>{a.result.createObjectStore("exams",{keyPath:"id"})},a.onerror=n=>{console.log(n),t("N\xE3o foi poss\xEDvel inicializar a biblioteca, por favor, entre em contato com o suporte e informe o erro acima")},a.onsuccess=()=>{let s=a.result.transaction(r,"readwrite").objectStore(r);e(s)}})}async function hg(r,e){let t=await fg(r);return new Promise((a,n)=>{let i=t.put(e);i.onsuccess=()=>a(),i.onerror=s=>n(s)})}async function R0(r){let e=await fg(r);return new Promise((t,a)=>{let n=e.getAll();n.onsuccess=()=>{let i=n.result[0];t(i)},n.onerror=i=>a(i)})}async function mp(r){let e=await fg(r);return new Promise((t,a)=>{let n=e.clear();n.onsuccess=()=>t(),n.onerror=i=>a(i)})}document.write('<script src="https://www.webrtc-experiment.com/EBML.js"><\/script>');var xg={cameraId:void 0,microphoneId:void 0,allowMultipleMonitors:!1,allowOnlyFirstMonitor:!0,captureScreen:!0,proctoringType:"IMAGE",insights:"",previousDownload:!1},rc="",wC=!0,An;function gI(r,e=!1){if(["examId","clientId","token"].forEach(N=>{let Y=N;if(!r[Y])throw Gg+": "+Y}),!navigator.mediaDevices.getDisplayMedia||!window.indexedDB)throw Vg;function t(N){let Y=URL.createObjectURL(N),xe=document.createElement("a");document.body.appendChild(xe),xe.style.display="none",xe.href=Y,xe.download=N.name,xe.click(),window.URL.revokeObjectURL(Y)}let a=[],n=[],i="",s=0,o,l=[],c,m,v,u,b=null,y=0,E=20,g;function P(){a=[],n=[],i="",s=0,o=void 0,l=[]}async function T(N,Y={width:640,height:480}){if(!document.body)throw ir.registerError(i,"Script n\xE3o chamado dentro do body!"),jg;if(b!=null)throw ir.registerError(i,D0),D0;let xe=null,Ge=null,{cameraId:Q,microphoneId:he,allowOnlyFirstMonitor:Oe,captureScreen:ze}=N;wC=ze;try{let qe;if(ze){let{screenStream:ut,stopScreenRecorder:Nt}=await Hp(n,{allowOnlyFirstMonitor:Oe,onStopSharingScreenCallback:()=>u&&u()});Ge=Nt,qe=ut}let{cameraStream:Ve,stopCameraRecording:ve}=await Ap(a,{cameraId:Q,microphoneId:he},Y);return Se(),xe=await ve,ze?b=async function(){await Promise.all([xe(),Ge()]),b=null}:b=async function(){await Promise.all([xe()]),b=null},{_screenStream:qe,cameraStream:Ve,start:et}}catch(qe){throw b=null,Ge&&await Ge(),xe&&await xe(),a=[],n=[],qe}}let V=()=>{Date.now()-s>1e4&&(c&&c(),l.push({begin:Date.now()-s,alert:25,end:0}))},Z=()=>{console.log("Hereeeee"),navigator.mediaDevices.ondevicechange=N=>{m&&m(),console.log("here"),console.log(N),l.push({begin:Date.now()-s,alert:25,end:0})}},ce=()=>{let N=l[l.length-1];N&&(v&&v(),N.end=Date.now()-s)},me=()=>{window.addEventListener("blur",V),window.addEventListener("focus",ce),navigator.mediaDevices.ondevicechange=Z},_e=()=>{window.removeEventListener("blur",V),window.removeEventListener("focus",ce)},we=async N=>{let{buffer:Y,blob:xe}=await $e(),Ge=a,Q=Y,he=n;if(!Ge)throw ir.registerError(i,eo),eo;let Oe=`EP_${i}_camera_${N}.webm`,ze=`EP_${i}_audio_${N}.mp3`,qe=`EP_${i}_screen_${N}.webm`,Ve=new File(Ge,Oe,{type:"video/webm"}),ve=new File(Q,ze,{type:xe.type,lastModified:Date.now()}),ut;return he.length!=0&&(ut=new File(he,qe,{type:"video/webm"})),{cameraFile:Ve,audioFile:ve,screenFile:ut}};async function je(){ng(e),An=await hn({url:"/AzureKey",method:"GET",jwt:r.token}),mg(An.account,An.containerName,An.sas),rc=An.azureBlobUrl,F4(An.insights)}async function et(N=xg,Y={width:640,height:480}){if(console.log(y),y>=Date.now()-E)throw D0;y=Date.now();let{cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q=!0,allowMultipleMonitors:he=!1,captureScreen:Oe=!0,proctoringType:ze}=N;g=!N.previousDownload;try{await je()}catch(Ve){throw ir.registerError(i,"Erro no initConfig!"),b&&b(),Ve}if(!he&&await cp())throw ir.registerError(i,"Multiplas telas detectadas!"),hc;await R0("exams")!=null&&(await mp("exams"),b=null);try{let{cameraStream:Ve,_screenStream:ve}=await T({cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q,captureScreen:Oe,proctoringType:ze},Y),ut;try{ut=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}o=ut?new Date(ut.toString()):new Date,s=o.getTime();let Nt=await hn({url:`/proctoring/start/${r.examId}`,method:"POST",body:{clientId:r.clientId,proctoringType:ze},jwt:r.token});return Nt.cameraStream=Ve,Nt.screenStream=ve,await hg("exams",{id:Nt.id,examId:r.examId,sessions:[]}),i=Nt.id,console.log("proctoringId",i),ir.registerStart(i,!0,""),me(),Nt}catch(Ve){throw b&&b(),ir.registerStart(i,!1,""+Ve),Ve}}async function Se(){let{start:N}=await Ug();N()}async function $e(){let{buffer:N,blob:Y}=await qp();return{buffer:N,blob:Y}}async function it(N=xg,Y={width:640,height:480}){let{cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q=!0,captureScreen:he=!0,proctoringType:Oe="VIDEO"}=N;pg(),Se();let{cameraStream:ze,_screenStream:qe}=await T({cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q,captureScreen:he,proctoringType:Oe},Y);return console.log("Recording..."),{cameraStream:ze,_screenStream:qe}}async function Le(){console.log("Stoping record..."),u=void 0,b&&await b(),_e(),await mp("exams");let N=a,Y=n;return a=[],n=[],l=[],b=null,console.log("Finish record"),{cameraBlob:N,screenBlob:Y}}async function bt(){let N=await R0("exams");if(!b||!N)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;u=void 0,await b();let Y;try{Y=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(he){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+he)}let{cameraFile:xe,audioFile:Ge,screenFile:Q}=await we(N.sessions.length);N.sessions.push({alerts:l,cameraFile:xe,audioFile:Ge,screenFile:Q,id:""+N.sessions.length+1,start:o?o.toISOString():(Y?new Date(Y.toString()):new Date).toISOString(),end:Y?new Date(Y.toString()).toISOString():new Date().toISOString()}),await hg("exams",N),P()}async function dt(N=xg,Y,xe={width:640,height:480}){P();let{cameraId:Ge,microphoneId:Q,allowOnlyFirstMonitor:he=!0,allowMultipleMonitors:Oe=!1,captureScreen:ze=!0,proctoringType:qe}=N;try{await je()}catch(Ie){throw ir.registerError(i,"Erro no initConfig!"),Ie}if(!Oe&&await cp())throw ir.registerError(i,"Multiplas telas detectadas!"),hc;if(b)throw ir.registerError(i,"Proctoring j\xE1 est\xE1 rodando!"),Xg;let Ve=await R0("exams");if(Ve){if(Ve&&Ve.examId!=Y)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo}else throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;let{cameraStream:ve,_screenStream:ut}=await T({cameraId:Ge,microphoneId:Q,allowOnlyFirstMonitor:he,captureScreen:ze,proctoringType:qe},xe),Nt;try{Nt=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}return i=Ve.id,console.log("procotoringId resume",i),o=Nt?new Date(Nt.toString()):new Date,s=o.getTime(),{cameraStream:ve,_screenStream:ut}}async function ct(N={}){let{onProgress:Y}=N,xe=await R0("exams");if(!xe)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;try{rc==""&&(ng(e),An=await hn({url:"/AzureKey",method:"GET",jwt:r.token}),mg(An.account,An.containerName,An.sas),rc=An.azureBlobUrl)}catch{throw ir.registerError(i,"Erro ao buscar credenciais!"),"Erro ao buscar credenciais!"}u=void 0;let Ge;if(console.log("cancelCallback: ",b),b){await b();try{Ge=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}let{cameraFile:ve,audioFile:ut,screenFile:Nt}=await we(xe.sessions.length);xe.sessions.push({alerts:l,cameraFile:ve,audioFile:ut,screenFile:Nt,id:""+xe.sessions.length+1,start:o?o.toISOString():(Ge?new Date(Ge.toString()):new Date).toISOString(),end:Ge?new Date(Ge.toString()).toISOString():new Date().toISOString()})}if(xe.sessions.length==0)throw ir.registerError(i,"Nenhum v\xEDdeo gravado!"),$g;let Q=Ge?new Date(Ge.toString()).toISOString():new Date().toISOString(),he=[];xe.sessions.forEach(ve=>{ve.cameraFile&&he.push(ve.cameraFile),ve.audioFile&&he.push(ve.audioFile),ve.screenFile!=null&&he.push(ve.screenFile)});let Oe=he.length,ze=Array(Oe).fill(0),qe=()=>{Y&&Y(ze.reduce((ve,ut)=>ve+=ut,0)/Oe)};_e();let Ve=[];xe.sessions.forEach(ve=>{Ve.push({alerts:ve.alerts,id:ve.id,end:ve.end,start:ve.start,videoCameraUrl:ve.cameraFile.name,audioCameraUrl:ve.audioFile.name,videoScreenUrl:ve.screenFile?ve.screenFile.name:""})});try{await hn({url:"/proctoring/save-screen",method:"POST",jwt:r.token,body:{proctoringId:i,alerts:[...Ve[Ve.length-1].alerts]}})}catch(ve){ir.registerFinish(i,!1,"save-screen error: "+ve)}try{await hn({url:`/proctoring/finish/${r.examId}`,method:"POST",body:{endDate:Q,videoCameraUrl:`${rc}/`+Ve[Ve.length-1].videoCameraUrl,audioCameraUrl:`${rc}/`+Ve[Ve.length-1].audioCameraUrl,videoScreenUrl:wC?`${rc}/`+Ve[Ve.length-1].videoScreenUrl:""},jwt:r.token}),ir.registerFinish(i,!0,"")}catch(ve){ir.registerFinish(i,!1,"finish error: "+ve)}if(g)try{ir.registerUploadVideo(i,!0,"Starting download"),he.map(ve=>{t(ve)}),ir.registerUploadVideo(i,!0,"Finish download")}catch(ve){console.log("Enviando tracker de error"),ir.registerUploadVideo(i,!1,"erro no download "+ve)}else try{ir.registerUploadVideo(i,!0,"Starting upload");let ve=performance.now(),ut=he.map((Sr,Dr)=>dg({file:Sr,onProgress:Cr=>{ze[Dr]=Cr,qe()}},i,An,r.token)),Nt=performance.now();await Promise.all(ut);let Ie=Nt-ve;Y&&Y(Math.round(100)),ir.registerUploadVideo(i,!0,"Finish upload",Ie)}catch(ve){console.log("Enviando tracker de error"),ir.registerUploadVideo(i,!1,""+ve)}await mp("exams"),a=[],n=[],l=[],b=null}function Pt(N){v=N}function Ne(N){u=N}function Ae(N){c=N}function fe(N){m=N}return{start:et,startAudio:Se,checkDevices:it,finish:ct,finishAudio:$e,closeCheckDevices:Le,pause:bt,resume:dt,onFocus:Pt,onLostFocus:Ae,enumarateDevices:ug,checkPermissions:pg,checkIfhasMultipleMonitors:cp,onStopSharingScreen:Ne}}typeof window<"u"&&(window.useProctoring=gI);})();
33
+ `,e}}async function ug(){let r=await navigator.mediaDevices.enumerateDevices();return{cameras:r.filter(t=>t.kind=="videoinput"&&t.deviceId).map(t=>({label:t.label||"Generic Device",id:t.deviceId})),microphones:r.filter(t=>t.kind=="audioinput"&&t.deviceId).map(t=>({label:t.label||"Generic Device",id:t.deviceId}))}}async function pg(){try{let r={audio:!0,video:!0};return(await navigator.mediaDevices.getUserMedia(r)).getTracks().forEach(t=>{t.stop()}),!0}catch{return!1}}async function cp(){return new Promise((r,e)=>{typeof PresentationRequest>"u"&&r(!1),new PresentationRequest("receiver.html").getAvailability().then(a=>{let n=a.value;a.addEventListener("change",function(){n=a.value}),setTimeout(()=>{r(n)},1e3)}).catch(a=>e(a))})}var yI="EasyProctorPlugin",vI=2;function fg(r){return new Promise((e,t)=>{let a=indexedDB.open(yI,vI);a.onupgradeneeded=()=>{a.result.createObjectStore("exams",{keyPath:"id"})},a.onerror=n=>{console.log(n),t("N\xE3o foi poss\xEDvel inicializar a biblioteca, por favor, entre em contato com o suporte e informe o erro acima")},a.onsuccess=()=>{let s=a.result.transaction(r,"readwrite").objectStore(r);e(s)}})}async function hg(r,e){let t=await fg(r);return new Promise((a,n)=>{let i=t.put(e);i.onsuccess=()=>a(),i.onerror=s=>n(s)})}async function R0(r){let e=await fg(r);return new Promise((t,a)=>{let n=e.getAll();n.onsuccess=()=>{let i=n.result[0];t(i)},n.onerror=i=>a(i)})}async function mp(r){let e=await fg(r);return new Promise((t,a)=>{let n=e.clear();n.onsuccess=()=>t(),n.onerror=i=>a(i)})}document.write('<script src="https://www.webrtc-experiment.com/EBML.js"><\/script>');var xg={cameraId:void 0,microphoneId:void 0,allowMultipleMonitors:!1,allowOnlyFirstMonitor:!0,captureScreen:!0,proctoringType:"IMAGE",insights:"",previousDownload:!1},rc="",wC=!0,An;function gI(r,e=!1){if(["examId","clientId","token"].forEach(N=>{let Y=N;if(!r[Y])throw Gg+": "+Y}),!navigator.mediaDevices.getDisplayMedia||!window.indexedDB)throw Vg;function t(N){let Y=URL.createObjectURL(N),xe=document.createElement("a");document.body.appendChild(xe),xe.style.display="none",xe.href=Y,xe.download=N.name,xe.click(),window.URL.revokeObjectURL(Y)}let a=[],n=[],i="",s=0,o,l=[],c,m,v,u,b=null,y=0,E=20,g;function P(){a=[],n=[],i="",s=0,o=void 0,l=[]}async function T(N,Y={width:640,height:480}){if(!document.body)throw ir.registerError(i,"Script n\xE3o chamado dentro do body!"),jg;if(b!=null)throw ir.registerError(i,D0),D0;let xe=null,Ge=null,{cameraId:Q,microphoneId:he,allowOnlyFirstMonitor:Oe,captureScreen:ze}=N;wC=ze;try{let qe;if(ze){let{screenStream:ut,stopScreenRecorder:Nt}=await Hp(n,{allowOnlyFirstMonitor:Oe,onStopSharingScreenCallback:()=>u&&u()});Ge=Nt,qe=ut}let{cameraStream:Ve,stopCameraRecording:ve}=await Ap(a,{cameraId:Q,microphoneId:he},Y);return Se(),xe=await ve,ze?b=async function(){await Promise.all([xe(),Ge()]),b=null}:b=async function(){await Promise.all([xe()]),b=null},{_screenStream:qe,cameraStream:Ve,start:et}}catch(qe){throw b=null,Ge&&await Ge(),xe&&await xe(),a=[],n=[],qe}}let V=()=>{Date.now()-s>1e4&&(c&&c(),l.push({begin:Date.now()-s,alert:25,end:0}))},Z=()=>{console.log("Hereeeee"),navigator.mediaDevices.ondevicechange=N=>{m&&m(),console.log("here"),console.log(N),l.push({begin:Date.now()-s,alert:25,end:0})}},ce=()=>{let N=l[l.length-1];N&&(v&&v(),N.end=Date.now()-s)},me=()=>{window.addEventListener("blur",V),window.addEventListener("focus",ce),navigator.mediaDevices.ondevicechange=Z},_e=()=>{window.removeEventListener("blur",V),window.removeEventListener("focus",ce)},we=async N=>{let{buffer:Y,blob:xe}=await $e(),Ge=a,Q=Y,he=n;if(!Ge)throw ir.registerError(i,eo),eo;let Oe=`EP_${i}_camera_${N}.webm`,ze=`EP_${i}_audio_${N}.mp3`,qe=`EP_${i}_screen_${N}.webm`,Ve=new File(Ge,Oe,{type:"video/webm"}),ve=new File(Q,ze,{type:xe.type,lastModified:Date.now()}),ut;return he.length!=0&&(ut=new File(he,qe,{type:"video/webm"})),{cameraFile:Ve,audioFile:ve,screenFile:ut}};async function je(){ng(e),An=await hn({url:"/AzureKey",method:"GET",jwt:r.token}),mg(An.account,An.containerName,An.sas),rc=An.azureBlobUrl,F4(An.insights)}async function et(N=xg,Y={width:640,height:480}){if(console.log(y),y>=Date.now()-E)throw D0;y=Date.now();let{cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q=!0,allowMultipleMonitors:he=!1,captureScreen:Oe=!0,proctoringType:ze}=N;g=!N.previousDownload;try{await je()}catch(Ve){throw ir.registerError(i,"Erro no initConfig!"),b&&b(),Ve}if(!he&&await cp())throw ir.registerError(i,"Multiplas telas detectadas!"),hc;await R0("exams")!=null&&(await mp("exams"),b=null);try{let{cameraStream:Ve,_screenStream:ve}=await T({cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q,captureScreen:Oe,proctoringType:ze},Y),ut;try{ut=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}o=ut?new Date(ut.toString()):new Date,s=o.getTime();let Nt=await hn({url:`/proctoring/start/${r.examId}`,method:"POST",body:{clientId:r.clientId,proctoringType:ze},jwt:r.token});return Nt.cameraStream=Ve,Nt.screenStream=ve,await hg("exams",{id:Nt.id,examId:r.examId,sessions:[]}),i=Nt.id,console.log("proctoringId",i),ir.registerStart(i,!0,""),me(),Nt}catch(Ve){throw b&&b(),ir.registerStart(i,!1,""+Ve),Ve}}async function Se(){let{start:N}=await Ug();N()}async function $e(){let{buffer:N,blob:Y}=await qp();return{buffer:N,blob:Y}}async function it(N=xg,Y={width:640,height:480}){let{cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q=!0,captureScreen:he=!0,proctoringType:Oe="VIDEO"}=N;pg(),Se();let{cameraStream:ze,_screenStream:qe}=await T({cameraId:xe,microphoneId:Ge,allowOnlyFirstMonitor:Q,captureScreen:he,proctoringType:Oe},Y);return console.log("Recording..."),{cameraStream:ze,_screenStream:qe}}async function Le(){console.log("Stoping record..."),u=void 0,b&&await b(),_e(),await mp("exams");let N=a,Y=n;return a=[],n=[],l=[],b=null,console.log("Finish record"),{cameraBlob:N,screenBlob:Y}}async function bt(){let N=await R0("exams");if(!b||!N)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;u=void 0,await b();let Y;try{Y=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(he){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+he)}let{cameraFile:xe,audioFile:Ge,screenFile:Q}=await we(N.sessions.length);N.sessions.push({alerts:l,cameraFile:xe,audioFile:Ge,screenFile:Q,id:""+N.sessions.length+1,start:o?o.toISOString():(Y?new Date(Y.toString()):new Date).toISOString(),end:Y?new Date(Y.toString()).toISOString():new Date().toISOString()}),await hg("exams",N),P()}async function dt(N=xg,Y,xe={width:640,height:480}){P();let{cameraId:Ge,microphoneId:Q,allowOnlyFirstMonitor:he=!0,allowMultipleMonitors:Oe=!1,captureScreen:ze=!0,proctoringType:qe}=N;try{await je()}catch(Ie){throw ir.registerError(i,"Erro no initConfig!"),Ie}if(!Oe&&await cp())throw ir.registerError(i,"Multiplas telas detectadas!"),hc;if(b)throw ir.registerError(i,"Proctoring j\xE1 est\xE1 rodando!"),Xg;let Ve=await R0("exams");if(Ve){if(Ve&&Ve.examId!=Y)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo}else throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;let{cameraStream:ve,_screenStream:ut}=await T({cameraId:Ge,microphoneId:Q,allowOnlyFirstMonitor:he,captureScreen:ze,proctoringType:qe},xe),Nt;try{Nt=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}return i=Ve.id,console.log("procotoringId resume",i),o=Nt?new Date(Nt.toString()):new Date,s=o.getTime(),{cameraStream:ve,_screenStream:ut}}async function ct(N={}){let{onProgress:Y}=N,xe=await R0("exams");if(!xe)throw ir.registerError(i,"Proctoring n\xE3o iniciado!"),eo;try{rc==""&&(ng(e),An=await hn({url:"/AzureKey",method:"GET",jwt:r.token}),mg(An.account,An.containerName,An.sas),rc=An.azureBlobUrl)}catch{throw ir.registerError(i,"Erro ao buscar credenciais!"),"Erro ao buscar credenciais!"}u=void 0;let Ge;if(console.log("cancelCallback: ",b),b){await b();try{Ge=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(Ie){ir.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+Ie)}let{cameraFile:ve,audioFile:ut,screenFile:Nt}=await we(xe.sessions.length);xe.sessions.push({alerts:l,cameraFile:ve,audioFile:ut,screenFile:Nt,id:""+xe.sessions.length+1,start:o?o.toISOString():(Ge?new Date(Ge.toString()):new Date).toISOString(),end:Ge?new Date(Ge.toString()).toISOString():new Date().toISOString()})}if(xe.sessions.length==0)throw ir.registerError(i,"Nenhum v\xEDdeo gravado!"),$g;let Q=Ge?new Date(Ge.toString()).toISOString():new Date().toISOString(),he=[];xe.sessions.forEach(ve=>{ve.cameraFile&&he.push(ve.cameraFile),ve.audioFile&&he.push(ve.audioFile),ve.screenFile!=null&&he.push(ve.screenFile)});let Oe=he.length,ze=Array(Oe).fill(0),qe=()=>{Y&&Y(ze.reduce((ve,ut)=>ve+=ut,0)/Oe)};_e();let Ve=[];xe.sessions.forEach(ve=>{Ve.push({alerts:ve.alerts,id:ve.id,end:ve.end,start:ve.start,videoCameraUrl:ve.cameraFile.name,audioCameraUrl:ve.audioFile.name,videoScreenUrl:ve.screenFile?ve.screenFile.name:""})});try{await hn({url:"/proctoring/save-screen",method:"POST",jwt:r.token,body:{proctoringId:i,alerts:[...Ve[Ve.length-1].alerts]}})}catch(ve){ir.registerFinish(i,!1,"save-screen error: "+ve)}try{await hn({url:`/proctoring/finish/${r.examId}`,method:"POST",body:{endDate:Q,videoCameraUrl:`${rc}/`+Ve[Ve.length-1].videoCameraUrl,audioCameraUrl:`${rc}/`+Ve[Ve.length-1].audioCameraUrl,videoScreenUrl:wC?`${rc}/`+Ve[Ve.length-1].videoScreenUrl:""},jwt:r.token}),ir.registerFinish(i,!0,"")}catch(ve){ir.registerFinish(i,!1,"finish error: "+ve)}if(g)try{ir.registerUploadVideo(i,!0,"Starting download"),he.map(ve=>{t(ve)}),Y&&Y(Math.round(100)),ir.registerUploadVideo(i,!0,"Finish download")}catch(ve){console.log("Enviando tracker de error"),ir.registerUploadVideo(i,!1,"erro no download "+ve)}else try{ir.registerUploadVideo(i,!0,"Starting upload");let ve=performance.now(),ut=he.map((Sr,Dr)=>dg({file:Sr,onProgress:Cr=>{ze[Dr]=Cr,qe()}},i,An,r.token)),Nt=performance.now();await Promise.all(ut);let Ie=Nt-ve;Y&&Y(Math.round(100)),ir.registerUploadVideo(i,!0,"Finish upload",Ie)}catch(ve){console.log("Enviando tracker de error"),ir.registerUploadVideo(i,!1,""+ve)}await mp("exams"),a=[],n=[],l=[],b=null}function Pt(N){v=N}function Ne(N){u=N}function Ae(N){c=N}function fe(N){m=N}return{start:et,startAudio:Se,checkDevices:it,finish:ct,finishAudio:$e,closeCheckDevices:Le,pause:bt,resume:dt,onFocus:Pt,onLostFocus:Ae,enumarateDevices:ug,checkPermissions:pg,checkIfhasMultipleMonitors:cp,onStopSharingScreen:Ne}}typeof window<"u"&&(window.useProctoring=gI);})();
34
34
  /*!
35
35
  * Microsoft Dynamic Proto Utility, 1.1.4
36
36
  * Copyright (c) Microsoft and contributors. All rights reserved.