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.
Files changed (89) hide show
  1. package/README.md +1 -1
  2. package/bin/homebridge.js +22 -0
  3. package/config-sample.json +12 -1
  4. package/dist/api.d.ts +226 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +166 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/bridgeService.d.ts +125 -0
  9. package/dist/bridgeService.d.ts.map +1 -0
  10. package/dist/bridgeService.js +396 -0
  11. package/dist/bridgeService.js.map +1 -0
  12. package/dist/childBridgeFork.d.ts +38 -0
  13. package/dist/childBridgeFork.d.ts.map +1 -0
  14. package/dist/childBridgeFork.js +241 -2
  15. package/dist/childBridgeFork.js.map +1 -7
  16. package/dist/childBridgeService.d.ts +203 -0
  17. package/dist/childBridgeService.d.ts.map +1 -0
  18. package/dist/childBridgeService.js +451 -0
  19. package/dist/childBridgeService.js.map +1 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +90 -2
  23. package/dist/cli.js.map +1 -7
  24. package/dist/externalPortService.d.ts +33 -0
  25. package/dist/externalPortService.d.ts.map +1 -0
  26. package/dist/externalPortService.js +59 -0
  27. package/dist/externalPortService.js.map +1 -0
  28. package/dist/index.d.ts +85 -1099
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +20 -2
  31. package/dist/index.js.map +1 -7
  32. package/dist/ipcService.d.ts +30 -0
  33. package/dist/ipcService.d.ts.map +1 -0
  34. package/dist/ipcService.js +49 -0
  35. package/dist/ipcService.js.map +1 -0
  36. package/dist/logger.d.ts +78 -0
  37. package/dist/logger.d.ts.map +1 -0
  38. package/dist/logger.js +138 -0
  39. package/dist/logger.js.map +1 -0
  40. package/dist/matterConfigValidator.d.ts +34 -0
  41. package/dist/matterConfigValidator.d.ts.map +1 -0
  42. package/dist/matterConfigValidator.js +249 -0
  43. package/dist/matterConfigValidator.js.map +1 -0
  44. package/dist/matterService.d.ts +168 -0
  45. package/dist/matterService.d.ts.map +1 -0
  46. package/dist/matterService.js +677 -0
  47. package/dist/matterService.js.map +1 -0
  48. package/dist/matterTypes.d.ts +20 -0
  49. package/dist/matterTypes.d.ts.map +1 -0
  50. package/dist/matterTypes.js +278 -0
  51. package/dist/matterTypes.js.map +1 -0
  52. package/dist/platformAccessory.d.ts +56 -0
  53. package/dist/platformAccessory.d.ts.map +1 -0
  54. package/dist/platformAccessory.js +105 -0
  55. package/dist/platformAccessory.js.map +1 -0
  56. package/dist/plugin.d.ts +30 -0
  57. package/dist/plugin.d.ts.map +1 -0
  58. package/dist/plugin.js +182 -0
  59. package/dist/plugin.js.map +1 -0
  60. package/dist/pluginManager.d.ts +77 -0
  61. package/dist/pluginManager.d.ts.map +1 -0
  62. package/dist/pluginManager.js +375 -0
  63. package/dist/pluginManager.js.map +1 -0
  64. package/dist/server.d.ts +61 -0
  65. package/dist/server.d.ts.map +1 -0
  66. package/dist/server.js +467 -0
  67. package/dist/server.js.map +1 -0
  68. package/dist/storageService.d.ts +13 -0
  69. package/dist/storageService.d.ts.map +1 -0
  70. package/dist/storageService.js +41 -0
  71. package/dist/storageService.js.map +1 -0
  72. package/dist/user.d.ts +13 -0
  73. package/dist/user.d.ts.map +1 -0
  74. package/dist/user.js +29 -0
  75. package/dist/user.js.map +1 -0
  76. package/dist/util/mac.d.ts +5 -0
  77. package/dist/util/mac.d.ts.map +1 -0
  78. package/dist/util/mac.js +14 -0
  79. package/dist/util/mac.js.map +1 -0
  80. package/dist/util/matter-cli.d.ts +3 -0
  81. package/dist/util/matter-cli.d.ts.map +1 -0
  82. package/dist/util/matter-cli.js +211 -0
  83. package/dist/util/matter-cli.js.map +1 -0
  84. package/dist/version.d.ts +3 -0
  85. package/dist/version.d.ts.map +1 -0
  86. package/dist/version.js +16 -0
  87. package/dist/version.js.map +1 -0
  88. package/package.json +31 -34
  89. 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
@@ -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"}
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=matter-cli.d.ts.map
@@ -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,3 @@
1
+ export default function getVersion(): string;
2
+ export declare function getRequiredNodeVersion(): string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -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"}
@@ -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",
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
- "import": "./dist/index.js"
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": "^18.15.0 || ^20.7.0 || ^22.0.0"
34
+ "node": "^20.7.0 || ^22 || ^24"
38
35
  },
39
36
  "scripts": {
40
- "build": "npm run clean && node scripts/build.js",
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": "npm run clean && nodemon"
49
+ "watch": "nodemon"
52
50
  },
53
- "preferGlobal": true,
54
51
  "dependencies": {
55
- "chalk": "5.3.0",
56
- "commander": "12.1.0",
57
- "fs-extra": "11.2.0",
58
- "hap-nodejs": "1.1.1-beta.1",
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.6.3"
58
+ "semver": "7.7.2",
59
+ "source-map-support": "0.5.21"
61
60
  },
62
61
  "devDependencies": {
63
- "@antfu/eslint-config": "^2.27.1",
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": "^22.5.0",
67
- "@types/semver": "^7.5.8",
68
- "@vitest/coverage-v8": "^2.0.5",
69
- "esbuild": "^0.23.1",
70
- "esbuild-node-externals": "^1.14.0",
71
- "esbuild-plugin-tsc": "^0.4.0",
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
- "typedoc": "^0.26.6",
78
- "typescript": "^5.5.4",
79
- "vitest": "^2.0.5"
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())