@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 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.x.x/` is a URL a browser accepts. The
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 report a
20664
- * still-true state. `backups-exports` and `alarm` are not sections — a completed
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.x.x/24`). Empty when OS doesn't expose. */
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 chosen outbound endpoint for notification artifacts. `baseUrl: null` =
33311
- * AUTO (resolved from the candidate ranking at send time); `resolved` reports
33312
- * what AUTO currently picks, so the UI can show the effective value either way.
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
- /** What the ranking currently resolves to (null when nothing is reachable). */
33318
- resolved: string().nullable()
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.x.x/24"]`). */
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
- "addon-crash-loop",
54135
- "addon-update-available",
54136
- "addon-updated"
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: "@camstack/addon-recorder 1.2.3 → 1.2.4",
54299
- kinds: [
54300
- "addon-crash-loop",
54301
- "addon-update-available",
54302
- "addon-updated"
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.x.x"
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.x.x"
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.x.x/24).",
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.x.x/24"
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.x.x",
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.x.x/` is a URL a browser accepts. The
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 report a
20656
- * still-true state. `backups-exports` and `alarm` are not sections — a completed
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.x.x/24`). Empty when OS doesn't expose. */
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 chosen outbound endpoint for notification artifacts. `baseUrl: null` =
33303
- * AUTO (resolved from the candidate ranking at send time); `resolved` reports
33304
- * what AUTO currently picks, so the UI can show the effective value either way.
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
- /** What the ranking currently resolves to (null when nothing is reachable). */
33310
- resolved: string().nullable()
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.x.x/24"]`). */
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
- "addon-crash-loop",
54127
- "addon-update-available",
54128
- "addon-updated"
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: "@camstack/addon-recorder 1.2.3 → 1.2.4",
54291
- kinds: [
54292
- "addon-crash-loop",
54293
- "addon-update-available",
54294
- "addon-updated"
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.x.x"
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.x.x"
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.x.x/24).",
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.x.x/24"
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.x.x",
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
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.174",
3
+ "version": "1.2.175",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",