hap-nodejs 0.12.3-beta.2 → 0.12.3-beta.21
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/README.md +1 -0
- package/dist/accessories/AirConditioner_accessory.js +24 -24
- package/dist/accessories/AirConditioner_accessory.js.map +1 -1
- package/dist/accessories/AppleTVRemote_accessory.js +23 -23
- package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
- package/dist/accessories/Camera_accessory.js +292 -373
- package/dist/accessories/Camera_accessory.js.map +1 -1
- package/dist/accessories/Fan_accessory.js +15 -21
- package/dist/accessories/Fan_accessory.js.map +1 -1
- package/dist/accessories/GarageDoorOpener_accessory.js +12 -12
- package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
- package/dist/accessories/Light-AdaptiveLighting_accessory.js +31 -21
- package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
- package/dist/accessories/Light_accessory.js +45 -48
- package/dist/accessories/Light_accessory.js.map +1 -1
- package/dist/accessories/Lock_accessory.js +11 -11
- package/dist/accessories/Lock_accessory.js.map +1 -1
- package/dist/accessories/MotionSensor_accessory.js +8 -8
- package/dist/accessories/MotionSensor_accessory.js.map +1 -1
- package/dist/accessories/Outlet_accessory.js +10 -10
- package/dist/accessories/Outlet_accessory.js.map +1 -1
- package/dist/accessories/SmartSpeaker_accessory.js +11 -11
- package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
- package/dist/accessories/Sprinkler_accessory.js +19 -19
- package/dist/accessories/Sprinkler_accessory.js.map +1 -1
- package/dist/accessories/TV_accessory.js +17 -17
- package/dist/accessories/TV_accessory.js.map +1 -1
- package/dist/accessories/TemperatureSensor_accessory.js +6 -6
- package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.js +3 -3
- package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.js +4 -4
- package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
- package/dist/accessories/gstreamer-audioProducer.js +36 -47
- package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
- package/dist/accessories/types.js +2 -2
- package/dist/accessories/types.js.map +1 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -28
- package/dist/index.js.map +1 -1
- package/dist/lib/Accessory.d.ts +1 -58
- package/dist/lib/Accessory.d.ts.map +1 -1
- package/dist/lib/Accessory.js +747 -1149
- package/dist/lib/Accessory.js.map +1 -1
- package/dist/lib/Advertiser.d.ts +1 -2
- package/dist/lib/Advertiser.d.ts.map +1 -1
- package/dist/lib/Advertiser.js +392 -524
- package/dist/lib/Advertiser.js.map +1 -1
- package/dist/lib/Bridge.js +6 -10
- package/dist/lib/Bridge.js.map +1 -1
- package/dist/lib/Characteristic.d.ts +2 -133
- package/dist/lib/Characteristic.d.ts.map +1 -1
- package/dist/lib/Characteristic.js +1467 -669
- package/dist/lib/Characteristic.js.map +1 -1
- package/dist/lib/HAPServer.d.ts +0 -10
- package/dist/lib/HAPServer.d.ts.map +1 -1
- package/dist/lib/HAPServer.js +216 -280
- package/dist/lib/HAPServer.js.map +1 -1
- package/dist/lib/Service.d.ts +1 -51
- package/dist/lib/Service.d.ts.map +1 -1
- package/dist/lib/Service.js +474 -322
- package/dist/lib/Service.js.map +1 -1
- package/dist/lib/camera/RTPProxy.js +112 -104
- package/dist/lib/camera/RTPProxy.js.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.d.ts +0 -65
- package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.js +255 -278
- package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
- package/dist/lib/camera/RecordingManagement.js +318 -381
- package/dist/lib/camera/RecordingManagement.js.map +1 -1
- package/dist/lib/camera/index.d.ts +0 -1
- package/dist/lib/camera/index.d.ts.map +1 -1
- package/dist/lib/camera/index.js +1 -2
- package/dist/lib/camera/index.js.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.d.ts +19 -3
- package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.js +217 -218
- package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
- package/dist/lib/controller/CameraController.d.ts +0 -4
- package/dist/lib/controller/CameraController.d.ts.map +1 -1
- package/dist/lib/controller/CameraController.js +189 -256
- package/dist/lib/controller/CameraController.js.map +1 -1
- package/dist/lib/controller/DoorbellController.js +38 -39
- package/dist/lib/controller/DoorbellController.js.map +1 -1
- package/dist/lib/controller/RemoteController.d.ts +0 -14
- package/dist/lib/controller/RemoteController.d.ts.map +1 -1
- package/dist/lib/controller/RemoteController.js +340 -415
- package/dist/lib/controller/RemoteController.js.map +1 -1
- package/dist/lib/controller/index.js +1 -1
- package/dist/lib/datastream/DataStreamManagement.js +56 -57
- package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
- package/dist/lib/datastream/DataStreamParser.js +259 -304
- package/dist/lib/datastream/DataStreamParser.js.map +1 -1
- package/dist/lib/datastream/DataStreamServer.d.ts +0 -5
- package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamServer.js +252 -269
- package/dist/lib/datastream/DataStreamServer.js.map +1 -1
- package/dist/lib/datastream/index.js +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.d.ts +1 -106
- package/dist/lib/definitions/CharacteristicDefinitions.d.ts.map +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.js +2000 -2995
- package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
- package/dist/lib/definitions/ServiceDefinitions.d.ts +0 -32
- package/dist/lib/definitions/ServiceDefinitions.d.ts.map +1 -1
- package/dist/lib/definitions/ServiceDefinitions.js +820 -1147
- package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
- package/dist/lib/definitions/generate-definitions.js +383 -679
- package/dist/lib/definitions/generate-definitions.js.map +1 -1
- package/dist/lib/definitions/generator-configuration.js +29 -29
- package/dist/lib/definitions/generator-configuration.js.map +1 -1
- package/dist/lib/definitions/index.js +1 -1
- package/dist/lib/model/AccessoryInfo.js +101 -136
- package/dist/lib/model/AccessoryInfo.js.map +1 -1
- package/dist/lib/model/ControllerStorage.js +86 -89
- package/dist/lib/model/ControllerStorage.js.map +1 -1
- package/dist/lib/model/HAPStorage.js +15 -16
- package/dist/lib/model/HAPStorage.js.map +1 -1
- package/dist/lib/model/IdentifierCache.js +49 -49
- package/dist/lib/model/IdentifierCache.js.map +1 -1
- package/dist/lib/tv/AccessControlManagement.js +40 -44
- package/dist/lib/tv/AccessControlManagement.js.map +1 -1
- package/dist/lib/util/checkName.d.ts +2 -1
- package/dist/lib/util/checkName.d.ts.map +1 -1
- package/dist/lib/util/checkName.js +7 -11
- package/dist/lib/util/checkName.js.map +1 -1
- package/dist/lib/util/clone.js +5 -27
- package/dist/lib/util/clone.js.map +1 -1
- package/dist/lib/util/color-utils.js +8 -12
- package/dist/lib/util/color-utils.js.map +1 -1
- package/dist/lib/util/eventedhttp.d.ts.map +1 -1
- package/dist/lib/util/eventedhttp.js +301 -409
- package/dist/lib/util/eventedhttp.js.map +1 -1
- package/dist/lib/util/hapCrypto.js +31 -32
- package/dist/lib/util/hapCrypto.js.map +1 -1
- package/dist/lib/util/hapStatusError.js +9 -12
- package/dist/lib/util/hapStatusError.js.map +1 -1
- package/dist/lib/util/net-utils.js +32 -53
- package/dist/lib/util/net-utils.js.map +1 -1
- package/dist/lib/util/once.js +3 -8
- package/dist/lib/util/once.js.map +1 -1
- package/dist/lib/util/promise-utils.js +8 -13
- package/dist/lib/util/promise-utils.js.map +1 -1
- package/dist/lib/util/request-util.js +2 -3
- package/dist/lib/util/request-util.js.map +1 -1
- package/dist/lib/util/time.js +5 -5
- package/dist/lib/util/time.js.map +1 -1
- package/dist/lib/util/tlv.d.ts +0 -27
- package/dist/lib/util/tlv.d.ts.map +1 -1
- package/dist/lib/util/tlv.js +71 -113
- package/dist/lib/util/tlv.js.map +1 -1
- package/dist/lib/util/uuid.d.ts +0 -9
- package/dist/lib/util/uuid.d.ts.map +1 -1
- package/dist/lib/util/uuid.js +15 -33
- package/dist/lib/util/uuid.js.map +1 -1
- package/dist/types.d.ts +0 -35
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +10 -10
- package/dist/BridgedCore.d.ts +0 -2
- package/dist/BridgedCore.d.ts.map +0 -1
- package/dist/BridgedCore.js +0 -43
- package/dist/BridgedCore.js.map +0 -1
- package/dist/Core.d.ts +0 -2
- package/dist/Core.d.ts.map +0 -1
- package/dist/Core.js +0 -52
- package/dist/Core.js.map +0 -1
- package/dist/lib/AccessoryLoader.d.ts +0 -28
- package/dist/lib/AccessoryLoader.d.ts.map +0 -1
- package/dist/lib/AccessoryLoader.js +0 -166
- package/dist/lib/AccessoryLoader.js.map +0 -1
- package/dist/lib/camera/Camera.d.ts +0 -43
- package/dist/lib/camera/Camera.d.ts.map +0 -1
- package/dist/lib/camera/Camera.js +0 -36
- package/dist/lib/camera/Camera.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AccessoryInfo = exports.PermissionTypes = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
6
|
+
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
7
|
+
const tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
|
|
8
|
+
const util_1 = tslib_1.__importDefault(require("util"));
|
|
9
|
+
const eventedhttp_1 = require("../util/eventedhttp");
|
|
10
|
+
const HAPStorage_1 = require("./HAPStorage");
|
|
11
11
|
function getVersion() {
|
|
12
12
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
-
|
|
13
|
+
const packageJson = require("../../../package.json");
|
|
14
14
|
return packageJson.version;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
@@ -27,15 +27,22 @@ var PermissionTypes;
|
|
|
27
27
|
* such as encryption keys and username. It is persisted to disk.
|
|
28
28
|
* @group Model
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
class AccessoryInfo {
|
|
31
|
+
static deviceIdPattern = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
|
|
32
|
+
username;
|
|
33
|
+
displayName;
|
|
34
|
+
model; // this property is currently not saved to disk
|
|
35
|
+
category;
|
|
36
|
+
pincode;
|
|
37
|
+
signSk;
|
|
38
|
+
signPk;
|
|
39
|
+
pairedClients;
|
|
40
|
+
pairedAdminClients;
|
|
41
|
+
configVersion = 1;
|
|
42
|
+
configHash;
|
|
43
|
+
setupID;
|
|
44
|
+
lastFirmwareVersion = "";
|
|
45
|
+
constructor(username) {
|
|
39
46
|
this.username = username;
|
|
40
47
|
this.displayName = "";
|
|
41
48
|
this.model = "";
|
|
@@ -54,7 +61,7 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
54
61
|
* @param {Buffer} publicKey
|
|
55
62
|
* @param {PermissionTypes} permission
|
|
56
63
|
*/
|
|
57
|
-
|
|
64
|
+
addPairedClient(username, publicKey, permission) {
|
|
58
65
|
this.pairedClients[username] = {
|
|
59
66
|
username: username,
|
|
60
67
|
publicKey: publicKey,
|
|
@@ -63,11 +70,11 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
63
70
|
if (permission === 1 /* PermissionTypes.ADMIN */) {
|
|
64
71
|
this.pairedAdminClients++;
|
|
65
72
|
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
}
|
|
74
|
+
updatePermission(username, permission) {
|
|
75
|
+
const pairingInformation = this.pairedClients[username];
|
|
69
76
|
if (pairingInformation) {
|
|
70
|
-
|
|
77
|
+
const oldPermission = pairingInformation.permission;
|
|
71
78
|
pairingInformation.permission = permission;
|
|
72
79
|
if (oldPermission === 1 /* PermissionTypes.ADMIN */ && permission !== 1 /* PermissionTypes.ADMIN */) {
|
|
73
80
|
this.pairedAdminClients--;
|
|
@@ -76,79 +83,61 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
76
83
|
this.pairedAdminClients++;
|
|
77
84
|
}
|
|
78
85
|
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
for (var _b = tslib_1.__values(Object.values(this.pairedClients)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
85
|
-
var pairingInformation = _c.value;
|
|
86
|
-
array.push(pairingInformation);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
90
|
-
finally {
|
|
91
|
-
try {
|
|
92
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
93
|
-
}
|
|
94
|
-
finally { if (e_1) throw e_1.error; }
|
|
86
|
+
}
|
|
87
|
+
listPairings() {
|
|
88
|
+
const array = [];
|
|
89
|
+
for (const pairingInformation of Object.values(this.pairedClients)) {
|
|
90
|
+
array.push(pairingInformation);
|
|
95
91
|
}
|
|
96
92
|
return array;
|
|
97
|
-
}
|
|
93
|
+
}
|
|
98
94
|
/**
|
|
99
95
|
* Remove a paired client from memory.
|
|
100
96
|
* @param connection - the session of the connection initiated the removal of the pairing
|
|
101
97
|
* @param {string} username
|
|
102
98
|
*/
|
|
103
|
-
|
|
104
|
-
var e_2, _a;
|
|
99
|
+
removePairedClient(connection, username) {
|
|
105
100
|
this._removePairedClient0(connection, username);
|
|
106
101
|
if (this.pairedAdminClients === 0) { // if we don't have any admin clients left paired it is required to kill all normal clients
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
var username0 = _c.value;
|
|
110
|
-
this._removePairedClient0(connection, username0);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
114
|
-
finally {
|
|
115
|
-
try {
|
|
116
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
117
|
-
}
|
|
118
|
-
finally { if (e_2) throw e_2.error; }
|
|
102
|
+
for (const username0 of Object.keys(this.pairedClients)) {
|
|
103
|
+
this._removePairedClient0(connection, username0);
|
|
119
104
|
}
|
|
120
105
|
}
|
|
121
|
-
}
|
|
122
|
-
|
|
106
|
+
}
|
|
107
|
+
_removePairedClient0(connection, username) {
|
|
123
108
|
if (this.pairedClients[username] && this.pairedClients[username].permission === 1 /* PermissionTypes.ADMIN */) {
|
|
124
109
|
this.pairedAdminClients--;
|
|
125
110
|
}
|
|
126
111
|
delete this.pairedClients[username];
|
|
127
112
|
eventedhttp_1.EventedHTTPServer.destroyExistingConnectionsAfterUnpair(connection, username);
|
|
128
|
-
}
|
|
113
|
+
}
|
|
129
114
|
/**
|
|
130
115
|
* Check if username is paired
|
|
131
116
|
* @param username
|
|
132
117
|
*/
|
|
133
|
-
|
|
118
|
+
isPaired(username) {
|
|
134
119
|
return !!this.pairedClients[username];
|
|
135
|
-
}
|
|
136
|
-
|
|
120
|
+
}
|
|
121
|
+
hasAdminPermissions(username) {
|
|
137
122
|
if (!username) {
|
|
138
123
|
return false;
|
|
139
124
|
}
|
|
140
|
-
|
|
125
|
+
const pairingInformation = this.pairedClients[username];
|
|
141
126
|
return !!pairingInformation && pairingInformation.permission === 1 /* PermissionTypes.ADMIN */;
|
|
142
|
-
}
|
|
127
|
+
}
|
|
143
128
|
// Gets the public key for a paired client as a Buffer, or falsy value if not paired.
|
|
144
|
-
|
|
145
|
-
|
|
129
|
+
getClientPublicKey(username) {
|
|
130
|
+
const pairingInformation = this.pairedClients[username];
|
|
146
131
|
if (pairingInformation) {
|
|
147
132
|
return pairingInformation.publicKey;
|
|
148
133
|
}
|
|
149
134
|
else {
|
|
150
135
|
return undefined;
|
|
151
136
|
}
|
|
137
|
+
}
|
|
138
|
+
// Returns a boolean indicating whether this accessory has been paired with a client.
|
|
139
|
+
paired = () => {
|
|
140
|
+
return Object.keys(this.pairedClients).length > 0; // if we have any paired clients, we're paired.
|
|
152
141
|
};
|
|
153
142
|
/**
|
|
154
143
|
* Checks based on the current accessory configuration if the current configuration number needs to be incremented.
|
|
@@ -158,11 +147,11 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
158
147
|
* @param checkFirmwareIncrement
|
|
159
148
|
* @returns True if the current configuration number was incremented and thus a new TXT must be advertised.
|
|
160
149
|
*/
|
|
161
|
-
|
|
162
|
-
|
|
150
|
+
checkForCurrentConfigurationNumberIncrement(configuration, checkFirmwareIncrement) {
|
|
151
|
+
const shasum = crypto_1.default.createHash("sha1");
|
|
163
152
|
shasum.update(JSON.stringify(configuration));
|
|
164
|
-
|
|
165
|
-
|
|
153
|
+
const configHash = shasum.digest("hex");
|
|
154
|
+
let changed = false;
|
|
166
155
|
if (configHash !== this.configHash) {
|
|
167
156
|
this.configVersion++;
|
|
168
157
|
this.configHash = configHash;
|
|
@@ -170,7 +159,7 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
170
159
|
changed = true;
|
|
171
160
|
}
|
|
172
161
|
if (checkFirmwareIncrement) {
|
|
173
|
-
|
|
162
|
+
const version = getVersion();
|
|
174
163
|
if (this.lastFirmwareVersion !== version) {
|
|
175
164
|
// we only check if it is different and not only if it is incremented
|
|
176
165
|
// HomeKit spec prohibits firmware downgrades, but with hap-nodejs it's possible lol
|
|
@@ -182,20 +171,19 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
182
171
|
this.save();
|
|
183
172
|
}
|
|
184
173
|
return changed;
|
|
185
|
-
}
|
|
186
|
-
|
|
174
|
+
}
|
|
175
|
+
getConfigVersion() {
|
|
187
176
|
return this.configVersion;
|
|
188
|
-
}
|
|
189
|
-
|
|
177
|
+
}
|
|
178
|
+
ensureConfigVersionBounds() {
|
|
190
179
|
// current configuration number must be in the range of 1-65535 and wrap to 1 when it overflows
|
|
191
180
|
this.configVersion = this.configVersion % (0xFFFF + 1);
|
|
192
181
|
if (this.configVersion === 0) {
|
|
193
182
|
this.configVersion = 1;
|
|
194
183
|
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
var saved = {
|
|
184
|
+
}
|
|
185
|
+
save() {
|
|
186
|
+
const saved = {
|
|
199
187
|
displayName: this.displayName,
|
|
200
188
|
category: this.category,
|
|
201
189
|
pincode: this.pincode,
|
|
@@ -211,76 +199,55 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
211
199
|
setupID: this.setupID,
|
|
212
200
|
lastFirmwareVersion: this.lastFirmwareVersion,
|
|
213
201
|
};
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
// @ts-expect-error: missing typing, object instead of Record
|
|
220
|
-
saved.pairedClientsPermission[username] = pairingInformation.permission;
|
|
221
|
-
}
|
|
202
|
+
for (const [username, pairingInformation] of Object.entries(this.pairedClients)) {
|
|
203
|
+
// @ts-expect-error: missing typing, object instead of Record
|
|
204
|
+
saved.pairedClients[username] = pairingInformation.publicKey.toString("hex");
|
|
205
|
+
// @ts-expect-error: missing typing, object instead of Record
|
|
206
|
+
saved.pairedClientsPermission[username] = pairingInformation.permission;
|
|
222
207
|
}
|
|
223
|
-
|
|
224
|
-
finally {
|
|
225
|
-
try {
|
|
226
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
227
|
-
}
|
|
228
|
-
finally { if (e_3) throw e_3.error; }
|
|
229
|
-
}
|
|
230
|
-
var key = AccessoryInfo.persistKey(this.username);
|
|
208
|
+
const key = AccessoryInfo.persistKey(this.username);
|
|
231
209
|
HAPStorage_1.HAPStorage.storage().setItemSync(key, saved);
|
|
232
|
-
}
|
|
210
|
+
}
|
|
233
211
|
// Gets a key for storing this AccessoryInfo in the filesystem, like "AccessoryInfo.CC223DE3CEF3.json"
|
|
234
|
-
|
|
212
|
+
static persistKey(username) {
|
|
235
213
|
return util_1.default.format("AccessoryInfo.%s.json", username.replace(/:/g, "").toUpperCase());
|
|
236
|
-
}
|
|
237
|
-
|
|
214
|
+
}
|
|
215
|
+
static create(username) {
|
|
238
216
|
AccessoryInfo.assertValidUsername(username);
|
|
239
|
-
|
|
217
|
+
const accessoryInfo = new AccessoryInfo(username);
|
|
240
218
|
accessoryInfo.lastFirmwareVersion = getVersion();
|
|
241
219
|
// Create a new unique key pair for this accessory.
|
|
242
|
-
|
|
220
|
+
const keyPair = tweetnacl_1.default.sign.keyPair();
|
|
243
221
|
accessoryInfo.signSk = Buffer.from(keyPair.secretKey);
|
|
244
222
|
accessoryInfo.signPk = Buffer.from(keyPair.publicKey);
|
|
245
223
|
return accessoryInfo;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
var e_4, _a;
|
|
224
|
+
}
|
|
225
|
+
static load(username) {
|
|
249
226
|
AccessoryInfo.assertValidUsername(username);
|
|
250
|
-
|
|
251
|
-
|
|
227
|
+
const key = AccessoryInfo.persistKey(username);
|
|
228
|
+
const saved = HAPStorage_1.HAPStorage.storage().getItem(key);
|
|
252
229
|
if (saved) {
|
|
253
|
-
|
|
230
|
+
const info = new AccessoryInfo(username);
|
|
254
231
|
info.displayName = saved.displayName || "";
|
|
255
232
|
info.category = saved.category || "";
|
|
256
233
|
info.pincode = saved.pincode || "";
|
|
257
234
|
info.signSk = Buffer.from(saved.signSk || "", "hex");
|
|
258
235
|
info.signPk = Buffer.from(saved.signPk || "", "hex");
|
|
259
236
|
info.pairedClients = {};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if (permission === 1 /* PermissionTypes.ADMIN */) {
|
|
274
|
-
info.pairedAdminClients++;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
279
|
-
finally {
|
|
280
|
-
try {
|
|
281
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
237
|
+
for (const username of Object.keys(saved.pairedClients || {})) {
|
|
238
|
+
const publicKey = saved.pairedClients[username];
|
|
239
|
+
let permission = saved.pairedClientsPermission ? saved.pairedClientsPermission[username] : undefined;
|
|
240
|
+
if (permission === undefined) {
|
|
241
|
+
permission = 1 /* PermissionTypes.ADMIN */;
|
|
242
|
+
} // defaulting to admin permissions is the only suitable solution, there is no way to recover permissions
|
|
243
|
+
info.pairedClients[username] = {
|
|
244
|
+
username: username,
|
|
245
|
+
publicKey: Buffer.from(publicKey, "hex"),
|
|
246
|
+
permission: permission,
|
|
247
|
+
};
|
|
248
|
+
if (permission === 1 /* PermissionTypes.ADMIN */) {
|
|
249
|
+
info.pairedAdminClients++;
|
|
282
250
|
}
|
|
283
|
-
finally { if (e_4) throw e_4.error; }
|
|
284
251
|
}
|
|
285
252
|
info.configVersion = saved.configVersion || 1;
|
|
286
253
|
info.configHash = saved.configHash || "";
|
|
@@ -292,20 +259,18 @@ var AccessoryInfo = /** @class */ (function () {
|
|
|
292
259
|
else {
|
|
293
260
|
return null;
|
|
294
261
|
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
|
|
262
|
+
}
|
|
263
|
+
static remove(username) {
|
|
264
|
+
const key = AccessoryInfo.persistKey(username);
|
|
298
265
|
HAPStorage_1.HAPStorage.storage().removeItemSync(key);
|
|
299
|
-
}
|
|
300
|
-
|
|
266
|
+
}
|
|
267
|
+
static assertValidUsername(username) {
|
|
301
268
|
assert_1.default.ok(AccessoryInfo.deviceIdPattern.test(username), "The supplied username (" + username + ") is not valid " +
|
|
302
269
|
"(expected a format like 'XX:XX:XX:XX:XX:XX' with XX being a valid hexadecimal string). " +
|
|
303
270
|
"Note that, if you had this accessory already paired with the invalid username, you will need to repair " +
|
|
304
271
|
"the accessory and reconfigure your services in the Home app. " +
|
|
305
272
|
"Using an invalid username will lead to unexpected behaviour.");
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return AccessoryInfo;
|
|
309
|
-
}());
|
|
273
|
+
}
|
|
274
|
+
}
|
|
310
275
|
exports.AccessoryInfo = AccessoryInfo;
|
|
311
276
|
//# sourceMappingURL=AccessoryInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessoryInfo.js","sourceRoot":"","sources":["../../../src/lib/model/AccessoryInfo.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"AccessoryInfo.js","sourceRoot":"","sources":["../../../src/lib/model/AccessoryInfo.ts"],"names":[],"mappings":"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"}
|