@homebridge/hap-client 4.0.5-beta.1 → 4.0.5-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/dependabot.yml +44 -44
- package/.github/workflows/codeql-analysis.yml +3 -3
- package/.vscode/settings.json +1 -1
- package/CHANGELOG.md +2 -0
- package/README.md +5 -4
- package/dist/eventedHttpClient/httpParser.d.ts +1 -0
- package/dist/eventedHttpClient/httpParser.js +29 -28
- package/dist/eventedHttpClient/httpParser.js.map +1 -1
- package/dist/eventedHttpClient/index.js +7 -6
- package/dist/eventedHttpClient/index.js.map +1 -1
- package/dist/interfaces.d.ts +2 -1
- package/dist/monitor.d.ts +2 -1
- package/dist/monitor.js +12 -7
- package/dist/monitor.js.map +1 -1
- package/package.json +28 -28
package/.github/dependabot.yml
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
version: 2
|
|
2
2
|
updates:
|
|
3
|
-
- package-ecosystem: npm
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
- package-ecosystem: npm
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: daily
|
|
7
|
+
time: '10:00'
|
|
8
|
+
open-pull-requests-limit: 10
|
|
9
|
+
assignees:
|
|
10
|
+
- NorthernMan54
|
|
11
|
+
labels:
|
|
12
|
+
- dependencies
|
|
13
|
+
# Group related updates together (optional)
|
|
14
|
+
groups:
|
|
15
|
+
packages:
|
|
16
|
+
patterns:
|
|
17
|
+
- '*'
|
|
18
|
+
# Automatically rebase PRs when conflicts occur
|
|
19
|
+
rebase-strategy: auto
|
|
20
|
+
# Commit message prefix
|
|
21
|
+
commit-message:
|
|
22
|
+
prefix: chore
|
|
23
|
+
prefix-development: chore
|
|
24
|
+
include: scope
|
|
25
25
|
|
|
26
|
-
- package-ecosystem:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
- package-ecosystem: github-actions
|
|
27
|
+
directory: /
|
|
28
|
+
schedule:
|
|
29
|
+
interval: daily
|
|
30
|
+
time: '09:00'
|
|
31
|
+
# Create PRs for out-of-date actions
|
|
32
|
+
open-pull-requests-limit: 10
|
|
33
|
+
# Add labels to PRs
|
|
34
|
+
labels:
|
|
35
|
+
- dependencies
|
|
36
|
+
# Group related updates together (optional)
|
|
37
|
+
groups:
|
|
38
|
+
actions:
|
|
39
|
+
patterns:
|
|
40
|
+
- '*'
|
|
41
|
+
# Automatically rebase PRs when conflicts occur
|
|
42
|
+
rebase-strategy: auto
|
|
43
|
+
# Commit message prefix
|
|
44
|
+
commit-message:
|
|
45
|
+
prefix: chore
|
|
46
|
+
prefix-development: chore
|
|
47
|
+
include: scope
|
package/.vscode/settings.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -25,6 +25,8 @@ All notable changes to `@homebridge/hap-client` will be documented in this file.
|
|
|
25
25
|
- fix: parse multiple HTTP messages per TCP chunk in monitor
|
|
26
26
|
- chore: add and format eslint rules for test files
|
|
27
27
|
- chore: remove unused `tslint.json` file
|
|
28
|
+
- fix: harden httpParser request-line regex against ReDoS
|
|
29
|
+
- chore: lint whole repo via `"eslint ."` and apply autofix formatting
|
|
28
30
|
- chore: dependency updates
|
|
29
31
|
|
|
30
32
|
### Homebridge Dependencies
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://homebridge.io"><img src="https://raw.githubusercontent.com/homebridge/branding/latest/logos/homebridge-color-round-stylized.png" height="140"></a>
|
|
2
|
+
<a href="https://homebridge.io"><img src="https://raw.githubusercontent.com/homebridge/branding/latest/logos/homebridge-color-round-stylized.png" alt="Homebridge Logo" height="140"></a>
|
|
3
3
|
</p>
|
|
4
4
|
<span align="center">
|
|
5
5
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
A client for an insecure HAP-NodeJS instance. Provides a Typescript based interface based on the homekit accessory protocol, allowing the creation of clients able to connect to and control Homebridge devices.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
## API
|
|
17
17
|
|
|
18
18
|
```
|
|
19
19
|
const { HapClient } = require('@homebridge/hap-client');
|
|
@@ -28,6 +28,7 @@ this.monitor = await this.hapClient.monitorCharacteristics(services?: ServiceTyp
|
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
The discovery timeout can be configured by setting the `discoveryTimeout` property in the `config` object.
|
|
31
|
+
|
|
31
32
|
```
|
|
32
33
|
const { HapClient } = require('@homebridge/hap-client');
|
|
33
34
|
|
|
@@ -42,6 +43,7 @@ this.hapClient = new HapClient({
|
|
|
42
43
|
|
|
43
44
|
It's possible to control the discovery process manually, by settings the `autoStartDiscovery` property to `false` and then calling `this.hapClient.startDiscovery(discoveryTimeout?: number)` when ready. If no timeout is provided to the function, the `discoveryTimeout` property will be used from the `config` object, and if that is not provided either, the default discovery timeout (60 seconds) will be used.
|
|
44
45
|
It's also possible to stop the discovery process manually by calling `stopDiscovery()`
|
|
46
|
+
|
|
45
47
|
```
|
|
46
48
|
const { HapClient } = require('@homebridge/hap-client');
|
|
47
49
|
|
|
@@ -79,8 +81,7 @@ this.monitor.on('monitor-error', this.monitorError(instance, error)); // Emitted
|
|
|
79
81
|
this.monitor.on('monitor-refresh', this.monitorRefresh(instance, error)); // Emitted when the connection to a homebridge instance has been refreshed or restarted
|
|
80
82
|
```
|
|
81
83
|
|
|
82
|
-
|
|
83
|
-
# Dependant Applications
|
|
84
|
+
## Dependant Applications
|
|
84
85
|
|
|
85
86
|
- homebridge-config-ui-x
|
|
86
87
|
- homebridge-gsh
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
function httpMessageParser(message) {
|
|
2
3
|
const result = {
|
|
3
4
|
protocol: null,
|
|
@@ -25,9 +26,9 @@ function httpMessageParser(message) {
|
|
|
25
26
|
else {
|
|
26
27
|
return result;
|
|
27
28
|
}
|
|
28
|
-
messageString = messageString.replace(/\r\n/
|
|
29
|
+
messageString = messageString.replace(/\r\n/g, '\n');
|
|
29
30
|
(function () {
|
|
30
|
-
const firstNonWhitespaceRegex = /[\w-]+/
|
|
31
|
+
const firstNonWhitespaceRegex = /[\w-]+/g;
|
|
31
32
|
const firstNonWhitespaceIndex = messageString.search(firstNonWhitespaceRegex);
|
|
32
33
|
if (firstNonWhitespaceIndex > 0) {
|
|
33
34
|
message = message.slice(firstNonWhitespaceIndex, message.length);
|
|
@@ -39,8 +40,8 @@ function httpMessageParser(message) {
|
|
|
39
40
|
const requestLineMatch = possibleRequestLine.match(httpMessageParser._requestLineRegex);
|
|
40
41
|
if (Array.isArray(requestLineMatch) && requestLineMatch.length > 1) {
|
|
41
42
|
result.protocol = requestLineMatch[1];
|
|
42
|
-
result.httpVersion = parseFloat(requestLineMatch[2]);
|
|
43
|
-
result.statusCode = parseInt(requestLineMatch[3], 10);
|
|
43
|
+
result.httpVersion = Number.parseFloat(requestLineMatch[2]);
|
|
44
|
+
result.statusCode = Number.parseInt(requestLineMatch[3], 10);
|
|
44
45
|
result.statusMessage = requestLineMatch[4];
|
|
45
46
|
}
|
|
46
47
|
else {
|
|
@@ -48,7 +49,7 @@ function httpMessageParser(message) {
|
|
|
48
49
|
if (Array.isArray(responseLineMath) && responseLineMath.length > 1) {
|
|
49
50
|
result.method = responseLineMath[1];
|
|
50
51
|
result.url = responseLineMath[2];
|
|
51
|
-
result.httpVersion = parseFloat(responseLineMath[3]);
|
|
52
|
+
result.httpVersion = Number.parseFloat(responseLineMath[3]);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
})();
|
|
@@ -72,7 +73,7 @@ function httpMessageParser(message) {
|
|
|
72
73
|
if (!result.boundary) {
|
|
73
74
|
const boundaryMatch = messageString.match(httpMessageParser._boundaryRegex);
|
|
74
75
|
if (Array.isArray(boundaryMatch) && boundaryMatch.length) {
|
|
75
|
-
fullBoundary = boundaryMatch[0].replace(/[\r\n]+/
|
|
76
|
+
fullBoundary = boundaryMatch[0].replace(/[\r\n]+/g, '');
|
|
76
77
|
result.boundary = fullBoundary.replace(/^--/, '');
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -89,8 +90,8 @@ function httpMessageParser(message) {
|
|
|
89
90
|
const body = messageString.slice(start, end);
|
|
90
91
|
result.additional = messageString.slice(end);
|
|
91
92
|
if (body && body.length) {
|
|
92
|
-
if ((result.headers && result.headers['Content-Type'] === 'application/hap+json')
|
|
93
|
-
(result.headers && result.headers['Content-Type'] === 'application/json')) {
|
|
93
|
+
if ((result.headers && result.headers['Content-Type'] === 'application/hap+json')
|
|
94
|
+
|| (result.headers && result.headers['Content-Type'] === 'application/json')) {
|
|
94
95
|
try {
|
|
95
96
|
if (result.headers['Content-Length']) {
|
|
96
97
|
result.body = body;
|
|
@@ -113,9 +114,9 @@ function httpMessageParser(message) {
|
|
|
113
114
|
const multipartStart = messageString.indexOf(fullBoundary) + fullBoundary.length;
|
|
114
115
|
const multipartEnd = messageString.lastIndexOf(fullBoundary);
|
|
115
116
|
const multipartBody = messageString.substring(multipartStart, multipartEnd);
|
|
116
|
-
const splitRegex = new RegExp(
|
|
117
|
+
const splitRegex = new RegExp(`^${fullBoundary}.*[\n\r]?$`, 'gm');
|
|
117
118
|
const parts = multipartBody.split(splitRegex);
|
|
118
|
-
result.multipart = parts.filter(httpMessageParser._isTruthy).map(
|
|
119
|
+
result.multipart = parts.filter(httpMessageParser._isTruthy).map((part, i) => {
|
|
119
120
|
const result = {
|
|
120
121
|
headers: null,
|
|
121
122
|
body: null,
|
|
@@ -128,7 +129,7 @@ function httpMessageParser(message) {
|
|
|
128
129
|
},
|
|
129
130
|
},
|
|
130
131
|
};
|
|
131
|
-
const newlineRegex = /\n\n|\r\n\r\n/
|
|
132
|
+
const newlineRegex = /\n\n|\r\n\r\n/g;
|
|
132
133
|
let newlineIndex = 0;
|
|
133
134
|
let newlineMatch = newlineRegex.exec(part);
|
|
134
135
|
let body;
|
|
@@ -157,9 +158,9 @@ function httpMessageParser(message) {
|
|
|
157
158
|
}
|
|
158
159
|
}
|
|
159
160
|
const boundaryNewlineIndexes = [];
|
|
160
|
-
boundaryIndexes.slice(0, boundaryIndexes.length - 1).forEach(
|
|
161
|
+
boundaryIndexes.slice(0, boundaryIndexes.length - 1).forEach((m, k) => {
|
|
161
162
|
const partBody = message.slice(boundaryIndexes[k], boundaryIndexes[k + 1]).toString();
|
|
162
|
-
let headerNewlineIndex = partBody.search(/\n\n|\r\n\r\n/
|
|
163
|
+
let headerNewlineIndex = partBody.search(/\n\n|\r\n\r\n/g) + 2;
|
|
163
164
|
headerNewlineIndex = boundaryIndexes[k] + headerNewlineIndex;
|
|
164
165
|
boundaryNewlineIndexes.push(headerNewlineIndex);
|
|
165
166
|
});
|
|
@@ -187,34 +188,34 @@ httpMessageParser._isTruthy = function _isTruthy(v) {
|
|
|
187
188
|
return !!v;
|
|
188
189
|
};
|
|
189
190
|
httpMessageParser._isNumeric = function _isNumeric(v) {
|
|
190
|
-
if (typeof v === 'number' && !isNaN(v)) {
|
|
191
|
+
if (typeof v === 'number' && !Number.isNaN(v)) {
|
|
191
192
|
return true;
|
|
192
193
|
}
|
|
193
194
|
v = (v || '').toString().trim();
|
|
194
195
|
if (!v) {
|
|
195
196
|
return false;
|
|
196
197
|
}
|
|
197
|
-
return !isNaN(v);
|
|
198
|
+
return !Number.isNaN(v);
|
|
198
199
|
};
|
|
199
200
|
httpMessageParser._isBuffer = function (item) {
|
|
200
|
-
return ((httpMessageParser._isNodeBufferSupported()
|
|
201
|
-
typeof
|
|
202
|
-
|
|
203
|
-
(item instanceof Object
|
|
204
|
-
item._isBuffer));
|
|
201
|
+
return ((httpMessageParser._isNodeBufferSupported()
|
|
202
|
+
&& typeof globalThis === 'object'
|
|
203
|
+
&& Buffer.isBuffer(item))
|
|
204
|
+
|| (item instanceof Object
|
|
205
|
+
&& item._isBuffer));
|
|
205
206
|
};
|
|
206
207
|
httpMessageParser._isNodeBufferSupported = function () {
|
|
207
|
-
return (typeof
|
|
208
|
-
typeof
|
|
209
|
-
typeof
|
|
208
|
+
return (typeof globalThis === 'object'
|
|
209
|
+
&& typeof Buffer === 'function'
|
|
210
|
+
&& typeof Buffer.isBuffer === 'function');
|
|
210
211
|
};
|
|
211
212
|
httpMessageParser._parseHeaders = function _parseHeaders(body) {
|
|
212
213
|
const headers = {};
|
|
213
214
|
if (typeof body !== 'string') {
|
|
214
215
|
return headers;
|
|
215
216
|
}
|
|
216
|
-
body.split(/[\r\n]/).forEach(
|
|
217
|
-
const match = string.match(/([\w-]+):\s*(.*)/
|
|
217
|
+
body.split(/[\r\n]/).forEach((string) => {
|
|
218
|
+
const match = string.match(/([\w-]+):\s*(.*)/);
|
|
218
219
|
if (Array.isArray(match) && match.length === 3) {
|
|
219
220
|
const key = match[1];
|
|
220
221
|
const value = match[2];
|
|
@@ -223,9 +224,9 @@ httpMessageParser._parseHeaders = function _parseHeaders(body) {
|
|
|
223
224
|
});
|
|
224
225
|
return headers;
|
|
225
226
|
};
|
|
226
|
-
httpMessageParser._requestLineRegex = /(HTTP|EVENT)\/(1\.0|1\.1|2\.0)\s+(\d+)\s+([\w\s-
|
|
227
|
-
httpMessageParser._responseLineRegex = /(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|TRACE|CONNECT)\s+(
|
|
228
|
-
httpMessageParser._headerNewlineRegex = /^[\r\n]+/
|
|
227
|
+
httpMessageParser._requestLineRegex = /(HTTP|EVENT)\/(1\.0|1\.1|2\.0)\s+(\d+)\s+([\w\s-]+)/i;
|
|
228
|
+
httpMessageParser._responseLineRegex = /(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|TRACE|CONNECT)\s+(\S+)\s+HTTP\/(1\.0|1\.1|2\.0)/i;
|
|
229
|
+
httpMessageParser._headerNewlineRegex = /^[\r\n]+/gm;
|
|
229
230
|
httpMessageParser._boundaryRegex = /(\n|\r\n)+--[\w-]+(\n|\r\n)+/g;
|
|
230
231
|
httpMessageParser._createBuffer = function (data) {
|
|
231
232
|
return Buffer.from(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpParser.js","sourceRoot":"","sources":["../../src/eventedHttpClient/httpParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"httpParser.js","sourceRoot":"","sources":["../../src/eventedHttpClient/httpParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
import { createConnection as netCreateConnection } from 'node:net';
|
|
2
3
|
import httpMessageParser from './httpParser.js';
|
|
3
4
|
export const parseMessage = httpMessageParser;
|
|
@@ -8,7 +9,7 @@ export function createConnection(instance, pin, body) {
|
|
|
8
9
|
});
|
|
9
10
|
client.write(_buildMessage({
|
|
10
11
|
method: 'PUT',
|
|
11
|
-
url:
|
|
12
|
+
url: `http://${instance.ipAddress}:${instance.port}/characteristics`,
|
|
12
13
|
maxAttempts: 1,
|
|
13
14
|
headers: {
|
|
14
15
|
'Content-Type': 'Application/json',
|
|
@@ -22,24 +23,24 @@ export function createConnection(instance, pin, body) {
|
|
|
22
23
|
function _headersToString(headers) {
|
|
23
24
|
let response = '';
|
|
24
25
|
for (const header of Object.keys(headers)) {
|
|
25
|
-
response = response + header
|
|
26
|
+
response = `${response + header}: ${headers[header]}\r\n`;
|
|
26
27
|
}
|
|
27
28
|
return (response);
|
|
28
29
|
}
|
|
29
30
|
function _buildMessage(request) {
|
|
30
31
|
const context = new URL(request.url);
|
|
31
32
|
let message;
|
|
32
|
-
message = request.method
|
|
33
|
+
message = `${request.method} ${context.pathname}`;
|
|
33
34
|
if (context.search) {
|
|
34
35
|
message = message + context.search;
|
|
35
36
|
}
|
|
36
|
-
message = message
|
|
37
|
+
message = `${message} HTTP/1.1\r\nHost: ${context.host}\r\n${_headersToString(request.headers)}`;
|
|
37
38
|
if (request.body) {
|
|
38
39
|
const contentLength = Buffer.byteLength(request.body, 'utf8');
|
|
39
|
-
message = message
|
|
40
|
+
message = `${message}Content-Length: ${contentLength}\r\n\r\n${request.body}\r\n\r\n`;
|
|
40
41
|
}
|
|
41
42
|
else {
|
|
42
|
-
message = message
|
|
43
|
+
message = `${message}\r\n\r\n`;
|
|
43
44
|
}
|
|
44
45
|
return (message);
|
|
45
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eventedHttpClient/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eventedHttpClient/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAElE,OAAO,iBAAiB,MAAM,iBAAiB,CAAA;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAE7C,MAAM,UAAU,gBAAgB,CAAC,QAAQ,EAAE,GAAW,EAAE,IAAI;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC;QACjC,IAAI,EAAE,QAAQ,CAAC,SAAS;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC,CAAA;IAEF,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;QACzB,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,UAAU,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,kBAAkB;QACpE,WAAW,EAAE,CAAC;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,GAAG;YACpB,YAAY,EAAE,YAAY;SAC3B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,CAAA;IAEH,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAO;IAC/B,IAAI,QAAQ,GAAG,EAAE,CAAA;IAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,QAAQ,GAAG,GAAG,QAAQ,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3D,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,CAAA;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,OAAO;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,OAAO,CAAA;IAEX,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAA;IACjD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IACpC,CAAC;IACD,OAAO,GAAG,GAAG,OAAO,sBAAsB,OAAO,CAAC,IAAI,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;IAChG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7D,OAAO,GAAG,GAAG,OAAO,mBAAmB,aAAa,WAAW,OAAO,CAAC,IAAI,UAAU,CAAA;IACvF,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,OAAO,UAAU,CAAA;IAChC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,CAAA;AAClB,CAAC"}
|
package/dist/interfaces.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
import { Socket } from 'node:net';
|
|
2
3
|
export interface HapInstance {
|
|
3
4
|
name: string;
|
|
@@ -20,7 +21,7 @@ export interface HapEvInstance {
|
|
|
20
21
|
}[];
|
|
21
22
|
socket?: Socket;
|
|
22
23
|
monitoring?: boolean;
|
|
23
|
-
recvBuffer?:
|
|
24
|
+
recvBuffer?: Buffer;
|
|
24
25
|
}
|
|
25
26
|
export interface HapAccessoriesRespType {
|
|
26
27
|
accessories: Array<{
|
package/dist/monitor.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
import { EventEmitter } from 'node:events';
|
|
2
3
|
import { HapEvInstance, ServiceType } from './interfaces.js';
|
|
3
|
-
export declare function findMessageBoundary(buffer:
|
|
4
|
+
export declare function findMessageBoundary(buffer: Buffer): number;
|
|
4
5
|
export declare class HapMonitor extends EventEmitter {
|
|
5
6
|
private readonly pin;
|
|
6
7
|
private readonly evInstances;
|
package/dist/monitor.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
import { EventEmitter } from 'node:events';
|
|
2
3
|
import { createConnection, parseMessage } from './eventedHttpClient/index.js';
|
|
3
4
|
export function findMessageBoundary(buffer) {
|
|
4
|
-
const
|
|
5
|
+
const raw = buffer.toString('latin1');
|
|
6
|
+
const sepMatch = raw.match(/\r?\n\r?\n/);
|
|
5
7
|
if (!sepMatch || sepMatch.index === undefined) {
|
|
6
8
|
return -1;
|
|
7
9
|
}
|
|
8
|
-
const headers =
|
|
10
|
+
const headers = raw.slice(0, sepMatch.index);
|
|
9
11
|
const bodyStart = sepMatch.index + sepMatch[0].length;
|
|
10
12
|
const contentLengthMatch = headers.match(/Content-Length:\s*(\d+)/i);
|
|
11
13
|
if (!contentLengthMatch) {
|
|
12
|
-
return
|
|
14
|
+
return bodyStart;
|
|
13
15
|
}
|
|
14
16
|
const messageEnd = bodyStart + Number(contentLengthMatch[1]);
|
|
15
17
|
if (buffer.length < messageEnd) {
|
|
@@ -54,17 +56,20 @@ export class HapMonitor extends EventEmitter {
|
|
|
54
56
|
this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Connecting`);
|
|
55
57
|
instance.socket = createConnection(instance, this.pin, { characteristics: instance.evCharacteristics });
|
|
56
58
|
instance.monitoring = true;
|
|
57
|
-
instance.recvBuffer =
|
|
59
|
+
instance.recvBuffer = Buffer.alloc(0);
|
|
58
60
|
this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Connected`);
|
|
59
61
|
instance.socket.on('data', (data) => {
|
|
60
|
-
|
|
62
|
+
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
63
|
+
instance.recvBuffer = instance.recvBuffer?.length
|
|
64
|
+
? Buffer.concat([instance.recvBuffer, chunk])
|
|
65
|
+
: chunk;
|
|
61
66
|
while (true) {
|
|
62
67
|
const boundary = findMessageBoundary(instance.recvBuffer);
|
|
63
68
|
if (boundary <= 0) {
|
|
64
69
|
break;
|
|
65
70
|
}
|
|
66
|
-
const messageStr = instance.recvBuffer.
|
|
67
|
-
instance.recvBuffer = instance.recvBuffer.
|
|
71
|
+
const messageStr = instance.recvBuffer.subarray(0, boundary).toString();
|
|
72
|
+
instance.recvBuffer = instance.recvBuffer.subarray(boundary);
|
|
68
73
|
this.handleEventMessage(instance, messageStr);
|
|
69
74
|
}
|
|
70
75
|
});
|
package/dist/monitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAO7E,MAAM,UAAU,mBAAmB,CAAC,MAAc;
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAO7E,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAKhD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAGrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAErD,MAAM,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACpE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAMxB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAKD,MAAM,OAAO,UAAW,SAAQ,YAAY;IACzB,GAAG,CAAA;IACH,WAAW,CAAiB;IAC5B,QAAQ,CAAe;IAChC,MAAM,CAAK;IACF,KAAK,CAAwB;IAE9C,YAAY,MAAW,EAAE,KAAU,EAAE,GAAW,EAAE,QAAuB;QACvE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,EAAqB,CAAA;QAGxC,IAAI,CAAC,aAAa,EAAE,CAAA;QAGpB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,KAAK;QACH,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,eAAe,CAAC,QAAuB;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,eAAe,CAAC,CAAA;YACpG,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACvG,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAA;YAC1B,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAErC,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,cAAc,CAAC,CAAA;YAEnG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAGlC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC9D,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM;oBAC/C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC7C,CAAC,CAAC,KAAK,CAAA;gBAOT,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;oBACzD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;wBAClB,MAAK;oBACP,CAAC;oBACD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;oBACvE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;oBAC5D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBAC9C,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;gBACzB,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;gBACpC,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,cAAc,QAAQ,EAAE,CAAC,CAAA;YAC/G,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAC3C,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,aAAa,KAAK,EAAE,CAAC,CAAA;YAC3G,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAEb,IAAI,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACjH,CAAC;IACH,CAAC;IAED,MAAM;QACJ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;oBACzB,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;oBACpC,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,iBAAiB,CAAC,CAAA;gBACxG,CAAC;gBAAC,MAAM,CAAC;gBAET,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,eAA8B;QACrD,IAAI,CAAC,KAAK,CAAC,gBAAgB,eAAe,CAAC,SAAS,IAAI,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,uBAAuB,CAAC,CAAA;QAEjI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAA;QACpF,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;YAC1B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAA;YACrC,QAAQ,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAA;YACpC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAA;YAE9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAMD,mBAAmB,CAAC,QAAgB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QACpE,OAAO,QAAQ,EAAE,UAAU,KAAK,IAAI,CAAA;IACtC,CAAC;IAMD,mBAAmB,CAAC,QAAgB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QACpE,OAAO,QAAQ,EAAE,MAAM,IAAI,IAAI,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAA;IACjG,CAAC;IAEO,kBAAkB,CAAC,QAAuB,EAAE,UAAkB;QACpE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QAExC,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,KAAK;kBACrF,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,2DAA2D,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;QAC3H,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;oBACxD,IAAI,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,KAAK;0BACrF,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;oBAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAA;wBACxG,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;wBAEvF,IAAI,OAAO,EAAE,CAAC;4BAEZ,MAAM,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;4BAChF,IAAI,cAAc,EAAE,CAAC;gCACnB,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;gCAC9B,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;gCAC7C,OAAO,OAAO,CAAA;4BAChB,CAAC;wBACH,CAAC;wBAED,OAAO,SAAS,CAAA;oBAClB,CAAC,CAAC,CAAA;oBAGF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa;QAEX,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YAE5F,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAE7B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1E,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAmB,CAAA;oBAC5D,WAAW,CAAC,iBAAiB,GAAG,EAAE,CAAA;oBAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACpC,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAErF,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;oBACjD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;oBAC5F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@homebridge/hap-client",
|
|
3
|
-
"version": "4.0.5-beta.1",
|
|
4
|
-
"description": "A client for HAP-NodeJS.",
|
|
5
3
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
4
|
+
"version": "4.0.5-beta.3",
|
|
5
|
+
"description": "A client for HAP-NodeJS.",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Homebridge"
|
|
8
|
+
},
|
|
9
|
+
"contributors": [
|
|
10
|
+
{
|
|
11
|
+
"name": "homebridge",
|
|
12
|
+
"url": "https://github.com/homebridge"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"homepage": "https://github.com/homebridge/hap-client/blob/latest#readme",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/homebridge/hap-client.git"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/homebridge/hap-client/issues/"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"hap",
|
|
26
|
+
"homebridge",
|
|
27
|
+
"api"
|
|
28
|
+
],
|
|
8
29
|
"exports": {
|
|
9
30
|
".": {
|
|
10
31
|
"types": "./dist/index.d.ts",
|
|
@@ -15,10 +36,12 @@
|
|
|
15
36
|
"default": "./dist/hap-types.js"
|
|
16
37
|
}
|
|
17
38
|
},
|
|
39
|
+
"main": "dist/index.js",
|
|
40
|
+
"types": "dist/index.d.ts",
|
|
18
41
|
"scripts": {
|
|
19
42
|
"check": "npm install && npm outdated",
|
|
20
43
|
"clean": "rimraf ./dist",
|
|
21
|
-
"lint": "eslint
|
|
44
|
+
"lint": "eslint .",
|
|
22
45
|
"lint:fix": "npm run lint -- --fix",
|
|
23
46
|
"build": "tsc",
|
|
24
47
|
"prepublishOnly": "npm run lint && npm run build",
|
|
@@ -26,29 +49,6 @@
|
|
|
26
49
|
"test-coverage": "vitest run --coverage",
|
|
27
50
|
"gen": "ts-node --esm scripts/gen-hap-types.ts"
|
|
28
51
|
},
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/homebridge/hap-client.git"
|
|
32
|
-
},
|
|
33
|
-
"keywords": [
|
|
34
|
-
"hap",
|
|
35
|
-
"homebridge",
|
|
36
|
-
"api"
|
|
37
|
-
],
|
|
38
|
-
"author": {
|
|
39
|
-
"name": "Homebridge"
|
|
40
|
-
},
|
|
41
|
-
"contributors": [
|
|
42
|
-
{
|
|
43
|
-
"name": "homebridge",
|
|
44
|
-
"url": "https://github.com/homebridge"
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
"license": "MIT",
|
|
48
|
-
"bugs": {
|
|
49
|
-
"url": "https://github.com/homebridge/hap-client/issues/"
|
|
50
|
-
},
|
|
51
|
-
"homepage": "https://github.com/homebridge/hap-client/blob/latest#readme",
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"axios": "1.16.1",
|
|
54
54
|
"bonjour-service": "1.3.0",
|