@camstack/addon-provider-wyze 0.2.125 → 0.2.127
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
|
@@ -10586,11 +10586,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10586
10586
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10587
10587
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10588
10588
|
/**
|
|
10589
|
-
*
|
|
10590
|
-
*
|
|
10591
|
-
*
|
|
10589
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10590
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10591
|
+
* label is "Test".
|
|
10592
10592
|
*/
|
|
10593
|
-
optimization: _enum(["standard", "
|
|
10593
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10594
10594
|
/**
|
|
10595
10595
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10596
10596
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10613,9 +10613,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10613
10613
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10614
10614
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10615
10615
|
*
|
|
10616
|
-
* Every licence surface (the
|
|
10617
|
-
*
|
|
10618
|
-
*
|
|
10616
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10617
|
+
* model table) is GENERATED from these records by
|
|
10618
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10619
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10619
10620
|
*/
|
|
10620
10621
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10621
10622
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14246,7 +14247,7 @@ DeviceType.Camera;
|
|
|
14246
14247
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14247
14248
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14248
14249
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14249
|
-
* and `http://admin:hunter2@192.168.
|
|
14250
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14250
14251
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14251
14252
|
* filling it is the operator's business, not ours.
|
|
14252
14253
|
*
|
|
@@ -17435,7 +17436,7 @@ method(object({
|
|
|
17435
17436
|
timeoutMs: 6e5
|
|
17436
17437
|
});
|
|
17437
17438
|
method(object({
|
|
17438
|
-
|
|
17439
|
+
targetNodeId: string(),
|
|
17439
17440
|
modelId: string(),
|
|
17440
17441
|
format: _enum(MODEL_FORMATS),
|
|
17441
17442
|
entry: ModelCatalogEntrySchema
|
|
@@ -19939,8 +19940,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19939
19940
|
disabledTargetIds: array(string()).default([])
|
|
19940
19941
|
});
|
|
19941
19942
|
/**
|
|
19942
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19943
|
-
* still-true state. `
|
|
19943
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19944
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19945
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19944
19946
|
* job is not an open state, and the alarm stays instant.
|
|
19945
19947
|
*/
|
|
19946
19948
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19952,6 +19954,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19952
19954
|
"detection-blind",
|
|
19953
19955
|
"nodes",
|
|
19954
19956
|
"addons",
|
|
19957
|
+
"addon-updates",
|
|
19955
19958
|
"updates"
|
|
19956
19959
|
]);
|
|
19957
19960
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20432,7 +20435,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20432
20435
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20433
20436
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20434
20437
|
*/
|
|
20435
|
-
schedule: NcScheduleSchema.optional()
|
|
20438
|
+
schedule: NcScheduleSchema.optional(),
|
|
20439
|
+
/**
|
|
20440
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20441
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20442
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20443
|
+
*/
|
|
20444
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20445
|
+
/**
|
|
20446
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20447
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20448
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20449
|
+
*/
|
|
20450
|
+
notifySensorRewatched: boolean().optional()
|
|
20436
20451
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20437
20452
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20438
20453
|
mode: AlarmArmModeSchema,
|
|
@@ -20441,7 +20456,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20441
20456
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20442
20457
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20443
20458
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20444
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20459
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20460
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20461
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20462
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20463
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20445
20464
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20446
20465
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20447
20466
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21402,39 +21421,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21402
21421
|
label: "Face recognition model",
|
|
21403
21422
|
defaultModelId: "auraface-r100",
|
|
21404
21423
|
indexName: "the enrolled face gallery",
|
|
21405
|
-
options: [
|
|
21406
|
-
|
|
21407
|
-
|
|
21408
|
-
|
|
21409
|
-
},
|
|
21410
|
-
{
|
|
21411
|
-
id: "arcface-r100",
|
|
21412
|
-
label: "ArcFace (ResNet34)"
|
|
21413
|
-
},
|
|
21414
|
-
{
|
|
21415
|
-
id: "inception-resnet-v1",
|
|
21416
|
-
label: "Inception ResNet V1"
|
|
21417
|
-
}
|
|
21418
|
-
]
|
|
21424
|
+
options: [{
|
|
21425
|
+
id: "auraface-r100",
|
|
21426
|
+
label: "AuraFace R100"
|
|
21427
|
+
}]
|
|
21419
21428
|
}, {
|
|
21420
21429
|
stepId: "clip-embedding",
|
|
21421
21430
|
label: "Semantic search model",
|
|
21422
|
-
defaultModelId: "
|
|
21431
|
+
defaultModelId: "siglip2-b16-224",
|
|
21423
21432
|
indexName: "the object semantic-search index",
|
|
21424
|
-
options: [
|
|
21425
|
-
|
|
21426
|
-
|
|
21427
|
-
|
|
21428
|
-
},
|
|
21429
|
-
{
|
|
21430
|
-
id: "mobileclip-s2",
|
|
21431
|
-
label: "MobileCLIP S2"
|
|
21432
|
-
},
|
|
21433
|
-
{
|
|
21434
|
-
id: "siglip2-b16-224",
|
|
21435
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21436
|
-
}
|
|
21437
|
-
]
|
|
21433
|
+
options: [{
|
|
21434
|
+
id: "siglip2-b16-224",
|
|
21435
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21436
|
+
}]
|
|
21438
21437
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21439
21438
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21440
21439
|
stepId: "face-embedding",
|
|
@@ -24322,6 +24321,22 @@ var MotionSourceEnum = _enum([
|
|
|
24322
24321
|
"device-activity"
|
|
24323
24322
|
]);
|
|
24324
24323
|
/**
|
|
24324
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24325
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24326
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24327
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24328
|
+
* absent when unknown or when the camera itself triggered.
|
|
24329
|
+
*
|
|
24330
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24331
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24332
|
+
* runner never decides anything on it.
|
|
24333
|
+
*/
|
|
24334
|
+
var SessionTriggerSchema = object({
|
|
24335
|
+
source: MotionSourceEnum,
|
|
24336
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24337
|
+
sensorName: string().optional()
|
|
24338
|
+
});
|
|
24339
|
+
/**
|
|
24325
24340
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24326
24341
|
* "no source" — happens for battery cams without firmware motion when
|
|
24327
24342
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24573,6 +24588,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24573
24588
|
*/
|
|
24574
24589
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24575
24590
|
/**
|
|
24591
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24592
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24593
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24594
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24595
|
+
* runner then names no source on the phase event.
|
|
24596
|
+
*/
|
|
24597
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24598
|
+
/**
|
|
24576
24599
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24577
24600
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24578
24601
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -32073,7 +32096,7 @@ var LocalInterfaceSchema = object({
|
|
|
32073
32096
|
name: string(),
|
|
32074
32097
|
family: _enum(["IPv4", "IPv6"]),
|
|
32075
32098
|
address: string(),
|
|
32076
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
32099
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
32077
32100
|
cidr: string(),
|
|
32078
32101
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
32079
32102
|
netmask: string(),
|
|
@@ -32127,7 +32150,8 @@ var ConnectionEndpointSchema = object({
|
|
|
32127
32150
|
"lan-ipv4",
|
|
32128
32151
|
"lan-ipv6",
|
|
32129
32152
|
"public",
|
|
32130
|
-
"loopback"
|
|
32153
|
+
"loopback",
|
|
32154
|
+
"app-link"
|
|
32131
32155
|
]),
|
|
32132
32156
|
/**
|
|
32133
32157
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -32196,15 +32220,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
32196
32220
|
localPort: AdvertisedLocalPortSchema
|
|
32197
32221
|
});
|
|
32198
32222
|
/**
|
|
32199
|
-
* The
|
|
32200
|
-
*
|
|
32201
|
-
*
|
|
32223
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
32224
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
32225
|
+
* so the UI can show it either way.
|
|
32202
32226
|
*/
|
|
32203
32227
|
var NotificationEndpointSchema = object({
|
|
32204
32228
|
/** The operator's explicit choice, or null for AUTO. */
|
|
32205
32229
|
baseUrl: string().nullable(),
|
|
32206
|
-
/**
|
|
32207
|
-
|
|
32230
|
+
/**
|
|
32231
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
32232
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
32233
|
+
* answered the public tunnel / mesh here, or null.
|
|
32234
|
+
*/
|
|
32235
|
+
resolved: string().nullable(),
|
|
32236
|
+
/**
|
|
32237
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
32238
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
32239
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
32240
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
32241
|
+
* Absent on a pre-D709 hub.
|
|
32242
|
+
*/
|
|
32243
|
+
appLinkHub: string().nullable()
|
|
32208
32244
|
});
|
|
32209
32245
|
/**
|
|
32210
32246
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -32258,7 +32294,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
32258
32294
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
32259
32295
|
* to avoid mixed-content blocks in the browser. The public
|
|
32260
32296
|
* tunnel always emits `https://` regardless. */
|
|
32261
|
-
scheme: _enum(["http", "https"]).optional()
|
|
32297
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
32298
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
32299
|
+
* an address notification links can be flagged with, not a hub
|
|
32300
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
32301
|
+
includeAppLink: boolean().optional()
|
|
32262
32302
|
}), 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, {
|
|
32263
32303
|
kind: "mutation",
|
|
32264
32304
|
auth: "admin"
|
|
@@ -32587,7 +32627,7 @@ var MeshPeerSchema = object({
|
|
|
32587
32627
|
tags: array(string()).readonly(),
|
|
32588
32628
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
32589
32629
|
exitNodeOption: boolean(),
|
|
32590
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
32630
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
32591
32631
|
advertisedRoutes: array(string()).readonly(),
|
|
32592
32632
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
32593
32633
|
userLogin: string().nullable(),
|
|
@@ -33915,7 +33955,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
33915
33955
|
*/
|
|
33916
33956
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
33917
33957
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
33918
|
-
readOnly: boolean().optional()
|
|
33958
|
+
readOnly: boolean().optional(),
|
|
33959
|
+
/**
|
|
33960
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
33961
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
33962
|
+
* copy on the binding.
|
|
33963
|
+
*/
|
|
33964
|
+
maxCharacters: number().int().positive().optional()
|
|
33919
33965
|
})).readonly() });
|
|
33920
33966
|
var OsdOverlayPatchSchema = object({
|
|
33921
33967
|
enabled: boolean().optional(),
|
|
@@ -33966,7 +34012,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
33966
34012
|
valuePath: string().min(1).max(64),
|
|
33967
34013
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
33968
34014
|
displayUnit: string().max(16).optional(),
|
|
33969
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
34015
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
34016
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
34017
|
+
valueMap: record(string(), string()).optional()
|
|
33970
34018
|
});
|
|
33971
34019
|
/**
|
|
33972
34020
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -34016,18 +34064,11 @@ var OsdSlotBindingSchema = object({
|
|
|
34016
34064
|
source: OsdSourceSchema,
|
|
34017
34065
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
34018
34066
|
template: string().max(96).default("${value}"),
|
|
34019
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
34020
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
34021
34067
|
/**
|
|
34022
34068
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
34023
34069
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
34024
34070
|
*/
|
|
34025
34071
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
34026
|
-
/**
|
|
34027
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
34028
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
34029
|
-
*/
|
|
34030
|
-
unitLabel: string().max(8).optional(),
|
|
34031
34072
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
34032
34073
|
valueMap: record(string(), string()).optional(),
|
|
34033
34074
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -34036,9 +34077,7 @@ var OsdSlotBindingSchema = object({
|
|
|
34036
34077
|
* Display gate, in the notification centre's condition vocabulary.
|
|
34037
34078
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
34038
34079
|
*/
|
|
34039
|
-
conditions: NcConditionsSchema.optional()
|
|
34040
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
34041
|
-
fallbackText: string().max(64).default("")
|
|
34080
|
+
conditions: NcConditionsSchema.optional()
|
|
34042
34081
|
});
|
|
34043
34082
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
34044
34083
|
var OsdSlotViewSchema = object({
|
|
@@ -52271,12 +52310,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
52271
52310
|
{
|
|
52272
52311
|
id: "addons",
|
|
52273
52312
|
family: "system",
|
|
52274
|
-
label: "Addons",
|
|
52275
|
-
kinds: [
|
|
52276
|
-
|
|
52277
|
-
|
|
52278
|
-
|
|
52279
|
-
|
|
52313
|
+
label: "Addons stopped",
|
|
52314
|
+
kinds: ["addon-crash-loop"]
|
|
52315
|
+
},
|
|
52316
|
+
{
|
|
52317
|
+
id: "addon-updates",
|
|
52318
|
+
family: "system",
|
|
52319
|
+
label: "Addon updates",
|
|
52320
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
52280
52321
|
},
|
|
52281
52322
|
{
|
|
52282
52323
|
id: "updates",
|
|
@@ -52436,13 +52477,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
52436
52477
|
},
|
|
52437
52478
|
{
|
|
52438
52479
|
name: "summaryAddons",
|
|
52439
|
-
label: "Summary: addons",
|
|
52440
|
-
example: "
|
|
52441
|
-
kinds: [
|
|
52442
|
-
|
|
52443
|
-
|
|
52444
|
-
|
|
52445
|
-
|
|
52480
|
+
label: "Summary: addons stopped",
|
|
52481
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
52482
|
+
kinds: ["addon-crash-loop"]
|
|
52483
|
+
},
|
|
52484
|
+
{
|
|
52485
|
+
name: "summaryAddonUpdates",
|
|
52486
|
+
label: "Summary: addon updates",
|
|
52487
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
52488
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
52446
52489
|
},
|
|
52447
52490
|
{
|
|
52448
52491
|
name: "summaryUpdates",
|
|
@@ -52526,6 +52569,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
52526
52569
|
[...RULE_BODY_ONLY],
|
|
52527
52570
|
[...RULE_TEXT],
|
|
52528
52571
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
52572
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
52529
52573
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
52530
52574
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
52531
52575
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -52566,6 +52610,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
52566
52610
|
[...RULE_TEXT],
|
|
52567
52611
|
[...RULE_TEXT],
|
|
52568
52612
|
[...RULE_TEXT],
|
|
52613
|
+
[...RULE_TEXT],
|
|
52614
|
+
[...RULE_TEXT],
|
|
52569
52615
|
...STATE_SUMMARY_VARS
|
|
52570
52616
|
];
|
|
52571
52617
|
new Set([
|
|
@@ -56517,7 +56563,7 @@ function buildCreationFormSchema() {
|
|
|
56517
56563
|
key: "ip",
|
|
56518
56564
|
label: "Local IP",
|
|
56519
56565
|
required: true,
|
|
56520
|
-
placeholder: "192.168.
|
|
56566
|
+
placeholder: "192.168.10.41"
|
|
56521
56567
|
},
|
|
56522
56568
|
{
|
|
56523
56569
|
type: "text",
|
package/dist/addon.mjs
CHANGED
|
@@ -10565,11 +10565,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10565
10565
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10566
10566
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10567
10567
|
/**
|
|
10568
|
-
*
|
|
10569
|
-
*
|
|
10570
|
-
*
|
|
10568
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10569
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10570
|
+
* label is "Test".
|
|
10571
10571
|
*/
|
|
10572
|
-
optimization: _enum(["standard", "
|
|
10572
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10573
10573
|
/**
|
|
10574
10574
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10575
10575
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10592,9 +10592,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10592
10592
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10593
10593
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10594
10594
|
*
|
|
10595
|
-
* Every licence surface (the
|
|
10596
|
-
*
|
|
10597
|
-
*
|
|
10595
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10596
|
+
* model table) is GENERATED from these records by
|
|
10597
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10598
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10598
10599
|
*/
|
|
10599
10600
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10600
10601
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14225,7 +14226,7 @@ DeviceType.Camera;
|
|
|
14225
14226
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14226
14227
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14227
14228
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14228
|
-
* and `http://admin:hunter2@192.168.
|
|
14229
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14229
14230
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14230
14231
|
* filling it is the operator's business, not ours.
|
|
14231
14232
|
*
|
|
@@ -17414,7 +17415,7 @@ method(object({
|
|
|
17414
17415
|
timeoutMs: 6e5
|
|
17415
17416
|
});
|
|
17416
17417
|
method(object({
|
|
17417
|
-
|
|
17418
|
+
targetNodeId: string(),
|
|
17418
17419
|
modelId: string(),
|
|
17419
17420
|
format: _enum(MODEL_FORMATS),
|
|
17420
17421
|
entry: ModelCatalogEntrySchema
|
|
@@ -19918,8 +19919,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19918
19919
|
disabledTargetIds: array(string()).default([])
|
|
19919
19920
|
});
|
|
19920
19921
|
/**
|
|
19921
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19922
|
-
* still-true state. `
|
|
19922
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19923
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19924
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19923
19925
|
* job is not an open state, and the alarm stays instant.
|
|
19924
19926
|
*/
|
|
19925
19927
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19931,6 +19933,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19931
19933
|
"detection-blind",
|
|
19932
19934
|
"nodes",
|
|
19933
19935
|
"addons",
|
|
19936
|
+
"addon-updates",
|
|
19934
19937
|
"updates"
|
|
19935
19938
|
]);
|
|
19936
19939
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20411,7 +20414,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20411
20414
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20412
20415
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20413
20416
|
*/
|
|
20414
|
-
schedule: NcScheduleSchema.optional()
|
|
20417
|
+
schedule: NcScheduleSchema.optional(),
|
|
20418
|
+
/**
|
|
20419
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20420
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20421
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20422
|
+
*/
|
|
20423
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20424
|
+
/**
|
|
20425
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20426
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20427
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20428
|
+
*/
|
|
20429
|
+
notifySensorRewatched: boolean().optional()
|
|
20415
20430
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20416
20431
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20417
20432
|
mode: AlarmArmModeSchema,
|
|
@@ -20420,7 +20435,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20420
20435
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20421
20436
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20422
20437
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20423
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20438
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20439
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20440
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20441
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20442
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20424
20443
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20425
20444
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20426
20445
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21381,39 +21400,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21381
21400
|
label: "Face recognition model",
|
|
21382
21401
|
defaultModelId: "auraface-r100",
|
|
21383
21402
|
indexName: "the enrolled face gallery",
|
|
21384
|
-
options: [
|
|
21385
|
-
|
|
21386
|
-
|
|
21387
|
-
|
|
21388
|
-
},
|
|
21389
|
-
{
|
|
21390
|
-
id: "arcface-r100",
|
|
21391
|
-
label: "ArcFace (ResNet34)"
|
|
21392
|
-
},
|
|
21393
|
-
{
|
|
21394
|
-
id: "inception-resnet-v1",
|
|
21395
|
-
label: "Inception ResNet V1"
|
|
21396
|
-
}
|
|
21397
|
-
]
|
|
21403
|
+
options: [{
|
|
21404
|
+
id: "auraface-r100",
|
|
21405
|
+
label: "AuraFace R100"
|
|
21406
|
+
}]
|
|
21398
21407
|
}, {
|
|
21399
21408
|
stepId: "clip-embedding",
|
|
21400
21409
|
label: "Semantic search model",
|
|
21401
|
-
defaultModelId: "
|
|
21410
|
+
defaultModelId: "siglip2-b16-224",
|
|
21402
21411
|
indexName: "the object semantic-search index",
|
|
21403
|
-
options: [
|
|
21404
|
-
|
|
21405
|
-
|
|
21406
|
-
|
|
21407
|
-
},
|
|
21408
|
-
{
|
|
21409
|
-
id: "mobileclip-s2",
|
|
21410
|
-
label: "MobileCLIP S2"
|
|
21411
|
-
},
|
|
21412
|
-
{
|
|
21413
|
-
id: "siglip2-b16-224",
|
|
21414
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21415
|
-
}
|
|
21416
|
-
]
|
|
21412
|
+
options: [{
|
|
21413
|
+
id: "siglip2-b16-224",
|
|
21414
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21415
|
+
}]
|
|
21417
21416
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21418
21417
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21419
21418
|
stepId: "face-embedding",
|
|
@@ -24301,6 +24300,22 @@ var MotionSourceEnum = _enum([
|
|
|
24301
24300
|
"device-activity"
|
|
24302
24301
|
]);
|
|
24303
24302
|
/**
|
|
24303
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24304
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24305
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24306
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24307
|
+
* absent when unknown or when the camera itself triggered.
|
|
24308
|
+
*
|
|
24309
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24310
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24311
|
+
* runner never decides anything on it.
|
|
24312
|
+
*/
|
|
24313
|
+
var SessionTriggerSchema = object({
|
|
24314
|
+
source: MotionSourceEnum,
|
|
24315
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24316
|
+
sensorName: string().optional()
|
|
24317
|
+
});
|
|
24318
|
+
/**
|
|
24304
24319
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24305
24320
|
* "no source" — happens for battery cams without firmware motion when
|
|
24306
24321
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24552,6 +24567,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24552
24567
|
*/
|
|
24553
24568
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24554
24569
|
/**
|
|
24570
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24571
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24572
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24573
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24574
|
+
* runner then names no source on the phase event.
|
|
24575
|
+
*/
|
|
24576
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24577
|
+
/**
|
|
24555
24578
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24556
24579
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24557
24580
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -32052,7 +32075,7 @@ var LocalInterfaceSchema = object({
|
|
|
32052
32075
|
name: string(),
|
|
32053
32076
|
family: _enum(["IPv4", "IPv6"]),
|
|
32054
32077
|
address: string(),
|
|
32055
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
32078
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
32056
32079
|
cidr: string(),
|
|
32057
32080
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
32058
32081
|
netmask: string(),
|
|
@@ -32106,7 +32129,8 @@ var ConnectionEndpointSchema = object({
|
|
|
32106
32129
|
"lan-ipv4",
|
|
32107
32130
|
"lan-ipv6",
|
|
32108
32131
|
"public",
|
|
32109
|
-
"loopback"
|
|
32132
|
+
"loopback",
|
|
32133
|
+
"app-link"
|
|
32110
32134
|
]),
|
|
32111
32135
|
/**
|
|
32112
32136
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -32175,15 +32199,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
32175
32199
|
localPort: AdvertisedLocalPortSchema
|
|
32176
32200
|
});
|
|
32177
32201
|
/**
|
|
32178
|
-
* The
|
|
32179
|
-
*
|
|
32180
|
-
*
|
|
32202
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
32203
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
32204
|
+
* so the UI can show it either way.
|
|
32181
32205
|
*/
|
|
32182
32206
|
var NotificationEndpointSchema = object({
|
|
32183
32207
|
/** The operator's explicit choice, or null for AUTO. */
|
|
32184
32208
|
baseUrl: string().nullable(),
|
|
32185
|
-
/**
|
|
32186
|
-
|
|
32209
|
+
/**
|
|
32210
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
32211
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
32212
|
+
* answered the public tunnel / mesh here, or null.
|
|
32213
|
+
*/
|
|
32214
|
+
resolved: string().nullable(),
|
|
32215
|
+
/**
|
|
32216
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
32217
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
32218
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
32219
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
32220
|
+
* Absent on a pre-D709 hub.
|
|
32221
|
+
*/
|
|
32222
|
+
appLinkHub: string().nullable()
|
|
32187
32223
|
});
|
|
32188
32224
|
/**
|
|
32189
32225
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -32237,7 +32273,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
32237
32273
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
32238
32274
|
* to avoid mixed-content blocks in the browser. The public
|
|
32239
32275
|
* tunnel always emits `https://` regardless. */
|
|
32240
|
-
scheme: _enum(["http", "https"]).optional()
|
|
32276
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
32277
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
32278
|
+
* an address notification links can be flagged with, not a hub
|
|
32279
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
32280
|
+
includeAppLink: boolean().optional()
|
|
32241
32281
|
}), 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, {
|
|
32242
32282
|
kind: "mutation",
|
|
32243
32283
|
auth: "admin"
|
|
@@ -32566,7 +32606,7 @@ var MeshPeerSchema = object({
|
|
|
32566
32606
|
tags: array(string()).readonly(),
|
|
32567
32607
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
32568
32608
|
exitNodeOption: boolean(),
|
|
32569
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
32609
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
32570
32610
|
advertisedRoutes: array(string()).readonly(),
|
|
32571
32611
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
32572
32612
|
userLogin: string().nullable(),
|
|
@@ -33894,7 +33934,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
33894
33934
|
*/
|
|
33895
33935
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
33896
33936
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
33897
|
-
readOnly: boolean().optional()
|
|
33937
|
+
readOnly: boolean().optional(),
|
|
33938
|
+
/**
|
|
33939
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
33940
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
33941
|
+
* copy on the binding.
|
|
33942
|
+
*/
|
|
33943
|
+
maxCharacters: number().int().positive().optional()
|
|
33898
33944
|
})).readonly() });
|
|
33899
33945
|
var OsdOverlayPatchSchema = object({
|
|
33900
33946
|
enabled: boolean().optional(),
|
|
@@ -33945,7 +33991,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
33945
33991
|
valuePath: string().min(1).max(64),
|
|
33946
33992
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
33947
33993
|
displayUnit: string().max(16).optional(),
|
|
33948
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
33994
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
33995
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
33996
|
+
valueMap: record(string(), string()).optional()
|
|
33949
33997
|
});
|
|
33950
33998
|
/**
|
|
33951
33999
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -33995,18 +34043,11 @@ var OsdSlotBindingSchema = object({
|
|
|
33995
34043
|
source: OsdSourceSchema,
|
|
33996
34044
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
33997
34045
|
template: string().max(96).default("${value}"),
|
|
33998
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
33999
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
34000
34046
|
/**
|
|
34001
34047
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
34002
34048
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
34003
34049
|
*/
|
|
34004
34050
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
34005
|
-
/**
|
|
34006
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
34007
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
34008
|
-
*/
|
|
34009
|
-
unitLabel: string().max(8).optional(),
|
|
34010
34051
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
34011
34052
|
valueMap: record(string(), string()).optional(),
|
|
34012
34053
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -34015,9 +34056,7 @@ var OsdSlotBindingSchema = object({
|
|
|
34015
34056
|
* Display gate, in the notification centre's condition vocabulary.
|
|
34016
34057
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
34017
34058
|
*/
|
|
34018
|
-
conditions: NcConditionsSchema.optional()
|
|
34019
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
34020
|
-
fallbackText: string().max(64).default("")
|
|
34059
|
+
conditions: NcConditionsSchema.optional()
|
|
34021
34060
|
});
|
|
34022
34061
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
34023
34062
|
var OsdSlotViewSchema = object({
|
|
@@ -52250,12 +52289,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
52250
52289
|
{
|
|
52251
52290
|
id: "addons",
|
|
52252
52291
|
family: "system",
|
|
52253
|
-
label: "Addons",
|
|
52254
|
-
kinds: [
|
|
52255
|
-
|
|
52256
|
-
|
|
52257
|
-
|
|
52258
|
-
|
|
52292
|
+
label: "Addons stopped",
|
|
52293
|
+
kinds: ["addon-crash-loop"]
|
|
52294
|
+
},
|
|
52295
|
+
{
|
|
52296
|
+
id: "addon-updates",
|
|
52297
|
+
family: "system",
|
|
52298
|
+
label: "Addon updates",
|
|
52299
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
52259
52300
|
},
|
|
52260
52301
|
{
|
|
52261
52302
|
id: "updates",
|
|
@@ -52415,13 +52456,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
52415
52456
|
},
|
|
52416
52457
|
{
|
|
52417
52458
|
name: "summaryAddons",
|
|
52418
|
-
label: "Summary: addons",
|
|
52419
|
-
example: "
|
|
52420
|
-
kinds: [
|
|
52421
|
-
|
|
52422
|
-
|
|
52423
|
-
|
|
52424
|
-
|
|
52459
|
+
label: "Summary: addons stopped",
|
|
52460
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
52461
|
+
kinds: ["addon-crash-loop"]
|
|
52462
|
+
},
|
|
52463
|
+
{
|
|
52464
|
+
name: "summaryAddonUpdates",
|
|
52465
|
+
label: "Summary: addon updates",
|
|
52466
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
52467
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
52425
52468
|
},
|
|
52426
52469
|
{
|
|
52427
52470
|
name: "summaryUpdates",
|
|
@@ -52505,6 +52548,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
52505
52548
|
[...RULE_BODY_ONLY],
|
|
52506
52549
|
[...RULE_TEXT],
|
|
52507
52550
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
52551
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
52508
52552
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
52509
52553
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
52510
52554
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -52545,6 +52589,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
52545
52589
|
[...RULE_TEXT],
|
|
52546
52590
|
[...RULE_TEXT],
|
|
52547
52591
|
[...RULE_TEXT],
|
|
52592
|
+
[...RULE_TEXT],
|
|
52593
|
+
[...RULE_TEXT],
|
|
52548
52594
|
...STATE_SUMMARY_VARS
|
|
52549
52595
|
];
|
|
52550
52596
|
new Set([
|
|
@@ -56496,7 +56542,7 @@ function buildCreationFormSchema() {
|
|
|
56496
56542
|
key: "ip",
|
|
56497
56543
|
label: "Local IP",
|
|
56498
56544
|
required: true,
|
|
56499
|
-
placeholder: "192.168.
|
|
56545
|
+
placeholder: "192.168.10.41"
|
|
56500
56546
|
},
|
|
56501
56547
|
{
|
|
56502
56548
|
type: "text",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-wyze",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.127",
|
|
4
4
|
"description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|