@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/setup.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport deepClone from 'deep-clone';\nimport { isDeepStrictEqual } from 'node:util';\nimport Debug from 'debug';\nimport { objectsDbHasServer, isLocalObjectsDbServer, isLocalStatesDbServer } from '@iobroker/js-controller-common';\nimport path from 'node:path';\nimport yargs from 'yargs/yargs';\nimport * as CLITools from '@/lib/cli/cliTools.js';\nimport { CLIHost } from '@/lib/cli/cliHost.js';\nimport { CLIStates } from '@/lib/cli/cliStates.js';\nimport { CLIDebug } from '@/lib/cli/cliDebug.js';\nimport { CLICert } from '@/lib/cli/cliCert.js';\nimport { CLIObjects } from '@/lib/cli/cliObjects.js';\nimport { CLICompact } from '@/lib/cli/cliCompact.js';\nimport { CLILogs } from '@/lib/cli/cliLogs.js';\nimport { CLIProcess } from '@/lib/cli/cliProcess.js';\nimport { CLIMessage } from '@/lib/cli/cliMessage.js';\nimport { CLIPlugin } from '@/lib/cli/cliPlugin.js';\nimport { error as CLIError } from '@/lib/cli/messages.js';\nimport type { CLICommandContext, CLICommandOptions } from '@/lib/cli/cliCommand.js';\nimport { getRepository, ignoreVersion, recognizeVersion } from '@/lib/setup/utils.js';\nimport { dbConnect, dbConnectAsync, exitApplicationSave } from '@/lib/setup/dbConnection.js';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\nimport type { ListType } from '@/lib/setup/setupList.js';\nimport * as url from 'node:url';\nimport * as events from 'node:events';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename));\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || 'file://' + __filename);\n\ntools.ensureDNSOrder();\n\nconst debug = Debug('iobroker:cli');\n\nevents.EventEmitter.setMaxListeners(100);\nprocess.setMaxListeners(0);\n\nlet _yargs: ReturnType<typeof yargs>;\n\ntype ExitCodeCb = (exitCode?: number) => void;\n\ninterface InternalRebuildOptions {\n cwd?: string;\n module?: string;\n debug: boolean;\n}\n\n/**\n * Initialize Yargs to parse commands correctly and be able to output correct help\n */\nfunction initYargs(): ReturnType<typeof yargs> {\n _yargs = yargs(process.argv.slice(2))\n .scriptName(tools.appName)\n .locale('en') // otherwise it could be mixed, because our implementations are in english\n .version(false) // disable yargs own version handling, because we have our own depending on passed instances\n .completion('_createCompletion', false) // can be created via iob _createCompletion >> ~/.bashrc or ~/.bash_profile for OSX\n .command('setup', 'Setup ioBroker', {\n redis: {\n describe: 'Setup as redis',\n type: 'boolean'\n },\n objects: {\n describe: 'Objects <host>',\n default: tools.getLocalAddress(),\n type: 'number'\n },\n states: {\n describe: 'States <host>',\n default: tools.getLocalAddress(),\n type: 'number'\n },\n 'port <port>': {\n describe: 'Port of redis',\n default: 6379,\n type: 'number'\n },\n custom: {\n describe: 'Custom setup',\n type: 'boolean'\n },\n first: {\n describe: 'Initial setup',\n type: 'boolean'\n }\n })\n .command(\n 'start [all|<adapter>.<instance>|<adapter>]',\n 'Starts the js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs\n .command('all', 'Starts js-controller and all adapters')\n .command('<adapter>[.<instance>]', 'Starts a specified adapter instance');\n }\n )\n .command(\n 'stop [<adapter>.<instance>|<adapter>]',\n 'stops the js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs.command('<adapter>[.<instance>]', 'Stops a specified adapter instance');\n }\n )\n .command(\n ['restart [<adapter>.<instance>|<adapter>]', 'r [<adapter>.<instance>|<adapter>]'],\n 'Restarts js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs.command('<adapter>[.<instance>]', 'Restarts a specified adapter instance', {});\n }\n )\n .command('debug <adapter>[.<instance>]', 'Starts a Node.js debugging session for the adapter instance', {\n ip: {\n describe: 'IP-address <ip>',\n type: 'string'\n },\n port: {\n describe: 'Port <port>',\n type: 'number'\n },\n wait: {\n describe: 'Wait',\n type: 'boolean'\n }\n })\n .command('info', 'Shows the host info', {})\n .command('logs [<adapter>]', 'Monitor log', {\n 'lines=1000': {\n // TODO: it's the only place we use = we should avoid this\n describe: 'Number of lines',\n type: 'string'\n },\n watch: {\n describe: 'Watch',\n type: 'boolean'\n }\n })\n .command(['add <adapter> [desiredNumber]', 'a <adapter> [desiredNumber]'], 'Add instance of adapter', {\n enabled: {\n describe: 'Enable adapter',\n type: 'boolean'\n },\n host: {\n describe: 'Host <host>',\n type: 'string'\n },\n port: {\n describe: 'Port <port>',\n type: 'number'\n }\n })\n .command(['install <adapter>', 'i <adapter>'], 'Installs a specified adapter', {})\n .command('rebuild [<module>]', 'Rebuild all native modules or path', {\n path: {\n describe: 'Executes rebuild command in given path',\n type: 'string'\n }\n })\n .command(\n 'url <url> [<name>]',\n 'Install adapter from specified url, e.g. GitHub, if a package name is provided instead of an url, it will be installed from npm',\n {}\n )\n .command(['del <adapter>', 'delete <adapter>'], 'Remove adapter and all instances from this host', {\n custom: {\n describe: 'Remove adapter custom attribute from all objects',\n type: 'boolean'\n }\n })\n .command(['del <adapter>.<instance>', 'delete <adapter>.<instance>'], 'Remove adapter instance', {\n custom: {\n describe: 'Remove instance custom attribute from all objects',\n type: 'boolean'\n }\n })\n .command('update [<repositoryUrl>]', 'Update repository and list adapters', {\n updatable: {\n describe: 'Only show updatable adapters',\n alias: 'u',\n type: 'boolean'\n },\n all: {\n describe: 'Show all available adapters',\n alias: 'a',\n type: 'boolean'\n },\n force: {\n describe: 'Bypass hash check',\n alias: 'f',\n type: 'boolean'\n }\n })\n .command('upgrade', 'Upgrade management', yargs => {\n yargs\n .option('yes', {\n describe: 'Bypass questionnaire',\n alias: 'y',\n type: 'boolean'\n })\n .command('[<repositoryUrl>]', 'Upgrade all adapters, optionally you can specify the repository url', {})\n .command(\n 'all [<repositoryUrl>]',\n 'Upgrade all adapters, optionally you can specify the repository url',\n {}\n )\n .command(\n 'self [<repositoryUrl>]',\n 'Upgrade js-controller, optionally you can specify the repository url',\n {}\n )\n .command(\n '<adapter> [<repositoryUrl>]',\n 'Upgrade specified adapter, optionally you can specify the repository url',\n {}\n );\n })\n .command(['upload [all|<adapter>]', 'u [all|<adapter>]'], 'Upload management', yargs => {\n yargs\n .command(\n `<pathToLocalFile> <pathIn${tools.appName}>`,\n 'Upload given files to provided path to make them available for instances',\n {}\n )\n .command('all', 'Upload all adapter files to make them available for instances', {})\n .command('<adapter>', 'Upload specified adapter files to make them available for instances', {});\n })\n .command(['object', 'o'], 'Object management', yargs => {\n yargs\n .command('get <id>', 'Get object specified by id', {})\n .command('set <id> <json-value>', 'Set object with the given id by providing a new json object', {})\n .command(\n 'set <id> propertyname=<value or json-value>',\n 'Update part of the object by providing a new value or partial object',\n {}\n )\n .command(\n 'extend <id> <json-value>',\n 'Extend object with the given id by providing a new json object',\n {}\n )\n .command('del <id|pattern>', 'Delete object with given id or all objects matching the pattern', {\n y: {\n describe: 'Bypass questionnaire',\n alias: 'y',\n type: 'boolean'\n }\n })\n .command('chmod <object-mode> [state-mode] <id>', 'Change object rights', {})\n .command('chown <user> <group> <id>', 'Change object ownership', {})\n .command('list <pattern>', 'List object matching given pattern', {})\n .command('setDBVersion <version>', 'Sets the protocol version of the objects database')\n .command('getDBVersion', 'Get the protocol version of the objects database')\n .command('activateSets', 'Activate the usage of Redis Sets')\n .command('deactivateSets', 'Deactivate the usage of Redis Sets');\n })\n .command(['state', 's'], 'State management', yargs => {\n yargs\n .command('get <id>', 'Get state, specified by id', {})\n .command('getPlain <id>', 'Get plain state, specified by id', {\n pretty: {\n describe: 'Prettify output',\n type: 'boolean'\n }\n })\n .command('getValue <id>', 'Get state value, specified by id', {})\n .command('set <id> <value> [<ack>]', 'Set state, specified by id', {})\n .command('del <id>', 'Delete state, specified by id', {})\n .command('setDBVersion <version>', 'Sets the protocol version of the states database')\n .command('getDBVersion', 'Get the protocol version of the states database');\n })\n .command('message <adapter>[.instance] <command> [<message>]', 'Send message to adapter instance/s', {})\n .command('list <type> [<filter>]', 'List all entries, like objects', yargs => {\n yargs.positional('type', {\n describe: 'Type of the objects which should be listed',\n type: 'string',\n choices: [\n 'objects',\n 'o',\n 'states',\n 's',\n 'instances',\n 'i',\n 'adapters',\n 'a',\n 'users',\n 'u',\n 'groups',\n 'g',\n 'enums',\n 'e',\n 'files',\n 'f',\n 'hosts',\n 'h'\n ]\n });\n\n yargs.positional('filter', {\n describe: 'Filter for matching pattern e.g. \"admin*\"',\n type: 'string'\n });\n })\n .command('chmod <mode> <file>', 'Change file rights', {})\n .command('chown <user> <group> <file>', 'Change file ownership', {})\n .command('touch <file>', 'Touch file', {})\n .command('rm <file>', 'Remove file', {})\n .command('file', 'File management', yargs => {\n yargs\n .command(\n `read <${tools.appName}-path-to-read> [<filesystem-path-to-write>]`,\n `Read file from ${tools.appName} path and optionally write to destination`,\n {}\n )\n .command(\n `write <filesystem-path-to-read> <${tools.appName}-path-to-write>`,\n `Read file from path and write it to ${tools.appName} path`,\n {}\n )\n .command(`rm <${tools.appName}-path-to-delete>`, 'Remove file', {})\n .command('sync', 'Sync files', {});\n })\n .command('user', 'User commands', yargs => {\n yargs\n .command('add <user>', 'Add new user', yargs => {\n yargs\n .option('ingroup', {\n describe: 'User group',\n type: 'string'\n })\n .option('password', {\n describe: 'User password',\n type: 'string'\n });\n })\n .command('del <user>', 'Delete user', {})\n .command('passwd <user>', 'Change user password', yargs => {\n yargs.option('password', {\n describe: 'User password',\n type: 'string'\n });\n })\n .command('enable <user>', 'Enable user', {})\n .command('disable <user>', 'Disable user', {})\n .command('get <user>', 'Get user', {})\n .command('check <user>', 'Check user password', yargs => {\n yargs.option('password', {\n describe: 'User password',\n type: 'string'\n });\n });\n })\n .command('group', 'group management', yargs => {\n yargs\n .command('add <group>', 'Add group', {})\n .command('del <group>', 'Remove group', {})\n .command('list <group>', 'List group', {})\n .command('enable <group>', 'Enable group', {})\n .command('disable <group>', 'Disable group', {})\n .command('get <group>', 'Get group', {})\n .command('adduser <group> <user>', 'Add user to group', {})\n .command('deluser <group> <user>', 'Remove user from group', {});\n })\n .command('host <hostname>', 'Set host to given hostname', yargs => {\n yargs\n .command('this', 'Initialize current host', {})\n .command('set <hostname>', 'Set host with specified hostname', {})\n .command('remove <hostname>', 'Remove host with specified hostname', {});\n })\n .command('set <adapter>.<instance>', 'Change settings of adapter config', {\n customOption: {\n describe:\n 'Set the name of the parameter you want to change as option followed by its value, e. g. --port 80'\n }\n })\n .command('license <license.file or license.text>', 'Update license by given file', {})\n .command('cert', 'Certificate management', yargs => {\n yargs\n .command('create', 'Create certificate', {})\n .command('view [<certificate name>]', 'Show certificate', {});\n })\n .command('clean <yes>', 'Clears all objects and states', {})\n .command('backup', 'Create backup', {})\n .command('restore <backup name or path>', 'Restore a specified backup', {\n force: {\n describe: 'Restore backup of different controller version',\n alias: 'f',\n type: 'boolean'\n }\n })\n .command('validate <backup name or path>', 'Validate a specified backup', {})\n .command(['status [all|<adapter>.<instance>]', 'isrun'], 'Status of ioBroker or adapter instance', yargs => {\n yargs\n .command('all', 'Show entire config')\n .command('<adapter>[.<instance>]', 'Status of a specified adapter instance');\n })\n .command('repo [<name>]', 'Show repo information', yargs => {\n yargs\n .command('set <name>', 'Set active repository')\n .command('del <name>', 'Remove repository')\n .command('add <name> <url>', 'Add repository')\n .command('addset <name> <url>', 'Add repository and set it as active one')\n .command('show', 'List repositories');\n })\n .command(['uuid', 'id'], 'Show uuid of the installation', {})\n .command('unsetup', 'Reset license, installation secret and language', {})\n .command('fix', 'Execute the installation fixer script, this updates your ioBroker installation', {})\n .command('nodejs-update [<major-version>]', 'Upgrade the Node.JS installation to the current LTS', {})\n .command('multihost', 'Multihost management', yargs => {\n yargs\n .command('enable', 'Enable multihost discovery', {\n secure: {\n describe: 'Use secure connection',\n type: 'boolean'\n },\n persist: {\n describe: 'Enable persistent discovery',\n type: 'boolean'\n }\n })\n .command('disable', 'Disable multihost discovery')\n .command('browse', 'Browse for multihost server')\n .command('connect', 'Connect to multihost server');\n })\n .command('compact', 'compact group management', yargs => {\n yargs\n .command('enable', 'Enable compact mode in general')\n .command('on', 'Enable compact mode in general')\n .command('disable', 'Disable compact mode in general')\n .command('off', 'Disable compact mode in general')\n .command('<adapter>.<instance> status', 'Show if compact mode is enabled for a specific instance')\n .command('<adapter>.<instance> group <group-id>', 'Define compact group of a specific adapter')\n .command(\n '<adapter>.<instance> <disable|off> [<group-id>]',\n 'Enable or disable compact mode for specified adapter instance and set compact group optionally'\n )\n .command(\n '<adapter>.<instance> <enable|on> [<group-id>]',\n 'Enable or disable compact mode for specified adapter instance and set compact group optionally'\n );\n })\n .command('plugin', 'Plugin management', yargs => {\n yargs\n .command(\n 'enable <pluginname>',\n 'Enables a plugin for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n )\n .command(\n 'disable <pluginname>',\n 'Disables a plugin for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n )\n .command(\n 'status <pluginname>',\n 'Checks if a plugin is enabled for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n );\n })\n .command('vendor <passphrase> [<vendor.json>]', 'Update the vendor information using given passphrase')\n .command(['version [<adapter>]', 'v [<adapter>]'], 'Show version of js-controller or specified adapter', {\n ignore: {\n describe:\n 'Ignore specific version of this adapter. The adapter will not be upgradeable to this specific version.',\n type: 'string'\n },\n recognize: {\n describe: 'No longer ignore specific versions of this adapter.',\n type: 'boolean'\n }\n })\n .wrap(null);\n\n return _yargs;\n}\n\n/**\n * Show yargs help, if processCommand is used as import, yargs won't be initialized\n */\nfunction showHelp(): void {\n if (_yargs) {\n _yargs.showHelp();\n }\n}\n\n/**\n * Process the given CLI command\n *\n * @param command - command to execute\n * @param args - arguments passed to yargs\n * @param params - object with parsed params by yargs, e. g. --force is params.force\n * @param callback - callback to be called with the exit code\n */\nasync function processCommand(\n command: string | number,\n args: string[],\n params: Record<string, any>,\n callback: ExitCodeCb\n): Promise<void> {\n const commandContext: CLICommandContext = { dbConnect, callback, showHelp };\n const commandOptions: CLICommandOptions = { ...params, ...commandContext };\n debug(`commandOptions: ${JSON.stringify(commandOptions)}`);\n debug(`args: ${JSON.stringify(args)}`);\n\n switch (command) {\n case 'start':\n case 'stop': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand[command](args);\n break;\n }\n\n case 'debug': {\n const debugCommand = new CLIDebug(commandOptions);\n debugCommand.execute(args);\n break;\n }\n\n case 'status':\n case 'isrun': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand.status(args);\n break;\n }\n\n case 'r':\n case 'restart': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand.restart(args);\n break;\n }\n\n case '_restart':\n restartController();\n callback();\n break;\n\n case 'update': {\n const repoUrl = args[0]; // Repo url or name\n dbConnect(params, async ({ objects, states }) => {\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({\n objects,\n states\n });\n\n await repo.showRepo(repoUrl, params);\n setTimeout(callback, 1_000);\n });\n break;\n }\n\n case 'setup': {\n const { Setup } = await import('./setup/setupSetup.js');\n const setup = new Setup({\n processExit: callback,\n cleanDatabase,\n restartController,\n params\n });\n if (args[0] === 'custom' || params.custom) {\n const exitCode = await setup.setupCustom();\n callback(exitCode);\n return;\n }\n\n let isFirst = false;\n let isRedis = false;\n\n // we support \"first\" and \"redis\" without \"--\" flag\n for (const arg of args) {\n if (arg === 'first') {\n isFirst = true;\n } else if (arg === 'redis') {\n isRedis = true;\n }\n }\n\n // and as --flag\n isRedis = params.redis || isRedis;\n isFirst = params.first || isFirst;\n\n setup.setup({\n callback: async () => {\n const { states, objects } = await dbConnectAsync(false, params);\n if (isFirst) {\n // Creates all instances that are needed on a fresh installation\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n // Define the necessary instances\n const initialInstances = ['admin', 'discovery', 'backitup'];\n // And try to install each of them\n for (const instance of initialInstances) {\n try {\n const adapterInstalled = !!require.resolve(\n `${tools.appName.toLowerCase()}.${instance}`\n );\n\n if (adapterInstalled) {\n let otherInstanceExists = false;\n try {\n // check if another instance exists\n const res = await objects.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${instance}`,\n endkey: `system.adapter.${instance}\\u9999`\n });\n\n otherInstanceExists = !!res.rows.length;\n } catch {\n // ignore - on install we have no object views\n }\n\n if (!otherInstanceExists) {\n await install.createInstance(instance, {\n enabled: true,\n ignoreIfExists: true\n });\n }\n }\n } catch {\n // not found, just continue\n }\n }\n\n await new Promise(resolve => {\n // Creates a fresh certificate\n // Create a new instance of the cert command,\n // but use the resolve method as a callback\n const cert = new CLICert({ ...commandOptions, callback: resolve });\n cert.create();\n });\n }\n\n // we update existing things, in first as well as normal setup\n // Rename repositories\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({ objects, states });\n\n try {\n await repo.rename('default', 'stable', 'http://download.iobroker.net/sources-dist.json');\n await repo.rename('latest', 'beta', 'http://download.iobroker.net/sources-dist-latest.json');\n } catch (err) {\n console.warn(`Cannot rename: ${err.message}`);\n }\n\n // there has been a bug that user can upload js-controller\n try {\n await objects.delObjectAsync('system.adapter.js-controller');\n } catch {\n // ignore\n }\n\n try {\n const configFile = tools.getConfigFileName();\n\n const configOrig = fs.readJSONSync(configFile);\n const config = deepClone(configOrig);\n\n config.objects.options = config.objects.options || {\n auth_pass: null,\n retry_max_delay: 5_000\n };\n if (\n config.objects.options.retry_max_delay === 15_000 ||\n !config.objects.options.retry_max_delay\n ) {\n config.objects.options.retry_max_delay = 5_000;\n }\n config.states.options = config.states.options || {\n auth_pass: null,\n retry_max_delay: 5_000\n };\n if (\n config.states.options.retry_max_delay === 15_000 ||\n !config.states.options.retry_max_delay\n ) {\n config.states.options.retry_max_delay = 5_000;\n }\n\n let migrated = '';\n // We migrate file to jsonl\n if (config.states.type === 'file') {\n config.states.type = 'jsonl';\n\n const hasLocalStatesServer = await isLocalStatesDbServer('file', config.states.host);\n if (hasLocalStatesServer) {\n // silent config change on secondaries\n console.log('States DB type migrated from \"file\" to \"jsonl\"');\n migrated += 'States';\n }\n }\n\n if (config.objects.type === 'file') {\n config.objects.type = 'jsonl';\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer('file', config.objects.host);\n if (hasLocalObjectsServer) {\n // silent config change on secondaries\n console.log('Objects DB type migrated from \"file\" to \"jsonl\"');\n migrated += migrated ? ' and Objects' : 'Objects';\n }\n }\n\n if (migrated) {\n const { NotificationHandler } = await import('@iobroker/js-controller-common');\n\n const hostname = tools.getHostName();\n\n const notificationSettings = {\n states,\n objects,\n log: console,\n logPrefix: '',\n host: hostname\n };\n\n const notificationHandler = new NotificationHandler(notificationSettings);\n\n try {\n const ioPackage = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'io-package.json')\n );\n await notificationHandler.addConfig(ioPackage.notifications);\n\n await notificationHandler.addMessage(\n 'system',\n 'fileToJsonl',\n `Migrated: ${migrated}`,\n `system.host.${hostname}`\n );\n\n notificationHandler.storeNotifications();\n } catch (e) {\n console.warn(`Could not add File-to-JSONL notification: ${e.message}`);\n }\n }\n\n if (!isDeepStrictEqual(config, configOrig)) {\n fs.writeFileSync(configFile, JSON.stringify(config, null, 2));\n console.log('ioBroker configuration updated');\n }\n } catch (err) {\n console.log(`Could not update ioBroker configuration: ${err.message}`);\n }\n\n return void callback();\n },\n ignoreIfExist: isFirst,\n useRedis: isRedis\n });\n break;\n }\n\n case 'url': {\n let url = args[0];\n const name = args[1];\n\n if (!url) {\n console.log('Please provide a URL to install from and optionally a name of the adapter to install');\n callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n if (url[0] === '\"' && url[url.length - 1] === '\"') {\n url = url.substring(1, url.length - 1);\n }\n url = url.trim();\n\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n try {\n await install.installAdapterFromUrl(url, name);\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n console.error(`Could not install adapter from url: ${e.message}`);\n return void callback(EXIT_CODES.CANNOT_INSTALL_NPM_PACKET);\n }\n });\n break;\n }\n\n case 'info': {\n dbConnect(params, async ({ objects }) => {\n try {\n const data = await tools.getHostInfo(objects);\n const formatters = await import('./setup/formatters.js');\n const formatInfo = {\n Uptime: formatters.formatSeconds,\n 'System uptime': formatters.formatSeconds,\n RAM: formatters.formatRam,\n Speed: formatters.formatSpeed,\n 'Disk size': formatters.formatBytes,\n 'Disk free': formatters.formatBytes\n };\n\n for (const attr of Object.keys(data)) {\n console.log(\n `${attr}${attr.length < 16 ? new Array(16 - attr.length).join(' ') : ''}: ${\n // @ts-expect-error todo would need checks\n formatInfo[attr] ? formatInfo[attr](data[attr]) : data[attr] || ''\n }`\n );\n }\n } catch (err) {\n console.error('Cannot read host info: ' + (typeof err === 'object' ? JSON.stringify(err) : err));\n return callback(EXIT_CODES.CANNOT_GET_HOST_INFO);\n }\n\n return void callback();\n });\n break;\n }\n\n case 'a':\n case 'add':\n case 'install':\n case 'i': {\n let name = args[0];\n let instance: string | undefined = args[1];\n let repoUrl: string | undefined = args[2];\n\n if (parseInt(instance, 10).toString() !== (instance || '').toString()) {\n repoUrl = instance;\n instance = undefined;\n }\n if (parseInt(repoUrl, 10).toString() === (repoUrl || '').toString()) {\n const temp = instance;\n instance = repoUrl;\n repoUrl = temp;\n }\n if (instance && parseInt(instance, 10).toString() === (instance || '').toString()) {\n params.instance = parseInt(instance, 10);\n }\n\n // If user accidentally wrote tools.appName.adapter => remove adapter\n name = CLITools.normalizeAdapterName(name);\n\n const parsedName = CLITools.splitAdapterOrInstanceIdentifierWithVersion(name);\n if (!parsedName) {\n console.log('Invalid adapter name for install');\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n\n // split the adapter into its parts if necessary\n if (parsedName.instance !== null) {\n params.instance = parsedName.instance;\n }\n name = parsedName.name;\n const installName = parsedName.nameWithVersion;\n\n const adapterDir = tools.getAdapterDir(name);\n\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n if (params.host && params.host !== tools.getHostName()) {\n // if host argument provided we should check, that host actually exists in mh environment\n let obj;\n try {\n obj = await objects.getObjectAsync(`system.host.${params.host}`);\n } catch (err) {\n console.warn(`Could not check existence of host \"${params.host}\": ${err.message}`);\n }\n\n if (!obj) {\n console.error(`Cannot add instance to non-existing host \"${params.host}\"`);\n return void callback(EXIT_CODES.NON_EXISTING_HOST);\n }\n }\n\n if (!adapterDir || !fs.existsSync(adapterDir)) {\n try {\n const { stoppedList } = await install.downloadPacket(repoUrl, installName);\n await install.installAdapter(installName, repoUrl);\n await install.enableInstances(stoppedList, true); // even if unlikely make sure to re-enable disabled instances\n if (command !== 'install' && command !== 'i') {\n await install.createInstance(name, params);\n }\n return void callback();\n } catch (e) {\n console.error(`adapter \"${name}\" cannot be installed: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n }\n } else if (command !== 'install' && command !== 'i') {\n try {\n await install.createInstance(name, params);\n return void callback();\n } catch (err) {\n console.error(`adapter \"${name}\" cannot be installed: ${err.message}`);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n } else {\n console.log(`adapter \"${name}\" already installed. Use \"upgrade\" to upgrade to a newer version.`);\n return void callback(EXIT_CODES.ADAPTER_ALREADY_INSTALLED);\n }\n });\n break;\n }\n\n case 'rebuild': {\n const options: InternalRebuildOptions = { debug: process.argv.includes('--debug') };\n\n if (commandOptions.path) {\n if (path.isAbsolute(commandOptions.path)) {\n options.cwd = commandOptions.path;\n } else {\n console.log('Path argument needs to be an absolute path!');\n return void exitApplicationSave(EXIT_CODES.INVALID_ARGUMENTS);\n }\n }\n\n if (commandOptions.module) {\n options.module = commandOptions.module;\n console.log(\n `Rebuilding native module \"${commandOptions.module}\"${options.cwd ? ` in ${options.cwd}` : ''} ...`\n );\n } else {\n console.log(`Rebuilding native modules${options.cwd ? ` in ${options.cwd}` : ''} ...`);\n }\n\n const result = await tools.rebuildNodeModules(options);\n\n if (result.success) {\n console.log();\n console.log(`Rebuilding native modules done`);\n return void callback();\n } else {\n console.error('Rebuilding native modules failed');\n return void exitApplicationSave(result.exitCode);\n }\n }\n\n case 'upload':\n case 'u': {\n const name = args[0];\n const subTree = args[1];\n if (name) {\n dbConnect(params, async ({ objects, states }) => {\n const { Upload } = await import('./setup/setupUpload.js');\n const upload = new Upload({ states, objects });\n\n if (name === 'all') {\n try {\n const objs = await objects.getObjectListAsync({\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n });\n\n if (objs) {\n const adapters = [];\n\n for (const row of objs.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n\n adapters.push(\n tools.isObject(row.value.common.name)\n ? row.value.common.name.en\n : row.value.common.name\n );\n }\n\n await upload.uploadAdapterFullAsync(adapters);\n }\n callback();\n } catch (err) {\n console.error(`Cannot upload all adapters: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n } else {\n // if upload of file\n if (name.includes('.')) {\n if (!subTree) {\n console.log(\n `Please specify target name, like:\\n${tools.appName} upload /file/picture.png /vis-2.0/main/img/picture.png`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n try {\n const newName = await upload.uploadFile(name, subTree);\n console.log(`File \"${name}\" is successfully saved under ${newName}`);\n return void callback();\n } catch (err) {\n console.error(`Cannot upload file \"${name}\": ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n } else {\n try {\n if (subTree) {\n await upload.uploadAdapter(name, false, true, subTree);\n } else {\n await upload.uploadAdapterFullAsync([name]);\n }\n return void callback();\n } catch (err) {\n console.error(`Cannot upload files \"${name}\": ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n }\n }\n });\n } else {\n console.log('No adapter name found!');\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n break;\n }\n\n case 'delete':\n case 'del': {\n let adapter = args[0];\n let instance = args[1];\n\n // The adapter argument is required\n if (!adapter) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n // If the user accidentally wrote <tools.appName>.adapter,\n // remove <tools.appName> from the adapter name\n adapter = CLITools.normalizeAdapterName(adapter);\n\n // Avoid deleting stuff we don't want to delete\n // e.g. `system.adapter.*`\n if (!instance) {\n // Ensure that adapter contains a valid adapter (without instance nr)\n // or instance (with instance nr) identifier\n if (!CLITools.validateAdapterOrInstanceIdentifier(adapter)) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n // split the adapter into adapter + instance if necessary\n if (adapter.indexOf('.') > -1) {\n [adapter, instance] = adapter.split('.', 2);\n }\n } else {\n // ensure that adapter contains a valid adapter identifier\n // and the instance is a number\n if (!CLITools.validateAdapterIdentifier(adapter) || !/^\\d+$/.test(instance)) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n }\n\n if (instance) {\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('@/lib/setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n console.log(`Delete instance \"${adapter}.${instance}\"`);\n await install.deleteInstance(adapter, parseInt(instance));\n callback();\n });\n } else {\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('@/lib/setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n console.log(`Delete adapter \"${adapter}\"`);\n const resultCode = await install.deleteAdapter(adapter);\n callback(resultCode);\n });\n }\n break;\n }\n case 'unsetup': {\n const rl = (await import('node:readline')).createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n if (params.yes || params.y || params.Y) {\n unsetup(params, callback);\n } else {\n rl.question('UUID will be deleted. Are you sure? [y/N]: ', answer => {\n rl.close();\n answer = answer.toLowerCase();\n if (answer === 'y' || answer === 'yes' || answer === 'ja' || answer === 'j') {\n unsetup(params, callback);\n } else {\n console.log('Nothing deleted');\n return void callback();\n }\n });\n }\n break;\n }\n\n case 'o':\n case 'object': {\n const objectsCommand = new CLIObjects(commandOptions);\n objectsCommand.execute(args);\n break;\n }\n\n case 's':\n case 'state': {\n const statesCommand = new CLIStates(commandOptions);\n statesCommand.execute(args);\n break;\n }\n\n case 'msg':\n case 'message': {\n const messageCommand = new CLIMessage(commandOptions);\n messageCommand.execute(args);\n break;\n }\n\n case 'logs': {\n const logsCommand = new CLILogs(commandOptions);\n logsCommand.execute(args, params);\n break;\n }\n\n case 'upgrade': {\n let adapter: string | null = CLITools.normalizeAdapterName(args[0]);\n\n if (adapter === 'all') {\n adapter = null;\n }\n\n dbConnect(params, async ({ objects, states }) => {\n const { Upgrade } = await import('./setup/setupUpgrade.js');\n const upgrade = new Upgrade({\n objects,\n states,\n params,\n processExit: callback\n });\n\n if (adapter) {\n try {\n if (adapter === 'self') {\n const hostAlive = await states.getStateAsync(`system.host.${tools.getHostName()}.alive`);\n await upgrade.upgradeController('', params.force || params.f, !!hostAlive?.val);\n } else {\n await upgrade.upgradeAdapter(\n '',\n adapter,\n params.force || params.f,\n params.y || params.yes,\n false\n );\n }\n return void callback();\n } catch (err) {\n console.error(`Cannot upgrade: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else {\n // upgrade all\n try {\n const links = await getRepository({ objects });\n if (!links) {\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n await upgrade.upgradeAdapterHelper(\n links,\n Object.keys(links).sort(),\n false,\n params.y || params.yes\n );\n return void callback();\n } catch (e) {\n console.error(`Cannot upgrade: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.INVALID_REPO);\n }\n }\n });\n break;\n }\n\n case 'clean': {\n const yes = args[0];\n if (yes !== 'yes') {\n console.log(\n `Command \"clean\" clears all Objects and States. To execute it write \"${tools.appName} clean yes\"`\n );\n } else {\n dbConnect(params, async ({ isOffline }) => {\n if (!isOffline) {\n console.error(`Stop ${tools.appName} first!`);\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n try {\n const count = await cleanDatabase(true);\n console.log(`Deleted ${count} states`);\n } catch {\n // ignore\n }\n restartController();\n console.log(`Restarting ${tools.appName}...`);\n callback();\n });\n }\n break;\n }\n\n case 'restore': {\n const { BackupRestore } = await import('./setup/setupBackup.js');\n\n dbConnect(params, ({ isOffline, objects, states }) => {\n if (!isOffline) {\n console.error(`Stop ${tools.appName} first!`);\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n backup.restoreBackup({\n name: args[0],\n force: !!params.force,\n dontDeleteAdapters: false,\n callback: ({ exitCode }) => {\n if (exitCode === EXIT_CODES.NO_ERROR) {\n console.log('System successfully restored!');\n }\n return void callback(exitCode);\n }\n });\n });\n break;\n }\n\n case 'backup': {\n const name = args[0];\n const { BackupRestore } = await import('./setup/setupBackup.js');\n\n dbConnect(params, async ({ states, objects }) => {\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n try {\n const filePath = await backup.createBackup(name);\n console.log(`Backup created: ${filePath!}`);\n console.log('This backup can only be restored with js-controller version up from 4.1');\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n console.log(`Cannot create backup: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP);\n }\n });\n break;\n }\n\n case 'validate': {\n const name = args[0];\n const { BackupRestore } = await import('./setup/setupBackup.js');\n dbConnect(params, async ({ objects, states }) => {\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n try {\n await backup.validateBackup(name);\n console.log('Backup OK');\n return void exitApplicationSave(0);\n } catch (err) {\n console.log(`Backup check failed: ${err.message}`);\n return void exitApplicationSave(1);\n }\n });\n break;\n }\n\n case 'l':\n case 'list': {\n dbConnect(params, async ({ objects, states }) => {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.list(args[0] as ListType, args[1], params);\n });\n break;\n }\n\n case 'touch': {\n let pattern = args[0];\n\n if (!pattern) {\n console.log('No file path found. Example: \"touch /vis-2.0/main/*\"');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ states, objects }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.touch(\n row.value.common.name,\n '*',\n { user: 'system.user.admin' },\n // @ts-expect-error todo this looks wrong, we have no cb args other than err\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n for (const file of files) {\n for (const processedFile of processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n // @ts-expect-error todo processed should not exist, how to proceed?\n objects.touch(id, path, { user: 'system.user.admin' }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n for (const processedFile of processed) {\n list.showFile(id, processedFile.path, processedFile);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'rm': {\n let pattern = args[0];\n\n if (!pattern) {\n console.log('No file path found. Example: \"touch /vis-2.0/main/*\"');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.rm(\n row.value.common.name,\n '*',\n { user: 'system.user.admin' },\n // @ts-expect-error todo id should not exist according to types check it\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (const file of files) {\n for (const processedFile of processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.rm(id, path, { user: 'system.user.admin' }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'chmod': {\n let mode: string | number = args[0];\n let pattern = args[1];\n\n if (!mode) {\n CLIError.requiredArgumentMissing('mode', 'chmod 777 /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n // yargs has converted it to number\n mode = parseInt(mode.toString(), 16);\n }\n\n if (!pattern) {\n CLIError.requiredArgumentMissing('file path', 'chmod 777 /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.chmodFile(\n row.value.common.name,\n '*',\n {\n user: 'system.user.admin',\n mode\n },\n // @ts-expect-error todo _id should not exist how to handle\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (const file of files) {\n for (const processedFile of file.processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.chmodFile(id, path, { user: 'system.user.admin', mode: mode }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'chown': {\n let user = args[0];\n let group: string | undefined = args[1];\n let pattern = args[2];\n\n if (!pattern) {\n pattern = group;\n group = undefined;\n }\n\n if (!user) {\n CLIError.requiredArgumentMissing('user', 'chown user /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else if (user.substring(12) !== 'system.user.') {\n user = `system.user.${user}`;\n }\n if (group && group.substring(13) !== 'system.group.') {\n group = `system.group.${group}`;\n }\n\n if (!pattern) {\n CLIError.requiredArgumentMissing('file path', 'chown user /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.chownFile(\n row.value.common.name as string,\n '*',\n {\n user: 'system.user.admin',\n owner: user as ioBroker.ObjectIDs.User,\n ownerGroup: group\n },\n // @ts-expect-error todo _id should not exist how to handle\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (let k = 0; k < files.length; k++) {\n for (let t = 0; t < files[k].processed.length; t++) {\n list.showFile(\n files[k].id,\n files[k].processed[t].path,\n files[k].processed[t]\n );\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.chownFile(\n id,\n path,\n {\n user: 'system.user.admin',\n owner: user as ioBroker.ObjectIDs.User,\n ownerGroup: group\n },\n async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n // call here list\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n }\n );\n }\n });\n break;\n }\n\n case 'user': {\n const command = args[0] || '';\n let user = args[1] || '';\n\n if (user && user.startsWith('system.user.')) {\n user = user.substring('system.user.'.length);\n }\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n const password = params.password;\n const group = params.ingroup || 'system.group.administrator';\n\n if (command === 'add') {\n users.addUserPrompt(user, group, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" created (Group: ${group.replace('system.group.', '')})`);\n return void callback();\n }\n });\n } else if (command === 'del' || command === 'delete') {\n users.delUser(user, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" deleted`);\n return void callback();\n }\n });\n } else if (command === 'check') {\n users.checkUserPassword(user, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for user \"${user}\" matches.`);\n return void callback();\n }\n });\n } else if (command === 'set' || command === 'passwd') {\n users.setUserPassword(user, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for \"${user}\" was successfully set.`);\n return void callback();\n }\n });\n } else if (command === 'enable' || command === 'e') {\n users.enableUser(user, true, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was successfully enabled.`);\n return void callback();\n }\n });\n } else if (command === 'disable' || command === 'd') {\n users.enableUser(user, false, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was successfully disabled.`);\n return void callback();\n }\n });\n } else if (command === 'get') {\n users.getUser(user, (err: any, isEnabled: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" is ${isEnabled ? 'enabled' : 'disabled'}`);\n return void callback();\n }\n });\n } else {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, check, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'g':\n case 'group': {\n const command = args[0] || '';\n let group = args[1] || '';\n let user = args[2] || '';\n\n if (group && group.startsWith('system.group.')) {\n group = group.substring('system.group.'.length);\n }\n if (user && user.startsWith('system.user.')) {\n user = user.substring('system.user.'.length);\n }\n if (!command) {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, list, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!group) {\n console.warn(`Please define group name: group ${command} groupName`);\n return callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n\n if (command === 'useradd' || command === 'adduser') {\n if (!user) {\n console.warn('Please define user name: \"group useradd groupName userName\"');\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n users.addUserToGroup(user, group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was added to group \"${group}\"`);\n return void callback();\n }\n });\n } else if (command === 'userdel' || command === 'deluser') {\n if (!user) {\n console.warn('Please define user name: \"group userdel groupName userName\"');\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n users.removeUserFromGroup(user, group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was deleted from group \"${group}\"`);\n return void callback();\n }\n });\n } else if (command === 'add') {\n try {\n await users.addGroup(group);\n console.log(`Group \"${group}\" was created`);\n return void callback();\n } catch {\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n } else if (command === 'del' || command === 'delete') {\n users.delGroup(group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was deleted`);\n return void callback();\n }\n });\n } else if (command === 'list' || command === 'l') {\n users.getGroup(group, (err, isEnabled, members) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(\n `Group \"${group}\" is ${isEnabled ? 'enabled' : 'disabled'} and has following members:`\n );\n if (members) {\n for (const member of members) {\n console.log(member.substring('system.user.'.length));\n }\n }\n return void callback();\n }\n });\n } else if (command === 'enable' || command === 'e') {\n users.enableGroup(group, true, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was successfully enabled.`);\n return void callback();\n }\n });\n } else if (command === 'disable' || command === 'd') {\n users.enableGroup(group, false, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was successfully disabled.`);\n return void callback();\n }\n });\n } else if (command === 'get') {\n users.getGroup(group, (err, isEnabled) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" is ${isEnabled ? 'enabled' : 'disabled'}`);\n return void callback();\n }\n });\n } else {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, list, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'adduser': {\n const user = args[0];\n const group = params.ingroup || 'system.group.administrator';\n const password = params.password;\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.addUserPrompt(user, group, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" created (Group: ${group.replace('system.group.', '')})`);\n return void callback();\n }\n });\n });\n break;\n }\n\n case 'passwd': {\n const user = args[0];\n const password = params.password;\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.setUserPassword(user, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for \"${user}\" was successfully set.`);\n return void callback();\n }\n });\n });\n break;\n }\n\n case 'ud':\n case 'udel':\n case 'userdel':\n case 'deluser': {\n const user = args[0];\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.delUser(user, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" deleted`);\n return void callback();\n }\n });\n });\n break;\n }\n\n // Create package.json in /opt/' + tools.appName + '\n case 'package': {\n const json = {\n name: tools.appName,\n engines: {\n node: '>=12'\n },\n optionalDependencies: {} as Record<string, string>,\n dependencies: {\n [`${tools.appName.toLowerCase()}.js-controller`]: '*',\n [`${tools.appName.toLowerCase()}.admin`]: '*'\n },\n author: 'bluefox <dogafox@gmail.com>'\n };\n\n // @ts-expect-error todo fix it\n tools.getRepositoryFile(null, null, (_err, sources, _sourcesHash) => {\n if (sources) {\n for (const s in sources) {\n if (Object.prototype.hasOwnProperty.call(sources, s)) {\n if (sources[s].url) {\n if (!json.dependencies[tools.appName + '.' + s]) {\n json.optionalDependencies[tools.appName + '.' + s] = sources[s].url;\n }\n } else {\n if (!json.dependencies[tools.appName + '.' + s]) {\n json.optionalDependencies[tools.appName + '.' + s] = '*';\n }\n }\n }\n }\n }\n\n fs.writeFileSync(path.join(tools.getRootDir(), 'package.json'), JSON.stringify(json, null, 2));\n return void callback();\n });\n break;\n }\n\n case 'set': {\n const instance = args[0] as `${string}.${number}`;\n if (!instance) {\n console.warn('please specify instance.');\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n if (instance.indexOf('.') === -1) {\n console.warn(`please specify instance, like \"${instance}.0\"`);\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n const { objects } = await dbConnectAsync(false, params);\n\n let obj: ioBroker.InstanceObject | undefined | null;\n\n try {\n obj = await objects.getObjectAsync(`system.adapter.${instance}`);\n } catch {\n // ignore\n }\n\n if (obj) {\n let changed = false;\n for (let a = 0; a < process.argv.length; a++) {\n if (\n process.argv[a].startsWith('--') &&\n process.argv[a + 1] &&\n !process.argv[a + 1].startsWith('--')\n ) {\n const attr = process.argv[a].substring(2);\n let val: number | string | boolean = process.argv[a + 1];\n if (val === '__EMPTY__') {\n val = '';\n } else if (val === 'true') {\n val = true;\n } else if (val === 'false') {\n val = false;\n } else if (parseFloat(val).toString() === val) {\n val = parseFloat(val);\n }\n if (attr.indexOf('.') !== -1) {\n const parts = attr.split('.');\n if (!obj.native[parts[0]] || obj.native[parts[0]][parts[1]] === undefined) {\n console.warn(`Adapter \"${instance}\" has no setting \"${attr}\".`);\n } else {\n changed = true;\n obj.native[parts[0]][parts[1]] = val;\n console.log(`New ${attr} for \"${instance}\" is: ${val}`);\n }\n } else {\n if (obj.native[attr] === undefined) {\n console.warn(`Adapter \"${instance}\" has no setting \"${attr}\".`);\n } else {\n changed = true;\n obj.native[attr] = val;\n console.log(`New ${attr} for \"${instance}\" is: ${val}`);\n }\n }\n a++;\n }\n }\n if (changed) {\n obj.from = `system.host.${tools.getHostName()}.cli`;\n obj.ts = new Date().getTime();\n objects.setObject(`system.adapter.${instance}`, obj, () => {\n console.log(`Instance settings for \"${instance}\" are changed.`);\n return void callback();\n });\n } else {\n console.log('No parameters set.');\n return void callback();\n }\n } else {\n CLIError.invalidInstance(instance);\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n break;\n }\n\n case 'host': {\n const hostCommand = new CLIHost(commandOptions);\n hostCommand.execute(args);\n break;\n }\n\n case 'visdebug': {\n let widgetset = args[0];\n if (widgetset && widgetset.startsWith('vis-')) {\n widgetset = widgetset.substring(4);\n }\n const { VisDebug } = await import('./setup/setupVisDebug.js');\n\n dbConnect(params, ({ objects }) => {\n const visDebug = new VisDebug({\n objects,\n processExit: callback\n });\n\n visDebug.enableDebug(widgetset);\n });\n break;\n }\n\n case 'file':\n case 'f': {\n const cmd = args[0];\n if (\n cmd !== 'read' &&\n cmd !== 'r' &&\n cmd !== 'w' &&\n cmd !== 'write' &&\n cmd !== 'sync' &&\n cmd !== 'rm' &&\n cmd !== 'unlink' &&\n cmd !== 'del'\n ) {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (cmd !== 'sync' && !args[1]) {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file from DB and store it on disk'\n );\n console.log(\n 'or \"file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png\" to write the file into DB from disk'\n );\n console.log(\n 'or \"file rm /vis-2.0/main/img/picture.png\" to delete the file in DB'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n dbConnect(params, async ({ objects, objectsDBType }) => {\n if (cmd === 'read' || cmd === 'r') {\n const toRead = args[1];\n const parts = toRead.replace(/\\\\/g, '/').split('/');\n\n const path = (args[2] || process.cwd()).replace(/\\\\/g, '/').split('/');\n const file = path[path.length - 1];\n if (!file.match(/\\.[a-zA-Z0-9]+$/)) {\n // If destination location seems to be a directory, add filename\n if (file !== '') {\n path.push(parts[parts.length - 1]);\n } else {\n // trailing slash\n path[path.length - 1] = parts[parts.length - 1];\n }\n }\n let adapt = parts.shift();\n if (!adapt) {\n // leading slash\n adapt = parts.shift();\n }\n if (!adapt) {\n console.log(`Invalid parameters: adapter cannot be found!`);\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!parts.length) {\n console.log('Invalid parameters: file cannot be found: file not provided');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.readFile(adapt, parts.join('/'), null, (err, data) => {\n err && console.error(err);\n if (data) {\n const destFilename = path.join('/');\n fs.writeFileSync(destFilename, data);\n console.log(`File \"${toRead}\" stored as \"${destFilename}\"`);\n }\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'write' || cmd === 'w') {\n const toRead = args[1] || '';\n const parts = toRead.replace(/\\\\/g, '/').split('/');\n\n const path = (args[2] || '').replace(/\\\\/g, '/').split('/');\n\n let adapt = path.shift();\n if (!adapt) {\n adapt = path.shift();\n }\n if (!path.length) {\n path.push('');\n }\n\n const fileSrc = parts[parts.length - 1];\n let fileDest = path[path.length - 1];\n if (!fileDest || !fileDest.match(/\\.[a-zA-Z0-9]+$/)) {\n // last portion of destination has no extension, consider being a directory\n fileDest = '';\n }\n if (!fileSrc || !fs.existsSync(toRead)) {\n console.log(\n `Please provide a valid file name as source file: \"file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js\"`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n const srcStat = fs.statSync(toRead);\n if (!srcStat.isFile()) {\n console.log(\n `Please provide a valid file name as source file: \"file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js\"`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!fileDest) {\n // destination filename is not given, use same name as source file\n fileDest = fileSrc;\n }\n if (fileDest !== path[path.length - 1]) {\n // if last part of path is different then filename, add filename\n if (path[path.length - 1] !== '') {\n path.push(fileDest);\n } else {\n // trailing slash\n path[path.length - 1] = fileDest;\n }\n }\n const destFilename = path.length ? path.join('/') : '/';\n const data = fs.readFileSync(toRead);\n\n if (!adapt) {\n console.log('Invalid parameters: destination adapter cannot be found!');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.writeFile(adapt, destFilename, data, _err => {\n console.log(`File \"${toRead}\" stored as \"${destFilename}\"`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'del' || cmd === 'rm' || cmd === 'unlink') {\n const toDelete = args[1];\n const parts = toDelete.replace(/\\\\/g, '/').split('/');\n\n let adapt = parts.shift();\n if (!adapt) {\n // leading slash\n adapt = parts.shift();\n }\n\n if (!adapt) {\n console.log('Invalid parameters: adapter cannot be found!');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!parts.length) {\n console.log('Invalid parameters: file cannot be found: file not provided');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.unlink(adapt, parts.join('/'), null, err => {\n err && console.error(err);\n !err && console.log(`File \"${toDelete}\" was deleted`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'sync') {\n // Sync\n if (objectsDBType === 'redis') {\n console.log('File Sync is not available when database type \"redis\" is used.');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n // @ts-expect-error todo look in depth how to handle\n if (!objects.syncFileDirectory || !objects.dirExists) {\n // functionality only exists in server class\n console.log(\n 'Please stop ioBroker before syncing files and only use this command on the ioBroker master host!'\n );\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n // check meta.user\n try {\n const objExists = await objects.objectExists('meta.user');\n if (objExists) {\n // check if dir is missing\n // @ts-expect-error todo look in depth how to handle\n const dirExists = objects.dirExists('meta.user');\n if (!dirExists) {\n // create meta.user, so users see them as upload target\n await objects.mkdirAsync('meta.user');\n console.log('Successfully created \"meta.user\" directory');\n }\n }\n } catch (err) {\n console.warn(`Could not create directory \"meta.user\": ${err.message}`);\n }\n\n try {\n // @ts-expect-error todo types needed for this one? but only exists sometimes..\n const { numberSuccess, notifications } = objects.syncFileDirectory(args[1]);\n console.log(`${numberSuccess} file(s) successfully synchronized with ioBroker storage`);\n if (notifications.length) {\n console.log();\n console.log('The following notifications happened during sync: ');\n notifications.forEach((el: string) => console.log('- ' + el));\n }\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n console.error(`Error on sync: ${err.message}. Partial content might have been synced.`);\n return void callback(EXIT_CODES.CANNOT_SYNC_FILES);\n }\n } else {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file from DB and store it on disk'\n );\n console.log(\n 'or \"file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png\" to write the file into DB from disk'\n );\n console.log(\n 'or \"file rm /vis-2.0/main/img/picture.png\" to delete the file in DB'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'id':\n case 'uuid': {\n dbConnect(params, ({ objects }) => {\n objects.getObject('system.meta.uuid', (err, obj) => {\n if (err) {\n console.error(`Error: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_GET_UUID);\n }\n if (obj?.native) {\n console.log(obj.native.uuid);\n return void callback();\n } else {\n console.error('Error: no UUID found');\n return void callback(EXIT_CODES.CANNOT_GET_UUID);\n }\n });\n });\n break;\n }\n\n case 'v':\n case 'version': {\n const adapter = params.adapter;\n\n if (params.ignore) {\n try {\n const { objects } = await dbConnectAsync(false, params);\n await ignoreVersion({ adapterName: adapter, version: params.ignore, objects });\n } catch (e) {\n console.error(e.message);\n callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n return;\n }\n console.log(`Successfully ignored version \"${params.ignore}\" of adapter \"${params.adapter}\"!`);\n callback();\n return;\n }\n\n if (params.recognize) {\n try {\n const { objects } = await dbConnectAsync(false, params);\n await recognizeVersion({ adapterName: adapter, objects });\n } catch (e) {\n console.error(e.message);\n callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n }\n console.log(`Successfully recognized all versions of adapter \"${params.adapter}\" again!`);\n callback();\n return;\n }\n\n let packJson;\n if (adapter) {\n try {\n packJson = require(`${tools.appName.toLowerCase()}.${adapter}/package.json`);\n } catch {\n packJson = { version: `\"${adapter}\" not found` };\n }\n } else {\n packJson = require(`@iobroker/js-controller-common/package.json`);\n }\n console.log(packJson.version);\n\n return void callback();\n }\n\n case 'checklog': {\n dbConnect(params, async ({ objects, states, isOffline, objectsDBType }) => {\n const hasLocalObjectsServer = await objectsDbHasServer(objectsDBType);\n if (isOffline && hasLocalObjectsServer) {\n console.log(`${tools.appName} is not running`);\n return void callback(EXIT_CODES.CONTROLLER_NOT_RUNNING);\n } else {\n console.log(`${tools.appName} is running`);\n objects.getObjectList(\n {\n startkey: 'system.host.',\n endkey: `system.host.\\u9999`\n },\n null,\n (err, res) => {\n if (!err && res?.rows.length) {\n for (const row of res.rows) {\n const parts = row.id.split('.');\n // ignore system.host.name.alive and so on\n if (parts.length === 3) {\n states.pushMessage(row.id, {\n command: 'checkLogging',\n message: null,\n from: 'console'\n });\n }\n }\n }\n setTimeout(callback, 200);\n }\n );\n }\n });\n break;\n }\n\n case 'repo': {\n let repoUrlOrCommand = args[0]; // Repo url or name or \"add\" / \"del\" / \"set\" / \"show\" / \"addset\" / \"unset\"\n const repoName = args[1]; // Repo url or name\n let repoUrl = args[2]; // Repo url or name\n if (\n repoUrlOrCommand !== 'add' &&\n repoUrlOrCommand !== 'del' &&\n repoUrlOrCommand !== 'set' &&\n repoUrlOrCommand !== 'show' &&\n repoUrlOrCommand !== 'addset' &&\n repoUrlOrCommand !== 'unset'\n ) {\n repoUrl = repoUrlOrCommand;\n repoUrlOrCommand = 'show';\n }\n\n dbConnect(params, async ({ objects, states }) => {\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({\n objects,\n states\n });\n\n if (repoUrlOrCommand === 'show') {\n try {\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot show repository status: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (\n repoUrlOrCommand === 'add' ||\n repoUrlOrCommand === 'del' ||\n repoUrlOrCommand === 'set' ||\n repoUrlOrCommand === 'addset' ||\n repoUrlOrCommand === 'unset'\n ) {\n if (!repoName || !repoName.match(/[-_\\w\\d]+/)) {\n console.error(`Invalid repository name: \"${repoName}\"`);\n return void callback();\n } else {\n if (repoUrlOrCommand === 'add' || repoUrlOrCommand === 'addset') {\n if (!repoUrl) {\n console.warn(\n `Please define repository URL or path: ${tools.appName.toLowerCase()} add <repoName> <repoUrlOrPath>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n try {\n await repo.add(repoName, repoUrl);\n\n if (repoUrlOrCommand === 'addset') {\n await repo.setActive(repoName);\n console.log(`Repository \"${repoName}\" set as active: \"${repoUrl}\"`);\n await repo.showRepoStatus();\n return void callback();\n } else {\n console.log(`Repository \"${repoName}\" added as \"${repoUrl}\"`);\n await repo.showRepoStatus();\n return void callback();\n }\n } catch (err) {\n console.error(`Cannot add repository location: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n }\n } else if (repoUrlOrCommand === 'set') {\n try {\n await repo.setActive(repoName);\n console.log(`Repository \"${repoName}\" set as active.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot activate repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (repoUrlOrCommand === 'del') {\n try {\n await repo.del(repoName);\n console.log(`Repository \"${repoName}\" deleted.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot remove repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (repoUrlOrCommand === 'unset') {\n try {\n await repo.setInactive(repoName);\n console.log(`Repository \"${repoName}\" deactivated.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot deactivate repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else {\n console.warn('Unknown repo command: ' + repoUrlOrCommand);\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n }\n }\n });\n break;\n }\n\n case 'multihost':\n case 'mh': {\n const cmd = args[0];\n if (\n cmd !== 'c' &&\n cmd !== 'connect' &&\n cmd !== 's' &&\n cmd !== 'status' &&\n cmd !== 'b' &&\n cmd !== 'browse' &&\n cmd !== 'e' &&\n cmd !== 'enable' &&\n cmd !== 'd' &&\n cmd !== 'disable'\n ) {\n console.log('Invalid parameters. Following is possible: enable, browse, connect, status');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n dbConnect(params, async ({ objects, states }) => {\n const { Multihost } = await import('./setup/setupMultihost.js');\n const mh = new Multihost({\n params,\n objects\n });\n\n if (cmd === 's' || cmd === 'status') {\n mh.status();\n return void callback();\n } else if (cmd === 'b' || cmd === 'browse') {\n try {\n const list = await mh.browse();\n mh.showHosts(list);\n return void callback();\n } catch (e) {\n console.error(e.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n } else if (cmd === 'e' || cmd === 'enable') {\n mh.enable(true, async (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST);\n } else {\n await states.pushMessage(`system.host.${tools.getHostName()}`, {\n command: 'updateMultihost',\n message: null,\n from: 'setup'\n });\n\n callback();\n }\n });\n } else if (cmd === 'd' || cmd === 'disable') {\n mh.enable(false, async (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST);\n } else {\n await states.pushMessage(`system.host.${tools.getHostName()}`, {\n command: 'updateMultihost',\n message: null,\n from: 'setup'\n });\n\n callback();\n }\n });\n } else if (cmd === 'c' || cmd === 'connect') {\n mh.connect(parseInt(args[1]), args[2], (err: any) => {\n if (err) {\n console.error(err);\n }\n return void callback(err ? 1 : 0);\n });\n }\n });\n }\n break;\n }\n\n case 'vendor': {\n const password = args[0];\n const file = args[1];\n if (!password) {\n console.warn(\n `Please specify the password to update the vendor information!\\n${tools.appName.toLowerCase()} vendor <PASS_PHRASE> <vendor.json>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n const { objects } = await dbConnectAsync(false, params);\n const { Vendor } = await import('./setup/setupVendor.js');\n const vendor = new Vendor({ objects });\n\n try {\n await vendor.checkVendor(file, password);\n console.log(`Synchronised vendor information.`);\n return void callback();\n } catch (err) {\n console.error(`Cannot update vendor information: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPDATE_VENDOR);\n }\n }\n\n case 'cert': {\n const certCommand = new CLICert(commandOptions);\n certCommand.execute(args);\n break;\n }\n\n case 'compact': {\n const compactCommand = new CLICompact(commandOptions);\n compactCommand.execute(args);\n break;\n }\n\n case 'plugin': {\n const pluginCommand = new CLIPlugin(commandOptions);\n pluginCommand.execute(args);\n break;\n }\n\n case 'license': {\n const file = args[0];\n if (!file) {\n console.warn(\n `Please specify the path to the license file or place license text directly!\\n${tools.appName.toLowerCase()} license <license.file or license.text>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n dbConnect(params, async ({ objects }) => {\n const { License } = await import('./setup/setupLicense.js');\n const license = new License({ objects });\n try {\n await license.setLicense(file);\n console.log(`License updated.`);\n return void callback();\n } catch (err) {\n console.error(`Cannot update license: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPDATE_LICENSE);\n }\n });\n }\n break;\n }\n\n default: {\n if (params.v || params.version) {\n let pckg;\n if (command) {\n try {\n pckg = require(`${tools.appName.toLowerCase()}.${command}/package.json`);\n } catch {\n pckg = { version: `\"${command}\" not found` };\n }\n } else {\n pckg = require(`@iobroker/js-controller-common/package.json`);\n }\n console.log(pckg.version);\n } else {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n return void callback();\n }\n }\n}\n\nconst OBJECTS_THAT_CANNOT_BE_DELETED = [\n '0_userdata.0',\n 'alias.0',\n 'enum.functions',\n 'enum.rooms',\n 'system.config',\n 'system.group.administrator',\n 'system.group.user',\n 'system.repositories',\n 'system.user.admin'\n];\n\n/**\n * Deletes given objects from the database\n *\n * @param ids ids to delete from database\n */\nasync function delObjects(ids: string[]): Promise<void> {\n const { objects } = await dbConnectAsync(false);\n\n if (ids?.length) {\n for (const id of ids) {\n if (!OBJECTS_THAT_CANNOT_BE_DELETED.includes(id)) {\n try {\n await objects.delObjectAsync(id);\n } catch (err) {\n console.warn(`[Not critical] Cannot delete object ${id}: ${JSON.stringify(err)}`);\n }\n }\n }\n }\n}\n\n/**\n * Deletes all states from the database\n */\nasync function delStates(): Promise<number> {\n const { states } = await dbConnectAsync(false);\n\n const keys = await states.getKeys('*');\n if (keys) {\n console.log(`clean ${keys.length} states...`);\n for (const key of keys) {\n try {\n await states.delState(key);\n } catch (err) {\n console.error(`[Not critical] Cannot delete state ${key}: ${err.message}`);\n }\n }\n }\n return keys ? keys.length : 0;\n}\n\n/**\n * Cleans the database\n *\n * @param isDeleteDb - if whole db should be destroyed\n */\nasync function cleanDatabase(isDeleteDb: boolean): Promise<number> {\n const { objects } = await dbConnectAsync(false);\n\n if (isDeleteDb) {\n await objects.destroyDBAsync();\n // Clean up states\n const keysCount = await delStates();\n return keysCount;\n } else {\n // Clean only objects, not the views\n let ids: string[] = [];\n\n try {\n const res = await objects.getObjectListAsync({ startkey: '\\u0000', endkey: '\\u9999' });\n if (res.rows.length) {\n console.log(`clean ${res.rows.length} objects...`);\n ids = res.rows.map(e => e.id);\n }\n } catch {\n // ignore\n }\n\n await delObjects(ids);\n // Clean up states\n const keysCount = await delStates();\n return keysCount;\n }\n}\n\nfunction unsetup(params: Record<string, any>, callback: ExitCodeCb): void {\n dbConnect(params, ({ objects }) => {\n objects.delObject('system.meta.uuid', err => {\n if (err) {\n console.log(`uuid cannot be deleted: ${err.message}`);\n } else {\n console.log('system.meta.uuid deleted');\n }\n objects.getObject('system.config', (_err, obj) => {\n if (obj?.common.licenseConfirmed || obj?.common.language || obj?.native?.secret) {\n obj.common.licenseConfirmed = false;\n obj.common.language = 'en';\n // allow with parameter --keepsecret to not delete the secret\n // This is very specific use case for vendors and must not be described in documentation\n if (!params.keepsecret) {\n obj.native && delete obj.native.secret;\n }\n\n obj.from = `system.host.${tools.getHostName()}.cli`;\n obj.ts = new Date().getTime();\n\n objects.setObject('system.config', obj as any, err => {\n if (err) {\n console.log(`not found: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_SET_OBJECT);\n } else {\n console.log('system.config reset');\n return void callback();\n }\n });\n } else {\n console.log('system.config is OK');\n return void callback();\n }\n });\n });\n });\n}\n\n/**\n * Spawns a process which restarts the controller\n */\nasync function restartController(): Promise<void> {\n console.log('Starting node restart.js');\n const { spawn } = await import('node:child_process');\n\n const child = spawn('node', [`${thisDir}/restart.js`], {\n detached: true,\n stdio: ['ignore', 'ignore', 'ignore'],\n windowsHide: true\n });\n\n child.unref();\n}\n\n/**\n * Method which should be called from CLI to initialize the handling of all args\n */\nexport function execute(): void {\n // direct call\n const _yargs = initYargs();\n // @ts-expect-error todo fix it\n const command = _yargs.argv._[0];\n\n const args: string[] = [];\n\n // skip interpreter, filename and command\n for (let i = 3; i < process.argv.length; i++) {\n if (process.argv[i].startsWith('-')) {\n // on first param we have all our args\n break;\n }\n args.push(process.argv[i]);\n }\n\n processCommand(command, args, _yargs.argv, exitApplicationSave);\n}\n\nprocess.on('unhandledRejection', (e: any) => {\n console.error(`Uncaught Rejection: ${e.stack || e}`);\n exitApplicationSave(EXIT_CODES.UNCAUGHT_EXCEPTION);\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport deepClone from 'deep-clone';\nimport { isDeepStrictEqual } from 'node:util';\nimport Debug from 'debug';\nimport { objectsDbHasServer, isLocalObjectsDbServer, isLocalStatesDbServer } from '@iobroker/js-controller-common';\nimport path from 'node:path';\nimport yargs from 'yargs/yargs';\nimport * as CLITools from '@/lib/cli/cliTools.js';\nimport { CLIHost } from '@/lib/cli/cliHost.js';\nimport { CLIStates } from '@/lib/cli/cliStates.js';\nimport { CLIDebug } from '@/lib/cli/cliDebug.js';\nimport { CLICert } from '@/lib/cli/cliCert.js';\nimport { CLIObjects } from '@/lib/cli/cliObjects.js';\nimport { CLICompact } from '@/lib/cli/cliCompact.js';\nimport { CLILogs } from '@/lib/cli/cliLogs.js';\nimport { CLIProcess } from '@/lib/cli/cliProcess.js';\nimport { CLIMessage } from '@/lib/cli/cliMessage.js';\nimport { CLIPlugin } from '@/lib/cli/cliPlugin.js';\nimport { error as CLIError } from '@/lib/cli/messages.js';\nimport type { CLICommandContext, CLICommandOptions } from '@/lib/cli/cliCommand.js';\nimport { getRepository, ignoreVersion, recognizeVersion } from '@/lib/setup/utils.js';\nimport { dbConnect, dbConnectAsync, exitApplicationSave } from '@/lib/setup/dbConnection.js';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\nimport type { ListType } from '@/lib/setup/setupList.js';\nimport * as url from 'node:url';\nimport * as events from 'node:events';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename));\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || 'file://' + __filename);\n\ntools.ensureDNSOrder();\n\nconst debug = Debug('iobroker:cli');\n\nevents.EventEmitter.setMaxListeners(100);\nprocess.setMaxListeners(0);\n\nlet _yargs: ReturnType<typeof yargs>;\n\ntype ExitCodeCb = (exitCode?: number) => void;\n\ninterface InternalRebuildOptions {\n cwd?: string;\n module?: string;\n debug: boolean;\n}\n\n/**\n * Initialize Yargs to parse commands correctly and be able to output correct help\n */\nfunction initYargs(): ReturnType<typeof yargs> {\n _yargs = yargs(process.argv.slice(2))\n .scriptName(tools.appName)\n .locale('en') // otherwise it could be mixed, because our implementations are in english\n .version(false) // disable yargs own version handling, because we have our own depending on passed instances\n .completion('_createCompletion', false) // can be created via iob _createCompletion >> ~/.bashrc or ~/.bash_profile for OSX\n .command('setup', 'Setup ioBroker', {\n redis: {\n describe: 'Setup as redis',\n type: 'boolean'\n },\n objects: {\n describe: 'Objects <host>',\n default: tools.getLocalAddress(),\n type: 'number'\n },\n states: {\n describe: 'States <host>',\n default: tools.getLocalAddress(),\n type: 'number'\n },\n 'port <port>': {\n describe: 'Port of redis',\n default: 6379,\n type: 'number'\n },\n custom: {\n describe: 'Custom setup',\n type: 'boolean'\n },\n first: {\n describe: 'Initial setup',\n type: 'boolean'\n }\n })\n .command(\n 'start [all|<adapter>.<instance>|<adapter>]',\n 'Starts the js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs\n .command('all', 'Starts js-controller and all adapters')\n .command('<adapter>[.<instance>]', 'Starts a specified adapter instance');\n }\n )\n .command(\n 'stop [<adapter>.<instance>|<adapter>]',\n 'stops the js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs.command('<adapter>[.<instance>]', 'Stops a specified adapter instance');\n }\n )\n .command(\n ['restart [<adapter>.<instance>|<adapter>]', 'r [<adapter>.<instance>|<adapter>]'],\n 'Restarts js-controller or a specified adapter instance or all instances of an adapter',\n yargs => {\n yargs.command('<adapter>[.<instance>]', 'Restarts a specified adapter instance', {});\n }\n )\n .command('debug <adapter>[.<instance>]', 'Starts a Node.js debugging session for the adapter instance', {\n ip: {\n describe: 'IP-address <ip>',\n type: 'string'\n },\n port: {\n describe: 'Port <port>',\n type: 'number'\n },\n wait: {\n describe: 'Wait',\n type: 'boolean'\n }\n })\n .command('info', 'Shows the host info', {})\n .command('logs [<adapter>]', 'Monitor log', {\n 'lines=1000': {\n // TODO: it's the only place we use = we should avoid this\n describe: 'Number of lines',\n type: 'string'\n },\n watch: {\n describe: 'Watch',\n type: 'boolean'\n }\n })\n .command(['add <adapter> [desiredNumber]', 'a <adapter> [desiredNumber]'], 'Add instance of adapter', {\n enabled: {\n describe: 'Enable adapter',\n type: 'boolean'\n },\n host: {\n describe: 'Host <host>',\n type: 'string'\n },\n port: {\n describe: 'Port <port>',\n type: 'number'\n }\n })\n .command(['install <adapter>', 'i <adapter>'], 'Installs a specified adapter', {})\n .command('rebuild [<module>]', 'Rebuild all native modules or path', {\n path: {\n describe: 'Executes rebuild command in given path',\n type: 'string'\n }\n })\n .command(\n 'url <url> [<name>]',\n 'Install adapter from specified url, e.g. GitHub, if a package name is provided instead of an url, it will be installed from npm',\n {}\n )\n .command(['del <adapter>', 'delete <adapter>'], 'Remove adapter and all instances from this host', {\n custom: {\n describe: 'Remove adapter custom attribute from all objects',\n type: 'boolean'\n }\n })\n .command(['del <adapter>.<instance>', 'delete <adapter>.<instance>'], 'Remove adapter instance', {\n custom: {\n describe: 'Remove instance custom attribute from all objects',\n type: 'boolean'\n }\n })\n .command('update [<repositoryUrl>]', 'Update repository and list adapters', {\n updatable: {\n describe: 'Only show updatable adapters',\n alias: 'u',\n type: 'boolean'\n },\n all: {\n describe: 'Show all available adapters',\n alias: 'a',\n type: 'boolean'\n },\n force: {\n describe: 'Bypass hash check',\n alias: 'f',\n type: 'boolean'\n }\n })\n .command('upgrade', 'Upgrade management', yargs => {\n yargs\n .option('yes', {\n describe: 'Bypass questionnaire',\n alias: 'y',\n type: 'boolean'\n })\n .command('[<repositoryUrl>]', 'Upgrade all adapters, optionally you can specify the repository url', {})\n .command(\n 'all [<repositoryUrl>]',\n 'Upgrade all adapters, optionally you can specify the repository url',\n {}\n )\n .command(\n 'self [<repositoryUrl>]',\n 'Upgrade js-controller, optionally you can specify the repository url',\n {}\n )\n .command(\n '<adapter> [<repositoryUrl>]',\n 'Upgrade specified adapter, optionally you can specify the repository url',\n {}\n );\n })\n .command(['upload [all|<adapter>]', 'u [all|<adapter>]'], 'Upload management', yargs => {\n yargs\n .command(\n `<pathToLocalFile> <pathIn${tools.appName}>`,\n 'Upload given files to provided path to make them available for instances',\n {}\n )\n .command('all', 'Upload all adapter files to make them available for instances', {})\n .command('<adapter>', 'Upload specified adapter files to make them available for instances', {});\n })\n .command(['object', 'o'], 'Object management', yargs => {\n yargs\n .command('get <id>', 'Get object specified by id', {})\n .command('set <id> <json-value>', 'Set object with the given id by providing a new json object', {})\n .command(\n 'set <id> propertyname=<value or json-value>',\n 'Update part of the object by providing a new value or partial object',\n {}\n )\n .command(\n 'extend <id> <json-value>',\n 'Extend object with the given id by providing a new json object',\n {}\n )\n .command('del <id|pattern>', 'Delete object with given id or all objects matching the pattern', {\n y: {\n describe: 'Bypass questionnaire',\n alias: 'y',\n type: 'boolean'\n }\n })\n .command('chmod <object-mode> [state-mode] <id>', 'Change object rights', {})\n .command('chown <user> <group> <id>', 'Change object ownership', {})\n .command('list <pattern>', 'List object matching given pattern', {})\n .command('setDBVersion <version>', 'Sets the protocol version of the objects database')\n .command('getDBVersion', 'Get the protocol version of the objects database')\n .command('activateSets', 'Activate the usage of Redis Sets')\n .command('deactivateSets', 'Deactivate the usage of Redis Sets');\n })\n .command(['state', 's'], 'State management', yargs => {\n yargs\n .command('get <id>', 'Get state, specified by id', {})\n .command('getPlain <id>', 'Get plain state, specified by id', {\n pretty: {\n describe: 'Prettify output',\n type: 'boolean'\n }\n })\n .command('getValue <id>', 'Get state value, specified by id', {})\n .command('set <id> <value> [<ack>]', 'Set state, specified by id', {})\n .command('del <id>', 'Delete state, specified by id', {})\n .command('setDBVersion <version>', 'Sets the protocol version of the states database')\n .command('getDBVersion', 'Get the protocol version of the states database');\n })\n .command('message <adapter>[.instance] <command> [<message>]', 'Send message to adapter instance/s', {})\n .command('list <type> [<filter>]', 'List all entries, like objects', yargs => {\n yargs.positional('type', {\n describe: 'Type of the objects which should be listed',\n type: 'string',\n choices: [\n 'objects',\n 'o',\n 'states',\n 's',\n 'instances',\n 'i',\n 'adapters',\n 'a',\n 'users',\n 'u',\n 'groups',\n 'g',\n 'enums',\n 'e',\n 'files',\n 'f',\n 'hosts',\n 'h'\n ]\n });\n\n yargs.positional('filter', {\n describe: 'Filter for matching pattern e.g. \"admin*\"',\n type: 'string'\n });\n })\n .command('chmod <mode> <file>', 'Change file rights', {})\n .command('chown <user> <group> <file>', 'Change file ownership', {})\n .command('touch <file>', 'Touch file', {})\n .command('rm <file>', 'Remove file', {})\n .command('file', 'File management', yargs => {\n yargs\n .command(\n `read <${tools.appName}-path-to-read> [<filesystem-path-to-write>]`,\n `Read file from ${tools.appName} path and optionally write to destination`,\n {}\n )\n .command(\n `write <filesystem-path-to-read> <${tools.appName}-path-to-write>`,\n `Read file from path and write it to ${tools.appName} path`,\n {}\n )\n .command(`rm <${tools.appName}-path-to-delete>`, 'Remove file', {})\n .command('sync', 'Sync files', {});\n })\n .command('user', 'User commands', yargs => {\n yargs\n .command('add <user>', 'Add new user', yargs => {\n yargs\n .option('ingroup', {\n describe: 'User group',\n type: 'string'\n })\n .option('password', {\n describe: 'User password',\n type: 'string'\n });\n })\n .command('del <user>', 'Delete user', {})\n .command('passwd <user>', 'Change user password', yargs => {\n yargs.option('password', {\n describe: 'User password',\n type: 'string'\n });\n })\n .command('enable <user>', 'Enable user', {})\n .command('disable <user>', 'Disable user', {})\n .command('get <user>', 'Get user', {})\n .command('check <user>', 'Check user password', yargs => {\n yargs.option('password', {\n describe: 'User password',\n type: 'string'\n });\n });\n })\n .command('group', 'group management', yargs => {\n yargs\n .command('add <group>', 'Add group', {})\n .command('del <group>', 'Remove group', {})\n .command('list <group>', 'List group', {})\n .command('enable <group>', 'Enable group', {})\n .command('disable <group>', 'Disable group', {})\n .command('get <group>', 'Get group', {})\n .command('adduser <group> <user>', 'Add user to group', {})\n .command('deluser <group> <user>', 'Remove user from group', {});\n })\n .command('host <hostname>', 'Set host to given hostname', yargs => {\n yargs\n .command('this', 'Initialize current host', {})\n .command('set <hostname>', 'Set host with specified hostname', {})\n .command('remove <hostname>', 'Remove host with specified hostname', {});\n })\n .command('set <adapter>.<instance>', 'Change settings of adapter config', {\n customOption: {\n describe:\n 'Set the name of the parameter you want to change as option followed by its value, e. g. --port 80'\n }\n })\n .command('license <license.file or license.text>', 'Update license by given file', {})\n .command('cert', 'Certificate management', yargs => {\n yargs\n .command('create', 'Create certificate', {})\n .command('view [<certificate name>]', 'Show certificate', {});\n })\n .command('clean <yes>', 'Clears all objects and states', {})\n .command('backup', 'Create backup', {})\n .command('restore <backup name or path>', 'Restore a specified backup', {\n force: {\n describe: 'Restore backup of different controller version',\n alias: 'f',\n type: 'boolean'\n }\n })\n .command('validate <backup name or path>', 'Validate a specified backup', {})\n .command(['status [all|<adapter>.<instance>]', 'isrun'], 'Status of ioBroker or adapter instance', yargs => {\n yargs\n .command('all', 'Show entire config')\n .command('<adapter>[.<instance>]', 'Status of a specified adapter instance');\n })\n .command('repo [<name>]', 'Show repo information', yargs => {\n yargs\n .command('set <name>', 'Set active repository')\n .command('del <name>', 'Remove repository')\n .command('add <name> <url>', 'Add repository')\n .command('addset <name> <url>', 'Add repository and set it as active one')\n .command('show', 'List repositories');\n })\n .command(['uuid', 'id'], 'Show uuid of the installation', {})\n .command('unsetup', 'Reset license, installation secret and language', {})\n .command('fix', 'Execute the installation fixer script, this updates your ioBroker installation', {})\n .command('nodejs-update [<major-version>]', 'Upgrade the Node.JS installation to the current LTS', {})\n .command('multihost', 'Multihost management', yargs => {\n yargs\n .command('enable', 'Enable multihost discovery', {\n secure: {\n describe: 'Use secure connection',\n type: 'boolean'\n },\n persist: {\n describe: 'Enable persistent discovery',\n type: 'boolean'\n }\n })\n .command('disable', 'Disable multihost discovery')\n .command('browse', 'Browse for multihost server')\n .command('connect', 'Connect to multihost server');\n })\n .command('compact', 'compact group management', yargs => {\n yargs\n .command('enable', 'Enable compact mode in general')\n .command('on', 'Enable compact mode in general')\n .command('disable', 'Disable compact mode in general')\n .command('off', 'Disable compact mode in general')\n .command('<adapter>.<instance> status', 'Show if compact mode is enabled for a specific instance')\n .command('<adapter>.<instance> group <group-id>', 'Define compact group of a specific adapter')\n .command(\n '<adapter>.<instance> <disable|off> [<group-id>]',\n 'Enable or disable compact mode for specified adapter instance and set compact group optionally'\n )\n .command(\n '<adapter>.<instance> <enable|on> [<group-id>]',\n 'Enable or disable compact mode for specified adapter instance and set compact group optionally'\n );\n })\n .command('plugin', 'Plugin management', yargs => {\n yargs\n .command(\n 'enable <pluginname>',\n 'Enables a plugin for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n )\n .command(\n 'disable <pluginname>',\n 'Disables a plugin for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n )\n .command(\n 'status <pluginname>',\n 'Checks if a plugin is enabled for the specified host or instance. If no host is specified, the current one is used',\n {\n host: {\n describe: 'Hostname',\n type: 'string'\n },\n instance: {\n describe: 'Instance, e.g. hm-rpc.0',\n type: 'string'\n }\n }\n );\n })\n .command('vendor <passphrase> [<vendor.json>]', 'Update the vendor information using given passphrase')\n .command(['version [<adapter>]', 'v [<adapter>]'], 'Show version of js-controller or specified adapter', {\n ignore: {\n describe:\n 'Ignore specific version of this adapter. The adapter will not be upgradeable to this specific version.',\n type: 'string'\n },\n recognize: {\n describe: 'No longer ignore specific versions of this adapter.',\n type: 'boolean'\n }\n })\n .wrap(null);\n\n return _yargs;\n}\n\n/**\n * Show yargs help, if processCommand is used as import, yargs won't be initialized\n */\nfunction showHelp(): void {\n if (_yargs) {\n _yargs.showHelp();\n }\n}\n\n/**\n * Process the given CLI command\n *\n * @param command - command to execute\n * @param args - arguments passed to yargs\n * @param params - object with parsed params by yargs, e. g. --force is params.force\n * @param callback - callback to be called with the exit code\n */\nasync function processCommand(\n command: string | number,\n args: string[],\n params: Record<string, any>,\n callback: ExitCodeCb\n): Promise<void> {\n const commandContext: CLICommandContext = { dbConnect, callback, showHelp };\n const commandOptions: CLICommandOptions = { ...params, ...commandContext };\n debug(`commandOptions: ${JSON.stringify(commandOptions)}`);\n debug(`args: ${JSON.stringify(args)}`);\n\n switch (command) {\n case 'start':\n case 'stop': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand[command](args);\n break;\n }\n\n case 'debug': {\n const debugCommand = new CLIDebug(commandOptions);\n debugCommand.execute(args);\n break;\n }\n\n case 'status':\n case 'isrun': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand.status(args);\n break;\n }\n\n case 'r':\n case 'restart': {\n const procCommand = new CLIProcess(commandOptions);\n procCommand.restart(args);\n break;\n }\n\n case '_restart':\n restartController();\n callback();\n break;\n\n case 'update': {\n const repoUrl = args[0]; // Repo url or name\n dbConnect(params, async ({ objects, states }) => {\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({\n objects,\n states\n });\n\n await repo.showRepo(repoUrl, params);\n setTimeout(callback, 1_000);\n });\n break;\n }\n\n case 'setup': {\n const { Setup } = await import('./setup/setupSetup.js');\n const setup = new Setup({\n processExit: callback,\n cleanDatabase,\n restartController,\n params\n });\n if (args[0] === 'custom' || params.custom) {\n const exitCode = await setup.setupCustom();\n callback(exitCode);\n return;\n }\n\n let isFirst = false;\n let isRedis = false;\n\n // we support \"first\" and \"redis\" without \"--\" flag\n for (const arg of args) {\n if (arg === 'first') {\n isFirst = true;\n } else if (arg === 'redis') {\n isRedis = true;\n }\n }\n\n // and as --flag\n isRedis = params.redis || isRedis;\n isFirst = params.first || isFirst;\n\n setup.setup({\n callback: async () => {\n const { states, objects } = await dbConnectAsync(false, params);\n if (isFirst) {\n // Creates all instances that are needed on a fresh installation\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n // Define the necessary instances\n const initialInstances = ['admin', 'discovery', 'backitup'];\n // And try to install each of them\n for (const instance of initialInstances) {\n try {\n const adapterInstalled = !!require.resolve(\n `${tools.appName.toLowerCase()}.${instance}`\n );\n\n if (adapterInstalled) {\n let otherInstanceExists = false;\n try {\n // check if another instance exists\n const res = await objects.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${instance}`,\n endkey: `system.adapter.${instance}\\u9999`\n });\n\n otherInstanceExists = !!res.rows.length;\n } catch {\n // ignore - on install we have no object views\n }\n\n if (!otherInstanceExists) {\n await install.createInstance(instance, {\n enabled: true,\n ignoreIfExists: true\n });\n }\n }\n } catch {\n // not found, just continue\n }\n }\n\n await new Promise(resolve => {\n // Creates a fresh certificate\n // Create a new instance of the cert command,\n // but use the resolve method as a callback\n const cert = new CLICert({ ...commandOptions, callback: resolve });\n cert.create();\n });\n }\n\n // we update existing things, in first as well as normal setup\n // Rename repositories\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({ objects, states });\n\n try {\n await repo.rename('default', 'stable', 'http://download.iobroker.net/sources-dist.json');\n await repo.rename('latest', 'beta', 'http://download.iobroker.net/sources-dist-latest.json');\n } catch (err) {\n console.warn(`Cannot rename: ${err.message}`);\n }\n\n // there has been a bug that user can upload js-controller\n try {\n await objects.delObjectAsync('system.adapter.js-controller');\n } catch {\n // ignore\n }\n\n try {\n const configFile = tools.getConfigFileName();\n\n const configOrig = fs.readJSONSync(configFile);\n const config = deepClone(configOrig);\n\n config.objects.options = config.objects.options || {\n auth_pass: null,\n retry_max_delay: 5_000\n };\n if (\n config.objects.options.retry_max_delay === 15_000 ||\n !config.objects.options.retry_max_delay\n ) {\n config.objects.options.retry_max_delay = 5_000;\n }\n config.states.options = config.states.options || {\n auth_pass: null,\n retry_max_delay: 5_000\n };\n if (\n config.states.options.retry_max_delay === 15_000 ||\n !config.states.options.retry_max_delay\n ) {\n config.states.options.retry_max_delay = 5_000;\n }\n\n let migrated = '';\n // We migrate file to jsonl\n if (config.states.type === 'file') {\n config.states.type = 'jsonl';\n\n const hasLocalStatesServer = await isLocalStatesDbServer('file', config.states.host);\n if (hasLocalStatesServer) {\n // silent config change on secondaries\n console.log('States DB type migrated from \"file\" to \"jsonl\"');\n migrated += 'States';\n }\n }\n\n if (config.objects.type === 'file') {\n config.objects.type = 'jsonl';\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer('file', config.objects.host);\n if (hasLocalObjectsServer) {\n // silent config change on secondaries\n console.log('Objects DB type migrated from \"file\" to \"jsonl\"');\n migrated += migrated ? ' and Objects' : 'Objects';\n }\n }\n\n if (migrated) {\n const { NotificationHandler } = await import('@iobroker/js-controller-common');\n\n const hostname = tools.getHostName();\n\n const notificationSettings = {\n states,\n objects,\n log: console,\n logPrefix: '',\n host: hostname\n };\n\n const notificationHandler = new NotificationHandler(notificationSettings);\n\n try {\n const ioPackage = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'io-package.json')\n );\n await notificationHandler.addConfig(ioPackage.notifications);\n\n await notificationHandler.addMessage(\n 'system',\n 'fileToJsonl',\n `Migrated: ${migrated}`,\n `system.host.${hostname}`\n );\n\n notificationHandler.storeNotifications();\n } catch (e) {\n console.warn(`Could not add File-to-JSONL notification: ${e.message}`);\n }\n }\n\n if (!isDeepStrictEqual(config, configOrig)) {\n fs.writeFileSync(configFile, JSON.stringify(config, null, 2));\n console.log('ioBroker configuration updated');\n }\n } catch (err) {\n console.log(`Could not update ioBroker configuration: ${err.message}`);\n }\n\n return void callback();\n },\n ignoreIfExist: isFirst,\n useRedis: isRedis\n });\n break;\n }\n\n case 'url': {\n let url = args[0];\n const name = args[1];\n\n if (!url) {\n console.log('Please provide a URL to install from and optionally a name of the adapter to install');\n callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n if (url[0] === '\"' && url[url.length - 1] === '\"') {\n url = url.substring(1, url.length - 1);\n }\n url = url.trim();\n\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n try {\n await install.installAdapterFromUrl(url, name);\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n console.error(`Could not install adapter from url: ${e.message}`);\n return void callback(EXIT_CODES.CANNOT_INSTALL_NPM_PACKET);\n }\n });\n break;\n }\n\n case 'info': {\n dbConnect(params, async ({ objects }) => {\n try {\n const data = await tools.getHostInfo(objects);\n const formatters = await import('./setup/formatters.js');\n const formatInfo = {\n Uptime: formatters.formatSeconds,\n 'System uptime': formatters.formatSeconds,\n RAM: formatters.formatRam,\n Speed: formatters.formatSpeed,\n 'Disk size': formatters.formatBytes,\n 'Disk free': formatters.formatBytes\n };\n\n for (const attr of Object.keys(data)) {\n console.log(\n `${attr}${attr.length < 16 ? new Array(16 - attr.length).join(' ') : ''}: ${\n // @ts-expect-error todo would need checks\n formatInfo[attr] ? formatInfo[attr](data[attr]) : data[attr] || ''\n }`\n );\n }\n } catch (err) {\n console.error('Cannot read host info: ' + (typeof err === 'object' ? JSON.stringify(err) : err));\n return callback(EXIT_CODES.CANNOT_GET_HOST_INFO);\n }\n\n return void callback();\n });\n break;\n }\n\n case 'a':\n case 'add':\n case 'install':\n case 'i': {\n let name = args[0];\n let instance: string | undefined = args[1];\n let repoUrl: string | undefined = args[2];\n\n if (parseInt(instance, 10).toString() !== (instance || '').toString()) {\n repoUrl = instance;\n instance = undefined;\n }\n if (parseInt(repoUrl, 10).toString() === (repoUrl || '').toString()) {\n const temp = instance;\n instance = repoUrl;\n repoUrl = temp;\n }\n if (instance && parseInt(instance, 10).toString() === (instance || '').toString()) {\n params.instance = parseInt(instance, 10);\n }\n\n // If user accidentally wrote tools.appName.adapter => remove adapter\n name = CLITools.normalizeAdapterName(name);\n\n const parsedName = CLITools.splitAdapterOrInstanceIdentifierWithVersion(name);\n if (!parsedName) {\n console.log('Invalid adapter name for install');\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n\n // split the adapter into its parts if necessary\n if (parsedName.instance !== null) {\n params.instance = parsedName.instance;\n }\n name = parsedName.name;\n const installName = parsedName.nameWithVersion;\n\n const adapterDir = tools.getAdapterDir(name);\n\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('./setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n if (params.host && params.host !== tools.getHostName()) {\n // if host argument provided we should check, that host actually exists in mh environment\n let obj;\n try {\n obj = await objects.getObjectAsync(`system.host.${params.host}`);\n } catch (err) {\n console.warn(`Could not check existence of host \"${params.host}\": ${err.message}`);\n }\n\n if (!obj) {\n console.error(`Cannot add instance to non-existing host \"${params.host}\"`);\n return void callback(EXIT_CODES.NON_EXISTING_HOST);\n }\n }\n\n if (!adapterDir || !fs.existsSync(adapterDir)) {\n try {\n const { stoppedList } = await install.downloadPacket(repoUrl, installName);\n await install.installAdapter(installName, repoUrl);\n await install.enableInstances(stoppedList, true); // even if unlikely make sure to re-enable disabled instances\n if (command !== 'install' && command !== 'i') {\n await install.createInstance(name, params);\n }\n return void callback();\n } catch (e) {\n console.error(`adapter \"${name}\" cannot be installed: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n }\n } else if (command !== 'install' && command !== 'i') {\n try {\n await install.createInstance(name, params);\n return void callback();\n } catch (err) {\n console.error(`adapter \"${name}\" cannot be installed: ${err.message}`);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n } else {\n console.log(`adapter \"${name}\" already installed. Use \"upgrade\" to upgrade to a newer version.`);\n return void callback(EXIT_CODES.ADAPTER_ALREADY_INSTALLED);\n }\n });\n break;\n }\n\n case 'rebuild': {\n const options: InternalRebuildOptions = { debug: process.argv.includes('--debug') };\n\n if (commandOptions.path) {\n if (path.isAbsolute(commandOptions.path)) {\n options.cwd = commandOptions.path;\n } else {\n console.log('Path argument needs to be an absolute path!');\n return void exitApplicationSave(EXIT_CODES.INVALID_ARGUMENTS);\n }\n }\n\n if (commandOptions.module) {\n options.module = commandOptions.module;\n console.log(\n `Rebuilding native module \"${commandOptions.module}\"${options.cwd ? ` in ${options.cwd}` : ''} ...`\n );\n } else {\n console.log(`Rebuilding native modules${options.cwd ? ` in ${options.cwd}` : ''} ...`);\n }\n\n const result = await tools.rebuildNodeModules(options);\n\n if (result.success) {\n console.log();\n console.log(`Rebuilding native modules done`);\n return void callback();\n } else {\n console.error('Rebuilding native modules failed');\n return void exitApplicationSave(result.exitCode);\n }\n }\n\n case 'upload':\n case 'u': {\n const name = args[0];\n const subTree = args[1];\n if (name) {\n dbConnect(params, async ({ objects, states }) => {\n const { Upload } = await import('./setup/setupUpload.js');\n const upload = new Upload({ states, objects });\n\n if (name === 'all') {\n try {\n const objs = await objects.getObjectListAsync({\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n });\n\n if (objs) {\n const adapters = [];\n\n for (const row of objs.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n\n adapters.push(\n tools.isObject(row.value.common.name)\n ? row.value.common.name.en\n : row.value.common.name\n );\n }\n\n await upload.uploadAdapterFullAsync(adapters);\n }\n callback();\n } catch (err) {\n console.error(`Cannot upload all adapters: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n } else {\n // if upload of file\n if (name.includes('.')) {\n if (!subTree) {\n console.log(\n `Please specify target name, like:\\n${tools.appName} upload /file/picture.png /vis-2.0/main/img/picture.png`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n try {\n const newName = await upload.uploadFile(name, subTree);\n console.log(`File \"${name}\" is successfully saved under ${newName}`);\n return void callback();\n } catch (err) {\n console.error(`Cannot upload file \"${name}\": ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n } else {\n try {\n if (subTree) {\n await upload.uploadAdapter(name, false, true, subTree);\n } else {\n await upload.uploadAdapterFullAsync([name]);\n }\n return void callback();\n } catch (err) {\n console.error(`Cannot upload files \"${name}\": ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPLOAD_DATA);\n }\n }\n }\n });\n } else {\n console.log('No adapter name found!');\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n break;\n }\n\n case 'delete':\n case 'del': {\n let adapter = args[0];\n let instance = args[1];\n\n // The adapter argument is required\n if (!adapter) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n // If the user accidentally wrote <tools.appName>.adapter,\n // remove <tools.appName> from the adapter name\n adapter = CLITools.normalizeAdapterName(adapter);\n\n // Avoid deleting stuff we don't want to delete\n // e.g. `system.adapter.*`\n if (!instance) {\n // Ensure that adapter contains a valid adapter (without instance nr)\n // or instance (with instance nr) identifier\n if (!CLITools.validateAdapterOrInstanceIdentifier(adapter)) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n // split the adapter into adapter + instance if necessary\n if (adapter.indexOf('.') > -1) {\n [adapter, instance] = adapter.split('.', 2);\n }\n } else {\n // ensure that adapter contains a valid adapter identifier\n // and the instance is a number\n if (!CLITools.validateAdapterIdentifier(adapter) || !/^\\d+$/.test(instance)) {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n }\n\n if (instance) {\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('@/lib/setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n\n console.log(`Delete instance \"${adapter}.${instance}\"`);\n await install.deleteInstance(adapter, parseInt(instance));\n callback();\n });\n } else {\n dbConnect(params, async ({ objects, states }) => {\n const { Install } = await import('@/lib/setup/setupInstall.js');\n const install = new Install({\n objects,\n states,\n processExit: callback,\n params\n });\n console.log(`Delete adapter \"${adapter}\"`);\n const resultCode = await install.deleteAdapter(adapter);\n callback(resultCode);\n });\n }\n break;\n }\n case 'unsetup': {\n const rl = (await import('node:readline')).createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n if (params.yes || params.y || params.Y) {\n unsetup(params, callback);\n } else {\n rl.question('UUID will be deleted. Are you sure? [y/N]: ', answer => {\n rl.close();\n answer = answer.toLowerCase();\n if (answer === 'y' || answer === 'yes' || answer === 'ja' || answer === 'j') {\n unsetup(params, callback);\n } else {\n console.log('Nothing deleted');\n return void callback();\n }\n });\n }\n break;\n }\n\n case 'o':\n case 'object': {\n const objectsCommand = new CLIObjects(commandOptions);\n objectsCommand.execute(args);\n break;\n }\n\n case 's':\n case 'state': {\n const statesCommand = new CLIStates(commandOptions);\n statesCommand.execute(args);\n break;\n }\n\n case 'msg':\n case 'message': {\n const messageCommand = new CLIMessage(commandOptions);\n messageCommand.execute(args);\n break;\n }\n\n case 'logs': {\n const logsCommand = new CLILogs(commandOptions);\n logsCommand.execute(args, params);\n break;\n }\n\n case 'upgrade': {\n let adapter: string | null = CLITools.normalizeAdapterName(args[0]);\n\n if (adapter === 'all') {\n adapter = null;\n }\n\n dbConnect(params, async ({ objects, states }) => {\n const { Upgrade } = await import('./setup/setupUpgrade.js');\n const upgrade = new Upgrade({\n objects,\n states,\n params,\n processExit: callback\n });\n\n if (adapter) {\n try {\n if (adapter === 'self') {\n const hostAlive = await states.getStateAsync(`system.host.${tools.getHostName()}.alive`);\n await upgrade.upgradeController('', params.force || params.f, !!hostAlive?.val);\n } else {\n await upgrade.upgradeAdapter(\n '',\n adapter,\n params.force || params.f,\n params.y || params.yes,\n false\n );\n }\n return void callback();\n } catch (err) {\n console.error(`Cannot upgrade: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else {\n // upgrade all\n try {\n const links = await getRepository({ objects });\n if (!links) {\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n await upgrade.upgradeAdapterHelper(\n links,\n Object.keys(links).sort(),\n false,\n params.y || params.yes\n );\n return void callback();\n } catch (e) {\n console.error(`Cannot upgrade: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.INVALID_REPO);\n }\n }\n });\n break;\n }\n\n case 'clean': {\n const yes = args[0];\n if (yes !== 'yes') {\n console.log(\n `Command \"clean\" clears all Objects and States. To execute it write \"${tools.appName} clean yes\"`\n );\n } else {\n dbConnect(params, async ({ isOffline }) => {\n if (!isOffline) {\n console.error(`Stop ${tools.appName} first!`);\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n try {\n const count = await cleanDatabase(true);\n console.log(`Deleted ${count} states`);\n } catch {\n // ignore\n }\n restartController();\n console.log(`Restarting ${tools.appName}...`);\n callback();\n });\n }\n break;\n }\n\n case 'restore': {\n const { BackupRestore } = await import('./setup/setupBackup.js');\n\n dbConnect(params, ({ isOffline, objects, states }) => {\n if (!isOffline) {\n console.error(`Stop ${tools.appName} first!`);\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n backup.restoreBackup({\n name: args[0],\n force: !!params.force,\n dontDeleteAdapters: false,\n callback: ({ exitCode }) => {\n if (exitCode === EXIT_CODES.NO_ERROR) {\n console.log('System successfully restored!');\n }\n return void callback(exitCode);\n }\n });\n });\n break;\n }\n\n case 'backup': {\n const name = args[0];\n const { BackupRestore } = await import('./setup/setupBackup.js');\n\n dbConnect(params, async ({ states, objects }) => {\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n try {\n const filePath = await backup.createBackup(name);\n console.log(`Backup created: ${filePath!}`);\n console.log('This backup can only be restored with js-controller version up from 4.1');\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n console.log(`Cannot create backup: ${e.message}`);\n return void callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP);\n }\n });\n break;\n }\n\n case 'validate': {\n const name = args[0];\n const { BackupRestore } = await import('./setup/setupBackup.js');\n dbConnect(params, async ({ objects, states }) => {\n const backup = new BackupRestore({\n states,\n objects,\n cleanDatabase,\n restartController,\n processExit: callback\n });\n\n try {\n await backup.validateBackup(name);\n console.log('Backup OK');\n return void exitApplicationSave(0);\n } catch (err) {\n console.log(`Backup check failed: ${err.message}`);\n return void exitApplicationSave(1);\n }\n });\n break;\n }\n\n case 'l':\n case 'list': {\n dbConnect(params, async ({ objects, states }) => {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.list(args[0] as ListType, args[1], params);\n });\n break;\n }\n\n case 'touch': {\n let pattern = args[0];\n\n if (!pattern) {\n console.log('No file path found. Example: \"touch /vis-2.0/main/*\"');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ states, objects }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.touch(\n row.value.common.name,\n '*',\n { user: 'system.user.admin' },\n // @ts-expect-error todo this looks wrong, we have no cb args other than err\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n for (const file of files) {\n for (const processedFile of processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n // @ts-expect-error todo processed should not exist, how to proceed?\n objects.touch(id, path, { user: 'system.user.admin' }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n for (const processedFile of processed) {\n list.showFile(id, processedFile.path, processedFile);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'rm': {\n let pattern = args[0];\n\n if (!pattern) {\n console.log('No file path found. Example: \"touch /vis-2.0/main/*\"');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.rm(\n row.value.common.name,\n '*',\n { user: 'system.user.admin' },\n // @ts-expect-error todo id should not exist according to types check it\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (const file of files) {\n for (const processedFile of processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.rm(id, path, { user: 'system.user.admin' }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'chmod': {\n let mode: string | number = args[0];\n let pattern = args[1];\n\n if (!mode) {\n CLIError.requiredArgumentMissing('mode', 'chmod 777 /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n // yargs has converted it to number\n mode = parseInt(mode.toString(), 16);\n }\n\n if (!pattern) {\n CLIError.requiredArgumentMissing('file path', 'chmod 777 /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.chmodFile(\n row.value.common.name,\n '*',\n {\n user: 'system.user.admin',\n mode\n },\n // @ts-expect-error todo _id should not exist how to handle\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (const file of files) {\n for (const processedFile of file.processed) {\n list.showFile(file.id, processedFile.path, processedFile);\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.chmodFile(id, path, { user: 'system.user.admin', mode: mode }, async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n });\n }\n });\n break;\n }\n\n case 'chown': {\n let user = args[0];\n let group: string | undefined = args[1];\n let pattern = args[2];\n\n if (!pattern) {\n pattern = group;\n group = undefined;\n }\n\n if (!user) {\n CLIError.requiredArgumentMissing('user', 'chown user /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else if (user.substring(12) !== 'system.user.') {\n user = `system.user.${user}`;\n }\n if (group && group.substring(13) !== 'system.group.') {\n group = `system.group.${group}`;\n }\n\n if (!pattern) {\n CLIError.requiredArgumentMissing('file path', 'chown user /vis-2.0/main/*');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n dbConnect(params, ({ objects, states }) => {\n // extract id\n pattern = pattern.replace(/\\\\/g, '/');\n if (pattern[0] === '/') {\n pattern = pattern.substring(1);\n }\n\n if (pattern === '*') {\n objects.getObjectList(\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999'\n },\n (err, arr) => {\n if (!err && arr?.rows) {\n const files: any[] = [];\n let count = 0;\n for (const row of arr.rows) {\n if (row.value.type !== 'adapter') {\n continue;\n }\n count++;\n objects.chownFile(\n row.value.common.name as string,\n '*',\n {\n user: 'system.user.admin',\n owner: user as ioBroker.ObjectIDs.User,\n ownerGroup: group\n },\n // @ts-expect-error todo _id should not exist how to handle\n async (err, processed, _id) => {\n if (!err && processed) {\n files.push({ id: _id, processed: processed });\n }\n if (!--count) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n files.sort((a, b) => a.id.localeCompare(b.id));\n\n list.showFileHeader();\n for (let k = 0; k < files.length; k++) {\n for (let t = 0; t < files[k].processed.length; t++) {\n list.showFile(\n files[k].id,\n files[k].processed[t].path,\n files[k].processed[t]\n );\n }\n }\n setTimeout(callback, 1_000);\n }\n }\n );\n }\n if (!count) {\n console.log('Nothing found');\n return void callback();\n }\n }\n }\n );\n } else {\n const parts = pattern.split('/');\n const id = parts.shift()!;\n const path = parts.join('/');\n\n objects.chownFile(\n id,\n path,\n {\n user: 'system.user.admin',\n owner: user as ioBroker.ObjectIDs.User,\n ownerGroup: group\n },\n async (err, processed) => {\n if (err) {\n console.error(err);\n } else {\n // call here list\n if (processed) {\n const { List } = await import('./setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback\n });\n list.showFileHeader();\n for (const file of processed) {\n // @ts-expect-error todo types adjustment needed\n list.showFile(id, file.path, file);\n }\n }\n }\n setTimeout(callback, 1_000);\n }\n );\n }\n });\n break;\n }\n\n case 'user': {\n const command = args[0] || '';\n let user = args[1] || '';\n\n if (user && user.startsWith('system.user.')) {\n user = user.substring('system.user.'.length);\n }\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n const password = params.password;\n const group = params.ingroup || 'system.group.administrator';\n\n if (command === 'add') {\n users.addUserPrompt(user, group, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" created (Group: ${group.replace('system.group.', '')})`);\n return void callback();\n }\n });\n } else if (command === 'del' || command === 'delete') {\n users.delUser(user, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" deleted`);\n return void callback();\n }\n });\n } else if (command === 'check') {\n users.checkUserPassword(user, password, err => {\n if (err) {\n console.error(err.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for user \"${user}\" matches.`);\n return void callback();\n }\n });\n } else if (command === 'set' || command === 'passwd') {\n users.setUserPassword(user, password, err => {\n if (err) {\n console.error(err.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for \"${user}\" was successfully set.`);\n return void callback();\n }\n });\n } else if (command === 'enable' || command === 'e') {\n users.enableUser(user, true, err => {\n if (err) {\n console.error(err.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was successfully enabled.`);\n return void callback();\n }\n });\n } else if (command === 'disable' || command === 'd') {\n users.enableUser(user, false, err => {\n if (err) {\n console.error(err.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was successfully disabled.`);\n return void callback();\n }\n });\n } else if (command === 'get') {\n users.getUser(user, (err, isEnabled) => {\n if (err) {\n console.error(err.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" is ${isEnabled ? 'enabled' : 'disabled'}`);\n return void callback();\n }\n });\n } else {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, check, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'g':\n case 'group': {\n const command = args[0] || '';\n let group = args[1] || '';\n let user = args[2] || '';\n\n if (group && group.startsWith('system.group.')) {\n group = group.substring('system.group.'.length);\n }\n if (user && user.startsWith('system.user.')) {\n user = user.substring('system.user.'.length);\n }\n if (!command) {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, list, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!group) {\n console.warn(`Please define group name: group ${command} groupName`);\n return callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n\n if (command === 'useradd' || command === 'adduser') {\n if (!user) {\n console.warn('Please define user name: \"group useradd groupName userName\"');\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n users.addUserToGroup(user, group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was added to group \"${group}\"`);\n return void callback();\n }\n });\n } else if (command === 'userdel' || command === 'deluser') {\n if (!user) {\n console.warn('Please define user name: \"group userdel groupName userName\"');\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n users.removeUserFromGroup(user, group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" was deleted from group \"${group}\"`);\n return void callback();\n }\n });\n } else if (command === 'add') {\n try {\n await users.addGroup(group);\n console.log(`Group \"${group}\" was created`);\n return void callback();\n } catch {\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n } else if (command === 'del' || command === 'delete') {\n users.delGroup(group, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was deleted`);\n return void callback();\n }\n });\n } else if (command === 'list' || command === 'l') {\n users.getGroup(group, (err, isEnabled, members) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(\n `Group \"${group}\" is ${isEnabled ? 'enabled' : 'disabled'} and has following members:`\n );\n if (members) {\n for (const member of members) {\n console.log(member.substring('system.user.'.length));\n }\n }\n return void callback();\n }\n });\n } else if (command === 'enable' || command === 'e') {\n users.enableGroup(group, true, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was successfully enabled.`);\n return void callback();\n }\n });\n } else if (command === 'disable' || command === 'd') {\n users.enableGroup(group, false, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" was successfully disabled.`);\n return void callback();\n }\n });\n } else if (command === 'get') {\n users.getGroup(group, (err, isEnabled) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Group \"${group}\" is ${isEnabled ? 'enabled' : 'disabled'}`);\n return void callback();\n }\n });\n } else {\n console.warn(\n `Unknown command \"${command}\". Available commands are: add, del, passwd, enable, disable, list, get`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'adduser': {\n const user = args[0];\n const group = params.ingroup || 'system.group.administrator';\n const password = params.password;\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.addUserPrompt(user, group, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" created (Group: ${group.replace('system.group.', '')})`);\n return void callback();\n }\n });\n });\n break;\n }\n\n case 'passwd': {\n const user = args[0];\n const password = params.password;\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.setUserPassword(user, password, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`Password for \"${user}\" was successfully set.`);\n return void callback();\n }\n });\n });\n break;\n }\n\n case 'ud':\n case 'udel':\n case 'userdel':\n case 'deluser': {\n const user = args[0];\n\n dbConnect(params, async ({ objects }) => {\n const { Users } = await import('./setup/setupUsers.js');\n const users = new Users({\n objects,\n processExit: callback\n });\n users.delUser(user, (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n } else {\n console.log(`User \"${user}\" deleted`);\n return void callback();\n }\n });\n });\n break;\n }\n\n // Create package.json in /opt/' + tools.appName + '\n case 'package': {\n const json = {\n name: tools.appName,\n engines: {\n node: '>=12'\n },\n optionalDependencies: {} as Record<string, string>,\n dependencies: {\n [`${tools.appName.toLowerCase()}.js-controller`]: '*',\n [`${tools.appName.toLowerCase()}.admin`]: '*'\n },\n author: 'bluefox <dogafox@gmail.com>'\n };\n\n // @ts-expect-error todo fix it\n tools.getRepositoryFile(null, null, (_err, sources, _sourcesHash) => {\n if (sources) {\n for (const s in sources) {\n if (Object.prototype.hasOwnProperty.call(sources, s)) {\n if (sources[s].url) {\n if (!json.dependencies[tools.appName + '.' + s]) {\n json.optionalDependencies[tools.appName + '.' + s] = sources[s].url;\n }\n } else {\n if (!json.dependencies[tools.appName + '.' + s]) {\n json.optionalDependencies[tools.appName + '.' + s] = '*';\n }\n }\n }\n }\n }\n\n fs.writeFileSync(path.join(tools.getRootDir(), 'package.json'), JSON.stringify(json, null, 2));\n return void callback();\n });\n break;\n }\n\n case 'set': {\n const instance = args[0] as `${string}.${number}`;\n if (!instance) {\n console.warn('please specify instance.');\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n if (instance.indexOf('.') === -1) {\n console.warn(`please specify instance, like \"${instance}.0\"`);\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n const { objects } = await dbConnectAsync(false, params);\n\n let obj: ioBroker.InstanceObject | undefined | null;\n\n try {\n obj = await objects.getObjectAsync(`system.adapter.${instance}`);\n } catch {\n // ignore\n }\n\n if (obj) {\n let changed = false;\n for (let a = 0; a < process.argv.length; a++) {\n if (\n process.argv[a].startsWith('--') &&\n process.argv[a + 1] &&\n !process.argv[a + 1].startsWith('--')\n ) {\n const attr = process.argv[a].substring(2);\n let val: number | string | boolean = process.argv[a + 1];\n if (val === '__EMPTY__') {\n val = '';\n } else if (val === 'true') {\n val = true;\n } else if (val === 'false') {\n val = false;\n } else if (parseFloat(val).toString() === val) {\n val = parseFloat(val);\n }\n if (attr.indexOf('.') !== -1) {\n const parts = attr.split('.');\n if (!obj.native[parts[0]] || obj.native[parts[0]][parts[1]] === undefined) {\n console.warn(`Adapter \"${instance}\" has no setting \"${attr}\".`);\n } else {\n changed = true;\n obj.native[parts[0]][parts[1]] = val;\n console.log(`New ${attr} for \"${instance}\" is: ${val}`);\n }\n } else {\n if (obj.native[attr] === undefined) {\n console.warn(`Adapter \"${instance}\" has no setting \"${attr}\".`);\n } else {\n changed = true;\n obj.native[attr] = val;\n console.log(`New ${attr} for \"${instance}\" is: ${val}`);\n }\n }\n a++;\n }\n }\n if (changed) {\n obj.from = `system.host.${tools.getHostName()}.cli`;\n obj.ts = new Date().getTime();\n objects.setObject(`system.adapter.${instance}`, obj, () => {\n console.log(`Instance settings for \"${instance}\" are changed.`);\n return void callback();\n });\n } else {\n console.log('No parameters set.');\n return void callback();\n }\n } else {\n CLIError.invalidInstance(instance);\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n }\n break;\n }\n\n case 'host': {\n const hostCommand = new CLIHost(commandOptions);\n hostCommand.execute(args);\n break;\n }\n\n case 'visdebug': {\n let widgetset = args[0];\n if (widgetset && widgetset.startsWith('vis-')) {\n widgetset = widgetset.substring(4);\n }\n const { VisDebug } = await import('./setup/setupVisDebug.js');\n\n dbConnect(params, ({ objects }) => {\n const visDebug = new VisDebug({\n objects,\n processExit: callback\n });\n\n visDebug.enableDebug(widgetset);\n });\n break;\n }\n\n case 'file':\n case 'f': {\n const cmd = args[0];\n if (\n cmd !== 'read' &&\n cmd !== 'r' &&\n cmd !== 'w' &&\n cmd !== 'write' &&\n cmd !== 'sync' &&\n cmd !== 'rm' &&\n cmd !== 'unlink' &&\n cmd !== 'del'\n ) {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (cmd !== 'sync' && !args[1]) {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file from DB and store it on disk'\n );\n console.log(\n 'or \"file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png\" to write the file into DB from disk'\n );\n console.log(\n 'or \"file rm /vis-2.0/main/img/picture.png\" to delete the file in DB'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n dbConnect(params, async ({ objects, objectsDBType }) => {\n if (cmd === 'read' || cmd === 'r') {\n const toRead = args[1];\n const parts = toRead.replace(/\\\\/g, '/').split('/');\n\n const path = (args[2] || process.cwd()).replace(/\\\\/g, '/').split('/');\n const file = path[path.length - 1];\n if (!file.match(/\\.[a-zA-Z0-9]+$/)) {\n // If destination location seems to be a directory, add filename\n if (file !== '') {\n path.push(parts[parts.length - 1]);\n } else {\n // trailing slash\n path[path.length - 1] = parts[parts.length - 1];\n }\n }\n let adapt = parts.shift();\n if (!adapt) {\n // leading slash\n adapt = parts.shift();\n }\n if (!adapt) {\n console.log(`Invalid parameters: adapter cannot be found!`);\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!parts.length) {\n console.log('Invalid parameters: file cannot be found: file not provided');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.readFile(adapt, parts.join('/'), null, (err, data) => {\n err && console.error(err);\n if (data) {\n const destFilename = path.join('/');\n fs.writeFileSync(destFilename, data);\n console.log(`File \"${toRead}\" stored as \"${destFilename}\"`);\n }\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'write' || cmd === 'w') {\n const toRead = args[1] || '';\n const parts = toRead.replace(/\\\\/g, '/').split('/');\n\n const path = (args[2] || '').replace(/\\\\/g, '/').split('/');\n\n let adapt = path.shift();\n if (!adapt) {\n adapt = path.shift();\n }\n if (!path.length) {\n path.push('');\n }\n\n const fileSrc = parts[parts.length - 1];\n let fileDest = path[path.length - 1];\n if (!fileDest || !fileDest.match(/\\.[a-zA-Z0-9]+$/)) {\n // last portion of destination has no extension, consider being a directory\n fileDest = '';\n }\n if (!fileSrc || !fs.existsSync(toRead)) {\n console.log(\n `Please provide a valid file name as source file: \"file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js\"`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n const srcStat = fs.statSync(toRead);\n if (!srcStat.isFile()) {\n console.log(\n `Please provide a valid file name as source file: \"file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js\"`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!fileDest) {\n // destination filename is not given, use same name as source file\n fileDest = fileSrc;\n }\n if (fileDest !== path[path.length - 1]) {\n // if last part of path is different then filename, add filename\n if (path[path.length - 1] !== '') {\n path.push(fileDest);\n } else {\n // trailing slash\n path[path.length - 1] = fileDest;\n }\n }\n const destFilename = path.length ? path.join('/') : '/';\n const data = fs.readFileSync(toRead);\n\n if (!adapt) {\n console.log('Invalid parameters: destination adapter cannot be found!');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.writeFile(adapt, destFilename, data, _err => {\n console.log(`File \"${toRead}\" stored as \"${destFilename}\"`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'del' || cmd === 'rm' || cmd === 'unlink') {\n const toDelete = args[1];\n const parts = toDelete.replace(/\\\\/g, '/').split('/');\n\n let adapt = parts.shift();\n if (!adapt) {\n // leading slash\n adapt = parts.shift();\n }\n\n if (!adapt) {\n console.log('Invalid parameters: adapter cannot be found!');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n if (!parts.length) {\n console.log('Invalid parameters: file cannot be found: file not provided');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n objects.unlink(adapt, parts.join('/'), null, err => {\n err && console.error(err);\n !err && console.log(`File \"${toDelete}\" was deleted`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n } else if (cmd === 'sync') {\n // Sync\n if (objectsDBType === 'redis') {\n console.log('File Sync is not available when database type \"redis\" is used.');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n // @ts-expect-error todo look in depth how to handle\n if (!objects.syncFileDirectory || !objects.dirExists) {\n // functionality only exists in server class\n console.log(\n 'Please stop ioBroker before syncing files and only use this command on the ioBroker master host!'\n );\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n // check meta.user\n try {\n const objExists = await objects.objectExists('meta.user');\n if (objExists) {\n // check if dir is missing\n // @ts-expect-error todo look in depth how to handle\n const dirExists = objects.dirExists('meta.user');\n if (!dirExists) {\n // create meta.user, so users see them as upload target\n await objects.mkdirAsync('meta.user');\n console.log('Successfully created \"meta.user\" directory');\n }\n }\n } catch (err) {\n console.warn(`Could not create directory \"meta.user\": ${err.message}`);\n }\n\n try {\n // @ts-expect-error todo types needed for this one? but only exists sometimes..\n const { numberSuccess, notifications } = objects.syncFileDirectory(args[1]);\n console.log(`${numberSuccess} file(s) successfully synchronized with ioBroker storage`);\n if (notifications.length) {\n console.log();\n console.log('The following notifications happened during sync: ');\n notifications.forEach((el: string) => console.log('- ' + el));\n }\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n console.error(`Error on sync: ${err.message}. Partial content might have been synced.`);\n return void callback(EXIT_CODES.CANNOT_SYNC_FILES);\n }\n } else {\n console.log(\n 'Invalid parameters: write \"file read /vis-2.0/main/img/picture.png /opt/picture/image.png\" to read the file from DB and store it on disk'\n );\n console.log(\n 'or \"file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png\" to write the file into DB from disk'\n );\n console.log(\n 'or \"file rm /vis-2.0/main/img/picture.png\" to delete the file in DB'\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n });\n break;\n }\n\n case 'id':\n case 'uuid': {\n dbConnect(params, ({ objects }) => {\n objects.getObject('system.meta.uuid', (err, obj) => {\n if (err) {\n console.error(`Error: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_GET_UUID);\n }\n if (obj?.native) {\n console.log(obj.native.uuid);\n return void callback();\n } else {\n console.error('Error: no UUID found');\n return void callback(EXIT_CODES.CANNOT_GET_UUID);\n }\n });\n });\n break;\n }\n\n case 'v':\n case 'version': {\n const adapter = params.adapter;\n\n if (params.ignore) {\n try {\n const { objects } = await dbConnectAsync(false, params);\n await ignoreVersion({ adapterName: adapter, version: params.ignore, objects });\n } catch (e) {\n console.error(e.message);\n callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n return;\n }\n console.log(`Successfully ignored version \"${params.ignore}\" of adapter \"${params.adapter}\"!`);\n callback();\n return;\n }\n\n if (params.recognize) {\n try {\n const { objects } = await dbConnectAsync(false, params);\n await recognizeVersion({ adapterName: adapter, objects });\n } catch (e) {\n console.error(e.message);\n callback(e instanceof IoBrokerError ? e.code : EXIT_CODES.UNKNOWN_ERROR);\n }\n console.log(`Successfully recognized all versions of adapter \"${params.adapter}\" again!`);\n callback();\n return;\n }\n\n let packJson;\n if (adapter) {\n try {\n packJson = require(`${tools.appName.toLowerCase()}.${adapter}/package.json`);\n } catch {\n packJson = { version: `\"${adapter}\" not found` };\n }\n } else {\n packJson = require(`@iobroker/js-controller-common/package.json`);\n }\n console.log(packJson.version);\n\n return void callback();\n }\n\n case 'checklog': {\n dbConnect(params, async ({ objects, states, isOffline, objectsDBType }) => {\n const hasLocalObjectsServer = await objectsDbHasServer(objectsDBType);\n if (isOffline && hasLocalObjectsServer) {\n console.log(`${tools.appName} is not running`);\n return void callback(EXIT_CODES.CONTROLLER_NOT_RUNNING);\n } else {\n console.log(`${tools.appName} is running`);\n objects.getObjectList(\n {\n startkey: 'system.host.',\n endkey: `system.host.\\u9999`\n },\n null,\n (err, res) => {\n if (!err && res?.rows.length) {\n for (const row of res.rows) {\n const parts = row.id.split('.');\n // ignore system.host.name.alive and so on\n if (parts.length === 3) {\n states.pushMessage(row.id, {\n command: 'checkLogging',\n message: null,\n from: 'console'\n });\n }\n }\n }\n setTimeout(callback, 200);\n }\n );\n }\n });\n break;\n }\n\n case 'repo': {\n let repoUrlOrCommand = args[0]; // Repo url or name or \"add\" / \"del\" / \"set\" / \"show\" / \"addset\" / \"unset\"\n const repoName = args[1]; // Repo url or name\n let repoUrl = args[2]; // Repo url or name\n if (\n repoUrlOrCommand !== 'add' &&\n repoUrlOrCommand !== 'del' &&\n repoUrlOrCommand !== 'set' &&\n repoUrlOrCommand !== 'show' &&\n repoUrlOrCommand !== 'addset' &&\n repoUrlOrCommand !== 'unset'\n ) {\n repoUrl = repoUrlOrCommand;\n repoUrlOrCommand = 'show';\n }\n\n dbConnect(params, async ({ objects, states }) => {\n const { Repo } = await import('./setup/setupRepo.js');\n const repo = new Repo({\n objects,\n states\n });\n\n if (repoUrlOrCommand === 'show') {\n try {\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot show repository status: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (\n repoUrlOrCommand === 'add' ||\n repoUrlOrCommand === 'del' ||\n repoUrlOrCommand === 'set' ||\n repoUrlOrCommand === 'addset' ||\n repoUrlOrCommand === 'unset'\n ) {\n if (!repoName || !repoName.match(/[-_\\w\\d]+/)) {\n console.error(`Invalid repository name: \"${repoName}\"`);\n return void callback();\n } else {\n if (repoUrlOrCommand === 'add' || repoUrlOrCommand === 'addset') {\n if (!repoUrl) {\n console.warn(\n `Please define repository URL or path: ${tools.appName.toLowerCase()} add <repoName> <repoUrlOrPath>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n try {\n await repo.add(repoName, repoUrl);\n\n if (repoUrlOrCommand === 'addset') {\n await repo.setActive(repoName);\n console.log(`Repository \"${repoName}\" set as active: \"${repoUrl}\"`);\n await repo.showRepoStatus();\n return void callback();\n } else {\n console.log(`Repository \"${repoName}\" added as \"${repoUrl}\"`);\n await repo.showRepoStatus();\n return void callback();\n }\n } catch (err) {\n console.error(`Cannot add repository location: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n }\n } else if (repoUrlOrCommand === 'set') {\n try {\n await repo.setActive(repoName);\n console.log(`Repository \"${repoName}\" set as active.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot activate repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (repoUrlOrCommand === 'del') {\n try {\n await repo.del(repoName);\n console.log(`Repository \"${repoName}\" deleted.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot remove repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else if (repoUrlOrCommand === 'unset') {\n try {\n await repo.setInactive(repoName);\n console.log(`Repository \"${repoName}\" deactivated.`);\n await repo.showRepoStatus();\n return void callback();\n } catch (err) {\n console.error(`Cannot deactivate repository: ${err.message}`);\n return void callback(EXIT_CODES.INVALID_REPO);\n }\n } else {\n console.warn('Unknown repo command: ' + repoUrlOrCommand);\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n }\n }\n });\n break;\n }\n\n case 'multihost':\n case 'mh': {\n const cmd = args[0];\n if (\n cmd !== 'c' &&\n cmd !== 'connect' &&\n cmd !== 's' &&\n cmd !== 'status' &&\n cmd !== 'b' &&\n cmd !== 'browse' &&\n cmd !== 'e' &&\n cmd !== 'enable' &&\n cmd !== 'd' &&\n cmd !== 'disable'\n ) {\n console.log('Invalid parameters. Following is possible: enable, browse, connect, status');\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n dbConnect(params, async ({ objects, states }) => {\n const { Multihost } = await import('./setup/setupMultihost.js');\n const mh = new Multihost({\n params,\n objects\n });\n\n if (cmd === 's' || cmd === 'status') {\n mh.status();\n return void callback();\n } else if (cmd === 'b' || cmd === 'browse') {\n try {\n const list = await mh.browse();\n mh.showHosts(list);\n return void callback();\n } catch (e) {\n console.error(e.message);\n return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);\n }\n } else if (cmd === 'e' || cmd === 'enable') {\n mh.enable(true, async (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST);\n } else {\n await states.pushMessage(`system.host.${tools.getHostName()}`, {\n command: 'updateMultihost',\n message: null,\n from: 'setup'\n });\n\n callback();\n }\n });\n } else if (cmd === 'd' || cmd === 'disable') {\n mh.enable(false, async (err: any) => {\n if (err) {\n console.error(err);\n return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST);\n } else {\n await states.pushMessage(`system.host.${tools.getHostName()}`, {\n command: 'updateMultihost',\n message: null,\n from: 'setup'\n });\n\n callback();\n }\n });\n } else if (cmd === 'c' || cmd === 'connect') {\n mh.connect(parseInt(args[1]), args[2], (err: any) => {\n if (err) {\n console.error(err);\n }\n return void callback(err ? 1 : 0);\n });\n }\n });\n }\n break;\n }\n\n case 'vendor': {\n const password = args[0];\n const file = args[1];\n if (!password) {\n console.warn(\n `Please specify the password to update the vendor information!\\n${tools.appName.toLowerCase()} vendor <PASS_PHRASE> <vendor.json>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n\n const { objects } = await dbConnectAsync(false, params);\n const { Vendor } = await import('./setup/setupVendor.js');\n const vendor = new Vendor({ objects });\n\n try {\n await vendor.checkVendor(file, password);\n console.log(`Synchronised vendor information.`);\n return void callback();\n } catch (err) {\n console.error(`Cannot update vendor information: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPDATE_VENDOR);\n }\n }\n\n case 'cert': {\n const certCommand = new CLICert(commandOptions);\n certCommand.execute(args);\n break;\n }\n\n case 'compact': {\n const compactCommand = new CLICompact(commandOptions);\n compactCommand.execute(args);\n break;\n }\n\n case 'plugin': {\n const pluginCommand = new CLIPlugin(commandOptions);\n pluginCommand.execute(args);\n break;\n }\n\n case 'license': {\n const file = args[0];\n if (!file) {\n console.warn(\n `Please specify the path to the license file or place license text directly!\\n${tools.appName.toLowerCase()} license <license.file or license.text>`\n );\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n } else {\n dbConnect(params, async ({ objects }) => {\n const { License } = await import('./setup/setupLicense.js');\n const license = new License({ objects });\n try {\n await license.setLicense(file);\n console.log(`License updated.`);\n return void callback();\n } catch (err) {\n console.error(`Cannot update license: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_UPDATE_LICENSE);\n }\n });\n }\n break;\n }\n\n default: {\n if (params.v || params.version) {\n let pckg;\n if (command) {\n try {\n pckg = require(`${tools.appName.toLowerCase()}.${command}/package.json`);\n } catch {\n pckg = { version: `\"${command}\" not found` };\n }\n } else {\n pckg = require(`@iobroker/js-controller-common/package.json`);\n }\n console.log(pckg.version);\n } else {\n showHelp();\n return void callback(EXIT_CODES.INVALID_ARGUMENTS);\n }\n return void callback();\n }\n }\n}\n\nconst OBJECTS_THAT_CANNOT_BE_DELETED = [\n '0_userdata.0',\n 'alias.0',\n 'enum.functions',\n 'enum.rooms',\n 'system.config',\n 'system.group.administrator',\n 'system.group.user',\n 'system.repositories',\n 'system.user.admin'\n];\n\n/**\n * Deletes given objects from the database\n *\n * @param ids ids to delete from database\n */\nasync function delObjects(ids: string[]): Promise<void> {\n const { objects } = await dbConnectAsync(false);\n\n if (ids?.length) {\n for (const id of ids) {\n if (!OBJECTS_THAT_CANNOT_BE_DELETED.includes(id)) {\n try {\n await objects.delObjectAsync(id);\n } catch (err) {\n console.warn(`[Not critical] Cannot delete object ${id}: ${JSON.stringify(err)}`);\n }\n }\n }\n }\n}\n\n/**\n * Deletes all states from the database\n */\nasync function delStates(): Promise<number> {\n const { states } = await dbConnectAsync(false);\n\n const keys = await states.getKeys('*');\n if (keys) {\n console.log(`clean ${keys.length} states...`);\n for (const key of keys) {\n try {\n await states.delState(key);\n } catch (err) {\n console.error(`[Not critical] Cannot delete state ${key}: ${err.message}`);\n }\n }\n }\n return keys ? keys.length : 0;\n}\n\n/**\n * Cleans the database\n *\n * @param isDeleteDb - if whole db should be destroyed\n */\nasync function cleanDatabase(isDeleteDb: boolean): Promise<number> {\n const { objects } = await dbConnectAsync(false);\n\n if (isDeleteDb) {\n await objects.destroyDBAsync();\n // Clean up states\n const keysCount = await delStates();\n return keysCount;\n } else {\n // Clean only objects, not the views\n let ids: string[] = [];\n\n try {\n const res = await objects.getObjectListAsync({ startkey: '\\u0000', endkey: '\\u9999' });\n if (res.rows.length) {\n console.log(`clean ${res.rows.length} objects...`);\n ids = res.rows.map(e => e.id);\n }\n } catch {\n // ignore\n }\n\n await delObjects(ids);\n // Clean up states\n const keysCount = await delStates();\n return keysCount;\n }\n}\n\nfunction unsetup(params: Record<string, any>, callback: ExitCodeCb): void {\n dbConnect(params, ({ objects }) => {\n objects.delObject('system.meta.uuid', err => {\n if (err) {\n console.log(`uuid cannot be deleted: ${err.message}`);\n } else {\n console.log('system.meta.uuid deleted');\n }\n objects.getObject('system.config', (_err, obj) => {\n if (obj?.common.licenseConfirmed || obj?.common.language || obj?.native?.secret) {\n obj.common.licenseConfirmed = false;\n obj.common.language = 'en';\n // allow with parameter --keepsecret to not delete the secret\n // This is very specific use case for vendors and must not be described in documentation\n if (!params.keepsecret) {\n obj.native && delete obj.native.secret;\n }\n\n obj.from = `system.host.${tools.getHostName()}.cli`;\n obj.ts = new Date().getTime();\n\n objects.setObject('system.config', obj as any, err => {\n if (err) {\n console.log(`not found: ${err.message}`);\n return void callback(EXIT_CODES.CANNOT_SET_OBJECT);\n } else {\n console.log('system.config reset');\n return void callback();\n }\n });\n } else {\n console.log('system.config is OK');\n return void callback();\n }\n });\n });\n });\n}\n\n/**\n * Spawns a process which restarts the controller\n */\nasync function restartController(): Promise<void> {\n console.log('Starting node restart.js');\n const { spawn } = await import('node:child_process');\n\n const child = spawn('node', [`${thisDir}/restart.js`], {\n detached: true,\n stdio: ['ignore', 'ignore', 'ignore'],\n windowsHide: true\n });\n\n child.unref();\n}\n\n/**\n * Method which should be called from CLI to initialize the handling of all args\n */\nexport function execute(): void {\n // direct call\n const _yargs = initYargs();\n // @ts-expect-error todo fix it\n const command = _yargs.argv._[0];\n\n const args: string[] = [];\n\n // skip interpreter, filename and command\n for (let i = 3; i < process.argv.length; i++) {\n if (process.argv[i].startsWith('-')) {\n // on first param we have all our args\n break;\n }\n args.push(process.argv[i]);\n }\n\n processCommand(command, args, _yargs.argv, exitApplicationSave);\n}\n\nprocess.on('unhandledRejection', (e: any) => {\n console.error(`Uncaught Rejection: ${e.stack || e}`);\n exitApplicationSave(EXIT_CODES.UNCAUGHT_EXCEPTION);\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_js_controller_common", "require", "Debug", "yargs", "fs", "deepClone", "path", "url", "err", "CLIError", "command", "_yargs"]
|
|
7
7
|
}
|