@camstack/addon-provider-reolink 1.2.174 → 1.2.175
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 +96 -32
- package/dist/addon.mjs +96 -32
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -14831,7 +14831,7 @@ DeviceType.Camera;
|
|
|
14831
14831
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14832
14832
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14833
14833
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14834
|
-
* and `http://admin:hunter2@192.168.
|
|
14834
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14835
14835
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14836
14836
|
* filling it is the operator's business, not ours.
|
|
14837
14837
|
*
|
|
@@ -20660,8 +20660,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
20660
20660
|
disabledTargetIds: array(string()).default([])
|
|
20661
20661
|
});
|
|
20662
20662
|
/**
|
|
20663
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
20664
|
-
* still-true state. `
|
|
20663
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
20664
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
20665
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
20665
20666
|
* job is not an open state, and the alarm stays instant.
|
|
20666
20667
|
*/
|
|
20667
20668
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -20673,6 +20674,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
20673
20674
|
"detection-blind",
|
|
20674
20675
|
"nodes",
|
|
20675
20676
|
"addons",
|
|
20677
|
+
"addon-updates",
|
|
20676
20678
|
"updates"
|
|
20677
20679
|
]);
|
|
20678
20680
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -21153,7 +21155,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
21153
21155
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
21154
21156
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
21155
21157
|
*/
|
|
21156
|
-
schedule: NcScheduleSchema.optional()
|
|
21158
|
+
schedule: NcScheduleSchema.optional(),
|
|
21159
|
+
/**
|
|
21160
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
21161
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
21162
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
21163
|
+
*/
|
|
21164
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
21165
|
+
/**
|
|
21166
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
21167
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
21168
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
21169
|
+
*/
|
|
21170
|
+
notifySensorRewatched: boolean().optional()
|
|
21157
21171
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
21158
21172
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
21159
21173
|
mode: AlarmArmModeSchema,
|
|
@@ -21162,7 +21176,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
21162
21176
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
21163
21177
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
21164
21178
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
21165
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
21179
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
21180
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21181
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
21182
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21183
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
21166
21184
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
21167
21185
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
21168
21186
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -25023,6 +25041,22 @@ var MotionSourceEnum = _enum([
|
|
|
25023
25041
|
"device-activity"
|
|
25024
25042
|
]);
|
|
25025
25043
|
/**
|
|
25044
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
25045
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
25046
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
25047
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
25048
|
+
* absent when unknown or when the camera itself triggered.
|
|
25049
|
+
*
|
|
25050
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
25051
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
25052
|
+
* runner never decides anything on it.
|
|
25053
|
+
*/
|
|
25054
|
+
var SessionTriggerSchema = object({
|
|
25055
|
+
source: MotionSourceEnum,
|
|
25056
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
25057
|
+
sensorName: string().optional()
|
|
25058
|
+
});
|
|
25059
|
+
/**
|
|
25026
25060
|
* List of motion sources active on a camera. Empty array is valid:
|
|
25027
25061
|
* "no source" — happens for battery cams without firmware motion when
|
|
25028
25062
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -25274,6 +25308,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
25274
25308
|
*/
|
|
25275
25309
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
25276
25310
|
/**
|
|
25311
|
+
* What opened this attach, on a SESSION attach only (see
|
|
25312
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
25313
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
25314
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
25315
|
+
* runner then names no source on the phase event.
|
|
25316
|
+
*/
|
|
25317
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
25318
|
+
/**
|
|
25277
25319
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
25278
25320
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
25279
25321
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -33184,7 +33226,7 @@ var LocalInterfaceSchema = object({
|
|
|
33184
33226
|
name: string(),
|
|
33185
33227
|
family: _enum(["IPv4", "IPv6"]),
|
|
33186
33228
|
address: string(),
|
|
33187
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
33229
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
33188
33230
|
cidr: string(),
|
|
33189
33231
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
33190
33232
|
netmask: string(),
|
|
@@ -33238,7 +33280,8 @@ var ConnectionEndpointSchema = object({
|
|
|
33238
33280
|
"lan-ipv4",
|
|
33239
33281
|
"lan-ipv6",
|
|
33240
33282
|
"public",
|
|
33241
|
-
"loopback"
|
|
33283
|
+
"loopback",
|
|
33284
|
+
"app-link"
|
|
33242
33285
|
]),
|
|
33243
33286
|
/**
|
|
33244
33287
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -33307,15 +33350,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
33307
33350
|
localPort: AdvertisedLocalPortSchema
|
|
33308
33351
|
});
|
|
33309
33352
|
/**
|
|
33310
|
-
* The
|
|
33311
|
-
*
|
|
33312
|
-
*
|
|
33353
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
33354
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
33355
|
+
* so the UI can show it either way.
|
|
33313
33356
|
*/
|
|
33314
33357
|
var NotificationEndpointSchema = object({
|
|
33315
33358
|
/** The operator's explicit choice, or null for AUTO. */
|
|
33316
33359
|
baseUrl: string().nullable(),
|
|
33317
|
-
/**
|
|
33318
|
-
|
|
33360
|
+
/**
|
|
33361
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
33362
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
33363
|
+
* answered the public tunnel / mesh here, or null.
|
|
33364
|
+
*/
|
|
33365
|
+
resolved: string().nullable(),
|
|
33366
|
+
/**
|
|
33367
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
33368
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
33369
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
33370
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
33371
|
+
* Absent on a pre-D709 hub.
|
|
33372
|
+
*/
|
|
33373
|
+
appLinkHub: string().nullable()
|
|
33319
33374
|
});
|
|
33320
33375
|
/**
|
|
33321
33376
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -33369,7 +33424,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
33369
33424
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
33370
33425
|
* to avoid mixed-content blocks in the browser. The public
|
|
33371
33426
|
* tunnel always emits `https://` regardless. */
|
|
33372
|
-
scheme: _enum(["http", "https"]).optional()
|
|
33427
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
33428
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
33429
|
+
* an address notification links can be flagged with, not a hub
|
|
33430
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
33431
|
+
includeAppLink: boolean().optional()
|
|
33373
33432
|
}), 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, {
|
|
33374
33433
|
kind: "mutation",
|
|
33375
33434
|
auth: "admin"
|
|
@@ -33698,7 +33757,7 @@ var MeshPeerSchema = object({
|
|
|
33698
33757
|
tags: array(string()).readonly(),
|
|
33699
33758
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
33700
33759
|
exitNodeOption: boolean(),
|
|
33701
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
33760
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
33702
33761
|
advertisedRoutes: array(string()).readonly(),
|
|
33703
33762
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
33704
33763
|
userLogin: string().nullable(),
|
|
@@ -54129,12 +54188,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
54129
54188
|
{
|
|
54130
54189
|
id: "addons",
|
|
54131
54190
|
family: "system",
|
|
54132
|
-
label: "Addons",
|
|
54133
|
-
kinds: [
|
|
54134
|
-
|
|
54135
|
-
|
|
54136
|
-
|
|
54137
|
-
|
|
54191
|
+
label: "Addons stopped",
|
|
54192
|
+
kinds: ["addon-crash-loop"]
|
|
54193
|
+
},
|
|
54194
|
+
{
|
|
54195
|
+
id: "addon-updates",
|
|
54196
|
+
family: "system",
|
|
54197
|
+
label: "Addon updates",
|
|
54198
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
54138
54199
|
},
|
|
54139
54200
|
{
|
|
54140
54201
|
id: "updates",
|
|
@@ -54294,13 +54355,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
54294
54355
|
},
|
|
54295
54356
|
{
|
|
54296
54357
|
name: "summaryAddons",
|
|
54297
|
-
label: "Summary: addons",
|
|
54298
|
-
example: "
|
|
54299
|
-
kinds: [
|
|
54300
|
-
|
|
54301
|
-
|
|
54302
|
-
|
|
54303
|
-
|
|
54358
|
+
label: "Summary: addons stopped",
|
|
54359
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
54360
|
+
kinds: ["addon-crash-loop"]
|
|
54361
|
+
},
|
|
54362
|
+
{
|
|
54363
|
+
name: "summaryAddonUpdates",
|
|
54364
|
+
label: "Summary: addon updates",
|
|
54365
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
54366
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
54304
54367
|
},
|
|
54305
54368
|
{
|
|
54306
54369
|
name: "summaryUpdates",
|
|
@@ -54384,6 +54447,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
54384
54447
|
[...RULE_BODY_ONLY],
|
|
54385
54448
|
[...RULE_TEXT],
|
|
54386
54449
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
54450
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
54387
54451
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
54388
54452
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
54389
54453
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -172288,7 +172352,7 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
|
|
|
172288
172352
|
key: "host",
|
|
172289
172353
|
label: "Camera IP",
|
|
172290
172354
|
required: true,
|
|
172291
|
-
placeholder: "192.168.
|
|
172355
|
+
placeholder: "192.168.10.100"
|
|
172292
172356
|
},
|
|
172293
172357
|
{
|
|
172294
172358
|
type: "number",
|
|
@@ -174494,7 +174558,7 @@ var ReolinkHub = class ReolinkHub extends BaseDevice {
|
|
|
174494
174558
|
key: "host",
|
|
174495
174559
|
label: "Hub IP",
|
|
174496
174560
|
required: true,
|
|
174497
|
-
placeholder: "192.168.
|
|
174561
|
+
placeholder: "192.168.10.100"
|
|
174498
174562
|
},
|
|
174499
174563
|
{
|
|
174500
174564
|
type: "number",
|
|
@@ -175328,7 +175392,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
175328
175392
|
}, {
|
|
175329
175393
|
id: "scan",
|
|
175330
175394
|
title: "Scan options",
|
|
175331
|
-
description: "Leave the network blank to scan the local subnet. To find cameras on a different subnet, enter its CIDR (e.g. 192.168.
|
|
175395
|
+
description: "Leave the network blank to scan the local subnet. To find cameras on a different subnet, enter its CIDR (e.g. 192.168.20.0/24).",
|
|
175332
175396
|
columns: 1,
|
|
175333
175397
|
fields: [
|
|
175334
175398
|
{
|
|
@@ -175336,7 +175400,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
175336
175400
|
key: "networkCidr",
|
|
175337
175401
|
label: "Network (CIDR)",
|
|
175338
175402
|
required: false,
|
|
175339
|
-
placeholder: "192.168.
|
|
175403
|
+
placeholder: "192.168.20.0/24"
|
|
175340
175404
|
},
|
|
175341
175405
|
{
|
|
175342
175406
|
type: "boolean",
|
|
@@ -175420,7 +175484,7 @@ function buildCreationFormSchema() {
|
|
|
175420
175484
|
key: "host",
|
|
175421
175485
|
label: "Host (IP / hostname / UID)",
|
|
175422
175486
|
required: true,
|
|
175423
|
-
placeholder: "192.168.
|
|
175487
|
+
placeholder: "192.168.10.100",
|
|
175424
175488
|
description: "For UDP-only mode you can leave the host blank and supply the camera UID below — the library will discover it on the network.",
|
|
175425
175489
|
inputType: "text"
|
|
175426
175490
|
},
|
package/dist/addon.mjs
CHANGED
|
@@ -14823,7 +14823,7 @@ DeviceType.Camera;
|
|
|
14823
14823
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14824
14824
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14825
14825
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14826
|
-
* and `http://admin:hunter2@192.168.
|
|
14826
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14827
14827
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14828
14828
|
* filling it is the operator's business, not ours.
|
|
14829
14829
|
*
|
|
@@ -20652,8 +20652,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
20652
20652
|
disabledTargetIds: array(string()).default([])
|
|
20653
20653
|
});
|
|
20654
20654
|
/**
|
|
20655
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
20656
|
-
* still-true state. `
|
|
20655
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
20656
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
20657
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
20657
20658
|
* job is not an open state, and the alarm stays instant.
|
|
20658
20659
|
*/
|
|
20659
20660
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -20665,6 +20666,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
20665
20666
|
"detection-blind",
|
|
20666
20667
|
"nodes",
|
|
20667
20668
|
"addons",
|
|
20669
|
+
"addon-updates",
|
|
20668
20670
|
"updates"
|
|
20669
20671
|
]);
|
|
20670
20672
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -21145,7 +21147,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
21145
21147
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
21146
21148
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
21147
21149
|
*/
|
|
21148
|
-
schedule: NcScheduleSchema.optional()
|
|
21150
|
+
schedule: NcScheduleSchema.optional(),
|
|
21151
|
+
/**
|
|
21152
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
21153
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
21154
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
21155
|
+
*/
|
|
21156
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
21157
|
+
/**
|
|
21158
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
21159
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
21160
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
21161
|
+
*/
|
|
21162
|
+
notifySensorRewatched: boolean().optional()
|
|
21149
21163
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
21150
21164
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
21151
21165
|
mode: AlarmArmModeSchema,
|
|
@@ -21154,7 +21168,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
21154
21168
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
21155
21169
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
21156
21170
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
21157
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
21171
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
21172
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21173
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
21174
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21175
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
21158
21176
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
21159
21177
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
21160
21178
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -25015,6 +25033,22 @@ var MotionSourceEnum = _enum([
|
|
|
25015
25033
|
"device-activity"
|
|
25016
25034
|
]);
|
|
25017
25035
|
/**
|
|
25036
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
25037
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
25038
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
25039
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
25040
|
+
* absent when unknown or when the camera itself triggered.
|
|
25041
|
+
*
|
|
25042
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
25043
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
25044
|
+
* runner never decides anything on it.
|
|
25045
|
+
*/
|
|
25046
|
+
var SessionTriggerSchema = object({
|
|
25047
|
+
source: MotionSourceEnum,
|
|
25048
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
25049
|
+
sensorName: string().optional()
|
|
25050
|
+
});
|
|
25051
|
+
/**
|
|
25018
25052
|
* List of motion sources active on a camera. Empty array is valid:
|
|
25019
25053
|
* "no source" — happens for battery cams without firmware motion when
|
|
25020
25054
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -25266,6 +25300,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
25266
25300
|
*/
|
|
25267
25301
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
25268
25302
|
/**
|
|
25303
|
+
* What opened this attach, on a SESSION attach only (see
|
|
25304
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
25305
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
25306
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
25307
|
+
* runner then names no source on the phase event.
|
|
25308
|
+
*/
|
|
25309
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
25310
|
+
/**
|
|
25269
25311
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
25270
25312
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
25271
25313
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -33176,7 +33218,7 @@ var LocalInterfaceSchema = object({
|
|
|
33176
33218
|
name: string(),
|
|
33177
33219
|
family: _enum(["IPv4", "IPv6"]),
|
|
33178
33220
|
address: string(),
|
|
33179
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
33221
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
33180
33222
|
cidr: string(),
|
|
33181
33223
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
33182
33224
|
netmask: string(),
|
|
@@ -33230,7 +33272,8 @@ var ConnectionEndpointSchema = object({
|
|
|
33230
33272
|
"lan-ipv4",
|
|
33231
33273
|
"lan-ipv6",
|
|
33232
33274
|
"public",
|
|
33233
|
-
"loopback"
|
|
33275
|
+
"loopback",
|
|
33276
|
+
"app-link"
|
|
33234
33277
|
]),
|
|
33235
33278
|
/**
|
|
33236
33279
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -33299,15 +33342,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
33299
33342
|
localPort: AdvertisedLocalPortSchema
|
|
33300
33343
|
});
|
|
33301
33344
|
/**
|
|
33302
|
-
* The
|
|
33303
|
-
*
|
|
33304
|
-
*
|
|
33345
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
33346
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
33347
|
+
* so the UI can show it either way.
|
|
33305
33348
|
*/
|
|
33306
33349
|
var NotificationEndpointSchema = object({
|
|
33307
33350
|
/** The operator's explicit choice, or null for AUTO. */
|
|
33308
33351
|
baseUrl: string().nullable(),
|
|
33309
|
-
/**
|
|
33310
|
-
|
|
33352
|
+
/**
|
|
33353
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
33354
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
33355
|
+
* answered the public tunnel / mesh here, or null.
|
|
33356
|
+
*/
|
|
33357
|
+
resolved: string().nullable(),
|
|
33358
|
+
/**
|
|
33359
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
33360
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
33361
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
33362
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
33363
|
+
* Absent on a pre-D709 hub.
|
|
33364
|
+
*/
|
|
33365
|
+
appLinkHub: string().nullable()
|
|
33311
33366
|
});
|
|
33312
33367
|
/**
|
|
33313
33368
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -33361,7 +33416,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
33361
33416
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
33362
33417
|
* to avoid mixed-content blocks in the browser. The public
|
|
33363
33418
|
* tunnel always emits `https://` regardless. */
|
|
33364
|
-
scheme: _enum(["http", "https"]).optional()
|
|
33419
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
33420
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
33421
|
+
* an address notification links can be flagged with, not a hub
|
|
33422
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
33423
|
+
includeAppLink: boolean().optional()
|
|
33365
33424
|
}), 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, {
|
|
33366
33425
|
kind: "mutation",
|
|
33367
33426
|
auth: "admin"
|
|
@@ -33690,7 +33749,7 @@ var MeshPeerSchema = object({
|
|
|
33690
33749
|
tags: array(string()).readonly(),
|
|
33691
33750
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
33692
33751
|
exitNodeOption: boolean(),
|
|
33693
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
33752
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
33694
33753
|
advertisedRoutes: array(string()).readonly(),
|
|
33695
33754
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
33696
33755
|
userLogin: string().nullable(),
|
|
@@ -54121,12 +54180,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
54121
54180
|
{
|
|
54122
54181
|
id: "addons",
|
|
54123
54182
|
family: "system",
|
|
54124
|
-
label: "Addons",
|
|
54125
|
-
kinds: [
|
|
54126
|
-
|
|
54127
|
-
|
|
54128
|
-
|
|
54129
|
-
|
|
54183
|
+
label: "Addons stopped",
|
|
54184
|
+
kinds: ["addon-crash-loop"]
|
|
54185
|
+
},
|
|
54186
|
+
{
|
|
54187
|
+
id: "addon-updates",
|
|
54188
|
+
family: "system",
|
|
54189
|
+
label: "Addon updates",
|
|
54190
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
54130
54191
|
},
|
|
54131
54192
|
{
|
|
54132
54193
|
id: "updates",
|
|
@@ -54286,13 +54347,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
54286
54347
|
},
|
|
54287
54348
|
{
|
|
54288
54349
|
name: "summaryAddons",
|
|
54289
|
-
label: "Summary: addons",
|
|
54290
|
-
example: "
|
|
54291
|
-
kinds: [
|
|
54292
|
-
|
|
54293
|
-
|
|
54294
|
-
|
|
54295
|
-
|
|
54350
|
+
label: "Summary: addons stopped",
|
|
54351
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
54352
|
+
kinds: ["addon-crash-loop"]
|
|
54353
|
+
},
|
|
54354
|
+
{
|
|
54355
|
+
name: "summaryAddonUpdates",
|
|
54356
|
+
label: "Summary: addon updates",
|
|
54357
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
54358
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
54296
54359
|
},
|
|
54297
54360
|
{
|
|
54298
54361
|
name: "summaryUpdates",
|
|
@@ -54376,6 +54439,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
54376
54439
|
[...RULE_BODY_ONLY],
|
|
54377
54440
|
[...RULE_TEXT],
|
|
54378
54441
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
54442
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
54379
54443
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
54380
54444
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
54381
54445
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -172280,7 +172344,7 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
|
|
|
172280
172344
|
key: "host",
|
|
172281
172345
|
label: "Camera IP",
|
|
172282
172346
|
required: true,
|
|
172283
|
-
placeholder: "192.168.
|
|
172347
|
+
placeholder: "192.168.10.100"
|
|
172284
172348
|
},
|
|
172285
172349
|
{
|
|
172286
172350
|
type: "number",
|
|
@@ -174486,7 +174550,7 @@ var ReolinkHub = class ReolinkHub extends BaseDevice {
|
|
|
174486
174550
|
key: "host",
|
|
174487
174551
|
label: "Hub IP",
|
|
174488
174552
|
required: true,
|
|
174489
|
-
placeholder: "192.168.
|
|
174553
|
+
placeholder: "192.168.10.100"
|
|
174490
174554
|
},
|
|
174491
174555
|
{
|
|
174492
174556
|
type: "number",
|
|
@@ -175320,7 +175384,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
175320
175384
|
}, {
|
|
175321
175385
|
id: "scan",
|
|
175322
175386
|
title: "Scan options",
|
|
175323
|
-
description: "Leave the network blank to scan the local subnet. To find cameras on a different subnet, enter its CIDR (e.g. 192.168.
|
|
175387
|
+
description: "Leave the network blank to scan the local subnet. To find cameras on a different subnet, enter its CIDR (e.g. 192.168.20.0/24).",
|
|
175324
175388
|
columns: 1,
|
|
175325
175389
|
fields: [
|
|
175326
175390
|
{
|
|
@@ -175328,7 +175392,7 @@ function buildDiscoveryParamsFormSchema() {
|
|
|
175328
175392
|
key: "networkCidr",
|
|
175329
175393
|
label: "Network (CIDR)",
|
|
175330
175394
|
required: false,
|
|
175331
|
-
placeholder: "192.168.
|
|
175395
|
+
placeholder: "192.168.20.0/24"
|
|
175332
175396
|
},
|
|
175333
175397
|
{
|
|
175334
175398
|
type: "boolean",
|
|
@@ -175412,7 +175476,7 @@ function buildCreationFormSchema() {
|
|
|
175412
175476
|
key: "host",
|
|
175413
175477
|
label: "Host (IP / hostname / UID)",
|
|
175414
175478
|
required: true,
|
|
175415
|
-
placeholder: "192.168.
|
|
175479
|
+
placeholder: "192.168.10.100",
|
|
175416
175480
|
description: "For UDP-only mode you can leave the host blank and supply the camera UID below — the library will discover it on the network.",
|
|
175417
175481
|
inputType: "text"
|
|
175418
175482
|
},
|