@camstack/addon-export-hap 1.2.79 → 1.2.81

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.
@@ -84,7 +84,7 @@ function carryForward(base, existing, keys) {
84
84
  return out;
85
85
  }
86
86
  //#endregion
87
- //#region ../types/dist/event-category-BZL-fdNj.mjs
87
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
88
88
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
89
89
  EventCategory["SystemBoot"] = "system.boot";
90
90
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -456,6 +456,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
456
456
  */
457
457
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
458
458
  /**
459
+ * Cap event fired by every device that registers the `network-link`
460
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
461
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
462
+ * reading that moved.
463
+ */
464
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
465
+ /**
459
466
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
460
467
  * "wake in progress" window — between the Baichuan wake-up issue and
461
468
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19822,6 +19829,33 @@ var RecentTracksQueryInput = object({
19822
19829
  */
19823
19830
  classes: array(string()).optional()
19824
19831
  });
19832
+ /**
19833
+ * A Summary (D359): the per-camera session envelope that references tracks.
19834
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19835
+ * served by the event-media plane by key), null until the first frame with a
19836
+ * member visible has been materialised.
19837
+ */
19838
+ var SummarySchema = object({
19839
+ id: string(),
19840
+ deviceId: number(),
19841
+ openedAt: number(),
19842
+ lastActiveAt: number(),
19843
+ sealedAt: number().nullable(),
19844
+ memberCount: number().int().nonnegative(),
19845
+ groupShotKey: string().nullable()
19846
+ });
19847
+ var SummariesQueryInput = object({
19848
+ deviceIds: array(number()).min(1),
19849
+ since: number().optional(),
19850
+ until: number().optional(),
19851
+ limit: number().int().min(1).max(200).default(50)
19852
+ });
19853
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19854
+ var SummaryDetailSchema = object({
19855
+ summary: SummarySchema,
19856
+ /** Member track ids, in absorption order. */
19857
+ trackIds: array(string()).readonly()
19858
+ });
19825
19859
  var RecentTracksPageSchema = object({
19826
19860
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19827
19861
  tracks: array(TrackSchema).readonly(),
@@ -20222,7 +20256,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20222
20256
  * timeline would read as a camera that saw nothing.
20223
20257
  */
20224
20258
  classes: array(string()).optional()
20225
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
20259
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20226
20260
  kind: "mutation",
20227
20261
  auth: "admin"
20228
20262
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -23959,6 +23993,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23959
23993
  deviceId: number(),
23960
23994
  status: BatteryStatusSchema
23961
23995
  });
