homebridge-eufy-security 4.4.2-beta.13 → 4.4.2-beta.14
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/dist/controller/SnapshotManager.js +260 -282
- package/dist/controller/SnapshotManager.js.map +1 -1
- package/dist/settings.js +13 -1
- package/dist/settings.js.map +1 -1
- package/dist/utils/configTypes.js +11 -2
- package/dist/utils/configTypes.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -32,22 +32,20 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.SnapshotManager = void 0;
|
|
40
|
-
const
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
41
38
|
const eufy_security_client_1 = require("eufy-security-client");
|
|
42
|
-
const
|
|
43
|
-
const
|
|
39
|
+
const settings_1 = require("../settings");
|
|
40
|
+
const configTypes_1 = require("../utils/configTypes");
|
|
44
41
|
const ffmpeg_1 = require("../utils/ffmpeg");
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
const utils_1 = require("../utils/utils");
|
|
43
|
+
const PLACEHOLDER_PATHS = {
|
|
44
|
+
offline: require.resolve('../../media/camera-offline.png'),
|
|
45
|
+
disabled: require.resolve('../../media/camera-disabled.png'),
|
|
46
|
+
black: require.resolve('../../media/Snapshot-black.png'),
|
|
47
|
+
unavailable: require.resolve('../../media/Snapshot-Unavailable.png'),
|
|
48
|
+
};
|
|
51
49
|
/**
|
|
52
50
|
* possible performance settings:
|
|
53
51
|
* 1. snapshots as current as possible (weak homebridge performance)
|
|
@@ -64,31 +62,36 @@ let MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN = 1; // should be incremented
|
|
|
64
62
|
*
|
|
65
63
|
* Drawbacks: elapsed time in homekit might be wrong
|
|
66
64
|
*/
|
|
67
|
-
class SnapshotManager
|
|
65
|
+
class SnapshotManager {
|
|
68
66
|
livestreamManager;
|
|
69
|
-
|
|
67
|
+
static instanceCount = 0;
|
|
68
|
+
eufyPath;
|
|
70
69
|
device;
|
|
71
70
|
cameraConfig;
|
|
72
|
-
videoProcessor = ffmpeg_for_homebridge_1.default || 'ffmpeg';
|
|
73
71
|
currentSnapshot;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
cameraDisabled;
|
|
77
|
-
unavailableSnapshot;
|
|
78
|
-
refreshProcessRunning = false;
|
|
79
|
-
lastEvent = 0;
|
|
72
|
+
placeholders = new Map();
|
|
73
|
+
pendingFetch;
|
|
80
74
|
lastRingEvent = 0;
|
|
75
|
+
isDeviceOffline = false;
|
|
81
76
|
log;
|
|
82
77
|
snapshotRefreshTimer;
|
|
78
|
+
snapshotRefreshInterval;
|
|
83
79
|
constructor(camera, livestreamManager) {
|
|
84
|
-
super();
|
|
85
80
|
this.livestreamManager = livestreamManager;
|
|
86
|
-
this.
|
|
81
|
+
this.eufyPath = camera.platform.eufyPath;
|
|
87
82
|
this.device = camera.device;
|
|
88
83
|
this.cameraConfig = camera.cameraConfig;
|
|
89
84
|
this.log = camera.log;
|
|
85
|
+
this.setupEventListeners();
|
|
86
|
+
this.setupAutomaticRefresh();
|
|
87
|
+
this.logSnapshotHandlingMethod();
|
|
88
|
+
this.loadPlaceholderImages();
|
|
89
|
+
this.initializeDeviceState();
|
|
90
|
+
this.loadInitialSnapshot();
|
|
91
|
+
}
|
|
92
|
+
setupEventListeners() {
|
|
90
93
|
this.device.on('property changed', this.onPropertyValueChanged.bind(this));
|
|
91
|
-
const
|
|
94
|
+
const detectionEvents = [
|
|
92
95
|
'motion detected',
|
|
93
96
|
'person detected',
|
|
94
97
|
'pet detected',
|
|
@@ -99,88 +102,131 @@ class SnapshotManager extends stream_1.EventEmitter {
|
|
|
99
102
|
'dog lick detected',
|
|
100
103
|
'dog poop detected',
|
|
101
104
|
'stranger person detected',
|
|
105
|
+
'rings',
|
|
102
106
|
];
|
|
103
|
-
|
|
104
|
-
this.device.on(eventType, this.
|
|
107
|
+
detectionEvents.forEach(eventType => {
|
|
108
|
+
this.device.on(eventType, this.onDeviceEvent.bind(this, eventType));
|
|
105
109
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
this.log.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
}
|
|
111
|
+
setupAutomaticRefresh() {
|
|
112
|
+
if (!this.cameraConfig.refreshSnapshotIntervalMinutes) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (this.cameraConfig.refreshSnapshotIntervalMinutes < settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES) {
|
|
116
|
+
this.log.warn(`The interval to automatically refresh snapshots is set too low. Minimum is ${settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES} minutes.`);
|
|
117
|
+
this.cameraConfig.refreshSnapshotIntervalMinutes = settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES;
|
|
118
|
+
}
|
|
119
|
+
const intervalMs = this.cameraConfig.refreshSnapshotIntervalMinutes * 60 * 1000;
|
|
120
|
+
const staggerMs = (++SnapshotManager.instanceCount) * 60 * 1000;
|
|
121
|
+
this.log.info(`Setting up automatic snapshot refresh every ${this.cameraConfig.refreshSnapshotIntervalMinutes}` +
|
|
122
|
+
` minutes. This may decrease battery life dramatically. First refresh in ~${Math.ceil(staggerMs / 60000)} minute(s).`);
|
|
123
|
+
// Stagger first refresh per instance, then repeat at fixed interval
|
|
124
|
+
this.snapshotRefreshTimer = setTimeout(() => {
|
|
125
|
+
this.doAutomaticRefresh();
|
|
126
|
+
this.snapshotRefreshInterval = setInterval(() => this.doAutomaticRefresh(), intervalMs);
|
|
127
|
+
}, staggerMs);
|
|
128
|
+
}
|
|
129
|
+
doAutomaticRefresh() {
|
|
130
|
+
this.log.debug('Automatic snapshot refresh triggered.');
|
|
131
|
+
this.fetchCurrentCameraSnapshot().catch((error) => this.log.warn('Automatic snapshot refresh failed:', error));
|
|
132
|
+
}
|
|
133
|
+
logSnapshotHandlingMethod() {
|
|
134
|
+
const method = this.cameraConfig.snapshotHandlingMethod;
|
|
135
|
+
switch (method) {
|
|
136
|
+
case configTypes_1.SnapshotHandlingMethod.AlwaysFresh:
|
|
137
|
+
this.log.info('is set to generate new snapshots on events every time. This might reduce homebridge performance and increase power consumption.');
|
|
138
|
+
if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
|
|
139
|
+
this.log.warn('You have enabled automatic snapshot refreshing. It is recommended not to use this setting with forced snapshot refreshing.');
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
case configTypes_1.SnapshotHandlingMethod.Balanced:
|
|
143
|
+
this.log.info('is set to balanced snapshot handling.');
|
|
144
|
+
break;
|
|
145
|
+
case configTypes_1.SnapshotHandlingMethod.CloudOnly:
|
|
146
|
+
this.log.info('is set to handle snapshots with cloud images. Snapshots might be older than they appear.');
|
|
147
|
+
break;
|
|
148
|
+
default:
|
|
149
|
+
this.log.warn('unknown snapshot handling method. Snapshots will not be generated.');
|
|
150
|
+
}
|
|
151
|
+
if (this.cameraConfig.immediateRingNotificationWithoutSnapshot) {
|
|
152
|
+
this.log.info('Empty snapshot will be sent on ring events immediately to speed up homekit notifications.');
|
|
117
153
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
154
|
+
}
|
|
155
|
+
loadPlaceholderImages() {
|
|
156
|
+
for (const [key, path] of Object.entries(PLACEHOLDER_PATHS)) {
|
|
157
|
+
try {
|
|
158
|
+
this.placeholders.set(key, fs.readFileSync(path));
|
|
122
159
|
}
|
|
123
|
-
|
|
124
|
-
|
|
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.');
|
|
160
|
+
catch (error) {
|
|
161
|
+
this.log.error(`Could not cache ${key} placeholder for further use: ${error}`);
|
|
137
162
|
}
|
|
138
163
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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);
|
|
164
|
+
}
|
|
165
|
+
getPlaceholder(key) {
|
|
166
|
+
const buf = this.placeholders.get(key);
|
|
167
|
+
if (!buf) {
|
|
168
|
+
throw new Error(`Placeholder image '${key}' is not available.`);
|
|
153
169
|
}
|
|
170
|
+
return buf;
|
|
171
|
+
}
|
|
172
|
+
initializeDeviceState() {
|
|
154
173
|
try {
|
|
155
|
-
|
|
174
|
+
const state = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceState);
|
|
175
|
+
this.isDeviceOffline = (state === 0 || state === 3);
|
|
176
|
+
if (this.isDeviceOffline) {
|
|
177
|
+
this.log.info('Device is currently offline (state: ' + state + ').');
|
|
178
|
+
}
|
|
156
179
|
}
|
|
157
180
|
catch (error) {
|
|
158
|
-
this.log.
|
|
181
|
+
this.log.debug('Could not read initial device state: ' + error);
|
|
159
182
|
}
|
|
183
|
+
}
|
|
184
|
+
loadInitialSnapshot() {
|
|
160
185
|
try {
|
|
161
186
|
const picture = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
|
|
162
187
|
if (picture && picture.type) {
|
|
163
188
|
this.storeSnapshotForCache(picture.data, 0);
|
|
164
|
-
|
|
165
|
-
else {
|
|
166
|
-
throw new Error('No currentSnapshot');
|
|
189
|
+
return;
|
|
167
190
|
}
|
|
168
191
|
}
|
|
169
192
|
catch (error) {
|
|
170
|
-
this.log.
|
|
193
|
+
this.log.debug('Could not fetch snapshot from device property: ' + error);
|
|
171
194
|
}
|
|
195
|
+
// Fallback: try to load a previously cached snapshot from disk
|
|
196
|
+
this.loadSnapshotFromDisk();
|
|
172
197
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
198
|
+
loadSnapshotFromDisk() {
|
|
199
|
+
const serial = this.device.getSerial();
|
|
200
|
+
const extensions = ['jpg', 'png', 'bmp'];
|
|
201
|
+
for (const ext of extensions) {
|
|
202
|
+
const filePath = `${this.eufyPath}/${serial}.${ext}`;
|
|
203
|
+
try {
|
|
204
|
+
if (fs.existsSync(filePath)) {
|
|
205
|
+
const data = fs.readFileSync(filePath);
|
|
206
|
+
if (data.length > 0) {
|
|
207
|
+
const mtime = fs.statSync(filePath).mtimeMs;
|
|
208
|
+
this.storeSnapshotForCache(data, mtime);
|
|
209
|
+
this.log.info(`Loaded cached snapshot from disk: ${filePath}`);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
this.log.debug(`Failed to load snapshot from ${filePath}: ${error}`);
|
|
216
|
+
}
|
|
177
217
|
}
|
|
218
|
+
this.log.warn('No cached snapshot found on disk for device ' + serial);
|
|
178
219
|
}
|
|
179
|
-
|
|
180
|
-
if (state) {
|
|
181
|
-
|
|
182
|
-
|
|
220
|
+
onDeviceEvent(eventType, device, state) {
|
|
221
|
+
if (!state) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
this.log.debug(`Snapshot handler detected event: ${eventType}`);
|
|
225
|
+
if (eventType === 'rings') {
|
|
226
|
+
this.lastRingEvent = Date.now();
|
|
183
227
|
}
|
|
228
|
+
// Pre-fetch a fresh snapshot so it's ready when HomeKit asks
|
|
229
|
+
this.fetchCurrentCameraSnapshot().catch((error) => this.log.debug(`Background snapshot refresh on ${eventType} failed: ${error}`));
|
|
184
230
|
}
|
|
185
231
|
storeSnapshotForCache(data, time) {
|
|
186
232
|
this.currentSnapshot = { timestamp: time ??= Date.now(), image: data };
|
|
@@ -189,245 +235,177 @@ class SnapshotManager extends stream_1.EventEmitter {
|
|
|
189
235
|
return await this.resizeSnapshot(await this.getSnapshotBuffer(), request);
|
|
190
236
|
}
|
|
191
237
|
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
238
|
if (!this.device.isEnabled()) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
239
|
+
this.log.debug('Device is disabled, returning disabled snapshot.');
|
|
240
|
+
return this.getPlaceholder('disabled');
|
|
241
|
+
}
|
|
242
|
+
if (this.isDeviceOffline) {
|
|
243
|
+
this.log.debug('Device is offline, returning offline snapshot.');
|
|
244
|
+
return this.getPlaceholder('offline');
|
|
245
|
+
}
|
|
246
|
+
if (this.isCacheFresh(settings_1.SNAPSHOT_CACHE_FRESH_SECONDS)) {
|
|
247
|
+
return this.currentSnapshot.image;
|
|
207
248
|
}
|
|
208
|
-
const
|
|
209
|
-
if (this.cameraConfig.immediateRingNotificationWithoutSnapshot &&
|
|
249
|
+
const ringAge = (Date.now() - this.lastRingEvent) / 1000;
|
|
250
|
+
if (this.cameraConfig.immediateRingNotificationWithoutSnapshot && ringAge < settings_1.SNAPSHOT_RING_DEBOUNCE_SECONDS) {
|
|
210
251
|
this.log.debug('Sending empty snapshot to speed up homekit notification for ring event.');
|
|
211
|
-
|
|
212
|
-
return this.blackSnapshot;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
return Promise.reject('Prioritize ring notification over snapshot request. But could not supply empty snapshot.');
|
|
216
|
-
}
|
|
252
|
+
return this.getPlaceholder('black');
|
|
217
253
|
}
|
|
218
|
-
|
|
254
|
+
return this.resolveByHandlingMethod();
|
|
255
|
+
}
|
|
256
|
+
async resolveByHandlingMethod() {
|
|
219
257
|
try {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
258
|
+
switch (this.cameraConfig.snapshotHandlingMethod) {
|
|
259
|
+
case configTypes_1.SnapshotHandlingMethod.AlwaysFresh:
|
|
260
|
+
return await this.fetchSnapshotFromStream();
|
|
261
|
+
case configTypes_1.SnapshotHandlingMethod.Balanced:
|
|
262
|
+
if (this.isCacheFresh(settings_1.SNAPSHOT_CACHE_BALANCED_SECONDS)) {
|
|
263
|
+
return this.currentSnapshot.image;
|
|
264
|
+
}
|
|
265
|
+
return await this.fetchSnapshotFromStream();
|
|
266
|
+
case configTypes_1.SnapshotHandlingMethod.CloudOnly:
|
|
267
|
+
return this.getCachedOrPlaceholder();
|
|
268
|
+
default:
|
|
269
|
+
throw new Error('No suitable handling method for snapshots defined');
|
|
223
270
|
}
|
|
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
271
|
}
|
|
237
|
-
catch {
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
this.log.warn('Snapshot retrieval failed, falling back to cache:', err);
|
|
274
|
+
return this.getCachedOrPlaceholder();
|
|
250
275
|
}
|
|
251
276
|
}
|
|
252
277
|
/**
|
|
253
|
-
*
|
|
254
|
-
* @returns A Promise resolving to a Buffer containing the newest snapshot image.
|
|
278
|
+
* Fetches a fresh snapshot from a live stream.
|
|
255
279
|
*/
|
|
256
|
-
|
|
257
|
-
this.log.info(
|
|
258
|
-
|
|
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
|
|
280
|
+
async fetchSnapshotFromStream() {
|
|
281
|
+
this.log.info('Begin live streaming to access the most recent snapshot (significant battery drain on the device)');
|
|
282
|
+
await this.fetchCurrentCameraSnapshot();
|
|
291
283
|
if (this.currentSnapshot) {
|
|
292
|
-
// If available, return the image data
|
|
293
284
|
return this.currentSnapshot.image;
|
|
294
285
|
}
|
|
295
|
-
|
|
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
|
-
}
|
|
286
|
+
throw new Error('Snapshot fetch completed but no snapshot stored');
|
|
306
287
|
}
|
|
307
|
-
|
|
288
|
+
/**
|
|
289
|
+
* Returns cached snapshot or the unavailable placeholder.
|
|
290
|
+
*/
|
|
291
|
+
getCachedOrPlaceholder() {
|
|
308
292
|
if (this.currentSnapshot) {
|
|
309
|
-
|
|
310
|
-
if (diff <= 30) {
|
|
311
|
-
return this.currentSnapshot.image;
|
|
312
|
-
}
|
|
293
|
+
return this.currentSnapshot.image;
|
|
313
294
|
}
|
|
314
|
-
|
|
295
|
+
this.log.warn('No currentSnapshot available, using fallback unavailable snapshot image');
|
|
296
|
+
return this.getPlaceholder('unavailable');
|
|
315
297
|
}
|
|
316
|
-
|
|
317
|
-
this.
|
|
318
|
-
|
|
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
|
-
}
|
|
298
|
+
isCacheFresh(maxAgeSeconds) {
|
|
299
|
+
return !!this.currentSnapshot &&
|
|
300
|
+
(Date.now() - this.currentSnapshot.timestamp) / 1000 <= maxAgeSeconds;
|
|
327
301
|
}
|
|
328
302
|
storeImage(file, image) {
|
|
329
|
-
const filePath = `${this.
|
|
303
|
+
const filePath = `${this.eufyPath}/${file}`;
|
|
330
304
|
try {
|
|
331
305
|
fs.writeFileSync(filePath, image);
|
|
332
306
|
this.log.debug(`Stored Image: ${filePath}`);
|
|
333
307
|
}
|
|
334
308
|
catch (error) {
|
|
335
|
-
this.log.
|
|
309
|
+
this.log.warn(`Failed to store image: ${filePath} - ${error}`);
|
|
336
310
|
}
|
|
337
311
|
}
|
|
338
312
|
async onPropertyValueChanged(device, name) {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
313
|
+
switch (name) {
|
|
314
|
+
case 'picture': {
|
|
315
|
+
const picture = device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
|
|
316
|
+
if (picture && picture.type) {
|
|
317
|
+
this.storeImage(`${device.getSerial()}.${picture.type.ext}`, picture.data);
|
|
318
|
+
if (this.currentSnapshot && (Date.now() - this.currentSnapshot.timestamp) < settings_1.SNAPSHOT_CLOUD_SKIP_MS) {
|
|
319
|
+
this.log.debug('Skipping cloud snapshot update, a recent stream snapshot already exists.');
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
this.storeSnapshotForCache(picture.data);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
case 'enabled': {
|
|
328
|
+
const enabled = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceEnabled);
|
|
329
|
+
this.log.info(`Device enabled state changed to: ${enabled}`);
|
|
330
|
+
if (enabled) {
|
|
331
|
+
this.currentSnapshot = undefined;
|
|
332
|
+
}
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
case 'state': {
|
|
336
|
+
const state = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceState);
|
|
337
|
+
const wasOffline = this.isDeviceOffline;
|
|
338
|
+
this.isDeviceOffline = (state === 0 || state === 3);
|
|
339
|
+
if (this.isDeviceOffline && !wasOffline) {
|
|
340
|
+
this.log.warn(`Device went offline (state: ${state}).`);
|
|
341
|
+
}
|
|
342
|
+
else if (!this.isDeviceOffline && wasOffline) {
|
|
343
|
+
this.log.info(`Device came back online (state: ${state}).`);
|
|
344
|
+
this.currentSnapshot = undefined;
|
|
345
|
+
}
|
|
346
|
+
break;
|
|
345
347
|
}
|
|
346
348
|
}
|
|
347
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* Fetches a snapshot from the camera, stores it in cache, and deduplicates concurrent calls.
|
|
352
|
+
*/
|
|
348
353
|
async fetchCurrentCameraSnapshot() {
|
|
349
|
-
if (this.
|
|
350
|
-
return
|
|
354
|
+
if (this.pendingFetch) {
|
|
355
|
+
return this.pendingFetch;
|
|
351
356
|
}
|
|
352
|
-
this.refreshProcessRunning = true;
|
|
353
|
-
this.log.debug('Locked refresh process.');
|
|
354
357
|
this.log.debug('Fetching new snapshot from camera.');
|
|
355
|
-
|
|
356
|
-
const
|
|
357
|
-
|
|
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)) {
|
|
358
|
+
this.pendingFetch = this.withTimeout((async () => {
|
|
359
|
+
const source = await this.getCameraSource();
|
|
360
|
+
const isLocalStream = source.type === 'local';
|
|
401
361
|
try {
|
|
402
|
-
const
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
362
|
+
const buffer = await this.runFFmpegSnapshot('[Snapshot Process]', async (params) => {
|
|
363
|
+
if (source.type === 'rtsp') {
|
|
364
|
+
params.setInputSource(source.url);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
await params.setInputStream(source.stream);
|
|
368
|
+
}
|
|
369
|
+
if (this.cameraConfig.delayCameraSnapshot) {
|
|
370
|
+
params.setDelayedSnapshot();
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
this.storeSnapshotForCache(buffer);
|
|
407
374
|
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
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;
|
|
375
|
+
finally {
|
|
376
|
+
if (isLocalStream) {
|
|
377
|
+
this.livestreamManager.stopLocalLiveStream();
|
|
378
|
+
}
|
|
423
379
|
}
|
|
380
|
+
})(), settings_1.SNAPSHOT_FETCH_TIMEOUT_MS).finally(() => {
|
|
381
|
+
this.pendingFetch = undefined;
|
|
382
|
+
});
|
|
383
|
+
return this.pendingFetch;
|
|
384
|
+
}
|
|
385
|
+
async getCameraSource() {
|
|
386
|
+
if ((0, utils_1.is_rtsp_ready)(this.device, this.cameraConfig)) {
|
|
387
|
+
const url = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStreamUrl);
|
|
388
|
+
this.log.debug('RTSP URL: ' + url);
|
|
389
|
+
return { type: 'rtsp', url };
|
|
424
390
|
}
|
|
391
|
+
const streamData = await this.livestreamManager.getLocalLivestream();
|
|
392
|
+
return { type: 'local', stream: streamData.videostream };
|
|
393
|
+
}
|
|
394
|
+
withTimeout(promise, ms) {
|
|
395
|
+
return new Promise((resolve, reject) => {
|
|
396
|
+
const timer = setTimeout(() => reject(new Error(`Snapshot fetch timed out after ${ms}ms`)), ms);
|
|
397
|
+
promise.then(resolve, reject).finally(() => clearTimeout(timer));
|
|
398
|
+
});
|
|
425
399
|
}
|
|
426
400
|
async resizeSnapshot(snapshot, request) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
401
|
+
return this.runFFmpegSnapshot('[Snapshot Resize]', (params) => {
|
|
402
|
+
params.setup(this.cameraConfig, request);
|
|
403
|
+
}, snapshot);
|
|
404
|
+
}
|
|
405
|
+
async runFFmpegSnapshot(label, configure, input) {
|
|
406
|
+
const params = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
|
|
407
|
+
await configure(params);
|
|
408
|
+
return new ffmpeg_1.FFmpeg(label, params).getResult(input);
|
|
431
409
|
}
|
|
432
410
|
}
|
|
433
411
|
exports.SnapshotManager = SnapshotManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotManager.js","sourceRoot":"","sources":["../../src/controller/SnapshotManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SnapshotManager.js","sourceRoot":"","sources":["../../src/controller/SnapshotManager.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SnapshotUnavailablePath = exports.SnapshotBlackPath = exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = exports.PROTECT_FFMPEG_AUDIO_FILTER_FFTNR = exports.PROTECT_RPI_GPU_MINIMUM = exports.PROTECT_HOMEKIT_IDR_INTERVAL = exports.PROTECT_HOMEKIT_STREAMING_HEADROOM = exports.PROTECT_HKSV_SEGMENT_RESOLUTION = exports.PROTECT_HKSV_TIMESHIFT_BUFFER_MAXLENGTH = exports.PROTECT_HKSV_MAX_EVENT_ERRORS = exports.PROTECT_HKSV_SEGMENT_LENGTH = exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
|
|
3
|
+
exports.SNAPSHOT_FETCH_TIMEOUT_MS = exports.SNAPSHOT_CLOUD_SKIP_MS = exports.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES = exports.SNAPSHOT_RING_DEBOUNCE_SECONDS = exports.SNAPSHOT_CACHE_BALANCED_SECONDS = exports.SNAPSHOT_CACHE_FRESH_SECONDS = exports.SnapshotUnavailablePath = exports.SnapshotBlackPath = exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = exports.PROTECT_FFMPEG_AUDIO_FILTER_FFTNR = exports.PROTECT_RPI_GPU_MINIMUM = exports.PROTECT_HOMEKIT_IDR_INTERVAL = exports.PROTECT_HOMEKIT_STREAMING_HEADROOM = exports.PROTECT_HKSV_SEGMENT_RESOLUTION = exports.PROTECT_HKSV_TIMESHIFT_BUFFER_MAXLENGTH = exports.PROTECT_HKSV_MAX_EVENT_ERRORS = exports.PROTECT_HKSV_SEGMENT_LENGTH = exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* This is the name of the platform that users will use to register the plugin in the Homebridge config.json
|
|
6
6
|
*/
|
|
@@ -31,4 +31,16 @@ exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = 90;
|
|
|
31
31
|
exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = 3;
|
|
32
32
|
exports.SnapshotBlackPath = '/media/Snapshot-black.png';
|
|
33
33
|
exports.SnapshotUnavailablePath = '/media/Snapshot-Unavailable.png';
|
|
34
|
+
// Seconds – cache age threshold for the fast-path snapshot return.
|
|
35
|
+
exports.SNAPSHOT_CACHE_FRESH_SECONDS = 15;
|
|
36
|
+
// Seconds – balanced-mode cache age threshold before fetching a new snapshot.
|
|
37
|
+
exports.SNAPSHOT_CACHE_BALANCED_SECONDS = 30;
|
|
38
|
+
// Seconds – window after a ring event where a black placeholder is sent.
|
|
39
|
+
exports.SNAPSHOT_RING_DEBOUNCE_SECONDS = 5;
|
|
40
|
+
// Minutes – minimum allowed automatic snapshot refresh interval.
|
|
41
|
+
exports.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES = 5;
|
|
42
|
+
// Milliseconds – don't overwrite a recent stream snapshot with a cloud image.
|
|
43
|
+
exports.SNAPSHOT_CLOUD_SKIP_MS = 30 * 1000;
|
|
44
|
+
// Milliseconds – maximum time to wait for a snapshot fetch before timing out.
|
|
45
|
+
exports.SNAPSHOT_FETCH_TIMEOUT_MS = 30 * 1000;
|
|
34
46
|
//# sourceMappingURL=settings.js.map
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,aAAa,GAAG,cAAc,CAAC;AAE5C;;GAEG;AACU,QAAA,WAAW,GAAG,0BAA0B,CAAC;AAEtD,oGAAoG;AACvF,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAEhD,yHAAyH;AAC5G,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAE/C,mJAAmJ;AACtI,QAAA,uCAAuC,GAAG,mCAA2B,GAAG,CAAC,CAAC;AAEvF,kKAAkK;AACrJ,QAAA,+BAA+B,GAAG,GAAG,CAAC;AAEnD,+IAA+I;AAClI,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C,2EAA2E;AAC9D,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,mIAAmI;AACtH,QAAA,iCAAiC,GAAG,EAAE,CAAC;AAEpD,wCAAwC;AAC3B,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEhD,6JAA6J;AAChJ,QAAA,iCAAiC,GAAG,CAAC,CAAC;AAEtC,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAEhD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,aAAa,GAAG,cAAc,CAAC;AAE5C;;GAEG;AACU,QAAA,WAAW,GAAG,0BAA0B,CAAC;AAEtD,oGAAoG;AACvF,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAEhD,yHAAyH;AAC5G,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAE/C,mJAAmJ;AACtI,QAAA,uCAAuC,GAAG,mCAA2B,GAAG,CAAC,CAAC;AAEvF,kKAAkK;AACrJ,QAAA,+BAA+B,GAAG,GAAG,CAAC;AAEnD,+IAA+I;AAClI,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C,2EAA2E;AAC9D,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,mIAAmI;AACtH,QAAA,iCAAiC,GAAG,EAAE,CAAC;AAEpD,wCAAwC;AAC3B,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEhD,6JAA6J;AAChJ,QAAA,iCAAiC,GAAG,CAAC,CAAC;AAEtC,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAEhD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC;AAEzE,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C,8EAA8E;AACjE,QAAA,+BAA+B,GAAG,EAAE,CAAC;AAElD,yEAAyE;AAC5D,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEhD,iEAAiE;AACpD,QAAA,qCAAqC,GAAG,CAAC,CAAC;AAEvD,8EAA8E;AACjE,QAAA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,8EAA8E;AACjE,QAAA,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_VIDEOCONFIG_VALUES = exports.DEFAULT_CAMERACONFIG_VALUES = void 0;
|
|
3
|
+
exports.DEFAULT_VIDEOCONFIG_VALUES = exports.DEFAULT_CAMERACONFIG_VALUES = exports.SnapshotHandlingMethod = void 0;
|
|
4
|
+
var SnapshotHandlingMethod;
|
|
5
|
+
(function (SnapshotHandlingMethod) {
|
|
6
|
+
/** Always fetch a fresh snapshot from the camera (highest battery drain) */
|
|
7
|
+
SnapshotHandlingMethod[SnapshotHandlingMethod["AlwaysFresh"] = 1] = "AlwaysFresh";
|
|
8
|
+
/** Return cached snapshot if recent, otherwise fetch fresh */
|
|
9
|
+
SnapshotHandlingMethod[SnapshotHandlingMethod["Balanced"] = 2] = "Balanced";
|
|
10
|
+
/** Always return cached/cloud snapshot (lowest battery drain) */
|
|
11
|
+
SnapshotHandlingMethod[SnapshotHandlingMethod["CloudOnly"] = 3] = "CloudOnly";
|
|
12
|
+
})(SnapshotHandlingMethod || (exports.SnapshotHandlingMethod = SnapshotHandlingMethod = {}));
|
|
4
13
|
exports.DEFAULT_CAMERACONFIG_VALUES = {
|
|
5
14
|
name: '',
|
|
6
15
|
manufacturer: '',
|
|
@@ -16,7 +25,7 @@ exports.DEFAULT_CAMERACONFIG_VALUES = {
|
|
|
16
25
|
rtsp: false,
|
|
17
26
|
enableCamera: true,
|
|
18
27
|
refreshSnapshotIntervalMinutes: 0,
|
|
19
|
-
snapshotHandlingMethod:
|
|
28
|
+
snapshotHandlingMethod: SnapshotHandlingMethod.CloudOnly,
|
|
20
29
|
immediateRingNotificationWithoutSnapshot: false,
|
|
21
30
|
delayCameraSnapshot: false,
|
|
22
31
|
indoorChimeButton: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configTypes.js","sourceRoot":"","sources":["../../src/utils/configTypes.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"configTypes.js","sourceRoot":"","sources":["../../src/utils/configTypes.ts"],"names":[],"mappings":";;;AAAA,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,4EAA4E;IAC5E,iFAAe,CAAA;IACf,8DAA8D;IAC9D,2EAAY,CAAA;IACZ,iEAAiE;IACjE,6EAAa,CAAA;AACf,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC;AA6BY,QAAA,2BAA2B,GAAiB;IACvD,IAAI,EAAE,EAAE;IACR,YAAY,EAAE,EAAE;IAChB,KAAK,EAAE,EAAE;IACT,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,CAAC;IACnB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,IAAI;IAClB,8BAA8B,EAAE,CAAC;IACjC,sBAAsB,EAAE,sBAAsB,CAAC,SAAS;IACxD,wCAAwC,EAAE,KAAK;IAC/C,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAgCW,QAAA,0BAA0B,GAAgB;IACrD,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAC"}
|
package/dist/version.js
CHANGED
package/package.json
CHANGED