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 CHANGED
@@ -14926,8 +14926,8 @@ var CapturePhoto = class {
14926
14926
  }
14927
14927
  };
14928
14928
 
14929
- // src/extension/extension.ts
14930
- var Extension = class {
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
- this.extension = new Extension();
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
+ }
@@ -1,5 +1,5 @@
1
1
  import { ProctoringFinisherOptions } from "../proctoring/proctoring";
2
- export declare class Extension {
2
+ export declare class ExtensionEasyProctor {
3
3
  hasExtension: boolean;
4
4
  tryes: number;
5
5
  responseStart: boolean;
package/index.js CHANGED
@@ -33023,8 +33023,8 @@ var CapturePhoto = class {
33023
33023
  }
33024
33024
  };
33025
33025
 
33026
- // src/extension/extension.ts
33027
- var Extension = class {
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
- this.extension = new Extension();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyproctor-hml",
3
- "version": "2.5.33",
3
+ "version": "2.5.34",
4
4
  "description": "Modulo web de gravação do EasyProctor",
5
5
  "main": "./index.js",
6
6
  "module": "./esm/index.js",
@@ -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>;