homebridge 2.0.0-alpha.37 → 2.0.0-alpha.38

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 (71) hide show
  1. package/config-sample.json +12 -1
  2. package/dist/api.d.ts +38 -20
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +40 -1
  5. package/dist/api.js.map +1 -1
  6. package/dist/bridgeService.d.ts +20 -1
  7. package/dist/bridgeService.d.ts.map +1 -1
  8. package/dist/bridgeService.js +8 -2
  9. package/dist/bridgeService.js.map +1 -1
  10. package/dist/childBridgeFork.d.ts +1 -1
  11. package/dist/childBridgeFork.d.ts.map +1 -1
  12. package/dist/childBridgeFork.js +1 -1
  13. package/dist/childBridgeFork.js.map +1 -1
  14. package/dist/childBridgeService.d.ts +1 -0
  15. package/dist/childBridgeService.d.ts.map +1 -1
  16. package/dist/childBridgeService.js +6 -4
  17. package/dist/childBridgeService.js.map +1 -1
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +2 -1
  20. package/dist/cli.js.map +1 -1
  21. package/dist/externalPortService.js.map +1 -1
  22. package/dist/index.d.ts +11 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/ipcService.d.ts +1 -4
  27. package/dist/ipcService.d.ts.map +1 -1
  28. package/dist/ipcService.js.map +1 -1
  29. package/dist/logger.d.ts.map +1 -1
  30. package/dist/logger.js.map +1 -1
  31. package/dist/matterConfigValidator.d.ts +34 -0
  32. package/dist/matterConfigValidator.d.ts.map +1 -0
  33. package/dist/matterConfigValidator.js +249 -0
  34. package/dist/matterConfigValidator.js.map +1 -0
  35. package/dist/matterService.d.ts +168 -0
  36. package/dist/matterService.d.ts.map +1 -0
  37. package/dist/matterService.js +677 -0
  38. package/dist/matterService.js.map +1 -0
  39. package/dist/matterTypes.d.ts +20 -0
  40. package/dist/matterTypes.d.ts.map +1 -0
  41. package/dist/matterTypes.js +278 -0
  42. package/dist/matterTypes.js.map +1 -0
  43. package/dist/platformAccessory.d.ts +3 -2
  44. package/dist/platformAccessory.d.ts.map +1 -1
  45. package/dist/platformAccessory.js +8 -1
  46. package/dist/platformAccessory.js.map +1 -1
  47. package/dist/plugin.d.ts +0 -1
  48. package/dist/plugin.d.ts.map +1 -1
  49. package/dist/plugin.js +3 -6
  50. package/dist/plugin.js.map +1 -1
  51. package/dist/pluginManager.d.ts.map +1 -1
  52. package/dist/pluginManager.js +20 -19
  53. package/dist/pluginManager.js.map +1 -1
  54. package/dist/server.d.ts +3 -0
  55. package/dist/server.d.ts.map +1 -1
  56. package/dist/server.js +41 -4
  57. package/dist/server.js.map +1 -1
  58. package/dist/storageService.js +8 -8
  59. package/dist/storageService.js.map +1 -1
  60. package/dist/user.js +7 -7
  61. package/dist/user.js.map +1 -1
  62. package/dist/util/mac.d.ts.map +1 -1
  63. package/dist/util/mac.js +3 -2
  64. package/dist/util/mac.js.map +1 -1
  65. package/dist/util/matter-cli.d.ts +3 -0
  66. package/dist/util/matter-cli.d.ts.map +1 -0
  67. package/dist/util/matter-cli.js +211 -0
  68. package/dist/util/matter-cli.js.map +1 -0
  69. package/dist/version.js +2 -2
  70. package/dist/version.js.map +1 -1
  71. package/package.json +22 -19
@@ -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":";AAEA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAGnE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,eAAe,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAA;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC5C,MAAM,YAAY,GAAwB,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAE7D,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;QAEpD,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;YAEhD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAA;YAE9D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAA;YACrE,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,GAAG,CAAC;KACtE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAE7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,sBAAsB,EAAE,CAAA;YAC/D,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,sBAAsB,EAAE,sCAAsC,EAAE,GAAG,CAAC;KAC3E,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,wBAAwB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAElF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,qBAAqB,CAAC,2BAA2B,EAAE,CAAA;YACzE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,aAAa,EAAE,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,eAAe,CAAC;KAC1E,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;KACpD,MAAM,CAAC,iCAAiC,EAAE,wBAAwB,CAAC;KACnE,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,YAAY,GAAwB;YACtC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,MAAM;SAClB,CAAA;QAED,gCAAgC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC5C,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QACtD,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,YAAY,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7D,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAA;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,gDAAgD;QAChD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,aAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,QAAS,EAAE,CAAA;QAC1G,MAAM,SAAS,GAAG,8DAA8D,SAAS,EAAE,CAAA;QAE3F,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,wBAAwB,iBAAiB,CAAC,YAAY,CAAC,QAAS,CAAC,EAAE,CAAC,CAAA;QACjF,OAAO,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,aAAa,EAAE,CAAC,CAAA;QAC5D,OAAO,CAAC,IAAI,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAExC,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,eAAe,CAAC;KAC1E,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAI,MAAM,GAAQ,EAAE,CAAA;QAEpB,oCAAoC;QACpC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;YAEtC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAA;gBAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAwB;YACxC,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;YACV,aAAa,EAAE,qBAAqB,CAAC,2BAA2B,EAAE;YAClE,QAAQ,EAAE,qBAAqB,CAAC,sBAAsB,EAAE;YACxD,QAAQ,EAAE,MAAM,EAAE,yCAAyC;YAC3D,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,0BAA0B;YACtC,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,KAAK;YACnB,gBAAgB,EAAE,EAAE;YACpB,oBAAoB,EAAE,GAAG;SAC1B,CAAA;QAED,MAAM,CAAC,MAAM,GAAG,YAAY,CAAA;QAE5B,qBAAqB;QACrB,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAErD,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;QAChE,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,aAAa,EAAE,CAAC,CAAA;QAC9D,OAAO,CAAC,IAAI,CAAC,eAAe,YAAY,CAAC,QAAQ,KAAK,iBAAiB,CAAC,YAAY,CAAC,QAAS,CAAC,GAAG,CAAC,CAAA;QACnG,OAAO,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,QAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACnF,OAAO,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,SAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAErF,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACtC,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACnE,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/dist/version.js CHANGED
@@ -1,11 +1,11 @@
1
- import fs from 'node:fs';
1
+ import { readFileSync } from 'node:fs';
2
2
  import { dirname, join } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = dirname(__filename);
