@koush/ring-client-api
Version:
Unofficial API for Ring doorbells, cameras, security alarm system and smart lighting
123 lines (122 loc) • 6.08 kB
TypeScript
/// <reference types="node" />
import { ActiveDing, CameraData, CameraDeviceSettingsData, CameraEventOptions, CameraEventResponse, CameraHealth, HistoryOptions, PeriodicFootageResponse, VideoSearchResponse } from './ring-types';
import { RingRestClient } from './rest-client';
import { BehaviorSubject, Subject } from 'rxjs';
import { SrtpOptions } from '@homebridge/camera-utils';
import { DeepPartial } from './util';
import { FfmpegOptions, SipSession } from './sip-session';
import { SipOptions } from './sip-call';
import { Subscribed } from './subscribed';
import { LiveCall } from './live-call';
export declare function getBatteryLevel(data: Pick<CameraData, 'battery_life' | 'battery_life_2'>): number | null;
export declare function getSearchQueryString(options: CameraEventOptions | (HistoryOptions & {
accountId: string;
})): string;
export declare class RingCamera extends Subscribed {
private initialData;
isDoorbot: boolean;
private restClient;
private avoidSnapshotBatteryDrain;
private treatKnockAsDing;
id: number;
deviceType: import("./ring-types").RingCameraKind;
model: string;
onData: BehaviorSubject<CameraData>;
hasLight: boolean;
hasSiren: boolean;
onRequestUpdate: Subject<unknown>;
onRequestActiveDings: Subject<unknown>;
onNewDing: Subject<ActiveDing>;
onActiveDings: BehaviorSubject<ActiveDing[]>;
onDoorbellPressed: import("rxjs").Observable<ActiveDing>;
onMotionDetected: import("rxjs").Observable<boolean>;
onMotionStarted: import("rxjs").Observable<null>;
onBatteryLevel: import("rxjs").Observable<number | null>;
onInHomeDoorbellStatus: import("rxjs").Observable<boolean>;
constructor(initialData: CameraData, isDoorbot: boolean, restClient: RingRestClient, avoidSnapshotBatteryDrain: boolean, treatKnockAsDing: boolean);
updateData(update: CameraData): void;
requestUpdate(): void;
get data(): CameraData;
get name(): string;
get activeDings(): ActiveDing[];
get batteryLevel(): number | null;
get hasBattery(): boolean;
get hasLowBattery(): boolean;
get isCharging(): boolean;
get operatingOnBattery(): boolean;
get isOffline(): boolean;
get hasInHomeDoorbell(): boolean;
doorbotUrl(path?: string): string;
deviceUrl(path?: string): string;
setLight(on: boolean): Promise<boolean>;
setSiren(on: boolean): Promise<boolean>;
setSettings(settings: DeepPartial<CameraData['settings']>): Promise<void>;
setDeviceSettings(settings: DeepPartial<CameraDeviceSettingsData>): Promise<CameraDeviceSettingsData & import("./rest-client").ExtendedResponse>;
getDeviceSettings(): Promise<CameraDeviceSettingsData & import("./rest-client").ExtendedResponse>;
setInHomeDoorbell(enable: boolean): Promise<boolean>;
getHealth(): Promise<CameraHealth>;
startLiveCallNegotiation(): Promise<string>;
startLiveCall(): Promise<LiveCall>;
startVideoOnDemand(): Promise<("" | ActiveDing) & import("./rest-client").ExtendedResponse>;
private pollForActiveDing;
private expiredDingIds;
getSipConnectionDetails(): Promise<ActiveDing>;
private removeDingById;
processActiveDing(ding: ActiveDing): void;
getEvents(options?: CameraEventOptions): Promise<CameraEventResponse & import("./rest-client").ExtendedResponse>;
videoSearch({ dateFrom, dateTo, order }?: {
dateFrom: number;
dateTo: number;
order?: string | undefined;
}): Promise<VideoSearchResponse & import("./rest-client").ExtendedResponse>;
getPeriodicalFootage({ startAtMs, endAtMs }?: {
startAtMs: number;
endAtMs: number;
}): Promise<PeriodicFootageResponse & import("./rest-client").ExtendedResponse>;
getRecordingUrl(dingIdStr: string, { transcoded }?: {
transcoded?: boolean | undefined;
}): Promise<string>;
private isTimestampInLifeTime;
get snapshotsAreBlocked(): boolean;
get snapshotLifeTime(): number;
private lastSnapshotTimestamp;
private lastSnapshotTimestampLocal;
private lastSnapshotPromise?;
get currentTimestampAge(): number;
get hasSnapshotWithinLifetime(): boolean;
private checkIfSnapshotsAreBlocked;
private shouldUseExistingSnapshotPromise;
private fetchingSnapshot;
getSnapshot(): Promise<Buffer>;
getNextSnapshot({ afterMs, maxWaitMs, force, }: {
afterMs?: number;
maxWaitMs?: number;
force?: boolean;
}): Promise<Buffer & import("./rest-client").ExtendedResponse>;
getSipOptions(): Promise<SipOptions>;
getUpdatedSipOptions(expiredDingId: string): Promise<SipOptions>;
createSipSession(options?: {
audio?: SrtpOptions;
video?: SrtpOptions;
skipFfmpegCheck?: boolean;
}): Promise<SipSession>;
recordToFile(outputPath: string, duration?: number): Promise<void>;
streamVideo(ffmpegOptions: FfmpegOptions): Promise<SipSession>;
/**
* Exchange an Offer SDP for an Answer SDP. Unknown if this endpoint supports trickle with
* the same session UUID. The Answer SDP advertises trickle. Invalid SDP will result in error
* 400. Calling this too often will result in what seems to be a soft lockout for 5 minutes,
* resulting in error 500s.
* @param session_uuid A session UUID that can be later used to end the WebRTC session.
* Unknown if stopping the session is actually necessary since WebRTC knows the peer connection state.
* @param sdp Offer SDP. audio channel must be set to sendrecv.
* @returns Answer SDP.
*/
startWebRtcSession(session_uuid: string, sdp: string): Promise<string>;
endWebRtcSession(session_uuid: string): Promise<string>;
subscribeToDingEvents(): Promise<void & import("./rest-client").ExtendedResponse>;
unsubscribeFromDingEvents(): Promise<void & import("./rest-client").ExtendedResponse>;
subscribeToMotionEvents(): Promise<void & import("./rest-client").ExtendedResponse>;
unsubscribeFromMotionEvents(): Promise<void & import("./rest-client").ExtendedResponse>;
disconnect(): void;
}