hap-nodejs 0.11.0-beta.13 → 0.11.0-beta.14

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 (221) hide show
  1. package/dist/BridgedCore.js +4 -4
  2. package/dist/BridgedCore.js.map +1 -1
  3. package/dist/Core.js +2 -2
  4. package/dist/Core.js.map +1 -1
  5. package/dist/accessories/AirConditioner_accessory.js +18 -18
  6. package/dist/accessories/AirConditioner_accessory.js.map +1 -1
  7. package/dist/accessories/AppleTVRemote_accessory.js +6 -6
  8. package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
  9. package/dist/accessories/Camera_accessory.js +96 -87
  10. package/dist/accessories/Camera_accessory.js.map +1 -1
  11. package/dist/accessories/Fan_accessory.js +6 -6
  12. package/dist/accessories/Fan_accessory.js.map +1 -1
  13. package/dist/accessories/GarageDoorOpener_accessory.js +4 -4
  14. package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
  15. package/dist/accessories/Light-AdaptiveLighting_accessory.js +2 -2
  16. package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
  17. package/dist/accessories/Light_accessory.js +10 -10
  18. package/dist/accessories/Light_accessory.js.map +1 -1
  19. package/dist/accessories/Lock_accessory.js +4 -4
  20. package/dist/accessories/Lock_accessory.js.map +1 -1
  21. package/dist/accessories/MotionSensor_accessory.js +3 -3
  22. package/dist/accessories/MotionSensor_accessory.js.map +1 -1
  23. package/dist/accessories/Outlet_accessory.js +4 -4
  24. package/dist/accessories/Outlet_accessory.js.map +1 -1
  25. package/dist/accessories/SmartSpeaker_accessory.js +5 -5
  26. package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
  27. package/dist/accessories/Sprinkler_accessory.js +7 -7
  28. package/dist/accessories/Sprinkler_accessory.js.map +1 -1
  29. package/dist/accessories/TV_accessory.js +9 -9
  30. package/dist/accessories/TV_accessory.js.map +1 -1
  31. package/dist/accessories/TemperatureSensor_accessory.js +2 -2
  32. package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
  33. package/dist/accessories/Wi-FiRouter_accessory.js +2 -2
  34. package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
  35. package/dist/accessories/Wi-FiSatellite_accessory.js +2 -2
  36. package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
  37. package/dist/accessories/gstreamer-audioProducer.d.ts +2 -2
  38. package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -1
  39. package/dist/accessories/gstreamer-audioProducer.js +20 -20
  40. package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
  41. package/dist/index.d.ts +30 -6
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +39 -25
  44. package/dist/index.js.map +1 -1
  45. package/dist/internal-types.d.ts +20 -125
  46. package/dist/internal-types.d.ts.map +1 -1
  47. package/dist/internal-types.js +15 -5
  48. package/dist/internal-types.js.map +1 -1
  49. package/dist/lib/Accessory.d.ts +71 -10
  50. package/dist/lib/Accessory.d.ts.map +1 -1
  51. package/dist/lib/Accessory.js +168 -148
  52. package/dist/lib/Accessory.js.map +1 -1
  53. package/dist/lib/AccessoryLoader.d.ts +12 -0
  54. package/dist/lib/AccessoryLoader.d.ts.map +1 -1
  55. package/dist/lib/AccessoryLoader.js +18 -6
  56. package/dist/lib/AccessoryLoader.js.map +1 -1
  57. package/dist/lib/Advertiser.d.ts +26 -0
  58. package/dist/lib/Advertiser.d.ts.map +1 -1
  59. package/dist/lib/Advertiser.js +59 -39
  60. package/dist/lib/Advertiser.js.map +1 -1
  61. package/dist/lib/Bridge.d.ts +2 -0
  62. package/dist/lib/Bridge.d.ts.map +1 -1
  63. package/dist/lib/Bridge.js +3 -1
  64. package/dist/lib/Bridge.js.map +1 -1
  65. package/dist/lib/Characteristic.d.ts +818 -13
  66. package/dist/lib/Characteristic.d.ts.map +1 -1
  67. package/dist/lib/Characteristic.js +155 -127
  68. package/dist/lib/Characteristic.js.map +1 -1
  69. package/dist/lib/HAPServer.d.ts +72 -18
  70. package/dist/lib/HAPServer.d.ts.map +1 -1
  71. package/dist/lib/HAPServer.js +178 -160
  72. package/dist/lib/HAPServer.js.map +1 -1
  73. package/dist/lib/Service.d.ts +266 -14
  74. package/dist/lib/Service.d.ts.map +1 -1
  75. package/dist/lib/Service.js +36 -35
  76. package/dist/lib/Service.js.map +1 -1
  77. package/dist/lib/camera/Camera.d.ts +13 -4
  78. package/dist/lib/camera/Camera.d.ts.map +1 -1
  79. package/dist/lib/camera/Camera.js +3 -0
  80. package/dist/lib/camera/Camera.js.map +1 -1
  81. package/dist/lib/camera/RTPProxy.d.ts +5 -0
  82. package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
  83. package/dist/lib/camera/RTPProxy.js +2 -1
  84. package/dist/lib/camera/RTPProxy.js.map +1 -1
  85. package/dist/lib/camera/RTPStreamManagement.d.ts +154 -31
  86. package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
  87. package/dist/lib/camera/RTPStreamManagement.js +198 -161
  88. package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
  89. package/dist/lib/camera/RecordingManagement.d.ts +61 -11
  90. package/dist/lib/camera/RecordingManagement.d.ts.map +1 -1
  91. package/dist/lib/camera/RecordingManagement.js +171 -138
  92. package/dist/lib/camera/RecordingManagement.js.map +1 -1
  93. package/dist/lib/camera/index.js +4 -4
  94. package/dist/lib/camera/index.js.map +1 -1
  95. package/dist/lib/controller/AdaptiveLightingController.d.ts +28 -2
  96. package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
  97. package/dist/lib/controller/AdaptiveLightingController.js +72 -65
  98. package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
  99. package/dist/lib/controller/CameraController.d.ts +44 -13
  100. package/dist/lib/controller/CameraController.d.ts.map +1 -1
  101. package/dist/lib/controller/CameraController.js +42 -34
  102. package/dist/lib/controller/CameraController.js.map +1 -1
  103. package/dist/lib/controller/Controller.d.ts +28 -7
  104. package/dist/lib/controller/Controller.d.ts.map +1 -1
  105. package/dist/lib/controller/Controller.js +7 -0
  106. package/dist/lib/controller/Controller.js.map +1 -1
  107. package/dist/lib/controller/DoorbellController.d.ts +5 -1
  108. package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
  109. package/dist/lib/controller/DoorbellController.js +5 -3
  110. package/dist/lib/controller/DoorbellController.js.map +1 -1
  111. package/dist/lib/controller/RemoteController.d.ts +108 -39
  112. package/dist/lib/controller/RemoteController.d.ts.map +1 -1
  113. package/dist/lib/controller/RemoteController.js +190 -175
  114. package/dist/lib/controller/RemoteController.js.map +1 -1
  115. package/dist/lib/controller/index.js +5 -5
  116. package/dist/lib/controller/index.js.map +1 -1
  117. package/dist/lib/datastream/DataStreamManagement.d.ts +25 -19
  118. package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
  119. package/dist/lib/datastream/DataStreamManagement.js +36 -30
  120. package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
  121. package/dist/lib/datastream/DataStreamParser.d.ts +39 -0
  122. package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
  123. package/dist/lib/datastream/DataStreamParser.js +125 -88
  124. package/dist/lib/datastream/DataStreamParser.js.map +1 -1
  125. package/dist/lib/datastream/DataStreamServer.d.ts +121 -46
  126. package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
  127. package/dist/lib/datastream/DataStreamServer.js +134 -100
  128. package/dist/lib/datastream/DataStreamServer.js.map +1 -1
  129. package/dist/lib/datastream/index.js +3 -3
  130. package/dist/lib/datastream/index.js.map +1 -1
  131. package/dist/lib/definitions/CharacteristicDefinitions.js +799 -799
  132. package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
  133. package/dist/lib/definitions/ServiceDefinitions.js +77 -77
  134. package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
  135. package/dist/lib/definitions/generate-definitions.js +60 -59
  136. package/dist/lib/definitions/generate-definitions.js.map +1 -1
  137. package/dist/lib/definitions/generator-configuration.js +15 -15
  138. package/dist/lib/definitions/generator-configuration.js.map +1 -1
  139. package/dist/lib/definitions/index.js +2 -2
  140. package/dist/lib/definitions/index.js.map +1 -1
  141. package/dist/lib/model/AccessoryInfo.d.ts +10 -4
  142. package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
  143. package/dist/lib/model/AccessoryInfo.js +21 -17
  144. package/dist/lib/model/AccessoryInfo.js.map +1 -1
  145. package/dist/lib/model/ControllerStorage.d.ts +3 -0
  146. package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
  147. package/dist/lib/model/ControllerStorage.js +8 -5
  148. package/dist/lib/model/ControllerStorage.js.map +1 -1
  149. package/dist/lib/model/HAPStorage.d.ts +3 -0
  150. package/dist/lib/model/HAPStorage.d.ts.map +1 -1
  151. package/dist/lib/model/HAPStorage.js +4 -1
  152. package/dist/lib/model/HAPStorage.js.map +1 -1
  153. package/dist/lib/model/IdentifierCache.d.ts +1 -0
  154. package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
  155. package/dist/lib/model/IdentifierCache.js +3 -2
  156. package/dist/lib/model/IdentifierCache.js.map +1 -1
  157. package/dist/lib/tv/AccessControlManagement.d.ts +11 -0
  158. package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
  159. package/dist/lib/tv/AccessControlManagement.js +15 -7
  160. package/dist/lib/tv/AccessControlManagement.js.map +1 -1
  161. package/dist/lib/util/clone.d.ts +2 -1
  162. package/dist/lib/util/clone.d.ts.map +1 -1
  163. package/dist/lib/util/clone.js +5 -4
  164. package/dist/lib/util/clone.js.map +1 -1
  165. package/dist/lib/util/color-utils.d.ts +3 -0
  166. package/dist/lib/util/color-utils.d.ts.map +1 -1
  167. package/dist/lib/util/color-utils.js +4 -1
  168. package/dist/lib/util/color-utils.js.map +1 -1
  169. package/dist/lib/util/eventedhttp.d.ts +34 -5
  170. package/dist/lib/util/eventedhttp.d.ts.map +1 -1
  171. package/dist/lib/util/eventedhttp.js +62 -51
  172. package/dist/lib/util/eventedhttp.js.map +1 -1
  173. package/dist/lib/util/hapCrypto.d.ts +27 -0
  174. package/dist/lib/util/hapCrypto.d.ts.map +1 -1
  175. package/dist/lib/util/hapCrypto.js +28 -4
  176. package/dist/lib/util/hapCrypto.js.map +1 -1
  177. package/dist/lib/util/hapStatusError.d.ts +2 -0
  178. package/dist/lib/util/hapStatusError.d.ts.map +1 -1
  179. package/dist/lib/util/hapStatusError.js +4 -2
  180. package/dist/lib/util/hapStatusError.js.map +1 -1
  181. package/dist/lib/util/net-utils.d.ts +7 -0
  182. package/dist/lib/util/net-utils.d.ts.map +1 -1
  183. package/dist/lib/util/net-utils.js +11 -4
  184. package/dist/lib/util/net-utils.js.map +1 -1
  185. package/dist/lib/util/once.d.ts +5 -0
  186. package/dist/lib/util/once.d.ts.map +1 -1
  187. package/dist/lib/util/once.js +6 -1
  188. package/dist/lib/util/once.js.map +1 -1
  189. package/dist/lib/util/promise-utils.d.ts +9 -0
  190. package/dist/lib/util/promise-utils.d.ts.map +1 -1
  191. package/dist/lib/util/promise-utils.js +3 -0
  192. package/dist/lib/util/promise-utils.js.map +1 -1
  193. package/dist/lib/util/request-util.d.ts +16 -0
  194. package/dist/lib/util/request-util.d.ts.map +1 -1
  195. package/dist/lib/util/request-util.js +42 -27
  196. package/dist/lib/util/request-util.js.map +1 -1
  197. package/dist/lib/util/time.d.ts +6 -0
  198. package/dist/lib/util/time.d.ts.map +1 -1
  199. package/dist/lib/util/time.js +7 -1
  200. package/dist/lib/util/time.js.map +1 -1
  201. package/dist/lib/util/tlv.d.ts +33 -2
  202. package/dist/lib/util/tlv.d.ts.map +1 -1
  203. package/dist/lib/util/tlv.js +29 -5
  204. package/dist/lib/util/tlv.js.map +1 -1
  205. package/dist/lib/util/uuid.d.ts +2 -3
  206. package/dist/lib/util/uuid.d.ts.map +1 -1
  207. package/dist/lib/util/uuid.js +1 -1
  208. package/dist/lib/util/uuid.js.map +1 -1
  209. package/dist/types.d.ts +264 -20
  210. package/dist/types.d.ts.map +1 -1
  211. package/dist/types.js +8 -0
  212. package/dist/types.js.map +1 -1
  213. package/package.json +5 -4
  214. package/dist/lib/util/HAPHTTPError.d.ts +0 -16
  215. package/dist/lib/util/HAPHTTPError.d.ts.map +0 -1
  216. package/dist/lib/util/HAPHTTPError.js +0 -26
  217. package/dist/lib/util/HAPHTTPError.js.map +0 -1
  218. package/dist/lib/util/tlvError.d.ts +0 -14
  219. package/dist/lib/util/tlvError.d.ts.map +0 -1
  220. package/dist/lib/util/tlvError.js +0 -24
  221. package/dist/lib/util/tlvError.js.map +0 -1
