UNPKG

scandit-web-datacapture-id

Version:

Scandit Data Capture SDK for the Web

327 lines (326 loc) 16.1 kB
import type { Prettify, PrivateLoadableFrameData, Rect } from "scandit-web-datacapture-core"; import type { AnyDataCaptureActionMessage as CoreAnyDataCaptureActionMessage, CaptureModeDeserializerInstance, DataCaptureActionMessageKey as CoreDataCaptureActionMessageKey, DataCaptureCallbackMessage as CoreDataCaptureCallbackMessage, DataCaptureCallbackMessageKeys as CoreDataCaptureCallbackMessageKeys, EmscriptenClassHandle, Module as CoreModule, WasmFrameData, WorkerResponse as CoreWorkerResponse } from "scandit-web-datacapture-core/build/js/worker/index"; import type { IdCaptureSettingsJSON } from "../IdCaptureSettings"; import type { CapturedIdCommonFieldsJSON, AamvaBarcodeVerificationResultJSON, AamvaVizBarcodeComparisonResultJSON, CapturedIdJSON, IdCaptureSessionJSON, VizMrzComparisonResultJSON, DrivingLicenseDetailsJSON } from "../SerializedTypes"; import type { ShutterButtonState } from "scandit-web-datacapture-id-private"; /** * MESSAGES (ACTIONS) SENT TO THE WORKER */ export type DataCaptureActionMessageKey = CoreDataCaptureActionMessageKey | "idCaptureApplySettings" | "idCaptureBarcodeVerifyAamvaCapture" | "idCaptureParse" | "idCaptureReset" | "idCaptureSetLastDetectionIssue" | "idCaptureSetLastError" | "idCaptureSetLastLocalizedId" | "idCaptureSetLastResult" | "idCaptureVerifyAamvaCapture" | "idCaptureVerifyVizMrzCapture" | "idCaptureDrivingLicenseDetailsCreateWithBlinkIdData"; export interface IdCaptureVerifyAamvaCaptureResponse { result: AamvaVizBarcodeComparisonResultJSON | null; } export interface IdCaptureParseResponse { result: ParseResult | null; } export interface IdCaptureDrivingLicenseDetailsCreateWithBlinkIdDataResponse { result: DrivingLicenseDetailsJSON; } export interface IdCaptureVerifyVizMrzCaptureResponse { result: VizMrzComparisonResultJSON | null; } export interface IdCaptureBarcodeVerifyAamvaCaptureResponse { result: AamvaBarcodeVerificationResultJSON & { error: string; serverResponseJSON: string; isSuccess: boolean; }; } export type WorkerResponse<C extends DataCaptureActionMessageKey> = C extends "idCaptureVerifyAamvaCapture" ? IdCaptureVerifyAamvaCaptureResponse : C extends "idCaptureBarcodeVerifyAamvaCapture" ? IdCaptureBarcodeVerifyAamvaCaptureResponse : C extends "idCaptureVerifyVizMrzCapture" ? IdCaptureVerifyVizMrzCaptureResponse : C extends "idCaptureParse" ? IdCaptureParseResponse : C extends "idCaptureDrivingLicenseDetailsCreateWithBlinkIdData" ? IdCaptureDrivingLicenseDetailsCreateWithBlinkIdDataResponse : CoreWorkerResponse<C>; interface DataCaptureActionMessage { command: DataCaptureActionMessageKey; id: number; } export interface IdCaptureSetLastResultDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureSetLastResult"; result: string; } export interface IdCaptureSetLastErrorDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureSetLastError"; error: string; } export interface IdCaptureSetLastLocalizedIdDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureSetLastLocalizedId"; localizedId: string; } export interface IdCaptureSetLastDetectionIssueDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureSetLastDetectionIssue"; issue: string; } export interface IdCaptureResetDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureReset"; } export interface IdCaptureApplySettingsDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureApplySettings"; settings: IdCaptureSettingsJSON; } export interface IdCaptureParseDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureParse"; code: string; } export interface IdCaptureVerifyAamvaCaptureDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureVerifyAamvaCapture"; capturedId: CapturedIdJSON; } export interface IdCaptureVerifyVizMrzCaptureDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureVerifyVizMrzCapture"; capturedId: CapturedIdJSON; } export interface IdCaptureBarcodeVerifyAamvaCaptureDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureBarcodeVerifyAamvaCapture"; capturedId: CapturedIdJSON; endpoint: string | null; } export interface IdCaptureDrivingLicenseDetailsCreateWithBlinkIdDataDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureDrivingLicenseDetailsCreateWithBlinkIdData"; details: { vehicleClass: string; restrictions: string; endorsements: string; }; } export type AnyDataCaptureActionMessage = CoreAnyDataCaptureActionMessage | IdCaptureApplySettingsDataCaptureAction | IdCaptureBarcodeVerifyAamvaCaptureDataCaptureAction | IdCaptureParseDataCaptureAction | IdCaptureResetDataCaptureAction | IdCaptureSetLastDetectionIssueDataCaptureAction | IdCaptureSetLastErrorDataCaptureAction | IdCaptureSetLastLocalizedIdDataCaptureAction | IdCaptureSetLastResultDataCaptureAction | IdCaptureVerifyAamvaCaptureDataCaptureAction | IdCaptureVerifyVizMrzCaptureDataCaptureAction | IdCaptureDrivingLicenseDetailsCreateWithBlinkIdDataDataCaptureAction; export type MessagePayloadByCommand = { [key in AnyDataCaptureActionMessage["command"]]: Prettify<Omit<Extract<AnyDataCaptureActionMessage, { command: key; }>, "command" | "id">>; }; export type WorkerCall = <C extends keyof MessagePayloadByCommand>(command: C, payload: Prettify<MessagePayloadByCommand[C]>) => Promise<WorkerResponse<C>>; /** * MESSAGES EMITTED BY THE WORKER */ type DataCaptureCallbackMessageKeys = CoreDataCaptureCallbackMessageKeys | "idCaptureBackendReset" | "idCaptureDetectionOnlyMode" | "idCaptureDidCaptureId" | "idCaptureDidLocalizeId" | "idCaptureDidRejectId" | "idCaptureDidShutterButtonPositionChanged" | "idCaptureDidShutterButtonStateChanged" | "idCaptureDidTimedOut" | "idCaptureDidUpdateSession" | "idCaptureIdCapturedFeedback" | "idCaptureIdCaptureTimeoutFeedback" | "idCaptureIdRejectedFeedback" | "IdCaptureProcessFrameWithCentaurus"; interface BaseDataCaptureCallbackMessage { type: DataCaptureCallbackMessageKeys; } interface IdCaptureDidCapture extends BaseDataCaptureCallbackMessage { type: "idCaptureDidCaptureId"; payload: { session: IdCaptureSessionJSON; frameData: PrivateLoadableFrameData; }; } interface IdCaptureDidUpdateSession extends BaseDataCaptureCallbackMessage { type: "idCaptureDidUpdateSession"; payload: { session: IdCaptureSessionJSON; frameData: PrivateLoadableFrameData; }; } interface IdCaptureDidReject extends BaseDataCaptureCallbackMessage { type: "idCaptureDidRejectId"; payload: { session: IdCaptureSessionJSON; frameData: PrivateLoadableFrameData; }; } interface IdCaptureDidLocalizeId extends BaseDataCaptureCallbackMessage { type: "idCaptureDidLocalizeId"; payload: { session: IdCaptureSessionJSON; frameData: PrivateLoadableFrameData; }; } interface IdCaptureDidTimedOut extends BaseDataCaptureCallbackMessage { type: "idCaptureDidTimedOut"; payload: { session: IdCaptureSessionJSON; frameData: PrivateLoadableFrameData; }; } interface IdCaptureDidShutterButtonPositionChanged extends BaseDataCaptureCallbackMessage { type: "idCaptureDidShutterButtonPositionChanged"; payload: { position: Rect; }; } interface IdCaptureDidShutterButtonStateChanged extends BaseDataCaptureCallbackMessage { type: "idCaptureDidShutterButtonStateChanged"; payload: { state: ShutterButtonState; }; } interface IdCaptureIdCapturedFeedback extends BaseDataCaptureCallbackMessage { type: "idCaptureIdCapturedFeedback"; } interface IdCaptureIdRejectedFeedback extends BaseDataCaptureCallbackMessage { type: "idCaptureIdRejectedFeedback"; } interface IdCaptureIdCaptureTimeoutFeedback extends BaseDataCaptureCallbackMessage { type: "idCaptureIdCaptureTimeoutFeedback"; } interface IdCaptureBackendReset extends BaseDataCaptureCallbackMessage { type: "idCaptureBackendReset"; } interface IdCaptureDetectionOnlyMode extends BaseDataCaptureCallbackMessage { type: "idCaptureDetectionOnlyMode"; payload: { detectionOnlyMode: boolean; }; } export type DataCaptureCallbackMessage = CoreDataCaptureCallbackMessage | IdCaptureBackendReset | IdCaptureDetectionOnlyMode | IdCaptureDidCapture | IdCaptureDidLocalizeId | IdCaptureDidReject | IdCaptureDidShutterButtonPositionChanged | IdCaptureDidShutterButtonStateChanged | IdCaptureDidTimedOut | IdCaptureDidUpdateSession | IdCaptureIdCapturedFeedback | IdCaptureIdCaptureTimeoutFeedback | IdCaptureIdRejectedFeedback; export type CapturedIdJSONWithoutCommonFieldsJSON = Omit<CapturedIdJSON, keyof CapturedIdCommonFieldsJSON>; export type ParseResult = { status: "success"; capturedId: CapturedIdJSON; } | { status: "error"; error: string; }; /** * OTHERS */ export type PayloadForCommand<A, C> = A extends { command: C; } ? A : never; export interface DataCaptureWorker extends Omit<Worker, "postMessage"> { onmessage: ((this: Worker, event_: MessageEvent & { data: unknown; }) => void) | null; postMessage: <C extends AnyDataCaptureActionMessage["command"]>(message: PayloadForCommand<AnyDataCaptureActionMessage, C>, transfer?: Transferable[]) => void; } export declare enum IdCaptureBackendErrorType { Undefined = "Undefined", InitializationError = "InitializationError", ParsingError = "ParsingError" } export interface IdCaptureBackendError { type: IdCaptureBackendErrorType; message: string; } export interface CapturedIdCommonFieldsGetters extends Pick<EmscriptenClassHandle, "delete"> { getFirstName: () => OptionalValueHolder<string>; getLastName: () => OptionalValueHolder<string>; getSecondaryLastName: () => OptionalValueHolder<string>; getFullName: () => string; getSex: () => OptionalValueHolder<string>; getAge: () => OptionalValueHolder<number | null>; isExpired: () => OptionalValueHolder<boolean | null>; getNationality: () => OptionalValueHolder<string>; getAddress: () => OptionalValueHolder<string>; getIssuingCountry: () => OptionalValueHolder<string>; getIssuingCountryIso: () => OptionalValueHolder<string>; getDocumentNumber: () => OptionalValueHolder<string>; getDocumentAdditionalNumber: () => OptionalValueHolder<string>; getDateOfBirth: () => OptionalValueHolder<string>; getDateOfExpiry: () => OptionalValueHolder<string>; getDateOfIssue: () => OptionalValueHolder<string>; getDocumentType: () => string; } interface ResultOk<T> { ok: () => true; value: () => T; } interface ResultFail<E> { ok: () => false; error: () => E; } export type FailableResult<T, E> = ResultFail<E> | ResultOk<T>; interface HasValueHolder<T> { has_value: () => true; value: () => T; } interface HasNoValueHolder { has_value: () => false; } export type OptionalValueHolder<T> = HasNoValueHolder | HasValueHolder<T>; export interface IdCaptureSessionHolder { getCapturedId: () => OptionalValueHolder<CapturedIdCommonFieldsGetters>; getLocalizedOnlyId: () => OptionalValueHolder<string>; getNewlyRejectedId: () => OptionalValueHolder<string>; toJson: () => string; } export interface CapturedIdHolder extends CapturedIdCommonFieldsGetters { toJson: () => string; } export interface SDCIdCaptureMode extends EmscriptenClassHandle { reset: () => void; applySettings: (settings: string) => void; addListener: (listener: unknown) => void; setFeedbacks: (idCaptured: unknown, idRejected: unknown, idCaptureTimeout: unknown) => void; parse: (code: string) => FailableResult<CapturedIdHolder | null, string>; } interface BarcodeVerificationResponse { isSuccess: boolean; allChecksPassed: boolean; error: string; serverResponseJson: string; } interface IdCaptureModule { IdCaptureDeserializer: new (helper: unknown) => CaptureModeDeserializerInstance; IdCaptureListener: { extend: (target: "IdCaptureListener", parameters: { onSessionUpdated: (idCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void; onIdCaptured: (idCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void; onIdLocalized: (idCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void; onIdRejected: (idCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void; onIdCaptureTimedOut: (idCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void; onShutterButtonPositionChanged: (position: string) => void; onShutterButtonStateChanged: (state: string) => void; }) => new () => EmscriptenClassHandle; }; IdCaptureDeserializerListener: { extend: (target: "IdCaptureDeserializerListener", parameters: { onModeDeserializationStarted: (deserializer: unknown, mode: SDCIdCaptureMode, json: unknown) => void; onModeDeserializationFinished: (deserializer: unknown, mode: SDCIdCaptureMode, json: unknown) => void; onSettingsDeserializationStarted: (deserializer: unknown, settings: unknown, json: unknown) => void; onSettingsDeserializationFinished: (deserializer: unknown, settings: unknown, json: unknown) => void; }) => new () => EmscriptenClassHandle; }; IdCaptureBackend: { extend: (target: "IdCaptureBackend", parameters: { getLastError: () => string; getLastResult: () => string; getLocalizedOnlyId: () => string; getLastIssue: () => string; processFrame: (data: Uint8ClampedArray, width: number, height: number, format: unknown) => void; reset: () => void; setDetectionOnlyMode: (detectionOnly: boolean) => void; }) => new () => { delete: () => void; }; }; IdCaptureDeserializerHelper: { extend: (target: "IdCaptureDeserializerHelper", parameters: { createMode: (context: unknown, settings: unknown) => SDCIdCaptureMode; }) => new () => EmscriptenClassHandle; }; IdCapture: new (context: unknown, idCaptureBackend: unknown, settings: unknown, idCaptureImageHighlighter: unknown) => SDCIdCaptureMode; AamvaVizBarcodeComparisonVerifier: new () => { verify: (capturedId: string) => { toJson: () => string; }; }; VizMrzComparisonVerifier: new (context: unknown) => { verify: (capturedId: string) => { toJson: () => string; }; }; AamvaBarcodeVerifier: { extend: (target: "AamvaBarcodeVerifier", parameters: { verificationEnded: () => void; retriggerVerificationIn: (timeInMilliseconds: number) => void; }) => new () => EmscriptenClassHandle & { initialize: (context: unknown, endpoint: string) => void; startVerification: (capturedId: string) => void; getBarcodeVerificationResponse: () => BarcodeVerificationResponse; }; }; DrivingLicenseDetails: { createWithBlinkIdData: (vehicleClass: string, restrictions: string, endorsements: string) => string; }; } export interface Module extends CoreModule, IdCaptureModule { } export declare function getValueFromFailable<T, E, U>(holder: FailableResult<T, E>, defaultValue: U): T | U; export declare function getErrorFromFailable<T, E, U>(holder: FailableResult<T, E>, defaultValue: U): E | U; export declare function getValueFromOptional<T, U>(holder: OptionalValueHolder<T>, defaultValue: U): T | U; export type EngineWorkerResponse<C extends DataCaptureActionMessageKey> = WorkerResponse<C> extends Promise<void> | void ? Promise<void> | void : { payload: WorkerResponse<C>; transferables?: Transferable[]; }; export type AugmentedWorker = Worker & { Module: Module; OffscreenCanvas: new (w: number, h: number) => OffscreenCanvas; }; export {};