@iobroker/js-controller-cli 7.2.3 → 8.0.0-alpha.1-20260921-e5941ca8a

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.
Files changed (225) hide show
  1. package/build/cjs/index.js +3 -3
  2. package/build/cjs/lib/_Types.d.ts +8 -1
  3. package/build/cjs/lib/cli/cliCert.d.ts +7 -4
  4. package/build/cjs/lib/cli/cliCert.js +10 -6
  5. package/build/cjs/lib/cli/cliCert.js.map +2 -2
  6. package/build/cjs/lib/cli/cliCommand.d.ts +63 -15
  7. package/build/cjs/lib/cli/cliCommand.js +8 -1
  8. package/build/cjs/lib/cli/cliCommand.js.map +2 -2
  9. package/build/cjs/lib/cli/cliCompact.d.ts +5 -2
  10. package/build/cjs/lib/cli/cliCompact.js +9 -2
  11. package/build/cjs/lib/cli/cliCompact.js.map +2 -2
  12. package/build/cjs/lib/cli/cliDebug.d.ts +5 -2
  13. package/build/cjs/lib/cli/cliDebug.js +8 -1
  14. package/build/cjs/lib/cli/cliDebug.js.map +2 -2
  15. package/build/cjs/lib/cli/cliHost.d.ts +13 -10
  16. package/build/cjs/lib/cli/cliHost.js +13 -5
  17. package/build/cjs/lib/cli/cliHost.js.map +2 -2
  18. package/build/cjs/lib/cli/cliLogs.d.ts +9 -3
  19. package/build/cjs/lib/cli/cliLogs.js +12 -1
  20. package/build/cjs/lib/cli/cliLogs.js.map +2 -2
  21. package/build/cjs/lib/cli/cliMessage.d.ts +2 -1
  22. package/build/cjs/lib/cli/cliMessage.js +5 -0
  23. package/build/cjs/lib/cli/cliMessage.js.map +2 -2
  24. package/build/cjs/lib/cli/cliObjects.d.ts +21 -18
  25. package/build/cjs/lib/cli/cliObjects.js +51 -33
  26. package/build/cjs/lib/cli/cliObjects.js.map +2 -2
  27. package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
  28. package/build/cjs/lib/cli/cliPlugin.js +6 -0
  29. package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
  30. package/build/cjs/lib/cli/cliProcess.d.ts +17 -7
  31. package/build/cjs/lib/cli/cliProcess.js +77 -24
  32. package/build/cjs/lib/cli/cliProcess.js.map +3 -3
  33. package/build/cjs/lib/cli/cliStates.d.ts +7 -4
  34. package/build/cjs/lib/cli/cliStates.js +14 -6
  35. package/build/cjs/lib/cli/cliStates.js.map +2 -2
  36. package/build/cjs/lib/cli/cliTools.js +11 -0
  37. package/build/cjs/lib/cli/cliTools.js.map +1 -1
  38. package/build/cjs/lib/cli/messages.js +47 -46
  39. package/build/cjs/lib/cli/messages.js.map +1 -1
  40. package/build/cjs/lib/progressBar.d.ts +59 -0
  41. package/build/cjs/lib/progressBar.js +115 -0
  42. package/build/cjs/lib/progressBar.js.map +7 -0
  43. package/build/cjs/lib/setup/customError.d.ts +4 -0
  44. package/build/cjs/lib/setup/customError.js +7 -0
  45. package/build/cjs/lib/setup/customError.js.map +2 -2
  46. package/build/cjs/lib/setup/dbConnection.js +69 -64
  47. package/build/cjs/lib/setup/dbConnection.js.map +3 -3
  48. package/build/cjs/lib/setup/formatters.d.ts +4 -4
  49. package/build/cjs/lib/setup/formatters.js +5 -0
  50. package/build/cjs/lib/setup/formatters.js.map +2 -2
  51. package/build/cjs/lib/setup/multihostClient.js +6 -2
  52. package/build/cjs/lib/setup/multihostClient.js.map +1 -1
  53. package/build/cjs/lib/setup/pluginInfos.d.ts +5 -0
  54. package/build/cjs/lib/setup/pluginInfos.js +2 -0
  55. package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
  56. package/build/cjs/lib/setup/setupBackup.d.ts +53 -0
  57. package/build/cjs/lib/setup/setupBackup.js +125 -14
  58. package/build/cjs/lib/setup/setupBackup.js.map +3 -3
  59. package/build/cjs/lib/setup/setupInstall.d.ts +51 -15
  60. package/build/cjs/lib/setup/setupInstall.js +212 -28
  61. package/build/cjs/lib/setup/setupInstall.js.map +2 -2
  62. package/build/cjs/lib/setup/setupLicense.d.ts +13 -0
  63. package/build/cjs/lib/setup/setupLicense.js +33 -2
  64. package/build/cjs/lib/setup/setupLicense.js.map +2 -2
  65. package/build/cjs/lib/setup/setupList.d.ts +55 -1
  66. package/build/cjs/lib/setup/setupList.js +78 -24
  67. package/build/cjs/lib/setup/setupList.js.map +3 -3
  68. package/build/cjs/lib/setup/setupMultihost.d.ts +7 -0
  69. package/build/cjs/lib/setup/setupMultihost.js +78 -11
  70. package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
  71. package/build/cjs/lib/setup/setupPacketManager.d.ts +10 -0
  72. package/build/cjs/lib/setup/setupPacketManager.js +16 -6
  73. package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
  74. package/build/cjs/lib/setup/setupRepo.d.ts +19 -0
  75. package/build/cjs/lib/setup/setupRepo.js +141 -13
  76. package/build/cjs/lib/setup/setupRepo.js.map +2 -2
  77. package/build/cjs/lib/setup/setupSetup.d.ts +34 -0
  78. package/build/cjs/lib/setup/setupSetup.js +209 -35
  79. package/build/cjs/lib/setup/setupSetup.js.map +3 -3
  80. package/build/cjs/lib/setup/setupUpgrade.d.ts +13 -2
  81. package/build/cjs/lib/setup/setupUpgrade.js +72 -12
  82. package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
  83. package/build/cjs/lib/setup/setupUpload.d.ts +77 -1
  84. package/build/cjs/lib/setup/setupUpload.js +152 -9
  85. package/build/cjs/lib/setup/setupUpload.js.map +2 -2
  86. package/build/cjs/lib/setup/setupUsers.d.ts +44 -14
  87. package/build/cjs/lib/setup/setupUsers.js +330 -17
  88. package/build/cjs/lib/setup/setupUsers.js.map +2 -2
  89. package/build/cjs/lib/setup/setupVendor.d.ts +14 -1
  90. package/build/cjs/lib/setup/setupVendor.js +40 -8
  91. package/build/cjs/lib/setup/setupVendor.js.map +2 -2
  92. package/build/cjs/lib/setup/setupVisDebug.d.ts +16 -2
  93. package/build/cjs/lib/setup/setupVisDebug.js +41 -17
  94. package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
  95. package/build/cjs/lib/setup/utils.d.ts +1 -1
  96. package/build/cjs/lib/setup/utils.js +13 -9
  97. package/build/cjs/lib/setup/utils.js.map +3 -3
  98. package/build/cjs/lib/setup.d.ts +1 -1
  99. package/build/cjs/lib/setup.js +858 -1758
  100. package/build/cjs/lib/setup.js.map +3 -3
  101. package/build/esm/lib/_Types.d.ts +8 -1
  102. package/build/esm/lib/_Types.d.ts.map +1 -1
  103. package/build/esm/lib/cli/cliCert.d.ts +7 -4
  104. package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
  105. package/build/esm/lib/cli/cliCert.js +6 -6
  106. package/build/esm/lib/cli/cliCert.js.map +1 -1
  107. package/build/esm/lib/cli/cliCommand.d.ts +63 -15
  108. package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
  109. package/build/esm/lib/cli/cliCommand.js +4 -1
  110. package/build/esm/lib/cli/cliCommand.js.map +1 -1
  111. package/build/esm/lib/cli/cliCompact.d.ts +5 -2
  112. package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
  113. package/build/esm/lib/cli/cliCompact.js +5 -2
  114. package/build/esm/lib/cli/cliCompact.js.map +1 -1
  115. package/build/esm/lib/cli/cliDebug.d.ts +5 -2
  116. package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
  117. package/build/esm/lib/cli/cliDebug.js +4 -1
  118. package/build/esm/lib/cli/cliDebug.js.map +1 -1
  119. package/build/esm/lib/cli/cliHost.d.ts +13 -10
  120. package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
  121. package/build/esm/lib/cli/cliHost.js +8 -5
  122. package/build/esm/lib/cli/cliHost.js.map +1 -1
  123. package/build/esm/lib/cli/cliLogs.d.ts +9 -3
  124. package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
  125. package/build/esm/lib/cli/cliLogs.js +8 -1
  126. package/build/esm/lib/cli/cliLogs.js.map +1 -1
  127. package/build/esm/lib/cli/cliMessage.d.ts +2 -1
  128. package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
  129. package/build/esm/lib/cli/cliMessage.js +1 -0
  130. package/build/esm/lib/cli/cliMessage.js.map +1 -1
  131. package/build/esm/lib/cli/cliObjects.d.ts +21 -18
  132. package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
  133. package/build/esm/lib/cli/cliObjects.js +44 -38
  134. package/build/esm/lib/cli/cliObjects.js.map +1 -1
  135. package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
  136. package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
  137. package/build/esm/lib/cli/cliPlugin.js +1 -1
  138. package/build/esm/lib/cli/cliPlugin.js.map +1 -1
  139. package/build/esm/lib/cli/cliProcess.d.ts +17 -7
  140. package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
  141. package/build/esm/lib/cli/cliProcess.js +73 -12
  142. package/build/esm/lib/cli/cliProcess.js.map +1 -1
  143. package/build/esm/lib/cli/cliStates.d.ts +7 -4
  144. package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
  145. package/build/esm/lib/cli/cliStates.js +6 -2
  146. package/build/esm/lib/cli/cliStates.js.map +1 -1
  147. package/build/esm/lib/progressBar.d.ts +59 -0
  148. package/build/esm/lib/progressBar.d.ts.map +1 -0
  149. package/build/esm/lib/progressBar.js +104 -0
  150. package/build/esm/lib/progressBar.js.map +1 -0
  151. package/build/esm/lib/setup/customError.d.ts +4 -0
  152. package/build/esm/lib/setup/customError.d.ts.map +1 -1
  153. package/build/esm/lib/setup/customError.js +3 -0
  154. package/build/esm/lib/setup/customError.js.map +1 -1
  155. package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
  156. package/build/esm/lib/setup/dbConnection.js +10 -13
  157. package/build/esm/lib/setup/dbConnection.js.map +1 -1
  158. package/build/esm/lib/setup/formatters.d.ts +4 -4
  159. package/build/esm/lib/setup/formatters.js +4 -4
  160. package/build/esm/lib/setup/pluginInfos.d.ts +5 -0
  161. package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
  162. package/build/esm/lib/setup/pluginInfos.js +5 -0
  163. package/build/esm/lib/setup/pluginInfos.js.map +1 -1
  164. package/build/esm/lib/setup/setupBackup.d.ts +53 -0
  165. package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
  166. package/build/esm/lib/setup/setupBackup.js +132 -13
  167. package/build/esm/lib/setup/setupBackup.js.map +1 -1
  168. package/build/esm/lib/setup/setupInstall.d.ts +51 -15
  169. package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
  170. package/build/esm/lib/setup/setupInstall.js +228 -23
  171. package/build/esm/lib/setup/setupInstall.js.map +1 -1
  172. package/build/esm/lib/setup/setupLicense.d.ts +13 -0
  173. package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
  174. package/build/esm/lib/setup/setupLicense.js +31 -1
  175. package/build/esm/lib/setup/setupLicense.js.map +1 -1
  176. package/build/esm/lib/setup/setupList.d.ts +55 -1
  177. package/build/esm/lib/setup/setupList.d.ts.map +1 -1
  178. package/build/esm/lib/setup/setupList.js +61 -8
  179. package/build/esm/lib/setup/setupList.js.map +1 -1
  180. package/build/esm/lib/setup/setupMultihost.d.ts +7 -0
  181. package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
  182. package/build/esm/lib/setup/setupMultihost.js +85 -6
  183. package/build/esm/lib/setup/setupMultihost.js.map +1 -1
  184. package/build/esm/lib/setup/setupPacketManager.d.ts +10 -0
  185. package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
  186. package/build/esm/lib/setup/setupPacketManager.js +9 -0
  187. package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
  188. package/build/esm/lib/setup/setupRepo.d.ts +19 -0
  189. package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
  190. package/build/esm/lib/setup/setupRepo.js +164 -14
  191. package/build/esm/lib/setup/setupRepo.js.map +1 -1
  192. package/build/esm/lib/setup/setupSetup.d.ts +34 -0
  193. package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
  194. package/build/esm/lib/setup/setupSetup.js +218 -21
  195. package/build/esm/lib/setup/setupSetup.js.map +1 -1
  196. package/build/esm/lib/setup/setupUpgrade.d.ts +13 -2
  197. package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
  198. package/build/esm/lib/setup/setupUpgrade.js +70 -6
  199. package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
  200. package/build/esm/lib/setup/setupUpload.d.ts +77 -1
  201. package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
  202. package/build/esm/lib/setup/setupUpload.js +164 -7
  203. package/build/esm/lib/setup/setupUpload.js.map +1 -1
  204. package/build/esm/lib/setup/setupUsers.d.ts +44 -14
  205. package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
  206. package/build/esm/lib/setup/setupUsers.js +346 -14
  207. package/build/esm/lib/setup/setupUsers.js.map +1 -1
  208. package/build/esm/lib/setup/setupVendor.d.ts +14 -1
  209. package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
  210. package/build/esm/lib/setup/setupVendor.js +33 -2
  211. package/build/esm/lib/setup/setupVendor.js.map +1 -1
  212. package/build/esm/lib/setup/setupVisDebug.d.ts +16 -2
  213. package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
  214. package/build/esm/lib/setup/setupVisDebug.js +39 -14
  215. package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
  216. package/build/esm/lib/setup/utils.d.ts +1 -1
  217. package/build/esm/lib/setup/utils.d.ts.map +1 -1
  218. package/build/esm/lib/setup/utils.js +2 -4
  219. package/build/esm/lib/setup/utils.js.map +1 -1
  220. package/build/esm/lib/setup.d.ts +1 -1
  221. package/build/esm/lib/setup.d.ts.map +1 -1
  222. package/build/esm/lib/setup.js +959 -1910
  223. package/build/esm/lib/setup.js.map +1 -1
  224. package/build/tsconfig.build.tsbuildinfo +1 -1
  225. package/package.json +14 -14
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
9
  var __export = (target, all) => {
9
10
  for (var name in all)
10
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -34,12 +35,10 @@ __export(dbConnection_exports, {
34
35
  resetDbConnect: () => resetDbConnect
35
36
  });
36
37
  module.exports = __toCommonJS(dbConnection_exports);
38
+ var import_node_path = __toESM(require("node:path"), 1);
37
39
  var import_fs_extra = __toESM(require("fs-extra"), 1);
38
40
  var import_js_controller_common = require("@iobroker/js-controller-common");
39
- var import_js_controller_common2 = require("@iobroker/js-controller-common");
40
- var import_js_controller_common3 = require("@iobroker/js-controller-common");
41
41
  var import_promises = require("node:timers/promises");
42
- var import_node_path = __toESM(require("node:path"), 1);
43
42
  var import_plugin_base = require("@iobroker/plugin-base");
44
43
  let pluginHandler;
45
44
  let Objects;
@@ -64,7 +63,7 @@ async function dbConnect(onlyCheck, params, callback) {
64
63
  throw new Error("No callback for dbConnect");
65
64
  }
66
65
  params = params || {};
67
- const config = import_fs_extra.default.readJSONSync(import_js_controller_common3.tools.getConfigFileName());
66
+ const config = import_fs_extra.default.readJSONSync(import_js_controller_common.tools.getConfigFileName());
68
67
  if (objects && states) {
69
68
  return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });
