@camstack/addon-notifiers 1.2.72 → 1.2.74

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
@@ -29,7 +29,7 @@ let node_fs = require("node:fs");
29
29
  let node_path = require("node:path");
30
30
  node_path = __toESM(node_path);
31
31
  let node_url = require("node:url");
32
- //#region ../types/dist/event-category-BZL-fdNj.mjs
32
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
33
33
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
34
34
  EventCategory["SystemBoot"] = "system.boot";
35
35
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -401,6 +401,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
401
401
  */
402
402
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
403
403
  /**
404
+ * Cap event fired by every device that registers the `network-link`
405
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
406
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
407
+ * reading that moved.
408
+ */
409
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
410
+ /**
404
411
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
405
412
  * "wake in progress" window — between the Baichuan wake-up issue and
406
413
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19209,6 +19216,33 @@ var RecentTracksQueryInput = object({
19209
19216
  */
19210
19217
  classes: array(string()).optional()
19211
19218
  });
19219
+ /**
19220
+ * A Summary (D359): the per-camera session envelope that references tracks.
19221
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19222
+ * served by the event-media plane by key), null until the first frame with a
19223
+ * member visible has been materialised.
19224
+ */
19225
+ var SummarySchema = object({
19226
+ id: string(),
19227
+ deviceId: number(),
19228
+ openedAt: number(),
19229
+ lastActiveAt: number(),
19230
+ sealedAt: number().nullable(),
19231
+ memberCount: number().int().nonnegative(),
19232
+ groupShotKey: string().nullable()
19233
+ });
19234
+ var SummariesQueryInput = object({
19235
+ deviceIds: array(number()).min(1),
19236
+ since: number().optional(),
19237
+ until: number().optional(),
19238
+ limit: number().int().min(1).max(200).default(50)
19239
+ });
19240
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19241
+ var SummaryDetailSchema = object({
19242
+ summary: SummarySchema,
19243
+ /** Member track ids, in absorption order. */
19244
+ trackIds: array(string()).readonly()
19245
+ });
19212
19246
  var RecentTracksPageSchema = object({
19213
19247
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19214
19248
  tracks: array(TrackSchema).readonly(),
@@ -19609,7 +19643,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19609
19643
  * timeline would read as a camera that saw nothing.
19610
19644
  */
19611
19645
  classes: array(string()).optional()
19612
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
19646
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19613
19647
  kind: "mutation",
19614
19648
  auth: "admin"
19615
19649
  }), 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({
@@ -23342,6 +23376,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23342
23376
  deviceId: number(),
23343
23377
  status: BatteryStatusSchema
23344
23378
  });
