interview-widget 3.2.22 → 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 +9 -8
- package/dist/components/interview/proctoring/gaze-detection/hooks/use-camera-setup.d.ts +1 -0
- package/dist/components/interview/proctoring/gaze-detection/hooks/use-gaze-analysis.d.ts +1 -1
- package/dist/components/interview/proctoring/gaze-detection/hooks/use-render-loop.d.ts +1 -1
- package/dist/components/media/video-feed.d.ts +2 -0
- package/dist/context/proctoring-context.d.ts +13 -0
- package/dist/hooks/use-video-recording.d.ts +6 -0
- package/dist/services/api/endpoints.d.ts +1 -0
- package/dist/services/api/interview-api.d.ts +15 -7
- package/dist/types.d.ts +12 -0
- package/dist/{widget.es.3.2.22.js → widget.es.3.3.1.js} +2680 -2547
- package/dist/widget.umd.3.3.1.js +179 -0
- package/package.json +9 -9
- package/dist/widget.umd.3.2.22.js +0 -179
- /package/dist/{widget.3.2.22.css → widget.3.3.1.css} +0 -0
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
|
|
212
|
-
| -------------------- | --------- |
|
|
213
|
-
| allow_answer_editing | `boolean` | true
|
|
214
|
-
| capture_screenshots | `boolean` | false
|
|
215
|
-
|
|
|
216
|
-
|
|
|
217
|
-
|
|
|
218
|
-
|
|
|
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
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const useCameraSetup: (videoRef: React.RefObject<HTMLVideoElement | null>, isModelLoaded: boolean, renderLoop: () => void, setStatusMessage: (message: string) => void) => {
|
|
2
2
|
animationFrameRef: import('react').RefObject<number | null>;
|
|
3
|
+
stream: MediaStream | null;
|
|
3
4
|
};
|
|
@@ -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
|
-
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"]);
|
|
@@ -31,21 +31,29 @@ declare class InterviewAPI {
|
|
|
31
31
|
*/
|
|
32
32
|
getInterviewConfig(interviewId: string): Promise<InterviewConfigResponse>;
|
|
33
33
|
/**
|
|
34
|
-
* Request a signed URL for uploading
|
|
34
|
+
* Request a signed URL for uploading an asset
|
|
35
35
|
*/
|
|
36
|
-
|
|
36
|
+
requestUploadUrl(interviewId: string, filename: string | undefined, mimeType: string, assetType: string): Promise<ScreenshotUploadRequestResponse>;
|
|
37
37
|
/**
|
|
38
|
-
* Upload
|
|
38
|
+
* Upload asset to the provided signed URL
|
|
39
39
|
*/
|
|
40
|
-
|
|
40
|
+
uploadAsset(uploadUrl: string, blob: Blob, mimeType: string): Promise<void>;
|
|
41
41
|
/**
|
|
42
|
-
* Confirm
|
|
42
|
+
* Confirm asset upload
|
|
43
43
|
*/
|
|
44
|
-
|
|
44
|
+
confirmAssetUpload(assetId: string): Promise<void>;
|
|
45
45
|
/**
|
|
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 };
|
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
|
+
}
|