@@ -2,20 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HAPServer = exports.HAPServerEventTypes = exports.HAPPairingHTTPCode = exports.HAPHTTPCode = exports.Status = exports.Codes = exports.IsKnownHAPStatusError = exports.HAPStatus = exports.TLVErrorCode = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var crypto_1 = (0, tslib_1.__importDefault)(require("crypto"));
6
- var debug_1 = (0, tslib_1.__importDefault)(require("debug"));
5
+ var crypto_1 = tslib_1.__importDefault(require("crypto"));
6
+ var debug_1 = tslib_1.__importDefault(require("debug"));
7
7
  var events_1 = require("events");
8
8
  var fast_srp_hap_1 = require("fast-srp-hap");
9
- var tweetnacl_1 = (0, tslib_1.__importDefault)(require("tweetnacl"));
9
+ var tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
10
10
  var url_1 = require("url");
11
11
  var internal_types_1 = require("../internal-types");
12
12
  var eventedhttp_1 = require("./util/eventedhttp");
13
- var hapCrypto = (0, tslib_1.__importStar)(require("./util/hapCrypto"));
13
+ var hapCrypto = tslib_1.__importStar(require("./util/hapCrypto"));
14
14
  var once_1 = require("./util/once");
15
- var tlv = (0, tslib_1.__importStar)(require("./util/tlv"));
15
+ var tlv = tslib_1.__importStar(require("./util/tlv"));
16
16
  var debug = (0, debug_1.default)("HAP-NodeJS:HAPServer");
17
17
  /**
18
- * TLV error codes for the {@link TLVValues.ERROR_CODE} field.
18
+ * TLV error codes for the `TLVValues.ERROR_CODE` field.
19
+ *
20
+ * @group HAP Accessory Server
19
21
  */
20
22
  var TLVErrorCode;
