@iobroker/js-controller-cli 6.0.6 → 6.0.7
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/build/cjs/lib/cli/cliLogs.js +4 -1
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +2 -4
- package/build/cjs/lib/setup/dbConnection.js.map +2 -2
- package/build/cjs/lib/setup/setupList.js +8 -2
- package/build/cjs/lib/setup/setupList.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.js +12 -5
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.js +3 -3
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup.js +5 -5
- package/build/cjs/lib/setup.js.map +2 -2
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +4 -1
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/setup/dbConnection.js +2 -4
- package/build/esm/lib/setup/dbConnection.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +8 -2
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +12 -5
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +3 -4
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup.js +9 -9
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -4
|
@@ -74,7 +74,10 @@ class CLILogs extends import_cliCommand.CLICommand {
|
|
|
74
74
|
fileName = fileName.replace(/\\/g, "/");
|
|
75
75
|
const parts = fileName.split("/");
|
|
76
76
|
parts.pop();
|
|
77
|
-
import_chokidar.default.watch(`${parts.join("/")}/iobroker*`, {
|
|
77
|
+
import_chokidar.default.watch(`${parts.join("/")}/iobroker*`, {
|
|
78
|
+
awaitWriteFinish: { stabilityThreshold: 500 },
|
|
79
|
+
followSymlinks: false
|
|
80
|
+
}).on("all", this.watchHandler.bind(this, options)).on("ready", () => this.isReady = true);
|
|
78
81
|
}
|
|
79
82
|
} else {
|
|
80
83
|
console.log("No log file found");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliLogs.ts"],
|
|
4
|
-
"sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { tools, logger as toolsLogger } from '@iobroker/js-controller-common';\nimport chokidar from 'chokidar';\nimport fs from 'fs-extra';\nimport os from 'node:os';\nimport es from 'event-stream';\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || 'file://' + __filename);\n\nconst { getConfigFileName } = tools;\n\ninterface CLILogsOptions {\n /** Whether to show today's full log */\n complete?: boolean;\n /** An optional RegExp to filter by */\n regex?: RegExp;\n}\n\n/** Command ioBroker state ... */\nexport class CLILogs extends CLICommand {\n private readonly fileSizes = new Map<string, number>();\n private isReady = false;\n\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args\n * @param params additional parsed CLI parameters\n */\n execute(args: any[], params: Record<string, any>): void {\n const adapterName = args[0];\n const watch = params.watch || params.w;\n const count = params.lines || 1_000;\n\n const options: CLILogsOptions = {\n complete: this.options.all\n };\n\n const config = fs.readJSONSync(require.resolve(getConfigFileName()));\n const logger = toolsLogger(config.log);\n /** @ts-expect-error todo adjust logger type */\n let fileName = logger.getFileName();\n if (fileName) {\n let lines = fs.readFileSync(fileName).toString('utf-8').split('\\n');\n lines = lines.filter(line => line);\n if (lines.length > count) {\n lines.splice(0, lines.length - count);\n }\n let regex: RegExp;\n if (adapterName) {\n //2019-03-02 13:26:54.698 - debug: iot.0 [ALEXA] Created ALEXA device: Bad.Hauptlicht.Aktor.STATE [\"turnOn\",\"turnOff\"]\n regex = new RegExp(`: ${adapterName}\\\\.`);\n options.regex = regex;\n }\n lines.forEach(line => {\n if (regex && !regex.test(line)) {\n return;\n }\n console.log(line);\n });\n\n if (watch) {\n fileName = fileName.replace(/\\\\/g, '/');\n const parts = fileName.split('/');\n parts.pop();\n chokidar\n .watch(`${parts.join('/')}/iobroker*`, {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;wBAAmD;AACnD,kCAA6C;AAC7C,sBAAqB;AACrB,sBAAe;AACf,qBAAe;AACf,0BAAe;AACf,yBAA8B;AAN9B;AAQA,MAAMA,eAAU,kCAAc,YAAY,OAAO,YAAY,UAAU;AAEvE,MAAM,EAAE,kBAAiB,IAAK;AAUxB,MAAO,gBAAgB,6BAAU;EAClB,YAAY,oBAAI,IAAG;EAC5B,UAAU;EAElB,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;EAQA,QAAQ,MAAa,QAA2B;AAC5C,UAAM,cAAc,KAAK;AACzB,UAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,UAAM,QAAQ,OAAO,SAAS;AAE9B,UAAM,UAA0B;MAC5B,UAAU,KAAK,QAAQ;;AAG3B,UAAM,SAAS,gBAAAC,QAAG,aAAaD,SAAQ,QAAQ,kBAAiB,CAAE,CAAC;AACnE,UAAM,aAAS,4BAAAE,QAAY,OAAO,GAAG;AAErC,QAAI,WAAW,OAAO,YAAW;AACjC,QAAI,UAAU;AACV,UAAI,QAAQ,gBAAAD,QAAG,aAAa,QAAQ,EAAE,SAAS,OAAO,EAAE,MAAM,IAAI;AAClE,cAAQ,MAAM,OAAO,UAAQ,IAAI;AACjC,UAAI,MAAM,SAAS,OAAO;AACtB,cAAM,OAAO,GAAG,MAAM,SAAS,KAAK;MACxC;AACA,UAAI;AACJ,UAAI,aAAa;AAEb,gBAAQ,IAAI,OAAO,KAAK,gBAAgB;AACxC,gBAAQ,QAAQ;MACpB;AACA,YAAM,QAAQ,UAAO;AACjB,YAAI,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG;AAC5B;QACJ;AACA,gBAAQ,IAAI,IAAI;MACpB,CAAC;AAED,UAAI,OAAO;AACP,mBAAW,SAAS,QAAQ,OAAO,GAAG;AACtC,cAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,cAAM,IAAG;AACT,wBAAAE,QACK,MAAM,GAAG,MAAM,KAAK,GAAG,eAAe,
|
|
4
|
+
"sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { tools, logger as toolsLogger } from '@iobroker/js-controller-common';\nimport chokidar from 'chokidar';\nimport fs from 'fs-extra';\nimport os from 'node:os';\nimport es from 'event-stream';\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || 'file://' + __filename);\n\nconst { getConfigFileName } = tools;\n\ninterface CLILogsOptions {\n /** Whether to show today's full log */\n complete?: boolean;\n /** An optional RegExp to filter by */\n regex?: RegExp;\n}\n\n/** Command ioBroker state ... */\nexport class CLILogs extends CLICommand {\n private readonly fileSizes = new Map<string, number>();\n private isReady = false;\n\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args\n * @param params additional parsed CLI parameters\n */\n execute(args: any[], params: Record<string, any>): void {\n const adapterName = args[0];\n const watch = params.watch || params.w;\n const count = params.lines || 1_000;\n\n const options: CLILogsOptions = {\n complete: this.options.all\n };\n\n const config = fs.readJSONSync(require.resolve(getConfigFileName()));\n const logger = toolsLogger(config.log);\n /** @ts-expect-error todo adjust logger type */\n let fileName = logger.getFileName();\n if (fileName) {\n let lines = fs.readFileSync(fileName).toString('utf-8').split('\\n');\n lines = lines.filter(line => line);\n if (lines.length > count) {\n lines.splice(0, lines.length - count);\n }\n let regex: RegExp;\n if (adapterName) {\n //2019-03-02 13:26:54.698 - debug: iot.0 [ALEXA] Created ALEXA device: Bad.Hauptlicht.Aktor.STATE [\"turnOn\",\"turnOff\"]\n regex = new RegExp(`: ${adapterName}\\\\.`);\n options.regex = regex;\n }\n lines.forEach(line => {\n if (regex && !regex.test(line)) {\n return;\n }\n console.log(line);\n });\n\n if (watch) {\n fileName = fileName.replace(/\\\\/g, '/');\n const parts = fileName.split('/');\n parts.pop();\n chokidar\n .watch(`${parts.join('/')}/iobroker*`, {\n awaitWriteFinish: { stabilityThreshold: 500 },\n followSymlinks: false\n })\n .on('all', this.watchHandler.bind(this, options))\n .on('ready', () => (this.isReady = true));\n }\n } else {\n console.log('No log file found');\n }\n }\n\n /**\n * Called by chokidar when watched files change\n *\n * @param options some options\n * @param event The type of change\n * @param path Which path has changed\n * @param stats Information about the file\n */\n watchHandler(options: CLILogsOptions, event: string, path: string, stats: Record<string, any>): void {\n if (event === 'add' || !this.fileSizes.has(path)) {\n this.fileSizes.set(path, stats.size);\n if (stats.size > 0 && (this.isReady || (options.complete && this.isTodaysLogfile(path)))) {\n this.streamChange(path, 0, options);\n }\n } else if (event === 'change') {\n const oldFileSize = this.fileSizes.get(path)!;\n this.fileSizes.set(path, stats.size);\n if (this.isReady && stats.size > oldFileSize) {\n this.streamChange(path, oldFileSize, options);\n }\n } else if (event === 'unlink') {\n this.fileSizes.delete(path);\n }\n }\n\n /**\n * If the log file belongs to today\n *\n * @param path The log file path\n */\n isTodaysLogfile(path: string): boolean {\n const YYYYMMDDDate = new Date().toJSON().slice(0, 10);\n return path.includes(YYYYMMDDDate);\n }\n\n /**\n * Streams a portion of a file to the console\n *\n * @param path The file to stream\n * @param start The offset in bytes where to start\n * @param options some options\n */\n streamChange(path: string, start: number, options: CLILogsOptions): void {\n const input = fs.createReadStream(path, {\n encoding: 'utf8',\n start,\n autoClose: true\n });\n if (options.regex) {\n // Read the input line by line and only include the lines matching the filter\n input\n .pipe(es.split())\n .pipe(es.filterSync(line => options.regex!.test(line)))\n .pipe(es.mapSync((line: string) => line + os.EOL))\n .pipe(process.stdout);\n } else {\n // just pipe the input through\n tools.pipeLinewise(input, process.stdout);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;wBAAmD;AACnD,kCAA6C;AAC7C,sBAAqB;AACrB,sBAAe;AACf,qBAAe;AACf,0BAAe;AACf,yBAA8B;AAN9B;AAQA,MAAMA,eAAU,kCAAc,YAAY,OAAO,YAAY,UAAU;AAEvE,MAAM,EAAE,kBAAiB,IAAK;AAUxB,MAAO,gBAAgB,6BAAU;EAClB,YAAY,oBAAI,IAAG;EAC5B,UAAU;EAElB,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;EAQA,QAAQ,MAAa,QAA2B;AAC5C,UAAM,cAAc,KAAK;AACzB,UAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,UAAM,QAAQ,OAAO,SAAS;AAE9B,UAAM,UAA0B;MAC5B,UAAU,KAAK,QAAQ;;AAG3B,UAAM,SAAS,gBAAAC,QAAG,aAAaD,SAAQ,QAAQ,kBAAiB,CAAE,CAAC;AACnE,UAAM,aAAS,4BAAAE,QAAY,OAAO,GAAG;AAErC,QAAI,WAAW,OAAO,YAAW;AACjC,QAAI,UAAU;AACV,UAAI,QAAQ,gBAAAD,QAAG,aAAa,QAAQ,EAAE,SAAS,OAAO,EAAE,MAAM,IAAI;AAClE,cAAQ,MAAM,OAAO,UAAQ,IAAI;AACjC,UAAI,MAAM,SAAS,OAAO;AACtB,cAAM,OAAO,GAAG,MAAM,SAAS,KAAK;MACxC;AACA,UAAI;AACJ,UAAI,aAAa;AAEb,gBAAQ,IAAI,OAAO,KAAK,gBAAgB;AACxC,gBAAQ,QAAQ;MACpB;AACA,YAAM,QAAQ,UAAO;AACjB,YAAI,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG;AAC5B;QACJ;AACA,gBAAQ,IAAI,IAAI;MACpB,CAAC;AAED,UAAI,OAAO;AACP,mBAAW,SAAS,QAAQ,OAAO,GAAG;AACtC,cAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,cAAM,IAAG;AACT,wBAAAE,QACK,MAAM,GAAG,MAAM,KAAK,GAAG,eAAe;UACnC,kBAAkB,EAAE,oBAAoB,IAAG;UAC3C,gBAAgB;SACnB,EACA,GAAG,OAAO,KAAK,aAAa,KAAK,MAAM,OAAO,CAAC,EAC/C,GAAG,SAAS,MAAO,KAAK,UAAU,IAAK;MAChD;IACJ,OAAO;AACH,cAAQ,IAAI,mBAAmB;IACnC;EACJ;EAUA,aAAa,SAAyB,OAAe,MAAc,OAA0B;AACzF,QAAI,UAAU,SAAS,CAAC,KAAK,UAAU,IAAI,IAAI,GAAG;AAC9C,WAAK,UAAU,IAAI,MAAM,MAAM,IAAI;AACnC,UAAI,MAAM,OAAO,MAAM,KAAK,WAAY,QAAQ,YAAY,KAAK,gBAAgB,IAAI,IAAK;AACtF,aAAK,aAAa,MAAM,GAAG,OAAO;MACtC;IACJ,WAAW,UAAU,UAAU;AAC3B,YAAM,cAAc,KAAK,UAAU,IAAI,IAAI;AAC3C,WAAK,UAAU,IAAI,MAAM,MAAM,IAAI;AACnC,UAAI,KAAK,WAAW,MAAM,OAAO,aAAa;AAC1C,aAAK,aAAa,MAAM,aAAa,OAAO;MAChD;IACJ,WAAW,UAAU,UAAU;AAC3B,WAAK,UAAU,OAAO,IAAI;IAC9B;EACJ;EAOA,gBAAgB,MAAY;AACxB,UAAM,eAAe,IAAI,KAAI,EAAG,OAAM,EAAG,MAAM,GAAG,EAAE;AACpD,WAAO,KAAK,SAAS,YAAY;EACrC;EASA,aAAa,MAAc,OAAe,SAAuB;AAC7D,UAAM,QAAQ,gBAAAF,QAAG,iBAAiB,MAAM;MACpC,UAAU;MACV;MACA,WAAW;KACd;AACD,QAAI,QAAQ,OAAO;AAEf,YACK,KAAK,oBAAAG,QAAG,MAAK,CAAE,EACf,KAAK,oBAAAA,QAAG,WAAW,UAAQ,QAAQ,MAAO,KAAK,IAAI,CAAC,CAAC,EACrD,KAAK,oBAAAA,QAAG,QAAQ,CAAC,SAAiB,OAAO,eAAAC,QAAG,GAAG,CAAC,EAChD,KAAK,QAAQ,MAAM;IAC5B,OAAO;AAEH,wCAAM,aAAa,OAAO,QAAQ,MAAM;IAC5C;EACJ;;",
|
|
6
6
|
"names": ["require", "fs", "toolsLogger", "chokidar", "es", "os"]
|
|
7
7
|
}
|
|
@@ -293,7 +293,7 @@ async function exitApplicationSave(exitCode) {
|
|
|
293
293
|
await (0, import_promises.setTimeout)(1e3);
|
|
294
294
|
process.exit(exitCode);
|
|
295
295
|
}
|
|
296
|
-
function initializePlugins(config) {
|
|
296
|
+
async function initializePlugins(config) {
|
|
297
297
|
const ioPackage = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common3.tools.getControllerDir(), "io-package.json"));
|
|
298
298
|
const packageJson = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common3.tools.getControllerDir(), "package.json"));
|
|
299
299
|
const hostname = import_js_controller_common3.tools.getHostName();
|
|
@@ -320,9 +320,7 @@ function initializePlugins(config) {
|
|
|
320
320
|
pluginHandler.addPlugins(ioPackage.common.plugins, import_js_controller_common3.tools.getControllerDir());
|
|
321
321
|
pluginHandler.addPlugins(config.plugins, import_js_controller_common3.tools.getControllerDir());
|
|
322
322
|
pluginHandler.setDatabaseForPlugins(objects, states);
|
|
323
|
-
|
|
324
|
-
pluginHandler.initPlugins(ioPackage, () => resolve());
|
|
325
|
-
});
|
|
323
|
+
await pluginHandler.initPlugins(ioPackage);
|
|
326
324
|
}
|
|
327
325
|
async function checkSystemOffline(onlyCheck) {
|
|
328
326
|
if (!objects || !states) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/dbConnection.ts"],
|
|
4
|
-
"sourcesContent": ["import type { DbConnectAsyncReturn, DbConnectCallback } from '../_Types.js';\nimport fs from 'fs-extra';\nimport {\n getObjectsConstructor,\n getStatesConstructor,\n objectsDbHasServer,\n statesDbHasServer\n} from '@iobroker/js-controller-common';\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport { tools } from '@iobroker/js-controller-common';\nimport { setTimeout as wait } from 'node:timers/promises';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport path from 'node:path';\nimport type { PluginHandlerSettings } from '@iobroker/plugin-base/types';\nimport { PluginHandler } from '@iobroker/plugin-base';\n\nlet pluginHandler: InstanceType<typeof PluginHandler>;\nlet Objects: typeof ObjectsInRedisClient | null; // constructor\nlet objects: ObjectsInRedisClient | null; // instance\nlet States: typeof StatesRedisClient | null; // constructor\nlet states: StatesRedisClient | null; // instance\n\ninterface DbConnectParams {\n /** DB connect timeout, default is 10_000 */\n timeout?: number;\n}\n\nexport function dbConnect(callback: DbConnectCallback): void;\nexport function dbConnect(params: Record<string, any>, callback: DbConnectCallback): void;\nexport function dbConnect(onlyCheck: boolean, params: Record<string, any>, callback: DbConnectCallback): void;\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck\n * @param params\n * @param callback\n */\nexport async function dbConnect(\n onlyCheck: boolean | Record<string, any> | DbConnectCallback,\n params?: DbConnectParams | DbConnectCallback,\n callback?: DbConnectCallback\n): Promise<void> {\n if (typeof onlyCheck === 'object') {\n callback = params as DbConnectCallback;\n params = onlyCheck;\n onlyCheck = false;\n }\n if (typeof onlyCheck === 'function') {\n callback = onlyCheck;\n onlyCheck = false;\n }\n if (typeof params === 'function') {\n callback = params as DbConnectCallback;\n params = {};\n }\n\n if (!callback) {\n throw new Error('No callback for dbConnect');\n }\n\n params = params || {};\n\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName());\n\n if (objects && states) {\n return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });\n }\n\n config.states = config.states || { type: 'jsonl' };\n config.objects = config.objects || { type: 'jsonl' };\n // Make sure the DB has enough time (5s). JsonL can take a bit longer if the process just crashed before\n // because the lockfile might not have been freed.\n config.states.connectTimeout = Math.max(config.states.connectTimeout || 0, 5_000);\n config.objects.connectTimeout = Math.max(config.objects.connectTimeout || 0, 5_000);\n\n Objects = await getObjectsConstructor(); // Objects DB Client object\n States = await getStatesConstructor(); // States DB Client object\n\n let isObjectConnected = false;\n let isStatesConnected = false;\n\n // Detect timeout or try to open file itself\n setTimeout(\n async () => {\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n if (!isObjectConnected) {\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n\n const hasObjectsServer = await objectsDbHasServer(config.objects.type);\n\n if (hasObjectsServer) {\n // Just open in memory DB itself\n Objects = (await import(`@iobroker/db-objects-${config.objects.type}`)).Server;\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n isObjectConnected = true;\n if (isStatesConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n }\n }\n });\n } else {\n console.log(\n `No connection to objects ${config.objects.host}:${config.objects.port}[${config.objects.type}]`\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n if (!isStatesConnected) {\n if (states) {\n // Destroy Client we tried to connect with\n await states.destroy();\n states = null;\n }\n\n const hasStatesServer = await statesDbHasServer(config.states.type);\n\n if (hasStatesServer) {\n // Just open in memory DB itself\n States = (await import(`@iobroker/db-states-${config.states.type}`)).Server;\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n isStatesConnected = true;\n if (isObjectConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n }\n },\n // react on change\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, msg) => states?.onChange(id, msg)\n });\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n states!.onChange = null; // here the custom onChange handler could be installed\n } else {\n if (states) {\n // Destroy Client we tried to connect with\n await (states as StatesRedisClient).destroy();\n states = null;\n }\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n console.log(\n `No connection to states ${config.states.host}:${config.states.port}[${config.states.type}]`\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n await wait((params.timeout || 10_000) + config.objects.connectTimeout);\n\n // Failsafe\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n console.log('No connection to databases possible ...');\n if (onlyCheck) {\n callback &&\n callback({\n // TODO types: allow null if onlyCheck is true\n objects: null as any,\n states: null as any,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n },\n params.timeout || config.objects.connectTimeout * 2\n );\n\n // try to connect as client\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n if (isObjectConnected) {\n return;\n }\n isObjectConnected = true;\n\n if (isStatesConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck as boolean);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n }\n });\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n if (isStatesConnected) {\n return;\n }\n isStatesConnected = true;\n\n if (isObjectConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck as boolean);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, state) => states?.onChange(id, state)\n });\n}\n\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n */\nexport function dbConnectAsync(onlyCheck: boolean, params?: DbConnectParams): Promise<DbConnectAsyncReturn> {\n return new Promise(resolve => dbConnect(onlyCheck, params || {}, params => resolve(params)));\n}\n\n/**\n * Disconnect the database\n */\nexport async function resetDbConnect(): Promise<void> {\n if (objects) {\n await objects.destroy();\n objects = null;\n }\n if (states) {\n await states.destroy();\n states = null;\n }\n if (Objects) {\n Objects = null;\n }\n if (States) {\n States = null;\n }\n\n if (pluginHandler) {\n pluginHandler.destroyAll();\n }\n}\n\n/**\n * Exits the process and saves objects before exit - never resolves\n *\n * @param exitCode code passed to process.exit\n */\nexport async function exitApplicationSave(exitCode?: number): Promise<never> {\n await resetDbConnect();\n await wait(1_000);\n process.exit(exitCode);\n}\n\n/**\n * Initialize plugins from io-pack and config json\n *\n * @param config - parsed content of iobroker.json\n */\nfunction initializePlugins(config: Record<string, any>): Promise<void> {\n const ioPackage = fs.readJsonSync(path.join(tools.getControllerDir(), 'io-package.json'));\n const packageJson = fs.readJsonSync(path.join(tools.getControllerDir(), 'package.json'));\n const hostname = tools.getHostName();\n\n const pluginSettings: PluginHandlerSettings = {\n namespace: `system.host.${hostname}`,\n logNamespace: `host.${hostname}`,\n scope: 'controller',\n log: {\n // cli should be clean, only log warn/error\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n level: 'warn'\n },\n iobrokerConfig: config,\n parentPackage: packageJson,\n controllerVersion: ioPackage.common.version\n };\n\n pluginHandler = new PluginHandler(pluginSettings);\n pluginHandler.addPlugins(ioPackage.common.plugins, tools.getControllerDir()); // Plugins from io-package have priority over ...\n pluginHandler.addPlugins(config.plugins, tools.getControllerDir()); // ... plugins from iobroker.json\n pluginHandler.setDatabaseForPlugins(objects, states);\n\n return new Promise(resolve => {\n pluginHandler.initPlugins(ioPackage, () => resolve());\n });\n}\n\n/**\n * Checks if system is offline\n *\n * @param onlyCheck - returns true then\n */\nasync function checkSystemOffline(onlyCheck: boolean): Promise<boolean> {\n if (!objects || !states) {\n // should never happen\n return true;\n }\n if (onlyCheck) {\n return true;\n }\n\n const offlineStatus = !(await tools.isHostRunning(objects, states));\n\n return offlineStatus;\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import type { DbConnectAsyncReturn, DbConnectCallback } from '../_Types.js';\nimport fs from 'fs-extra';\nimport {\n getObjectsConstructor,\n getStatesConstructor,\n objectsDbHasServer,\n statesDbHasServer\n} from '@iobroker/js-controller-common';\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport { tools } from '@iobroker/js-controller-common';\nimport { setTimeout as wait } from 'node:timers/promises';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport path from 'node:path';\nimport type { PluginHandlerSettings } from '@iobroker/plugin-base/types';\nimport { PluginHandler } from '@iobroker/plugin-base';\n\nlet pluginHandler: InstanceType<typeof PluginHandler>;\nlet Objects: typeof ObjectsInRedisClient | null; // constructor\nlet objects: ObjectsInRedisClient | null; // instance\nlet States: typeof StatesRedisClient | null; // constructor\nlet states: StatesRedisClient | null; // instance\n\ninterface DbConnectParams {\n /** DB connect timeout, default is 10_000 */\n timeout?: number;\n}\n\nexport function dbConnect(callback: DbConnectCallback): void;\nexport function dbConnect(params: Record<string, any>, callback: DbConnectCallback): void;\nexport function dbConnect(onlyCheck: boolean, params: Record<string, any>, callback: DbConnectCallback): void;\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck\n * @param params\n * @param callback\n */\nexport async function dbConnect(\n onlyCheck: boolean | Record<string, any> | DbConnectCallback,\n params?: DbConnectParams | DbConnectCallback,\n callback?: DbConnectCallback\n): Promise<void> {\n if (typeof onlyCheck === 'object') {\n callback = params as DbConnectCallback;\n params = onlyCheck;\n onlyCheck = false;\n }\n if (typeof onlyCheck === 'function') {\n callback = onlyCheck;\n onlyCheck = false;\n }\n if (typeof params === 'function') {\n callback = params as DbConnectCallback;\n params = {};\n }\n\n if (!callback) {\n throw new Error('No callback for dbConnect');\n }\n\n params = params || {};\n\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName());\n\n if (objects && states) {\n return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });\n }\n\n config.states = config.states || { type: 'jsonl' };\n config.objects = config.objects || { type: 'jsonl' };\n // Make sure the DB has enough time (5s). JsonL can take a bit longer if the process just crashed before\n // because the lockfile might not have been freed.\n config.states.connectTimeout = Math.max(config.states.connectTimeout || 0, 5_000);\n config.objects.connectTimeout = Math.max(config.objects.connectTimeout || 0, 5_000);\n\n Objects = await getObjectsConstructor(); // Objects DB Client object\n States = await getStatesConstructor(); // States DB Client object\n\n let isObjectConnected = false;\n let isStatesConnected = false;\n\n // Detect timeout or try to open file itself\n setTimeout(\n async () => {\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n if (!isObjectConnected) {\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n\n const hasObjectsServer = await objectsDbHasServer(config.objects.type);\n\n if (hasObjectsServer) {\n // Just open in memory DB itself\n Objects = (await import(`@iobroker/db-objects-${config.objects.type}`)).Server;\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n isObjectConnected = true;\n if (isStatesConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n }\n }\n });\n } else {\n console.log(\n `No connection to objects ${config.objects.host}:${config.objects.port}[${config.objects.type}]`\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n if (!isStatesConnected) {\n if (states) {\n // Destroy Client we tried to connect with\n await states.destroy();\n states = null;\n }\n\n const hasStatesServer = await statesDbHasServer(config.states.type);\n\n if (hasStatesServer) {\n // Just open in memory DB itself\n States = (await import(`@iobroker/db-states-${config.states.type}`)).Server;\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n isStatesConnected = true;\n if (isObjectConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n }\n },\n // react on change\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, msg) => states?.onChange(id, msg)\n });\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n states!.onChange = null; // here the custom onChange handler could be installed\n } else {\n if (states) {\n // Destroy Client we tried to connect with\n await (states as StatesRedisClient).destroy();\n states = null;\n }\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n console.log(\n `No connection to states ${config.states.host}:${config.states.port}[${config.states.type}]`\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n await wait((params.timeout || 10_000) + config.objects.connectTimeout);\n\n // Failsafe\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n console.log('No connection to databases possible ...');\n if (onlyCheck) {\n callback &&\n callback({\n // TODO types: allow null if onlyCheck is true\n objects: null as any,\n states: null as any,\n isOffline: true,\n objectsDBType: config.objects.type,\n config\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n },\n params.timeout || config.objects.connectTimeout * 2\n );\n\n // try to connect as client\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n if (isObjectConnected) {\n return;\n }\n isObjectConnected = true;\n\n if (isStatesConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck as boolean);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n }\n });\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg)\n },\n connected: async () => {\n if (isStatesConnected) {\n return;\n }\n isStatesConnected = true;\n\n if (isObjectConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck as boolean);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, state) => states?.onChange(id, state)\n });\n}\n\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n */\nexport function dbConnectAsync(onlyCheck: boolean, params?: DbConnectParams): Promise<DbConnectAsyncReturn> {\n return new Promise(resolve => dbConnect(onlyCheck, params || {}, params => resolve(params)));\n}\n\n/**\n * Disconnect the database\n */\nexport async function resetDbConnect(): Promise<void> {\n if (objects) {\n await objects.destroy();\n objects = null;\n }\n if (states) {\n await states.destroy();\n states = null;\n }\n if (Objects) {\n Objects = null;\n }\n if (States) {\n States = null;\n }\n\n if (pluginHandler) {\n pluginHandler.destroyAll();\n }\n}\n\n/**\n * Exits the process and saves objects before exit - never resolves\n *\n * @param exitCode code passed to process.exit\n */\nexport async function exitApplicationSave(exitCode?: number): Promise<never> {\n await resetDbConnect();\n await wait(1_000);\n process.exit(exitCode);\n}\n\n/**\n * Initialize plugins from io-pack and config json\n *\n * @param config - parsed content of iobroker.json\n */\nasync function initializePlugins(config: Record<string, any>): Promise<void> {\n const ioPackage = fs.readJsonSync(path.join(tools.getControllerDir(), 'io-package.json'));\n const packageJson = fs.readJsonSync(path.join(tools.getControllerDir(), 'package.json'));\n const hostname = tools.getHostName();\n\n const pluginSettings: PluginHandlerSettings = {\n namespace: `system.host.${hostname}`,\n logNamespace: `host.${hostname}`,\n scope: 'controller',\n log: {\n // cli should be clean, only log warn/error\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n level: 'warn'\n },\n iobrokerConfig: config,\n parentPackage: packageJson,\n controllerVersion: ioPackage.common.version\n };\n\n pluginHandler = new PluginHandler(pluginSettings);\n pluginHandler.addPlugins(ioPackage.common.plugins, tools.getControllerDir()); // Plugins from io-package have priority over ...\n pluginHandler.addPlugins(config.plugins, tools.getControllerDir()); // ... plugins from iobroker.json\n pluginHandler.setDatabaseForPlugins(objects, states);\n\n await pluginHandler.initPlugins(ioPackage);\n}\n\n/**\n * Checks if system is offline\n *\n * @param onlyCheck - returns true then\n */\nasync function checkSystemOffline(onlyCheck: boolean): Promise<boolean> {\n if (!objects || !states) {\n // should never happen\n return true;\n }\n if (onlyCheck) {\n return true;\n }\n\n const offlineStatus = !(await tools.isHostRunning(objects, states));\n\n return offlineStatus;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_js_controller_common", "fs", "wait", "params", "path"]
|
|
7
7
|
}
|
|
@@ -298,6 +298,7 @@ class List {
|
|
|
298
298
|
return;
|
|
299
299
|
}
|
|
300
300
|
const reg = filter ? new RegExp(import_js_controller_common2.tools.pattern2RegEx("system.adapter." + filter)) : null;
|
|
301
|
+
const adapterList = [];
|
|
301
302
|
for (const obj of objs.rows) {
|
|
302
303
|
if (obj.value.type !== "adapter") {
|
|
303
304
|
continue;
|
|
@@ -308,10 +309,15 @@ class List {
|
|
|
308
309
|
if (import_js_controller_common2.tools.isObject(name)) {
|
|
309
310
|
name = name[lang] || name.en;
|
|
310
311
|
}
|
|
311
|
-
|
|
312
|
-
|
|
312
|
+
adapterList.push({
|
|
313
|
+
id,
|
|
314
|
+
name,
|
|
315
|
+
version: obj.value.common.version,
|
|
316
|
+
"upgrade policy": obj.value.common.automaticUpgrade ?? "none"
|
|
317
|
+
});
|
|
313
318
|
}
|
|
314
319
|
}
|
|
320
|
+
console.table(adapterList);
|
|
315
321
|
this.processExit();
|
|
316
322
|
});
|
|
317
323
|
break;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupList.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * List different objects for CLI\n *\n * Copyright 2013-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\n\ninterface File {\n adapter: string;\n path: string;\n file: ioBroker.ReadDirResult;\n}\n\ninterface IdValueObject {\n id: string;\n value: any;\n}\n\ninterface FlagObject {\n alive?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n port?: number;\n ssl?: boolean;\n ip?: string;\n}\n\ninterface CLIListOptions {\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: (exitCode?: number) => void;\n}\n\nexport type ListType =\n | 'objects'\n | 'o'\n | 'states'\n | 's'\n | 'adapters'\n | 'a'\n | 'instances'\n | 'i'\n | 'users'\n | 'u'\n | 'groups'\n | 'g'\n | 'hosts'\n | 'h'\n | 'enums'\n | 'e'\n | 'files'\n | 'f';\n\nexport class List {\n private config: Record<string, any>;\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: (exitCode?: number) => void;\n\n constructor(options: CLIListOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid Modified arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.config = fs.readJSONSync(tools.getConfigFileName());\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n }\n\n private static _perm2str(perm: number): string {\n let result = '';\n // user\n result += perm & 0x400 ? 'r' : '-';\n result += perm & 0x200 ? 'w' : '-';\n result += perm & 0x100 ? 'x' : '-';\n // group\n result += perm & 0x040 ? 'r' : '-';\n result += perm & 0x020 ? 'w' : '-';\n result += perm & 0x010 ? 'x' : '-';\n // any\n result += perm & 0x004 ? 'r' : '-';\n result += perm & 0x002 ? 'w' : '-';\n result += perm & 0x001 ? 'x' : '-';\n return result;\n }\n\n showFileHeader(adapter?: string): void {\n if (adapter) {\n console.log(`\\n-- ${adapter} --`);\n }\n\n console.log(' Modified at |Permission| User | Group | Size | Name');\n console.log('----------------+----------+--------------+--------------+------+---------');\n }\n\n showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n let time = '';\n if (file.modifiedAt) {\n const ts = new Date(file.modifiedAt);\n time = ts.toISOString();\n time = time.replace('T', ' ');\n time = time.substring(0, 16) + ' ';\n }\n text += time.padEnd(17);\n\n if (file.acl) {\n text += (file.isDir ? 'd' : '-') + List._perm2str(file.acl.permissions || 0);\n let owner = file.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = file.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += (file.isDir ? 'd' : '-') + '?????????' + new Array(31).join(' ');\n }\n const size = file.stats && file.stats.size ? file.stats.size.toString() : '';\n\n text += ` ${size.padStart(6)} ${adapter}${!path || path[0] === '/' ? '' : '/'}${path}/${file.file}`;\n if (file.isDir) {\n text += '/';\n console.log(text);\n } else {\n console.log(text);\n }\n }\n\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n showObject(obj: ioBroker.AnyObject): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n if (obj.acl) {\n text += `${List._perm2str(obj.acl.object || 0)} ${\n obj.type === 'state' ? List._perm2str(obj.acl.state || 0) : ' '\n }`;\n let owner = obj.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = obj.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `?????????${obj.type === 'state' ? ' ?????????' : ' '}${new Array(31).join(' ')}`;\n }\n text += ` ${obj._id}`;\n console.log(text);\n }\n\n listDirectory(\n adapter: string,\n path: string | null | undefined,\n allFiles?: File[] | ((allFiles: File[]) => void),\n callback?: (allFiles: File[]) => void\n ): void {\n if (typeof path === 'function') {\n callback = path;\n path = '';\n allFiles = [];\n }\n if (typeof allFiles === 'function') {\n callback = allFiles;\n allFiles = [];\n }\n const _allFiles = allFiles || [];\n const _path = path || '';\n\n this.objects.readDir(adapter, _path, null, (err, files) => {\n if (err && err.code === 'ENOTDIR') {\n const pos = _path.lastIndexOf('/');\n if (pos !== -1) {\n const dir = _path.substring(0, pos);\n const fname = _path.substring(pos + 1);\n this.objects.readDir(adapter, dir, null, (err, files) => {\n if (err) {\n console.log(`Cannot read \"${path}\": ${err.message}`);\n typeof callback === 'function' && callback(_allFiles);\n } else {\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n if (file.file === fname) {\n _allFiles.push({ adapter, path: _path, file });\n break;\n }\n }\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n } else if (typeof callback === 'function') {\n callback(_allFiles);\n }\n } else {\n let count = 0;\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n _allFiles.push({ adapter: adapter, path: _path, file });\n if (file.isDir) {\n count++;\n this.listDirectory(adapter, `${path}/${file.file}`, allFiles, () => {\n if (!--count && callback) {\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n }\n }\n if (!count && typeof callback === 'function') {\n callback(_allFiles);\n }\n }\n });\n }\n\n sortFiles(a: File, b: File): number {\n let a1 = a.path + a.file.file;\n if (a1[0] !== '/') {\n a1 = '/' + a1;\n }\n let b1 = b.path + b.file.file;\n if (b1[0] !== '/') {\n b1 = '/' + b1;\n }\n return a1.localeCompare(b1);\n }\n\n listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void> {\n if (typeof filter === 'function') {\n callback = filter;\n filter = null;\n }\n if (filter) {\n filter = filter.replace(/\\*/g, '');\n if (filter[filter.length - 1] === '/') {\n filter = filter.substring(0, filter.length - 1);\n }\n }\n\n if (adapters && adapters.length) {\n const adapter = adapters.shift() as string;\n this.listDirectory(adapter, filter, files => {\n files.sort(this.sortFiles);\n this.showFileHeader(adapter);\n\n files\n .filter(f => !filter || `${f.path}/${f.file.file}`.startsWith(filter))\n .forEach(f => this.showFile(f.adapter, f.path, f.file));\n\n this.listAdaptersFiles(adapters, filter, callback);\n });\n } else {\n return tools.maybeCallback(callback);\n }\n }\n\n private _readOnlineState(\n lines: IdValueObject[],\n flags: FlagObject,\n cb: (res: any[]) => void,\n _result?: any[]\n ): void {\n const result = _result || [];\n if (!lines || !lines.length) {\n cb(result);\n } else {\n const task = lines.shift() as IdValueObject;\n const id = `${task.id}.alive`;\n this.states.getState(id, (err, state) => {\n if (state && state.val) {\n result.push(`+ ${task.value}`);\n } else if (!flags.alive) {\n result.push(` ${task.value}`);\n }\n setImmediate(() => this._readOnlineState(lines, flags, cb, result));\n });\n }\n }\n\n list(type: ListType, filter: string, flags: FlagObject): void {\n this.objects.getObject('system.config', (err, systemConf) => {\n const lang: ioBroker.Languages = systemConf?.common?.language || 'en';\n switch (type) {\n case 'objects':\n case 'o':\n this.objects.getObjectList({}, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(filter)) : null;\n for (const obj of objs.rows) {\n let name = obj.value?.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name as string))) {\n if (obj.value.type) {\n const id = obj.value._id;\n const type = obj.value.type;\n\n console.log(`${id.padStart(39)}: ${type.padStart(39)} - ${name || ''}`);\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'states':\n case 's':\n this.states.getKeys(filter || '*', (err, keys) => {\n if (err) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n\n if (!keys) {\n return void this.processExit();\n }\n\n this.states.getStates(keys, (err, states) => {\n if (err || !states) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (!state) {\n continue;\n }\n\n const id = keys[i];\n const from = state.from || '';\n const type = typeof state.val;\n\n console.log(\n `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${\n state.ack ? ' ack' : 'not ack'\n } ${JSON.stringify(state.val)}`\n );\n }\n this.processExit();\n });\n });\n break;\n\n case 'adapters':\n case 'a':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx('system.adapter.' + filter)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'adapter') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}: ${name.padEnd(14)} - v${obj.value.common.version}`;\n\n console.log(text);\n }\n }\n this.processExit();\n }\n );\n break;\n\n case 'instances':\n case 'i':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n objs.rows.sort((a, b) => {\n if (a.id > b.id) {\n return 1;\n } else if (a.id < b.id) {\n return -1;\n }\n return 0;\n });\n const lines = [];\n for (const row of objs.rows) {\n if (row.value.type !== 'instance') {\n continue;\n }\n\n let name = row.value.common?.name;\n\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(row.value._id) || (name && reg.test(name))) {\n if (flags.enabled && !row.value.common.enabled) {\n continue;\n }\n if (flags.disabled && row.value.common.enabled) {\n continue;\n }\n if (flags.port && row.value.native.port === undefined) {\n continue;\n }\n if (flags.ssl && row.value.native.secure === undefined) {\n continue;\n }\n if (flags.ip && row.value.native.bind === undefined) {\n continue;\n }\n\n let id: string = row.value._id;\n let host = row.value.common.host;\n\n if (id.length < 40) {\n id = id.padEnd(40);\n }\n if (name && name.length < 22) {\n name = name.padEnd(22);\n }\n\n if (host && host.length < 40) {\n host = host.padEnd(40);\n }\n\n let text = `${id}: ${name || ''}: ${host} - ${\n row.value.common.enabled ? ' enabled' : 'disabled'\n }`;\n\n if (this.config.system && this.config.system.compact && row.value.common.compact) {\n text +=\n ', compact ' +\n (row.value.common.compact && row.value.common.runAsCompactMode\n ? `enabled (group ${\n row.value.common.compactGroup !== undefined\n ? row.value.common.compactGroup\n : 1\n })`\n : 'disabled');\n }\n\n if (row.value.native && row.value.native.port) {\n text += `, port: ${row.value.native.port}`;\n }\n if (row.value.native && row.value.native.bind) {\n text += `, bind: ${row.value.native.bind}`;\n }\n if (row.value.native && row.value.native.secure) {\n text += ' (SSL)';\n }\n if (row.value.native && row.value.native.defaultUser) {\n text += `, run as: ${row.value.native.defaultUser}`;\n }\n lines.push({ id: row.value._id, value: text });\n }\n }\n this._readOnlineState(lines, flags, result => {\n console.log(result.join('\\n'));\n console.log('\\n+ instance is alive');\n this.processExit();\n });\n }\n );\n break;\n\n case 'users':\n case 'u':\n this.objects.getObjectList(\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err, objs) => {\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, groups) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter\n ? new RegExp(tools.pattern2RegEx('system.user.' + filter))\n : null;\n console.log(\n ' ID | Name | Active | Groups'\n );\n console.log(\n '---------------------------------------+-------------+----------+--------------'\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'user') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}| ${name.padEnd(11)} | ${\n obj.value.common.enabled ? ' enabled' : 'disabled'\n } |`;\n if (groups) {\n const gs = [];\n // find all groups\n for (const group of groups.rows) {\n if (\n group.value.common.members &&\n group.value.common.members.indexOf(obj.value._id) !== -1\n ) {\n gs.push(group.value._id.substring(13));\n }\n }\n console.log(`${text} ${gs.join(', ')}`);\n }\n }\n }\n this.processExit();\n }\n );\n }\n );\n break;\n\n case 'groups':\n case 'g':\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx('system.group.' + filter)) : null;\n console.log('');\n console.log(\n ' system.group | object | state | file | user | others | users'\n );\n console.log(\n ' | l r w d | l r w d | l r w c d | w c d | |'\n );\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------'\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'group') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(13);\n if (id === 'administrator') {\n obj.value.common.acl = {\n file: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true\n },\n object: {\n read: true,\n write: true,\n create: true,\n delete: true,\n list: true\n },\n state: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true\n },\n users: {\n write: true,\n create: true,\n delete: true,\n list: true,\n read: true\n },\n other: {\n execute: true,\n http: true,\n sendto: true\n }\n };\n }\n\n let text = id.padEnd(19);\n text += ' | ';\n if (obj.value.common.acl?.object) {\n text += (obj.value.common.acl.object.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.state) {\n text += ' ';\n text += (obj.value.common.acl.state.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.file) {\n text += ' ';\n text += (obj.value.common.acl.file.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.create ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.users) {\n text += ' ';\n text += (obj.value.common.acl.users.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.users.create ? '+' : '-') + ' ';\n text += (obj.value.common.acl.users.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.other) {\n text += ' ';\n let others = '';\n for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) {\n others += r + (otherPerm ? '+' : '-') + ' ';\n }\n\n text += `${others.padEnd(22)}|`;\n } else {\n text += new Array(25).join(' ') + '|';\n }\n\n if (obj.value.common.members) {\n for (let m = 0; m < obj.value.common.members.length; m++) {\n obj.value.common.members[m] = obj.value.common.members[m].substring(\n 12\n ) as ioBroker.ObjectIDs.User;\n }\n text += ` ${obj.value.common.members.join(', ')}`;\n }\n console.log(text);\n }\n }\n\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------'\n );\n console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete');\n this.processExit();\n }\n );\n break;\n\n case 'h':\n case 'hosts':\n this.objects.getObjectList(\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n this.states.getKeys('system.host.*', (err, keys) => {\n if (!keys) {\n this.processExit();\n return;\n }\n this.states.getStates(keys, (err, states) => {\n if (!states) {\n this.processExit();\n return;\n }\n\n const reg = filter\n ? new RegExp(tools.pattern2RegEx('system.host.' + filter))\n : null;\n\n for (const obj of objs.rows) {\n if (obj.value.type !== 'host') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(12);\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const hostname = obj.value.common.hostname;\n\n const version = obj.value.common.installedVersion;\n let alive = '';\n let uptime = '';\n for (let k = 0; k < keys.length; k++) {\n if (keys[k] === `${obj.value._id}.alive`) {\n alive = 'alive';\n }\n if (keys[k] === `${obj.value._id}.uptime`) {\n uptime = states[k]!.val?.toString() || '-';\n }\n }\n alive = alive || 'dead';\n\n if (!uptime) {\n uptime = '-';\n }\n const text = `${id.padEnd(\n 19\n )} ${name} (version: ${version}, hostname: ${hostname.padEnd(\n 14\n )}, ${alive}, uptime: ${uptime})`;\n // todo\n console.log(text);\n }\n }\n\n this.processExit();\n });\n });\n }\n );\n break;\n\n case 'enums':\n case 'e':\n this.objects.getObjectList({ startkey: 'enum.', endkey: 'enum.\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`enum.${filter}`)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'enum') {\n continue;\n }\n\n let name = obj.value.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n console.log(\n '\\n====================================================================================='\n );\n const id = obj.value._id.substring(5);\n\n console.log(`${id.padEnd(19)}(${name})`);\n console.log(\n '-------------------------------------------------------------------------------------'\n );\n\n if (obj.value.common.members) {\n console.log(obj.value.common.members.join(', '));\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'files':\n case 'f':\n this.objects.getObjectList({ startkey: '', endkey: '\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n\n const adapter = filter || null;\n const names = filter ? filter.split('/') : null;\n if (names && !names[0]) {\n names.splice(0, 1);\n }\n\n const adapters = objs.rows\n .filter(\n row =>\n row.value.type === 'meta' &&\n !(\n names &&\n adapter &&\n row.value._id !== names[0] &&\n !row.value._id.startsWith(`${names[0]}.`)\n )\n )\n .map(row => row.value._id);\n\n if (names) {\n names.shift();\n }\n\n this.listAdaptersFiles(adapters, names ? names.join('/') : null, () => this.processExit());\n });\n break;\n }\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * List different objects for CLI\n *\n * Copyright 2013-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\n\ninterface File {\n adapter: string;\n path: string;\n file: ioBroker.ReadDirResult;\n}\n\ninterface IdValueObject {\n id: string;\n value: any;\n}\n\ninterface FlagObject {\n alive?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n port?: number;\n ssl?: boolean;\n ip?: string;\n}\n\ninterface CLIListOptions {\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: (exitCode?: number) => void;\n}\n\nexport type ListType =\n | 'objects'\n | 'o'\n | 'states'\n | 's'\n | 'adapters'\n | 'a'\n | 'instances'\n | 'i'\n | 'users'\n | 'u'\n | 'groups'\n | 'g'\n | 'hosts'\n | 'h'\n | 'enums'\n | 'e'\n | 'files'\n | 'f';\n\ninterface AdapterListEntry {\n /** The object id */\n id: string;\n /** Adapter name */\n name: string;\n /** Version of adapter */\n version: string;\n /** The configured upgrade policy */\n 'upgrade policy': ioBroker.AutoUpgradePolicy;\n}\n\nexport class List {\n private config: Record<string, any>;\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: (exitCode?: number) => void;\n\n constructor(options: CLIListOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid Modified arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.config = fs.readJSONSync(tools.getConfigFileName());\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n }\n\n private static _perm2str(perm: number): string {\n let result = '';\n // user\n result += perm & 0x400 ? 'r' : '-';\n result += perm & 0x200 ? 'w' : '-';\n result += perm & 0x100 ? 'x' : '-';\n // group\n result += perm & 0x040 ? 'r' : '-';\n result += perm & 0x020 ? 'w' : '-';\n result += perm & 0x010 ? 'x' : '-';\n // any\n result += perm & 0x004 ? 'r' : '-';\n result += perm & 0x002 ? 'w' : '-';\n result += perm & 0x001 ? 'x' : '-';\n return result;\n }\n\n showFileHeader(adapter?: string): void {\n if (adapter) {\n console.log(`\\n-- ${adapter} --`);\n }\n\n console.log(' Modified at |Permission| User | Group | Size | Name');\n console.log('----------------+----------+--------------+--------------+------+---------');\n }\n\n showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n let time = '';\n if (file.modifiedAt) {\n const ts = new Date(file.modifiedAt);\n time = ts.toISOString();\n time = time.replace('T', ' ');\n time = time.substring(0, 16) + ' ';\n }\n text += time.padEnd(17);\n\n if (file.acl) {\n text += (file.isDir ? 'd' : '-') + List._perm2str(file.acl.permissions || 0);\n let owner = file.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = file.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += (file.isDir ? 'd' : '-') + '?????????' + new Array(31).join(' ');\n }\n const size = file.stats && file.stats.size ? file.stats.size.toString() : '';\n\n text += ` ${size.padStart(6)} ${adapter}${!path || path[0] === '/' ? '' : '/'}${path}/${file.file}`;\n if (file.isDir) {\n text += '/';\n console.log(text);\n } else {\n console.log(text);\n }\n }\n\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n showObject(obj: ioBroker.AnyObject): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n if (obj.acl) {\n text += `${List._perm2str(obj.acl.object || 0)} ${\n obj.type === 'state' ? List._perm2str(obj.acl.state || 0) : ' '\n }`;\n let owner = obj.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = obj.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `?????????${obj.type === 'state' ? ' ?????????' : ' '}${new Array(31).join(' ')}`;\n }\n text += ` ${obj._id}`;\n console.log(text);\n }\n\n listDirectory(\n adapter: string,\n path: string | null | undefined,\n allFiles?: File[] | ((allFiles: File[]) => void),\n callback?: (allFiles: File[]) => void\n ): void {\n if (typeof path === 'function') {\n callback = path;\n path = '';\n allFiles = [];\n }\n if (typeof allFiles === 'function') {\n callback = allFiles;\n allFiles = [];\n }\n const _allFiles = allFiles || [];\n const _path = path || '';\n\n this.objects.readDir(adapter, _path, null, (err, files) => {\n if (err && err.code === 'ENOTDIR') {\n const pos = _path.lastIndexOf('/');\n if (pos !== -1) {\n const dir = _path.substring(0, pos);\n const fname = _path.substring(pos + 1);\n this.objects.readDir(adapter, dir, null, (err, files) => {\n if (err) {\n console.log(`Cannot read \"${path}\": ${err.message}`);\n typeof callback === 'function' && callback(_allFiles);\n } else {\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n if (file.file === fname) {\n _allFiles.push({ adapter, path: _path, file });\n break;\n }\n }\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n } else if (typeof callback === 'function') {\n callback(_allFiles);\n }\n } else {\n let count = 0;\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n _allFiles.push({ adapter: adapter, path: _path, file });\n if (file.isDir) {\n count++;\n this.listDirectory(adapter, `${path}/${file.file}`, allFiles, () => {\n if (!--count && callback) {\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n }\n }\n if (!count && typeof callback === 'function') {\n callback(_allFiles);\n }\n }\n });\n }\n\n sortFiles(a: File, b: File): number {\n let a1 = a.path + a.file.file;\n if (a1[0] !== '/') {\n a1 = '/' + a1;\n }\n let b1 = b.path + b.file.file;\n if (b1[0] !== '/') {\n b1 = '/' + b1;\n }\n return a1.localeCompare(b1);\n }\n\n listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void> {\n if (typeof filter === 'function') {\n callback = filter;\n filter = null;\n }\n if (filter) {\n filter = filter.replace(/\\*/g, '');\n if (filter[filter.length - 1] === '/') {\n filter = filter.substring(0, filter.length - 1);\n }\n }\n\n if (adapters && adapters.length) {\n const adapter = adapters.shift() as string;\n this.listDirectory(adapter, filter, files => {\n files.sort(this.sortFiles);\n this.showFileHeader(adapter);\n\n files\n .filter(f => !filter || `${f.path}/${f.file.file}`.startsWith(filter))\n .forEach(f => this.showFile(f.adapter, f.path, f.file));\n\n this.listAdaptersFiles(adapters, filter, callback);\n });\n } else {\n return tools.maybeCallback(callback);\n }\n }\n\n private _readOnlineState(\n lines: IdValueObject[],\n flags: FlagObject,\n cb: (res: any[]) => void,\n _result?: any[]\n ): void {\n const result = _result || [];\n if (!lines || !lines.length) {\n cb(result);\n } else {\n const task = lines.shift() as IdValueObject;\n const id = `${task.id}.alive`;\n this.states.getState(id, (err, state) => {\n if (state && state.val) {\n result.push(`+ ${task.value}`);\n } else if (!flags.alive) {\n result.push(` ${task.value}`);\n }\n setImmediate(() => this._readOnlineState(lines, flags, cb, result));\n });\n }\n }\n\n list(type: ListType, filter: string, flags: FlagObject): void {\n this.objects.getObject('system.config', (err, systemConf) => {\n const lang: ioBroker.Languages = systemConf?.common?.language || 'en';\n switch (type) {\n case 'objects':\n case 'o':\n this.objects.getObjectList({}, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(filter)) : null;\n for (const obj of objs.rows) {\n let name = obj.value?.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name as string))) {\n if (obj.value.type) {\n const id = obj.value._id;\n const type = obj.value.type;\n\n console.log(`${id.padStart(39)}: ${type.padStart(39)} - ${name || ''}`);\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'states':\n case 's':\n this.states.getKeys(filter || '*', (err, keys) => {\n if (err) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n\n if (!keys) {\n return void this.processExit();\n }\n\n this.states.getStates(keys, (err, states) => {\n if (err || !states) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (!state) {\n continue;\n }\n\n const id = keys[i];\n const from = state.from || '';\n const type = typeof state.val;\n\n console.log(\n `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${\n state.ack ? ' ack' : 'not ack'\n } ${JSON.stringify(state.val)}`\n );\n }\n this.processExit();\n });\n });\n break;\n\n case 'adapters':\n case 'a':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx('system.adapter.' + filter)) : null;\n const adapterList: AdapterListEntry[] = [];\n for (const obj of objs.rows) {\n if (obj.value.type !== 'adapter') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n adapterList.push({\n id,\n name,\n version: obj.value.common.version,\n 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none'\n });\n }\n }\n\n console.table(adapterList);\n this.processExit();\n }\n );\n break;\n\n case 'instances':\n case 'i':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n objs.rows.sort((a, b) => {\n if (a.id > b.id) {\n return 1;\n } else if (a.id < b.id) {\n return -1;\n }\n return 0;\n });\n const lines = [];\n for (const row of objs.rows) {\n if (row.value.type !== 'instance') {\n continue;\n }\n\n let name = row.value.common?.name;\n\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(row.value._id) || (name && reg.test(name))) {\n if (flags.enabled && !row.value.common.enabled) {\n continue;\n }\n if (flags.disabled && row.value.common.enabled) {\n continue;\n }\n if (flags.port && row.value.native.port === undefined) {\n continue;\n }\n if (flags.ssl && row.value.native.secure === undefined) {\n continue;\n }\n if (flags.ip && row.value.native.bind === undefined) {\n continue;\n }\n\n let id: string = row.value._id;\n let host = row.value.common.host;\n\n if (id.length < 40) {\n id = id.padEnd(40);\n }\n if (name && name.length < 22) {\n name = name.padEnd(22);\n }\n\n if (host && host.length < 40) {\n host = host.padEnd(40);\n }\n\n let text = `${id}: ${name || ''}: ${host} - ${\n row.value.common.enabled ? ' enabled' : 'disabled'\n }`;\n\n if (this.config.system && this.config.system.compact && row.value.common.compact) {\n text +=\n ', compact ' +\n (row.value.common.compact && row.value.common.runAsCompactMode\n ? `enabled (group ${\n row.value.common.compactGroup !== undefined\n ? row.value.common.compactGroup\n : 1\n })`\n : 'disabled');\n }\n\n if (row.value.native && row.value.native.port) {\n text += `, port: ${row.value.native.port}`;\n }\n if (row.value.native && row.value.native.bind) {\n text += `, bind: ${row.value.native.bind}`;\n }\n if (row.value.native && row.value.native.secure) {\n text += ' (SSL)';\n }\n if (row.value.native && row.value.native.defaultUser) {\n text += `, run as: ${row.value.native.defaultUser}`;\n }\n lines.push({ id: row.value._id, value: text });\n }\n }\n this._readOnlineState(lines, flags, result => {\n console.log(result.join('\\n'));\n console.log('\\n+ instance is alive');\n this.processExit();\n });\n }\n );\n break;\n\n case 'users':\n case 'u':\n this.objects.getObjectList(\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err, objs) => {\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, groups) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter\n ? new RegExp(tools.pattern2RegEx('system.user.' + filter))\n : null;\n console.log(\n ' ID | Name | Active | Groups'\n );\n console.log(\n '---------------------------------------+-------------+----------+--------------'\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'user') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}| ${name.padEnd(11)} | ${\n obj.value.common.enabled ? ' enabled' : 'disabled'\n } |`;\n if (groups) {\n const gs = [];\n // find all groups\n for (const group of groups.rows) {\n if (\n group.value.common.members &&\n group.value.common.members.indexOf(obj.value._id) !== -1\n ) {\n gs.push(group.value._id.substring(13));\n }\n }\n console.log(`${text} ${gs.join(', ')}`);\n }\n }\n }\n this.processExit();\n }\n );\n }\n );\n break;\n\n case 'groups':\n case 'g':\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx('system.group.' + filter)) : null;\n console.log('');\n console.log(\n ' system.group | object | state | file | user | others | users'\n );\n console.log(\n ' | l r w d | l r w d | l r w c d | w c d | |'\n );\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------'\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'group') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(13);\n if (id === 'administrator') {\n obj.value.common.acl = {\n file: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true\n },\n object: {\n read: true,\n write: true,\n create: true,\n delete: true,\n list: true\n },\n state: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true\n },\n users: {\n write: true,\n create: true,\n delete: true,\n list: true,\n read: true\n },\n other: {\n execute: true,\n http: true,\n sendto: true\n }\n };\n }\n\n let text = id.padEnd(19);\n text += ' | ';\n if (obj.value.common.acl?.object) {\n text += (obj.value.common.acl.object.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.object.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.state) {\n text += ' ';\n text += (obj.value.common.acl.state.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.state.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.file) {\n text += ' ';\n text += (obj.value.common.acl.file.list ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.read ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.create ? '+' : '-') + ' ';\n text += (obj.value.common.acl.file.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.users) {\n text += ' ';\n text += (obj.value.common.acl.users.write ? '+' : '-') + ' ';\n text += (obj.value.common.acl.users.create ? '+' : '-') + ' ';\n text += (obj.value.common.acl.users.delete ? '+' : '-') + ' ';\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.other) {\n text += ' ';\n let others = '';\n for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) {\n others += r + (otherPerm ? '+' : '-') + ' ';\n }\n\n text += `${others.padEnd(22)}|`;\n } else {\n text += new Array(25).join(' ') + '|';\n }\n\n if (obj.value.common.members) {\n for (let m = 0; m < obj.value.common.members.length; m++) {\n obj.value.common.members[m] = obj.value.common.members[m].substring(\n 12\n ) as ioBroker.ObjectIDs.User;\n }\n text += ` ${obj.value.common.members.join(', ')}`;\n }\n console.log(text);\n }\n }\n\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------'\n );\n console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete');\n this.processExit();\n }\n );\n break;\n\n case 'h':\n case 'hosts':\n this.objects.getObjectList(\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n this.states.getKeys('system.host.*', (err, keys) => {\n if (!keys) {\n this.processExit();\n return;\n }\n this.states.getStates(keys, (err, states) => {\n if (!states) {\n this.processExit();\n return;\n }\n\n const reg = filter\n ? new RegExp(tools.pattern2RegEx('system.host.' + filter))\n : null;\n\n for (const obj of objs.rows) {\n if (obj.value.type !== 'host') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(12);\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const hostname = obj.value.common.hostname;\n\n const version = obj.value.common.installedVersion;\n let alive = '';\n let uptime = '';\n for (let k = 0; k < keys.length; k++) {\n if (keys[k] === `${obj.value._id}.alive`) {\n alive = 'alive';\n }\n if (keys[k] === `${obj.value._id}.uptime`) {\n uptime = states[k]!.val?.toString() || '-';\n }\n }\n alive = alive || 'dead';\n\n if (!uptime) {\n uptime = '-';\n }\n const text = `${id.padEnd(\n 19\n )} ${name} (version: ${version}, hostname: ${hostname.padEnd(\n 14\n )}, ${alive}, uptime: ${uptime})`;\n // todo\n console.log(text);\n }\n }\n\n this.processExit();\n });\n });\n }\n );\n break;\n\n case 'enums':\n case 'e':\n this.objects.getObjectList({ startkey: 'enum.', endkey: 'enum.\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`enum.${filter}`)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'enum') {\n continue;\n }\n\n let name = obj.value.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n console.log(\n '\\n====================================================================================='\n );\n const id = obj.value._id.substring(5);\n\n console.log(`${id.padEnd(19)}(${name})`);\n console.log(\n '-------------------------------------------------------------------------------------'\n );\n\n if (obj.value.common.members) {\n console.log(obj.value.common.members.join(', '));\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'files':\n case 'f':\n this.objects.getObjectList({ startkey: '', endkey: '\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n\n const adapter = filter || null;\n const names = filter ? filter.split('/') : null;\n if (names && !names[0]) {\n names.splice(0, 1);\n }\n\n const adapters = objs.rows\n .filter(\n row =>\n row.value.type === 'meta' &&\n !(\n names &&\n adapter &&\n row.value._id !== names[0] &&\n !row.value._id.startsWith(`${names[0]}.`)\n )\n )\n .map(row => row.value._id);\n\n if (names) {\n names.shift();\n }\n\n this.listAdaptersFiles(adapters, names ? names.join('/') : null, () => this.processExit());\n });\n break;\n }\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_js_controller_common", "fs", "err", "files", "type"]
|
|
7
7
|
}
|
|
@@ -145,8 +145,8 @@ class Repo {
|
|
|
145
145
|
return oldRepos.native.repositories[repoName].json;
|
|
146
146
|
}
|
|
147
147
|
async showRepo(repoUrl, flags) {
|
|
148
|
-
const systemConfig = await this.objects.
|
|
149
|
-
const systemRepos = await this.objects.
|
|
148
|
+
const systemConfig = await this.objects.getObject("system.config");
|
|
149
|
+
const systemRepos = await this.objects.getObject("system.repositories");
|
|
150
150
|
if (!systemConfig) {
|
|
151
151
|
console.error('Error: Object "system.config" not found');
|
|
152
152
|
} else if (!systemRepos) {
|
|
@@ -252,13 +252,19 @@ class Repo {
|
|
|
252
252
|
}
|
|
253
253
|
async showRepoStatus() {
|
|
254
254
|
try {
|
|
255
|
-
const obj = await this.objects.
|
|
255
|
+
const obj = await this.objects.getObject("system.repositories");
|
|
256
|
+
const objCfg = await this.objects.getObject("system.config");
|
|
256
257
|
if (!obj) {
|
|
257
258
|
console.error("List is empty");
|
|
258
259
|
return import_js_controller_common.EXIT_CODES.CANNOT_GET_REPO_LIST;
|
|
259
260
|
} else if (obj.native.repositories) {
|
|
260
|
-
Object.
|
|
261
|
-
|
|
261
|
+
console.table(Object.entries(obj.native.repositories).map(([key, value]) => {
|
|
262
|
+
return {
|
|
263
|
+
name: key,
|
|
264
|
+
url: value.link,
|
|
265
|
+
"auto upgrade": objCfg?.common.adapterAutoUpgrade?.repositories[key] ?? false
|
|
266
|
+
};
|
|
267
|
+
}));
|
|
262
268
|
if (objCfg?.common) {
|
|
263
269
|
let activeRepo = objCfg.common.activeRepo;
|
|
264
270
|
if (typeof activeRepo === "string") {
|
|
@@ -266,6 +272,7 @@ class Repo {
|
|
|
266
272
|
}
|
|
267
273
|
console.log(`
|
|
268
274
|
Active repo(s): ${activeRepo.join(", ")}`);
|
|
275
|
+
console.log(`Upgrade policy: ${objCfg.common.adapterAutoUpgrade?.defaultPolicy ?? "none"}`);
|
|
269
276
|
}
|
|
270
277
|
} else {
|
|
271
278
|
console.error("List is empty");
|