homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
111 lines • 4.91 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const node_child_process_1 = require("node:child_process");
const node_path_1 = require("node:path");
const node_process_1 = __importDefault(require("node:process"));
const commander_1 = require("commander");
const semver_1 = require("semver");
let homebridge;
class HomebridgeUi {
constructor(log, config) {
this.log = log;
node_process_1.default.env.UIX_CONFIG_PATH = homebridge.user.configPath();
node_process_1.default.env.UIX_STORAGE_PATH = homebridge.user.storagePath();
node_process_1.default.env.UIX_PLUGIN_NAME = config.name || 'homebridge-config-ui-x';
const program = new commander_1.Command();
program
.allowUnknownOption()
.allowExcessArguments()
.option('-P, --plugin-path [path]', '', p => node_process_1.default.env.UIX_CUSTOM_PLUGIN_PATH = p)
.option('-I, --insecure', '', () => node_process_1.default.env.UIX_INSECURE_MODE = '1')
.option('-T, --no-timestamp', '', () => node_process_1.default.env.UIX_LOG_NO_TIMESTAMPS = '1')
.parse(node_process_1.default.argv);
if (!(0, semver_1.satisfies)(node_process_1.default.version, '>=18.15.0')) {
const msg = `Node.js v18.15.0 higher is required. You may experience issues running this plugin running on ${node_process_1.default.version}.`;
log.error(msg);
log.warn(msg);
}
if (node_process_1.default.env.UIX_SERVICE_MODE === '1' && node_process_1.default.connected) {
this.log('Running in service mode.');
}
else if (config.standalone || node_process_1.default.env.UIX_SERVICE_MODE === '1'
|| (node_process_1.default.env.HOMEBRIDGE_CONFIG_UI === '1' && (0, semver_1.satisfies)(node_process_1.default.env.CONFIG_UI_VERSION, '>=3.5.5', { includePrerelease: true }))) {
this.log.warn('*********** Homebridge Standalone Mode Is Deprecated **********');
this.log.warn('* Please swap to service mode using the hb-service command. *');
this.log.warn('* See https://homebridge.io/w/JUvQr for instructions on how to migrate. *');
this.log('Running in standalone mode.');
}
else if (config.noFork) {
this.noFork();
}
else {
this.fork();
}
}
fork() {
const ui = (0, node_child_process_1.fork)((0, node_path_1.resolve)(__dirname, 'bin/fork'), null, {
env: node_process_1.default.env,
});
this.log('Spawning Homebridge UI with PID', ui.pid);
ui.on('close', () => {
node_process_1.default.kill(node_process_1.default.pid, 'SIGTERM');
});
ui.on('error', () => {
});
}
async noFork() {
await Promise.resolve().then(() => __importStar(require('./main')));
}
static serviceMode() {
node_process_1.default.on('disconnect', () => {
node_process_1.default.exit();
});
}
accessories(callback) {
const accessories = [];
callback(accessories);
}
}
module.exports = (api) => {
homebridge = api;
homebridge.registerPlatform('homebridge-config-ui-x', 'config', HomebridgeUi);
if (node_process_1.default.env.UIX_SERVICE_MODE === '1' && node_process_1.default.connected) {
HomebridgeUi.serviceMode();
}
};
//# sourceMappingURL=index.js.map