@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.
- package/dist/hap-export.addon.js +86 -2
- package/dist/hap-export.addon.mjs +86 -2
- package/package.json +1 -1
package/dist/hap-export.addon.js
CHANGED
|
@@ -84,7 +84,7 @@ function carryForward(base, existing, keys) {
|
|
|
84
84
|
return out;
|
|
85
85
|
}
|
|
86
86
|
//#endregion
|
|
87
|
-
//#region ../types/dist/event-category-
|
|
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-
|
|
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.
|
|
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",
|