homebridge 2.0.0-alpha.4 → 2.0.0-alpha.40
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 -1
- package/bin/homebridge.js +22 -0
- package/config-sample.json +12 -1
- package/dist/api.d.ts +226 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +166 -0
- package/dist/api.js.map +1 -0
- package/dist/bridgeService.d.ts +125 -0
- package/dist/bridgeService.d.ts.map +1 -0
- package/dist/bridgeService.js +396 -0
- package/dist/bridgeService.js.map +1 -0
- package/dist/childBridgeFork.d.ts +38 -0
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/dist/childBridgeFork.js +241 -2
- package/dist/childBridgeFork.js.map +1 -7
- package/dist/childBridgeService.d.ts +203 -0
- package/dist/childBridgeService.d.ts.map +1 -0
- package/dist/childBridgeService.js +451 -0
- package/dist/childBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -2
- package/dist/cli.js.map +1 -7
- package/dist/externalPortService.d.ts +33 -0
- package/dist/externalPortService.d.ts.map +1 -0
- package/dist/externalPortService.js +59 -0
- package/dist/externalPortService.js.map +1 -0
- package/dist/index.d.ts +85 -1099
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -2
- package/dist/index.js.map +1 -7
- package/dist/ipcService.d.ts +30 -0
- package/dist/ipcService.d.ts.map +1 -0
- package/dist/ipcService.js +49 -0
- package/dist/ipcService.js.map +1 -0
- package/dist/logger.d.ts +78 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +138 -0
- package/dist/logger.js.map +1 -0
- package/dist/matterConfigValidator.d.ts +34 -0
- package/dist/matterConfigValidator.d.ts.map +1 -0
- package/dist/matterConfigValidator.js +249 -0
- package/dist/matterConfigValidator.js.map +1 -0
- package/dist/matterService.d.ts +168 -0
- package/dist/matterService.d.ts.map +1 -0
- package/dist/matterService.js +677 -0
- package/dist/matterService.js.map +1 -0
- package/dist/matterTypes.d.ts +20 -0
- package/dist/matterTypes.d.ts.map +1 -0
- package/dist/matterTypes.js +278 -0
- package/dist/matterTypes.js.map +1 -0
- package/dist/platformAccessory.d.ts +56 -0
- package/dist/platformAccessory.d.ts.map +1 -0
- package/dist/platformAccessory.js +105 -0
- package/dist/platformAccessory.js.map +1 -0
- package/dist/plugin.d.ts +30 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +182 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pluginManager.d.ts +77 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +375 -0
- package/dist/pluginManager.js.map +1 -0
- package/dist/server.d.ts +61 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +467 -0
- package/dist/server.js.map +1 -0
- package/dist/storageService.d.ts +13 -0
- package/dist/storageService.d.ts.map +1 -0
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/dist/user.d.ts +13 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +29 -0
- package/dist/user.js.map +1 -0
- package/dist/util/mac.d.ts +5 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/util/matter-cli.d.ts +3 -0
- package/dist/util/matter-cli.d.ts.map +1 -0
- package/dist/util/matter-cli.js +211 -0
- package/dist/util/matter-cli.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +31 -34
- package/bin/homebridge +0 -19
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
export class StorageService {
|
|
4
|
+
baseDirectory;
|
|
5
|
+
constructor(baseDirectory) {
|
|
6
|
+
this.baseDirectory = baseDirectory;
|
|
7
|
+
}
|
|
8
|
+
initSync() {
|
|
9
|
+
return fs.ensureDirSync(this.baseDirectory);
|
|
10
|
+
}
|
|
11
|
+
getItemSync(itemName) {
|
|
12
|
+
const filePath = resolve(this.baseDirectory, itemName);
|
|
13
|
+
if (!fs.pathExistsSync(filePath)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return fs.readJsonSync(filePath);
|
|
17
|
+
}
|
|
18
|
+
async getItem(itemName) {
|
|
19
|
+
const filePath = resolve(this.baseDirectory, itemName);
|
|
20
|
+
if (!await fs.pathExists(filePath)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return await fs.readJson(filePath);
|
|
24
|
+
}
|
|
25
|
+
setItemSync(itemName, data) {
|
|
26
|
+
return fs.writeJsonSync(resolve(this.baseDirectory, itemName), data);
|
|
27
|
+
}
|
|
28
|
+
setItem(itemName, data) {
|
|
29
|
+
return fs.writeJson(resolve(this.baseDirectory, itemName), data);
|
|
30
|
+
}
|
|
31
|
+
copyItem(srcItemName, destItemName) {
|
|
32
|
+
return fs.copyFile(resolve(this.baseDirectory, srcItemName), resolve(this.baseDirectory, destItemName));
|
|
33
|
+
}
|
|
34
|
+
copyItemSync(srcItemName, destItemName) {
|
|
35
|
+
return fs.copyFileSync(resolve(this.baseDirectory, srcItemName), resolve(this.baseDirectory, destItemName));
|
|
36
|
+
}
|
|
37
|
+
removeItemSync(itemName) {
|
|
38
|
+
return fs.removeSync(resolve(this.baseDirectory, itemName));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=storageService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageService.js","sourceRoot":"","sources":["../src/storageService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,MAAM,UAAU,CAAA;AAEzB,MAAM,OAAO,cAAc;IAEhB;IADT,YACS,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAC3B,CAAC;IAEG,QAAQ;QACb,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7C,CAAC;IAEM,WAAW,CAAI,QAAgB;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAEtD,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAI,QAAgB;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAEtD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IAEM,WAAW,CAAC,QAAgB,EAAE,IAAmC;QACtE,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAA;IACtE,CAAC;IAEM,OAAO,CAAC,QAAgB,EAAE,IAAmC;QAClE,OAAO,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAA;IAClE,CAAC;IAEM,QAAQ,CAAC,WAAmB,EAAE,YAAoB;QACvD,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAA;IACzG,CAAC;IAEM,YAAY,CAAC,WAAmB,EAAE,YAAoB;QAC3D,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAA;IAC7G,CAAC;IAEM,cAAc,CAAC,QAAgB;QACpC,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;CACF"}
|
package/dist/user.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages user settings and storage locations.
|
|
3
|
+
*/
|
|
4
|
+
export declare class User {
|
|
5
|
+
private static customStoragePath?;
|
|
6
|
+
private static storageAccessed;
|
|
7
|
+
static configPath(): string;
|
|
8
|
+
static persistPath(): string;
|
|
9
|
+
static cachedAccessoryPath(): string;
|
|
10
|
+
static storagePath(): string;
|
|
11
|
+
static setStoragePath(...storagePathSegments: string[]): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAQ;IACzC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAQ;IAEtC,MAAM,CAAC,UAAU,IAAI,MAAM;IAI3B,MAAM,CAAC,WAAW,IAAI,MAAM;IAI5B,MAAM,CAAC,mBAAmB,IAAI,MAAM;IAIpC,MAAM,CAAC,WAAW,IAAI,MAAM;WAMd,cAAc,CAAC,GAAG,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI;CAOrE"}
|
package/dist/user.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Manages user settings and storage locations.
|
|
5
|
+
*/
|
|
6
|
+
export class User {
|
|
7
|
+
static customStoragePath;
|
|
8
|
+
static storageAccessed = false;
|
|
9
|
+
static configPath() {
|
|
10
|
+
return join(User.storagePath(), 'config.json');
|
|
11
|
+
}
|
|
12
|
+
static persistPath() {
|
|
13
|
+
return join(User.storagePath(), 'persist'); // hap-nodejs data is stored here
|
|
14
|
+
}
|
|
15
|
+
static cachedAccessoryPath() {
|
|
16
|
+
return join(User.storagePath(), 'accessories');
|
|
17
|
+
}
|
|
18
|
+
static storagePath() {
|
|
19
|
+
User.storageAccessed = true;
|
|
20
|
+
return User.customStoragePath ? User.customStoragePath : join(homedir(), '.homebridge');
|
|
21
|
+
}
|
|
22
|
+
static setStoragePath(...storagePathSegments) {
|
|
23
|
+
if (User.storageAccessed) {
|
|
24
|
+
throw new Error('Storage path was already accessed and cannot be changed anymore. Try initializing your custom storage path earlier!');
|
|
25
|
+
}
|
|
26
|
+
User.customStoragePath = resolve(...storagePathSegments);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=user.js.map
|
package/dist/user.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,IAAI;IACP,MAAM,CAAC,iBAAiB,CAAS;IACjC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAA;IAEtC,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAA,CAAC,iCAAiC;IAC9E,CAAC;IAED,MAAM,CAAC,mBAAmB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAE3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;IACzF,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,GAAG,mBAA6B;QAC3D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qHAAqH,CAAC,CAAA;QACxI,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAA;IAC1D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Buffer } from 'node:buffer';
|
|
2
|
+
export type MacAddress = string;
|
|
3
|
+
export declare function validMacAddress(address: string): boolean;
|
|
4
|
+
export declare function generate(data: string | Buffer | NodeJS.TypedArray | DataView): MacAddress;
|
|
5
|
+
//# sourceMappingURL=mac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mac.d.ts","sourceRoot":"","sources":["../../src/util/mac.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAOzC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,QAAQ,GAAG,UAAU,CAOzF"}
|
package/dist/util/mac.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* global NodeJS */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
const validMac = /^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/;
|
|
4
|
+
export function validMacAddress(address) {
|
|
5
|
+
return validMac.test(address);
|
|
6
|
+
}
|
|
7
|
+
export function generate(data) {
|
|
8
|
+
const sha1sum = createHash('sha1');
|
|
9
|
+
sha1sum.update(data);
|
|
10
|
+
const s = sha1sum.digest('hex');
|
|
11
|
+
let i = 0;
|
|
12
|
+
return 'xx:xx:xx:xx:xx:xx'.replace(/x/g, () => s[i++]).toUpperCase();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=mac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mac.js","sourceRoot":"","sources":["../../src/util/mac.ts"],"names":[],"mappings":"AAEA,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,QAAQ,GAAG,kCAAkC,CAAA;AAInD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAoD;IAC3E,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAE/B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;AACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matter-cli.d.ts","sourceRoot":"","sources":["../../src/util/matter-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import * as fs from 'fs-extra';
|
|
6
|
+
import * as qrcode from 'qrcode-terminal';
|
|
7
|
+
import { MatterConfigValidator } from '../matterConfigValidator.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('homebridge-matter')
|
|
11
|
+
.description('Homebridge Matter configuration and management tool')
|
|
12
|
+
.version('1.0.0');
|
|
13
|
+
program
|
|
14
|
+
.command('validate')
|
|
15
|
+
.description('Validate Matter configuration')
|
|
16
|
+
.option('-c, --config <path>', 'Path to config.json file', './config.json')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
const configPath = path.resolve(options.config);
|
|
20
|
+
if (!await fs.pathExists(configPath)) {
|
|
21
|
+
console.error(`Configuration file not found: ${configPath}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const config = await fs.readJson(configPath);
|
|
25
|
+
const matterConfig = config.matter || {};
|
|
26
|
+
console.warn('Validating Matter configuration...\n');
|
|
27
|
+
const result = MatterConfigValidator.validate(matterConfig);
|
|
28
|
+
if (result.isValid) {
|
|
29
|
+
console.warn('✅ Matter configuration is valid!');
|
|
30
|
+
if (result.warnings.length > 0) {
|
|
31
|
+
console.warn('\n⚠️ Warnings:');
|
|
32
|
+
result.warnings.forEach(warning => console.warn(` - ${warning}`));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error('❌ Matter configuration has errors:');
|
|
37
|
+
result.errors.forEach(error => console.error(` - ${error}`));
|
|
38
|
+
if (result.warnings.length > 0) {
|
|
39
|
+
console.warn('\n⚠️ Warnings:');
|
|
40
|
+
result.warnings.forEach(warning => console.warn(` - ${warning}`));
|
|
41
|
+
}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error('Error validating configuration:', error);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
program
|
|
51
|
+
.command('generate-passcode')
|
|
52
|
+
.description('Generate a secure random passcode')
|
|
53
|
+
.option('-c, --count <number>', 'Number of passcodes to generate', '1')
|
|
54
|
+
.action((options) => {
|
|
55
|
+
try {
|
|
56
|
+
const count = Number.parseInt(options.count);
|
|
57
|
+
if (Number.isNaN(count) || count < 1 || count > 100) {
|
|
58
|
+
console.error('Count must be a number between 1 and 100');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
console.warn(`Generating ${count} secure passcode${count > 1 ? 's' : ''}:\n`);
|
|
62
|
+
for (let i = 0; i < count; i++) {
|
|
63
|
+
const passcode = MatterConfigValidator.generateSecurePasscode();
|
|
64
|
+
const formatted = formatPairingCode(passcode);
|
|
65
|
+
console.warn(`${i + 1}. ${passcode} (${formatted})`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('Error generating passcode:', error);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
program
|
|
74
|
+
.command('generate-discriminator')
|
|
75
|
+
.description('Generate a random discriminator')
|
|
76
|
+
.option('-c, --count <number>', 'Number of discriminators to generate', '1')
|
|
77
|
+
.action((options) => {
|
|
78
|
+
try {
|
|
79
|
+
const count = Number.parseInt(options.count);
|
|
80
|
+
if (Number.isNaN(count) || count < 1 || count > 100) {
|
|
81
|
+
console.error('Count must be a number between 1 and 100');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
console.warn(`Generating ${count} random discriminator${count > 1 ? 's' : ''}:\n`);
|
|
85
|
+
for (let i = 0; i < count; i++) {
|
|
86
|
+
const discriminator = MatterConfigValidator.generateRandomDiscriminator();
|
|
87
|
+
console.warn(`${i + 1}. ${discriminator}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error('Error generating discriminator:', error);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
program
|
|
96
|
+
.command('qr-code')
|
|
97
|
+
.description('Generate QR code for Matter commissioning')
|
|
98
|
+
.option('-c, --config <path>', 'Path to config.json file', './config.json')
|
|
99
|
+
.option('--passcode <passcode>', 'Override passcode')
|
|
100
|
+
.option('--discriminator <discriminator>', 'Override discriminator')
|
|
101
|
+
.option('--vendor-id <vendorId>', 'Override vendor ID')
|
|
102
|
+
.option('--product-id <productId>', 'Override product ID')
|
|
103
|
+
.action(async (options) => {
|
|
104
|
+
try {
|
|
105
|
+
let matterConfig = {
|
|
106
|
+
enabled: true,
|
|
107
|
+
passcode: 20202021,
|
|
108
|
+
discriminator: 3840,
|
|
109
|
+
vendorId: 0xFFF1,
|
|
110
|
+
productId: 0x8001,
|
|
111
|
+
};
|
|
112
|
+
// Load config file if it exists
|
|
113
|
+
const configPath = path.resolve(options.config);
|
|
114
|
+
if (await fs.pathExists(configPath)) {
|
|
115
|
+
const config = await fs.readJson(configPath);
|
|
116
|
+
matterConfig = { ...matterConfig, ...config.matter };
|
|
117
|
+
}
|
|
118
|
+
// Override with command line options
|
|
119
|
+
if (options.passcode) {
|
|
120
|
+
matterConfig.passcode = Number.parseInt(options.passcode);
|
|
121
|
+
}
|
|
122
|
+
if (options.discriminator) {
|
|
123
|
+
matterConfig.discriminator = Number.parseInt(options.discriminator);
|
|
124
|
+
}
|
|
125
|
+
if (options.vendorId) {
|
|
126
|
+
matterConfig.vendorId = Number.parseInt(options.vendorId);
|
|
127
|
+
}
|
|
128
|
+
if (options.productId) {
|
|
129
|
+
matterConfig.productId = Number.parseInt(options.productId);
|
|
130
|
+
}
|
|
131
|
+
// Validate configuration
|
|
132
|
+
const result = MatterConfigValidator.validate(matterConfig);
|
|
133
|
+
if (!result.isValid) {
|
|
134
|
+
console.error('Invalid Matter configuration:');
|
|
135
|
+
result.errors.forEach((error) => console.error(` - ${error}`));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
// Generate QR code (placeholder implementation)
|
|
139
|
+
const setupCode = `MT:${matterConfig.discriminator.toString().padStart(4, '0')}${matterConfig.passcode}`;
|
|
140
|
+
const qrCodeUrl = `https://dhrishi.github.io/connectedhomeip/qrcode.html?data=${setupCode}`;
|
|
141
|
+
console.warn('Matter Commissioning Information:');
|
|
142
|
+
console.warn(`Setup Code: ${setupCode}`);
|
|
143
|
+
console.warn(`Manual Pairing Code: ${formatPairingCode(matterConfig.passcode)}`);
|
|
144
|
+
console.warn(`Discriminator: ${matterConfig.discriminator}`);
|
|
145
|
+
console.warn(`QR Code URL: ${qrCodeUrl}`);
|
|
146
|
+
console.warn('\nQR Code (placeholder):');
|
|
147
|
+
// Display placeholder QR code in terminal
|
|
148
|
+
qrcode.generate(qrCodeUrl, { small: true });
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error('Error generating QR code:', error);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
program
|
|
156
|
+
.command('init-config')
|
|
157
|
+
.description('Initialize Matter configuration with secure defaults')
|
|
158
|
+
.option('-c, --config <path>', 'Path to config.json file', './config.json')
|
|
159
|
+
.option('--force', 'Overwrite existing Matter configuration')
|
|
160
|
+
.action(async (options) => {
|
|
161
|
+
try {
|
|
162
|
+
const configPath = path.resolve(options.config);
|
|
163
|
+
let config = {};
|
|
164
|
+
// Load existing config if it exists
|
|
165
|
+
if (await fs.pathExists(configPath)) {
|
|
166
|
+
config = await fs.readJson(configPath);
|
|
167
|
+
if (config.matter && !options.force) {
|
|
168
|
+
console.error('Matter configuration already exists. Use --force to overwrite.');
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Generate secure defaults
|
|
173
|
+
const matterConfig = {
|
|
174
|
+
enabled: true,
|
|
175
|
+
port: 5540,
|
|
176
|
+
discriminator: MatterConfigValidator.generateRandomDiscriminator(),
|
|
177
|
+
passcode: MatterConfigValidator.generateSecurePasscode(),
|
|
178
|
+
vendorId: 0xFFF1, // Test vendor ID - change for production
|
|
179
|
+
productId: 0x8001,
|
|
180
|
+
deviceName: 'Homebridge Matter Bridge',
|
|
181
|
+
storageDir: './persist',
|
|
182
|
+
debugEnabled: false,
|
|
183
|
+
announceInterval: 60,
|
|
184
|
+
commissioningTimeout: 900,
|
|
185
|
+
};
|
|
186
|
+
config.matter = matterConfig;
|
|
187
|
+
// Write back to file
|
|
188
|
+
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
189
|
+
console.warn('✅ Matter configuration initialized successfully!');
|
|
190
|
+
console.warn('\nGenerated configuration:');
|
|
191
|
+
console.warn(` Port: ${matterConfig.port}`);
|
|
192
|
+
console.warn(` Discriminator: ${matterConfig.discriminator}`);
|
|
193
|
+
console.warn(` Passcode: ${matterConfig.passcode} (${formatPairingCode(matterConfig.passcode)})`);
|
|
194
|
+
console.warn(` Vendor ID: 0x${matterConfig.vendorId.toString(16).toUpperCase()}`);
|
|
195
|
+
console.warn(` Product ID: 0x${matterConfig.productId.toString(16).toUpperCase()}`);
|
|
196
|
+
console.warn('\n⚠️ Important notes:');
|
|
197
|
+
console.warn(' - Change vendor ID for production use');
|
|
198
|
+
console.warn(' - Keep your passcode secure and private');
|
|
199
|
+
console.warn(` - Configuration saved to: ${configPath}`);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error('Error initializing configuration:', error);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
function formatPairingCode(passcode) {
|
|
207
|
+
const code = passcode.toString().padStart(8, '0');
|
|
208
|
+
return `${code.slice(0, 3)}-${code.slice(3, 5)}-${code.slice(5)}`;
|
|
209
|
+
}
|
|
210
|
+
program.parse();
|
|
211
|
+
//# sourceMappingURL=matter-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matter-cli.js","sourceRoot":"","sources":["../../src/util/matter-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,UAAU,UAAU,IAAI,MAAM,CAE3C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
function loadPackageJson() {
|
|
7
|
+
const packageJSONPath = join(__dirname, '../package.json');
|
|
8
|
+
return JSON.parse(readFileSync(packageJSONPath, { encoding: 'utf8' }));
|
|
9
|
+
}
|
|
10
|
+
export default function getVersion() {
|
|
11
|
+
return loadPackageJson().version;
|
|
12
|
+
}
|
|
13
|
+
export function getRequiredNodeVersion() {
|
|
14
|
+
return loadPackageJson().engines.node;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,SAAS,eAAe;IACtB,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU;IAChC,OAAO,eAAe,EAAE,CAAC,OAAO,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,CAAA;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.0.0-alpha.
|
|
4
|
+
"version": "2.0.0-alpha.40",
|
|
5
5
|
"description": "HomeKit support for the impatient",
|
|
6
6
|
"author": "Nick Farina",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -12,19 +12,16 @@
|
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/homebridge/homebridge/issues"
|
|
14
14
|
},
|
|
15
|
-
"exports":
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"main": "dist/index.js",
|
|
21
|
-
"types": "dist/index.d.ts",
|
|
15
|
+
"exports": "./dist/index.js",
|
|
16
|
+
"main": "lib/index.js",
|
|
17
|
+
"types": "lib/index.d.ts",
|
|
22
18
|
"maintainers": [
|
|
23
19
|
"oznu <dev@oz.nu>",
|
|
24
20
|
"Andreas Bauer <mail@anderl-bauer.de>"
|
|
25
21
|
],
|
|
26
22
|
"bin": {
|
|
27
|
-
"homebridge": "bin/homebridge"
|
|
23
|
+
"homebridge": "bin/homebridge.js",
|
|
24
|
+
"homebridge-matter": "lib/util/matter-cli.js"
|
|
28
25
|
},
|
|
29
26
|
"files": [
|
|
30
27
|
"LICENSE",
|
|
@@ -34,48 +31,48 @@
|
|
|
34
31
|
"dist"
|
|
35
32
|
],
|
|
36
33
|
"engines": {
|
|
37
|
-
"node": "^
|
|
34
|
+
"node": "^20.7.0 || ^22 || ^24"
|
|
38
35
|
},
|
|
39
36
|
"scripts": {
|
|
40
|
-
"build": "npm run clean &&
|
|
37
|
+
"build": "npm run clean && tsc",
|
|
41
38
|
"check": "npm install && npm outdated",
|
|
42
|
-
"clean": "rimraf dist
|
|
43
|
-
"dev": "DEBUG=* ./bin/homebridge -D -P example-plugins/ || true",
|
|
39
|
+
"clean": "rimraf dist && rimraf coverage",
|
|
40
|
+
"dev": "DEBUG=* ./bin/homebridge.js -D -P example-plugins/ || true",
|
|
44
41
|
"docs": "typedoc",
|
|
45
42
|
"lint": "eslint .",
|
|
46
43
|
"lint:fix": "npm run lint -- --fix",
|
|
44
|
+
"lint-docs": "typedoc --emit none --treatWarningsAsErrors",
|
|
47
45
|
"prepublishOnly": "npm run build",
|
|
48
46
|
"postpublish": "npm run clean",
|
|
49
47
|
"test": "vitest run",
|
|
50
48
|
"test-coverage": "npm run test -- --coverage",
|
|
51
|
-
"watch": "
|
|
49
|
+
"watch": "nodemon"
|
|
52
50
|
},
|
|
53
|
-
"preferGlobal": true,
|
|
54
51
|
"dependencies": {
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
52
|
+
"@matter/main": "0.15.3",
|
|
53
|
+
"chalk": "5.6.0",
|
|
54
|
+
"commander": "14.0.0",
|
|
55
|
+
"fs-extra": "11.3.1",
|
|
56
|
+
"hap-nodejs": "2.0.0-beta.2",
|
|
59
57
|
"qrcode-terminal": "0.12.0",
|
|
60
|
-
"semver": "7.
|
|
58
|
+
"semver": "7.7.2",
|
|
59
|
+
"source-map-support": "0.5.21"
|
|
61
60
|
},
|
|
62
61
|
"devDependencies": {
|
|
63
|
-
"@antfu/eslint-config": "^2.
|
|
62
|
+
"@antfu/eslint-config": "^5.2.1",
|
|
63
|
+
"@prettier/plugin-xml": "^3.4.2",
|
|
64
64
|
"@types/debug": "^4.1.12",
|
|
65
65
|
"@types/fs-extra": "^11.0.4",
|
|
66
|
-
"@types/node": "^
|
|
67
|
-
"@types/semver": "^7.
|
|
68
|
-
"@
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"eslint": "^9.9.1",
|
|
73
|
-
"eslint-plugin-format": "^0.1.2",
|
|
74
|
-
"nodemon": "^3.1.4",
|
|
75
|
-
"npm-dts": "^1.3.13",
|
|
66
|
+
"@types/node": "^24.3.0",
|
|
67
|
+
"@types/semver": "^7.7.0",
|
|
68
|
+
"@types/source-map-support": "^0.5.10",
|
|
69
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
70
|
+
"eslint-plugin-format": "^1.0.1",
|
|
71
|
+
"nodemon": "^3.1.10",
|
|
76
72
|
"rimraf": "^6.0.1",
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
73
|
+
"ts-node": "^10.9.2",
|
|
74
|
+
"typedoc": "^0.28.12",
|
|
75
|
+
"typescript": "^5.9.2",
|
|
76
|
+
"vitest": "^3.2.4"
|
|
80
77
|
}
|
|
81
78
|
}
|
package/bin/homebridge
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
// This executable sets up the environment and runs the HomeBridge CLI.
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
import { realpathSync } from 'node:fs'
|
|
8
|
-
import { dirname, join } from 'node:path'
|
|
9
|
-
import process from 'node:process'
|
|
10
|
-
import { fileURLToPath } from 'node:url'
|
|
11
|
-
|
|
12
|
-
process.title = 'homebridge'
|
|
13
|
-
|
|
14
|
-
// Find the HomeBridge lib
|
|
15
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
16
|
-
const lib = join(dirname(realpathSync(__filename)), '../dist')
|
|
17
|
-
|
|
18
|
-
// Run HomeBridge
|
|
19
|
-
import(`${lib}/cli.js`).then(module => module.default())
|