UNPKG

@scandit/web-datacapture-id

Version:

Scandit Data Capture SDK for the Web

352 lines (351 loc) 18.2 kB
import type { Prettify, Rect } from "@scandit/web-datacapture-core"; import type { CaptureModeDeserializerInstance, AnyDataCaptureActionMessage as CoreAnyDataCaptureActionMessage, DataCaptureActionMessageKey as CoreDataCaptureActionMessageKey, DataCaptureCallbackMessage as CoreDataCaptureCallbackMessage, DataCaptureCallbackMessageKeys as CoreDataCaptureCallbackMessageKeys, Module as CoreModule, WorkerResponse as CoreWorkerResponse, EmscriptenClassHandle } from "@scandit/web-datacapture-core/build/js/worker/index"; import type { IdCaptureSettingsJSON } from "../IdCaptureSettings"; import type { AamvaBarcodeVerificationResultJSON, CapturedIdCommonFieldsJSON, CapturedIdJSON, CapturedIdJSONWithRawImageInfo, CentaurusSettingsJSON, DataConsistencyResultJSON, DrivingLicenseDetailsJSON, LocalizedOnlyIdJSON } from "../SerializedTypes"; import type { ShutterButtonState } from "scandit-web-datacapture-id-private"; import type { SafariOOMEventData } from "../safariOOMDetection/types"; /** * MESSAGES (ACTIONS) SENT TO THE WORKER */ export type DataCaptureActionMessageKey = CoreDataCaptureActionMessageKey | "idCaptureApplySettings" | "idCaptureBarcodeVerifyAamvaCapture" | "idCaptureDataConsistencyVerifyCapture" | "idCaptureGetCentaurusSettings" | "idCaptureParse" | "idCaptureReset" | "idCaptureSetLastDetectionIssue" | "idCaptureSetLastError" | "idCaptureSetLastLocalizedId" | "idCaptureSetLastResult" | "idCaptureDrivingLicenseDetailsCreateWithCentaurusData" | "getIdOpenSourceSoftwareLicenseInfo" | "idCaptureReportSafariAbruptReload" | "idCaptureDispose" | "idCaptureSetExternalTransactionId" | "idCaptureGetExternalTransactionId"; export interface IdCaptureParseResponse { result: ParseResult | null; } export interface IdCaptureDrivingLicenseDetailsCreateWithCentaurusDataResponse { result: DrivingLicenseDetailsJSON; } export interface IdCaptureBarcodeVerifyAamvaCaptureResponse { result: AamvaBarcodeVerificationResultJSON | null; } export interface IdCaptureDataConsistencyVerifyCaptureResponse { result: DataConsistencyResultJSON | null; } export interface IdCaptureGetCentaurusSettingsResponse { result: CentaurusSettingsJSON; } export interface GetIdOpenSourceSoftwareLicenseInfoResponse { licenseText: string; } export interface IdCaptureGetExternalTransactionIdResponse { transactionId: string | null; } export type WorkerResponse<C extends DataCaptureActionMessageKey> = C extends "idCaptureBarcodeVerifyAamvaCapture" ? IdCaptureBarcodeVerifyAamvaCaptureResponse : C extends "idCaptureDataConsistencyVerifyCapture" ? IdCaptureDataConsistencyVerifyCaptureResponse : C extends "idCaptureGetCentaurusSettings" ? IdCaptureGetCentaurusSettingsResponse : C extends "idCaptureParse" ? IdCaptureParseResponse : C extends "idCaptureDrivingLicenseDetailsCreateWithCentaurusData" ? IdCaptureDrivingLicenseDetailsCreateWithCentaurusDataResponse : C extends "getIdOpenSourceSoftwareLicenseInfo" ? GetIdOpenSourceSoftwareLicenseInfoResponse : C extends "idCaptureGetExternalTransactionId" ? IdCaptureGetExternalTransactionIdResponse : 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 IdCaptureGetCentaurusSettingsDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureGetCentaurusSettings"; } export interface IdCaptureDataConsistencyVerifyCaptureDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureDataConsistencyVerifyCapture"; capturedId: CapturedIdJSON; } export interface IdCaptureBarcodeVerifyAamvaCaptureDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureBarcodeVerifyAamvaCapture"; capturedId: CapturedIdJSON; endpoint: string | null; } export interface IdCaptureDrivingLicenseDetailsCreateWithCentaurusDataDataCaptureAction extends DataCaptureActionMessage { command: "idCaptureDrivingLicenseDetailsCreateWithCentaurusData"; details: { vehicleClass: string; restrictions: string; endorsements: string; }; } export interface GetIdOpenSourceSoftwareLicenseInfoAction extends DataCaptureActionMessage { command: "getIdOpenSourceSoftwareLicenseInfo"; } export interface IdCaptureReportSafariAbruptReloadAction extends DataCaptureActionMessage { command: "idCaptureReportSafariAbruptReload"; environmentData: SafariOOMEventData; } export interface IdCaptureDisposeAction extends DataCaptureActionMessage { command: "idCaptureDispose"; } export interface IdCaptureSetExternalTransactionIdAction extends DataCaptureActionMessage { command: "idCaptureSetExternalTransactionId"; transactionId: string | null; } export interface IdCaptureGetExternalTransactionIdAction extends DataCaptureActionMessage { command: "idCaptureGetExternalTransactionId"; } export type AnyDataCaptureActionMessage = CoreAnyDataCaptureActionMessage | IdCaptureApplySettingsDataCaptureAction | IdCaptureBarcodeVerifyAamvaCaptureDataCaptureAction | IdCaptureDataConsistencyVerifyCaptureDataCaptureAction | IdCaptureGetCentaurusSettingsDataCaptureAction | IdCaptureParseDataCaptureAction | IdCaptureResetDataCaptureAction | IdCaptureSetLastDetectionIssueDataCaptureAction | IdCaptureSetLastErrorDataCaptureAction | IdCaptureSetLastLocalizedIdDataCaptureAction | IdCaptureSetLastResultDataCaptureAction | IdCaptureDrivingLicenseDetailsCreateWithCentaurusDataDataCaptureAction | GetIdOpenSourceSoftwareLicenseInfoAction | IdCaptureReportSafariAbruptReloadAction | IdCaptureDisposeAction | IdCaptureSetExternalTransactionIdAction | IdCaptureGetExternalTransactionIdAction; 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" | "idCaptureDidPartiallyCaptureId" | "idCaptureDidLocalizeId" | "idCaptureDidRejectId" | "idCaptureDidLocalizeId" | "idCaptureDidShutterButtonPositionChanged" | "idCaptureDidShutterButtonStateChanged" | "idCaptureDidTimedOut" | "idCaptureDidUpdateSession" | "idCaptureIdCapturedFeedback" | "idCaptureIdRejectedFeedback" | "IdCaptureProcessFrameWithCentaurus"; interface BaseDataCaptureCallbackMessage { type: DataCaptureCallbackMessageKeys; } interface IdCaptureDidCapture extends BaseDataCaptureCallbackMessage { type: "idCaptureDidCaptureId"; payload: { capturedId: CapturedIdJSONWithRawImageInfo; }; } interface IdCaptureDidPartiallyCapture extends BaseDataCaptureCallbackMessage { type: "idCaptureDidPartiallyCaptureId"; payload: { capturedId: CapturedIdJSONWithRawImageInfo; }; } interface IdCaptureDidReject extends BaseDataCaptureCallbackMessage { type: "idCaptureDidRejectId"; payload: { capturedId: CapturedIdJSONWithRawImageInfo | null; rejectionReason: string; }; } interface IdCaptureDidLocalize extends BaseDataCaptureCallbackMessage { type: "idCaptureDidLocalizeId"; payload: { localization: LocalizedOnlyIdJSON; }; } 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 IdCaptureBackendReset extends BaseDataCaptureCallbackMessage { type: "idCaptureBackendReset"; } interface IdCaptureDetectionOnlyMode extends BaseDataCaptureCallbackMessage { type: "idCaptureDetectionOnlyMode"; payload: { detectionOnlyMode: boolean; }; } export type DataCaptureCallbackMessage = CoreDataCaptureCallbackMessage | IdCaptureBackendReset | IdCaptureDetectionOnlyMode | IdCaptureDidCapture | IdCaptureDidPartiallyCapture | IdCaptureDidReject | IdCaptureDidLocalize | IdCaptureDidShutterButtonPositionChanged | IdCaptureDidShutterButtonStateChanged | IdCaptureIdCapturedFeedback | IdCaptureIdRejectedFeedback; export type CapturedIdJSONWithoutCommonFieldsJSON = Omit<CapturedIdJSON, keyof CapturedIdCommonFieldsJSON>; export type ParseResult = { status: "success"; capturedId: CapturedIdJSONWithRawImageInfo; } | { 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: () => string | undefined; getLastName: () => string | undefined; getSecondaryLastName: () => string | undefined; getFullName: () => string; getSex: () => string | undefined; getAge: () => number | undefined; isExpired: () => boolean | undefined; getNationality: () => string | undefined; getAddress: () => string | undefined; getIssuingCountry: () => string | undefined; getIssuingCountryIso: () => string | undefined; getDocumentNumber: () => string | undefined; getDocumentAdditionalNumber: () => string | undefined; getDateOfBirth: () => string | undefined; getDateOfExpiry: () => string | undefined; getDateOfIssue: () => string | undefined; getDocumentType: () => string | undefined; getDocumentSubtype: () => string | undefined; toJson: () => string; } interface CapturedIdImages extends EmscriptenClassHandle { getFace: () => string | undefined; getFrameFront: () => WasmFrameData | null; getFrameBack: () => WasmFrameData | null; getCroppedDocumentFront: () => string | undefined; getCroppedDocumentBack: () => string | undefined; } export interface WasmFrameData extends EmscriptenClassHandle { getFrameData: () => Uint8Array; getWidth: () => number; getHeight: () => number; getMirrorAxis: () => { value: number; }; getOrientation: () => number; } export interface WasmCaptureId extends CapturedIdCommonFieldsGetters { toJson: () => string; getImages: () => CapturedIdImages; } interface ResultOk<T> { ok: () => true; value: () => T; } interface ResultFail<E> { ok: () => false; error: () => E; } export type FailableResult<T, E> = ResultFail<E> | ResultOk<T>; export interface IdCaptureSessionHolder { getCapturedId: () => CapturedIdCommonFieldsGetters | undefined; getLocalizedOnlyId: () => string | undefined; getNewlyRejectedId: () => string | undefined; 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) => void; parse: (code: string) => FailableResult<WasmCaptureId | null, string>; setExternalTransactionId: (transactionId: string | null) => void; getExternalTransactionId: () => string; getCentaurusSettings: () => string; } interface BarcodeVerificationResponse { isSuccess: boolean; allChecksPassed: boolean; error: string; serverResponseJson: string; } interface IdCaptureModule { IdCaptureDeserializer: new (helper: unknown) => CaptureModeDeserializerInstance; IdCaptureListener: { extend: (target: "IdCaptureListener", parameters: { onSessionUpdated: (mode: EmscriptenClassHandle, session: EmscriptenClassHandle) => void; onIdCaptured: (idCapture: EmscriptenClassHandle, capturedId: WasmCaptureId) => void; onIdPartiallyCaptured: (idCapture: EmscriptenClassHandle, capturedId: WasmCaptureId) => void; onIdLocalized: (idCapture: EmscriptenClassHandle, localization: string) => void; onIdRejected: (idCapture: EmscriptenClassHandle, capturedId: WasmCaptureId, rejectionReason: string) => void; onShutterButtonPositionChanged: (position: string) => void; onShutterButtonStateChanged: (state: string) => void; }) => new () => EmscriptenClassHandle; }; IdCaptureDeserializerListener: { extend: (target: "IdCaptureDeserializerListener", parameters: { onModeDeserializationStarted: (deserializer: EmscriptenClassHandle, mode: SDCIdCaptureMode, json: EmscriptenClassHandle) => void; onModeDeserializationFinished: (deserializer: EmscriptenClassHandle, mode: SDCIdCaptureMode, json: EmscriptenClassHandle) => void; onSettingsDeserializationStarted: (deserializer: EmscriptenClassHandle, settings: EmscriptenClassHandle, json: EmscriptenClassHandle) => void; onSettingsDeserializationFinished: (deserializer: EmscriptenClassHandle, settings: EmscriptenClassHandle, json: EmscriptenClassHandle) => 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: (hardReset: boolean) => void; setDetectionOnlyMode: (detectionOnly: boolean) => void; }) => new () => { delete: () => void; }; }; IdCaptureDeserializerHelper: { extend: (target: "IdCaptureDeserializerHelper", parameters: { createMode: (context: EmscriptenClassHandle, settings: EmscriptenClassHandle) => SDCIdCaptureMode; }) => new () => EmscriptenClassHandle; }; IdCapture: new (context: unknown, idCaptureBackend: unknown, settings: unknown, idCaptureImageHighlighter: unknown) => SDCIdCaptureMode; DataConsistencyVerifier: new (context: unknown) => EmscriptenClassHandle & { verify: (capturedId: string) => (EmscriptenClassHandle & { toJson: () => string; }) | null; }; AamvaBarcodeVerifier: { extend: (target: "AamvaBarcodeVerifier", parameters: { verificationEnded: () => void; retriggerVerificationIn: (timeInMilliseconds: number) => void; }) => new () => EmscriptenClassHandle & { initialize: (context: EmscriptenClassHandle, endpoint: string) => void; startVerification: (capturedId: string) => void; getBarcodeVerificationResponse: () => BarcodeVerificationResponse; }; }; DrivingLicenseDetails: { createWithCentaurusData: (vehicleClass: string, restrictions: string, endorsements: string) => string; }; IdOpenSourceSoftwareLicenseInfo: { getLicenseText(): string; }; OutOfMemoryAnalyticsData: new (framesProcessedCount: number, didCaptureCount: number, didRejectCount: number, applySettingsCount: number, upTime: number, videoResolution: string, parentDomain: string | undefined, centaurusEnabled: boolean) => EmscriptenClassHandle; OutOfMemoryAnalyticsHelper: { storeAnalyticsEvent: (context: unknown, event: unknown) => void; }; } 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: T | undefined, 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 {};