@a4anthony/proctorkit-vue 0.1.5 → 0.2.0
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 +176 -8
- package/dist/ProctoredAssessment.vue.d.ts +70 -2
- package/dist/ProctoredAssessment.vue.d.ts.map +1 -1
- package/dist/ProctoringDeviceSettings.vue.d.ts +27 -1
- package/dist/ProctoringDeviceSettings.vue.d.ts.map +1 -1
- package/dist/ProctoringSystemCheck.vue.d.ts +39 -11
- package/dist/ProctoringSystemCheck.vue.d.ts.map +1 -1
- package/dist/browser-face-detector.d.ts +59 -0
- package/dist/browser-face-detector.d.ts.map +1 -0
- package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts +24 -0
- package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts.map +1 -0
- package/dist/check-cards/system/DisplayRecovery.vue.d.ts +25 -0
- package/dist/check-cards/system/DisplayRecovery.vue.d.ts.map +1 -0
- package/dist/check-cards/system/SystemCheckCard.vue.d.ts +13 -1
- package/dist/check-cards/system/SystemCheckCard.vue.d.ts.map +1 -1
- package/dist/check-cards/system/display-progress-story.d.ts +468 -0
- package/dist/check-cards/system/display-progress-story.d.ts.map +1 -0
- package/dist/check-cards/system/display-recovery-story.d.ts +290 -0
- package/dist/check-cards/system/display-recovery-story.d.ts.map +1 -0
- package/dist/demo-runner/QuestionCard.vue.d.ts.map +1 -1
- package/dist/detect-face.d.ts +22 -95
- package/dist/detect-face.d.ts.map +1 -1
- package/dist/i18n/merge.d.ts.map +1 -1
- package/dist/index.d.ts +19 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9637 -2485
- package/dist/media-controls/AudioPlayer.vue.d.ts +43 -20
- package/dist/media-controls/AudioPlayer.vue.d.ts.map +1 -1
- package/dist/media-controls/AudioRecorder.vue.d.ts +171 -11
- package/dist/media-controls/AudioRecorder.vue.d.ts.map +1 -1
- package/dist/media-controls/RecorderUploadIndicator.vue.d.ts +17 -0
- package/dist/media-controls/RecorderUploadIndicator.vue.d.ts.map +1 -0
- package/dist/media-controls/VideoPlayer.vue.d.ts +36 -13
- package/dist/media-controls/VideoPlayer.vue.d.ts.map +1 -1
- package/dist/media-controls/VideoRecorder.vue.d.ts +90 -10
- package/dist/media-controls/VideoRecorder.vue.d.ts.map +1 -1
- package/dist/media-controls/audio-recorder-messages.d.ts +15 -0
- package/dist/media-controls/audio-recorder-messages.d.ts.map +1 -0
- package/dist/media-controls/local-media-playback-client.d.ts +2 -6
- package/dist/media-controls/local-media-playback-client.d.ts.map +1 -1
- package/dist/media-controls/local-media-recording-client.d.ts.map +1 -1
- package/dist/media-controls/media-recovery-story.d.ts +9 -0
- package/dist/media-controls/media-recovery-story.d.ts.map +1 -0
- package/dist/media-controls/storybook-mock-client.d.ts +2 -0
- package/dist/media-controls/storybook-mock-client.d.ts.map +1 -1
- package/dist/media-controls/types.d.ts +63 -7
- package/dist/media-controls/types.d.ts.map +1 -1
- package/dist/media-controls/ui-config.d.ts +2 -2
- package/dist/media-controls/ui-config.d.ts.map +1 -1
- package/dist/media-controls/useLiveInputCheck.d.ts +18 -0
- package/dist/media-controls/useLiveInputCheck.d.ts.map +1 -0
- package/dist/media-controls/useMediaClipRecorder.d.ts +90 -12
- package/dist/media-controls/useMediaClipRecorder.d.ts.map +1 -1
- package/dist/media-controls/useMediaFilePlayback.d.ts +8 -1
- package/dist/media-controls/useMediaFilePlayback.d.ts.map +1 -1
- package/dist/media-controls/useMinimumVisibleUpload.d.ts +18 -0
- package/dist/media-controls/useMinimumVisibleUpload.d.ts.map +1 -0
- package/dist/proctored-assessment/PreparationGate.vue.d.ts +16 -0
- package/dist/proctored-assessment/PreparationGate.vue.d.ts.map +1 -0
- package/dist/proctored-assessment/preparation-feedback.d.ts +7 -0
- package/dist/proctored-assessment/preparation-feedback.d.ts.map +1 -0
- package/dist/proctored-assessment/replay-failure-queue.d.ts +18 -0
- package/dist/proctored-assessment/replay-failure-queue.d.ts.map +1 -0
- package/dist/proctored-assessment/replay-failure-queue.test.d.ts +2 -0
- package/dist/proctored-assessment/replay-failure-queue.test.d.ts.map +1 -0
- package/dist/proctored-assessment/request-deadline.d.ts +1 -0
- package/dist/proctored-assessment/request-deadline.d.ts.map +1 -1
- package/dist/proctored-assessment/resume-microphone-route.d.ts +13 -0
- package/dist/proctored-assessment/resume-microphone-route.d.ts.map +1 -0
- package/dist/proctored-assessment/resume-microphone-route.test.d.ts +2 -0
- package/dist/proctored-assessment/resume-microphone-route.test.d.ts.map +1 -0
- package/dist/proctored-assessment/resume-probe.d.ts +13 -0
- package/dist/proctored-assessment/resume-probe.d.ts.map +1 -1
- package/dist/proctored-assessment/resume-speaker-confirmation.d.ts +27 -0
- package/dist/proctored-assessment/resume-speaker-confirmation.d.ts.map +1 -0
- package/dist/proctored-assessment/resume-speaker-route.d.ts +32 -0
- package/dist/proctored-assessment/resume-speaker-route.d.ts.map +1 -0
- package/dist/proctored-assessment/session-start.d.ts +2 -2
- package/dist/proctored-assessment/types.d.ts +14 -4
- package/dist/proctored-assessment/types.d.ts.map +1 -1
- package/dist/proctored-assessment/usePreparationRetryTiming.d.ts +13 -0
- package/dist/proctored-assessment/usePreparationRetryTiming.d.ts.map +1 -0
- package/dist/proctored-assessment/useResumeDisplayGuard.d.ts +20 -0
- package/dist/proctored-assessment/useResumeDisplayGuard.d.ts.map +1 -0
- package/dist/proctoring-client.d.ts +6 -2
- package/dist/proctoring-client.d.ts.map +1 -1
- package/dist/proctoring-system-check-contract.d.ts +2 -0
- package/dist/proctoring-system-check-contract.d.ts.map +1 -1
- package/dist/runtime-devices/DevicePickerItem.vue.d.ts +58 -0
- package/dist/runtime-devices/DevicePickerItem.vue.d.ts.map +1 -0
- package/dist/runtime-devices/PickerMessage.vue.d.ts +17 -0
- package/dist/runtime-devices/PickerMessage.vue.d.ts.map +1 -0
- package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts +89 -0
- package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts.map +1 -0
- package/dist/runtime-devices/device-picker-messages.d.ts +42 -0
- package/dist/runtime-devices/device-picker-messages.d.ts.map +1 -0
- package/dist/runtime-devices/microphone-attention.d.ts +48 -0
- package/dist/runtime-devices/microphone-attention.d.ts.map +1 -0
- package/dist/runtime-devices/microphone-check-messages.d.ts +13 -0
- package/dist/runtime-devices/microphone-check-messages.d.ts.map +1 -0
- package/dist/runtime-devices/runtime-device-activity.d.ts +16 -0
- package/dist/runtime-devices/runtime-device-activity.d.ts.map +1 -0
- package/dist/runtime-devices/runtime-device-selection.d.ts +11 -0
- package/dist/runtime-devices/runtime-device-selection.d.ts.map +1 -0
- package/dist/runtime-devices/useRuntimeDevice.d.ts +72 -0
- package/dist/runtime-devices/useRuntimeDevice.d.ts.map +1 -0
- package/dist/runtime-devices/useTrackLoss.d.ts +15 -0
- package/dist/runtime-devices/useTrackLoss.d.ts.map +1 -0
- package/dist/style.css +367 -14
- package/dist/text-answer/ProctoredTextarea.vue.d.ts +8 -1
- package/dist/text-answer/ProctoredTextarea.vue.d.ts.map +1 -1
- package/dist/text-answer/useProctoredText.d.ts +5 -2
- package/dist/text-answer/useProctoredText.d.ts.map +1 -1
- package/dist/ui/ProctoringAlert.vue.d.ts.map +1 -1
- package/dist/ui/ProctoringFileUpload.vue.d.ts +3 -3
- package/dist/ui/ProctoringFileUpload.vue.d.ts.map +1 -1
- package/dist/ui/ProctoringInput.vue.d.ts +3 -3
- package/dist/ui/ProctoringInput.vue.d.ts.map +1 -1
- package/dist/ui/ProctoringSelect.vue.d.ts +2 -2
- package/dist/ui/ProctoringSelect.vue.d.ts.map +1 -1
- package/dist/usePreflightCheck.d.ts +4 -3
- package/dist/usePreflightCheck.d.ts.map +1 -1
- package/dist/vision_bundle-8xEDyfqS.js +4160 -0
- package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts +11 -0
- package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts.map +1 -0
- package/dist/wizard/BrowserPermissionLocation.vue.d.ts +9 -0
- package/dist/wizard/BrowserPermissionLocation.vue.d.ts.map +1 -0
- package/dist/wizard/CameraStep.vue.d.ts +10 -1
- package/dist/wizard/CameraStep.vue.d.ts.map +1 -1
- package/dist/wizard/CandidateHeadshotField.vue.d.ts.map +1 -1
- package/dist/wizard/CandidateIntakeStep.vue.d.ts +3 -0
- package/dist/wizard/CandidateIntakeStep.vue.d.ts.map +1 -1
- package/dist/wizard/ChecklistShell.vue.d.ts +3 -0
- package/dist/wizard/ChecklistShell.vue.d.ts.map +1 -1
- package/dist/wizard/FinalStep.vue.d.ts +6 -2
- package/dist/wizard/FinalStep.vue.d.ts.map +1 -1
- package/dist/wizard/MediaDeviceSelect.vue.d.ts +11 -1
- package/dist/wizard/MediaDeviceSelect.vue.d.ts.map +1 -1
- package/dist/wizard/MicStep.vue.d.ts +24 -3
- package/dist/wizard/MicStep.vue.d.ts.map +1 -1
- package/dist/wizard/PermissionDeniedPanel.vue.d.ts +9 -4
- package/dist/wizard/PermissionDeniedPanel.vue.d.ts.map +1 -1
- package/dist/wizard/ResumeCheck.vue.d.ts +16 -2
- package/dist/wizard/ResumeCheck.vue.d.ts.map +1 -1
- package/dist/wizard/SpeakerStep.vue.d.ts +17 -4
- package/dist/wizard/SpeakerStep.vue.d.ts.map +1 -1
- package/dist/wizard/SystemStep.vue.d.ts +9 -0
- package/dist/wizard/SystemStep.vue.d.ts.map +1 -1
- package/dist/wizard/WizardShell.vue.d.ts +3 -3
- package/dist/wizard/WizardShell.vue.d.ts.map +1 -1
- package/dist/wizard/candidate-intake-draft.d.ts +9 -0
- package/dist/wizard/candidate-intake-draft.d.ts.map +1 -0
- package/dist/wizard/display-diagnostics.d.ts +21 -0
- package/dist/wizard/display-diagnostics.d.ts.map +1 -0
- package/dist/wizard/event-telemetry.d.ts +24 -0
- package/dist/wizard/event-telemetry.d.ts.map +1 -0
- package/dist/wizard/media-device-list.d.ts +8 -1
- package/dist/wizard/media-device-list.d.ts.map +1 -1
- package/dist/wizard/microphone-preflight-trace.d.ts +10 -0
- package/dist/wizard/microphone-preflight-trace.d.ts.map +1 -0
- package/dist/wizard/microphone-preflight-trace.test.d.ts +2 -0
- package/dist/wizard/microphone-preflight-trace.test.d.ts.map +1 -0
- package/dist/wizard/resume-check-stories/shared.d.ts +35 -11
- package/dist/wizard/resume-check-stories/shared.d.ts.map +1 -1
- package/dist/wizard/speaker-test-tone.d.ts +29 -4
- package/dist/wizard/speaker-test-tone.d.ts.map +1 -1
- package/dist/wizard/useCandidateIssues.d.ts +30 -0
- package/dist/wizard/useCandidateIssues.d.ts.map +1 -0
- package/dist/wizard/useCandidateIssues.test.d.ts +2 -0
- package/dist/wizard/useCandidateIssues.test.d.ts.map +1 -0
- package/dist/wizard/useLiveDisplayCheck.d.ts +8 -0
- package/dist/wizard/useLiveDisplayCheck.d.ts.map +1 -0
- package/dist/wizard/usePreflightTelemetry.d.ts +6 -26
- package/dist/wizard/usePreflightTelemetry.d.ts.map +1 -1
- package/dist/wizard/useWizardSteps.d.ts +10 -1
- package/dist/wizard/useWizardSteps.d.ts.map +1 -1
- package/package.json +4 -3
|
@@ -1,32 +1,40 @@
|
|
|
1
|
-
import { type ProctoringClient, type VideoClipHandle } from "@a4anthony/proctorkit-sdk";
|
|
1
|
+
import { type AudioClipAnswerReference, type ProctoringClient, type VideoClipHandle } from "@a4anthony/proctorkit-sdk";
|
|
2
2
|
import type { MediaClipDataSink, MediaClipDroppedPayload, MediaClipErrorPayload, MediaClipKind, MediaClipMirrorErrorPayload, MediaClipStartedPayload, MediaClipStoppedPayload, MediaClipUploadedPayload } from "./types.js";
|
|
3
3
|
export declare const DEFAULT_CLIP_MAX_DURATION_MS = 120000;
|
|
4
4
|
export type AudioClipRecorderClient = Pick<ProctoringClient, "recordAudioClip">;
|
|
5
5
|
export type VideoClipRecorderClient = Pick<ProctoringClient, "recordVideoClip">;
|
|
6
6
|
interface UseMediaClipRecorderBaseOptions {
|
|
7
7
|
kind: MediaClipKind;
|
|
8
|
+
getClipId?: () => string | undefined;
|
|
8
9
|
getMaxDurationMs: () => number | undefined;
|
|
9
10
|
getStream?: () => MediaStream | undefined;
|
|
10
11
|
shouldStopStreamOnFinalize?: () => boolean;
|
|
11
12
|
onStarted?: (payload: MediaClipStartedPayload) => void;
|
|
13
|
+
onCaptureReleased?: () => void;
|
|
12
14
|
onStopped?: (payload: MediaClipStoppedPayload) => void;
|
|
13
15
|
onUploaded?: (payload: MediaClipUploadedPayload) => void;
|
|
14
16
|
onDropped?: (payload: MediaClipDroppedPayload) => void;
|
|
15
17
|
onError?: (payload: MediaClipErrorPayload) => void;
|
|
16
18
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* proctoring-server upload and never affects the clip outcome.
|
|
19
|
+
* Host primary delivery of the finalized clip, resolved at start time.
|
|
20
|
+
* ProctorKit delivery runs independently when an active client exists.
|
|
20
21
|
* Honoured for both `kind: "audio"` and `kind: "video"`.
|
|
21
22
|
*/
|
|
22
23
|
getOnClipData?: () => MediaClipDataSink | undefined;
|
|
23
|
-
/**
|
|
24
|
+
/** Whether getOnClipData is the primary delivery path. */
|
|
25
|
+
isClipDataPrimary?: () => boolean;
|
|
26
|
+
/** Whether an active ProctorKit client should deliver only in the background. */
|
|
27
|
+
isProctoringUploadBackground?: () => boolean;
|
|
28
|
+
/** Result destination when no host `sendClip` controls completion. */
|
|
29
|
+
getDefaultDelivery?: () => "proctorkit" | "local";
|
|
30
|
+
/** Notified when the primary client delivery (`getOnClipData`) rejects. */
|
|
24
31
|
onClipDataError?: (payload: MediaClipMirrorErrorPayload) => void;
|
|
25
32
|
}
|
|
26
33
|
type UseMediaClipRecorderOptions = (UseMediaClipRecorderBaseOptions & {
|
|
27
34
|
kind: "audio";
|
|
28
35
|
getClient: () => AudioClipRecorderClient | null | undefined;
|
|
29
36
|
getVideoOptions?: never;
|
|
37
|
+
getProctoringFallback?: () => AudioClipAnswerReference | undefined;
|
|
30
38
|
}) | (UseMediaClipRecorderBaseOptions & {
|
|
31
39
|
kind: "video";
|
|
32
40
|
getClient: () => VideoClipRecorderClient | null | undefined;
|
|
@@ -37,16 +45,12 @@ type UseMediaClipRecorderOptions = (UseMediaClipRecorderBaseOptions & {
|
|
|
37
45
|
});
|
|
38
46
|
export declare function formatMediaDuration(ms: number): string;
|
|
39
47
|
export declare function useMediaClipRecorder(options: UseMediaClipRecorderOptions): {
|
|
40
|
-
activeClip: import("vue").
|
|
41
|
-
|
|
42
|
-
stop: () => Promise<void>;
|
|
43
|
-
} | null, VideoClipHandle | {
|
|
44
|
-
readonly clipNumber: number;
|
|
45
|
-
stop: () => Promise<void>;
|
|
46
|
-
} | null>;
|
|
48
|
+
activeClip: import("vue").ShallowRef<VideoClipHandle | null, VideoClipHandle | null>;
|
|
49
|
+
clipId: import("vue").Ref<string | null, string | null>;
|
|
47
50
|
clipNumber: import("vue").Ref<number | null, number | null>;
|
|
48
51
|
dropped: import("vue").Ref<{
|
|
49
52
|
kind: MediaClipKind;
|
|
53
|
+
clipId: string;
|
|
50
54
|
clipNumber: number;
|
|
51
55
|
code: import("./types.js").MediaClipDropCode;
|
|
52
56
|
reason: string;
|
|
@@ -61,9 +65,17 @@ export declare function useMediaClipRecorder(options: UseMediaClipRecorderOption
|
|
|
61
65
|
peakDb: number;
|
|
62
66
|
silentRatio: number;
|
|
63
67
|
lowVolumeRatio: number;
|
|
68
|
+
inputLiveness?: {
|
|
69
|
+
digitalSilenceRatio: number;
|
|
70
|
+
longestDigitalSilenceMs: number;
|
|
71
|
+
longestMutedMs: number;
|
|
72
|
+
suspendedMs: number;
|
|
73
|
+
noInput: boolean;
|
|
74
|
+
} | undefined;
|
|
64
75
|
} | undefined;
|
|
65
76
|
} | null, MediaClipDroppedPayload | {
|
|
66
77
|
kind: MediaClipKind;
|
|
78
|
+
clipId: string;
|
|
67
79
|
clipNumber: number;
|
|
68
80
|
code: import("./types.js").MediaClipDropCode;
|
|
69
81
|
reason: string;
|
|
@@ -78,6 +90,13 @@ export declare function useMediaClipRecorder(options: UseMediaClipRecorderOption
|
|
|
78
90
|
peakDb: number;
|
|
79
91
|
silentRatio: number;
|
|
80
92
|
lowVolumeRatio: number;
|
|
93
|
+
inputLiveness?: {
|
|
94
|
+
digitalSilenceRatio: number;
|
|
95
|
+
longestDigitalSilenceMs: number;
|
|
96
|
+
longestMutedMs: number;
|
|
97
|
+
suspendedMs: number;
|
|
98
|
+
noInput: boolean;
|
|
99
|
+
} | undefined;
|
|
81
100
|
} | undefined;
|
|
82
101
|
} | null>;
|
|
83
102
|
elapsedLabel: import("vue").ComputedRef<string>;
|
|
@@ -94,17 +113,42 @@ export declare function useMediaClipRecorder(options: UseMediaClipRecorderOption
|
|
|
94
113
|
message: string;
|
|
95
114
|
} | null>;
|
|
96
115
|
isBusy: import("vue").ComputedRef<boolean>;
|
|
116
|
+
isMirroring: import("vue").Ref<boolean, boolean>;
|
|
97
117
|
isRecording: import("vue").Ref<boolean, boolean>;
|
|
98
118
|
isStarting: import("vue").Ref<boolean, boolean>;
|
|
99
119
|
isStopping: import("vue").Ref<boolean, boolean>;
|
|
120
|
+
isRetryingCanonicalUpload: import("vue").Ref<boolean, boolean>;
|
|
121
|
+
isRetryingMirrorUpload: import("vue").Ref<boolean, boolean>;
|
|
122
|
+
isRetryingUpload: import("vue").ComputedRef<boolean>;
|
|
123
|
+
isAwaitingFallback: import("vue").Ref<boolean, boolean>;
|
|
100
124
|
maxDurationMs: import("vue").ComputedRef<number>;
|
|
125
|
+
mirrorUploadProgress: import("vue").Ref<number | null, number | null>;
|
|
126
|
+
mirrorFailure: import("vue").Ref<{
|
|
127
|
+
kind: MediaClipKind;
|
|
128
|
+
clipId: string;
|
|
129
|
+
clipNumber: number;
|
|
130
|
+
error: Error;
|
|
131
|
+
message: string;
|
|
132
|
+
} | null, MediaClipMirrorErrorPayload | {
|
|
133
|
+
kind: MediaClipKind;
|
|
134
|
+
clipId: string;
|
|
135
|
+
clipNumber: number;
|
|
136
|
+
error: Error;
|
|
137
|
+
message: string;
|
|
138
|
+
} | null>;
|
|
139
|
+
canRetryCanonicalUpload: import("vue").ComputedRef<boolean>;
|
|
140
|
+
canRetryMirrorUpload: import("vue").ComputedRef<boolean>;
|
|
101
141
|
progress: import("vue").ComputedRef<number>;
|
|
102
142
|
remainingLabel: import("vue").ComputedRef<string>;
|
|
103
143
|
remainingMs: import("vue").ComputedRef<number>;
|
|
104
144
|
start: () => Promise<void>;
|
|
105
145
|
stop: () => Promise<void>;
|
|
146
|
+
retryCanonicalUpload: () => Promise<void>;
|
|
147
|
+
retryMirrorUpload: () => Promise<void>;
|
|
106
148
|
uploaded: import("vue").Ref<{
|
|
107
149
|
kind: MediaClipKind;
|
|
150
|
+
clipId: string;
|
|
151
|
+
delivery: "client" | "fallback" | "proctorkit" | "local";
|
|
108
152
|
clipNumber: number;
|
|
109
153
|
byteSize: number;
|
|
110
154
|
durationMs: number;
|
|
@@ -119,9 +163,27 @@ export declare function useMediaClipRecorder(options: UseMediaClipRecorderOption
|
|
|
119
163
|
peakDb: number;
|
|
120
164
|
silentRatio: number;
|
|
121
165
|
lowVolumeRatio: number;
|
|
166
|
+
inputLiveness?: {
|
|
167
|
+
digitalSilenceRatio: number;
|
|
168
|
+
longestDigitalSilenceMs: number;
|
|
169
|
+
longestMutedMs: number;
|
|
170
|
+
suspendedMs: number;
|
|
171
|
+
noInput: boolean;
|
|
172
|
+
} | undefined;
|
|
173
|
+
} | undefined;
|
|
174
|
+
answerReference?: {
|
|
175
|
+
questionId: string;
|
|
176
|
+
answerFileName: string;
|
|
122
177
|
} | undefined;
|
|
178
|
+
fallbackSelection?: {
|
|
179
|
+
readonly source: "client_reported";
|
|
180
|
+
readonly selectedAt: string;
|
|
181
|
+
} | undefined;
|
|
182
|
+
contentSha256?: string | undefined;
|
|
123
183
|
} | null, MediaClipUploadedPayload | {
|
|
124
184
|
kind: MediaClipKind;
|
|
185
|
+
clipId: string;
|
|
186
|
+
delivery: "client" | "fallback" | "proctorkit" | "local";
|
|
125
187
|
clipNumber: number;
|
|
126
188
|
byteSize: number;
|
|
127
189
|
durationMs: number;
|
|
@@ -136,7 +198,23 @@ export declare function useMediaClipRecorder(options: UseMediaClipRecorderOption
|
|
|
136
198
|
peakDb: number;
|
|
137
199
|
silentRatio: number;
|
|
138
200
|
lowVolumeRatio: number;
|
|
201
|
+
inputLiveness?: {
|
|
202
|
+
digitalSilenceRatio: number;
|
|
203
|
+
longestDigitalSilenceMs: number;
|
|
204
|
+
longestMutedMs: number;
|
|
205
|
+
suspendedMs: number;
|
|
206
|
+
noInput: boolean;
|
|
207
|
+
} | undefined;
|
|
208
|
+
} | undefined;
|
|
209
|
+
answerReference?: {
|
|
210
|
+
questionId: string;
|
|
211
|
+
answerFileName: string;
|
|
212
|
+
} | undefined;
|
|
213
|
+
fallbackSelection?: {
|
|
214
|
+
readonly source: "client_reported";
|
|
215
|
+
readonly selectedAt: string;
|
|
139
216
|
} | undefined;
|
|
217
|
+
contentSha256?: string | undefined;
|
|
140
218
|
} | null>;
|
|
141
219
|
};
|
|
142
220
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaClipRecorder.d.ts","sourceRoot":"","sources":["../../src/media-controls/useMediaClipRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useMediaClipRecorder.d.ts","sourceRoot":"","sources":["../../src/media-controls/useMediaClipRecorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaFilePlaybackHandle, MediaFilePlaybackOptions } from "@a4anthony/proctorkit-sdk";
|
|
1
|
+
import type { PlaybackRecoveryState, MediaFilePlaybackHandle, MediaFilePlaybackOptions } from "@a4anthony/proctorkit-sdk";
|
|
2
2
|
import { type Ref } from "vue";
|
|
3
3
|
import type { MediaPlaybackErrorPayload, MediaPlaybackEventPayload, MediaPlaybackThrownErrorPayload, MediaReplayLimitReachedPayload } from "./types.js";
|
|
4
4
|
/**
|
|
@@ -13,6 +13,8 @@ export type MediaPlaybackStatus = "ready" | "playing" | "paused" | "stopped" | "
|
|
|
13
13
|
export type MediaLoadState = "idle" | "loading" | "ready" | "buffering" | "error";
|
|
14
14
|
export interface MediaFilePlaybackProps {
|
|
15
15
|
url: string | URL;
|
|
16
|
+
fallbackUrl?: string | URL;
|
|
17
|
+
sourceLoadTimeoutMs?: number;
|
|
16
18
|
label?: string;
|
|
17
19
|
disabled?: boolean;
|
|
18
20
|
allowedReplays?: number | null;
|
|
@@ -40,11 +42,15 @@ export interface UseMediaFilePlaybackOptions<TElement extends HTMLMediaElement>
|
|
|
40
42
|
onStopped: (payload: MediaPlaybackEventPayload) => void;
|
|
41
43
|
onEnded: (payload: MediaPlaybackEventPayload) => void;
|
|
42
44
|
onError: (payload: MediaPlaybackErrorPayload | MediaPlaybackThrownErrorPayload) => void;
|
|
45
|
+
onRecoveryStateChange?: (state: PlaybackRecoveryState) => void;
|
|
43
46
|
onReplayLimitReached: (payload: MediaReplayLimitReachedPayload) => void;
|
|
44
47
|
}
|
|
45
48
|
export declare function useMediaFilePlayback<TElement extends HTMLMediaElement>(options: UseMediaFilePlaybackOptions<TElement>): {
|
|
46
49
|
status: Ref<MediaPlaybackStatus, MediaPlaybackStatus>;
|
|
47
50
|
mediaState: Ref<MediaLoadState, MediaLoadState>;
|
|
51
|
+
showRetry: import("vue").ComputedRef<boolean>;
|
|
52
|
+
canRetry: import("vue").ComputedRef<boolean>;
|
|
53
|
+
retryPending: Ref<boolean, boolean>;
|
|
48
54
|
errorMessage: Ref<string | null, string | null>;
|
|
49
55
|
playCount: Ref<number, number>;
|
|
50
56
|
currentTime: Ref<number, number>;
|
|
@@ -63,6 +69,7 @@ export declare function useMediaFilePlayback<TElement extends HTMLMediaElement>(
|
|
|
63
69
|
currentTimeLabel: import("vue").ComputedRef<string>;
|
|
64
70
|
durationLabel: import("vue").ComputedRef<string>;
|
|
65
71
|
play: () => Promise<void>;
|
|
72
|
+
retry: () => Promise<void>;
|
|
66
73
|
pause: () => void;
|
|
67
74
|
stop: () => void;
|
|
68
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaFilePlayback.d.ts","sourceRoot":"","sources":["../../src/media-controls/useMediaFilePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useMediaFilePlayback.d.ts","sourceRoot":"","sources":["../../src/media-controls/useMediaFilePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1H,OAAO,EAQL,KAAK,GAAG,EACT,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EACV,yBAAyB,EACzB,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AAGpB;;;;;;;GAOG;AAEH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AACjG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B,CAAC,QAAQ,SAAS,gBAAgB;IAC5E,6CAA6C;IAC7C,KAAK,EAAE,sBAAsB,CAAC;IAC9B,8CAA8C;IAC9C,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC9B,mEAAmE;IACnE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,8EAA8E;IAC9E,UAAU,EAAE,MAAM,OAAO,EAAE,CAAC;IAC5B,mEAAmE;IACnE,aAAa,EAAE,CAAC,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,KAAK,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClG,SAAS,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACtD,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,GAAG,+BAA+B,KAAK,IAAI,CAAC;IACxF,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;CACzE;AAKD,wBAAgB,oBAAoB,CAAC,QAAQ,SAAS,gBAAgB,EACpE,OAAO,EAAE,2BAA2B,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;gBAqLvB,OAAO,CAAC,IAAI,CAAC;iBA0DZ,OAAO,CAAC,IAAI,CAAC;iBA2EnB,IAAI;gBAKL,IAAI;EAmYtB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ComputedRef } from "vue";
|
|
2
|
+
export declare const MIN_UPLOAD_INDICATOR_DURATION_MS = 500;
|
|
3
|
+
interface UseMinimumVisibleUploadOptions<T> {
|
|
4
|
+
active: ComputedRef<T | null>;
|
|
5
|
+
cancelWhen?: ComputedRef<boolean>;
|
|
6
|
+
completedSuccessfully: (lastActiveValue: T) => boolean;
|
|
7
|
+
minimumMs?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Holds a rendered upload presentation long enough to avoid a success flash.
|
|
11
|
+
* The watcher runs after rendering, so an upload that completes within the
|
|
12
|
+
* same render tick can move directly to success without adding artificial UI.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useMinimumVisibleUpload<T>({ active, cancelWhen, completedSuccessfully, minimumMs, }: UseMinimumVisibleUploadOptions<T>): {
|
|
15
|
+
visible: ComputedRef<any>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=useMinimumVisibleUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMinimumVisibleUpload.d.ts","sourceRoot":"","sources":["../../src/media-controls/useMinimumVisibleUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAErF,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD,UAAU,8BAA8B,CAAC,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,qBAAqB,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,OAAO,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EACzC,MAAM,EACN,UAAU,EACV,qBAAqB,EACrB,SAA4C,GAC7C,EAAE,8BAA8B,CAAC,CAAC,CAAC;;EA6DnC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MediaHelpContent } from "../i18n/media-help.js";
|
|
2
|
+
import type { PreflightMessages } from "../messages.js";
|
|
3
|
+
import type { PreparationFeedback } from "./preparation-feedback.js";
|
|
4
|
+
type __VLS_Props = {
|
|
5
|
+
messages: PreflightMessages;
|
|
6
|
+
pending: boolean;
|
|
7
|
+
helpContent: MediaHelpContent;
|
|
8
|
+
error?: PreparationFeedback;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
retry: () => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onRetry?: (() => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
export default _default;
|
|
16
|
+
//# sourceMappingURL=PreparationGate.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreparationGate.vue.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/PreparationGate.vue"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC;;;;;;AAqKjI,wBAOG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PreflightMessages } from "../messages.js";
|
|
2
|
+
export interface PreparationFeedback {
|
|
3
|
+
message: string;
|
|
4
|
+
retryable: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function preparationFeedback(error: unknown, messages: PreflightMessages): PreparationFeedback;
|
|
7
|
+
//# sourceMappingURL=preparation-feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preparation-feedback.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/preparation-feedback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,GAAG,mBAAmB,CAiBpG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { replayFailurePayload, type AssessmentReplayFailureDetail } from "@a4anthony/proctorkit-sdk";
|
|
2
|
+
type FailurePayload = {
|
|
3
|
+
reason: string;
|
|
4
|
+
} & Partial<ReturnType<typeof replayFailurePayload>>;
|
|
5
|
+
/**
|
|
6
|
+
* Replay runs from preflight, before the SDK client that emits events exists.
|
|
7
|
+
* Failures are held in order until a client can emit them, so a preflight
|
|
8
|
+
* capture gap still has a recorded cause.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ReplayFailureQueue {
|
|
11
|
+
private readonly pending;
|
|
12
|
+
push(error: Error, detail?: AssessmentReplayFailureDetail): void;
|
|
13
|
+
/** Emit in order; stops at the first failure and keeps the rest queued. */
|
|
14
|
+
flush(emit: (kind: "assessment-replay.unavailable", payload: FailurePayload) => void): void;
|
|
15
|
+
clear(): void;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=replay-failure-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-failure-queue.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/replay-failure-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAMrG,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAE5F;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,6BAA6B,GAAG,IAAI;IAQhE,2EAA2E;IAC3E,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAW3F,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-failure-queue.test.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/replay-failure-queue.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const ATTEMPT_RESOLUTION_TIMEOUT_MS = 12000;
|
|
2
|
+
export declare const REPLAY_START_TIMEOUT_MS = 12000;
|
|
2
3
|
export declare const CONTROL_REQUEST_TIMEOUT_MS = 5000;
|
|
3
4
|
export declare const PHOTO_UPLOAD_TIMEOUT_MS = 15000;
|
|
4
5
|
export declare const TELEMETRY_REQUEST_TIMEOUT_MS = 5000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-deadline.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/request-deadline.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAElD,qBAAa,oBAAqB,SAAQ,KAAK;IAI3C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAJ5B,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;gBAGhC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;CAK7B;AAED,6EAA6E;AAC7E,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAM1C"}
|
|
1
|
+
{"version":3,"file":"request-deadline.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/request-deadline.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAElD,qBAAa,oBAAqB,SAAQ,KAAK;IAI3C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAJ5B,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;gBAGhC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;CAK7B;AAED,6EAA6E;AAC7E,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAM1C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ProctoringClient } from "@a4anthony/proctorkit-sdk";
|
|
2
|
+
export type MicrophoneRouteResult = {
|
|
3
|
+
status: "applied";
|
|
4
|
+
changed: boolean;
|
|
5
|
+
} | {
|
|
6
|
+
status: "failed";
|
|
7
|
+
errorCode: string;
|
|
8
|
+
} | {
|
|
9
|
+
status: "stale";
|
|
10
|
+
};
|
|
11
|
+
/** Apply a verified recovery choice to the active SDK before lifting a hold. */
|
|
12
|
+
export declare function applyResumeMicrophoneRoute(client: Pick<ProctoringClient, "getSelectedDevices" | "switchMicrophone">, selectedDeviceId: string | null, isCurrent: () => boolean): Promise<MicrophoneRouteResult>;
|
|
13
|
+
//# sourceMappingURL=resume-microphone-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-microphone-route.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-microphone-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAExB,gFAAgF;AAChF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,EACzE,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,SAAS,EAAE,MAAM,OAAO,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAmBhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-microphone-route.test.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-microphone-route.test.ts"],"names":[],"mappings":""}
|
|
@@ -14,6 +14,8 @@ export interface ResumeProbeConfig {
|
|
|
14
14
|
*/
|
|
15
15
|
monitor: boolean;
|
|
16
16
|
};
|
|
17
|
+
/** Preserve a confirmed runtime display failure when the follow-up signal is unavailable. */
|
|
18
|
+
monitorPreviouslyFailed?: boolean;
|
|
17
19
|
/** Face verifier — same `{ faceCount }` contract as the camera deep check. */
|
|
18
20
|
detectFace?: (jpegDataUrl: string) => Promise<{
|
|
19
21
|
faceCount: number;
|
|
@@ -34,6 +36,8 @@ export interface ResumeProbeConfig {
|
|
|
34
36
|
selectedCameraId?: string;
|
|
35
37
|
selectedMicId?: string;
|
|
36
38
|
selectedSpeakerId?: string;
|
|
39
|
+
/** Localized label used when the OS owns output selection. */
|
|
40
|
+
systemOutputSpeakerLabel?: string;
|
|
37
41
|
/**
|
|
38
42
|
* The candidate clicked the Speaker permission action. Force the microphone
|
|
39
43
|
* bootstrap even if a cached output label is visible, so the transition only
|
|
@@ -53,6 +57,14 @@ export interface ResumeProbeConfig {
|
|
|
53
57
|
* to `getUserMedia` so the browser can prompt.
|
|
54
58
|
*/
|
|
55
59
|
allowPrompt?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Offer and accept virtual media devices (OBS, Zoom, VB-Cable, …). Resolved
|
|
62
|
+
* once by the policy through the SDK's `resolveAllowVirtualDevices`
|
|
63
|
+
* (`thresholds.allowVirtualDevices` or `developmentMode`) so this probe and
|
|
64
|
+
* the preflight pickers agree. Default false: virtual devices are hidden from
|
|
65
|
+
* the switch lists and one the OS hands over fails the identity guard.
|
|
66
|
+
*/
|
|
67
|
+
allowVirtualDevices?: boolean;
|
|
56
68
|
}
|
|
57
69
|
/** A single check's verdict plus, for the media checks, the live stream. */
|
|
58
70
|
export interface ResumeCheckResult {
|
|
@@ -100,6 +112,7 @@ export declare function checkSpeaker(config: ResumeProbeConfig): Promise<ResumeC
|
|
|
100
112
|
* than block, matching the preflight's best-effort detection.
|
|
101
113
|
*/
|
|
102
114
|
export declare function checkMonitor(): ResumeCheckItem;
|
|
115
|
+
export declare function recheckMonitor(previouslyFailed?: boolean): Promise<ResumeCheckItem>;
|
|
103
116
|
/** Connection — fast reachability ping, NOT the speed test. */
|
|
104
117
|
export declare function checkConnection(config: ResumeProbeConfig): Promise<ResumeCheckItem>;
|
|
105
118
|
export declare function runResumeProbe(config: ResumeProbeConfig): Promise<ResumeCheckResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-probe.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-probe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resume-probe.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
interface ResumeSpeakerItem {
|
|
2
|
+
status: "checking" | "ok" | "warn" | "failed";
|
|
3
|
+
devices?: Array<{
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
}>;
|
|
7
|
+
deviceLabel?: string;
|
|
8
|
+
speakerOutputMode?: "selected-device" | "system-output";
|
|
9
|
+
}
|
|
10
|
+
interface ResumeSpeakerUpdate {
|
|
11
|
+
status: "ok";
|
|
12
|
+
reason: undefined;
|
|
13
|
+
selectedDeviceId?: string;
|
|
14
|
+
deviceLabel?: string;
|
|
15
|
+
speakerOutputMode: "selected-device" | "system-output";
|
|
16
|
+
}
|
|
17
|
+
export interface ConfirmResumeSpeakerOptions {
|
|
18
|
+
speaker: ResumeSpeakerItem | undefined;
|
|
19
|
+
deviceId: string | undefined;
|
|
20
|
+
persistSelection: (deviceId: string | undefined) => void;
|
|
21
|
+
clearVerificationPending: () => void;
|
|
22
|
+
applyUpdate: (update: ResumeSpeakerUpdate) => void;
|
|
23
|
+
}
|
|
24
|
+
/** Apply the host-owned completion side effects after the candidate hears the tone. */
|
|
25
|
+
export declare function confirmResumeSpeaker(options: ConfirmResumeSpeakerOptions): boolean;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=resume-speaker-confirmation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-speaker-confirmation.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-speaker-confirmation.ts"],"names":[],"mappings":"AAAA,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;CACzD;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,GAAG,eAAe,CAAC;CACxD;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACpD;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CA6BlF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RuntimeDeviceSwitchResult } from "@a4anthony/proctorkit-sdk";
|
|
2
|
+
import type { ResumeCheckItem } from "../wizard/ResumeCheck.vue";
|
|
3
|
+
export interface ResumeSpeakerRouteClient {
|
|
4
|
+
switchSpeaker(deviceId?: string | null): Promise<RuntimeDeviceSwitchResult>;
|
|
5
|
+
}
|
|
6
|
+
interface AlignResumeSpeakerRouteOptions {
|
|
7
|
+
item: ResumeCheckItem;
|
|
8
|
+
client: ResumeSpeakerRouteClient | null;
|
|
9
|
+
}
|
|
10
|
+
interface ResumeSpeakerRouteResult {
|
|
11
|
+
item: ResumeCheckItem;
|
|
12
|
+
stream?: MediaStream;
|
|
13
|
+
}
|
|
14
|
+
interface AlignResumeSpeakerResultsOptions {
|
|
15
|
+
results: ResumeSpeakerRouteResult[];
|
|
16
|
+
client: ResumeSpeakerRouteClient | null;
|
|
17
|
+
isCurrent: () => boolean;
|
|
18
|
+
persistSelection: (deviceId: string | undefined) => void;
|
|
19
|
+
stopStream: (stream: MediaStream) => void;
|
|
20
|
+
}
|
|
21
|
+
/** Keep a successful speaker retry open until the candidate hears a fresh tone. */
|
|
22
|
+
export declare function requireResumeSpeakerAttestation(item: ResumeCheckItem, devices?: ResumeCheckItem["devices"]): ResumeCheckItem;
|
|
23
|
+
/** Apply the verified resume route to the live SDK before the row turns green. */
|
|
24
|
+
export declare function alignResumeSpeakerRoute(options: AlignResumeSpeakerRouteOptions): Promise<ResumeCheckItem>;
|
|
25
|
+
/**
|
|
26
|
+
* Await speaker routing before publishing a resume result. If a newer resume
|
|
27
|
+
* operation supersedes this one, release every retained probe stream and leave
|
|
28
|
+
* current UI/persistence untouched.
|
|
29
|
+
*/
|
|
30
|
+
export declare function alignResumeSpeakerResults(options: AlignResumeSpeakerResultsOptions): Promise<boolean>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=resume-speaker-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-speaker-route.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/resume-speaker-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC7E;AAED,UAAU,8BAA8B;IACtC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACzC;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,gCAAgC;IACxC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAUD,mFAAmF;AACnF,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE,eAAe,CAAC,SAAS,CAAsB,GACvD,eAAe,CAQjB;AAED,kFAAkF;AAClF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,eAAe,CAAC,CAuC1B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
|
|
@@ -5,8 +5,8 @@ export interface SessionStartMode {
|
|
|
5
5
|
/**
|
|
6
6
|
* A client-owned #ready slot is the complete start-mode declaration: preserve
|
|
7
7
|
* the ready phase and flush preflight telemetry before handing control to it.
|
|
8
|
-
* Without that slot,
|
|
9
|
-
*
|
|
8
|
+
* Without that slot, enter runtime after acknowledged preparation.
|
|
9
|
+
* Both paths confirm preflight before preparing runtime delivery.
|
|
10
10
|
*/
|
|
11
11
|
export declare function resolveSessionStartMode(hasReadySlot: boolean): SessionStartMode;
|
|
12
12
|
//# sourceMappingURL=session-start.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProctoringClient } from "@a4anthony/proctorkit-sdk";
|
|
1
|
+
import type { ProctoringClient, SessionEndResult } from "@a4anthony/proctorkit-sdk";
|
|
2
2
|
import type { CandidateIntakeSubmission } from "../candidate-intake.js";
|
|
3
3
|
import type { CheckKind, FailCode } from "../usePreflightCheck.js";
|
|
4
4
|
/**
|
|
@@ -73,16 +73,21 @@ export interface SessionStartedPayload {
|
|
|
73
73
|
}
|
|
74
74
|
export interface SessionEndedPayload {
|
|
75
75
|
attempt: ResolvedAttempt;
|
|
76
|
+
/**
|
|
77
|
+
* How the end settled. Only `outcome: "complete"` means the server
|
|
78
|
+
* acknowledged `session.ended` and every media drain finished.
|
|
79
|
+
*/
|
|
80
|
+
result: SessionEndResult;
|
|
76
81
|
}
|
|
77
82
|
export interface CandidateIntakeSubmittedPayload {
|
|
78
83
|
attempt: ResolvedAttempt;
|
|
79
84
|
submission: CandidateIntakeSubmission;
|
|
80
85
|
}
|
|
81
|
-
export type ProctoredAssessmentLoadingPhase = "resolving-attempt";
|
|
86
|
+
export type ProctoredAssessmentLoadingPhase = "resolving-attempt" | "starting-replay";
|
|
82
87
|
export interface ProctoredAssessmentLoadingSlotProps {
|
|
83
88
|
phase: ProctoredAssessmentLoadingPhase;
|
|
84
89
|
}
|
|
85
|
-
export type ProctoredAssessmentBlockedReason = "active_elsewhere" | "lock_taken_over" | "attempt_unavailable" | "attempt_resolution_timeout" | "attempt_resolution_failed";
|
|
90
|
+
export type ProctoredAssessmentBlockedReason = "active_elsewhere" | "lock_taken_over" | "attempt_unavailable" | "attempt_resolution_timeout" | "attempt_resolution_failed" | "replay_start_timeout" | "replay_start_failed";
|
|
86
91
|
/**
|
|
87
92
|
* Stable, display-copy-independent information for a host-owned blocked
|
|
88
93
|
* screen. `retry` is always safe to call, but hosts should normally expose it
|
|
@@ -119,7 +124,12 @@ export interface ProctoredAssessmentDefaultSlotProps {
|
|
|
119
124
|
attempt: ResolvedAttempt | null;
|
|
120
125
|
sessionId: string | undefined;
|
|
121
126
|
attemptNumber: number | undefined;
|
|
122
|
-
|
|
127
|
+
/**
|
|
128
|
+
* End the session. Resolves with the SDK's {@link SessionEndResult}, or
|
|
129
|
+
* `null` in `renderOnly` mode (or before an attempt exists), where there is
|
|
130
|
+
* no proctoring session to end.
|
|
131
|
+
*/
|
|
132
|
+
endSession: () => Promise<SessionEndResult | null>;
|
|
123
133
|
endingSession: boolean;
|
|
124
134
|
}
|
|
125
135
|
export interface ProctoredAssessmentEndedSlotProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
export declare const MIN_PREPARATION_RETRY_DURATION_MS = 500;
|
|
3
|
+
interface PreparationRetryTiming {
|
|
4
|
+
pending: Ref<boolean>;
|
|
5
|
+
assessmentOwnsHandoff: boolean;
|
|
6
|
+
begin: () => void;
|
|
7
|
+
/** False when the owning view was removed while waiting. */
|
|
8
|
+
wait: () => Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
/** Share one click-to-result clock across telemetry and assessment preparation. */
|
|
11
|
+
export declare function usePreparationRetryTiming(assessmentOwnsHandoff?: boolean): PreparationRetryTiming;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=usePreparationRetryTiming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreparationRetryTiming.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/usePreparationRetryTiming.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEzF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B;AAID,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,qBAAqB,UAAQ,GAAG,sBAAsB,CAmC/F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type DisplayMonitor } from "@a4anthony/proctorkit-sdk";
|
|
2
|
+
import { type DisplayDiagnosticReporter, type DisplayTrigger } from "../wizard/display-diagnostics.js";
|
|
3
|
+
interface Options {
|
|
4
|
+
active: () => boolean;
|
|
5
|
+
required: () => boolean;
|
|
6
|
+
scope: () => string | undefined;
|
|
7
|
+
phase: () => "ready" | "resume";
|
|
8
|
+
previouslyFailed: () => boolean;
|
|
9
|
+
busy: () => boolean;
|
|
10
|
+
checking: () => void;
|
|
11
|
+
result: (status: "passed" | "skipped" | "blocked" | "error", state: "single" | "extended" | "unknown") => void;
|
|
12
|
+
report: DisplayDiagnosticReporter;
|
|
13
|
+
monitor?: DisplayMonitor;
|
|
14
|
+
}
|
|
15
|
+
/** Watches recovery/ready only. Never subscribes during an active assessment. */
|
|
16
|
+
export declare function useResumeDisplayGuard(options: Options): {
|
|
17
|
+
verify: (trigger?: DisplayTrigger) => Promise<boolean>;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=useResumeDisplayGuard.d.ts.map
|