70
69
  }
@@ -91,16 +90,16 @@ async function dbConnect(onlyCheck, params, callback) {
91
90
  objects = new Objects({
92
91
  connection: config.objects,
93
92
  logger: {
94
- silly: (_msg) => {
95
- },
96
- debug: (_msg) => {
97
- },
98
- info: (_msg) => {
99
- },
100
- warn: (msg) => console.log(msg),
101
- error: (msg) => console.log(msg)
93
+ silly: /* @__PURE__ */ __name((_msg) => {
94
+ }, "silly"),
95
+ debug: /* @__PURE__ */ __name((_msg) => {
96
+ }, "debug"),
97
+ info: /* @__PURE__ */ __name((_msg) => {
98
+ }, "info"),
99
+ warn: /* @__PURE__ */ __name((msg) => console.log(msg), "warn"),
100
+ error: /* @__PURE__ */ __name((msg) => console.log(msg), "error")
102
101
  },
103
- connected: async () => {
102
+ connected: /* @__PURE__ */ __name(async () => {
104
103
  isObjectConnected = true;
105
104
  if (isStatesConnected && typeof callback === "function") {
106
105
  try {
@@ -115,7 +114,7 @@ async function dbConnect(onlyCheck, params, callback) {
115
114
  config
116
115
  });
117
116
  }
118
- }
117
+ }, "connected")
119
118
  });
120
119
  } else {
121
120
  console.log(`No connection to objects ${Array.isArray(config.objects.host) ? config.objects.host.join(", ") : config.objects.host}:${Array.isArray(config.objects.port) ? config.objects.port.join(", ") : config.objects.port}[${config.objects.type}]`);
@@ -129,7 +128,7 @@ async function dbConnect(onlyCheck, params, callback) {
129
128
  });
130
129
  callback = void 0;
131
130
  } else {
132
- return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
131
+ return void exitApplicationSave(import_js_controller_common.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
133
132
  }
134
133
  }
135
134
  }
@@ -144,16 +143,16 @@ async function dbConnect(onlyCheck, params, callback) {
144
143
  states = new States({
145
144
  connection: config.states,
146
145
  logger: {
147
- silly: (_msg) => {
148
- },
149
- debug: (_msg) => {
150
- },
151
- info: (_msg) => {
152
- },
153
- warn: (msg) => console.log(msg),
154
- error: (msg) => console.log(msg)
146
+ silly: /* @__PURE__ */ __name((_msg) => {
147
+ }, "silly"),
148
+ debug: /* @__PURE__ */ __name((_msg) => {
149
+ }, "debug"),
150
+ info: /* @__PURE__ */ __name((_msg) => {
151
+ }, "info"),
152
+ warn: /* @__PURE__ */ __name((msg) => console.log(msg), "warn"),
153
+ error: /* @__PURE__ */ __name((msg) => console.log(msg), "error")
155
154
  },
156
- connected: async () => {
155
+ connected: /* @__PURE__ */ __name(async () => {
157
156
  isStatesConnected = true;
158
157
  if (isObjectConnected && typeof callback === "function") {
159
158
  try {
@@ -168,10 +167,10 @@ async function dbConnect(onlyCheck, params, callback) {
168
167
  config
169
168
  });
170
169
  }
171
- },
170
+ }, "connected"),
172
171
  // react on change
173
172
  // @ts-expect-error todo according to types and first look states.onchange does not exist
174
- change: (id, msg) => states?.onChange(id, msg)
173
+ change: /* @__PURE__ */ __name((id, msg) => states?.onChange(id, msg), "change")
175
174
  });
176
175
  states.onChange = null;
177
176
  } else {
@@ -194,7 +193,7 @@ async function dbConnect(onlyCheck, params, callback) {
194
193
  });
