@scandit/web-datacapture-id
Version:
Scandit Data Capture SDK for the Web
352 lines (351 loc) • 18.2 kB
TypeScript
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 {};