@iobroker/js-controller-cli 7.0.3 → 7.0.4-alpha.1-20241120-1e3f92f91

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/setup/utils.ts"],
4
- "sourcesContent": ["import { EXIT_CODES } from '@iobroker/js-controller-common';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport semver from 'semver';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\n\ninterface GetRepositoryOptions {\n /** The objects DB client */\n objects: ObjectsClient;\n /** Name of the repository */\n repoName?: string;\n}\n\n/**\n * Get JSON of the given repository\n *\n * @param options Repository specific options\n */\nexport async function getRepository(\n options: GetRepositoryOptions,\n): Promise<Record<string, ioBroker.RepositoryJsonAdapterContent>> {\n const { objects } = options;\n const { repoName } = options;\n\n let repoNameOrArray: string | string[] | undefined = repoName;\n if (!repoName || repoName === 'auto') {\n const systemConfig = await objects.getObject('system.config');\n repoNameOrArray = systemConfig!.common.activeRepo;\n }\n\n const repoArr = !Array.isArray(repoNameOrArray) ? [repoNameOrArray!] : repoNameOrArray;\n\n const systemRepos = (await objects.getObject('system.repositories'))!;\n\n const allSources: Record<string, ioBroker.RepositoryJsonAdapterContent> = {};\n let changed = false;\n let anyFound = false;\n for (const repoUrl of repoArr) {\n const repo = systemRepos.native.repositories[repoUrl];\n if (repo) {\n if (typeof repo === 'string') {\n systemRepos.native.repositories[repo] = {\n link: repo,\n json: null,\n };\n changed = true;\n }\n\n // If repo is not yet loaded\n if (!systemRepos.native.repositories[repoUrl].json) {\n console.log(`Update repository \"${repoUrl}\" under \"${systemRepos.native.repositories[repoUrl].link}\"`);\n const data = await tools.getRepositoryFileAsync(systemRepos.native.repositories[repoUrl].link);\n systemRepos.native.repositories[repoUrl].json = data.json;\n systemRepos.native.repositories[repoUrl].hash = data.hash;\n systemRepos.from = `system.host.${tools.getHostName()}.cli`;\n systemRepos.ts = new Date().getTime();\n changed = true;\n }\n\n if (systemRepos.native.repositories[repoUrl].json) {\n Object.assign(allSources, systemRepos.native.repositories[repoUrl].json);\n anyFound = true;\n }\n }\n\n if (changed) {\n await objects.setObject('system.repositories', systemRepos);\n }\n }\n\n if (!anyFound) {\n let message: string;\n if (repoArr.length) {\n message = `ERROR: No repositories defined matching \"${repoArr.join(\n ' | ',\n )}\". Please use one of ${Object.keys(systemRepos.native.repositories)\n .map(repo => `\"${repo}\"`)\n .join(', ')}.`;\n } else {\n message = `ERROR: No repositories defined. Please define one repository as active: \"iob repo set <${Object.keys(\n systemRepos.native.repositories,\n ).join(' | ')}>\"`;\n }\n\n throw new IoBrokerError({ message, code: EXIT_CODES.INVALID_REPO });\n } else {\n return allSources;\n }\n}\n\ninterface VersionOptions {\n /** The adapter name to check the version for */\n adapterName: string;\n /** The objects DB instance */\n objects: ObjectsClient;\n}\n\ninterface IgnoreVersionOptions extends VersionOptions {\n /** The version which will be checked */\n version: string;\n}\n\n/**\n * Get info if a specific version should be ignored of this adapter\n *\n * @param options name and target version of the adapter\n */\nexport async function isVersionIgnored(options: IgnoreVersionOptions): Promise<boolean> {\n const { adapterName, version, objects } = options;\n const obj = await objects.getObject(`system.host.${tools.getHostName()}.adapter.${adapterName}`);\n\n if (obj?.common.ignoreVersion === undefined) {\n return false;\n }\n\n return semver.satisfies(version, obj?.common.ignoreVersion);\n}\n\n/**\n * Ignore a specific version of an adapter\n *\n * @param options name and target version of the adapter\n */\nexport async function ignoreVersion(options: IgnoreVersionOptions): Promise<void> {\n const { adapterName, version, objects } = options;\n const id = `system.host.${tools.getHostName()}.adapter.${adapterName}`;\n const obj = await objects.getObject(id);\n\n if (!obj) {\n throw new IoBrokerError({ code: EXIT_CODES.CANNOT_SET_OBJECT, message: `Object \"${id}\" does not exist` });\n }\n\n obj.common.ignoreVersion = version;\n\n await objects.setObject(id, obj);\n}\n\n/**\n * Recognize all updates of adapter again\n *\n * @param options name of the adapter\n */\nexport async function recognizeVersion(options: VersionOptions): Promise<void> {\n const { adapterName, objects } = options;\n const id = `system.host.${tools.getHostName()}.adapter.${adapterName}`;\n const obj = await objects.getObject(id);\n\n if (!obj) {\n throw new IoBrokerError({ code: EXIT_CODES.CANNOT_SET_OBJECT, message: `Object \"${id}\" does not exist` });\n }\n\n delete obj.common.ignoreVersion;\n\n await objects.setObject(id, obj);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { EXIT_CODES } from '@iobroker/js-controller-common';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport semver from 'semver';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\n\ninterface GetRepositoryOptions {\n /** The objects DB client */\n objects: ObjectsClient;\n /** Name of the repository */\n repoName?: string;\n}\n\n/**\n * Get JSON of the given repository\n *\n * @param options Repository specific options\n */\nexport async function getRepository(\n options: GetRepositoryOptions,\n): Promise<Record<string, ioBroker.RepositoryJsonAdapterContent>> {\n const { objects } = options;\n const { repoName } = options;\n\n let repoNameOrArray: string | string[] | undefined = repoName;\n if (!repoName || repoName === 'auto') {\n const systemConfig = await objects.getObject('system.config');\n repoNameOrArray = systemConfig!.common.activeRepo;\n }\n\n const repoArr = !Array.isArray(repoNameOrArray) ? [repoNameOrArray!] : repoNameOrArray;\n\n const systemRepos = (await objects.getObject('system.repositories'))!;\n\n const allSources: Record<string, ioBroker.RepositoryJsonAdapterContent> = {};\n let changed = false;\n let anyFound = false;\n for (const repoUrl of repoArr) {\n const repo = systemRepos.native.repositories[repoUrl];\n if (repo) {\n if (typeof repo === 'string') {\n systemRepos.native.repositories[repo] = {\n link: repo,\n json: null,\n };\n changed = true;\n }\n\n // If repo is not yet loaded\n if (!systemRepos.native.repositories[repoUrl].json) {\n console.log(`Update repository \"${repoUrl}\" under \"${systemRepos.native.repositories[repoUrl].link}\"`);\n const data = await tools.getRepositoryFileAsync(systemRepos.native.repositories[repoUrl].link);\n systemRepos.native.repositories[repoUrl].json = data.json;\n systemRepos.native.repositories[repoUrl].hash = data.hash;\n systemRepos.from = `system.host.${tools.getHostName()}.cli`;\n systemRepos.ts = new Date().getTime();\n changed = true;\n }\n\n if (systemRepos.native.repositories[repoUrl].json) {\n Object.assign(allSources, systemRepos.native.repositories[repoUrl].json);\n anyFound = true;\n }\n }\n\n if (changed) {\n await objects.setObject('system.repositories', systemRepos);\n }\n }\n\n if (!anyFound) {\n let message: string;\n if (repoArr.length) {\n message = `ERROR: No repositories defined matching \"${repoArr.join(\n ' | ',\n )}\". Please use one of ${Object.keys(systemRepos.native.repositories)\n .map(repo => `\"${repo}\"`)\n .join(', ')}.`;\n } else {\n message = `ERROR: No repositories defined. Please define one repository as active: \"iob repo set <${Object.keys(\n systemRepos.native.repositories,\n ).join(' | ')}>\"`;\n }\n\n throw new IoBrokerError({ message, code: EXIT_CODES.INVALID_REPO });\n } else {\n return allSources;\n }\n}\n\ninterface VersionOptions {\n /** The adapter name to check the version for */\n adapterName: string;\n /** The objects DB instance */\n objects: ObjectsClient;\n}\n\ninterface IgnoreVersionOptions extends VersionOptions {\n /** The version which will be checked */\n version: string;\n}\n\n/**\n * Get info if a specific version should be ignored of this adapter\n *\n * @param options name and target version of the adapter\n */\nexport async function isVersionIgnored(options: IgnoreVersionOptions): Promise<boolean> {\n const { adapterName, version, objects } = options;\n const obj = await objects.getObject(`system.host.${tools.getHostName()}.adapter.${adapterName}`);\n\n if (obj?.common.ignoreVersion === undefined) {\n return false;\n }\n\n return semver.satisfies(version, obj?.common.ignoreVersion);\n}\n\n/**\n * Ignore a specific version of an adapter\n *\n * @param options name and target version of the adapter\n */\nexport async function ignoreVersion(options: IgnoreVersionOptions): Promise<void> {\n const { adapterName, version, objects } = options;\n const id = `system.host.${tools.getHostName()}.adapter.${adapterName}`;\n const obj = await objects.getObject(id);\n\n if (!obj) {\n throw new IoBrokerError({ code: EXIT_CODES.CANNOT_SET_OBJECT, message: `Object \"${id}\" does not exist` });\n }\n\n obj.common.ignoreVersion = version;\n\n await objects.setObject(id, obj);\n}\n\n/**\n * Recognize all updates of adapter again\n *\n * @param options name of the adapter\n */\nexport async function recognizeVersion(options: VersionOptions): Promise<void> {\n const { adapterName, objects } = options;\n const id = `system.host.${tools.getHostName()}.adapter.${adapterName}`;\n const obj = await objects.getObject(id);\n\n if (!obj) {\n throw new IoBrokerError({ code: EXIT_CODES.CANNOT_SET_OBJECT, message: `Object \"${id}\" does not exist` });\n }\n\n delete obj.common.ignoreVersion;\n\n await objects.setObject(id, obj);\n}\n\n/**\n * Check if user input is an integer\n *\n * @param input input string to check\n */\nexport function isIntegerLikeInput(input: string): boolean {\n return /^\\d+$/.test(input);\n}\n\n/** URL of the official stable repository */\nexport const STABLE_REPO_URL = 'http://download.iobroker.net/sources-dist.json';\n\n/** URL of the official beta repository */\nexport const BETA_REPO_URL = 'http://download.iobroker.net/sources-dist-latest.json';\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_js_controller_common", "semver"]
7
7
  }
