UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge.

120 lines 5.69 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { constants, createReadStream } from 'node:fs'; import { access, truncate } from 'node:fs/promises'; import { resolve } from 'node:path'; import { Transform } from 'node:stream'; import { BadRequestException, Inject, Injectable } from '@nestjs/common'; import { pathExists, readJson, writeJsonSync } from 'fs-extra/esm'; import { ConfigService } from '../../../core/config/config.service.js'; import { Logger } from '../../../core/logger/logger.service.js'; import { RE_ANSI_COLOUR } from '../../../core/regex.constants.js'; let HbServiceService = class HbServiceService { configService; logger; hbServiceSettingsPath; constructor(configService, logger) { this.configService = configService; this.logger = logger; this.hbServiceSettingsPath = resolve(this.configService.storagePath, '.uix-hb-service-homebridge-startup.json'); } async getHomebridgeStartupSettings() { try { if (await pathExists(this.hbServiceSettingsPath)) { const settings = await readJson(this.hbServiceSettingsPath); return { HOMEBRIDGE_DEBUG: settings.debugMode, HOMEBRIDGE_KEEP_ORPHANS: settings.keepOrphans, HOMEBRIDGE_INSECURE: typeof settings.insecureMode === 'boolean' ? settings.insecureMode : this.configService.homebridgeInsecureMode, ENV_DEBUG: settings.env.DEBUG, ENV_NODE_OPTIONS: settings.env.NODE_OPTIONS, }; } else { return { HOMEBRIDGE_INSECURE: this.configService.homebridgeInsecureMode, }; } } catch (e) { return {}; } } async setHomebridgeStartupSettings(data) { this.configService.hbServiceUiRestartRequired = true; const settings = { debugMode: data.HOMEBRIDGE_DEBUG, keepOrphans: data.HOMEBRIDGE_KEEP_ORPHANS, insecureMode: data.HOMEBRIDGE_INSECURE, env: { DEBUG: data.ENV_DEBUG ? data.ENV_DEBUG : undefined, NODE_OPTIONS: data.ENV_NODE_OPTIONS ? data.ENV_NODE_OPTIONS : undefined, }, }; return writeJsonSync(this.hbServiceSettingsPath, settings, { spaces: 4 }); } async setFullServiceRestartFlag() { this.configService.hbServiceUiRestartRequired = true; return { status: 0 }; } async downloadLogFile(shouldRemoveColour) { if (!await pathExists(this.configService.ui.log.path)) { this.logger.error(`Cannot download log file ${this.configService.ui.log.path} as it does not exist.`); throw new BadRequestException('Log file not found on disk.'); } try { await access(this.configService.ui.log.path, constants.R_OK); } catch (e) { this.logger.error(`Cannot download log file as missing read permissions on ${this.configService.ui.log.path}.`); throw new BadRequestException('Cannot read log file. Check the log file permissions.'); } if (!shouldRemoveColour) { return createReadStream(this.configService.ui.log.path, { encoding: 'utf8' }); } const removeColour = new Transform({ transform(chunk, _encoding, callback) { callback(null, chunk.toString().replace(RE_ANSI_COLOUR, '')); }, }); return createReadStream(this.configService.ui.log.path, { encoding: 'utf8' }) .pipe(removeColour); } async truncateLogFile(username) { if (!await pathExists(this.configService.ui.log.path)) { this.logger.error(`Cannot truncate log file ${this.configService.ui.log.path} as it does not exist.`); throw new BadRequestException('Log file not found on disk.'); } try { await access(this.configService.ui.log.path, constants.R_OK | constants.W_OK); } catch (e) { this.logger.error(`Cannot truncate log file as missing write permissions on ${this.configService.ui.log.path}.`); throw new BadRequestException('Cannot access file. Check the log file permissions.'); } await truncate(this.configService.ui.log.path); setTimeout(() => { this.logger.warn(`Homebridge log truncated by ${username || 'user'}.`); }, 1000); return { status: 0 }; } }; HbServiceService = __decorate([ Injectable(), __param(0, Inject(ConfigService)), __param(1, Inject(Logger)), __metadata("design:paramtypes", [ConfigService, Logger]) ], HbServiceService); export { HbServiceService }; //# sourceMappingURL=hb-service.service.js.map