23379
+ /**
23380
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23381
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23382
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
23383
+ * one Home Assistant projection.
23384
+ */
23385
+ var NetworkLinkStatusSchema = object({
23386
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
23387
+ type: _enum([
23388
+ "wifi",
23389
+ "ethernet",
23390
+ "cellular",
23391
+ "unknown"
23392
+ ]),
23393
+ /**
23394
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
23395
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
23396
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
23397
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
23398
+ * SKIP a null rather than coerce it.
23399
+ */
23400
+ signalPercent: number().min(0).max(100).nullable(),
23401
+ /** Raw received signal strength in dBm, when the firmware reports one. */
23402
+ rssiDbm: number().optional(),
23403
+ /** Network name of a wireless link, when the firmware reports it. */
23404
+ ssid: string().optional(),
23405
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
23406
+ lastUpdated: number()
23407
+ });
23408
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
23409
+ deviceId: number(),
23410
+ status: NetworkLinkStatusSchema
23411
+ });
23345
23412
  object({
23346
23413
  on: boolean(),
23347
23414
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -32564,6 +32631,12 @@ Object.freeze({
32564
32631
  addonId: null,
32565
32632
  access: "view"
32566
32633
  },
32634
+ "pipelineAnalytics.getSummary": {
32635
+ capName: "pipeline-analytics",
32636
+ capScope: "device",
32637
+ addonId: null,
32638
+ access: "view"
32639
+ },
32567
32640
  "pipelineAnalytics.getTrack": {
32568
32641
  capName: "pipeline-analytics",
32569
32642
  capScope: "device",
@@ -32642,6 +32715,12 @@ Object.freeze({
32642
32715
  addonId: null,
32643
32716
  access: "view"
32644
32717
  },
32718
+ "pipelineAnalytics.listSummaries": {
32719
+ capName: "pipeline-analytics",
32720
+ capScope: "device",
32721
+ addonId: null,
32722
+ access: "view"
32723
+ },
32645
32724
  "pipelineAnalytics.listTrackMedia": {
32646
32725
  capName: "pipeline-analytics",
32647
32726
  capScope: "device",
@@ -36337,6 +36416,11 @@ Object.freeze({
36337
36416
  form: "array",
36338
36417
  optional: true
36339
36418
  }],
36419
+ "pipelineAnalytics.listSummaries": [{
36420
+ name: "deviceIds",
36421
+ form: "array",
36422
+ optional: false
36423
+ }],
36340
36424
  "pipelineAnalytics.listTrackMedia": [{
36341
36425
  name: "deviceId",
36342
36426
  form: "single",
package/dist/addon.mjs CHANGED
@@ -2,7 +2,7 @@ import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
2
2
  import { readFileSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- //#region ../types/dist/event-category-BZL-fdNj.mjs
5
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -374,6 +374,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
374
374
  */
375
375
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
376
376
  /**
377
+ * Cap event fired by every device that registers the `network-link`
378
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
379
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
380
+ * reading that moved.
381
+ */
382
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
383
+ /**
377
384
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
378
385
  * "wake in progress" window — between the Baichuan wake-up issue and
379
386
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19182,6 +19189,33 @@ var RecentTracksQueryInput = object({
19182
19189
  */
19183
19190
  classes: array(string()).optional()
19184
19191
  });
19192
+ /**
19193
+ * A Summary (D359): the per-camera session envelope that references tracks.
19194
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19195
+ * served by the event-media plane by key), null until the first frame with a
19196
+ * member visible has been materialised.
19197
+ */
19198
+ var SummarySchema = object({
19199
+ id: string(),
19200
+ deviceId: number(),
19201
+ openedAt: number(),
19202
+ lastActiveAt: number(),
19203
+ sealedAt: number().nullable(),
19204
+ memberCount: number().int().nonnegative(),
19205
+ groupShotKey: string().nullable()
19206
+ });
19207
+ var SummariesQueryInput = object({
19208
+ deviceIds: array(number()).min(1),
19209
+ since: number().optional(),
19210
+ until: number().optional(),
19211
+ limit: number().int().min(1).max(200).default(50)
19212
+ });
19213
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19214
+ var SummaryDetailSchema = object({
19215
+ summary: SummarySchema,
19216
+ /** Member track ids, in absorption order. */
19217
+ trackIds: array(string()).readonly()
19218
+ });
19185
19219
  var RecentTracksPageSchema = object({
19186
19220
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19187
19221
  tracks: array(TrackSchema).readonly(),
@@ -19582,7 +19616,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19582
19616
  * timeline would read as a camera that saw nothing.
19583
19617
  */
19584
19618
  classes: array(string()).optional()
19585
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
19619
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19586
19620
  kind: "mutation",
19587
19621
  auth: "admin"
19588
19622
  }), 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({
@@ -23315,6 +23349,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23315
23349
  deviceId: number(),
23316
23350
  status: BatteryStatusSchema
23317
23351
  });
23352
+ /**
23353
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23354
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23355
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
23356
+ * one Home Assistant projection.
23357
+ */
23358
+ var NetworkLinkStatusSchema = object({
23359
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
23360
+ type: _enum([
23361
+ "wifi",
23362
+ "ethernet",
23363
+ "cellular",
23364
+ "unknown"
23365
+ ]),
23366
+ /**
23367
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
23368
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
23369
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
23370
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
23371
+ * SKIP a null rather than coerce it.
23372
+ */
23373
+ signalPercent: number().min(0).max(100).nullable(),
23374
+ /** Raw received signal strength in dBm, when the firmware reports one. */
23375
+ rssiDbm: number().optional(),
23376
+ /** Network name of a wireless link, when the firmware reports it. */
23377
+ ssid: string().optional(),
23378
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
23379
+ lastUpdated: number()
23380
+ });
23381
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
23382
+ deviceId: number(),
23383
+ status: NetworkLinkStatusSchema
23384
+ });
23318
23385
  object({
23319
23386
  on: boolean(),
23320
23387
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -32537,6 +32604,12 @@ Object.freeze({
32537
32604
  addonId: null,
32538
32605
  access: "view"
32539
32606
  },
32607
+ "pipelineAnalytics.getSummary": {
32608
+ capName: "pipeline-analytics",
32609
+ capScope: "device",
32610
+ addonId: null,
32611
+ access: "view"
32612
+ },
32540
32613
  "pipelineAnalytics.getTrack": {
32541
32614
  capName: "pipeline-analytics",
32542
32615
  capScope: "device",
@@ -32615,6 +32688,12 @@ Object.freeze({
32615
32688
  addonId: null,
32616
32689
  access: "view"
32617
32690
  },
32691
+ "pipelineAnalytics.listSummaries": {
32692
+ capName: "pipeline-analytics",
32693
+ capScope: "device",
32694
+ addonId: null,
32695
+ access: "view"
32696
+ },
32618
32697
  "pipelineAnalytics.listTrackMedia": {
32619
32698
  capName: "pipeline-analytics",
32620
32699
  capScope: "device",
@@ -36310,6 +36389,11 @@ Object.freeze({
36310
36389
  form: "array",
36311
36390
  optional: true
36312
36391
  }],
36392
+ "pipelineAnalytics.listSummaries": [{
36393
+ name: "deviceIds",
36394
+ form: "array",
36395
+ optional: false
36396
+ }],
36313
36397
  "pipelineAnalytics.listTrackMedia": [{
36314
36398
  name: "deviceId",
36315
36399
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-notifiers",
3
- "version": "1.2.72",
3
+ "version": "1.2.74",
4
4
  "description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
5
5
  "keywords": [
6
6
  "camstack",