@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.32 → 5.0.0-beta.34
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/config.schema.json +6 -0
- package/dist/configuration.js +2 -0
- package/dist/configuration.js.map +1 -1
- package/dist/diagnostics.js +86 -2
- package/dist/diagnostics.js.map +1 -1
- package/dist/homekit/adapters/lock.js +21 -0
- package/dist/homekit/adapters/lock.js.map +1 -1
- package/dist/media/live-preview.js +96 -0
- package/dist/media/live-preview.js.map +1 -0
- package/dist/media/live-stream.js +310 -32
- package/dist/media/live-stream.js.map +1 -1
- package/dist/platform.js +33 -2
- package/dist/platform.js.map +1 -1
- package/dist/runtime/channel.js +54 -1
- package/dist/runtime/channel.js.map +1 -1
- package/dist/runtime/owner.js +14 -1
- package/dist/runtime/owner.js.map +1 -1
- package/dist/ui/dashboard.js +4 -2
- package/dist/ui/dashboard.js.map +1 -1
- package/dist/ui/runtime-channel-client.js +46 -1
- package/dist/ui/runtime-channel-client.js.map +1 -1
- package/dist/ui/server.js +20 -0
- package/dist/ui/server.js.map +1 -1
- package/homebridge-ui/public/app.css +181 -0
- package/homebridge-ui/public/assets/icons/auto_fix_high.svg +1 -0
- package/homebridge-ui/public/assets/icons/play_arrow.svg +1 -0
- package/homebridge-ui/public/assets/icons/stop.svg +1 -0
- package/homebridge-ui/public/i18n/en.json +29 -1
- package/homebridge-ui/public/i18n/fr.json +29 -1
- package/homebridge-ui/public/index.html +63 -0
- package/homebridge-ui/public/js/app.js +318 -3
- package/homebridge-ui/public/js/dashboard.js +5 -2
- package/homebridge-ui/public/js/setup-wizard.js +52 -0
- package/i18n/runtime/en.json +1 -0
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -71,6 +71,12 @@
|
|
|
71
71
|
"default": false,
|
|
72
72
|
"type": "boolean"
|
|
73
73
|
},
|
|
74
|
+
"hardwareVideoEncoder": {
|
|
75
|
+
"title": "Hardware video encoding",
|
|
76
|
+
"description": "Use the computer’s video hardware: turn this off if live view stopped working after an update or looks wrong. On by default.",
|
|
77
|
+
"default": true,
|
|
78
|
+
"type": "boolean"
|
|
79
|
+
},
|
|
74
80
|
"hdLiveVideo": {
|
|
75
81
|
"title": "Always HD live video",
|
|
76
82
|
"description": "Turn this on if live view in the Home app looks blurry. Cameras then offer the Home app only 720p and 1080p, also on mobile data and in the camera grid, which uses more data. Off by default.",
|
package/dist/configuration.js
CHANGED
|
@@ -135,6 +135,7 @@ export function parseConfig(value) {
|
|
|
135
135
|
ffmpegPath: configuredFfmpegPath ?? bundledFfmpegPath,
|
|
136
136
|
smallVideoPackets: value.smallVideoPackets === true,
|
|
137
137
|
liveVideoPassthrough: value.liveVideoPassthrough === true,
|
|
138
|
+
hardwareVideoEncoder: value.hardwareVideoEncoder !== false,
|
|
138
139
|
hdLiveVideo: value.hdLiveVideo === true,
|
|
139
140
|
ignoreHomeBitRate: value.ignoreHomeBitRate === true,
|
|
140
141
|
entityPreferences: parseEntityPreferences(value.entityPreferences),
|
|
@@ -188,6 +189,7 @@ export function serializeConfig(config) {
|
|
|
188
189
|
ffmpegPath: config.ffmpegPath,
|
|
189
190
|
...(config.smallVideoPackets ? { smallVideoPackets: true } : {}),
|
|
190
191
|
...(config.liveVideoPassthrough ? { liveVideoPassthrough: true } : {}),
|
|
192
|
+
...(config.hardwareVideoEncoder ? {} : { hardwareVideoEncoder: false }),
|
|
191
193
|
...(config.hdLiveVideo ? { hdLiveVideo: true } : {}),
|
|
192
194
|
...(config.ignoreHomeBitRate ? { ignoreHomeBitRate: true } : {}),
|
|
193
195
|
entityPreferences: Object.fromEntries(Object.entries(config.entityPreferences).map(([serial, preference]) => [serial, { ...preference }])),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AACnD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAsB,CAAC,eAAe,CAAC,CAAC;AAuB3E,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { constants, createCipheriv, createHash, publicEncrypt, randomBytes, randomUUID } from 'node:crypto';
|
|
2
|
-
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { appendFile, chmod, mkdir, open, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
@@ -151,6 +151,14 @@ const DEBUG_AUTHORIZATION_MS = 72 * 60 * 60 * 1_000;
|
|
|
151
151
|
* rather than joining a fixed number of segments because the plugin's own module is a directory deeper once
|
|
152
152
|
* built, and an SDK resolved through a link answers from wherever the link points.
|
|
153
153
|
*/
|
|
154
|
+
function loadedBuild(module) {
|
|
155
|
+
try {
|
|
156
|
+
return `${PLUGIN_VERSION}+${Math.trunc(statSync(module).mtimeMs)}`;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return PLUGIN_VERSION;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
154
162
|
function loadedVersion(from) {
|
|
155
163
|
if (from === undefined) {
|
|
156
164
|
return 'unknown';
|
|
@@ -192,6 +200,13 @@ function loadedSdkEntry() {
|
|
|
192
200
|
* between them: after one lands, the runtime keeps answering with the build it started on until it is replaced.
|
|
193
201
|
*/
|
|
194
202
|
export const PLUGIN_VERSION = loadedVersion(fileURLToPath(import.meta.url));
|
|
203
|
+
/**
|
|
204
|
+
* Which build of {@link PLUGIN_VERSION} this process loaded: the version and the time this module was written.
|
|
205
|
+
*
|
|
206
|
+
* Every build rewrites the module, so two builds of one version differ here while a published package, whose
|
|
207
|
+
* files all carry one fixed time, differs only by its version. An unreadable module degrades to the version alone.
|
|
208
|
+
*/
|
|
209
|
+
export const PLUGIN_BUILD = loadedBuild(fileURLToPath(import.meta.url));
|
|
195
210
|
const SDK_VERSION = loadedVersion(loadedSdkEntry());
|
|
196
211
|
const gzip = promisify(gzipCallback);
|
|
197
212
|
const gunzip = promisify(gunzipCallback);
|
|
@@ -527,9 +542,39 @@ function readFfmpegIdentity(value) {
|
|
|
527
542
|
}
|
|
528
543
|
const path = typeof recorded.path === 'string' ? boundedText(recorded.path, MAX_FFMPEG_IDENTITY_LENGTH) : undefined;
|
|
529
544
|
const version = typeof recorded.version === 'string' ? boundedText(recorded.version, MAX_FFMPEG_IDENTITY_LENGTH) : undefined;
|
|
545
|
+
const encoders = recorded.encoders && typeof recorded.encoders === 'object' && !Array.isArray(recorded.encoders)
|
|
546
|
+
? readEncoderQualification(recorded.encoders)
|
|
547
|
+
: undefined;
|
|
530
548
|
return path === undefined
|
|
531
549
|
? undefined
|
|
532
|
-
: {
|
|
550
|
+
: {
|
|
551
|
+
path,
|
|
552
|
+
source: recorded.source,
|
|
553
|
+
...(version === undefined ? {} : { version }),
|
|
554
|
+
...(encoders === undefined ? {} : { encoders }),
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* The recorded encoder qualification, keeping only encoder names, `profile@level` selections and outcomes this
|
|
559
|
+
* build names, so the record is bounded by those three closed sets.
|
|
560
|
+
*/
|
|
561
|
+
function readEncoderQualification(recorded) {
|
|
562
|
+
return Object.fromEntries(LIVE_VIDEO_ENCODERS.filter((name) => Object.hasOwn(recorded, name)).map((name) => {
|
|
563
|
+
const outcomes = recorded[name] && typeof recorded[name] === 'object' ? Object.entries(recorded[name]) : [];
|
|
564
|
+
return [
|
|
565
|
+
name,
|
|
566
|
+
Object.fromEntries(outcomes.flatMap(([selection, value]) => {
|
|
567
|
+
const [profile, level] = selection.split('@');
|
|
568
|
+
const outcome = allowlistedLabel(value, QUALIFICATION_OUTCOMES);
|
|
569
|
+
return HOMEKIT_LIVE_VIDEO_PROFILES.has(profile) &&
|
|
570
|
+
HOMEKIT_LIVE_VIDEO_LEVELS.has(level) &&
|
|
571
|
+
selection === `${profile}@${level}` &&
|
|
572
|
+
outcome
|
|
573
|
+
? [[selection, outcome]]
|
|
574
|
+
: [];
|
|
575
|
+
})),
|
|
576
|
+
];
|
|
577
|
+
}));
|
|
533
578
|
}
|
|
534
579
|
/**
|
|
535
580
|
* The one log evidence class a retained record belongs to.
|
|
@@ -1894,6 +1939,7 @@ const ADAPTATION_ROLES = new Set(['live-video', 'live-audio', 'return-audio', 'r
|
|
|
1894
1939
|
/** What that process did. `output` is a process reported for what it wrote rather than for how it ended. */
|
|
1895
1940
|
const ADAPTATION_EVENTS = new Set([
|
|
1896
1941
|
'started',
|
|
1942
|
+
'encoder-disqualified',
|
|
1897
1943
|
'spawn-failed',
|
|
1898
1944
|
'input-failed',
|
|
1899
1945
|
'exited-before-output',
|
|
@@ -1907,6 +1953,31 @@ const ADAPTATION_EVENTS = new Set([
|
|
|
1907
1953
|
* started mid-flight is judged against what that one left. A first adaptation has nothing behind it.
|
|
1908
1954
|
*/
|
|
1909
1955
|
const ADAPTATION_CAUSES = ['first', 'controller-selection', 'source-configuration'];
|
|
1956
|
+
/** The encoders a live video process may code with, `copy` being none. */
|
|
1957
|
+
const LIVE_VIDEO_ENCODERS = [
|
|
1958
|
+
'copy',
|
|
1959
|
+
'libx264',
|
|
1960
|
+
'h264_videotoolbox',
|
|
1961
|
+
'h264_qsv',
|
|
1962
|
+
'h264_nvenc',
|
|
1963
|
+
'h264_amf',
|
|
1964
|
+
'h264_vaapi',
|
|
1965
|
+
'h264_v4l2m2m',
|
|
1966
|
+
];
|
|
1967
|
+
/** What qualifying a hardware encoder for one selection found: `qualified`, or the first check it failed. */
|
|
1968
|
+
const QUALIFICATION_OUTCOMES = [
|
|
1969
|
+
'qualified',
|
|
1970
|
+
'budget',
|
|
1971
|
+
'encode',
|
|
1972
|
+
'trace',
|
|
1973
|
+
'profile',
|
|
1974
|
+
'level',
|
|
1975
|
+
'geometry',
|
|
1976
|
+
'frames',
|
|
1977
|
+
'bytes',
|
|
1978
|
+
];
|
|
1979
|
+
/** The codec a live video source delivers. */
|
|
1980
|
+
const LIVE_VIDEO_SOURCES = ['h264', 'h265', 'av1'];
|
|
1910
1981
|
/**
|
|
1911
1982
|
* Which of those events is a failure, and so the ones a record is levelled `warn` for.
|
|
1912
1983
|
*
|
|
@@ -1916,6 +1987,7 @@ const ADAPTATION_CAUSES = ['first', 'controller-selection', 'source-configuratio
|
|
|
1916
1987
|
* log for every session that succeeded.
|
|
1917
1988
|
*/
|
|
1918
1989
|
const ADAPTATION_FAILURE_EVENTS = new Set([
|
|
1990
|
+
'encoder-disqualified',
|
|
1919
1991
|
'spawn-failed',
|
|
1920
1992
|
'input-failed',
|
|
1921
1993
|
'exited-before-output',
|
|
@@ -2382,6 +2454,14 @@ export function reportDiscardedV4Settings(target) {
|
|
|
2382
2454
|
messageKey,
|
|
2383
2455
|
}));
|
|
2384
2456
|
}
|
|
2457
|
+
/** States once which encoders code live video on this host: every qualified hardware encoder, then `libx264`. */
|
|
2458
|
+
export function reportLiveVideoEncoders(target, encoders) {
|
|
2459
|
+
const names = [
|
|
2460
|
+
...LIVE_VIDEO_ENCODERS.filter((name) => Object.values(encoders[name] ?? {}).includes('qualified') && name !== 'libx264'),
|
|
2461
|
+
'libx264',
|
|
2462
|
+
];
|
|
2463
|
+
target.info(`[live-video-encoders] ${localize(target, 'log.liveVideoEncoders', { encoders: names.join(', ') })}`);
|
|
2464
|
+
}
|
|
2385
2465
|
/** Emits one identity-free warning after an invalid retained camera image is discarded. */
|
|
2386
2466
|
export function reportInvalidSnapshotCache(target) {
|
|
2387
2467
|
const code = 'camera-snapshot-cache-invalid';
|
|
@@ -2584,12 +2664,16 @@ function sanitizeAdaptationNotice(value, level) {
|
|
|
2584
2664
|
.slice(-MAX_ADAPTATION_STDERR_LINES);
|
|
2585
2665
|
const sourceFragments = nonNegativeInteger(value.sourceFragments);
|
|
2586
2666
|
const cause = allowlistedLabel(value.cause, ADAPTATION_CAUSES);
|
|
2667
|
+
const encoder = allowlistedLabel(value.encoder, LIVE_VIDEO_ENCODERS);
|
|
2668
|
+
const source = allowlistedLabel(value.source, LIVE_VIDEO_SOURCES);
|
|
2587
2669
|
return {
|
|
2588
2670
|
scope: 'ffmpeg',
|
|
2589
2671
|
level,
|
|
2590
2672
|
role: value.role,
|
|
2591
2673
|
event: value.event,
|
|
2592
2674
|
...(cause === undefined ? {} : { cause }),
|
|
2675
|
+
...(encoder === undefined ? {} : { encoder }),
|
|
2676
|
+
...(source === undefined ? {} : { source }),
|
|
2593
2677
|
...(code === undefined ? {} : { code }),
|
|
2594
2678
|
...(signal === undefined ? {} : { signal }),
|
|
2595
2679
|
...(sourceFragments === undefined ? {} : { sourceFragments }),
|