6
6
  function loadPackageJson() {
7
7
  const packageJSONPath = join(__dirname, '../package.json');
8
- return JSON.parse(fs.readFileSync(packageJSONPath, { encoding: 'utf8' }));
8
+ return JSON.parse(readFileSync(packageJSONPath, { encoding: 'utf8' }));
9
9
  }
10
10
  export default function getVersion() {
11
11
  return loadPackageJson().version;
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,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,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AAC3E,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"}
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.37",
4
+ "version": "2.0.0-alpha.38",
5
5
  "description": "HomeKit support for the impatient",
6
6
  "author": "Nick Farina",
7
7
  "license": "Apache-2.0",
@@ -13,13 +13,15 @@
13
13
  "url": "https://github.com/homebridge/homebridge/issues"
14
14
  },
15
15
  "exports": "./dist/index.js",
16
- "types": "dist/index.d.ts",
16
+ "main": "lib/index.js",
17
+ "types": "lib/index.d.ts",
17
18
  "maintainers": [
18
19
  "oznu <dev@oz.nu>",
19
20
  "Andreas Bauer <mail@anderl-bauer.de>"
20
21
  ],
21
22
  "bin": {
22
- "homebridge": "bin/homebridge.js"
23
+ "homebridge": "bin/homebridge",
24
+ "homebridge-matter": "lib/util/matter-cli.js"
23
25
  },
24
26
  "files": [
25
27
  "LICENSE",
@@ -29,7 +31,7 @@
29
31
  "dist"
30
32
  ],
31
33
  "engines": {
32
- "node": "^18.15.0 || ^20.7.0 || ^22.0.0"
34
+ "node": "^20.7.0 || ^22"
33
35
  },
34
36
  "scripts": {
35
37
  "build": "npm run clean && tsc",
@@ -48,29 +50,30 @@
48
50
  },
49
51
  "preferGlobal": true,
50
52
  "dependencies": {
51
- "chalk": "5.3.0",
52
- "commander": "12.1.0",
53
- "fs-extra": "11.2.0",
54
- "hap-nodejs": "^1.1.1-alpha.22",
53
+ "@matter/main": "^0.15.3",
54
+ "chalk": "5.4.1",
55
+ "commander": "14.0.0",
56
+ "fs-extra": "11.3.0",
57
+ "hap-nodejs": "2.0.0-beta.0",
55
58
  "qrcode-terminal": "0.12.0",
56
- "semver": "7.6.3",
59
+ "semver": "7.7.2",
57
60
  "source-map-support": "0.5.21"
58
61
  },
59
62
  "devDependencies": {
60
- "@antfu/eslint-config": "^3.0.0",
63
+ "@antfu/eslint-config": "^4.14.1",
64
+ "@prettier/plugin-xml": "^3.4.1",
61
65
  "@types/debug": "^4.1.12",
62
66
  "@types/fs-extra": "^11.0.4",
63
- "@types/node": "^22.5.2",
64
- "@types/semver": "^7.5.8",
67
+ "@types/node": "^22.15.30",
68
+ "@types/semver": "^7.7.0",
65
69
  "@types/source-map-support": "^0.5.10",
66
- "@vitest/coverage-v8": "^2.0.5",
67
- "eslint": "^9.9.1",
68
- "eslint-plugin-format": "^0.1.2",
69
- "nodemon": "^3.1.4",
70
+ "@vitest/coverage-v8": "^3.2.2",
71
+ "eslint-plugin-format": "^1.0.1",
72
+ "nodemon": "^3.1.10",
70
73
  "rimraf": "^6.0.1",
71
74
  "ts-node": "^10.9.2",
72
- "typedoc": "^0.26.6",
73
- "typescript": "^5.5.4",
74
- "vitest": "^2.0.5"
75
+ "typedoc": "^0.28.5",
76
+ "typescript": "^5.8.3",
77
+ "vitest": "^3.2.2"
75
78
  }
76
79
  }