@camstack/addon-provider-onvif 1.2.120 → 1.2.121
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 +123 -77
- package/dist/addon.mjs +123 -77
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -10533,11 +10533,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10533
10533
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10534
10534
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10535
10535
|
/**
|
|
10536
|
-
*
|
|
10537
|
-
*
|
|
10538
|
-
*
|
|
10536
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10537
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10538
|
+
* label is "Test".
|
|
10539
10539
|
*/
|
|
10540
|
-
optimization: _enum(["standard", "
|
|
10540
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10541
10541
|
/**
|
|
10542
10542
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10543
10543
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10560,9 +10560,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10560
10560
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10561
10561
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10562
10562
|
*
|
|
10563
|
-
* Every licence surface (the
|
|
10564
|
-
*
|
|
10565
|
-
*
|
|
10563
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10564
|
+
* model table) is GENERATED from these records by
|
|
10565
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10566
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10566
10567
|
*/
|
|
10567
10568
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10568
10569
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14091,7 +14092,7 @@ DeviceType.Camera;
|
|
|
14091
14092
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14092
14093
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14093
14094
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14094
|
-
* and `http://admin:hunter2@192.168.
|
|
14095
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14095
14096
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14096
14097
|
* filling it is the operator's business, not ours.
|
|
14097
14098
|
*
|
|
@@ -17269,7 +17270,7 @@ method(object({
|
|
|
17269
17270
|
timeoutMs: 6e5
|
|
17270
17271
|
});
|
|
17271
17272
|
method(object({
|
|
17272
|
-
|
|
17273
|
+
targetNodeId: string(),
|
|
17273
17274
|
modelId: string(),
|
|
17274
17275
|
format: _enum(MODEL_FORMATS),
|
|
17275
17276
|
entry: ModelCatalogEntrySchema
|
|
@@ -19735,8 +19736,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19735
19736
|
disabledTargetIds: array(string()).default([])
|
|
19736
19737
|
});
|
|
19737
19738
|
/**
|
|
19738
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19739
|
-
* still-true state. `
|
|
19739
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19740
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19741
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19740
19742
|
* job is not an open state, and the alarm stays instant.
|
|
19741
19743
|
*/
|
|
19742
19744
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19748,6 +19750,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19748
19750
|
"detection-blind",
|
|
19749
19751
|
"nodes",
|
|
19750
19752
|
"addons",
|
|
19753
|
+
"addon-updates",
|
|
19751
19754
|
"updates"
|
|
19752
19755
|
]);
|
|
19753
19756
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20228,7 +20231,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20228
20231
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20229
20232
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20230
20233
|
*/
|
|
20231
|
-
schedule: NcScheduleSchema.optional()
|
|
20234
|
+
schedule: NcScheduleSchema.optional(),
|
|
20235
|
+
/**
|
|
20236
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20237
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20238
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20239
|
+
*/
|
|
20240
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20241
|
+
/**
|
|
20242
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20243
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20244
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20245
|
+
*/
|
|
20246
|
+
notifySensorRewatched: boolean().optional()
|
|
20232
20247
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20233
20248
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20234
20249
|
mode: AlarmArmModeSchema,
|
|
@@ -20237,7 +20252,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20237
20252
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20238
20253
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20239
20254
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20240
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20255
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20256
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20257
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20258
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20259
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20241
20260
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20242
20261
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20243
20262
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21198,39 +21217,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21198
21217
|
label: "Face recognition model",
|
|
21199
21218
|
defaultModelId: "auraface-r100",
|
|
21200
21219
|
indexName: "the enrolled face gallery",
|
|
21201
|
-
options: [
|
|
21202
|
-
|
|
21203
|
-
|
|
21204
|
-
|
|
21205
|
-
},
|
|
21206
|
-
{
|
|
21207
|
-
id: "arcface-r100",
|
|
21208
|
-
label: "ArcFace (ResNet34)"
|
|
21209
|
-
},
|
|
21210
|
-
{
|
|
21211
|
-
id: "inception-resnet-v1",
|
|
21212
|
-
label: "Inception ResNet V1"
|
|
21213
|
-
}
|
|
21214
|
-
]
|
|
21220
|
+
options: [{
|
|
21221
|
+
id: "auraface-r100",
|
|
21222
|
+
label: "AuraFace R100"
|
|
21223
|
+
}]
|
|
21215
21224
|
}, {
|
|
21216
21225
|
stepId: "clip-embedding",
|
|
21217
21226
|
label: "Semantic search model",
|
|
21218
|
-
defaultModelId: "
|
|
21227
|
+
defaultModelId: "siglip2-b16-224",
|
|
21219
21228
|
indexName: "the object semantic-search index",
|
|
21220
|
-
options: [
|
|
21221
|
-
|
|
21222
|
-
|
|
21223
|
-
|
|
21224
|
-
},
|
|
21225
|
-
{
|
|
21226
|
-
id: "mobileclip-s2",
|
|
21227
|
-
label: "MobileCLIP S2"
|
|
21228
|
-
},
|
|
21229
|
-
{
|
|
21230
|
-
id: "siglip2-b16-224",
|
|
21231
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21232
|
-
}
|
|
21233
|
-
]
|
|
21229
|
+
options: [{
|
|
21230
|
+
id: "siglip2-b16-224",
|
|
21231
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21232
|
+
}]
|
|
21234
21233
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21235
21234
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21236
21235
|
stepId: "face-embedding",
|
|
@@ -24078,6 +24077,22 @@ var MotionSourceEnum = _enum([
|
|
|
24078
24077
|
"device-activity"
|
|
24079
24078
|
]);
|
|
24080
24079
|
/**
|
|
24080
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24081
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24082
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24083
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24084
|
+
* absent when unknown or when the camera itself triggered.
|
|
24085
|
+
*
|
|
24086
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24087
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24088
|
+
* runner never decides anything on it.
|
|
24089
|
+
*/
|
|
24090
|
+
var SessionTriggerSchema = object({
|
|
24091
|
+
source: MotionSourceEnum,
|
|
24092
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24093
|
+
sensorName: string().optional()
|
|
24094
|
+
});
|
|
24095
|
+
/**
|
|
24081
24096
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24082
24097
|
* "no source" — happens for battery cams without firmware motion when
|
|
24083
24098
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24329,6 +24344,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24329
24344
|
*/
|
|
24330
24345
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24331
24346
|
/**
|
|
24347
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24348
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24349
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24350
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24351
|
+
* runner then names no source on the phase event.
|
|
24352
|
+
*/
|
|
24353
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24354
|
+
/**
|
|
24332
24355
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24333
24356
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24334
24357
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30656,7 +30679,7 @@ var LocalInterfaceSchema = object({
|
|
|
30656
30679
|
name: string(),
|
|
30657
30680
|
family: _enum(["IPv4", "IPv6"]),
|
|
30658
30681
|
address: string(),
|
|
30659
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30682
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30660
30683
|
cidr: string(),
|
|
30661
30684
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30662
30685
|
netmask: string(),
|
|
@@ -30710,7 +30733,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30710
30733
|
"lan-ipv4",
|
|
30711
30734
|
"lan-ipv6",
|
|
30712
30735
|
"public",
|
|
30713
|
-
"loopback"
|
|
30736
|
+
"loopback",
|
|
30737
|
+
"app-link"
|
|
30714
30738
|
]),
|
|
30715
30739
|
/**
|
|
30716
30740
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30779,15 +30803,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30779
30803
|
localPort: AdvertisedLocalPortSchema
|
|
30780
30804
|
});
|
|
30781
30805
|
/**
|
|
30782
|
-
* The
|
|
30783
|
-
*
|
|
30784
|
-
*
|
|
30806
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30807
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30808
|
+
* so the UI can show it either way.
|
|
30785
30809
|
*/
|
|
30786
30810
|
var NotificationEndpointSchema = object({
|
|
30787
30811
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30788
30812
|
baseUrl: string().nullable(),
|
|
30789
|
-
/**
|
|
30790
|
-
|
|
30813
|
+
/**
|
|
30814
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30815
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30816
|
+
* answered the public tunnel / mesh here, or null.
|
|
30817
|
+
*/
|
|
30818
|
+
resolved: string().nullable(),
|
|
30819
|
+
/**
|
|
30820
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30821
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30822
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30823
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30824
|
+
* Absent on a pre-D709 hub.
|
|
30825
|
+
*/
|
|
30826
|
+
appLinkHub: string().nullable()
|
|
30791
30827
|
});
|
|
30792
30828
|
/**
|
|
30793
30829
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30841,7 +30877,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30841
30877
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30842
30878
|
* to avoid mixed-content blocks in the browser. The public
|
|
30843
30879
|
* tunnel always emits `https://` regardless. */
|
|
30844
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30880
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30881
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30882
|
+
* an address notification links can be flagged with, not a hub
|
|
30883
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30884
|
+
includeAppLink: boolean().optional()
|
|
30845
30885
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30846
30886
|
kind: "mutation",
|
|
30847
30887
|
auth: "admin"
|
|
@@ -31102,7 +31142,7 @@ var MeshPeerSchema = object({
|
|
|
31102
31142
|
tags: array(string()).readonly(),
|
|
31103
31143
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31104
31144
|
exitNodeOption: boolean(),
|
|
31105
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31145
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31106
31146
|
advertisedRoutes: array(string()).readonly(),
|
|
31107
31147
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31108
31148
|
userLogin: string().nullable(),
|
|
@@ -32046,7 +32086,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
32046
32086
|
*/
|
|
32047
32087
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
32048
32088
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
32049
|
-
readOnly: boolean().optional()
|
|
32089
|
+
readOnly: boolean().optional(),
|
|
32090
|
+
/**
|
|
32091
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32092
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32093
|
+
* copy on the binding.
|
|
32094
|
+
*/
|
|
32095
|
+
maxCharacters: number().int().positive().optional()
|
|
32050
32096
|
})).readonly() });
|
|
32051
32097
|
var OsdOverlayPatchSchema = object({
|
|
32052
32098
|
enabled: boolean().optional(),
|
|
@@ -32097,7 +32143,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32097
32143
|
valuePath: string().min(1).max(64),
|
|
32098
32144
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32099
32145
|
displayUnit: string().max(16).optional(),
|
|
32100
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32146
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32147
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32148
|
+
valueMap: record(string(), string()).optional()
|
|
32101
32149
|
});
|
|
32102
32150
|
/**
|
|
32103
32151
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32147,18 +32195,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32147
32195
|
source: OsdSourceSchema,
|
|
32148
32196
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32149
32197
|
template: string().max(96).default("${value}"),
|
|
32150
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32151
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32152
32198
|
/**
|
|
32153
32199
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32154
32200
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32155
32201
|
*/
|
|
32156
32202
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32157
|
-
/**
|
|
32158
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32159
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32160
|
-
*/
|
|
32161
|
-
unitLabel: string().max(8).optional(),
|
|
32162
32203
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32163
32204
|
valueMap: record(string(), string()).optional(),
|
|
32164
32205
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32167,9 +32208,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32167
32208
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32168
32209
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32169
32210
|
*/
|
|
32170
|
-
conditions: NcConditionsSchema.optional()
|
|
32171
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32172
|
-
fallbackText: string().max(64).default("")
|
|
32211
|
+
conditions: NcConditionsSchema.optional()
|
|
32173
32212
|
});
|
|
32174
32213
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32175
32214
|
var OsdSlotViewSchema = object({
|
|
@@ -48823,12 +48862,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
48823
48862
|
{
|
|
48824
48863
|
id: "addons",
|
|
48825
48864
|
family: "system",
|
|
48826
|
-
label: "Addons",
|
|
48827
|
-
kinds: [
|
|
48828
|
-
|
|
48829
|
-
|
|
48830
|
-
|
|
48831
|
-
|
|
48865
|
+
label: "Addons stopped",
|
|
48866
|
+
kinds: ["addon-crash-loop"]
|
|
48867
|
+
},
|
|
48868
|
+
{
|
|
48869
|
+
id: "addon-updates",
|
|
48870
|
+
family: "system",
|
|
48871
|
+
label: "Addon updates",
|
|
48872
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48832
48873
|
},
|
|
48833
48874
|
{
|
|
48834
48875
|
id: "updates",
|
|
@@ -48988,13 +49029,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48988
49029
|
},
|
|
48989
49030
|
{
|
|
48990
49031
|
name: "summaryAddons",
|
|
48991
|
-
label: "Summary: addons",
|
|
48992
|
-
example: "
|
|
48993
|
-
kinds: [
|
|
48994
|
-
|
|
48995
|
-
|
|
48996
|
-
|
|
48997
|
-
|
|
49032
|
+
label: "Summary: addons stopped",
|
|
49033
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
49034
|
+
kinds: ["addon-crash-loop"]
|
|
49035
|
+
},
|
|
49036
|
+
{
|
|
49037
|
+
name: "summaryAddonUpdates",
|
|
49038
|
+
label: "Summary: addon updates",
|
|
49039
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
49040
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48998
49041
|
},
|
|
48999
49042
|
{
|
|
49000
49043
|
name: "summaryUpdates",
|
|
@@ -49078,6 +49121,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
49078
49121
|
[...RULE_BODY_ONLY],
|
|
49079
49122
|
[...RULE_TEXT],
|
|
49080
49123
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
49124
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
49081
49125
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
49082
49126
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
49083
49127
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -49118,6 +49162,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
49118
49162
|
[...RULE_TEXT],
|
|
49119
49163
|
[...RULE_TEXT],
|
|
49120
49164
|
[...RULE_TEXT],
|
|
49165
|
+
[...RULE_TEXT],
|
|
49166
|
+
[...RULE_TEXT],
|
|
49121
49167
|
...STATE_SUMMARY_VARS
|
|
49122
49168
|
];
|
|
49123
49169
|
new Set([
|
|
@@ -59038,7 +59084,7 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
|
|
|
59038
59084
|
key: "host",
|
|
59039
59085
|
label: "Host",
|
|
59040
59086
|
required: true,
|
|
59041
|
-
placeholder: "192.168.
|
|
59087
|
+
placeholder: "192.168.10.10"
|
|
59042
59088
|
},
|
|
59043
59089
|
{
|
|
59044
59090
|
type: "number",
|
package/dist/addon.mjs
CHANGED
|
@@ -10534,11 +10534,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10534
10534
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10535
10535
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10536
10536
|
/**
|
|
10537
|
-
*
|
|
10538
|
-
*
|
|
10539
|
-
*
|
|
10537
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10538
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10539
|
+
* label is "Test".
|
|
10540
10540
|
*/
|
|
10541
|
-
optimization: _enum(["standard", "
|
|
10541
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10542
10542
|
/**
|
|
10543
10543
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10544
10544
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10561,9 +10561,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10561
10561
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10562
10562
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10563
10563
|
*
|
|
10564
|
-
* Every licence surface (the
|
|
10565
|
-
*
|
|
10566
|
-
*
|
|
10564
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10565
|
+
* model table) is GENERATED from these records by
|
|
10566
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10567
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10567
10568
|
*/
|
|
10568
10569
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10569
10570
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14092,7 +14093,7 @@ DeviceType.Camera;
|
|
|
14092
14093
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14093
14094
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14094
14095
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14095
|
-
* and `http://admin:hunter2@192.168.
|
|
14096
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14096
14097
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14097
14098
|
* filling it is the operator's business, not ours.
|
|
14098
14099
|
*
|
|
@@ -17270,7 +17271,7 @@ method(object({
|
|
|
17270
17271
|
timeoutMs: 6e5
|
|
17271
17272
|
});
|
|
17272
17273
|
method(object({
|
|
17273
|
-
|
|
17274
|
+
targetNodeId: string(),
|
|
17274
17275
|
modelId: string(),
|
|
17275
17276
|
format: _enum(MODEL_FORMATS),
|
|
17276
17277
|
entry: ModelCatalogEntrySchema
|
|
@@ -19736,8 +19737,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19736
19737
|
disabledTargetIds: array(string()).default([])
|
|
19737
19738
|
});
|
|
19738
19739
|
/**
|
|
19739
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19740
|
-
* still-true state. `
|
|
19740
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19741
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19742
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19741
19743
|
* job is not an open state, and the alarm stays instant.
|
|
19742
19744
|
*/
|
|
19743
19745
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19749,6 +19751,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19749
19751
|
"detection-blind",
|
|
19750
19752
|
"nodes",
|
|
19751
19753
|
"addons",
|
|
19754
|
+
"addon-updates",
|
|
19752
19755
|
"updates"
|
|
19753
19756
|
]);
|
|
19754
19757
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20229,7 +20232,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20229
20232
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20230
20233
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20231
20234
|
*/
|
|
20232
|
-
schedule: NcScheduleSchema.optional()
|
|
20235
|
+
schedule: NcScheduleSchema.optional(),
|
|
20236
|
+
/**
|
|
20237
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20238
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20239
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20240
|
+
*/
|
|
20241
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20242
|
+
/**
|
|
20243
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20244
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20245
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20246
|
+
*/
|
|
20247
|
+
notifySensorRewatched: boolean().optional()
|
|
20233
20248
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20234
20249
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20235
20250
|
mode: AlarmArmModeSchema,
|
|
@@ -20238,7 +20253,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20238
20253
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20239
20254
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20240
20255
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20241
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20256
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20257
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20258
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20259
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20260
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20242
20261
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20243
20262
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20244
20263
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21199,39 +21218,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21199
21218
|
label: "Face recognition model",
|
|
21200
21219
|
defaultModelId: "auraface-r100",
|
|
21201
21220
|
indexName: "the enrolled face gallery",
|
|
21202
|
-
options: [
|
|
21203
|
-
|
|
21204
|
-
|
|
21205
|
-
|
|
21206
|
-
},
|
|
21207
|
-
{
|
|
21208
|
-
id: "arcface-r100",
|
|
21209
|
-
label: "ArcFace (ResNet34)"
|
|
21210
|
-
},
|
|
21211
|
-
{
|
|
21212
|
-
id: "inception-resnet-v1",
|
|
21213
|
-
label: "Inception ResNet V1"
|
|
21214
|
-
}
|
|
21215
|
-
]
|
|
21221
|
+
options: [{
|
|
21222
|
+
id: "auraface-r100",
|
|
21223
|
+
label: "AuraFace R100"
|
|
21224
|
+
}]
|
|
21216
21225
|
}, {
|
|
21217
21226
|
stepId: "clip-embedding",
|
|
21218
21227
|
label: "Semantic search model",
|
|
21219
|
-
defaultModelId: "
|
|
21228
|
+
defaultModelId: "siglip2-b16-224",
|
|
21220
21229
|
indexName: "the object semantic-search index",
|
|
21221
|
-
options: [
|
|
21222
|
-
|
|
21223
|
-
|
|
21224
|
-
|
|
21225
|
-
},
|
|
21226
|
-
{
|
|
21227
|
-
id: "mobileclip-s2",
|
|
21228
|
-
label: "MobileCLIP S2"
|
|
21229
|
-
},
|
|
21230
|
-
{
|
|
21231
|
-
id: "siglip2-b16-224",
|
|
21232
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21233
|
-
}
|
|
21234
|
-
]
|
|
21230
|
+
options: [{
|
|
21231
|
+
id: "siglip2-b16-224",
|
|
21232
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21233
|
+
}]
|
|
21235
21234
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21236
21235
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21237
21236
|
stepId: "face-embedding",
|
|
@@ -24079,6 +24078,22 @@ var MotionSourceEnum = _enum([
|
|
|
24079
24078
|
"device-activity"
|
|
24080
24079
|
]);
|
|
24081
24080
|
/**
|
|
24081
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24082
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24083
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24084
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24085
|
+
* absent when unknown or when the camera itself triggered.
|
|
24086
|
+
*
|
|
24087
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24088
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24089
|
+
* runner never decides anything on it.
|
|
24090
|
+
*/
|
|
24091
|
+
var SessionTriggerSchema = object({
|
|
24092
|
+
source: MotionSourceEnum,
|
|
24093
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24094
|
+
sensorName: string().optional()
|
|
24095
|
+
});
|
|
24096
|
+
/**
|
|
24082
24097
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24083
24098
|
* "no source" — happens for battery cams without firmware motion when
|
|
24084
24099
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24330,6 +24345,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24330
24345
|
*/
|
|
24331
24346
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24332
24347
|
/**
|
|
24348
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24349
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24350
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24351
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24352
|
+
* runner then names no source on the phase event.
|
|
24353
|
+
*/
|
|
24354
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24355
|
+
/**
|
|
24333
24356
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24334
24357
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24335
24358
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30657,7 +30680,7 @@ var LocalInterfaceSchema = object({
|
|
|
30657
30680
|
name: string(),
|
|
30658
30681
|
family: _enum(["IPv4", "IPv6"]),
|
|
30659
30682
|
address: string(),
|
|
30660
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30683
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30661
30684
|
cidr: string(),
|
|
30662
30685
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30663
30686
|
netmask: string(),
|
|
@@ -30711,7 +30734,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30711
30734
|
"lan-ipv4",
|
|
30712
30735
|
"lan-ipv6",
|
|
30713
30736
|
"public",
|
|
30714
|
-
"loopback"
|
|
30737
|
+
"loopback",
|
|
30738
|
+
"app-link"
|
|
30715
30739
|
]),
|
|
30716
30740
|
/**
|
|
30717
30741
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30780,15 +30804,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30780
30804
|
localPort: AdvertisedLocalPortSchema
|
|
30781
30805
|
});
|
|
30782
30806
|
/**
|
|
30783
|
-
* The
|
|
30784
|
-
*
|
|
30785
|
-
*
|
|
30807
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30808
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30809
|
+
* so the UI can show it either way.
|
|
30786
30810
|
*/
|
|
30787
30811
|
var NotificationEndpointSchema = object({
|
|
30788
30812
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30789
30813
|
baseUrl: string().nullable(),
|
|
30790
|
-
/**
|
|
30791
|
-
|
|
30814
|
+
/**
|
|
30815
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30816
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30817
|
+
* answered the public tunnel / mesh here, or null.
|
|
30818
|
+
*/
|
|
30819
|
+
resolved: string().nullable(),
|
|
30820
|
+
/**
|
|
30821
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30822
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30823
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30824
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30825
|
+
* Absent on a pre-D709 hub.
|
|
30826
|
+
*/
|
|
30827
|
+
appLinkHub: string().nullable()
|
|
30792
30828
|
});
|
|
30793
30829
|
/**
|
|
30794
30830
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30842,7 +30878,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30842
30878
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30843
30879
|
* to avoid mixed-content blocks in the browser. The public
|
|
30844
30880
|
* tunnel always emits `https://` regardless. */
|
|
30845
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30881
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30882
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30883
|
+
* an address notification links can be flagged with, not a hub
|
|
30884
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30885
|
+
includeAppLink: boolean().optional()
|
|
30846
30886
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30847
30887
|
kind: "mutation",
|
|
30848
30888
|
auth: "admin"
|
|
@@ -31103,7 +31143,7 @@ var MeshPeerSchema = object({
|
|
|
31103
31143
|
tags: array(string()).readonly(),
|
|
31104
31144
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31105
31145
|
exitNodeOption: boolean(),
|
|
31106
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31146
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31107
31147
|
advertisedRoutes: array(string()).readonly(),
|
|
31108
31148
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31109
31149
|
userLogin: string().nullable(),
|
|
@@ -32047,7 +32087,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
32047
32087
|
*/
|
|
32048
32088
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
32049
32089
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
32050
|
-
readOnly: boolean().optional()
|
|
32090
|
+
readOnly: boolean().optional(),
|
|
32091
|
+
/**
|
|
32092
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32093
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32094
|
+
* copy on the binding.
|
|
32095
|
+
*/
|
|
32096
|
+
maxCharacters: number().int().positive().optional()
|
|
32051
32097
|
})).readonly() });
|
|
32052
32098
|
var OsdOverlayPatchSchema = object({
|
|
32053
32099
|
enabled: boolean().optional(),
|
|
@@ -32098,7 +32144,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32098
32144
|
valuePath: string().min(1).max(64),
|
|
32099
32145
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32100
32146
|
displayUnit: string().max(16).optional(),
|
|
32101
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32147
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32148
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32149
|
+
valueMap: record(string(), string()).optional()
|
|
32102
32150
|
});
|
|
32103
32151
|
/**
|
|
32104
32152
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32148,18 +32196,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32148
32196
|
source: OsdSourceSchema,
|
|
32149
32197
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32150
32198
|
template: string().max(96).default("${value}"),
|
|
32151
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32152
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32153
32199
|
/**
|
|
32154
32200
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32155
32201
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32156
32202
|
*/
|
|
32157
32203
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32158
|
-
/**
|
|
32159
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32160
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32161
|
-
*/
|
|
32162
|
-
unitLabel: string().max(8).optional(),
|
|
32163
32204
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32164
32205
|
valueMap: record(string(), string()).optional(),
|
|
32165
32206
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32168,9 +32209,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32168
32209
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32169
32210
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32170
32211
|
*/
|
|
32171
|
-
conditions: NcConditionsSchema.optional()
|
|
32172
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32173
|
-
fallbackText: string().max(64).default("")
|
|
32212
|
+
conditions: NcConditionsSchema.optional()
|
|
32174
32213
|
});
|
|
32175
32214
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32176
32215
|
var OsdSlotViewSchema = object({
|
|
@@ -48824,12 +48863,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
48824
48863
|
{
|
|
48825
48864
|
id: "addons",
|
|
48826
48865
|
family: "system",
|
|
48827
|
-
label: "Addons",
|
|
48828
|
-
kinds: [
|
|
48829
|
-
|
|
48830
|
-
|
|
48831
|
-
|
|
48832
|
-
|
|
48866
|
+
label: "Addons stopped",
|
|
48867
|
+
kinds: ["addon-crash-loop"]
|
|
48868
|
+
},
|
|
48869
|
+
{
|
|
48870
|
+
id: "addon-updates",
|
|
48871
|
+
family: "system",
|
|
48872
|
+
label: "Addon updates",
|
|
48873
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48833
48874
|
},
|
|
48834
48875
|
{
|
|
48835
48876
|
id: "updates",
|
|
@@ -48989,13 +49030,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48989
49030
|
},
|
|
48990
49031
|
{
|
|
48991
49032
|
name: "summaryAddons",
|
|
48992
|
-
label: "Summary: addons",
|
|
48993
|
-
example: "
|
|
48994
|
-
kinds: [
|
|
48995
|
-
|
|
48996
|
-
|
|
48997
|
-
|
|
48998
|
-
|
|
49033
|
+
label: "Summary: addons stopped",
|
|
49034
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
49035
|
+
kinds: ["addon-crash-loop"]
|
|
49036
|
+
},
|
|
49037
|
+
{
|
|
49038
|
+
name: "summaryAddonUpdates",
|
|
49039
|
+
label: "Summary: addon updates",
|
|
49040
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
49041
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48999
49042
|
},
|
|
49000
49043
|
{
|
|
49001
49044
|
name: "summaryUpdates",
|
|
@@ -49079,6 +49122,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
49079
49122
|
[...RULE_BODY_ONLY],
|
|
49080
49123
|
[...RULE_TEXT],
|
|
49081
49124
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
49125
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
49082
49126
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
49083
49127
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
49084
49128
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -49119,6 +49163,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
49119
49163
|
[...RULE_TEXT],
|
|
49120
49164
|
[...RULE_TEXT],
|
|
49121
49165
|
[...RULE_TEXT],
|
|
49166
|
+
[...RULE_TEXT],
|
|
49167
|
+
[...RULE_TEXT],
|
|
49122
49168
|
...STATE_SUMMARY_VARS
|
|
49123
49169
|
];
|
|
49124
49170
|
new Set([
|
|
@@ -59039,7 +59085,7 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
|
|
|
59039
59085
|
key: "host",
|
|
59040
59086
|
label: "Host",
|
|
59041
59087
|
required: true,
|
|
59042
|
-
placeholder: "192.168.
|
|
59088
|
+
placeholder: "192.168.10.10"
|
|
59043
59089
|
},
|
|
59044
59090
|
{
|
|
59045
59091
|
type: "number",
|