easyproctor 0.0.71 → 0.0.72

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/esm/index.js CHANGED
@@ -29009,7 +29009,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
29009
29009
  return { buffer, blob };
29010
29010
  }
29011
29011
  async function checkDevices(options = defaultProctoringOptions, videoOptions = { width: 640, height: 480 }) {
29012
- const { cameraId, microphoneId, allowOnlyFirstMonitor = true, allowMultipleMonitors = false, captureScreen = true, proctoringType } = options;
29012
+ const { cameraId, microphoneId, allowOnlyFirstMonitor = true, captureScreen = true, proctoringType = "VIDEO" } = options;
29013
29013
  checkPermissions();
29014
29014
  startAudio();
29015
29015
  const { cameraStream, _screenStream } = await _startCapture({ cameraId, microphoneId, allowOnlyFirstMonitor, captureScreen, proctoringType }, videoOptions);
package/index.js CHANGED
@@ -40530,7 +40530,7 @@ function useProctoring(proctoringOptions, homolConfig = false) {
40530
40530
  return { buffer, blob };
40531
40531
  }
40532
40532
  async function checkDevices(options = defaultProctoringOptions, videoOptions = { width: 640, height: 480 }) {
40533
- const { cameraId, microphoneId, allowOnlyFirstMonitor = true, allowMultipleMonitors = false, captureScreen = true, proctoringType } = options;
40533
+ const { cameraId, microphoneId, allowOnlyFirstMonitor = true, captureScreen = true, proctoringType = "VIDEO" } = options;
40534
40534
  checkPermissions();
40535
40535
  startAudio();
40536
40536
  const { cameraStream, _screenStream } = await _startCapture({ cameraId, microphoneId, allowOnlyFirstMonitor, captureScreen, proctoringType }, videoOptions);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyproctor",
3
- "version": "0.0.71",
3
+ "version": "0.0.72",
4
4
  "description": "Modulo web de gravação do EasyProctor",
5
5
  "main": "./index.js",
6
6
  "module": "./esm/index.js",
@@ -48,7 +48,9 @@
48
48
  "crypto-browserify": "^3.12.0",
49
49
  "crypto-js": "^4.1.1",
50
50
  "ebml": "^3.0.0",
51
+ "fs": "^0.0.1-security",
51
52
  "jshashes": "^1.0.8",
53
+ "os": "^0.1.2",
52
54
  "recordrtc": "^5.6.2",
53
55
  "ts-ebml": "^2.0.2"
54
56
  }
@@ -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:""},rc="",wC=!0,An;function gI(r,e=!1){if(["examId","clientId","token"].forEach(Ke=>{let pe=Ke;if(!r[pe])throw Gg+": "+pe}),!navigator.mediaDevices.getDisplayMedia||!window.indexedDB)throw Vg;function t(Ke){let pe=URL.createObjectURL(Ke),ye=document.createElement("a");document.body.appendChild(ye),ye.style.display="none",ye.href=pe,ye.download=Ke.name,ye.click(),window.URL.revokeObjectURL(pe)}let a=[],n=[],i="",s=0,o,l=[],c,m,y,u=null,S=0,v=20;function E(){a=[],n=[],i="",s=0,o=void 0,l=[]}async function g(Ke,pe={width:640,height:480}){if(!document.body)throw dr.registerError(i,"Script n\xE3o chamado dentro do body!"),jg;if(u!=null)throw dr.registerError(i,D0),D0;let ye=null,ce=null,{cameraId:N,microphoneId:ee,allowOnlyFirstMonitor:Te,captureScreen:Qe}=Ke;wC=Qe;try{let Y;if(Qe){let{screenStream:Ae,stopScreenRecorder:Oe}=await Hp(n,{allowOnlyFirstMonitor:Te,onStopSharingScreenCallback:()=>y&&y()});ce=Oe,Y=Ae}let{cameraStream:xe,stopCameraRecording:ve}=await Ap(a,{cameraId:N,microphoneId:ee},pe);return Ee(),ye=await ve,Qe?u=async function(){await Promise.all([ye(),ce()]),u=null}:u=async function(){await Promise.all([ye()]),u=null},{_screenStream:Y,cameraStream:xe,start:be}}catch(Y){throw u=null,ce&&await ce(),ye&&await ye(),a=[],n=[],Y}}let P=()=>{Date.now()-s>1e4&&(c&&c(),l.push({begin:Date.now()-s,alert:25,end:0}))},I=()=>{let Ke=l[l.length-1];Ke&&(m&&m(),Ke.end=Date.now()-s)},V=()=>{window.addEventListener("blur",P),window.addEventListener("focus",I)},Q=()=>{window.removeEventListener("blur",P),window.removeEventListener("focus",I)},de=async Ke=>{let{buffer:pe,blob:ye}=await Ue(),ce=a,N=pe,ee=n;if(!ce)throw dr.registerError(i,eo),eo;let Te=`EP_${i}_camera_${Ke}.webm`,Qe=`EP_${i}_audio_${Ke}.mp3`,Y=`EP_${i}_screen_${Ke}.webm`,xe=new File(ce,Te,{type:"video/webm"}),ve=new File(N,Qe,{type:ye.type,lastModified:Date.now()}),Ae;return ee.length!=0&&(Ae=new File(ee,Y,{type:"video/webm"})),{cameraFile:xe,audioFile:ve,screenFile:Ae}};async function me(){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 be(Ke=xg,pe={width:640,height:480}){if(console.log(S),S>=Date.now()-v)throw D0;S=Date.now();let{cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N=!0,allowMultipleMonitors:ee=!1,captureScreen:Te=!0,proctoringType:Qe}=Ke;try{await me()}catch(xe){throw dr.registerError(i,"Erro no initConfig!"),u&&u(),xe}if(!ee&&await cp())throw dr.registerError(i,"Multiplas telas detectadas!"),hc;await R0("exams")!=null&&(await mp("exams"),u=null);try{let{cameraStream:xe,_screenStream:ve}=await g({cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N,captureScreen:Te,proctoringType:Qe},pe),Ae;try{Ae=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}o=Ae?new Date(Ae.toString()):new Date,s=o.getTime();let Oe=await hn({url:`/proctoring/start/${r.examId}`,method:"POST",body:{clientId:r.clientId,proctoringType:Qe},jwt:r.token});return Oe.cameraStream=xe,Oe.screenStream=ve,await hg("exams",{id:Oe.id,examId:r.examId,sessions:[]}),i=Oe.id,console.log("proctoringId",i),dr.registerStart(i,!0,""),V(),Oe}catch(xe){throw u&&u(),dr.registerStart(i,!1,""+xe),xe}}async function Ee(){let{start:Ke}=await Ug();Ke()}async function Ue(){let{buffer:Ke,blob:pe}=await qp();return{buffer:Ke,blob:pe}}async function tt(Ke=xg,pe={width:640,height:480}){let{cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N=!0,allowMultipleMonitors:ee=!1,captureScreen:Te=!0,proctoringType:Qe}=Ke;pg(),Ee();let{cameraStream:Y,_screenStream:xe}=await g({cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N,captureScreen:Te,proctoringType:Qe},pe);return console.log("Recording..."),{cameraStream:Y,_screenStream:xe}}async function Ne(){console.log("Stoping record..."),y=void 0,u&&await u(),Q(),await mp("exams");let Ke=a,pe=n;return a=[],n=[],l=[],u=null,console.log("Finish record"),{cameraBlob:Ke,screenBlob:pe}}async function Xe(){let Ke=await R0("exams");if(!u||!Ke)throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo;y=void 0,await u();let pe;try{pe=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(ee){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+ee)}let{cameraFile:ye,audioFile:ce,screenFile:N}=await de(Ke.sessions.length);Ke.sessions.push({alerts:l,cameraFile:ye,audioFile:ce,screenFile:N,id:""+Ke.sessions.length+1,start:o?o.toISOString():(pe?new Date(pe.toString()):new Date).toISOString(),end:pe?new Date(pe.toString()).toISOString():new Date().toISOString()}),await hg("exams",Ke),E()}async function st(Ke=xg,pe,ye={width:640,height:480}){E();let{cameraId:ce,microphoneId:N,allowOnlyFirstMonitor:ee=!0,allowMultipleMonitors:Te=!1,captureScreen:Qe=!0,proctoringType:Y}=Ke;try{await me()}catch(et){throw dr.registerError(i,"Erro no initConfig!"),et}if(!Te&&await cp())throw dr.registerError(i,"Multiplas telas detectadas!"),hc;if(u)throw dr.registerError(i,"Proctoring j\xE1 est\xE1 rodando!"),Xg;let xe=await R0("exams");if(xe){if(xe&&xe.examId!=pe)throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo}else throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo;let{cameraStream:ve,_screenStream:Ae}=await g({cameraId:ce,microphoneId:N,allowOnlyFirstMonitor:ee,captureScreen:Qe,proctoringType:Y},ye),Oe;try{Oe=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}return i=xe.id,console.log("procotoringId resume",i),o=Oe?new Date(Oe.toString()):new Date,s=o.getTime(),{cameraStream:ve,_screenStream:Ae}}async function He(Ke={}){let{onProgress:pe}=Ke,ye=await R0("exams");if(!ye)throw dr.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 dr.registerError(i,"Erro ao buscar credenciais!"),"Erro ao buscar credenciais!"}y=void 0;let ce;if(console.log("cancelCallback: ",u),u){await u();try{ce=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}let{cameraFile:ve,audioFile:Ae,screenFile:Oe}=await de(ye.sessions.length);ye.sessions.push({alerts:l,cameraFile:ve,audioFile:Ae,screenFile:Oe,id:""+ye.sessions.length+1,start:o?o.toISOString():(ce?new Date(ce.toString()):new Date).toISOString(),end:ce?new Date(ce.toString()).toISOString():new Date().toISOString()})}if(ye.sessions.length==0)throw dr.registerError(i,"Nenhum v\xEDdeo gravado!"),$g;let N=ce?new Date(ce.toString()).toISOString():new Date().toISOString(),ee=[];ye.sessions.forEach(ve=>{ve.cameraFile&&ee.push(ve.cameraFile),ve.audioFile&&ee.push(ve.audioFile),ve.screenFile!=null&&ee.push(ve.screenFile)});let Te=ee.length,Qe=Array(Te).fill(0),Y=()=>{pe&&pe(Qe.reduce((ve,Ae)=>ve+=Ae,0)/Te)};Q();let xe=[];ye.sessions.forEach(ve=>{xe.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:[...xe[xe.length-1].alerts]}})}catch(ve){dr.registerFinish(i,!1,"save-screen error: "+ve)}try{await hn({url:`/proctoring/finish/${r.examId}`,method:"POST",body:{endDate:N,videoCameraUrl:`${rc}/`+xe[xe.length-1].videoCameraUrl,audioCameraUrl:`${rc}/`+xe[xe.length-1].audioCameraUrl,videoScreenUrl:wC?`${rc}/`+xe[xe.length-1].videoScreenUrl:""},jwt:r.token}),dr.registerFinish(i,!0,"")}catch(ve){dr.registerFinish(i,!1,"finish error: "+ve)}try{dr.registerUploadVideo(i,!0,"Starting upload");let ve=performance.now(),Ae=ee.map((je,Ct)=>dg({file:je,onProgress:At=>{Qe[Ct]=At,Y()}},i,An,r.token)),Oe=performance.now();await Promise.all(Ae);let et=Oe-ve;pe&&pe(Math.round(100)),dr.registerUploadVideo(i,!0,"Finish upload",et)}catch(ve){console.log("Enviando tracker de error"),dr.registerUploadVideo(i,!1,""+ve)}await mp("exams"),a=[],n=[],l=[],u=null}function bt(Ke){m=Ke}function ut(Ke){y=Ke}function mt(Ke){c=Ke}return{start:be,startAudio:Ee,checkDevices:tt,finish:He,finishAudio:Ue,closeCheckDevices:Ne,pause:Xe,resume:st,onFocus:bt,onLostFocus:mt,enumarateDevices:ug,checkPermissions:pg,checkIfhasMultipleMonitors:cp,onStopSharingScreen:ut}}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:""},rc="",wC=!0,An;function gI(r,e=!1){if(["examId","clientId","token"].forEach(Ke=>{let pe=Ke;if(!r[pe])throw Gg+": "+pe}),!navigator.mediaDevices.getDisplayMedia||!window.indexedDB)throw Vg;function t(Ke){let pe=URL.createObjectURL(Ke),ye=document.createElement("a");document.body.appendChild(ye),ye.style.display="none",ye.href=pe,ye.download=Ke.name,ye.click(),window.URL.revokeObjectURL(pe)}let a=[],n=[],i="",s=0,o,l=[],c,m,y,u=null,S=0,v=20;function E(){a=[],n=[],i="",s=0,o=void 0,l=[]}async function g(Ke,pe={width:640,height:480}){if(!document.body)throw dr.registerError(i,"Script n\xE3o chamado dentro do body!"),jg;if(u!=null)throw dr.registerError(i,D0),D0;let ye=null,ce=null,{cameraId:N,microphoneId:ee,allowOnlyFirstMonitor:Te,captureScreen:Qe}=Ke;wC=Qe;try{let Y;if(Qe){let{screenStream:Ae,stopScreenRecorder:Oe}=await Hp(n,{allowOnlyFirstMonitor:Te,onStopSharingScreenCallback:()=>y&&y()});ce=Oe,Y=Ae}let{cameraStream:xe,stopCameraRecording:ve}=await Ap(a,{cameraId:N,microphoneId:ee},pe);return Ee(),ye=await ve,Qe?u=async function(){await Promise.all([ye(),ce()]),u=null}:u=async function(){await Promise.all([ye()]),u=null},{_screenStream:Y,cameraStream:xe,start:be}}catch(Y){throw u=null,ce&&await ce(),ye&&await ye(),a=[],n=[],Y}}let P=()=>{Date.now()-s>1e4&&(c&&c(),l.push({begin:Date.now()-s,alert:25,end:0}))},I=()=>{let Ke=l[l.length-1];Ke&&(m&&m(),Ke.end=Date.now()-s)},V=()=>{window.addEventListener("blur",P),window.addEventListener("focus",I)},Q=()=>{window.removeEventListener("blur",P),window.removeEventListener("focus",I)},de=async Ke=>{let{buffer:pe,blob:ye}=await Ue(),ce=a,N=pe,ee=n;if(!ce)throw dr.registerError(i,eo),eo;let Te=`EP_${i}_camera_${Ke}.webm`,Qe=`EP_${i}_audio_${Ke}.mp3`,Y=`EP_${i}_screen_${Ke}.webm`,xe=new File(ce,Te,{type:"video/webm"}),ve=new File(N,Qe,{type:ye.type,lastModified:Date.now()}),Ae;return ee.length!=0&&(Ae=new File(ee,Y,{type:"video/webm"})),{cameraFile:xe,audioFile:ve,screenFile:Ae}};async function me(){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 be(Ke=xg,pe={width:640,height:480}){if(console.log(S),S>=Date.now()-v)throw D0;S=Date.now();let{cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N=!0,allowMultipleMonitors:ee=!1,captureScreen:Te=!0,proctoringType:Qe}=Ke;try{await me()}catch(xe){throw dr.registerError(i,"Erro no initConfig!"),u&&u(),xe}if(!ee&&await cp())throw dr.registerError(i,"Multiplas telas detectadas!"),hc;await R0("exams")!=null&&(await mp("exams"),u=null);try{let{cameraStream:xe,_screenStream:ve}=await g({cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N,captureScreen:Te,proctoringType:Qe},pe),Ae;try{Ae=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}o=Ae?new Date(Ae.toString()):new Date,s=o.getTime();let Oe=await hn({url:`/proctoring/start/${r.examId}`,method:"POST",body:{clientId:r.clientId,proctoringType:Qe},jwt:r.token});return Oe.cameraStream=xe,Oe.screenStream=ve,await hg("exams",{id:Oe.id,examId:r.examId,sessions:[]}),i=Oe.id,console.log("proctoringId",i),dr.registerStart(i,!0,""),V(),Oe}catch(xe){throw u&&u(),dr.registerStart(i,!1,""+xe),xe}}async function Ee(){let{start:Ke}=await Ug();Ke()}async function Ue(){let{buffer:Ke,blob:pe}=await qp();return{buffer:Ke,blob:pe}}async function tt(Ke=xg,pe={width:640,height:480}){let{cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N=!0,captureScreen:ee=!0,proctoringType:Te="VIDEO"}=Ke;pg(),Ee();let{cameraStream:Qe,_screenStream:Y}=await g({cameraId:ye,microphoneId:ce,allowOnlyFirstMonitor:N,captureScreen:ee,proctoringType:Te},pe);return console.log("Recording..."),{cameraStream:Qe,_screenStream:Y}}async function Ne(){console.log("Stoping record..."),y=void 0,u&&await u(),Q(),await mp("exams");let Ke=a,pe=n;return a=[],n=[],l=[],u=null,console.log("Finish record"),{cameraBlob:Ke,screenBlob:pe}}async function Xe(){let Ke=await R0("exams");if(!u||!Ke)throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo;y=void 0,await u();let pe;try{pe=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(ee){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+ee)}let{cameraFile:ye,audioFile:ce,screenFile:N}=await de(Ke.sessions.length);Ke.sessions.push({alerts:l,cameraFile:ye,audioFile:ce,screenFile:N,id:""+Ke.sessions.length+1,start:o?o.toISOString():(pe?new Date(pe.toString()):new Date).toISOString(),end:pe?new Date(pe.toString()).toISOString():new Date().toISOString()}),await hg("exams",Ke),E()}async function st(Ke=xg,pe,ye={width:640,height:480}){E();let{cameraId:ce,microphoneId:N,allowOnlyFirstMonitor:ee=!0,allowMultipleMonitors:Te=!1,captureScreen:Qe=!0,proctoringType:Y}=Ke;try{await me()}catch(et){throw dr.registerError(i,"Erro no initConfig!"),et}if(!Te&&await cp())throw dr.registerError(i,"Multiplas telas detectadas!"),hc;if(u)throw dr.registerError(i,"Proctoring j\xE1 est\xE1 rodando!"),Xg;let xe=await R0("exams");if(xe){if(xe&&xe.examId!=pe)throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo}else throw dr.registerError(i,"Proctoring n\xE3o iniciado!"),eo;let{cameraStream:ve,_screenStream:Ae}=await g({cameraId:ce,microphoneId:N,allowOnlyFirstMonitor:ee,captureScreen:Qe,proctoringType:Y},ye),Oe;try{Oe=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}return i=xe.id,console.log("procotoringId resume",i),o=Oe?new Date(Oe.toString()):new Date,s=o.getTime(),{cameraStream:ve,_screenStream:Ae}}async function He(Ke={}){let{onProgress:pe}=Ke,ye=await R0("exams");if(!ye)throw dr.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 dr.registerError(i,"Erro ao buscar credenciais!"),"Erro ao buscar credenciais!"}y=void 0;let ce;if(console.log("cancelCallback: ",u),u){await u();try{ce=await hn({url:"/Proctoring/server-hour",method:"GET",jwt:r.token})}catch(et){dr.registerError(i,"N\xE3o foi poss\xEDvel requisitar a data do servidor!"+et)}let{cameraFile:ve,audioFile:Ae,screenFile:Oe}=await de(ye.sessions.length);ye.sessions.push({alerts:l,cameraFile:ve,audioFile:Ae,screenFile:Oe,id:""+ye.sessions.length+1,start:o?o.toISOString():(ce?new Date(ce.toString()):new Date).toISOString(),end:ce?new Date(ce.toString()).toISOString():new Date().toISOString()})}if(ye.sessions.length==0)throw dr.registerError(i,"Nenhum v\xEDdeo gravado!"),$g;let N=ce?new Date(ce.toString()).toISOString():new Date().toISOString(),ee=[];ye.sessions.forEach(ve=>{ve.cameraFile&&ee.push(ve.cameraFile),ve.audioFile&&ee.push(ve.audioFile),ve.screenFile!=null&&ee.push(ve.screenFile)});let Te=ee.length,Qe=Array(Te).fill(0),Y=()=>{pe&&pe(Qe.reduce((ve,Ae)=>ve+=Ae,0)/Te)};Q();let xe=[];ye.sessions.forEach(ve=>{xe.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:[...xe[xe.length-1].alerts]}})}catch(ve){dr.registerFinish(i,!1,"save-screen error: "+ve)}try{await hn({url:`/proctoring/finish/${r.examId}`,method:"POST",body:{endDate:N,videoCameraUrl:`${rc}/`+xe[xe.length-1].videoCameraUrl,audioCameraUrl:`${rc}/`+xe[xe.length-1].audioCameraUrl,videoScreenUrl:wC?`${rc}/`+xe[xe.length-1].videoScreenUrl:""},jwt:r.token}),dr.registerFinish(i,!0,"")}catch(ve){dr.registerFinish(i,!1,"finish error: "+ve)}try{dr.registerUploadVideo(i,!0,"Starting upload");let ve=performance.now(),Ae=ee.map((je,Ct)=>dg({file:je,onProgress:At=>{Qe[Ct]=At,Y()}},i,An,r.token)),Oe=performance.now();await Promise.all(Ae);let et=Oe-ve;pe&&pe(Math.round(100)),dr.registerUploadVideo(i,!0,"Finish upload",et)}catch(ve){console.log("Enviando tracker de error"),dr.registerUploadVideo(i,!1,""+ve)}await mp("exams"),a=[],n=[],l=[],u=null}function bt(Ke){m=Ke}function ut(Ke){y=Ke}function mt(Ke){c=Ke}return{start:be,startAudio:Ee,checkDevices:tt,finish:He,finishAudio:Ue,closeCheckDevices:Ne,pause:Xe,resume:st,onFocus:bt,onLostFocus:mt,enumarateDevices:ug,checkPermissions:pg,checkIfhasMultipleMonitors:cp,onStopSharingScreen:ut}}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.