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 +2 -2
- package/esm/index.js +1 -1
- package/index.js +1 -1
- package/package.json +3 -2
- package/unpkg/easyproctor.min.js +1 -1
package/README.md
CHANGED
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 =
|
|
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 =
|
|
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.
|
|
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",
|
package/unpkg/easyproctor.min.js
CHANGED
|
@@ -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.
|