hap-nodejs 1.0.0-beta.2 → 1.0.0-beta.3

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.
Files changed (265) hide show
  1. package/@types/bonjour-hap.d.ts +4 -3
  2. package/@types/simple-plist.d.ts +2 -1
  3. package/README.md +2 -1
  4. package/dist/BridgedCore.js +7 -5
  5. package/dist/BridgedCore.js.map +1 -1
  6. package/dist/Core.js +14 -8
  7. package/dist/Core.js.map +1 -1
  8. package/dist/accessories/AirConditioner_accessory.d.ts +2 -0
  9. package/dist/accessories/AirConditioner_accessory.d.ts.map +1 -0
  10. package/dist/accessories/AirConditioner_accessory.js +128 -0
  11. package/dist/accessories/AirConditioner_accessory.js.map +1 -0
  12. package/dist/accessories/AppleTVRemote_accessory.d.ts +2 -0
  13. package/dist/accessories/AppleTVRemote_accessory.d.ts.map +1 -0
  14. package/dist/accessories/AppleTVRemote_accessory.js +159 -0
  15. package/dist/accessories/AppleTVRemote_accessory.js.map +1 -0
  16. package/dist/accessories/Camera_accessory.d.ts +2 -0
  17. package/dist/accessories/Camera_accessory.d.ts.map +1 -0
  18. package/dist/accessories/Camera_accessory.js +630 -0
  19. package/dist/accessories/Camera_accessory.js.map +1 -0
  20. package/dist/accessories/Fan_accessory.d.ts +2 -0
  21. package/dist/accessories/Fan_accessory.d.ts.map +1 -0
  22. package/dist/accessories/Fan_accessory.js +80 -0
  23. package/dist/accessories/Fan_accessory.js.map +1 -0
  24. package/dist/accessories/GarageDoorOpener_accessory.d.ts +2 -0
  25. package/dist/accessories/GarageDoorOpener_accessory.d.ts.map +1 -0
  26. package/dist/accessories/GarageDoorOpener_accessory.js +78 -0
  27. package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -0
  28. package/dist/accessories/Light-AdaptiveLighting_accessory.d.ts +2 -0
  29. package/dist/accessories/Light-AdaptiveLighting_accessory.d.ts.map +1 -0
  30. package/dist/accessories/Light-AdaptiveLighting_accessory.js +96 -0
  31. package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -0
  32. package/dist/accessories/Light_accessory.d.ts +2 -0
  33. package/dist/accessories/Light_accessory.d.ts.map +1 -0
  34. package/dist/accessories/Light_accessory.js +148 -0
  35. package/dist/accessories/Light_accessory.js.map +1 -0
  36. package/dist/accessories/Lock_accessory.d.ts +2 -0
  37. package/dist/accessories/Lock_accessory.d.ts.map +1 -0
  38. package/dist/accessories/Lock_accessory.js +76 -0
  39. package/dist/accessories/Lock_accessory.js.map +1 -0
  40. package/dist/accessories/MotionSensor_accessory.d.ts +2 -0
  41. package/dist/accessories/MotionSensor_accessory.d.ts.map +1 -0
  42. package/dist/accessories/MotionSensor_accessory.js +45 -0
  43. package/dist/accessories/MotionSensor_accessory.js.map +1 -0
  44. package/dist/accessories/Outlet_accessory.d.ts +2 -0
  45. package/dist/accessories/Outlet_accessory.d.ts.map +1 -0
  46. package/dist/accessories/Outlet_accessory.js +79 -0
  47. package/dist/accessories/Outlet_accessory.js.map +1 -0
  48. package/dist/accessories/SmartSpeaker_accessory.d.ts +2 -0
  49. package/dist/accessories/SmartSpeaker_accessory.d.ts.map +1 -0
  50. package/dist/accessories/SmartSpeaker_accessory.js +44 -0
  51. package/dist/accessories/SmartSpeaker_accessory.js.map +1 -0
  52. package/dist/accessories/Sprinkler_accessory.d.ts +2 -0
  53. package/dist/accessories/Sprinkler_accessory.d.ts.map +1 -0
  54. package/dist/accessories/Sprinkler_accessory.js +128 -0
  55. package/dist/accessories/Sprinkler_accessory.js.map +1 -0
  56. package/dist/accessories/TV_accessory.d.ts +2 -0
  57. package/dist/accessories/TV_accessory.d.ts.map +1 -0
  58. package/dist/accessories/TV_accessory.js +101 -0
  59. package/dist/accessories/TV_accessory.js.map +1 -0
  60. package/dist/accessories/TemperatureSensor_accessory.d.ts +2 -0
  61. package/dist/accessories/TemperatureSensor_accessory.d.ts.map +1 -0
  62. package/dist/accessories/TemperatureSensor_accessory.js +44 -0
  63. package/dist/accessories/TemperatureSensor_accessory.js.map +1 -0
  64. package/dist/accessories/Wi-FiRouter_accessory.d.ts +3 -0
  65. package/dist/accessories/Wi-FiRouter_accessory.d.ts.map +1 -0
  66. package/dist/accessories/Wi-FiRouter_accessory.js +17 -0
  67. package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -0
  68. package/dist/accessories/Wi-FiSatellite_accessory.d.ts +3 -0
  69. package/dist/accessories/Wi-FiSatellite_accessory.d.ts.map +1 -0
  70. package/dist/accessories/Wi-FiSatellite_accessory.js +19 -0
  71. package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -0
  72. package/dist/accessories/gstreamer-audioProducer.d.ts +25 -0
  73. package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -0
  74. package/dist/accessories/gstreamer-audioProducer.js +155 -0
  75. package/dist/accessories/gstreamer-audioProducer.js.map +1 -0
  76. package/dist/accessories/types.d.ts +78 -0
  77. package/dist/accessories/types.d.ts.map +1 -0
  78. package/dist/accessories/types.js +88 -0
  79. package/dist/accessories/types.js.map +1 -0
  80. package/dist/index.d.ts +54 -27
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +34 -11
  83. package/dist/index.js.map +1 -1
  84. package/dist/internal-types.d.ts +65 -124
  85. package/dist/internal-types.d.ts.map +1 -1
  86. package/dist/internal-types.js +66 -5
  87. package/dist/internal-types.js.map +1 -1
  88. package/dist/lib/Accessory.d.ts +147 -60
  89. package/dist/lib/Accessory.d.ts.map +1 -1
  90. package/dist/lib/Accessory.js +566 -475
  91. package/dist/lib/Accessory.js.map +1 -1
  92. package/dist/lib/AccessoryLoader.d.ts +20 -8
  93. package/dist/lib/AccessoryLoader.d.ts.map +1 -1
  94. package/dist/lib/AccessoryLoader.js +115 -93
  95. package/dist/lib/AccessoryLoader.js.map +1 -1
  96. package/dist/lib/Advertiser.d.ts +99 -5
  97. package/dist/lib/Advertiser.d.ts.map +1 -1
  98. package/dist/lib/Advertiser.js +564 -22
  99. package/dist/lib/Advertiser.js.map +1 -1
  100. package/dist/lib/Bridge.d.ts +3 -1
  101. package/dist/lib/Bridge.d.ts.map +1 -1
  102. package/dist/lib/Bridge.js +2 -0
  103. package/dist/lib/Bridge.js.map +1 -1
  104. package/dist/lib/Characteristic.d.ts +918 -59
  105. package/dist/lib/Characteristic.d.ts.map +1 -1
  106. package/dist/lib/Characteristic.js +308 -257
  107. package/dist/lib/Characteristic.js.map +1 -1
  108. package/dist/lib/HAPServer.d.ts +114 -43
  109. package/dist/lib/HAPServer.d.ts.map +1 -1
  110. package/dist/lib/HAPServer.js +269 -405
  111. package/dist/lib/HAPServer.js.map +1 -1
  112. package/dist/lib/Service.d.ts +339 -15
  113. package/dist/lib/Service.d.ts.map +1 -1
  114. package/dist/lib/Service.js +59 -50
  115. package/dist/lib/Service.js.map +1 -1
  116. package/dist/lib/camera/Camera.d.ts +15 -6
  117. package/dist/lib/camera/Camera.d.ts.map +1 -1
  118. package/dist/lib/camera/Camera.js +6 -3
  119. package/dist/lib/camera/Camera.js.map +1 -1
  120. package/dist/lib/camera/RTPProxy.d.ts +24 -19
  121. package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
  122. package/dist/lib/camera/RTPProxy.js +230 -207
  123. package/dist/lib/camera/RTPProxy.js.map +1 -1
  124. package/dist/lib/camera/RTPStreamManagement.d.ts +202 -43
  125. package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
  126. package/dist/lib/camera/RTPStreamManagement.js +303 -189
  127. package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
  128. package/dist/lib/camera/RecordingManagement.d.ts +326 -0
  129. package/dist/lib/camera/RecordingManagement.d.ts.map +1 -0
  130. package/dist/lib/camera/RecordingManagement.js +833 -0
  131. package/dist/lib/camera/RecordingManagement.js.map +1 -0
  132. package/dist/lib/camera/index.d.ts +4 -3
  133. package/dist/lib/camera/index.d.ts.map +1 -1
  134. package/dist/lib/camera/index.js +1 -0
  135. package/dist/lib/camera/index.js.map +1 -1
  136. package/dist/lib/controller/AdaptiveLightingController.d.ts +37 -11
  137. package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
  138. package/dist/lib/controller/AdaptiveLightingController.js +101 -86
  139. package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
  140. package/dist/lib/controller/CameraController.d.ts +290 -12
  141. package/dist/lib/controller/CameraController.d.ts.map +1 -1
  142. package/dist/lib/controller/CameraController.js +403 -47
  143. package/dist/lib/controller/CameraController.js.map +1 -1
  144. package/dist/lib/controller/Controller.d.ts +31 -10
  145. package/dist/lib/controller/Controller.d.ts.map +1 -1
  146. package/dist/lib/controller/Controller.js +7 -0
  147. package/dist/lib/controller/Controller.js.map +1 -1
  148. package/dist/lib/controller/DoorbellController.d.ts +47 -1
  149. package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
  150. package/dist/lib/controller/DoorbellController.js +65 -11
  151. package/dist/lib/controller/DoorbellController.js.map +1 -1
  152. package/dist/lib/controller/RemoteController.d.ts +111 -42
  153. package/dist/lib/controller/RemoteController.d.ts.map +1 -1
  154. package/dist/lib/controller/RemoteController.js +228 -203
  155. package/dist/lib/controller/RemoteController.js.map +1 -1
  156. package/dist/lib/controller/index.d.ts +4 -4
  157. package/dist/lib/datastream/DataStreamManagement.d.ts +25 -19
  158. package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
  159. package/dist/lib/datastream/DataStreamManagement.js +42 -35
  160. package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
  161. package/dist/lib/datastream/DataStreamParser.d.ts +63 -24
  162. package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
  163. package/dist/lib/datastream/DataStreamParser.js +132 -86
  164. package/dist/lib/datastream/DataStreamParser.js.map +1 -1
  165. package/dist/lib/datastream/DataStreamServer.d.ts +154 -50
  166. package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
  167. package/dist/lib/datastream/DataStreamServer.js +242 -147
  168. package/dist/lib/datastream/DataStreamServer.js.map +1 -1
  169. package/dist/lib/datastream/index.d.ts +3 -3
  170. package/dist/lib/definitions/CharacteristicDefinitions.d.ts +181 -0
  171. package/dist/lib/definitions/CharacteristicDefinitions.d.ts.map +1 -1
  172. package/dist/lib/definitions/CharacteristicDefinitions.js +968 -499
  173. package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
  174. package/dist/lib/definitions/ServiceDefinitions.d.ts +58 -0
  175. package/dist/lib/definitions/ServiceDefinitions.d.ts.map +1 -1
  176. package/dist/lib/definitions/ServiceDefinitions.js +173 -6
  177. package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
  178. package/dist/lib/definitions/generate-definitions.d.ts +1 -0
  179. package/dist/lib/definitions/generate-definitions.d.ts.map +1 -1
  180. package/dist/lib/definitions/generate-definitions.js +29 -21
  181. package/dist/lib/definitions/generate-definitions.js.map +1 -1
  182. package/dist/lib/definitions/generator-configuration.d.ts.map +1 -1
  183. package/dist/lib/definitions/generator-configuration.js +62 -29
  184. package/dist/lib/definitions/generator-configuration.js.map +1 -1
  185. package/dist/lib/model/AccessoryInfo.d.ts +16 -13
  186. package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
  187. package/dist/lib/model/AccessoryInfo.js +88 -83
  188. package/dist/lib/model/AccessoryInfo.js.map +1 -1
  189. package/dist/lib/model/ControllerStorage.d.ts +3 -0
  190. package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
  191. package/dist/lib/model/ControllerStorage.js +7 -4
  192. package/dist/lib/model/ControllerStorage.js.map +1 -1
  193. package/dist/lib/model/HAPStorage.d.ts +3 -0
  194. package/dist/lib/model/HAPStorage.d.ts.map +1 -1
  195. package/dist/lib/model/HAPStorage.js +4 -0
  196. package/dist/lib/model/HAPStorage.js.map +1 -1
  197. package/dist/lib/model/IdentifierCache.d.ts +12 -11
  198. package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
  199. package/dist/lib/model/IdentifierCache.js +68 -65
  200. package/dist/lib/model/IdentifierCache.js.map +1 -1
  201. package/dist/lib/tv/AccessControlManagement.d.ts +12 -1
  202. package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
  203. package/dist/lib/tv/AccessControlManagement.js +13 -5
  204. package/dist/lib/tv/AccessControlManagement.js.map +1 -1
  205. package/dist/lib/util/clone.d.ts +2 -1
  206. package/dist/lib/util/clone.d.ts.map +1 -1
  207. package/dist/lib/util/clone.js +2 -0
  208. package/dist/lib/util/clone.js.map +1 -1
  209. package/dist/lib/util/color-utils.d.ts +4 -1
  210. package/dist/lib/util/color-utils.d.ts.map +1 -1
  211. package/dist/lib/util/color-utils.js +5 -2
  212. package/dist/lib/util/color-utils.js.map +1 -1
  213. package/dist/lib/util/eventedhttp.d.ts +62 -22
  214. package/dist/lib/util/eventedhttp.d.ts.map +1 -1
  215. package/dist/lib/util/eventedhttp.js +236 -180
  216. package/dist/lib/util/eventedhttp.js.map +1 -1
  217. package/dist/lib/util/hapCrypto.d.ts +35 -7
  218. package/dist/lib/util/hapCrypto.d.ts.map +1 -1
  219. package/dist/lib/util/hapCrypto.js +86 -78
  220. package/dist/lib/util/hapCrypto.js.map +1 -1
  221. package/dist/lib/util/hapStatusError.d.ts +2 -0
  222. package/dist/lib/util/hapStatusError.d.ts.map +1 -1
  223. package/dist/lib/util/hapStatusError.js +5 -3
  224. package/dist/lib/util/hapStatusError.js.map +1 -1
  225. package/dist/lib/util/net-utils.d.ts +7 -0
  226. package/dist/lib/util/net-utils.d.ts.map +1 -1
  227. package/dist/lib/util/net-utils.js +11 -4
  228. package/dist/lib/util/net-utils.js.map +1 -1
  229. package/dist/lib/util/once.d.ts +6 -1
  230. package/dist/lib/util/once.d.ts.map +1 -1
  231. package/dist/lib/util/once.js +9 -3
  232. package/dist/lib/util/once.js.map +1 -1
  233. package/dist/lib/util/promise-utils.d.ts +15 -0
  234. package/dist/lib/util/promise-utils.d.ts.map +1 -0
  235. package/dist/lib/util/promise-utils.js +36 -0
  236. package/dist/lib/util/promise-utils.js.map +1 -0
  237. package/dist/lib/util/request-util.d.ts +16 -0
  238. package/dist/lib/util/request-util.d.ts.map +1 -1
  239. package/dist/lib/util/request-util.js +43 -27
  240. package/dist/lib/util/request-util.js.map +1 -1
  241. package/dist/lib/util/time.d.ts +7 -1
  242. package/dist/lib/util/time.d.ts.map +1 -1
  243. package/dist/lib/util/time.js +13 -7
  244. package/dist/lib/util/time.js.map +1 -1
  245. package/dist/lib/util/tlv.d.ts +95 -5
  246. package/dist/lib/util/tlv.d.ts.map +1 -1
  247. package/dist/lib/util/tlv.js +96 -24
  248. package/dist/lib/util/tlv.js.map +1 -1
  249. package/dist/lib/util/uuid.d.ts +2 -3
  250. package/dist/lib/util/uuid.d.ts.map +1 -1
  251. package/dist/lib/util/uuid.js +25 -19
  252. package/dist/lib/util/uuid.js.map +1 -1
  253. package/dist/types.d.ts +271 -18
  254. package/dist/types.d.ts.map +1 -1
  255. package/dist/types.js +8 -0
  256. package/dist/types.js.map +1 -1
  257. package/package.json +28 -27
  258. package/dist/lib/util/setupcode.d.ts +0 -5
  259. package/dist/lib/util/setupcode.d.ts.map +0 -1
  260. package/dist/lib/util/setupcode.js +0 -49
  261. package/dist/lib/util/setupcode.js.map +0 -1
  262. package/dist/lib/util/setupid.d.ts +0 -5
  263. package/dist/lib/util/setupid.d.ts.map +0 -1
  264. package/dist/lib/util/setupid.js +0 -52
  265. package/dist/lib/util/setupid.js.map +0 -1
