homebridge 2.0.0-beta.3 → 2.0.0-beta.30
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/README.md +16 -17
- package/bin/homebridge.js +22 -0
- package/config-sample.json +3 -3
- package/{lib → dist}/api.d.ts +23 -40
- package/dist/api.d.ts.map +1 -0
- package/{lib → dist}/api.js +38 -64
- package/dist/api.js.map +1 -0
- package/{lib → dist}/bridgeService.d.ts +15 -8
- package/dist/bridgeService.d.ts.map +1 -0
- package/{lib → dist}/bridgeService.js +84 -114
- package/dist/bridgeService.js.map +1 -0
- package/{lib → dist}/childBridgeFork.d.ts +4 -3
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/{lib → dist}/childBridgeFork.js +38 -41
- package/dist/childBridgeFork.js.map +1 -0
- package/{lib → dist}/childBridgeService.d.ts +11 -7
- package/dist/childBridgeService.d.ts.map +1 -0
- package/{lib → dist}/childBridgeService.js +89 -66
- package/dist/childBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -0
- package/dist/cli.js.map +1 -0
- package/{lib → dist}/externalPortService.d.ts +2 -2
- package/{lib → dist}/externalPortService.d.ts.map +1 -1
- package/{lib → dist}/externalPortService.js +4 -9
- package/dist/externalPortService.js.map +1 -0
- package/{lib → dist}/index.d.ts +29 -29
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/{lib → dist}/ipcService.d.ts +2 -5
- package/dist/ipcService.d.ts.map +1 -0
- package/{lib → dist}/ipcService.js +12 -12
- package/dist/ipcService.js.map +1 -0
- package/{lib → dist}/logger.d.ts +6 -6
- package/dist/logger.d.ts.map +1 -0
- package/{lib → dist}/logger.js +19 -28
- package/dist/logger.js.map +1 -0
- package/{lib → dist}/platformAccessory.d.ts +8 -6
- package/dist/platformAccessory.d.ts.map +1 -0
- package/{lib → dist}/platformAccessory.js +19 -16
- package/dist/platformAccessory.js.map +1 -0
- package/{lib → dist}/plugin.d.ts +2 -3
- package/dist/plugin.d.ts.map +1 -0
- package/{lib → dist}/plugin.js +39 -51
- package/dist/plugin.js.map +1 -0
- package/{lib → dist}/pluginManager.d.ts +3 -3
- package/dist/pluginManager.d.ts.map +1 -0
- package/{lib → dist}/pluginManager.js +76 -81
- package/dist/pluginManager.js.map +1 -0
- package/dist/server.d.ts.map +1 -0
- package/{lib → dist}/server.js +92 -116
- package/dist/server.js.map +1 -0
- package/{lib → dist}/storageService.d.ts.map +1 -1
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/{lib → dist}/user.d.ts.map +1 -1
- package/dist/user.js +29 -0
- package/dist/user.js.map +1 -0
- package/{lib → dist}/util/mac.d.ts +1 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +46 -48
- package/bin/homebridge +0 -17
- package/lib/api.d.ts.map +0 -1
- package/lib/api.js.map +0 -1
- package/lib/bridgeService.d.ts.map +0 -1
- package/lib/bridgeService.js.map +0 -1
- package/lib/childBridgeFork.d.ts.map +0 -1
- package/lib/childBridgeFork.js.map +0 -1
- package/lib/childBridgeService.d.ts.map +0 -1
- package/lib/childBridgeService.js.map +0 -1
- package/lib/cli.d.ts +0 -4
- package/lib/cli.d.ts.map +0 -1
- package/lib/cli.js +0 -111
- package/lib/cli.js.map +0 -1
- package/lib/externalPortService.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -72
- package/lib/index.js.map +0 -1
- package/lib/ipcService.d.ts.map +0 -1
- package/lib/ipcService.js.map +0 -1
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js.map +0 -1
- package/lib/platformAccessory.d.ts.map +0 -1
- package/lib/platformAccessory.js.map +0 -1
- package/lib/plugin.d.ts.map +0 -1
- package/lib/plugin.js.map +0 -1
- package/lib/pluginManager.d.ts.map +0 -1
- package/lib/pluginManager.js.map +0 -1
- package/lib/server.d.ts.map +0 -1
- package/lib/server.js.map +0 -1
- package/lib/storageService.js +0 -70
- package/lib/storageService.js.map +0 -1
- package/lib/user.js +0 -36
- package/lib/user.js.map +0 -1
- package/lib/util/mac.d.ts.map +0 -1
- package/lib/util/mac.js +0 -20
- package/lib/util/mac.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js +0 -21
- package/lib/version.js.map +0 -1
- /package/{lib → dist}/server.d.ts +0 -0
- /package/{lib → dist}/storageService.d.ts +0 -0
- /package/{lib → dist}/user.d.ts +0 -0
- /package/{lib → dist}/version.d.ts +0 -0
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/* global NodeJS */
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import { HAPStorage } from 'hap-nodejs';
|
|
4
|
+
import { HomebridgeAPI } from './api.js';
|
|
5
|
+
import { BridgeService } from './bridgeService.js';
|
|
6
|
+
import { ChildBridgeExternalPortService } from './externalPortService.js';
|
|
7
|
+
import { Logger } from './logger.js';
|
|
8
|
+
import { PluginManager } from './pluginManager.js';
|
|
9
|
+
import { User } from './user.js';
|
|
10
|
+
import 'source-map-support/register.js';
|
|
4
11
|
/**
|
|
5
12
|
* This is a standalone script executed as a child process fork
|
|
6
13
|
*/
|
|
7
|
-
process.title =
|
|
8
|
-
|
|
9
|
-
require("source-map-support/register");
|
|
10
|
-
const hap_nodejs_1 = require("hap-nodejs");
|
|
11
|
-
const api_1 = require("./api");
|
|
12
|
-
const bridgeService_1 = require("./bridgeService");
|
|
13
|
-
const externalPortService_1 = require("./externalPortService");
|
|
14
|
-
const logger_1 = require("./logger");
|
|
15
|
-
const pluginManager_1 = require("./pluginManager");
|
|
16
|
-
const user_1 = require("./user");
|
|
17
|
-
class ChildBridgeFork {
|
|
14
|
+
process.title = 'homebridge: child bridge';
|
|
15
|
+
export class ChildBridgeFork {
|
|
18
16
|
bridgeService;
|
|
19
17
|
api;
|
|
20
18
|
pluginManager;
|
|
@@ -53,23 +51,23 @@ class ChildBridgeFork {
|
|
|
53
51
|
}
|
|
54
52
|
// set bridge settings (inherited from main bridge)
|
|
55
53
|
if (this.bridgeOptions.noLogTimestamps) {
|
|
56
|
-
|
|
54
|
+
Logger.setTimestampEnabled(false);
|
|
57
55
|
}
|
|
58
56
|
if (this.bridgeOptions.debugModeEnabled) {
|
|
59
|
-
|
|
57
|
+
Logger.setDebugEnabled(true);
|
|
60
58
|
}
|
|
61
59
|
if (this.bridgeOptions.forceColourLogging) {
|
|
62
|
-
|
|
60
|
+
Logger.forceColor();
|
|
63
61
|
}
|
|
64
62
|
if (this.bridgeOptions.customStoragePath) {
|
|
65
|
-
|
|
63
|
+
User.setStoragePath(this.bridgeOptions.customStoragePath);
|
|
66
64
|
}
|
|
67
65
|
// Initialize HAP-NodeJS with a custom persist directory
|
|
68
|
-
|
|
66
|
+
HAPStorage.setCustomStoragePath(User.persistPath());
|
|
69
67
|
// load api
|
|
70
|
-
this.api = new
|
|
71
|
-
this.pluginManager = new
|
|
72
|
-
this.externalPortService = new
|
|
68
|
+
this.api = new HomebridgeAPI();
|
|
69
|
+
this.pluginManager = new PluginManager(this.api);
|
|
70
|
+
this.externalPortService = new ChildBridgeExternalPortService(this);
|
|
73
71
|
// load plugin
|
|
74
72
|
this.plugin = this.pluginManager.loadPlugin(data.pluginPath);
|
|
75
73
|
await this.plugin.load();
|
|
@@ -81,7 +79,7 @@ class ChildBridgeFork {
|
|
|
81
79
|
});
|
|
82
80
|
}
|
|
83
81
|
async startBridge() {
|
|
84
|
-
this.bridgeService = new
|
|
82
|
+
this.bridgeService = new BridgeService(this.api, this.pluginManager, this.externalPortService, this.bridgeOptions, this.bridgeConfig, this.homebridgeConfig);
|
|
85
83
|
// watch bridge events to check when server is online
|
|
86
84
|
this.bridgeService.bridge.on("advertised" /* AccessoryEventTypes.ADVERTISED */, () => {
|
|
87
85
|
this.sendPairedStatusEvent();
|
|
@@ -100,13 +98,13 @@ class ChildBridgeFork {
|
|
|
100
98
|
if (this.type === "platform" /* PluginType.PLATFORM */) {
|
|
101
99
|
const plugin = this.pluginManager.getPluginForPlatform(this.identifier);
|
|
102
100
|
const displayName = config.name || plugin.getPluginIdentifier();
|
|
103
|
-
const logger =
|
|
101
|
+
const logger = Logger.withPrefix(displayName);
|
|
104
102
|
const constructor = plugin.getPlatformConstructor(this.identifier);
|
|
105
103
|
const platform = new constructor(logger, config, this.api);
|
|
106
|
-
if (
|
|
104
|
+
if (HomebridgeAPI.isDynamicPlatformPlugin(platform)) {
|
|
107
105
|
plugin.assignDynamicPlatform(this.identifier, platform);
|
|
108
106
|
}
|
|
109
|
-
else if (
|
|
107
|
+
else if (HomebridgeAPI.isStaticPlatformPlugin(platform)) { // Plugin 1.0, load accessories
|
|
110
108
|
await this.bridgeService.loadPlatformAccessories(plugin, platform, this.identifier, logger);
|
|
111
109
|
}
|
|
112
110
|
else {
|
|
@@ -118,19 +116,19 @@ class ChildBridgeFork {
|
|
|
118
116
|
const plugin = this.pluginManager.getPluginForAccessory(this.identifier);
|
|
119
117
|
const displayName = config.name;
|
|
120
118
|
if (!displayName) {
|
|
121
|
-
|
|
119
|
+
Logger.internal.warn('Could not load accessory %s as it is missing the required \'name\' property!', this.identifier);
|
|
122
120
|
return;
|
|
123
121
|
}
|
|
124
|
-
const logger =
|
|
122
|
+
const logger = Logger.withPrefix(displayName);
|
|
125
123
|
const constructor = plugin.getAccessoryConstructor(this.identifier);
|
|
126
124
|
const accessoryInstance = new constructor(logger, config, this.api);
|
|
127
|
-
//pass accessoryIdentifier for UUID generation, and optional parameter uuid_base which can be used instead of displayName for UUID generation
|
|
125
|
+
// pass accessoryIdentifier for UUID generation, and optional parameter uuid_base which can be used instead of displayName for UUID generation
|
|
128
126
|
const accessory = this.bridgeService.createHAPAccessory(plugin, accessoryInstance, displayName, this.identifier, config.uuid_base);
|
|
129
127
|
if (accessory) {
|
|
130
128
|
this.bridgeService.bridge.addBridgedAccessory(accessory);
|
|
131
129
|
}
|
|
132
130
|
else {
|
|
133
|
-
logger(
|
|
131
|
+
logger('Accessory %s returned empty set of services. Won\'t adding it to the bridge!', this.identifier);
|
|
134
132
|
}
|
|
135
133
|
}
|
|
136
134
|
}
|
|
@@ -148,7 +146,7 @@ class ChildBridgeFork {
|
|
|
148
146
|
async requestExternalPort(username) {
|
|
149
147
|
return new Promise((resolve) => {
|
|
150
148
|
const requestTimeout = setTimeout(() => {
|
|
151
|
-
|
|
149
|
+
Logger.internal.warn('Parent process did not respond to port allocation request within 5 seconds - assigning random port.');
|
|
152
150
|
resolve(undefined);
|
|
153
151
|
}, 5000);
|
|
154
152
|
// setup callback
|
|
@@ -185,7 +183,6 @@ class ChildBridgeFork {
|
|
|
185
183
|
this.bridgeService.teardown();
|
|
186
184
|
}
|
|
187
185
|
}
|
|
188
|
-
exports.ChildBridgeFork = ChildBridgeFork;
|
|
189
186
|
/**
|
|
190
187
|
* Start Self
|
|
191
188
|
*/
|
|
@@ -193,8 +190,8 @@ const childPluginFork = new ChildBridgeFork();
|
|
|
193
190
|
/**
|
|
194
191
|
* Handle incoming IPC messages from the parent Homebridge process
|
|
195
192
|
*/
|
|
196
|
-
process.on(
|
|
197
|
-
if (typeof message !==
|
|
193
|
+
process.on('message', (message) => {
|
|
194
|
+
if (typeof message !== 'object' || !message.id) {
|
|
198
195
|
return;
|
|
199
196
|
}
|
|
200
197
|
switch (message.id) {
|
|
@@ -216,28 +213,28 @@ process.on("message", (message) => {
|
|
|
216
213
|
* Handle the sigterm shutdown signals
|
|
217
214
|
*/
|
|
218
215
|
let shuttingDown = false;
|
|
219
|
-
|
|
216
|
+
function signalHandler(signal, signalNum) {
|
|
220
217
|
if (shuttingDown) {
|
|
221
218
|
return;
|
|
222
219
|
}
|
|
223
220
|
shuttingDown = true;
|
|
224
|
-
|
|
221
|
+
Logger.internal.info('Got %s, shutting down child bridge process...', signal);
|
|
225
222
|
try {
|
|
226
223
|
childPluginFork.shutdown();
|
|
227
224
|
}
|
|
228
|
-
catch (
|
|
225
|
+
catch (error) {
|
|
229
226
|
// do nothing
|
|
230
227
|
}
|
|
231
228
|
setTimeout(() => process.exit(128 + signalNum), 5000);
|
|
232
|
-
}
|
|
233
|
-
process.on(
|
|
234
|
-
process.on(
|
|
229
|
+
}
|
|
230
|
+
process.on('SIGINT', signalHandler.bind(undefined, 'SIGINT', 2));
|
|
231
|
+
process.on('SIGTERM', signalHandler.bind(undefined, 'SIGTERM', 15));
|
|
235
232
|
/**
|
|
236
233
|
* Ensure orphaned processes are cleaned up
|
|
237
234
|
*/
|
|
238
235
|
setInterval(() => {
|
|
239
236
|
if (!process.connected) {
|
|
240
|
-
|
|
237
|
+
Logger.internal.info('Parent process not connected, terminating process...');
|
|
241
238
|
process.exit(1);
|
|
242
239
|
}
|
|
243
240
|
}, 5000);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childBridgeFork.js","sourceRoot":"","sources":["../src/childBridgeFork.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { MacAddress } from
|
|
2
|
-
import { HomebridgeAPI
|
|
3
|
-
import { AccessoryConfig, BridgeConfiguration, BridgeOptions, HomebridgeConfig, PlatformConfig } from
|
|
4
|
-
import { ExternalPortService } from
|
|
5
|
-
import { IpcService } from
|
|
6
|
-
import { Plugin } from
|
|
7
|
-
import { HomebridgeOptions } from
|
|
1
|
+
import type { MacAddress } from 'hap-nodejs';
|
|
2
|
+
import type { HomebridgeAPI } from './api.js';
|
|
3
|
+
import type { AccessoryConfig, BridgeConfiguration, BridgeOptions, HomebridgeConfig, PlatformConfig } from './bridgeService.js';
|
|
4
|
+
import type { ExternalPortService } from './externalPortService.js';
|
|
5
|
+
import type { IpcService } from './ipcService.js';
|
|
6
|
+
import type { Plugin } from './plugin.js';
|
|
7
|
+
import type { HomebridgeOptions } from './server.js';
|
|
8
|
+
import { PluginType } from './api.js';
|
|
8
9
|
export declare const enum ChildProcessMessageEventType {
|
|
9
10
|
/**
|
|
10
11
|
* Sent from the child process when it is ready to accept config
|
|
@@ -85,6 +86,7 @@ export interface ChildMetadata {
|
|
|
85
86
|
paired?: boolean | null;
|
|
86
87
|
setupUri?: string | null;
|
|
87
88
|
username: MacAddress;
|
|
89
|
+
port?: number;
|
|
88
90
|
pin: string;
|
|
89
91
|
name: string;
|
|
90
92
|
plugin: string;
|
|
@@ -117,6 +119,8 @@ export declare class ChildBridgeService {
|
|
|
117
119
|
private pluginConfig;
|
|
118
120
|
private log;
|
|
119
121
|
private displayName?;
|
|
122
|
+
private restartCount;
|
|
123
|
+
private readonly maxRestarts;
|
|
120
124
|
constructor(type: PluginType, identifier: string, plugin: Plugin, bridgeConfig: BridgeConfiguration, homebridgeConfig: HomebridgeConfig, homebridgeOptions: HomebridgeOptions, api: HomebridgeAPI, ipcService: IpcService, externalPortService: ExternalPortService);
|
|
121
125
|
/**
|
|
122
126
|
* Start the child bridge service
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childBridgeService.d.ts","sourceRoot":"","sources":["../src/childBridgeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var ChildProcessMessageEventType;
|
|
1
|
+
import { fork } from 'node:child_process';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import { Logger } from './logger.js';
|
|
7
|
+
import { User } from './user.js';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
11
|
+
export var ChildProcessMessageEventType;
|
|
13
12
|
(function (ChildProcessMessageEventType) {
|
|
14
13
|
/**
|
|
15
14
|
* Sent from the child process when it is ready to accept config
|
|
@@ -43,8 +42,9 @@ var ChildProcessMessageEventType;
|
|
|
43
42
|
* Sent from the child to update its current status
|
|
44
43
|
*/
|
|
45
44
|
ChildProcessMessageEventType["STATUS_UPDATE"] = "status";
|
|
46
|
-
})(ChildProcessMessageEventType || (
|
|
47
|
-
|
|
45
|
+
})(ChildProcessMessageEventType || (ChildProcessMessageEventType = {}));
|
|
46
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
47
|
+
export var ChildBridgeStatus;
|
|
48
48
|
(function (ChildBridgeStatus) {
|
|
49
49
|
/**
|
|
50
50
|
* When the child bridge is loading, or restarting
|
|
@@ -58,12 +58,12 @@ var ChildBridgeStatus;
|
|
|
58
58
|
* The bridge is shutting down, or the process ended unexpectedly
|
|
59
59
|
*/
|
|
60
60
|
ChildBridgeStatus["DOWN"] = "down";
|
|
61
|
-
})(ChildBridgeStatus || (
|
|
61
|
+
})(ChildBridgeStatus || (ChildBridgeStatus = {}));
|
|
62
62
|
/**
|
|
63
63
|
* Manages the child processes of platforms/accessories being exposed as separate forked bridges.
|
|
64
64
|
* A child bridge runs a single platform or accessory.
|
|
65
65
|
*/
|
|
66
|
-
class ChildBridgeService {
|
|
66
|
+
export class ChildBridgeService {
|
|
67
67
|
type;
|
|
68
68
|
identifier;
|
|
69
69
|
plugin;
|
|
@@ -84,6 +84,8 @@ class ChildBridgeService {
|
|
|
84
84
|
pluginConfig = [];
|
|
85
85
|
log;
|
|
86
86
|
displayName;
|
|
87
|
+
restartCount = 0;
|
|
88
|
+
maxRestarts = 4;
|
|
87
89
|
constructor(type, identifier, plugin, bridgeConfig, homebridgeConfig, homebridgeOptions, api, ipcService, externalPortService) {
|
|
88
90
|
this.type = type;
|
|
89
91
|
this.identifier = identifier;
|
|
@@ -94,8 +96,8 @@ class ChildBridgeService {
|
|
|
94
96
|
this.api = api;
|
|
95
97
|
this.ipcService = ipcService;
|
|
96
98
|
this.externalPortService = externalPortService;
|
|
97
|
-
this.log =
|
|
98
|
-
this.api.on(
|
|
99
|
+
this.log = Logger.withPrefix(this.plugin.getPluginIdentifier());
|
|
100
|
+
this.api.on('shutdown', () => {
|
|
99
101
|
this.shuttingDown = true;
|
|
100
102
|
this.teardown();
|
|
101
103
|
});
|
|
@@ -117,7 +119,7 @@ class ChildBridgeService {
|
|
|
117
119
|
this.displayName = this.pluginConfig[0]?.name || this.plugin.getPluginIdentifier();
|
|
118
120
|
}
|
|
119
121
|
// re-configured log with display name
|
|
120
|
-
this.log =
|
|
122
|
+
this.log = Logger.withPrefix(this.displayName);
|
|
121
123
|
}
|
|
122
124
|
/**
|
|
123
125
|
* Add a config block to a child bridge.
|
|
@@ -139,42 +141,38 @@ class ChildBridgeService {
|
|
|
139
141
|
*/
|
|
140
142
|
startChildProcess() {
|
|
141
143
|
this.bridgeStatus = "pending" /* ChildBridgeStatus.PENDING */;
|
|
142
|
-
this.child =
|
|
143
|
-
this.child.stdout?.on(
|
|
144
|
+
this.child = fork(resolve(__dirname, 'childBridgeFork.js'), this.args, this.processEnv);
|
|
145
|
+
this.child.stdout?.on('data', (data) => {
|
|
144
146
|
process.stdout.write(data);
|
|
145
147
|
});
|
|
146
|
-
this.child.stderr?.on(
|
|
148
|
+
this.child.stderr?.on('data', (data) => {
|
|
147
149
|
process.stderr.write(data);
|
|
148
150
|
});
|
|
149
|
-
this.child.on(
|
|
150
|
-
this.log.warn("Child bridge process ended");
|
|
151
|
-
});
|
|
152
|
-
this.child.on("error", (e) => {
|
|
151
|
+
this.child.on('error', (e) => {
|
|
153
152
|
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
154
|
-
this.log.error(
|
|
153
|
+
this.log.error('Child bridge process error', e);
|
|
155
154
|
});
|
|
156
|
-
this.child.once(
|
|
157
|
-
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
155
|
+
this.child.once('close', (code, signal) => {
|
|
158
156
|
this.handleProcessClose(code, signal);
|
|
159
157
|
});
|
|
160
158
|
// handle incoming ipc messages from the child process
|
|
161
|
-
this.child.on(
|
|
162
|
-
if (typeof message !==
|
|
159
|
+
this.child.on('message', (message) => {
|
|
160
|
+
if (typeof message !== 'object' || !message.id) {
|
|
163
161
|
return;
|
|
164
162
|
}
|
|
165
163
|
switch (message.id) {
|
|
166
164
|
case "ready" /* ChildProcessMessageEventType.READY */: {
|
|
167
|
-
this.log(`
|
|
165
|
+
this.log(`Child bridge starting${this.child?.pid ? ` (pid ${this.child.pid})` : ''}...`);
|
|
168
166
|
this.loadPlugin();
|
|
169
167
|
break;
|
|
170
168
|
}
|
|
171
169
|
case "loaded" /* ChildProcessMessageEventType.LOADED */: {
|
|
172
170
|
const version = message.data.version;
|
|
173
171
|
if (this.pluginConfig.length > 1) {
|
|
174
|
-
this.log(`
|
|
172
|
+
this.log.success(`Child bridge started successfully with ${this.pluginConfig.length} accessories (plugin v${version}).`);
|
|
175
173
|
}
|
|
176
174
|
else {
|
|
177
|
-
this.log(`
|
|
175
|
+
this.log.success(`Child bridge started successfully (plugin v${version}).`);
|
|
178
176
|
}
|
|
179
177
|
this.startBridge();
|
|
180
178
|
break;
|
|
@@ -202,13 +200,35 @@ class ChildBridgeService {
|
|
|
202
200
|
* @param signal
|
|
203
201
|
*/
|
|
204
202
|
handleProcessClose(code, signal) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
203
|
+
const isLikelyPluginCrash = code === 1 && signal === null;
|
|
204
|
+
this.log.warn(`Child bridge ended (code ${code}, signal ${signal}).${isLikelyPluginCrash
|
|
205
|
+
? ' The child bridge ended unexpectedly, which is normally due to the plugin not catching its errors properly. Please report this to the plugin developer by clicking on the'
|
|
206
|
+
+ ' \'Report An Issue\' option in the plugin menu dropdown from the Homebridge UI. If there are related logs shown above, please include them in your report.'
|
|
207
|
+
: ''}`);
|
|
208
|
+
if (isLikelyPluginCrash) {
|
|
209
|
+
if (this.restartCount < this.maxRestarts) {
|
|
210
|
+
this.bridgeStatus = "pending" /* ChildBridgeStatus.PENDING */;
|
|
211
|
+
this.restartCount += 1;
|
|
212
|
+
const delay = this.restartCount * 10; // first attempt after 10 seconds, second after 20 seconds, etc.
|
|
213
|
+
this.log(`Child bridge will automatically restart in ${delay} seconds (restart attempt ${this.restartCount} of ${this.maxRestarts}).`);
|
|
214
|
+
setTimeout(() => {
|
|
215
|
+
if (!this.shuttingDown) {
|
|
216
|
+
this.startChildProcess();
|
|
217
|
+
}
|
|
218
|
+
}, delay * 1000);
|
|
210
219
|
}
|
|
211
|
-
|
|
220
|
+
else {
|
|
221
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
222
|
+
this.manuallyStopped = true;
|
|
223
|
+
this.log.error(`Child bridge will no longer restart after failing ${this.maxRestarts + 1} times, you will need to manually start this child bridge from the Homebridge UI.`);
|
|
224
|
+
}
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (!this.shuttingDown) {
|
|
228
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
229
|
+
this.restartCount = 0;
|
|
230
|
+
this.startChildProcess();
|
|
231
|
+
}
|
|
212
232
|
}
|
|
213
233
|
/**
|
|
214
234
|
* Helper function to send a message to the child process
|
|
@@ -228,26 +248,26 @@ class ChildBridgeService {
|
|
|
228
248
|
* These will be passed through to the forked process
|
|
229
249
|
*/
|
|
230
250
|
setProcessFlags() {
|
|
231
|
-
if (this.
|
|
232
|
-
this.args.push(
|
|
251
|
+
if (this.bridgeConfig.debugModeEnabled) {
|
|
252
|
+
this.args.push('-D');
|
|
233
253
|
}
|
|
234
254
|
if (this.homebridgeOptions.forceColourLogging) {
|
|
235
|
-
this.args.push(
|
|
255
|
+
this.args.push('-C');
|
|
236
256
|
}
|
|
237
257
|
if (this.homebridgeOptions.insecureAccess) {
|
|
238
|
-
this.args.push(
|
|
258
|
+
this.args.push('-I');
|
|
239
259
|
}
|
|
240
260
|
if (this.homebridgeOptions.noLogTimestamps) {
|
|
241
|
-
this.args.push(
|
|
261
|
+
this.args.push('-T');
|
|
242
262
|
}
|
|
243
263
|
if (this.homebridgeOptions.keepOrphanedCachedAccessories) {
|
|
244
|
-
this.args.push(
|
|
264
|
+
this.args.push('-K');
|
|
245
265
|
}
|
|
246
266
|
if (this.homebridgeOptions.customStoragePath) {
|
|
247
|
-
this.args.push(
|
|
267
|
+
this.args.push('-U', this.homebridgeOptions.customStoragePath);
|
|
248
268
|
}
|
|
249
269
|
if (this.homebridgeOptions.customPluginPath) {
|
|
250
|
-
this.args.push(
|
|
270
|
+
this.args.push('-P', this.homebridgeOptions.customPluginPath);
|
|
251
271
|
}
|
|
252
272
|
}
|
|
253
273
|
/**
|
|
@@ -257,8 +277,8 @@ class ChildBridgeService {
|
|
|
257
277
|
this.processEnv = {
|
|
258
278
|
env: {
|
|
259
279
|
...process.env,
|
|
260
|
-
DEBUG: `${process.env.DEBUG ||
|
|
261
|
-
NODE_OPTIONS: `${process.env.NODE_OPTIONS ||
|
|
280
|
+
DEBUG: `${process.env.DEBUG || ''} ${this.bridgeConfig.env?.DEBUG || ''}`.trim(),
|
|
281
|
+
NODE_OPTIONS: `${process.env.NODE_OPTIONS || ''} ${this.bridgeConfig.env?.NODE_OPTIONS || ''}`.trim(),
|
|
262
282
|
},
|
|
263
283
|
silent: true,
|
|
264
284
|
};
|
|
@@ -278,10 +298,11 @@ class ChildBridgeService {
|
|
|
278
298
|
manufacturer: this.bridgeConfig.manufacturer || this.homebridgeConfig.bridge.manufacturer,
|
|
279
299
|
model: this.bridgeConfig.model || this.homebridgeConfig.bridge.model,
|
|
280
300
|
firmwareRevision: this.bridgeConfig.firmwareRevision || this.homebridgeConfig.bridge.firmwareRevision,
|
|
301
|
+
serialNumber: this.bridgeConfig.serialNumber || this.bridgeConfig.username,
|
|
281
302
|
};
|
|
282
303
|
const bridgeOptions = {
|
|
283
|
-
cachedAccessoriesDir:
|
|
284
|
-
cachedAccessoriesItemName:
|
|
304
|
+
cachedAccessoriesDir: User.cachedAccessoryPath(),
|
|
305
|
+
cachedAccessoriesItemName: `cachedAccessories.${this.bridgeConfig.username.replace(/:/g, '').toUpperCase()}`,
|
|
285
306
|
};
|
|
286
307
|
// shallow copy the homebridge options to the bridge options object
|
|
287
308
|
Object.assign(bridgeOptions, this.homebridgeOptions);
|
|
@@ -314,7 +335,7 @@ class ChildBridgeService {
|
|
|
314
335
|
const port = await this.externalPortService.requestPort(request.username);
|
|
315
336
|
this.sendMessage("portAllocated" /* ChildProcessMessageEventType.PORT_ALLOCATED */, {
|
|
316
337
|
username: request.username,
|
|
317
|
-
port
|
|
338
|
+
port,
|
|
318
339
|
});
|
|
319
340
|
}
|
|
320
341
|
/**
|
|
@@ -323,7 +344,7 @@ class ChildBridgeService {
|
|
|
323
344
|
teardown() {
|
|
324
345
|
if (this.child && this.child.connected) {
|
|
325
346
|
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
326
|
-
this.child.kill(
|
|
347
|
+
this.child.kill('SIGTERM');
|
|
327
348
|
}
|
|
328
349
|
}
|
|
329
350
|
/**
|
|
@@ -337,10 +358,11 @@ class ChildBridgeService {
|
|
|
337
358
|
*/
|
|
338
359
|
restartChildBridge() {
|
|
339
360
|
if (this.manuallyStopped) {
|
|
361
|
+
this.restartCount = 0;
|
|
340
362
|
this.startChildBridge();
|
|
341
363
|
}
|
|
342
364
|
else {
|
|
343
|
-
this.log.warn(
|
|
365
|
+
this.log.warn('Child bridge restarting...');
|
|
344
366
|
this.refreshConfig();
|
|
345
367
|
this.teardown();
|
|
346
368
|
}
|
|
@@ -350,14 +372,16 @@ class ChildBridgeService {
|
|
|
350
372
|
*/
|
|
351
373
|
stopChildBridge() {
|
|
352
374
|
if (!this.shuttingDown) {
|
|
353
|
-
this.log.warn(
|
|
375
|
+
this.log.warn('Child bridge stopping, will not restart.');
|
|
354
376
|
this.shuttingDown = true;
|
|
355
377
|
this.manuallyStopped = true;
|
|
356
|
-
this.
|
|
378
|
+
this.restartCount = 0;
|
|
379
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
380
|
+
this.child?.removeAllListeners('close');
|
|
357
381
|
this.teardown();
|
|
358
382
|
}
|
|
359
383
|
else {
|
|
360
|
-
this.log.warn(
|
|
384
|
+
this.log.warn('Child bridge already shutting down or stopped.');
|
|
361
385
|
}
|
|
362
386
|
}
|
|
363
387
|
/**
|
|
@@ -365,14 +389,13 @@ class ChildBridgeService {
|
|
|
365
389
|
*/
|
|
366
390
|
startChildBridge() {
|
|
367
391
|
if (this.manuallyStopped && this.bridgeStatus === "down" /* ChildBridgeStatus.DOWN */ && (!this.child || !this.child.connected)) {
|
|
368
|
-
this.log.warn("Starting child bridge...");
|
|
369
392
|
this.refreshConfig();
|
|
370
393
|
this.startChildProcess();
|
|
371
394
|
this.shuttingDown = false;
|
|
372
395
|
this.manuallyStopped = false;
|
|
373
396
|
}
|
|
374
397
|
else {
|
|
375
|
-
this.log.warn(
|
|
398
|
+
this.log.warn('Child bridge cannot be started, it is still running or was not manually stopped.');
|
|
376
399
|
}
|
|
377
400
|
}
|
|
378
401
|
/**
|
|
@@ -380,7 +403,7 @@ class ChildBridgeService {
|
|
|
380
403
|
*/
|
|
381
404
|
async refreshConfig() {
|
|
382
405
|
try {
|
|
383
|
-
const homebridgeConfig = await
|
|
406
|
+
const homebridgeConfig = await fs.readJson(User.configPath());
|
|
384
407
|
if (this.type === "platform" /* PluginType.PLATFORM */) {
|
|
385
408
|
const config = homebridgeConfig.platforms?.filter(x => x.platform === this.identifier && x._bridge?.username === this.bridgeConfig.username);
|
|
386
409
|
if (config.length) {
|
|
@@ -388,7 +411,7 @@ class ChildBridgeService {
|
|
|
388
411
|
this.bridgeConfig = this.pluginConfig[0]._bridge || this.bridgeConfig;
|
|
389
412
|
}
|
|
390
413
|
else {
|
|
391
|
-
this.log.warn(
|
|
414
|
+
this.log.warn('Platform config could not be found, using existing config.');
|
|
392
415
|
}
|
|
393
416
|
}
|
|
394
417
|
else if (this.type === "accessory" /* PluginType.ACCESSORY */) {
|
|
@@ -398,12 +421,12 @@ class ChildBridgeService {
|
|
|
398
421
|
this.bridgeConfig = this.pluginConfig[0]._bridge || this.bridgeConfig;
|
|
399
422
|
}
|
|
400
423
|
else {
|
|
401
|
-
this.log.warn(
|
|
424
|
+
this.log.warn('Accessory config could not be found, using existing config.');
|
|
402
425
|
}
|
|
403
426
|
}
|
|
404
427
|
}
|
|
405
|
-
catch (
|
|
406
|
-
this.log.error(
|
|
428
|
+
catch (error) {
|
|
429
|
+
this.log.error('Failed to refresh plugin config:', error.message);
|
|
407
430
|
}
|
|
408
431
|
}
|
|
409
432
|
/**
|
|
@@ -415,6 +438,7 @@ class ChildBridgeService {
|
|
|
415
438
|
paired: this.pairedStatus,
|
|
416
439
|
setupUri: this.setupUri,
|
|
417
440
|
username: this.bridgeConfig.username,
|
|
441
|
+
port: this.bridgeConfig.port,
|
|
418
442
|
pin: this.bridgeConfig.pin || this.homebridgeConfig.bridge.pin,
|
|
419
443
|
name: this.bridgeConfig.name || this.displayName || this.plugin.getPluginIdentifier(),
|
|
420
444
|
plugin: this.plugin.getPluginIdentifier(),
|
|
@@ -424,5 +448,4 @@ class ChildBridgeService {
|
|
|
424
448
|
};
|
|
425
449
|
}
|
|
426
450
|
}
|
|
427
|
-
exports.ChildBridgeService = ChildBridgeService;
|
|
428
451
|
//# sourceMappingURL=childBridgeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childBridgeService.js","sourceRoot":"","sources":["../src/childBridgeService.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAeA,OAAO,gCAAgC,CAAA;AAYvC,MAAM,CAAC,OAAO,UAAU,GAAG,IAAI,IAAI,CAsFlC"}
|