homebridge 2.0.0-alpha.43 → 2.0.0-alpha.44
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 +30 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +26 -0
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +3 -13
- package/dist/bridgeService.d.ts.map +1 -1
- package/dist/bridgeService.js +8 -24
- package/dist/bridgeService.js.map +1 -1
- package/dist/childBridgeFork.d.ts +0 -8
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +26 -127
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +0 -12
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +9 -25
- package/dist/childBridgeService.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/ipcService.d.ts +2 -12
- package/dist/ipcService.d.ts.map +1 -1
- package/dist/ipcService.js +0 -7
- package/dist/ipcService.js.map +1 -1
- package/dist/matter/index.d.ts +1 -1
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/matterAccessoryCache.d.ts +73 -0
- package/dist/matter/matterAccessoryCache.d.ts.map +1 -0
- package/dist/matter/matterAccessoryCache.js +168 -0
- package/dist/matter/matterAccessoryCache.js.map +1 -0
- package/dist/matter/matterBehaviors.d.ts +123 -0
- package/dist/matter/matterBehaviors.d.ts.map +1 -0
- package/dist/matter/matterBehaviors.js +582 -0
- package/dist/matter/matterBehaviors.js.map +1 -0
- package/dist/matter/matterConfigValidator.d.ts +0 -1
- package/dist/matter/matterConfigValidator.d.ts.map +1 -1
- package/dist/matter/matterConfigValidator.js +15 -45
- package/dist/matter/matterConfigValidator.js.map +1 -1
- package/dist/matter/matterErrorHandler.d.ts +1 -1
- package/dist/matter/matterErrorHandler.d.ts.map +1 -1
- package/dist/matter/matterErrorHandler.js +35 -22
- package/dist/matter/matterErrorHandler.js.map +1 -1
- package/dist/matter/matterNetworkMonitor.d.ts +3 -0
- package/dist/matter/matterNetworkMonitor.d.ts.map +1 -1
- package/dist/matter/matterNetworkMonitor.js +49 -26
- package/dist/matter/matterNetworkMonitor.js.map +1 -1
- package/dist/matter/matterServer.d.ts +79 -5
- package/dist/matter/matterServer.d.ts.map +1 -1
- package/dist/matter/matterServer.js +487 -97
- package/dist/matter/matterServer.js.map +1 -1
- package/dist/matter/matterSharedTypes.d.ts +12 -4
- package/dist/matter/matterSharedTypes.d.ts.map +1 -1
- package/dist/matter/matterSharedTypes.js.map +1 -1
- package/dist/matter/matterStorage.d.ts +11 -1
- package/dist/matter/matterStorage.d.ts.map +1 -1
- package/dist/matter/matterStorage.js +12 -2
- package/dist/matter/matterStorage.js.map +1 -1
- package/dist/matter/matterTypes.d.ts +68 -19
- package/dist/matter/matterTypes.d.ts.map +1 -1
- package/dist/matter/matterTypes.js.map +1 -1
- package/dist/matter/matterValidation.d.ts +57 -0
- package/dist/matter/matterValidation.d.ts.map +1 -0
- package/dist/matter/matterValidation.js +100 -0
- package/dist/matter/matterValidation.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -4
- package/dist/plugin.js.map +1 -1
- package/dist/server.d.ts +0 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +80 -112
- package/dist/server.js.map +1 -1
- package/package.json +3 -3
- package/dist/matter/matterDiagnostics.d.ts +0 -121
- package/dist/matter/matterDiagnostics.d.ts.map +0 -1
- package/dist/matter/matterDiagnostics.js +0 -323
- package/dist/matter/matterDiagnostics.js.map +0 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Matter Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Common validation functions used across Matter configuration validators
|
|
5
|
+
* to ensure consistency and reduce duplication.
|
|
6
|
+
*/
|
|
7
|
+
import { Logger } from '../logger.js';
|
|
8
|
+
const log = Logger.withPrefix('Matter');
|
|
9
|
+
/**
|
|
10
|
+
* Validate a Matter port number
|
|
11
|
+
*
|
|
12
|
+
* @param port - Port number to validate
|
|
13
|
+
* @param checkConflicts - Whether to check for known conflicting ports
|
|
14
|
+
* @returns Validation result with error/warning messages
|
|
15
|
+
*/
|
|
16
|
+
export function validatePort(port, checkConflicts = false) {
|
|
17
|
+
if (!Number.isInteger(port)) {
|
|
18
|
+
return { valid: false, error: `Port must be an integer (got: ${port})` };
|
|
19
|
+
}
|
|
20
|
+
if (port < 1025 || port > 65534) {
|
|
21
|
+
return { valid: false, error: `Port must be between 1025 and 65534 (got: ${port})` };
|
|
22
|
+
}
|
|
23
|
+
// Check for common conflicts
|
|
24
|
+
if (checkConflicts) {
|
|
25
|
+
const conflictPorts = [5353, 8080, 8443]; // mDNS, common HTTP ports
|
|
26
|
+
if (conflictPorts.includes(port)) {
|
|
27
|
+
return {
|
|
28
|
+
valid: true,
|
|
29
|
+
warning: `Port ${port} may conflict with other services. Consider using a different port.`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { valid: true };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sanitize a unique ID to be filesystem-safe
|
|
37
|
+
*
|
|
38
|
+
* Replaces non-alphanumeric characters with hyphens, collapses multiple hyphens,
|
|
39
|
+
* trims leading/trailing hyphens, and converts to lowercase.
|
|
40
|
+
*
|
|
41
|
+
* @param uniqueId - Unique identifier to sanitize
|
|
42
|
+
* @returns Sanitized unique ID and any warnings
|
|
43
|
+
*/
|
|
44
|
+
export function sanitizeUniqueId(uniqueId) {
|
|
45
|
+
const warnings = [];
|
|
46
|
+
const original = uniqueId;
|
|
47
|
+
if (uniqueId.trim().length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
value: '',
|
|
50
|
+
warnings: ['uniqueId is empty after trimming'],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const sanitized = uniqueId
|
|
54
|
+
.replace(/[^a-z0-9]/gi, '-') // Replace non-alphanumeric with hyphens
|
|
55
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
56
|
+
.replace(/^-|-$/g, '') // Trim leading/trailing hyphens
|
|
57
|
+
.toLowerCase(); // Lowercase for consistency
|
|
58
|
+
if (sanitized !== original) {
|
|
59
|
+
warnings.push(`uniqueId was sanitized from "${original}" to "${sanitized}"`);
|
|
60
|
+
}
|
|
61
|
+
if (sanitized.length === 0) {
|
|
62
|
+
warnings.push('uniqueId resulted in empty string after sanitization');
|
|
63
|
+
}
|
|
64
|
+
return { value: sanitized, warnings };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Truncate a string to a maximum length with warning
|
|
68
|
+
*
|
|
69
|
+
* @param value - String to truncate
|
|
70
|
+
* @param maxLength - Maximum allowed length
|
|
71
|
+
* @param fieldName - Name of the field (for warnings)
|
|
72
|
+
* @returns Truncated value and any warnings
|
|
73
|
+
*/
|
|
74
|
+
export function truncateString(value, maxLength, fieldName) {
|
|
75
|
+
const warnings = [];
|
|
76
|
+
if (value.length > maxLength) {
|
|
77
|
+
warnings.push(`${fieldName} exceeds ${maxLength} characters, truncating: ${value}`);
|
|
78
|
+
log.warn(`${fieldName} exceeds ${maxLength} characters, truncating: ${value}`);
|
|
79
|
+
return {
|
|
80
|
+
value: value.slice(0, maxLength),
|
|
81
|
+
warnings,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { value, warnings };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check for port conflicts between HAP and Matter ports
|
|
88
|
+
*
|
|
89
|
+
* @param hapPort - HAP bridge port
|
|
90
|
+
* @param matterPort - Matter bridge port
|
|
91
|
+
* @returns Warning message if ports are too close, undefined otherwise
|
|
92
|
+
*/
|
|
93
|
+
export function checkPortProximity(hapPort, matterPort) {
|
|
94
|
+
const MIN_PORT_SEPARATION = 10;
|
|
95
|
+
if (Math.abs(hapPort - matterPort) < MIN_PORT_SEPARATION) {
|
|
96
|
+
return `HAP port ${hapPort} and Matter port ${matterPort} are very close. Consider spacing them further apart.`;
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=matterValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterValidation.js","sourceRoot":"","sources":["../../src/matter/matterValidation.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAEhB,UAAU,EACX,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAerD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAC5B,QAAQ,UAAQ;IAGvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAGnB;IAGD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4D;IAClG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0D;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwD;gBAEnF,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM;IA+C7E,mBAAmB,IAAI,gBAAgB;IAIvC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,0BAA0B,GAAG,IAAI;IAYrF,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,yBAAyB,GAAG,IAAI;IAYlF,uBAAuB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,GAAG,0BAA0B;IAW7G,sBAAsB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,GAAG,yBAAyB;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAEhB,UAAU,EACX,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAerD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAC5B,QAAQ,UAAQ;IAGvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAGnB;IAGD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4D;IAClG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0D;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwD;gBAEnF,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM;IA+C7E,mBAAmB,IAAI,gBAAgB;IAIvC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,0BAA0B,GAAG,IAAI;IAYrF,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,yBAAyB,GAAG,IAAI;IAYlF,uBAAuB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,GAAG,0BAA0B;IAW7G,sBAAsB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,GAAG,yBAAyB;IAiBxG,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,EAAE,cAAc,EAAE,qBAAqB,GAAG,IAAI;IAczH,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS;IAMjF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD3B,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlD"}
|
package/dist/plugin.js
CHANGED
|
@@ -107,11 +107,9 @@ export class Plugin {
|
|
|
107
107
|
throw new Error(`The requested platform '${name}' was not registered by the plugin '${this.getPluginIdentifier()}'.`);
|
|
108
108
|
}
|
|
109
109
|
// If it's a dynamic platform plugin, ensure it's not enabled multiple times.
|
|
110
|
-
|
|
111
|
-
const isChildBridge = typeof process.send === 'function';
|
|
112
|
-
if (!isChildBridge && this.activeDynamicPlatforms.has(name)) {
|
|
110
|
+
if (this.activeDynamicPlatforms.has(name)) {
|
|
113
111
|
throw new Error(`The dynamic platform ${name} from the plugin ${this.getPluginIdentifier()} is configured `
|
|
114
|
-
+ '
|
|
112
|
+
+ 'times in your config.json.');
|
|
115
113
|
}
|
|
116
114
|
return constructor;
|
|
117
115
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -34,7 +34,6 @@ export declare class Server {
|
|
|
34
34
|
private readonly childBridges;
|
|
35
35
|
private matterServer?;
|
|
36
36
|
private readonly matterBridgeCache;
|
|
37
|
-
private readonly platformConfigs;
|
|
38
37
|
private serverStatus;
|
|
39
38
|
constructor(options?: HomebridgeOptions);
|
|
40
39
|
/**
|
|
@@ -62,12 +61,6 @@ export declare class Server {
|
|
|
62
61
|
private static loadConfig;
|
|
63
62
|
private loadAccessories;
|
|
64
63
|
private loadPlatforms;
|
|
65
|
-
/**
|
|
66
|
-
* Generate a unique identifier for a child bridge
|
|
67
|
-
* - For HAP bridges: returns the uppercase MAC address
|
|
68
|
-
* - For Matter-only bridges: returns "matter-{plugin}-{identifier}"
|
|
69
|
-
*/
|
|
70
|
-
private getChildBridgeKey;
|
|
71
64
|
/**
|
|
72
65
|
* Validate an external bridge config
|
|
73
66
|
*/
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,iBAAiB;IAChC,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAGD,0BAAkB,YAAY;IAC5B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,EAAE,OAAO;IAET;;OAEG;IACH,IAAI,SAAS;CACd;AAED,qBAAa,MAAM;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,iBAAiB;IAChC,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAGD,0BAAkB,YAAY;IAC5B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,EAAE,OAAO;IAET;;OAEG;IACH,IAAI,SAAS;CACd;AAED,qBAAa,MAAM;IAuBf,OAAO,CAAC,OAAO;IAtBjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAIzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAG1E,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAG/E,OAAO,CAAC,YAAY,CAAqC;gBAG/C,OAAO,GAAE,iBAAsB;IAkEzC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAaV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCnC;;OAEG;YACW,sBAAsB;IA4FpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA2B3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gCAAgC;IAMxC,OAAO,CAAC,iCAAiC;IAKzC,OAAO,CAAC,mCAAmC;IAK3C,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,gCAAgC;IAQxC,OAAO,CAAC,MAAM,CAAC,UAAU;IAqIzB,OAAO,CAAC,eAAe;IAoGvB,OAAO,CAAC,aAAa;IA4FrB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyCjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgNlC,OAAO,CAAC,cAAc;CAqBvB"}
|
package/dist/server.js
CHANGED
|
@@ -38,14 +38,12 @@ export class Server {
|
|
|
38
38
|
externalPortService;
|
|
39
39
|
config;
|
|
40
40
|
// used to keep track of child bridges
|
|
41
|
-
// Key is
|
|
41
|
+
// Key is HAP username (MAC address)
|
|
42
42
|
childBridges = new Map();
|
|
43
43
|
// Matter server instance for main bridge (if enabled)
|
|
44
44
|
matterServer;
|
|
45
45
|
// Cache for Matter bridge identifier -> ChildBridgeService lookups
|
|
46
46
|
matterBridgeCache = new Map();
|
|
47
|
-
// Track platform configurations for routing accessories
|
|
48
|
-
platformConfigs = new Map();
|
|
49
47
|
// current server status
|
|
50
48
|
serverStatus = "pending" /* ServerStatus.PENDING */;
|
|
51
49
|
constructor(options = {}) {
|
|
@@ -72,7 +70,7 @@ export class Server {
|
|
|
72
70
|
};
|
|
73
71
|
// shallow copy the homebridge options to the bridge options object
|
|
74
72
|
Object.assign(bridgeConfig, this.options);
|
|
75
|
-
this.bridgeService = new BridgeService(this.api, this.pluginManager, this.externalPortService, bridgeConfig, this.config.bridge
|
|
73
|
+
this.bridgeService = new BridgeService(this.api, this.pluginManager, this.externalPortService, bridgeConfig, this.config.bridge);
|
|
76
74
|
// Handle platform accessory registration
|
|
77
75
|
this.api.on("registerPlatformAccessories" /* InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES */, this.handleRegisterPlatformAccessories.bind(this));
|
|
78
76
|
this.api.on("unregisterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES */, this.handleUnregisterPlatformAccessories.bind(this));
|
|
@@ -147,10 +145,12 @@ export class Server {
|
|
|
147
145
|
if (!this.config.bridge.matter) {
|
|
148
146
|
return;
|
|
149
147
|
}
|
|
148
|
+
// Declare matterPort outside try block so it's accessible in catch
|
|
149
|
+
let matterPort;
|
|
150
150
|
try {
|
|
151
151
|
log.info('Initializing Matter server for main bridge...');
|
|
152
152
|
// Allocate port from pool if not explicitly configured
|
|
153
|
-
|
|
153
|
+
matterPort = this.config.bridge.matter.port;
|
|
154
154
|
if (!matterPort) {
|
|
155
155
|
matterPort = await this.externalPortService.requestPort(`${this.config.bridge.username}:MATTER`);
|
|
156
156
|
if (!matterPort) {
|
|
@@ -161,18 +161,24 @@ export class Server {
|
|
|
161
161
|
log.info(`Allocated port ${matterPort} from pool for main Matter bridge`);
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
|
-
// Create Matter server instance
|
|
164
|
+
// Create Matter server instance with config inheritance from main bridge
|
|
165
165
|
this.matterServer = new MatterServer({
|
|
166
166
|
storagePath: User.matterPath(),
|
|
167
167
|
port: matterPort,
|
|
168
168
|
uniqueId: 'main-bridge',
|
|
169
|
-
|
|
169
|
+
manufacturer: this.config.bridge.manufacturer,
|
|
170
|
+
model: this.config.bridge.model,
|
|
171
|
+
firmwareRevision: this.config.bridge.firmwareRevision,
|
|
172
|
+
serialNumber: this.config.bridge.serialNumber,
|
|
173
|
+
debugModeEnabled: this.options.debugModeEnabled,
|
|
170
174
|
});
|
|
171
175
|
// Start the Matter server
|
|
172
176
|
await this.matterServer.start();
|
|
173
177
|
log.info('Matter server initialized for main bridge');
|
|
174
178
|
// Inform the API that Matter is enabled
|
|
175
179
|
this.api._setMatterEnabled(true);
|
|
180
|
+
// Set the Matter server reference for API methods like getAccessoryState
|
|
181
|
+
this.api._setMatterServer(this.matterServer);
|
|
176
182
|
// Send Matter status update to notify UI that Matter server is ready
|
|
177
183
|
if (this.config.bridge.disableIpc !== true) {
|
|
178
184
|
this.sendMainBridgeMatterStatusUpdate();
|
|
@@ -198,6 +204,24 @@ export class Server {
|
|
|
198
204
|
log.error('╚════════════════════════════════════════════════════════════════════════════╝');
|
|
199
205
|
log.error('');
|
|
200
206
|
}
|
|
207
|
+
else if (error.code === 'EADDRINUSE' || (error.message && error.message.includes('address already in use'))) {
|
|
208
|
+
log.error('');
|
|
209
|
+
log.error('╔════════════════════════════════════════════════════════════════════════════╗');
|
|
210
|
+
log.error('║ MATTER PORT ALREADY IN USE ║');
|
|
211
|
+
log.error('╠════════════════════════════════════════════════════════════════════════════╣');
|
|
212
|
+
log.error(`║ Port ${matterPort} is already in use by another application. ║`);
|
|
213
|
+
log.error('║ ║');
|
|
214
|
+
log.error('║ To fix this: ║');
|
|
215
|
+
log.error('║ 1. Stop the application using this port, or ║');
|
|
216
|
+
log.error('║ 2. Configure a different port in your config.json: ║');
|
|
217
|
+
log.error('║ "bridge": { ║');
|
|
218
|
+
log.error('║ "matter": { ║');
|
|
219
|
+
log.error('║ "port": <different-port> ║');
|
|
220
|
+
log.error('║ } ║');
|
|
221
|
+
log.error('║ } ║');
|
|
222
|
+
log.error('╚════════════════════════════════════════════════════════════════════════════╝');
|
|
223
|
+
log.error('');
|
|
224
|
+
}
|
|
201
225
|
}
|
|
202
226
|
}
|
|
203
227
|
/**
|
|
@@ -218,7 +242,7 @@ export class Server {
|
|
|
218
242
|
serialNumber: commissioningInfo.serialNumber,
|
|
219
243
|
passcode: commissioningInfo.passcode,
|
|
220
244
|
discriminator: commissioningInfo.discriminator,
|
|
221
|
-
name:
|
|
245
|
+
name: `${this.config.bridge.name} (Matter)`,
|
|
222
246
|
plugin: 'main-bridge',
|
|
223
247
|
identifier: 'main-bridge',
|
|
224
248
|
deviceCount: this.matterServer.getAccessories().length,
|
|
@@ -242,7 +266,6 @@ export class Server {
|
|
|
242
266
|
}
|
|
243
267
|
publishBridge() {
|
|
244
268
|
this.bridgeService.publishBridge();
|
|
245
|
-
// Main bridge always has a pin (validated in loadConfig)
|
|
246
269
|
this.printSetupInfo(this.config.bridge.pin);
|
|
247
270
|
}
|
|
248
271
|
handlePublishExternalAccessories(accessories) {
|
|
@@ -322,7 +345,6 @@ export class Server {
|
|
|
322
345
|
bridge.username = bridge.username || defaultBridge.username;
|
|
323
346
|
bridge.pin = bridge.pin || defaultBridge.pin;
|
|
324
347
|
config.bridge = bridge;
|
|
325
|
-
// Main bridge username is always required and must be valid
|
|
326
348
|
const username = config.bridge.username;
|
|
327
349
|
if (!validMacAddress(username)) {
|
|
328
350
|
throw new Error(`Not a valid username: ${username}. Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.`);
|
|
@@ -342,10 +364,6 @@ export class Server {
|
|
|
342
364
|
if (config.bridge.matter || config.platforms.some((p) => p._bridge?.matter) || config.accessories.some((a) => a._bridge?.matter)) {
|
|
343
365
|
// Validate main bridge Matter config
|
|
344
366
|
if (config.bridge.matter) {
|
|
345
|
-
// Apply default name before validation if not set
|
|
346
|
-
if (!config.bridge.matter.name) {
|
|
347
|
-
config.bridge.matter.name = config.bridge.name ? `${config.bridge.name} (Matter)` : 'Homebridge Matter Bridge';
|
|
348
|
-
}
|
|
349
367
|
const validation = MatterConfigValidator.validate(config.bridge.matter);
|
|
350
368
|
if (!validation.isValid) {
|
|
351
369
|
log.error('Main bridge Matter configuration is invalid. Matter will not be enabled for the main bridge.');
|
|
@@ -434,37 +452,29 @@ export class Server {
|
|
|
434
452
|
}
|
|
435
453
|
const logger = Logger.withPrefix(displayName);
|
|
436
454
|
logger('Initializing %s accessory...', accessoryIdentifier);
|
|
437
|
-
// Handle child bridge (HAP, Matter-only, or HAP+Matter)
|
|
438
455
|
if (accessoryConfig._bridge) {
|
|
439
|
-
//
|
|
440
|
-
|
|
441
|
-
accessoryConfig._bridge.username = accessoryConfig._bridge.username.toUpperCase();
|
|
442
|
-
}
|
|
443
|
-
// Generate unique key for this child bridge
|
|
444
|
-
const bridgeKey = this.getChildBridgeKey("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, plugin.getPluginIdentifier(), accessoryConfig._bridge);
|
|
456
|
+
// ensure the username is always uppercase
|
|
457
|
+
accessoryConfig._bridge.username = accessoryConfig._bridge.username.toUpperCase();
|
|
445
458
|
try {
|
|
446
|
-
this.validateChildBridgeConfig("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier,
|
|
459
|
+
this.validateChildBridgeConfig("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, accessoryConfig._bridge);
|
|
447
460
|
}
|
|
448
461
|
catch (error) {
|
|
449
462
|
log.error(error.message);
|
|
450
463
|
return;
|
|
451
464
|
}
|
|
452
465
|
let childBridge;
|
|
453
|
-
if (this.childBridges.has(
|
|
454
|
-
childBridge = this.childBridges.get(
|
|
455
|
-
logger(`Adding to existing child bridge ${
|
|
466
|
+
if (this.childBridges.has(accessoryConfig._bridge.username)) {
|
|
467
|
+
childBridge = this.childBridges.get(accessoryConfig._bridge.username);
|
|
468
|
+
logger(`Adding to existing child bridge ${accessoryConfig._bridge.username}`);
|
|
456
469
|
}
|
|
457
470
|
else {
|
|
458
|
-
|
|
459
|
-
logger(`Initializing ${bridgeType} child bridge ${bridgeKey}`);
|
|
471
|
+
logger(`Initializing child bridge ${accessoryConfig._bridge.username}`);
|
|
460
472
|
childBridge = new ChildBridgeService("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, plugin, accessoryConfig._bridge, this.config, this.options, this.api, this.ipcService, this.externalPortService);
|
|
461
|
-
this.childBridges.set(
|
|
473
|
+
this.childBridges.set(accessoryConfig._bridge.username, childBridge);
|
|
462
474
|
}
|
|
463
475
|
// add config to child bridge service
|
|
464
476
|
childBridge.addConfig(accessoryConfig);
|
|
465
|
-
|
|
466
|
-
// to maintain isolation - each child process manages its own Matter server
|
|
467
|
-
return; // Done - child bridge
|
|
477
|
+
return;
|
|
468
478
|
}
|
|
469
479
|
const accessoryInstance = new constructor(logger, accessoryConfig, this.api);
|
|
470
480
|
// pass accessoryIdentifier for UUID generation, and optional parameter uuid_base which can be used instead of displayName for UUID generation
|
|
@@ -521,29 +531,21 @@ export class Server {
|
|
|
521
531
|
}
|
|
522
532
|
const logger = Logger.withPrefix(displayName);
|
|
523
533
|
logger('Initializing %s platform...', platformIdentifier);
|
|
524
|
-
// Handle child bridge (HAP, Matter-only, or HAP+Matter)
|
|
525
534
|
if (platformConfig._bridge) {
|
|
526
|
-
//
|
|
527
|
-
|
|
528
|
-
platformConfig._bridge.username = platformConfig._bridge.username.toUpperCase();
|
|
529
|
-
}
|
|
530
|
-
// Generate unique key for this child bridge
|
|
531
|
-
const bridgeKey = this.getChildBridgeKey("platform" /* PluginType.PLATFORM */, platformIdentifier, plugin.getPluginIdentifier(), platformConfig._bridge);
|
|
535
|
+
// ensure the username is always uppercase
|
|
536
|
+
platformConfig._bridge.username = platformConfig._bridge.username.toUpperCase();
|
|
532
537
|
try {
|
|
533
|
-
this.validateChildBridgeConfig("platform" /* PluginType.PLATFORM */, platformIdentifier,
|
|
538
|
+
this.validateChildBridgeConfig("platform" /* PluginType.PLATFORM */, platformIdentifier, platformConfig._bridge);
|
|
534
539
|
}
|
|
535
540
|
catch (error) {
|
|
536
541
|
log.error(error.message);
|
|
537
542
|
return;
|
|
538
543
|
}
|
|
539
|
-
|
|
540
|
-
logger(`Initializing ${bridgeType} child bridge ${bridgeKey}`);
|
|
544
|
+
logger(`Initializing child bridge ${platformConfig._bridge.username}`);
|
|
541
545
|
const childBridge = new ChildBridgeService("platform" /* PluginType.PLATFORM */, platformIdentifier, plugin, platformConfig._bridge, this.config, this.options, this.api, this.ipcService, this.externalPortService);
|
|
542
|
-
this.childBridges.set(
|
|
546
|
+
this.childBridges.set(platformConfig._bridge.username, childBridge);
|
|
543
547
|
// add config to child bridge service
|
|
544
548
|
childBridge.addConfig(platformConfig);
|
|
545
|
-
// Matter for child bridges is handled inside the forked child process (childBridgeFork.ts)
|
|
546
|
-
// to maintain isolation - each child process manages its own Matter server
|
|
547
549
|
return;
|
|
548
550
|
}
|
|
549
551
|
const platform = new constructor(logger, platformConfig, this.api);
|
|
@@ -560,48 +562,21 @@ export class Server {
|
|
|
560
562
|
});
|
|
561
563
|
return promises;
|
|
562
564
|
}
|
|
563
|
-
/**
|
|
564
|
-
* Generate a unique identifier for a child bridge
|
|
565
|
-
* - For HAP bridges: returns the uppercase MAC address
|
|
566
|
-
* - For Matter-only bridges: returns "matter-{plugin}-{identifier}"
|
|
567
|
-
*/
|
|
568
|
-
getChildBridgeKey(type, identifier, pluginName, bridgeConfig) {
|
|
569
|
-
if (bridgeConfig.matterOnly) {
|
|
570
|
-
// Matter-only bridge: generate identifier from plugin and platform/accessory name
|
|
571
|
-
return `matter-${pluginName}-${identifier}`;
|
|
572
|
-
}
|
|
573
|
-
// HAP bridge: use MAC address (already validated and uppercased)
|
|
574
|
-
return bridgeConfig.username.toUpperCase();
|
|
575
|
-
}
|
|
576
565
|
/**
|
|
577
566
|
* Validate an external bridge config
|
|
578
567
|
*/
|
|
579
|
-
validateChildBridgeConfig(type, identifier,
|
|
580
|
-
//
|
|
581
|
-
if (bridgeConfig.matterOnly) {
|
|
582
|
-
if (!bridgeConfig.matter) {
|
|
583
|
-
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
584
|
-
+ 'Matter-only bridge must have a "matter" configuration block in _bridge.matter.');
|
|
585
|
-
}
|
|
586
|
-
// Check for duplicate Matter-only bridges
|
|
587
|
-
if (this.childBridges.has(bridgeKey)) {
|
|
588
|
-
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
589
|
-
+ 'A Matter-only bridge with this plugin and platform/accessory combination already exists. Each Matter-only bridge must be unique.');
|
|
590
|
-
}
|
|
591
|
-
// Matter-only bridges don't need username/pin validation
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
// HAP bridges (or HAP+Matter bridges) require username and pin
|
|
568
|
+
validateChildBridgeConfig(type, identifier, bridgeConfig) {
|
|
569
|
+
// All child bridges require username
|
|
595
570
|
if (!bridgeConfig.username) {
|
|
596
571
|
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
597
|
-
+ 'Missing required field "_bridge.username".
|
|
572
|
+
+ 'Missing required field "_bridge.username".');
|
|
598
573
|
}
|
|
599
574
|
if (!validMacAddress(bridgeConfig.username)) {
|
|
600
575
|
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
601
576
|
+ `not a valid username in _bridge.username: "${bridgeConfig.username}". Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.`);
|
|
602
577
|
}
|
|
603
|
-
if (this.childBridges.has(
|
|
604
|
-
const childBridge = this.childBridges.get(
|
|
578
|
+
if (this.childBridges.has(bridgeConfig.username)) {
|
|
579
|
+
const childBridge = this.childBridges.get(bridgeConfig.username);
|
|
605
580
|
if (type === "platform" /* PluginType.PLATFORM */) {
|
|
606
581
|
// only a single platform can exist on one child bridge
|
|
607
582
|
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
@@ -613,8 +588,6 @@ export class Server {
|
|
|
613
588
|
+ `Duplicate username found in _bridge.username: "${bridgeConfig.username}". You can only group accessories of the same type in a child bridge.`);
|
|
614
589
|
}
|
|
615
590
|
}
|
|
616
|
-
// Check that child bridge username doesn't conflict with main bridge
|
|
617
|
-
// Main bridge always has a username (validated in loadConfig)
|
|
618
591
|
if (bridgeConfig.username === this.config.bridge.username.toUpperCase()) {
|
|
619
592
|
throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
|
|
620
593
|
+ `Username found in _bridge.username: "${bridgeConfig.username}" is the same as the main bridge. Each child bridge platform/accessory must have it's own unique username.`);
|
|
@@ -631,9 +604,7 @@ export class Server {
|
|
|
631
604
|
// noinspection SuspiciousTypeOfGuard
|
|
632
605
|
if (typeof username === 'string') {
|
|
633
606
|
const childBridge = this.childBridges.get(username.toUpperCase());
|
|
634
|
-
|
|
635
|
-
childBridge.restartChildBridge();
|
|
636
|
-
}
|
|
607
|
+
childBridge?.restartChildBridge();
|
|
637
608
|
}
|
|
638
609
|
});
|
|
639
610
|
// handle stop child bridge event
|
|
@@ -641,9 +612,7 @@ export class Server {
|
|
|
641
612
|
// noinspection SuspiciousTypeOfGuard
|
|
642
613
|
if (typeof username === 'string') {
|
|
643
614
|
const childBridge = this.childBridges.get(username.toUpperCase());
|
|
644
|
-
|
|
645
|
-
childBridge.stopChildBridge();
|
|
646
|
-
}
|
|
615
|
+
childBridge?.stopChildBridge();
|
|
647
616
|
}
|
|
648
617
|
});
|
|
649
618
|
// handle start child bridge event
|
|
@@ -651,9 +620,7 @@ export class Server {
|
|
|
651
620
|
// noinspection SuspiciousTypeOfGuard
|
|
652
621
|
if (typeof username === 'string') {
|
|
653
622
|
const childBridge = this.childBridges.get(username.toUpperCase());
|
|
654
|
-
|
|
655
|
-
childBridge.startChildBridge();
|
|
656
|
-
}
|
|
623
|
+
childBridge?.startChildBridge();
|
|
657
624
|
}
|
|
658
625
|
});
|
|
659
626
|
this.ipcService.on("childBridgeMetadataRequest" /* IpcIncomingEvent.CHILD_BRIDGE_METADATA_REQUEST */, () => {
|
|
@@ -713,6 +680,17 @@ export class Server {
|
|
|
713
680
|
}
|
|
714
681
|
});
|
|
715
682
|
this.ipcService.on("matterBridgeMetadataRequest" /* IpcIncomingEvent.MATTER_BRIDGE_METADATA_REQUEST */, () => {
|
|
683
|
+
/**
|
|
684
|
+
* Sanitize Matter bridge identifier to match MatterServer filesystem sanitization
|
|
685
|
+
* Must match the logic in MatterServer: lowercase, replace non-alphanumeric with dashes
|
|
686
|
+
*/
|
|
687
|
+
const sanitizeMatterId = (id) => {
|
|
688
|
+
return id
|
|
689
|
+
.replace(/[^a-z0-9]/gi, '-')
|
|
690
|
+
.replace(/-+/g, '-')
|
|
691
|
+
.replace(/^-|-$/g, '')
|
|
692
|
+
.toLowerCase();
|
|
693
|
+
};
|
|
716
694
|
const matterBridges = [];
|
|
717
695
|
// Add main bridge Matter metadata if enabled
|
|
718
696
|
if (this.matterServer && this.matterServer.isServerRunning()) {
|
|
@@ -738,8 +716,8 @@ export class Server {
|
|
|
738
716
|
const matterConfig = childBridge.getMatterConfig();
|
|
739
717
|
if (matterInfo && matterConfig) {
|
|
740
718
|
const metadata = childBridge.getMetadata();
|
|
741
|
-
//
|
|
742
|
-
const childIdentifier =
|
|
719
|
+
// Sanitize the Matter identifier to match filesystem (lowercase, dashes)
|
|
720
|
+
const childIdentifier = sanitizeMatterId(metadata.matterIdentifier);
|
|
743
721
|
// Populate cache for efficient lookups
|
|
744
722
|
this.matterBridgeCache.set(childIdentifier, childBridge);
|
|
745
723
|
matterBridges.push({
|
|
@@ -749,7 +727,7 @@ export class Server {
|
|
|
749
727
|
setupUri: matterInfo.qrCode,
|
|
750
728
|
pin: matterInfo.manualPairingCode,
|
|
751
729
|
serialNumber: matterInfo.serialNumber,
|
|
752
|
-
name:
|
|
730
|
+
name: metadata.name,
|
|
753
731
|
plugin: metadata.plugin,
|
|
754
732
|
identifier: childIdentifier,
|
|
755
733
|
commissioned: matterInfo.commissioned,
|
|
@@ -760,18 +738,6 @@ export class Server {
|
|
|
760
738
|
}
|
|
761
739
|
this.ipcService.sendMessage("matterBridgeMetadataResponse" /* IpcOutgoingEvent.MATTER_BRIDGE_METADATA_RESPONSE */, matterBridges);
|
|
762
740
|
});
|
|
763
|
-
this.ipcService.on("matterAccessoriesRequest" /* IpcIncomingEvent.MATTER_ACCESSORIES_REQUEST */, () => {
|
|
764
|
-
// Return Matter accessories from all bridges
|
|
765
|
-
const allMatterAccessories = {
|
|
766
|
-
children: {},
|
|
767
|
-
};
|
|
768
|
-
// Add main bridge accessories
|
|
769
|
-
if (this.matterServer) {
|
|
770
|
-
allMatterAccessories.children['main-bridge'] = this.matterServer.getAccessories();
|
|
771
|
-
}
|
|
772
|
-
// Child bridge accessories are managed by child processes
|
|
773
|
-
this.ipcService.sendMessage("matterAccessoriesResponse" /* IpcOutgoingEvent.MATTER_ACCESSORIES_RESPONSE */, allMatterAccessories);
|
|
774
|
-
});
|
|
775
741
|
this.ipcService.on("matterCommissioningInfoRequest" /* IpcIncomingEvent.MATTER_COMMISSIONING_INFO_REQUEST */, (matterBridgeId) => {
|
|
776
742
|
let rawInfo = { commissioned: false };
|
|
777
743
|
// Handle main bridge
|
|
@@ -805,22 +771,24 @@ export class Server {
|
|
|
805
771
|
});
|
|
806
772
|
}
|
|
807
773
|
printSetupInfo(pin) {
|
|
808
|
-
|
|
809
|
-
log
|
|
774
|
+
/* eslint-disable no-console */
|
|
775
|
+
console.log('Setup Payload:');
|
|
776
|
+
console.log(this.bridgeService.bridge.setupURI());
|
|
810
777
|
if (!this.options.hideQRCode) {
|
|
811
|
-
log
|
|
778
|
+
console.log('Scan this code with your HomeKit app on your iOS device to pair with Homebridge:');
|
|
812
779
|
qrcode.setErrorLevel('M'); // HAP specifies level M or higher for ECC
|
|
813
780
|
qrcode.generate(this.bridgeService.bridge.setupURI());
|
|
814
|
-
log
|
|
781
|
+
console.log('Or enter this code with your HomeKit app on your iOS device to pair with Homebridge:');
|
|
815
782
|
}
|
|
816
783
|
else {
|
|
817
|
-
log
|
|
784
|
+
console.log('Enter this code with your HomeKit app on your iOS device to pair with Homebridge:');
|
|
818
785
|
}
|
|
819
|
-
log
|
|
820
|
-
log
|
|
821
|
-
log
|
|
822
|
-
log
|
|
823
|
-
log
|
|
786
|
+
console.log(chalk.black.bgWhite(' '));
|
|
787
|
+
console.log(chalk.black.bgWhite(' ┌────────────┐ '));
|
|
788
|
+
console.log(chalk.black.bgWhite(` │ ${pin} │ `));
|
|
789
|
+
console.log(chalk.black.bgWhite(' └────────────┘ '));
|
|
790
|
+
console.log(chalk.black.bgWhite(' '));
|
|
791
|
+
/* eslint-enable no-console */
|
|
824
792
|
}
|
|
825
793
|
}
|
|
826
794
|
//# sourceMappingURL=server.js.map
|