@iobroker/js-controller-cli 7.0.2-alpha.0-20241026-8055a2557 → 7.0.3
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/cli/cliMessage.ts"],
|
|
4
4
|
"sourcesContent": ["import * as CLI from './messages.js';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { enumInstances } from './cliTools.js';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\n\nexport class CLIMessage extends CLICommand {\n /** @param options The CLI Message options */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed arguments\n */\n execute(args: any[]): void {\n const { callback, dbConnect, showHelp } = this.options;\n let [adapter, command, message] = args;\n if (adapter === null || adapter === undefined) {\n CLI.error.requiredArgumentMissing('adapter');\n showHelp();\n return void callback(1);\n }\n if (message === null || message === undefined) {\n if (command === null || command === undefined) {\n CLI.error.requiredArgumentMissing('message');\n showHelp();\n return void callback(1);\n }\n message = command;\n command = 'send';\n }\n // Try to parse JSON\n // TODO: can we use the methods from cliObjects?\n if (typeof message === 'string' && message.startsWith('{') && message.endsWith('}')) {\n message = JSON.parse(message);\n }\n\n dbConnect(async params => {\n const { states, objects } = params;\n\n try {\n const pos = adapter.indexOf('.');\n let instance = null;\n if (pos !== -1) {\n instance = adapter.substring(pos + 1);\n adapter = adapter.substring(0, pos);\n }\n let messageTargets = [];\n if (instance === null) {\n // This message wasn't meant for a specific instance,\n const adapterInstances = await enumInstances(objects, adapter);\n if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapter);\n return void callback(1);\n }\n messageTargets = adapterInstances.map(row => row._id);\n } else {\n messageTargets.unshift(`system.adapter.${adapter}.${instance}`);\n }\n\n // Send the message to all targets\n const messagePromises = messageTargets.map(t => sendMessage(states, t, command, message));\n await Promise.all(messagePromises);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * @param states The States DB\n * @param targetId The instance or adapter to send the message to\n * @param command The command to send\n * @param message The message to send\n */\nasync function sendMessage(states: StatesClient, targetId: string, command: string, message: string): Promise<void> {\n await states.pushMessage(targetId, { command, message, from: 'cli' });\n CLI.success.messageSent(targetId, command, message);\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,UAAqB;AACrB,wBAAmD;AACnD,sBAA8B;AAGxB,MAAO,mBAAmB,6BAAU;;EAEtC,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;;;;;;EAOA,QAAQ,MAAW;AACf,UAAM,EAAE,UAAU,WAAW,SAAQ,IAAK,KAAK;AAC/C,QAAI,CAAC,SAAS,SAAS,OAAO,IAAI;AAClC,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,UAAI,MAAM,wBAAwB,SAAS;AAC3C,eAAQ;AACR,aAAO,KAAK,SAAS,CAAC;IAC1B;AACA,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,UAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,YAAI,MAAM,wBAAwB,SAAS;AAC3C,iBAAQ;AACR,eAAO,KAAK,SAAS,CAAC;MAC1B;AACA,gBAAU;AACV,gBAAU;IACd;AAGA,QAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACjF,gBAAU,KAAK,MAAM,OAAO;IAChC;AAEA,cAAU,OAAM,WAAS;AACrB,YAAM,EAAE,QAAQ,QAAO,IAAK;AAE5B,UAAI;AACA,cAAM,MAAM,QAAQ,QAAQ,GAAG;AAC/B,YAAI,WAAW;AACf,YAAI,QAAQ,IAAI;AACZ,qBAAW,QAAQ,UAAU,MAAM,CAAC;AACpC,oBAAU,QAAQ,UAAU,GAAG,GAAG;QACtC;AACA,YAAI,iBAAiB,CAAA;AACrB,YAAI,aAAa,MAAM;AAEnB,gBAAM,mBAAmB,UAAM,+BAAc,SAAS,OAAO;AAC7D,cAAI,iBAAiB,WAAW,GAAG;AAC/B,gBAAI,MAAM,iBAAiB,OAAO;AAClC,mBAAO,KAAK,SAAS,CAAC;UAC1B;AACA,2BAAiB,iBAAiB,IAAI,SAAO,IAAI,GAAG;QACxD,OAAO;AACH,yBAAe,QAAQ,kBAAkB,OAAO,IAAI,QAAQ,EAAE;QAClE;AAGA,cAAM,kBAAkB,eAAe,IAAI,OAAK,YAAY,QAAQ,GAAG,SAAS,OAAO,CAAC;AACxF,cAAM,QAAQ,IAAI,eAAe;AACjC,eAAO,KAAK,SAAQ;MACxB,SAAS,KAAK;AACV,YAAI,MAAM,QAAQ,IAAI,OAAO;AAC7B,eAAO,KAAK,SAAS,CAAC;MAC1B;IACJ,CAAC;EACL;;AASJ,eAAe,YAAY,QAAsB,UAAkB,SAAiB,SAAe;AAC/F,QAAM,OAAO,YAAY,UAAU,EAAE,SAAS,SAAS,MAAM,MAAK,CAAE;AACpE,MAAI,QAAQ,YAAY,UAAU,SAAS,OAAO;AACtD;",
|
|
6
6
|
"names": []
|
|
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
|
));
|
|
@@ -35,6 +39,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
35
39
|
constructor(options) {
|
|
36
40
|
super(options);
|
|
37
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Executes a command
|
|
44
|
+
*
|
|
45
|
+
* @param args
|
|
46
|
+
*/
|
|
38
47
|
execute(args) {
|
|
39
48
|
const { callback, showHelp } = this.options;
|
|
40
49
|
const command = args[0];
|
|
@@ -69,6 +78,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
69
78
|
return void callback(3);
|
|
70
79
|
}
|
|
71
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Activates the usage of Redis Sets
|
|
83
|
+
*/
|
|
72
84
|
activateSets() {
|
|
73
85
|
const { callback, dbConnect } = this.options;
|
|
74
86
|
dbConnect(async (params) => {
|
|
@@ -91,6 +103,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
91
103
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
92
104
|
});
|
|
93
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Deactivates the usage of Redis Sets
|
|
108
|
+
*/
|
|
94
109
|
deactivateSets() {
|
|
95
110
|
const { callback, dbConnect } = this.options;
|
|
96
111
|
dbConnect(async (params) => {
|
|
@@ -105,6 +120,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
105
120
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
106
121
|
});
|
|
107
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the protocol version
|
|
125
|
+
*/
|
|
108
126
|
getDBVersion() {
|
|
109
127
|
const { callback, dbConnect } = this.options;
|
|
110
128
|
dbConnect(async (params) => {
|
|
@@ -114,6 +132,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
114
132
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
115
133
|
});
|
|
116
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Set protocol version
|
|
137
|
+
*/
|
|
117
138
|
setDBVersion() {
|
|
118
139
|
const { callback, dbConnect } = this.options;
|
|
119
140
|
dbConnect(async (params) => {
|
|
@@ -138,6 +159,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
138
159
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
139
160
|
});
|
|
140
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Changes access rights for all objects matching the pattern
|
|
164
|
+
*
|
|
165
|
+
* @param args
|
|
166
|
+
*/
|
|
141
167
|
chmod(args) {
|
|
142
168
|
const { callback, dbConnect } = this.options;
|
|
143
169
|
let [modeObject, modeState, pattern] = args.slice(1);
|
|
@@ -163,6 +189,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
163
189
|
});
|
|
164
190
|
});
|
|
165
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Changes owner for all objects matching the pattern
|
|
194
|
+
*
|
|
195
|
+
* @param args
|
|
196
|
+
*/
|
|
166
197
|
chown(args) {
|
|
167
198
|
const { callback, dbConnect } = this.options;
|
|
168
199
|
let [user, group, pattern] = args.slice(1);
|
|
@@ -190,6 +221,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
190
221
|
});
|
|
191
222
|
});
|
|
192
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Lists all objects matching a pattern and their access rights
|
|
226
|
+
*
|
|
227
|
+
* @param args
|
|
228
|
+
*/
|
|
193
229
|
list(args) {
|
|
194
230
|
const { callback, dbConnect } = this.options;
|
|
195
231
|
let pattern = args[1];
|
|
@@ -204,6 +240,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
204
240
|
});
|
|
205
241
|
});
|
|
206
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Retrieves an object or its property from the DB and prints it
|
|
245
|
+
*
|
|
246
|
+
* @param args
|
|
247
|
+
*/
|
|
207
248
|
get(args) {
|
|
208
249
|
const { callback, pretty, dbConnect } = this.options;
|
|
209
250
|
const [id, propPath] = args.slice(1);
|
|
@@ -231,6 +272,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
231
272
|
});
|
|
232
273
|
});
|
|
233
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Updates an object or its property with the given value
|
|
277
|
+
*
|
|
278
|
+
* @param args
|
|
279
|
+
*/
|
|
234
280
|
set(args) {
|
|
235
281
|
const { callback, dbConnect } = this.options;
|
|
236
282
|
const id = args[1];
|
|
@@ -279,6 +325,14 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
279
325
|
}
|
|
280
326
|
});
|
|
281
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Encrypts all newly set properties of encryptedNative - currently customized for propPath
|
|
330
|
+
*
|
|
331
|
+
* @param objects - objects db instance
|
|
332
|
+
* @param res - object which will be adapted
|
|
333
|
+
* @param propPath - path of the changed property
|
|
334
|
+
* @param value - value which has been newly set to the property
|
|
335
|
+
*/
|
|
282
336
|
async _autoEncrypt(objects, res, propPath, value) {
|
|
283
337
|
if (/^native\..+[^.]$/g.test(propPath) && typeof value === "string") {
|
|
284
338
|
const prop = propPath.split(".")[1];
|
|
@@ -304,6 +358,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
304
358
|
}
|
|
305
359
|
}
|
|
306
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* Extends an object with the given value
|
|
363
|
+
*
|
|
364
|
+
* @param args
|
|
365
|
+
*/
|
|
307
366
|
extend(args) {
|
|
308
367
|
const { callback, dbConnect } = this.options;
|
|
309
368
|
const id = args[1];
|
|
@@ -330,6 +389,12 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
330
389
|
});
|
|
331
390
|
});
|
|
332
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* Collects all object for specific path
|
|
394
|
+
*
|
|
395
|
+
* @param objects class
|
|
396
|
+
* @param params parameters for getObjectView
|
|
397
|
+
*/
|
|
333
398
|
async _collectObjects(objects, params) {
|
|
334
399
|
const types = [
|
|
335
400
|
"state",
|
|
@@ -359,6 +424,13 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
359
424
|
}
|
|
360
425
|
return result;
|
|
361
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* Delete all object from list sequentially
|
|
429
|
+
*
|
|
430
|
+
* @param objects class
|
|
431
|
+
* @param ids IDs
|
|
432
|
+
* @param callback
|
|
433
|
+
*/
|
|
362
434
|
async _deleteObjects(objects, ids, callback) {
|
|
363
435
|
if (!ids || !ids.length) {
|
|
364
436
|
return import_js_controller_common.tools.maybeCallback(callback, import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
@@ -379,6 +451,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
379
451
|
}
|
|
380
452
|
return import_js_controller_common.tools.maybeCallback(callback, import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
381
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Deletes an object
|
|
456
|
+
*
|
|
457
|
+
* @param args
|
|
458
|
+
*/
|
|
382
459
|
delete(args) {
|
|
383
460
|
const { callback, dbConnect } = this.options;
|
|
384
461
|
const id = args[1];
|
|
@@ -435,6 +512,14 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
435
512
|
}
|
|
436
513
|
});
|
|
437
514
|
}
|
|
515
|
+
/**
|
|
516
|
+
* Prints a list of objects and its access properties
|
|
517
|
+
*
|
|
518
|
+
* @param objects objects db
|
|
519
|
+
* @param states states db
|
|
520
|
+
* @param err An error (if one occurred)
|
|
521
|
+
* @param objList The object list to print
|
|
522
|
+
*/
|
|
438
523
|
async printObjectList(objects, states, err, objList) {
|
|
439
524
|
const { callback } = this.options;
|
|
440
525
|
if (err) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliObjects.ts"],
|
|
4
4
|
"sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\n\nimport * as CLI from './messages.js';\nimport { formatValue } from './cliTools.js';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\n\ninterface ParsedPropPathAndAssignment {\n propPath?: string;\n value: unknown;\n}\n\n/** Command iobroker object ... */\nexport class CLIObjects extends CLICommand {\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args\n */\n execute(args: any[]): void {\n const { callback, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'chmod':\n return this.chmod(args);\n case 'chown':\n return this.chown(args);\n case 'list':\n case 'l':\n return this.list(args);\n case 'get':\n return this.get(args);\n case 'set':\n return this.set(args);\n case 'extend':\n return this.extend(args);\n case 'delete':\n case 'del':\n return this.delete(args);\n case 'getDBVersion':\n return this.getDBVersion();\n case 'setDBVersion':\n return this.setDBVersion();\n case 'activateSets':\n return this.activateSets();\n case 'deactivateSets':\n return this.deactivateSets();\n default:\n CLI.error.unknownCommand('object', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Activates the usage of Redis Sets\n */\n activateSets(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states, objects } = params;\n\n const useSetsIndicator = await objects.getMeta('objects.features.useSets');\n\n if (!useSetsIndicator || !parseInt(useSetsIndicator)) {\n // all hosts need to be stopped for this\n if (await tools.isHostRunning(objects, states)) {\n console.log('Cannot activate the usage of Redis Sets while one or more hosts are running');\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n await objects.activateSets();\n const noMigrated = await objects.migrateToSets();\n\n if (noMigrated) {\n console.log(`Successfully migrated ${noMigrated} objects to Redis Sets`);\n }\n console.log(\n `Successfully activated the usage of Redis Sets. Please make sure to only use js-controller 4.0 or higher on all hosts!`,\n );\n } else {\n console.log('Redis Sets are already activated.');\n }\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Deactivates the usage of Redis Sets\n */\n deactivateSets(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n const useSetsIndicator = await objects.getMeta('objects.features.useSets');\n\n if (useSetsIndicator && parseInt(useSetsIndicator)) {\n await objects.deactivateSets();\n console.log(`Successfully deactivated the usage of Redis Sets.`);\n } else {\n console.log('Redis Sets are already deactivated.');\n }\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Get the protocol version\n */\n getDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n\n const version = await objects.getProtocolVersion();\n console.log(`Current Objects DB protocol version: ${version}`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Set protocol version\n */\n setDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n const rl = await import('readline-sync');\n\n let answer = rl.question('Changing the protocol version will restart all hosts! Continue? [N/y]', {\n limit: /^(yes|y|n|no)$/i,\n defaultInput: 'no',\n });\n\n answer = answer.toLowerCase();\n\n if (answer !== 'y' && answer !== 'yes') {\n console.log('Protocol version has not been changed!');\n return void callback(EXIT_CODES.NO_ERROR);\n }\n\n try {\n await objects.setProtocolVersion(this.options.version);\n } catch (e) {\n console.error(`Cannot update protocol version: ${e.message}`);\n return void callback(1);\n }\n console.log(`Objects DB protocol updated to version ${this.options.version}`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Changes access rights for all objects matching the pattern\n *\n * @param args\n */\n chmod(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let [modeObject, modeState, pattern] = args.slice(1);\n\n // Yargs converts numeric string to number, so we can use that to test\n // Afterwards we parse them ourselves, but with base16\n if (typeof modeObject !== 'number') {\n CLI.error.requiredArgumentMissing('mode', 'object chmod 644 system.*');\n return void callback(1);\n }\n modeObject = parseInt(modeObject.toString(), 16);\n\n if (typeof modeState === 'number') {\n // a mode for the state was given, convert it\n modeState = parseInt(modeState.toString(), 16);\n } else {\n pattern = modeState;\n modeState = undefined;\n }\n\n if (pattern === undefined) {\n CLI.error.requiredArgumentMissing('pattern', 'object chmod 644 system.*');\n return void callback(1);\n }\n\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.chmodObject(\n pattern,\n { user: 'system.user.admin', object: modeObject, state: modeState },\n (err, processed) => {\n // Print the new object rights\n this.printObjectList(objects, states, err?.message, processed);\n },\n );\n });\n }\n\n /**\n * Changes owner for all objects matching the pattern\n *\n * @param args\n */\n chown(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let [user, group, pattern] = args.slice(1);\n\n if (!pattern) {\n pattern = group;\n group = undefined;\n }\n\n if (!user) {\n CLI.error.requiredArgumentMissing('user', 'object chown user system.*');\n return void callback(1);\n } else if (!user.startsWith('system.user.')) {\n user = `system.user.${user}`;\n }\n if (group && !group.startsWith('system.group.')) {\n group = `system.group.${group}`;\n }\n\n if (!pattern) {\n CLI.error.requiredArgumentMissing('pattern', 'object chown user system.*');\n return void callback(1);\n }\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.chownObject(\n pattern,\n { user: 'system.user.admin', owner: user, ownerGroup: group },\n (err, processed) => {\n // Print the new object rights\n this.printObjectList(objects, states, err?.message, processed);\n },\n );\n });\n }\n\n /**\n * Lists all objects matching a pattern and their access rights\n *\n * @param args\n */\n list(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let pattern = args[1];\n if (typeof pattern === 'string') {\n pattern = { startkey: pattern.replace('*', ''), endkey: pattern.replace('*', '\\u9999') };\n }\n\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.getObjectList(pattern, { user: 'system.user.admin', sorted: true }, (err, processed) => {\n this.printObjectList(\n objects,\n states,\n err?.message,\n processed && processed.rows && processed.rows.map(r => r.value),\n );\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Retrieves an object or its property from the DB and prints it\n *\n * @param args\n */\n get(args: any[]): void {\n const { callback, pretty, dbConnect } = this.options;\n const [id, propPath] = args.slice(1);\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object get id [propertypath]');\n return void callback(1);\n }\n\n // If propPath is passed, the given property will be retrieved instead.\n // For example: `\"native.something[2].onething\"` selects `onething` of the 3rd array element of `object.native.something`.\n\n dbConnect(params => {\n const { objects } = params;\n\n objects.getObject(id, (err, res) => {\n if (err || !res) {\n CLI.error.objectNotFound(id, err?.message);\n return void callback(3);\n }\n if (typeof propPath === 'string') {\n // We want to select a part of the object\n try {\n res = deepSelectProperty(res, propPath);\n } catch {\n CLI.error.objectPropertyNotFound(id, propPath);\n return void callback(3);\n }\n }\n console.log(formatValue(res, pretty));\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Updates an object or its property with the given value\n *\n * @param args\n */\n set(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object set id [propertypath=]value');\n return void callback(1);\n }\n\n const lastArg = args.length >= 2 ? args.slice(2).join(' ') : undefined;\n const parsedArg = parsePropPathAndAssignment(lastArg!);\n if (!parsedArg) {\n CLI.error.invalidPropertyOrValue();\n return void callback(3);\n }\n const { propPath, value } = parsedArg;\n\n dbConnect(params => {\n const { objects } = params;\n\n const doSetObject = (obj: any): void => {\n objects.setObject(id, obj, err => {\n if (err) {\n CLI.error.cannotUpdateObject(id, err.message);\n return void callback(1);\n }\n CLI.success.objectUpdated(id);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n };\n if (!propPath) {\n // We set the entire object, no need to retrieve it first\n doSetObject(value as any);\n } else {\n // We want to update a part of the object\n // Retrieve the object first\n objects.getObject(id, async (err, res) => {\n if (err || !res) {\n CLI.error.objectNotFound(id, err?.message);\n return void callback(3);\n }\n try {\n deepSetProperty(res, propPath, value);\n } catch {\n CLI.error.objectPropertyNotFound(id, propPath);\n return void callback(3);\n }\n\n // auto encrypt -> only do that here, no one configures an instance by setting the whole object,\n // else it would be copied and probably already encrypted\n if (\n /^system\\.adapter\\.(?<adapterName>.+)\\.(?<instanceNr>\\d+)$/g.test(id) &&\n 'encryptedNative' in res\n ) {\n await this._autoEncrypt(objects, res, propPath, value);\n }\n\n doSetObject(res);\n });\n }\n });\n }\n\n /**\n * Encrypts all newly set properties of encryptedNative - currently customized for propPath\n *\n * @param objects - objects db instance\n * @param res - object which will be adapted\n * @param propPath - path of the changed property\n * @param value - value which has been newly set to the property\n */\n private async _autoEncrypt(\n objects: ObjectsClient,\n res: ioBroker.AnyObject,\n propPath: string,\n value: any,\n ): Promise<void> {\n // input: it's an instance object and has encrypted native, was a native value set?\n if (/^native\\..+[^.]$/g.test(propPath) && typeof value === 'string') {\n // single native property\n const prop = propPath.split('.')[1];\n if ('encryptedNative' in res && res.encryptedNative?.includes(prop)) {\n try {\n const config = await objects.getObjectAsync('system.config');\n res.native[prop] = tools.encrypt(config!.native.secret, res.native[prop]);\n } catch (e) {\n console.error(`Could not auto-encrypt property \"${prop}\": ${e.message}`);\n }\n }\n } else if (propPath === 'native' && tools.isObject(value)) {\n // whole native attribute\n let config;\n for (const prop in value) {\n if (\n typeof (res.native as Record<string, any>)[prop] === 'string' &&\n 'encryptedNative' in res &&\n res.encryptedNative?.includes(prop)\n ) {\n try {\n config = config || (await objects.getObjectAsync('system.config'))!;\n res.native[prop] = tools.encrypt(config.native.secret, res.native[prop]);\n } catch (e) {\n console.error(`Could not auto-encrypt property \"${prop}\": ${e.message}`);\n }\n }\n }\n }\n }\n\n /**\n * Extends an object with the given value\n *\n * @param args\n */\n extend(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object extend id <json-value>');\n return void callback(1);\n }\n\n const lastArg = args.length >= 2 ? args.slice(2).join(' ') : undefined;\n const parsedArg = parsePropPathAndAssignment(lastArg!);\n // extend does not accept a property path, so error when one is passed\n if (!parsedArg || parsedArg.propPath) {\n CLI.error.invalidJSONValue();\n return void callback(3);\n }\n const { value } = parsedArg;\n\n dbConnect(params => {\n const { objects } = params;\n\n objects.extendObject(id, value as any, null, err => {\n if (err) {\n CLI.error.cannotUpdateObject(id, err.message);\n return void callback(1);\n }\n CLI.success.objectUpdated(id);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Collects all object for specific path\n *\n * @param objects class\n * @param params parameters for getObjectView\n */\n async _collectObjects(objects: ObjectsClient, params: ioBroker.GetObjectViewParams): Promise<ioBroker.AnyObject[]> {\n const types = [\n 'state',\n 'channel',\n 'device',\n 'enum',\n 'instance',\n 'host',\n 'adapter',\n 'meta',\n 'config',\n 'group',\n 'user',\n 'script',\n ];\n const result: ioBroker.AnyObject[] = [];\n\n for (const type of types) {\n try {\n const res = await objects.getObjectViewAsync('system', type, params);\n res.rows.forEach(item => {\n if (item.value) {\n result.push(item.value);\n }\n });\n } catch {\n // ignore\n }\n }\n return result;\n }\n\n /**\n * Delete all object from list sequentially\n *\n * @param objects class\n * @param ids IDs\n * @param callback\n */\n async _deleteObjects(objects: ObjectsClient, ids: string[], callback: (exitCode: number) => void): Promise<void> {\n if (!ids || !ids.length) {\n return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR);\n }\n let allEnums;\n\n try {\n // cache all enums, else it will be slow to delete many objects\n allEnums = await tools.getAllEnums(objects);\n } catch (e) {\n console.error(`Could not retrieve all enums: ${e.message}`);\n }\n\n for (const id of ids) {\n try {\n await objects.delObjectAsync(id);\n await tools.removeIdFromAllEnums(objects, id, allEnums);\n } catch (e) {\n console.warn(`Could not delete object or remove \"${id}\" from enums: ${e.message}`);\n }\n }\n return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR);\n }\n\n /**\n * Deletes an object\n *\n * @param args\n */\n delete(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object delete id');\n return void callback(1);\n }\n\n dbConnect(async params => {\n const { objects } = params;\n\n if (id.endsWith('*')) {\n const params = {\n startkey: id.replace(/\\*/g, ''),\n endkey: id.replace(/\\*/g, '\\u9999'),\n };\n\n const result = await this._collectObjects(objects, params);\n if (!result || !result.length) {\n console.log('No IDs found for this pattern.');\n return void callback(EXIT_CODES.NO_ERROR);\n }\n const ids = result.map(item => item._id);\n\n // if no auto confirmation, ask user\n if (!this.options.f && this.options.y && !this.options.yes) {\n const rl = (await import('node:readline')).createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(`${result.length} object(s) will be deleted. Are you sure? [y/N]: `, answer => {\n rl.close();\n if (\n answer === 'y' ||\n answer === 'yes' ||\n answer === 'j' ||\n answer === 'ja' ||\n answer === '\u0434\u0430' ||\n answer === '\u0434'\n ) {\n this._deleteObjects(objects, ids, callback);\n } else {\n console.log('Aborted.');\n return void callback(3);\n }\n });\n } else {\n this._deleteObjects(objects, ids, callback);\n }\n } else {\n // only one object\n objects.delObject(id, async err => {\n if (err) {\n CLI.error.objectNotFound(id, err.message);\n callback(3);\n } else {\n try {\n await tools.removeIdFromAllEnums(objects, id);\n CLI.success.objectDeleted(id);\n callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n CLI.error.cannotDeleteObjectFromEnums(id, e.message);\n callback(3);\n }\n }\n });\n }\n });\n }\n\n /**\n * Prints a list of objects and its access properties\n *\n * @param objects objects db\n * @param states states db\n * @param err An error (if one occurred)\n * @param objList The object list to print\n */\n async printObjectList(\n objects: ObjectsClient,\n states: StatesClient,\n err: string | undefined,\n objList?: ioBroker.AnyObject[],\n ): Promise<void> {\n // TODO: is this supposed to be here?\n const { callback } = this.options;\n if (err) {\n console.error(err);\n return void callback(33);\n }\n if (objList !== null && objList !== undefined) {\n const { List } = await import('../setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback,\n });\n list.showObjectHeader();\n objList.forEach(list.showObject);\n }\n setTimeout(callback, 1_000);\n }\n}\n\n/**\n * Reverses a string\n *\n * @param str The string to reverse\n */\nfunction reverseString(str: string): string {\n return Array.from(str).reverse().join('');\n}\n\n/**\n * Normalizes a property path for use in deepSelectProperty and deepSetProperty\n *\n * @param path The property path to normalize\n */\nfunction normalizePropertyPath(path: string): string {\n // Basically we want to support paths like \"obj[1][2]\", but the other methods expect \"obj.[1].[2]\"\n // So we need to replace all occurences of square brackets without leading dots\n // JS Regex only supports negative lookbehind in ES 2018, so we fake it using reversed strings and\n // negative lookahead\n const arrayIndexRegex = /(]\\d+\\[)(?!\\.)/g; // Reversing the string reverses the brackets too\n let ret = reverseString(path);\n // Append the dot to each bracket, since we're going to reverse it\n ret = ret.replace(arrayIndexRegex, '$1.');\n return reverseString(ret);\n}\n\n/**\n * Selects a property of an object or its sub-objects and returns it if it exists. E.g.\n * `deepSelectProperty(obj, \"common.asdf.qwer\")` => `obj.common.asdf.qwer`\n *\n * @param object The object to select a property from\n * @param path The property path to search for\n */\nfunction deepSelectProperty(object: ioBroker.AnyObject, path: string): any {\n /**\n * @param obj\n * @param pathArr\n */\n function _deepSelectProperty(obj: any, pathArr: string[]): unknown {\n // are we there yet? then return obj\n if (!pathArr.length) {\n return obj;\n }\n // go deeper\n let propName = pathArr.shift()!;\n if (/\\[\\d+]/.test(propName)) {\n // this is an array index\n // @ts-expect-error // TODO: fix it - this is not ts fashion, assigning numbers to the string array here\n propName = parseInt(propName.slice(1, -1));\n }\n return _deepSelectProperty(obj[propName], pathArr);\n }\n path = normalizePropertyPath(path);\n return _deepSelectProperty(object, path.split('.'));\n}\n\n/**\n * Changes a property of an object or its sub-objects if it exists. Opposite of `deepSelectProperty`.\n *\n * @param object The object to replace a property in\n * @param path The property path to search for\n * @param value\n */\nfunction deepSetProperty(object: ioBroker.AnyObject, path: string, value: any): void {\n /**\n * @param obj\n * @param pathArr\n */\n function _deepSetProperty(obj: any, pathArr: string[]): void {\n // are we there yet? then return obj\n if (pathArr.length === 1) {\n obj[pathArr[0]] = value;\n return;\n }\n // go deeper\n let propName = pathArr.shift()!;\n if (/\\[\\d+]/.test(propName)) {\n // this is an array index\n // @ts-expect-error // TODO: fix it - this is not ts fashion, assigning numbers to the string array here\n propName = parseInt(propName.slice(1, -1));\n }\n _deepSetProperty(obj[propName], pathArr);\n }\n path = normalizePropertyPath(path);\n _deepSetProperty(object, path.split('.'));\n}\n\n/**\n * Tries to parse a CLI argument that could be used to set an object\n *\n * @param arg The CLI argument containing the value to be set\n */\nfunction parseCLIValue(arg: string): any {\n try {\n // JSON.parse does not allow plain strings\n return JSON.parse(arg);\n } catch {\n // arg is a string\n return arg;\n }\n}\n\n/**\n * Tries to parse a CLI argument of the form [propPath=]value.\n *\n * @param arg The CLI argument containing an optional prop path and a JSON value\n */\nfunction parsePropPathAndAssignment(arg: string): ParsedPropPathAndAssignment | undefined {\n const equalsIndex = arg.indexOf('=');\n if (equalsIndex > -1) {\n // This might contain a propPath AND a value\n const propPath = arg.substr(0, equalsIndex);\n const valueString = arg.substr(equalsIndex + 1);\n // For partial assignments, allow strings as the value\n const value = parseCLIValue(valueString);\n return { propPath, value };\n }\n // This is a full assignment, allow only objects\n try {\n const value = JSON.parse(arg);\n if (!tools.isObject(value)) {\n return undefined;\n }\n return { value };\n } catch {\n // nope!\n return undefined;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["params"]
|
|
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
|
));
|
|
@@ -27,6 +31,7 @@ __export(cliPlugin_exports, {
|
|
|
27
31
|
CLIPlugin: () => CLIPlugin
|
|
28
32
|
});
|
|
29
33
|
module.exports = __toCommonJS(cliPlugin_exports);
|
|
34
|
+
var __import_meta_url = typeof document === "undefined" ? new (require("url".replace("", ""))).URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
|
|
30
35
|
var CLI = __toESM(require("./messages.js"), 1);
|
|
31
36
|
var import_cliCommand = require("./cliCommand.js");
|
|
32
37
|
var import_cliTools = require("./cliTools.js");
|
|
@@ -34,13 +39,18 @@ var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
|
34
39
|
var import_fs_extra = __toESM(require("fs-extra"), 1);
|
|
35
40
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
36
41
|
var import_node_module = require("node:module");
|
|
37
|
-
const
|
|
38
|
-
const require2 = (0, import_node_module.createRequire)(import_meta.url || `file://${__filename}`);
|
|
42
|
+
const require2 = (0, import_node_module.createRequire)(__import_meta_url || `file://${__filename}`);
|
|
39
43
|
const controllerIoPackPath = require2.resolve("iobroker.js-controller/io-package.json");
|
|
40
44
|
class CLIPlugin extends import_cliCommand.CLICommand {
|
|
45
|
+
/** @param options the cli command options */
|
|
41
46
|
constructor(options) {
|
|
42
47
|
super(options);
|
|
43
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Executes a command
|
|
51
|
+
*
|
|
52
|
+
* @param args parsed cli args
|
|
53
|
+
*/
|
|
44
54
|
execute(args) {
|
|
45
55
|
const { callback, showHelp } = this.options;
|
|
46
56
|
const command = args[0];
|
|
@@ -59,6 +69,12 @@ class CLIPlugin extends import_cliCommand.CLICommand {
|
|
|
59
69
|
return void callback(3);
|
|
60
70
|
}
|
|
61
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Enables or disables the given plugin
|
|
74
|
+
*
|
|
75
|
+
* @param args the parsed CLI args
|
|
76
|
+
* @param enabled if plugin should be enabled
|
|
77
|
+
*/
|
|
62
78
|
set(args, enabled) {
|
|
63
79
|
const { callback, dbConnect } = this.options;
|
|
64
80
|
const pluginName = args[1];
|
|
@@ -148,6 +164,11 @@ class CLIPlugin extends import_cliCommand.CLICommand {
|
|
|
148
164
|
}
|
|
149
165
|
});
|
|
150
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Prints the status of the given plugin
|
|
169
|
+
*
|
|
170
|
+
* @param args the parsed CLI arguments
|
|
171
|
+
*/
|
|
151
172
|
status(args) {
|
|
152
173
|
const { callback, dbConnect } = this.options;
|
|
153
174
|
const pluginName = args[1];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/lib/cli/cliPlugin.ts"],
|
|
4
|
-
"sourcesContent": ["import * as CLI from './messages.js';\nimport { type CLICommandOptions, CLICommand } from './cliCommand.js';\nimport { getObjectFrom } from './cliTools.js';\nimport { tools } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst controllerIoPackPath = require.resolve('iobroker.js-controller/io-package.json');\n\ninterface CLIPluginOptions extends CLICommandOptions {\n /** If plugin is scoped on adapter */\n adapter?: string;\n /** If plugin is scoped on instance */\n instance?: string;\n}\n\n/** Command iobroker plugin <enable/disable/status> <pluginname> [--host this/hostname] ... */\nexport class CLIPlugin extends CLICommand<CLIPluginOptions> {\n /** @param options the cli command options */\n constructor(options: CLIPluginOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed cli args\n */\n execute(args: any[]): void {\n const { callback, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'on':\n case 'enable':\n return this.set(args, true);\n case 'off':\n case 'disable':\n return this.set(args, false);\n case 'status':\n return this.status(args);\n default:\n CLI.error.unknownCommand('plugin', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Enables or disables the given plugin\n *\n * @param args the parsed CLI args\n * @param enabled if plugin should be enabled\n */\n set(args: any[], enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n const pluginName: string = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin enable <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n // Create the plugin state if it does not exist\n const pluginsFolderId = `${objectNamespace}.plugins`;\n if (!(await objects.getObjectAsync(pluginsFolderId))) {\n await objects.setObject(pluginsFolderId, {\n type: 'folder',\n common: {\n name: `${hostname ? 'host' : 'instance'}: plugin states`,\n },\n native: {},\n });\n }\n const pluginFolderId = `${objectNamespace}.plugins.${pluginName}`;\n if (!(await objects.getObjectAsync(pluginFolderId))) {\n await objects.setObject(pluginFolderId, {\n type: 'folder',\n common: {\n name: `${pluginName}: plugin states`,\n },\n native: {},\n });\n }\n const pluginEnabledId = `${pluginFolderId}.enabled`;\n if (!(await objects.getObjectAsync(pluginEnabledId))) {\n await objects.setObject(pluginEnabledId, {\n type: 'state',\n common: {\n name: 'Plugin enabled',\n type: 'boolean',\n read: true,\n write: true,\n role: 'value',\n },\n native: {},\n });\n }\n\n // Update the state\n await states.setStateAsync(pluginEnabledId, {\n val: enabled,\n from: getObjectFrom(),\n });\n\n // Notify the user that we are done\n CLI.success.pluginEnabledOrDisabled(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Prints the status of the given plugin\n *\n * @param args the parsed CLI arguments\n */\n status(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const pluginName = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin status <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n const pluginEnabledId = `${objectNamespace}.plugins.${pluginName}.enabled`;\n\n // Read the state\n try {\n const val = (await states.getStateAsync(pluginEnabledId))?.val;\n\n if (typeof val === 'boolean') {\n CLI.success.pluginStatus(pluginName, hostname, instance, val);\n return void callback();\n }\n } catch {\n /* ignore */\n }\n\n // If the state could not be read or had no value, fall back to the configuration\n const enabled = pluginEnabled(\n pluginName,\n instance,\n await objects.getObjectAsync('system.config'),\n iobrokerJson,\n );\n CLI.success.pluginStatus(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName\n * @param iobrokerJson The contents of iobroker.json\n * @param [adapter] (optional) - If passed, the adapter configuration will be searched for defined plugins instead of js-controller\n */\nfunction pluginExists(pluginName: string, iobrokerJson?: ioBroker.IoBrokerJson, adapter?: string): boolean {\n // 1. check if the plugin is defined in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (ioPack?.common?.plugins && pluginName in ioPack.common.plugins) {\n return true;\n }\n } catch {\n /* ignore */\n }\n\n // 2. check if the plugin is defined in iobroker.json\n return !!(iobrokerJson?.plugins && pluginName in iobrokerJson.plugins);\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName name of the plugin, e.g. `sentry`\n * @param adapter If defined, the adapter configuration will be searched for defined plugins instead of js-controller\n * @param systemConfig The system.config object\n * @param iobrokerJson The contents of iobroker.json\n */\nfunction pluginEnabled(\n pluginName: string,\n adapter?: string,\n systemConfig?: ioBroker.SystemConfigObject | null,\n iobrokerJson?: ioBroker.IoBrokerJson,\n): boolean {\n // 1. check if diagnostics are disabled in ioBroker\n if (systemConfig?.common?.diag === 'none') {\n return false;\n }\n\n // 2. check if the plugin is disabled in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (\n ioPack?.common?.plugins &&\n pluginName in ioPack.common.plugins &&\n ioPack.common.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n } catch {\n /* ignore */\n }\n\n // 3. check if the plugin is disabled in iobroker.json\n if (\n iobrokerJson?.plugins &&\n pluginName in iobrokerJson.plugins &&\n iobrokerJson.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n\n // default: enabled\n return true;\n}\n"],
|
|
5
|
-
"mappings": "
|
|
3
|
+
"sources": ["../../../../src/lib/cli/cliPlugin.ts", "../../../../../../node_modules/@alcalzone/esm2cjs/shims/import.meta.url/shim.js"],
|
|
4
|
+
"sourcesContent": ["import * as CLI from './messages.js';\nimport { type CLICommandOptions, CLICommand } from './cliCommand.js';\nimport { getObjectFrom } from './cliTools.js';\nimport { tools } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst controllerIoPackPath = require.resolve('iobroker.js-controller/io-package.json');\n\ninterface CLIPluginOptions extends CLICommandOptions {\n /** If plugin is scoped on adapter */\n adapter?: string;\n /** If plugin is scoped on instance */\n instance?: string;\n}\n\n/** Command iobroker plugin <enable/disable/status> <pluginname> [--host this/hostname] ... */\nexport class CLIPlugin extends CLICommand<CLIPluginOptions> {\n /** @param options the cli command options */\n constructor(options: CLIPluginOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed cli args\n */\n execute(args: any[]): void {\n const { callback, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'on':\n case 'enable':\n return this.set(args, true);\n case 'off':\n case 'disable':\n return this.set(args, false);\n case 'status':\n return this.status(args);\n default:\n CLI.error.unknownCommand('plugin', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Enables or disables the given plugin\n *\n * @param args the parsed CLI args\n * @param enabled if plugin should be enabled\n */\n set(args: any[], enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n const pluginName: string = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin enable <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n // Create the plugin state if it does not exist\n const pluginsFolderId = `${objectNamespace}.plugins`;\n if (!(await objects.getObjectAsync(pluginsFolderId))) {\n await objects.setObject(pluginsFolderId, {\n type: 'folder',\n common: {\n name: `${hostname ? 'host' : 'instance'}: plugin states`,\n },\n native: {},\n });\n }\n const pluginFolderId = `${objectNamespace}.plugins.${pluginName}`;\n if (!(await objects.getObjectAsync(pluginFolderId))) {\n await objects.setObject(pluginFolderId, {\n type: 'folder',\n common: {\n name: `${pluginName}: plugin states`,\n },\n native: {},\n });\n }\n const pluginEnabledId = `${pluginFolderId}.enabled`;\n if (!(await objects.getObjectAsync(pluginEnabledId))) {\n await objects.setObject(pluginEnabledId, {\n type: 'state',\n common: {\n name: 'Plugin enabled',\n type: 'boolean',\n read: true,\n write: true,\n role: 'value',\n },\n native: {},\n });\n }\n\n // Update the state\n await states.setStateAsync(pluginEnabledId, {\n val: enabled,\n from: getObjectFrom(),\n });\n\n // Notify the user that we are done\n CLI.success.pluginEnabledOrDisabled(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Prints the status of the given plugin\n *\n * @param args the parsed CLI arguments\n */\n status(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const pluginName = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin status <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n const pluginEnabledId = `${objectNamespace}.plugins.${pluginName}.enabled`;\n\n // Read the state\n try {\n const val = (await states.getStateAsync(pluginEnabledId))?.val;\n\n if (typeof val === 'boolean') {\n CLI.success.pluginStatus(pluginName, hostname, instance, val);\n return void callback();\n }\n } catch {\n /* ignore */\n }\n\n // If the state could not be read or had no value, fall back to the configuration\n const enabled = pluginEnabled(\n pluginName,\n instance,\n await objects.getObjectAsync('system.config'),\n iobrokerJson,\n );\n CLI.success.pluginStatus(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName\n * @param iobrokerJson The contents of iobroker.json\n * @param [adapter] (optional) - If passed, the adapter configuration will be searched for defined plugins instead of js-controller\n */\nfunction pluginExists(pluginName: string, iobrokerJson?: ioBroker.IoBrokerJson, adapter?: string): boolean {\n // 1. check if the plugin is defined in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (ioPack?.common?.plugins && pluginName in ioPack.common.plugins) {\n return true;\n }\n } catch {\n /* ignore */\n }\n\n // 2. check if the plugin is defined in iobroker.json\n return !!(iobrokerJson?.plugins && pluginName in iobrokerJson.plugins);\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName name of the plugin, e.g. `sentry`\n * @param adapter If defined, the adapter configuration will be searched for defined plugins instead of js-controller\n * @param systemConfig The system.config object\n * @param iobrokerJson The contents of iobroker.json\n */\nfunction pluginEnabled(\n pluginName: string,\n adapter?: string,\n systemConfig?: ioBroker.SystemConfigObject | null,\n iobrokerJson?: ioBroker.IoBrokerJson,\n): boolean {\n // 1. check if diagnostics are disabled in ioBroker\n if (systemConfig?.common?.diag === 'none') {\n return false;\n }\n\n // 2. check if the plugin is disabled in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (\n ioPack?.common?.plugins &&\n pluginName in ioPack.common.plugins &&\n ioPack.common.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n } catch {\n /* ignore */\n }\n\n // 3. check if the plugin is disabled in iobroker.json\n if (\n iobrokerJson?.plugins &&\n pluginName in iobrokerJson.plugins &&\n iobrokerJson.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n\n // default: enabled\n return true;\n}\n", "export const __import_meta_url =\n typeof document === 'undefined' ? new (require('url'.replace('', '')).URL)('file:' + __filename).href :\n (document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["require", "path", "fs"]
|
|
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
|
));
|
|
@@ -45,6 +49,13 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
45
49
|
constructor(options) {
|
|
46
50
|
super(options);
|
|
47
51
|
}
|
|
52
|
+
// These CLI commands have no subcommands, but belong together thematically
|
|
53
|
+
// (start/stop/restart/status)
|
|
54
|
+
/**
|
|
55
|
+
* Starts one or more adapters or the js-controller
|
|
56
|
+
*
|
|
57
|
+
* @param args parsed cli arguments
|
|
58
|
+
*/
|
|
48
59
|
async start(args) {
|
|
49
60
|
const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
|
|
50
61
|
if (!adapterName) {
|
|
@@ -58,17 +69,37 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
58
69
|
this.setAdapterEnabled(adapterName, true);
|
|
59
70
|
}
|
|
60
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Restarts one or more instances or the js-controller
|
|
74
|
+
*
|
|
75
|
+
* @param args parsed cli arguments
|
|
76
|
+
*/
|
|
61
77
|
async restart(args) {
|
|
62
78
|
const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
|
|
63
79
|
if (!adapterName) {
|
|
64
80
|
await this.restartJSController();
|
|
65
81
|
this.options.callback();
|
|
66
82
|
} else if (/\.\d+$/.test(adapterName)) {
|
|
67
|
-
this.setAdapterInstanceEnabled(
|
|
83
|
+
this.setAdapterInstanceEnabled(
|
|
84
|
+
adapterName,
|
|
85
|
+
true,
|
|
86
|
+
/* restartIfRunning */
|
|
87
|
+
true
|
|
88
|
+
);
|
|
68
89
|
} else {
|
|
69
|
-
this.setAdapterEnabled(
|
|
90
|
+
this.setAdapterEnabled(
|
|
91
|
+
adapterName,
|
|
92
|
+
true,
|
|
93
|
+
/* restartIfRunning */
|
|
94
|
+
true
|
|
95
|
+
);
|
|
70
96
|
}
|
|
71
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Stops one or more adapters or the js-controller
|
|
100
|
+
*
|
|
101
|
+
* @param args parsed cli arguments
|
|
102
|
+
*/
|
|
72
103
|
async stop(args) {
|
|
73
104
|
const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
|
|
74
105
|
if (adapterName === void 0) {
|
|
@@ -82,6 +113,11 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
82
113
|
this.setAdapterEnabled(adapterName, false);
|
|
83
114
|
}
|
|
84
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Starts or stops all adapters
|
|
118
|
+
*
|
|
119
|
+
* @param enabled if adapters should be started or stopped
|
|
120
|
+
*/
|
|
85
121
|
setAllAdaptersEnabled(enabled) {
|
|
86
122
|
const { callback, dbConnect } = this.options;
|
|
87
123
|
dbConnect(async (params) => {
|
|
@@ -92,6 +128,14 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
92
128
|
callback();
|
|
93
129
|
});
|
|
94
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Starts or stops a single or all instances of adapter.
|
|
133
|
+
* If there are multiple instances, all will be started/stopped/restarted
|
|
134
|
+
*
|
|
135
|
+
* @param adapter The adapter to start
|
|
136
|
+
* @param enabled If adapter should be started or stopped
|
|
137
|
+
* @param [restartIfRunning] Whether running instances should be restarted
|
|
138
|
+
*/
|
|
95
139
|
setAdapterEnabled(adapter, enabled, restartIfRunning) {
|
|
96
140
|
const { callback, dbConnect } = this.options;
|
|
97
141
|
dbConnect(async (params) => {
|
|
@@ -112,6 +156,13 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
112
156
|
}
|
|
113
157
|
});
|
|
114
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Starts or stops a specific adapter instance
|
|
161
|
+
*
|
|
162
|
+
* @param instance The instance to start, e.g. "adaptername.0"
|
|
163
|
+
* @param enabled If the instance should be started or stopped
|
|
164
|
+
* @param [restartIfRunning] Whether running instances should be restarted
|
|
165
|
+
*/
|
|
115
166
|
setAdapterInstanceEnabled(instance, enabled, restartIfRunning) {
|
|
116
167
|
const { callback, dbConnect } = this.options;
|
|
117
168
|
dbConnect(async (params) => {
|
|
@@ -130,6 +181,9 @@ class CLIProcess extends import_cliCommand.CLICommand {
|
|
|
130
181
|
}
|
|
131
182
|
});
|
|
132
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Starts the JS controller
|
|
186
|
+
*/
|
|
133
187
|
async startJSController() {
|
|
134
188
|
let memoryLimitMB = 0;
|
|
135
189
|
try {
|
|
@@ -165,6 +219,9 @@ Please call "${import_js_controller_common2.tools.appName} setup first" to initi
|
|
|
165
219
|
});
|
|
166
220
|
child.unref();
|
|
167
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Stops the JS controller
|
|
224
|
+
*/
|
|
168
225
|
static async stopJSController() {
|
|
169
226
|
let pid;
|
|
170
227
|
try {
|
|
@@ -197,10 +254,16 @@ Please call "${import_js_controller_common2.tools.appName} setup first" to initi
|
|
|
197
254
|
} catch {
|
|
198
255
|
}
|
|
199
256
|
}
|
|
257
|
+
/** Restarts the JS controller */
|
|
200
258
|
async restartJSController() {
|
|
201
259
|
await CLIProcess.stopJSController();
|
|
202
260
|
await this.startJSController();
|
|
203
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Checks if ioBroker is running or not
|
|
264
|
+
*
|
|
265
|
+
* @param args parsed cli arguments
|
|
266
|
+
*/
|
|
204
267
|
status(args) {
|
|
205
268
|
const { callback, dbConnect } = this.options;
|
|
206
269
|
const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
|