homebridge 2.0.0-alpha.7 → 2.0.0-alpha.71

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 (112) hide show
  1. package/README.md +1 -1
  2. package/bin/homebridge.js +22 -0
  3. package/dist/api.d.ts +250 -3
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +92 -0
  6. package/dist/api.js.map +1 -1
  7. package/dist/bridgeService.d.ts +11 -3
  8. package/dist/bridgeService.d.ts.map +1 -1
  9. package/dist/bridgeService.js +9 -5
  10. package/dist/bridgeService.js.map +1 -1
  11. package/dist/childBridgeFork.d.ts +30 -3
  12. package/dist/childBridgeFork.d.ts.map +1 -1
  13. package/dist/childBridgeFork.js +278 -5
  14. package/dist/childBridgeFork.js.map +1 -1
  15. package/dist/childBridgeService.d.ts +22 -0
  16. package/dist/childBridgeService.d.ts.map +1 -1
  17. package/dist/childBridgeService.js +85 -26
  18. package/dist/childBridgeService.js.map +1 -1
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +3 -2
  21. package/dist/cli.js.map +1 -1
  22. package/dist/externalPortService.d.ts +27 -6
  23. package/dist/externalPortService.d.ts.map +1 -1
  24. package/dist/externalPortService.js +73 -7
  25. package/dist/externalPortService.js.map +1 -1
  26. package/dist/index.d.ts +48 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +15 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/ipcService.d.ts +20 -0
  31. package/dist/ipcService.d.ts.map +1 -1
  32. package/dist/ipcService.js.map +1 -1
  33. package/dist/logger.d.ts +6 -0
  34. package/dist/logger.d.ts.map +1 -1
  35. package/dist/logger.js +8 -0
  36. package/dist/logger.js.map +1 -1
  37. package/dist/matter/index.d.ts +123 -0
  38. package/dist/matter/index.d.ts.map +1 -0
  39. package/dist/matter/index.js +19 -0
  40. package/dist/matter/index.js.map +1 -0
  41. package/dist/matter/matterAccessoryCache.d.ts +77 -0
  42. package/dist/matter/matterAccessoryCache.d.ts.map +1 -0
  43. package/dist/matter/matterAccessoryCache.js +176 -0
  44. package/dist/matter/matterAccessoryCache.js.map +1 -0
  45. package/dist/matter/matterBehaviors.d.ts +177 -0
  46. package/dist/matter/matterBehaviors.d.ts.map +1 -0
  47. package/dist/matter/matterBehaviors.js +639 -0
  48. package/dist/matter/matterBehaviors.js.map +1 -0
  49. package/dist/matter/matterConfigValidator.d.ts +81 -0
  50. package/dist/matter/matterConfigValidator.d.ts.map +1 -0
  51. package/dist/matter/matterConfigValidator.js +240 -0
  52. package/dist/matter/matterConfigValidator.js.map +1 -0
  53. package/dist/matter/matterErrorHandler.d.ts +94 -0
  54. package/dist/matter/matterErrorHandler.d.ts.map +1 -0
  55. package/dist/matter/matterErrorHandler.js +485 -0
  56. package/dist/matter/matterErrorHandler.js.map +1 -0
  57. package/dist/matter/matterLogFormatter.d.ts +19 -0
  58. package/dist/matter/matterLogFormatter.d.ts.map +1 -0
  59. package/dist/matter/matterLogFormatter.js +126 -0
  60. package/dist/matter/matterLogFormatter.js.map +1 -0
  61. package/dist/matter/matterNetworkMonitor.d.ts +68 -0
  62. package/dist/matter/matterNetworkMonitor.d.ts.map +1 -0
  63. package/dist/matter/matterNetworkMonitor.js +249 -0
  64. package/dist/matter/matterNetworkMonitor.js.map +1 -0
  65. package/dist/matter/matterServer.d.ts +644 -0
  66. package/dist/matter/matterServer.d.ts.map +1 -0
  67. package/dist/matter/matterServer.js +1460 -0
  68. package/dist/matter/matterServer.js.map +1 -0
  69. package/dist/matter/matterServerHelpers.d.ts +76 -0
  70. package/dist/matter/matterServerHelpers.d.ts.map +1 -0
  71. package/dist/matter/matterServerHelpers.js +298 -0
  72. package/dist/matter/matterServerHelpers.js.map +1 -0
  73. package/dist/matter/matterSharedTypes.d.ts +165 -0
  74. package/dist/matter/matterSharedTypes.d.ts.map +1 -0
  75. package/dist/matter/matterSharedTypes.js +51 -0
  76. package/dist/matter/matterSharedTypes.js.map +1 -0
  77. package/dist/matter/matterStorage.d.ts +126 -0
  78. package/dist/matter/matterStorage.d.ts.map +1 -0
  79. package/dist/matter/matterStorage.js +419 -0
  80. package/dist/matter/matterStorage.js.map +1 -0
  81. package/dist/matter/matterTypes.d.ts +668 -0
  82. package/dist/matter/matterTypes.d.ts.map +1 -0
  83. package/dist/matter/matterTypes.js +174 -0
  84. package/dist/matter/matterTypes.js.map +1 -0
  85. package/dist/platformAccessory.d.ts +1 -0
  86. package/dist/platformAccessory.d.ts.map +1 -1
  87. package/dist/platformAccessory.js +8 -1
  88. package/dist/platformAccessory.js.map +1 -1
  89. package/dist/plugin.d.ts +0 -1
  90. package/dist/plugin.d.ts.map +1 -1
  91. package/dist/plugin.js +8 -11
  92. package/dist/plugin.js.map +1 -1
  93. package/dist/pluginManager.d.ts.map +1 -1
  94. package/dist/pluginManager.js +22 -21
  95. package/dist/pluginManager.js.map +1 -1
  96. package/dist/server.d.ts +23 -1
  97. package/dist/server.d.ts.map +1 -1
  98. package/dist/server.js +374 -10
  99. package/dist/server.js.map +1 -1
  100. package/dist/storageService.js +8 -8
  101. package/dist/storageService.js.map +1 -1
  102. package/dist/user.d.ts +1 -0
  103. package/dist/user.d.ts.map +1 -1
  104. package/dist/user.js +10 -7
  105. package/dist/user.js.map +1 -1
  106. package/dist/util/mac.d.ts.map +1 -1
  107. package/dist/util/mac.js +2 -2
  108. package/dist/util/mac.js.map +1 -1
  109. package/dist/version.js +2 -2
  110. package/dist/version.js.map +1 -1
  111. package/package.json +23 -22
  112. package/bin/homebridge +0 -19
