UNPKG

ts-webcam

Version:

A production-grade TypeScript webcam library with callback-based APIs, flexible permission handling, and comprehensive device support

80 lines 2.48 kB
import { WebcamError } from "./errors"; export interface Resolution { name: string; width: number; height: number; } export type FocusMode = "manual" | "single-shot" | "continuous" | "auto" | "none"; export interface DeviceCapability { deviceId: string; label: string; maxWidth: number; maxHeight: number; minWidth: number; minHeight: number; supportedFrameRates?: number[]; hasZoom?: boolean; hasTorch?: boolean; hasFocus?: boolean; maxZoom?: number; minZoom?: number; supportedFocusModes?: FocusMode[]; } export interface PermissionRequestOptions { video?: boolean; audio?: boolean; } export interface ResolutionInfo { width: number; height: number; name: string; } export interface WebcamConfiguration { deviceInfo?: MediaDeviceInfo; preferredResolutions?: Resolution | Resolution[]; videoElement?: HTMLVideoElement; enableAudio?: boolean; enableMirror?: boolean; onStateChange?: (state: WebcamState) => void; onStreamStart?: (stream: MediaStream) => void; onStreamStop?: () => void; onError?: (error: WebcamError) => void; onPermissionChange?: (permissions: Record<string, PermissionState>) => void; onDeviceChange?: (devices: MediaDeviceInfo[]) => void; } export type WebcamStatus = "idle" | "initializing" | "ready" | "error"; export interface WebcamStateInternal { status: WebcamStatus; activeStream: MediaStream | null; permissions: Record<string, PermissionState>; videoElement?: HTMLVideoElement; deviceInfo?: MediaDeviceInfo; error?: WebcamError | null; zoom?: number; focusMode?: FocusMode; torch?: boolean; } export type WebcamState = Readonly<WebcamStateInternal>; export interface CaptureOptions { /** Image type, e.g., 'image/jpeg' or 'image/png' (default: 'image/jpeg') */ imageType?: string; /** Image quality from 0 to 1 (only applicable for image/jpeg) (default: 0.92) */ quality?: number; /** Scale factor (0.1-2) to resize the captured image (default: 1.0) */ scale?: number; } export interface CaptureResult { /** Captured image as Blob */ blob: Blob; /** Base64 encoded image data */ base64: string; /** Image width */ width: number; /** Image height */ height: number; /** MIME type of the image */ mimeType: string; /** Timestamp when the capture was taken */ timestamp: number; } //# sourceMappingURL=types.d.ts.map