@a4anthony/proctorkit-types 0.3.0 → 0.4.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/integrity.d.ts +9 -0
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +20 -0
- package/dist/integrity.js.map +1 -1
- package/dist/investigation/support-event-policy.d.ts +140 -0
- package/dist/investigation/support-event-policy.d.ts.map +1 -0
- package/dist/investigation/support-event-policy.js +353 -0
- package/dist/investigation/support-event-policy.js.map +1 -0
- package/dist/investigation/version.d.ts +4 -0
- package/dist/investigation/version.d.ts.map +1 -0
- package/dist/investigation/version.js +4 -0
- package/dist/investigation/version.js.map +1 -0
- package/dist/proctorkit-support-event-policy.json +534 -0
- package/dist/proctorkit-support-event-policy.schema.json +1509 -0
- package/dist/support-context.d.ts +271 -0
- package/dist/support-context.d.ts.map +1 -0
- package/dist/support-context.js +13 -0
- package/dist/support-context.js.map +1 -0
- package/package.json +15 -3
- package/src/index.ts +1 -0
- package/src/integrity.ts +21 -0
- package/src/investigation/support-event-policy.ts +548 -0
- package/src/investigation/version.ts +3 -0
- package/src/support-context.ts +388 -0
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
|
package/dist/integrity.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export type IntegrityFindingSeverity = "violation" | "concern" | "info";
|
|
2
|
+
/**
|
|
3
|
+
* The live-ingest event kinds that mark a session as integrity-flagged.
|
|
4
|
+
* Shared by the API's review-queue filter and the dashboard's overview
|
|
5
|
+
* aggregates so "flagged" always means the same set of signals everywhere.
|
|
6
|
+
* (INTEGRITY_CATEGORIES below additionally covers post-session analysis
|
|
7
|
+
* kinds; this list is the runtime subset used for flagged/needs-review
|
|
8
|
+
* gating.)
|
|
9
|
+
*/
|
|
10
|
+
export declare const INTEGRITY_FLAG_KINDS: ReadonlyArray<string>;
|
|
2
11
|
export interface IntegrityCategoryRule {
|
|
3
12
|
key: string;
|
|
4
13
|
label: string;
|
package/dist/integrity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,wBAAwB,CAAC;IACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,qBAAqB,CAiFrE,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM/E;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAS/F"}
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAWtD,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,wBAAwB,CAAC;IACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,qBAAqB,CAiFrE,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM/E;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAS/F"}
|
package/dist/integrity.js
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live-ingest event kinds that mark a session as integrity-flagged.
|
|
3
|
+
* Shared by the API's review-queue filter and the dashboard's overview
|
|
4
|
+
* aggregates so "flagged" always means the same set of signals everywhere.
|
|
5
|
+
* (INTEGRITY_CATEGORIES below additionally covers post-session analysis
|
|
6
|
+
* kinds; this list is the runtime subset used for flagged/needs-review
|
|
7
|
+
* gating.)
|
|
8
|
+
*/
|
|
9
|
+
export const INTEGRITY_FLAG_KINDS = [
|
|
10
|
+
"focus.lost",
|
|
11
|
+
"tab.hidden",
|
|
12
|
+
"clipboard.copy",
|
|
13
|
+
"clipboard.paste",
|
|
14
|
+
"clipboard.cut",
|
|
15
|
+
"screenshot.attempted",
|
|
16
|
+
"face.lost",
|
|
17
|
+
"face.multiple",
|
|
18
|
+
"face.gaze-off-screen",
|
|
19
|
+
"pointer.left-window",
|
|
20
|
+
];
|
|
1
21
|
/**
|
|
2
22
|
* Canonical integrity-score rules shared by the API, dashboard, and reports.
|
|
3
23
|
* Keep all score consumers on this table so list ordering cannot disagree
|
package/dist/integrity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { EventKind } from "../events.js";
|
|
2
|
+
export type SupportEventDisposition = "state" | "aggregate" | "latest";
|
|
3
|
+
export type SupportEventSection = "preflight" | "resume" | "runtime" | "writing";
|
|
4
|
+
export type SupportEventDataClass = "support_safe" | "candidate_personal" | "device_identifier" | "biometric" | "assessment_content" | "integrity_signal" | "internal_diagnostic" | "secret";
|
|
5
|
+
/** DTO paths that the first support-context projection is allowed to derive. */
|
|
6
|
+
export declare const SUPPORT_DERIVED_FACTS: readonly ["lifecycle.activityState", "lifecycle.endedAt", "lifecycle.journeyStage", "lifecycle.lastActivityAt", "lifecycle.observationState", "preflight.checks[]", "preflight.checks[].microphoneVerification", "preflight.completedAt", "preflight.devices", "preflight.devices.camera.availableCount", "preflight.devices.camera.virtualCount", "preflight.devices.microphone.availableCount", "preflight.devices.microphone.virtualCount", "preflight.devices.speaker.availableCount", "preflight.devices.speaker.virtualCount", "preflight.observationState", "preflight.startedAt", "preflight.verdict", "resume.currentOrLatest", "resume.totalResumes", "runtime.activeBlocker", "runtime.delivery.drainTimeouts", "runtime.delivery.lastFailureCode", "runtime.delivery.mediaFailures", "runtime.delivery.sdkErrors", "runtime.delivery.uploadFailures", "runtime.delivery.workerFailures", "runtime.issues[]", "runtime.observationState", "writing.clipboard.blockedCopyAttempts", "writing.clipboard.blockedCutAttempts", "writing.clipboard.blockedPasteAttempts", "writing.clipboard.lastBlockedAction", "writing.clipboard.lastBlockedAt", "writing.lastSaveFailure", "writing.saveFailures"];
|
|
7
|
+
export type SupportDerivedFact = (typeof SUPPORT_DERIVED_FACTS)[number];
|
|
8
|
+
export interface SupportEventPayloadFieldDefinition {
|
|
9
|
+
dataClasses: SupportEventDataClass[];
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
export interface IncludedSupportEventDecision {
|
|
13
|
+
disposition: SupportEventDisposition;
|
|
14
|
+
section: SupportEventSection;
|
|
15
|
+
allowedPayloadFields: string[];
|
|
16
|
+
derivedFacts: SupportDerivedFact[];
|
|
17
|
+
resolvedBy?: EventKind[];
|
|
18
|
+
resolves?: EventKind[];
|
|
19
|
+
absenceMeans: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ExcludedSupportEventDecision {
|
|
22
|
+
disposition: "exclude";
|
|
23
|
+
reason: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ExcludedSupportEventSource extends ExcludedSupportEventDecision {
|
|
26
|
+
kind: EventKind;
|
|
27
|
+
}
|
|
28
|
+
export type CandidateSupportEventDecision = IncludedSupportEventDecision | ExcludedSupportEventDecision;
|
|
29
|
+
export interface SupportEventDefinitionSource {
|
|
30
|
+
decision: IncludedSupportEventDecision;
|
|
31
|
+
payload: Record<string, SupportEventPayloadFieldDefinition>;
|
|
32
|
+
}
|
|
33
|
+
declare const SAFE_OPERATIONAL_FIELDS: {
|
|
34
|
+
readonly code: "A stable machine-readable support code.";
|
|
35
|
+
readonly phase: "A stable SDK lifecycle phase.";
|
|
36
|
+
readonly recoverable: "Whether the emitting producer classified the failure as recoverable.";
|
|
37
|
+
readonly row: "A stable preflight check kind.";
|
|
38
|
+
readonly durationMs: "Elapsed check time in milliseconds.";
|
|
39
|
+
readonly retryCount: "Retries observed before this result.";
|
|
40
|
+
readonly attempt: "The current retry ordinal.";
|
|
41
|
+
readonly downloadMbps: "Measured downstream throughput in megabits per second.";
|
|
42
|
+
readonly uploadMbps: "Measured upstream throughput in megabits per second.";
|
|
43
|
+
readonly latencyMs: "Measured connection latency in milliseconds.";
|
|
44
|
+
readonly jitterMs: "Measured connection jitter in milliseconds.";
|
|
45
|
+
readonly recordingUploadMode: "The selected stable recording upload mode.";
|
|
46
|
+
readonly readinessMedianMs: "Median readiness request duration in milliseconds.";
|
|
47
|
+
readonly readinessWindowMs: "Readiness sampling window in milliseconds.";
|
|
48
|
+
readonly readinessSampleCount: "Number of readiness samples.";
|
|
49
|
+
readonly verificationMode: "The stable microphone verification mode.";
|
|
50
|
+
readonly fallbackReason: "The stable microphone verification fallback code.";
|
|
51
|
+
readonly vadPreparationMs: "Voice-activity detector preparation time in milliseconds.";
|
|
52
|
+
readonly class: "The stable resume interruption class.";
|
|
53
|
+
readonly awayMs: "Observed unavailability duration in milliseconds.";
|
|
54
|
+
readonly navigationType: "The browser navigation category.";
|
|
55
|
+
readonly surface: "The browser display-surface category.";
|
|
56
|
+
readonly passed: "Whether the completed preflight attempt passed.";
|
|
57
|
+
readonly blocked: "Whether policy blocked the clipboard action.";
|
|
58
|
+
};
|
|
59
|
+
export declare const SUPPORT_SAFE_PAYLOAD_FIELDS: Record<keyof typeof SAFE_OPERATIONAL_FIELDS, SupportEventPayloadFieldDefinition>;
|
|
60
|
+
/**
|
|
61
|
+
* Candidate-safe operational events only. Payload fields are deliberately
|
|
62
|
+
* allowlisted; the server must still map them into normalized facts and must
|
|
63
|
+
* never use this metadata to serialize an event payload automatically.
|
|
64
|
+
*/
|
|
65
|
+
export declare const INCLUDED_SUPPORT_EVENT_DEFINITIONS: {
|
|
66
|
+
"session.started": SupportEventDefinitionSource;
|
|
67
|
+
"session.heartbeat": SupportEventDefinitionSource;
|
|
68
|
+
"session.end_requested": SupportEventDefinitionSource;
|
|
69
|
+
"session.ended": SupportEventDefinitionSource;
|
|
70
|
+
"session.resumed": SupportEventDefinitionSource;
|
|
71
|
+
"session.abandoned": SupportEventDefinitionSource;
|
|
72
|
+
"sdk.initialized": SupportEventDefinitionSource;
|
|
73
|
+
"sdk.delivery.ready": SupportEventDefinitionSource;
|
|
74
|
+
"sdk.ready": SupportEventDefinitionSource;
|
|
75
|
+
"sdk.error": SupportEventDefinitionSource;
|
|
76
|
+
"sdk.upload.failed": SupportEventDefinitionSource;
|
|
77
|
+
"sdk.media.failed": SupportEventDefinitionSource;
|
|
78
|
+
"sdk.permission.denied": SupportEventDefinitionSource;
|
|
79
|
+
"sdk.worker.failed": SupportEventDefinitionSource;
|
|
80
|
+
"sdk.storage.fallback": SupportEventDefinitionSource;
|
|
81
|
+
"sdk.recording.buffer-degraded": SupportEventDefinitionSource;
|
|
82
|
+
"sdk.recording.buffer-evicted": SupportEventDefinitionSource;
|
|
83
|
+
"sdk.stop.drain-timeout": SupportEventDefinitionSource;
|
|
84
|
+
"screen-share.started": SupportEventDefinitionSource;
|
|
85
|
+
"screen-share.stopped": SupportEventDefinitionSource;
|
|
86
|
+
"screen-share.declined": SupportEventDefinitionSource;
|
|
87
|
+
"screen-share.wrong-surface": SupportEventDefinitionSource;
|
|
88
|
+
"screen-share.recording.started": SupportEventDefinitionSource;
|
|
89
|
+
"screen-share.recording.stopped": SupportEventDefinitionSource;
|
|
90
|
+
"screen-share.recording.unavailable": SupportEventDefinitionSource;
|
|
91
|
+
"webcam.started": SupportEventDefinitionSource;
|
|
92
|
+
"webcam.stopped": SupportEventDefinitionSource;
|
|
93
|
+
"webcam.declined": SupportEventDefinitionSource;
|
|
94
|
+
"webcam.unavailable": SupportEventDefinitionSource;
|
|
95
|
+
"audio-playback.started": SupportEventDefinitionSource;
|
|
96
|
+
"audio-playback.paused": SupportEventDefinitionSource;
|
|
97
|
+
"audio-playback.stopped": SupportEventDefinitionSource;
|
|
98
|
+
"audio-playback.ended": SupportEventDefinitionSource;
|
|
99
|
+
"audio-playback.error": SupportEventDefinitionSource;
|
|
100
|
+
"audio-playback.sink-applied": SupportEventDefinitionSource;
|
|
101
|
+
"audio-playback.sink-unsupported": SupportEventDefinitionSource;
|
|
102
|
+
"audio-playback.sink-failed": SupportEventDefinitionSource;
|
|
103
|
+
"audio-playback.sink-disconnected": SupportEventDefinitionSource;
|
|
104
|
+
"video-playback.started": SupportEventDefinitionSource;
|
|
105
|
+
"video-playback.paused": SupportEventDefinitionSource;
|
|
106
|
+
"video-playback.stopped": SupportEventDefinitionSource;
|
|
107
|
+
"video-playback.ended": SupportEventDefinitionSource;
|
|
108
|
+
"video-playback.error": SupportEventDefinitionSource;
|
|
109
|
+
"video-playback.sink-applied": SupportEventDefinitionSource;
|
|
110
|
+
"video-playback.sink-unsupported": SupportEventDefinitionSource;
|
|
111
|
+
"video-playback.sink-failed": SupportEventDefinitionSource;
|
|
112
|
+
"video-playback.sink-disconnected": SupportEventDefinitionSource;
|
|
113
|
+
"network.online": SupportEventDefinitionSource;
|
|
114
|
+
"network.offline": SupportEventDefinitionSource;
|
|
115
|
+
"preflight.started": SupportEventDefinitionSource;
|
|
116
|
+
"preflight.row-checking": SupportEventDefinitionSource;
|
|
117
|
+
"preflight.row-passed": SupportEventDefinitionSource;
|
|
118
|
+
"preflight.row-failed": SupportEventDefinitionSource;
|
|
119
|
+
"preflight.row-retried": SupportEventDefinitionSource;
|
|
120
|
+
"preflight.device-picked": SupportEventDefinitionSource;
|
|
121
|
+
"preflight.devices-enumerated": SupportEventDefinitionSource;
|
|
122
|
+
"preflight.devices-changed": SupportEventDefinitionSource;
|
|
123
|
+
"preflight.microphone-verification": SupportEventDefinitionSource;
|
|
124
|
+
"preflight.face-detected": SupportEventDefinitionSource;
|
|
125
|
+
"preflight.completed": SupportEventDefinitionSource;
|
|
126
|
+
"clipboard.copy": SupportEventDefinitionSource;
|
|
127
|
+
"clipboard.paste": SupportEventDefinitionSource;
|
|
128
|
+
"clipboard.cut": SupportEventDefinitionSource;
|
|
129
|
+
"text.saved": SupportEventDefinitionSource;
|
|
130
|
+
"text.save-failed": SupportEventDefinitionSource;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Every excluded event is named explicitly. The generator rejects duplicates,
|
|
134
|
+
* omissions, and unknown events so a new EventKind cannot silently inherit a
|
|
135
|
+
* candidate-support policy.
|
|
136
|
+
*/
|
|
137
|
+
export declare const EXCLUDED_SUPPORT_EVENT_SOURCES: ExcludedSupportEventSource[];
|
|
138
|
+
export declare const EXCLUDED_SUPPORT_EVENT_DECISIONS: Partial<Record<"session.started" | "session.heartbeat" | "session.end_requested" | "session.ended" | "session.resumed" | "session.abandoned" | "session.checkpoint" | "session.integrity-hold" | "session.integrity-cleared" | "sdk.initialized" | "sdk.delivery.ready" | "sdk.ready" | "sdk.error" | "sdk.upload.failed" | "sdk.media.failed" | "sdk.permission.denied" | "sdk.worker.failed" | "sdk.storage.fallback" | "sdk.recording.buffer-degraded" | "sdk.recording.buffer-evicted" | "sdk.stop.drain-timeout" | "focus.lost" | "focus.gained" | "tab.hidden" | "tab.visible" | "page.viewed" | "fullscreen.entered" | "fullscreen.exited" | "clipboard.copy" | "clipboard.paste" | "clipboard.cut" | "contextmenu.opened" | "keyboard.blocked" | "screenshot.attempted" | "screen-share.started" | "screen-share.stopped" | "screen-share.declined" | "screen-share.wrong-surface" | "screen-share.recording.started" | "screen-share.recording.stopped" | "screen-share.recording.unavailable" | "screen-share.chunk-uploaded" | "screen-share.chunk-dropped" | "assessment-replay.started" | "assessment-replay.chunk-uploaded" | "assessment-replay.chunk-dropped" | "assessment-replay.unavailable" | "assessment-replay.stopped" | "webcam.started" | "webcam.stopped" | "webcam.declined" | "webcam.unavailable" | "webcam.photo.captured" | "webcam.photo.dropped" | "webcam.recording.started" | "webcam.recording.stopped" | "webcam.recording.chunk-uploaded" | "webcam.recording.chunk-dropped" | "video-clip.started" | "video-clip.stopped" | "video-clip.uploaded" | "video-clip.dropped" | "audio-clip.started" | "audio-clip.stopped" | "audio-clip.uploaded" | "audio-clip.dropped" | "audio-playback.started" | "audio-playback.paused" | "audio-playback.stopped" | "audio-playback.ended" | "audio-playback.error" | "audio-playback.sink-applied" | "audio-playback.sink-unsupported" | "audio-playback.sink-failed" | "audio-playback.sink-disconnected" | "video-playback.started" | "video-playback.paused" | "video-playback.stopped" | "video-playback.ended" | "video-playback.error" | "video-playback.sink-applied" | "video-playback.sink-unsupported" | "video-playback.sink-failed" | "video-playback.sink-disconnected" | "pointer.left-window" | "pointer.returned" | "idle.started" | "idle.ended" | "session.fingerprint" | "session.policy" | "face.detector-ready" | "face.detector-failed" | "face.detector-degraded" | "face.lost" | "face.returned" | "face.multiple" | "face.multiple-cleared" | "face.gaze-off-screen" | "face.gaze-restored" | "face.identity-mismatch" | "screen.window-switched" | "screen.scene-stable" | "screen.recording-paused" | "webcam.phone-detected" | "webcam.phone-cleared" | "webcam.book-detected" | "webcam.book-cleared" | "webcam.second-device-detected" | "webcam.second-device-cleared" | "webcam.second-screen-detected" | "webcam.second-screen-cleared" | "face.lost-at-snapshot" | "face.multiple-at-snapshot" | "face.gaze-off-screen-at-snapshot" | "face.identity-mismatch-at-snapshot" | "webcam.phone-detected-at-snapshot" | "webcam.book-detected-at-snapshot" | "webcam.second-device-detected-at-snapshot" | "webcam.second-screen-detected-at-snapshot" | "media.frame.captured" | "media.audio.chunk" | "network.online" | "network.offline" | "preflight.started" | "preflight.row-checking" | "preflight.row-passed" | "preflight.row-failed" | "preflight.row-retried" | "preflight.attestation" | "preflight.device-picked" | "preflight.devices-enumerated" | "preflight.devices-changed" | "preflight.microphone-verification" | "preflight.face-detected" | "preflight.camera-photo" | "preflight.completed" | "text.started" | "text.paste" | "text.copy" | "text.cut" | "text.keystroke-summary" | "text.checkpoint" | "text.focus-lost" | "text.focus-regained" | "text.synthetic-input" | "text.saved" | "text.save-failed" | "text.submitted", ExcludedSupportEventDecision>>;
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=support-event-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-event-policy.d.ts","sourceRoot":"","sources":["../../src/investigation/support-event-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,WAAW,GACX,oBAAoB,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,QAAQ,CAAC;AAEb,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,8oCAqCxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,uBAAuB,CAAC;IACrC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,SAAS,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA2B,SAAQ,4BAA4B;IAC9E,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,MAAM,6BAA6B,GACrC,4BAA4B,GAC5B,4BAA4B,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;CAC7D;AAED,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEX,eAAO,MAAM,2BAA2B,EAKnC,MAAM,CAAC,MAAM,OAAO,uBAAuB,EAAE,kCAAkC,CAAC,CAAC;AAuBtF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmPqB,CAAC;AA0GrE;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,8BAyBH,CAAC;AAiBzC,eAAO,MAAM,gCAAgC,owHAE5C,CAAC"}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/** DTO paths that the first support-context projection is allowed to derive. */
|
|
2
|
+
export const SUPPORT_DERIVED_FACTS = [
|
|
3
|
+
"lifecycle.activityState",
|
|
4
|
+
"lifecycle.endedAt",
|
|
5
|
+
"lifecycle.journeyStage",
|
|
6
|
+
"lifecycle.lastActivityAt",
|
|
7
|
+
"lifecycle.observationState",
|
|
8
|
+
"preflight.checks[]",
|
|
9
|
+
"preflight.checks[].microphoneVerification",
|
|
10
|
+
"preflight.completedAt",
|
|
11
|
+
"preflight.devices",
|
|
12
|
+
"preflight.devices.camera.availableCount",
|
|
13
|
+
"preflight.devices.camera.virtualCount",
|
|
14
|
+
"preflight.devices.microphone.availableCount",
|
|
15
|
+
"preflight.devices.microphone.virtualCount",
|
|
16
|
+
"preflight.devices.speaker.availableCount",
|
|
17
|
+
"preflight.devices.speaker.virtualCount",
|
|
18
|
+
"preflight.observationState",
|
|
19
|
+
"preflight.startedAt",
|
|
20
|
+
"preflight.verdict",
|
|
21
|
+
"resume.currentOrLatest",
|
|
22
|
+
"resume.totalResumes",
|
|
23
|
+
"runtime.activeBlocker",
|
|
24
|
+
"runtime.delivery.drainTimeouts",
|
|
25
|
+
"runtime.delivery.lastFailureCode",
|
|
26
|
+
"runtime.delivery.mediaFailures",
|
|
27
|
+
"runtime.delivery.sdkErrors",
|
|
28
|
+
"runtime.delivery.uploadFailures",
|
|
29
|
+
"runtime.delivery.workerFailures",
|
|
30
|
+
"runtime.issues[]",
|
|
31
|
+
"runtime.observationState",
|
|
32
|
+
"writing.clipboard.blockedCopyAttempts",
|
|
33
|
+
"writing.clipboard.blockedCutAttempts",
|
|
34
|
+
"writing.clipboard.blockedPasteAttempts",
|
|
35
|
+
"writing.clipboard.lastBlockedAction",
|
|
36
|
+
"writing.clipboard.lastBlockedAt",
|
|
37
|
+
"writing.lastSaveFailure",
|
|
38
|
+
"writing.saveFailures",
|
|
39
|
+
];
|
|
40
|
+
const SAFE_OPERATIONAL_FIELDS = {
|
|
41
|
+
code: "A stable machine-readable support code.",
|
|
42
|
+
phase: "A stable SDK lifecycle phase.",
|
|
43
|
+
recoverable: "Whether the emitting producer classified the failure as recoverable.",
|
|
44
|
+
row: "A stable preflight check kind.",
|
|
45
|
+
durationMs: "Elapsed check time in milliseconds.",
|
|
46
|
+
retryCount: "Retries observed before this result.",
|
|
47
|
+
attempt: "The current retry ordinal.",
|
|
48
|
+
downloadMbps: "Measured downstream throughput in megabits per second.",
|
|
49
|
+
uploadMbps: "Measured upstream throughput in megabits per second.",
|
|
50
|
+
latencyMs: "Measured connection latency in milliseconds.",
|
|
51
|
+
jitterMs: "Measured connection jitter in milliseconds.",
|
|
52
|
+
recordingUploadMode: "The selected stable recording upload mode.",
|
|
53
|
+
readinessMedianMs: "Median readiness request duration in milliseconds.",
|
|
54
|
+
readinessWindowMs: "Readiness sampling window in milliseconds.",
|
|
55
|
+
readinessSampleCount: "Number of readiness samples.",
|
|
56
|
+
verificationMode: "The stable microphone verification mode.",
|
|
57
|
+
fallbackReason: "The stable microphone verification fallback code.",
|
|
58
|
+
vadPreparationMs: "Voice-activity detector preparation time in milliseconds.",
|
|
59
|
+
class: "The stable resume interruption class.",
|
|
60
|
+
awayMs: "Observed unavailability duration in milliseconds.",
|
|
61
|
+
navigationType: "The browser navigation category.",
|
|
62
|
+
surface: "The browser display-surface category.",
|
|
63
|
+
passed: "Whether the completed preflight attempt passed.",
|
|
64
|
+
blocked: "Whether policy blocked the clipboard action.",
|
|
65
|
+
};
|
|
66
|
+
export const SUPPORT_SAFE_PAYLOAD_FIELDS = Object.fromEntries(Object.entries(SAFE_OPERATIONAL_FIELDS).map(([name, description]) => [
|
|
67
|
+
name,
|
|
68
|
+
{ dataClasses: ["support_safe"], description },
|
|
69
|
+
]));
|
|
70
|
+
const decision = (disposition, section, derivedFacts, allowedPayloadFields = [], relationships = {}) => ({
|
|
71
|
+
decision: {
|
|
72
|
+
disposition,
|
|
73
|
+
section,
|
|
74
|
+
allowedPayloadFields,
|
|
75
|
+
derivedFacts,
|
|
76
|
+
...relationships,
|
|
77
|
+
absenceMeans: "Absence is inconclusive unless the corresponding section reports complete collection.",
|
|
78
|
+
},
|
|
79
|
+
payload: Object.fromEntries(allowedPayloadFields.map((field) => [field, SUPPORT_SAFE_PAYLOAD_FIELDS[field]])),
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Candidate-safe operational events only. Payload fields are deliberately
|
|
83
|
+
* allowlisted; the server must still map them into normalized facts and must
|
|
84
|
+
* never use this metadata to serialize an event payload automatically.
|
|
85
|
+
*/
|
|
86
|
+
export const INCLUDED_SUPPORT_EVENT_DEFINITIONS = {
|
|
87
|
+
"session.started": decision("state", "runtime", ["lifecycle.journeyStage"]),
|
|
88
|
+
"session.heartbeat": decision("latest", "runtime", ["lifecycle.lastActivityAt"]),
|
|
89
|
+
"session.end_requested": decision("state", "runtime", ["lifecycle.activityState"]),
|
|
90
|
+
"session.ended": decision("latest", "runtime", ["lifecycle.endedAt"]),
|
|
91
|
+
"session.resumed": decision("aggregate", "resume", ["resume.totalResumes", "resume.currentOrLatest"], ["class", "awayMs", "navigationType"]),
|
|
92
|
+
"session.abandoned": decision("latest", "runtime", ["lifecycle.activityState"]),
|
|
93
|
+
"sdk.initialized": decision("state", "runtime", ["lifecycle.observationState"]),
|
|
94
|
+
"sdk.delivery.ready": decision("state", "runtime", ["runtime.observationState"]),
|
|
95
|
+
"sdk.ready": decision("state", "runtime", ["lifecycle.journeyStage"]),
|
|
96
|
+
"sdk.error": decision("aggregate", "runtime", ["runtime.delivery.sdkErrors", "runtime.delivery.lastFailureCode"], ["code", "phase", "recoverable"]),
|
|
97
|
+
"sdk.upload.failed": decision("aggregate", "runtime", ["runtime.delivery.uploadFailures", "runtime.delivery.lastFailureCode"], ["code", "phase", "recoverable"]),
|
|
98
|
+
"sdk.media.failed": decision("aggregate", "runtime", ["runtime.delivery.mediaFailures", "runtime.delivery.lastFailureCode"], ["code", "phase", "recoverable"]),
|
|
99
|
+
"sdk.permission.denied": decision("aggregate", "runtime", ["runtime.issues[]"], ["code", "phase", "recoverable"]),
|
|
100
|
+
"sdk.worker.failed": decision("aggregate", "runtime", ["runtime.delivery.workerFailures", "runtime.delivery.lastFailureCode"], ["code", "phase", "recoverable"]),
|
|
101
|
+
"sdk.storage.fallback": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
102
|
+
"sdk.recording.buffer-degraded": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
103
|
+
"sdk.recording.buffer-evicted": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
104
|
+
"sdk.stop.drain-timeout": decision("aggregate", "runtime", ["runtime.delivery.drainTimeouts"], ["code"]),
|
|
105
|
+
"screen-share.started": decision("state", "runtime", ["runtime.issues[]"], [], {
|
|
106
|
+
resolves: ["screen-share.declined", "screen-share.wrong-surface"],
|
|
107
|
+
}),
|
|
108
|
+
"screen-share.stopped": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
109
|
+
"screen-share.declined": decision("aggregate", "runtime", ["runtime.issues[]"], [], {
|
|
110
|
+
resolvedBy: ["screen-share.started"],
|
|
111
|
+
}),
|
|
112
|
+
"screen-share.wrong-surface": decision("aggregate", "runtime", ["runtime.issues[]"], ["surface"], { resolvedBy: ["screen-share.started"] }),
|
|
113
|
+
"screen-share.recording.started": decision("state", "runtime", ["runtime.issues[]"]),
|
|
114
|
+
"screen-share.recording.stopped": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
115
|
+
"screen-share.recording.unavailable": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
116
|
+
"webcam.started": decision("state", "runtime", ["runtime.issues[]"], [], {
|
|
117
|
+
resolves: ["webcam.declined", "webcam.unavailable"],
|
|
118
|
+
}),
|
|
119
|
+
"webcam.stopped": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
120
|
+
"webcam.declined": decision("aggregate", "runtime", ["runtime.issues[]"], [], {
|
|
121
|
+
resolvedBy: ["webcam.started"],
|
|
122
|
+
}),
|
|
123
|
+
"webcam.unavailable": decision("aggregate", "runtime", ["runtime.issues[]"], [], {
|
|
124
|
+
resolvedBy: ["webcam.started"],
|
|
125
|
+
}),
|
|
126
|
+
"audio-playback.started": decision("state", "preflight", ["preflight.checks[]"]),
|
|
127
|
+
"audio-playback.paused": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
128
|
+
"audio-playback.stopped": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
129
|
+
"audio-playback.ended": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
130
|
+
"audio-playback.error": decision("aggregate", "preflight", [
|
|
131
|
+
"preflight.checks[]",
|
|
132
|
+
"runtime.issues[]",
|
|
133
|
+
]),
|
|
134
|
+
"audio-playback.sink-applied": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
135
|
+
"audio-playback.sink-unsupported": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
136
|
+
"audio-playback.sink-failed": decision("aggregate", "preflight", [
|
|
137
|
+
"preflight.checks[]",
|
|
138
|
+
"runtime.issues[]",
|
|
139
|
+
]),
|
|
140
|
+
"audio-playback.sink-disconnected": decision("aggregate", "preflight", [
|
|
141
|
+
"preflight.checks[]",
|
|
142
|
+
"runtime.issues[]",
|
|
143
|
+
]),
|
|
144
|
+
"video-playback.started": decision("state", "runtime", ["runtime.issues[]"]),
|
|
145
|
+
"video-playback.paused": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
146
|
+
"video-playback.stopped": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
147
|
+
"video-playback.ended": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
148
|
+
"video-playback.error": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
149
|
+
"video-playback.sink-applied": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
150
|
+
"video-playback.sink-unsupported": decision("latest", "runtime", ["runtime.issues[]"]),
|
|
151
|
+
"video-playback.sink-failed": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
152
|
+
"video-playback.sink-disconnected": decision("aggregate", "runtime", ["runtime.issues[]"]),
|
|
153
|
+
"network.online": decision("state", "runtime", ["runtime.issues[]"], [], {
|
|
154
|
+
resolves: ["network.offline"],
|
|
155
|
+
}),
|
|
156
|
+
"network.offline": decision("state", "runtime", ["runtime.issues[]"], [], {
|
|
157
|
+
resolvedBy: ["network.online"],
|
|
158
|
+
}),
|
|
159
|
+
"preflight.started": decision("state", "preflight", ["preflight.observationState", "preflight.startedAt"], [], { resolvedBy: ["preflight.completed"] }),
|
|
160
|
+
"preflight.row-checking": decision("latest", "preflight", ["preflight.checks[]"], ["row"], {
|
|
161
|
+
resolvedBy: ["preflight.row-passed", "preflight.row-failed"],
|
|
162
|
+
}),
|
|
163
|
+
"preflight.row-passed": decision("latest", "preflight", ["preflight.checks[]"], [
|
|
164
|
+
"row",
|
|
165
|
+
"durationMs",
|
|
166
|
+
"downloadMbps",
|
|
167
|
+
"uploadMbps",
|
|
168
|
+
"latencyMs",
|
|
169
|
+
"jitterMs",
|
|
170
|
+
"recordingUploadMode",
|
|
171
|
+
"readinessMedianMs",
|
|
172
|
+
"readinessWindowMs",
|
|
173
|
+
"readinessSampleCount",
|
|
174
|
+
], { resolves: ["preflight.row-checking", "preflight.row-failed"] }),
|
|
175
|
+
"preflight.row-failed": decision("aggregate", "preflight", ["preflight.checks[]", "runtime.issues[]"], [
|
|
176
|
+
"row",
|
|
177
|
+
"code",
|
|
178
|
+
"durationMs",
|
|
179
|
+
"retryCount",
|
|
180
|
+
"downloadMbps",
|
|
181
|
+
"uploadMbps",
|
|
182
|
+
"latencyMs",
|
|
183
|
+
"jitterMs",
|
|
184
|
+
"recordingUploadMode",
|
|
185
|
+
"readinessMedianMs",
|
|
186
|
+
"readinessWindowMs",
|
|
187
|
+
"readinessSampleCount",
|
|
188
|
+
], {
|
|
189
|
+
resolvedBy: ["preflight.row-retried", "preflight.row-passed"],
|
|
190
|
+
resolves: ["preflight.row-checking"],
|
|
191
|
+
}),
|
|
192
|
+
"preflight.row-retried": decision("aggregate", "preflight", ["preflight.checks[]"], ["row", "attempt"], { resolves: ["preflight.row-failed"] }),
|
|
193
|
+
"preflight.device-picked": decision("latest", "preflight", ["preflight.devices"]),
|
|
194
|
+
"preflight.devices-enumerated": decision("latest", "preflight", [
|
|
195
|
+
"preflight.devices.camera.availableCount",
|
|
196
|
+
"preflight.devices.camera.virtualCount",
|
|
197
|
+
"preflight.devices.microphone.availableCount",
|
|
198
|
+
"preflight.devices.microphone.virtualCount",
|
|
199
|
+
"preflight.devices.speaker.availableCount",
|
|
200
|
+
"preflight.devices.speaker.virtualCount",
|
|
201
|
+
]),
|
|
202
|
+
"preflight.devices-changed": decision("aggregate", "preflight", [
|
|
203
|
+
"preflight.devices.camera.availableCount",
|
|
204
|
+
"preflight.devices.camera.virtualCount",
|
|
205
|
+
"preflight.devices.microphone.availableCount",
|
|
206
|
+
"preflight.devices.microphone.virtualCount",
|
|
207
|
+
"preflight.devices.speaker.availableCount",
|
|
208
|
+
"preflight.devices.speaker.virtualCount",
|
|
209
|
+
]),
|
|
210
|
+
"preflight.microphone-verification": decision("latest", "preflight", ["preflight.checks[].microphoneVerification"], ["verificationMode", "fallbackReason", "vadPreparationMs"]),
|
|
211
|
+
"preflight.face-detected": decision("latest", "preflight", ["preflight.checks[]"]),
|
|
212
|
+
"preflight.completed": decision("latest", "preflight", ["preflight.verdict", "preflight.completedAt"], ["passed"], { resolves: ["preflight.started"] }),
|
|
213
|
+
"clipboard.copy": decision("aggregate", "writing", [
|
|
214
|
+
"writing.clipboard.blockedCopyAttempts",
|
|
215
|
+
"writing.clipboard.lastBlockedAction",
|
|
216
|
+
"writing.clipboard.lastBlockedAt",
|
|
217
|
+
], ["blocked"]),
|
|
218
|
+
"clipboard.paste": decision("aggregate", "writing", [
|
|
219
|
+
"writing.clipboard.blockedPasteAttempts",
|
|
220
|
+
"writing.clipboard.lastBlockedAction",
|
|
221
|
+
"writing.clipboard.lastBlockedAt",
|
|
222
|
+
], ["blocked"]),
|
|
223
|
+
"clipboard.cut": decision("aggregate", "writing", [
|
|
224
|
+
"writing.clipboard.blockedCutAttempts",
|
|
225
|
+
"writing.clipboard.lastBlockedAction",
|
|
226
|
+
"writing.clipboard.lastBlockedAt",
|
|
227
|
+
], ["blocked"]),
|
|
228
|
+
"text.saved": decision("latest", "writing", ["writing.lastSaveFailure"], [], {
|
|
229
|
+
resolves: ["text.save-failed"],
|
|
230
|
+
}),
|
|
231
|
+
"text.save-failed": decision("aggregate", "writing", ["writing.saveFailures", "writing.lastSaveFailure"], ["code"], { resolvedBy: ["text.saved"] }),
|
|
232
|
+
};
|
|
233
|
+
const INTEGRITY_AND_BEHAVIOUR_EVENTS = [
|
|
234
|
+
"session.integrity-hold",
|
|
235
|
+
"session.integrity-cleared",
|
|
236
|
+
"session.checkpoint",
|
|
237
|
+
"focus.lost",
|
|
238
|
+
"focus.gained",
|
|
239
|
+
"tab.hidden",
|
|
240
|
+
"tab.visible",
|
|
241
|
+
"page.viewed",
|
|
242
|
+
"fullscreen.entered",
|
|
243
|
+
"fullscreen.exited",
|
|
244
|
+
"contextmenu.opened",
|
|
245
|
+
"keyboard.blocked",
|
|
246
|
+
"screenshot.attempted",
|
|
247
|
+
"pointer.left-window",
|
|
248
|
+
"pointer.returned",
|
|
249
|
+
"idle.started",
|
|
250
|
+
"idle.ended",
|
|
251
|
+
];
|
|
252
|
+
const MEDIA_AND_RECORDING_EVENTS = [
|
|
253
|
+
"screen-share.chunk-uploaded",
|
|
254
|
+
"screen-share.chunk-dropped",
|
|
255
|
+
"assessment-replay.started",
|
|
256
|
+
"assessment-replay.chunk-uploaded",
|
|
257
|
+
"assessment-replay.chunk-dropped",
|
|
258
|
+
"assessment-replay.unavailable",
|
|
259
|
+
"assessment-replay.stopped",
|
|
260
|
+
"webcam.photo.captured",
|
|
261
|
+
"webcam.photo.dropped",
|
|
262
|
+
"webcam.recording.started",
|
|
263
|
+
"webcam.recording.stopped",
|
|
264
|
+
"webcam.recording.chunk-uploaded",
|
|
265
|
+
"webcam.recording.chunk-dropped",
|
|
266
|
+
"video-clip.started",
|
|
267
|
+
"video-clip.stopped",
|
|
268
|
+
"video-clip.uploaded",
|
|
269
|
+
"video-clip.dropped",
|
|
270
|
+
"audio-clip.started",
|
|
271
|
+
"audio-clip.stopped",
|
|
272
|
+
"audio-clip.uploaded",
|
|
273
|
+
"audio-clip.dropped",
|
|
274
|
+
"media.frame.captured",
|
|
275
|
+
"media.audio.chunk",
|
|
276
|
+
];
|
|
277
|
+
const DEVICE_AND_POLICY_EVENTS = [
|
|
278
|
+
"session.fingerprint",
|
|
279
|
+
"session.policy",
|
|
280
|
+
"preflight.camera-photo",
|
|
281
|
+
];
|
|
282
|
+
const UNTRUSTED_OPEN_PAYLOAD_EVENTS = [
|
|
283
|
+
"preflight.attestation",
|
|
284
|
+
];
|
|
285
|
+
const ANALYSIS_AND_SURVEILLANCE_EVENTS = [
|
|
286
|
+
"face.detector-ready",
|
|
287
|
+
"face.detector-failed",
|
|
288
|
+
"face.detector-degraded",
|
|
289
|
+
"face.lost",
|
|
290
|
+
"face.returned",
|
|
291
|
+
"face.multiple",
|
|
292
|
+
"face.multiple-cleared",
|
|
293
|
+
"face.gaze-off-screen",
|
|
294
|
+
"face.gaze-restored",
|
|
295
|
+
"face.identity-mismatch",
|
|
296
|
+
"screen.window-switched",
|
|
297
|
+
"screen.scene-stable",
|
|
298
|
+
"screen.recording-paused",
|
|
299
|
+
"webcam.phone-detected",
|
|
300
|
+
"webcam.phone-cleared",
|
|
301
|
+
"webcam.book-detected",
|
|
302
|
+
"webcam.book-cleared",
|
|
303
|
+
"webcam.second-device-detected",
|
|
304
|
+
"webcam.second-device-cleared",
|
|
305
|
+
"webcam.second-screen-detected",
|
|
306
|
+
"webcam.second-screen-cleared",
|
|
307
|
+
"face.lost-at-snapshot",
|
|
308
|
+
"face.multiple-at-snapshot",
|
|
309
|
+
"face.gaze-off-screen-at-snapshot",
|
|
310
|
+
"face.identity-mismatch-at-snapshot",
|
|
311
|
+
"webcam.phone-detected-at-snapshot",
|
|
312
|
+
"webcam.book-detected-at-snapshot",
|
|
313
|
+
"webcam.second-device-detected-at-snapshot",
|
|
314
|
+
"webcam.second-screen-detected-at-snapshot",
|
|
315
|
+
];
|
|
316
|
+
const ASSESSMENT_WRITING_EVENTS = [
|
|
317
|
+
"text.started",
|
|
318
|
+
"text.paste",
|
|
319
|
+
"text.copy",
|
|
320
|
+
"text.cut",
|
|
321
|
+
"text.keystroke-summary",
|
|
322
|
+
"text.checkpoint",
|
|
323
|
+
"text.focus-lost",
|
|
324
|
+
"text.focus-regained",
|
|
325
|
+
"text.synthetic-input",
|
|
326
|
+
"text.submitted",
|
|
327
|
+
];
|
|
328
|
+
const exclude = (events, reason) => events.map((kind) => ({ kind, disposition: "exclude", reason }));
|
|
329
|
+
/**
|
|
330
|
+
* Every excluded event is named explicitly. The generator rejects duplicates,
|
|
331
|
+
* omissions, and unknown events so a new EventKind cannot silently inherit a
|
|
332
|
+
* candidate-support policy.
|
|
333
|
+
*/
|
|
334
|
+
export const EXCLUDED_SUPPORT_EVENT_SOURCES = [
|
|
335
|
+
...exclude(INTEGRITY_AND_BEHAVIOUR_EVENTS, "Candidate-facing support excludes behavioural and integrity-surveillance telemetry."),
|
|
336
|
+
...exclude(MEDIA_AND_RECORDING_EVENTS, "Candidate-facing support excludes media, recording, upload, and evidence telemetry."),
|
|
337
|
+
...exclude(DEVICE_AND_POLICY_EVENTS, "The payload may expose raw device identifiers, fingerprints, biometric media, or internal policy."),
|
|
338
|
+
...exclude(UNTRUSTED_OPEN_PAYLOAD_EVENTS, "Candidate-facing support excludes untrusted open payloads until a closed server mapping exists."),
|
|
339
|
+
...exclude(ANALYSIS_AND_SURVEILLANCE_EVENTS, "Candidate-facing support excludes biometric, object, screen-analysis, and review evidence."),
|
|
340
|
+
...exclude(ASSESSMENT_WRITING_EVENTS, "Candidate-facing support excludes answers, questions, clipboard content, typing dynamics, and writing-integrity signals."),
|
|
341
|
+
];
|
|
342
|
+
const buildExcludedSupportEventDecisions = (sources) => {
|
|
343
|
+
const seen = new Set();
|
|
344
|
+
for (const { kind } of sources) {
|
|
345
|
+
if (seen.has(kind)) {
|
|
346
|
+
throw new Error(`Duplicate candidate-support exclusion source: ${kind}`);
|
|
347
|
+
}
|
|
348
|
+
seen.add(kind);
|
|
349
|
+
}
|
|
350
|
+
return Object.fromEntries(sources.map(({ kind, disposition, reason }) => [kind, { disposition, reason }]));
|
|
351
|
+
};
|
|
352
|
+
export const EXCLUDED_SUPPORT_EVENT_DECISIONS = buildExcludedSupportEventDecisions(EXCLUDED_SUPPORT_EVENT_SOURCES);
|
|
353
|
+
//# sourceMappingURL=support-event-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-event-policy.js","sourceRoot":"","sources":["../../src/investigation/support-event-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/investigation/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,UAAU,CAAC;AAC3D,eAAO,MAAM,yCAAyC,UAAU,CAAC;AACjE,eAAO,MAAM,qCAAqC,UAAU,CAAC"}
|