565 lines
11 KiB
TypeScript
565 lines
11 KiB
TypeScript
|
|
/**
|
||
|
|
* Protect API interfaces
|
||
|
|
* Base URL: https://{host}/proxy/protect/api
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect bootstrap response containing system configuration
|
||
|
|
*/
|
||
|
|
export interface IProtectBootstrap {
|
||
|
|
/** Auth user info */
|
||
|
|
authUser?: IProtectUser;
|
||
|
|
/** Access key */
|
||
|
|
accessKey?: string;
|
||
|
|
/** Cameras list */
|
||
|
|
cameras: IProtectCamera[];
|
||
|
|
/** Users list */
|
||
|
|
users?: IProtectUser[];
|
||
|
|
/** Groups list */
|
||
|
|
groups?: IProtectGroup[];
|
||
|
|
/** Liveviews */
|
||
|
|
liveviews?: IProtectLiveview[];
|
||
|
|
/** Viewers */
|
||
|
|
viewers?: IProtectViewer[];
|
||
|
|
/** Lights */
|
||
|
|
lights?: IProtectLight[];
|
||
|
|
/** Bridges */
|
||
|
|
bridges?: IProtectBridge[];
|
||
|
|
/** Sensors */
|
||
|
|
sensors?: IProtectSensor[];
|
||
|
|
/** Doorbells */
|
||
|
|
doorbells?: IProtectDoorbell[];
|
||
|
|
/** Chimes */
|
||
|
|
chimes?: IProtectChime[];
|
||
|
|
/** NVR info */
|
||
|
|
nvr: IProtectNvr;
|
||
|
|
/** Last update ID */
|
||
|
|
lastUpdateId?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect camera
|
||
|
|
*/
|
||
|
|
export interface IProtectCamera {
|
||
|
|
/** Camera ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC address */
|
||
|
|
mac: string;
|
||
|
|
/** Host address */
|
||
|
|
host: string;
|
||
|
|
/** Camera name */
|
||
|
|
name: string;
|
||
|
|
/** Camera type/model */
|
||
|
|
type: string;
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
/** Camera state */
|
||
|
|
state: 'CONNECTED' | 'DISCONNECTED' | 'CONNECTING' | 'ADOPTING' | 'MANAGED';
|
||
|
|
/** Hardware revision */
|
||
|
|
hardwareRevision?: string;
|
||
|
|
/** Firmware version */
|
||
|
|
firmwareVersion?: string;
|
||
|
|
/** Firmware build */
|
||
|
|
firmwareBuild?: string;
|
||
|
|
/** Whether camera is updating */
|
||
|
|
isUpdating?: boolean;
|
||
|
|
/** Whether camera is adopting */
|
||
|
|
isAdopting?: boolean;
|
||
|
|
/** Whether camera is managed */
|
||
|
|
isManaged?: boolean;
|
||
|
|
/** Whether camera is connected */
|
||
|
|
isConnected?: boolean;
|
||
|
|
/** Whether recording is enabled */
|
||
|
|
isRecording?: boolean;
|
||
|
|
/** Whether motion detection is enabled */
|
||
|
|
isMotionDetected?: boolean;
|
||
|
|
/** Whether camera is dark (IR mode) */
|
||
|
|
isDark?: boolean;
|
||
|
|
/** Recording settings */
|
||
|
|
recordingSettings?: IProtectRecordingSettings;
|
||
|
|
/** Smart detect settings */
|
||
|
|
smartDetectSettings?: IProtectSmartDetectSettings;
|
||
|
|
/** ISP settings (image settings) */
|
||
|
|
ispSettings?: IProtectIspSettings;
|
||
|
|
/** Microphone settings */
|
||
|
|
micVolume?: number;
|
||
|
|
/** Speaker settings */
|
||
|
|
speakerVolume?: number;
|
||
|
|
/** Last motion timestamp */
|
||
|
|
lastMotion?: number;
|
||
|
|
/** Last ring timestamp (for doorbells) */
|
||
|
|
lastRing?: number;
|
||
|
|
/** Uptime */
|
||
|
|
uptime?: number;
|
||
|
|
/** Connected since */
|
||
|
|
connectedSince?: number;
|
||
|
|
/** Up since */
|
||
|
|
upSince?: number;
|
||
|
|
/** Last seen */
|
||
|
|
lastSeen?: number;
|
||
|
|
/** Channels info */
|
||
|
|
channels?: IProtectCameraChannel[];
|
||
|
|
/** Feature flags */
|
||
|
|
featureFlags?: IProtectFeatureFlags;
|
||
|
|
/** Stats */
|
||
|
|
stats?: IProtectCameraStats;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Camera channel configuration
|
||
|
|
*/
|
||
|
|
export interface IProtectCameraChannel {
|
||
|
|
/** Channel ID */
|
||
|
|
id: number;
|
||
|
|
/** Video mode */
|
||
|
|
videoMode?: string;
|
||
|
|
/** Enabled */
|
||
|
|
enabled: boolean;
|
||
|
|
/** FPS mode */
|
||
|
|
fpsValues?: number[];
|
||
|
|
/** Is RTSP enabled */
|
||
|
|
isRtspEnabled?: boolean;
|
||
|
|
/** RTSP alias */
|
||
|
|
rtspAlias?: string;
|
||
|
|
/** Width */
|
||
|
|
width?: number;
|
||
|
|
/** Height */
|
||
|
|
height?: number;
|
||
|
|
/** FPS */
|
||
|
|
fps?: number;
|
||
|
|
/** Bitrate */
|
||
|
|
bitrate?: number;
|
||
|
|
/** Min bitrate */
|
||
|
|
minBitrate?: number;
|
||
|
|
/** Max bitrate */
|
||
|
|
maxBitrate?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Recording settings
|
||
|
|
*/
|
||
|
|
export interface IProtectRecordingSettings {
|
||
|
|
/** Pre-padding seconds */
|
||
|
|
prePaddingSecs?: number;
|
||
|
|
/** Post-padding seconds */
|
||
|
|
postPaddingSecs?: number;
|
||
|
|
/** Min motion event trigger */
|
||
|
|
minMotionEventTrigger?: number;
|
||
|
|
/** End motion event delay */
|
||
|
|
endMotionEventDelay?: number;
|
||
|
|
/** Suppress illumination surge */
|
||
|
|
suppressIlluminationSurge?: boolean;
|
||
|
|
/** Mode */
|
||
|
|
mode?: 'always' | 'detections' | 'never' | 'schedule';
|
||
|
|
/** Enable PIR timelapse */
|
||
|
|
enablePirTimelapse?: boolean;
|
||
|
|
/** Use new motion algorithm */
|
||
|
|
useNewMotionAlgorithm?: boolean;
|
||
|
|
/** In schedule mode */
|
||
|
|
inScheduleMode?: string;
|
||
|
|
/** Out schedule mode */
|
||
|
|
outScheduleMode?: string;
|
||
|
|
/** Geofencing */
|
||
|
|
geofencing?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Smart detect settings
|
||
|
|
*/
|
||
|
|
export interface IProtectSmartDetectSettings {
|
||
|
|
/** Object types to detect */
|
||
|
|
objectTypes?: string[];
|
||
|
|
/** Audio types to detect */
|
||
|
|
audioTypes?: string[];
|
||
|
|
/** Auto tracking object types */
|
||
|
|
autoTrackingObjectTypes?: string[];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ISP (Image Signal Processor) settings
|
||
|
|
*/
|
||
|
|
export interface IProtectIspSettings {
|
||
|
|
/** AE mode */
|
||
|
|
aeMode?: string;
|
||
|
|
/** IR LED mode */
|
||
|
|
irLedMode?: string;
|
||
|
|
/** IR LED level */
|
||
|
|
irLedLevel?: number;
|
||
|
|
/** WDR */
|
||
|
|
wdr?: number;
|
||
|
|
/** ICR sensitivity */
|
||
|
|
icrSensitivity?: number;
|
||
|
|
/** Brightness */
|
||
|
|
brightness?: number;
|
||
|
|
/** Contrast */
|
||
|
|
contrast?: number;
|
||
|
|
/** Hue */
|
||
|
|
hue?: number;
|
||
|
|
/** Saturation */
|
||
|
|
saturation?: number;
|
||
|
|
/** Sharpness */
|
||
|
|
sharpness?: number;
|
||
|
|
/** Denoise */
|
||
|
|
denoise?: number;
|
||
|
|
/** Is flip enabled */
|
||
|
|
isFlippedVertical?: boolean;
|
||
|
|
/** Is mirror enabled */
|
||
|
|
isFlippedHorizontal?: boolean;
|
||
|
|
/** Is auto rotate enabled */
|
||
|
|
isAutoRotateEnabled?: boolean;
|
||
|
|
/** HDR mode */
|
||
|
|
hdrMode?: string;
|
||
|
|
/** Is color night vision enabled */
|
||
|
|
isColorNightVisionEnabled?: boolean;
|
||
|
|
/** Spotlight duration */
|
||
|
|
spotlightDuration?: number;
|
||
|
|
/** Focus mode */
|
||
|
|
focusMode?: string;
|
||
|
|
/** Focus position */
|
||
|
|
focusPosition?: number;
|
||
|
|
/** Zoom position */
|
||
|
|
zoomPosition?: number;
|
||
|
|
/** Touch focus X */
|
||
|
|
touchFocusX?: number;
|
||
|
|
/** Touch focus Y */
|
||
|
|
touchFocusY?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Camera feature flags
|
||
|
|
*/
|
||
|
|
export interface IProtectFeatureFlags {
|
||
|
|
/** Can adjust IR LED level */
|
||
|
|
canAdjustIrLedLevel?: boolean;
|
||
|
|
/** Has chime */
|
||
|
|
hasChime?: boolean;
|
||
|
|
/** Has flash */
|
||
|
|
hasFlash?: boolean;
|
||
|
|
/** Has HDR */
|
||
|
|
hasHdr?: boolean;
|
||
|
|
/** Has IR LED */
|
||
|
|
hasIrLed?: boolean;
|
||
|
|
/** Has LCD screen */
|
||
|
|
hasLcdScreen?: boolean;
|
||
|
|
/** Has LED status */
|
||
|
|
hasLedStatus?: boolean;
|
||
|
|
/** Has line in */
|
||
|
|
hasLineIn?: boolean;
|
||
|
|
/** Has mic */
|
||
|
|
hasMic?: boolean;
|
||
|
|
/** Has privacy mask */
|
||
|
|
hasPrivacyMask?: boolean;
|
||
|
|
/** Has RTSP */
|
||
|
|
hasRtsp?: boolean;
|
||
|
|
/** Has SD card */
|
||
|
|
hasSdCard?: boolean;
|
||
|
|
/** Has smart detect */
|
||
|
|
hasSmartDetect?: boolean;
|
||
|
|
/** Has speaker */
|
||
|
|
hasSpeaker?: boolean;
|
||
|
|
/** Has WiFi */
|
||
|
|
hasWifi?: boolean;
|
||
|
|
/** Video modes */
|
||
|
|
videoModes?: string[];
|
||
|
|
/** Privacy mask capability */
|
||
|
|
privacyMaskCapability?: {
|
||
|
|
maxMasks?: number;
|
||
|
|
rectangleOnly?: boolean;
|
||
|
|
};
|
||
|
|
/** Smart detect types */
|
||
|
|
smartDetectTypes?: string[];
|
||
|
|
/** Smart detect audio types */
|
||
|
|
smartDetectAudioTypes?: string[];
|
||
|
|
/** Motion algorithms */
|
||
|
|
motionAlgorithms?: string[];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Camera stats
|
||
|
|
*/
|
||
|
|
export interface IProtectCameraStats {
|
||
|
|
/** RX bytes */
|
||
|
|
rxBytes?: number;
|
||
|
|
/** TX bytes */
|
||
|
|
txBytes?: number;
|
||
|
|
/** WiFi quality */
|
||
|
|
wifiQuality?: number;
|
||
|
|
/** WiFi strength */
|
||
|
|
wifiStrength?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect user
|
||
|
|
*/
|
||
|
|
export interface IProtectUser {
|
||
|
|
/** User ID */
|
||
|
|
id: string;
|
||
|
|
/** Is owner */
|
||
|
|
isOwner?: boolean;
|
||
|
|
/** Name */
|
||
|
|
name?: string;
|
||
|
|
/** Email */
|
||
|
|
email?: string;
|
||
|
|
/** Local username */
|
||
|
|
localUsername?: string;
|
||
|
|
/** Has accepted invite */
|
||
|
|
hasAcceptedInvite?: boolean;
|
||
|
|
/** All permissions */
|
||
|
|
allPermissions?: string[];
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect group
|
||
|
|
*/
|
||
|
|
export interface IProtectGroup {
|
||
|
|
/** Group ID */
|
||
|
|
id: string;
|
||
|
|
/** Group name */
|
||
|
|
name: string;
|
||
|
|
/** Group type */
|
||
|
|
type?: string;
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect liveview
|
||
|
|
*/
|
||
|
|
export interface IProtectLiveview {
|
||
|
|
/** Liveview ID */
|
||
|
|
id: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Is default */
|
||
|
|
isDefault?: boolean;
|
||
|
|
/** Layout */
|
||
|
|
layout?: number;
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
/** Slots */
|
||
|
|
slots?: IProtectLiveviewSlot[];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect liveview slot
|
||
|
|
*/
|
||
|
|
export interface IProtectLiveviewSlot {
|
||
|
|
/** Camera IDs */
|
||
|
|
cameras?: string[];
|
||
|
|
/** Cycle mode */
|
||
|
|
cycleMode?: string;
|
||
|
|
/** Cycle interval */
|
||
|
|
cycleInterval?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect viewer
|
||
|
|
*/
|
||
|
|
export interface IProtectViewer {
|
||
|
|
/** Viewer ID */
|
||
|
|
id: string;
|
||
|
|
/** Name */
|
||
|
|
name?: string;
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect light
|
||
|
|
*/
|
||
|
|
export interface IProtectLight {
|
||
|
|
/** Light ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC */
|
||
|
|
mac: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Type */
|
||
|
|
type: string;
|
||
|
|
/** State */
|
||
|
|
state: string;
|
||
|
|
/** Is light on */
|
||
|
|
isLightOn?: boolean;
|
||
|
|
/** Light device settings */
|
||
|
|
lightDeviceSettings?: {
|
||
|
|
ledLevel?: number;
|
||
|
|
luxSensitivity?: string;
|
||
|
|
pirDuration?: number;
|
||
|
|
pirSensitivity?: number;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect bridge
|
||
|
|
*/
|
||
|
|
export interface IProtectBridge {
|
||
|
|
/** Bridge ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC */
|
||
|
|
mac: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Type */
|
||
|
|
type: string;
|
||
|
|
/** State */
|
||
|
|
state: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect sensor
|
||
|
|
*/
|
||
|
|
export interface IProtectSensor {
|
||
|
|
/** Sensor ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC */
|
||
|
|
mac: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Type */
|
||
|
|
type: string;
|
||
|
|
/** State */
|
||
|
|
state: string;
|
||
|
|
/** Battery status */
|
||
|
|
batteryStatus?: {
|
||
|
|
percentage?: number;
|
||
|
|
isLow?: boolean;
|
||
|
|
};
|
||
|
|
/** Mount type */
|
||
|
|
mountType?: string;
|
||
|
|
/** Is motion detected */
|
||
|
|
isMotionDetected?: boolean;
|
||
|
|
/** Is opened */
|
||
|
|
isOpened?: boolean;
|
||
|
|
/** Humidity */
|
||
|
|
humidity?: number;
|
||
|
|
/** Temperature */
|
||
|
|
temperature?: number;
|
||
|
|
/** Light */
|
||
|
|
light?: number;
|
||
|
|
/** Alarm triggered type */
|
||
|
|
alarmTriggeredType?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect doorbell (extends camera)
|
||
|
|
*/
|
||
|
|
export interface IProtectDoorbell extends IProtectCamera {
|
||
|
|
/** LCD message */
|
||
|
|
lcdMessage?: {
|
||
|
|
text?: string;
|
||
|
|
resetAt?: number;
|
||
|
|
type?: string;
|
||
|
|
};
|
||
|
|
/** Chime duration */
|
||
|
|
chimeDuration?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect chime
|
||
|
|
*/
|
||
|
|
export interface IProtectChime {
|
||
|
|
/** Chime ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC */
|
||
|
|
mac: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Type */
|
||
|
|
type: string;
|
||
|
|
/** State */
|
||
|
|
state: string;
|
||
|
|
/** Is paired with doorbell */
|
||
|
|
isPaired?: boolean;
|
||
|
|
/** Volume */
|
||
|
|
volume?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Protect NVR info
|
||
|
|
*/
|
||
|
|
export interface IProtectNvr {
|
||
|
|
/** NVR ID */
|
||
|
|
id: string;
|
||
|
|
/** MAC */
|
||
|
|
mac: string;
|
||
|
|
/** Host */
|
||
|
|
host: string;
|
||
|
|
/** Name */
|
||
|
|
name: string;
|
||
|
|
/** Type */
|
||
|
|
type: string;
|
||
|
|
/** Is connected to cloud */
|
||
|
|
isConnectedToCloud?: boolean;
|
||
|
|
/** Firmware version */
|
||
|
|
firmwareVersion?: string;
|
||
|
|
/** Hardware */
|
||
|
|
hardware?: {
|
||
|
|
shortname?: string;
|
||
|
|
name?: string;
|
||
|
|
};
|
||
|
|
/** Uptime */
|
||
|
|
uptime?: number;
|
||
|
|
/** Last seen */
|
||
|
|
lastSeen?: number;
|
||
|
|
/** Is recording disabled */
|
||
|
|
isRecordingDisabled?: boolean;
|
||
|
|
/** Is recording motion only */
|
||
|
|
isRecordingMotionOnly?: boolean;
|
||
|
|
/** Storage info */
|
||
|
|
storageInfo?: {
|
||
|
|
totalSize?: number;
|
||
|
|
totalSpaceUsed?: number;
|
||
|
|
devices?: Array<{
|
||
|
|
model?: string;
|
||
|
|
size?: number;
|
||
|
|
healthy?: boolean;
|
||
|
|
}>;
|
||
|
|
};
|
||
|
|
/** Timezone */
|
||
|
|
timezone?: string;
|
||
|
|
/** Version */
|
||
|
|
version?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Auth response from Protect
|
||
|
|
*/
|
||
|
|
export interface IProtectAuthResponse {
|
||
|
|
/** CSRF token in response */
|
||
|
|
csrfToken?: string;
|
||
|
|
/** User info */
|
||
|
|
user?: IProtectUser;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Motion event from Protect
|
||
|
|
*/
|
||
|
|
export interface IProtectMotionEvent {
|
||
|
|
/** Event ID */
|
||
|
|
id: string;
|
||
|
|
/** Event type */
|
||
|
|
type: 'motion' | 'ring' | 'smartDetectZone' | 'smartAudioDetect';
|
||
|
|
/** Start timestamp */
|
||
|
|
start: number;
|
||
|
|
/** End timestamp */
|
||
|
|
end?: number;
|
||
|
|
/** Score (confidence) */
|
||
|
|
score?: number;
|
||
|
|
/** Smart detect types */
|
||
|
|
smartDetectTypes?: string[];
|
||
|
|
/** Smart detect events */
|
||
|
|
smartDetectEvents?: string[];
|
||
|
|
/** Camera ID */
|
||
|
|
camera?: string;
|
||
|
|
/** Partition (for storage) */
|
||
|
|
partition?: string;
|
||
|
|
/** Model key */
|
||
|
|
modelKey?: string;
|
||
|
|
/** Thumbnail ID */
|
||
|
|
thumbnail?: string;
|
||
|
|
/** Has heatmap */
|
||
|
|
heatmap?: string;
|
||
|
|
}
|