@@ -1,14 +1,20 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { EventEmitter } from "events";
3
4
  import { SessionIdentifier } from "../../types";
4
- import { CameraStreamingOptions, PrepareStreamRequest, PrepareStreamResponse, RTPStreamManagement, SnapshotRequest, StreamingRequest } from "../camera";
5
- import type { Doorbell, Microphone, Speaker } from "../definitions";
5
+ import { CameraRecordingConfiguration, CameraRecordingOptions, CameraStreamingOptions, EventTriggerOption, PrepareStreamRequest, PrepareStreamResponse, RecordingManagement, RecordingManagementState, RecordingPacket, RTPStreamManagement, RTPStreamManagementState, SnapshotRequest, StreamingRequest } from "../camera";
6
+ import { HDSProtocolSpecificErrorReason } from "../datastream";
7
+ import { CameraOperatingMode, CameraRecordingManagement, DataStreamTransportManagement, Doorbell, Microphone, MotionSensor, OccupancySensor, Speaker } from "../definitions";
6
8
  import { HAPStatus } from "../HAPServer";
7
- import { Controller, ControllerIdentifier, ControllerServiceMap } from "./Controller";
9
+ import { Service } from "../Service";
10
+ import { ControllerIdentifier, ControllerServiceMap, SerializableController, StateChangeDelegate } from "./Controller";
11
+ /**
12
+ * @group Camera
13
+ */
8
14
  export interface CameraControllerOptions {
9
15
  /**
10
16
  * Amount of parallel camera streams the accessory is capable of running.
11
- * As of the official HAP specification non Secure Video cameras have a minimum required amount of 2 (but 1 is also fine).
17
+ * As of the official HAP specification non SecureVideo cameras have a minimum required amount of 2 (but 1 is also fine).
12
18
  * Secure Video cameras just expose 1 stream.
13
19
  *
14
20
  * Default value: 1
@@ -22,10 +28,89 @@ export interface CameraControllerOptions {
22
28
  * Options regarding video/audio streaming
23
29
  */
24
30
  streamingOptions: CameraStreamingOptions;
31
+ /**
32
+ * When supplying this option, it will enable support for HomeKit Secure Video.
33
+ * This will create the {@link Service.CameraRecordingManagement}, {@link Service.CameraOperatingMode}
34
+ * and {@link Service.DataStreamTransportManagement} services.
35
+ *
36
+ * NOTE: The controller only initializes the required characteristics for the {@link Service.CameraOperatingMode}.
37
+ * You may add optional characteristics, if required, by accessing the service directly `CameraController.recordingManagement.operatingModeService`.
38
+ */
39
+ recording?: {
40
+ /**
41
+ * Options regarding Recordings (Secure Video)
42
+ */
43
+ options: CameraRecordingOptions;
44
+ /**
45
+ * Delegate which handles the audio/video recording data streaming on motion.
46
+ */
47
+ delegate: CameraRecordingDelegate;
48
+ };
49
+ /**
50
+ * This config section configures optional sensors for the camera.
51
+ * It e.g. may be used to set up a {@link EventTriggerOption.MOTION} trigger when configuring Secure Video.
52
+ *
53
+ * You may either specify and provide the desired {@link Service}s or specify their creation and maintenance using a `boolean` flag.
54
+ * In this case the controller will create and maintain the service for you.
55
+ * Otherwise, when you supply an already created instance of the {@link Service}, you are responsible yourself to manage the service
56
+ * (e.g. creating, restoring, adding to the accessory, ...).
57
+ *
58
+ * The services can be accessed through the documented property after the call to {@link Accessory.configureController} has returned.
59
+ */
60
+ sensors?: {
61
+ /**
62
+ * Define if a {@link Service.MotionSensor} should be created/associated with the controller.
63
+ *
64
+ * You may access the created service via the {@link CameraController.motionService} property to configure listeners.
65
+ *
66
+ * ## HomeKit Secure Video:
67
+ *
68
+ * If supplied, this sensor will be used as a {@link EventTriggerOption.MOTION} trigger.
69
+ * The characteristic {@link Characteristic.StatusActive} will be added, which is used to enable or disable the sensor.
70
+ */
71
+ motion?: Service | boolean;
72
+ /**
73
+ * Define if a {@link Service.OccupancySensor} should be created/associated with the controller.
74
+ *
75
+ * You may access the created service via the {@link CameraController.occupancyService} property to configure listeners.
76
+ *
77
+ * ## HomeKit Secure Video:
78
+ *
79
+ * The characteristic {@link Characteristic.StatusActive} will be added, which is used to enable or disable the sensor.
80
+ */
81
+ occupancy?: Service | boolean;
82
+ };
83
+ }
84
+ /**
85
+ * @group Camera
86
+ */
87
+ export type SnapshotRequestCallback = (error?: Error | HAPStatus, buffer?: Buffer) => void;
88
+ /**
89
+ * @group Camera
90
+ */
91
+ export type PrepareStreamCallback = (error?: Error, response?: PrepareStreamResponse) => void;
92
+ /**
93
+ * @group Camera
94
+ */
95
+ export type StreamRequestCallback = (error?: Error) => void;
96
+ /**
97
+ * @group Camera
98
+ */
99
+ export declare const enum ResourceRequestReason {
100
+ /**
101
+ * The reason describes periodic resource requests.
102
+ * In the example of camera image snapshots those are the typical preview images every 10 seconds.
103
+ */
104
+ PERIODIC = 0,
105
+ /**
106
+ * The resource request is the result of some event.
107
+ * In the example of camera image snapshots, requests are made due to e.g. a motion event or similar.
108
+ */
109
+ EVENT = 1
25
110
  }