@@ -59,6 +59,7 @@ var import_customError = require("../lib/setup/customError.js");
59
59
  var url = __toESM(require("node:url"), 1);
60
60
  var events = __toESM(require("node:events"), 1);
61
61
  var import_node_module = require("node:module");
62
+ var import_constants = require("@iobroker/js-controller-common-db/constants");
62
63
  const thisDir = url.fileURLToPath(new URL(".", __import_meta_url || `file://${__filename}`));
63
64
  const require2 = (0, import_node_module.createRequire)(__import_meta_url || `file://${__filename}`);
64
65
  import_js_controller_common.tools.ensureDNSOrder();
@@ -260,8 +261,8 @@ function initYargs() {
260
261
  }
261
262
  }).command("validate <backup name or path>", "Validate a specified backup", {}).command(["status [all|<adapter>.<instance>]", "isrun"], "Status of ioBroker or adapter instance", (yargs2) => {
262
263
  yargs2.command("all", "Show entire config").command("<adapter>[.<instance>]", "Status of a specified adapter instance");
263
- }).command("repo [<name>]", "Show repo information", (yargs2) => {
264
- yargs2.command("set <name>", "Set active repository").command("del <name>", "Remove repository").command("add <name> <url>", "Add repository").command("addset <name> <url>", "Add repository and set it as active one").command("show", "List repositories");
264
+ }).command("repo", "Show repo information", (yargs2) => {
265
+ yargs2.command("set <name>|<index>", "Set active repository").command("del <name>|<index>", "Remove repository").command("add <name> <url>", "Add repository").command("addset <name> <url>", "Add repository and set it as active one").command("show", "List repositories");
265
266
  }).command(["uuid", "id"], "Show uuid of the installation", {}).command("unsetup", "Reset license, installation secret and language", {}).command("fix", "Execute the installation fixer script, this updates your ioBroker installation", {}).command("nodejs-update [<major-version>]", "Upgrade the Node.JS installation to the current LTS", {}).command("multihost", "Multihost management", (yargs2) => {
266
267
  yargs2.command("enable", "Enable multihost discovery", {
267
268
  secure: {
@@ -434,8 +435,8 @@ async function processCommand(command, args, params, callback) {
434
435
  const { Repo } = await import("./setup/setupRepo.js");
435
436
  const repo = new Repo({ objects, states });
436
437
  try {
437
- await repo.rename("default", "stable", "http://download.iobroker.net/sources-dist.json");
438
- await repo.rename("latest", "beta", "http://download.iobroker.net/sources-dist-latest.json");
438
+ await repo.rename("default", "stable", import_utils.STABLE_REPO_URL);
439
+ await repo.rename("latest", "beta", import_utils.BETA_REPO_URL);
439
440
  } catch (err) {
440
441
  console.warn(`Cannot rename: ${err.message}`);
441
442
  }
@@ -1988,87 +1989,95 @@ ${import_js_controller_common.tools.appName} upload /file/picture.png /vis-2.0/m
1988
1989
  }
1989
1990
  case "repo": {
1990
1991
  let repoUrlOrCommand = args[0];
1991
- const repoName = args[1];
1992
+ let repoName = args[1];
1992
1993
  let repoUrl = args[2];
1993
1994
  if (repoUrlOrCommand !== "add" && repoUrlOrCommand !== "del" && repoUrlOrCommand !== "set" && repoUrlOrCommand !== "show" && repoUrlOrCommand !== "addset" && repoUrlOrCommand !== "unset") {
1994
1995
  repoUrl = repoUrlOrCommand;
1995
1996
  repoUrlOrCommand = "show";
1996
1997
  }
1997
- (0, import_dbConnection.dbConnect)(params, async ({ objects, states }) => {
1998
- const { Repo } = await import("./setup/setupRepo.js");
1999
- const repo = new Repo({
2000
- objects,
2001
- states
2002
- });
2003
- if (repoUrlOrCommand === "show") {
1998
+ const { objects, states } = await (0, import_dbConnection.dbConnectAsync)(false, params);
1999
+ const { Repo } = await import("./setup/setupRepo.js");
2000
+ const repo = new Repo({
2001
+ objects,
2002
+ states
2003
+ });
2004
+ if (repoUrlOrCommand === "show") {
2005
+ try {
2006
+ await repo.showRepoStatus();
2007
+ return void callback();
2008
+ } catch (e) {
2009
+ console.error(`Cannot show repository status: ${e.message}`);
2010
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2011
+ }
2012
+ }
2013
+ if (repoUrlOrCommand === "add" || repoUrlOrCommand === "del" || repoUrlOrCommand === "set" || repoUrlOrCommand === "addset" || repoUrlOrCommand === "unset") {
2014
+ if (!repoName || !repoName.match(/[-_\w]+/)) {
2015
+ console.error(`Invalid repository name: "${repoName}"`);
2016
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2017
+ }
2018
+ if ((0, import_utils.isIntegerLikeInput)(repoName)) {
2004
2019
  try {
2005
- await repo.showRepoStatus();
2006
- return void callback();
2007
- } catch (err) {
2008
- console.error(`Cannot show repository status: ${err.message}`);
2009
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2020
+ repoName = await repo.getNameByIndex(parseInt(repoName));
2021
+ } catch (e) {
2022
+ console.error(e.message);
2023
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2010
2024
  }
2011
- } else if (repoUrlOrCommand === "add" || repoUrlOrCommand === "del" || repoUrlOrCommand === "set" || repoUrlOrCommand === "addset" || repoUrlOrCommand === "unset") {
2012
- if (!repoName || !repoName.match(/[-_\w\d]+/)) {
2013
- console.error(`Invalid repository name: "${repoName}"`);
2014
- return void callback();
2025
+ }
2026
+ if (repoUrlOrCommand === "add" || repoUrlOrCommand === "addset") {
2027
+ if (!repoUrl) {
2028
+ console.warn(`Please define repository URL or path: ${import_js_controller_common.tools.appName.toLowerCase()} add <repoName> <repoUrlOrPath>`);
2029
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2015
2030
  }
2016
- if (repoUrlOrCommand === "add" || repoUrlOrCommand === "addset") {
2017
- if (!repoUrl) {
2018
- console.warn(`Please define repository URL or path: ${import_js_controller_common.tools.appName.toLowerCase()} add <repoName> <repoUrlOrPath>`);
2019
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2020
- }
2021
- try {
2022
- await repo.add(repoName, repoUrl);
2023
- if (repoUrlOrCommand === "addset") {
2024
- await repo.setActive(repoName);
2025
- console.log(`Repository "${repoName}" set as active: "${repoUrl}"`);
2026
- await repo.showRepoStatus();
2027
- return void callback();
2028
- }
2029
- console.log(`Repository "${repoName}" added as "${repoUrl}"`);
2030
- await repo.showRepoStatus();
2031
- return void callback();
2032
- } catch (err) {
2033
- console.error(`Cannot add repository location: ${err.message}`);
2034
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2035
- }
2036
- } else if (repoUrlOrCommand === "set") {
2037
- try {
2031
+ try {
2032
+ await repo.add(repoName, repoUrl);
2033
+ if (repoUrlOrCommand === "addset") {
2038
2034
  await repo.setActive(repoName);
2039
- console.log(`Repository "${repoName}" set as active.`);
2035
+ console.log(`Repository "${repoName}" set as active: "${repoUrl}"`);
2040
2036
  await repo.showRepoStatus();
2041
2037
  return void callback();
2042
- } catch (err) {
2043
- console.error(`Cannot activate repository: ${err.message}`);
2044
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2045
2038
  }
2046
- } else if (repoUrlOrCommand === "del") {
2047
- try {
2048
- await repo.del(repoName);
2049
- console.log(`Repository "${repoName}" deleted.`);
2050
- await repo.showRepoStatus();
2051
- return void callback();
2052
- } catch (err) {
2053
- console.error(`Cannot remove repository: ${err.message}`);
2054
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2055
- }
2056
- } else if (repoUrlOrCommand === "unset") {
2057
- try {
2058
- await repo.setInactive(repoName);
2059
- console.log(`Repository "${repoName}" deactivated.`);
2060
- await repo.showRepoStatus();
2061
- return void callback();
2062
- } catch (err) {
2063
- console.error(`Cannot deactivate repository: ${err.message}`);
2064
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2065
- }
2066
- } else {
2067
- console.warn(`Unknown repo command: ${repoUrlOrCommand}`);
2068
- return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2039
+ console.log(`Repository "${repoName}" added as "${repoUrl}"`);
2040
+ await repo.showRepoStatus();
2041
+ return void callback();
2042
+ } catch (e) {
2043
+ console.error(`Cannot add repository location: ${e.message}`);
2044
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2045
+ }
2046
+ } else if (repoUrlOrCommand === "set") {
2047
+ try {
2048
+ await repo.setActive(repoName);
2049
+ console.log(`Repository "${repoName}" set as active.`);
2050
+ await repo.showRepoStatus();
2051
+ return void callback();
2052
+ } catch (e) {
2053
+ console.error(`Cannot activate repository: ${e.message}`);
2054
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2055
+ }
2056
+ } else if (repoUrlOrCommand === "del") {
2057
+ try {
2058
+ await repo.del(repoName);
2059
+ console.log(`Repository "${repoName}" deleted.`);
2060
+ await repo.showRepoStatus();
2061
+ return void callback();
2062
+ } catch (e) {
2063
+ console.error(`Cannot remove repository: ${e.message}`);
2064
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2065
+ }
2066
+ } else if (repoUrlOrCommand === "unset") {
2067
+ try {
2068
+ await repo.setInactive(repoName);
2069
+ console.log(`Repository "${repoName}" deactivated.`);
2070
+ await repo.showRepoStatus();
2071
+ return void callback();
2072
+ } catch (e) {
2073
+ console.error(`Cannot deactivate repository: ${e.message}`);
2074
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_REPO);
2069
2075
  }
2076
+ } else {
2077
+ console.warn(`Unknown repo command: ${repoUrlOrCommand}`);
2078
+ return void callback(import_js_controller_common2.EXIT_CODES.INVALID_ARGUMENTS);
2070
2079
  }
2071
- });
2080
+ }
2072
2081
  break;
2073
2082
  }
2074
2083
  case "multihost":
@@ -2215,10 +2224,10 @@ const OBJECTS_THAT_CANNOT_BE_DELETED = [
2215
2224
  "alias.0",
2216
2225
  "enum.functions",
2217
2226
  "enum.rooms",
2218
- "system.config",
2227
+ import_constants.SYSTEM_CONFIG_ID,
2219
2228
  "system.group.administrator",
2220
2229
  "system.group.user",
2221
- "system.repositories",
2230
+ import_constants.SYSTEM_REPOSITORIES_ID,
2222
2231
  "system.user.admin"
2223
2232
  ];
2224
2233
  async function delObjects(ids) {
@@ -2270,36 +2279,35 @@ async function cleanDatabase(isDeleteDb) {
2270
2279
  const keysCount = await delStates();
2271
2280
  return keysCount;
2272
2281
  }
2273
- function unsetup(params, callback) {
2274
- (0, import_dbConnection.dbConnect)(params, ({ objects }) => {
2275
- objects.delObject("system.meta.uuid", (err) => {
2276
- if (err) {
2277
- console.log(`uuid cannot be deleted: ${err.message}`);
2278
- } else {
2279
- console.log("system.meta.uuid deleted");
2280
- }
2281
- objects.getObject("system.config", (_err, obj) => {
2282
- if (obj?.common.licenseConfirmed || obj?.common.language || obj?.native?.secret) {
2283
- obj.common.language = "en";
2284
- if (!params.keepsecret) {
2285
- obj.common.licenseConfirmed = false;
2286
- obj.native && delete obj.native.secret;
2282
+ async function unsetup(params, callback) {
2283
+ const { objects } = await (0, import_dbConnection.dbConnectAsync)(false, params);
2284
+ objects.delObject("system.meta.uuid", (err) => {
2285
+ if (err) {
2286
+ console.log(`uuid cannot be deleted: ${err.message}`);
2287
+ } else {
2288
+ console.log("system.meta.uuid deleted");
2289
+ }
2290
+ objects.getObject(import_constants.SYSTEM_CONFIG_ID, (_err, obj) => {
2291
+ if (obj?.common.licenseConfirmed || obj?.common.language || obj?.native?.secret) {
2292
+ obj.common.language = "en";
2293
+ if (!params.keepsecret) {
2294
+ obj.common.licenseConfirmed = false;
2295
+ obj.native && delete obj.native.secret;
2296
+ }
2297
+ obj.from = `system.host.${import_js_controller_common.tools.getHostName()}.cli`;
2298
+ obj.ts = (/* @__PURE__ */ new Date()).getTime();
2299
+ objects.setObject(import_constants.SYSTEM_CONFIG_ID, obj, (err2) => {
2300
+ if (err2) {
2301
+ console.log(`not found: ${err2.message}`);
2302
+ return void callback(import_js_controller_common2.EXIT_CODES.CANNOT_SET_OBJECT);
2287
2303
  }
2288
- obj.from = `system.host.${import_js_controller_common.tools.getHostName()}.cli`;
2289
- obj.ts = (/* @__PURE__ */ new Date()).getTime();
2290
- objects.setObject("system.config", obj, (err2) => {
2291
- if (err2) {
2292
- console.log(`not found: ${err2.message}`);
2293
- return void callback(import_js_controller_common2.EXIT_CODES.CANNOT_SET_OBJECT);
2294
- }
2295
- console.log("system.config reset");
2296
- return void callback();
2297
- });
2298
- } else {
2299
- console.log("system.config is OK");
2304
+ console.log(`${import_constants.SYSTEM_CONFIG_ID} reset`);
2300
2305
  return void callback();
2301
- }
2302
- });
2306
+ });
2307
+ } else {
2308
+ console.log(`${import_constants.SYSTEM_CONFIG_ID} is OK`);
2309
+ return void callback();
2310
+ }
2303
2311
  });
2304
2312
  });
2305
2313
  }