easyproctor 0.0.76 → 0.0.77

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.76
222
+ ## Release Note V 0.0.77
223
223
 
224
- - Add 100% progress no download
224
+ - Correct previous download logic
225
225
 
226
226
  ## License
227
227
 
package/esm/index.js CHANGED
@@ -28960,7 +28960,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
28960
28960
  throw PROCTORING_ALREADY_STARTED;
28961
28961
  lastClick = Date.now();
28962
28962
  const { cameraId, microphoneId, allowOnlyFirstMonitor = true, allowMultipleMonitors = false, captureScreen = true, proctoringType } = options;
28963
- previousDownload = !options.previousDownload;
28963
+ previousDownload = !!options.previousDownload;
28964
28964
  try {
28965
28965
  await initConfig();
28966
28966
  } catch (err) {
package/index.js CHANGED
@@ -40481,7 +40481,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
40481
40481
  throw PROCTORING_ALREADY_STARTED;
40482
40482
  lastClick = Date.now();
40483
40483
  const { cameraId, microphoneId, allowOnlyFirstMonitor = true, allowMultipleMonitors = false, captureScreen = true, proctoringType } = options;
40484
- previousDownload = !options.previousDownload;
40484
+ previousDownload = !!options.previousDownload;
40485
40485
  try {
40486
40486
  await initConfig();
40487
40487
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyproctor",
3
- "version": "0.0.76",
3
+ "version": "0.0.77",
4
4
  "description": "Modulo web de gravação do EasyProctor",
5
5
  "main": "./index.js",
6
6
  "module": "./esm/index.js",
@@ -16,7 +16,8 @@
16
16
  },
17
17
  "scripts": {
18
18
  "build": "node scripts/build.js && tsc",
19
- "dev": "node scripts/serve.js -w"
19
+ "dev": "node scripts/serve.js -w",
20
+ "publish": "npm publish ./dist"
20
21
  },
21
22
  "author": "Igor Dantas",
22
23
  "license": "ISC",
@@ -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)}),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);})();
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.