hap-nodejs 1.1.1-beta.5 → 1.1.1-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/bonjour-hap.d.ts +53 -50
- package/@types/simple-plist.d.ts +4 -0
- package/README.md +19 -16
- package/dist/accessories/AirConditioner_accessory.js +32 -30
- package/dist/accessories/AirConditioner_accessory.js.map +1 -1
- package/dist/accessories/AppleTVRemote_accessory.js +86 -74
- package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
- package/dist/accessories/Camera_accessory.js +138 -143
- package/dist/accessories/Camera_accessory.js.map +1 -1
- package/dist/accessories/Fan_accessory.js +24 -20
- package/dist/accessories/Fan_accessory.js.map +1 -1
- package/dist/accessories/GarageDoorOpener_accessory.js +37 -35
- package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
- package/dist/accessories/Light-AdaptiveLighting_accessory.js +46 -44
- package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
- package/dist/accessories/Light_accessory.js +36 -34
- package/dist/accessories/Light_accessory.js.map +1 -1
- package/dist/accessories/Lock_accessory.js +28 -27
- package/dist/accessories/Lock_accessory.js.map +1 -1
- package/dist/accessories/MotionSensor_accessory.js +18 -15
- package/dist/accessories/MotionSensor_accessory.js.map +1 -1
- package/dist/accessories/Outlet_accessory.js +24 -22
- package/dist/accessories/Outlet_accessory.js.map +1 -1
- package/dist/accessories/SmartSpeaker_accessory.js +22 -20
- package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
- package/dist/accessories/Sprinkler_accessory.js +39 -36
- package/dist/accessories/Sprinkler_accessory.js.map +1 -1
- package/dist/accessories/TV_accessory.js +47 -45
- package/dist/accessories/TV_accessory.js.map +1 -1
- package/dist/accessories/TemperatureSensor_accessory.js +17 -14
- package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.d.ts +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.d.ts.map +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.js +14 -11
- package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.d.ts +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.d.ts.map +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.js +16 -13
- package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
- package/dist/accessories/gstreamer-audioProducer.d.ts +3 -3
- package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -1
- package/dist/accessories/gstreamer-audioProducer.js +39 -38
- package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
- package/dist/accessories/types.d.ts +63 -63
- package/dist/accessories/types.d.ts.map +1 -1
- package/dist/accessories/types.js +87 -83
- package/dist/accessories/types.js.map +1 -1
- package/dist/index.d.ts +28 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -40
- package/dist/index.js.map +1 -1
- package/dist/internal-types.d.ts +1 -1
- package/dist/internal-types.d.ts.map +1 -1
- package/dist/internal-types.js +21 -19
- package/dist/internal-types.js.map +1 -1
- package/dist/lib/Accessory.d.ts +37 -38
- package/dist/lib/Accessory.d.ts.map +1 -1
- package/dist/lib/Accessory.js +299 -289
- package/dist/lib/Accessory.js.map +1 -1
- package/dist/lib/Advertiser.d.ts +7 -7
- package/dist/lib/Advertiser.d.ts.map +1 -1
- package/dist/lib/Advertiser.js +136 -128
- package/dist/lib/Advertiser.js.map +1 -1
- package/dist/lib/Bridge.d.ts +1 -1
- package/dist/lib/Bridge.d.ts.map +1 -1
- package/dist/lib/Bridge.js +6 -2
- package/dist/lib/Bridge.js.map +1 -1
- package/dist/lib/Characteristic.d.ts +41 -40
- package/dist/lib/Characteristic.d.ts.map +1 -1
- package/dist/lib/Characteristic.js +210 -206
- package/dist/lib/Characteristic.js.map +1 -1
- package/dist/lib/HAPServer.d.ts +30 -35
- package/dist/lib/HAPServer.d.ts.map +1 -1
- package/dist/lib/HAPServer.js +229 -225
- package/dist/lib/HAPServer.js.map +1 -1
- package/dist/lib/Service.d.ts +22 -22
- package/dist/lib/Service.d.ts.map +1 -1
- package/dist/lib/Service.js +71 -67
- package/dist/lib/Service.js.map +1 -1
- package/dist/lib/camera/RTPProxy.d.ts +1 -2
- package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
- package/dist/lib/camera/RTPProxy.js +44 -28
- package/dist/lib/camera/RTPProxy.js.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.d.ts +33 -34
- package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.js +149 -181
- package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
- package/dist/lib/camera/RecordingManagement.d.ts +17 -19
- package/dist/lib/camera/RecordingManagement.d.ts.map +1 -1
- package/dist/lib/camera/RecordingManagement.js +153 -162
- package/dist/lib/camera/RecordingManagement.js.map +1 -1
- package/dist/lib/camera/index.d.ts +3 -3
- package/dist/lib/camera/index.d.ts.map +1 -1
- package/dist/lib/camera/index.js +6 -3
- package/dist/lib/camera/index.js.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.d.ts +33 -33
- package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.js +146 -154
- package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
- package/dist/lib/controller/CameraController.d.ts +20 -22
- package/dist/lib/controller/CameraController.d.ts.map +1 -1
- package/dist/lib/controller/CameraController.js +78 -74
- package/dist/lib/controller/CameraController.js.map +1 -1
- package/dist/lib/controller/Controller.d.ts +4 -4
- package/dist/lib/controller/Controller.d.ts.map +1 -1
- package/dist/lib/controller/Controller.js +8 -5
- package/dist/lib/controller/Controller.js.map +1 -1
- package/dist/lib/controller/DoorbellController.d.ts +4 -5
- package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
- package/dist/lib/controller/DoorbellController.js +13 -9
- package/dist/lib/controller/DoorbellController.js.map +1 -1
- package/dist/lib/controller/RemoteController.d.ts +37 -39
- package/dist/lib/controller/RemoteController.d.ts.map +1 -1
- package/dist/lib/controller/RemoteController.js +199 -210
- package/dist/lib/controller/RemoteController.js.map +1 -1
- package/dist/lib/controller/index.d.ts +5 -5
- package/dist/lib/controller/index.d.ts.map +1 -1
- package/dist/lib/controller/index.js +8 -5
- package/dist/lib/controller/index.js.map +1 -1
- package/dist/lib/datastream/DataStreamManagement.d.ts +2 -2
- package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamManagement.js +40 -40
- package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
- package/dist/lib/datastream/DataStreamParser.d.ts +0 -1
- package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamParser.js +77 -57
- package/dist/lib/datastream/DataStreamParser.js.map +1 -1
- package/dist/lib/datastream/DataStreamServer.d.ts +22 -27
- package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamServer.js +164 -159
- package/dist/lib/datastream/DataStreamServer.js.map +1 -1
- package/dist/lib/datastream/index.d.ts +3 -3
- package/dist/lib/datastream/index.d.ts.map +1 -1
- package/dist/lib/datastream/index.js +6 -3
- package/dist/lib/datastream/index.js.map +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.d.ts +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.d.ts.map +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.js +1203 -957
- package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
- package/dist/lib/definitions/ServiceDefinitions.d.ts +1 -1
- package/dist/lib/definitions/ServiceDefinitions.d.ts.map +1 -1
- package/dist/lib/definitions/ServiceDefinitions.js +695 -620
- package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
- package/dist/lib/definitions/generate-definitions.d.ts +3 -3
- package/dist/lib/definitions/generate-definitions.d.ts.map +1 -1
- package/dist/lib/definitions/generate-definitions.js +259 -247
- package/dist/lib/definitions/generate-definitions.js.map +1 -1
- package/dist/lib/definitions/generator-configuration.d.ts +1 -1
- package/dist/lib/definitions/generator-configuration.d.ts.map +1 -1
- package/dist/lib/definitions/generator-configuration.js +181 -176
- package/dist/lib/definitions/generator-configuration.js.map +1 -1
- package/dist/lib/definitions/index.d.ts +2 -2
- package/dist/lib/definitions/index.d.ts.map +1 -1
- package/dist/lib/definitions/index.js +5 -2
- package/dist/lib/definitions/index.js.map +1 -1
- package/dist/lib/gen/HomeKit.d.ts +7 -0
- package/dist/lib/gen/HomeKit.d.ts.map +1 -0
- package/dist/lib/gen/HomeKit.js +8 -0
- package/dist/lib/gen/HomeKit.js.map +1 -0
- package/dist/lib/model/AccessoryInfo.d.ts +3 -4
- package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
- package/dist/lib/model/AccessoryInfo.js +55 -52
- package/dist/lib/model/AccessoryInfo.js.map +1 -1
- package/dist/lib/model/ControllerStorage.d.ts +3 -3
- package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
- package/dist/lib/model/ControllerStorage.js +23 -18
- package/dist/lib/model/ControllerStorage.js.map +1 -1
- package/dist/lib/model/HAPStorage.d.ts +2 -2
- package/dist/lib/model/HAPStorage.d.ts.map +1 -1
- package/dist/lib/model/HAPStorage.js +11 -4
- package/dist/lib/model/HAPStorage.js.map +1 -1
- package/dist/lib/model/IdentifierCache.d.ts +1 -1
- package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
- package/dist/lib/model/IdentifierCache.js +27 -19
- package/dist/lib/model/IdentifierCache.js.map +1 -1
- package/dist/lib/tv/AccessControlManagement.d.ts +9 -9
- package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
- package/dist/lib/tv/AccessControlManagement.js +29 -27
- package/dist/lib/tv/AccessControlManagement.js.map +1 -1
- package/dist/lib/util/checkName.d.ts +2 -2
- package/dist/lib/util/checkName.d.ts.map +1 -1
- package/dist/lib/util/checkName.js +9 -6
- package/dist/lib/util/checkName.js.map +1 -1
- package/dist/lib/util/clone.d.ts.map +1 -1
- package/dist/lib/util/clone.js +5 -1
- package/dist/lib/util/clone.js.map +1 -1
- package/dist/lib/util/color-utils.d.ts +1 -1
- package/dist/lib/util/color-utils.d.ts.map +1 -1
- package/dist/lib/util/color-utils.js +9 -4
- package/dist/lib/util/color-utils.js.map +1 -1
- package/dist/lib/util/eventedhttp.d.ts +22 -23
- package/dist/lib/util/eventedhttp.d.ts.map +1 -1
- package/dist/lib/util/eventedhttp.js +116 -109
- package/dist/lib/util/eventedhttp.js.map +1 -1
- package/dist/lib/util/hapCrypto.d.ts +2 -3
- package/dist/lib/util/hapCrypto.d.ts.map +1 -1
- package/dist/lib/util/hapCrypto.js +40 -31
- package/dist/lib/util/hapCrypto.js.map +1 -1
- package/dist/lib/util/hapStatusError.d.ts +1 -1
- package/dist/lib/util/hapStatusError.d.ts.map +1 -1
- package/dist/lib/util/hapStatusError.js +8 -4
- package/dist/lib/util/hapStatusError.js.map +1 -1
- package/dist/lib/util/net-utils.d.ts +1 -1
- package/dist/lib/util/net-utils.js +23 -17
- package/dist/lib/util/net-utils.js.map +1 -1
- package/dist/lib/util/once.d.ts.map +1 -1
- package/dist/lib/util/once.js +6 -2
- package/dist/lib/util/once.js.map +1 -1
- package/dist/lib/util/promise-utils.d.ts +1 -1
- package/dist/lib/util/promise-utils.d.ts.map +1 -1
- package/dist/lib/util/promise-utils.js +10 -3
- package/dist/lib/util/promise-utils.js.map +1 -1
- package/dist/lib/util/request-util.d.ts +2 -3
- package/dist/lib/util/request-util.d.ts.map +1 -1
- package/dist/lib/util/request-util.js +19 -11
- package/dist/lib/util/request-util.js.map +1 -1
- package/dist/lib/util/time.d.ts +0 -1
- package/dist/lib/util/time.d.ts.map +1 -1
- package/dist/lib/util/time.js +11 -6
- package/dist/lib/util/time.js.map +1 -1
- package/dist/lib/util/tlv.d.ts +0 -1
- package/dist/lib/util/tlv.d.ts.map +1 -1
- package/dist/lib/util/tlv.js +43 -28
- package/dist/lib/util/tlv.js.map +1 -1
- package/dist/lib/util/uuid.d.ts +0 -1
- package/dist/lib/util/uuid.d.ts.map +1 -1
- package/dist/lib/util/uuid.js +38 -26
- package/dist/lib/util/uuid.js.map +1 -1
- package/dist/types.d.ts +24 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -3
- package/dist/types.js.map +1 -1
- package/package.json +47 -52
- package/dist/lib/dbus/align.d.ts +0 -2
- package/dist/lib/dbus/align.d.ts.map +0 -1
- package/dist/lib/dbus/align.js +0 -12
- package/dist/lib/dbus/align.js.map +0 -1
- package/dist/lib/dbus/bus.d.ts +0 -38
- package/dist/lib/dbus/bus.d.ts.map +0 -1
- package/dist/lib/dbus/bus.js +0 -222
- package/dist/lib/dbus/bus.js.map +0 -1
- package/dist/lib/dbus/constants.d.ts +0 -43
- package/dist/lib/dbus/constants.d.ts.map +0 -1
- package/dist/lib/dbus/constants.js +0 -53
- package/dist/lib/dbus/constants.js.map +0 -1
- package/dist/lib/dbus/dbus-buffer.d.ts +0 -30
- package/dist/lib/dbus/dbus-buffer.d.ts.map +0 -1
- package/dist/lib/dbus/dbus-buffer.js +0 -175
- package/dist/lib/dbus/dbus-buffer.js.map +0 -1
- package/dist/lib/dbus/handshake.d.ts +0 -2
- package/dist/lib/dbus/handshake.d.ts.map +0 -1
- package/dist/lib/dbus/handshake.js +0 -130
- package/dist/lib/dbus/handshake.js.map +0 -1
- package/dist/lib/dbus/index.d.ts +0 -3
- package/dist/lib/dbus/index.d.ts.map +0 -1
- package/dist/lib/dbus/index.js +0 -123
- package/dist/lib/dbus/index.js.map +0 -1
- package/dist/lib/dbus/introspect.d.ts +0 -30
- package/dist/lib/dbus/introspect.d.ts.map +0 -1
- package/dist/lib/dbus/introspect.js +0 -208
- package/dist/lib/dbus/introspect.js.map +0 -1
- package/dist/lib/dbus/marshall.d.ts +0 -2
- package/dist/lib/dbus/marshall.d.ts.map +0 -1
- package/dist/lib/dbus/marshall.js +0 -97
- package/dist/lib/dbus/marshall.js.map +0 -1
- package/dist/lib/dbus/marshallers.d.ts +0 -10
- package/dist/lib/dbus/marshallers.d.ts.map +0 -1
- package/dist/lib/dbus/marshallers.js +0 -329
- package/dist/lib/dbus/marshallers.js.map +0 -1
- package/dist/lib/dbus/message.d.ts +0 -4
- package/dist/lib/dbus/message.d.ts.map +0 -1
- package/dist/lib/dbus/message.js +0 -116
- package/dist/lib/dbus/message.js.map +0 -1
- package/dist/lib/dbus/put.d.ts +0 -21
- package/dist/lib/dbus/put.d.ts.map +0 -1
- package/dist/lib/dbus/put.js +0 -120
- package/dist/lib/dbus/put.js.map +0 -1
- package/dist/lib/dbus/readline.d.ts +0 -2
- package/dist/lib/dbus/readline.d.ts.map +0 -1
- package/dist/lib/dbus/readline.js +0 -27
- package/dist/lib/dbus/readline.js.map +0 -1
- package/dist/lib/dbus/signature.d.ts +0 -2
- package/dist/lib/dbus/signature.d.ts.map +0 -1
- package/dist/lib/dbus/signature.js +0 -59
- package/dist/lib/dbus/signature.js.map +0 -1
- package/dist/lib/dbus/stdifaces.d.ts +0 -3
- package/dist/lib/dbus/stdifaces.d.ts.map +0 -1
- package/dist/lib/dbus/stdifaces.js +0 -206
- package/dist/lib/dbus/stdifaces.js.map +0 -1
package/dist/lib/Advertiser.js
CHANGED
|
@@ -1,50 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResolvedAdvertiser = exports.AvahiAdvertiser = exports.DBusInvokeError = exports.BonjourHAPAdvertiser = exports.CiaoAdvertiser = exports.AdvertiserEvent = exports.PairingFeatureFlag = exports.StatusFlag = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
|
6
|
+
/// <reference path="../../@types/bonjour-hap.d.ts" />
|
|
7
|
+
const ciao_1 = tslib_1.__importDefault(require("@homebridge/ciao"));
|
|
8
|
+
const dbus_native_1 = tslib_1.__importDefault(require("@homebridge/dbus-native"));
|
|
9
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
10
|
+
const bonjour_hap_1 = tslib_1.__importDefault(require("bonjour-hap"));
|
|
11
|
+
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
12
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
13
|
+
const events_1 = require("events");
|
|
14
|
+
const promise_utils_1 = require("./util/promise-utils");
|
|
15
|
+
const debug = (0, debug_1.default)("HAP-NodeJS:Advertiser");
|
|
11
16
|
/**
|
|
12
17
|
* This enum lists all bitmasks for all known status flags.
|
|
13
18
|
* When the bit for the given bitmask is set, it represents the state described by the name.
|
|
14
19
|
*
|
|
15
20
|
* @group Advertiser
|
|
16
21
|
*/
|
|
17
|
-
|
|
18
|
-
export var StatusFlag;
|
|
22
|
+
var StatusFlag;
|
|
19
23
|
(function (StatusFlag) {
|
|
20
24
|
StatusFlag[StatusFlag["NOT_PAIRED"] = 1] = "NOT_PAIRED";
|
|
21
25
|
StatusFlag[StatusFlag["NOT_JOINED_WIFI"] = 2] = "NOT_JOINED_WIFI";
|
|
22
26
|
StatusFlag[StatusFlag["PROBLEM_DETECTED"] = 4] = "PROBLEM_DETECTED";
|
|
23
|
-
})(StatusFlag || (StatusFlag = {}));
|
|
27
|
+
})(StatusFlag || (exports.StatusFlag = StatusFlag = {}));
|
|
24
28
|
/**
|
|
25
29
|
* This enum lists all bitmasks for all known pairing feature flags.
|
|
26
30
|
* When the bit for the given bitmask is set, it represents the state described by the name.
|
|
27
31
|
*
|
|
28
32
|
* @group Advertiser
|
|
29
33
|
*/
|
|
30
|
-
|
|
31
|
-
export var PairingFeatureFlag;
|
|
34
|
+
var PairingFeatureFlag;
|
|
32
35
|
(function (PairingFeatureFlag) {
|
|
33
36
|
PairingFeatureFlag[PairingFeatureFlag["SUPPORTS_HARDWARE_AUTHENTICATION"] = 1] = "SUPPORTS_HARDWARE_AUTHENTICATION";
|
|
34
37
|
PairingFeatureFlag[PairingFeatureFlag["SUPPORTS_SOFTWARE_AUTHENTICATION"] = 2] = "SUPPORTS_SOFTWARE_AUTHENTICATION";
|
|
35
|
-
})(PairingFeatureFlag || (PairingFeatureFlag = {}));
|
|
38
|
+
})(PairingFeatureFlag || (exports.PairingFeatureFlag = PairingFeatureFlag = {}));
|
|
36
39
|
/**
|
|
37
40
|
* @group Advertiser
|
|
38
41
|
*/
|
|
39
|
-
|
|
40
|
-
export var AdvertiserEvent;
|
|
42
|
+
var AdvertiserEvent;
|
|
41
43
|
(function (AdvertiserEvent) {
|
|
42
44
|
/**
|
|
43
45
|
* Emitted if the underlying mDNS advertisers signals, that the service name
|
|
44
46
|
* was automatically changed due to some naming conflicts on the network.
|
|
45
47
|
*/
|
|
46
48
|
AdvertiserEvent["UPDATED_NAME"] = "updated-name";
|
|
47
|
-
})(AdvertiserEvent || (AdvertiserEvent = {}));
|
|
49
|
+
})(AdvertiserEvent || (exports.AdvertiserEvent = AdvertiserEvent = {}));
|
|
48
50
|
/**
|
|
49
51
|
* Advertiser uses mdns to broadcast the presence of an Accessory to the local network.
|
|
50
52
|
*
|
|
@@ -55,9 +57,9 @@ export var AdvertiserEvent;
|
|
|
55
57
|
*
|
|
56
58
|
* @group Advertiser
|
|
57
59
|
*/
|
|
58
|
-
|
|
59
|
-
static protocolVersion =
|
|
60
|
-
static protocolVersionService =
|
|
60
|
+
class CiaoAdvertiser extends events_1.EventEmitter {
|
|
61
|
+
static protocolVersion = "1.1";
|
|
62
|
+
static protocolVersionService = "1.1.0";
|
|
61
63
|
accessoryInfo;
|
|
62
64
|
setupHash;
|
|
63
65
|
responder;
|
|
@@ -66,7 +68,7 @@ export class CiaoAdvertiser extends EventEmitter {
|
|
|
66
68
|
super();
|
|
67
69
|
this.accessoryInfo = accessoryInfo;
|
|
68
70
|
this.setupHash = CiaoAdvertiser.computeSetupHash(accessoryInfo);
|
|
69
|
-
this.responder = getResponder({
|
|
71
|
+
this.responder = ciao_1.default.getResponder({
|
|
70
72
|
...responderOptions,
|
|
71
73
|
});
|
|
72
74
|
this.advertisedService = this.responder.createService({
|
|
@@ -88,7 +90,7 @@ export class CiaoAdvertiser extends EventEmitter {
|
|
|
88
90
|
}
|
|
89
91
|
updateAdvertisement(silent) {
|
|
90
92
|
const txt = CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash);
|
|
91
|
-
debug(
|
|
93
|
+
debug("Updating txt record (txt: %o, silent: %d)", txt, silent);
|
|
92
94
|
this.advertisedService.updateTxt(txt, silent);
|
|
93
95
|
}
|
|
94
96
|
async destroy() {
|
|
@@ -102,21 +104,21 @@ export class CiaoAdvertiser extends EventEmitter {
|
|
|
102
104
|
statusFlags.push(1 /* StatusFlag.NOT_PAIRED */);
|
|
103
105
|
}
|
|
104
106
|
return {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
"c#": accessoryInfo.getConfigVersion(), // current configuration number
|
|
108
|
+
ff: CiaoAdvertiser.ff(), // pairing feature flags
|
|
109
|
+
id: accessoryInfo.username, // device id
|
|
110
|
+
md: accessoryInfo.model, // model name
|
|
111
|
+
pv: CiaoAdvertiser.protocolVersion, // protocol version
|
|
112
|
+
"s#": 1, // current state number (must be 1)
|
|
113
|
+
sf: CiaoAdvertiser.sf(...statusFlags), // status flags
|
|
114
|
+
ci: accessoryInfo.category,
|
|
115
|
+
sh: setupHash,
|
|
114
116
|
};
|
|
115
117
|
}
|
|
116
118
|
static computeSetupHash(accessoryInfo) {
|
|
117
|
-
const hash = createHash(
|
|
119
|
+
const hash = crypto_1.default.createHash("sha512");
|
|
118
120
|
hash.update(accessoryInfo.setupID + accessoryInfo.username.toUpperCase());
|
|
119
|
-
return hash.digest().
|
|
121
|
+
return hash.digest().slice(0, 4).toString("base64");
|
|
120
122
|
}
|
|
121
123
|
static ff(...flags) {
|
|
122
124
|
let value = 0;
|
|
@@ -129,12 +131,13 @@ export class CiaoAdvertiser extends EventEmitter {
|
|
|
129
131
|
return value;
|
|
130
132
|
}
|
|
131
133
|
}
|
|
134
|
+
exports.CiaoAdvertiser = CiaoAdvertiser;
|
|
132
135
|
/**
|
|
133
136
|
* Advertiser base on the legacy "bonjour-hap" library.
|
|
134
137
|
*
|
|
135
138
|
* @group Advertiser
|
|
136
139
|
*/
|
|
137
|
-
|
|
140
|
+
class BonjourHAPAdvertiser extends events_1.EventEmitter {
|
|
138
141
|
accessoryInfo;
|
|
139
142
|
setupHash;
|
|
140
143
|
serviceOptions;
|
|
@@ -147,36 +150,36 @@ export class BonjourHAPAdvertiser extends EventEmitter {
|
|
|
147
150
|
this.accessoryInfo = accessoryInfo;
|
|
148
151
|
this.setupHash = CiaoAdvertiser.computeSetupHash(accessoryInfo);
|
|
149
152
|
this.serviceOptions = serviceOptions;
|
|
150
|
-
this.bonjour =
|
|
153
|
+
this.bonjour = (0, bonjour_hap_1.default)();
|
|
151
154
|
debug(`Preparing Advertiser for '${this.accessoryInfo.displayName}' using bonjour-hap backend!`);
|
|
152
155
|
}
|
|
153
156
|
initPort(port) {
|
|
154
157
|
this.port = port;
|
|
155
158
|
}
|
|
156
159
|
startAdvertising() {
|
|
157
|
-
|
|
160
|
+
(0, assert_1.default)(!this.destroyed, "Can't advertise on a destroyed bonjour instance!");
|
|
158
161
|
if (this.port == null) {
|
|
159
|
-
throw new Error(
|
|
162
|
+
throw new Error("Tried starting bonjour-hap advertisement without initializing port!");
|
|
160
163
|
}
|
|
161
164
|
debug(`Starting to advertise '${this.accessoryInfo.displayName}' using bonjour-hap backend!`);
|
|
162
165
|
if (this.advertisement) {
|
|
163
166
|
this.destroy();
|
|
164
167
|
}
|
|
165
|
-
const hostname =
|
|
168
|
+
const hostname = this.accessoryInfo.username.replace(/:/ig, "_") + ".local";
|
|
166
169
|
this.advertisement = this.bonjour.publish({
|
|
167
170
|
name: this.accessoryInfo.displayName,
|
|
168
|
-
type:
|
|
171
|
+
type: "hap",
|
|
169
172
|
port: this.port,
|
|
170
173
|
txt: CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash),
|
|
171
174
|
host: hostname,
|
|
172
175
|
addUnsafeServiceEnumerationRecord: true,
|
|
173
176
|
...this.serviceOptions,
|
|
174
177
|
});
|
|
175
|
-
return PromiseTimeout(1);
|
|
178
|
+
return (0, promise_utils_1.PromiseTimeout)(1);
|
|
176
179
|
}
|
|
177
180
|
updateAdvertisement(silent) {
|
|
178
181
|
const txt = CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash);
|
|
179
|
-
debug(
|
|
182
|
+
debug("Updating txt record (txt: %o, silent: %d)", txt, silent);
|
|
180
183
|
if (this.advertisement) {
|
|
181
184
|
this.advertisement.updateTxt(txt, silent);
|
|
182
185
|
}
|
|
@@ -194,34 +197,32 @@ export class BonjourHAPAdvertiser extends EventEmitter {
|
|
|
194
197
|
}
|
|
195
198
|
}
|
|
196
199
|
}
|
|
200
|
+
exports.BonjourHAPAdvertiser = BonjourHAPAdvertiser;
|
|
197
201
|
function messageBusConnectionResult(bus) {
|
|
198
202
|
return new Promise((resolve, reject) => {
|
|
199
|
-
debug('Waiting for connection to message bus...');
|
|
200
203
|
const errorHandler = (error) => {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
bus.connection.removeListener('connect', connectHandler);
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
205
|
+
bus.connection.removeListener("connect", connectHandler);
|
|
204
206
|
reject(error);
|
|
205
207
|
};
|
|
206
208
|
const connectHandler = () => {
|
|
207
|
-
|
|
208
|
-
bus.connection.removeListener('error', errorHandler);
|
|
209
|
+
bus.connection.removeListener("error", errorHandler);
|
|
209
210
|
resolve();
|
|
210
211
|
};
|
|
211
|
-
bus.connection.once(
|
|
212
|
-
bus.connection.once(
|
|
213
|
-
debug('Listening for connection to message bus...');
|
|
212
|
+
bus.connection.once("connect", connectHandler);
|
|
213
|
+
bus.connection.once("error", errorHandler);
|
|
214
214
|
});
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
217
|
* @group Advertiser
|
|
218
218
|
*/
|
|
219
|
-
|
|
219
|
+
class DBusInvokeError extends Error {
|
|
220
220
|
errorName;
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
221
222
|
constructor(errorObject) {
|
|
222
223
|
super();
|
|
223
224
|
Object.setPrototypeOf(this, DBusInvokeError.prototype);
|
|
224
|
-
this.name =
|
|
225
|
+
this.name = "DBusInvokeError";
|
|
225
226
|
this.errorName = errorObject.name;
|
|
226
227
|
if (Array.isArray(errorObject.message) && errorObject.message.length === 1) {
|
|
227
228
|
this.message = errorObject.message[0];
|
|
@@ -231,6 +232,8 @@ export class DBusInvokeError extends Error {
|
|
|
231
232
|
}
|
|
232
233
|
}
|
|
233
234
|
}
|
|
235
|
+
exports.DBusInvokeError = DBusInvokeError;
|
|
236
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
234
237
|
function dbusInvoke(bus, destination, path, dbusInterface, member, others) {
|
|
235
238
|
return new Promise((resolve, reject) => {
|
|
236
239
|
const command = {
|
|
@@ -257,9 +260,9 @@ function dbusInvoke(bus, destination, path, dbusInterface, member, others) {
|
|
|
257
260
|
*
|
|
258
261
|
* @group Advertiser
|
|
259
262
|
*/
|
|
260
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
261
263
|
var AvahiServerState;
|
|
262
264
|
(function (AvahiServerState) {
|
|
265
|
+
// noinspection JSUnusedGlobalSymbols
|
|
263
266
|
AvahiServerState[AvahiServerState["INVALID"] = 0] = "INVALID";
|
|
264
267
|
AvahiServerState[AvahiServerState["REGISTERING"] = 1] = "REGISTERING";
|
|
265
268
|
AvahiServerState[AvahiServerState["RUNNING"] = 2] = "RUNNING";
|
|
@@ -275,7 +278,7 @@ var AvahiServerState;
|
|
|
275
278
|
*
|
|
276
279
|
* @group Advertiser
|
|
277
280
|
*/
|
|
278
|
-
|
|
281
|
+
class AvahiAdvertiser extends events_1.EventEmitter {
|
|
279
282
|
accessoryInfo;
|
|
280
283
|
setupHash;
|
|
281
284
|
port;
|
|
@@ -288,53 +291,53 @@ export class AvahiAdvertiser extends EventEmitter {
|
|
|
288
291
|
this.accessoryInfo = accessoryInfo;
|
|
289
292
|
this.setupHash = CiaoAdvertiser.computeSetupHash(accessoryInfo);
|
|
290
293
|
debug(`Preparing Advertiser for '${this.accessoryInfo.displayName}' using Avahi backend!`);
|
|
291
|
-
this.bus = systemBus();
|
|
294
|
+
this.bus = dbus_native_1.default.systemBus();
|
|
292
295
|
this.stateChangeHandler = this.handleStateChangedEvent.bind(this);
|
|
293
296
|
}
|
|
294
297
|
createTxt() {
|
|
295
298
|
return Object
|
|
296
299
|
.entries(CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash))
|
|
297
|
-
.map((el) => Buffer.from(
|
|
300
|
+
.map((el) => Buffer.from(el[0] + "=" + el[1]));
|
|
298
301
|
}
|
|
299
302
|
initPort(port) {
|
|
300
303
|
this.port = port;
|
|
301
304
|
}
|
|
302
305
|
async startAdvertising() {
|
|
303
306
|
if (this.port == null) {
|
|
304
|
-
throw new Error(
|
|
307
|
+
throw new Error("Tried starting Avahi advertisement without initializing port!");
|
|
305
308
|
}
|
|
306
309
|
if (!this.bus) {
|
|
307
|
-
throw new Error(
|
|
310
|
+
throw new Error("Tried to start Avahi advertisement on a destroyed advertiser!");
|
|
308
311
|
}
|
|
309
312
|
debug(`Starting to advertise '${this.accessoryInfo.displayName}' using Avahi backend!`);
|
|
310
|
-
this.path = await AvahiAdvertiser.avahiInvoke(this.bus,
|
|
311
|
-
await AvahiAdvertiser.avahiInvoke(this.bus, this.path,
|
|
313
|
+
this.path = await AvahiAdvertiser.avahiInvoke(this.bus, "/", "Server", "EntryGroupNew");
|
|
314
|
+
await AvahiAdvertiser.avahiInvoke(this.bus, this.path, "EntryGroup", "AddService", {
|
|
312
315
|
body: [
|
|
313
316
|
-1, // interface
|
|
314
317
|
-1, // protocol
|
|
315
318
|
0, // flags
|
|
316
319
|
this.accessoryInfo.displayName, // name
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
+
"_hap._tcp", // type
|
|
321
|
+
"", // domain
|
|
322
|
+
"", // host
|
|
320
323
|
this.port, // port
|
|
321
324
|
this.createTxt(), // txt
|
|
322
325
|
],
|
|
323
|
-
signature:
|
|
326
|
+
signature: "iiussssqaay",
|
|
324
327
|
});
|
|
325
|
-
await AvahiAdvertiser.avahiInvoke(this.bus, this.path,
|
|
328
|
+
await AvahiAdvertiser.avahiInvoke(this.bus, this.path, "EntryGroup", "Commit");
|
|
326
329
|
try {
|
|
327
330
|
if (!this.avahiServerInterface) {
|
|
328
|
-
this.avahiServerInterface = await AvahiAdvertiser.avahiInterface(this.bus,
|
|
329
|
-
this.avahiServerInterface.on(
|
|
331
|
+
this.avahiServerInterface = await AvahiAdvertiser.avahiInterface(this.bus, "Server");
|
|
332
|
+
this.avahiServerInterface.on("StateChanged", this.stateChangeHandler);
|
|
330
333
|
}
|
|
331
334
|
}
|
|
332
335
|
catch (error) {
|
|
333
336
|
// We have some problem on Synology https://github.com/homebridge/HAP-NodeJS/issues/993
|
|
334
|
-
console.warn(
|
|
335
|
-
|
|
337
|
+
console.warn("Failed to create listener for avahi-daemon server state. The system will not be notified about restarts of avahi-daemon " +
|
|
338
|
+
"and will therefore stay undiscoverable in those instances. Error message: " + error);
|
|
336
339
|
if (error.stack) {
|
|
337
|
-
debug(
|
|
340
|
+
debug("Detailed error: " + error.stack);
|
|
338
341
|
}
|
|
339
342
|
}
|
|
340
343
|
}
|
|
@@ -346,67 +349,67 @@ export class AvahiAdvertiser extends EventEmitter {
|
|
|
346
349
|
*/
|
|
347
350
|
handleStateChangedEvent(state) {
|
|
348
351
|
if (state === 2 /* AvahiServerState.RUNNING */ && this.path) {
|
|
349
|
-
debug(
|
|
352
|
+
debug("Found Avahi daemon to have restarted!");
|
|
350
353
|
this.startAdvertising()
|
|
351
|
-
.catch(reason => console.error(
|
|
354
|
+
.catch(reason => console.error("Could not (re-)create mDNS advertisement. The HAP-Server won't be discoverable: " + reason));
|
|
352
355
|
}
|
|
353
356
|
}
|
|
354
357
|
async updateAdvertisement(silent) {
|
|
355
358
|
if (!this.bus) {
|
|
356
|
-
throw new Error(
|
|
359
|
+
throw new Error("Tried to update Avahi advertisement on a destroyed advertiser!");
|
|
357
360
|
}
|
|
358
361
|
if (!this.path) {
|
|
359
|
-
debug(
|
|
362
|
+
debug("Tried to update advertisement without a valid `path`!");
|
|
360
363
|
return;
|
|
361
364
|
}
|
|
362
|
-
debug(
|
|
365
|
+
debug("Updating txt record (txt: %o, silent: %d)", CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash), silent);
|
|
363
366
|
try {
|
|
364
|
-
await AvahiAdvertiser.avahiInvoke(this.bus, this.path,
|
|
365
|
-
body: [-1, -1, 0, this.accessoryInfo.displayName,
|
|
366
|
-
signature:
|
|
367
|
+
await AvahiAdvertiser.avahiInvoke(this.bus, this.path, "EntryGroup", "UpdateServiceTxt", {
|
|
368
|
+
body: [-1, -1, 0, this.accessoryInfo.displayName, "_hap._tcp", "", this.createTxt()],
|
|
369
|
+
signature: "iiusssaay",
|
|
367
370
|
});
|
|
368
371
|
}
|
|
369
372
|
catch (error) {
|
|
370
|
-
console.error(
|
|
373
|
+
console.error("Failed to update avahi advertisement: " + error);
|
|
371
374
|
}
|
|
372
375
|
}
|
|
373
376
|
async destroy() {
|
|
374
377
|
if (!this.bus) {
|
|
375
|
-
throw new Error(
|
|
378
|
+
throw new Error("Tried to destroy Avahi advertisement on a destroyed advertiser!");
|
|
376
379
|
}
|
|
377
380
|
if (this.path) {
|
|
378
381
|
try {
|
|
379
|
-
await AvahiAdvertiser.avahiInvoke(this.bus, this.path,
|
|
382
|
+
await AvahiAdvertiser.avahiInvoke(this.bus, this.path, "EntryGroup", "Free");
|
|
380
383
|
}
|
|
381
384
|
catch (error) {
|
|
382
385
|
// Typically, this fails if e.g. avahi service was stopped in the meantime.
|
|
383
|
-
debug(
|
|
386
|
+
debug("Destroying Avahi advertisement failed: " + error);
|
|
384
387
|
}
|
|
385
388
|
this.path = undefined;
|
|
386
389
|
}
|
|
387
390
|
if (this.avahiServerInterface) {
|
|
388
|
-
this.avahiServerInterface.removeListener(
|
|
391
|
+
this.avahiServerInterface.removeListener("StateChanged", this.stateChangeHandler);
|
|
389
392
|
this.avahiServerInterface = undefined;
|
|
390
393
|
}
|
|
391
394
|
this.bus.connection.stream.destroy();
|
|
392
395
|
this.bus = undefined;
|
|
393
396
|
}
|
|
394
397
|
static async isAvailable() {
|
|
395
|
-
|
|
396
|
-
const bus = systemBus();
|
|
398
|
+
const bus = dbus_native_1.default.systemBus();
|
|
397
399
|
try {
|
|
398
400
|
try {
|
|
399
401
|
await messageBusConnectionResult(bus);
|
|
400
402
|
}
|
|
401
403
|
catch (error) {
|
|
404
|
+
debug("Avahi/DBus classified unavailable due to missing dbus interface!");
|
|
402
405
|
return false;
|
|
403
406
|
}
|
|
404
407
|
try {
|
|
405
|
-
const version = await this.avahiInvoke(bus,
|
|
406
|
-
debug(
|
|
408
|
+
const version = await this.avahiInvoke(bus, "/", "Server", "GetVersionString");
|
|
409
|
+
debug("Detected Avahi over DBus interface running version '%s'.", version);
|
|
407
410
|
}
|
|
408
411
|
catch (error) {
|
|
409
|
-
debug(
|
|
412
|
+
debug("Avahi/DBus classified unavailable due to missing avahi interface!");
|
|
410
413
|
return false;
|
|
411
414
|
}
|
|
412
415
|
return true;
|
|
@@ -415,16 +418,17 @@ export class AvahiAdvertiser extends EventEmitter {
|
|
|
415
418
|
bus.connection.stream.destroy();
|
|
416
419
|
}
|
|
417
420
|
}
|
|
421
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
418
422
|
static avahiInvoke(bus, path, dbusInterface, member, others) {
|
|
419
|
-
return dbusInvoke(bus,
|
|
423
|
+
return dbusInvoke(bus, "org.freedesktop.Avahi", path, `org.freedesktop.Avahi.${dbusInterface}`, member, others);
|
|
420
424
|
}
|
|
421
425
|
static avahiInterface(bus, dbusInterface) {
|
|
422
426
|
return new Promise((resolve, reject) => {
|
|
423
427
|
bus
|
|
424
|
-
.getService(
|
|
425
|
-
.getInterface(
|
|
428
|
+
.getService("org.freedesktop.Avahi")
|
|
429
|
+
.getInterface("/", "org.freedesktop.Avahi." + dbusInterface, (error, iface) => {
|
|
426
430
|
if (error || !iface) {
|
|
427
|
-
reject(error ?? new Error(
|
|
431
|
+
reject(error ?? new Error("Interface not present!"));
|
|
428
432
|
}
|
|
429
433
|
else {
|
|
430
434
|
resolve(iface);
|
|
@@ -433,10 +437,11 @@ export class AvahiAdvertiser extends EventEmitter {
|
|
|
433
437
|
});
|
|
434
438
|
}
|
|
435
439
|
}
|
|
440
|
+
exports.AvahiAdvertiser = AvahiAdvertiser;
|
|
436
441
|
const RESOLVED_PERMISSIONS_ERRORS = [
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
442
|
+
"org.freedesktop.DBus.Error.AccessDenied",
|
|
443
|
+
"org.freedesktop.DBus.Error.AuthFailed",
|
|
444
|
+
"org.freedesktop.DBus.Error.InteractiveAuthorizationRequired",
|
|
440
445
|
];
|
|
441
446
|
/**
|
|
442
447
|
* Advertiser based on the systemd-resolved D-Bus library.
|
|
@@ -444,7 +449,7 @@ const RESOLVED_PERMISSIONS_ERRORS = [
|
|
|
444
449
|
*
|
|
445
450
|
* @group Advertiser
|
|
446
451
|
*/
|
|
447
|
-
|
|
452
|
+
class ResolvedAdvertiser extends events_1.EventEmitter {
|
|
448
453
|
accessoryInfo;
|
|
449
454
|
setupHash;
|
|
450
455
|
port;
|
|
@@ -454,7 +459,7 @@ export class ResolvedAdvertiser extends EventEmitter {
|
|
|
454
459
|
super();
|
|
455
460
|
this.accessoryInfo = accessoryInfo;
|
|
456
461
|
this.setupHash = CiaoAdvertiser.computeSetupHash(accessoryInfo);
|
|
457
|
-
this.bus = systemBus();
|
|
462
|
+
this.bus = dbus_native_1.default.systemBus();
|
|
458
463
|
debug(`Preparing Advertiser for '${this.accessoryInfo.displayName}' using systemd-resolved backend!`);
|
|
459
464
|
}
|
|
460
465
|
createTxt() {
|
|
@@ -467,24 +472,24 @@ export class ResolvedAdvertiser extends EventEmitter {
|
|
|
467
472
|
}
|
|
468
473
|
async startAdvertising() {
|
|
469
474
|
if (this.port == null) {
|
|
470
|
-
throw new Error(
|
|
475
|
+
throw new Error("Tried starting systemd-resolved advertisement without initializing port!");
|
|
471
476
|
}
|
|
472
477
|
if (!this.bus) {
|
|
473
|
-
throw new Error(
|
|
478
|
+
throw new Error("Tried to start systemd-resolved advertisement on a destroyed advertiser!");
|
|
474
479
|
}
|
|
475
480
|
debug(`Starting to advertise '${this.accessoryInfo.displayName}' using systemd-resolved backend!`);
|
|
476
481
|
try {
|
|
477
|
-
this.path = await ResolvedAdvertiser.managerInvoke(this.bus,
|
|
482
|
+
this.path = await ResolvedAdvertiser.managerInvoke(this.bus, "RegisterService", {
|
|
478
483
|
body: [
|
|
479
484
|
this.accessoryInfo.displayName, // name
|
|
480
485
|
this.accessoryInfo.displayName, // name_template
|
|
481
|
-
|
|
486
|
+
"_hap._tcp", // type
|
|
482
487
|
this.port, // service_port
|
|
483
488
|
0, // service_priority
|
|
484
489
|
0, // service_weight
|
|
485
490
|
[this.createTxt()], // txt_datas
|
|
486
491
|
],
|
|
487
|
-
signature:
|
|
492
|
+
signature: "sssqqqaa{say}",
|
|
488
493
|
});
|
|
489
494
|
}
|
|
490
495
|
catch (error) {
|
|
@@ -498,76 +503,76 @@ export class ResolvedAdvertiser extends EventEmitter {
|
|
|
498
503
|
}
|
|
499
504
|
async updateAdvertisement(silent) {
|
|
500
505
|
if (!this.bus) {
|
|
501
|
-
throw new Error(
|
|
506
|
+
throw new Error("Tried to update systemd-resolved advertisement on a destroyed advertiser!");
|
|
502
507
|
}
|
|
503
|
-
debug(
|
|
508
|
+
debug("Updating txt record (txt: %o, silent: %d)", CiaoAdvertiser.createTxt(this.accessoryInfo, this.setupHash), silent);
|
|
504
509
|
// Currently, systemd-resolved has no way to update an existing record.
|
|
505
510
|
await this.stopAdvertising();
|
|
506
511
|
await this.startAdvertising();
|
|
507
512
|
}
|
|
508
513
|
async stopAdvertising() {
|
|
509
514
|
if (!this.bus) {
|
|
510
|
-
throw new Error(
|
|
515
|
+
throw new Error("Tried to destroy systemd-resolved advertisement on a destroyed advertiser!");
|
|
511
516
|
}
|
|
512
517
|
if (this.path) {
|
|
513
518
|
try {
|
|
514
|
-
await ResolvedAdvertiser.managerInvoke(this.bus,
|
|
519
|
+
await ResolvedAdvertiser.managerInvoke(this.bus, "UnregisterService", {
|
|
515
520
|
body: [this.path],
|
|
516
|
-
signature:
|
|
521
|
+
signature: "o",
|
|
517
522
|
});
|
|
518
523
|
}
|
|
519
524
|
catch (error) {
|
|
520
525
|
// Typically, this fails if e.g. systemd-resolved service was stopped in the meantime.
|
|
521
|
-
debug(
|
|
526
|
+
debug("Destroying systemd-resolved advertisement failed: " + error);
|
|
522
527
|
}
|
|
523
528
|
this.path = undefined;
|
|
524
529
|
}
|
|
525
530
|
}
|
|
526
531
|
async destroy() {
|
|
527
532
|
if (!this.bus) {
|
|
528
|
-
throw new Error(
|
|
533
|
+
throw new Error("Tried to destroy systemd-resolved advertisement on a destroyed advertiser!");
|
|
529
534
|
}
|
|
530
535
|
await this.stopAdvertising();
|
|
531
536
|
this.bus.connection.stream.destroy();
|
|
532
537
|
this.bus = undefined;
|
|
533
538
|
}
|
|
534
539
|
static async isAvailable() {
|
|
535
|
-
const bus = systemBus();
|
|
540
|
+
const bus = dbus_native_1.default.systemBus();
|
|
536
541
|
try {
|
|
537
542
|
try {
|
|
538
543
|
await messageBusConnectionResult(bus);
|
|
539
544
|
}
|
|
540
545
|
catch (error) {
|
|
541
|
-
debug(
|
|
546
|
+
debug("systemd-resolved/DBus classified unavailable due to missing dbus interface!");
|
|
542
547
|
return false;
|
|
543
548
|
}
|
|
544
549
|
try {
|
|
545
550
|
// Ensure that systemd-resolved is accessible.
|
|
546
|
-
await this.managerInvoke(bus,
|
|
547
|
-
body: [0,
|
|
548
|
-
signature:
|
|
551
|
+
await this.managerInvoke(bus, "ResolveHostname", {
|
|
552
|
+
body: [0, "127.0.0.1", 0, 0],
|
|
553
|
+
signature: "isit",
|
|
549
554
|
});
|
|
550
|
-
debug(
|
|
555
|
+
debug("Detected systemd-resolved over DBus interface running version.");
|
|
551
556
|
}
|
|
552
557
|
catch (error) {
|
|
553
|
-
debug(
|
|
558
|
+
debug("systemd-resolved/DBus classified unavailable due to missing systemd-resolved interface!");
|
|
554
559
|
return false;
|
|
555
560
|
}
|
|
556
561
|
try {
|
|
557
|
-
const mdnsStatus = await this.resolvedInvoke(bus,
|
|
558
|
-
body: [
|
|
559
|
-
signature:
|
|
562
|
+
const mdnsStatus = await this.resolvedInvoke(bus, "org.freedesktop.DBus.Properties", "Get", {
|
|
563
|
+
body: ["org.freedesktop.resolve1.Manager", "MulticastDNS"],
|
|
564
|
+
signature: "ss",
|
|
560
565
|
});
|
|
561
|
-
if (mdnsStatus[0][0].type !==
|
|
562
|
-
throw new Error(
|
|
566
|
+
if (mdnsStatus[0][0].type !== "s") {
|
|
567
|
+
throw new Error("Invalid type for MulticastDNS");
|
|
563
568
|
}
|
|
564
|
-
if (mdnsStatus[1][0] !==
|
|
565
|
-
debug(
|
|
569
|
+
if (mdnsStatus[1][0] !== "yes") {
|
|
570
|
+
debug("systemd-resolved/DBus classified unavailable because MulticastDNS is not enabled!");
|
|
566
571
|
return false;
|
|
567
572
|
}
|
|
568
573
|
}
|
|
569
574
|
catch (error) {
|
|
570
|
-
debug(
|
|
575
|
+
debug("systemd-resolved/DBus classified unavailable due to failure checking system status: " + error);
|
|
571
576
|
return false;
|
|
572
577
|
}
|
|
573
578
|
return true;
|
|
@@ -576,11 +581,14 @@ export class ResolvedAdvertiser extends EventEmitter {
|
|
|
576
581
|
bus.connection.stream.destroy();
|
|
577
582
|
}
|
|
578
583
|
}
|
|
584
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
579
585
|
static resolvedInvoke(bus, dbusInterface, member, others) {
|
|
580
|
-
return dbusInvoke(bus,
|
|
586
|
+
return dbusInvoke(bus, "org.freedesktop.resolve1", "/org/freedesktop/resolve1", dbusInterface, member, others);
|
|
581
587
|
}
|
|
588
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
582
589
|
static managerInvoke(bus, member, others) {
|
|
583
|
-
return this.resolvedInvoke(bus,
|
|
590
|
+
return this.resolvedInvoke(bus, "org.freedesktop.resolve1.Manager", member, others);
|
|
584
591
|
}
|
|
585
592
|
}
|
|
593
|
+
exports.ResolvedAdvertiser = ResolvedAdvertiser;
|
|
586
594
|
//# sourceMappingURL=Advertiser.js.map
|