195
194
  callback = void 0;
196
195
  } else {
197
- return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
196
+ return void exitApplicationSave(import_js_controller_common.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
198
197
  }
199
198
  }
200
199
  }
@@ -204,7 +203,7 @@ async function dbConnect(onlyCheck, params, callback) {
204
203
  }
205
204
  console.log("No connection to databases possible ...");
206
205
  if (onlyCheck) {
207
- callback && callback({
206
+ callback?.({
208
207
  // TODO types: allow null if onlyCheck is true
209
208
  objects: null,
210
209
  states: null,
@@ -214,22 +213,22 @@ async function dbConnect(onlyCheck, params, callback) {
214
213
  });
215
214
  callback = void 0;
216
215
  } else {
217
- return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
216
+ return void exitApplicationSave(import_js_controller_common.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
218
217
  }
219
218
  }, params.timeout || config.objects.connectTimeout * 2);
220
219
  objects = new Objects({
221
220
  connection: config.objects,
222
221
  logger: {
223
- silly: (_msg) => {
224
- },
225
- debug: (_msg) => {
226
- },
227
- info: (_msg) => {
228
- },
229
- warn: (msg) => console.log(msg),
230
- error: (msg) => console.log(msg)
222
+ silly: /* @__PURE__ */ __name((_msg) => {
223
+ }, "silly"),
224
+ debug: /* @__PURE__ */ __name((_msg) => {
225
+ }, "debug"),
226
+ info: /* @__PURE__ */ __name((_msg) => {
227
+ }, "info"),
228
+ warn: /* @__PURE__ */ __name((msg) => console.log(msg), "warn"),
229
+ error: /* @__PURE__ */ __name((msg) => console.log(msg), "error")
231
230
  },
232
- connected: async () => {
231
+ connected: /* @__PURE__ */ __name(async () => {
233
232
  if (isObjectConnected) {
234
233
  return;
235
234
  }
@@ -242,21 +241,21 @@ async function dbConnect(onlyCheck, params, callback) {
242
241
  }
243
242
  callback({ objects, states, isOffline, objectsDBType: config.objects.type, config });
244
243
  }
245
- }
244
+ }, "connected")
246
245
  });
247
246
  states = new States({
248
247
  connection: config.states,
249
248
  logger: {
250
- silly: (_msg) => {
251
- },
252
- debug: (_msg) => {
253
- },
254
- info: (_msg) => {
255
- },
256
- warn: (msg) => console.log(msg),
257
- error: (msg) => console.log(msg)
249
+ silly: /* @__PURE__ */ __name((_msg) => {
250
+ }, "silly"),
251
+ debug: /* @__PURE__ */ __name((_msg) => {
252
+ }, "debug"),
253
+ info: /* @__PURE__ */ __name((_msg) => {
254
+ }, "info"),
255
+ warn: /* @__PURE__ */ __name((msg) => console.log(msg), "warn"),
256
+ error: /* @__PURE__ */ __name((msg) => console.log(msg), "error")
258
257
  },
259
- connected: async () => {
258
+ connected: /* @__PURE__ */ __name(async () => {
260
259
  if (isStatesConnected) {
261
260
  return;
262
261
  }
@@ -269,14 +268,16 @@ async function dbConnect(onlyCheck, params, callback) {
269
268
  }
270
269
  callback({ objects, states, isOffline, objectsDBType: config.objects.type, config });
271
270
  }
272
- },
271
+ }, "connected"),
273
272
  // @ts-expect-error todo according to types and first look states.onchange does not exist
274
- change: (id, state) => states?.onChange(id, state)
273
+ change: /* @__PURE__ */ __name((id, state) => states?.onChange(id, state), "change")
275
274
  });
276
275
  }
276
+ __name(dbConnect, "dbConnect");
277
277
  function dbConnectAsync(onlyCheck, params) {
278
278
  return new Promise((resolve) => dbConnect(onlyCheck, params || {}, (params2) => resolve(params2)));
279
279
  }
280
+ __name(dbConnectAsync, "dbConnectAsync");
280
281
  async function resetDbConnect() {
281
282
  if (objects) {
282
283
  await objects.destroy();
@@ -296,29 +297,31 @@ async function resetDbConnect() {
296
297
  await pluginHandler.destroyAll();
297
298
  }
298
299
  }
300
+ __name(resetDbConnect, "resetDbConnect");
299
301
  async function exitApplicationSave(exitCode) {
300
302
  await resetDbConnect();
301
303
  await (0, import_promises.setTimeout)(1e3);
302
304
  process.exit(exitCode);
303
305
  }
306
+ __name(exitApplicationSave, "exitApplicationSave");
304
307
  function initializePlugins(config) {
305
- const ioPackage = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common3.tools.getControllerDir(), "io-package.json"));
306
- const packageJson = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common3.tools.getControllerDir(), "package.json"));
307
- const hostname = import_js_controller_common3.tools.getHostName();
308
+ const ioPackage = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common.tools.getControllerDir(), "io-package.json"));
309
+ const packageJson = import_fs_extra.default.readJsonSync(import_node_path.default.join(import_js_controller_common.tools.getControllerDir(), "package.json"));
310
+ const hostname = import_js_controller_common.tools.getHostName();
308
311
  const pluginSettings = {
309
312
  namespace: `system.host.${hostname}`,
310
313
  logNamespace: `host.${hostname}`,
311
314
  scope: "controller",
312
315
  log: {
313
316
  // cli should be clean, only log warn/error
314
- silly: (_msg) => {
315
- },
316
- debug: (_msg) => {
317
- },
318
- info: (_msg) => {
319
- },
320
- warn: (msg) => console.log(msg),
321
- error: (msg) => console.log(msg),
317
+ silly: /* @__PURE__ */ __name((_msg) => {
318
+ }, "silly"),
319
+ debug: /* @__PURE__ */ __name((_msg) => {
320
+ }, "debug"),
321
+ info: /* @__PURE__ */ __name((_msg) => {
322
+ }, "info"),
323
+ warn: /* @__PURE__ */ __name((msg) => console.log(msg), "warn"),
324
+ error: /* @__PURE__ */ __name((msg) => console.log(msg), "error"),
322
325
  level: "warn"
323
326
  },
324
327
  iobrokerConfig: config,
@@ -326,11 +329,12 @@ function initializePlugins(config) {
326
329
  controllerVersion: ioPackage.common.version
327
330
  };
328
331
  pluginHandler = new import_plugin_base.PluginHandler(pluginSettings);
329
- pluginHandler.addPlugins(ioPackage.common.plugins, import_js_controller_common3.tools.getControllerDir());
330
- pluginHandler.addPlugins(config.plugins, import_js_controller_common3.tools.getControllerDir());
332
+ pluginHandler.addPlugins(ioPackage.common.plugins, import_js_controller_common.tools.getControllerDir());
333
+ pluginHandler.addPlugins(config.plugins, import_js_controller_common.tools.getControllerDir());
331
334
  pluginHandler.setDatabaseForPlugins(objects, states);
332
335
  return pluginHandler.initPlugins(ioPackage);
333
336
  }
