@iobroker/js-controller-cli 7.0.2 → 7.0.4-alpha.0-20241116-db3148f4f
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 +2 -1
- package/build/cjs/index.js.map +2 -2
- package/build/cjs/lib/_Types.d.ts +0 -1
- package/build/cjs/lib/cli/cliCert.js +17 -0
- package/build/cjs/lib/cli/cliCert.js.map +1 -1
- package/build/cjs/lib/cli/cliCommand.d.ts +0 -1
- package/build/cjs/lib/cli/cliCommand.js +6 -0
- package/build/cjs/lib/cli/cliCommand.js.map +1 -1
- package/build/cjs/lib/cli/cliCompact.js +30 -1
- package/build/cjs/lib/cli/cliCompact.js.map +1 -1
- package/build/cjs/lib/cli/cliDebug.js +16 -0
- package/build/cjs/lib/cli/cliDebug.js.map +1 -1
- package/build/cjs/lib/cli/cliHost.js +35 -0
- package/build/cjs/lib/cli/cliHost.js.map +1 -1
- package/build/cjs/lib/cli/cliLogs.js +33 -3
- package/build/cjs/lib/cli/cliLogs.js.map +3 -3
- package/build/cjs/lib/cli/cliMessage.js +10 -0
- package/build/cjs/lib/cli/cliMessage.js.map +1 -1
- package/build/cjs/lib/cli/cliObjects.d.ts +0 -1
- package/build/cjs/lib/cli/cliObjects.js +85 -0
- package/build/cjs/lib/cli/cliObjects.js.map +1 -1
- package/build/cjs/lib/cli/cliPlugin.js +23 -2
- package/build/cjs/lib/cli/cliPlugin.js.map +3 -3
- package/build/cjs/lib/cli/cliProcess.js +65 -2
- package/build/cjs/lib/cli/cliProcess.js.map +1 -1
- package/build/cjs/lib/cli/cliStates.d.ts +0 -1
- package/build/cjs/lib/cli/cliStates.js +38 -0
- package/build/cjs/lib/cli/cliStates.js.map +1 -1
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.d.ts +27 -23
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/setup/dbConnection.js +9 -0
- package/build/cjs/lib/setup/dbConnection.js.map +1 -1
- package/build/cjs/lib/setup/formatters.js.map +1 -1
- package/build/cjs/lib/setup/multihostClient.d.ts +0 -1
- package/build/cjs/lib/setup/multihostClient.js +36 -0
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/setupBackup.js +112 -2
- package/build/cjs/lib/setup/setupBackup.js.map +1 -1
- package/build/cjs/lib/setup/setupInstall.d.ts +6 -6
- package/build/cjs/lib/setup/setupInstall.js +198 -57
- package/build/cjs/lib/setup/setupInstall.js.map +4 -4
- package/build/cjs/lib/setup/setupLicense.js +9 -0
- package/build/cjs/lib/setup/setupLicense.js.map +1 -1
- package/build/cjs/lib/setup/setupList.d.ts +0 -1
- package/build/cjs/lib/setup/setupList.js +4 -0
- package/build/cjs/lib/setup/setupList.js.map +1 -1
- package/build/cjs/lib/setup/setupMultihost.d.ts +2 -5
- package/build/cjs/lib/setup/setupMultihost.js +58 -33
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.js +41 -0
- package/build/cjs/lib/setup/setupPacketManager.js.map +1 -1
- package/build/cjs/lib/setup/setupRepo.js +60 -0
- package/build/cjs/lib/setup/setupRepo.js.map +1 -1
- package/build/cjs/lib/setup/setupSetup.d.ts +0 -1
- package/build/cjs/lib/setup/setupSetup.js +79 -5
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.js +34 -0
- package/build/cjs/lib/setup/setupUpgrade.js.map +1 -1
- package/build/cjs/lib/setup/setupUpload.d.ts +0 -3
- package/build/cjs/lib/setup/setupUpload.js +43 -0
- package/build/cjs/lib/setup/setupUpload.js.map +1 -1
- package/build/cjs/lib/setup/setupUsers.d.ts +0 -1
- package/build/cjs/lib/setup/setupUsers.js +109 -0
- package/build/cjs/lib/setup/setupUsers.js.map +1 -1
- package/build/cjs/lib/setup/setupVendor.js +18 -1
- package/build/cjs/lib/setup/setupVendor.js.map +1 -1
- package/build/cjs/lib/setup/setupVisDebug.js +16 -0
- package/build/cjs/lib/setup/setupVisDebug.js.map +1 -1
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +8 -4
- package/build/cjs/lib/setup/utils.js.map +2 -2
- package/build/cjs/lib/setup.js +17 -6
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/lib/_Types.d.ts +0 -1
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +0 -1
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +0 -1
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +0 -1
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/messages.d.ts +27 -23
- package/build/esm/lib/cli/messages.d.ts.map +1 -1
- package/build/esm/lib/setup/multihostClient.d.ts +0 -1
- package/build/esm/lib/setup/multihostClient.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +6 -6
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +37 -70
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +0 -1
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts +2 -5
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +12 -37
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +0 -1
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +0 -3
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +0 -1
- package/build/esm/lib/setup/setupUsers.d.ts.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 +3 -3
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/multihostClient.ts"],
|
|
4
4
|
"sourcesContent": ["import dgram from 'node:dgram';\nimport { tools } from '@iobroker/js-controller-common';\nimport crypto from 'node:crypto';\n\nconst PORT = 50005;\nconst MULTICAST_ADDR = '239.255.255.250';\n\ninterface ReceivedMessage {\n cmd: string;\n id: number;\n result: string;\n ip?: string;\n hostname?: string;\n info?: string;\n slave?: boolean;\n auth?: string;\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\nexport class MHClient {\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\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 the SHA\n *\n * @param secret the MH secret\n * @param salt the MH salt\n * @param callback\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 the MH server\n *\n * @param isBroadcast if server should receive broadcast\n * @param timeout timeout after which MH server will be closed\n * @param onReady ready handler\n * @param onMessage message handler, if return true here, server will be stopped\n * @param onFinished finished handler\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 * Start MH browsing for server\n *\n * @param timeout timeout to stop browsing\n * @param isDebug debug will also show local addresses\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 server\n *\n * @param ip ip address of server\n * @param password password for authentication\n * @param callback\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 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 {\n if (typeof callback === 'function') {\n callback(undefined, msg.objects, msg.states, rinfo.address);\n }\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": ["crypto", "dgram"]
|
|
7
7
|
}
|
|
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
20
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
25
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
26
|
mod
|
|
23
27
|
));
|
|
@@ -48,13 +52,18 @@ class BackupRestore {
|
|
|
48
52
|
restartController;
|
|
49
53
|
cleanDatabase;
|
|
50
54
|
dbMigration;
|
|
55
|
+
/** these adapters will be reinstalled during restore, while others will be installed after next controller start */
|
|
51
56
|
PRESERVE_ADAPTERS = ["admin", "backitup"];
|
|
52
57
|
upload;
|
|
53
58
|
configParts;
|
|
54
59
|
configDir;
|
|
60
|
+
/** Placeholder inserted during backup creation if no custom hostname defined */
|
|
55
61
|
HOSTNAME_PLACEHOLDER = "$$__hostname__$$";
|
|
62
|
+
/** Same as HOSTNAME_PLACEHOLDER but used in replace method */
|
|
56
63
|
HOSTNAME_PLACEHOLDER_REPLACE = "$$$$__hostname__$$$$";
|
|
64
|
+
/** Regex to replace all occurrences of the HOSTNAME_PLACEHOLDER */
|
|
57
65
|
HOSTNAME_PLACEHOLDER_REGEX = /\$\$__hostname__\$\$/g;
|
|
66
|
+
/** Postfix for backup name */
|
|
58
67
|
BACKUP_POSTFIX = `_backup${import_js_controller_common.tools.appNameLowerCase}`;
|
|
59
68
|
constructor(options) {
|
|
60
69
|
options = options || {};
|
|
@@ -84,6 +93,7 @@ class BackupRestore {
|
|
|
84
93
|
this.configParts.pop();
|
|
85
94
|
this.configDir = this.configParts.join("/");
|
|
86
95
|
}
|
|
96
|
+
// --------------------------------------- BACKUP ---------------------------------------------------
|
|
87
97
|
async _copyFile(id, srcPath, destPath) {
|
|
88
98
|
try {
|
|
89
99
|
const data = await this.objects.readFile(id, srcPath);
|
|
@@ -114,6 +124,9 @@ class BackupRestore {
|
|
|
114
124
|
}
|
|
115
125
|
}
|
|
116
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Get the directory where backups should be stored
|
|
129
|
+
*/
|
|
117
130
|
static getBackupDir() {
|
|
118
131
|
return import_node_path.default.join(import_js_controller_common.tools.getRootDir(), "backups/");
|
|
119
132
|
}
|
|
@@ -154,6 +167,9 @@ class BackupRestore {
|
|
|
154
167
|
});
|
|
155
168
|
}
|
|
156
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Removes the temporary backup directory, never throws
|
|
172
|
+
*/
|
|
157
173
|
removeTempBackupDir() {
|
|
158
174
|
try {
|
|
159
175
|
import_fs_extra.default.rmSync(import_node_path.default.join(this.tmpDir, "backup"), { recursive: true, force: true });
|
|
@@ -161,6 +177,11 @@ class BackupRestore {
|
|
|
161
177
|
console.error(`host.${this.hostname} Cannot clear temporary backup directory: ${e.message}`);
|
|
162
178
|
}
|
|
163
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Pack and compress the backup
|
|
182
|
+
*
|
|
183
|
+
* @param name - backup name
|
|
184
|
+
*/
|
|
164
185
|
_packBackup(name) {
|
|
165
186
|
return new Promise((resolve, reject) => {
|
|
166
187
|
const f = import_fs_extra.default.createWriteStream(name);
|
|
@@ -180,9 +201,15 @@ class BackupRestore {
|
|
|
180
201
|
}
|
|
181
202
|
});
|
|
182
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Creates backup and stores with given name
|
|
206
|
+
*
|
|
207
|
+
* @param name - name of the backup
|
|
208
|
+
* @param noConfig - do not store configs (used by setup custom migration)
|
|
209
|
+
*/
|
|
183
210
|
async createBackup(name, noConfig = false) {
|
|
184
211
|
if (!name) {
|
|
185
|
-
const d = new Date();
|
|
212
|
+
const d = /* @__PURE__ */ new Date();
|
|
186
213
|
name = `${d.getFullYear()}_${`0${d.getMonth() + 1}`.slice(-2)}_${`0${d.getDate()}`.slice(-2)}-${`0${d.getHours()}`.slice(-2)}_${`0${d.getMinutes()}`.slice(-2)}_${`0${d.getSeconds()}`.slice(-2)}${this.BACKUP_POSTFIX}`;
|
|
187
214
|
} else if (!name.endsWith(this.BACKUP_POSTFIX) && !name.endsWith(`${this.BACKUP_POSTFIX}.tar.gz`)) {
|
|
188
215
|
name += this.BACKUP_POSTFIX;
|
|
@@ -275,6 +302,13 @@ class BackupRestore {
|
|
|
275
302
|
throw new import_customError.IoBrokerError({ message: e.message, code: import_js_controller_common.EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP });
|
|
276
303
|
}
|
|
277
304
|
}
|
|
305
|
+
//--------------------------------------- RESTORE ---------------------------------------------------
|
|
306
|
+
/**
|
|
307
|
+
* Helper to restore raw state
|
|
308
|
+
*
|
|
309
|
+
* @param stateId - state ID
|
|
310
|
+
* @param stateObject - the corresponding state object
|
|
311
|
+
*/
|
|
278
312
|
async _setStateHelper(stateId, stateObject) {
|
|
279
313
|
try {
|
|
280
314
|
await this.states.setRawState(stateId, stateObject);
|
|
@@ -282,6 +316,11 @@ class BackupRestore {
|
|
|
282
316
|
console.log(`host.${this.hostname} Could not set value for state ${stateId}: ${e.message}`);
|
|
283
317
|
}
|
|
284
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Sets all objects to the db and disables all adapters
|
|
321
|
+
*
|
|
322
|
+
* @param object - object to be set
|
|
323
|
+
*/
|
|
285
324
|
async _setObjHelper(object) {
|
|
286
325
|
if (!this.dbMigration && object._id && /^system\.adapter\..+\.\d$/.test(object._id) && !object._id.startsWith("system.adapter.admin.") && !object._id.startsWith("system.adapter.backitup.")) {
|
|
287
326
|
if (object.common?.enabled) {
|
|
@@ -294,6 +333,11 @@ class BackupRestore {
|
|
|
294
333
|
console.warn(`host.${this.hostname} Cannot restore ${object._id}: ${e.message}`);
|
|
295
334
|
}
|
|
296
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Creates all provided object if non-existing
|
|
338
|
+
*
|
|
339
|
+
* @param objectList - list of objects to be created
|
|
340
|
+
*/
|
|
297
341
|
async _reloadAdapterObject(objectList) {
|
|
298
342
|
if (!Array.isArray(objectList)) {
|
|
299
343
|
return;
|
|
@@ -336,7 +380,8 @@ class BackupRestore {
|
|
|
336
380
|
_modules = import_fs_extra.default.readdirSync(p2).filter((dir) => import_fs_extra.default.existsSync(`${p2}/${dir}/io-package.json`));
|
|
337
381
|
const regEx_ = new RegExp(`^${import_js_controller_common.tools.appName}\\.`, "i");
|
|
338
382
|
for (const module2 of _modules) {
|
|
339
|
-
if (regEx_.test(module2) &&
|
|
383
|
+
if (regEx_.test(module2) && // If not js-controller
|
|
384
|
+
module2.substring(import_js_controller_common.tools.appName.length + 1) !== "js-controller" && !dirs.includes(module2.substring(import_js_controller_common.tools.appName.length + 1))) {
|
|
340
385
|
dirs.push(module2);
|
|
341
386
|
}
|
|
342
387
|
}
|
|
@@ -390,6 +435,11 @@ class BackupRestore {
|
|
|
390
435
|
}
|
|
391
436
|
}
|
|
392
437
|
}
|
|
438
|
+
/**
|
|
439
|
+
* Preprocess object before storing it in the backup file
|
|
440
|
+
*
|
|
441
|
+
* @param options object and host information
|
|
442
|
+
*/
|
|
393
443
|
async _preprocessObject(options) {
|
|
394
444
|
const { object, isCustomHostname, hostname, thisHostNameStartsWith } = options;
|
|
395
445
|
if (!object || !object._id || !object.common) {
|
|
@@ -467,6 +517,11 @@ class BackupRestore {
|
|
|
467
517
|
console.error(`Ignoring ${backupDir} because can not read directory: ${e.message}`);
|
|
468
518
|
}
|
|
469
519
|
}
|
|
520
|
+
/**
|
|
521
|
+
* Restore JSONL backup after controller has been stopped
|
|
522
|
+
*
|
|
523
|
+
* @param options The restore options
|
|
524
|
+
*/
|
|
470
525
|
async _restoreJsonlBackup(options) {
|
|
471
526
|
const { force, dontDeleteAdapters } = options;
|
|
472
527
|
const hostname = import_js_controller_common.tools.getHostName();
|
|
@@ -527,6 +582,11 @@ class BackupRestore {
|
|
|
527
582
|
await statesFd.close();
|
|
528
583
|
return import_js_controller_common.EXIT_CODES.NO_ERROR;
|
|
529
584
|
}
|
|
585
|
+
/**
|
|
586
|
+
* Restore after controller has been stopped
|
|
587
|
+
*
|
|
588
|
+
* @param options The restore options
|
|
589
|
+
*/
|
|
530
590
|
async _restoreAfterStop(options) {
|
|
531
591
|
const { force, restartOnFinish, dontDeleteAdapters } = options;
|
|
532
592
|
const backupBaseDir = import_node_path.default.join(this.tmpDir, "backup");
|
|
@@ -604,6 +664,12 @@ class BackupRestore {
|
|
|
604
664
|
}
|
|
605
665
|
return import_js_controller_common.EXIT_CODES.NO_ERROR;
|
|
606
666
|
}
|
|
667
|
+
/**
|
|
668
|
+
* Connects to the database which is configured in `iobroker.json`
|
|
669
|
+
* Meant to be used after the configuration file has been overwritten
|
|
670
|
+
*
|
|
671
|
+
* @param config The new config, needed for logging purposes
|
|
672
|
+
*/
|
|
607
673
|
async connectToNewDatabase(config) {
|
|
608
674
|
console.log(`host.${this.hostname} Connecting to new DB "${config.states.type}/${config.objects.type}" (can take up to 20s) ...`);
|
|
609
675
|
await (0, import_dbConnection.resetDbConnect)();
|
|
@@ -613,6 +679,9 @@ class BackupRestore {
|
|
|
613
679
|
this.objects = objects;
|
|
614
680
|
this.states = states;
|
|
615
681
|
}
|
|
682
|
+
/**
|
|
683
|
+
* Removes all adapters
|
|
684
|
+
*/
|
|
616
685
|
async _removeAllAdapters() {
|
|
617
686
|
const nodeModulePath = import_node_path.default.join(controllerDir, "..");
|
|
618
687
|
const nodeModuleDirs = import_fs_extra.default.readdirSync(nodeModulePath, { withFileTypes: true });
|
|
@@ -627,6 +696,14 @@ class BackupRestore {
|
|
|
627
696
|
}
|
|
628
697
|
}
|
|
629
698
|
}
|
|
699
|
+
/**
|
|
700
|
+
* Ensure that installed controller version matches version in backup
|
|
701
|
+
*
|
|
702
|
+
* @param controllerDir - directory of js-controller
|
|
703
|
+
* @param backupHostname - hostname in backup file
|
|
704
|
+
* @param backupObjects - the objects contained in the backup
|
|
705
|
+
* @param force - if force is true, only log
|
|
706
|
+
*/
|
|
630
707
|
_ensureCompatibility(controllerDir2, backupHostname, backupObjects, force) {
|
|
631
708
|
try {
|
|
632
709
|
const ioPackJson = import_fs_extra.default.readJsonSync(import_node_path.default.join(controllerDir2, "io-package.json"));
|
|
@@ -650,6 +727,9 @@ class BackupRestore {
|
|
|
650
727
|
} catch {
|
|
651
728
|
}
|
|
652
729
|
}
|
|
730
|
+
/**
|
|
731
|
+
* Returns all backups as array
|
|
732
|
+
*/
|
|
653
733
|
listBackups() {
|
|
654
734
|
const dir = BackupRestore.getBackupDir();
|
|
655
735
|
const result = [];
|
|
@@ -664,6 +744,11 @@ class BackupRestore {
|
|
|
664
744
|
}
|
|
665
745
|
return result;
|
|
666
746
|
}
|
|
747
|
+
/**
|
|
748
|
+
* Validates a JSONL-style backup and all json files inside the backup (in temporary directory)
|
|
749
|
+
*
|
|
750
|
+
* @param noConfig if the backup does not contain a `config.json` (used by setup custom migration)
|
|
751
|
+
*/
|
|
667
752
|
async _validateTempDirectory(noConfig = false) {
|
|
668
753
|
const backupBaseDir = import_node_path.default.join(this.tmpDir, "backup");
|
|
669
754
|
if (!noConfig) {
|
|
@@ -687,6 +772,9 @@ class BackupRestore {
|
|
|
687
772
|
console.warn(`host.${this.hostname} Please ensure that self-created JSON files are valid`);
|
|
688
773
|
}
|
|
689
774
|
}
|
|
775
|
+
/**
|
|
776
|
+
* Validate that the created JSONL files in the temporary directories are parseable
|
|
777
|
+
*/
|
|
690
778
|
async _validateDatabaseFiles() {
|
|
691
779
|
const backupBaseDir = import_node_path.default.join(this.tmpDir, "backup");
|
|
692
780
|
const objectsFd = await (0, import_promises.open)(import_node_path.default.join(backupBaseDir, "objects.jsonl"));
|
|
@@ -710,6 +798,11 @@ class BackupRestore {
|
|
|
710
798
|
}
|
|
711
799
|
await statesFd.close();
|
|
712
800
|
}
|
|
801
|
+
/**
|
|
802
|
+
* Validates the given backup.json and all json files in the backup, calls processExit afterwards
|
|
803
|
+
*
|
|
804
|
+
* @param _name - index or name of the backup
|
|
805
|
+
*/
|
|
713
806
|
async validateBackup(_name) {
|
|
714
807
|
let backups;
|
|
715
808
|
let name = typeof _name === "number" ? _name.toString() : _name;
|
|
@@ -794,6 +887,9 @@ class BackupRestore {
|
|
|
794
887
|
throw new import_customError.IoBrokerError({ message: e.message, code: import_js_controller_common.EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP });
|
|
795
888
|
}
|
|
796
889
|
}
|
|
890
|
+
/**
|
|
891
|
+
* Validate an unpacked legacy backup in the temporary directory
|
|
892
|
+
*/
|
|
797
893
|
_validateLegacyTempDir() {
|
|
798
894
|
console.log(`host.${this.hostname} Starting validation ...`);
|
|
799
895
|
let backupJSON;
|
|
@@ -812,6 +908,12 @@ class BackupRestore {
|
|
|
812
908
|
throw new Error(`Backup corrupted: ${e.message}`);
|
|
813
909
|
}
|
|
814
910
|
}
|
|
911
|
+
/**
|
|
912
|
+
* Checks a directory for json files and validates them, steps down recursive in subdirectories
|
|
913
|
+
*
|
|
914
|
+
* @param path - path to the directory
|
|
915
|
+
* @param verbose - if logging should be verbose
|
|
916
|
+
*/
|
|
815
917
|
_checkDirectory(path2, verbose = false) {
|
|
816
918
|
if (import_fs_extra.default.existsSync(path2)) {
|
|
817
919
|
const files = import_fs_extra.default.readdirSync(path2);
|
|
@@ -835,6 +937,11 @@ class BackupRestore {
|
|
|
835
937
|
}
|
|
836
938
|
}
|
|
837
939
|
}
|
|
940
|
+
/**
|
|
941
|
+
* Restores a backup
|
|
942
|
+
*
|
|
943
|
+
* @param options Restore options
|
|
944
|
+
*/
|
|
838
945
|
async restoreBackup(options) {
|
|
839
946
|
const { name: _name, dontDeleteAdapters, force } = options;
|
|
840
947
|
let backups;
|
|
@@ -911,6 +1018,9 @@ class BackupRestore {
|
|
|
911
1018
|
this.removeTempBackupDir();
|
|
912
1019
|
return { exitCode, objects: this.objects, states: this.states };
|
|
913
1020
|
}
|
|
1021
|
+
/**
|
|
1022
|
+
* This method checks if adapter of PRESERVE_ADAPTERS exists, and re-installs them if this is the case
|
|
1023
|
+
*/
|
|
914
1024
|
async _restorePreservedAdapters() {
|
|
915
1025
|
for (const adapterName of this.PRESERVE_ADAPTERS) {
|
|
916
1026
|
try {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupBackup.ts"],
|
|
4
4
|
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { EXIT_CODES, tools } from '@iobroker/js-controller-common';\nimport { exec as execAsync } from 'promisify-child-process';\nimport tar from 'tar';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { Upload } from './setupUpload.js';\nimport type { CleanDatabaseHandler, ProcessExitCallback, RestartController } from '../_Types.js';\nimport { dbConnectAsync, resetDbConnect } from './dbConnection.js';\nimport { IoBrokerError } from './customError.js';\nimport { CLIProcess } from '@/lib/cli/cliProcess.js';\nimport { open, writeFile } from 'node:fs/promises';\n\nexport interface CLIBackupRestoreOptions {\n dbMigration?: boolean;\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: ProcessExitCallback;\n cleanDatabase: CleanDatabaseHandler;\n restartController: RestartController;\n}\n\ntype BackupObject = Omit<ioBroker.GetObjectListItem<ioBroker.Object>, 'doc'>;\n\nexport interface RestoreBackupReturnValue {\n /** Exit code of the process */\n exitCode: EXIT_CODES;\n /** The new states db connection after restore */\n states: StatesRedisClient;\n /** The new objects db connection after restore */\n objects: ObjectsRedisClient;\n}\n\ninterface RestoreAfterStopOptions {\n /** restart controller after restore */\n restartOnFinish: boolean;\n /** skip the controller version check */\n force: boolean;\n /** skip adapter deletion, e.g. for setup custom db migration */\n dontDeleteAdapters: boolean;\n}\n\ninterface Backup {\n config?: null | ioBroker.IoBrokerJson;\n objects: null | BackupObject[];\n states: Record<string, ioBroker.State>;\n}\n\ninterface PreprocessObjectOptions {\n /** The hostname */\n hostname: string;\n /** The object to preprocess */\n object: ioBroker.Object;\n /** If the host has a custom hostname */\n isCustomHostname: boolean;\n /** String to check if it is a sub object or state of this host (will not match the host object directly) */\n thisHostNameStartsWith: string;\n}\n\nexport interface RestoreBackupOptions {\n /** backup name, absolute path or index */\n name: string | number;\n /** if force flag is set, js-controller is allowed to have a different version */\n force: boolean;\n /** skip adapter deletion, e.g. for setup custom db migration */\n dontDeleteAdapters: boolean;\n}\n\nconst controllerDir = tools.getControllerDir();\n\nexport class BackupRestore {\n private readonly hostname = tools.getHostName();\n private readonly tmpDir = path.normalize(path.join(controllerDir, 'tmp'));\n private readonly bkpDir = path.normalize(path.join(controllerDir, 'backups'));\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: CLIBackupRestoreOptions['processExit'];\n private readonly restartController: CLIBackupRestoreOptions['restartController'];\n private readonly cleanDatabase: CLIBackupRestoreOptions['cleanDatabase'];\n private readonly dbMigration: boolean;\n /** these adapters will be reinstalled during restore, while others will be installed after next controller start */\n private readonly PRESERVE_ADAPTERS = ['admin', 'backitup'] as const;\n private upload: Upload;\n private configParts: string[];\n private readonly configDir: string;\n /** Placeholder inserted during backup creation if no custom hostname defined */\n private readonly HOSTNAME_PLACEHOLDER = '$$__hostname__$$';\n /** Same as HOSTNAME_PLACEHOLDER but used in replace method */\n private readonly HOSTNAME_PLACEHOLDER_REPLACE = '$$$$__hostname__$$$$';\n /** Regex to replace all occurrences of the HOSTNAME_PLACEHOLDER */\n private readonly HOSTNAME_PLACEHOLDER_REGEX = /\\$\\$__hostname__\\$\\$/g;\n /** Postfix for backup name */\n private readonly BACKUP_POSTFIX = `_backup${tools.appNameLowerCase}`;\n\n constructor(options: CLIBackupRestoreOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n if (!options.cleanDatabase) {\n throw new Error('Invalid arguments: cleanDatabase is missing');\n }\n if (!options.restartController) {\n throw new Error('Invalid arguments: restartController is missing');\n }\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n this.cleanDatabase = options.cleanDatabase;\n this.restartController = options.restartController;\n this.dbMigration = options.dbMigration || false;\n\n this.upload = new Upload(options);\n\n this.configParts = tools.getConfigFileName().split('/');\n this.configParts.pop(); // remove *.json\n this.configDir = this.configParts.join('/'); // => name-data\n }\n\n // --------------------------------------- BACKUP ---------------------------------------------------\n private async _copyFile(id: string, srcPath: string, destPath: string): Promise<void> {\n try {\n const data = await this.objects.readFile(id, srcPath);\n if (data) {\n fs.writeFileSync(destPath, data.file);\n }\n } catch (err) {\n console.log(`Can not copy File ${id}${srcPath} to ${destPath}: ${err.message}`);\n }\n }\n\n async copyDir(id: string, srcPath: string, destPath: string): Promise<void> {\n fs.ensureDirSync(destPath);\n\n try {\n const res = await this.objects.readDirAsync(id, srcPath);\n if (res) {\n for (const entry of res) {\n if (entry.isDir) {\n await this.copyDir(id, `${srcPath}/${entry.file}`, `${destPath}/${entry.file}`);\n } else {\n fs.ensureDirSync(destPath);\n await this._copyFile(id, `${srcPath}/${entry.file}`, `${destPath}/${entry.file}`);\n }\n }\n }\n } catch (err) {\n if (!err.message.includes('Not exists')) {\n console.warn(`Directory ${id}/${srcPath} cannot be copied: ${err}`);\n }\n }\n }\n\n /**\n * Get the directory where backups should be stored\n */\n static getBackupDir(): string {\n return path.join(tools.getRootDir(), 'backups/');\n }\n\n copyFileSync(source: string, target: string): void {\n let targetFile = target;\n\n try {\n // if target is a directory a new file with the same name will be created\n if (fs.existsSync(target)) {\n if (fs.statSync(target).isDirectory()) {\n targetFile = path.join(target, path.basename(source));\n }\n }\n\n fs.writeFileSync(targetFile, fs.readFileSync(source));\n } catch (e) {\n console.error(`Could not copy ${targetFile} to ${source}: ${e.message}`);\n }\n }\n\n copyFolderRecursiveSync(source: string, target: string): void {\n let files = [];\n\n if (!fs.existsSync(target)) {\n fs.mkdirSync(target);\n }\n\n // check if folder needs to be created or integrated\n const targetFolder = path.join(target, path.basename(source));\n if (!fs.existsSync(targetFolder)) {\n fs.mkdirSync(targetFolder);\n }\n\n // copy\n if (fs.existsSync(source) && fs.statSync(source).isDirectory()) {\n files = fs.readdirSync(source);\n files.forEach(file => {\n const curSource = path.join(source, file);\n if (!fs.existsSync(curSource)) {\n return;\n }\n if (fs.statSync(curSource).isDirectory()) {\n this.copyFolderRecursiveSync(curSource, targetFolder);\n } else {\n this.copyFileSync(curSource, targetFolder);\n }\n });\n }\n }\n\n /**\n * Removes the temporary backup directory, never throws\n */\n private removeTempBackupDir(): void {\n try {\n fs.rmSync(path.join(this.tmpDir, 'backup'), { recursive: true, force: true });\n } catch (e) {\n console.error(`host.${this.hostname} Cannot clear temporary backup directory: ${e.message}`);\n }\n }\n\n /**\n * Pack and compress the backup\n *\n * @param name - backup name\n */\n private _packBackup(name: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const f = fs.createWriteStream(name);\n f.on('finish', () => {\n this.removeTempBackupDir();\n resolve(path.normalize(name));\n });\n\n f.on('error', e => {\n console.error(`host.${this.hostname} Cannot pack directory ${this.tmpDir}/backup: ${e.message}`);\n reject(new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_GZIP_DIRECTORY }));\n });\n\n try {\n tar.create({ gzip: true, cwd: `${this.tmpDir}/` }, ['backup']).pipe(f);\n } catch (e) {\n console.error(`host.${this.hostname} Cannot pack directory ${this.tmpDir}/backup: ${e.message}`);\n reject(new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_GZIP_DIRECTORY }));\n }\n });\n }\n\n /**\n * Creates backup and stores with given name\n *\n * @param name - name of the backup\n * @param noConfig - do not store configs (used by setup custom migration)\n */\n async createBackup(name: string, noConfig = false): Promise<string> {\n if (!name) {\n const d = new Date();\n name = `${d.getFullYear()}_${`0${d.getMonth() + 1}`.slice(-2)}_${`0${d.getDate()}`.slice(-2)}-${`0${d.getHours()}`.slice(\n -2,\n )}_${`0${d.getMinutes()}`.slice(-2)}_${`0${d.getSeconds()}`.slice(-2)}${this.BACKUP_POSTFIX}`;\n } else if (!name.endsWith(this.BACKUP_POSTFIX) && !name.endsWith(`${this.BACKUP_POSTFIX}.tar.gz`)) {\n name += this.BACKUP_POSTFIX;\n }\n\n name = name.toString().replace(/\\\\/g, '/');\n if (!name.includes('/')) {\n const backupPath = BackupRestore.getBackupDir();\n\n // create directory if not exists\n fs.ensureDirSync(backupPath);\n\n if (!name.includes('.tar.gz')) {\n name = `${backupPath + name}.tar.gz`;\n } else {\n name = backupPath + name;\n }\n }\n\n const hostname = tools.getHostName();\n // String to check if it is a sub object or state of this host (will not match the host object directly)\n const thisHostNameStartsWith = `system.host.${hostname}.`;\n\n fs.ensureDirSync(this.bkpDir);\n fs.ensureDirSync(this.tmpDir);\n\n this.removeTempBackupDir();\n\n const backupBasePath = path.join(this.tmpDir, 'backup');\n fs.ensureDirSync(backupBasePath);\n fs.ensureDirSync(path.join(backupBasePath, 'files'));\n\n let isCustomHostname = false;\n let config: ioBroker.IoBrokerJson | undefined;\n\n // read iobroker.json\n try {\n config = (await fs.readJSON(tools.getConfigFileName())) as ioBroker.IoBrokerJson;\n // if a hostname is configured\n isCustomHostname = !!config.system.hostname;\n } catch (e) {\n console.error(`host.${hostname} Cannot read config file: ${e.message}`);\n }\n\n if (!noConfig && config) {\n await writeFile(path.join(backupBasePath, 'config.json'), JSON.stringify(config), { encoding: 'utf-8' });\n }\n\n const objectsFd = await open(path.join(backupBasePath, 'objects.jsonl'), 'a');\n\n try {\n const res = await this.objects.getObjectListAsync({ include_docs: true });\n for (const row of res.rows) {\n const preprocessedValue = await this._preprocessObject({\n object: row.value,\n isCustomHostname,\n hostname,\n thisHostNameStartsWith,\n });\n await objectsFd.write(`${JSON.stringify(preprocessedValue)}\\n`);\n }\n\n console.log(`host.${hostname} ${res.rows.length || 'no'} objects saved`);\n } catch (e) {\n console.error(`host.${hostname} Cannot get objects: ${e.message}`);\n }\n\n await objectsFd.close();\n\n const statesFd = await open(path.join(backupBasePath, 'states.jsonl'), 'a');\n\n try {\n const keys = await this.states.getKeys('*');\n const objs = await this.states.getStates(keys!);\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n const obj = objs[i];\n\n if (!obj) {\n continue;\n }\n\n if (!isCustomHostname) {\n // if it's a default hostname, we will have a new default after restore and need to replace\n if (obj.from === `system.host.${hostname}`) {\n obj.from.replace(\n `system.host.${hostname}`,\n `system.host.${this.HOSTNAME_PLACEHOLDER_REPLACE}`,\n );\n }\n if (keys[i].startsWith(thisHostNameStartsWith)) {\n keys[i] = keys[i].replace(hostname, this.HOSTNAME_PLACEHOLDER_REPLACE);\n }\n }\n\n await statesFd.write(`${JSON.stringify({ id: keys[i], state: obj })}\\n`);\n }\n\n await statesFd.close();\n console.log(`host.${hostname} ${keys.length} states saved`);\n }\n } catch (e) {\n console.error(`host.${hostname} Cannot get states: ${e.message}`);\n }\n\n console.log(`host.${hostname} Validating backup ...`);\n try {\n await this._validateTempDirectory(noConfig);\n console.log(`host.${hostname} The backup is valid!`);\n\n return await this._packBackup(name);\n } catch (e) {\n console.error(`host.${hostname} Backup not created: ${e.message}`);\n this.removeTempBackupDir();\n\n if (e instanceof IoBrokerError) {\n throw e;\n }\n\n throw new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP });\n }\n }\n\n //--------------------------------------- RESTORE ---------------------------------------------------\n /**\n * Helper to restore raw state\n *\n * @param stateId - state ID\n * @param stateObject - the corresponding state object\n */\n private async _setStateHelper(stateId: string, stateObject: ioBroker.State): Promise<void> {\n try {\n await this.states.setRawState(stateId, stateObject);\n } catch (e) {\n console.log(`host.${this.hostname} Could not set value for state ${stateId}: ${e.message}`);\n }\n }\n\n /**\n * Sets all objects to the db and disables all adapters\n *\n * @param object - object to be set\n */\n private async _setObjHelper(object: ioBroker.Object): Promise<void> {\n // Disable all adapters.\n if (\n !this.dbMigration &&\n object._id &&\n /^system\\.adapter\\..+\\.\\d$/.test(object._id) &&\n !object._id.startsWith('system.adapter.admin.') &&\n !object._id.startsWith('system.adapter.backitup.')\n ) {\n if (object.common?.enabled) {\n object.common.enabled = false;\n }\n }\n\n try {\n await this.objects.setObject(object._id, object);\n } catch (e) {\n console.warn(`host.${this.hostname} Cannot restore ${object._id}: ${e.message}`);\n }\n }\n\n /**\n * Creates all provided object if non-existing\n *\n * @param objectList - list of objects to be created\n */\n private async _reloadAdapterObject(objectList: ioBroker.Object[]): Promise<void> {\n if (!Array.isArray(objectList)) {\n return;\n }\n\n for (const object of objectList) {\n let obj;\n try {\n obj = await this.objects.getObject(object._id);\n } catch {\n // ignore\n }\n\n if (!obj) {\n // object not existing -> create it\n try {\n await this.objects.setObject(object._id, object);\n console.log(`host.${this.hostname} object ${object._id} created`);\n } catch {\n // ignore\n }\n }\n }\n }\n\n private async _reloadAdaptersObjects(): Promise<void> {\n const dirs: string[] = [];\n let _modules;\n let p = path.join(controllerDir, 'node_modules');\n\n if (p.includes('js-controller')) {\n p = path.join(controllerDir, '..', 'node_modules');\n }\n\n if (fs.existsSync(p)) {\n _modules = fs.readdirSync(p).filter(dir => fs.existsSync(`${p}/${dir}/io-package.json`));\n if (_modules) {\n const regEx = new RegExp(`^${tools.appName}\\\\.`, 'i');\n for (const module of _modules) {\n if (regEx.test(module) && !dirs.includes(module.substring(tools.appName.length + 1))) {\n dirs.push(module);\n }\n }\n }\n }\n\n // if installed as npm\n if (\n fs.existsSync(\n path.join(controllerDir, '..', '..', 'node_modules', `${tools.appName.toLowerCase()}.js-controller`),\n )\n ) {\n const p = path.join(controllerDir, '..');\n _modules = fs.readdirSync(p).filter(dir => fs.existsSync(`${p}/${dir}/io-package.json`));\n const regEx_ = new RegExp(`^${tools.appName}\\\\.`, 'i');\n for (const module of _modules) {\n // if starting from application name + '.'\n if (\n regEx_.test(module) &&\n // If not js-controller\n module.substring(tools.appName.length + 1) !== 'js-controller' &&\n !dirs.includes(module.substring(tools.appName.length + 1))\n ) {\n dirs.push(module);\n }\n }\n }\n\n for (const dir of dirs) {\n const adapterName = dir.replace(/^iobroker\\./i, '');\n await this.upload.uploadAdapter(adapterName, false, true);\n await this.upload.uploadAdapter(adapterName, true, true);\n\n let pkg;\n\n if (!dir) {\n console.error('Wrong');\n }\n const adapterDir = tools.getAdapterDir(adapterName);\n if (fs.existsSync(`${adapterDir}/io-package.json`)) {\n pkg = fs.readJSONSync(`${adapterDir}/io-package.json`);\n }\n\n if (pkg?.objects?.length) {\n console.log(`host.${this.hostname} Setup \"${dir}\" adapter`);\n await this._reloadAdapterObject(pkg.objects);\n }\n }\n }\n\n private async _uploadUserFiles(root: string, uploadPath?: string): Promise<void> {\n uploadPath = uploadPath || '';\n if (!fs.existsSync(root)) {\n return;\n }\n const files = fs.readdirSync(root + uploadPath);\n for (const file of files) {\n const fName = path.join(root, uploadPath, file);\n if (!fs.existsSync(fName)) {\n continue;\n }\n const stat = fs.statSync(fName);\n if (stat.isDirectory()) {\n try {\n await this._uploadUserFiles(root, `${uploadPath}/${file}`);\n } catch (err) {\n console.error(`Error: ${err}`);\n }\n } else {\n const parts = uploadPath.split('/');\n const adapter = parts.splice(0, 2)[1];\n const _path = `${parts.join('/')}/${file}`;\n console.log(`host.${this.hostname} Upload user file \"${adapter}/${_path}`);\n try {\n await this.objects.writeFileAsync(adapter, _path, fs.readFileSync(`${root + uploadPath}/${file}`));\n } catch (err) {\n console.error(`Error: ${err.message}`);\n }\n }\n }\n }\n\n /**\n * Preprocess object before storing it in the backup file\n *\n * @param options object and host information\n */\n private async _preprocessObject(options: PreprocessObjectOptions): Promise<ioBroker.Object> {\n const { object, isCustomHostname, hostname, thisHostNameStartsWith } = options;\n\n if (!object || !object._id || !object.common) {\n return object;\n }\n\n if (!isCustomHostname) {\n if (object._id.match(/^system\\.adapter\\.([\\w\\d_-]+).(\\d+)$/) && object.common.host === hostname) {\n object.common.host = this.HOSTNAME_PLACEHOLDER;\n object.common.host = this.HOSTNAME_PLACEHOLDER;\n } else if (object._id.startsWith(thisHostNameStartsWith)) {\n object._id = object._id.replace(hostname, this.HOSTNAME_PLACEHOLDER_REPLACE);\n } else if (object._id === `system.host.${hostname}`) {\n object._id = `system.host.${this.HOSTNAME_PLACEHOLDER}`;\n object.common.name = object._id;\n object.common.hostname = this.HOSTNAME_PLACEHOLDER;\n if (object.native && object.native.os) {\n object.native.os.hostname = this.HOSTNAME_PLACEHOLDER;\n }\n\n object.common.name = object._id;\n object.common.hostname = this.HOSTNAME_PLACEHOLDER;\n if (object.native?.os) {\n object.native.os.hostname = this.HOSTNAME_PLACEHOLDER;\n }\n }\n }\n\n // Read all files\n if (object.type === 'meta' && object.common?.type === 'meta.user') {\n // do not process \"xxx.0. \" and \"xxx.0.\"\n if (object._id.trim() === object._id && object._id[object._id.length - 1] !== '.') {\n await this.copyDir(object._id, '', `${this.tmpDir}/backup/files/${object._id}`);\n }\n }\n\n // Read all files\n if (object.type === 'instance' && object.common?.dataFolder) {\n let dataFolderPath = object.common.dataFolder;\n\n if (dataFolderPath[0] !== '/' && !dataFolderPath.match(/^\\w:/)) {\n dataFolderPath = path.join(this.configDir, dataFolderPath);\n }\n\n if (fs.existsSync(dataFolderPath)) {\n try {\n this.copyFolderRecursiveSync(dataFolderPath, `${this.tmpDir}/backup`);\n } catch (e) {\n console.error(`host.${hostname} Could not backup \"${dataFolderPath}\" directory: ${e.message}`);\n this.removeTempBackupDir();\n throw new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_COPY_DIR });\n }\n }\n }\n\n return object;\n }\n\n private _copyBackupedFiles(backupDir: string): void {\n try {\n if (!fs.existsSync(backupDir)) {\n console.log('No additional files to restore');\n return;\n }\n const dirs = fs.readdirSync(backupDir);\n\n dirs.forEach(dir => {\n if (dir === 'files') {\n return;\n }\n const backupPath = path.join(backupDir, dir);\n let stat;\n try {\n if (!fs.existsSync(backupPath)) {\n return;\n }\n stat = fs.statSync(backupPath);\n } catch (e) {\n console.error(`Ignoring ${backupPath} because can not get file type: ${e.message}`);\n return;\n }\n if (stat.isDirectory()) {\n this.copyFolderRecursiveSync(backupPath, this.configDir);\n }\n });\n } catch (e) {\n console.error(`Ignoring ${backupDir} because can not read directory: ${e.message}`);\n }\n }\n\n /**\n * Restore JSONL backup after controller has been stopped\n *\n * @param options The restore options\n */\n private async _restoreJsonlBackup(options: RestoreAfterStopOptions): Promise<EXIT_CODES> {\n const { force, dontDeleteAdapters } = options;\n const hostname = tools.getHostName();\n\n const backupBaseDir = path.join(this.tmpDir, 'backup');\n\n let backupHostName = hostname;\n // Note: on backups created during migration no config exists\n let config: ioBroker.IoBrokerJson | undefined;\n\n if (await fs.pathExists(path.join(backupBaseDir, 'config.json'))) {\n config = (await fs.readJSON(path.join(backupBaseDir, 'config.json'))) as ioBroker.IoBrokerJson;\n backupHostName = config.system?.hostname || hostname;\n }\n\n // we need to find the host obj for the compatibility check\n const objFd = await open(path.join(backupBaseDir, 'objects.jsonl'));\n const rlObj = objFd.readLines();\n\n const hostObjArr: BackupObject[] = [];\n\n for await (let line of rlObj) {\n line = line.replace(this.HOSTNAME_PLACEHOLDER_REGEX, hostname);\n const obj: ioBroker.Object = JSON.parse(line);\n if (obj._id === `system.host.${backupHostName}`) {\n hostObjArr.push({ id: obj._id, value: obj });\n break;\n }\n }\n\n await objFd.close();\n\n // check that the same controller version is installed as it is contained in backup\n const exitCode = this._ensureCompatibility(controllerDir, backupHostName, hostObjArr, force);\n\n if (exitCode) {\n // we had an error\n return exitCode;\n }\n\n if (!dontDeleteAdapters) {\n // prevent having wrong versions of adapters\n await this._removeAllAdapters();\n }\n\n // restore ioBroker.json\n if (config) {\n fs.writeFileSync(tools.getConfigFileName(), JSON.stringify(config, null, 2));\n await this.connectToNewDatabase(config);\n }\n\n console.log(`host.${hostname} Clear all objects and states...`);\n await this.cleanDatabase(false);\n console.log(`host.${hostname} done.`);\n\n const objectsFd = await open(path.join(backupBaseDir, 'objects.jsonl'));\n const rlObjects = objectsFd.readLines();\n\n let count = 0;\n\n for await (let line of rlObjects) {\n line = line.replace(this.HOSTNAME_PLACEHOLDER_REGEX, hostname);\n const obj: ioBroker.Object = JSON.parse(line);\n await this._setObjHelper(obj);\n count++;\n }\n\n console.log(`${count} objects restored.`);\n\n await objectsFd.close();\n\n const statesFd = await open(path.join(backupBaseDir, 'states.jsonl'));\n const rlStates = statesFd.readLines();\n\n count = 0;\n\n for await (let line of rlStates) {\n line = line.replace(this.HOSTNAME_PLACEHOLDER_REGEX, hostname);\n const state: {\n id: string;\n state: ioBroker.State;\n } = JSON.parse(line);\n await this._setStateHelper(state.id, state.state);\n count++;\n }\n\n console.log(`${count} states restored.`);\n\n await statesFd.close();\n\n return EXIT_CODES.NO_ERROR;\n }\n\n /**\n * Restore after controller has been stopped\n *\n * @param options The restore options\n */\n private async _restoreAfterStop(options: RestoreAfterStopOptions): Promise<EXIT_CODES> {\n const { force, restartOnFinish, dontDeleteAdapters } = options;\n\n const backupBaseDir = path.join(this.tmpDir, 'backup');\n const isJsonl = await fs.pathExists(path.join(backupBaseDir, 'objects.jsonl'));\n\n if (isJsonl) {\n const exitCode = await this._restoreJsonlBackup(options);\n if (exitCode !== EXIT_CODES.NO_ERROR) {\n return exitCode;\n }\n } else {\n const hostname = tools.getHostName();\n console.log(`host.${hostname} Restore legacy backup.`);\n\n // Open file\n let data = fs.readFileSync(path.join(backupBaseDir, 'backup.json'), 'utf8');\n // replace all hostnames of instances etc with the new host\n data = data.replace(this.HOSTNAME_PLACEHOLDER_REGEX, hostname);\n fs.writeFileSync(path.join(backupBaseDir, 'backup_.json'), data);\n let restore: Backup;\n try {\n restore = JSON.parse(data);\n } catch (e) {\n console.error(`Cannot parse \"${path.join(backupBaseDir, 'backup_.json')}\": ${e.message}`);\n return EXIT_CODES.CANNOT_RESTORE_BACKUP;\n }\n\n if (!restore.objects) {\n console.error('The backup does not contain any objects.');\n return EXIT_CODES.CANNOT_RESTORE_BACKUP;\n }\n\n // check that the same controller version is installed as it is contained in backup\n const exitCode = this._ensureCompatibility(\n controllerDir,\n restore.config?.system?.hostname || hostname,\n restore.objects,\n force,\n );\n\n if (exitCode) {\n // we had an error\n return exitCode;\n }\n\n if (!dontDeleteAdapters) {\n // prevent having wrong versions of adapters\n await this._removeAllAdapters();\n }\n\n // restore ioBroker.json\n if (restore.config) {\n fs.writeFileSync(tools.getConfigFileName(), JSON.stringify(restore.config, null, 2));\n await this.connectToNewDatabase(restore.config);\n }\n\n console.log(`host.${hostname} Clear all objects and states...`);\n await this.cleanDatabase(false);\n console.log(`host.${hostname} done.`);\n\n const sList = Object.keys(restore.states);\n\n for (let i = 0; i < restore.objects.length; i++) {\n await this._setObjHelper(restore.objects[i].value);\n if (i % 200 === 0) {\n console.log(`host.${this.hostname} Processed ${i}/${restore.objects.length} objects`);\n }\n }\n\n console.log(`${restore.objects.length} objects restored.`);\n for (let i = 0; i < sList.length; i++) {\n const id = sList[i];\n await this._setStateHelper(id, restore.states[id]);\n if (i % 200 === 0) {\n console.log(`host.${this.hostname} Processed ${i}/${sList.length} states`);\n }\n }\n\n console.log(`${sList.length} states restored.`);\n }\n\n // Load user files into DB\n await this._uploadUserFiles(path.join(backupBaseDir, 'files'));\n // reload objects of adapters (if some couldn't be removed - normally this shouldn't be necessary anymore)\n await this._reloadAdaptersObjects();\n // Reload host objects\n const packageIO = fs.readJSONSync(path.join(controllerDir, 'io-package.json'));\n await this._reloadAdapterObject(packageIO ? packageIO.objects : null);\n // copy all files into iob-data\n this._copyBackupedFiles(backupBaseDir);\n // reinstall preserve adapters\n await this._restorePreservedAdapters();\n\n if (force) {\n // js-controller version has changed (setup never called for this version)\n console.log('Forced restore - executing setup ...');\n try {\n await execAsync(\n `\"${process.execPath}\" \"${path.join(controllerDir, `${tools.appName.toLowerCase()}.js`)}\" setup`,\n );\n } catch (e) {\n console.error(\n `Could not execute \"setup\" command, please ensure \"setup\" is called before starting ioBroker: ${e.message}`,\n );\n }\n }\n\n if (restartOnFinish) {\n console.log('restart');\n this.restartController();\n }\n\n return EXIT_CODES.NO_ERROR;\n }\n\n /**\n * Connects to the database which is configured in `iobroker.json`\n * Meant to be used after the configuration file has been overwritten\n *\n * @param config The new config, needed for logging purposes\n */\n private async connectToNewDatabase(config: ioBroker.IoBrokerJson): Promise<void> {\n console.log(\n `host.${this.hostname} Connecting to new DB \"${config.states.type}/${config.objects.type}\" (can take up to 20s) ...`,\n );\n await resetDbConnect();\n const { objects, states } = await dbConnectAsync(false);\n console.log(`host.${this.hostname} Successfully connected to new DB`);\n\n this.upload = new Upload({ states, objects });\n\n this.objects = objects;\n this.states = states;\n }\n\n /**\n * Removes all adapters\n */\n private async _removeAllAdapters(): Promise<void> {\n const nodeModulePath = path.join(controllerDir, '..');\n const nodeModuleDirs = fs.readdirSync(nodeModulePath, { withFileTypes: true });\n // we need to uninstall current adapters to get exact the same system as before backup\n for (const dir of nodeModuleDirs) {\n if (\n dir.isDirectory() &&\n dir.name.startsWith(`${tools.appName.toLowerCase()}.`) &&\n dir.name !== `${tools.appName.toLowerCase()}.js-controller`\n ) {\n try {\n const packJson = fs.readJsonSync(path.join(nodeModulePath, dir.name, 'package.json'));\n console.log(`Removing current installation of ${packJson.name}`);\n await tools.uninstallNodeModule(packJson.name);\n } catch {\n // ignore\n }\n }\n }\n }\n\n /**\n * Ensure that installed controller version matches version in backup\n *\n * @param controllerDir - directory of js-controller\n * @param backupHostname - hostname in backup file\n * @param backupObjects - the objects contained in the backup\n * @param force - if force is true, only log\n */\n private _ensureCompatibility(\n controllerDir: string,\n backupHostname: string,\n backupObjects: BackupObject[],\n force: boolean,\n ): void | number {\n try {\n const ioPackJson = fs.readJsonSync(path.join(controllerDir, 'io-package.json'));\n const hostObj = backupObjects.find(obj => obj.id === `system.host.${backupHostname}`);\n\n if (!hostObj) {\n console.error('No host object found, your backup seems to be corrupted!');\n return EXIT_CODES.CANNOT_RESTORE_BACKUP;\n }\n\n if (hostObj.value.common.installedVersion !== ioPackJson.common.version) {\n if (!force) {\n console.warn('The current version of js-controller differs from the version in the backup.');\n console.warn('The js-controller version of the backup can not be restored automatically.');\n console.warn(\n `To restore the js-controller version of the backup, execute \"npm i iobroker.js-controller@${hostObj.value.common.installedVersion} --omit=dev\" inside your ioBroker directory`,\n );\n console.warn(\n 'If you really want to restore the backup with the current installed js-controller, execute the restore command with the --force flag',\n );\n\n return EXIT_CODES.CANNOT_RESTORE_BACKUP;\n }\n console.info('The current version of js-controller differs from the version in the backup.');\n console.info('The js-controller version of the backup can not be restored automatically.');\n console.info('Note, that your backup might differ in behavior due to this version change!');\n }\n } catch {\n // ignore\n }\n }\n\n /**\n * Returns all backups as array\n */\n listBackups(): string[] {\n const dir = BackupRestore.getBackupDir();\n const result: string[] = [];\n if (fs.existsSync(dir)) {\n const files = fs.readdirSync(dir);\n for (const file of files) {\n if (file.match(/\\.tar\\.gz$/i)) {\n result.push(file);\n }\n }\n return result;\n }\n return result;\n }\n\n /**\n * Validates a JSONL-style backup and all json files inside the backup (in temporary directory)\n *\n * @param noConfig if the backup does not contain a `config.json` (used by setup custom migration)\n */\n private async _validateTempDirectory(noConfig = false): Promise<void> {\n const backupBaseDir = path.join(this.tmpDir, 'backup');\n\n if (!noConfig) {\n await fs.readJSON(path.join(backupBaseDir, 'config.json'));\n console.log(`host.${this.hostname} \"config.json\" is valid`);\n }\n\n if (!(await fs.pathExists(path.join(backupBaseDir, 'objects.jsonl')))) {\n throw new Error('Backup does not contain valid objects');\n }\n\n console.log(`host.${this.hostname} \"objects.jsonl\" exists`);\n\n if (!(await fs.pathExists(path.join(backupBaseDir, 'states.jsonl')))) {\n throw new Error('Backup does not contain valid states');\n }\n\n console.log(`host.${this.hostname} \"states.jsonl\" exists`);\n\n await this._validateDatabaseFiles();\n\n console.log(`host.${this.hostname} JSONL lines are valid`);\n\n // we check all other json files, we assume them as optional, because user created files may be no valid json\n try {\n this._checkDirectory(path.join(backupBaseDir, 'files'));\n } catch (e) {\n console.warn(`host.${this.hostname} One or more optional files are corrupted: ${e.message}`);\n console.warn(`host.${this.hostname} Please ensure that self-created JSON files are valid`);\n }\n }\n\n /**\n * Validate that the created JSONL files in the temporary directories are parseable\n */\n private async _validateDatabaseFiles(): Promise<void> {\n const backupBaseDir = path.join(this.tmpDir, 'backup');\n\n const objectsFd = await open(path.join(backupBaseDir, 'objects.jsonl'));\n const rlObjects = objectsFd.readLines();\n\n for await (const line of rlObjects) {\n try {\n JSON.parse(line);\n } catch (e) {\n throw new Error(`The \"objects.jsonl\" file is corrupted: ${e.message}`);\n }\n }\n\n await objectsFd.close();\n\n const statesFd = await open(path.join(backupBaseDir, 'states.jsonl'));\n const rlStates = statesFd.readLines();\n\n for await (const line of rlStates) {\n try {\n JSON.parse(line);\n } catch (e) {\n throw new Error(`The \"states.jsonl\" file is corrupted: ${e.message}`);\n }\n }\n\n await statesFd.close();\n }\n\n /**\n * Validates the given backup.json and all json files in the backup, calls processExit afterwards\n *\n * @param _name - index or name of the backup\n */\n async validateBackup(_name: string | number): Promise<void> {\n let backups;\n let name = typeof _name === 'number' ? _name.toString() : _name;\n\n if (!name) {\n backups = this.listBackups();\n backups.sort((a, b) => (b > a ? 1 : b === a ? 0 : -1));\n if (backups.length) {\n // List all available backups\n console.log('Please specify one of the backup names:');\n\n for (const t in backups) {\n console.log(`${backups[t]} or ${backups[t].replace(`${this.BACKUP_POSTFIX}.tar.gz`, '')} or ${t}`);\n }\n } else {\n console.warn(`No backups found. Create a backup, using \"${tools.appName} backup\" first`);\n }\n throw new IoBrokerError({ message: 'Backup not found', code: EXIT_CODES.INVALID_ARGUMENTS });\n }\n // If number\n if (parseInt(name, 10).toString() === name.toString()) {\n backups = this.listBackups();\n backups.sort((a, b) => (b > a ? 1 : b === a ? 0 : -1));\n name = backups[parseInt(name, 10)];\n if (!name) {\n console.log('No matching backup found');\n if (backups.length) {\n console.log('Please specify one of the backup names:');\n for (const t in backups) {\n console.log(\n `${backups[t]} or ${backups[t].replace(`${this.BACKUP_POSTFIX}.tar.gz`, '')} or ${t}`,\n );\n }\n } else {\n console.log(`No existing backups. Create a backup, using \"${tools.appName} backup\" first`);\n }\n\n throw new IoBrokerError({ message: 'Backup not found', code: EXIT_CODES.INVALID_ARGUMENTS });\n }\n console.log(`host.${this.hostname} Using backup file ${name}`);\n }\n\n name = name.toString().replace(/\\\\/g, '/');\n if (!name.includes('/')) {\n name = BackupRestore.getBackupDir() + name;\n const regEx = new RegExp(this.BACKUP_POSTFIX, 'i');\n if (!regEx.test(name)) {\n name += this.BACKUP_POSTFIX;\n }\n if (!name.match(/\\.tar\\.gz$/i)) {\n name += '.tar.gz';\n }\n }\n if (!fs.existsSync(name)) {\n console.error(`host.${this.hostname} Cannot find ${name}`);\n throw new IoBrokerError({ message: 'Backup not found', code: EXIT_CODES.INVALID_ARGUMENTS });\n }\n\n if (fs.existsSync(`${this.tmpDir}/backup/backup.json`)) {\n fs.unlinkSync(`${this.tmpDir}/backup/backup.json`);\n }\n\n try {\n await tar.extract({\n file: name,\n cwd: this.tmpDir,\n });\n } catch (e) {\n const errMessage = `Cannot extract from file \"${name}\": ${e.message}`;\n console.error(`host.${this.hostname} ${errMessage}`);\n throw new IoBrokerError({ message: 'Backup not found', code: EXIT_CODES.INVALID_ARGUMENTS });\n }\n\n try {\n if (fs.existsSync(path.join(this.tmpDir, 'backup', 'backup.json'))) {\n this._validateLegacyTempDir();\n } else {\n await this._validateTempDirectory();\n }\n } catch (e) {\n console.error(`host.${this.hostname} ${e.message}`);\n\n try {\n this.removeTempBackupDir();\n } catch (e) {\n console.error(`host.${this.hostname} Cannot clear temporary backup directory: ${e.message}`);\n }\n\n throw new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP });\n }\n\n try {\n this.removeTempBackupDir();\n } catch (e) {\n console.error(`host.${this.hostname} Cannot clear temporary backup directory: ${e.message}`);\n throw new IoBrokerError({ message: e.message, code: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP });\n }\n }\n\n /**\n * Validate an unpacked legacy backup in the temporary directory\n */\n private _validateLegacyTempDir(): void {\n console.log(`host.${this.hostname} Starting validation ...`);\n let backupJSON;\n try {\n backupJSON = fs.readJSONSync(`${this.tmpDir}/backup/backup.json`);\n } catch (e) {\n throw new Error(`Backup corrupted. Backup does not contain a valid backup.json file: ${e.message}`);\n }\n\n if (!backupJSON || !backupJSON.objects || !backupJSON.objects.length) {\n throw new Error(`host.${this.hostname} Backup corrupted. Backup does not contain valid objects`);\n }\n\n console.log(`host.${this.hostname} backup.json OK`);\n\n try {\n this._checkDirectory(`${this.tmpDir}/backup/files`, true);\n } catch (e) {\n throw new Error(`Backup corrupted: ${e.message}`);\n }\n }\n\n /**\n * Checks a directory for json files and validates them, steps down recursive in subdirectories\n *\n * @param path - path to the directory\n * @param verbose - if logging should be verbose\n */\n private _checkDirectory(path: string, verbose = false): void {\n if (fs.existsSync(path)) {\n const files = fs.readdirSync(path);\n if (!files.length) {\n return;\n }\n for (const file of files) {\n const filePath = `${path}/${file}`;\n if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {\n // if directory then check it\n this._checkDirectory(filePath, verbose);\n } else if (file.endsWith('.json')) {\n try {\n fs.readJSONSync(filePath);\n if (verbose) {\n console.log(`host.${this.hostname} ${file} OK`);\n }\n } catch {\n throw new Error(`host.${this.hostname} ${filePath} is not a valid json file`);\n }\n }\n }\n }\n }\n\n /**\n * Restores a backup\n *\n * @param options Restore options\n */\n async restoreBackup(options: RestoreBackupOptions): Promise<RestoreBackupReturnValue> {\n const { name: _name, dontDeleteAdapters, force } = options;\n\n let backups;\n let name = typeof _name === 'number' ? _name.toString() : _name;\n\n if (!name) {\n // List all available backups\n console.log('Please specify one of the backup names:');\n backups = this.listBackups();\n backups.sort((a, b) => (b > a ? 1 : b === a ? 0 : -1));\n if (backups.length) {\n backups.forEach((backup, i) =>\n console.log(`${backup} or ${backup.replace(`${this.BACKUP_POSTFIX}.tar.gz`, '')} or ${i}`),\n );\n } else {\n console.warn('No backups found');\n }\n return { exitCode: EXIT_CODES.INVALID_ARGUMENTS, objects: this.objects, states: this.states };\n }\n\n if (!this.cleanDatabase) {\n throw new Error('Invalid arguments: cleanDatabase is missing');\n }\n if (!this.restartController) {\n throw new Error('Invalid arguments: restartController is missing');\n }\n\n // If number\n if (parseInt(name, 10).toString() === name.toString()) {\n backups = this.listBackups();\n backups.sort((a, b) => (b > a ? 1 : b === a ? 0 : -1));\n name = backups[parseInt(name, 10)];\n if (!name) {\n console.log('No matching backup found');\n if (backups.length) {\n console.log('Please specify one of the backup names:');\n backups.forEach((backup, i) =>\n console.log(`${backup} or ${backup.replace(`${this.BACKUP_POSTFIX}.tar.gz`, '')} or ${i}`),\n );\n }\n } else {\n console.log(`host.${this.hostname} Using backup file ${name}`);\n }\n }\n\n name = name.toString().replace(/\\\\/g, '/');\n if (!name.includes('/')) {\n name = BackupRestore.getBackupDir() + name;\n const regEx = new RegExp(this.BACKUP_POSTFIX, 'i');\n if (!regEx.test(name)) {\n name += this.BACKUP_POSTFIX;\n }\n if (!name.match(/\\.tar\\.gz$/i)) {\n name += '.tar.gz';\n }\n }\n if (!fs.existsSync(name)) {\n console.error(`host.${this.hostname} Cannot find ${name}`);\n return { exitCode: EXIT_CODES.INVALID_ARGUMENTS, objects: this.objects, states: this.states };\n }\n\n const backupBasePath = path.join(this.tmpDir, 'backup');\n\n // delete /backup/backup.json\n if (fs.existsSync(path.join(backupBasePath, 'backup.json'))) {\n fs.unlinkSync(path.join(backupBasePath, 'backup.json'));\n }\n\n try {\n await tar.extract({\n file: name,\n cwd: this.tmpDir,\n });\n } catch (e) {\n console.error(`host.${this.hostname} Cannot extract from file \"${name}\": ${e.message}`);\n return { exitCode: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP, objects: this.objects, states: this.states };\n }\n\n if (\n !(await fs.pathExists(path.join(backupBasePath, 'backup.json'))) &&\n !(await fs.pathExists(path.join(backupBasePath, 'objects.jsonl')))\n ) {\n console.error(\n `host.${this.hostname} Cannot find extracted file \"${path.join(backupBasePath, 'backup.json')}\" or \"${path.join(backupBasePath, 'objects.jsonl')}\"`,\n );\n return { exitCode: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP, objects: this.objects, states: this.states };\n }\n\n await CLIProcess.stopJSController();\n const exitCode = await this._restoreAfterStop({\n restartOnFinish: false,\n force,\n dontDeleteAdapters,\n });\n\n this.removeTempBackupDir();\n\n return { exitCode, objects: this.objects, states: this.states };\n }\n\n /**\n * This method checks if adapter of PRESERVE_ADAPTERS exists, and re-installs them if this is the case\n */\n private async _restorePreservedAdapters(): Promise<void> {\n for (const adapterName of this.PRESERVE_ADAPTERS) {\n try {\n const adapterObj = await this.objects.getObject(`system.adapter.${adapterName}`);\n if (adapterObj?.common?.version) {\n let installSource;\n if (adapterObj.common.installedFrom) {\n installSource = adapterObj.common.installedFrom;\n } else {\n installSource = `${tools.appName.toLowerCase()}.${adapterName}@${adapterObj.common.version}`;\n }\n\n console.log(`Reinstalling adapter \"${adapterName}\" from \"${installSource}\"`);\n const res = await tools.installNodeModule(installSource);\n\n if (!res.success) {\n console.error(`Could not install adapter \"${adapterName}\" (${res.exitCode}): ${res.stderr}`);\n }\n }\n } catch (e) {\n console.error(`Could not ensure existence of adapter \"${adapterName}\": ${e.message}`);\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["path", "fs", "tar", "module", "p", "execAsync", "controllerDir", "e"]
|
|
7
7
|
}
|
|
@@ -55,17 +55,17 @@ export declare class Install {
|
|
|
55
55
|
/**
|
|
56
56
|
* Download given packet
|
|
57
57
|
*
|
|
58
|
-
* @param
|
|
59
|
-
* @param packetName
|
|
58
|
+
* @param repoUrlOrRepo repository url or already the repository object
|
|
59
|
+
* @param packetName name of the package to install
|
|
60
60
|
* @param options options.stopDb will stop the db before upgrade ONLY use it for controller upgrade - db is gone afterwards, does not work with stoppedList
|
|
61
|
-
* @param stoppedList
|
|
61
|
+
* @param stoppedList list of stopped instances (as instance objects)
|
|
62
62
|
*/
|
|
63
|
-
downloadPacket(
|
|
63
|
+
downloadPacket(repoUrlOrRepo: string | undefined | Record<string, any>, packetName: string, options?: CLIDownloadPacketOptions, stoppedList?: ioBroker.InstanceObject[]): Promise<DownloadPacketReturnObject>;
|
|
64
64
|
/**
|
|
65
65
|
* Install npm module from url
|
|
66
66
|
*
|
|
67
|
-
* @param npmUrl
|
|
68
|
-
* @param options
|
|
67
|
+
* @param npmUrl parameter passed to `npm install <npmUrl>`
|
|
68
|
+
* @param options additional packet download options
|
|
69
69
|
* @param debug if debug output should be printed
|
|
70
70
|
*/
|
|
71
71
|
private _npmInstallWithCheck;
|