@camstack/addon-provider-amcrest 0.2.152 → 0.2.153
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/addon.js +120 -77
- package/dist/addon.mjs +120 -77
- package/i18n/en.json +6 -11
- package/i18n/it.json +6 -11
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -35,7 +35,7 @@ let node_stream_promises = require("node:stream/promises");
|
|
|
35
35
|
let node_child_process = require("node:child_process");
|
|
36
36
|
require("node:zlib");
|
|
37
37
|
let node_os = require("node:os");
|
|
38
|
-
//#region ../types/dist/event-category-
|
|
38
|
+
//#region ../types/dist/event-category-BfJwUd2S.mjs
|
|
39
39
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
40
40
|
EventCategory["SystemBoot"] = "system.boot";
|
|
41
41
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -352,6 +352,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
352
352
|
*/
|
|
353
353
|
EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
|
|
354
354
|
/**
|
|
355
|
+
* A camera's motion source has fired constantly with no subject for an hour
|
|
356
|
+
* (motion duty or session count over the bar, zero detections) — it is not
|
|
357
|
+
* blind, its motion zones or sensitivity want tuning (D907). Paired with
|
|
358
|
+
* {@link PipelineMotionCalm}.
|
|
359
|
+
*/
|
|
360
|
+
EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
|
|
361
|
+
/** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
|
|
362
|
+
EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
|
|
363
|
+
/**
|
|
355
364
|
* Per-camera pipeline config was mutated by the orchestrator
|
|
356
365
|
* (3-level settings change via `setAgentAddonDefaults` /
|
|
357
366
|
* `setCameraStepToggle` / `setCameraPipelineForAgent` or a
|
|
@@ -5458,7 +5467,7 @@ var ZodIssueCode = {
|
|
|
5458
5467
|
var ZodFirstPartyTypeKind;
|
|
5459
5468
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5460
5469
|
//#endregion
|
|
5461
|
-
//#region ../types/dist/sleep-
|
|
5470
|
+
//#region ../types/dist/sleep-DJFUfKvA.mjs
|
|
5462
5471
|
/**
|
|
5463
5472
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5464
5473
|
* window to float samples (D455).
|
|
@@ -7987,7 +7996,7 @@ var EntryDescriptorSchema = object({
|
|
|
7987
7996
|
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
7988
7997
|
fields: record(string(), unknown())
|
|
7989
7998
|
}).strict();
|
|
7990
|
-
/** What crosses the wire
|
|
7999
|
+
/** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
|
|
7991
8000
|
var RecordKindDeclarationSchema = object({
|
|
7992
8001
|
database: _enum(RECORD_DATABASES).default("settings"),
|
|
7993
8002
|
class: _enum(RECORD_CLASSES),
|
|
@@ -8006,14 +8015,6 @@ var RecordKindDeclarationSchema = object({
|
|
|
8006
8015
|
secretPaths: array(string().min(1)).default([]),
|
|
8007
8016
|
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
8008
8017
|
secretArrayKeys: record(string(), string()).default({}),
|
|
8009
|
-
/**
|
|
8010
|
-
* RETIRED (D900): the legacy table a kind adopted from during the records
|
|
8011
|
-
* migration. Nothing declares it any more and nothing reads it; the schema
|
|
8012
|
-
* still ACCEPTS it because the catalog rows the migration wrote carry it
|
|
8013
|
-
* (an orphaned kind is never redeclared) and an addon built before the
|
|
8014
|
-
* removal still sends it. Never set it.
|
|
8015
|
-
*/
|
|
8016
|
-
adoptsFrom: string().min(1).optional(),
|
|
8017
8018
|
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
8018
8019
|
transactFamily: string().min(1).optional(),
|
|
8019
8020
|
entry: EntryDescriptorSchema.optional()
|
|
@@ -12715,17 +12716,6 @@ object({
|
|
|
12715
12716
|
createdAt: number(),
|
|
12716
12717
|
updatedAt: number()
|
|
12717
12718
|
});
|
|
12718
|
-
object({
|
|
12719
|
-
id: string(),
|
|
12720
|
-
label: string(),
|
|
12721
|
-
isAdmin: boolean().default(false),
|
|
12722
|
-
allowedProviders: AllowedProviderSchema,
|
|
12723
|
-
allowedDevices: AllowedDevicesSchema,
|
|
12724
|
-
tokenHash: string(),
|
|
12725
|
-
tokenPrefix: string(),
|
|
12726
|
-
createdAt: number(),
|
|
12727
|
-
lastUsedAt: number().optional()
|
|
12728
|
-
});
|
|
12729
12719
|
object({
|
|
12730
12720
|
id: string(),
|
|
12731
12721
|
userId: string(),
|
|
@@ -16707,16 +16697,36 @@ var RecordKindStateSchema = _enum([
|
|
|
16707
16697
|
var DeclareKindResultSchema = object({
|
|
16708
16698
|
kindId: number().int(),
|
|
16709
16699
|
state: RecordKindStateSchema,
|
|
16710
|
-
createdIndexes: array(string())
|
|
16711
|
-
/**
|
|
16712
|
-
* RETIRED (D900): always `null`. It carried the records-migration boot guard;
|
|
16713
|
-
* it stays on the wire, null, because an addon built before the removal reads
|
|
16714
|
-
* an ABSENT field as "adoption pending" and refuses to start.
|
|
16715
|
-
*/
|
|
16716
|
-
adoptionPending: _null()
|
|
16700
|
+
createdIndexes: array(string())
|
|
16717
16701
|
});
|
|
16718
16702
|
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
16719
16703
|
var SecretRefsList = array(string());
|
|
16704
|
+
/**
|
|
16705
|
+
* One op of a `transact`: the single-row writes, each on a kind of the caller.
|
|
16706
|
+
* All ops of one call share ONE database file and ONE `transactFamily`.
|
|
16707
|
+
*/
|
|
16708
|
+
var RecordTransactOpSchema = discriminatedUnion("op", [
|
|
16709
|
+
object({
|
|
16710
|
+
op: literal("put"),
|
|
16711
|
+
kind: RecordKindNameSchema,
|
|
16712
|
+
record: RecordInputSchema,
|
|
16713
|
+
ifRev: number().int().min(0).optional()
|
|
16714
|
+
}),
|
|
16715
|
+
object({
|
|
16716
|
+
op: literal("patch"),
|
|
16717
|
+
kind: RecordKindNameSchema,
|
|
16718
|
+
id: RecordIdSchema,
|
|
16719
|
+
data: RecordBodySchema,
|
|
16720
|
+
at: number().int().nullable().optional(),
|
|
16721
|
+
expiresAt: number().int().nullable().optional(),
|
|
16722
|
+
ifRev: number().int().min(1).optional()
|
|
16723
|
+
}),
|
|
16724
|
+
object({
|
|
16725
|
+
op: literal("delete"),
|
|
16726
|
+
kind: RecordKindNameSchema,
|
|
16727
|
+
id: RecordIdSchema
|
|
16728
|
+
})
|
|
16729
|
+
]);
|
|
16720
16730
|
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
16721
16731
|
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
16722
16732
|
kind: "mutation",
|
|
@@ -16823,6 +16833,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
|
|
|
16823
16833
|
}), {
|
|
16824
16834
|
kind: "mutation",
|
|
16825
16835
|
auth: "admin"
|
|
16836
|
+
}), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
|
|
16837
|
+
results: array(object({
|
|
16838
|
+
rev: number().int().nullable(),
|
|
16839
|
+
deleted: boolean()
|
|
16840
|
+
})),
|
|
16841
|
+
releasedRefs: SecretRefsList,
|
|
16842
|
+
secretRefs: SecretRefsList
|
|
16843
|
+
}), {
|
|
16844
|
+
kind: "mutation",
|
|
16845
|
+
auth: "admin"
|
|
16826
16846
|
}), method(object({
|
|
16827
16847
|
deviceId: number().int(),
|
|
16828
16848
|
kinds: array(RecordKindNameSchema).optional()
|
|
@@ -42530,9 +42550,13 @@ var NcSystemEventKindSchema = _enum([
|
|
|
42530
42550
|
"node-updating",
|
|
42531
42551
|
"node-inference-unavailable",
|
|
42532
42552
|
"detection-blind",
|
|
42553
|
+
"motion-noisy",
|
|
42554
|
+
"motion-calm",
|
|
42533
42555
|
"recording-stalled",
|
|
42534
42556
|
"recording-healthy",
|
|
42535
42557
|
"recording-degraded",
|
|
42558
|
+
"device-attention-required",
|
|
42559
|
+
"device-attention-resolved",
|
|
42536
42560
|
"storage-location-low",
|
|
42537
42561
|
"storage-location-critical",
|
|
42538
42562
|
"storage-location-ok",
|
|
@@ -56369,6 +56393,16 @@ var DishwasherStatusSchema = object({
|
|
|
56369
56393
|
powerState: string().nullable(),
|
|
56370
56394
|
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56371
56395
|
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56396
|
+
/**
|
|
56397
|
+
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
56398
|
+
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
56399
|
+
* when none is reported. A cleared reminder is not an unknown one.
|
|
56400
|
+
*/
|
|
56401
|
+
filterCleaningDue: boolean().nullable(),
|
|
56402
|
+
/** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
|
|
56403
|
+
machineCareDue: boolean().nullable(),
|
|
56404
|
+
/** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
|
|
56405
|
+
machineCareRemainingRuns: number().int().nonnegative().nullable(),
|
|
56372
56406
|
/** Option states: null when the appliance does not expose the option or has not said. */
|
|
56373
56407
|
halfLoad: boolean().nullable(),
|
|
56374
56408
|
hygienePlus: boolean().nullable(),
|
|
@@ -65481,16 +65515,6 @@ var UpdateUserInputSchema = object({
|
|
|
65481
65515
|
allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
|
|
65482
65516
|
scopes: array(TokenScopeSchema).optional()
|
|
65483
65517
|
});
|
|
65484
|
-
var ApiKeySummarySchema = object({
|
|
65485
|
-
id: string(),
|
|
65486
|
-
label: string(),
|
|
65487
|
-
isAdmin: boolean().default(false),
|
|
65488
|
-
allowedProviders: union([array(string()), literal("*")]).optional(),
|
|
65489
|
-
allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
|
|
65490
|
-
tokenPrefix: string(),
|
|
65491
|
-
createdAt: number(),
|
|
65492
|
-
lastUsedAt: number().optional()
|
|
65493
|
-
});
|
|
65494
65518
|
var OauthSessionSummarySchema = object({
|
|
65495
65519
|
id: string(),
|
|
65496
65520
|
userId: string(),
|
|
@@ -65512,8 +65536,7 @@ var TotpStatusSchema = object({
|
|
|
65512
65536
|
confirmedAt: number().nullable()
|
|
65513
65537
|
});
|
|
65514
65538
|
/**
|
|
65515
|
-
* user-management — singleton capability for user accounts
|
|
65516
|
-
* legacy API-key rows.
|
|
65539
|
+
* user-management — singleton capability for user accounts.
|
|
65517
65540
|
*
|
|
65518
65541
|
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
65519
65542
|
* — the subset check on `setUserScopes` is moot
|
|
@@ -65569,10 +65592,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
65569
65592
|
}), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
|
|
65570
65593
|
kind: "mutation",
|
|
65571
65594
|
access: "view"
|
|
65572
|
-
}), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
|
|
65573
|
-
kind: "mutation",
|
|
65574
|
-
auth: "admin",
|
|
65575
|
-
access: "delete"
|
|
65576
65595
|
}), method(object({ userId: string() }), TotpSetupResultSchema, {
|
|
65577
65596
|
kind: "mutation",
|
|
65578
65597
|
auth: "admin",
|
|
@@ -75032,6 +75051,12 @@ Object.freeze({
|
|
|
75032
75051
|
addonId: null,
|
|
75033
75052
|
access: "view"
|
|
75034
75053
|
},
|
|
75054
|
+
"records.transact": {
|
|
75055
|
+
capName: "records",
|
|
75056
|
+
capScope: "system",
|
|
75057
|
+
addonId: null,
|
|
75058
|
+
access: "create"
|
|
75059
|
+
},
|
|
75035
75060
|
"sceneMonitor.captureReference": {
|
|
75036
75061
|
capName: "scene-monitor",
|
|
75037
75062
|
capScope: "device",
|
|
@@ -76364,12 +76389,6 @@ Object.freeze({
|
|
|
76364
76389
|
addonId: null,
|
|
76365
76390
|
access: "view"
|
|
76366
76391
|
},
|
|
76367
|
-
"userManagement.listApiKeys": {
|
|
76368
|
-
capName: "user-management",
|
|
76369
|
-
capScope: "system",
|
|
76370
|
-
addonId: null,
|
|
76371
|
-
access: "view"
|
|
76372
|
-
},
|
|
76373
76392
|
"userManagement.listExternalIdentities": {
|
|
76374
76393
|
capName: "user-management",
|
|
76375
76394
|
capScope: "system",
|
|
@@ -76424,12 +76443,6 @@ Object.freeze({
|
|
|
76424
76443
|
addonId: null,
|
|
76425
76444
|
access: "create"
|
|
76426
76445
|
},
|
|
76427
|
-
"userManagement.revokeApiKey": {
|
|
76428
|
-
capName: "user-management",
|
|
76429
|
-
capScope: "system",
|
|
76430
|
-
addonId: null,
|
|
76431
|
-
access: "delete"
|
|
76432
|
-
},
|
|
76433
76446
|
"userManagement.revokeOauthSession": {
|
|
76434
76447
|
capName: "user-management",
|
|
76435
76448
|
capScope: "system",
|
|
@@ -80000,9 +80013,13 @@ new Map(Object.entries({
|
|
|
80000
80013
|
"stream-online": "device-events",
|
|
80001
80014
|
"stream-offline": "device-events",
|
|
80002
80015
|
"detection-blind": "device-events",
|
|
80016
|
+
"motion-noisy": "device-events",
|
|
80017
|
+
"motion-calm": "device-events",
|
|
80003
80018
|
"recording-stalled": "device-events",
|
|
80004
80019
|
"recording-healthy": "device-events",
|
|
80005
80020
|
"recording-degraded": "device-events",
|
|
80021
|
+
"device-attention-required": "device-events",
|
|
80022
|
+
"device-attention-resolved": "device-events",
|
|
80006
80023
|
"node-online": "system",
|
|
80007
80024
|
"node-offline": "system",
|
|
80008
80025
|
"node-restarting": "system",
|
|
@@ -80085,6 +80102,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
80085
80102
|
label: "Detecting nothing",
|
|
80086
80103
|
kinds: ["detection-blind"]
|
|
80087
80104
|
},
|
|
80105
|
+
{
|
|
80106
|
+
id: "motion-noise",
|
|
80107
|
+
family: "device-events",
|
|
80108
|
+
label: "Motion without a subject",
|
|
80109
|
+
kinds: ["motion-noisy", "motion-calm"]
|
|
80110
|
+
},
|
|
80088
80111
|
{
|
|
80089
80112
|
id: "recording",
|
|
80090
80113
|
family: "device-events",
|
|
@@ -80095,6 +80118,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
80095
80118
|
"recording-degraded"
|
|
80096
80119
|
]
|
|
80097
80120
|
},
|
|
80121
|
+
{
|
|
80122
|
+
id: "device-attention",
|
|
80123
|
+
family: "device-events",
|
|
80124
|
+
label: "Needs attention",
|
|
80125
|
+
kinds: ["device-attention-required", "device-attention-resolved"]
|
|
80126
|
+
},
|
|
80098
80127
|
{
|
|
80099
80128
|
id: "nodes",
|
|
80100
80129
|
family: "system",
|
|
@@ -80234,6 +80263,7 @@ var ALERT_EPISODE = [
|
|
|
80234
80263
|
"alert-error",
|
|
80235
80264
|
"alert-critical-resolved"
|
|
80236
80265
|
];
|
|
80266
|
+
var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
|
|
80237
80267
|
var UPDATES = [
|
|
80238
80268
|
"addon-update-available",
|
|
80239
80269
|
"server-update-available",
|
|
@@ -80263,9 +80293,12 @@ var DEVICE_EVENTS = [
|
|
|
80263
80293
|
"stream-online",
|
|
80264
80294
|
"stream-offline",
|
|
80265
80295
|
"detection-blind",
|
|
80296
|
+
"motion-noisy",
|
|
80297
|
+
"motion-calm",
|
|
80266
80298
|
"recording-stalled",
|
|
80267
80299
|
"recording-healthy",
|
|
80268
80300
|
"recording-degraded",
|
|
80301
|
+
...DEVICE_ATTENTION,
|
|
80269
80302
|
...ALARM
|
|
80270
80303
|
];
|
|
80271
80304
|
/** Every kind a summary may speak about — the two summarisable families. */
|
|
@@ -80433,7 +80466,9 @@ var STATE_SUMMARY_VARS = [
|
|
|
80433
80466
|
[...RULE_TEXT],
|
|
80434
80467
|
[...RULE_TEXT],
|
|
80435
80468
|
[...RULE_TEXT],
|
|
80436
|
-
|
|
80469
|
+
[...RULE_TEXT],
|
|
80470
|
+
[...RULE_TEXT],
|
|
80471
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80437
80472
|
[...RULE_TEXT],
|
|
80438
80473
|
[...RULE_TEXT],
|
|
80439
80474
|
[...RULE_TEXT],
|
|
@@ -80455,11 +80490,11 @@ var STATE_SUMMARY_VARS = [
|
|
|
80455
80490
|
[...RULE_TEXT],
|
|
80456
80491
|
[...RULE_TEXT],
|
|
80457
80492
|
[...RULE_TEXT],
|
|
80493
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80458
80494
|
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80495
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80459
80496
|
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80460
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80461
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80462
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80497
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80463
80498
|
[...RULE_TEXT],
|
|
80464
80499
|
[...RULE_TEXT],
|
|
80465
80500
|
[...RULE_TEXT],
|
|
@@ -80535,6 +80570,15 @@ new Map([
|
|
|
80535
80570
|
snapshotLabel: "Tanks low or full now",
|
|
80536
80571
|
snapshotSection: "tanks"
|
|
80537
80572
|
},
|
|
80573
|
+
{
|
|
80574
|
+
id: "motion-noise",
|
|
80575
|
+
family: "device-events",
|
|
80576
|
+
label: "Motion without a subject (constant / calm again)",
|
|
80577
|
+
bad: ["motion-noisy"],
|
|
80578
|
+
recovery: ["motion-calm"],
|
|
80579
|
+
snapshotLabel: "Cameras with constant motion now",
|
|
80580
|
+
snapshotSection: null
|
|
80581
|
+
},
|
|
80538
80582
|
{
|
|
80539
80583
|
id: "recording-health",
|
|
80540
80584
|
family: "device-events",
|
|
@@ -80544,6 +80588,15 @@ new Map([
|
|
|
80544
80588
|
snapshotLabel: "Recordings stalled now",
|
|
80545
80589
|
snapshotSection: null
|
|
80546
80590
|
},
|
|
80591
|
+
{
|
|
80592
|
+
id: "device-attention",
|
|
80593
|
+
family: "device-events",
|
|
80594
|
+
label: "Device needs attention (raised / resolved)",
|
|
80595
|
+
bad: ["device-attention-required"],
|
|
80596
|
+
recovery: ["device-attention-resolved"],
|
|
80597
|
+
snapshotLabel: "Devices needing attention now",
|
|
80598
|
+
snapshotSection: null
|
|
80599
|
+
},
|
|
80547
80600
|
{
|
|
80548
80601
|
id: "node-connectivity",
|
|
80549
80602
|
family: "system",
|
|
@@ -82801,7 +82854,7 @@ function buildExtrasSections(snap) {
|
|
|
82801
82854
|
tab: "image",
|
|
82802
82855
|
title: "IR + status LED",
|
|
82803
82856
|
titleKey: "provider-amcrest:extrasSections.s_ir-lights.title",
|
|
82804
|
-
description: "
|
|
82857
|
+
description: "`Auto` follows ambient light; `Manual` forces the LEDs on at the set brightness.",
|
|
82805
82858
|
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.description",
|
|
82806
82859
|
columns: 2,
|
|
82807
82860
|
fields: [
|
|
@@ -82834,8 +82887,6 @@ function buildExtrasSections(snap) {
|
|
|
82834
82887
|
key: "irLightBrightness",
|
|
82835
82888
|
label: "IR brightness",
|
|
82836
82889
|
labelKey: "provider-amcrest:extrasSections.s_ir-lights.irLightBrightness.label",
|
|
82837
|
-
description: "IR LED output (`MiddleLight[0].Light`, 0–100). Applied in Auto and Manual modes.",
|
|
82838
|
-
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.irLightBrightness.description",
|
|
82839
82890
|
min: 0,
|
|
82840
82891
|
max: 100,
|
|
82841
82892
|
step: 5,
|
|
@@ -82848,8 +82899,6 @@ function buildExtrasSections(snap) {
|
|
|
82848
82899
|
key: "statusLedEnabled",
|
|
82849
82900
|
label: "Status LED",
|
|
82850
82901
|
labelKey: "provider-amcrest:extrasSections.s_ir-lights.statusLedEnabled.label",
|
|
82851
|
-
description: "The visible indicator LED on the camera body (`LightGlobal[0].Enable`).",
|
|
82852
|
-
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.statusLedEnabled.description",
|
|
82853
82902
|
default: snap.statusLedEnabled ?? true,
|
|
82854
82903
|
style: "switch",
|
|
82855
82904
|
span: 2
|
|
@@ -82861,7 +82910,7 @@ function buildExtrasSections(snap) {
|
|
|
82861
82910
|
tab: "network",
|
|
82862
82911
|
title: "Time / NTP",
|
|
82863
82912
|
titleKey: "provider-amcrest:extrasSections.s_time-ntp.title",
|
|
82864
|
-
description: "
|
|
82913
|
+
description: "With NTP disabled this camera's clock drifts badly.",
|
|
82865
82914
|
descriptionKey: "provider-amcrest:extrasSections.s_time-ntp.description",
|
|
82866
82915
|
columns: 2,
|
|
82867
82916
|
fields: [
|
|
@@ -82908,7 +82957,7 @@ function buildExtrasSections(snap) {
|
|
|
82908
82957
|
key: "ntpTimeZoneIndex",
|
|
82909
82958
|
label: "Timezone index (Dahua, 0–33)",
|
|
82910
82959
|
labelKey: "provider-amcrest:extrasSections.s_time-ntp.ntpTimeZoneIndex.label",
|
|
82911
|
-
description: "
|
|
82960
|
+
description: "Dahua numeric index (0–33) from the camera web UI timezone list, not an IANA zone. 26 = GMT+8.",
|
|
82912
82961
|
descriptionKey: "provider-amcrest:extrasSections.s_time-ntp.ntpTimeZoneIndex.description",
|
|
82913
82962
|
default: snap.ntpTimeZoneIndex ?? 26,
|
|
82914
82963
|
min: 0,
|
|
@@ -82923,8 +82972,6 @@ function buildExtrasSections(snap) {
|
|
|
82923
82972
|
tab: "advanced",
|
|
82924
82973
|
title: "Auto reboot",
|
|
82925
82974
|
titleKey: "provider-amcrest:extrasSections.s_auto-reboot.title",
|
|
82926
|
-
description: "Scheduled automatic reboot (`AutoMaintain.AutoReboot*`). Choose a day (or every day) + time; the camera reboots once per matching window.",
|
|
82927
|
-
descriptionKey: "provider-amcrest:extrasSections.s_auto-reboot.description",
|
|
82928
82975
|
columns: 2,
|
|
82929
82976
|
fields: [
|
|
82930
82977
|
{
|
|
@@ -83579,8 +83626,6 @@ var AmcrestCamera = class AmcrestCamera extends BaseDevice {
|
|
|
83579
83626
|
tab: "general",
|
|
83580
83627
|
title: "Connection",
|
|
83581
83628
|
titleKey: "provider-amcrest:schema.s_connection.title",
|
|
83582
|
-
description: "Dahua CGI HTTP(S) endpoint + Digest credentials. RTSP is always port 554.",
|
|
83583
|
-
descriptionKey: "provider-amcrest:schema.s_connection.description",
|
|
83584
83629
|
columns: 2,
|
|
83585
83630
|
fields: [
|
|
83586
83631
|
{
|
|
@@ -97868,8 +97913,6 @@ function buildCreationFormSchema() {
|
|
|
97868
97913
|
id: "credentials",
|
|
97869
97914
|
title: "Credentials",
|
|
97870
97915
|
titleKey: "provider-amcrest:creation.s_credentials.title",
|
|
97871
|
-
description: "Dahua CGI uses HTTP Digest auth — no plaintext password on the wire even over HTTP. Required for the host probe.",
|
|
97872
|
-
descriptionKey: "provider-amcrest:creation.s_credentials.description",
|
|
97873
97916
|
columns: 2,
|
|
97874
97917
|
fields: [{
|
|
97875
97918
|
type: "text",
|
|
@@ -97891,7 +97934,7 @@ function buildCreationFormSchema() {
|
|
|
97891
97934
|
id: "connection",
|
|
97892
97935
|
title: "Connection",
|
|
97893
97936
|
titleKey: "provider-amcrest:creation.s_connection.title",
|
|
97894
|
-
description: "
|
|
97937
|
+
description: "Use 443 with HTTPS for cameras with TLS enabled.",
|
|
97895
97938
|
descriptionKey: "provider-amcrest:creation.s_connection.description",
|
|
97896
97939
|
columns: 2,
|
|
97897
97940
|
fields: [
|
|
@@ -97937,7 +97980,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
97937
97980
|
id: "credentials",
|
|
97938
97981
|
title: "Credentials",
|
|
97939
97982
|
titleKey: "provider-amcrest:discoveryParams.s_credentials.title",
|
|
97940
|
-
description: "
|
|
97983
|
+
description: "Assumes all cameras share these credentials.",
|
|
97941
97984
|
descriptionKey: "provider-amcrest:discoveryParams.s_credentials.description",
|
|
97942
97985
|
columns: 2,
|
|
97943
97986
|
fields: [{
|
|
@@ -97959,7 +98002,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
97959
98002
|
id: "scan",
|
|
97960
98003
|
title: "Scan options",
|
|
97961
98004
|
titleKey: "provider-amcrest:discoveryParams.s_scan.title",
|
|
97962
|
-
description: "
|
|
98005
|
+
description: "Leave blank to scan the hub's own subnet; enter the CIDR if the cameras are on another one (e.g. 192.168.60.0/24).",
|
|
97963
98006
|
descriptionKey: "provider-amcrest:discoveryParams.s_scan.description",
|
|
97964
98007
|
columns: 1,
|
|
97965
98008
|
fields: [{
|
package/dist/addon.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import { networkInterfaces } from "node:os";
|
|
|
14
14
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
15
15
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
16
16
|
//#endregion
|
|
17
|
-
//#region ../types/dist/event-category-
|
|
17
|
+
//#region ../types/dist/event-category-BfJwUd2S.mjs
|
|
18
18
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
19
19
|
EventCategory["SystemBoot"] = "system.boot";
|
|
20
20
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -331,6 +331,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
331
331
|
*/
|
|
332
332
|
EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
|
|
333
333
|
/**
|
|
334
|
+
* A camera's motion source has fired constantly with no subject for an hour
|
|
335
|
+
* (motion duty or session count over the bar, zero detections) — it is not
|
|
336
|
+
* blind, its motion zones or sensitivity want tuning (D907). Paired with
|
|
337
|
+
* {@link PipelineMotionCalm}.
|
|
338
|
+
*/
|
|
339
|
+
EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
|
|
340
|
+
/** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
|
|
341
|
+
EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
|
|
342
|
+
/**
|
|
334
343
|
* Per-camera pipeline config was mutated by the orchestrator
|
|
335
344
|
* (3-level settings change via `setAgentAddonDefaults` /
|
|
336
345
|
* `setCameraStepToggle` / `setCameraPipelineForAgent` or a
|
|
@@ -5437,7 +5446,7 @@ var ZodIssueCode = {
|
|
|
5437
5446
|
var ZodFirstPartyTypeKind;
|
|
5438
5447
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5439
5448
|
//#endregion
|
|
5440
|
-
//#region ../types/dist/sleep-
|
|
5449
|
+
//#region ../types/dist/sleep-DJFUfKvA.mjs
|
|
5441
5450
|
/**
|
|
5442
5451
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5443
5452
|
* window to float samples (D455).
|
|
@@ -7966,7 +7975,7 @@ var EntryDescriptorSchema = object({
|
|
|
7966
7975
|
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
7967
7976
|
fields: record(string(), unknown())
|
|
7968
7977
|
}).strict();
|
|
7969
|
-
/** What crosses the wire
|
|
7978
|
+
/** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
|
|
7970
7979
|
var RecordKindDeclarationSchema = object({
|
|
7971
7980
|
database: _enum(RECORD_DATABASES).default("settings"),
|
|
7972
7981
|
class: _enum(RECORD_CLASSES),
|
|
@@ -7985,14 +7994,6 @@ var RecordKindDeclarationSchema = object({
|
|
|
7985
7994
|
secretPaths: array(string().min(1)).default([]),
|
|
7986
7995
|
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
7987
7996
|
secretArrayKeys: record(string(), string()).default({}),
|
|
7988
|
-
/**
|
|
7989
|
-
* RETIRED (D900): the legacy table a kind adopted from during the records
|
|
7990
|
-
* migration. Nothing declares it any more and nothing reads it; the schema
|
|
7991
|
-
* still ACCEPTS it because the catalog rows the migration wrote carry it
|
|
7992
|
-
* (an orphaned kind is never redeclared) and an addon built before the
|
|
7993
|
-
* removal still sends it. Never set it.
|
|
7994
|
-
*/
|
|
7995
|
-
adoptsFrom: string().min(1).optional(),
|
|
7996
7997
|
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
7997
7998
|
transactFamily: string().min(1).optional(),
|
|
7998
7999
|
entry: EntryDescriptorSchema.optional()
|
|
@@ -12694,17 +12695,6 @@ object({
|
|
|
12694
12695
|
createdAt: number(),
|
|
12695
12696
|
updatedAt: number()
|
|
12696
12697
|
});
|
|
12697
|
-
object({
|
|
12698
|
-
id: string(),
|
|
12699
|
-
label: string(),
|
|
12700
|
-
isAdmin: boolean().default(false),
|
|
12701
|
-
allowedProviders: AllowedProviderSchema,
|
|
12702
|
-
allowedDevices: AllowedDevicesSchema,
|
|
12703
|
-
tokenHash: string(),
|
|
12704
|
-
tokenPrefix: string(),
|
|
12705
|
-
createdAt: number(),
|
|
12706
|
-
lastUsedAt: number().optional()
|
|
12707
|
-
});
|
|
12708
12698
|
object({
|
|
12709
12699
|
id: string(),
|
|
12710
12700
|
userId: string(),
|
|
@@ -16686,16 +16676,36 @@ var RecordKindStateSchema = _enum([
|
|
|
16686
16676
|
var DeclareKindResultSchema = object({
|
|
16687
16677
|
kindId: number().int(),
|
|
16688
16678
|
state: RecordKindStateSchema,
|
|
16689
|
-
createdIndexes: array(string())
|
|
16690
|
-
/**
|
|
16691
|
-
* RETIRED (D900): always `null`. It carried the records-migration boot guard;
|
|
16692
|
-
* it stays on the wire, null, because an addon built before the removal reads
|
|
16693
|
-
* an ABSENT field as "adoption pending" and refuses to start.
|
|
16694
|
-
*/
|
|
16695
|
-
adoptionPending: _null()
|
|
16679
|
+
createdIndexes: array(string())
|
|
16696
16680
|
});
|
|
16697
16681
|
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
16698
16682
|
var SecretRefsList = array(string());
|
|
16683
|
+
/**
|
|
16684
|
+
* One op of a `transact`: the single-row writes, each on a kind of the caller.
|
|
16685
|
+
* All ops of one call share ONE database file and ONE `transactFamily`.
|
|
16686
|
+
*/
|
|
16687
|
+
var RecordTransactOpSchema = discriminatedUnion("op", [
|
|
16688
|
+
object({
|
|
16689
|
+
op: literal("put"),
|
|
16690
|
+
kind: RecordKindNameSchema,
|
|
16691
|
+
record: RecordInputSchema,
|
|
16692
|
+
ifRev: number().int().min(0).optional()
|
|
16693
|
+
}),
|
|
16694
|
+
object({
|
|
16695
|
+
op: literal("patch"),
|
|
16696
|
+
kind: RecordKindNameSchema,
|
|
16697
|
+
id: RecordIdSchema,
|
|
16698
|
+
data: RecordBodySchema,
|
|
16699
|
+
at: number().int().nullable().optional(),
|
|
16700
|
+
expiresAt: number().int().nullable().optional(),
|
|
16701
|
+
ifRev: number().int().min(1).optional()
|
|
16702
|
+
}),
|
|
16703
|
+
object({
|
|
16704
|
+
op: literal("delete"),
|
|
16705
|
+
kind: RecordKindNameSchema,
|
|
16706
|
+
id: RecordIdSchema
|
|
16707
|
+
})
|
|
16708
|
+
]);
|
|
16699
16709
|
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
16700
16710
|
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
16701
16711
|
kind: "mutation",
|
|
@@ -16802,6 +16812,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
|
|
|
16802
16812
|
}), {
|
|
16803
16813
|
kind: "mutation",
|
|
16804
16814
|
auth: "admin"
|
|
16815
|
+
}), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
|
|
16816
|
+
results: array(object({
|
|
16817
|
+
rev: number().int().nullable(),
|
|
16818
|
+
deleted: boolean()
|
|
16819
|
+
})),
|
|
16820
|
+
releasedRefs: SecretRefsList,
|
|
16821
|
+
secretRefs: SecretRefsList
|
|
16822
|
+
}), {
|
|
16823
|
+
kind: "mutation",
|
|
16824
|
+
auth: "admin"
|
|
16805
16825
|
}), method(object({
|
|
16806
16826
|
deviceId: number().int(),
|
|
16807
16827
|
kinds: array(RecordKindNameSchema).optional()
|
|
@@ -42509,9 +42529,13 @@ var NcSystemEventKindSchema = _enum([
|
|
|
42509
42529
|
"node-updating",
|
|
42510
42530
|
"node-inference-unavailable",
|
|
42511
42531
|
"detection-blind",
|
|
42532
|
+
"motion-noisy",
|
|
42533
|
+
"motion-calm",
|
|
42512
42534
|
"recording-stalled",
|
|
42513
42535
|
"recording-healthy",
|
|
42514
42536
|
"recording-degraded",
|
|
42537
|
+
"device-attention-required",
|
|
42538
|
+
"device-attention-resolved",
|
|
42515
42539
|
"storage-location-low",
|
|
42516
42540
|
"storage-location-critical",
|
|
42517
42541
|
"storage-location-ok",
|
|
@@ -56348,6 +56372,16 @@ var DishwasherStatusSchema = object({
|
|
|
56348
56372
|
powerState: string().nullable(),
|
|
56349
56373
|
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56350
56374
|
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56375
|
+
/**
|
|
56376
|
+
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
56377
|
+
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
56378
|
+
* when none is reported. A cleared reminder is not an unknown one.
|
|
56379
|
+
*/
|
|
56380
|
+
filterCleaningDue: boolean().nullable(),
|
|
56381
|
+
/** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
|
|
56382
|
+
machineCareDue: boolean().nullable(),
|
|
56383
|
+
/** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
|
|
56384
|
+
machineCareRemainingRuns: number().int().nonnegative().nullable(),
|
|
56351
56385
|
/** Option states: null when the appliance does not expose the option or has not said. */
|
|
56352
56386
|
halfLoad: boolean().nullable(),
|
|
56353
56387
|
hygienePlus: boolean().nullable(),
|
|
@@ -65460,16 +65494,6 @@ var UpdateUserInputSchema = object({
|
|
|
65460
65494
|
allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
|
|
65461
65495
|
scopes: array(TokenScopeSchema).optional()
|
|
65462
65496
|
});
|
|
65463
|
-
var ApiKeySummarySchema = object({
|
|
65464
|
-
id: string(),
|
|
65465
|
-
label: string(),
|
|
65466
|
-
isAdmin: boolean().default(false),
|
|
65467
|
-
allowedProviders: union([array(string()), literal("*")]).optional(),
|
|
65468
|
-
allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
|
|
65469
|
-
tokenPrefix: string(),
|
|
65470
|
-
createdAt: number(),
|
|
65471
|
-
lastUsedAt: number().optional()
|
|
65472
|
-
});
|
|
65473
65497
|
var OauthSessionSummarySchema = object({
|
|
65474
65498
|
id: string(),
|
|
65475
65499
|
userId: string(),
|
|
@@ -65491,8 +65515,7 @@ var TotpStatusSchema = object({
|
|
|
65491
65515
|
confirmedAt: number().nullable()
|
|
65492
65516
|
});
|
|
65493
65517
|
/**
|
|
65494
|
-
* user-management — singleton capability for user accounts
|
|
65495
|
-
* legacy API-key rows.
|
|
65518
|
+
* user-management — singleton capability for user accounts.
|
|
65496
65519
|
*
|
|
65497
65520
|
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
65498
65521
|
* — the subset check on `setUserScopes` is moot
|
|
@@ -65548,10 +65571,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
65548
65571
|
}), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
|
|
65549
65572
|
kind: "mutation",
|
|
65550
65573
|
access: "view"
|
|
65551
|
-
}), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
|
|
65552
|
-
kind: "mutation",
|
|
65553
|
-
auth: "admin",
|
|
65554
|
-
access: "delete"
|
|
65555
65574
|
}), method(object({ userId: string() }), TotpSetupResultSchema, {
|
|
65556
65575
|
kind: "mutation",
|
|
65557
65576
|
auth: "admin",
|
|
@@ -75011,6 +75030,12 @@ Object.freeze({
|
|
|
75011
75030
|
addonId: null,
|
|
75012
75031
|
access: "view"
|
|
75013
75032
|
},
|
|
75033
|
+
"records.transact": {
|
|
75034
|
+
capName: "records",
|
|
75035
|
+
capScope: "system",
|
|
75036
|
+
addonId: null,
|
|
75037
|
+
access: "create"
|
|
75038
|
+
},
|
|
75014
75039
|
"sceneMonitor.captureReference": {
|
|
75015
75040
|
capName: "scene-monitor",
|
|
75016
75041
|
capScope: "device",
|
|
@@ -76343,12 +76368,6 @@ Object.freeze({
|
|
|
76343
76368
|
addonId: null,
|
|
76344
76369
|
access: "view"
|
|
76345
76370
|
},
|
|
76346
|
-
"userManagement.listApiKeys": {
|
|
76347
|
-
capName: "user-management",
|
|
76348
|
-
capScope: "system",
|
|
76349
|
-
addonId: null,
|
|
76350
|
-
access: "view"
|
|
76351
|
-
},
|
|
76352
76371
|
"userManagement.listExternalIdentities": {
|
|
76353
76372
|
capName: "user-management",
|
|
76354
76373
|
capScope: "system",
|
|
@@ -76403,12 +76422,6 @@ Object.freeze({
|
|
|
76403
76422
|
addonId: null,
|
|
76404
76423
|
access: "create"
|
|
76405
76424
|
},
|
|
76406
|
-
"userManagement.revokeApiKey": {
|
|
76407
|
-
capName: "user-management",
|
|
76408
|
-
capScope: "system",
|
|
76409
|
-
addonId: null,
|
|
76410
|
-
access: "delete"
|
|
76411
|
-
},
|
|
76412
76425
|
"userManagement.revokeOauthSession": {
|
|
76413
76426
|
capName: "user-management",
|
|
76414
76427
|
capScope: "system",
|
|
@@ -79979,9 +79992,13 @@ new Map(Object.entries({
|
|
|
79979
79992
|
"stream-online": "device-events",
|
|
79980
79993
|
"stream-offline": "device-events",
|
|
79981
79994
|
"detection-blind": "device-events",
|
|
79995
|
+
"motion-noisy": "device-events",
|
|
79996
|
+
"motion-calm": "device-events",
|
|
79982
79997
|
"recording-stalled": "device-events",
|
|
79983
79998
|
"recording-healthy": "device-events",
|
|
79984
79999
|
"recording-degraded": "device-events",
|
|
80000
|
+
"device-attention-required": "device-events",
|
|
80001
|
+
"device-attention-resolved": "device-events",
|
|
79985
80002
|
"node-online": "system",
|
|
79986
80003
|
"node-offline": "system",
|
|
79987
80004
|
"node-restarting": "system",
|
|
@@ -80064,6 +80081,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
80064
80081
|
label: "Detecting nothing",
|
|
80065
80082
|
kinds: ["detection-blind"]
|
|
80066
80083
|
},
|
|
80084
|
+
{
|
|
80085
|
+
id: "motion-noise",
|
|
80086
|
+
family: "device-events",
|
|
80087
|
+
label: "Motion without a subject",
|
|
80088
|
+
kinds: ["motion-noisy", "motion-calm"]
|
|
80089
|
+
},
|
|
80067
80090
|
{
|
|
80068
80091
|
id: "recording",
|
|
80069
80092
|
family: "device-events",
|
|
@@ -80074,6 +80097,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
80074
80097
|
"recording-degraded"
|
|
80075
80098
|
]
|
|
80076
80099
|
},
|
|
80100
|
+
{
|
|
80101
|
+
id: "device-attention",
|
|
80102
|
+
family: "device-events",
|
|
80103
|
+
label: "Needs attention",
|
|
80104
|
+
kinds: ["device-attention-required", "device-attention-resolved"]
|
|
80105
|
+
},
|
|
80077
80106
|
{
|
|
80078
80107
|
id: "nodes",
|
|
80079
80108
|
family: "system",
|
|
@@ -80213,6 +80242,7 @@ var ALERT_EPISODE = [
|
|
|
80213
80242
|
"alert-error",
|
|
80214
80243
|
"alert-critical-resolved"
|
|
80215
80244
|
];
|
|
80245
|
+
var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
|
|
80216
80246
|
var UPDATES = [
|
|
80217
80247
|
"addon-update-available",
|
|
80218
80248
|
"server-update-available",
|
|
@@ -80242,9 +80272,12 @@ var DEVICE_EVENTS = [
|
|
|
80242
80272
|
"stream-online",
|
|
80243
80273
|
"stream-offline",
|
|
80244
80274
|
"detection-blind",
|
|
80275
|
+
"motion-noisy",
|
|
80276
|
+
"motion-calm",
|
|
80245
80277
|
"recording-stalled",
|
|
80246
80278
|
"recording-healthy",
|
|
80247
80279
|
"recording-degraded",
|
|
80280
|
+
...DEVICE_ATTENTION,
|
|
80248
80281
|
...ALARM
|
|
80249
80282
|
];
|
|
80250
80283
|
/** Every kind a summary may speak about — the two summarisable families. */
|
|
@@ -80412,7 +80445,9 @@ var STATE_SUMMARY_VARS = [
|
|
|
80412
80445
|
[...RULE_TEXT],
|
|
80413
80446
|
[...RULE_TEXT],
|
|
80414
80447
|
[...RULE_TEXT],
|
|
80415
|
-
|
|
80448
|
+
[...RULE_TEXT],
|
|
80449
|
+
[...RULE_TEXT],
|
|
80450
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80416
80451
|
[...RULE_TEXT],
|
|
80417
80452
|
[...RULE_TEXT],
|
|
80418
80453
|
[...RULE_TEXT],
|
|
@@ -80434,11 +80469,11 @@ var STATE_SUMMARY_VARS = [
|
|
|
80434
80469
|
[...RULE_TEXT],
|
|
80435
80470
|
[...RULE_TEXT],
|
|
80436
80471
|
[...RULE_TEXT],
|
|
80472
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80437
80473
|
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80474
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80438
80475
|
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80439
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80440
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80441
|
-
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
80476
|
+
([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
|
|
80442
80477
|
[...RULE_TEXT],
|
|
80443
80478
|
[...RULE_TEXT],
|
|
80444
80479
|
[...RULE_TEXT],
|
|
@@ -80514,6 +80549,15 @@ new Map([
|
|
|
80514
80549
|
snapshotLabel: "Tanks low or full now",
|
|
80515
80550
|
snapshotSection: "tanks"
|
|
80516
80551
|
},
|
|
80552
|
+
{
|
|
80553
|
+
id: "motion-noise",
|
|
80554
|
+
family: "device-events",
|
|
80555
|
+
label: "Motion without a subject (constant / calm again)",
|
|
80556
|
+
bad: ["motion-noisy"],
|
|
80557
|
+
recovery: ["motion-calm"],
|
|
80558
|
+
snapshotLabel: "Cameras with constant motion now",
|
|
80559
|
+
snapshotSection: null
|
|
80560
|
+
},
|
|
80517
80561
|
{
|
|
80518
80562
|
id: "recording-health",
|
|
80519
80563
|
family: "device-events",
|
|
@@ -80523,6 +80567,15 @@ new Map([
|
|
|
80523
80567
|
snapshotLabel: "Recordings stalled now",
|
|
80524
80568
|
snapshotSection: null
|
|
80525
80569
|
},
|
|
80570
|
+
{
|
|
80571
|
+
id: "device-attention",
|
|
80572
|
+
family: "device-events",
|
|
80573
|
+
label: "Device needs attention (raised / resolved)",
|
|
80574
|
+
bad: ["device-attention-required"],
|
|
80575
|
+
recovery: ["device-attention-resolved"],
|
|
80576
|
+
snapshotLabel: "Devices needing attention now",
|
|
80577
|
+
snapshotSection: null
|
|
80578
|
+
},
|
|
80526
80579
|
{
|
|
80527
80580
|
id: "node-connectivity",
|
|
80528
80581
|
family: "system",
|
|
@@ -82780,7 +82833,7 @@ function buildExtrasSections(snap) {
|
|
|
82780
82833
|
tab: "image",
|
|
82781
82834
|
title: "IR + status LED",
|
|
82782
82835
|
titleKey: "provider-amcrest:extrasSections.s_ir-lights.title",
|
|
82783
|
-
description: "
|
|
82836
|
+
description: "`Auto` follows ambient light; `Manual` forces the LEDs on at the set brightness.",
|
|
82784
82837
|
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.description",
|
|
82785
82838
|
columns: 2,
|
|
82786
82839
|
fields: [
|
|
@@ -82813,8 +82866,6 @@ function buildExtrasSections(snap) {
|
|
|
82813
82866
|
key: "irLightBrightness",
|
|
82814
82867
|
label: "IR brightness",
|
|
82815
82868
|
labelKey: "provider-amcrest:extrasSections.s_ir-lights.irLightBrightness.label",
|
|
82816
|
-
description: "IR LED output (`MiddleLight[0].Light`, 0–100). Applied in Auto and Manual modes.",
|
|
82817
|
-
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.irLightBrightness.description",
|
|
82818
82869
|
min: 0,
|
|
82819
82870
|
max: 100,
|
|
82820
82871
|
step: 5,
|
|
@@ -82827,8 +82878,6 @@ function buildExtrasSections(snap) {
|
|
|
82827
82878
|
key: "statusLedEnabled",
|
|
82828
82879
|
label: "Status LED",
|
|
82829
82880
|
labelKey: "provider-amcrest:extrasSections.s_ir-lights.statusLedEnabled.label",
|
|
82830
|
-
description: "The visible indicator LED on the camera body (`LightGlobal[0].Enable`).",
|
|
82831
|
-
descriptionKey: "provider-amcrest:extrasSections.s_ir-lights.statusLedEnabled.description",
|
|
82832
82881
|
default: snap.statusLedEnabled ?? true,
|
|
82833
82882
|
style: "switch",
|
|
82834
82883
|
span: 2
|
|
@@ -82840,7 +82889,7 @@ function buildExtrasSections(snap) {
|
|
|
82840
82889
|
tab: "network",
|
|
82841
82890
|
title: "Time / NTP",
|
|
82842
82891
|
titleKey: "provider-amcrest:extrasSections.s_time-ntp.title",
|
|
82843
|
-
description: "
|
|
82892
|
+
description: "With NTP disabled this camera's clock drifts badly.",
|
|
82844
82893
|
descriptionKey: "provider-amcrest:extrasSections.s_time-ntp.description",
|
|
82845
82894
|
columns: 2,
|
|
82846
82895
|
fields: [
|
|
@@ -82887,7 +82936,7 @@ function buildExtrasSections(snap) {
|
|
|
82887
82936
|
key: "ntpTimeZoneIndex",
|
|
82888
82937
|
label: "Timezone index (Dahua, 0–33)",
|
|
82889
82938
|
labelKey: "provider-amcrest:extrasSections.s_time-ntp.ntpTimeZoneIndex.label",
|
|
82890
|
-
description: "
|
|
82939
|
+
description: "Dahua numeric index (0–33) from the camera web UI timezone list, not an IANA zone. 26 = GMT+8.",
|
|
82891
82940
|
descriptionKey: "provider-amcrest:extrasSections.s_time-ntp.ntpTimeZoneIndex.description",
|
|
82892
82941
|
default: snap.ntpTimeZoneIndex ?? 26,
|
|
82893
82942
|
min: 0,
|
|
@@ -82902,8 +82951,6 @@ function buildExtrasSections(snap) {
|
|
|
82902
82951
|
tab: "advanced",
|
|
82903
82952
|
title: "Auto reboot",
|
|
82904
82953
|
titleKey: "provider-amcrest:extrasSections.s_auto-reboot.title",
|
|
82905
|
-
description: "Scheduled automatic reboot (`AutoMaintain.AutoReboot*`). Choose a day (or every day) + time; the camera reboots once per matching window.",
|
|
82906
|
-
descriptionKey: "provider-amcrest:extrasSections.s_auto-reboot.description",
|
|
82907
82954
|
columns: 2,
|
|
82908
82955
|
fields: [
|
|
82909
82956
|
{
|
|
@@ -83558,8 +83605,6 @@ var AmcrestCamera = class AmcrestCamera extends BaseDevice {
|
|
|
83558
83605
|
tab: "general",
|
|
83559
83606
|
title: "Connection",
|
|
83560
83607
|
titleKey: "provider-amcrest:schema.s_connection.title",
|
|
83561
|
-
description: "Dahua CGI HTTP(S) endpoint + Digest credentials. RTSP is always port 554.",
|
|
83562
|
-
descriptionKey: "provider-amcrest:schema.s_connection.description",
|
|
83563
83608
|
columns: 2,
|
|
83564
83609
|
fields: [
|
|
83565
83610
|
{
|
|
@@ -97847,8 +97892,6 @@ function buildCreationFormSchema() {
|
|
|
97847
97892
|
id: "credentials",
|
|
97848
97893
|
title: "Credentials",
|
|
97849
97894
|
titleKey: "provider-amcrest:creation.s_credentials.title",
|
|
97850
|
-
description: "Dahua CGI uses HTTP Digest auth — no plaintext password on the wire even over HTTP. Required for the host probe.",
|
|
97851
|
-
descriptionKey: "provider-amcrest:creation.s_credentials.description",
|
|
97852
97895
|
columns: 2,
|
|
97853
97896
|
fields: [{
|
|
97854
97897
|
type: "text",
|
|
@@ -97870,7 +97913,7 @@ function buildCreationFormSchema() {
|
|
|
97870
97913
|
id: "connection",
|
|
97871
97914
|
title: "Connection",
|
|
97872
97915
|
titleKey: "provider-amcrest:creation.s_connection.title",
|
|
97873
|
-
description: "
|
|
97916
|
+
description: "Use 443 with HTTPS for cameras with TLS enabled.",
|
|
97874
97917
|
descriptionKey: "provider-amcrest:creation.s_connection.description",
|
|
97875
97918
|
columns: 2,
|
|
97876
97919
|
fields: [
|
|
@@ -97916,7 +97959,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
97916
97959
|
id: "credentials",
|
|
97917
97960
|
title: "Credentials",
|
|
97918
97961
|
titleKey: "provider-amcrest:discoveryParams.s_credentials.title",
|
|
97919
|
-
description: "
|
|
97962
|
+
description: "Assumes all cameras share these credentials.",
|
|
97920
97963
|
descriptionKey: "provider-amcrest:discoveryParams.s_credentials.description",
|
|
97921
97964
|
columns: 2,
|
|
97922
97965
|
fields: [{
|
|
@@ -97938,7 +97981,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
97938
97981
|
id: "scan",
|
|
97939
97982
|
title: "Scan options",
|
|
97940
97983
|
titleKey: "provider-amcrest:discoveryParams.s_scan.title",
|
|
97941
|
-
description: "
|
|
97984
|
+
description: "Leave blank to scan the hub's own subnet; enter the CIDR if the cameras are on another one (e.g. 192.168.60.0/24).",
|
|
97942
97985
|
descriptionKey: "provider-amcrest:discoveryParams.s_scan.description",
|
|
97943
97986
|
columns: 1,
|
|
97944
97987
|
fields: [{
|
package/i18n/en.json
CHANGED
|
@@ -2,24 +2,22 @@
|
|
|
2
2
|
"creation.s_identity.title": "Camera",
|
|
3
3
|
"creation.s_identity.name.label": "Name",
|
|
4
4
|
"creation.s_credentials.title": "Credentials",
|
|
5
|
-
"creation.s_credentials.description": "Dahua CGI uses HTTP Digest auth — no plaintext password on the wire even over HTTP. Required for the host probe.",
|
|
6
5
|
"creation.s_credentials.username.label": "Username",
|
|
7
6
|
"creation.s_credentials.password.label": "Password",
|
|
8
7
|
"creation.s_connection.title": "Connection",
|
|
9
|
-
"creation.s_connection.description": "
|
|
8
|
+
"creation.s_connection.description": "Use 443 with HTTPS for cameras with TLS enabled.",
|
|
10
9
|
"creation.s_connection.host.label": "Camera IP",
|
|
11
10
|
"creation.s_connection.port.label": "Port",
|
|
12
11
|
"creation.s_connection.https.label": "Use HTTPS",
|
|
13
12
|
"discoveryParams.s_credentials.title": "Credentials",
|
|
14
|
-
"discoveryParams.s_credentials.description": "
|
|
13
|
+
"discoveryParams.s_credentials.description": "Assumes all cameras share these credentials.",
|
|
15
14
|
"discoveryParams.s_credentials.username.label": "Username",
|
|
16
15
|
"discoveryParams.s_credentials.password.label": "Password",
|
|
17
16
|
"discoveryParams.s_scan.title": "Scan options",
|
|
18
|
-
"discoveryParams.s_scan.description": "
|
|
17
|
+
"discoveryParams.s_scan.description": "Leave blank to scan the hub's own subnet; enter the CIDR if the cameras are on another one (e.g. 192.168.60.0/24).",
|
|
19
18
|
"discoveryParams.s_scan.networkCidr.label": "Network (CIDR) — required if cameras are on a different subnet than the hub",
|
|
20
19
|
"discoveryParams.s_scan.timeoutMs.label": "WS-Discovery timeout (ms)",
|
|
21
20
|
"schema.s_connection.title": "Connection",
|
|
22
|
-
"schema.s_connection.description": "Dahua CGI HTTP(S) endpoint + Digest credentials. RTSP is always port 554.",
|
|
23
21
|
"schema.s_connection.host.label": "Camera IP",
|
|
24
22
|
"schema.s_connection.port.label": "Port",
|
|
25
23
|
"schema.s_connection.https.label": "Use HTTPS",
|
|
@@ -27,25 +25,22 @@
|
|
|
27
25
|
"schema.s_connection.username.label": "Username",
|
|
28
26
|
"schema.s_connection.password.label": "Password",
|
|
29
27
|
"extrasSections.s_ir-lights.title": "IR + status LED",
|
|
30
|
-
"extrasSections.s_ir-lights.description": "
|
|
28
|
+
"extrasSections.s_ir-lights.description": "`Auto` follows ambient light; `Manual` forces the LEDs on at the set brightness.",
|
|
31
29
|
"extrasSections.s_ir-lights.irLightMode.label": "IR illuminator",
|
|
32
30
|
"extrasSections.s_ir-lights.irLightMode.o_Auto.label": "Auto (camera decides)",
|
|
33
31
|
"extrasSections.s_ir-lights.irLightMode.o_Manual.label": "Always on",
|
|
34
32
|
"extrasSections.s_ir-lights.irLightMode.o_Off.label": "Always off",
|
|
35
33
|
"extrasSections.s_ir-lights.irLightBrightness.label": "IR brightness",
|
|
36
|
-
"extrasSections.s_ir-lights.irLightBrightness.description": "IR LED output (`MiddleLight[0].Light`, 0–100). Applied in Auto and Manual modes.",
|
|
37
34
|
"extrasSections.s_ir-lights.statusLedEnabled.label": "Status LED",
|
|
38
|
-
"extrasSections.s_ir-lights.statusLedEnabled.description": "The visible indicator LED on the camera body (`LightGlobal[0].Enable`).",
|
|
39
35
|
"extrasSections.s_time-ntp.title": "Time / NTP",
|
|
40
|
-
"extrasSections.s_time-ntp.description": "
|
|
36
|
+
"extrasSections.s_time-ntp.description": "With NTP disabled this camera's clock drifts badly.",
|
|
41
37
|
"extrasSections.s_time-ntp.ntpEnabled.label": "NTP sync",
|
|
42
38
|
"extrasSections.s_time-ntp.ntpServer.label": "NTP server",
|
|
43
39
|
"extrasSections.s_time-ntp.ntpPort.label": "NTP port",
|
|
44
40
|
"extrasSections.s_time-ntp.ntpUpdatePeriodMin.label": "Sync interval (min)",
|
|
45
41
|
"extrasSections.s_time-ntp.ntpTimeZoneIndex.label": "Timezone index (Dahua, 0–33)",
|
|
46
|
-
"extrasSections.s_time-ntp.ntpTimeZoneIndex.description": "
|
|
42
|
+
"extrasSections.s_time-ntp.ntpTimeZoneIndex.description": "Dahua numeric index (0–33) from the camera web UI timezone list, not an IANA zone. 26 = GMT+8.",
|
|
47
43
|
"extrasSections.s_auto-reboot.title": "Auto reboot",
|
|
48
|
-
"extrasSections.s_auto-reboot.description": "Scheduled automatic reboot (`AutoMaintain.AutoReboot*`). Choose a day (or every day) + time; the camera reboots once per matching window.",
|
|
49
44
|
"extrasSections.s_auto-reboot.autoRebootEnabled.label": "Auto reboot",
|
|
50
45
|
"extrasSections.s_auto-reboot.autoRebootDay.label": "Day",
|
|
51
46
|
"extrasSections.s_auto-reboot.autoRebootDay.o_7.label": "Every day",
|
package/i18n/it.json
CHANGED
|
@@ -2,24 +2,22 @@
|
|
|
2
2
|
"creation.s_identity.title": "Telecamera",
|
|
3
3
|
"creation.s_identity.name.label": "Nome",
|
|
4
4
|
"creation.s_credentials.title": "Credenziali",
|
|
5
|
-
"creation.s_credentials.description": "Dahua CGI usa l'autenticazione HTTP Digest: nessuna password in chiaro sulla rete, anche su HTTP. Necessaria per il probe dell'host.",
|
|
6
5
|
"creation.s_credentials.username.label": "Nome utente",
|
|
7
6
|
"creation.s_credentials.password.label": "Password",
|
|
8
7
|
"creation.s_connection.title": "Connessione",
|
|
9
|
-
"creation.s_connection.description": "
|
|
8
|
+
"creation.s_connection.description": "Usa 443 con HTTPS per le camere con TLS attivo.",
|
|
10
9
|
"creation.s_connection.host.label": "IP della telecamera",
|
|
11
10
|
"creation.s_connection.port.label": "Porta",
|
|
12
11
|
"creation.s_connection.https.label": "Usa HTTPS",
|
|
13
12
|
"discoveryParams.s_credentials.title": "Credenziali",
|
|
14
|
-
"discoveryParams.s_credentials.description": "
|
|
13
|
+
"discoveryParams.s_credentials.description": "Presuppone che tutte le camere abbiano le stesse credenziali.",
|
|
15
14
|
"discoveryParams.s_credentials.username.label": "Nome utente",
|
|
16
15
|
"discoveryParams.s_credentials.password.label": "Password",
|
|
17
16
|
"discoveryParams.s_scan.title": "Opzioni di scansione",
|
|
18
|
-
"discoveryParams.s_scan.description": "
|
|
17
|
+
"discoveryParams.s_scan.description": "Lascia vuoto per scansionare la subnet dell'hub; inserisci il CIDR se le camere sono su un'altra subnet (es. 192.168.60.0/24).",
|
|
19
18
|
"discoveryParams.s_scan.networkCidr.label": "Rete (CIDR): obbligatoria se le telecamere sono su una sottorete diversa dall'hub",
|
|
20
19
|
"discoveryParams.s_scan.timeoutMs.label": "Timeout WS-Discovery (ms)",
|
|
21
20
|
"schema.s_connection.title": "Connessione",
|
|
22
|
-
"schema.s_connection.description": "Endpoint HTTP(S) Dahua CGI + credenziali Digest. RTSP usa sempre la porta 554.",
|
|
23
21
|
"schema.s_connection.host.label": "IP della telecamera",
|
|
24
22
|
"schema.s_connection.port.label": "Porta",
|
|
25
23
|
"schema.s_connection.https.label": "Usa HTTPS",
|
|
@@ -27,25 +25,22 @@
|
|
|
27
25
|
"schema.s_connection.username.label": "Nome utente",
|
|
28
26
|
"schema.s_connection.password.label": "Password",
|
|
29
27
|
"extrasSections.s_ir-lights.title": "IR + LED di stato",
|
|
30
|
-
"extrasSections.s_ir-lights.description": "
|
|
28
|
+
"extrasSections.s_ir-lights.description": "`Auto` segue la luce ambientale; `Manual` accende i LED alla luminosità impostata.",
|
|
31
29
|
"extrasSections.s_ir-lights.irLightMode.label": "Illuminatore IR",
|
|
32
30
|
"extrasSections.s_ir-lights.irLightMode.o_Auto.label": "Automatico (decide la telecamera)",
|
|
33
31
|
"extrasSections.s_ir-lights.irLightMode.o_Manual.label": "Sempre acceso",
|
|
34
32
|
"extrasSections.s_ir-lights.irLightMode.o_Off.label": "Sempre spento",
|
|
35
33
|
"extrasSections.s_ir-lights.irLightBrightness.label": "Luminosità IR",
|
|
36
|
-
"extrasSections.s_ir-lights.irLightBrightness.description": "Potenza dei LED IR (`MiddleLight[0].Light`, 0–100). Applicata nelle modalità Automatico e Manuale.",
|
|
37
34
|
"extrasSections.s_ir-lights.statusLedEnabled.label": "LED di stato",
|
|
38
|
-
"extrasSections.s_ir-lights.statusLedEnabled.description": "L'indicatore visibile sul corpo della telecamera (`LightGlobal[0].Enable`).",
|
|
39
35
|
"extrasSections.s_time-ntp.title": "Ora / NTP",
|
|
40
|
-
"extrasSections.s_time-ntp.description": "
|
|
36
|
+
"extrasSections.s_time-ntp.description": "Con NTP disattivato l'orologio di questa camera va fuori sincrono.",
|
|
41
37
|
"extrasSections.s_time-ntp.ntpEnabled.label": "Sincronizzazione NTP",
|
|
42
38
|
"extrasSections.s_time-ntp.ntpServer.label": "Server NTP",
|
|
43
39
|
"extrasSections.s_time-ntp.ntpPort.label": "Porta NTP",
|
|
44
40
|
"extrasSections.s_time-ntp.ntpUpdatePeriodMin.label": "Intervallo di sincronizzazione (min)",
|
|
45
41
|
"extrasSections.s_time-ntp.ntpTimeZoneIndex.label": "Indice del fuso orario (Dahua, 0–33)",
|
|
46
|
-
"extrasSections.s_time-ntp.ntpTimeZoneIndex.description": "Indice numerico
|
|
42
|
+
"extrasSections.s_time-ntp.ntpTimeZoneIndex.description": "Indice numerico Dahua (0–33) dalla lista dei fusi orari della web UI della camera, non una zona IANA. 26 = GMT+8.",
|
|
47
43
|
"extrasSections.s_auto-reboot.title": "Riavvio automatico",
|
|
48
|
-
"extrasSections.s_auto-reboot.description": "Riavvio automatico programmato (`AutoMaintain.AutoReboot*`). Scegli un giorno (o ogni giorno) e un orario; la telecamera si riavvia una volta per ogni finestra corrispondente.",
|
|
49
44
|
"extrasSections.s_auto-reboot.autoRebootEnabled.label": "Riavvio automatico",
|
|
50
45
|
"extrasSections.s_auto-reboot.autoRebootDay.label": "Giorno",
|
|
51
46
|
"extrasSections.s_auto-reboot.autoRebootDay.o_7.label": "Ogni giorno",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-amcrest",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.153",
|
|
4
4
|
"description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|