@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.
Files changed (177) hide show
  1. package/README.md +176 -8
  2. package/dist/ProctoredAssessment.vue.d.ts +70 -2
  3. package/dist/ProctoredAssessment.vue.d.ts.map +1 -1
  4. package/dist/ProctoringDeviceSettings.vue.d.ts +27 -1
  5. package/dist/ProctoringDeviceSettings.vue.d.ts.map +1 -1
  6. package/dist/ProctoringSystemCheck.vue.d.ts +39 -11
  7. package/dist/ProctoringSystemCheck.vue.d.ts.map +1 -1
  8. package/dist/browser-face-detector.d.ts +59 -0
  9. package/dist/browser-face-detector.d.ts.map +1 -0
  10. package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts +24 -0
  11. package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts.map +1 -0
  12. package/dist/check-cards/system/DisplayRecovery.vue.d.ts +25 -0
  13. package/dist/check-cards/system/DisplayRecovery.vue.d.ts.map +1 -0
  14. package/dist/check-cards/system/SystemCheckCard.vue.d.ts +13 -1
  15. package/dist/check-cards/system/SystemCheckCard.vue.d.ts.map +1 -1
  16. package/dist/check-cards/system/display-progress-story.d.ts +468 -0
  17. package/dist/check-cards/system/display-progress-story.d.ts.map +1 -0
  18. package/dist/check-cards/system/display-recovery-story.d.ts +290 -0
  19. package/dist/check-cards/system/display-recovery-story.d.ts.map +1 -0
  20. package/dist/demo-runner/QuestionCard.vue.d.ts.map +1 -1
  21. package/dist/detect-face.d.ts +22 -95
  22. package/dist/detect-face.d.ts.map +1 -1
  23. package/dist/i18n/merge.d.ts.map +1 -1
  24. package/dist/index.d.ts +19 -8
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +9637 -2485
  27. package/dist/media-controls/AudioPlayer.vue.d.ts +43 -20
  28. package/dist/media-controls/AudioPlayer.vue.d.ts.map +1 -1
  29. package/dist/media-controls/AudioRecorder.vue.d.ts +171 -11
  30. package/dist/media-controls/AudioRecorder.vue.d.ts.map +1 -1
  31. package/dist/media-controls/RecorderUploadIndicator.vue.d.ts +17 -0
  32. package/dist/media-controls/RecorderUploadIndicator.vue.d.ts.map +1 -0
  33. package/dist/media-controls/VideoPlayer.vue.d.ts +36 -13
  34. package/dist/media-controls/VideoPlayer.vue.d.ts.map +1 -1
  35. package/dist/media-controls/VideoRecorder.vue.d.ts +90 -10
  36. package/dist/media-controls/VideoRecorder.vue.d.ts.map +1 -1
  37. package/dist/media-controls/audio-recorder-messages.d.ts +15 -0
  38. package/dist/media-controls/audio-recorder-messages.d.ts.map +1 -0
  39. package/dist/media-controls/local-media-playback-client.d.ts +2 -6
  40. package/dist/media-controls/local-media-playback-client.d.ts.map +1 -1
  41. package/dist/media-controls/local-media-recording-client.d.ts.map +1 -1
  42. package/dist/media-controls/media-recovery-story.d.ts +9 -0
  43. package/dist/media-controls/media-recovery-story.d.ts.map +1 -0
  44. package/dist/media-controls/storybook-mock-client.d.ts +2 -0
  45. package/dist/media-controls/storybook-mock-client.d.ts.map +1 -1
  46. package/dist/media-controls/types.d.ts +63 -7
  47. package/dist/media-controls/types.d.ts.map +1 -1
  48. package/dist/media-controls/ui-config.d.ts +2 -2
  49. package/dist/media-controls/ui-config.d.ts.map +1 -1
  50. package/dist/media-controls/useLiveInputCheck.d.ts +18 -0
  51. package/dist/media-controls/useLiveInputCheck.d.ts.map +1 -0
  52. package/dist/media-controls/useMediaClipRecorder.d.ts +90 -12
  53. package/dist/media-controls/useMediaClipRecorder.d.ts.map +1 -1
  54. package/dist/media-controls/useMediaFilePlayback.d.ts +8 -1
  55. package/dist/media-controls/useMediaFilePlayback.d.ts.map +1 -1
  56. package/dist/media-controls/useMinimumVisibleUpload.d.ts +18 -0
  57. package/dist/media-controls/useMinimumVisibleUpload.d.ts.map +1 -0
  58. package/dist/proctored-assessment/PreparationGate.vue.d.ts +16 -0
  59. package/dist/proctored-assessment/PreparationGate.vue.d.ts.map +1 -0
  60. package/dist/proctored-assessment/preparation-feedback.d.ts +7 -0
  61. package/dist/proctored-assessment/preparation-feedback.d.ts.map +1 -0
  62. package/dist/proctored-assessment/replay-failure-queue.d.ts +18 -0
  63. package/dist/proctored-assessment/replay-failure-queue.d.ts.map +1 -0
  64. package/dist/proctored-assessment/replay-failure-queue.test.d.ts +2 -0
  65. package/dist/proctored-assessment/replay-failure-queue.test.d.ts.map +1 -0
  66. package/dist/proctored-assessment/request-deadline.d.ts +1 -0
  67. package/dist/proctored-assessment/request-deadline.d.ts.map +1 -1
  68. package/dist/proctored-assessment/resume-microphone-route.d.ts +13 -0
  69. package/dist/proctored-assessment/resume-microphone-route.d.ts.map +1 -0
  70. package/dist/proctored-assessment/resume-microphone-route.test.d.ts +2 -0
  71. package/dist/proctored-assessment/resume-microphone-route.test.d.ts.map +1 -0
  72. package/dist/proctored-assessment/resume-probe.d.ts +13 -0
  73. package/dist/proctored-assessment/resume-probe.d.ts.map +1 -1
  74. package/dist/proctored-assessment/resume-speaker-confirmation.d.ts +27 -0
  75. package/dist/proctored-assessment/resume-speaker-confirmation.d.ts.map +1 -0
  76. package/dist/proctored-assessment/resume-speaker-route.d.ts +32 -0
  77. package/dist/proctored-assessment/resume-speaker-route.d.ts.map +1 -0
  78. package/dist/proctored-assessment/session-start.d.ts +2 -2
  79. package/dist/proctored-assessment/types.d.ts +14 -4
  80. package/dist/proctored-assessment/types.d.ts.map +1 -1
  81. package/dist/proctored-assessment/usePreparationRetryTiming.d.ts +13 -0
  82. package/dist/proctored-assessment/usePreparationRetryTiming.d.ts.map +1 -0
  83. package/dist/proctored-assessment/useResumeDisplayGuard.d.ts +20 -0
  84. package/dist/proctored-assessment/useResumeDisplayGuard.d.ts.map +1 -0
  85. package/dist/proctoring-client.d.ts +6 -2
  86. package/dist/proctoring-client.d.ts.map +1 -1
  87. package/dist/proctoring-system-check-contract.d.ts +2 -0
  88. package/dist/proctoring-system-check-contract.d.ts.map +1 -1
  89. package/dist/runtime-devices/DevicePickerItem.vue.d.ts +58 -0
  90. package/dist/runtime-devices/DevicePickerItem.vue.d.ts.map +1 -0
  91. package/dist/runtime-devices/PickerMessage.vue.d.ts +17 -0
  92. package/dist/runtime-devices/PickerMessage.vue.d.ts.map +1 -0
  93. package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts +89 -0
  94. package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts.map +1 -0
  95. package/dist/runtime-devices/device-picker-messages.d.ts +42 -0
  96. package/dist/runtime-devices/device-picker-messages.d.ts.map +1 -0
  97. package/dist/runtime-devices/microphone-attention.d.ts +48 -0
  98. package/dist/runtime-devices/microphone-attention.d.ts.map +1 -0
  99. package/dist/runtime-devices/microphone-check-messages.d.ts +13 -0
  100. package/dist/runtime-devices/microphone-check-messages.d.ts.map +1 -0
  101. package/dist/runtime-devices/runtime-device-activity.d.ts +16 -0
  102. package/dist/runtime-devices/runtime-device-activity.d.ts.map +1 -0
  103. package/dist/runtime-devices/runtime-device-selection.d.ts +11 -0
  104. package/dist/runtime-devices/runtime-device-selection.d.ts.map +1 -0
  105. package/dist/runtime-devices/useRuntimeDevice.d.ts +72 -0
  106. package/dist/runtime-devices/useRuntimeDevice.d.ts.map +1 -0
  107. package/dist/runtime-devices/useTrackLoss.d.ts +15 -0
  108. package/dist/runtime-devices/useTrackLoss.d.ts.map +1 -0
  109. package/dist/style.css +367 -14
  110. package/dist/text-answer/ProctoredTextarea.vue.d.ts +8 -1
  111. package/dist/text-answer/ProctoredTextarea.vue.d.ts.map +1 -1
  112. package/dist/text-answer/useProctoredText.d.ts +5 -2
  113. package/dist/text-answer/useProctoredText.d.ts.map +1 -1
  114. package/dist/ui/ProctoringAlert.vue.d.ts.map +1 -1
  115. package/dist/ui/ProctoringFileUpload.vue.d.ts +3 -3
  116. package/dist/ui/ProctoringFileUpload.vue.d.ts.map +1 -1
  117. package/dist/ui/ProctoringInput.vue.d.ts +3 -3
  118. package/dist/ui/ProctoringInput.vue.d.ts.map +1 -1
  119. package/dist/ui/ProctoringSelect.vue.d.ts +2 -2
  120. package/dist/ui/ProctoringSelect.vue.d.ts.map +1 -1
  121. package/dist/usePreflightCheck.d.ts +4 -3
  122. package/dist/usePreflightCheck.d.ts.map +1 -1
  123. package/dist/vision_bundle-8xEDyfqS.js +4160 -0
  124. package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts +11 -0
  125. package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts.map +1 -0
  126. package/dist/wizard/BrowserPermissionLocation.vue.d.ts +9 -0
  127. package/dist/wizard/BrowserPermissionLocation.vue.d.ts.map +1 -0
  128. package/dist/wizard/CameraStep.vue.d.ts +10 -1
  129. package/dist/wizard/CameraStep.vue.d.ts.map +1 -1
  130. package/dist/wizard/CandidateHeadshotField.vue.d.ts.map +1 -1
  131. package/dist/wizard/CandidateIntakeStep.vue.d.ts +3 -0
  132. package/dist/wizard/CandidateIntakeStep.vue.d.ts.map +1 -1
  133. package/dist/wizard/ChecklistShell.vue.d.ts +3 -0
  134. package/dist/wizard/ChecklistShell.vue.d.ts.map +1 -1
  135. package/dist/wizard/FinalStep.vue.d.ts +6 -2
  136. package/dist/wizard/FinalStep.vue.d.ts.map +1 -1
  137. package/dist/wizard/MediaDeviceSelect.vue.d.ts +11 -1
  138. package/dist/wizard/MediaDeviceSelect.vue.d.ts.map +1 -1
  139. package/dist/wizard/MicStep.vue.d.ts +24 -3
  140. package/dist/wizard/MicStep.vue.d.ts.map +1 -1
  141. package/dist/wizard/PermissionDeniedPanel.vue.d.ts +9 -4
  142. package/dist/wizard/PermissionDeniedPanel.vue.d.ts.map +1 -1
  143. package/dist/wizard/ResumeCheck.vue.d.ts +16 -2
  144. package/dist/wizard/ResumeCheck.vue.d.ts.map +1 -1
  145. package/dist/wizard/SpeakerStep.vue.d.ts +17 -4
  146. package/dist/wizard/SpeakerStep.vue.d.ts.map +1 -1
  147. package/dist/wizard/SystemStep.vue.d.ts +9 -0
  148. package/dist/wizard/SystemStep.vue.d.ts.map +1 -1
  149. package/dist/wizard/WizardShell.vue.d.ts +3 -3
  150. package/dist/wizard/WizardShell.vue.d.ts.map +1 -1
  151. package/dist/wizard/candidate-intake-draft.d.ts +9 -0
  152. package/dist/wizard/candidate-intake-draft.d.ts.map +1 -0
  153. package/dist/wizard/display-diagnostics.d.ts +21 -0
  154. package/dist/wizard/display-diagnostics.d.ts.map +1 -0
  155. package/dist/wizard/event-telemetry.d.ts +24 -0
  156. package/dist/wizard/event-telemetry.d.ts.map +1 -0
  157. package/dist/wizard/media-device-list.d.ts +8 -1
  158. package/dist/wizard/media-device-list.d.ts.map +1 -1
  159. package/dist/wizard/microphone-preflight-trace.d.ts +10 -0
  160. package/dist/wizard/microphone-preflight-trace.d.ts.map +1 -0
  161. package/dist/wizard/microphone-preflight-trace.test.d.ts +2 -0
  162. package/dist/wizard/microphone-preflight-trace.test.d.ts.map +1 -0
  163. package/dist/wizard/resume-check-stories/shared.d.ts +35 -11
  164. package/dist/wizard/resume-check-stories/shared.d.ts.map +1 -1
  165. package/dist/wizard/speaker-test-tone.d.ts +29 -4
  166. package/dist/wizard/speaker-test-tone.d.ts.map +1 -1
  167. package/dist/wizard/useCandidateIssues.d.ts +30 -0
  168. package/dist/wizard/useCandidateIssues.d.ts.map +1 -0
  169. package/dist/wizard/useCandidateIssues.test.d.ts +2 -0
  170. package/dist/wizard/useCandidateIssues.test.d.ts.map +1 -0
  171. package/dist/wizard/useLiveDisplayCheck.d.ts +8 -0
  172. package/dist/wizard/useLiveDisplayCheck.d.ts.map +1 -0
  173. package/dist/wizard/usePreflightTelemetry.d.ts +6 -26
  174. package/dist/wizard/usePreflightTelemetry.d.ts.map +1 -1
  175. package/dist/wizard/useWizardSteps.d.ts +10 -1
  176. package/dist/wizard/useWizardSteps.d.ts.map +1 -1
  177. 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