23996
+ /**
23997
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23998
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23999
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
24000
+ * one Home Assistant projection.
24001
+ */
24002
+ var NetworkLinkStatusSchema = object({
24003
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
24004
+ type: _enum([
24005
+ "wifi",
24006
+ "ethernet",
24007
+ "cellular",
24008
+ "unknown"
24009
+ ]),
24010
+ /**
24011
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
24012
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
24013
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
24014
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
24015
+ * SKIP a null rather than coerce it.
24016
+ */
24017
+ signalPercent: number().min(0).max(100).nullable(),
24018
+ /** Raw received signal strength in dBm, when the firmware reports one. */
24019
+ rssiDbm: number().optional(),
24020
+ /** Network name of a wireless link, when the firmware reports it. */
24021
+ ssid: string().optional(),
24022
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
24023
+ lastUpdated: number()
24024
+ });
24025
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
24026
+ deviceId: number(),
24027
+ status: NetworkLinkStatusSchema
24028
+ });
23962
24029
  object({
23963
24030
  on: boolean(),
23964
24031
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -33250,6 +33317,12 @@ Object.freeze({
33250
33317
  addonId: null,
33251
33318
  access: "view"
33252
33319
  },
33320
+ "pipelineAnalytics.getSummary": {
33321
+ capName: "pipeline-analytics",
33322
+ capScope: "device",
33323
+ addonId: null,
33324
+ access: "view"
33325
+ },
33253
33326
  "pipelineAnalytics.getTrack": {
33254
33327
  capName: "pipeline-analytics",
33255
33328
  capScope: "device",
@@ -33328,6 +33401,12 @@ Object.freeze({
33328
33401
  addonId: null,
33329
33402
  access: "view"
33330
33403
  },
33404
+ "pipelineAnalytics.listSummaries": {
33405
+ capName: "pipeline-analytics",
33406
+ capScope: "device",
33407
+ addonId: null,
33408
+ access: "view"
33409
+ },
33331
33410
  "pipelineAnalytics.listTrackMedia": {
33332
33411
  capName: "pipeline-analytics",
33333
33412
  capScope: "device",
@@ -37023,6 +37102,11 @@ Object.freeze({
37023
37102
  form: "array",
37024
37103
  optional: true
37025
37104
  }],
37105
+ "pipelineAnalytics.listSummaries": [{
37106
+ name: "deviceIds",
37107
+ form: "array",
37108
+ optional: false
37109
+ }],
37026
37110
  "pipelineAnalytics.listTrackMedia": [{
37027
37111
  name: "deviceId",
37028
37112
  form: "single",
@@ -72,7 +72,7 @@ function carryForward(base, existing, keys) {
72
72
  return out;
73
73
  }
74
74
  //#endregion
75
- //#region ../types/dist/event-category-BZL-fdNj.mjs
75
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
76
76
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
77
77
  EventCategory["SystemBoot"] = "system.boot";
78
78
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -444,6 +444,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
444
444
  */
445
445
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
446
446
  /**
447
+ * Cap event fired by every device that registers the `network-link`
448
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
449
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
450
+ * reading that moved.
451
+ */
452
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
453
+ /**
447
454
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
448
455
  * "wake in progress" window — between the Baichuan wake-up issue and
449
456
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19810,6 +19817,33 @@ var RecentTracksQueryInput = object({
19810
19817
  */
19811
19818
  classes: array(string()).optional()
19812
19819
  });
19820
+ /**
19821
+ * A Summary (D359): the per-camera session envelope that references tracks.
19822
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19823
+ * served by the event-media plane by key), null until the first frame with a
19824
+ * member visible has been materialised.
19825
+ */
19826
+ var SummarySchema = object({
19827
+ id: string(),
19828
+ deviceId: number(),
19829
+ openedAt: number(),
19830
+ lastActiveAt: number(),
19831
+ sealedAt: number().nullable(),
19832
+ memberCount: number().int().nonnegative(),
19833
+ groupShotKey: string().nullable()
19834
+ });
19835
+ var SummariesQueryInput = object({
19836
+ deviceIds: array(number()).min(1),
19837
+ since: number().optional(),
19838
+ until: number().optional(),
19839
+ limit: number().int().min(1).max(200).default(50)
19840
+ });
19841
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19842
+ var SummaryDetailSchema = object({
19843
+ summary: SummarySchema,
19844
+ /** Member track ids, in absorption order. */
19845
+ trackIds: array(string()).readonly()
19846
+ });
19813
19847
  var RecentTracksPageSchema = object({
19814
19848
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19815
19849
  tracks: array(TrackSchema).readonly(),
@@ -20210,7 +20244,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20210
20244
  * timeline would read as a camera that saw nothing.
20211
20245
  */
20212
20246
  classes: array(string()).optional()
20213
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
20247
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20214
20248
  kind: "mutation",
20215
20249
  auth: "admin"
20216
20250
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -23947,6 +23981,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23947
23981
  deviceId: number(),
23948
23982
  status: BatteryStatusSchema
23949
23983
  });
23984
+ /**
23985
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23986
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23987
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
23988
+ * one Home Assistant projection.
23989
+ */
23990
+ var NetworkLinkStatusSchema = object({
23991
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
23992
+ type: _enum([
23993
+ "wifi",
23994
+ "ethernet",
23995
+ "cellular",
23996
+ "unknown"
23997
+ ]),
23998
+ /**
23999
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
24000
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
24001
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
24002
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
24003
+ * SKIP a null rather than coerce it.
24004
+ */
24005
+ signalPercent: number().min(0).max(100).nullable(),
24006
+ /** Raw received signal strength in dBm, when the firmware reports one. */
24007
+ rssiDbm: number().optional(),
24008
+ /** Network name of a wireless link, when the firmware reports it. */
24009
+ ssid: string().optional(),
24010
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
24011
+ lastUpdated: number()
24012
+ });
24013
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
24014
+ deviceId: number(),
24015
+ status: NetworkLinkStatusSchema
24016
+ });
23950
24017
  object({
23951
24018
  on: boolean(),
23952
24019
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -33238,6 +33305,12 @@ Object.freeze({
33238
33305
  addonId: null,
33239
33306
  access: "view"
33240
33307
  },
33308
+ "pipelineAnalytics.getSummary": {
33309
+ capName: "pipeline-analytics",
33310
+ capScope: "device",
33311
+ addonId: null,
33312
+ access: "view"
33313
+ },
33241
33314
  "pipelineAnalytics.getTrack": {
33242
33315
  capName: "pipeline-analytics",
33243
33316
  capScope: "device",
@@ -33316,6 +33389,12 @@ Object.freeze({
33316
33389
  addonId: null,
33317
33390
  access: "view"
33318
33391
  },
33392
+ "pipelineAnalytics.listSummaries": {
33393
+ capName: "pipeline-analytics",
33394
+ capScope: "device",
33395
+ addonId: null,
33396
+ access: "view"
33397
+ },
33319
33398
  "pipelineAnalytics.listTrackMedia": {
33320
33399
  capName: "pipeline-analytics",
33321
33400
  capScope: "device",
@@ -37011,6 +37090,11 @@ Object.freeze({
37011
37090
  form: "array",
37012
37091
  optional: true
37013
37092
  }],
37093
+ "pipelineAnalytics.listSummaries": [{
37094
+ name: "deviceIds",
37095
+ form: "array",
37096
+ optional: false
37097
+ }],
37014
37098
  "pipelineAnalytics.listTrackMedia": [{
37015
37099
  name: "deviceId",
37016
37100
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-hap",
3
- "version": "1.2.79",
3
+ "version": "1.2.81",
4
4
  "description": "HomeKit (HAP) exporter for CamStack devices. Publishes each exposed device as its own HomeKit accessory: cameras and doorbells with SRTP streaming, HomeKit Secure Video, motion, two-way audio, PTZ and battery; switches, lights, locks and sensors through a capability→service table.",
5
5
  "keywords": [
6
6
  "camstack",