21
23
  (function (TLVErrorCode) {
@@ -29,6 +31,9 @@ var TLVErrorCode;
29
31
  TLVErrorCode[TLVErrorCode["UNAVAILABLE"] = 6] = "UNAVAILABLE";
30
32
  TLVErrorCode[TLVErrorCode["BUSY"] = 7] = "BUSY"; // cannot accept pairing request at this time
31
33
  })(TLVErrorCode = exports.TLVErrorCode || (exports.TLVErrorCode = {}));
34
+ /**
35
+ * @group HAP Accessory Server
36
+ */
32
37
  var HAPStatus;
33
38
  (function (HAPStatus) {
34
39
  // noinspection JSUnusedGlobalSymbols
@@ -49,7 +54,7 @@ var HAPStatus;
49
54
  */
50
55
  HAPStatus[HAPStatus["RESOURCE_BUSY"] = -70403] = "RESOURCE_BUSY";
51
56
  /**
52
- * Cannot write a read-only characteristic ({@see Perms.PAIRED_WRITE} not defined).
57
+ * Cannot write a read-only characteristic ({@link Perms.PAIRED_WRITE} not defined).
53
58
  */
54
59
  HAPStatus[HAPStatus["READ_ONLY_CHARACTERISTIC"] = -70404] = "READ_ONLY_CHARACTERISTIC";
55
60
  /**
@@ -88,23 +93,27 @@ var HAPStatus;
88
93
  })(HAPStatus = exports.HAPStatus || (exports.HAPStatus = {}));
89
94
  /**
90
95
  * Determines if the given status code is a known {@link HAPStatus} error code.
96
+ *
97
+ * @group HAP Accessory Server
91
98
  */
92
99
  function IsKnownHAPStatusError(status) {
93
100
  return (
94
101
  // Lower bound (most negative error code)
95
- status >= -70412 /* NOT_ALLOWED_IN_CURRENT_STATE */ &&
102
+ status >= -70412 /* HAPStatus.NOT_ALLOWED_IN_CURRENT_STATE */ &&
96
103
  // Upper bound (negative error code closest to zero)
97
- status <= -70401 /* INSUFFICIENT_PRIVILEGES */);
104
+ status <= -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */);
98
105
  }
99
106
  exports.IsKnownHAPStatusError = IsKnownHAPStatusError;
100
107
  // noinspection JSUnusedGlobalSymbols
101
108
  /**
109
+ * @group HAP Accessory Server
102
110
  * @deprecated please use {@link TLVErrorCode} as naming is more precise
103
111
  */
104
112
  // @ts-expect-error (as we use const enums with --preserveConstEnums)
105
113
  exports.Codes = TLVErrorCode;
106
114
  // noinspection JSUnusedGlobalSymbols
107
115
  /**
116
+ * @group HAP Accessory Server
108
117
  * @deprecated please use {@link HAPStatus} as naming is more precise
109
118
  */
110
119
  // @ts-expect-error (as we use const enums with --preserveConstEnums)
@@ -116,6 +125,8 @@ exports.Status = HAPStatus;
116
125
  * must include a status {@link HAPStatus} property.
117
126
  *
118
127
  * When the response is a MULTI_STATUS EVERY entry in the characteristics property MUST include a status property (even success).
128
+ *
129
+ * @group HAP Accessory Server
119
130
  */
120
131
  var HAPHTTPCode;
121
132
  (function (HAPHTTPCode) {
@@ -134,6 +145,8 @@ var HAPHTTPCode;
134
145
  /**
135
146
  * When in a request is made to the pairing endpoints, and mime type is 'application/pairing+tlv8'
136
147
  * one should use the below status codes.
148
+ *
149
+ * @group HAP Accessory Server
137
150
  */
138
151
  var HAPPairingHTTPCode;
139
152
  (function (HAPPairingHTTPCode) {
@@ -145,6 +158,9 @@ var HAPPairingHTTPCode;
145
158
  HAPPairingHTTPCode[HAPPairingHTTPCode["CONNECTION_AUTHORIZATION_REQUIRED"] = 470] = "CONNECTION_AUTHORIZATION_REQUIRED";
146
159
  HAPPairingHTTPCode[HAPPairingHTTPCode["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
147
160
  })(HAPPairingHTTPCode = exports.HAPPairingHTTPCode || (exports.HAPPairingHTTPCode = {}));
161
+ /**
162
+ * @group HAP Accessory Server
163
+ */
148
164
  var HAPServerEventTypes;
149
165
  (function (HAPServerEventTypes) {
150
166
  /**
@@ -206,10 +222,12 @@ var HAPServerEventTypes;
206
222
  * the connection is open, the server can elect to issue "EVENT/1.0 200 OK" HTTP-style responses. These are
207
223
  * typically sent to inform the iOS device of a characteristic change for the accessory (like "Door was Unlocked").
208
224
  *
209
- * See eventedhttp.js for more detail on the implementation of this protocol.
225
+ * See {@link EventedHTTPServer} for more detail on the implementation of this protocol.
226
+ *
227
+ * @group HAP Accessory Server
210
228
  */
211
229
  var HAPServer = /** @class */ (function (_super) {
212
- (0, tslib_1.__extends)(HAPServer, _super);
230
+ tslib_1.__extends(HAPServer, _super);
213
231
  function HAPServer(accessoryInfo) {
214
232
  var _this = _super.call(this) || this;
215
233
  _this.unsuccessfulPairAttempts = 0; // after 100 unsuccessful attempts the server won't accept any further attempts. Will currently be reset on a reboot
@@ -217,9 +235,9 @@ var HAPServer = /** @class */ (function (_super) {
217
235
  _this.allowInsecureRequest = false;
218
236
  // internal server that does all the actual communication
219
237
  _this.httpServer = new eventedhttp_1.EventedHTTPServer();
220
- _this.httpServer.on("listening" /* LISTENING */, _this.onListening.bind(_this));
221
- _this.httpServer.on("request" /* REQUEST */, _this.handleRequestOnHAPConnection.bind(_this));
222
- _this.httpServer.on("connection-closed" /* CONNECTION_CLOSED */, _this.handleConnectionClosed.bind(_this));
238
+ _this.httpServer.on("listening" /* EventedHTTPServerEvent.LISTENING */, _this.onListening.bind(_this));
239
+ _this.httpServer.on("request" /* EventedHTTPServerEvent.REQUEST */, _this.handleRequestOnHAPConnection.bind(_this));
240
+ _this.httpServer.on("connection-closed" /* EventedHTTPServerEvent.CONNECTION_CLOSED */, _this.handleConnectionClosed.bind(_this));
223
241
  return _this;
224
242
  }
225
243
  HAPServer.prototype.listen = function (port, host) {
@@ -240,14 +258,14 @@ var HAPServer = /** @class */ (function (_super) {
240
258
  };
241
259
  /**
242
260
  * Send an even notification for given characteristic and changed value to all connected clients.
243
- * If {@param originator} is specified, the given {@link HAPConnection} will be excluded from the broadcast.
261
+ * If `originator` is specified, the given {@link HAPConnection} will be excluded from the broadcast.
244
262
  *
245
263
  * @param aid - The accessory id of the updated characteristic.
246
264
  * @param iid - The instance id of the updated characteristic.
247
265
  * @param value - The newly set value of the characteristic.
248
266
  * @param originator - If specified, the connection will not get an event message.
249
267
  * @param immediateDelivery - The HAP spec requires some characteristics to be delivery immediately.
250
- * Namely, for the {@link ButtonEvent} and the {@link ProgrammableSwitchEvent} characteristics.
268
+ * Namely, for the {@link Characteristic.ButtonEvent} and the {@link Characteristic.ProgrammableSwitchEvent} characteristics.
251
269
  */
252
270
  HAPServer.prototype.sendEventNotifications = function (aid, iid, value, originator, immediateDelivery) {
253
271
  try {
@@ -258,7 +276,7 @@ var HAPServer = /** @class */ (function (_super) {
258
276
  }
259
277
  };
260
278
  HAPServer.prototype.onListening = function (port, hostname) {
261
- this.emit("listening" /* LISTENING */, port, hostname);
279
+ this.emit("listening" /* HAPServerEventTypes.LISTENING */, port, hostname);
262
280
  };
263
281
  // Called when an HTTP request was detected.
264
282
  HAPServer.prototype.handleRequestOnHAPConnection = function (connection, request, response) {
@@ -271,8 +289,8 @@ var HAPServer = /** @class */ (function (_super) {
271
289
  var handler = _this.getHandler(url);
272
290
  if (!handler) {
273
291
  debug("[%s] WARNING: Handler for %s not implemented", _this.accessoryInfo.username, request.url);
274
- response.writeHead(404 /* NOT_FOUND */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
275
- response.end(JSON.stringify({ status: -70409 /* RESOURCE_DOES_NOT_EXIST */ }));
292
+ response.writeHead(404 /* HAPHTTPCode.NOT_FOUND */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
293
+ response.end(JSON.stringify({ status: -70409 /* HAPStatus.RESOURCE_DOES_NOT_EXIST */ }));
276
294
  }
277
295
  else {
278
296
  var data = Buffer.concat(buffers);
@@ -281,14 +299,14 @@ var HAPServer = /** @class */ (function (_super) {
281
299
  }
282
300
  catch (error) {
283
301
  debug("[%s] Error executing route handler: %s", _this.accessoryInfo.username, error.stack);
284
- response.writeHead(500 /* INTERNAL_SERVER_ERROR */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
285
- response.end(JSON.stringify({ status: -70403 /* RESOURCE_BUSY */ })); // resource busy try again, does somehow fit?
302
+ response.writeHead(500 /* HAPHTTPCode.INTERNAL_SERVER_ERROR */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
303
+ response.end(JSON.stringify({ status: -70403 /* HAPStatus.RESOURCE_BUSY */ })); // resource busy try again, does somehow fit?
286
304
  }
287
305
  }
288
306
  });
289
307
  };
290
308
  HAPServer.prototype.handleConnectionClosed = function (connection) {
291
- this.emit("connection-closed" /* CONNECTION_CLOSED */, connection);
309
+ this.emit("connection-closed" /* HAPServerEventTypes.CONNECTION_CLOSED */, connection);
292
310
  };
293
311
  HAPServer.prototype.getHandler = function (url) {
294
312
  switch (url.pathname.toLowerCase()) {
@@ -319,51 +337,51 @@ var HAPServer = /** @class */ (function (_super) {
319
337
  var _this = this;
320
338
  // POST body is empty
321
339
  if (this.accessoryInfo.paired() && !this.allowInsecureRequest) {
322
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
323
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
340
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
341
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
324
342
  return;
325
343
  }
326
- this.emit("identify" /* IDENTIFY */, (0, once_1.once)(function (err) {
344
+ this.emit("identify" /* HAPServerEventTypes.IDENTIFY */, (0, once_1.once)(function (err) {
327
345
  if (!err) {
328
346
  debug("[%s] Identification success", _this.accessoryInfo.username);
329
- response.writeHead(204 /* NO_CONTENT */);
347
+ response.writeHead(204 /* HAPHTTPCode.NO_CONTENT */);
330
348
  response.end();
331
349
  }
332
350
  else {
333
351
  debug("[%s] Identification error: %s", _this.accessoryInfo.username, err.message);
334
- response.writeHead(500 /* INTERNAL_SERVER_ERROR */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
335
- response.end(JSON.stringify({ status: -70403 /* RESOURCE_BUSY */ }));
352
+ response.writeHead(500 /* HAPHTTPCode.INTERNAL_SERVER_ERROR */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
353
+ response.end(JSON.stringify({ status: -70403 /* HAPStatus.RESOURCE_BUSY */ }));
336
354
  }
337
355
  }));
338
356
  };
339
357
  HAPServer.prototype.handlePairSetup = function (connection, url, request, data, response) {
340
358
  // Can only be directly paired with one iOS device
341
359
  if (!this.allowInsecureRequest && this.accessoryInfo.paired()) {
342
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
343
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, 6 /* UNAVAILABLE */));
360
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
361
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, 6 /* TLVErrorCode.UNAVAILABLE */));
344
362
  return;
345
363
  }
346
364
  if (this.unsuccessfulPairAttempts > 100) {
347
365
  debug("[%s] Reached maximum amount of unsuccessful pair attempts!", this.accessoryInfo.username);
348
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
349
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, 5 /* MAX_TRIES */));
366
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
367
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, 5 /* TLVErrorCode.MAX_TRIES */));
350
368
  return;
351
369
  }
352
370
  var tlvData = tlv.decode(data);
353
- var sequence = tlvData[6 /* SEQUENCE_NUM */][0]; // value is single byte with sequence number
354
- if (sequence === 1 /* M1 */) {
371
+ var sequence = tlvData[6 /* TLVValues.SEQUENCE_NUM */][0]; // value is single byte with sequence number
372
+ if (sequence === 1 /* PairingStates.M1 */) {
355
373
  this.handlePairSetupM1(connection, request, response);
356
374
  }
357
- else if (sequence === 3 /* M3 */ && connection._pairSetupState === 2 /* M2 */) {
375
+ else if (sequence === 3 /* PairingStates.M3 */ && connection._pairSetupState === 2 /* PairingStates.M2 */) {
358
376
  this.handlePairSetupM3(connection, request, response, tlvData);
359
377
  }
360
- else if (sequence === 5 /* M5 */ && connection._pairSetupState === 4 /* M4 */) {
378
+ else if (sequence === 5 /* PairingStates.M5 */ && connection._pairSetupState === 4 /* PairingStates.M4 */) {
361
379
  this.handlePairSetupM5(connection, request, response, tlvData);
362
380
  }
363
381
  else {
364
382
  // Invalid state/sequence number
365
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/pairing+tlv8" });
366
- response.end(tlv.encode(6 /* STATE */, sequence + 1, 7 /* ERROR_CODE */, 1 /* UNKNOWN */));
383
+ response.writeHead(400 /* HAPPairingHTTPCode.BAD_REQUEST */, { "Content-Type": "application/pairing+tlv8" });
384
+ response.end(tlv.encode(6 /* TLVValues.STATE */, sequence + 1, 7 /* TLVValues.ERROR_CODE */, 1 /* TLVErrorCode.UNKNOWN */));
367
385
  return;
368
386
  }
369
387
  };
@@ -378,20 +396,20 @@ var HAPServer = /** @class */ (function (_super) {
378
396
  var srpB = srpServer.computeB();
379
397
  // attach it to the current TCP session
380
398
  connection.srpServer = srpServer;
381
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
382
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 2 /* M2 */, 2 /* SALT */, salt, 3 /* PUBLIC_KEY */, srpB));
383
- connection._pairSetupState = 2 /* M2 */;
399
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
400
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 2 /* PairingStates.M2 */, 2 /* TLVValues.SALT */, salt, 3 /* TLVValues.PUBLIC_KEY */, srpB));
401
+ connection._pairSetupState = 2 /* PairingStates.M2 */;
384
402
  }).catch(function (error) {
385
403
  debug("[%s] Error occurred when generating srp key: %s", _this.accessoryInfo.username, error.message);
386
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
387
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, 1 /* UNKNOWN */));
404
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
405
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, 1 /* TLVErrorCode.UNKNOWN */));
388
406
  return;
389
407
  });
390
408
  };
391
409
  HAPServer.prototype.handlePairSetupM3 = function (connection, request, response, tlvData) {
392
410
  debug("[%s] Pair step 2/5", this.accessoryInfo.username);
393
- var A = tlvData[3 /* PUBLIC_KEY */]; // "A is a public key that exists only for a single login session."
394
- var M1 = tlvData[4 /* PASSWORD_PROOF */]; // "M1 is the proof that you actually know your own password."
411
+ var A = tlvData[3 /* TLVValues.PUBLIC_KEY */]; // "A is a public key that exists only for a single login session."
412
+ var M1 = tlvData[4 /* TLVValues.PASSWORD_PROOF */]; // "M1 is the proof that you actually know your own password."
395
413
  // pull the SRP server we created in stepOne out of the current session
396
414
  var srpServer = connection.srpServer;
397
415
  srpServer.setA(A);
@@ -402,22 +420,22 @@ var HAPServer = /** @class */ (function (_super) {
402
420
  // most likely the client supplied an incorrect pincode.
403
421
  this.unsuccessfulPairAttempts++;
404
422
  debug("[%s] Error while checking pincode: %s", this.accessoryInfo.username, err.message);
405
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
406
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 4 /* M4 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
423
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
424
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 4 /* PairingStates.M4 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
407
425
  connection._pairSetupState = undefined;
408
426
  return;
409
427
  }
410
428
  // "M2 is the proof that the server actually knows your password."
411
429
  var M2 = srpServer.computeM2();
412
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
413
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 4 /* M4 */, 4 /* PASSWORD_PROOF */, M2));
414
- connection._pairSetupState = 4 /* M4 */;
430
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
431
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 4 /* PairingStates.M4 */, 4 /* TLVValues.PASSWORD_PROOF */, M2));
432
+ connection._pairSetupState = 4 /* PairingStates.M4 */;
415
433
  };
416
434
  HAPServer.prototype.handlePairSetupM5 = function (connection, request, response, tlvData) {
417
435
  debug("[%s] Pair step 3/5", this.accessoryInfo.username);
418
436
  // pull the SRP server we created in stepOne out of the current session
419
437
  var srpServer = connection.srpServer;
420
- var encryptedData = tlvData[5 /* ENCRYPTED_DATA */];
438
+ var encryptedData = tlvData[5 /* TLVValues.ENCRYPTED_DATA */];
421
439
  var messageData = Buffer.alloc(encryptedData.length - 16);
422
440
  var authTagData = Buffer.alloc(16);
423
441
  encryptedData.copy(messageData, 0, 0, encryptedData.length - 16);
@@ -432,16 +450,16 @@ var HAPServer = /** @class */ (function (_super) {
432
450
  }
433
451
  catch (error) {
434
452
  debug("[%s] Error while decrypting and verifying M5 subTlv: %s", this.accessoryInfo.username);
435
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
436
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 4 /* M4 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
453
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
454
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 4 /* PairingStates.M4 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
437
455
  connection._pairSetupState = undefined;
438
456
  return;
439
457
  }
440
458
  // decode the client payload and pass it on to the next step
441
459
  var M5Packet = tlv.decode(plaintext);
442
- var clientUsername = M5Packet[1 /* USERNAME */];
443
- var clientLTPK = M5Packet[3 /* PUBLIC_KEY */];
444
- var clientProof = M5Packet[10 /* PROOF */];
460
+ var clientUsername = M5Packet[1 /* TLVValues.USERNAME */];
461
+ var clientLTPK = M5Packet[3 /* TLVValues.PUBLIC_KEY */];
462
+ var clientProof = M5Packet[10 /* TLVValues.PROOF */];
445
463
  this.handlePairSetupM5_2(connection, request, response, clientUsername, clientLTPK, clientProof, outputKey);
446
464
  };
447
465
  // M5-2
@@ -454,8 +472,8 @@ var HAPServer = /** @class */ (function (_super) {
454
472
  var completeData = Buffer.concat([outputKey, clientUsername, clientLTPK]);
455
473
  if (!tweetnacl_1.default.sign.detached.verify(completeData, clientProof, clientLTPK)) {
456
474
  debug("[%s] Invalid signature", this.accessoryInfo.username);
457
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
458
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 6 /* M6 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
475
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
476
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 6 /* PairingStates.M6 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
459
477
  connection._pairSetupState = undefined;
460
478
  return;
461
479
  }
@@ -474,42 +492,42 @@ var HAPServer = /** @class */ (function (_super) {
474
492
  var material = Buffer.concat([outputKey, usernameData, serverLTPK]);
475
493
  var privateKey = Buffer.from(this.accessoryInfo.signSk);
476
494
  var serverProof = tweetnacl_1.default.sign.detached(material, privateKey);
477
- var message = tlv.encode(1 /* USERNAME */, usernameData, 3 /* PUBLIC_KEY */, serverLTPK, 10 /* PROOF */, serverProof);
495
+ var message = tlv.encode(1 /* TLVValues.USERNAME */, usernameData, 3 /* TLVValues.PUBLIC_KEY */, serverLTPK, 10 /* TLVValues.PROOF */, serverProof);
478
496
  var encrypted = hapCrypto.chacha20_poly1305_encryptAndSeal(hkdfEncKey, Buffer.from("PS-Msg06"), null, message);
479
497
  // finally, notify listeners that we have been paired with a client
480
- this.emit("pair" /* PAIR */, clientUsername.toString(), clientLTPK, (0, once_1.once)(function (err) {
498
+ this.emit("pair" /* HAPServerEventTypes.PAIR */, clientUsername.toString(), clientLTPK, (0, once_1.once)(function (err) {
481
499
  if (err) {
482
500
  debug("[%s] Error adding pairing info: %s", _this.accessoryInfo.username, err.message);
483
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
484
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 6 /* M6 */, 7 /* ERROR_CODE */, 1 /* UNKNOWN */));
501
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
502
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 6 /* PairingStates.M6 */, 7 /* TLVValues.ERROR_CODE */, 1 /* TLVErrorCode.UNKNOWN */));
485
503
  connection._pairSetupState = undefined;
486
504
  return;
487
505
  }
488
506
  // send final pairing response to client
489
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
490
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 6 /* M6 */, 5 /* ENCRYPTED_DATA */, Buffer.concat([encrypted.ciphertext, encrypted.authTag])));
507
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
508
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 6 /* PairingStates.M6 */, 5 /* TLVValues.ENCRYPTED_DATA */, Buffer.concat([encrypted.ciphertext, encrypted.authTag])));
491
509
  connection._pairSetupState = undefined;
492
510
  }));
493
511
  };
494
512
  HAPServer.prototype.handlePairVerify = function (connection, url, request, data, response) {
495
513
  var tlvData = tlv.decode(data);
496
- var sequence = tlvData[6 /* SEQUENCE_NUM */][0]; // value is single byte with sequence number
497
- if (sequence === 1 /* M1 */) {
514
+ var sequence = tlvData[6 /* TLVValues.SEQUENCE_NUM */][0]; // value is single byte with sequence number
515
+ if (sequence === 1 /* PairingStates.M1 */) {
498
516
  this.handlePairVerifyM1(connection, request, response, tlvData);
499
517
  }
500
- else if (sequence === 3 /* M3 */ && connection._pairVerifyState === 2 /* M2 */) {
518
+ else if (sequence === 3 /* PairingStates.M3 */ && connection._pairVerifyState === 2 /* PairingStates.M2 */) {
501
519
  this.handlePairVerifyM3(connection, request, response, tlvData);
502
520
  }
503
521
  else {
504
522
  // Invalid state/sequence number
505
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/pairing+tlv8" });
506
- response.end(tlv.encode(6 /* STATE */, sequence + 1, 7 /* ERROR_CODE */, 1 /* UNKNOWN */));
523
+ response.writeHead(400 /* HAPPairingHTTPCode.BAD_REQUEST */, { "Content-Type": "application/pairing+tlv8" });
524
+ response.end(tlv.encode(6 /* TLVValues.STATE */, sequence + 1, 7 /* TLVValues.ERROR_CODE */, 1 /* TLVErrorCode.UNKNOWN */));
507
525
  return;
508
526
  }
509
527
  };
510
528
  HAPServer.prototype.handlePairVerifyM1 = function (connection, request, response, tlvData) {
511
529
  debug("[%s] Pair verify step 1/2", this.accessoryInfo.username);
512
- var clientPublicKey = tlvData[3 /* PUBLIC_KEY */]; // Buffer
530
+ var clientPublicKey = tlvData[3 /* TLVValues.PUBLIC_KEY */]; // Buffer
513
531
  // generate new encryption keys for this session
514
532
  var keyPair = hapCrypto.generateCurve25519KeyPair();
515
533
  var secretKey = Buffer.from(keyPair.secretKey);
@@ -524,15 +542,15 @@ var HAPServer = /** @class */ (function (_super) {
524
542
  var outputKey = hapCrypto.HKDF("sha512", encSalt, sharedSec, encInfo, 32).slice(0, 32);
525
543
  connection.encryption = new eventedhttp_1.HAPEncryption(clientPublicKey, secretKey, publicKey, sharedSec, outputKey);
526
544
  // compose the response data in TLV format
527
- var message = tlv.encode(1 /* USERNAME */, usernameData, 10 /* PROOF */, serverProof);
545
+ var message = tlv.encode(1 /* TLVValues.USERNAME */, usernameData, 10 /* TLVValues.PROOF */, serverProof);
528
546
  var encrypted = hapCrypto.chacha20_poly1305_encryptAndSeal(outputKey, Buffer.from("PV-Msg02"), null, message);
529
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
530
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 2 /* M2 */, 5 /* ENCRYPTED_DATA */, Buffer.concat([encrypted.ciphertext, encrypted.authTag]), 3 /* PUBLIC_KEY */, publicKey));
531
- connection._pairVerifyState = 2 /* M2 */;
547
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
548
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 2 /* PairingStates.M2 */, 5 /* TLVValues.ENCRYPTED_DATA */, Buffer.concat([encrypted.ciphertext, encrypted.authTag]), 3 /* TLVValues.PUBLIC_KEY */, publicKey));
549
+ connection._pairVerifyState = 2 /* PairingStates.M2 */;
532
550
  };
533
551
  HAPServer.prototype.handlePairVerifyM3 = function (connection, request, response, objects) {
534
552
  debug("[%s] Pair verify step 2/2", this.accessoryInfo.username);
535
- var encryptedData = objects[5 /* ENCRYPTED_DATA */];
553
+ var encryptedData = objects[5 /* TLVValues.ENCRYPTED_DATA */];
536
554
  var messageData = Buffer.alloc(encryptedData.length - 16);
537
555
  var authTagData = Buffer.alloc(16);
538
556
  encryptedData.copy(messageData, 0, 0, encryptedData.length - 16);
@@ -545,14 +563,14 @@ var HAPServer = /** @class */ (function (_super) {
545
563
  }
546
564
  catch (error) {
547
565
  debug("[%s] M3: Failed to decrypt and/or verify", this.accessoryInfo.username);
548
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
549
- response.end(tlv.encode(6 /* STATE */, 4 /* M4 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
566
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
567
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 4 /* PairingStates.M4 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
550
568
  connection._pairVerifyState = undefined;
551
569
  return;
552
570
  }
553
571
  var decoded = tlv.decode(plaintext);
554
- var clientUsername = decoded[1 /* USERNAME */];
555
- var proof = decoded[10 /* PROOF */];
572
+ var clientUsername = decoded[1 /* TLVValues.USERNAME */];
573
+ var proof = decoded[10 /* TLVValues.PROOF */];
556
574
  var material = Buffer.concat([enc.clientPublicKey, clientUsername, enc.publicKey]);
557
575
  // since we're paired, we should have the public key stored for this client
558
576
  var clientPublicKey = this.accessoryInfo.getClientPublicKey(clientUsername.toString());
@@ -560,21 +578,21 @@ var HAPServer = /** @class */ (function (_super) {
560
578
  // disagree. Respond with invalid request (seems to match HomeKit Accessory Simulator behavior)
561
579
  if (!clientPublicKey) {
562
580
  debug("[%s] Client %s attempting to verify, but we are not paired; rejecting client", this.accessoryInfo.username, clientUsername);
563
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
564
- response.end(tlv.encode(6 /* STATE */, 4 /* M4 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
581
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
582
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 4 /* PairingStates.M4 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
565
583
  connection._pairVerifyState = undefined;
566
584
  return;
567
585
  }
568
586
  if (!tweetnacl_1.default.sign.detached.verify(material, proof, clientPublicKey)) {
569
587
  debug("[%s] Client %s provided an invalid signature", this.accessoryInfo.username, clientUsername);
570
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
571
- response.end(tlv.encode(6 /* STATE */, 4 /* M4 */, 7 /* ERROR_CODE */, 2 /* AUTHENTICATION */));
588
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
589
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 4 /* PairingStates.M4 */, 7 /* TLVValues.ERROR_CODE */, 2 /* TLVErrorCode.AUTHENTICATION */));
572
590
  connection._pairVerifyState = undefined;
573
591
  return;
574
592
  }
575
593
  debug("[%s] Client %s verification complete", this.accessoryInfo.username, clientUsername);
576
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
577
- response.end(tlv.encode(6 /* SEQUENCE_NUM */, 4 /* M4 */));
594
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
595
+ response.end(tlv.encode(6 /* TLVValues.SEQUENCE_NUM */, 4 /* PairingStates.M4 */));
578
596
  // now that the client has been verified, we must "upgrade" our pseudo-HTTP connection to include
579
597
  // TCP-level encryption. We'll do this by adding some more encryption vars to the session, and using them
580
598
  // in future calls to onEncrypt, onDecrypt.
@@ -591,64 +609,64 @@ var HAPServer = /** @class */ (function (_super) {
591
609
  var _this = this;
592
610
  // Only accept /pairing request if there is a secure session
593
611
  if (!this.allowInsecureRequest && !connection.isAuthenticated()) {
594
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
595
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
612
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
613
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
596
614
  return;
597
615
  }
598
616
  var objects = tlv.decode(data);
599
- var method = objects[0 /* METHOD */][0]; // value is single byte with request type
600
- var state = objects[6 /* STATE */][0];
601
- if (state !== 1 /* M1 */) {
617
+ var method = objects[0 /* TLVValues.METHOD */][0]; // value is single byte with request type
618
+ var state = objects[6 /* TLVValues.STATE */][0];
619
+ if (state !== 1 /* PairingStates.M1 */) {
602
620
  return;
603
621
  }
604
- if (method === 3 /* ADD_PAIRING */) {
605
- var identifier = objects[1 /* IDENTIFIER */].toString();
606
- var publicKey = objects[3 /* PUBLIC_KEY */];
607
- var permissions = objects[11 /* PERMISSIONS */][0];
608
- this.emit("add-pairing" /* ADD_PAIRING */, connection, identifier, publicKey, permissions, (0, once_1.once)(function (error) {
622
+ if (method === 3 /* PairMethods.ADD_PAIRING */) {
623
+ var identifier = objects[1 /* TLVValues.IDENTIFIER */].toString();
624
+ var publicKey = objects[3 /* TLVValues.PUBLIC_KEY */];
625
+ var permissions = objects[11 /* TLVValues.PERMISSIONS */][0];
626
+ this.emit("add-pairing" /* HAPServerEventTypes.ADD_PAIRING */, connection, identifier, publicKey, permissions, (0, once_1.once)(function (error) {
609
627
  if (error > 0) {
610
628
  debug("[%s] Pairings: failed ADD_PAIRING with code %d", _this.accessoryInfo.username, error);
611
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
612
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, error));
629
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
630
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, error));
613
631
  return;
614
632
  }
615
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
616
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */));
633
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
634
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */));
617
635
  debug("[%s] Pairings: successfully executed ADD_PAIRING", _this.accessoryInfo.username);
618
636
  }));
619
637
  }
620
- else if (method === 4 /* REMOVE_PAIRING */) {
621
- var identifier = objects[1 /* IDENTIFIER */].toString();
622
- this.emit("remove-pairing" /* REMOVE_PAIRING */, connection, identifier, (0, once_1.once)(function (error) {
638
+ else if (method === 4 /* PairMethods.REMOVE_PAIRING */) {
639
+ var identifier = objects[1 /* TLVValues.IDENTIFIER */].toString();
640
+ this.emit("remove-pairing" /* HAPServerEventTypes.REMOVE_PAIRING */, connection, identifier, (0, once_1.once)(function (error) {
623
641
  if (error > 0) {
624
642
  debug("[%s] Pairings: failed REMOVE_PAIRING with code %d", _this.accessoryInfo.username, error);
625
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
626
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, error));
643
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
644
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, error));
627
645
  return;
628
646
  }
629
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
630
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */));
647
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
648
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */));
631
649
  debug("[%s] Pairings: successfully executed REMOVE_PAIRING", _this.accessoryInfo.username);
632
650
  }));
633
651
  }
634
- else if (method === 5 /* LIST_PAIRINGS */) {
635
- this.emit("list-pairings" /* LIST_PAIRINGS */, connection, (0, once_1.once)(function (error, data) {
652
+ else if (method === 5 /* PairMethods.LIST_PAIRINGS */) {
653
+ this.emit("list-pairings" /* HAPServerEventTypes.LIST_PAIRINGS */, connection, (0, once_1.once)(function (error, data) {
636
654
  if (error > 0) {
637
655
  debug("[%s] Pairings: failed LIST_PAIRINGS with code %d", _this.accessoryInfo.username, error);
638
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" });
639
- response.end(tlv.encode(6 /* STATE */, 2 /* M2 */, 7 /* ERROR_CODE */, error));
656
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" });
657
+ response.end(tlv.encode(6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */, 7 /* TLVValues.ERROR_CODE */, error));
640
658
  return;
641
659
  }
642
660
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
643
661
  var tlvList = [];
644
662
  data.forEach(function (value, index) {
645
663
  if (index > 0) {
646
- tlvList.push(255 /* SEPARATOR */, Buffer.alloc(0));
664
+ tlvList.push(255 /* TLVValues.SEPARATOR */, Buffer.alloc(0));
647
665
  }
648
- tlvList.push(1 /* IDENTIFIER */, value.username, 3 /* PUBLIC_KEY */, value.publicKey, 11 /* PERMISSIONS */, value.permission);
666
+ tlvList.push(1 /* TLVValues.IDENTIFIER */, value.username, 3 /* TLVValues.PUBLIC_KEY */, value.publicKey, 11 /* TLVValues.PERMISSIONS */, value.permission);
649
667
  });
650
- var list = tlv.encode.apply(tlv, (0, tslib_1.__spreadArray)([6 /* STATE */, 2 /* M2 */], (0, tslib_1.__read)(tlvList), false));
651
- response.writeHead(200 /* OK */, { "Content-Type": "application/pairing+tlv8" /* PAIRING_TLV8 */ });
668
+ var list = tlv.encode.apply(tlv, tslib_1.__spreadArray([6 /* TLVValues.STATE */, 2 /* PairingStates.M2 */], tslib_1.__read(tlvList), false));
669
+ response.writeHead(200 /* HAPPairingHTTPCode.OK */, { "Content-Type": "application/pairing+tlv8" /* HAPMimeTypes.PAIRING_TLV8 */ });
652
670
  response.end(list);
653
671
  debug("[%s] Pairings: successfully executed LIST_PAIRINGS", _this.accessoryInfo.username);
654
672
  }));
@@ -656,18 +674,18 @@ var HAPServer = /** @class */ (function (_super) {
656
674
  };
657
675
  HAPServer.prototype.handleAccessories = function (connection, url, request, data, response) {
658
676
  if (!this.allowInsecureRequest && !connection.isAuthenticated()) {
659
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
660
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
677
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
678
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
661
679
  return;
662
680
  }
663
681
  // call out to listeners to retrieve the latest accessories JSON
664
- this.emit("accessories" /* ACCESSORIES */, connection, (0, once_1.once)(function (error, result) {
682
+ this.emit("accessories" /* HAPServerEventTypes.ACCESSORIES */, connection, (0, once_1.once)(function (error, result) {
665
683
  if (error) {
666
- response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
684
+ response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
667
685
  response.end(JSON.stringify({ status: error.status }));
668
686
  }
669
687
  else {
670
- response.writeHead(200 /* OK */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
688
+ response.writeHead(200 /* HAPHTTPCode.OK */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
671
689
  response.end(JSON.stringify(result));
672
690
  }
673
691
  }));
@@ -675,21 +693,21 @@ var HAPServer = /** @class */ (function (_super) {
675
693
  HAPServer.prototype.handleCharacteristics = function (connection, url, request, data, response) {
676
694
  var e_1, _a;
677
695
  if (!this.allowInsecureRequest && !connection.isAuthenticated()) {
678
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
679
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
696
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
697
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
680
698
  return;
681
699
  }
682
700
  if (request.method === "GET") {
683
701
  var searchParams = url.searchParams;
684
702
  var idParam = searchParams.get("id");
685
703
  if (!idParam) {
686
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
687
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
704
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
705
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
688
706
  return;
689
707
  }
690
708
  var ids = [];
691
709
  try {
692
- for (var _b = (0, tslib_1.__values)(idParam.split(",")), _c = _b.next(); !_c.done; _c = _b.next()) { // ["1.9","2.14"]
710
+ for (var _b = tslib_1.__values(idParam.split(",")), _c = _b.next(); !_c.done; _c = _b.next()) { // ["1.9","2.14"]
693
711
  var entry = _c.value;
694
712
  var split = entry.split("."); // ["1","9"]
695
713
  ids.push({
@@ -712,17 +730,17 @@ var HAPServer = /** @class */ (function (_super) {
712
730
  includeType: (0, internal_types_1.consideredTrue)(searchParams.get("type")),
713
731
  includeEvent: (0, internal_types_1.consideredTrue)(searchParams.get("ev")),
714
732
  };
715
- this.emit("get-characteristics" /* GET_CHARACTERISTICS */, connection, readRequest, (0, once_1.once)(function (error, readResponse) {
733
+ this.emit("get-characteristics" /* HAPServerEventTypes.GET_CHARACTERISTICS */, connection, readRequest, (0, once_1.once)(function (error, readResponse) {
716
734
  var e_2, _a, e_3, _b;
717
735
  if (error) {
718
- response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
736
+ response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
719
737
  response.end(JSON.stringify({ status: error.status }));
720
738
  return;
721
739
  }
722
740
  var characteristics = readResponse.characteristics;
723
741
  var errorOccurred = false; // determine if we send a 207 Multi-Status
724
742
  try {
725
- for (var characteristics_1 = (0, tslib_1.__values)(characteristics), characteristics_1_1 = characteristics_1.next(); !characteristics_1_1.done; characteristics_1_1 = characteristics_1.next()) {
743
+ for (var characteristics_1 = tslib_1.__values(characteristics), characteristics_1_1 = characteristics_1.next(); !characteristics_1_1.done; characteristics_1_1 = characteristics_1.next()) {
726
744
  var data_1 = characteristics_1_1.value;
727
745
  if (data_1.status) {
728
746
  errorOccurred = true;
@@ -739,10 +757,10 @@ var HAPServer = /** @class */ (function (_super) {
739
757
  }
740
758
  if (errorOccurred) { // on a 207 Multi-Status EVERY characteristic MUST include a status property
741
759
  try {
742
- for (var characteristics_2 = (0, tslib_1.__values)(characteristics), characteristics_2_1 = characteristics_2.next(); !characteristics_2_1.done; characteristics_2_1 = characteristics_2.next()) {
760
+ for (var characteristics_2 = tslib_1.__values(characteristics), characteristics_2_1 = characteristics_2.next(); !characteristics_2_1.done; characteristics_2_1 = characteristics_2.next()) {
743
761
  var data_2 = characteristics_2_1.value;
744
762
  if (!data_2.status) { // a status is undefined if the request was successful
745
- data_2.status = 0 /* SUCCESS */; // a value of zero indicates success
763
+ data_2.status = 0 /* HAPStatus.SUCCESS */; // a value of zero indicates success
746
764
  }
747
765
  }
748
766
  }
@@ -755,35 +773,35 @@ var HAPServer = /** @class */ (function (_super) {
755
773
  }
756
774
  }
757
775
  // 207 "multi-status" is returned when an error occurs reading a characteristic. otherwise 200 is returned
758
- response.writeHead(errorOccurred ? 207 /* MULTI_STATUS */ : 200 /* OK */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
776
+ response.writeHead(errorOccurred ? 207 /* HAPHTTPCode.MULTI_STATUS */ : 200 /* HAPHTTPCode.OK */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
759
777
  response.end(JSON.stringify({ characteristics: characteristics }));
760
778
  }));
761
779
  }
762
780
  else if (request.method === "PUT") {
763
781
  if (!connection.isAuthenticated()) {
764
782
  if (!request.headers || (request.headers && request.headers.authorization !== this.accessoryInfo.pincode)) {
765
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
766
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
783
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
784
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
767
785
  return;
768
786
  }
769
787
  }
770
788
  if (data.length === 0) {
771
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
772
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
789
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
790
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
773
791
  return;
774
792
  }
775
793
  var writeRequest = JSON.parse(data.toString("utf8"));
776
- this.emit("set-characteristics" /* SET_CHARACTERISTICS */, connection, writeRequest, (0, once_1.once)(function (error, writeResponse) {
794
+ this.emit("set-characteristics" /* HAPServerEventTypes.SET_CHARACTERISTICS */, connection, writeRequest, (0, once_1.once)(function (error, writeResponse) {
777
795
  var e_4, _a;
778
796
  if (error) {
779
- response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
797
+ response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
780
798
  response.end(JSON.stringify({ status: error.status }));
781
799
  return;
782
800
  }
783
801
  var characteristics = writeResponse.characteristics;
784
802
  var multiStatus = false;
785
803
  try {
786
- for (var characteristics_3 = (0, tslib_1.__values)(characteristics), characteristics_3_1 = characteristics_3.next(); !characteristics_3_1.done; characteristics_3_1 = characteristics_3.next()) {
804
+ for (var characteristics_3 = tslib_1.__values(characteristics), characteristics_3_1 = characteristics_3.next(); !characteristics_3_1.done; characteristics_3_1 = characteristics_3.next()) {
787
805
  var data_3 = characteristics_3_1.value;
788
806
  if (data_3.status || data_3.value !== undefined) {
789
807
  // also send multiStatus on write response requests
@@ -801,32 +819,32 @@ var HAPServer = /** @class */ (function (_super) {
801
819
  }
802
820
  if (multiStatus) {
803
821
  // 207 is "multi-status" since HomeKit may be setting multiple things and any one can fail independently
804
- response.writeHead(207 /* MULTI_STATUS */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
822
+ response.writeHead(207 /* HAPHTTPCode.MULTI_STATUS */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
805
823
  response.end(JSON.stringify({ characteristics: characteristics }));
806
824
  }
807
825
  else {
808
826
  // if everything went fine send 204 no content response
809
- response.writeHead(204 /* NO_CONTENT */);
827
+ response.writeHead(204 /* HAPHTTPCode.NO_CONTENT */);
810
828
  response.end();
811
829
  }
812
830
  }));
813
831
  }
814
832
  else {
815
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ }); // method not allowed
816
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
833
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ }); // method not allowed
834
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
817
835
  }
818
836
  };
819
837
  HAPServer.prototype.handlePrepareWrite = function (connection, url, request, data, response) {
820
838
  var _this = this;
821
839
  if (!this.allowInsecureRequest && !connection.isAuthenticated()) {
822
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
823
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
840
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
841
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
824
842
  return;
825
843
  }
826
844
  if (request.method === "PUT") {
827
845
  if (data.length === 0) {
828
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
829
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
846
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
847
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
830
848
  return;
831
849
  }
832
850
  var prepareRequest_1 = JSON.parse(data.toString());
@@ -841,50 +859,50 @@ var HAPServer = /** @class */ (function (_super) {
841
859
  connection.timedWritePid = undefined;
842
860
  connection.timedWriteTimeout = undefined;
843
861
  }, prepareRequest_1.ttl);
844
- response.writeHead(200 /* OK */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
845
- response.end(JSON.stringify({ status: 0 /* SUCCESS */ }));
862
+ response.writeHead(200 /* HAPHTTPCode.OK */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
863
+ response.end(JSON.stringify({ status: 0 /* HAPStatus.SUCCESS */ }));
846
864
  return;
847
865
  }
848
866
  else {
849
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
850
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
867
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
868
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
851
869
  }
852
870
  }
853
871
  else {
854
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
855
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
872
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
873
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
856
874
  }
857
875
  };
858
876
  HAPServer.prototype.handleResource = function (connection, url, request, data, response) {
859
877
  if (!connection.isAuthenticated()) {
860
878
  if (!(this.allowInsecureRequest && request.headers && request.headers.authorization === this.accessoryInfo.pincode)) {
861
- response.writeHead(470 /* CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
862
- response.end(JSON.stringify({ status: -70401 /* INSUFFICIENT_PRIVILEGES */ }));
879
+ response.writeHead(470 /* HAPPairingHTTPCode.CONNECTION_AUTHORIZATION_REQUIRED */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
880
+ response.end(JSON.stringify({ status: -70401 /* HAPStatus.INSUFFICIENT_PRIVILEGES */ }));
863
881
  return;
864
882
  }
865
883
  }
866
884
  if (request.method === "POST") {
867
885
  if (data.length === 0) {
868
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
869
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
886
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
887
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
870
888
  return;
871
889
  }
872
890
  var resourceRequest = JSON.parse(data.toString());
873
891
  // call out to listeners to retrieve the resource, snapshot only right now
874
- this.emit("request-resource" /* REQUEST_RESOURCE */, resourceRequest, (0, once_1.once)(function (error, resource) {
892
+ this.emit("request-resource" /* HAPServerEventTypes.REQUEST_RESOURCE */, resourceRequest, (0, once_1.once)(function (error, resource) {
875
893
  if (error) {
876
- response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAP_JSON */ });
894
+ response.writeHead(error.httpCode, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ });
877
895
  response.end(JSON.stringify({ status: error.status }));
878
896
  }
879
897
  else {
880
- response.writeHead(200 /* OK */, { "Content-Type": "image/jpeg" /* IMAGE_JPEG */ });
898
+ response.writeHead(200 /* HAPHTTPCode.OK */, { "Content-Type": "image/jpeg" /* HAPMimeTypes.IMAGE_JPEG */ });
881
899
  response.end(resource);
882
900
  }
883
901
  }));
884
902
  }
885
903
  else {
886
- response.writeHead(400 /* BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAP_JSON */ }); // method not allowed
887
- response.end(JSON.stringify({ status: -70410 /* INVALID_VALUE_IN_REQUEST */ }));
904
+ response.writeHead(400 /* HAPHTTPCode.BAD_REQUEST */, { "Content-Type": "application/hap+json" /* HAPMimeTypes.HAP_JSON */ }); // method not allowed
905
+ response.end(JSON.stringify({ status: -70410 /* HAPStatus.INVALID_VALUE_IN_REQUEST */ }));
888
906
  }
889
907
  };
890
908
  return HAPServer;