26
- export declare type SnapshotRequestCallback = (error?: Error | HAPStatus, buffer?: Buffer) => void;
27
- export declare type PrepareStreamCallback = (error?: Error, response?: PrepareStreamResponse) => void;
28
- export declare type StreamRequestCallback = (error?: Error) => void;
111
+ /**
112
+ * @group Camera
113
+ */
29
114
  export interface CameraStreamingDelegate {
30
115
  /**
31
116
  * This method is called when a HomeKit controller requests a snapshot image for the given camera.
@@ -42,13 +127,163 @@ export interface CameraStreamingDelegate {
42
127
  handleStreamRequest(request: StreamingRequest, callback: StreamRequestCallback): void;
43
128
  }
44
129
  /**
45
- * @private
130
+ * A `CameraRecordingDelegate` is responsible for handling recordings of a HomeKit Secure Video camera.
131
+ *
132
+ * It is responsible for maintaining the prebuffer (see {@link CameraRecordingOptions.prebufferLength},
133
+ * once recording was activated (see {@link updateRecordingActive}).
134
+ *
135
+ * Before recording is considered enabled two things must happen:
136
+ * - Recording must be enabled by the user. Signaled through {@link updateRecordingActive}.
137
+ * - Recording configurations must be selected by a HomeKit controller through {@link updateRecordingConfiguration}.
138
+ *
139
+ * A typical recording event scenario happens as follows:
140
+ * - The camera is in idle mode, maintaining the prebuffer (the duration of the prebuffer depends on the selected {@link CameraRecordingConfiguration}).
141
+ * - A recording event is triggered (e.g. motion or doorbell button press) and the camera signals it through
142
+ * the respective characteristics (e.g. {@link Characteristic.MotionDetected} or {@link Characteristic.ProgrammableSwitchEvent}).
143
+ * Further, the camera saves the content of the prebuffer and starts recording the video.
144
+ * The camera should continue to store the recording until it runs out of space.
145
+ * In any case the camera should preserve recordings which are nearest to the triggered event.
146
+ * A stored recording might be completely deleted if a stream request wasn't initiated for eight seconds.
147
+ * - A HomeKit Controller will open a new recording session to download the next recording.
148
+ * This results in a call to {@link handleRecordingStreamRequest}.
149
+ * - Once the recording event is finished the camera will reset the state accordingly
150
+ * (e.g. in the {@link Service.MotionSensor} or {@link Service.Doorbell} service).
151
+ * It will continue to send the remaining fragments of the currently ongoing recording stream request.
152
+ * - The camera will either reach the end of the recording (and signal this via {@link RecordingPacket.isLast}. Also see {@link acknowledgeStream})
153
+ * or it will continue to stream til the HomeKit Controller closes
154
+ * the stream {@link closeRecordingStream} with reason {@link HDSProtocolSpecificErrorReason.NORMAL}.
155
+ * - The camera goes back into idle mode.
156
+ *
157
+ * @group Camera
158
+ */
159
+ export interface CameraRecordingDelegate {
160
+ /**
161
+ * A call to this method notifies the `CameraRecordingDelegate` about a change to the
162
+ * `CameraRecordingManagement.Active` characteristic. This characteristic controls
163
+ * if the camera should react to recording events.
164
+ *
165
+ * If recording is disabled the camera can stop maintaining its prebuffer.
166
+ * If recording is enabled the camera should start recording into its prebuffer.
167
+ *
168
+ * A `CameraRecordingDelegate` should assume active to be `false` on startup.
169
+ * HAP-NodeJS will persist the state of the `Active` characteristic across reboots
170
+ * and will call {@link updateRecordingActive} accordingly on startup, if recording was previously enabled.
171
+ *
172
+ * NOTE: HAP-NodeJS cannot guarantee that a {@link CameraRecordingConfiguration} is present
173
+ * when recording is activated (e.g. the selected configuration might be erased due to changes
174
+ * in the supplied {@link CameraRecordingOptions}, but the camera is still `active`; or we can't otherwise
175
+ * influence the order which a HomeKit Controller might call those characteristics).
176
+ * However, HAP-NodeJS guarantees that if there is a valid {@link CameraRecordingConfiguration},
177
+ * {@link updateRecordingConfiguration} is called before {@link updateRecordingActive} (when enabling)
178
+ * to avoid any unnecessary and potentially expensive reconfigurations.
179
+ *
180
+ * @param active - Specifies if recording is active or not.
181
+ */
182
+ updateRecordingActive(active: boolean): void;
183
+ /**
184
+ * A call to this method signals that the selected (by the HomeKit Controller)
185
+ * recording configuration of the camera has changed.
186
+ *
187
+ * On startup the delegate should assume `configuration = undefined`.
188
+ * HAP-NodeJS will persist the state of both across reboots and will call
189
+ * {@link updateRecordingConfiguration} on startup if there is a **selected configuration** present.
190
+ *
191
+ * NOTE: An update to the recording configuration might happen while there is still a running
192
+ * recording stream. The camera MUST continue to use the previous configuration for the
193
+ * currently running stream and only apply the updated configuration to the next stream.
194
+ *
195
+ * @param configuration - The {@link CameraRecordingConfiguration}. Reconfigure your recording pipeline accordingly.
196
+ * The parameter might be `undefined` when the selected configuration became invalid. This typically ony happens
197
+ * e.g. due to a factory reset (when all pairings are removed). Disable the recording pipeline in such a case
198
+ * even if recording is still enabled for the camera.
199
+ */
200
+ updateRecordingConfiguration(configuration: CameraRecordingConfiguration | undefined): void;
201
+ /**
202
+ * This method is called to stream the next recording event.
203
+ * It is guaranteed that there is only ever one ongoing recording stream request at a time.
204
+ *
205
+ * When this method is called return the currently ongoing (or next in case of a potentially queued)
206
+ * recording via a `AsyncGenerator`. Every `yield` of the generator represents a complete recording `packet`.
207
+ * The first packet MUST always be the {@link PacketDataType.MEDIA_INITIALIZATION} packet.
208
+ * Any following packet will transport the actual mp4 fragments in {@link PacketDataType.MEDIA_FRAGMENT} packets,
209
+ * starting with the content of the prebuffer. Every {@link PacketDataType.MEDIA_FRAGMENT} starts with a key frame
210
+ * and must not be longer than the specified duration set via the `CameraRecordingConfiguration.mediaContainerConfiguration.fragmentLength`
211
+ * **selected** by the HomeKit Controller in {@link updateRecordingConfiguration}.
212
+ *
213
+ * NOTE: You MUST respect the value of {@link Characteristic.RecordingAudioActive} characteristic of the {@link Service.CameraOperatingMode}
214
+ * service. When the characteristic is set to false you MUST NOT include audio in the mp4 fragments. You can access the characteristic via
215
+ * the `CameraController.recordingManagement.operatingModeService` property.
216
+ *
217
+ * You might throw an error in this method if encountering a non-recoverable state.
218
+ * You may throw a {@link HDSProtocolError} to manually define the {@link HDSProtocolSpecificErrorReason} for the `DATA_SEND` `CLOSE` event.
219
+ *
220
+ * There are three ways an ongoing recording stream can be closed:
221
+ * - Closed by the Accessory: There are no further fragments to transmit. The delegate MUST signal this by setting {@link RecordingPacket.isLast}
222
+ * to `true`. Once the HomeKit Controller receives this last fragment it will call {@link acknowledgeStream} to notify the accessory about
223
+ * the successful transmission.
224
+ * - Closed by the HomeKit Controller (expectedly): After the event trigger has been reset, the accessory continues to stream fragments.
225
+ * At some point the HomeKit Controller will decide to shut down the stream by calling {@link closeRecordingStream} with a reason
226
+ * of {@link HDSProtocolSpecificErrorReason.NORMAL}.
227
+ * - Closed by the HomeKit Controller (unexpectedly): A HomeKit Controller might at any point decide to close a recording stream
228
+ * if it encounters erroneous state. This is signaled by a call to {@link closeRecordingStream} with the respective reason.
229
+ *
230
+ * Once a close of stream is signaled, the `AsyncGenerator` function must return gracefully.
231
+ *
232
+ * For more information about `AsyncGenerator`s you might have a look at:
233
+ * * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of
234
+ *
235
+ * NOTE: HAP-NodeJS guarantees that this method is only called with a valid selected {@link CameraRecordingConfiguration}.
236
+ *
237
+ * NOTE: Don't rely on the streamId for unique identification. Two {@link DataStreamConnection}s might share the same identifier space.
238
+ *
239
+ * @param streamId - The streamId of the currently ongoing stream.
240
+ */
241
+ handleRecordingStreamRequest(streamId: number): AsyncGenerator<RecordingPacket>;
242
+ /**
243
+ * This method is called once the HomeKit Controller acknowledges the `endOfStream`.
244
+ * A `endOfStream` is sent by the accessory by setting {@link RecordingPacket.isLast} to `true` in the last packet yielded
245
+ * by the {@link handleRecordingStreamRequest} `AsyncGenerator`.
246
+ *
247
+ * @param streamId - The streamId of the acknowledged stream.
248
+ */
249
+ acknowledgeStream?(streamId: number): void;
250
+ /**
251
+ * This method is called to notify the delegate that a recording stream started via {@link handleRecordingStreamRequest} was closed.
252
+ *
253
+ * The method is also called if an ongoing recording stream is closed gracefully (using {@link HDSProtocolSpecificErrorReason.NORMAL}).
254
+ * In either case, the delegate should stop supplying further fragments to the recording stream.
255
+ * The `AsyncGenerator` function must return without yielding any further {@link RecordingPacket}s.
256
+ * HAP-NodeJS won't send out any fragments from this point onwards.
257
+ *
258
+ * @param streamId - The streamId for which the close event was sent.
259
+ * @param reason - The reason with which the stream was closed.
260
+ * NOTE: This method is also called in case of a closed connection. This is encoded by setting the `reason` to undefined.
261
+ */
262
+ closeRecordingStream(streamId: number, reason: HDSProtocolSpecificErrorReason | undefined): void;
263
+ }
264
+ /**
265
+ * @group Camera
46
266
  */
47
267
  export interface CameraControllerServiceMap extends ControllerServiceMap {
48
268
  microphone?: Microphone;
49
269
  speaker?: Speaker;
270
+ cameraEventRecordingManagement?: CameraRecordingManagement;
271
+ cameraOperatingMode?: CameraOperatingMode;
272
+ dataStreamTransportManagement?: DataStreamTransportManagement;
273
+ motionService?: MotionSensor;
274
+ occupancyService?: OccupancySensor;
50
275
  doorbell?: Doorbell;
51
276
  }
277
+ /**
278
+ * @group Camera
279
+ */
280
+ export interface CameraControllerState {
281
+ streamManagements: RTPStreamManagementState[];
282
+ recordingManagement?: RecordingManagementState;
283
+ }
284
+ /**
285
+ * @group Camera
286
+ */
52
287
  export declare const enum CameraControllerEvents {
53
288
  /**
54
289
  * Emitted when the mute state or the volume changed. The Apple Home App typically does not set those values
@@ -62,6 +297,9 @@ export declare const enum CameraControllerEvents {
62
297
  */
63
298
  SPEAKER_PROPERTIES_CHANGED = "speaker-change"
64
299
  }
300
+ /**
301
+ * @group Camera
302
+ */
65
303
  export declare interface CameraController {
66
304
  on(event: "microphone-change", listener: (muted: boolean, volume: number) => void): this;
67
305
  on(event: "speaker-change", listener: (muted: boolean, volume: number) => void): this;
@@ -70,23 +308,45 @@ export declare interface CameraController {
70
308
  }
71
309
  /**
72
310
  * Everything needed to expose a HomeKit Camera.
311
+ *
312
+ * @group Camera
73
313
  */
74
- export declare class CameraController extends EventEmitter implements Controller<CameraControllerServiceMap> {
314
+ export declare class CameraController extends EventEmitter implements SerializableController<CameraControllerServiceMap, CameraControllerState> {
75
315
  private static readonly STREAM_MANAGEMENT;
316
+ private stateChangeDelegate?;
76
317
  private readonly streamCount;
77
318
  private readonly delegate;
78
319
  private readonly streamingOptions;
320
+ /**
321
+ * **Temporary** storage for {@link CameraRecordingOptions} and {@link CameraRecordingDelegate}.
322
+ * This property is reset to `undefined` after the CameraController was fully initialized.
323
+ * You can still access those values via the {@link CameraController.recordingManagement}.
324
+ */
325
+ private recording?;
326
+ /**
327
+ * Temporary storage for the sensor option.
328
+ */
329
+ private sensorOptions?;
79
330
  private readonly legacyMode;
80
331
  /**
81
332
  * @private
82
333
  */
83
334
  streamManagements: RTPStreamManagement[];
335
+ /**
336
+ * The {@link RecordingManagement} which is responsible for handling HomeKit Secure Video.
337
+ * This property is only present if recording was configured.
338
+ */
339
+ recordingManagement?: RecordingManagement;
84
340
  private microphoneService?;
85
341
  private speakerService?;
86
342
  private microphoneMuted;
87
343
  private microphoneVolume;
88
344
  private speakerMuted;
89
345
  private speakerVolume;
346
+ motionService?: MotionSensor;
347
+ private motionServiceExternallySupplied;
348
+ occupancyService?: OccupancySensor;
349
+ private occupancyServiceExternallySupplied;
90
350
  constructor(options: CameraControllerOptions, legacyMode?: boolean);
91
351
  /**
92
352
  * @private
@@ -94,9 +354,9 @@ export declare class CameraController extends EventEmitter implements Controller
94
354
  controllerId(): ControllerIdentifier;
95
355
  /**
96
356
  * Call this method if you want to forcefully suspend an ongoing streaming session.
97
- * This would be adequate if the the rtp server or media encoding encountered an unexpected error.
357
+ * This would be adequate if the rtp server or media encoding encountered an unexpected error.
98
358
  *
99
- * @param sessionId {SessionIdentifier} - id of the current ongoing streaming session
359
+ * @param sessionId - id of the current ongoing streaming session
100
360
  */
101
361
  forceStopStreamingSession(sessionId: SessionIdentifier): void;
102
362
  static generateSynchronisationSource(): number;
@@ -114,11 +374,17 @@ export declare class CameraController extends EventEmitter implements Controller
114
374
  * @private
115
375
  */
116
376
  initWithServices(serviceMap: CameraControllerServiceMap): void | CameraControllerServiceMap;
377
+ protected _initWithServices(serviceMap: CameraControllerServiceMap): {
378
+ serviceMap: CameraControllerServiceMap;
379
+ updated: boolean;
380
+ };
117
381
  protected migrateFromDoorbell(serviceMap: ControllerServiceMap): boolean;
382
+ protected retrieveEventTriggerOptions(): Set<EventTriggerOption>;
118
383
  /**
119
384
  * @private
120
385
  */
121
386
  configureServices(): void;
387
+ private rtpStreamManagementDisabledThroughOperatingMode;
122
388
  /**
123
389
  * @private
124
390
  */
@@ -130,7 +396,19 @@ export declare class CameraController extends EventEmitter implements Controller
130
396
  /**
131
397
  * @private
132
398
  */
133
- handleSnapshotRequest(height: number, width: number, accessoryName?: string): Promise<Buffer>;
399
+ serialize(): CameraControllerState | undefined;
400
+ /**
401
+ * @private
402
+ */
403
+ deserialize(serialized: CameraControllerState): void;
404
+ /**
405
+ * @private
406
+ */
407
+ setupStateChangeDelegate(delegate?: StateChangeDelegate): void;
408
+ /**
409
+ * @private
410
+ */
411
+ handleSnapshotRequest(height: number, width: number, accessoryName?: string, reason?: ResourceRequestReason): Promise<Buffer>;
134
412
  /**
135
413
  * @private
136
414
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CameraController.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/CameraController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CameraController.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/CameraController.ts"],"names":[],"mappings":"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"}