easyproctor 0.0.17 → 0.0.20

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
@@ -11,6 +11,7 @@ npm install --save easyproctor
11
11
  ```
12
12
 
13
13
  Via CDN
14
+
14
15
  ```html
15
16
  <script src="https://cdn.jsdelivr.net/npm/easyproctor/unpkg/easyproctor.min.js"></script>
16
17
  ```
@@ -18,6 +19,7 @@ Via CDN
18
19
  ## Utilização
19
20
 
20
21
  Para utilizar o componente será necessário utilizar os seguintes parâmetros:
22
+
21
23
  - examId: identificador do exame
22
24
  - clientId: identificador do parceiro
23
25
  - token: token de autenticação biométrica (utilizar SDK biométrico do EasyProctor)
@@ -28,27 +30,28 @@ Após finalizar a sessão de proctoring através do método finish você poderá
28
30
 
29
31
  https://iaris.easyproctor.tech/index.html
30
32
 
31
-
32
33
  Em um bundler
34
+
33
35
  ```javascript
34
36
  import { useProctoring } from "easyproctor";
35
37
 
36
- const { start, finish } = useProctoring({
37
- examId: "00001",
38
- clientId: "000001",
39
- token: "..."
38
+ const { start, finish, pause, resume, onFocus, onLostFocus, enumarateDevices, checkPermissions, checkIfhasMultipleMonitors, onStopSharingScreen } = useProctoring({
39
+ examId: "00001",
40
+ clientId: "000001",
41
+ token: "...",
40
42
  });
41
43
  ```
42
44
 
43
45
  Via CDN: A função "useProctoring" é injetada para ser utilizada globalmente
46
+
44
47
  ```html
45
48
  <script src="https://cdn.jsdelivr.net/npm/easyproctor/unpkg/easyproctor.min.js"></script>
46
49
  <script>
47
- const { start, finish } = useProctoring({
48
- examId: "00001",
49
- clientId: "000001",
50
- token: "..."
51
- });
50
+ const { start, finish, pause, resume, onFocus, onLostFocus, enumarateDevices, checkPermissions, checkIfhasMultipleMonitors, onStopSharingScreen } = useProctoring({
51
+ examId: "00001",
52
+ clientId: "000001",
53
+ token: "...",
54
+ });
52
55
  </script>
53
56
  ```
54
57
 
@@ -57,64 +60,165 @@ Via CDN: A função "useProctoring" é injetada para ser utilizada globalmente
57
60
  ```html
58
61
  <!DOCTYPE html>
59
62
  <html lang="en">
60
-
61
- <head>
62
- <meta charset="UTF-8">
63
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
64
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
63
+ <head>
64
+ <meta charset="UTF-8" />
65
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
66
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
65
67
  <title>Document</title>
66
68
  <script src="dist/unpkg/easyproctor.min.js"></script>
67
69
  <script>
70
+ const {
71
+ start,
72
+ finish,
73
+ onFocus,
74
+ onLostFocus,
75
+ enumarateDevices,
76
+ checkPermissions,
77
+ } = useProctoring({
78
+ examId: "00001",
79
+ clientId: "000001",
80
+ token: "...",
81
+ });
82
+
83
+ async function startExam() {
84
+ try {
85
+ // Verificar se existem dispositívos disponíveis
86
+ if (devices.cameras.length == 0 || devices.microphones.length == 0) {
87
+ throw "Você precisa possuir ao menos uma câmera e um microfone";
88
+ }
89
+
90
+ // Verificar se foram setados
91
+ const selectedCamera = cameras.value;
92
+ const selectedMicrophone = microphones.value;
93
+
94
+ if (!selectedCamera || !selectedMicrophone) {
95
+ throw "Você precisa selecionar uma camera e um microfone";
96
+ }
97
+
98
+ startButton.innerHTML = "Carregando";
99
+
100
+ onFocus(() => generateAlert(false));
101
+ onLostFocus(() => generateAlert(true));
102
+ // Adicionar o dispositivo selecionado é opcional
103
+ const { cameraStream } = await start({
104
+ cameraId: selectedCamera,
105
+ microphoneId: selectedMicrophone,
106
+ });
107
+ } catch (error) {
108
+ alert(error);
109
+ }
110
+ }
111
+
112
+ async function finishExam() {
113
+ try {
114
+ await finish({ onProgress: (percentage) => console.log(percentage) });
115
+ console.log("EXAME FINALIZADO");
116
+ } catch (error) {
117
+ alert(error);
118
+ }
119
+ }
68
120
 
69
- const { start, finish } = useProctoring({
70
- examId: "00001",
71
- clientId: "000001",
72
- token: "..."
73
- });
121
+ // Verificar permissões
122
+ let devices = { cameras: [], microphones: [] };
123
+ async function verifyPermissions() {
124
+ // Checar permissões
125
+ var hasPermissions = await checkPermissions();
74
126
 
75
- async function startExam() {
76
- try {
77
- const resp = await start();
78
- } catch (error) {
79
- alert(error);
80
- }
127
+ if (!hasPermissions) {
128
+ window.alert("Para continuar você precisa conceder as permissões");
129
+ return;
81
130
  }
82
131
 
83
- async function finishExam() {
84
- try {
85
- await finish({ onProgress: (percentage) => console.log(percentage) });
86
- console.log("EXAME FINALIZADO");
87
- } catch (error) {
88
- alert(error);
89
- }
132
+ // Listar os dispositivos
133
+ devices = await enumarateDevices();
134
+
135
+ const generateOption = (text, value) => {
136
+ const el = document.createElement("option");
137
+ el.setAttribute("value", value);
138
+ el.innerHTML = text;
139
+ return el;
140
+ };
141
+
142
+ devices.cameras.forEach((camera) => {
143
+ const option = generateOption(camera.label, camera.id);
144
+ cameras.appendChild(option);
145
+ });
146
+
147
+ devices.microphones.forEach((microphone) => {
148
+ const option = generateOption(microphone.label, microphone.id);
149
+ microphones.appendChild(option);
150
+ });
151
+ }
152
+
153
+ // Gerar alerta
154
+ function generateAlert(lostFocus) {
155
+ const p = document.createElement("p");
156
+ if (lostFocus) {
157
+ p.classList.add("text-red-500");
158
+ p.innerHTML = `Perdeu o foco em: ${new Date().toLocaleTimeString()}`;
159
+ } else {
160
+ p.classList.add("text-green-500");
161
+ p.innerHTML = `Retomou o foco em: ${new Date().toLocaleTimeString()}`;
90
162
  }
163
+ alerts.appendChild(p);
164
+ }
91
165
  </script>
92
- </head>
93
-
94
- <body>
95
- <div style="height: 100vh; display: flex; align-items: center; justify-content: center;">
96
- <button onclick="startExam()">Iniciar</button>
97
- <button onclick="finishExam()">Finalizar</button>
166
+ </head>
167
+
168
+ <body>
169
+ <div
170
+ style="height: 100vh; display: flex; align-items: center; justify-content: center;"
171
+ >
172
+ <button onclick="startExam()">Iniciar</button>
173
+ <button onclick="finishExam()">Finalizar</button>
174
+ <button onclick="verifyPermissions()">Verificar permissões</button>
98
175
  </div>
99
- </body>
100
-
176
+ </body>
101
177
  </html>
102
178
  ```
103
179
 
104
180
  ## API
181
+
105
182
  ```javascript
106
- const {
107
- // Inicia a gravação da prova
108
- start,
183
+ const {
184
+ // Inicia a gravação da prova
185
+ start,
186
+
187
+ // Pausa a gravação
188
+ pause,
189
+
190
+ // Reinicia a gravação
191
+ resume,
192
+
193
+ // Finaliza a gravação da prova retornando os arquivos gerados
194
+ finish,
109
195
 
110
- // Finaliza a gravação da prova retornando os arquivos gerados
111
- finish,
196
+ // Adiciona uma função callback para ser executada quando o usuário recupera o foco da tela
197
+ onFocus,
112
198
 
199
+ // Adiciona uma função callback para ser executada quando o usuário perde o foco da tela
200
+ onLostFocus,
201
+
202
+ // Adiciona uma função callback para ser executada quando o usuário cancela o compartilhamento de tela
203
+ onStopSharingScreen
204
+
205
+ // Enumera os dispositivos de camera e microfone
206
+ enumarateDevices,
207
+
208
+ // Checa as permissões de camera e microfone
209
+ checkPermissions,
210
+
211
+ // Checa se existe mais de um monitor
212
+ checkIfhasMultipleMonitors
213
+
214
+
113
215
  } = useProctoring({
114
- examId: "00001",
115
- clientId: "000001",
116
- token: "..."
117
- });
216
+ examId: "00001",
217
+ clientId: "000001",
218
+ token: "...",
219
+ });
118
220
  ```
221
+
119
222
  ## License
120
- [MIT](https://choosealicense.com/licenses/mit/)
223
+
224
+ [MIT](https://choosealicense.com/licenses/mit/)
@@ -6,4 +6,6 @@ export default interface StartProctoringDTO {
6
6
  examStartTime: string;
7
7
  examEndTime: string;
8
8
  status: number;
9
+ cameraStream: MediaStream;
10
+ screenStream: MediaStream;
9
11
  }
@@ -0,0 +1,10 @@
1
+ export declare const SCRIPT_NOT_CALLED_INSIDE_BODY = "script_not_called_inside_body";
2
+ export declare const INCOMPATIBLE_NAVIGATOR = "incompatible_navigator";
3
+ export declare const REQUIRED_FIELD_NOT_PROVIDED = "required_field_not_provided";
4
+ export declare const NOT_SHARED_FIRST_SCREEN = "not_shared_first_screen";
5
+ export declare const MULTIPLE_MONITORS_DETECTED = "multiple_monitors_detected";
6
+ export declare const PROCTORING_ALREADY_STARTED = "proctoring_already_started";
7
+ export declare const PROCTORING_NOT_STARTED = "proctoring_not_started";
8
+ export declare const PROCTORING_RUNNING = "proctoring_running";
9
+ export declare const NO_VIDEOS_RECORDED = "no_videos_recorded";
10
+ export declare const PERMISSIONS_NOT_GRANTED = "permissions_not_granted";