@iobroker/js-controller-cli 7.2.3-alpha.9-20260711-3ea5f3c89 → 7.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +3 -3
- package/build/cjs/lib/_Types.d.ts +1 -8
- package/build/cjs/lib/cli/cliCert.d.ts +4 -7
- package/build/cjs/lib/cli/cliCert.js +6 -10
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +14 -45
- package/build/cjs/lib/cli/cliCommand.js +1 -8
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +2 -5
- package/build/cjs/lib/cli/cliCompact.js +2 -9
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +2 -5
- package/build/cjs/lib/cli/cliDebug.js +1 -8
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +10 -13
- package/build/cjs/lib/cli/cliHost.js +5 -13
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +3 -9
- package/build/cjs/lib/cli/cliLogs.js +1 -12
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +1 -2
- package/build/cjs/lib/cli/cliMessage.js +0 -5
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +18 -21
- package/build/cjs/lib/cli/cliObjects.js +33 -51
- package/build/cjs/lib/cli/cliObjects.js.map +2 -2
- package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
- package/build/cjs/lib/cli/cliPlugin.js +0 -6
- package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
- package/build/cjs/lib/cli/cliProcess.d.ts +4 -8
- package/build/cjs/lib/cli/cliProcess.js +16 -27
- package/build/cjs/lib/cli/cliProcess.js.map +3 -3
- package/build/cjs/lib/cli/cliStates.d.ts +4 -7
- package/build/cjs/lib/cli/cliStates.js +6 -14
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/cli/cliTools.js +0 -11
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.js +46 -47
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/setup/customError.d.ts +0 -4
- package/build/cjs/lib/setup/customError.js +0 -7
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +64 -69
- package/build/cjs/lib/setup/dbConnection.js.map +3 -3
- package/build/cjs/lib/setup/formatters.d.ts +4 -4
- package/build/cjs/lib/setup/formatters.js +0 -5
- package/build/cjs/lib/setup/formatters.js.map +2 -2
- package/build/cjs/lib/setup/multihostClient.js +2 -6
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +0 -5
- package/build/cjs/lib/setup/pluginInfos.js +0 -2
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +0 -34
- package/build/cjs/lib/setup/setupBackup.js +12 -46
- package/build/cjs/lib/setup/setupBackup.js.map +3 -3
- package/build/cjs/lib/setup/setupInstall.d.ts +15 -38
- package/build/cjs/lib/setup/setupInstall.js +26 -44
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +0 -8
- package/build/cjs/lib/setup/setupLicense.js +0 -7
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +1 -55
- package/build/cjs/lib/setup/setupList.js +24 -78
- package/build/cjs/lib/setup/setupList.js.map +3 -3
- package/build/cjs/lib/setup/setupMultihost.js +9 -12
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/cjs/lib/setup/setupPacketManager.js +6 -16
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +0 -6
- package/build/cjs/lib/setup/setupRepo.js +11 -28
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +0 -27
- package/build/cjs/lib/setup/setupSetup.js +33 -52
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/cjs/lib/setup/setupUpgrade.js +10 -19
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +1 -72
- package/build/cjs/lib/setup/setupUpload.js +6 -74
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +14 -23
- package/build/cjs/lib/setup/setupUsers.js +15 -58
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +1 -9
- package/build/cjs/lib/setup/setupVendor.js +6 -13
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/cjs/lib/setup/setupVisDebug.js +15 -21
- package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +9 -13
- package/build/cjs/lib/setup/utils.js.map +3 -3
- package/build/cjs/lib/setup.js +330 -269
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/lib/_Types.d.ts +1 -8
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +4 -7
- package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.js +6 -6
- package/build/esm/lib/cli/cliCert.js.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +14 -45
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +1 -4
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +2 -5
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +2 -5
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +2 -5
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +1 -4
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +10 -13
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +5 -8
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +3 -9
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +1 -8
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +1 -2
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +0 -1
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +18 -21
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +38 -44
- package/build/esm/lib/cli/cliObjects.js.map +1 -1
- package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
- package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
- package/build/esm/lib/cli/cliPlugin.js +1 -1
- package/build/esm/lib/cli/cliPlugin.js.map +1 -1
- package/build/esm/lib/cli/cliProcess.d.ts +4 -8
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +4 -7
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +4 -7
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +2 -6
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/setup/customError.d.ts +0 -4
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +0 -3
- package/build/esm/lib/setup/customError.js.map +1 -1
- package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
- package/build/esm/lib/setup/dbConnection.js +13 -10
- package/build/esm/lib/setup/dbConnection.js.map +1 -1
- package/build/esm/lib/setup/formatters.d.ts +4 -4
- package/build/esm/lib/setup/formatters.js +4 -4
- package/build/esm/lib/setup/pluginInfos.d.ts +0 -5
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +0 -5
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +0 -34
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +12 -46
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +15 -38
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +24 -40
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +0 -8
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +0 -6
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +1 -55
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +8 -61
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +6 -5
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +0 -9
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +0 -6
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +14 -30
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +0 -27
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +21 -36
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +6 -14
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +1 -72
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +5 -72
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +14 -23
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +14 -56
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +1 -9
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +1 -7
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +14 -21
- package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
- package/build/esm/lib/setup/utils.d.ts +1 -1
- package/build/esm/lib/setup/utils.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.js +4 -2
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/esm/lib/setup.d.ts.map +1 -1
- package/build/esm/lib/setup.js +211 -162
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -14
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { EXIT_CODES } from '@iobroker/js-controller-common';
|
|
2
|
-
/** Options for creating an {@link IoBrokerError} */
|
|
3
2
|
export interface IoBrokerErrorOptions {
|
|
4
3
|
/** The error message */
|
|
5
4
|
message: string;
|
|
@@ -11,9 +10,6 @@ export interface IoBrokerErrorOptions {
|
|
|
11
10
|
*/
|
|
12
11
|
export declare class IoBrokerError extends Error {
|
|
13
12
|
readonly code: EXIT_CODES;
|
|
14
|
-
/**
|
|
15
|
-
* @param options The error message and ioBroker exit code
|
|
16
|
-
*/
|
|
17
13
|
constructor(options: IoBrokerErrorOptions);
|
|
18
14
|
}
|
|
19
15
|
//# sourceMappingURL=customError.d.ts.map
|
|
@@ -3,7 +3,6 @@ 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 });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -23,13 +22,7 @@ __export(customError_exports, {
|
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(customError_exports);
|
|
25
24
|
class IoBrokerError extends Error {
|
|
26
|
-
static {
|
|
27
|
-
__name(this, "IoBrokerError");
|
|
28
|
-
}
|
|
29
25
|
code;
|
|
30
|
-
/**
|
|
31
|
-
* @param options The error message and ioBroker exit code
|
|
32
|
-
*/
|
|
33
26
|
constructor(options) {
|
|
34
27
|
super(options.message);
|
|
35
28
|
this.name = this.constructor.name;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/customError.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EXIT_CODES } from '@iobroker/js-controller-common';\n\
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { EXIT_CODES } from '@iobroker/js-controller-common';\n\nexport interface IoBrokerErrorOptions {\n /** The error message */\n message: string;\n /** An ioBroker error code */\n code: EXIT_CODES;\n}\n\n/**\n * A custom ioBroker CLI error to propagate the exit code down\n */\nexport class IoBrokerError extends Error {\n readonly code: EXIT_CODES;\n constructor(options: IoBrokerErrorOptions) {\n super(options.message);\n\n this.name = this.constructor.name;\n\n Error.captureStackTrace(this, this.constructor);\n\n // you may also assign additional properties to your error\n this.code = options.code;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AASA;;;;;AAGM,MAAO,sBAAsB,MAAK;EAC3B;EACT,YAAY,SAA6B;AACrC,UAAM,QAAQ,OAAO;AAErB,SAAK,OAAO,KAAK,YAAY;AAE7B,UAAM,kBAAkB,MAAM,KAAK,WAAW;AAG9C,SAAK,OAAO,QAAQ;EACxB;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,7 +5,6 @@ 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 });
|
|
9
8
|
var __export = (target, all) => {
|
|
10
9
|
for (var name in all)
|
|
11
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -35,10 +34,12 @@ __export(dbConnection_exports, {
|
|
|
35
34
|
resetDbConnect: () => resetDbConnect
|
|
36
35
|
});
|
|
37
36
|
module.exports = __toCommonJS(dbConnection_exports);
|
|
38
|
-
var import_node_path = __toESM(require("node:path"), 1);
|
|
39
37
|
var import_fs_extra = __toESM(require("fs-extra"), 1);
|
|
40
38
|
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);
|
|
42
43
|
var import_plugin_base = require("@iobroker/plugin-base");
|
|
43
44
|
let pluginHandler;
|
|
44
45
|
let Objects;
|
|
@@ -63,7 +64,7 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
63
64
|
throw new Error("No callback for dbConnect");
|
|
64
65
|
}
|
|
65
66
|
params = params || {};
|
|
66
|
-
const config = import_fs_extra.default.readJSONSync(
|
|
67
|
+
const config = import_fs_extra.default.readJSONSync(import_js_controller_common3.tools.getConfigFileName());
|
|
67
68
|
if (objects && states) {
|
|
68
69
|
return void callback({ objects, states, isOffline: false, objectsDBType: config.objects.type, config });
|
|
69
70
|
}
|
|
@@ -90,16 +91,16 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
90
91
|
objects = new Objects({
|
|
91
92
|
connection: config.objects,
|
|
92
93
|
logger: {
|
|
93
|
-
silly:
|
|
94
|
-
},
|
|
95
|
-
debug:
|
|
96
|
-
},
|
|
97
|
-
info:
|
|
98
|
-
},
|
|
99
|
-
warn:
|
|
100
|
-
error:
|
|
94
|
+
silly: (_msg) => {
|
|
95
|
+
},
|
|
96
|
+
debug: (_msg) => {
|
|
97
|
+
},
|
|
98
|
+
info: (_msg) => {
|
|
99
|
+
},
|
|
100
|
+
warn: (msg) => console.log(msg),
|
|
101
|
+
error: (msg) => console.log(msg)
|
|
101
102
|
},
|
|
102
|
-
connected:
|
|
103
|
+
connected: async () => {
|
|
103
104
|
isObjectConnected = true;
|
|
104
105
|
if (isStatesConnected && typeof callback === "function") {
|
|
105
106
|
try {
|
|
@@ -114,7 +115,7 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
114
115
|
config
|
|
115
116
|
});
|
|
116
117
|
}
|
|
117
|
-
}
|
|
118
|
+
}
|
|
118
119
|
});
|
|
119
120
|
} else {
|
|
120
121
|
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}]`);
|
|
@@ -128,7 +129,7 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
128
129
|
});
|
|
129
130
|
callback = void 0;
|
|
130
131
|
} else {
|
|
131
|
-
return void exitApplicationSave(
|
|
132
|
+
return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
}
|
|
@@ -143,16 +144,16 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
143
144
|
states = new States({
|
|
144
145
|
connection: config.states,
|
|
145
146
|
logger: {
|
|
146
|
-
silly:
|
|
147
|
-
},
|
|
148
|
-
debug:
|
|
149
|
-
},
|
|
150
|
-
info:
|
|
151
|
-
},
|
|
152
|
-
warn:
|
|
153
|
-
error:
|
|
147
|
+
silly: (_msg) => {
|
|
148
|
+
},
|
|
149
|
+
debug: (_msg) => {
|
|
150
|
+
},
|
|
151
|
+
info: (_msg) => {
|
|
152
|
+
},
|
|
153
|
+
warn: (msg) => console.log(msg),
|
|
154
|
+
error: (msg) => console.log(msg)
|
|
154
155
|
},
|
|
155
|
-
connected:
|
|
156
|
+
connected: async () => {
|
|
156
157
|
isStatesConnected = true;
|
|
157
158
|
if (isObjectConnected && typeof callback === "function") {
|
|
158
159
|
try {
|
|
@@ -167,10 +168,10 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
167
168
|
config
|
|
168
169
|
});
|
|
169
170
|
}
|
|
170
|
-
},
|
|
171
|
+
},
|
|
171
172
|
// react on change
|
|
172
173
|
// @ts-expect-error todo according to types and first look states.onchange does not exist
|
|
173
|
-
change:
|
|
174
|
+
change: (id, msg) => states?.onChange(id, msg)
|
|
174
175
|
});
|
|
175
176
|
states.onChange = null;
|
|
176
177
|
} else {
|
|
@@ -193,7 +194,7 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
193
194
|
});
|
|
194
195
|
callback = void 0;
|
|
195
196
|
} else {
|
|
196
|
-
return void exitApplicationSave(
|
|
197
|
+
return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
200
|
}
|
|
@@ -203,7 +204,7 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
203
204
|
}
|
|
204
205
|
console.log("No connection to databases possible ...");
|
|
205
206
|
if (onlyCheck) {
|
|
206
|
-
callback
|
|
207
|
+
callback && callback({
|
|
207
208
|
// TODO types: allow null if onlyCheck is true
|
|
208
209
|
objects: null,
|
|
209
210
|
states: null,
|
|
@@ -213,22 +214,22 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
213
214
|
});
|
|
214
215
|
callback = void 0;
|
|
215
216
|
} else {
|
|
216
|
-
return void exitApplicationSave(
|
|
217
|
+
return void exitApplicationSave(import_js_controller_common2.EXIT_CODES.NO_CONNECTION_TO_OBJ_DB);
|
|
217
218
|
}
|
|
218
219
|
}, params.timeout || config.objects.connectTimeout * 2);
|
|
219
220
|
objects = new Objects({
|
|
220
221
|
connection: config.objects,
|
|
221
222
|
logger: {
|
|
222
|
-
silly:
|
|
223
|
-
},
|
|
224
|
-
debug:
|
|
225
|
-
},
|
|
226
|
-
info:
|
|
227
|
-
},
|
|
228
|
-
warn:
|
|
229
|
-
error:
|
|
223
|
+
silly: (_msg) => {
|
|
224
|
+
},
|
|
225
|
+
debug: (_msg) => {
|
|
226
|
+
},
|
|
227
|
+
info: (_msg) => {
|
|
228
|
+
},
|
|
229
|
+
warn: (msg) => console.log(msg),
|
|
230
|
+
error: (msg) => console.log(msg)
|
|
230
231
|
},
|
|
231
|
-
connected:
|
|
232
|
+
connected: async () => {
|
|
232
233
|
if (isObjectConnected) {
|
|
233
234
|
return;
|
|
234
235
|
}
|
|
@@ -241,21 +242,21 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
241
242
|
}
|
|
242
243
|
callback({ objects, states, isOffline, objectsDBType: config.objects.type, config });
|
|
243
244
|
}
|
|
244
|
-
}
|
|
245
|
+
}
|
|
245
246
|
});
|
|
246
247
|
states = new States({
|
|
247
248
|
connection: config.states,
|
|
248
249
|
logger: {
|
|
249
|
-
silly:
|
|
250
|
-
},
|
|
251
|
-
debug:
|
|
252
|
-
},
|
|
253
|
-
info:
|
|
254
|
-
},
|
|
255
|
-
warn:
|
|
256
|
-
error:
|
|
250
|
+
silly: (_msg) => {
|
|
251
|
+
},
|
|
252
|
+
debug: (_msg) => {
|
|
253
|
+
},
|
|
254
|
+
info: (_msg) => {
|
|
255
|
+
},
|
|
256
|
+
warn: (msg) => console.log(msg),
|
|
257
|
+
error: (msg) => console.log(msg)
|
|
257
258
|
},
|
|
258
|
-
connected:
|
|
259
|
+
connected: async () => {
|
|
259
260
|
if (isStatesConnected) {
|
|
260
261
|
return;
|
|
261
262
|
}
|
|
@@ -268,16 +269,14 @@ async function dbConnect(onlyCheck, params, callback) {
|
|
|
268
269
|
}
|
|
269
270
|
callback({ objects, states, isOffline, objectsDBType: config.objects.type, config });
|
|
270
271
|
}
|
|
271
|
-
},
|
|
272
|
+
},
|
|
272
273
|
// @ts-expect-error todo according to types and first look states.onchange does not exist
|
|
273
|
-
change:
|
|
274
|
+
change: (id, state) => states?.onChange(id, state)
|
|
274
275
|
});
|
|
275
276
|
}
|
|
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");
|
|
281
280
|
async function resetDbConnect() {
|
|
282
281
|
if (objects) {
|
|
283
282
|
await objects.destroy();
|
|
@@ -297,31 +296,29 @@ async function resetDbConnect() {
|
|
|
297
296
|
await pluginHandler.destroyAll();
|
|
298
297
|
}
|
|
299
298
|
}
|
|
300
|
-
__name(resetDbConnect, "resetDbConnect");
|
|
301
299
|
async function exitApplicationSave(exitCode) {
|
|
302
300
|
await resetDbConnect();
|
|
303
301
|
await (0, import_promises.setTimeout)(1e3);
|
|
304
302
|
process.exit(exitCode);
|
|
305
303
|
}
|
|
306
|
-
__name(exitApplicationSave, "exitApplicationSave");
|
|
307
304
|
function initializePlugins(config) {
|
|
308
|
-
const ioPackage = import_fs_extra.default.readJsonSync(import_node_path.default.join(
|
|
309
|
-
const packageJson = import_fs_extra.default.readJsonSync(import_node_path.default.join(
|
|
310
|
-
const hostname =
|
|
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();
|
|
311
308
|
const pluginSettings = {
|
|
312
309
|
namespace: `system.host.${hostname}`,
|
|
313
310
|
logNamespace: `host.${hostname}`,
|
|
314
311
|
scope: "controller",
|
|
315
312
|
log: {
|
|
316
313
|
// cli should be clean, only log warn/error
|
|
317
|
-
silly:
|
|
318
|
-
},
|
|
319
|
-
debug:
|
|
320
|
-
},
|
|
321
|
-
info:
|
|
322
|
-
},
|
|
323
|
-
warn:
|
|
324
|
-
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),
|
|
325
322
|
level: "warn"
|
|
326
323
|
},
|
|
327
324
|
iobrokerConfig: config,
|
|
@@ -329,12 +326,11 @@ function initializePlugins(config) {
|
|
|
329
326
|
controllerVersion: ioPackage.common.version
|
|
330
327
|
};
|
|
331
328
|
pluginHandler = new import_plugin_base.PluginHandler(pluginSettings);
|
|
332
|
-
pluginHandler.addPlugins(ioPackage.common.plugins,
|
|
333
|
-
pluginHandler.addPlugins(config.plugins,
|
|
329
|
+
pluginHandler.addPlugins(ioPackage.common.plugins, import_js_controller_common3.tools.getControllerDir());
|
|
330
|
+
pluginHandler.addPlugins(config.plugins, import_js_controller_common3.tools.getControllerDir());
|
|
334
331
|
pluginHandler.setDatabaseForPlugins(objects, states);
|
|
335
332
|
return pluginHandler.initPlugins(ioPackage);
|
|
336
333
|
}
|
|
337
|
-
__name(initializePlugins, "initializePlugins");
|
|
338
334
|
async function checkSystemOffline(onlyCheck) {
|
|
339
335
|
if (!objects || !states) {
|
|
340
336
|
return true;
|
|
@@ -342,10 +338,9 @@ async function checkSystemOffline(onlyCheck) {
|
|
|
342
338
|
if (onlyCheck) {
|
|
343
339
|
return true;
|
|
344
340
|
}
|
|
345
|
-
const offlineStatus = !await
|
|
341
|
+
const offlineStatus = !await import_js_controller_common3.tools.isHostRunning(objects, states);
|
|
346
342
|
return offlineStatus;
|
|
347
343
|
}
|
|
348
|
-
__name(checkSystemOffline, "checkSystemOffline");
|
|
349
344
|
// Annotate the CommonJS export names for ESM import in node:
|
|
350
345
|
0 && (module.exports = {
|
|
351
346
|
dbConnect,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/dbConnection.ts"],
|
|
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": "
|
|
6
|
-
"names": ["fs", "wait", "params", "path"]
|
|
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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;;;;;;AAAA,sBAAe;AACf,kCAKO;AACP,IAAAA,+BAA2B;AAC3B,IAAAA,+BAAsB;AACtB,sBAAmC;AAGnC,uBAAiB;AAEjB,yBAA8B;AAE9B,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,gBAAAC,QAAG,aAAa,mCAAM,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,CAAC,SAAgB;YAExB;YACA,OAAO,CAAC,SAAgB;YAExB;YACA,MAAM,CAAC,SAAgB;YAEvB;YACA,MAAM,CAAC,QAAgB,QAAQ,IAAI,GAAG;YACtC,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;;UAE3C,WAAW,YAAW;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;SACH;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,wCAAW,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,CAAC,SAAgB;YAExB;YACA,OAAO,CAAC,SAAgB;YAExB;YACA,MAAM,CAAC,SAAgB;YAEvB;YACA,MAAM,CAAC,QAAgB,QAAQ,IAAI,GAAG;YACtC,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;;UAE3C,WAAW,YAAW;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;;;UAGA,QAAQ,CAAC,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG;SAChD;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,wCAAW,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,kBACI,SAAS;;QAEL,SAAS;QACT,QAAQ;QACR,WAAW;QACX,eAAe,OAAO,QAAQ;QAC9B;OACH;AACL,iBAAW;IACf,OAAO;AACH,aAAO,KAAK,oBAAoB,wCAAW,uBAAuB;IACtE;EACJ,GACA,OAAO,WAAW,OAAO,QAAQ,iBAAiB,CAAC;AAIvD,YAAU,IAAI,QAAQ;IAClB,YAAY,OAAO;IACnB,QAAQ;MACJ,OAAO,CAAC,SAAgB;MAExB;MACA,OAAO,CAAC,SAAgB;MAExB;MACA,MAAM,CAAC,SAAgB;MAEvB;MACA,MAAM,CAAC,QAAgB,QAAQ,IAAI,GAAG;MACtC,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;;IAE3C,WAAW,YAAW;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;GACH;AAED,WAAS,IAAI,OAAO;IAChB,YAAY,OAAO;IACnB,QAAQ;MACJ,OAAO,CAAC,SAAgB;MAExB;MACA,OAAO,CAAC,SAAgB;MAExB;MACA,MAAM,CAAC,SAAgB;MAEvB;MACA,MAAM,CAAC,QAAgB,QAAQ,IAAI,GAAG;MACtC,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;;IAE3C,WAAW,YAAW;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;;IAEA,QAAQ,CAAC,IAAI,UAAU,QAAQ,SAAS,IAAI,KAAK;GACpD;AACL;AAQM,SAAU,eAAe,WAAoB,QAAwB;AACvE,SAAO,IAAI,QAAQ,aAAW,UAAU,WAAW,UAAU,CAAA,GAAI,CAAAC,YAAU,QAAQA,OAAM,CAAC,CAAC;AAC/F;AAKA,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;AAOA,eAAsB,oBAAoB,UAAiB;AACvD,QAAM,eAAc;AACpB,YAAM,gBAAAD,YAAK,GAAK;AAChB,UAAQ,KAAK,QAAQ;AACzB;AAOA,SAAS,kBAAkB,QAA2B;AAClD,QAAM,YAAY,gBAAAD,QAAG,aAAa,iBAAAG,QAAK,KAAK,mCAAM,iBAAgB,GAAI,iBAAiB,CAAC;AACxF,QAAM,cAAc,gBAAAH,QAAG,aAAa,iBAAAG,QAAK,KAAK,mCAAM,iBAAgB,GAAI,cAAc,CAAC;AACvF,QAAM,WAAW,mCAAM,YAAW;AAElC,QAAM,iBAAwC;IAC1C,WAAW,eAAe,QAAQ;IAClC,cAAc,QAAQ,QAAQ;IAC9B,OAAO;IACP,KAAK;;MAED,OAAO,CAAC,SAAgB;MAExB;MACA,OAAO,CAAC,SAAgB;MAExB;MACA,MAAM,CAAC,SAAgB;MAEvB;MACA,MAAM,CAAC,QAAgB,QAAQ,IAAI,GAAG;MACtC,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;MACvC,OAAO;;IAEX,gBAAgB;IAChB,eAAe;IACf,mBAAmB,UAAU,OAAO;;AAGxC,kBAAgB,IAAI,iCAAc,cAAc;AAChD,gBAAc,WAAW,UAAU,OAAO,SAAS,mCAAM,iBAAgB,CAAE;AAC3E,gBAAc,WAAW,OAAO,SAAS,mCAAM,iBAAgB,CAAE;AAEjE,gBAAc,sBAAsB,SAAS,MAAM;AAEnD,SAAO,cAAc,YAAY,SAAS;AAC9C;AAOA,eAAe,mBAAmB,WAAkB;AAChD,MAAI,CAAC,WAAW,CAAC,QAAQ;AAErB,WAAO;EACX;AACA,MAAI,WAAW;AACX,WAAO;EACX;AAEA,QAAM,gBAAgB,CAAE,MAAM,mCAAM,cAAc,SAAS,MAAM;AAEjE,SAAO;AACX;",
|
|
6
|
+
"names": ["import_js_controller_common", "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
|
|
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
|
|
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
|
|
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
|
|
23
23
|
*/
|
|
24
24
|
export declare function formatBytes(bytes: number): string;
|
|
25
25
|
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -3,7 +3,6 @@ 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 });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -50,7 +49,6 @@ function formatSeconds(seconds) {
|
|
|
50
49
|
text += `${hours}:${minutes}:${_seconds}`;
|
|
51
50
|
return text;
|
|
52
51
|
}
|
|
53
|
-
__name(formatSeconds, "formatSeconds");
|
|
54
52
|
function formatRam(bytes) {
|
|
55
53
|
const GB = Math.floor(bytes / (1024 * 1024 * 1024) * 10) / 10;
|
|
56
54
|
bytes %= 1024 * 1024 * 1024;
|
|
@@ -63,11 +61,9 @@ function formatRam(bytes) {
|
|
|
63
61
|
}
|
|
64
62
|
return text;
|
|
65
63
|
}
|
|
66
|
-
__name(formatRam, "formatRam");
|
|
67
64
|
function formatSpeed(mhz) {
|
|
68
65
|
return `${mhz} MHz`;
|
|
69
66
|
}
|
|
70
|
-
__name(formatSpeed, "formatSpeed");
|
|
71
67
|
function formatBytes(bytes) {
|
|
72
68
|
if (Math.abs(bytes) < 1024) {
|
|
73
69
|
return `${bytes} B`;
|
|
@@ -80,7 +76,6 @@ function formatBytes(bytes) {
|
|
|
80
76
|
} while (Math.abs(bytes) >= 1024 && u < units.length - 1);
|
|
81
77
|
return `${bytes.toFixed(1)} ${units[u]}`;
|
|
82
78
|
}
|
|
83
|
-
__name(formatBytes, "formatBytes");
|
|
84
79
|
// Annotate the CommonJS export names for ESM import in node:
|
|
85
80
|
0 && (module.exports = {
|
|
86
81
|
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
|
|
5
|
-
"mappings": "
|
|
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;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,7 +5,6 @@ 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 });
|
|
9
8
|
var __export = (target, all) => {
|
|
10
9
|
for (var name in all)
|
|
11
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -38,9 +37,6 @@ var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
|
38
37
|
const PORT = 50005;
|
|
39
38
|
const MULTICAST_ADDR = "239.255.255.250";
|
|
40
39
|
class MHClient {
|
|
41
|
-
static {
|
|
42
|
-
__name(this, "MHClient");
|
|
43
|
-
}
|
|
44
40
|
/** Incremental message id used for request/response correlation */
|
|
45
41
|
id = 1;
|
|
46
42
|
timer = null;
|
|
@@ -237,12 +233,12 @@ class MHClient {
|
|
|
237
233
|
}
|
|
238
234
|
console.warn(`Multihost discovery client: Unexpected message: ${JSON.stringify(msg)}`);
|
|
239
235
|
return false;
|
|
240
|
-
},
|
|
236
|
+
}, function onFinished(err) {
|
|
241
237
|
if (callCb) {
|
|
242
238
|
callback(err);
|
|
243
239
|
callCb = false;
|
|
244
240
|
}
|
|
245
|
-
}
|
|
241
|
+
});
|
|
246
242
|
}
|
|
247
243
|
}
|
|
248
244
|
// 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": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["dgram"]
|
|
7
7
|
}
|