@iobroker/adapter-react-v5 5.0.4 → 5.0.6
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/Components/ColorPicker.d.ts +0 -1
- package/Components/ColorPicker.js +1 -1
- package/Components/ComplexCron.js +20 -28
- package/Components/CopyToClipboard.js +0 -4
- package/Components/CustomModal.js +1 -5
- package/Components/FileBrowser.js +13 -18
- package/Components/FileViewer.js +4 -11
- package/Components/Icon.d.ts +2 -2
- package/Components/Icon.js +2 -2
- package/Components/IconSelector.js +2 -10
- package/Components/Image.js +3 -1
- package/Components/Loader.d.ts +2 -2
- package/Components/Loader.js +1 -1
- package/Components/Loaders/PT.d.ts +1 -1
- package/Components/Loaders/PT.js +1 -1
- package/Components/Loaders/Vendor.d.ts +1 -1
- package/Components/Loaders/Vendor.js +2 -2
- package/Components/Logo.js +1 -1
- package/Components/MDUtils.js +2 -0
- package/Components/ObjectBrowser.d.ts +526 -2
- package/Components/ObjectBrowser.js +100 -84
- package/Components/SaveCloseButtons.js +9 -18
- package/Components/Schedule.js +2 -2
- package/Components/SimpleCron/cron2text.js +5 -3
- package/Components/SimpleCron/cronText.js +1 -1
- package/Components/SimpleCron/index.js +29 -35
- package/Components/TableResize.d.ts +1 -1
- package/Components/TableResize.js +1 -1
- package/Components/TextWithIcon.js +1 -1
- package/Components/TreeTable.js +5 -4
- package/Components/Utils.d.ts +58 -60
- package/Components/Utils.js +239 -197
- package/Dialogs/ComplexCron.js +2 -10
- package/Dialogs/Confirm.d.ts +1 -1
- package/Dialogs/Confirm.js +2 -4
- package/Dialogs/Cron.js +1 -3
- package/Dialogs/Error.d.ts +1 -11
- package/Dialogs/Error.js +1 -7
- package/Dialogs/Message.d.ts +1 -12
- package/Dialogs/Message.js +1 -8
- package/Dialogs/SelectFile.js +1 -5
- package/Dialogs/SelectID.d.ts +1 -1
- package/Dialogs/SelectID.js +13 -7
- package/Dialogs/SimpleCron.js +1 -3
- package/Dialogs/TextInput.js +1 -5
- package/GenericApp.d.ts +2 -3
- package/GenericApp.js +11 -9
- package/LegacyConnection.d.ts +11 -12
- package/LegacyConnection.js +350 -222
- package/README.md +25 -0
- package/craco-module-federation.js +2 -2
- package/i18n.d.ts +1 -1
- package/i18n.js +6 -8
- package/package.json +7 -7
- package/types.d.ts +27 -27
package/LegacyConnection.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2020-2024, Denis Haev (bluefox) <dogafox@gmail.com>
|
|
4
|
+
*
|
|
5
|
+
* MIT License
|
|
6
|
+
*
|
|
7
|
+
* */
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.pattern2RegEx = exports.ERRORS = exports.PROGRESS = void 0;
|
|
4
10
|
/** Possible progress states. */
|
|
@@ -9,8 +15,10 @@ exports.PROGRESS = {
|
|
|
9
15
|
CONNECTED: 1,
|
|
10
16
|
/** All objects are loaded. */
|
|
11
17
|
OBJECTS_LOADED: 2,
|
|
18
|
+
/** All states are loaded. */
|
|
19
|
+
STATES_LOADED: 3,
|
|
12
20
|
/** The socket is ready for use. */
|
|
13
|
-
READY:
|
|
21
|
+
READY: 4,
|
|
14
22
|
};
|
|
15
23
|
const PERMISSION_ERROR = 'permissionError';
|
|
16
24
|
const NOT_CONNECTED = 'notConnectedError';
|
|
@@ -257,7 +265,7 @@ class Connection {
|
|
|
257
265
|
this.onProgress(exports.PROGRESS.CONNECTING);
|
|
258
266
|
this.onConnectionHandlers.forEach(cb => cb(false));
|
|
259
267
|
});
|
|
260
|
-
this._socket.on('reauthenticate', () =>
|
|
268
|
+
this._socket.on('reauthenticate', () => Connection.authenticate());
|
|
261
269
|
this._socket.on('log', message => {
|
|
262
270
|
this.props.onLog && this.props.onLog(message);
|
|
263
271
|
this.onLogHandlers.forEach(cb => cb(message));
|
|
@@ -270,7 +278,7 @@ class Connection {
|
|
|
270
278
|
}
|
|
271
279
|
_err = _err.toString();
|
|
272
280
|
if (_err.includes('User not authorized')) {
|
|
273
|
-
|
|
281
|
+
Connection.authenticate();
|
|
274
282
|
}
|
|
275
283
|
else {
|
|
276
284
|
window.alert(`Socket Error: ${err}`);
|
|
@@ -333,15 +341,15 @@ class Connection {
|
|
|
333
341
|
* Checks if running in ioBroker cloud
|
|
334
342
|
*/
|
|
335
343
|
static isCloud() {
|
|
336
|
-
if (window.location.hostname.includes(
|
|
337
|
-
window.location.hostname.includes(
|
|
344
|
+
if (window.location.hostname.includes('amazonaws.com') ||
|
|
345
|
+
window.location.hostname.includes('iobroker.in')) {
|
|
338
346
|
return true;
|
|
339
347
|
}
|
|
340
|
-
if (typeof window.socketUrl ===
|
|
348
|
+
if (typeof window.socketUrl === 'undefined') {
|
|
341
349
|
return false;
|
|
342
350
|
}
|
|
343
|
-
return (window.socketUrl.includes(
|
|
344
|
-
window.socketUrl.includes(
|
|
351
|
+
return (window.socketUrl.includes('iobroker.in') ||
|
|
352
|
+
window.socketUrl.includes('amazonaws'));
|
|
345
353
|
}
|
|
346
354
|
/**
|
|
347
355
|
* Checks if the socket is connected.
|
|
@@ -358,27 +366,48 @@ class Connection {
|
|
|
358
366
|
}
|
|
359
367
|
/**
|
|
360
368
|
* Called internally.
|
|
361
|
-
* @private
|
|
362
369
|
*/
|
|
363
|
-
_getUserPermissions(
|
|
370
|
+
async _getUserPermissions() {
|
|
364
371
|
if (this.doNotLoadACL) {
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
this._socket.emit('getUserPermissions', cb);
|
|
372
|
+
return null;
|
|
369
373
|
}
|
|
374
|
+
return new Promise((resolve, reject) => {
|
|
375
|
+
this._socket.emit('getUserPermissions', (err, acl) => (err ? reject(err) : resolve(acl)));
|
|
376
|
+
});
|
|
370
377
|
}
|
|
371
378
|
/**
|
|
372
379
|
* Called internally.
|
|
373
|
-
* @private
|
|
374
380
|
*/
|
|
375
|
-
onConnect() {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
381
|
+
async onConnect() {
|
|
382
|
+
let acl;
|
|
383
|
+
try {
|
|
384
|
+
acl = await this._getUserPermissions();
|
|
385
|
+
}
|
|
386
|
+
catch (err) {
|
|
387
|
+
this.onError(`Cannot read user permissions: ${err}`);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
if (!this.doNotLoadACL) {
|
|
391
|
+
if (this.loaded) {
|
|
379
392
|
return;
|
|
380
393
|
}
|
|
381
|
-
|
|
394
|
+
this.loaded = true;
|
|
395
|
+
this.loadTimer && clearTimeout(this.loadTimer);
|
|
396
|
+
this.loadTimer = null;
|
|
397
|
+
this.onProgress(exports.PROGRESS.CONNECTED);
|
|
398
|
+
this.firstConnect = false;
|
|
399
|
+
this.acl = acl;
|
|
400
|
+
}
|
|
401
|
+
// Read system configuration
|
|
402
|
+
let data;
|
|
403
|
+
try {
|
|
404
|
+
if (this.admin5only && !window.vendorPrefix) {
|
|
405
|
+
data = await this.getCompactSystemConfig();
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
data = await this.getSystemConfig();
|
|
409
|
+
}
|
|
410
|
+
if (this.doNotLoadACL) {
|
|
382
411
|
if (this.loaded) {
|
|
383
412
|
return;
|
|
384
413
|
}
|
|
@@ -387,56 +416,42 @@ class Connection {
|
|
|
387
416
|
this.loadTimer = null;
|
|
388
417
|
this.onProgress(exports.PROGRESS.CONNECTED);
|
|
389
418
|
this.firstConnect = false;
|
|
390
|
-
this.acl = acl;
|
|
391
419
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
.
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
this.
|
|
401
|
-
this.loadTimer = null;
|
|
402
|
-
this.onProgress(exports.PROGRESS.CONNECTED);
|
|
403
|
-
this.firstConnect = false;
|
|
404
|
-
}
|
|
405
|
-
this.systemConfig = data;
|
|
406
|
-
if (this.systemConfig && this.systemConfig.common) {
|
|
407
|
-
this.systemLang = this.systemConfig.common.language;
|
|
408
|
-
}
|
|
409
|
-
else {
|
|
410
|
-
// @ts-expect-error userLanguage is not standard
|
|
411
|
-
this.systemLang = window.navigator.userLanguage || window.navigator.language;
|
|
412
|
-
if (/^(en|de|ru|pt|nl|fr|it|es|pl|uk)-?/.test(this.systemLang)) {
|
|
413
|
-
this.systemLang = this.systemLang.substr(0, 2);
|
|
414
|
-
}
|
|
415
|
-
else if (!/^(en|de|ru|pt|nl|fr|it|es|pl|uk|zh-cn)$/.test(this.systemLang)) {
|
|
416
|
-
this.systemLang = 'en';
|
|
417
|
-
}
|
|
420
|
+
this.systemConfig = data;
|
|
421
|
+
if (this.systemConfig && this.systemConfig.common) {
|
|
422
|
+
this.systemLang = this.systemConfig.common.language;
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
// @ts-expect-error userLanguage is not standard
|
|
426
|
+
this.systemLang = window.navigator.userLanguage || window.navigator.language;
|
|
427
|
+
if (/^(en|de|ru|pt|nl|fr|it|es|pl|uk)-?/.test(this.systemLang)) {
|
|
428
|
+
this.systemLang = this.systemLang.substr(0, 2);
|
|
418
429
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
return this.getObjects()
|
|
422
|
-
.then(() => {
|
|
423
|
-
this.onProgress(exports.PROGRESS.READY);
|
|
424
|
-
this.props.onReady && this.objects && this.props.onReady(this.objects);
|
|
425
|
-
});
|
|
430
|
+
else if (!/^(en|de|ru|pt|nl|fr|it|es|pl|uk|zh-cn)$/.test(this.systemLang)) {
|
|
431
|
+
this.systemLang = 'en';
|
|
426
432
|
}
|
|
433
|
+
}
|
|
434
|
+
this.props.onLanguage && this.props.onLanguage(this.systemLang);
|
|
435
|
+
if (!this.doNotLoadAllObjects) {
|
|
436
|
+
await this.getObjects();
|
|
437
|
+
this.onProgress(exports.PROGRESS.READY);
|
|
438
|
+
this.props.onReady && this.objects && this.props.onReady(this.objects);
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
427
441
|
this.objects = this.admin5only ? {} : { 'system.config': data };
|
|
428
442
|
this.onProgress(exports.PROGRESS.READY);
|
|
429
443
|
this.props.onReady && this.props.onReady(this.objects);
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch (e) {
|
|
447
|
+
this.onError(`Cannot read system config: ${e}`);
|
|
448
|
+
}
|
|
434
449
|
}
|
|
435
450
|
/**
|
|
436
451
|
* Called internally.
|
|
437
452
|
* @private
|
|
438
453
|
*/
|
|
439
|
-
authenticate() {
|
|
454
|
+
static authenticate() {
|
|
440
455
|
if (window.location.search.includes('&href=')) {
|
|
441
456
|
window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
442
457
|
}
|
|
@@ -810,7 +825,6 @@ class Connection {
|
|
|
810
825
|
}
|
|
811
826
|
Object.keys(this.objectsSubscribes).forEach(_id => {
|
|
812
827
|
if (_id === id || this.objectsSubscribes[_id].reg.test(id)) {
|
|
813
|
-
// @ts-ignore
|
|
814
828
|
this.objectsSubscribes[_id].cbs.forEach(cb => {
|
|
815
829
|
try {
|
|
816
830
|
cb(id, obj, oldObj);
|
|
@@ -872,12 +886,13 @@ class Connection {
|
|
|
872
886
|
disableProgressUpdate = pattern;
|
|
873
887
|
pattern = undefined;
|
|
874
888
|
}
|
|
875
|
-
return new Promise((resolve, reject) =>
|
|
876
|
-
this.
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
889
|
+
return new Promise((resolve, reject) => {
|
|
890
|
+
this._socket.emit('getStates', pattern, (err, res) => {
|
|
891
|
+
this.states = res;
|
|
892
|
+
!disableProgressUpdate && this.onProgress(exports.PROGRESS.STATES_LOADED);
|
|
893
|
+
err ? reject(err) : resolve(this.states);
|
|
894
|
+
});
|
|
895
|
+
});
|
|
881
896
|
}
|
|
882
897
|
/**
|
|
883
898
|
* Gets the given state.
|
|
@@ -891,7 +906,9 @@ class Connection {
|
|
|
891
906
|
if (id && id === this.ignoreState) {
|
|
892
907
|
return Promise.resolve(this.simStates[id] || { val: null, ack: true });
|
|
893
908
|
}
|
|
894
|
-
return new Promise((resolve, reject) =>
|
|
909
|
+
return new Promise((resolve, reject) => {
|
|
910
|
+
this._socket.emit('getState', id, (err, state) => (err ? reject(err) : resolve(state)));
|
|
911
|
+
});
|
|
895
912
|
}
|
|
896
913
|
/**
|
|
897
914
|
* @deprecated since js-controller 5.0. Use files instead.
|
|
@@ -904,7 +921,9 @@ class Connection {
|
|
|
904
921
|
return Promise.reject(NOT_CONNECTED);
|
|
905
922
|
}
|
|
906
923
|
// the data will come in base64
|
|
907
|
-
return new Promise((resolve, reject) =>
|
|
924
|
+
return new Promise((resolve, reject) => {
|
|
925
|
+
this._socket.emit('getBinaryState', id, (err, base64) => (err ? reject(err) : resolve(base64)));
|
|
926
|
+
});
|
|
908
927
|
}
|
|
909
928
|
/**
|
|
910
929
|
* @deprecated since js-controller 5.0. Use files instead.
|
|
@@ -919,7 +938,9 @@ class Connection {
|
|
|
919
938
|
return Promise.reject(NOT_CONNECTED);
|
|
920
939
|
}
|
|
921
940
|
// the data will come in base64
|
|
922
|
-
return new Promise((resolve, reject) =>
|
|
941
|
+
return new Promise((resolve, reject) => {
|
|
942
|
+
this._socket.emit('setBinaryState', id, base64, (err) => ((err ? reject(err) : resolve())));
|
|
943
|
+
});
|
|
923
944
|
}
|
|
924
945
|
/**
|
|
925
946
|
* Sets the given state value.
|
|
@@ -966,7 +987,9 @@ class Connection {
|
|
|
966
987
|
}
|
|
967
988
|
return Promise.resolve();
|
|
968
989
|
}
|
|
969
|
-
return new Promise((resolve, reject) =>
|
|
990
|
+
return new Promise((resolve, reject) => {
|
|
991
|
+
this._socket.emit('setState', id, val, (err) => (err ? reject(err) : resolve()));
|
|
992
|
+
});
|
|
970
993
|
}
|
|
971
994
|
/**
|
|
972
995
|
* Gets all objects.
|
|
@@ -981,13 +1004,15 @@ class Connection {
|
|
|
981
1004
|
}
|
|
982
1005
|
return new Promise((resolve, reject) => {
|
|
983
1006
|
if (!update && this.objects) {
|
|
984
|
-
|
|
1007
|
+
resolve(this.objects);
|
|
1008
|
+
}
|
|
1009
|
+
else {
|
|
1010
|
+
this._socket.emit(Connection.isWeb() ? 'getObjects' : 'getAllObjects', (err, res) => {
|
|
1011
|
+
this.objects = res;
|
|
1012
|
+
disableProgressUpdate && this.onProgress(exports.PROGRESS.OBJECTS_LOADED);
|
|
1013
|
+
err ? reject(err) : resolve(this.objects);
|
|
1014
|
+
});
|
|
985
1015
|
}
|
|
986
|
-
this._socket.emit(Connection.isWeb() ? 'getObjects' : 'getAllObjects', (err, res) => {
|
|
987
|
-
this.objects = res;
|
|
988
|
-
disableProgressUpdate && this.onProgress(exports.PROGRESS.OBJECTS_LOADED);
|
|
989
|
-
err ? reject(err) : resolve(this.objects);
|
|
990
|
-
});
|
|
991
1016
|
});
|
|
992
1017
|
}
|
|
993
1018
|
/**
|
|
@@ -999,7 +1024,9 @@ class Connection {
|
|
|
999
1024
|
if (!this.connected) {
|
|
1000
1025
|
return Promise.reject(NOT_CONNECTED);
|
|
1001
1026
|
}
|
|
1002
|
-
return new Promise((resolve, reject) =>
|
|
1027
|
+
return new Promise((resolve, reject) => {
|
|
1028
|
+
this._socket.emit('getObjects', list, (err, res) => (err ? reject(err) : resolve(res)));
|
|
1029
|
+
});
|
|
1003
1030
|
}
|
|
1004
1031
|
/**
|
|
1005
1032
|
* Called internally.
|
|
@@ -1041,7 +1068,9 @@ class Connection {
|
|
|
1041
1068
|
if (!this.connected) {
|
|
1042
1069
|
return Promise.reject(NOT_CONNECTED);
|
|
1043
1070
|
}
|
|
1044
|
-
return new Promise((resolve, reject) =>
|
|
1071
|
+
return new Promise((resolve, reject) => {
|
|
1072
|
+
this._socket.emit('requireLog', isEnabled, (err) => (err ? reject(err) : resolve()));
|
|
1073
|
+
});
|
|
1045
1074
|
}
|
|
1046
1075
|
/**
|
|
1047
1076
|
* Deletes the given object.
|
|
@@ -1054,7 +1083,9 @@ class Connection {
|
|
|
1054
1083
|
if (!this.connected) {
|
|
1055
1084
|
return Promise.reject(NOT_CONNECTED);
|
|
1056
1085
|
}
|
|
1057
|
-
return new Promise((resolve, reject) =>
|
|
1086
|
+
return new Promise((resolve, reject) => {
|
|
1087
|
+
this._socket.emit('delObject', id, { maintenance: !!maintenance }, (err) => (err ? reject(err) : resolve()));
|
|
1088
|
+
});
|
|
1058
1089
|
}
|
|
1059
1090
|
/**
|
|
1060
1091
|
* Deletes the given object and all its children.
|
|
@@ -1067,7 +1098,9 @@ class Connection {
|
|
|
1067
1098
|
if (!this.connected) {
|
|
1068
1099
|
return Promise.reject(NOT_CONNECTED);
|
|
1069
1100
|
}
|
|
1070
|
-
return new Promise((resolve, reject) =>
|
|
1101
|
+
return new Promise((resolve, reject) => {
|
|
1102
|
+
this._socket.emit('delObjects', id, { maintenance: !!maintenance }, (err) => (err ? reject(err) : resolve()));
|
|
1103
|
+
});
|
|
1071
1104
|
}
|
|
1072
1105
|
/**
|
|
1073
1106
|
* Sets the object.
|
|
@@ -1089,7 +1122,9 @@ class Connection {
|
|
|
1089
1122
|
if (Object.prototype.hasOwnProperty.call(obj, 'ts')) {
|
|
1090
1123
|
delete obj.ts;
|
|
1091
1124
|
}
|
|
1092
|
-
return new Promise((resolve, reject) =>
|
|
1125
|
+
return new Promise((resolve, reject) => {
|
|
1126
|
+
this._socket.emit('setObject', id, obj, (err) => (err ? reject(err) : resolve()));
|
|
1127
|
+
});
|
|
1093
1128
|
}
|
|
1094
1129
|
/**
|
|
1095
1130
|
* Gets the object with the given id from the server.
|
|
@@ -1112,7 +1147,9 @@ class Connection {
|
|
|
1112
1147
|
native: {},
|
|
1113
1148
|
});
|
|
1114
1149
|
}
|
|
1115
|
-
return new Promise((resolve, reject) =>
|
|
1150
|
+
return new Promise((resolve, reject) => {
|
|
1151
|
+
this._socket.emit('getObject', id, (err, obj) => (err ? reject(err) : resolve(obj)));
|
|
1152
|
+
});
|
|
1116
1153
|
}
|
|
1117
1154
|
/**
|
|
1118
1155
|
* Get all instances of the given adapter or all instances of all adapters.
|
|
@@ -1176,14 +1213,16 @@ class Connection {
|
|
|
1176
1213
|
let timeout = setTimeout(() => {
|
|
1177
1214
|
timeout = null;
|
|
1178
1215
|
this.getObjectView(`system.adapter.${adapter}.`, `system.adapter.${adapter}.\u9999`, 'adapter')
|
|
1179
|
-
.then(items =>
|
|
1216
|
+
.then(items => {
|
|
1217
|
+
resolve(Object.keys(items).map(id => fixAdminUI(items[id])));
|
|
1218
|
+
})
|
|
1180
1219
|
.catch(e => reject(e));
|
|
1181
1220
|
}, TIMEOUT_FOR_ADMIN4);
|
|
1182
1221
|
this._socket.emit('getAdapters', adapter, (err, adapters) => {
|
|
1183
1222
|
if (timeout) {
|
|
1184
1223
|
clearTimeout(timeout);
|
|
1185
1224
|
timeout = null;
|
|
1186
|
-
|
|
1225
|
+
err ? reject(err) : resolve(adapters);
|
|
1187
1226
|
}
|
|
1188
1227
|
});
|
|
1189
1228
|
});
|
|
@@ -1229,7 +1268,9 @@ class Connection {
|
|
|
1229
1268
|
groupsToRename.forEach(group => {
|
|
1230
1269
|
group.newId = (newId + group._id.substring(id.length));
|
|
1231
1270
|
});
|
|
1232
|
-
await new Promise((resolve, reject) =>
|
|
1271
|
+
await new Promise((resolve, reject) => {
|
|
1272
|
+
this._renameGroups(groupsToRename, (err) => (err ? reject(err) : resolve(null)));
|
|
1273
|
+
});
|
|
1233
1274
|
const obj = groups.find(group => group._id === id);
|
|
1234
1275
|
if (obj) {
|
|
1235
1276
|
obj._id = newId;
|
|
@@ -1242,6 +1283,7 @@ class Connection {
|
|
|
1242
1283
|
.then(() => this.delObject(id));
|
|
1243
1284
|
}
|
|
1244
1285
|
}
|
|
1286
|
+
return Promise.resolve();
|
|
1245
1287
|
}
|
|
1246
1288
|
/**
|
|
1247
1289
|
* Sends a message to a specific instance or all instances of some specific adapter.
|
|
@@ -1257,7 +1299,9 @@ class Connection {
|
|
|
1257
1299
|
if (!this.connected) {
|
|
1258
1300
|
return Promise.reject(NOT_CONNECTED);
|
|
1259
1301
|
}
|
|
1260
|
-
return new Promise(resolve =>
|
|
1302
|
+
return new Promise(resolve => {
|
|
1303
|
+
this._socket.emit('sendTo', instance, command, data, (result) => resolve(result));
|
|
1304
|
+
});
|
|
1261
1305
|
}
|
|
1262
1306
|
/**
|
|
1263
1307
|
* Extend an object and create it if it might not exist.
|
|
@@ -1271,16 +1315,18 @@ class Connection {
|
|
|
1271
1315
|
return Promise.reject(NOT_CONNECTED);
|
|
1272
1316
|
}
|
|
1273
1317
|
obj = JSON.parse(JSON.stringify(obj));
|
|
1274
|
-
if (
|
|
1318
|
+
if (Object.prototype.hasOwnProperty.call(obj, 'from')) {
|
|
1275
1319
|
delete obj.from;
|
|
1276
1320
|
}
|
|
1277
|
-
if (
|
|
1321
|
+
if (Object.prototype.hasOwnProperty.call(obj, 'user')) {
|
|
1278
1322
|
delete obj.user;
|
|
1279
1323
|
}
|
|
1280
|
-
if (
|
|
1324
|
+
if (Object.prototype.hasOwnProperty.call(obj, 'ts')) {
|
|
1281
1325
|
delete obj.ts;
|
|
1282
1326
|
}
|
|
1283
|
-
return new Promise((resolve, reject) =>
|
|
1327
|
+
return new Promise((resolve, reject) => {
|
|
1328
|
+
this._socket.emit('extendObject', id, obj, (err) => ((err ? reject(err) : resolve())));
|
|
1329
|
+
});
|
|
1284
1330
|
}
|
|
1285
1331
|
/**
|
|
1286
1332
|
* Register a handler for log messages.
|
|
@@ -1513,11 +1559,12 @@ class Connection {
|
|
|
1513
1559
|
if (!this.connected) {
|
|
1514
1560
|
return Promise.reject(NOT_CONNECTED);
|
|
1515
1561
|
}
|
|
1516
|
-
return new Promise(resolve =>
|
|
1562
|
+
return new Promise(resolve => {
|
|
1563
|
+
this._socket.emit('sendToHost', host, 'getLogs', linesNumber || 200, (lines) => resolve(lines));
|
|
1564
|
+
});
|
|
1517
1565
|
}
|
|
1518
1566
|
/**
|
|
1519
1567
|
* Get the log files (only for admin connection).
|
|
1520
|
-
* @returns {Promise<string[]>}
|
|
1521
1568
|
*/
|
|
1522
1569
|
getLogsFiles(host) {
|
|
1523
1570
|
if (Connection.isWeb()) {
|
|
@@ -1526,7 +1573,9 @@ class Connection {
|
|
|
1526
1573
|
if (!this.connected) {
|
|
1527
1574
|
return Promise.reject(NOT_CONNECTED);
|
|
1528
1575
|
}
|
|
1529
|
-
return new Promise((resolve, reject) =>
|
|
1576
|
+
return new Promise((resolve, reject) => {
|
|
1577
|
+
this._socket.emit('readLogs', host, (err, files) => (err ? reject(err) : resolve(files)));
|
|
1578
|
+
});
|
|
1530
1579
|
}
|
|
1531
1580
|
/**
|
|
1532
1581
|
* Delete the logs from a host (only for admin connection).
|
|
@@ -1538,7 +1587,9 @@ class Connection {
|
|
|
1538
1587
|
if (!this.connected) {
|
|
1539
1588
|
return Promise.reject(NOT_CONNECTED);
|
|
1540
1589
|
}
|
|
1541
|
-
return new Promise((resolve, reject) =>
|
|
1590
|
+
return new Promise((resolve, reject) => {
|
|
1591
|
+
this._socket.emit('sendToHost', host, 'delLogs', null, (error) => (error ? reject(error) : resolve()));
|
|
1592
|
+
});
|
|
1542
1593
|
}
|
|
1543
1594
|
/**
|
|
1544
1595
|
* Read the meta items.
|
|
@@ -1547,7 +1598,9 @@ class Connection {
|
|
|
1547
1598
|
if (!this.connected) {
|
|
1548
1599
|
return Promise.reject(NOT_CONNECTED);
|
|
1549
1600
|
}
|
|
1550
|
-
return new Promise((resolve, reject) =>
|
|
1601
|
+
return new Promise((resolve, reject) => {
|
|
1602
|
+
this._socket.emit('getObjectView', 'system', 'meta', { startkey: '', endkey: '\u9999' }, (err, objs) => (err ? reject(err) : resolve(objs.rows && objs.rows.map((obj) => obj.value))));
|
|
1603
|
+
});
|
|
1551
1604
|
}
|
|
1552
1605
|
/**
|
|
1553
1606
|
* Read the directory of an adapter.
|
|
@@ -1560,7 +1613,9 @@ class Connection {
|
|
|
1560
1613
|
if (!this.connected) {
|
|
1561
1614
|
return Promise.reject(NOT_CONNECTED);
|
|
1562
1615
|
}
|
|
1563
|
-
return new Promise((resolve, reject) =>
|
|
1616
|
+
return new Promise((resolve, reject) => {
|
|
1617
|
+
this._socket.emit('readDir', adapter, fileName, (err, files) => (err ? reject(err) : resolve(files)));
|
|
1618
|
+
});
|
|
1564
1619
|
}
|
|
1565
1620
|
/**
|
|
1566
1621
|
* Read a file of an adapter.
|
|
@@ -1578,12 +1633,11 @@ class Connection {
|
|
|
1578
1633
|
return new Promise((resolve, reject) => {
|
|
1579
1634
|
if (!base64) {
|
|
1580
1635
|
this._socket.emit('readFile', adapter, fileName, (err, data, type) => {
|
|
1581
|
-
//@ts-ignore
|
|
1582
1636
|
err ? reject(err) : resolve({ data, type });
|
|
1583
1637
|
});
|
|
1584
1638
|
}
|
|
1585
1639
|
else {
|
|
1586
|
-
this._socket.emit('readFile64', adapter, fileName, base64, (err, data) => err ? reject(err) : resolve(data));
|
|
1640
|
+
this._socket.emit('readFile64', adapter, fileName, base64, (err, data) => (err ? reject(err) : resolve(data)));
|
|
1587
1641
|
}
|
|
1588
1642
|
});
|
|
1589
1643
|
}
|
|
@@ -1602,12 +1656,12 @@ class Connection {
|
|
|
1602
1656
|
}
|
|
1603
1657
|
return new Promise((resolve, reject) => {
|
|
1604
1658
|
if (typeof data === 'string') {
|
|
1605
|
-
this._socket.emit('writeFile', adapter, fileName, data, (err) => err ? reject(err) : resolve());
|
|
1659
|
+
this._socket.emit('writeFile', adapter, fileName, data, (err) => (err ? reject(err) : resolve()));
|
|
1606
1660
|
}
|
|
1607
1661
|
else {
|
|
1608
1662
|
const base64 = btoa(new Uint8Array(data)
|
|
1609
|
-
.reduce((
|
|
1610
|
-
this._socket.emit('writeFile64', adapter, fileName, base64, (err) => err ? reject(err) : resolve());
|
|
1663
|
+
.reduce((_data, byte) => _data + String.fromCharCode(byte), ''));
|
|
1664
|
+
this._socket.emit('writeFile64', adapter, fileName, base64, (err) => (err ? reject(err) : resolve()));
|
|
1611
1665
|
}
|
|
1612
1666
|
});
|
|
1613
1667
|
}
|
|
@@ -1622,7 +1676,9 @@ class Connection {
|
|
|
1622
1676
|
if (!this.connected) {
|
|
1623
1677
|
return Promise.reject(NOT_CONNECTED);
|
|
1624
1678
|
}
|
|
1625
|
-
return new Promise((resolve, reject) =>
|
|
1679
|
+
return new Promise((resolve, reject) => {
|
|
1680
|
+
this._socket.emit('unlink', adapter, fileName, (err) => (err ? reject(err) : resolve()));
|
|
1681
|
+
});
|
|
1626
1682
|
}
|
|
1627
1683
|
/**
|
|
1628
1684
|
* Delete a folder of an adapter.
|
|
@@ -1636,7 +1692,9 @@ class Connection {
|
|
|
1636
1692
|
if (!this.connected) {
|
|
1637
1693
|
return Promise.reject(NOT_CONNECTED);
|
|
1638
1694
|
}
|
|
1639
|
-
return new Promise((resolve, reject) =>
|
|
1695
|
+
return new Promise((resolve, reject) => {
|
|
1696
|
+
this._socket.emit('deleteFolder', adapter, folderName, (err) => (err ? reject(err) : resolve()));
|
|
1697
|
+
});
|
|
1640
1698
|
}
|
|
1641
1699
|
/**
|
|
1642
1700
|
* Get the list of all hosts.
|
|
@@ -1652,14 +1710,16 @@ class Connection {
|
|
|
1652
1710
|
if (!this.connected) {
|
|
1653
1711
|
return Promise.reject(NOT_CONNECTED);
|
|
1654
1712
|
}
|
|
1655
|
-
this._promises.hosts = new Promise((resolve, reject) =>
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1713
|
+
this._promises.hosts = new Promise((resolve, reject) => {
|
|
1714
|
+
this._socket.emit('getObjectView', 'system', 'host', { startkey: 'system.host.', endkey: 'system.host.\u9999' }, (err, doc) => {
|
|
1715
|
+
if (err) {
|
|
1716
|
+
reject(err);
|
|
1717
|
+
}
|
|
1718
|
+
else {
|
|
1719
|
+
resolve(doc.rows.map(item => item.value));
|
|
1720
|
+
}
|
|
1721
|
+
});
|
|
1722
|
+
});
|
|
1663
1723
|
return this._promises.hosts;
|
|
1664
1724
|
}
|
|
1665
1725
|
/**
|
|
@@ -1677,14 +1737,16 @@ class Connection {
|
|
|
1677
1737
|
if (!this.connected) {
|
|
1678
1738
|
return Promise.reject(NOT_CONNECTED);
|
|
1679
1739
|
}
|
|
1680
|
-
this._promises.users = new Promise((resolve, reject) =>
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1740
|
+
this._promises.users = new Promise((resolve, reject) => {
|
|
1741
|
+
this._socket.emit('getObjectView', 'system', 'user', { startkey: 'system.user.', endkey: 'system.user.\u9999' }, (err, doc) => {
|
|
1742
|
+
if (err) {
|
|
1743
|
+
reject(err);
|
|
1744
|
+
}
|
|
1745
|
+
else {
|
|
1746
|
+
resolve(doc.rows.map(item => item.value));
|
|
1747
|
+
}
|
|
1748
|
+
});
|
|
1749
|
+
});
|
|
1688
1750
|
return this._promises.users;
|
|
1689
1751
|
}
|
|
1690
1752
|
/**
|
|
@@ -1699,14 +1761,16 @@ class Connection {
|
|
|
1699
1761
|
if (!this.connected) {
|
|
1700
1762
|
return Promise.reject(NOT_CONNECTED);
|
|
1701
1763
|
}
|
|
1702
|
-
this._promises.groups = new Promise((resolve, reject) =>
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1764
|
+
this._promises.groups = new Promise((resolve, reject) => {
|
|
1765
|
+
this._socket.emit('getObjectView', 'system', 'group', { startkey: 'system.group.', endkey: 'system.group.\u9999' }, (err, doc) => {
|
|
1766
|
+
if (err) {
|
|
1767
|
+
reject(err);
|
|
1768
|
+
}
|
|
1769
|
+
else {
|
|
1770
|
+
resolve(doc.rows.map(item => item.value));
|
|
1771
|
+
}
|
|
1772
|
+
});
|
|
1773
|
+
});
|
|
1710
1774
|
return this._promises.groups;
|
|
1711
1775
|
}
|
|
1712
1776
|
/**
|
|
@@ -1903,7 +1967,9 @@ class Connection {
|
|
|
1903
1967
|
if (!this.connected) {
|
|
1904
1968
|
return Promise.reject(NOT_CONNECTED);
|
|
1905
1969
|
}
|
|
1906
|
-
return new Promise((resolve, reject) =>
|
|
1970
|
+
return new Promise((resolve, reject) => {
|
|
1971
|
+
this._socket.emit('rename', adapter, oldName, newName, (err) => (err ? reject(err) : resolve()));
|
|
1972
|
+
});
|
|
1907
1973
|
}
|
|
1908
1974
|
/**
|
|
1909
1975
|
* Rename file in ioBroker DB
|
|
@@ -1918,7 +1984,9 @@ class Connection {
|
|
|
1918
1984
|
if (!this.connected) {
|
|
1919
1985
|
return Promise.reject(NOT_CONNECTED);
|
|
1920
1986
|
}
|
|
1921
|
-
return new Promise((resolve, reject) =>
|
|
1987
|
+
return new Promise((resolve, reject) => {
|
|
1988
|
+
this._socket.emit('renameFile', adapter, oldName, newName, (err) => (err ? reject(err) : resolve()));
|
|
1989
|
+
});
|
|
1922
1990
|
}
|
|
1923
1991
|
/**
|
|
1924
1992
|
* Execute a command on a host.
|
|
@@ -1976,9 +2044,9 @@ class Connection {
|
|
|
1976
2044
|
if (!this.connected) {
|
|
1977
2045
|
return Promise.reject(NOT_CONNECTED);
|
|
1978
2046
|
}
|
|
1979
|
-
this._promises[`supportedFeatures_${feature}`] = new Promise((resolve, reject) =>
|
|
1980
|
-
err ? reject(err) : resolve(supported);
|
|
1981
|
-
})
|
|
2047
|
+
this._promises[`supportedFeatures_${feature}`] = new Promise((resolve, reject) => {
|
|
2048
|
+
this._socket.emit('checkFeatureSupported', feature, (err, supported) => (err ? reject(err) : resolve(supported)));
|
|
2049
|
+
});
|
|
1982
2050
|
return this._promises[`supportedFeatures_${feature}`];
|
|
1983
2051
|
}
|
|
1984
2052
|
/**
|
|
@@ -2020,7 +2088,7 @@ class Connection {
|
|
|
2020
2088
|
});
|
|
2021
2089
|
});
|
|
2022
2090
|
}
|
|
2023
|
-
return
|
|
2091
|
+
return Promise.reject('Not supported');
|
|
2024
2092
|
}
|
|
2025
2093
|
/**
|
|
2026
2094
|
* Write the base settings of a given host.
|
|
@@ -2100,9 +2168,13 @@ class Connection {
|
|
|
2100
2168
|
return Promise.reject(NOT_CONNECTED);
|
|
2101
2169
|
}
|
|
2102
2170
|
if (Connection.isWeb()) {
|
|
2103
|
-
return new Promise((resolve, reject) =>
|
|
2171
|
+
return new Promise((resolve, reject) => {
|
|
2172
|
+
this._socket.emit('getStates', pattern || '*', (err, states) => (err ? reject(err) : resolve(states)));
|
|
2173
|
+
});
|
|
2104
2174
|
}
|
|
2105
|
-
return new Promise((resolve, reject) =>
|
|
2175
|
+
return new Promise((resolve, reject) => {
|
|
2176
|
+
this._socket.emit('getForeignStates', pattern || '*', (err, states) => (err ? reject(err) : resolve(states)));
|
|
2177
|
+
});
|
|
2106
2178
|
}
|
|
2107
2179
|
/**
|
|
2108
2180
|
* Get foreign objects by pattern, by specific type and resolve their enums. (Only admin)
|
|
@@ -2115,7 +2187,9 @@ class Connection {
|
|
|
2115
2187
|
if (!this.connected) {
|
|
2116
2188
|
return Promise.reject(NOT_CONNECTED);
|
|
2117
2189
|
}
|
|
2118
|
-
return new Promise((resolve, reject) =>
|
|
2190
|
+
return new Promise((resolve, reject) => {
|
|
2191
|
+
this._socket.emit('getForeignObjects', pattern || '*', type, (err, states) => (err ? reject(err) : resolve(states)));
|
|
2192
|
+
});
|
|
2119
2193
|
}
|
|
2120
2194
|
/**
|
|
2121
2195
|
* Gets the system configuration.
|
|
@@ -2131,11 +2205,8 @@ class Connection {
|
|
|
2131
2205
|
}
|
|
2132
2206
|
this._promises.systemConfig = this.getObject('system.config')
|
|
2133
2207
|
.then(systemConfig => {
|
|
2134
|
-
// @ts-ignore
|
|
2135
2208
|
systemConfig = systemConfig || {};
|
|
2136
|
-
// @ts-ignore
|
|
2137
2209
|
systemConfig.common = systemConfig.common || {};
|
|
2138
|
-
// @ts-ignore
|
|
2139
2210
|
systemConfig.native = systemConfig.native || {};
|
|
2140
2211
|
return systemConfig;
|
|
2141
2212
|
});
|
|
@@ -2161,7 +2232,9 @@ class Connection {
|
|
|
2161
2232
|
if (!this.connected) {
|
|
2162
2233
|
return Promise.reject(NOT_CONNECTED);
|
|
2163
2234
|
}
|
|
2164
|
-
return new Promise((resolve, reject) =>
|
|
2235
|
+
return new Promise((resolve, reject) => {
|
|
2236
|
+
this._socket.emit('getHistory', id, options, (err, values) => (err ? reject(err) : resolve(values)));
|
|
2237
|
+
});
|
|
2165
2238
|
}
|
|
2166
2239
|
/**
|
|
2167
2240
|
* Get the history of a given state.
|
|
@@ -2170,7 +2243,9 @@ class Connection {
|
|
|
2170
2243
|
if (!this.connected) {
|
|
2171
2244
|
return Promise.reject(NOT_CONNECTED);
|
|
2172
2245
|
}
|
|
2173
|
-
return new Promise((resolve, reject) =>
|
|
2246
|
+
return new Promise((resolve, reject) => {
|
|
2247
|
+
this._socket.emit('getHistory', id, options, (err, values, stepIgnore, sessionId) => (err ? reject(err) : resolve({ values, sessionId, stepIgnore })));
|
|
2248
|
+
});
|
|
2174
2249
|
}
|
|
2175
2250
|
/**
|
|
2176
2251
|
* Change the password of the given user.
|
|
@@ -2179,7 +2254,9 @@ class Connection {
|
|
|
2179
2254
|
if (Connection.isWeb()) {
|
|
2180
2255
|
return Promise.reject('Allowed only in admin');
|
|
2181
2256
|
}
|
|
2182
|
-
return new Promise((resolve, reject) =>
|
|
2257
|
+
return new Promise((resolve, reject) => {
|
|
2258
|
+
this._socket.emit('changePassword', user, password, (err) => (err ? reject(err) : resolve()));
|
|
2259
|
+
});
|
|
2183
2260
|
}
|
|
2184
2261
|
/**
|
|
2185
2262
|
* Get the IP addresses of the given host.
|
|
@@ -2197,7 +2274,7 @@ class Connection {
|
|
|
2197
2274
|
return this._promises[`IPs_${host}`];
|
|
2198
2275
|
}
|
|
2199
2276
|
this._promises[`IPs_${host}`] = this.getObject(host)
|
|
2200
|
-
.then(obj => obj
|
|
2277
|
+
.then(obj => ((obj === null || obj === void 0 ? void 0 : obj.common) ? obj.common.address || [] : []));
|
|
2201
2278
|
return this._promises[`IPs_${host}`];
|
|
2202
2279
|
}
|
|
2203
2280
|
/**
|
|
@@ -2215,30 +2292,40 @@ class Connection {
|
|
|
2215
2292
|
if (!update && this._promises[`rIPs_${ipOrHostName}`]) {
|
|
2216
2293
|
return this._promises[`rIPs_${ipOrHostName}`];
|
|
2217
2294
|
}
|
|
2218
|
-
this._promises[`rIPs_${ipOrHostName}`] = new Promise(resolve =>
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
for (let num = 0; num < host.native.hardware.networkInterfaces[eth].length; num++) {
|
|
2228
|
-
if (host.native.hardware.networkInterfaces[eth][num].family !== 'IPv6') {
|
|
2229
|
-
IPs4.push({ name: `[${host.native.hardware.networkInterfaces[eth][num].family}] ${host.native.hardware.networkInterfaces[eth][num].address} - ${eth}`, address: host.native.hardware.networkInterfaces[eth][num].address, family: 'ipv4' });
|
|
2295
|
+
this._promises[`rIPs_${ipOrHostName}`] = new Promise(resolve => {
|
|
2296
|
+
this._socket.emit('getHostByIp', ipOrHostName, (ip, host) => {
|
|
2297
|
+
var _a, _b;
|
|
2298
|
+
const IPs4 = [{ name: '[IPv4] 0.0.0.0 - Listen on all IPs', address: '0.0.0.0', family: 'ipv4' }];
|
|
2299
|
+
const IPs6 = [{ name: '[IPv6] :: - Listen on all IPs', address: '::', family: 'ipv6' }];
|
|
2300
|
+
if ((_b = (_a = host === null || host === void 0 ? void 0 : host.native) === null || _a === void 0 ? void 0 : _a.hardware) === null || _b === void 0 ? void 0 : _b.networkInterfaces) {
|
|
2301
|
+
for (const eth in host.native.hardware.networkInterfaces) {
|
|
2302
|
+
if (!Object.prototype.hasOwnProperty.call(host.native.hardware.networkInterfaces, eth)) {
|
|
2303
|
+
continue;
|
|
2230
2304
|
}
|
|
2231
|
-
|
|
2232
|
-
|
|
2305
|
+
for (let num = 0; num < host.native.hardware.networkInterfaces[eth].length; num++) {
|
|
2306
|
+
if (host.native.hardware.networkInterfaces[eth][num].family !== 'IPv6') {
|
|
2307
|
+
IPs4.push({
|
|
2308
|
+
name: `[${host.native.hardware.networkInterfaces[eth][num].family}] ${host.native.hardware.networkInterfaces[eth][num].address} - ${eth}`,
|
|
2309
|
+
address: host.native.hardware.networkInterfaces[eth][num].address,
|
|
2310
|
+
family: 'ipv4',
|
|
2311
|
+
});
|
|
2312
|
+
}
|
|
2313
|
+
else {
|
|
2314
|
+
IPs6.push({
|
|
2315
|
+
name: `[${host.native.hardware.networkInterfaces[eth][num].family}] ${host.native.hardware.networkInterfaces[eth][num].address} - ${eth}`,
|
|
2316
|
+
address: host.native.hardware.networkInterfaces[eth][num].address,
|
|
2317
|
+
family: 'ipv6',
|
|
2318
|
+
});
|
|
2319
|
+
}
|
|
2233
2320
|
}
|
|
2234
2321
|
}
|
|
2235
2322
|
}
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
})
|
|
2323
|
+
for (let i = 0; i < IPs6.length; i++) {
|
|
2324
|
+
IPs4.push(IPs6[i]);
|
|
2325
|
+
}
|
|
2326
|
+
resolve(IPs4);
|
|
2327
|
+
});
|
|
2328
|
+
});
|
|
2242
2329
|
return this._promises[`rIPs_${ipOrHostName}`];
|
|
2243
2330
|
}
|
|
2244
2331
|
/**
|
|
@@ -2248,7 +2335,9 @@ class Connection {
|
|
|
2248
2335
|
if (Connection.isWeb()) {
|
|
2249
2336
|
return Promise.reject('Allowed only in admin');
|
|
2250
2337
|
}
|
|
2251
|
-
return new Promise((resolve, reject) =>
|
|
2338
|
+
return new Promise((resolve, reject) => {
|
|
2339
|
+
this._socket.emit('encrypt', text, (err, _text) => (err ? reject(err) : resolve(_text)));
|
|
2340
|
+
});
|
|
2252
2341
|
}
|
|
2253
2342
|
/**
|
|
2254
2343
|
* Decrypt a text
|
|
@@ -2257,7 +2346,9 @@ class Connection {
|
|
|
2257
2346
|
if (Connection.isWeb()) {
|
|
2258
2347
|
return Promise.reject('Allowed only in admin');
|
|
2259
2348
|
}
|
|
2260
|
-
return new Promise((resolve, reject) =>
|
|
2349
|
+
return new Promise((resolve, reject) => {
|
|
2350
|
+
this._socket.emit('decrypt', encryptedText, (err, text) => (err ? reject(err) : resolve(text)));
|
|
2351
|
+
});
|
|
2261
2352
|
}
|
|
2262
2353
|
/**
|
|
2263
2354
|
* Gets the version.
|
|
@@ -2267,15 +2358,17 @@ class Connection {
|
|
|
2267
2358
|
if (update && this._promises.version) {
|
|
2268
2359
|
delete this._promises.version;
|
|
2269
2360
|
}
|
|
2270
|
-
this._promises.version = this._promises.version || new Promise((resolve, reject) =>
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2361
|
+
this._promises.version = this._promises.version || new Promise((resolve, reject) => {
|
|
2362
|
+
this._socket.emit('getVersion', (err, version, serverName) => {
|
|
2363
|
+
// support of old socket.io
|
|
2364
|
+
if (err && !version && typeof err === 'string' && err.match(/\d+\.\d+\.\d+/)) {
|
|
2365
|
+
resolve({ version: err, serverName: 'socketio' });
|
|
2366
|
+
}
|
|
2367
|
+
else {
|
|
2368
|
+
err ? reject(err) : resolve({ version, serverName });
|
|
2369
|
+
}
|
|
2370
|
+
});
|
|
2371
|
+
});
|
|
2279
2372
|
return this._promises.version;
|
|
2280
2373
|
}
|
|
2281
2374
|
/**
|
|
@@ -2283,7 +2376,9 @@ class Connection {
|
|
|
2283
2376
|
* @returns {Promise<string>}
|
|
2284
2377
|
*/
|
|
2285
2378
|
getWebServerName() {
|
|
2286
|
-
this._promises.webName = this._promises.webName || new Promise((resolve, reject) =>
|
|
2379
|
+
this._promises.webName = this._promises.webName || new Promise((resolve, reject) => {
|
|
2380
|
+
this._socket.emit('getAdapterName', (err, name) => (err ? reject(err) : resolve(name)));
|
|
2381
|
+
});
|
|
2287
2382
|
return this._promises.webName;
|
|
2288
2383
|
}
|
|
2289
2384
|
/**
|
|
@@ -2310,7 +2405,9 @@ class Connection {
|
|
|
2310
2405
|
if (!this.connected) {
|
|
2311
2406
|
return Promise.reject(NOT_CONNECTED);
|
|
2312
2407
|
}
|
|
2313
|
-
return new Promise((resolve, reject) =>
|
|
2408
|
+
return new Promise((resolve, reject) => {
|
|
2409
|
+
this._socket.emit('chmodFile', adapter, filename, options, (err, entries, id) => (err ? reject(err) : resolve({ entries, id })));
|
|
2410
|
+
});
|
|
2314
2411
|
}
|
|
2315
2412
|
/**
|
|
2316
2413
|
* Change an owner or/and owner group for file
|
|
@@ -2326,7 +2423,9 @@ class Connection {
|
|
|
2326
2423
|
if (!this.connected) {
|
|
2327
2424
|
return Promise.reject(NOT_CONNECTED);
|
|
2328
2425
|
}
|
|
2329
|
-
return new Promise((resolve, reject) =>
|
|
2426
|
+
return new Promise((resolve, reject) => {
|
|
2427
|
+
this._socket.emit('chownFile', adapter, fileName, options, (err, entries, id) => (err ? reject(err) : resolve({ entries, id })));
|
|
2428
|
+
});
|
|
2330
2429
|
}
|
|
2331
2430
|
/**
|
|
2332
2431
|
* Check if the file exists
|
|
@@ -2339,7 +2438,9 @@ class Connection {
|
|
|
2339
2438
|
if (!this.connected) {
|
|
2340
2439
|
return Promise.reject(NOT_CONNECTED);
|
|
2341
2440
|
}
|
|
2342
|
-
return new Promise((resolve, reject) =>
|
|
2441
|
+
return new Promise((resolve, reject) => {
|
|
2442
|
+
this._socket.emit('fileExists', adapter, fileName, (err, exists) => (err ? reject(err) : resolve(exists)));
|
|
2443
|
+
});
|
|
2343
2444
|
}
|
|
2344
2445
|
/**
|
|
2345
2446
|
* Get the alarm notifications from a host (only for admin connection).
|
|
@@ -2352,7 +2453,9 @@ class Connection {
|
|
|
2352
2453
|
if (!this.connected) {
|
|
2353
2454
|
return Promise.reject(NOT_CONNECTED);
|
|
2354
2455
|
}
|
|
2355
|
-
return new Promise(resolve =>
|
|
2456
|
+
return new Promise(resolve => {
|
|
2457
|
+
this._socket.emit('sendToHost', host, 'getNotifications', { category }, (notifications) => resolve(notifications));
|
|
2458
|
+
});
|
|
2356
2459
|
}
|
|
2357
2460
|
/**
|
|
2358
2461
|
* Clear the alarm notifications on a host (only for admin connection).
|
|
@@ -2367,7 +2470,9 @@ class Connection {
|
|
|
2367
2470
|
if (!this.connected) {
|
|
2368
2471
|
return Promise.reject(NOT_CONNECTED);
|
|
2369
2472
|
}
|
|
2370
|
-
return new Promise(resolve =>
|
|
2473
|
+
return new Promise(resolve => {
|
|
2474
|
+
this._socket.emit('sendToHost', host, 'clearNotifications', { category }, (result) => resolve(result));
|
|
2475
|
+
});
|
|
2371
2476
|
}
|
|
2372
2477
|
/**
|
|
2373
2478
|
* Read if only easy mode is allowed (only for admin connection).
|
|
@@ -2379,7 +2484,9 @@ class Connection {
|
|
|
2379
2484
|
if (!this.connected) {
|
|
2380
2485
|
return Promise.reject(NOT_CONNECTED);
|
|
2381
2486
|
}
|
|
2382
|
-
return new Promise((resolve, reject) =>
|
|
2487
|
+
return new Promise((resolve, reject) => {
|
|
2488
|
+
this._socket.emit('getIsEasyModeStrict', (error, isStrict) => (error ? reject(error) : resolve(isStrict)));
|
|
2489
|
+
});
|
|
2383
2490
|
}
|
|
2384
2491
|
/**
|
|
2385
2492
|
* Read easy mode configuration (only for admin connection).
|
|
@@ -2392,7 +2499,9 @@ class Connection {
|
|
|
2392
2499
|
if (!this.connected) {
|
|
2393
2500
|
return Promise.reject(NOT_CONNECTED);
|
|
2394
2501
|
}
|
|
2395
|
-
return new Promise((resolve, reject) =>
|
|
2502
|
+
return new Promise((resolve, reject) => {
|
|
2503
|
+
this._socket.emit('getEasyMode', (error, config) => (error ? reject(error) : resolve(config)));
|
|
2504
|
+
});
|
|
2396
2505
|
}
|
|
2397
2506
|
/**
|
|
2398
2507
|
* Read current user
|
|
@@ -2402,7 +2511,9 @@ class Connection {
|
|
|
2402
2511
|
if (!this.connected) {
|
|
2403
2512
|
return Promise.reject(NOT_CONNECTED);
|
|
2404
2513
|
}
|
|
2405
|
-
return new Promise(resolve =>
|
|
2514
|
+
return new Promise(resolve => {
|
|
2515
|
+
this._socket.emit('authEnabled', (isSecure, user) => resolve(user));
|
|
2516
|
+
});
|
|
2406
2517
|
}
|
|
2407
2518
|
getCurrentSession(cmdTimeout) {
|
|
2408
2519
|
if (!this.connected) {
|
|
@@ -2417,7 +2528,7 @@ class Connection {
|
|
|
2417
2528
|
reject('getCurrentSession timeout');
|
|
2418
2529
|
}
|
|
2419
2530
|
}, cmdTimeout || 5000);
|
|
2420
|
-
|
|
2531
|
+
fetch('./session', { signal: controller.signal })
|
|
2421
2532
|
.then(res => res.json())
|
|
2422
2533
|
.then(json => {
|
|
2423
2534
|
if (timeout) {
|
|
@@ -2440,7 +2551,9 @@ class Connection {
|
|
|
2440
2551
|
if (!this.connected) {
|
|
2441
2552
|
return Promise.reject(NOT_CONNECTED);
|
|
2442
2553
|
}
|
|
2443
|
-
return new Promise((resolve, reject) =>
|
|
2554
|
+
return new Promise((resolve, reject) => {
|
|
2555
|
+
this._socket.emit('getRatings', update, (err, ratings) => (err ? reject(err) : resolve(ratings)));
|
|
2556
|
+
});
|
|
2444
2557
|
}
|
|
2445
2558
|
/**
|
|
2446
2559
|
* Read current web, socketio or admin namespace, like admin.0
|
|
@@ -2450,7 +2563,9 @@ class Connection {
|
|
|
2450
2563
|
return Promise.reject(NOT_CONNECTED);
|
|
2451
2564
|
}
|
|
2452
2565
|
this._promises.currentInstance = this._promises.currentInstance ||
|
|
2453
|
-
new Promise((resolve, reject) =>
|
|
2566
|
+
new Promise((resolve, reject) => {
|
|
2567
|
+
this._socket.emit('getCurrentInstance', (err, namespace) => (err ? reject(err) : resolve(namespace)));
|
|
2568
|
+
});
|
|
2454
2569
|
return this._promises.currentInstance;
|
|
2455
2570
|
}
|
|
2456
2571
|
// returns very optimized information for adapters to minimize a connection load
|
|
@@ -2464,7 +2579,9 @@ class Connection {
|
|
|
2464
2579
|
if (!this.connected) {
|
|
2465
2580
|
return Promise.reject(NOT_CONNECTED);
|
|
2466
2581
|
}
|
|
2467
|
-
this._promises.compactAdapters = new Promise((resolve, reject) =>
|
|
2582
|
+
this._promises.compactAdapters = new Promise((resolve, reject) => {
|
|
2583
|
+
this._socket.emit('getCompactAdapters', (err, adapters) => (err ? reject(err) : resolve(adapters)));
|
|
2584
|
+
});
|
|
2468
2585
|
return this._promises.compactAdapters;
|
|
2469
2586
|
}
|
|
2470
2587
|
getAdaptersResetCache(adapter) {
|
|
@@ -2483,7 +2600,9 @@ class Connection {
|
|
|
2483
2600
|
if (!this.connected) {
|
|
2484
2601
|
return Promise.reject(NOT_CONNECTED);
|
|
2485
2602
|
}
|
|
2486
|
-
this._promises.compactInstances = new Promise((resolve, reject) =>
|
|
2603
|
+
this._promises.compactInstances = new Promise((resolve, reject) => {
|
|
2604
|
+
this._socket.emit('getCompactInstances', (err, instances) => (err ? reject(err) : resolve(instances)));
|
|
2605
|
+
});
|
|
2487
2606
|
return this._promises.compactInstances;
|
|
2488
2607
|
}
|
|
2489
2608
|
getAdapternInstancesResetCache(adapter) {
|
|
@@ -2579,7 +2698,9 @@ class Connection {
|
|
|
2579
2698
|
if (!this.connected) {
|
|
2580
2699
|
return Promise.reject(NOT_CONNECTED);
|
|
2581
2700
|
}
|
|
2582
|
-
this._promises.systemConfigCommon = new Promise((resolve, reject) =>
|
|
2701
|
+
this._promises.systemConfigCommon = new Promise((resolve, reject) => {
|
|
2702
|
+
this._socket.emit('getCompactSystemConfig', (err, systemConfig) => (err ? reject(err) : resolve(systemConfig)));
|
|
2703
|
+
});
|
|
2583
2704
|
return this._promises.systemConfigCommon;
|
|
2584
2705
|
}
|
|
2585
2706
|
/**
|
|
@@ -2644,7 +2765,9 @@ class Connection {
|
|
|
2644
2765
|
if (!this.connected) {
|
|
2645
2766
|
return Promise.reject(NOT_CONNECTED);
|
|
2646
2767
|
}
|
|
2647
|
-
this._promises.hostsCompact = new Promise((resolve, reject) =>
|
|
2768
|
+
this._promises.hostsCompact = new Promise((resolve, reject) => {
|
|
2769
|
+
this._socket.emit('getCompactHosts', (err, hosts) => (err ? reject(err) : resolve(hosts)));
|
|
2770
|
+
});
|
|
2648
2771
|
return this._promises.hostsCompact;
|
|
2649
2772
|
}
|
|
2650
2773
|
/**
|
|
@@ -2658,7 +2781,6 @@ class Connection {
|
|
|
2658
2781
|
return Promise.reject(NOT_CONNECTED);
|
|
2659
2782
|
}
|
|
2660
2783
|
this._promises.uuid = this.getObject('system.meta.uuid')
|
|
2661
|
-
// @ts-ignore
|
|
2662
2784
|
.then(obj => { var _a; return (_a = obj === null || obj === void 0 ? void 0 : obj.native) === null || _a === void 0 ? void 0 : _a.uuid; });
|
|
2663
2785
|
return this._promises.uuid;
|
|
2664
2786
|
}
|
|
@@ -2680,29 +2802,31 @@ class Connection {
|
|
|
2680
2802
|
if (!this.connected) {
|
|
2681
2803
|
return Promise.reject(NOT_CONNECTED);
|
|
2682
2804
|
}
|
|
2683
|
-
return new Promise((resolve, reject) =>
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
else if (result && result.error) {
|
|
2688
|
-
reject(result.error);
|
|
2689
|
-
}
|
|
2690
|
-
else {
|
|
2691
|
-
if (!targetInstance.startsWith('system.adapter.')) {
|
|
2692
|
-
targetInstance = `system.adapter.${targetInstance}`;
|
|
2693
|
-
}
|
|
2694
|
-
// save callback
|
|
2695
|
-
this._instanceSubscriptions[targetInstance] = this._instanceSubscriptions[targetInstance] || [];
|
|
2696
|
-
if (!this._instanceSubscriptions[targetInstance].find(sub => sub.messageType === messageType &&
|
|
2697
|
-
sub.callback === callback)) {
|
|
2698
|
-
this._instanceSubscriptions[targetInstance].push({
|
|
2699
|
-
messageType,
|
|
2700
|
-
callback,
|
|
2701
|
-
});
|
|
2805
|
+
return new Promise((resolve, reject) => {
|
|
2806
|
+
this._socket.emit('clientSubscribe', targetInstance, messageType, data, (err, result) => {
|
|
2807
|
+
if (err) {
|
|
2808
|
+
reject(err);
|
|
2702
2809
|
}
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2810
|
+
else if (result && result.error) {
|
|
2811
|
+
reject(result.error);
|
|
2812
|
+
}
|
|
2813
|
+
else {
|
|
2814
|
+
if (!targetInstance.startsWith('system.adapter.')) {
|
|
2815
|
+
targetInstance = `system.adapter.${targetInstance}`;
|
|
2816
|
+
}
|
|
2817
|
+
// save callback
|
|
2818
|
+
this._instanceSubscriptions[targetInstance] = this._instanceSubscriptions[targetInstance] || [];
|
|
2819
|
+
if (!this._instanceSubscriptions[targetInstance].find(sub => sub.messageType === messageType &&
|
|
2820
|
+
sub.callback === callback)) {
|
|
2821
|
+
this._instanceSubscriptions[targetInstance].push({
|
|
2822
|
+
messageType,
|
|
2823
|
+
callback,
|
|
2824
|
+
});
|
|
2825
|
+
}
|
|
2826
|
+
resolve(result);
|
|
2827
|
+
}
|
|
2828
|
+
});
|
|
2829
|
+
});
|
|
2706
2830
|
}
|
|
2707
2831
|
/**
|
|
2708
2832
|
* Unsubscribe from instance message
|
|
@@ -2735,14 +2859,16 @@ class Connection {
|
|
|
2735
2859
|
const found = this._instanceSubscriptions[targetInstance] &&
|
|
2736
2860
|
this._instanceSubscriptions[targetInstance].find(sub => sub.messageType === _messageType);
|
|
2737
2861
|
if (!found) {
|
|
2738
|
-
promiseResults.push(new Promise((resolve, reject) =>
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2862
|
+
promiseResults.push(new Promise((resolve, reject) => {
|
|
2863
|
+
this._socket.emit('clientUnsubscribe', targetInstance, messageType, (err, wasSubscribed) => {
|
|
2864
|
+
if (err) {
|
|
2865
|
+
reject(err);
|
|
2866
|
+
}
|
|
2867
|
+
else {
|
|
2868
|
+
resolve(wasSubscribed);
|
|
2869
|
+
}
|
|
2870
|
+
});
|
|
2871
|
+
}));
|
|
2746
2872
|
}
|
|
2747
2873
|
}
|
|
2748
2874
|
} while (deleted && (!callback || !messageType));
|
|
@@ -2766,7 +2892,9 @@ class Connection {
|
|
|
2766
2892
|
if (!this.connected) {
|
|
2767
2893
|
return Promise.reject(NOT_CONNECTED);
|
|
2768
2894
|
}
|
|
2769
|
-
return new Promise((resolve, reject) =>
|
|
2895
|
+
return new Promise((resolve, reject) => {
|
|
2896
|
+
this._socket.emit('logout', (err) => (err ? reject(err) : resolve()));
|
|
2897
|
+
});
|
|
2770
2898
|
}
|
|
2771
2899
|
/**
|
|
2772
2900
|
* This is a special method for vis.
|