easyproctor-hml 2.5.33 → 2.5.34
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 +148 -3
- package/extension/extensionEasyCatcher.d.ts +11 -0
- package/extension/{extension.d.ts → extensionEasyProctor.d.ts} +1 -1
- package/index.js +148 -3
- package/package.json +1 -1
- package/proctoring/proctoring.d.ts +5 -0
- package/proctoring/useProctoring.d.ts +2 -0
- package/unpkg/easyproctor.min.js +37 -37
package/esm/index.js
CHANGED
|
@@ -14926,8 +14926,8 @@ var CapturePhoto = class {
|
|
|
14926
14926
|
}
|
|
14927
14927
|
};
|
|
14928
14928
|
|
|
14929
|
-
// src/extension/
|
|
14930
|
-
var
|
|
14929
|
+
// src/extension/extensionEasyProctor.ts
|
|
14930
|
+
var ExtensionEasyProctor = class {
|
|
14931
14931
|
constructor() {
|
|
14932
14932
|
this.hasExtension = false;
|
|
14933
14933
|
this.tryes = 0;
|
|
@@ -14972,6 +14972,89 @@ var Extension = class {
|
|
|
14972
14972
|
}
|
|
14973
14973
|
};
|
|
14974
14974
|
|
|
14975
|
+
// src/extension/extensionEasyCatcher.ts
|
|
14976
|
+
var ExtensionEasyCatcher = class {
|
|
14977
|
+
constructor(options) {
|
|
14978
|
+
this.hasExtension = false;
|
|
14979
|
+
this.tryes = 0;
|
|
14980
|
+
this.responseStart = false;
|
|
14981
|
+
this.options = options || {};
|
|
14982
|
+
}
|
|
14983
|
+
/**
|
|
14984
|
+
* Verifica se a extensão está instalada e ativa.
|
|
14985
|
+
* Retorna o número da versão se encontrada, ou lança erro após timeout.
|
|
14986
|
+
*/
|
|
14987
|
+
checkExtensionInstalled(timeoutMs = 2e3) {
|
|
14988
|
+
return new Promise((resolve, reject) => {
|
|
14989
|
+
let handled = false;
|
|
14990
|
+
const handler = (event) => {
|
|
14991
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "version") {
|
|
14992
|
+
handled = true;
|
|
14993
|
+
window.removeEventListener("message", handler);
|
|
14994
|
+
resolve(event.data.message);
|
|
14995
|
+
}
|
|
14996
|
+
};
|
|
14997
|
+
window.addEventListener("message", handler);
|
|
14998
|
+
window.postMessage({
|
|
14999
|
+
type: "easycatcher",
|
|
15000
|
+
func: "verifyExtensionEasycatcher"
|
|
15001
|
+
}, "*");
|
|
15002
|
+
setTimeout(() => {
|
|
15003
|
+
if (!handled) {
|
|
15004
|
+
window.removeEventListener("message", handler);
|
|
15005
|
+
reject(new Error("Extens\xE3o n\xE3o detectada ou n\xE3o respondeu."));
|
|
15006
|
+
}
|
|
15007
|
+
}, timeoutMs);
|
|
15008
|
+
});
|
|
15009
|
+
}
|
|
15010
|
+
/**
|
|
15011
|
+
* Solicita o JSON da sessão atual capturado pela extensão.
|
|
15012
|
+
*/
|
|
15013
|
+
getSessionData(timeoutMs = 5e3) {
|
|
15014
|
+
return new Promise((resolve, reject) => {
|
|
15015
|
+
let handled = false;
|
|
15016
|
+
const handler = (event) => {
|
|
15017
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "data_response") {
|
|
15018
|
+
handled = true;
|
|
15019
|
+
window.removeEventListener("message", handler);
|
|
15020
|
+
resolve(event.data.payload);
|
|
15021
|
+
}
|
|
15022
|
+
};
|
|
15023
|
+
window.addEventListener("message", handler);
|
|
15024
|
+
window.postMessage({
|
|
15025
|
+
type: "easycatcher",
|
|
15026
|
+
func: "getDataExtensionEasycatcher"
|
|
15027
|
+
}, "*");
|
|
15028
|
+
setTimeout(() => {
|
|
15029
|
+
if (!handled) {
|
|
15030
|
+
window.removeEventListener("message", handler);
|
|
15031
|
+
reject(new Error("Timeout ao aguardar dados da extens\xE3o."));
|
|
15032
|
+
}
|
|
15033
|
+
}, timeoutMs);
|
|
15034
|
+
});
|
|
15035
|
+
}
|
|
15036
|
+
start() {
|
|
15037
|
+
return new Promise((resolve, reject) => {
|
|
15038
|
+
let handled = false;
|
|
15039
|
+
const handler = (event) => {
|
|
15040
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "started_confirmed") {
|
|
15041
|
+
handled = true;
|
|
15042
|
+
window.removeEventListener("message", handler);
|
|
15043
|
+
resolve(true);
|
|
15044
|
+
}
|
|
15045
|
+
};
|
|
15046
|
+
window.addEventListener("message", handler);
|
|
15047
|
+
window.postMessage({ type: "easycatcher", func: "startExtensionEasycatcher" }, "*");
|
|
15048
|
+
setTimeout(() => {
|
|
15049
|
+
if (!handled) {
|
|
15050
|
+
window.removeEventListener("message", handler);
|
|
15051
|
+
reject(new Error("Timeout: Extens\xE3o n\xE3o confirmou o in\xEDcio."));
|
|
15052
|
+
}
|
|
15053
|
+
}, 3e3);
|
|
15054
|
+
});
|
|
15055
|
+
}
|
|
15056
|
+
};
|
|
15057
|
+
|
|
14975
15058
|
// src/modules/onChangeDevices.ts
|
|
14976
15059
|
var onChangeDevices = class {
|
|
14977
15060
|
constructor(repositoryDevices, proctoringId2, sessionOptions, allRecorders) {
|
|
@@ -22008,7 +22091,10 @@ var Proctoring = class {
|
|
|
22008
22091
|
if (this.context.token === void 0) {
|
|
22009
22092
|
throw TOKEN_MISSING;
|
|
22010
22093
|
}
|
|
22011
|
-
|
|
22094
|
+
if (options.useChallenge) {
|
|
22095
|
+
this.extensionEasycatcher = new ExtensionEasyCatcher();
|
|
22096
|
+
}
|
|
22097
|
+
this.extension = new ExtensionEasyProctor();
|
|
22012
22098
|
this.extension.addEventListener();
|
|
22013
22099
|
const baseURL = this.backend.selectBaseUrl(this.context.type);
|
|
22014
22100
|
const devices = await enumarateDevices();
|
|
@@ -22358,6 +22444,61 @@ Error: ` + error
|
|
|
22358
22444
|
_screenStream: (_a2 = this.allRecorders.screenRecorder) == null ? void 0 : _a2.screenStream
|
|
22359
22445
|
};
|
|
22360
22446
|
}
|
|
22447
|
+
async startChallenge(templateId) {
|
|
22448
|
+
var _a2;
|
|
22449
|
+
if (!this.sessionOptions.useChallenge) {
|
|
22450
|
+
throw new Error("useChallenge is set as false on start method");
|
|
22451
|
+
}
|
|
22452
|
+
await this.extensionEasycatcher.checkExtensionInstalled().catch((err) => {
|
|
22453
|
+
throw new Error("EasyCatcher Extension is not installed");
|
|
22454
|
+
});
|
|
22455
|
+
this.extensionEasycatcher.start();
|
|
22456
|
+
const start = Date.now() - ((_a2 = this.allRecorders.cameraRecorder.getStartTime()) == null ? void 0 : _a2.getTime()) || 0;
|
|
22457
|
+
await this.backend.startChallenge({
|
|
22458
|
+
proctoringId: this.proctoringId,
|
|
22459
|
+
templateId,
|
|
22460
|
+
start
|
|
22461
|
+
}).then((resp) => {
|
|
22462
|
+
console.log(resp);
|
|
22463
|
+
this.challengeId = resp.id;
|
|
22464
|
+
}).catch((reason) => {
|
|
22465
|
+
trackers.registerError(
|
|
22466
|
+
this.proctoringId,
|
|
22467
|
+
"N\xE3o foi poss\xEDvel iniciar desafio!"
|
|
22468
|
+
);
|
|
22469
|
+
throw reason;
|
|
22470
|
+
});
|
|
22471
|
+
this.isChallengeRunning = true;
|
|
22472
|
+
}
|
|
22473
|
+
async stopChallenge() {
|
|
22474
|
+
var _a2;
|
|
22475
|
+
if (!this.isChallengeRunning) {
|
|
22476
|
+
throw new Error("Challenge not started");
|
|
22477
|
+
}
|
|
22478
|
+
try {
|
|
22479
|
+
const sessionData = await this.extensionEasycatcher.getSessionData();
|
|
22480
|
+
const end = Date.now() - ((_a2 = this.allRecorders.cameraRecorder.getStartTime()) == null ? void 0 : _a2.getTime()) || 0;
|
|
22481
|
+
await this.backend.stopChallenge(
|
|
22482
|
+
this.challengeId,
|
|
22483
|
+
{
|
|
22484
|
+
end,
|
|
22485
|
+
data: sessionData
|
|
22486
|
+
}
|
|
22487
|
+
).catch((reason) => {
|
|
22488
|
+
trackers.registerError(
|
|
22489
|
+
this.proctoringId,
|
|
22490
|
+
"N\xE3o foi poss\xEDvel finalizar o desafio no backend!"
|
|
22491
|
+
);
|
|
22492
|
+
return void 0;
|
|
22493
|
+
});
|
|
22494
|
+
this.isChallengeRunning = false;
|
|
22495
|
+
} catch (error) {
|
|
22496
|
+
trackers.registerError(
|
|
22497
|
+
this.proctoringId,
|
|
22498
|
+
"Erro ao recuperar dados da extens\xE3o: " + error.message
|
|
22499
|
+
);
|
|
22500
|
+
}
|
|
22501
|
+
}
|
|
22361
22502
|
};
|
|
22362
22503
|
|
|
22363
22504
|
// src/proctoring/SignTerm.ts
|
|
@@ -22585,6 +22726,8 @@ function useProctoring(proctoringOptions, enviromentConfig = "prod") {
|
|
|
22585
22726
|
return originalStart(parameters2, videoOptions);
|
|
22586
22727
|
};
|
|
22587
22728
|
const finish = proctoring.finish.bind(proctoring);
|
|
22729
|
+
const startChallenge = proctoring.startChallenge.bind(proctoring);
|
|
22730
|
+
const stopChallenge = proctoring.stopChallenge.bind(proctoring);
|
|
22588
22731
|
const pause = proctoring.pause.bind(proctoring);
|
|
22589
22732
|
const resume = proctoring.resume.bind(proctoring);
|
|
22590
22733
|
const onFocus = proctoring.setOnFocusCallback.bind(proctoring);
|
|
@@ -22607,6 +22750,8 @@ function useProctoring(proctoringOptions, enviromentConfig = "prod") {
|
|
|
22607
22750
|
login,
|
|
22608
22751
|
start,
|
|
22609
22752
|
finish,
|
|
22753
|
+
startChallenge,
|
|
22754
|
+
stopChallenge,
|
|
22610
22755
|
onFocus,
|
|
22611
22756
|
onLostFocus,
|
|
22612
22757
|
onChangeDevices: onChangeDevices2,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProctoringFinisherOptions } from "../proctoring/proctoring";
|
|
2
|
+
export declare class ExtensionEasyCatcher {
|
|
3
|
+
hasExtension: boolean;
|
|
4
|
+
tryes: number;
|
|
5
|
+
responseStart: boolean;
|
|
6
|
+
options: ProctoringFinisherOptions;
|
|
7
|
+
constructor(options?: ProctoringFinisherOptions);
|
|
8
|
+
checkExtensionInstalled(timeoutMs?: number): Promise<string>;
|
|
9
|
+
getSessionData(timeoutMs?: number): Promise<any>;
|
|
10
|
+
start(): Promise<boolean>;
|
|
11
|
+
}
|
package/index.js
CHANGED
|
@@ -33023,8 +33023,8 @@ var CapturePhoto = class {
|
|
|
33023
33023
|
}
|
|
33024
33024
|
};
|
|
33025
33025
|
|
|
33026
|
-
// src/extension/
|
|
33027
|
-
var
|
|
33026
|
+
// src/extension/extensionEasyProctor.ts
|
|
33027
|
+
var ExtensionEasyProctor = class {
|
|
33028
33028
|
constructor() {
|
|
33029
33029
|
this.hasExtension = false;
|
|
33030
33030
|
this.tryes = 0;
|
|
@@ -33069,6 +33069,89 @@ var Extension = class {
|
|
|
33069
33069
|
}
|
|
33070
33070
|
};
|
|
33071
33071
|
|
|
33072
|
+
// src/extension/extensionEasyCatcher.ts
|
|
33073
|
+
var ExtensionEasyCatcher = class {
|
|
33074
|
+
constructor(options) {
|
|
33075
|
+
this.hasExtension = false;
|
|
33076
|
+
this.tryes = 0;
|
|
33077
|
+
this.responseStart = false;
|
|
33078
|
+
this.options = options || {};
|
|
33079
|
+
}
|
|
33080
|
+
/**
|
|
33081
|
+
* Verifica se a extensão está instalada e ativa.
|
|
33082
|
+
* Retorna o número da versão se encontrada, ou lança erro após timeout.
|
|
33083
|
+
*/
|
|
33084
|
+
checkExtensionInstalled(timeoutMs = 2e3) {
|
|
33085
|
+
return new Promise((resolve, reject) => {
|
|
33086
|
+
let handled = false;
|
|
33087
|
+
const handler = (event) => {
|
|
33088
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "version") {
|
|
33089
|
+
handled = true;
|
|
33090
|
+
window.removeEventListener("message", handler);
|
|
33091
|
+
resolve(event.data.message);
|
|
33092
|
+
}
|
|
33093
|
+
};
|
|
33094
|
+
window.addEventListener("message", handler);
|
|
33095
|
+
window.postMessage({
|
|
33096
|
+
type: "easycatcher",
|
|
33097
|
+
func: "verifyExtensionEasycatcher"
|
|
33098
|
+
}, "*");
|
|
33099
|
+
setTimeout(() => {
|
|
33100
|
+
if (!handled) {
|
|
33101
|
+
window.removeEventListener("message", handler);
|
|
33102
|
+
reject(new Error("Extens\xE3o n\xE3o detectada ou n\xE3o respondeu."));
|
|
33103
|
+
}
|
|
33104
|
+
}, timeoutMs);
|
|
33105
|
+
});
|
|
33106
|
+
}
|
|
33107
|
+
/**
|
|
33108
|
+
* Solicita o JSON da sessão atual capturado pela extensão.
|
|
33109
|
+
*/
|
|
33110
|
+
getSessionData(timeoutMs = 5e3) {
|
|
33111
|
+
return new Promise((resolve, reject) => {
|
|
33112
|
+
let handled = false;
|
|
33113
|
+
const handler = (event) => {
|
|
33114
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "data_response") {
|
|
33115
|
+
handled = true;
|
|
33116
|
+
window.removeEventListener("message", handler);
|
|
33117
|
+
resolve(event.data.payload);
|
|
33118
|
+
}
|
|
33119
|
+
};
|
|
33120
|
+
window.addEventListener("message", handler);
|
|
33121
|
+
window.postMessage({
|
|
33122
|
+
type: "easycatcher",
|
|
33123
|
+
func: "getDataExtensionEasycatcher"
|
|
33124
|
+
}, "*");
|
|
33125
|
+
setTimeout(() => {
|
|
33126
|
+
if (!handled) {
|
|
33127
|
+
window.removeEventListener("message", handler);
|
|
33128
|
+
reject(new Error("Timeout ao aguardar dados da extens\xE3o."));
|
|
33129
|
+
}
|
|
33130
|
+
}, timeoutMs);
|
|
33131
|
+
});
|
|
33132
|
+
}
|
|
33133
|
+
start() {
|
|
33134
|
+
return new Promise((resolve, reject) => {
|
|
33135
|
+
let handled = false;
|
|
33136
|
+
const handler = (event) => {
|
|
33137
|
+
if (event.source === window && event.data.sender === "easyproctor-extension" && event.data.message_name === "started_confirmed") {
|
|
33138
|
+
handled = true;
|
|
33139
|
+
window.removeEventListener("message", handler);
|
|
33140
|
+
resolve(true);
|
|
33141
|
+
}
|
|
33142
|
+
};
|
|
33143
|
+
window.addEventListener("message", handler);
|
|
33144
|
+
window.postMessage({ type: "easycatcher", func: "startExtensionEasycatcher" }, "*");
|
|
33145
|
+
setTimeout(() => {
|
|
33146
|
+
if (!handled) {
|
|
33147
|
+
window.removeEventListener("message", handler);
|
|
33148
|
+
reject(new Error("Timeout: Extens\xE3o n\xE3o confirmou o in\xEDcio."));
|
|
33149
|
+
}
|
|
33150
|
+
}, 3e3);
|
|
33151
|
+
});
|
|
33152
|
+
}
|
|
33153
|
+
};
|
|
33154
|
+
|
|
33072
33155
|
// src/modules/onChangeDevices.ts
|
|
33073
33156
|
var onChangeDevices = class {
|
|
33074
33157
|
constructor(repositoryDevices, proctoringId2, sessionOptions, allRecorders) {
|
|
@@ -37257,7 +37340,10 @@ var Proctoring = class {
|
|
|
37257
37340
|
if (this.context.token === void 0) {
|
|
37258
37341
|
throw TOKEN_MISSING;
|
|
37259
37342
|
}
|
|
37260
|
-
|
|
37343
|
+
if (options.useChallenge) {
|
|
37344
|
+
this.extensionEasycatcher = new ExtensionEasyCatcher();
|
|
37345
|
+
}
|
|
37346
|
+
this.extension = new ExtensionEasyProctor();
|
|
37261
37347
|
this.extension.addEventListener();
|
|
37262
37348
|
const baseURL = this.backend.selectBaseUrl(this.context.type);
|
|
37263
37349
|
const devices = await enumarateDevices();
|
|
@@ -37607,6 +37693,61 @@ Error: ` + error
|
|
|
37607
37693
|
_screenStream: (_a2 = this.allRecorders.screenRecorder) == null ? void 0 : _a2.screenStream
|
|
37608
37694
|
};
|
|
37609
37695
|
}
|
|
37696
|
+
async startChallenge(templateId) {
|
|
37697
|
+
var _a2;
|
|
37698
|
+
if (!this.sessionOptions.useChallenge) {
|
|
37699
|
+
throw new Error("useChallenge is set as false on start method");
|
|
37700
|
+
}
|
|
37701
|
+
await this.extensionEasycatcher.checkExtensionInstalled().catch((err) => {
|
|
37702
|
+
throw new Error("EasyCatcher Extension is not installed");
|
|
37703
|
+
});
|
|
37704
|
+
this.extensionEasycatcher.start();
|
|
37705
|
+
const start = Date.now() - ((_a2 = this.allRecorders.cameraRecorder.getStartTime()) == null ? void 0 : _a2.getTime()) || 0;
|
|
37706
|
+
await this.backend.startChallenge({
|
|
37707
|
+
proctoringId: this.proctoringId,
|
|
37708
|
+
templateId,
|
|
37709
|
+
start
|
|
37710
|
+
}).then((resp) => {
|
|
37711
|
+
console.log(resp);
|
|
37712
|
+
this.challengeId = resp.id;
|
|
37713
|
+
}).catch((reason) => {
|
|
37714
|
+
trackers.registerError(
|
|
37715
|
+
this.proctoringId,
|
|
37716
|
+
"N\xE3o foi poss\xEDvel iniciar desafio!"
|
|
37717
|
+
);
|
|
37718
|
+
throw reason;
|
|
37719
|
+
});
|
|
37720
|
+
this.isChallengeRunning = true;
|
|
37721
|
+
}
|
|
37722
|
+
async stopChallenge() {
|
|
37723
|
+
var _a2;
|
|
37724
|
+
if (!this.isChallengeRunning) {
|
|
37725
|
+
throw new Error("Challenge not started");
|
|
37726
|
+
}
|
|
37727
|
+
try {
|
|
37728
|
+
const sessionData = await this.extensionEasycatcher.getSessionData();
|
|
37729
|
+
const end = Date.now() - ((_a2 = this.allRecorders.cameraRecorder.getStartTime()) == null ? void 0 : _a2.getTime()) || 0;
|
|
37730
|
+
await this.backend.stopChallenge(
|
|
37731
|
+
this.challengeId,
|
|
37732
|
+
{
|
|
37733
|
+
end,
|
|
37734
|
+
data: sessionData
|
|
37735
|
+
}
|
|
37736
|
+
).catch((reason) => {
|
|
37737
|
+
trackers.registerError(
|
|
37738
|
+
this.proctoringId,
|
|
37739
|
+
"N\xE3o foi poss\xEDvel finalizar o desafio no backend!"
|
|
37740
|
+
);
|
|
37741
|
+
return void 0;
|
|
37742
|
+
});
|
|
37743
|
+
this.isChallengeRunning = false;
|
|
37744
|
+
} catch (error) {
|
|
37745
|
+
trackers.registerError(
|
|
37746
|
+
this.proctoringId,
|
|
37747
|
+
"Erro ao recuperar dados da extens\xE3o: " + error.message
|
|
37748
|
+
);
|
|
37749
|
+
}
|
|
37750
|
+
}
|
|
37610
37751
|
};
|
|
37611
37752
|
|
|
37612
37753
|
// src/proctoring/SignTerm.ts
|
|
@@ -37834,6 +37975,8 @@ function useProctoring(proctoringOptions, enviromentConfig = "prod") {
|
|
|
37834
37975
|
return originalStart(parameters2, videoOptions);
|
|
37835
37976
|
};
|
|
37836
37977
|
const finish = proctoring.finish.bind(proctoring);
|
|
37978
|
+
const startChallenge = proctoring.startChallenge.bind(proctoring);
|
|
37979
|
+
const stopChallenge = proctoring.stopChallenge.bind(proctoring);
|
|
37837
37980
|
const pause = proctoring.pause.bind(proctoring);
|
|
37838
37981
|
const resume = proctoring.resume.bind(proctoring);
|
|
37839
37982
|
const onFocus = proctoring.setOnFocusCallback.bind(proctoring);
|
|
@@ -37856,6 +37999,8 @@ function useProctoring(proctoringOptions, enviromentConfig = "prod") {
|
|
|
37856
37999
|
login,
|
|
37857
38000
|
start,
|
|
37858
38001
|
finish,
|
|
38002
|
+
startChallenge,
|
|
38003
|
+
stopChallenge,
|
|
37859
38004
|
onFocus,
|
|
37860
38005
|
onLostFocus,
|
|
37861
38006
|
onChangeDevices: onChangeDevices2,
|
package/package.json
CHANGED
|
@@ -41,6 +41,7 @@ export declare class Proctoring {
|
|
|
41
41
|
private readonly repository;
|
|
42
42
|
private readonly repositoryDevices;
|
|
43
43
|
private extension;
|
|
44
|
+
private extensionEasycatcher;
|
|
44
45
|
private deviceData;
|
|
45
46
|
private paramsConfig;
|
|
46
47
|
private proctoringId;
|
|
@@ -92,4 +93,8 @@ export declare class Proctoring {
|
|
|
92
93
|
audioStream?: MediaStream;
|
|
93
94
|
_screenStream: MediaStream | undefined;
|
|
94
95
|
}>;
|
|
96
|
+
private isChallengeRunning;
|
|
97
|
+
private challengeId;
|
|
98
|
+
startChallenge(templateId: string): Promise<void>;
|
|
99
|
+
stopChallenge(): Promise<void>;
|
|
95
100
|
}
|
|
@@ -5,6 +5,8 @@ export declare function useProctoring(proctoringOptions: ProctoringContext, envi
|
|
|
5
5
|
login: () => Promise<void>;
|
|
6
6
|
start: (parameters: any, videoOptions: any) => Promise<import("../dtos/StartProctoringResponse").default>;
|
|
7
7
|
finish: (options?: import("./proctoring").ProctoringFinisherOptions) => Promise<void>;
|
|
8
|
+
startChallenge: (templateId: string) => Promise<void>;
|
|
9
|
+
stopChallenge: () => Promise<void>;
|
|
8
10
|
onFocus: (cb: () => void) => Promise<void>;
|
|
9
11
|
onLostFocus: (cb: () => void) => Promise<void>;
|
|
10
12
|
onChangeDevices: (options?: import("./proctoring").ProctoringChangeDevicesOptions) => Promise<void>;
|