homebridge 2.0.0-beta.34 → 2.0.0-beta.36
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/dist/api.d.ts +74 -32
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +48 -46
- package/dist/api.js.map +1 -1
- package/dist/api.spec.d.ts +2 -0
- package/dist/api.spec.d.ts.map +1 -0
- package/dist/api.spec.js +413 -0
- package/dist/api.spec.js.map +1 -0
- package/dist/childBridgeFork.d.ts +1 -18
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +21 -258
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/externalPortService.d.ts +2 -9
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +20 -40
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/logger.spec.d.ts +2 -0
- package/dist/logger.spec.d.ts.map +1 -0
- package/dist/logger.spec.js +95 -0
- package/dist/logger.spec.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.js +397 -0
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
- package/dist/matter/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
- package/dist/matter/MatterAPIImpl.js +305 -0
- package/dist/matter/MatterAPIImpl.js.map +1 -0
- package/dist/matter/MatterBridgeManager.d.ts +91 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +426 -0
- package/dist/matter/MatterBridgeManager.js.map +1 -0
- package/dist/matter/MatterConfigCollector.d.ts +26 -0
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
- package/dist/matter/MatterConfigCollector.js +78 -0
- package/dist/matter/MatterConfigCollector.js.map +1 -0
- package/dist/matter/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
- package/dist/matter/accessoryCache.js.map +1 -0
- package/dist/matter/accessoryCache.spec.d.ts +2 -0
- package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
- package/dist/matter/accessoryCache.spec.js +452 -0
- package/dist/matter/accessoryCache.spec.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +64 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +160 -0
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +21 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +49 -0
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +108 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.js +45 -0
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +21 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +27 -0
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +34 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +75 -0
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +140 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +63 -0
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js +116 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +27 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +56 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js +27 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +56 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +52 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +79 -0
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +32 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/index.d.ts +20 -0
- package/dist/matter/behaviors/index.d.ts.map +1 -0
- package/dist/matter/behaviors/index.js +21 -0
- package/dist/matter/behaviors/index.js.map +1 -0
- package/dist/matter/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
- package/dist/matter/configValidator.js.map +1 -0
- package/dist/matter/configValidator.spec.d.ts +2 -0
- package/dist/matter/configValidator.spec.d.ts.map +1 -0
- package/dist/matter/configValidator.spec.js +390 -0
- package/dist/matter/configValidator.spec.js.map +1 -0
- package/dist/matter/errorHandler.d.ts +33 -0
- package/dist/matter/errorHandler.d.ts.map +1 -0
- package/dist/matter/errorHandler.js +113 -0
- package/dist/matter/errorHandler.js.map +1 -0
- package/dist/matter/errorHandler.spec.d.ts +2 -0
- package/dist/matter/errorHandler.spec.d.ts.map +1 -0
- package/dist/matter/errorHandler.spec.js +159 -0
- package/dist/matter/errorHandler.spec.js.map +1 -0
- package/dist/matter/index.d.ts +7 -4
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js +7 -4
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
- package/dist/matter/logFormatter.js.map +1 -0
- package/dist/matter/logFormatter.spec.d.ts +2 -0
- package/dist/matter/logFormatter.spec.d.ts.map +1 -0
- package/dist/matter/logFormatter.spec.js +284 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +350 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/{matterServer.js → server.js} +533 -352
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
- package/dist/matter/serverHelpers.js.map +1 -0
- package/dist/matter/serverHelpers.spec.d.ts +2 -0
- package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
- package/dist/matter/serverHelpers.spec.js +521 -0
- package/dist/matter/serverHelpers.spec.js.map +1 -0
- package/dist/matter/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/{matterStorage.js → storage.js} +14 -5
- package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
- package/dist/matter/storage.spec.d.ts +2 -0
- package/dist/matter/storage.spec.d.ts.map +1 -0
- package/dist/matter/storage.spec.js +570 -0
- package/dist/matter/storage.spec.js.map +1 -0
- package/dist/matter/typeHelpers.d.ts +45 -0
- package/dist/matter/typeHelpers.d.ts.map +1 -0
- package/dist/matter/typeHelpers.js +57 -0
- package/dist/matter/typeHelpers.js.map +1 -0
- package/dist/matter/typeHelpers.spec.d.ts +2 -0
- package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
- package/dist/matter/typeHelpers.spec.js +127 -0
- package/dist/matter/typeHelpers.spec.js.map +1 -0
- package/dist/matter/{matterTypes.d.ts → types.d.ts} +2 -2
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/{matterTypes.js → types.js} +1 -2
- package/dist/matter/types.js.map +1 -0
- package/dist/platformAccessory.spec.d.ts +2 -0
- package/dist/platformAccessory.spec.d.ts.map +1 -0
- package/dist/platformAccessory.spec.js +126 -0
- package/dist/platformAccessory.spec.js.map +1 -0
- package/dist/pluginManager.spec.d.ts +2 -0
- package/dist/pluginManager.spec.d.ts.map +1 -0
- package/dist/pluginManager.spec.js +43 -0
- package/dist/pluginManager.spec.js.map +1 -0
- package/dist/server.d.ts +4 -13
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +45 -333
- package/dist/server.js.map +1 -1
- package/dist/server.spec.d.ts +2 -0
- package/dist/server.spec.d.ts.map +1 -0
- package/dist/server.spec.js +57 -0
- package/dist/server.spec.js.map +1 -0
- package/dist/user.spec.d.ts +2 -0
- package/dist/user.spec.d.ts.map +1 -0
- package/dist/user.spec.js +31 -0
- package/dist/user.spec.js.map +1 -0
- package/dist/util/mac.spec.d.ts +2 -0
- package/dist/util/mac.spec.d.ts.map +1 -0
- package/dist/util/mac.spec.js +36 -0
- package/dist/util/mac.spec.js.map +1 -0
- package/dist/version.spec.d.ts +2 -0
- package/dist/version.spec.d.ts.map +1 -0
- package/dist/version.spec.js +20 -0
- package/dist/version.spec.js.map +1 -0
- package/package.json +4 -4
- package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
- package/dist/matter/matterAccessoryCache.js.map +0 -1
- package/dist/matter/matterBehaviors.d.ts +0 -194
- package/dist/matter/matterBehaviors.d.ts.map +0 -1
- package/dist/matter/matterBehaviors.js +0 -665
- package/dist/matter/matterBehaviors.js.map +0 -1
- package/dist/matter/matterConfigValidator.d.ts.map +0 -1
- package/dist/matter/matterConfigValidator.js.map +0 -1
- package/dist/matter/matterErrorHandler.d.ts +0 -106
- package/dist/matter/matterErrorHandler.d.ts.map +0 -1
- package/dist/matter/matterErrorHandler.js +0 -495
- package/dist/matter/matterErrorHandler.js.map +0 -1
- package/dist/matter/matterLogFormatter.d.ts.map +0 -1
- package/dist/matter/matterLogFormatter.js.map +0 -1
- package/dist/matter/matterNetworkMonitor.d.ts +0 -68
- package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
- package/dist/matter/matterNetworkMonitor.js +0 -249
- package/dist/matter/matterNetworkMonitor.js.map +0 -1
- package/dist/matter/matterServer.d.ts.map +0 -1
- package/dist/matter/matterServer.js.map +0 -1
- package/dist/matter/matterServerHelpers.d.ts.map +0 -1
- package/dist/matter/matterServerHelpers.js.map +0 -1
- package/dist/matter/matterSharedTypes.d.ts.map +0 -1
- package/dist/matter/matterSharedTypes.js.map +0 -1
- package/dist/matter/matterStorage.d.ts.map +0 -1
- package/dist/matter/matterTypes.d.ts.map +0 -1
- package/dist/matter/matterTypes.js.map +0 -1
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { Logger } from '../logger.js';
|
|
3
|
+
import { checkPortProximity, MatterConfigValidator, sanitizeUniqueId, truncateString, validatePort, } from './configValidator.js';
|
|
4
|
+
// Mock Logger
|
|
5
|
+
vi.mock('../logger.js', () => {
|
|
6
|
+
const mockLogger = {
|
|
7
|
+
error: vi.fn(),
|
|
8
|
+
info: vi.fn(),
|
|
9
|
+
warn: vi.fn(),
|
|
10
|
+
debug: vi.fn(),
|
|
11
|
+
log: vi.fn(),
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
Logger: {
|
|
15
|
+
withPrefix: vi.fn(() => mockLogger),
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
describe('configValidator', () => {
|
|
20
|
+
let logWarnSpy;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
vi.clearAllMocks();
|
|
23
|
+
logWarnSpy = vi.mocked(Logger).withPrefix('test').warn;
|
|
24
|
+
});
|
|
25
|
+
describe('validatePort', () => {
|
|
26
|
+
it('should accept valid port numbers', () => {
|
|
27
|
+
expect(validatePort(5540).valid).toBe(true);
|
|
28
|
+
expect(validatePort(1025).valid).toBe(true);
|
|
29
|
+
expect(validatePort(65534).valid).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it('should reject non-integer port numbers', () => {
|
|
32
|
+
const result = validatePort(5540.5);
|
|
33
|
+
expect(result.valid).toBe(false);
|
|
34
|
+
expect(result.error).toContain('must be an integer');
|
|
35
|
+
});
|
|
36
|
+
it('should reject port numbers below 1025', () => {
|
|
37
|
+
const result = validatePort(1024);
|
|
38
|
+
expect(result.valid).toBe(false);
|
|
39
|
+
expect(result.error).toContain('must be between 1025 and 65534');
|
|
40
|
+
});
|
|
41
|
+
it('should reject port numbers above 65534', () => {
|
|
42
|
+
const result = validatePort(65535);
|
|
43
|
+
expect(result.valid).toBe(false);
|
|
44
|
+
expect(result.error).toContain('must be between 1025 and 65534');
|
|
45
|
+
});
|
|
46
|
+
it('should warn about conflicting ports when checkConflicts is true', () => {
|
|
47
|
+
const result = validatePort(5353, true);
|
|
48
|
+
expect(result.valid).toBe(true);
|
|
49
|
+
expect(result.warning).toContain('may conflict with other services');
|
|
50
|
+
});
|
|
51
|
+
it('should not warn about conflicting ports when checkConflicts is false', () => {
|
|
52
|
+
const result = validatePort(5353, false);
|
|
53
|
+
expect(result.valid).toBe(true);
|
|
54
|
+
expect(result.warning).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
it('should warn about common HTTP port 8080', () => {
|
|
57
|
+
const result = validatePort(8080, true);
|
|
58
|
+
expect(result.valid).toBe(true);
|
|
59
|
+
expect(result.warning).toContain('may conflict');
|
|
60
|
+
});
|
|
61
|
+
it('should warn about common HTTPS port 8443', () => {
|
|
62
|
+
const result = validatePort(8443, true);
|
|
63
|
+
expect(result.valid).toBe(true);
|
|
64
|
+
expect(result.warning).toContain('may conflict');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('sanitizeUniqueId', () => {
|
|
68
|
+
it('should remove colons and convert to uppercase', () => {
|
|
69
|
+
const result = sanitizeUniqueId('ab:cd:ef:12:34:56');
|
|
70
|
+
expect(result.value).toBe('ABCDEF123456');
|
|
71
|
+
expect(result.warnings).toHaveLength(1);
|
|
72
|
+
expect(result.warnings[0]).toContain('was sanitized');
|
|
73
|
+
});
|
|
74
|
+
it('should handle already sanitized IDs', () => {
|
|
75
|
+
const result = sanitizeUniqueId('ABCDEF123456');
|
|
76
|
+
expect(result.value).toBe('ABCDEF123456');
|
|
77
|
+
expect(result.warnings).toHaveLength(0);
|
|
78
|
+
});
|
|
79
|
+
it('should handle empty strings', () => {
|
|
80
|
+
const result = sanitizeUniqueId('');
|
|
81
|
+
expect(result.value).toBe('');
|
|
82
|
+
expect(result.warnings).toHaveLength(1);
|
|
83
|
+
expect(result.warnings[0]).toContain('empty after trimming');
|
|
84
|
+
});
|
|
85
|
+
it('should keep whitespace (not trimmed)', () => {
|
|
86
|
+
const result = sanitizeUniqueId(' ABCD ');
|
|
87
|
+
expect(result.value).toBe(' ABCD ');
|
|
88
|
+
expect(result.warnings).toHaveLength(0);
|
|
89
|
+
});
|
|
90
|
+
it('should warn when sanitization results in empty string', () => {
|
|
91
|
+
const result = sanitizeUniqueId(':::');
|
|
92
|
+
expect(result.value).toBe('');
|
|
93
|
+
expect(result.warnings).toHaveLength(2);
|
|
94
|
+
expect(result.warnings[0]).toContain('was sanitized');
|
|
95
|
+
expect(result.warnings[1]).toContain('resulted in empty string');
|
|
96
|
+
});
|
|
97
|
+
it('should convert lowercase to uppercase', () => {
|
|
98
|
+
const result = sanitizeUniqueId('abcdef');
|
|
99
|
+
expect(result.value).toBe('ABCDEF');
|
|
100
|
+
expect(result.warnings).toHaveLength(1);
|
|
101
|
+
});
|
|
102
|
+
it('should handle mixed case MAC addresses', () => {
|
|
103
|
+
const result = sanitizeUniqueId('Aa:Bb:Cc:Dd:Ee:Ff');
|
|
104
|
+
expect(result.value).toBe('AABBCCDDEEFF');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('truncateString', () => {
|
|
108
|
+
it('should not truncate strings within limit', () => {
|
|
109
|
+
const result = truncateString('Hello', 10, 'testField');
|
|
110
|
+
expect(result.value).toBe('Hello');
|
|
111
|
+
expect(result.warnings).toHaveLength(0);
|
|
112
|
+
});
|
|
113
|
+
it('should truncate strings exceeding limit', () => {
|
|
114
|
+
const result = truncateString('Hello World!', 5, 'testField');
|
|
115
|
+
expect(result.value).toBe('Hello');
|
|
116
|
+
expect(result.warnings).toHaveLength(1);
|
|
117
|
+
expect(result.warnings[0]).toContain('exceeds 5 characters');
|
|
118
|
+
expect(logWarnSpy).toHaveBeenCalledWith(expect.stringContaining('exceeds 5 characters'));
|
|
119
|
+
});
|
|
120
|
+
it('should handle empty strings', () => {
|
|
121
|
+
const result = truncateString('', 10, 'testField');
|
|
122
|
+
expect(result.value).toBe('');
|
|
123
|
+
expect(result.warnings).toHaveLength(0);
|
|
124
|
+
});
|
|
125
|
+
it('should handle exact length strings', () => {
|
|
126
|
+
const result = truncateString('12345', 5, 'testField');
|
|
127
|
+
expect(result.value).toBe('12345');
|
|
128
|
+
expect(result.warnings).toHaveLength(0);
|
|
129
|
+
});
|
|
130
|
+
it('should include field name in warning', () => {
|
|
131
|
+
const result = truncateString('Too Long', 3, 'myField');
|
|
132
|
+
expect(result.warnings[0]).toContain('myField');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('checkPortProximity', () => {
|
|
136
|
+
it('should warn when ports are too close', () => {
|
|
137
|
+
const warning = checkPortProximity(5540, 5545);
|
|
138
|
+
expect(warning).toBeDefined();
|
|
139
|
+
expect(warning).toContain('very close');
|
|
140
|
+
});
|
|
141
|
+
it('should not warn when ports are far apart', () => {
|
|
142
|
+
const warning = checkPortProximity(5540, 5560);
|
|
143
|
+
expect(warning).toBeUndefined();
|
|
144
|
+
});
|
|
145
|
+
it('should warn when ports differ by less than 10', () => {
|
|
146
|
+
const warning = checkPortProximity(8080, 8089);
|
|
147
|
+
expect(warning).toBeDefined();
|
|
148
|
+
});
|
|
149
|
+
it('should not warn when ports differ by 10 or more', () => {
|
|
150
|
+
const warning = checkPortProximity(8080, 8090);
|
|
151
|
+
expect(warning).toBeUndefined();
|
|
152
|
+
});
|
|
153
|
+
it('should check absolute difference (order independent)', () => {
|
|
154
|
+
const warning1 = checkPortProximity(5540, 5545);
|
|
155
|
+
const warning2 = checkPortProximity(5545, 5540);
|
|
156
|
+
expect(warning1).toBeDefined();
|
|
157
|
+
expect(warning2).toBeDefined();
|
|
158
|
+
});
|
|
159
|
+
it('should warn when ports are identical', () => {
|
|
160
|
+
const warning = checkPortProximity(5540, 5540);
|
|
161
|
+
expect(warning).toBeDefined();
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('matterConfigValidator.validate', () => {
|
|
165
|
+
it('should validate valid config', () => {
|
|
166
|
+
const config = { port: 5540 };
|
|
167
|
+
const result = MatterConfigValidator.validate(config);
|
|
168
|
+
expect(result.isValid).toBe(true);
|
|
169
|
+
expect(result.errors).toHaveLength(0);
|
|
170
|
+
});
|
|
171
|
+
it('should reject invalid port type', () => {
|
|
172
|
+
const config = { port: '5540' };
|
|
173
|
+
const result = MatterConfigValidator.validate(config);
|
|
174
|
+
expect(result.isValid).toBe(false);
|
|
175
|
+
expect(result.errors).toHaveLength(1);
|
|
176
|
+
expect(result.errors[0]).toContain('must be a number');
|
|
177
|
+
});
|
|
178
|
+
it('should reject invalid port number', () => {
|
|
179
|
+
const config = { port: 99999 };
|
|
180
|
+
const result = MatterConfigValidator.validate(config);
|
|
181
|
+
expect(result.isValid).toBe(false);
|
|
182
|
+
expect(result.errors).toHaveLength(1);
|
|
183
|
+
});
|
|
184
|
+
it('should allow config without port', () => {
|
|
185
|
+
const config = {};
|
|
186
|
+
const result = MatterConfigValidator.validate(config);
|
|
187
|
+
expect(result.isValid).toBe(true);
|
|
188
|
+
expect(result.errors).toHaveLength(0);
|
|
189
|
+
});
|
|
190
|
+
it('should include warnings for conflicting ports', () => {
|
|
191
|
+
const config = { port: 5353 };
|
|
192
|
+
const result = MatterConfigValidator.validate(config);
|
|
193
|
+
expect(result.isValid).toBe(true);
|
|
194
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
195
|
+
});
|
|
196
|
+
it('should handle null port', () => {
|
|
197
|
+
const config = { port: null };
|
|
198
|
+
const result = MatterConfigValidator.validate(config);
|
|
199
|
+
expect(result.isValid).toBe(true);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('matterConfigValidator.validateChildMatterConfig', () => {
|
|
203
|
+
it('should validate valid child config', () => {
|
|
204
|
+
const config = {
|
|
205
|
+
platform: 'TestPlatform',
|
|
206
|
+
_bridge: {
|
|
207
|
+
name: 'Test Bridge',
|
|
208
|
+
username: 'AA:BB:CC:DD:EE:FF',
|
|
209
|
+
pin: '123-45-678',
|
|
210
|
+
matter: {
|
|
211
|
+
port: 5540,
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'platform', 'TestPlatform');
|
|
216
|
+
expect(result.isValid).toBe(true);
|
|
217
|
+
expect(result.errors).toHaveLength(0);
|
|
218
|
+
});
|
|
219
|
+
it('should reject invalid port in child config', () => {
|
|
220
|
+
const config = {
|
|
221
|
+
platform: 'TestPlatform',
|
|
222
|
+
_bridge: {
|
|
223
|
+
name: 'Test Bridge',
|
|
224
|
+
username: 'AA:BB:CC:DD:EE:FF',
|
|
225
|
+
pin: '123-45-678',
|
|
226
|
+
matter: {
|
|
227
|
+
port: 99999,
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'platform', 'TestPlatform');
|
|
232
|
+
expect(result.isValid).toBe(false);
|
|
233
|
+
expect(result.errors.length).toBeGreaterThan(0);
|
|
234
|
+
});
|
|
235
|
+
it('should warn when no port specified', () => {
|
|
236
|
+
const config = {
|
|
237
|
+
platform: 'TestPlatform',
|
|
238
|
+
_bridge: {
|
|
239
|
+
name: 'Test',
|
|
240
|
+
username: 'AA:BB:CC:DD:EE:FF',
|
|
241
|
+
pin: '123-45-678',
|
|
242
|
+
matter: {},
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'platform', 'TestPlatform');
|
|
246
|
+
expect(result.isValid).toBe(true);
|
|
247
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
248
|
+
expect(result.warnings[0]).toContain('No port specified');
|
|
249
|
+
});
|
|
250
|
+
it('should warn about port proximity with HAP bridge', () => {
|
|
251
|
+
const config = {
|
|
252
|
+
platform: 'TestPlatform',
|
|
253
|
+
_bridge: {
|
|
254
|
+
name: 'Test',
|
|
255
|
+
username: 'AA:BB:CC:DD:EE:FF',
|
|
256
|
+
pin: '123-45-678',
|
|
257
|
+
port: 51826,
|
|
258
|
+
matter: {
|
|
259
|
+
port: 51828,
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'platform', 'TestPlatform');
|
|
264
|
+
expect(result.isValid).toBe(true);
|
|
265
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
266
|
+
expect(result.warnings.some(w => w.includes('very close'))).toBe(true);
|
|
267
|
+
});
|
|
268
|
+
it('should validate accessory config', () => {
|
|
269
|
+
const config = {
|
|
270
|
+
accessory: 'TestAccessory',
|
|
271
|
+
name: 'Test Accessory',
|
|
272
|
+
_bridge: {
|
|
273
|
+
name: 'Test',
|
|
274
|
+
username: 'AA:BB:CC:DD:EE:FF',
|
|
275
|
+
pin: '123-45-678',
|
|
276
|
+
matter: {
|
|
277
|
+
port: 5540,
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'accessory', 'TestAccessory');
|
|
282
|
+
expect(result.isValid).toBe(true);
|
|
283
|
+
});
|
|
284
|
+
it('should return valid result when no _bridge.matter', () => {
|
|
285
|
+
const config = {
|
|
286
|
+
platform: 'TestPlatform',
|
|
287
|
+
};
|
|
288
|
+
const result = MatterConfigValidator.validateChildMatterConfig(config, 'platform', 'TestPlatform');
|
|
289
|
+
expect(result.isValid).toBe(true);
|
|
290
|
+
expect(result.errors).toHaveLength(0);
|
|
291
|
+
expect(result.warnings).toHaveLength(0);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
describe('matterConfigValidator.validateAllChildMatterConfigs', () => {
|
|
295
|
+
it('should validate multiple platforms', () => {
|
|
296
|
+
const platforms = [
|
|
297
|
+
{
|
|
298
|
+
platform: 'Platform1',
|
|
299
|
+
_bridge: { matter: { port: 5540 } },
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
platform: 'Platform2',
|
|
303
|
+
_bridge: { matter: { port: 5550 } },
|
|
304
|
+
},
|
|
305
|
+
];
|
|
306
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs(platforms, []);
|
|
307
|
+
expect(result.isValid).toBe(true);
|
|
308
|
+
});
|
|
309
|
+
it('should detect duplicate ports in platforms', () => {
|
|
310
|
+
const platforms = [
|
|
311
|
+
{
|
|
312
|
+
platform: 'Platform1',
|
|
313
|
+
_bridge: { matter: { port: 5540 } },
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
platform: 'Platform2',
|
|
317
|
+
_bridge: { matter: { port: 5540 } },
|
|
318
|
+
},
|
|
319
|
+
];
|
|
320
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs(platforms, []);
|
|
321
|
+
expect(result.isValid).toBe(false);
|
|
322
|
+
expect(result.errors.some(e => e.includes('Duplicate Matter port'))).toBe(true);
|
|
323
|
+
});
|
|
324
|
+
it('should detect duplicate ports in accessories', () => {
|
|
325
|
+
const accessories = [
|
|
326
|
+
{
|
|
327
|
+
accessory: 'Accessory1',
|
|
328
|
+
name: 'Test 1',
|
|
329
|
+
_bridge: { matter: { port: 5540 } },
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
accessory: 'Accessory2',
|
|
333
|
+
name: 'Test 2',
|
|
334
|
+
_bridge: { matter: { port: 5540 } },
|
|
335
|
+
},
|
|
336
|
+
];
|
|
337
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs([], accessories);
|
|
338
|
+
expect(result.isValid).toBe(false);
|
|
339
|
+
expect(result.errors.some(e => e.includes('Duplicate Matter port'))).toBe(true);
|
|
340
|
+
});
|
|
341
|
+
it('should detect duplicate ports across platforms and accessories', () => {
|
|
342
|
+
const platforms = [
|
|
343
|
+
{
|
|
344
|
+
platform: 'Platform1',
|
|
345
|
+
_bridge: { matter: { port: 5540 } },
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
const accessories = [
|
|
349
|
+
{
|
|
350
|
+
accessory: 'Accessory1',
|
|
351
|
+
name: 'Test 1',
|
|
352
|
+
_bridge: { matter: { port: 5540 } },
|
|
353
|
+
},
|
|
354
|
+
];
|
|
355
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs(platforms, accessories);
|
|
356
|
+
expect(result.isValid).toBe(false);
|
|
357
|
+
expect(result.errors.some(e => e.includes('Duplicate Matter port'))).toBe(true);
|
|
358
|
+
});
|
|
359
|
+
it('should validate empty configs', () => {
|
|
360
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs([], []);
|
|
361
|
+
expect(result.isValid).toBe(true);
|
|
362
|
+
expect(result.errors).toHaveLength(0);
|
|
363
|
+
});
|
|
364
|
+
it('should collect all validation errors and warnings', () => {
|
|
365
|
+
const platforms = [
|
|
366
|
+
{
|
|
367
|
+
platform: 'Platform1',
|
|
368
|
+
_bridge: { matter: { port: 99999 } }, // invalid port
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
platform: 'Platform2',
|
|
372
|
+
_bridge: { matter: {} }, // missing port (warning)
|
|
373
|
+
},
|
|
374
|
+
];
|
|
375
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs(platforms, []);
|
|
376
|
+
expect(result.isValid).toBe(false);
|
|
377
|
+
expect(result.errors.length).toBeGreaterThan(0);
|
|
378
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
379
|
+
});
|
|
380
|
+
it('should skip platforms without _bridge.matter', () => {
|
|
381
|
+
const platforms = [
|
|
382
|
+
{ platform: 'Platform1' },
|
|
383
|
+
{ platform: 'Platform2', _bridge: { matter: { port: 5540 } } },
|
|
384
|
+
];
|
|
385
|
+
const result = MatterConfigValidator.validateAllChildMatterConfigs(platforms, []);
|
|
386
|
+
expect(result.isValid).toBe(true);
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
//# sourceMappingURL=configValidator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configValidator.spec.js","sourceRoot":"","sources":["../../src/matter/configValidator.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified Matter Error Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides basic error categorization and logging without the complexity
|
|
5
|
+
* of circuit breakers, recovery callbacks, and exponential backoff.
|
|
6
|
+
*
|
|
7
|
+
* This simplified version is more appropriate for alpha/beta releases.
|
|
8
|
+
* Advanced features can be added later based on production error patterns.
|
|
9
|
+
*/
|
|
10
|
+
import { MatterError } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Simplified Matter Error Handler
|
|
13
|
+
* Focuses on proper error categorization and user-friendly logging
|
|
14
|
+
*/
|
|
15
|
+
export declare class MatterErrorHandler {
|
|
16
|
+
private static instance;
|
|
17
|
+
private constructor();
|
|
18
|
+
static getInstance(): MatterErrorHandler;
|
|
19
|
+
/**
|
|
20
|
+
* Handle a Matter error with appropriate logging
|
|
21
|
+
*/
|
|
22
|
+
handleError(error: Error | MatterError, context?: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Categorize a generic error into a typed MatterError
|
|
25
|
+
*/
|
|
26
|
+
private categorizeError;
|
|
27
|
+
/**
|
|
28
|
+
* Log error with appropriate severity and user-friendly messages
|
|
29
|
+
*/
|
|
30
|
+
private logError;
|
|
31
|
+
}
|
|
32
|
+
export declare const errorHandler: MatterErrorHandler;
|
|
33
|
+
//# sourceMappingURL=errorHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/matter/errorHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAGL,WAAW,EAIZ,MAAM,YAAY,CAAA;AAInB;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E;;OAEG;IACH,OAAO,CAAC,eAAe;IAyEvB;;OAEG;IACH,OAAO,CAAC,QAAQ;CA6BjB;AAGD,eAAO,MAAM,YAAY,oBAAmC,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified Matter Error Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides basic error categorization and logging without the complexity
|
|
5
|
+
* of circuit breakers, recovery callbacks, and exponential backoff.
|
|
6
|
+
*
|
|
7
|
+
* This simplified version is more appropriate for alpha/beta releases.
|
|
8
|
+
* Advanced features can be added later based on production error patterns.
|
|
9
|
+
*/
|
|
10
|
+
import { Logger } from '../logger.js';
|
|
11
|
+
import { MatterCommissioningError, MatterDeviceError, MatterError, MatterErrorType, MatterNetworkError, MatterStorageError, } from './types.js';
|
|
12
|
+
const log = Logger.withPrefix('Matter/Errors');
|
|
13
|
+
/**
|
|
14
|
+
* Simplified Matter Error Handler
|
|
15
|
+
* Focuses on proper error categorization and user-friendly logging
|
|
16
|
+
*/
|
|
17
|
+
export class MatterErrorHandler {
|
|
18
|
+
static instance;
|
|
19
|
+
constructor() { }
|
|
20
|
+
static getInstance() {
|
|
21
|
+
if (!MatterErrorHandler.instance) {
|
|
22
|
+
MatterErrorHandler.instance = new MatterErrorHandler();
|
|
23
|
+
}
|
|
24
|
+
return MatterErrorHandler.instance;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handle a Matter error with appropriate logging
|
|
28
|
+
*/
|
|
29
|
+
async handleError(error, context) {
|
|
30
|
+
const matterError = this.categorizeError(error, context);
|
|
31
|
+
this.logError(matterError);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Categorize a generic error into a typed MatterError
|
|
35
|
+
*/
|
|
36
|
+
categorizeError(error, context) {
|
|
37
|
+
// If already a typed MatterError, return it
|
|
38
|
+
if (error instanceof MatterError) {
|
|
39
|
+
return error;
|
|
40
|
+
}
|
|
41
|
+
const errorMessage = error.message.toLowerCase();
|
|
42
|
+
// Network errors (port conflicts, connection failures)
|
|
43
|
+
if (errorMessage.includes('eaddrinuse')) {
|
|
44
|
+
return new MatterNetworkError(`Port is already in use: ${error.message}`, { code: 'PORT_IN_USE', recoverable: false });
|
|
45
|
+
}
|
|
46
|
+
if (errorMessage.includes('econnrefused') || errorMessage.includes('etimedout')) {
|
|
47
|
+
return new MatterNetworkError(`Connection failed: ${error.message}`, { code: 'CONNECTION_FAILED', recoverable: true });
|
|
48
|
+
}
|
|
49
|
+
// Commissioning errors
|
|
50
|
+
if (errorMessage.includes('commissioning') || errorMessage.includes('pairing')) {
|
|
51
|
+
return new MatterCommissioningError(`Commissioning error: ${error.message}`, { recoverable: false });
|
|
52
|
+
}
|
|
53
|
+
// Storage errors
|
|
54
|
+
if (errorMessage.includes('storage') || errorMessage.includes('enoent') || errorMessage.includes('corrupted')) {
|
|
55
|
+
return new MatterStorageError(`Storage error: ${error.message}`, { recoverable: true });
|
|
56
|
+
}
|
|
57
|
+
// Configuration errors
|
|
58
|
+
if (errorMessage.includes('config') || errorMessage.includes('invalid')) {
|
|
59
|
+
return new MatterError(`Configuration error: ${error.message}`, 'CONFIGURATION_ERROR', { recoverable: false, type: MatterErrorType.CONFIGURATION });
|
|
60
|
+
}
|
|
61
|
+
// Device sync errors (context-based)
|
|
62
|
+
if (context?.includes('sync') || context?.includes('device')) {
|
|
63
|
+
return new MatterDeviceError(`Device sync error: ${error.message}`, { recoverable: true, context });
|
|
64
|
+
}
|
|
65
|
+
// Server errors (context-based)
|
|
66
|
+
if (context?.includes('server')) {
|
|
67
|
+
return new MatterError(`Server error: ${error.message}`, 'SERVER_ERROR', { recoverable: true, type: MatterErrorType.SERVER, context });
|
|
68
|
+
}
|
|
69
|
+
// Default to unknown error
|
|
70
|
+
return new MatterError(error.message || 'Unknown Matter error', 'UNKNOWN_ERROR', { recoverable: false, type: MatterErrorType.UNKNOWN, originalError: error });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Log error with appropriate severity and user-friendly messages
|
|
74
|
+
*/
|
|
75
|
+
logError(error) {
|
|
76
|
+
if (error instanceof MatterNetworkError) {
|
|
77
|
+
if (error.details?.code === 'PORT_IN_USE') {
|
|
78
|
+
log.error('Matter port is already in use. Please configure a different port in your config.json.');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
log.warn(`Matter network error: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (error instanceof MatterCommissioningError) {
|
|
85
|
+
log.info(`Matter commissioning issue: ${error.message}`);
|
|
86
|
+
}
|
|
87
|
+
else if (error instanceof MatterDeviceError) {
|
|
88
|
+
log.debug(`Device sync error: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
else if (error instanceof MatterStorageError) {
|
|
91
|
+
log.warn(`Matter storage error: ${error.message}`);
|
|
92
|
+
if (error.message.includes('corrupted')) {
|
|
93
|
+
log.warn('If this persists, you may need to delete the Matter storage directory and re-pair your devices.');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (error.code === 'CONFIGURATION_ERROR') {
|
|
97
|
+
log.error(`Matter configuration error: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
else if (error.code === 'SERVER_ERROR') {
|
|
100
|
+
log.error(`Matter server error: ${error.message}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
log.error(`Matter error: ${error.message}`);
|
|
104
|
+
}
|
|
105
|
+
// Log stack trace for non-recoverable errors
|
|
106
|
+
if (!error.recoverable && error.stack) {
|
|
107
|
+
log.debug('Stack trace:', error.stack);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Export singleton instance
|
|
112
|
+
export const errorHandler = MatterErrorHandler.getInstance();
|
|
113
|
+
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/matter/errorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.spec.d.ts","sourceRoot":"","sources":["../../src/matter/errorHandler.spec.ts"],"names":[],"mappings":""}
|