interview-widget 3.3.0 → 3.3.1

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
@@ -208,14 +208,15 @@ Pass this object to `InterviewWidgetProvider` via the `config` prop. Tables list
208
208
 
209
209
  ### Interview
210
210
 
211
- | Prop | Type | Default | Description |
212
- | -------------------- | --------- | ------- | ------------------------------------------ |
213
- | allow_answer_editing | `boolean` | true | Enable/disable answer editing phase |
214
- | capture_screenshots | `boolean` | false | Enable/disable periodic screenshot captures |
215
- | timers | `object` | [see below](#timers) | Per-phase and global timing configuration |
216
- | stt | `object` | [see below](#stt-speech-to-text) | Speech-to-Text provider settings |
217
- | tts | `object` | [see below](#tts-text-to-speech) | Text-to-Speech provider settings |
218
- | proctoring | `object` | [see below](#proctoring) | Proctoring settings and cheating detection |
211
+ | Prop | Type | Default | Description |
212
+ | -------------------- | --------- | -------------------------------- | ------------------------------------------- |
213
+ | allow_answer_editing | `boolean` | true | Enable/disable answer editing phase |
214
+ | capture_screenshots | `boolean` | false | Enable/disable periodic screenshot captures |
215
+ | record_video | `boolean` | false | Enable/disable video recording |
216
+ | timers | `object` | [see below](#timers) | Per-phase and global timing configuration |
217
+ | stt | `object` | [see below](#stt-speech-to-text) | Speech-to-Text provider settings |
218
+ | tts | `object` | [see below](#tts-text-to-speech) | Text-to-Speech provider settings |
219
+ | proctoring | `object` | [see below](#proctoring) | Proctoring settings and cheating detection |
219
220
 
220
221
  #### Timers
221
222
 
@@ -2,7 +2,7 @@ import { Landmark, ReferenceData } from '../utils/types';
2
2
  export declare const useGazeAnalysis: () => {
3
3
  engagement: number;
4
4
  isLookingAway: boolean;
5
- analyzeGaze: (landmarks: Landmark[], reference: ReferenceData, gazeAnalysisEnabled: boolean) => {
5
+ analyzeGaze: (landmarks: Landmark[] | null, reference: ReferenceData, gazeAnalysisEnabled: boolean) => {
6
6
  engagement: number;
7
7
  isLookingAway: boolean;
8
8
  } | undefined;
@@ -1,5 +1,5 @@
1
1
  import { Landmark } from '../utils/types';
2
- export declare const useRenderLoop: (videoRef: React.RefObject<HTMLVideoElement | null>, canvasRef: React.RefObject<HTMLCanvasElement | null>, faceLandmarkerRef: React.RefObject<any>, updateFPS: () => void, analyzeFace: (results: any, referenceSet: boolean, referenceRef: Landmark[], setStatusMessage: (message: string) => void) => Landmark[] | null, drawWithEngagementBar: (canvas: HTMLCanvasElement, video: HTMLVideoElement, landmarks: Landmark[], showLandmarks: boolean, showEngagementBar: boolean, gazeAnalysisEnabled: boolean, referenceSet: boolean) => void, clearCanvas: (canvas: HTMLCanvasElement, video: HTMLVideoElement) => void, analyzeGaze: (landmarks: Landmark[], reference: any, gazeAnalysisEnabled: boolean) => void, referenceSet: boolean, referenceRef: React.RefObject<any>, showLandmarks: boolean, showEngagementBar: boolean, gazeAnalysisEnabled: boolean, setStatusMessage: (message: string) => void, setReferenceFaceNotDetected: (detected: boolean) => void) => {
2
+ export declare const useRenderLoop: (videoRef: React.RefObject<HTMLVideoElement | null>, canvasRef: React.RefObject<HTMLCanvasElement | null>, faceLandmarkerRef: React.RefObject<any>, updateFPS: () => void, analyzeFace: (results: any, referenceSet: boolean, referenceRef: Landmark[], setStatusMessage: (message: string) => void) => Landmark[] | null, drawWithEngagementBar: (canvas: HTMLCanvasElement, video: HTMLVideoElement, landmarks: Landmark[], showLandmarks: boolean, showEngagementBar: boolean, gazeAnalysisEnabled: boolean, referenceSet: boolean) => void, clearCanvas: (canvas: HTMLCanvasElement, video: HTMLVideoElement) => void, analyzeGaze: (landmarks: Landmark[] | null, reference: any, gazeAnalysisEnabled: boolean) => void, referenceSet: boolean, referenceRef: React.RefObject<any>, showLandmarks: boolean, showEngagementBar: boolean, gazeAnalysisEnabled: boolean, setStatusMessage: (message: string) => void, setReferenceFaceNotDetected: (detected: boolean) => void) => {
3
3
  renderLoop: () => void;
4
4
  animationFrameRef: import('react').RefObject<number | null>;
5
5
  };
@@ -1,8 +1,21 @@
1
1
  import { default as React } from 'react';
2
2
  import { ViolationLogger } from '../types';
3
3
  import { GazeViolationCounters, GazeViolationType } from '../components/interview/proctoring/gaze-detection/utils/types';
4
+ export type ProctoringState = {
5
+ logViolations: ViolationLogger[];
6
+ totalViolations: number;
7
+ gazeViolationCounters: GazeViolationCounters;
8
+ referenceSet: boolean;
9
+ referenceRef: {
10
+ x: number;
11
+ y: number;
12
+ noseX: number;
13
+ noseY: number;
14
+ };
15
+ };
4
16
  export declare const ProctoringProvider: React.FC<{
5
17
  children: React.ReactNode;
18
+ interviewId?: string;
6
19
  }>;
7
20
  export declare const useProctoringStore: () => {
8
21
  logViolations: ViolationLogger[];
@@ -1,4 +1,4 @@
1
- export declare function useVideoRecordingStream(interviewId: string): {
1
+ export declare function useVideoRecordingStream(interviewId: string, record_video?: boolean): {
2
2
  startRecording: (stream: MediaStream) => void;
3
3
  stopRecording: () => void;
4
4
  isRecording: boolean;
@@ -15,4 +15,5 @@ export declare const API_ENDPOINTS: {
15
15
  EXIT: (interviewId: string) => string;
16
16
  CONFIG: (interviewId: string) => string;
17
17
  TRANSCRIPTION: (interviewId: string) => string;
18
+ VIOLATIONS: (interviewId: string) => string;
18
19
  };
@@ -1,4 +1,4 @@
1
- import { InterviewConfigResponse, InterviewQuestionPayload, InterviewQuestionResponse, InterviewSubmitAnswerPayload, InterviewTranscriptResponse, InterviewWidgetConfig, ScreenshotUploadRequestResponse } from '../../types';
1
+ import { InterviewConfigResponse, InterviewQuestionPayload, InterviewQuestionResponse, InterviewSubmitAnswerPayload, InterviewTranscriptResponse, InterviewViolationsPayload, InterviewViolationsResponse, InterviewWidgetConfig, ScreenshotUploadRequestResponse } from '../../types';
2
2
  declare class InterviewAPI {
3
3
  private config;
4
4
  constructor(config?: InterviewWidgetConfig["api"]);
@@ -46,6 +46,14 @@ declare class InterviewAPI {
46
46
  * Get interview transcription
47
47
  */
48
48
  getInterviewTranscription(interviewId: string): Promise<InterviewTranscriptResponse>;
49
+ /**
50
+ * Get violations snapshot for an interview
51
+ */
52
+ getViolations(interviewId: string): Promise<InterviewViolationsResponse>;
53
+ /**
54
+ * Update violations snapshot for an interview
55
+ */
56
+ updateViolations({ interviewId, violations, }: InterviewViolationsPayload): Promise<InterviewViolationsResponse>;
49
57
  }
50
58
  export declare const interviewAPI: InterviewAPI;
51
59
  export { InterviewAPI };
@@ -0,0 +1 @@
1
+ export declare const stopAllServices: () => void;
package/dist/types.d.ts CHANGED
@@ -50,6 +50,7 @@ export interface InterviewWidgetConfig {
50
50
  interview?: {
51
51
  allow_answer_editing?: boolean;
52
52
  capture_screenshots?: boolean;
53
+ record_video?: boolean;
53
54
  timers?: {
54
55
  thinkingDuration?: number;
55
56
  answeringDuration?: number;
@@ -135,3 +136,14 @@ export interface TranscriptMessage {
135
136
  question_generated_at: string;
136
137
  answer_submitted_at: string | null;
137
138
  }
139
+ export interface InterviewViolationsResponse {
140
+ success: boolean;
141
+ message: string;
142
+ data: any;
143
+ error?: string | null;
144
+ code?: number;
145
+ }
146
+ export interface InterviewViolationsPayload {
147
+ interviewId: string;
148
+ violations: any;
149
+ }