homebridge-eufy-security 4.4.2-beta.2 → 4.4.2-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/FUNDING.yml +1 -0
- package/README.md +14 -17
- package/dist/accessories/AutoSyncStationAccessory.js +26 -30
- package/dist/accessories/AutoSyncStationAccessory.js.map +1 -1
- package/dist/accessories/BaseAccessory.js +33 -46
- package/dist/accessories/BaseAccessory.js.map +1 -1
- package/dist/accessories/CameraAccessory.js +92 -167
- package/dist/accessories/CameraAccessory.js.map +1 -1
- package/dist/accessories/Device.js +11 -15
- package/dist/accessories/Device.js.map +1 -1
- package/dist/accessories/EntrySensorAccessory.js +7 -12
- package/dist/accessories/EntrySensorAccessory.js.map +1 -1
- package/dist/accessories/LockAccessory.js +20 -24
- package/dist/accessories/LockAccessory.js.map +1 -1
- package/dist/accessories/MotionSensorAccessory.js +7 -12
- package/dist/accessories/MotionSensorAccessory.js.map +1 -1
- package/dist/accessories/StationAccessory.js +40 -45
- package/dist/accessories/StationAccessory.js.map +1 -1
- package/dist/config.js +1 -4
- package/dist/config.js.map +1 -1
- package/dist/controller/LocalLivestreamManager.js +85 -89
- package/dist/controller/LocalLivestreamManager.js.map +1 -1
- package/dist/controller/recordingDelegate.js +116 -108
- package/dist/controller/recordingDelegate.js.map +1 -1
- package/dist/controller/snapshotDelegate.js +379 -0
- package/dist/controller/snapshotDelegate.js.map +1 -0
- package/dist/controller/streamingDelegate.js +202 -207
- package/dist/controller/streamingDelegate.js.map +1 -1
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/dist/interfaces.js +1 -2
- package/dist/interfaces.js.map +1 -1
- package/dist/platform.js +145 -165
- package/dist/platform.js.map +1 -1
- package/dist/settings.js +26 -19
- package/dist/settings.js.map +1 -1
- package/dist/utils/Talkback.js +9 -13
- package/dist/utils/Talkback.js.map +1 -1
- package/dist/utils/configTypes.js +12 -7
- package/dist/utils/configTypes.js.map +1 -1
- package/dist/utils/ffmpeg.js +44 -52
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/interfaces.js +1 -5
- package/dist/utils/interfaces.js.map +1 -1
- package/dist/utils/utils.js +32 -134
- package/dist/utils/utils.js.map +1 -1
- package/dist/version.js +1 -4
- package/dist/version.js.map +1 -1
- package/eslint.config.mjs +25 -47
- package/homebridge-eufy-security.png +0 -0
- package/homebridge-ui/public/app.js +221 -0
- package/homebridge-ui/public/assets/devices/eufycam3pro_large.png +0 -0
- package/homebridge-ui/public/assets/devices/homebase3_large.png +0 -0
- package/homebridge-ui/public/assets/devices/homebasemini_large.jpg +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamC210_large.png +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamC220_large.png +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamE30_large.png +0 -0
- package/homebridge-ui/public/assets/devices/solocamc35_large.png +0 -0
- package/homebridge-ui/public/assets/devices/solocame30_large.png +0 -0
- package/homebridge-ui/public/components/device-card.js +141 -0
- package/homebridge-ui/public/components/guard-modes.js +88 -0
- package/homebridge-ui/public/components/number-input.js +121 -0
- package/homebridge-ui/public/components/select.js +73 -0
- package/homebridge-ui/public/components/toggle.js +68 -0
- package/homebridge-ui/public/index.html +24 -14
- package/homebridge-ui/public/services/api.js +129 -0
- package/homebridge-ui/public/services/config.js +144 -0
- package/homebridge-ui/public/style.css +705 -0
- package/homebridge-ui/public/utils/countries.js +73 -0
- package/homebridge-ui/public/utils/device-images.js +69 -0
- package/homebridge-ui/public/utils/helpers.js +47 -0
- package/homebridge-ui/public/views/dashboard.js +211 -0
- package/homebridge-ui/public/views/device-detail.js +631 -0
- package/homebridge-ui/public/views/login.js +625 -0
- package/homebridge-ui/public/views/settings.js +389 -0
- package/homebridge-ui/public/views/unsupported-detail.js +216 -0
- package/homebridge-ui/server.js +567 -450
- package/package.json +19 -59
- package/dist/accessories/AutoSyncStationAccessory.d.ts +0 -42
- package/dist/accessories/AutoSyncStationAccessory.d.ts.map +0 -1
- package/dist/accessories/BaseAccessory.d.ts +0 -56
- package/dist/accessories/BaseAccessory.d.ts.map +0 -1
- package/dist/accessories/CameraAccessory.d.ts +0 -84
- package/dist/accessories/CameraAccessory.d.ts.map +0 -1
- package/dist/accessories/Device.d.ts +0 -19
- package/dist/accessories/Device.d.ts.map +0 -1
- package/dist/accessories/EntrySensorAccessory.d.ts +0 -25
- package/dist/accessories/EntrySensorAccessory.d.ts.map +0 -1
- package/dist/accessories/LockAccessory.d.ts +0 -45
- package/dist/accessories/LockAccessory.d.ts.map +0 -1
- package/dist/accessories/MotionSensorAccessory.d.ts +0 -25
- package/dist/accessories/MotionSensorAccessory.d.ts.map +0 -1
- package/dist/accessories/StationAccessory.d.ts +0 -86
- package/dist/accessories/StationAccessory.d.ts.map +0 -1
- package/dist/config.d.ts +0 -31
- package/dist/config.d.ts.map +0 -1
- package/dist/controller/LocalLivestreamManager.d.ts +0 -31
- package/dist/controller/LocalLivestreamManager.d.ts.map +0 -1
- package/dist/controller/SnapshotManager.d.ts +0 -64
- package/dist/controller/SnapshotManager.d.ts.map +0 -1
- package/dist/controller/SnapshotManager.js +0 -434
- package/dist/controller/SnapshotManager.js.map +0 -1
- package/dist/controller/recordingDelegate.d.ts +0 -27
- package/dist/controller/recordingDelegate.d.ts.map +0 -1
- package/dist/controller/streamingDelegate.d.ts +0 -52
- package/dist/controller/streamingDelegate.d.ts.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/interfaces.d.ts +0 -15
- package/dist/interfaces.d.ts.map +0 -1
- package/dist/platform.d.ts +0 -94
- package/dist/platform.d.ts.map +0 -1
- package/dist/settings.d.ts +0 -23
- package/dist/settings.d.ts.map +0 -1
- package/dist/utils/Talkback.d.ts +0 -21
- package/dist/utils/Talkback.d.ts.map +0 -1
- package/dist/utils/configTypes.d.ts +0 -68
- package/dist/utils/configTypes.d.ts.map +0 -1
- package/dist/utils/ffmpeg.d.ts +0 -111
- package/dist/utils/ffmpeg.d.ts.map +0 -1
- package/dist/utils/interfaces.d.ts +0 -8
- package/dist/utils/interfaces.d.ts.map +0 -1
- package/dist/utils/utils.d.ts +0 -35
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/homebridge-ui/configui/app/util/types.d.ts +0 -65
- package/homebridge-ui/configui/app/util/types.d.ts.map +0 -1
- package/homebridge-ui/configui/app/util/types.js +0 -18
- package/homebridge-ui/configui/app/util/types.js.map +0 -1
- package/homebridge-ui/public/3rdpartylicenses.txt +0 -561
- package/homebridge-ui/public/assets/devices/homebase2_large.jpg +0 -0
- package/homebridge-ui/public/assets/devices/homebase3_large.jpg +0 -0
- package/homebridge-ui/public/assets/images/homebridge-eufy-security.png +0 -0
- package/homebridge-ui/public/favicon.ico +0 -0
- package/homebridge-ui/public/main.f6423287e0411c87.js +0 -1
- package/homebridge-ui/public/polyfills.efa2f09ba3e49167.js +0 -1
- package/homebridge-ui/public/runtime.ccde331d62c423b3.js +0 -1
- package/homebridge-ui/public/styles.13e635bf7a488639.css +0 -5
- package/homebridge-ui/server.d.ts +0 -2
- package/homebridge-ui/server.d.ts.map +0 -1
- package/homebridge-ui/server.js.map +0 -1
- package/homebridge-ui/version.d.ts +0 -2
- package/homebridge-ui/version.d.ts.map +0 -1
- package/homebridge-ui/version.js +0 -5
- package/homebridge-ui/version.js.map +0 -1
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'stream';
|
|
2
|
-
import { LocalLivestreamManager } from './LocalLivestreamManager';
|
|
3
|
-
import { SnapshotRequest } from 'homebridge';
|
|
4
|
-
import { CameraAccessory } from '../accessories/CameraAccessory';
|
|
5
|
-
import { ILogObj, Logger } from 'tslog';
|
|
6
|
-
/**
|
|
7
|
-
* possible performance settings:
|
|
8
|
-
* 1. snapshots as current as possible (weak homebridge performance)
|
|
9
|
-
* - always get a new image from cloud or cam
|
|
10
|
-
* 2. balanced
|
|
11
|
-
* - start snapshot refresh but return snapshot as fast as possible
|
|
12
|
-
* if request takes too long old snapshot will be returned
|
|
13
|
-
* 3. get an old snapshot immediately
|
|
14
|
-
* - wait on cloud snapshot with new events
|
|
15
|
-
*
|
|
16
|
-
* extra options:
|
|
17
|
-
* - force refresh snapshots with interval
|
|
18
|
-
* - force immediate snapshot-reject when ringing
|
|
19
|
-
*
|
|
20
|
-
* Drawbacks: elapsed time in homekit might be wrong
|
|
21
|
-
*/
|
|
22
|
-
export declare class SnapshotManager extends EventEmitter {
|
|
23
|
-
private livestreamManager;
|
|
24
|
-
private readonly platform;
|
|
25
|
-
private readonly device;
|
|
26
|
-
private cameraConfig;
|
|
27
|
-
private readonly videoProcessor;
|
|
28
|
-
private currentSnapshot?;
|
|
29
|
-
private blackSnapshot?;
|
|
30
|
-
private cameraOffline?;
|
|
31
|
-
private cameraDisabled?;
|
|
32
|
-
private unavailableSnapshot?;
|
|
33
|
-
private refreshProcessRunning;
|
|
34
|
-
private lastEvent;
|
|
35
|
-
private lastRingEvent;
|
|
36
|
-
readonly log: Logger<ILogObj>;
|
|
37
|
-
private snapshotRefreshTimer?;
|
|
38
|
-
constructor(camera: CameraAccessory, livestreamManager: LocalLivestreamManager);
|
|
39
|
-
private onRingEvent;
|
|
40
|
-
private onEvent;
|
|
41
|
-
private storeSnapshotForCache;
|
|
42
|
-
getSnapshotBufferResized(request: SnapshotRequest): Promise<Buffer>;
|
|
43
|
-
private getSnapshotBuffer;
|
|
44
|
-
/**
|
|
45
|
-
* Retrieves the newest snapshot buffer asynchronously.
|
|
46
|
-
* @returns A Promise resolving to a Buffer containing the newest snapshot image.
|
|
47
|
-
*/
|
|
48
|
-
private getSnapshotFromStream;
|
|
49
|
-
/**
|
|
50
|
-
* Retrieves the newest cloud snapshot's image data.
|
|
51
|
-
* @returns Buffer The image data as a Buffer.
|
|
52
|
-
* @throws Error if there's no currentSnapshot available and no fallback image.
|
|
53
|
-
*/
|
|
54
|
-
private getSnapshotFromCache;
|
|
55
|
-
private getBalancedSnapshot;
|
|
56
|
-
private automaticSnapshotRefresh;
|
|
57
|
-
private storeImage;
|
|
58
|
-
private onPropertyValueChanged;
|
|
59
|
-
private fetchCurrentCameraSnapshot;
|
|
60
|
-
private getCurrentCameraSnapshot;
|
|
61
|
-
private getCameraSource;
|
|
62
|
-
private resizeSnapshot;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=SnapshotManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotManager.d.ts","sourceRoot":"","sources":["../../src/plugin/controller/SnapshotManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAY,MAAM,QAAQ,CAAC;AAOhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAoBxC;;;;;;;;;;;;;;;GAeG;AAEH,qBAAa,eAAgB,SAAQ,YAAY;IAwB7C,OAAO,CAAC,iBAAiB;IAtB3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAK;IAE1B,SAAgB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;gBAG5C,MAAM,EAAE,eAAe,EACf,iBAAiB,EAAE,sBAAsB;IAiGnD,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,qBAAqB;IAIhB,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;YAIlE,iBAAiB;IA0D/B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;YAiBd,mBAAmB;IAUjC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,UAAU;YAUJ,sBAAsB;YAWtB,0BAA0B;YAwB1B,wBAAwB;YAqCxB,eAAe;YAyBf,cAAc;CAW7B"}
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.SnapshotManager = void 0;
|
|
40
|
-
const stream_1 = require("stream");
|
|
41
|
-
const eufy_security_client_1 = require("eufy-security-client");
|
|
42
|
-
const ffmpeg_for_homebridge_1 = __importDefault(require("ffmpeg-for-homebridge"));
|
|
43
|
-
const utils_1 = require("../utils/utils");
|
|
44
|
-
const ffmpeg_1 = require("../utils/ffmpeg");
|
|
45
|
-
const fs = __importStar(require("fs"));
|
|
46
|
-
const CameraOffline = require.resolve('../../media/camera-offline.png');
|
|
47
|
-
const CameraDisabled = require.resolve('../../media/camera-disabled.png');
|
|
48
|
-
const SnapshotBlackPath = require.resolve('../../media/Snapshot-black.png');
|
|
49
|
-
const SnapshotUnavailable = require.resolve('../../media/Snapshot-Unavailable.png');
|
|
50
|
-
let MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN = 1; // should be incremented by 1 for every device
|
|
51
|
-
/**
|
|
52
|
-
* possible performance settings:
|
|
53
|
-
* 1. snapshots as current as possible (weak homebridge performance)
|
|
54
|
-
* - always get a new image from cloud or cam
|
|
55
|
-
* 2. balanced
|
|
56
|
-
* - start snapshot refresh but return snapshot as fast as possible
|
|
57
|
-
* if request takes too long old snapshot will be returned
|
|
58
|
-
* 3. get an old snapshot immediately
|
|
59
|
-
* - wait on cloud snapshot with new events
|
|
60
|
-
*
|
|
61
|
-
* extra options:
|
|
62
|
-
* - force refresh snapshots with interval
|
|
63
|
-
* - force immediate snapshot-reject when ringing
|
|
64
|
-
*
|
|
65
|
-
* Drawbacks: elapsed time in homekit might be wrong
|
|
66
|
-
*/
|
|
67
|
-
class SnapshotManager extends stream_1.EventEmitter {
|
|
68
|
-
livestreamManager;
|
|
69
|
-
platform;
|
|
70
|
-
device;
|
|
71
|
-
cameraConfig;
|
|
72
|
-
videoProcessor = ffmpeg_for_homebridge_1.default || 'ffmpeg';
|
|
73
|
-
currentSnapshot;
|
|
74
|
-
blackSnapshot;
|
|
75
|
-
cameraOffline;
|
|
76
|
-
cameraDisabled;
|
|
77
|
-
unavailableSnapshot;
|
|
78
|
-
refreshProcessRunning = false;
|
|
79
|
-
lastEvent = 0;
|
|
80
|
-
lastRingEvent = 0;
|
|
81
|
-
log;
|
|
82
|
-
snapshotRefreshTimer;
|
|
83
|
-
constructor(camera, livestreamManager) {
|
|
84
|
-
super();
|
|
85
|
-
this.livestreamManager = livestreamManager;
|
|
86
|
-
this.platform = camera.platform;
|
|
87
|
-
this.device = camera.device;
|
|
88
|
-
this.cameraConfig = camera.cameraConfig;
|
|
89
|
-
this.log = camera.log;
|
|
90
|
-
this.device.on('property changed', this.onPropertyValueChanged.bind(this));
|
|
91
|
-
const eventTypes = [
|
|
92
|
-
'motion detected',
|
|
93
|
-
'person detected',
|
|
94
|
-
'pet detected',
|
|
95
|
-
'sound detected',
|
|
96
|
-
'crying detected',
|
|
97
|
-
'vehicle detected',
|
|
98
|
-
'dog detected',
|
|
99
|
-
'dog lick detected',
|
|
100
|
-
'dog poop detected',
|
|
101
|
-
'stranger person detected',
|
|
102
|
-
];
|
|
103
|
-
eventTypes.forEach(eventType => {
|
|
104
|
-
this.device.on(eventType, this.onEvent.bind(this));
|
|
105
|
-
});
|
|
106
|
-
this.device.on('rings', this.onRingEvent.bind(this));
|
|
107
|
-
if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
|
|
108
|
-
if (this.cameraConfig.refreshSnapshotIntervalMinutes < 5) {
|
|
109
|
-
this.log.warn('The interval to automatically refresh snapshots is set too low. Minimum is one minute.');
|
|
110
|
-
this.cameraConfig.refreshSnapshotIntervalMinutes = 5;
|
|
111
|
-
}
|
|
112
|
-
this.log.info('Setting up automatic snapshot refresh every ' + this.cameraConfig.refreshSnapshotIntervalMinutes + ' minutes. This may decrease battery life dramatically. The refresh process should begin in ' + MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN + ' minutes.');
|
|
113
|
-
setTimeout(() => {
|
|
114
|
-
this.automaticSnapshotRefresh();
|
|
115
|
-
}, MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN * 60 * 1000);
|
|
116
|
-
MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN++;
|
|
117
|
-
}
|
|
118
|
-
if (this.cameraConfig.snapshotHandlingMethod === 1) {
|
|
119
|
-
this.log.info('is set to generate new snapshots on events every time. This might reduce homebridge performance and increase power consumption.');
|
|
120
|
-
if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
|
|
121
|
-
this.log.warn('You have enabled automatic snapshot refreshing. It is recommened not to use this setting with forced snapshot refreshing.');
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else if (this.cameraConfig.snapshotHandlingMethod === 2) {
|
|
125
|
-
this.log.info('is set to balanced snapshot handling.');
|
|
126
|
-
}
|
|
127
|
-
else if (this.cameraConfig.snapshotHandlingMethod === 3) {
|
|
128
|
-
this.log.info('is set to handle snapshots with cloud images. Snapshots might be older than they appear.');
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
this.log.warn('unknown snapshot handling method. SNapshots will not be generated.');
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
this.blackSnapshot = fs.readFileSync(SnapshotBlackPath);
|
|
135
|
-
if (this.cameraConfig.immediateRingNotificationWithoutSnapshot) {
|
|
136
|
-
this.log.info('Empty snapshot will be sent on ring events immediately to speed up homekit notifications.');
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
this.log.error('could not cache black snapshot file for further use: ' + error);
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
this.unavailableSnapshot = fs.readFileSync(SnapshotUnavailable);
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
this.log.error('could not cache SnapshotUnavailable file for further use: ' + error);
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
this.cameraOffline = fs.readFileSync(CameraOffline);
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
this.log.error('could not cache CameraOffline file for further use: ' + error);
|
|
153
|
-
}
|
|
154
|
-
try {
|
|
155
|
-
this.cameraDisabled = fs.readFileSync(CameraDisabled);
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
this.log.error('could not cache CameraDisabled file for further use: ' + error);
|
|
159
|
-
}
|
|
160
|
-
try {
|
|
161
|
-
const picture = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
|
|
162
|
-
if (picture && picture.type) {
|
|
163
|
-
this.storeSnapshotForCache(picture.data, 0);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
throw new Error('No currentSnapshot');
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
this.log.error('could not fetch old snapshot: ' + error);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
onRingEvent(device, state) {
|
|
174
|
-
if (state) {
|
|
175
|
-
this.log.debug('Snapshot handler detected ring event.');
|
|
176
|
-
this.lastRingEvent = Date.now();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
onEvent(device, state) {
|
|
180
|
-
if (state) {
|
|
181
|
-
this.log.debug('Snapshot handler detected event.');
|
|
182
|
-
this.lastEvent = Date.now();
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
storeSnapshotForCache(data, time) {
|
|
186
|
-
this.currentSnapshot = { timestamp: time ??= Date.now(), image: data };
|
|
187
|
-
}
|
|
188
|
-
async getSnapshotBufferResized(request) {
|
|
189
|
-
return await this.resizeSnapshot(await this.getSnapshotBuffer(), request);
|
|
190
|
-
}
|
|
191
|
-
async getSnapshotBuffer() {
|
|
192
|
-
// return a new snapshot if it is recent enough (not more than 15 seconds)
|
|
193
|
-
if (this.currentSnapshot) {
|
|
194
|
-
const diff = Math.abs((Date.now() - this.currentSnapshot.timestamp) / 1000);
|
|
195
|
-
if (diff <= 15) {
|
|
196
|
-
return this.currentSnapshot.image;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// It should never happend since camera is disabled in HK but in case of...
|
|
200
|
-
if (!this.device.isEnabled()) {
|
|
201
|
-
if (this.cameraDisabled) {
|
|
202
|
-
return this.cameraDisabled;
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return Promise.reject('Something wrong with file systems. Looks likes not enought rights!');
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
const diff = (Date.now() - this.lastRingEvent) / 1000;
|
|
209
|
-
if (this.cameraConfig.immediateRingNotificationWithoutSnapshot && diff < 5) {
|
|
210
|
-
this.log.debug('Sending empty snapshot to speed up homekit notification for ring event.');
|
|
211
|
-
if (this.blackSnapshot) {
|
|
212
|
-
return this.blackSnapshot;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
return Promise.reject('Prioritize ring notification over snapshot request. But could not supply empty snapshot.');
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
let snapshot = Buffer.from([]);
|
|
219
|
-
try {
|
|
220
|
-
if (this.cameraConfig.snapshotHandlingMethod === 1) {
|
|
221
|
-
// return a preferablly most recent snapshot every time
|
|
222
|
-
snapshot = await this.getSnapshotFromStream();
|
|
223
|
-
}
|
|
224
|
-
else if (this.cameraConfig.snapshotHandlingMethod === 2) {
|
|
225
|
-
// balanced method
|
|
226
|
-
snapshot = await this.getBalancedSnapshot();
|
|
227
|
-
}
|
|
228
|
-
else if (this.cameraConfig.snapshotHandlingMethod === 3) {
|
|
229
|
-
// fastest method with potentially old snapshots
|
|
230
|
-
snapshot = await this.getSnapshotFromCache();
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
return Promise.reject('No suitable handling method for snapshots defined');
|
|
234
|
-
}
|
|
235
|
-
return snapshot;
|
|
236
|
-
}
|
|
237
|
-
catch {
|
|
238
|
-
try {
|
|
239
|
-
return this.getSnapshotFromCache();
|
|
240
|
-
}
|
|
241
|
-
catch (error) {
|
|
242
|
-
this.log.error(error);
|
|
243
|
-
if (this.unavailableSnapshot) {
|
|
244
|
-
return this.unavailableSnapshot;
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
throw (error);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Retrieves the newest snapshot buffer asynchronously.
|
|
254
|
-
* @returns A Promise resolving to a Buffer containing the newest snapshot image.
|
|
255
|
-
*/
|
|
256
|
-
getSnapshotFromStream() {
|
|
257
|
-
this.log.info(`Begin live streaming to access the most recent snapshot (significant battery drain on the device)`);
|
|
258
|
-
return new Promise((resolve, reject) => {
|
|
259
|
-
// Set a timeout for the snapshot request
|
|
260
|
-
const requestTimeout = setTimeout(() => {
|
|
261
|
-
reject('getSnapshotFromStream timed out');
|
|
262
|
-
}, 4 * 1000);
|
|
263
|
-
// Define a listener for the 'new snapshot' event
|
|
264
|
-
const snapshotListener = () => {
|
|
265
|
-
clearTimeout(requestTimeout); // Clear the timeout if the snapshot is received
|
|
266
|
-
if (this.currentSnapshot) {
|
|
267
|
-
resolve(this.currentSnapshot.image); // Resolve the promise with the snapshot image
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
reject('getSnapshotFromStream error'); // Reject if there's an issue with the snapshot
|
|
271
|
-
}
|
|
272
|
-
};
|
|
273
|
-
// Fetch the current camera snapshot and attach the 'new snapshot' listener
|
|
274
|
-
this.fetchCurrentCameraSnapshot()
|
|
275
|
-
.then(() => {
|
|
276
|
-
this.once('new snapshot', snapshotListener); // Listen for the 'new snapshot' event
|
|
277
|
-
})
|
|
278
|
-
.catch((error) => {
|
|
279
|
-
clearTimeout(requestTimeout); // Clear the timeout if an error occurs during fetching
|
|
280
|
-
reject(error); // Reject the promise with the error
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Retrieves the newest cloud snapshot's image data.
|
|
286
|
-
* @returns Buffer The image data as a Buffer.
|
|
287
|
-
* @throws Error if there's no currentSnapshot available and no fallback image.
|
|
288
|
-
*/
|
|
289
|
-
getSnapshotFromCache() {
|
|
290
|
-
// Check if there's a currentSnapshot available
|
|
291
|
-
if (this.currentSnapshot) {
|
|
292
|
-
// If available, return the image data
|
|
293
|
-
return this.currentSnapshot.image;
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
// If not available, try to use the unavailable snapshot image
|
|
297
|
-
if (this.unavailableSnapshot) {
|
|
298
|
-
this.log.warn('No currentSnapshot available, using fallback unavailable snapshot image');
|
|
299
|
-
return this.unavailableSnapshot;
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
// If fallback image is also not available, throw an error
|
|
303
|
-
throw new Error('No currentSnapshot available');
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
async getBalancedSnapshot() {
|
|
308
|
-
if (this.currentSnapshot) {
|
|
309
|
-
const diff = Math.abs((Date.now() - this.currentSnapshot.timestamp) / 1000);
|
|
310
|
-
if (diff <= 30) {
|
|
311
|
-
return this.currentSnapshot.image;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return this.getSnapshotFromStream();
|
|
315
|
-
}
|
|
316
|
-
automaticSnapshotRefresh() {
|
|
317
|
-
this.log.debug('Automatic snapshot refresh triggered.');
|
|
318
|
-
this.fetchCurrentCameraSnapshot().catch((error) => this.log.warn(error));
|
|
319
|
-
if (this.snapshotRefreshTimer) {
|
|
320
|
-
clearTimeout(this.snapshotRefreshTimer);
|
|
321
|
-
}
|
|
322
|
-
if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
|
|
323
|
-
this.snapshotRefreshTimer = setTimeout(() => {
|
|
324
|
-
this.automaticSnapshotRefresh();
|
|
325
|
-
}, this.cameraConfig.refreshSnapshotIntervalMinutes * 60 * 1000);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
storeImage(file, image) {
|
|
329
|
-
const filePath = `${this.platform.eufyPath}/${file}`;
|
|
330
|
-
try {
|
|
331
|
-
fs.writeFileSync(filePath, image);
|
|
332
|
-
this.log.debug(`Stored Image: ${filePath}`);
|
|
333
|
-
}
|
|
334
|
-
catch (error) {
|
|
335
|
-
this.log.debug(`Error: ${filePath} - ${error}`);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
async onPropertyValueChanged(device, name) {
|
|
339
|
-
if (name === 'picture') {
|
|
340
|
-
const picture = device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
|
|
341
|
-
if (picture && picture.type) {
|
|
342
|
-
this.storeImage(`${device.getSerial()}.${picture.type.ext}`, picture.data);
|
|
343
|
-
this.storeSnapshotForCache(picture.data);
|
|
344
|
-
this.emit('new snapshot');
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
async fetchCurrentCameraSnapshot() {
|
|
349
|
-
if (this.refreshProcessRunning) {
|
|
350
|
-
return Promise.resolve();
|
|
351
|
-
}
|
|
352
|
-
this.refreshProcessRunning = true;
|
|
353
|
-
this.log.debug('Locked refresh process.');
|
|
354
|
-
this.log.debug('Fetching new snapshot from camera.');
|
|
355
|
-
try {
|
|
356
|
-
const snapshotBuffer = await this.getCurrentCameraSnapshot();
|
|
357
|
-
this.refreshProcessRunning = false;
|
|
358
|
-
this.log.debug('Unlocked refresh process.');
|
|
359
|
-
this.log.debug('store new snapshot from camera in memory. Using this for future use.');
|
|
360
|
-
this.storeSnapshotForCache(snapshotBuffer);
|
|
361
|
-
this.emit('new snapshot');
|
|
362
|
-
return Promise.resolve();
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
this.refreshProcessRunning = false;
|
|
366
|
-
this.log.debug('Unlocked refresh process.');
|
|
367
|
-
return Promise.reject(error);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
async getCurrentCameraSnapshot() {
|
|
371
|
-
const source = await this.getCameraSource();
|
|
372
|
-
if (!source) {
|
|
373
|
-
return Promise.reject('No camera source detected.');
|
|
374
|
-
}
|
|
375
|
-
const parameters = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
|
|
376
|
-
if (source.url) {
|
|
377
|
-
parameters.setInputSource(source.url);
|
|
378
|
-
}
|
|
379
|
-
else if (source.stream) {
|
|
380
|
-
await parameters.setInputStream(source.stream);
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
return Promise.reject('No valid camera source detected.');
|
|
384
|
-
}
|
|
385
|
-
if (this.cameraConfig.delayCameraSnapshot) {
|
|
386
|
-
parameters.setDelayedSnapshot();
|
|
387
|
-
}
|
|
388
|
-
try {
|
|
389
|
-
const ffmpeg = new ffmpeg_1.FFmpeg(`[Snapshot Process]`, parameters);
|
|
390
|
-
const buffer = await ffmpeg.getResult();
|
|
391
|
-
this.livestreamManager.stopLocalLiveStream();
|
|
392
|
-
return Promise.resolve(buffer);
|
|
393
|
-
}
|
|
394
|
-
catch (error) {
|
|
395
|
-
this.livestreamManager.stopLocalLiveStream();
|
|
396
|
-
return Promise.reject(error);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
async getCameraSource() {
|
|
400
|
-
if ((0, utils_1.is_rtsp_ready)(this.device, this.cameraConfig)) {
|
|
401
|
-
try {
|
|
402
|
-
const url = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStreamUrl);
|
|
403
|
-
this.log.debug('RTSP URL: ' + url);
|
|
404
|
-
return {
|
|
405
|
-
url: url,
|
|
406
|
-
};
|
|
407
|
-
}
|
|
408
|
-
catch (error) {
|
|
409
|
-
this.log.warn('Could not get snapshot from rtsp stream!', error);
|
|
410
|
-
return null;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
try {
|
|
415
|
-
const streamData = await this.livestreamManager.getLocalLivestream();
|
|
416
|
-
return {
|
|
417
|
-
stream: streamData.videostream,
|
|
418
|
-
};
|
|
419
|
-
}
|
|
420
|
-
catch (error) {
|
|
421
|
-
this.log.warn('Could not get snapshot from livestream!', error);
|
|
422
|
-
return null;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
async resizeSnapshot(snapshot, request) {
|
|
427
|
-
const parameters = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
|
|
428
|
-
parameters.setup(this.cameraConfig, request);
|
|
429
|
-
const ffmpeg = new ffmpeg_1.FFmpeg(`[Snapshot Resize Process]`, parameters);
|
|
430
|
-
return ffmpeg.getResult(snapshot);
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
exports.SnapshotManager = SnapshotManager;
|
|
434
|
-
//# sourceMappingURL=SnapshotManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotManager.js","sourceRoot":"","sources":["../../src/plugin/controller/SnapshotManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Camera } from 'eufy-security-client';
|
|
2
|
-
import { CameraController, CameraRecordingConfiguration, CameraRecordingDelegate, HDSProtocolSpecificErrorReason, PlatformAccessory, RecordingPacket } from 'homebridge';
|
|
3
|
-
import { EufySecurityPlatform } from '../platform';
|
|
4
|
-
import { CameraConfig } from '../utils/configTypes';
|
|
5
|
-
import { LocalLivestreamManager } from './LocalLivestreamManager';
|
|
6
|
-
export declare class RecordingDelegate implements CameraRecordingDelegate {
|
|
7
|
-
private platform;
|
|
8
|
-
private accessory;
|
|
9
|
-
private camera;
|
|
10
|
-
private cameraConfig;
|
|
11
|
-
private localLivestreamManager;
|
|
12
|
-
private configuration?;
|
|
13
|
-
private forceStopTimeout?;
|
|
14
|
-
private closeReason?;
|
|
15
|
-
private handlingStreamingRequest;
|
|
16
|
-
private controller?;
|
|
17
|
-
private session?;
|
|
18
|
-
constructor(platform: EufySecurityPlatform, accessory: PlatformAccessory, camera: Camera, cameraConfig: CameraConfig, localLivestreamManager: LocalLivestreamManager);
|
|
19
|
-
setController(controller: CameraController): void;
|
|
20
|
-
isRecording(): boolean;
|
|
21
|
-
handleRecordingStreamRequest(): AsyncGenerator<RecordingPacket, any, unknown>;
|
|
22
|
-
updateRecordingActive(active: boolean): void;
|
|
23
|
-
updateRecordingConfiguration(configuration: CameraRecordingConfiguration | undefined): void;
|
|
24
|
-
closeRecordingStream(streamId: number, reason: HDSProtocolSpecificErrorReason | undefined): void;
|
|
25
|
-
acknowledgeStream(streamId: any): void;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=recordingDelegate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recordingDelegate.d.ts","sourceRoot":"","sources":["../../src/plugin/controller/recordingDelegate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAIjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,qBAAa,iBAAkB,YAAW,uBAAuB;IAsB7D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAxBhC,OAAO,CAAC,aAAa,CAAC,CAA+B;IAErD,OAAO,CAAC,gBAAgB,CAAC,CAAiB;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,wBAAwB,CAAS;IAEzC,OAAO,CAAC,UAAU,CAAC,CAAmB;IAEtC,OAAO,CAAC,OAAO,CAAC,CASd;gBAGQ,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB;IAKjD,aAAa,CAAC,UAAU,EAAE,gBAAgB;IAI1C,WAAW,IAAI,OAAO;IAIrB,4BAA4B,IAAI,cAAc,CAAC,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC;IA+IrF,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAI5C,4BAA4B,CAAC,aAAa,EAAE,4BAA4B,GAAG,SAAS,GAAG,IAAI;IAI3F,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,GAAG,SAAS,GAAG,IAAI;IA8BhG,iBAAiB,CAAC,QAAQ,KAAA;CAI3B"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { CameraController, CameraStreamingDelegate, PrepareStreamCallback, PrepareStreamRequest, SnapshotRequest, SnapshotRequestCallback, SRTPCryptoSuites, StreamingRequest, StreamRequestCallback } from 'homebridge';
|
|
2
|
-
import { Socket } from 'dgram';
|
|
3
|
-
import { FFmpeg } from '../utils/ffmpeg';
|
|
4
|
-
import { LocalLivestreamManager } from './LocalLivestreamManager';
|
|
5
|
-
import { TalkbackStream } from '../utils/Talkback';
|
|
6
|
-
import { CameraAccessory } from '../accessories/CameraAccessory';
|
|
7
|
-
import { Logger, ILogObj } from 'tslog';
|
|
8
|
-
export type SessionInfo = {
|
|
9
|
-
address: string;
|
|
10
|
-
ipv6: boolean;
|
|
11
|
-
videoPort: number;
|
|
12
|
-
videoReturnPort: number;
|
|
13
|
-
videoCryptoSuite: SRTPCryptoSuites;
|
|
14
|
-
videoSRTP: Buffer;
|
|
15
|
-
videoSSRC: number;
|
|
16
|
-
audioPort: number;
|
|
17
|
-
audioReturnPort: number;
|
|
18
|
-
audioCryptoSuite: SRTPCryptoSuites;
|
|
19
|
-
audioSRTP: Buffer;
|
|
20
|
-
audioSSRC: number;
|
|
21
|
-
};
|
|
22
|
-
type ActiveSession = {
|
|
23
|
-
videoProcess?: FFmpeg;
|
|
24
|
-
audioProcess?: FFmpeg;
|
|
25
|
-
returnProcess?: FFmpeg;
|
|
26
|
-
timeout?: NodeJS.Timeout;
|
|
27
|
-
socket?: Socket;
|
|
28
|
-
talkbackStream?: TalkbackStream;
|
|
29
|
-
};
|
|
30
|
-
export declare class StreamingDelegate implements CameraStreamingDelegate {
|
|
31
|
-
private camera;
|
|
32
|
-
private videoConfig;
|
|
33
|
-
private controller?;
|
|
34
|
-
private platform;
|
|
35
|
-
private device;
|
|
36
|
-
readonly log: Logger<ILogObj>;
|
|
37
|
-
private localLivestreamManager;
|
|
38
|
-
private snapshotManager;
|
|
39
|
-
pendingSessions: Map<string, SessionInfo>;
|
|
40
|
-
ongoingSessions: Map<string, ActiveSession>;
|
|
41
|
-
timeouts: Map<string, NodeJS.Timeout>;
|
|
42
|
-
constructor(camera: CameraAccessory);
|
|
43
|
-
setController(controller: CameraController): void;
|
|
44
|
-
getLivestreamManager(): LocalLivestreamManager;
|
|
45
|
-
handleSnapshotRequest(request: SnapshotRequest, callback: SnapshotRequestCallback): Promise<void>;
|
|
46
|
-
prepareStream(request: PrepareStreamRequest, callback: PrepareStreamCallback): Promise<void>;
|
|
47
|
-
private startStream;
|
|
48
|
-
handleStreamRequest(request: StreamingRequest, callback: StreamRequestCallback): void;
|
|
49
|
-
stopStream(sessionId: string): void;
|
|
50
|
-
}
|
|
51
|
-
export {};
|
|
52
|
-
//# sourceMappingURL=streamingDelegate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamingDelegate.d.ts","sourceRoot":"","sources":["../../src/plugin/controller/streamingDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EAEpB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAEhB,gBAAgB,EAChB,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAgB,MAAM,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAK3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,qBAAa,iBAAkB,YAAW,uBAAuB;IAkB7D,OAAO,CAAC,MAAM;IAhBhB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAS;IAEvB,SAAgB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,eAAe,CAAkB;IAGzC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IACtD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;IACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAa;gBAGxC,MAAM,EAAE,eAAe;IAkB1B,aAAa,CAAC,UAAU,EAAE,gBAAgB;IAI1C,oBAAoB,IAAI,sBAAsB;IAI/C,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjG,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmDpF,WAAW;IAyIzB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IA8B9E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAiD3C"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAMjC;;GAEG;yBACO,KAAK,GAAG;AAAlB,kBAGE"}
|
package/dist/interfaces.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Station, Device } from 'eufy-security-client';
|
|
2
|
-
export interface DeviceIdentifier {
|
|
3
|
-
uniqueId: string;
|
|
4
|
-
displayName: string;
|
|
5
|
-
type: number;
|
|
6
|
-
}
|
|
7
|
-
export interface StationContainer {
|
|
8
|
-
deviceIdentifier: DeviceIdentifier;
|
|
9
|
-
eufyDevice: Station;
|
|
10
|
-
}
|
|
11
|
-
export interface DeviceContainer {
|
|
12
|
-
deviceIdentifier: DeviceIdentifier;
|
|
13
|
-
eufyDevice: Device;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=interfaces.d.ts.map
|
package/dist/interfaces.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/plugin/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACtB"}
|