337
+ __name(initializePlugins, "initializePlugins");
334
338
  async function checkSystemOffline(onlyCheck) {
335
339
  if (!objects || !states) {
336
340
  return true;
@@ -338,9 +342,10 @@ async function checkSystemOffline(onlyCheck) {
338
342
  if (onlyCheck) {
339
343
  return true;
340
344
  }
341
- const offlineStatus = !await import_js_controller_common3.tools.isHostRunning(objects, states);
345
+ const offlineStatus = !await import_js_controller_common.tools.isHostRunning(objects, states);
342
346
  return offlineStatus;
343
347
  }
348
+ __name(checkSystemOffline, "checkSystemOffline");
344
349
  // Annotate the CommonJS export names for ESM import in node:
345
350
  0 && (module.exports = {
346
351
  dbConnect,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/setup/dbConnection.ts"],
4
- "sourcesContent": ["import type { DbConnectAsyncReturn, DbConnectCallback } from '../_Types.js';\nimport fs from 'fs-extra';\nimport {\n getObjectsConstructor,\n getStatesConstructor,\n objectsDbHasServer,\n statesDbHasServer,\n} from '@iobroker/js-controller-common';\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport { tools } from '@iobroker/js-controller-common';\nimport { setTimeout as wait } from 'node:timers/promises';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport path from 'node:path';\nimport type { InternalAdapterJsonConfig, PluginHandlerSettings } from '@iobroker/plugin-base';\nimport { PluginHandler } from '@iobroker/plugin-base';\n\nlet pluginHandler: InstanceType<typeof PluginHandler>;\nlet Objects: typeof ObjectsInRedisClient | null; // constructor\nlet objects: ObjectsInRedisClient | null; // instance\nlet States: typeof StatesRedisClient | null; // constructor\nlet states: StatesRedisClient | null; // instance\n\ninterface DbConnectParams {\n /** DB connect timeout, default is 10_000 */\n timeout?: number;\n}\n\nexport function dbConnect(callback: DbConnectCallback): void;\nexport function dbConnect(params: Record<string, any>, callback: DbConnectCallback): void;\nexport function dbConnect(onlyCheck: boolean, params: Record<string, any>, callback: DbConnectCallback): void;\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n * @param callback called when connection is established or check is done\n */\nexport async function dbConnect(\n onlyCheck: boolean | Record<string, any> | DbConnectCallback,\n params?: DbConnectParams | DbConnectCallback,\n callback?: DbConnectCallback,\n): Promise<void> {\n if (typeof onlyCheck === 'object') {\n callback = params as DbConnectCallback;\n params = onlyCheck;\n onlyCheck = false;\n }\n if (typeof onlyCheck === 'function') {\n callback = onlyCheck;\n onlyCheck = false;\n }\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n if (!callback) {\n throw new Error('No callback for dbConnect');\n }\n\n params = params || {};\n\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName());\n\n if (objects && states) {\n return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });\n }\n\n config.states = config.states || { type: 'jsonl' };\n config.objects = config.objects || { type: 'jsonl' };\n // Make sure the DB has enough time (5s). JsonL can take a bit longer if the process just crashed before\n // because the lockfile might not have been freed.\n config.states.connectTimeout = Math.max(config.states.connectTimeout || 0, 5_000);\n config.objects.connectTimeout = Math.max(config.objects.connectTimeout || 0, 5_000);\n\n Objects = await getObjectsConstructor(); // Objects DB Client object\n States = await getStatesConstructor(); // States DB Client object\n\n let isObjectConnected = false;\n let isStatesConnected = false;\n\n // Detect timeout or try to open file itself\n setTimeout(\n async () => {\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n if (!isObjectConnected) {\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n\n const hasObjectsServer = await objectsDbHasServer(config.objects.type);\n\n if (hasObjectsServer) {\n // Just open in memory DB itself\n Objects = (await import(`@iobroker/db-objects-${config.objects.type}`)).Server;\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n isObjectConnected = true;\n if (isStatesConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n }\n },\n });\n } else {\n console.log(\n `No connection to objects ${Array.isArray(config.objects.host) ? config.objects.host.join(', ') : config.objects.host}:${Array.isArray(config.objects.port) ? config.objects.port.join(', ') : config.objects.port}[${config.objects.type}]`,\n );\n if (onlyCheck) {\n callback?.({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n if (!isStatesConnected) {\n if (states) {\n // Destroy Client we tried to connect with\n await states.destroy();\n states = null;\n }\n\n const hasStatesServer = await statesDbHasServer(config.states.type);\n\n if (hasStatesServer) {\n // Just open in memory DB itself\n States = (await import(`@iobroker/db-states-${config.states.type}`)).Server;\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n isStatesConnected = true;\n if (isObjectConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n }\n },\n // react on change\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, msg) => states?.onChange(id, msg),\n });\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n states.onChange = null; // here the custom onChange handler could be installed\n } else {\n if (states) {\n // Destroy Client we tried to connect with\n await (states as StatesRedisClient).destroy();\n states = null;\n }\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n console.log(\n `No connection to states ${Array.isArray(config.states.host) ? config.states.host.join(', ') : config.states.host}:${Array.isArray(config.states.port) ? config.states.port.join(', ') : config.states.port}[${config.states.type}]`,\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n await wait((params.timeout || 10_000) + config.objects.connectTimeout);\n\n // Failsafe\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n console.log('No connection to databases possible ...');\n if (onlyCheck) {\n callback &&\n callback({\n // TODO types: allow null if onlyCheck is true\n objects: null as any,\n states: null as any,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n },\n params.timeout || config.objects.connectTimeout * 2,\n );\n\n // try to connect as client\n objects = new Objects({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n if (isObjectConnected) {\n return;\n }\n isObjectConnected = true;\n\n if (isStatesConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n });\n\n states = new States({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n if (isStatesConnected) {\n return;\n }\n isStatesConnected = true;\n\n if (isObjectConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, state) => states?.onChange(id, state),\n });\n}\n\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n */\nexport function dbConnectAsync(onlyCheck: boolean, params?: DbConnectParams): Promise<DbConnectAsyncReturn> {\n return new Promise(resolve => dbConnect(onlyCheck, params || {}, params => resolve(params)));\n}\n\n/**\n * Disconnect the database\n */\nexport async function resetDbConnect(): Promise<void> {\n if (objects) {\n await objects.destroy();\n objects = null;\n }\n if (states) {\n await states.destroy();\n states = null;\n }\n if (Objects) {\n Objects = null;\n }\n if (States) {\n States = null;\n }\n\n if (pluginHandler) {\n await pluginHandler.destroyAll();\n }\n}\n\n/**\n * Exits the process and saves objects before exit - never resolves\n *\n * @param exitCode code passed to process.exit\n */\nexport async function exitApplicationSave(exitCode?: number): Promise<never> {\n await resetDbConnect();\n await wait(1_000);\n process.exit(exitCode);\n}\n\n/**\n * Initialize plugins from io-pack and config json\n *\n * @param config - parsed content of iobroker.json\n */\nfunction initializePlugins(config: Record<string, any>): Promise<void> {\n const ioPackage = fs.readJsonSync(path.join(tools.getControllerDir(), 'io-package.json'));\n const packageJson = fs.readJsonSync(path.join(tools.getControllerDir(), 'package.json'));\n const hostname = tools.getHostName();\n\n const pluginSettings: PluginHandlerSettings = {\n namespace: `system.host.${hostname}`,\n logNamespace: `host.${hostname}`,\n scope: 'controller',\n log: {\n // cli should be clean, only log warn/error\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n level: 'warn',\n },\n iobrokerConfig: config as InternalAdapterJsonConfig,\n parentPackage: packageJson,\n controllerVersion: ioPackage.common.version,\n };\n\n pluginHandler = new PluginHandler(pluginSettings);\n pluginHandler.addPlugins(ioPackage.common.plugins, tools.getControllerDir()); // Plugins from io-package have priority over ...\n pluginHandler.addPlugins(config.plugins, tools.getControllerDir()); // ... plugins from iobroker.json\n // @ts-expect-error objects and state object version conflicts that are none\n pluginHandler.setDatabaseForPlugins(objects, states);\n\n return pluginHandler.initPlugins(ioPackage);\n}\n\n/**\n * Checks if system is offline\n *\n * @param onlyCheck - returns true then\n */\nasync function checkSystemOffline(onlyCheck: boolean): Promise<boolean> {\n if (!objects || !states) {\n // should never happen\n return true;\n }\n if (onlyCheck) {\n return true;\n }\n\n const offlineStatus = !(await tools.isHostRunning(objects, states));\n\n return offlineStatus;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_js_controller_common", "fs", "wait", "params", "path"]
4
+ "sourcesContent": ["import path from 'node:path';\nimport fs from 'fs-extra';\n\nimport {\n tools,\n EXIT_CODES,\n getObjectsConstructor,\n getStatesConstructor,\n objectsDbHasServer,\n statesDbHasServer,\n} from '@iobroker/js-controller-common';\nimport { setTimeout as wait } from 'node:timers/promises';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport { PluginHandler, type InternalAdapterJsonConfig, type PluginHandlerSettings } from '@iobroker/plugin-base';\nimport type { DbConnectAsyncReturn, DbConnectCallback } from '../_Types.js';\n\nlet pluginHandler: InstanceType<typeof PluginHandler>;\nlet Objects: typeof ObjectsInRedisClient | null; // constructor\nlet objects: ObjectsInRedisClient | null; // instance\nlet States: typeof StatesRedisClient | null; // constructor\nlet states: StatesRedisClient | null; // instance\n\ninterface DbConnectParams {\n /** DB connect timeout, default is 10_000 */\n timeout?: number;\n}\n\nexport function dbConnect(callback: DbConnectCallback): void;\nexport function dbConnect(params: Record<string, any>, callback: DbConnectCallback): void;\nexport function dbConnect(onlyCheck: boolean, params: Record<string, any>, callback: DbConnectCallback): void;\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n * @param callback called when connection is established or check is done\n */\nexport async function dbConnect(\n onlyCheck: boolean | Record<string, any> | DbConnectCallback,\n params?: DbConnectParams | DbConnectCallback,\n callback?: DbConnectCallback,\n): Promise<void> {\n if (typeof onlyCheck === 'object') {\n callback = params as DbConnectCallback;\n params = onlyCheck;\n onlyCheck = false;\n }\n if (typeof onlyCheck === 'function') {\n callback = onlyCheck;\n onlyCheck = false;\n }\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n if (!callback) {\n throw new Error('No callback for dbConnect');\n }\n\n params = params || {};\n\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName());\n\n if (objects && states) {\n return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });\n }\n\n config.states = config.states || { type: 'jsonl' };\n config.objects = config.objects || { type: 'jsonl' };\n // Make sure the DB has enough time (5s). JsonL can take a bit longer if the process just crashed before\n // because the lockfile might not have been freed.\n config.states.connectTimeout = Math.max(config.states.connectTimeout || 0, 5_000);\n config.objects.connectTimeout = Math.max(config.objects.connectTimeout || 0, 5_000);\n\n Objects = await getObjectsConstructor(); // Objects DB Client object\n States = await getStatesConstructor(); // States DB Client object\n\n let isObjectConnected = false;\n let isStatesConnected = false;\n\n // Detect timeout or try to open file itself\n setTimeout(\n async () => {\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n if (!isObjectConnected) {\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n\n const hasObjectsServer = await objectsDbHasServer(config.objects.type);\n\n if (hasObjectsServer) {\n // Just open in memory DB itself\n Objects = (await import(`@iobroker/db-objects-${config.objects.type}`)).Server;\n objects = new Objects!({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n isObjectConnected = true;\n if (isStatesConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n }\n },\n });\n } else {\n console.log(\n `No connection to objects ${Array.isArray(config.objects.host) ? config.objects.host.join(', ') : config.objects.host}:${Array.isArray(config.objects.port) ? config.objects.port.join(', ') : config.objects.port}[${config.objects.type}]`,\n );\n if (onlyCheck) {\n callback?.({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n if (!isStatesConnected) {\n if (states) {\n // Destroy Client we tried to connect with\n await states.destroy();\n states = null;\n }\n\n const hasStatesServer = await statesDbHasServer(config.states.type);\n\n if (hasStatesServer) {\n // Just open in memory DB itself\n States = (await import(`@iobroker/db-states-${config.states.type}`)).Server;\n\n states = new States!({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n isStatesConnected = true;\n if (isObjectConnected && typeof callback === 'function') {\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n return void callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n }\n },\n // react on change\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, msg) => states?.onChange(id, msg),\n });\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n states.onChange = null; // here the custom onChange handler could be installed\n } else {\n if (states) {\n // Destroy Client we tried to connect with\n await (states as StatesRedisClient).destroy();\n states = null;\n }\n if (objects) {\n // Destroy Client we tried to connect with\n await objects.destroy();\n objects = null;\n }\n console.log(\n `No connection to states ${Array.isArray(config.states.host) ? config.states.host.join(', ') : config.states.host}:${Array.isArray(config.states.port) ? config.states.port.join(', ') : config.states.port}[${config.states.type}]`,\n );\n if (onlyCheck) {\n callback &&\n callback({\n objects: objects!,\n states: states!,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n }\n }\n\n await wait((params.timeout || 10_000) + config.objects.connectTimeout);\n\n // Failsafe\n if (isObjectConnected && isStatesConnected) {\n return;\n }\n\n console.log('No connection to databases possible ...');\n if (onlyCheck) {\n callback?.({\n // TODO types: allow null if onlyCheck is true\n objects: null as any,\n states: null as any,\n isOffline: true,\n objectsDBType: config.objects.type,\n config,\n });\n callback = undefined;\n } else {\n return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);\n }\n },\n params.timeout || config.objects.connectTimeout * 2,\n );\n\n // try to connect as client\n objects = new Objects({\n connection: config.objects,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n if (isObjectConnected) {\n return;\n }\n isObjectConnected = true;\n\n if (isStatesConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n });\n\n states = new States({\n connection: config.states,\n logger: {\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n },\n connected: async () => {\n if (isStatesConnected) {\n return;\n }\n isStatesConnected = true;\n\n if (isObjectConnected && typeof callback === 'function') {\n const isOffline = await checkSystemOffline(onlyCheck);\n try {\n await initializePlugins(config);\n } catch {\n // ignore in silence\n }\n callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config });\n }\n },\n // @ts-expect-error todo according to types and first look states.onchange does not exist\n change: (id, state) => states?.onChange(id, state),\n });\n}\n\n/**\n * Connects to the DB or tests the connection.\n *\n * @param onlyCheck if only connection check should be performed\n * @param params options used by dbConnect\n */\nexport function dbConnectAsync(onlyCheck: boolean, params?: DbConnectParams): Promise<DbConnectAsyncReturn> {\n return new Promise(resolve => dbConnect(onlyCheck, params || {}, params => resolve(params)));\n}\n\n/**\n * Disconnect the database\n */\nexport async function resetDbConnect(): Promise<void> {\n if (objects) {\n await objects.destroy();\n objects = null;\n }\n if (states) {\n await states.destroy();\n states = null;\n }\n if (Objects) {\n Objects = null;\n }\n if (States) {\n States = null;\n }\n\n if (pluginHandler) {\n await pluginHandler.destroyAll();\n }\n}\n\n/**\n * Exits the process and saves objects before exit - never resolves\n *\n * @param exitCode code passed to process.exit\n */\nexport async function exitApplicationSave(exitCode?: number): Promise<never> {\n await resetDbConnect();\n await wait(1_000);\n process.exit(exitCode);\n}\n\n/**\n * Initialize plugins from io-pack and config json\n *\n * @param config - parsed content of iobroker.json\n */\nfunction initializePlugins(config: Record<string, any>): Promise<void> {\n const ioPackage = fs.readJsonSync(path.join(tools.getControllerDir(), 'io-package.json'));\n const packageJson = fs.readJsonSync(path.join(tools.getControllerDir(), 'package.json'));\n const hostname = tools.getHostName();\n\n const pluginSettings: PluginHandlerSettings = {\n namespace: `system.host.${hostname}`,\n logNamespace: `host.${hostname}`,\n scope: 'controller',\n log: {\n // cli should be clean, only log warn/error\n silly: (_msg: string) => {\n /** do not log on this level */\n },\n debug: (_msg: string) => {\n /** do not log on this level */\n },\n info: (_msg: string) => {\n /** do not log on this level */\n },\n warn: (msg: string) => console.log(msg),\n error: (msg: string) => console.log(msg),\n level: 'warn',\n },\n iobrokerConfig: config as InternalAdapterJsonConfig,\n parentPackage: packageJson,\n controllerVersion: ioPackage.common.version,\n };\n\n pluginHandler = new PluginHandler(pluginSettings);\n pluginHandler.addPlugins(ioPackage.common.plugins, tools.getControllerDir()); // Plugins from io-package have priority over ...\n pluginHandler.addPlugins(config.plugins, tools.getControllerDir()); // ... plugins from iobroker.json\n // @ts-expect-error objects and state object version conflicts that are none\n pluginHandler.setDatabaseForPlugins(objects, states);\n\n return pluginHandler.initPlugins(ioPackage);\n}\n\n/**\n * Checks if system is offline\n *\n * @param onlyCheck - returns true then\n */\nasync function checkSystemOffline(onlyCheck: boolean): Promise<boolean> {\n if (!objects || !states) {\n // should never happen\n return true;\n }\n if (onlyCheck) {\n return true;\n }\n\n const offlineStatus = !(await tools.isHostRunning(objects, states));\n\n return offlineStatus;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAAA,uBAAiB;AACjB,sBAAe;AAEf,kCAOO;AACP,sBAAmC;AAGnC,yBAA0F;AAG1F,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAiBJ,eAAsB,UAClB,WACA,QACA,UAA4B;AAE5B,MAAI,OAAO,cAAc,UAAU;AAC/B,eAAW;AACX,aAAS;AACT,gBAAY;EAChB;AACA,MAAI,OAAO,cAAc,YAAY;AACjC,eAAW;AACX,gBAAY;EAChB;AACA,MAAI,OAAO,WAAW,YAAY;AAC9B,eAAW;AACX,aAAS,CAAA;EACb;AAEA,MAAI,CAAC,UAAU;AACX,UAAM,IAAI,MAAM,2BAA2B;EAC/C;AAEA,WAAS,UAAU,CAAA;AAEnB,QAAM,SAAgC,gBAAAA,QAAG,aAAa,kCAAM,kBAAiB,CAAE;AAE/E,MAAI,WAAW,QAAQ;AACnB,WAAO,KAAK,SAAS,EAAE,SAAS,QAAQ,WAAW,OAAO,eAAe,OAAO,QAAQ,MAAM,OAAM,CAAE;EAC1G;AAEA,SAAO,SAAS,OAAO,UAAU,EAAE,MAAM,QAAO;AAChD,SAAO,UAAU,OAAO,WAAW,EAAE,MAAM,QAAO;AAGlD,SAAO,OAAO,iBAAiB,KAAK,IAAI,OAAO,OAAO,kBAAkB,GAAG,GAAK;AAChF,SAAO,QAAQ,iBAAiB,KAAK,IAAI,OAAO,QAAQ,kBAAkB,GAAG,GAAK;AAElF,YAAU,UAAM,mDAAqB;AACrC,WAAS,UAAM,kDAAoB;AAEnC,MAAI,oBAAoB;AACxB,MAAI,oBAAoB;AAGxB,aACI,YAAW;AACP,QAAI,qBAAqB,mBAAmB;AACxC;IACJ;AAEA,QAAI,CAAC,mBAAmB;AACpB,UAAI,SAAS;AAET,cAAM,QAAQ,QAAO;AACrB,kBAAU;MACd;AAEA,YAAM,mBAAmB,UAAM,gDAAmB,OAAO,QAAQ,IAAI;AAErE,UAAI,kBAAkB;AAElB,mBAAW,MAAM,OAAO,wBAAwB,OAAO,QAAQ,IAAI,KAAK;AACxE,kBAAU,IAAI,QAAS;UACnB,YAAY,OAAO;UACnB,QAAQ;YACJ,OAAO,wBAAC,SAAgB;YAExB,GAFO;YAGP,OAAO,wBAAC,SAAgB;YAExB,GAFO;YAGP,MAAM,wBAAC,SAAgB;YAEvB,GAFM;YAGN,MAAM,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;YACN,OAAO,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;;UAEX,WAAW,mCAAW;AAClB,gCAAoB;AACpB,gBAAI,qBAAqB,OAAO,aAAa,YAAY;AACrD,kBAAI;AACA,sBAAM,kBAAkB,MAAM;cAClC,QAAQ;cAER;AACA,qBAAO,KAAK,SAAS;gBACjB;gBACA;gBACA,WAAW;gBACX,eAAe,OAAO,QAAQ;gBAC9B;eACH;YACL;UACJ,GAhBW;SAiBd;MACL,OAAO;AACH,gBAAQ,IACJ,4BAA4B,MAAM,QAAQ,OAAO,QAAQ,IAAI,IAAI,OAAO,QAAQ,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,MAAM,QAAQ,OAAO,QAAQ,IAAI,IAAI,OAAO,QAAQ,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,OAAO,QAAQ,IAAI,GAAG;AAEhP,YAAI,WAAW;AACX,qBAAW;YACP;YACA;YACA,WAAW;YACX,eAAe,OAAO,QAAQ;YAC9B;WACH;AACD,qBAAW;QACf,OAAO;AACH,iBAAO,KAAK,oBAAoB,uCAAW,uBAAuB;QACtE;MACJ;IACJ;AAEA,QAAI,CAAC,mBAAmB;AACpB,UAAI,QAAQ;AAER,cAAM,OAAO,QAAO;AACpB,iBAAS;MACb;AAEA,YAAM,kBAAkB,UAAM,+CAAkB,OAAO,OAAO,IAAI;AAElE,UAAI,iBAAiB;AAEjB,kBAAU,MAAM,OAAO,uBAAuB,OAAO,OAAO,IAAI,KAAK;AAErE,iBAAS,IAAI,OAAQ;UACjB,YAAY,OAAO;UACnB,QAAQ;YACJ,OAAO,wBAAC,SAAgB;YAExB,GAFO;YAGP,OAAO,wBAAC,SAAgB;YAExB,GAFO;YAGP,MAAM,wBAAC,SAAgB;YAEvB,GAFM;YAGN,MAAM,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;YACN,OAAO,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;;UAEX,WAAW,mCAAW;AAClB,gCAAoB;AACpB,gBAAI,qBAAqB,OAAO,aAAa,YAAY;AACrD,kBAAI;AACA,sBAAM,kBAAkB,MAAM;cAClC,QAAQ;cAER;AACA,qBAAO,KAAK,SAAS;gBACjB;gBACA;gBACA,WAAW;gBACX,eAAe,OAAO,QAAQ;gBAC9B;eACH;YACL;UACJ,GAhBW;;;UAmBX,QAAQ,wBAAC,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,GAArC;SACX;AAED,eAAO,WAAW;MACtB,OAAO;AACH,YAAI,QAAQ;AAER,gBAAO,OAA6B,QAAO;AAC3C,mBAAS;QACb;AACA,YAAI,SAAS;AAET,gBAAM,QAAQ,QAAO;AACrB,oBAAU;QACd;AACA,gBAAQ,IACJ,2BAA2B,MAAM,QAAQ,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,OAAO,IAAI,IAAI,MAAM,QAAQ,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,IAAI,GAAG;AAExO,YAAI,WAAW;AACX,sBACI,SAAS;YACL;YACA;YACA,WAAW;YACX,eAAe,OAAO,QAAQ;YAC9B;WACH;AACL,qBAAW;QACf,OAAO;AACH,iBAAO,KAAK,oBAAoB,uCAAW,uBAAuB;QACtE;MACJ;IACJ;AAEA,cAAM,gBAAAC,aAAM,OAAO,WAAW,OAAU,OAAO,QAAQ,cAAc;AAGrE,QAAI,qBAAqB,mBAAmB;AACxC;IACJ;AAEA,YAAQ,IAAI,yCAAyC;AACrD,QAAI,WAAW;AACX,iBAAW;;QAEP,SAAS;QACT,QAAQ;QACR,WAAW;QACX,eAAe,OAAO,QAAQ;QAC9B;OACH;AACD,iBAAW;IACf,OAAO;AACH,aAAO,KAAK,oBAAoB,uCAAW,uBAAuB;IACtE;EACJ,GACA,OAAO,WAAW,OAAO,QAAQ,iBAAiB,CAAC;AAIvD,YAAU,IAAI,QAAQ;IAClB,YAAY,OAAO;IACnB,QAAQ;MACJ,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,MAAM,wBAAC,SAAgB;MAEvB,GAFM;MAGN,MAAM,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;MACN,OAAO,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;;IAEX,WAAW,mCAAW;AAClB,UAAI,mBAAmB;AACnB;MACJ;AACA,0BAAoB;AAEpB,UAAI,qBAAqB,OAAO,aAAa,YAAY;AACrD,cAAM,YAAY,MAAM,mBAAmB,SAAS;AACpD,YAAI;AACA,gBAAM,kBAAkB,MAAM;QAClC,QAAQ;QAER;AACA,iBAAS,EAAE,SAAmB,QAAiB,WAAW,eAAe,OAAO,QAAQ,MAAM,OAAM,CAAE;MAC1G;IACJ,GAfW;GAgBd;AAED,WAAS,IAAI,OAAO;IAChB,YAAY,OAAO;IACnB,QAAQ;MACJ,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,MAAM,wBAAC,SAAgB;MAEvB,GAFM;MAGN,MAAM,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;MACN,OAAO,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;;IAEX,WAAW,mCAAW;AAClB,UAAI,mBAAmB;AACnB;MACJ;AACA,0BAAoB;AAEpB,UAAI,qBAAqB,OAAO,aAAa,YAAY;AACrD,cAAM,YAAY,MAAM,mBAAmB,SAAS;AACpD,YAAI;AACA,gBAAM,kBAAkB,MAAM;QAClC,QAAQ;QAER;AACA,iBAAS,EAAE,SAAmB,QAAiB,WAAW,eAAe,OAAO,QAAQ,MAAM,OAAM,CAAE;MAC1G;IACJ,GAfW;;IAiBX,QAAQ,wBAAC,IAAI,UAAU,QAAQ,SAAS,IAAI,KAAK,GAAzC;GACX;AACL;AAjSsB;AAyShB,SAAU,eAAe,WAAoB,QAAwB;AACvE,SAAO,IAAI,QAAQ,aAAW,UAAU,WAAW,UAAU,CAAA,GAAI,CAAAC,YAAU,QAAQA,OAAM,CAAC,CAAC;AAC/F;AAFgB;AAOhB,eAAsB,iBAAc;AAChC,MAAI,SAAS;AACT,UAAM,QAAQ,QAAO;AACrB,cAAU;EACd;AACA,MAAI,QAAQ;AACR,UAAM,OAAO,QAAO;AACpB,aAAS;EACb;AACA,MAAI,SAAS;AACT,cAAU;EACd;AACA,MAAI,QAAQ;AACR,aAAS;EACb;AAEA,MAAI,eAAe;AACf,UAAM,cAAc,WAAU;EAClC;AACJ;AAnBsB;AA0BtB,eAAsB,oBAAoB,UAAiB;AACvD,QAAM,eAAc;AACpB,YAAM,gBAAAD,YAAK,GAAK;AAChB,UAAQ,KAAK,QAAQ;AACzB;AAJsB;AAWtB,SAAS,kBAAkB,QAA2B;AAClD,QAAM,YAAY,gBAAAD,QAAG,aAAa,iBAAAG,QAAK,KAAK,kCAAM,iBAAgB,GAAI,iBAAiB,CAAC;AACxF,QAAM,cAAc,gBAAAH,QAAG,aAAa,iBAAAG,QAAK,KAAK,kCAAM,iBAAgB,GAAI,cAAc,CAAC;AACvF,QAAM,WAAW,kCAAM,YAAW;AAElC,QAAM,iBAAwC;IAC1C,WAAW,eAAe,QAAQ;IAClC,cAAc,QAAQ,QAAQ;IAC9B,OAAO;IACP,KAAK;;MAED,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,OAAO,wBAAC,SAAgB;MAExB,GAFO;MAGP,MAAM,wBAAC,SAAgB;MAEvB,GAFM;MAGN,MAAM,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;MACN,OAAO,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;MACP,OAAO;;IAEX,gBAAgB;IAChB,eAAe;IACf,mBAAmB,UAAU,OAAO;;AAGxC,kBAAgB,IAAI,iCAAc,cAAc;AAChD,gBAAc,WAAW,UAAU,OAAO,SAAS,kCAAM,iBAAgB,CAAE;AAC3E,gBAAc,WAAW,OAAO,SAAS,kCAAM,iBAAgB,CAAE;AAEjE,gBAAc,sBAAsB,SAAS,MAAM;AAEnD,SAAO,cAAc,YAAY,SAAS;AAC9C;AApCS;AA2CT,eAAe,mBAAmB,WAAkB;AAChD,MAAI,CAAC,WAAW,CAAC,QAAQ;AAErB,WAAO;EACX;AACA,MAAI,WAAW;AACX,WAAO;EACX;AAEA,QAAM,gBAAgB,CAAE,MAAM,kCAAM,cAAc,SAAS,MAAM;AAEjE,SAAO;AACX;AAZe;",
6
+ "names": ["fs", "wait", "params", "path"]
7
7
  }
@@ -1,25 +1,25 @@
1
1
  /**
2
2
  * Format number in seconds to time text
3
3
  *
4
- * @param seconds
4
+ * @param seconds The number of seconds to format
5
5
  */
6
6
  export declare function formatSeconds(seconds: number): string;
7
7
  /**
8
8
  * Format bytes to MB or GB
9
9
  *
10
- * @param bytes
10
+ * @param bytes The number of bytes to format
11
11
  */
12
12
  export declare function formatRam(bytes: number): string;
13
13
  /**
14
14
  * Format speed
15
15
  *
16
- * @param mhz
16
+ * @param mhz The speed in MHz
17
17
  */
18
18
  export declare function formatSpeed(mhz: number): string;
19
19
  /**
20
20
  * Format bytes to human readable form
21
21
  *
22
- * @param bytes
22
+ * @param bytes The number of bytes to format
23
23
  */
24
24
  export declare function formatBytes(bytes: number): string;
25
25
  //# sourceMappingURL=formatters.d.ts.map
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -49,6 +50,7 @@ function formatSeconds(seconds) {
49
50
  text += `${hours}:${minutes}:${_seconds}`;
50
51
  return text;
51
52
  }
53
+ __name(formatSeconds, "formatSeconds");
52
54
  function formatRam(bytes) {
53
55
  const GB = Math.floor(bytes / (1024 * 1024 * 1024) * 10) / 10;
54
56
  bytes %= 1024 * 1024 * 1024;
@@ -61,9 +63,11 @@ function formatRam(bytes) {
61
63
  }
62
64
  return text;
63
65
  }
66
+ __name(formatRam, "formatRam");
64
67
  function formatSpeed(mhz) {
65
68
  return `${mhz} MHz`;
66
69
  }
70
+ __name(formatSpeed, "formatSpeed");
67
71
  function formatBytes(bytes) {
68
72
  if (Math.abs(bytes) < 1024) {
69
73
  return `${bytes} B`;
@@ -76,6 +80,7 @@ function formatBytes(bytes) {
76
80
  } while (Math.abs(bytes) >= 1024 && u < units.length - 1);
77
81
  return `${bytes.toFixed(1)} ${units[u]}`;
78
82
  }
83
+ __name(formatBytes, "formatBytes");
79
84
  // Annotate the CommonJS export names for ESM import in node:
80
85
  0 && (module.exports = {
81
86
  formatBytes,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/setup/formatters.ts"],
4
- "sourcesContent": ["/**\n * Format number in seconds to time text\n *\n * @param seconds\n */\nexport function formatSeconds(seconds: number): string {\n let _seconds: number | string = seconds;\n\n const days = Math.floor(_seconds / (3_600 * 24));\n _seconds %= 3_600 * 24;\n let hours: number | string = Math.floor(_seconds / 3_600);\n if (hours < 10) {\n hours = `0${hours}`;\n }\n _seconds %= 3_600;\n let minutes: number | string = Math.floor(_seconds / 60);\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n _seconds %= 60;\n _seconds = Math.floor(_seconds);\n if (_seconds < 10) {\n _seconds = `0${_seconds}`;\n }\n let text = '';\n if (days) {\n text += `${days}d. `;\n }\n text += `${hours}:${minutes}:${_seconds}`;\n\n return text;\n}\n\n/**\n * Format bytes to MB or GB\n *\n * @param bytes\n */\nexport function formatRam(bytes: number): string {\n const GB = Math.floor((bytes / (1024 * 1024 * 1024)) * 10) / 10;\n bytes %= 1024 * 1024 * 1024;\n const MB = Math.floor((bytes / (1024 * 1024)) * 10) / 10;\n let text = '';\n if (GB > 1) {\n text += `${GB} GB`;\n } else {\n text += `${MB} MB`;\n }\n\n return text;\n}\n\n/**\n * Format speed\n *\n * @param mhz\n */\nexport function formatSpeed(mhz: number): string {\n return `${mhz} MHz`;\n}\n\n/**\n * Format bytes to human readable form\n *\n * @param bytes\n */\nexport function formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n const units = ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n return `${bytes.toFixed(1)} ${units[u]}`;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAKM,SAAU,cAAc,SAAe;AACzC,MAAI,WAA4B;AAEhC,QAAM,OAAO,KAAK,MAAM,YAAY,OAAQ,GAAG;AAC/C,cAAY,OAAQ;AACpB,MAAI,QAAyB,KAAK,MAAM,WAAW,IAAK;AACxD,MAAI,QAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK;EACrB;AACA,cAAY;AACZ,MAAI,UAA2B,KAAK,MAAM,WAAW,EAAE;AACvD,MAAI,UAAU,IAAI;AACd,cAAU,IAAI,OAAO;EACzB;AACA,cAAY;AACZ,aAAW,KAAK,MAAM,QAAQ;AAC9B,MAAI,WAAW,IAAI;AACf,eAAW,IAAI,QAAQ;EAC3B;AACA,MAAI,OAAO;AACX,MAAI,MAAM;AACN,YAAQ,GAAG,IAAI;EACnB;AACA,UAAQ,GAAG,KAAK,IAAI,OAAO,IAAI,QAAQ;AAEvC,SAAO;AACX;AAOM,SAAU,UAAU,OAAa;AACnC,QAAM,KAAK,KAAK,MAAO,SAAS,OAAO,OAAO,QAAS,EAAE,IAAI;AAC7D,WAAS,OAAO,OAAO;AACvB,QAAM,KAAK,KAAK,MAAO,SAAS,OAAO,QAAS,EAAE,IAAI;AACtD,MAAI,OAAO;AACX,MAAI,KAAK,GAAG;AACR,YAAQ,GAAG,EAAE;EACjB,OAAO;AACH,YAAQ,GAAG,EAAE;EACjB;AAEA,SAAO;AACX;AAOM,SAAU,YAAY,KAAW;AACnC,SAAO,GAAG,GAAG;AACjB;AAOM,SAAU,YAAY,OAAa;AACrC,MAAI,KAAK,IAAI,KAAK,IAAI,MAAM;AACxB,WAAO,GAAG,KAAK;EACnB;AACA,QAAM,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AACrE,MAAI,IAAI;AACR,KAAG;AACC,aAAS;AACT,MAAE;EACN,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,MAAM,SAAS;AACvD,SAAO,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAC1C;",
4
+ "sourcesContent": ["/**\n * Format number in seconds to time text\n *\n * @param seconds The number of seconds to format\n */\nexport function formatSeconds(seconds: number): string {\n let _seconds: number | string = seconds;\n\n const days = Math.floor(_seconds / (3_600 * 24));\n _seconds %= 3_600 * 24;\n let hours: number | string = Math.floor(_seconds / 3_600);\n if (hours < 10) {\n hours = `0${hours}`;\n }\n _seconds %= 3_600;\n let minutes: number | string = Math.floor(_seconds / 60);\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n _seconds %= 60;\n _seconds = Math.floor(_seconds);\n if (_seconds < 10) {\n _seconds = `0${_seconds}`;\n }\n let text = '';\n if (days) {\n text += `${days}d. `;\n }\n text += `${hours}:${minutes}:${_seconds}`;\n\n return text;\n}\n\n/**\n * Format bytes to MB or GB\n *\n * @param bytes The number of bytes to format\n */\nexport function formatRam(bytes: number): string {\n const GB = Math.floor((bytes / (1024 * 1024 * 1024)) * 10) / 10;\n bytes %= 1024 * 1024 * 1024;\n const MB = Math.floor((bytes / (1024 * 1024)) * 10) / 10;\n let text = '';\n if (GB > 1) {\n text += `${GB} GB`;\n } else {\n text += `${MB} MB`;\n }\n\n return text;\n}\n\n/**\n * Format speed\n *\n * @param mhz The speed in MHz\n */\nexport function formatSpeed(mhz: number): string {\n return `${mhz} MHz`;\n}\n\n/**\n * Format bytes to human readable form\n *\n * @param bytes The number of bytes to format\n */\nexport function formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n const units = ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n return `${bytes.toFixed(1)} ${units[u]}`;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAKM,SAAU,cAAc,SAAe;AACzC,MAAI,WAA4B;AAEhC,QAAM,OAAO,KAAK,MAAM,YAAY,OAAQ,GAAG;AAC/C,cAAY,OAAQ;AACpB,MAAI,QAAyB,KAAK,MAAM,WAAW,IAAK;AACxD,MAAI,QAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK;EACrB;AACA,cAAY;AACZ,MAAI,UAA2B,KAAK,MAAM,WAAW,EAAE;AACvD,MAAI,UAAU,IAAI;AACd,cAAU,IAAI,OAAO;EACzB;AACA,cAAY;AACZ,aAAW,KAAK,MAAM,QAAQ;AAC9B,MAAI,WAAW,IAAI;AACf,eAAW,IAAI,QAAQ;EAC3B;AACA,MAAI,OAAO;AACX,MAAI,MAAM;AACN,YAAQ,GAAG,IAAI;EACnB;AACA,UAAQ,GAAG,KAAK,IAAI,OAAO,IAAI,QAAQ;AAEvC,SAAO;AACX;AA1BgB;AAiCV,SAAU,UAAU,OAAa;AACnC,QAAM,KAAK,KAAK,MAAO,SAAS,OAAO,OAAO,QAAS,EAAE,IAAI;AAC7D,WAAS,OAAO,OAAO;AACvB,QAAM,KAAK,KAAK,MAAO,SAAS,OAAO,QAAS,EAAE,IAAI;AACtD,MAAI,OAAO;AACX,MAAI,KAAK,GAAG;AACR,YAAQ,GAAG,EAAE;EACjB,OAAO;AACH,YAAQ,GAAG,EAAE;EACjB;AAEA,SAAO;AACX;AAZgB;AAmBV,SAAU,YAAY,KAAW;AACnC,SAAO,GAAG,GAAG;AACjB;AAFgB;AASV,SAAU,YAAY,OAAa;AACrC,MAAI,KAAK,IAAI,KAAK,IAAI,MAAM;AACxB,WAAO,GAAG,KAAK;EACnB;AACA,QAAM,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AACrE,MAAI,IAAI;AACR,KAAG;AACC,aAAS;AACT,MAAE;EACN,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,MAAM,SAAS;AACvD,SAAO,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAC1C;AAXgB;",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
9
  var __export = (target, all) => {
9
10
  for (var name in all)
10
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -37,6 +38,9 @@ var import_js_controller_common = require("@iobroker/js-controller-common");
37
38
  const PORT = 50005;
38
39
  const MULTICAST_ADDR = "239.255.255.250";
39
40
  class MHClient {
41
+ static {
42
+ __name(this, "MHClient");
43
+ }
40
44
  /** Incremental message id used for request/response correlation */
41
45
  id = 1;
42
46
  timer = null;
@@ -233,12 +237,12 @@ class MHClient {
233
237
  }
234
238
  console.warn(`Multihost discovery client: Unexpected message: ${JSON.stringify(msg)}`);
235
239
  return false;
236
- }, function onFinished(err) {
240
+ }, /* @__PURE__ */ __name(function onFinished(err) {
237
241
  if (callCb) {
238
242
  callback(err);
239
243
  callCb = false;
240
244
  }
241
- });
245
+ }, "onFinished"));
242
246
  }
243
247
  }
244
248
  // Annotate the CommonJS export names for ESM import in node:
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/setup/multihostClient.ts"],
4
4
  "sourcesContent": ["/**\n * Multihost discovery client used by the CLI setup utilities.\n *\n * This module implements a lightweight UDP-based discovery protocol (multicast/broadcast)\n * to find other ioBroker hosts on the local network. It supports an optional\n * password-based handshake and returns the objects/states database configuration\n * necessary for remote setup and connection.\n */\n\nimport dgram from 'node:dgram';\nimport * as crypto from 'node:crypto';\n\nimport { tools } from '@iobroker/js-controller-common';\n\nconst PORT = 50005;\nconst MULTICAST_ADDR = '239.255.255.250';\n\n/**\n * Message structure received from a multihost server during discovery or connect.\n */\nexport interface ReceivedMessage {\n /** Command name, e.g. 'browse' */\n cmd: 'browse' | 'auth';\n /** Unique message identifier */\n id: number;\n /** Result string returned by server: 'ok', 'not authenticated', etc. */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n result: 'ok' | 'not authenticated' | string;\n /** Optional IP address of responder */\n ip?: string;\n /** Optional hostname of responder */\n hostname?: string;\n /** Informational text */\n info?: string;\n /** Whether responder is a slave */\n slave?: boolean;\n /** Authentication token (when required) */\n auth?: string;\n /** Salt used for password hashing during authentication */\n salt?: string;\n /** The states config of ioBroker.json */\n states?: ioBroker.StatesDatabaseOptions;\n /** The objects config of ioBroker.json */\n objects?: ioBroker.ObjectsDatabaseOptions;\n}\n\nexport type BrowseResultEntry = Partial<ReceivedMessage>;\n\n/**\n * MHClient implements browsing and connecting to multihost-enabled ioBroker hosts.\n *\n * Usage:\n * - Create an instance of MHClient\n * - Call `browse(timeout, isDebug)` to discover hosts\n * - Call `connect(ip, password, callback)` to retrieve configs from a host\n */\nexport class MHClient {\n /** Incremental message id used for request/response correlation */\n private id: number = 1;\n private timer: NodeJS.Timeout | null = null;\n private server: dgram.Socket | undefined;\n\n /**\n * Stops the MH server and clears any pending timers.\n *\n * Cleans up the UDP socket and associated timeout to ensure no resources\n * are leaked after browsing or connect operations finish.\n */\n private stopServer(): void {\n if (this.server) {\n try {\n this.server.close();\n } catch {\n // OK\n }\n this.server = undefined;\n }\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n /**\n * Calculate SHA-256 hash from secret and salt.\n *\n * @param secret - Multihost secret/password\n * @param salt - Salt provided by server\n * @param callback - Called with hex-encoded SHA-256 result\n */\n private sha(secret: string, salt: string, callback: (sha: string) => void): void {\n // calculate sha256\n const hash = crypto.createHash('sha256');\n\n hash.on('readable', function () {\n const data = hash.read();\n if (data) {\n callback(data.toString('hex'));\n }\n });\n\n hash.write(secret + salt);\n hash.end();\n }\n\n /**\n * Starts a UDP server socket used for discovery and authentication.\n *\n * @param isBroadcast - If true, enables broadcast mode on the socket.\n * @param timeout - Time in ms after which the server will be automatically closed.\n * @param onReady - Called once the socket is bound and ready to send.\n * @param onMessage - Handler invoked for each parsed message. Return true to stop the server.\n * @param onFinished - Called when the server stops or an error occurs.\n */\n private startServer(\n isBroadcast: boolean,\n timeout: number,\n onReady: () => void,\n onMessage: (msg: ReceivedMessage, rinfo: dgram.RemoteInfo) => boolean,\n onFinished: (err?: Error) => void,\n ): void {\n if (this.server) {\n onFinished(new Error('Some operation still active'));\n return;\n }\n this.server = dgram.createSocket('udp4');\n timeout = timeout || 2_000;\n\n this.timer = setTimeout(() => {\n if (this.server) {\n this.stopServer();\n onFinished();\n }\n }, timeout);\n\n this.server.on('error', err => {\n if (this.server) {\n this.stopServer();\n onFinished(err);\n }\n });\n\n this.server.on('message', (msg, rinfo) => {\n try {\n const message: ReceivedMessage = JSON.parse(msg.toString());\n if (this.server) {\n if (onMessage(message, rinfo)) {\n this.stopServer();\n }\n }\n } catch {\n console.error(`Multihost discovery client: Invalid answer: ${msg.toString()}`);\n }\n });\n\n this.server.on('listening', () => {\n if (isBroadcast) {\n this.server!.setBroadcast(true);\n }\n onReady();\n });\n\n this.server.bind();\n }\n\n /**\n * Browse for multihost servers.\n *\n * Sends a multicast/broadcast \"browse\" request and collects responses until timeout.\n *\n * @param timeout - Milliseconds to wait for responses.\n * @param isDebug - If true, include local addresses and log received messages.\n * @returns Promise resolving to an array of discovered hosts (partial ReceivedMessage entries).\n */\n browse(timeout: number, isDebug: boolean): Promise<BrowseResultEntry[]> {\n const result: BrowseResultEntry[] = [];\n const ownIps = tools.findIPs();\n\n return new Promise((resolve, reject) => {\n this.startServer(\n true,\n timeout,\n () => {\n const text = JSON.stringify({\n cmd: 'browse',\n id: ++this.id,\n });\n this.server!.send(text, 0, text.length, PORT, MULTICAST_ADDR);\n },\n (msg, rinfo) => {\n // ignore own answers\n if (isDebug || (!tools.isLocalAddress(rinfo.address) && !ownIps.includes(rinfo.address))) {\n if (msg.result === 'not authenticated') {\n result.push({\n ip: rinfo.address,\n hostname: rinfo.address,\n info: 'authentication required',\n auth: msg.auth,\n });\n } else if (msg.result === 'ok') {\n result.push(msg);\n } else {\n console.log(`Multihost discovery client: Unknown answer: ${JSON.stringify(msg)}`);\n }\n }\n if (isDebug) {\n console.log(JSON.stringify(msg));\n }\n\n return false;\n },\n err => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(result);\n },\n );\n });\n }\n\n /**\n * Connect to a single multihost server and retrieve its objects/states configuration.\n *\n * Performs an optional password-based authentication handshake if the server requires it.\n *\n * @param ip - IP address of the server to connect to.\n * @param password - Password to use for authentication (if required). Pass empty string to skip.\n * @param callback - Callback called with (err, objectsConfig, statesConfig, address).\n */\n connect(\n ip: string,\n password: string,\n callback: (\n err: Error | undefined,\n objectsConfig?: ioBroker.ObjectsDatabaseOptions,\n statesConfig?: ioBroker.StatesDatabaseOptions,\n address?: string,\n ) => void,\n ): void {\n let callCb = true;\n\n this.startServer(\n false,\n 2_000,\n () => {\n const text = JSON.stringify({\n cmd: 'browse',\n id: ++this.id,\n });\n this.server!.send(text, 0, text.length, PORT, ip);\n },\n (msg, rinfo) => {\n // we expect only one answer\n if (msg.cmd === 'browse' && msg.id === this.id) {\n if (msg.result === 'ok') {\n if (callCb) {\n if (!msg.objects) {\n callback(new Error(`Invalid configuration received: ${JSON.stringify(msg)}`));\n callCb = false;\n } else if (!msg.states) {\n callback(new Error(`Invalid configuration received: ${JSON.stringify(msg)}`));\n callCb = false;\n } else if (typeof callback === 'function') {\n callback(undefined, msg.objects, msg.states, rinfo.address);\n }\n }\n } else if (msg.result === 'not authenticated') {\n if (!password) {\n if (callCb) {\n callback(new Error(`not authenticated: ${JSON.stringify(msg)}`));\n callCb = false;\n }\n } else {\n this.sha(password, msg.salt!, shaText => {\n // send password\n const text = JSON.stringify({\n cmd: 'browse',\n id: ++this.id,\n password: shaText,\n });\n this.server!.send(text, 0, text.length, PORT, ip);\n });\n return false;\n }\n } else if (msg.result === 'invalid password') {\n if (callCb) {\n callback(new Error('invalid password'));\n callCb = false;\n }\n } else {\n console.log(msg.result);\n }\n return true;\n }\n console.warn(`Multihost discovery client: Unexpected message: ${JSON.stringify(msg)}`);\n\n return false;\n },\n function onFinished(err) {\n if (callCb) {\n callback(err);\n callCb = false;\n }\n },\n );\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["dgram"]
7
7
  }
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Check whether the given plugin reports data to an external service (e.g. Sentry)
3
+ *
4
+ * @param name The plugin name to check
5
+ */
1
6
  export declare function isReportingPlugin(name: string): boolean;
2
7
  export declare const PLUGIN_INFOS: {
3
8
  readonly sentry: {
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -25,6 +26,7 @@ module.exports = __toCommonJS(pluginInfos_exports);
25
26
  function isReportingPlugin(name) {
26
27
  return name === "sentry";
27
28
  }
29
+ __name(isReportingPlugin, "isReportingPlugin");
28
30
  const PLUGIN_INFOS = {
29
31
  sentry: {
30
32
  headline: {