@@ -0,0 +1,644 @@
1
+ /**
2
+ * Matter.js Server Implementation for Homebridge Plugin API
3
+ *
4
+ * This provides a Matter bridge that plugins can use to register
5
+ * Matter accessories via the Homebridge API.
6
+ */
7
+ import type { SerializedMatterAccessory } from './matterAccessoryCache.js';
8
+ import { EventEmitter } from 'node:events';
9
+ import * as clusters from '@matter/main/clusters';
10
+ import * as devices from '@matter/main/devices';
11
+ import { MatterServerConfig } from './matterSharedTypes.js';
12
+ import { MatterAccessory, MatterServerEvents } from './matterTypes.js';
13
+ export { MatterServerConfig } from './matterSharedTypes.js';
14
+ /**
15
+ * Matter Server for Homebridge Plugin API
16
+ * Allows plugins to register Matter accessories explicitly
17
+ *
18
+ * Extends EventEmitter to provide commissioning lifecycle events
19
+ */
20
+ export declare class MatterServer extends EventEmitter {
21
+ on: <K extends keyof MatterServerEvents>(event: K, listener: MatterServerEvents[K]) => this;
22
+ emit: <K extends keyof MatterServerEvents>(event: K, ...args: Parameters<MatterServerEvents[K]>) => boolean;
23
+ removeListener: <K extends keyof MatterServerEvents>(event: K, listener: MatterServerEvents[K]) => this;
24
+ removeAllListeners: (event?: keyof MatterServerEvents) => this;
25
+ private readonly config;
26
+ private serverNode;
27
+ private aggregator;
28
+ private accessories;
29
+ private isRunning;
30
+ private readonly MAX_DEVICES;
31
+ private shutdownHandler;
32
+ private passcode;
33
+ private discriminator;
34
+ private readonly vendorId;
35
+ private readonly productId;
36
+ private commissioningInfo;
37
+ private serialNumber?;
38
+ private cleanupHandlers;
39
+ private storageManager;
40
+ private matterStoragePath?;
41
+ private accessoryCache;
42
+ private fabricMonitorInterval;
43
+ private previousFabrics;
44
+ constructor(config: MatterServerConfig);
45
+ /**
46
+ * Validate and sanitize Matter server configuration
47
+ * Throws descriptive errors if configuration is invalid
48
+ */
49
+ private validateAndSanitizeConfig;
50
+ /**
51
+ * Generate a secure random passcode
52
+ * According to Matter spec, passcode must be:
53
+ * - 8 digits (00000001 to 99999998)
54
+ * - Not in the invalid list
55
+ * - Not sequential or repeating patterns
56
+ */
57
+ private generateSecurePasscode;
58
+ /**
59
+ * Validate a passcode according to Matter specifications
60
+ */
61
+ private isValidPasscode;
62
+ /**
63
+ * Generate a random discriminator
64
+ * According to Matter spec, discriminator must be:
65
+ * - 12 bits (0-4095)
66
+ * - Should be random for security
67
+ */
68
+ private generateRandomDiscriminator;
69
+ /**
70
+ * Create ServerNode with automatic recovery from corrupted storage
71
+ *
72
+ * Matter.js can fail to start if fabric data is corrupted (common after
73
+ * hard shutdowns or disk errors). This method implements automatic recovery by:
74
+ *
75
+ * 1. Attempting normal ServerNode creation
76
+ * 2. If it fails with storage errors, identifying and removing corrupted files
77
+ * 3. Retrying ServerNode creation with fresh storage
78
+ *
79
+ * This prevents the need for manual intervention while preserving data
80
+ * safety by only removing storage on confirmed corruption errors.
81
+ *
82
+ * @param nodeOptions - Matter.js ServerNode configuration
83
+ * @param sanitizedId - Filesystem-safe bridge identifier
84
+ * @returns Initialized ServerNode instance
85
+ * @throws Error if recovery fails or error is not storage-related
86
+ */
87
+ private createServerNodeWithRecovery;
88
+ /**
89
+ * Start the Matter server
90
+ */
91
+ start(): Promise<void>;
92
+ /**
93
+ * Set up and validate storage
94
+ */
95
+ private setupStorage;
96
+ /**
97
+ * Load or generate commissioning credentials (passcode and discriminator)
98
+ * These must be persistent across restarts to maintain the same QR code
99
+ */
100
+ private loadOrGenerateCredentials;
101
+ /**
102
+ * Generate and display commissioning information
103
+ */
104
+ private generateCommissioningInfo;
105
+ /**
106
+ * Wait for the server to be ready
107
+ */
108
+ private waitForServerReady;
109
+ /**
110
+ * Start monitoring fabric changes to emit commissioning events
111
+ */
112
+ private startFabricMonitoring;
113
+ /**
114
+ * Stop fabric monitoring
115
+ */
116
+ private stopFabricMonitoring;
117
+ /**
118
+ * Check for fabric changes and emit appropriate events
119
+ */
120
+ private checkFabricChanges;
121
+ /**
122
+ * Update commissioning info file when commissioning state changes
123
+ */
124
+ private updateCommissioningFile;
125
+ /**
126
+ * Register Matter platform accessories (Plugin API - matches HAP pattern)
127
+ */
128
+ registerPlatformAccessories(pluginIdentifier: string, platformName: string, accessories: MatterAccessory[]): Promise<void>;
129
+ /**
130
+ * Unregister Matter platform accessories (Plugin API - matches HAP pattern)
131
+ */
132
+ unregisterPlatformAccessories(pluginIdentifier: string, platformName: string, accessories: MatterAccessory[]): Promise<void>;
133
+ /**
134
+ * Register a single Matter accessory (internal method)
135
+ */
136
+ private registerAccessory;
137
+ /**
138
+ * Unregister a Matter accessory (Plugin API)
139
+ */
140
+ unregisterAccessory(uuid: string): Promise<void>;
141
+ /**
142
+ * Update a Matter accessory's state (Plugin API)
143
+ *
144
+ * This method can be called from anywhere, including from within handlers.
145
+ * State updates are automatically deferred to avoid transaction conflicts.
146
+ */
147
+ updateAccessoryState(uuid: string, cluster: string, attributes: Record<string, unknown>): Promise<void>;
148
+ /**
149
+ * Get a Matter accessory's current state (Plugin API)
150
+ *
151
+ * Returns the current cluster attribute values that are exposed to Matter controllers.
152
+ * This is useful for:
153
+ * - Reading state after plugin restart (when local variables are lost)
154
+ * - Verifying current state before making changes
155
+ * - Multiple parts of code that need to read state
156
+ * - Debugging and logging
157
+ *
158
+ * @param uuid - The UUID of the accessory
159
+ * @param cluster - The cluster name (e.g., 'onOff', 'levelControl')
160
+ * @returns Current cluster attribute values, or undefined if cluster not found
161
+ */
162
+ getAccessoryState(uuid: string, cluster: string): Record<string, unknown> | undefined;
163
+ /**
164
+ * Get all cached accessories (Internal - for restore process)
165
+ * @internal
166
+ */
167
+ getAllCachedAccessories(): SerializedMatterAccessory[];
168
+ /**
169
+ * Get all registered accessories (Plugin API)
170
+ */
171
+ getAccessories(): MatterAccessory[];
172
+ /**
173
+ * Get a specific accessory by UUID (Plugin API)
174
+ */
175
+ getAccessory(uuid: string): MatterAccessory | undefined;
176
+ /**
177
+ * Stop the Matter server
178
+ */
179
+ stop(): Promise<void>;
180
+ /**
181
+ * Cleanup resources
182
+ */
183
+ private cleanup;
184
+ /**
185
+ * Get fabric information for commissioned controllers
186
+ */
187
+ getFabricInfo(): Array<{
188
+ fabricIndex: number;
189
+ fabricId: string;
190
+ nodeId: string;
191
+ rootVendorId: number;
192
+ label?: string;
193
+ }>;
194
+ /**
195
+ * Check if the server is commissioned
196
+ */
197
+ isCommissioned(): boolean;
198
+ /**
199
+ * Get the number of commissioned fabrics
200
+ */
201
+ getCommissionedFabricCount(): number;
202
+ /**
203
+ * Get server status information
204
+ */
205
+ getServerInfo(): {
206
+ running: boolean;
207
+ port: number;
208
+ deviceCount: number;
209
+ commissioned: boolean;
210
+ fabricCount: number;
211
+ serialNumber?: string;
212
+ };
213
+ /**
214
+ * Get commissioning information
215
+ */
216
+ getCommissioningInfo(): {
217
+ qrCode?: string;
218
+ manualPairingCode?: string;
219
+ serialNumber?: string;
220
+ passcode?: number;
221
+ discriminator?: number;
222
+ commissioned: boolean;
223
+ };
224
+ /**
225
+ * Get storage statistics
226
+ */
227
+ getStorageStats(): Array<{
228
+ entries: number;
229
+ namespace: string;
230
+ path: string;
231
+ }> | null;
232
+ /**
233
+ * Check if server is running
234
+ */
235
+ isServerRunning(): boolean;
236
+ /**
237
+ * Get Matter device types available for plugin use
238
+ */
239
+ getDeviceTypes(): {
240
+ readonly OnOffLight: devices.OnOffLightDevice;
241
+ readonly DimmableLight: devices.DimmableLightDevice;
242
+ readonly ColorTemperatureLight: devices.ColorTemperatureLightDevice;
243
+ readonly ExtendedColorLight: devices.ExtendedColorLightDevice;
244
+ readonly OnOffSwitch: devices.OnOffLightSwitchDevice;
245
+ readonly OnOffOutlet: devices.OnOffPlugInUnitDevice;
246
+ readonly DimmableOutlet: devices.DimmablePlugInUnitDevice;
247
+ readonly TemperatureSensor: devices.TemperatureSensorDevice;
248
+ readonly HumiditySensor: devices.HumiditySensorDevice;
249
+ readonly LightSensor: devices.LightSensorDevice;
250
+ readonly MotionSensor: devices.OccupancySensorDevice;
251
+ readonly ContactSensor: devices.ContactSensorDevice;
252
+ readonly LeakSensor: devices.WaterLeakDetectorDevice;
253
+ readonly SmokeSensor: devices.SmokeCoAlarmDevice;
254
+ readonly Thermostat: import("@matter/node").MutableEndpoint.With<import("@matter/node").EndpointType.For<{
255
+ readonly name: "Thermostat";
256
+ readonly deviceType: 769;
257
+ readonly deviceRevision: 4;
258
+ readonly requirements: typeof devices.ThermostatRequirements;
259
+ readonly behaviors: {
260
+ readonly identify: typeof import("@matter/main/behaviors").IdentifyServer;
261
+ };
262
+ }>, import("@matter/node").SupportedBehaviors.With<{
263
+ readonly identify: typeof import("@matter/main/behaviors").IdentifyServer;
264
+ }, readonly [import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<import("@matter/types").ClusterType.Of<{
265
+ readonly id: 513;
266
+ readonly name: "Thermostat";
267
+ readonly revision: 8;
268
+ readonly features: {
269
+ readonly heating: import("@matter/types/schema").BitFlag;
270
+ readonly cooling: import("@matter/types/schema").BitFlag;
271
+ readonly occupancy: import("@matter/types/schema").BitFlag;
272
+ readonly scheduleConfiguration: import("@matter/types/schema").BitFlag;
273
+ readonly setback: import("@matter/types/schema").BitFlag;
274
+ readonly autoMode: import("@matter/types/schema").BitFlag;
275
+ readonly localTemperatureNotExposed: import("@matter/types/schema").BitFlag;
276
+ readonly matterScheduleConfiguration: import("@matter/types/schema").BitFlag;
277
+ readonly presets: import("@matter/types/schema").BitFlag;
278
+ };
279
+ readonly attributes: {
280
+ readonly localTemperature: import("@matter/types").Attribute<number | null, any>;
281
+ readonly outdoorTemperature: import("@matter/types").OptionalAttribute<number | null, any>;
282
+ readonly hvacSystemTypeConfiguration: import("@matter/types").OptionalWritableAttribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
283
+ coolingStage: import("@matter/types/schema").BitField;
284
+ heatingStage: import("@matter/types/schema").BitField;
285
+ heatingIsHeatPump: import("@matter/types/schema").BitFlag;
286
+ heatingUsesFuel: import("@matter/types/schema").BitFlag;
287
+ }>, any>;
288
+ readonly remoteSensing: import("@matter/types").OptionalWritableAttribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
289
+ localTemperature: import("@matter/types/schema").BitFlag;
290
+ outdoorTemperature: import("@matter/types/schema").BitFlag;
291
+ occupancy: import("@matter/types/schema").BitFlag;
292
+ }>, any>;
293
+ readonly controlSequenceOfOperation: import("@matter/types").WritableAttribute<clusters.Thermostat.ControlSequenceOfOperation, any>;
294
+ readonly systemMode: import("@matter/types").WritableAttribute<clusters.Thermostat.SystemMode, any>;
295
+ readonly temperatureSetpointHold: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.TemperatureSetpointHold, any>;
296
+ readonly temperatureSetpointHoldDuration: import("@matter/types").OptionalWritableAttribute<number | null, any>;
297
+ readonly thermostatProgrammingOperationMode: import("@matter/types").OptionalWritableAttribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
298
+ scheduleActive: import("@matter/types/schema").BitFlag;
299
+ autoRecovery: import("@matter/types/schema").BitFlag;
300
+ economy: import("@matter/types/schema").BitFlag;
301
+ }>, any>;
302
+ readonly thermostatRunningState: import("@matter/types").OptionalAttribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
303
+ heat: import("@matter/types/schema").BitFlag;
304
+ cool: import("@matter/types/schema").BitFlag;
305
+ fan: import("@matter/types/schema").BitFlag;
306
+ heatStage2: import("@matter/types/schema").BitFlag;
307
+ coolStage2: import("@matter/types/schema").BitFlag;
308
+ fanStage2: import("@matter/types/schema").BitFlag;
309
+ fanStage3: import("@matter/types/schema").BitFlag;
310
+ }>, any>;
311
+ readonly setpointChangeSource: import("@matter/types").OptionalAttribute<clusters.Thermostat.SetpointChangeSource, any>;
312
+ readonly setpointChangeAmount: import("@matter/types").OptionalAttribute<number | null, any>;
313
+ readonly setpointChangeSourceTimestamp: import("@matter/types").OptionalAttribute<number, any>;
314
+ readonly emergencyHeatDelta: import("@matter/types").OptionalWritableAttribute<number, any>;
315
+ readonly acType: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.AcType, any>;
316
+ readonly acCapacity: import("@matter/types").OptionalWritableAttribute<number, any>;
317
+ readonly acRefrigerantType: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.AcRefrigerantType, any>;
318
+ readonly acCompressorType: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.AcCompressorType, any>;
319
+ readonly acErrorCode: import("@matter/types").OptionalWritableAttribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
320
+ compressorFail: import("@matter/types/schema").BitFlag;
321
+ roomSensorFail: import("@matter/types/schema").BitFlag;
322
+ outdoorSensorFail: import("@matter/types/schema").BitFlag;
323
+ coilSensorFail: import("@matter/types/schema").BitFlag;
324
+ fanFail: import("@matter/types/schema").BitFlag;
325
+ }>, any>;
326
+ readonly acLouverPosition: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.AcLouverPosition, any>;
327
+ readonly acCoilTemperature: import("@matter/types").OptionalAttribute<number | null, any>;
328
+ readonly acCapacityFormat: import("@matter/types").OptionalWritableAttribute<clusters.Thermostat.AcCapacityFormat, any>;
329
+ readonly setpointHoldExpiryTimestamp: import("@matter/types").OptionalAttribute<number | null, any>;
330
+ };
331
+ readonly commands: {
332
+ readonly setpointRaiseLower: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
333
+ mode: import("@matter/types").FieldType<clusters.Thermostat.SetpointRaiseLowerMode>;
334
+ amount: import("@matter/types").FieldType<number>;
335
+ }>, void, any>;
336
+ };
337
+ readonly extensions: readonly [{
338
+ readonly flags: {
339
+ readonly occupancy: true;
340
+ };
341
+ readonly component: {
342
+ readonly attributes: {
343
+ readonly occupancy: import("@matter/types").Attribute<import("@matter/types/schema").TypeFromPartialBitSchema<{
344
+ occupied: import("@matter/types/schema").BitFlag;
345
+ }>, any>;
346
+ };
347
+ };
348
+ }, {
349
+ readonly flags: {
350
+ readonly heating: true;
351
+ };
352
+ readonly component: {
353
+ readonly attributes: {
354
+ readonly absMinHeatSetpointLimit: import("@matter/types").OptionalFixedAttribute<number, any>;
355
+ readonly absMaxHeatSetpointLimit: import("@matter/types").OptionalFixedAttribute<number, any>;
356
+ readonly piHeatingDemand: import("@matter/types").OptionalAttribute<number, any>;
357
+ readonly occupiedHeatingSetpoint: import("@matter/types").WritableAttribute<number, any>;
358
+ readonly minHeatSetpointLimit: import("@matter/types").OptionalWritableAttribute<number, any>;
359
+ readonly maxHeatSetpointLimit: import("@matter/types").OptionalWritableAttribute<number, any>;
360
+ };
361
+ };
362
+ }, {
363
+ readonly flags: {
364
+ readonly cooling: true;
365
+ };
366
+ readonly component: {
367
+ readonly attributes: {
368
+ readonly absMinCoolSetpointLimit: import("@matter/types").OptionalFixedAttribute<number, any>;
369
+ readonly absMaxCoolSetpointLimit: import("@matter/types").OptionalFixedAttribute<number, any>;
370
+ readonly piCoolingDemand: import("@matter/types").OptionalAttribute<number, any>;
371
+ readonly occupiedCoolingSetpoint: import("@matter/types").WritableAttribute<number, any>;
372
+ readonly minCoolSetpointLimit: import("@matter/types").OptionalWritableAttribute<number, any>;
373
+ readonly maxCoolSetpointLimit: import("@matter/types").OptionalWritableAttribute<number, any>;
374
+ };
375
+ };
376
+ }, {
377
+ readonly flags: {
378
+ readonly localTemperatureNotExposed: false;
379
+ };
380
+ readonly component: {
381
+ readonly attributes: {
382
+ readonly localTemperatureCalibration: import("@matter/types").OptionalWritableAttribute<number, any>;
383
+ };
384
+ };
385
+ }, {
386
+ readonly flags: {
387
+ readonly cooling: true;
388
+ readonly occupancy: true;
389
+ };
390
+ readonly component: {
391
+ readonly attributes: {
392
+ readonly unoccupiedCoolingSetpoint: import("@matter/types").WritableAttribute<number, any>;
393
+ };
394
+ };
395
+ }, {
396
+ readonly flags: {
397
+ readonly heating: true;
398
+ readonly occupancy: true;
399
+ };
400
+ readonly component: {
401
+ readonly attributes: {
402
+ readonly unoccupiedHeatingSetpoint: import("@matter/types").WritableAttribute<number, any>;
403
+ };
404
+ };
405
+ }, {
406
+ readonly flags: {
407
+ readonly autoMode: true;
408
+ };
409
+ readonly component: {
410
+ readonly attributes: {
411
+ readonly minSetpointDeadBand: import("@matter/types").WritableAttribute<number, any>;
412
+ readonly thermostatRunningMode: import("@matter/types").OptionalAttribute<clusters.Thermostat.ThermostatRunningMode, any>;
413
+ };
414
+ };
415
+ }, {
416
+ readonly flags: {
417
+ readonly scheduleConfiguration: true;
418
+ };
419
+ readonly component: {
420
+ readonly attributes: {
421
+ readonly startOfWeek: import("@matter/types").FixedAttribute<clusters.Thermostat.StartOfWeek, any>;
422
+ readonly numberOfWeeklyTransitions: import("@matter/types").FixedAttribute<number, any>;
423
+ readonly numberOfDailyTransitions: import("@matter/types").FixedAttribute<number, any>;
424
+ };
425
+ readonly commands: {
426
+ readonly setWeeklySchedule: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
427
+ numberOfTransitionsForSequence: import("@matter/types").FieldType<number>;
428
+ dayOfWeekForSequence: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
429
+ sunday: import("@matter/types/schema").BitFlag;
430
+ monday: import("@matter/types/schema").BitFlag;
431
+ tuesday: import("@matter/types/schema").BitFlag;
432
+ wednesday: import("@matter/types/schema").BitFlag;
433
+ thursday: import("@matter/types/schema").BitFlag;
434
+ friday: import("@matter/types/schema").BitFlag;
435
+ saturday: import("@matter/types/schema").BitFlag;
436
+ away: import("@matter/types/schema").BitFlag;
437
+ }>>;
438
+ modeForSequence: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
439
+ heatSetpointPresent: import("@matter/types/schema").BitFlag;
440
+ coolSetpointPresent: import("@matter/types/schema").BitFlag;
441
+ }>>;
442
+ transitions: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
443
+ transitionTime: import("@matter/types").FieldType<number>;
444
+ heatSetpoint: import("@matter/types").FieldType<number | null>;
445
+ coolSetpoint: import("@matter/types").FieldType<number | null>;
446
+ }>[]>;
447
+ }>, void, any>;
448
+ readonly getWeeklySchedule: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
449
+ daysToReturn: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
450
+ sunday: import("@matter/types/schema").BitFlag;
451
+ monday: import("@matter/types/schema").BitFlag;
452
+ tuesday: import("@matter/types/schema").BitFlag;
453
+ wednesday: import("@matter/types/schema").BitFlag;
454
+ thursday: import("@matter/types/schema").BitFlag;
455
+ friday: import("@matter/types/schema").BitFlag;
456
+ saturday: import("@matter/types/schema").BitFlag;
457
+ away: import("@matter/types/schema").BitFlag;
458
+ }>>;
459
+ modeToReturn: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
460
+ heatSetpointPresent: import("@matter/types/schema").BitFlag;
461
+ coolSetpointPresent: import("@matter/types/schema").BitFlag;
462
+ }>>;
463
+ }>, import("@matter/types").TypeFromFields<{
464
+ numberOfTransitionsForSequence: import("@matter/types").FieldType<number>;
465
+ dayOfWeekForSequence: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
466
+ sunday: import("@matter/types/schema").BitFlag;
467
+ monday: import("@matter/types/schema").BitFlag;
468
+ tuesday: import("@matter/types/schema").BitFlag;
469
+ wednesday: import("@matter/types/schema").BitFlag;
470
+ thursday: import("@matter/types/schema").BitFlag;
471
+ friday: import("@matter/types/schema").BitFlag;
472
+ saturday: import("@matter/types/schema").BitFlag;
473
+ away: import("@matter/types/schema").BitFlag;
474
+ }>>;
475
+ modeForSequence: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
476
+ heatSetpointPresent: import("@matter/types/schema").BitFlag;
477
+ coolSetpointPresent: import("@matter/types/schema").BitFlag;
478
+ }>>;
479
+ transitions: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
480
+ transitionTime: import("@matter/types").FieldType<number>;
481
+ heatSetpoint: import("@matter/types").FieldType<number | null>;
482
+ coolSetpoint: import("@matter/types").FieldType<number | null>;
483
+ }>[]>;
484
+ }>, any>;
485
+ readonly clearWeeklySchedule: import("@matter/types").Command<void, void, any>;
486
+ };
487
+ };
488
+ }, {
489
+ readonly flags: {
490
+ readonly setback: true;
491
+ };
492
+ readonly component: {
493
+ readonly attributes: {
494
+ readonly occupiedSetback: import("@matter/types").WritableAttribute<number | null, any>;
495
+ readonly occupiedSetbackMin: import("@matter/types").FixedAttribute<number | null, any>;
496
+ readonly occupiedSetbackMax: import("@matter/types").FixedAttribute<number | null, any>;
497
+ };
498
+ };
499
+ }, {
500
+ readonly flags: {
501
+ readonly setback: true;
502
+ readonly occupancy: true;
503
+ };
504
+ readonly component: {
505
+ readonly attributes: {
506
+ readonly unoccupiedSetback: import("@matter/types").WritableAttribute<number | null, any>;
507
+ readonly unoccupiedSetbackMin: import("@matter/types").FixedAttribute<number | null, any>;
508
+ readonly unoccupiedSetbackMax: import("@matter/types").FixedAttribute<number | null, any>;
509
+ };
510
+ };
511
+ }, {
512
+ readonly flags: {
513
+ readonly presets: true;
514
+ };
515
+ readonly component: {
516
+ readonly attributes: {
517
+ readonly presetTypes: import("@matter/types").FixedAttribute<import("@matter/types").TypeFromFields<{
518
+ presetScenario: import("@matter/types").FieldType<clusters.Thermostat.PresetScenario>;
519
+ numberOfPresets: import("@matter/types").FieldType<number>;
520
+ presetTypeFeatures: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
521
+ automatic: import("@matter/types/schema").BitFlag;
522
+ supportsNames: import("@matter/types/schema").BitFlag;
523
+ }>>;
524
+ }>[], any>;
525
+ readonly numberOfPresets: import("@matter/types").FixedAttribute<number, any>;
526
+ readonly activePresetHandle: import("@matter/types").Attribute<AllowSharedBufferSource | null, any>;
527
+ readonly presets: import("@matter/types").WritableAttribute<import("@matter/types").TypeFromFields<{
528
+ presetHandle: import("@matter/types").FieldType<AllowSharedBufferSource | null>;
529
+ presetScenario: import("@matter/types").FieldType<clusters.Thermostat.PresetScenario>;
530
+ name: import("@matter/types").OptionalFieldType<string | null>;
531
+ coolingSetpoint: import("@matter/types").OptionalFieldType<number>;
532
+ heatingSetpoint: import("@matter/types").OptionalFieldType<number>;
533
+ builtIn: import("@matter/types").FieldType<boolean | null>;
534
+ }>[], any>;
535
+ };
536
+ readonly commands: {
537
+ readonly setActivePresetRequest: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
538
+ presetHandle: import("@matter/types").FieldType<AllowSharedBufferSource | null>;
539
+ }>, void, any>;
540
+ };
541
+ };
542
+ }, {
543
+ readonly flags: {
544
+ readonly matterScheduleConfiguration: true;
545
+ };
546
+ readonly component: {
547
+ readonly attributes: {
548
+ readonly scheduleTypes: import("@matter/types").FixedAttribute<import("@matter/types").TypeFromFields<{
549
+ systemMode: import("@matter/types").FieldType<clusters.Thermostat.SystemMode>;
550
+ numberOfSchedules: import("@matter/types").FieldType<number>;
551
+ scheduleTypeFeatures: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
552
+ supportsPresets: import("@matter/types/schema").BitFlag;
553
+ supportsSetpoints: import("@matter/types/schema").BitFlag;
554
+ supportsNames: import("@matter/types/schema").BitFlag;
555
+ supportsOff: import("@matter/types/schema").BitFlag;
556
+ }>>;
557
+ }>[], any>;
558
+ readonly numberOfSchedules: import("@matter/types").FixedAttribute<number, any>;
559
+ readonly numberOfScheduleTransitions: import("@matter/types").FixedAttribute<number, any>;
560
+ readonly numberOfScheduleTransitionPerDay: import("@matter/types").FixedAttribute<number | null, any>;
561
+ readonly activeScheduleHandle: import("@matter/types").Attribute<AllowSharedBufferSource | null, any>;
562
+ readonly schedules: import("@matter/types").WritableAttribute<import("@matter/types").TypeFromFields<{
563
+ scheduleHandle: import("@matter/types").FieldType<AllowSharedBufferSource | null>;
564
+ systemMode: import("@matter/types").FieldType<clusters.Thermostat.SystemMode>;
565
+ name: import("@matter/types").OptionalFieldType<string>;
566
+ presetHandle: import("@matter/types").OptionalFieldType<AllowSharedBufferSource>;
567
+ transitions: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
568
+ dayOfWeek: import("@matter/types").FieldType<import("@matter/types/schema").TypeFromPartialBitSchema<{
569
+ sunday: import("@matter/types/schema").BitFlag;
570
+ monday: import("@matter/types/schema").BitFlag;
571
+ tuesday: import("@matter/types/schema").BitFlag;
572
+ wednesday: import("@matter/types/schema").BitFlag;
573
+ thursday: import("@matter/types/schema").BitFlag;
574
+ friday: import("@matter/types/schema").BitFlag;
575
+ saturday: import("@matter/types/schema").BitFlag;
576
+ away: import("@matter/types/schema").BitFlag;
577
+ }>>;
578
+ transitionTime: import("@matter/types").FieldType<number>;
579
+ presetHandle: import("@matter/types").OptionalFieldType<AllowSharedBufferSource>;
580
+ systemMode: import("@matter/types").OptionalFieldType<clusters.Thermostat.SystemMode>;
581
+ coolingSetpoint: import("@matter/types").OptionalFieldType<number>;
582
+ heatingSetpoint: import("@matter/types").OptionalFieldType<number>;
583
+ }>[]>;
584
+ builtIn: import("@matter/types").FieldType<boolean | null>;
585
+ }>[], any>;
586
+ };
587
+ readonly commands: {
588
+ readonly setActiveScheduleRequest: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
589
+ scheduleHandle: import("@matter/types").FieldType<AllowSharedBufferSource>;
590
+ }>, void, any>;
591
+ };
592
+ };
593
+ }, {
594
+ readonly flags: {
595
+ readonly autoMode: true;
596
+ readonly heating: false;
597
+ };
598
+ readonly component: false;
599
+ }, {
600
+ readonly flags: {
601
+ readonly autoMode: true;
602
+ readonly cooling: false;
603
+ };
604
+ readonly component: false;
605
+ }, {
606
+ readonly flags: {
607
+ readonly heating: false;
608
+ readonly cooling: false;
609
+ };
610
+ readonly component: false;
611
+ }];
612
+ }>, readonly ["Heating", "Cooling"]>, typeof import("@matter/main/behaviors").ThermostatServer, import("@matter/main/behaviors").ThermostatInterface>]>>;
613
+ readonly Fan: devices.FanDevice;
614
+ readonly DoorLock: devices.DoorLockDevice;
615
+ readonly WindowCovering: devices.WindowCoveringDevice;
616
+ readonly RoboticVacuumCleaner: devices.RoboticVacuumCleanerDevice;
617
+ readonly GenericSwitch: devices.GenericSwitchDevice;
618
+ readonly Pump: devices.PumpDevice;
619
+ readonly RoomAirConditioner: devices.RoomAirConditionerDevice;
620
+ };
621
+ /**
622
+ * Get Matter clusters available for plugin use
623
+ */
624
+ getClusters(): typeof clusters;
625
+ /**
626
+ * Remove a specific fabric (controller) from the bridge
627
+ * This decommissions a single controller while leaving others intact
628
+ *
629
+ * @param fabricIndex - The fabric index to remove
630
+ * @returns Promise that resolves when the fabric is removed
631
+ */
632
+ removeFabric(fabricIndex: number): Promise<void>;
633
+ /**
634
+ * Check if a specific fabric exists
635
+ */
636
+ hasFabric(fabricIndex: number): boolean;
637
+ /**
638
+ * Notify controllers that the parts list has changed
639
+ * This triggers controllers (like Home app) to re-read the device list
640
+ * and discover new or removed accessories without needing to re-pair
641
+ */
642
+ private notifyPartsListChanged;
643
+ }
644
+ //# sourceMappingURL=matterServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matterServer.d.ts","sourceRoot":"","sources":["../../src/matter/matterServer.ts"],"names":[],"mappings":"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"}