- * Best-effort mirror of the finalized clip to a second backend,
18
- * resolved from the host at start time. Runs in parallel with the
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
- /** Notified when the mirror (`getOnClipData`) rejects. Non-fatal. */
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").Ref<{
41
- readonly clipNumber: number;
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,EAIL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,4BAA4B,SAAU,CAAC;AAEpD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AAEhF,UAAU,+BAA+B;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACzD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACnD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACpD,qEAAqE;IACrE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAClE;AAED,KAAK,2BAA2B,GAC5B,CAAC,+BAA+B,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC,GACF,CAAC,+BAA+B,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM;QACtB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC,CAAC;AAEP,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6B/C,OAAO,CAAC,IAAI,CAAC;gBAgCd,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6MrC"}
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,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,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,GAC3B,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AACZ,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,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,CACb,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,KACxC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACvC,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,CACP,OAAO,EAAE,yBAAyB,GAAG,+BAA+B,KACjE,IAAI,CAAC;IACV,oBAAoB,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;CACzE;AAQD,wBAAgB,oBAAoB,CAAC,QAAQ,SAAS,gBAAgB,EACpE,OAAO,EAAE,2BAA2B,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;gBA0IvB,OAAO,CAAC,IAAI,CAAC;iBA6ClB,IAAI;gBAKL,IAAI;EAgUtB"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replay-failure-queue.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resume-microphone-route.test.d.ts.map
@@ -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":"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"}
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, keep the candidate's final preflight gesture live and
9
- * enter runtime immediately.
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
- endSession: () => Promise<void>;
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":"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"}
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