import { RESULT_STATE } from '../../form/vendors/react/appConfig.type'; /** * WHICH EVENT COMPLETES WHICH STEP — the one place that answers it. * * Every wait in a journey used to be its own promise with its own listener, so * the choice of "which event means done" was implied across seven `await`s and * could only be checked by reading all of them. That invisibility produced this * spike's worst defects: the RESULT screen was awaited on `form:result:ready`, * which it never emits, and welcome/consent/review were awaited on events the * form module emits on *submit*, not on render — which is what the 5s fallback * timers were papering over, and those timers then advanced past screens nobody * had acted on and recorded consent nobody gave. * * So the table is the artefact: one row per step, the signals it subscribes to, * and what each signal actually means — read out of the emitting module, not * assumed. A reviewer checks this file against the form and idv modules; the * machine (`stepMachine.ts`) wires exactly what is declared here and nothing * else. Where a step completes on something that is not an event at all — the * terminal RESULT screen settling when `mount()` resolves — the row says so * rather than leaving it to be discovered in code. */ export type JourneyStep = 'START' | 'WELCOME' | 'CONSENT' | 'CAPTURE' | 'PERSONAL' | 'DOCUMENT' | 'REVIEW' | 'REVIEW_VERIFY' | 'PARTIAL' | 'RESULT'; /** * The pseudo-signal for a step that completes without any event: the emitter * genuinely emits nothing, and the completion is the mount promise settling. * It is not an event name, so it is never subscribed to — `completingEventsFor` * excludes it by name, as a stated rule rather than as a side effect of how its * `completes` field happens to be written. */ export declare const MOUNT_RESOLVED = "mount() resolved \u2014 no event is emitted"; export type StepSignal = { /** the event name subscribed to, or `MOUNT_RESOLVED` */ event: string; /** what the emitter actually does when it fires, and where that is written */ means: string; /** * `true` — completes the step whenever it fires. * `false` — subscribed, but never completes the step. * a string — the condition under which it completes it. */ completes: boolean | string; }; export type StepRow = { completesOn: readonly StepSignal[]; /** anything about the step's completion that is not a signal */ note?: string; }; export declare const STEP_COMPLETION: { readonly START: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "Start.tsx:17 passes `documentReady` as the Wrapper CTA handler — emitted on CTA click, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: a person reading a screen is not a stalled flow, so there is no timeout. A screen that fails to *mount* is engine silence and fails the step instead."; }; readonly WELCOME: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "Welcome.tsx:20 passes `documentReady` as the Wrapper CTA handler — emitted on CTA click, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: no timeout. See START."; }; readonly CONSENT: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "Consent.tsx:28 calls `documentReady` from `triggerEvent`, after `giveConsents` — emitted on submit, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: no timeout. The journey records consents only after this fires, so auto-advancing here would record consent nobody gave."; }; readonly PERSONAL: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "PersonalDetails.tsx:150 calls `documentReady()` from `handleFormSubmit`, wired to the form's `onSubmit` — emitted on submit, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: no timeout, same as START/WELCOME/CONSENT. ekycFlow.ts only (idv/ocr have no PERSONAL step)."; }; readonly DOCUMENT: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "IdSelection.tsx:69 calls `documentReady(document)` from `handleSubmit`, itself called on selecting/submitting an ID type — emitted on submit, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: no timeout, same as PERSONAL. ekycFlow.ts only. SECOND EXIT, not in this list because it does not complete the step the way a row event does: IdSelection.tsx:118-121 also emits `form:document:back` from the 'Back' link, and the form vendor tears its own screen down on it (`vendors/react/index.tsx` registers `cleanUpInstance` on `{screen}:back` as well as `{screen}:ready`). `screenSequence.ts`'s `presentDocument` wires it as a `DocumentExit` of 'back' and `ekycFlow.ts`'s `presentIdentity` re-presents PERSONAL — the same thing `templateManualKyc.js` does by hand. Ignoring it is what left the applicant on a blank container with this step never completing (FDEL-53225 QA bug 2)."; }; readonly CAPTURE: { readonly completesOn: readonly [{ readonly event: "detection_complete"; readonly means: "the vendor finished capture. The payload is vendor-specific: iframe vendors (Daon) emit it with NO payload at all (defineIframeIDVWrapper.ts:193), Sumsub/Truuth emit `{ provider }` only, and `source` comes solely from the split Onfido flow — `ocr/vendors/Onfido/onfido.init.ts:117-119` and `onfidoLegacy.init.ts:135-137` supply `source: \"ocr\"`, `idv/vendors/Onfido/index.useOneStep.ts:142` supplies `source: \"biometrics\"`, both forwarded by `idv/vendors/Onfido/index.ts:90-94`. So the `source !== \"ocr\"` test shows the extraction screen for every vendor that omits it, which is the intent (FDEL-52471)."; readonly completes: false; }, { readonly event: "vendor_sdk_failed_loading"; readonly means: "`vendorLoading.ts:187` — the vendor's own SDK could not be fetched or initialised at all, so there is no capture UI and never will be. Emitted immediately BEFORE the generic `error` at :191, which is the only form this used to reach the journey in; since the machine settles first-wins, subscribing here is enough to claim it without deferral. Carries `{ vendor, errorObject }`, so the host finally learns which vendor failed — before FDEL-53728 Q2 that only reached `:VENDOR_FAILED_LOADING` telemetry."; readonly completes: true; }, { readonly event: "detection_failed"; readonly means: "the vendor's capture ended without a result. Two different things wear this name, which is why the row is conditional. For `defineIframeIDVWrapper.ts:233-256` (Daon, Incode), `Truuth/index.ts:349-360` and `OcrLabs/endFlow.ts:15` it is the whole story: the frame is removed and nothing else follows, so before FDEL-53728 the container simply went blank and `start()` never resolved. For Onfido (`idv/vendors/Onfido/index.useOneStep.ts:160`, `ocr/vendors/Onfido/onfido.init.ts:163`) and IDVerse (`common/vendors/idverse/index.ts:361/:372` ) it is a *prelude*, emitted synchronously ahead of `input_required` / `session_interrupted` / `error`, which say far more. Incode's `onError` emits it bare when the applicant is out of attempts."; readonly completes: "only if nothing else settles the step first — the runners defer it by one microtask, so any event the vendor emits synchronously after it wins"; }, { readonly event: "results"; readonly means: "checkStatusEventMapping.ts:34 — COMPLETE and not REJECTED. The runner then reviews and submits; the step completes on the submit result, not on this event alone."; readonly completes: "once review + submit have resolved"; }, { readonly event: "error"; readonly means: "checkStatusEventMapping.ts:26/:45 — COMPLETE+REJECTED and FAILED, as a OneSDKError whose payload carries `checkStatus`/`result`."; readonly completes: true; }, { readonly event: "info"; readonly means: "fetchCheckProcessingStatus.ts:112 emits `FetchProcessingExceededAttempts` when polling is exhausted. Every other `info` (defineIframeIDVWrapper.ts:171/:196, getInitProcessResults.ts:48) is chatter and must not settle anything."; readonly completes: "only for name === FetchProcessingExceededAttempts"; }, { readonly event: "session_interrupted"; readonly means: "the vendor session ended without a result. Emission is vendor-specific and NO iframe vendor emits it — Daon included — so on this spike's flow it never fires. `eventName: \"USER_CLOSED_MODAL\"`, which the runner reads to tell a deliberate exit from an interruption (spec §5.4), is emitted only by `biometrics/vendors/Onfido/onfido.init.ts:164`; the other emitters send `eventName: \"USER_EXITED\"` (`idv/vendors/Onfido/index.useOneStep.ts:168`, `ocr/vendors/Onfido/onfido.init.ts:176`, `onfidoLegacy.init.ts:116`), which therefore classifies as `abandoned / session_interrupted` rather than `user_exited`. Recorded, not changed here."; readonly completes: true; }, { readonly event: "input_required"; readonly means: "checkStatusEventMapping.ts:62 emits `(info, checkStatus)` for INTERRUPTED / INCOMPLETE / DOCUMENTS_INVALID / WAITING_DOC_UPLOAD / WAITING_SELFIE_UPLOAD. AWAITING_CONSENT re-presents consent and INCOMPLETE re-fetches, so neither completes the step."; readonly completes: "except AWAITING_CONSENT and INCOMPLETE (spec §5.4)"; }]; readonly note: "No timeout: capture is bounded by the applicant taking photographs (minutes) and by server-side polling the engine already bounds itself. `checkStatusEventMapping.ts:68-81` emits AWAITING_CONSENT and PROVIDER_OFFLINE as `error`, with the status under `payload.errorStatus` rather than `payload.checkStatus` — so spec §5.4 is wrong to list them under `input_required`, and on every iframe vendor (Daon, Incode) they arrive by the `error` door. FDEL-53728 B6: the `error` listener now reads `errorStatus` and routes both back through the same status ladder, so the AWAITING_CONSENT re-present is live for those vendors too rather than reading as a vendor outage."; }; readonly REVIEW: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "Review.tsx:104 calls `documentReady` after `individual().submit()` resolves — emitted on submit, NOT on render."; readonly completes: true; }]; readonly note: "Human-gated: no timeout. Advancing without this would let unreviewed data through."; }; readonly REVIEW_VERIFY: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "ekycFlow.ts only. ReviewDocument.tsx:239 calls `individual().submit({ verify })` itself (verify: true, passed via config), then its own :246-296 classifies the result inline (alertList/status.type/retryPages) into a RESULT_STATE, and :341-349's effect emits `ResultStates[resultStatus]` via `idvEventEmitter` — but ONLY when `docConfig.customResult` is true (also forced by ekycFlow.ts); otherwise ReviewDocument renders its own screen and never emits this row's events at all. SUCCESS = RESULT_STATE.SUCCESS (status.type 'passed'/'pass_manual')."; readonly completes: true; }, { readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "same emitter as above. FAILED = RESULT_STATE.FAIL — a duplicate/blacklist/too-many alert, or status.type 'failed' (ReviewDocument.tsx:272-289). Not a data-correction case: classified as declined, not retried."; readonly completes: true; }, { readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "same emitter. PARTIAL = RESULT_STATE.PARTIAL — a 'partial'/'404' alert, a PROVIDER_ERROR retryPage, or status.type 'archived' (ReviewDocument.tsx:249-284), all collapsed into one bucket. ekycFlow.ts treats every case here as a data-correction retry (spec §6), which is coarser than classify.ts's own per-status reasons (e.g. 'archived' is a terminal decline there) — a deliberate simplification: ReviewDocument.tsx's own classification is trusted as-is here rather than re-derived from a second submit."; readonly completes: true; }, { readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "same emitter. PENDING = RESULT_STATE.PENDING, the `default` branch of the status.type switch (ReviewDocument.tsx:290-292) — anything not passed/pass_manual/archived/failed and not already bucketed by an alert or retryPage."; readonly completes: true; }]; readonly note: "ekycFlow.ts does NOT call `submitAndClassify`/`individual().submit()` itself for this step — ReviewDocument.tsx's built-in verify+classify is the only submit. Consequence: the resulting `ClassifierInput` never carries `checkResult` (nothing here exposes the raw submit response — `idvEventEmitter`'s payload is `{name: 'REVIEW'}` only, ReviewDocument.tsx:342-347), so a success/pending/declined outcome via this step settles without one. Reached twice per journey by design: once for the main attempt (REVIEW screen), again from inside the RETRY module once it lands back on REVIEW (`Retry.tsx` case REVIEW renders `` directly) — `getEventConfig` resolves the event name from `extraEventInfo.name`, not from which screen was originally mounted, so it is still `form:review:*` either time (`layout.util.tsx:47-51`)."; }; readonly PARTIAL: { readonly completesOn: readonly [{ readonly event: "form:welcome:info" | "form:welcome:back" | "form:welcome:loaded" | "form:welcome:failed" | "form:welcome:success" | "form:welcome:partial" | "form:welcome:timeout" | "form:welcome:ready" | "form:welcome:pending" | "form:welcome:navigate" | "form:consent:info" | "form:consent:back" | "form:consent:loaded" | "form:consent:failed" | "form:consent:success" | "form:consent:partial" | "form:consent:timeout" | "form:consent:ready" | "form:consent:pending" | "form:consent:navigate" | "form:document:info" | "form:document:back" | "form:document:loaded" | "form:document:failed" | "form:document:success" | "form:document:partial" | "form:document:timeout" | "form:document:ready" | "form:document:pending" | "form:document:navigate" | "form:review:info" | "form:review:back" | "form:review:loaded" | "form:review:failed" | "form:review:success" | "form:review:partial" | "form:review:timeout" | "form:review:ready" | "form:review:pending" | "form:review:navigate" | "form:personal:info" | "form:personal:back" | "form:personal:loaded" | "form:personal:failed" | "form:personal:success" | "form:personal:partial" | "form:personal:timeout" | "form:personal:ready" | "form:personal:pending" | "form:personal:navigate" | "form:loading:info" | "form:loading:back" | "form:loading:loaded" | "form:loading:failed" | "form:loading:success" | "form:loading:partial" | "form:loading:timeout" | "form:loading:ready" | "form:loading:pending" | "form:loading:navigate" | "form:result:info" | "form:result:back" | "form:result:loaded" | "form:result:failed" | "form:result:success" | "form:result:partial" | "form:result:timeout" | "form:result:ready" | "form:result:pending" | "form:result:navigate" | "form:retry:info" | "form:retry:back" | "form:retry:loaded" | "form:retry:failed" | "form:retry:success" | "form:retry:partial" | "form:retry:timeout" | "form:retry:ready" | "form:retry:pending" | "form:retry:navigate" | "form:doc_upload:info" | "form:doc_upload:back" | "form:doc_upload:loaded" | "form:doc_upload:failed" | "form:doc_upload:success" | "form:doc_upload:partial" | "form:doc_upload:timeout" | "form:doc_upload:ready" | "form:doc_upload:pending" | "form:doc_upload:navigate" | "form:start:info" | "form:start:back" | "form:start:loaded" | "form:start:failed" | "form:start:success" | "form:start:partial" | "form:start:timeout" | "form:start:ready" | "form:start:pending" | "form:start:navigate" | "form:required_document_upload:info" | "form:required_document_upload:back" | "form:required_document_upload:loaded" | "form:required_document_upload:failed" | "form:required_document_upload:success" | "form:required_document_upload:partial" | "form:required_document_upload:timeout" | "form:required_document_upload:ready" | "form:required_document_upload:pending" | "form:required_document_upload:navigate" | "form:partial_document_upload:info" | "form:partial_document_upload:back" | "form:partial_document_upload:loaded" | "form:partial_document_upload:failed" | "form:partial_document_upload:success" | "form:partial_document_upload:partial" | "form:partial_document_upload:timeout" | "form:partial_document_upload:ready" | "form:partial_document_upload:pending" | "form:partial_document_upload:navigate" | "form:optional_document_upload:info" | "form:optional_document_upload:back" | "form:optional_document_upload:loaded" | "form:optional_document_upload:failed" | "form:optional_document_upload:success" | "form:optional_document_upload:partial" | "form:optional_document_upload:timeout" | "form:optional_document_upload:ready" | "form:optional_document_upload:pending" | "form:optional_document_upload:navigate" | "form:verification_method_selection:info" | "form:verification_method_selection:back" | "form:verification_method_selection:loaded" | "form:verification_method_selection:failed" | "form:verification_method_selection:success" | "form:verification_method_selection:partial" | "form:verification_method_selection:timeout" | "form:verification_method_selection:ready" | "form:verification_method_selection:pending" | "form:verification_method_selection:navigate"; readonly means: "Result.tsx:145-149 — the RESULT screen emits on CTA click only, never on render; PARTIAL maps to `partial` (form.const.ts:225)."; readonly completes: true; }]; readonly note: "spec §6 — the data-correction retry. Its CTA (\"Review details\") IS the retry action, so this screen keeps its CTA where terminal screens hide theirs (D5)."; }; readonly RESULT: { readonly completesOn: readonly [{ readonly event: "mount() resolved — no event is emitted"; readonly means: "the terminal screen is non-interactive by default (`cta.hidden`, spec D5) and emits nothing on render, so the completion is `mount()` settling — resolved or rejected. Waiting on an event here is what the `form:result:ready` defect did, and the event never came."; readonly completes: "when no CTA is configured (the default)"; }, { readonly event: "form:result:{success|failed|partial|pending|timeout}"; readonly means: "Result.tsx:145-149 emits the event `ResultStates[state]` names, on CTA click only. The exact event per state is `RESULT_CTA_EVENT` below."; readonly completes: "when the host configured a CTA (spec §7.2)"; }]; readonly note: "A CTA screen that never rendered also completes: no click can follow a screen that is not there."; }; }; /** * The event each RESULT state emits when its CTA is clicked. Mirrors * `ResultStates` (`form/vendors/react/constants/form.const.ts:224`), which is * what `Result.tsx:147` reads to decide what to emit. */ export declare const RESULT_CTA_EVENT: Record; /** every engine event the capture step subscribes to, straight from the table */ export declare const CAPTURE_EVENTS: ("error" | "info" | "vendor_sdk_failed_loading" | "results" | "detection_complete" | "detection_failed" | "input_required" | "session_interrupted")[]; /** the events of the capture row, as a union — a handler map must cover them all */ export type CaptureEvent = (typeof CAPTURE_EVENTS)[number]; /** * The `ocr` module's own CAPTURE row (`ocrFlow.ts`). Same event *names* as * `idv`'s row above — unsurprising, since `idv` is `ocr` + biometrics composed * — but NOT the same *meaning* for every vendor, so it gets its own row rather * than reusing IDV's: * * - `detection_complete` never carries `source: 'biometrics'` here (there is no * biometrics leg), so, unlike IDV, this row's listener shows the extraction * screen unconditionally — nothing to suppress it for. * - `error`/`input_required` status vocabulary is vendor-dependent in a way * IDV's row is not fully: * - Daon (`modules/ocr/vendors/Daon/index.ts`) shares `defineIframeIDVWrapper` * with the idv module, so its statuses and the same Daon gap noted in the * CAPTURE row above apply verbatim. * - Incode/Onfido/Sumsub go through * `modules/ocr/vendors/common/statusEvaluators.ts`, whose `documentStatus` * is the raw `OCRStatus` enum (`modules/frankie-client/clients/OCRClient.ts`) * — a different string vocabulary from IDV's `checkStatusEventMapping.ts`. * `PROVIDER_OFFLINE`/`FAILED`/`WAITING_OCR_RUN` all emit a payload-less * `error` there (statusEvaluators.ts:26-49), never `input_required`. * * KNOWN GAP, flagged rather than guessed at: `statusEvaluators.ts`'s `default` * branch emits `input_required` for every other `OCRStatus`, including * `WAITING_BACK`/`WAITING_FRONT` (still waiting for the other side of a * two-sided document) and `AWAITING_DOCUMENT_UPLOAD_INVALID_TYPE` / * `AWAITING_DOCUMENT_UPLOAD_FAILED_OCR` / `DOCUMENT_INVALID_EXCEEDED_SIZE_LIMIT` * / `DOCUMENT_INVALID_INCORRECT_FILE_FORMAT` / `SHARE_DECLINED` (upload * failures). Whether `WAITING_BACK`/`WAITING_FRONT` ever reach this listener, * as opposed to being resolved inside the vendor's own capture UI before it * gets here, is not yet confirmed against Onfido/Incode's full init flow. * `ocrFlow.ts`'s recapture list only treats the confirmed failure statuses as * a recapture; an unconfirmed status still settles safely as `unmapped_status` * (diagnosable) rather than being silently misclassified either way. */ export declare const OCR_CAPTURE_EVENTS: ("error" | "info" | "vendor_sdk_failed_loading" | "results" | "detection_complete" | "detection_failed" | "input_required" | "session_interrupted")[]; /** the events of the ocr capture row, as a union — a handler map must cover them all */ export type OcrCaptureEvent = CaptureEvent; /** * Every `form:review:*` outcome event the REVIEW_VERIFY step subscribes to * (ekycFlow.ts). Values still come from the table at runtime — only the * *type* is asserted narrow: `FORM_REVIEW_SUCCESS` and friends are typed * `FormEventKeyType` (every `FormEvents` key) at their declaration in * `@module/form/events`, which is too wide for a per-event handler map, and * `as const` on an object literal cannot narrow a reference to an * already-typed constant back down. Order must match the REVIEW_VERIFY row. */ export declare const REVIEW_VERIFY_EVENTS: readonly ["form:review:success", "form:review:failed", "form:review:partial", "form:review:pending"]; /** the events of the review-verify row, as a union — a handler map must cover them all */ export type ReviewVerifyEvent = (typeof REVIEW_VERIFY_EVENTS)[number]; export declare const completingEventsFor: (step: JourneyStep) => readonly string[]; //# sourceMappingURL=stepTable.d.ts.map