@iobroker/adapter-react-v5 7.2.3 → 7.2.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/README.md +3 -3
- package/build/AdminConnection.d.ts +1 -0
- package/build/AdminConnection.js +2 -0
- package/build/AdminConnection.js.map +1 -0
- package/{src/Components/404.tsx → build/Components/404.js} +14 -39
- package/build/Components/404.js.map +1 -0
- package/{Components → build/Components}/ColorPicker.d.ts +2 -2
- package/{Components → build/Components}/ColorPicker.js +50 -65
- package/build/Components/ColorPicker.js.map +1 -0
- package/{Components → build/Components}/ComplexCron.d.ts +2 -2
- package/{Components → build/Components}/ComplexCron.js +43 -71
- package/build/Components/ComplexCron.js.map +1 -0
- package/{Components → build/Components}/CopyToClipboard.d.ts +1 -2
- package/{src/Components/CopyToClipboard.tsx → build/Components/CopyToClipboard.js} +20 -38
- package/build/Components/CopyToClipboard.js.map +1 -0
- package/{Components → build/Components}/CustomModal.d.ts +3 -3
- package/build/Components/CustomModal.js +60 -0
- package/build/Components/CustomModal.js.map +1 -0
- package/{Components → build/Components}/FileBrowser.d.ts +21 -21
- package/{Components → build/Components}/FileBrowser.js +253 -248
- package/build/Components/FileBrowser.js.map +1 -0
- package/build/Components/FileViewer.d.ts +48 -0
- package/build/Components/FileViewer.js +277 -0
- package/build/Components/FileViewer.js.map +1 -0
- package/{Components → build/Components}/Icon.d.ts +1 -1
- package/build/Components/Icon.js +140 -0
- package/build/Components/Icon.js.map +1 -0
- package/{Components → build/Components}/IconPicker.d.ts +2 -2
- package/build/Components/IconPicker.js +73 -0
- package/build/Components/IconPicker.js.map +1 -0
- package/{Components → build/Components}/IconSelector.d.ts +3 -3
- package/{Components → build/Components}/IconSelector.js +29 -57
- package/build/Components/IconSelector.js.map +1 -0
- package/{Components → build/Components}/Image.d.ts +2 -2
- package/{Components → build/Components}/Image.js +16 -22
- package/build/Components/Image.js.map +1 -0
- package/{Components → build/Components}/Loader.d.ts +2 -2
- package/{Components → build/Components}/Loader.js +15 -40
- package/build/Components/Loader.js.map +1 -0
- package/{Components → build/Components}/Loaders/MV.d.ts +2 -2
- package/build/Components/Loaders/MV.js +61 -0
- package/build/Components/Loaders/MV.js.map +1 -0
- package/{Components → build/Components}/Loaders/PT.d.ts +2 -2
- package/{Components → build/Components}/Loaders/PT.js +10 -35
- package/build/Components/Loaders/PT.js.map +1 -0
- package/{Components → build/Components}/Loaders/Vendor.d.ts +2 -2
- package/build/Components/Loaders/Vendor.js +52 -0
- package/build/Components/Loaders/Vendor.js.map +1 -0
- package/{Components → build/Components}/Logo.d.ts +2 -2
- package/build/Components/Logo.js +108 -0
- package/build/Components/Logo.js.map +1 -0
- package/{Components → build/Components}/MDUtils.d.ts +1 -2
- package/{Components → build/Components}/MDUtils.js +4 -9
- package/build/Components/MDUtils.js.map +1 -0
- package/{Components → build/Components}/ObjectBrowser.d.ts +7 -4
- package/{Components → build/Components}/ObjectBrowser.js +1183 -1133
- package/build/Components/ObjectBrowser.js.map +1 -0
- package/{Components → build/Components}/Router.d.ts +1 -2
- package/{Components → build/Components}/Router.js +6 -7
- package/build/Components/Router.js.map +1 -0
- package/{Components → build/Components}/SaveCloseButtons.d.ts +2 -2
- package/build/Components/SaveCloseButtons.js +65 -0
- package/build/Components/SaveCloseButtons.js.map +1 -0
- package/{Components → build/Components}/Schedule.d.ts +3 -3
- package/{Components → build/Components}/Schedule.js +246 -261
- package/build/Components/Schedule.js.map +1 -0
- package/{Components → build/Components}/SelectWithIcon.d.ts +2 -2
- package/build/Components/SelectWithIcon.js +135 -0
- package/build/Components/SelectWithIcon.js.map +1 -0
- package/build/Components/SimpleCron/cronText.js +15 -0
- package/build/Components/SimpleCron/cronText.js.map +1 -0
- package/{Components → build/Components}/SimpleCron/index.d.ts +2 -2
- package/{Components → build/Components}/SimpleCron/index.js +55 -56
- package/build/Components/SimpleCron/index.js.map +1 -0
- package/{Components → build/Components}/TabContainer.d.ts +2 -2
- package/build/Components/TabContainer.js +23 -0
- package/build/Components/TabContainer.js.map +1 -0
- package/{Components → build/Components}/TabContent.d.ts +3 -2
- package/build/Components/TabContent.js +20 -0
- package/build/Components/TabContent.js.map +1 -0
- package/build/Components/TabHeader.d.ts +6 -0
- package/build/Components/TabHeader.js +6 -0
- package/build/Components/TabHeader.js.map +1 -0
- package/{Components → build/Components}/TableResize.d.ts +2 -2
- package/{src/Components/TableResize.tsx → build/Components/TableResize.js} +64 -134
- package/build/Components/TableResize.js.map +1 -0
- package/{Components → build/Components}/TextWithIcon.d.ts +2 -2
- package/{src/Components/TextWithIcon.tsx → build/Components/TextWithIcon.js} +30 -75
- package/build/Components/TextWithIcon.js.map +1 -0
- package/{Components → build/Components}/ToggleThemeMenu.d.ts +1 -1
- package/build/Components/ToggleThemeMenu.js +13 -0
- package/build/Components/ToggleThemeMenu.js.map +1 -0
- package/{Components → build/Components}/TreeTable.d.ts +3 -3
- package/{Components → build/Components}/TreeTable.js +87 -99
- package/build/Components/TreeTable.js.map +1 -0
- package/{Components → build/Components}/UploadImage.d.ts +2 -2
- package/{Components → build/Components}/UploadImage.js +46 -69
- package/build/Components/UploadImage.js.map +1 -0
- package/{Components → build/Components}/Utils.d.ts +2 -2
- package/{Components → build/Components}/Utils.js +47 -60
- package/build/Components/Utils.js.map +1 -0
- package/build/Components/withWidth.d.ts +2 -0
- package/build/Components/withWidth.js +22 -0
- package/build/Components/withWidth.js.map +1 -0
- package/build/Connection.d.ts +1 -0
- package/build/Connection.js +2 -0
- package/build/Connection.js.map +1 -0
- package/{Dialogs → build/Dialogs}/ComplexCron.d.ts +2 -2
- package/build/Dialogs/ComplexCron.js +85 -0
- package/build/Dialogs/ComplexCron.js.map +1 -0
- package/{Dialogs → build/Dialogs}/Confirm.d.ts +2 -2
- package/build/Dialogs/Confirm.js +83 -0
- package/build/Dialogs/Confirm.js.map +1 -0
- package/{Dialogs → build/Dialogs}/Cron.d.ts +2 -2
- package/build/Dialogs/Cron.js +72 -0
- package/build/Dialogs/Cron.js.map +1 -0
- package/{Dialogs → build/Dialogs}/Error.d.ts +2 -2
- package/build/Dialogs/Error.js +27 -0
- package/build/Dialogs/Error.js.map +1 -0
- package/{Dialogs → build/Dialogs}/Message.d.ts +2 -2
- package/build/Dialogs/Message.js +29 -0
- package/build/Dialogs/Message.js.map +1 -0
- package/{Dialogs → build/Dialogs}/SelectFile.d.ts +2 -2
- package/build/Dialogs/SelectFile.js +116 -0
- package/build/Dialogs/SelectFile.js.map +1 -0
- package/{Dialogs → build/Dialogs}/SelectID.d.ts +3 -3
- package/{Dialogs → build/Dialogs}/SelectID.js +28 -53
- package/build/Dialogs/SelectID.js.map +1 -0
- package/{Dialogs → build/Dialogs}/SimpleCron.d.ts +2 -2
- package/build/Dialogs/SimpleCron.js +46 -0
- package/build/Dialogs/SimpleCron.js.map +1 -0
- package/build/Dialogs/TextInput.d.ts +2 -0
- package/build/Dialogs/TextInput.js +31 -0
- package/build/Dialogs/TextInput.js.map +1 -0
- package/{GenericApp.d.ts → build/GenericApp.d.ts} +2 -3
- package/{GenericApp.js → build/GenericApp.js} +162 -176
- package/build/GenericApp.js.map +1 -0
- package/{LegacyConnection.d.ts → build/LegacyConnection.d.ts} +69 -4
- package/{LegacyConnection.js → build/LegacyConnection.js} +106 -99
- package/build/LegacyConnection.js.map +1 -0
- package/{Prompt.d.ts → build/Prompt.d.ts} +1 -1
- package/{Prompt.js → build/Prompt.js} +3 -4
- package/build/Prompt.js.map +1 -0
- package/build/Theme.d.ts +5 -0
- package/{Theme.js → build/Theme.js} +37 -32
- package/build/Theme.js.map +1 -0
- package/build/assets/devices/parseNames.d.ts +0 -0
- package/build/assets/devices/parseNames.js +35 -0
- package/build/assets/devices/parseNames.js.map +1 -0
- package/build/assets/rooms/parseNames.d.ts +0 -0
- package/build/assets/rooms/parseNames.js +35 -0
- package/build/assets/rooms/parseNames.js.map +1 -0
- package/build/dictionary.d.ts +1 -0
- package/build/dictionary.js +25 -0
- package/build/dictionary.js.map +1 -0
- package/build/i18n/de.json +449 -0
- package/build/i18n/en.json +449 -0
- package/build/i18n/es.json +449 -0
- package/build/i18n/fr.json +449 -0
- package/build/i18n/it.json +449 -0
- package/build/i18n/nl.json +449 -0
- package/build/i18n/pl.json +449 -0
- package/build/i18n/pt.json +449 -0
- package/build/i18n/ru.json +449 -0
- package/build/i18n/uk.json +449 -0
- package/build/i18n/zh-cn.json +449 -0
- package/{i18n.d.ts → build/i18n.d.ts} +2 -2
- package/{i18n.js → build/i18n.js} +9 -11
- package/build/i18n.js.map +1 -0
- package/build/icons/IconAdapter.d.ts +3 -0
- package/build/icons/IconAdapter.js +6 -0
- package/build/icons/IconAdapter.js.map +1 -0
- package/build/icons/IconAlias.d.ts +3 -0
- package/build/icons/IconAlias.js +6 -0
- package/build/icons/IconAlias.js.map +1 -0
- package/build/icons/IconChannel.d.ts +3 -0
- package/build/icons/IconChannel.js +9 -0
- package/build/icons/IconChannel.js.map +1 -0
- package/build/icons/IconClearFilter.d.ts +3 -0
- package/build/icons/IconClearFilter.js +7 -0
- package/build/icons/IconClearFilter.js.map +1 -0
- package/build/icons/IconClosed.d.ts +3 -0
- package/build/icons/IconClosed.js +6 -0
- package/build/icons/IconClosed.js.map +1 -0
- package/build/icons/IconCopy.d.ts +3 -0
- package/build/icons/IconCopy.js +5 -0
- package/build/icons/IconCopy.js.map +1 -0
- package/build/icons/IconDevice.d.ts +3 -0
- package/build/icons/IconDevice.js +15 -0
- package/build/icons/IconDevice.js.map +1 -0
- package/build/icons/IconDocument.d.ts +3 -0
- package/build/icons/IconDocument.js +6 -0
- package/build/icons/IconDocument.js.map +1 -0
- package/build/icons/IconDocumentReadOnly.d.ts +3 -0
- package/build/icons/IconDocumentReadOnly.js +7 -0
- package/build/icons/IconDocumentReadOnly.js.map +1 -0
- package/build/icons/IconExpert.d.ts +3 -0
- package/build/icons/IconExpert.js +6 -0
- package/build/icons/IconExpert.js.map +1 -0
- package/build/icons/IconFx.d.ts +3 -0
- package/build/icons/IconFx.js +5 -0
- package/build/icons/IconFx.js.map +1 -0
- package/build/icons/IconInstance.d.ts +3 -0
- package/build/icons/IconInstance.js +6 -0
- package/build/icons/IconInstance.js.map +1 -0
- package/build/icons/IconLogout.d.ts +3 -0
- package/build/icons/IconLogout.js +6 -0
- package/build/icons/IconLogout.js.map +1 -0
- package/build/icons/IconNoIcon.d.ts +3 -0
- package/build/icons/IconNoIcon.js +5 -0
- package/build/icons/IconNoIcon.js.map +1 -0
- package/build/icons/IconOpen.d.ts +3 -0
- package/build/icons/IconOpen.js +6 -0
- package/build/icons/IconOpen.js.map +1 -0
- package/{icons → build/icons}/IconProps.d.ts +1 -1
- package/build/icons/IconProps.js +2 -0
- package/build/icons/IconProps.js.map +1 -0
- package/build/icons/IconState.d.ts +3 -0
- package/build/icons/IconState.js +6 -0
- package/build/icons/IconState.js.map +1 -0
- package/build/index.d.ts +67 -0
- package/build/index.js +67 -0
- package/build/index.js.map +1 -0
- package/{types.d.ts → build/types.d.ts} +1 -1
- package/package.json +84 -47
- package/AdminConnection.d.ts +0 -2
- package/AdminConnection.js +0 -4
- package/Components/404.js +0 -101
- package/Components/CopyToClipboard.js +0 -163
- package/Components/CustomModal.js +0 -88
- package/Components/FileViewer.d.ts +0 -10
- package/Components/FileViewer.js +0 -305
- package/Components/Icon.js +0 -148
- package/Components/IconPicker.js +0 -98
- package/Components/Loaders/MV.js +0 -66
- package/Components/Loaders/Vendor.js +0 -77
- package/Components/Logo.js +0 -117
- package/Components/SaveCloseButtons.js +0 -69
- package/Components/SelectWithIcon.js +0 -168
- package/Components/SimpleCron/cronText.js +0 -19
- package/Components/TabContainer.js +0 -25
- package/Components/TabContent.js +0 -21
- package/Components/TabHeader.d.ts +0 -6
- package/Components/TabHeader.js +0 -11
- package/Components/TableResize.js +0 -226
- package/Components/TextWithIcon.js +0 -119
- package/Components/ToggleThemeMenu.js +0 -18
- package/Components/withWidth.d.ts +0 -3
- package/Components/withWidth.js +0 -27
- package/Connection.d.ts +0 -3
- package/Connection.js +0 -8
- package/Dialogs/ComplexCron.js +0 -90
- package/Dialogs/Confirm.js +0 -111
- package/Dialogs/Cron.js +0 -100
- package/Dialogs/Error.js +0 -55
- package/Dialogs/Message.js +0 -57
- package/Dialogs/SelectFile.js +0 -119
- package/Dialogs/SimpleCron.js +0 -51
- package/Dialogs/TextInput.d.ts +0 -3
- package/Dialogs/TextInput.js +0 -35
- package/Theme.d.ts +0 -6
- package/i18n/de.json +0 -449
- package/i18n/en.json +0 -449
- package/i18n/es.json +0 -449
- package/i18n/fr.json +0 -449
- package/i18n/it.json +0 -449
- package/i18n/nl.json +0 -449
- package/i18n/pl.json +0 -449
- package/i18n/pt.json +0 -449
- package/i18n/ru.json +0 -449
- package/i18n/uk.json +0 -449
- package/i18n/zh-cn.json +0 -449
- package/icons/IconAdapter.d.ts +0 -4
- package/icons/IconAdapter.js +0 -10
- package/icons/IconAlias.d.ts +0 -4
- package/icons/IconAlias.js +0 -10
- package/icons/IconChannel.d.ts +0 -4
- package/icons/IconChannel.js +0 -13
- package/icons/IconClearFilter.d.ts +0 -4
- package/icons/IconClearFilter.js +0 -11
- package/icons/IconClosed.d.ts +0 -4
- package/icons/IconClosed.js +0 -10
- package/icons/IconCopy.d.ts +0 -4
- package/icons/IconCopy.js +0 -9
- package/icons/IconDevice.d.ts +0 -4
- package/icons/IconDevice.js +0 -19
- package/icons/IconDocument.d.ts +0 -4
- package/icons/IconDocument.js +0 -10
- package/icons/IconDocumentReadOnly.d.ts +0 -4
- package/icons/IconDocumentReadOnly.js +0 -11
- package/icons/IconExpert.d.ts +0 -4
- package/icons/IconExpert.js +0 -10
- package/icons/IconFx.d.ts +0 -4
- package/icons/IconFx.js +0 -9
- package/icons/IconInstance.d.ts +0 -4
- package/icons/IconInstance.js +0 -10
- package/icons/IconLogout.d.ts +0 -4
- package/icons/IconLogout.js +0 -10
- package/icons/IconNoIcon.d.ts +0 -4
- package/icons/IconNoIcon.js +0 -9
- package/icons/IconOpen.d.ts +0 -4
- package/icons/IconOpen.js +0 -10
- package/icons/IconProps.js +0 -2
- package/icons/IconState.d.ts +0 -4
- package/icons/IconState.js +0 -10
- package/index.d.ts +0 -128
- package/index.js +0 -215
- package/src/AdminConnection.tsx +0 -3
- package/src/Components/ColorPicker.tsx +0 -343
- package/src/Components/ComplexCron.tsx +0 -561
- package/src/Components/CustomModal.tsx +0 -170
- package/src/Components/FileBrowser.tsx +0 -2550
- package/src/Components/FileViewer.tsx +0 -412
- package/src/Components/Icon.tsx +0 -238
- package/src/Components/IconPicker.tsx +0 -165
- package/src/Components/IconSelector.tsx +0 -2220
- package/src/Components/Image.tsx +0 -193
- package/src/Components/Loader.tsx +0 -328
- package/src/Components/Logo.tsx +0 -176
- package/src/Components/MDUtils.tsx +0 -104
- package/src/Components/ObjectBrowser.tsx +0 -8935
- package/src/Components/Router.tsx +0 -90
- package/src/Components/SaveCloseButtons.tsx +0 -117
- package/src/Components/Schedule.tsx +0 -1995
- package/src/Components/SelectWithIcon.tsx +0 -239
- package/src/Components/TabContainer.tsx +0 -57
- package/src/Components/TabContent.tsx +0 -38
- package/src/Components/TabHeader.tsx +0 -20
- package/src/Components/ToggleThemeMenu.tsx +0 -52
- package/src/Components/TreeTable.tsx +0 -1002
- package/src/Components/UploadImage.tsx +0 -643
- package/src/Components/Utils.tsx +0 -1802
- package/src/Components/loader.css +0 -231
- package/src/Components/withWidth.tsx +0 -32
- package/src/Connection.tsx +0 -5
- package/src/Dialogs/ComplexCron.tsx +0 -163
- package/src/Dialogs/Confirm.tsx +0 -185
- package/src/Dialogs/Cron.tsx +0 -192
- package/src/Dialogs/Error.tsx +0 -67
- package/src/Dialogs/Message.tsx +0 -73
- package/src/Dialogs/SelectFile.tsx +0 -280
- package/src/Dialogs/SelectID.tsx +0 -310
- package/src/Dialogs/SimpleCron.tsx +0 -101
- package/src/Dialogs/TextInput.tsx +0 -99
- package/src/GenericApp.tsx +0 -1076
- package/src/LegacyConnection.tsx +0 -3720
- package/src/Prompt.tsx +0 -22
- package/src/Theme.tsx +0 -472
- package/src/icons/IconAdapter.tsx +0 -22
- package/src/icons/IconAlias.tsx +0 -22
- package/src/icons/IconChannel.tsx +0 -60
- package/src/icons/IconClearFilter.tsx +0 -24
- package/src/icons/IconClosed.tsx +0 -22
- package/src/icons/IconCopy.tsx +0 -21
- package/src/icons/IconDevice.tsx +0 -126
- package/src/icons/IconDocument.tsx +0 -22
- package/src/icons/IconDocumentReadOnly.tsx +0 -27
- package/src/icons/IconExpert.tsx +0 -26
- package/src/icons/IconFx.tsx +0 -38
- package/src/icons/IconInstance.tsx +0 -22
- package/src/icons/IconLogout.tsx +0 -32
- package/src/icons/IconNoIcon.tsx +0 -21
- package/src/icons/IconOpen.tsx +0 -22
- package/src/icons/IconProps.tsx +0 -16
- package/src/icons/IconState.tsx +0 -38
- package/src/index.css +0 -56
- /package/{Components → build/Components}/404.d.ts +0 -0
- /package/{Components → build/Components}/SimpleCron/cronText.d.ts +0 -0
- /package/{assets → build/assets}/devices.json +0 -0
- /package/{assets → build/assets}/lamp_ceiling.svg +0 -0
- /package/{assets → build/assets}/lamp_table.svg +0 -0
- /package/{assets → build/assets}/no_icon.svg +0 -0
- /package/{assets → build/assets}/rooms.json +0 -0
- /package/{index.css → build/index.css} +0 -0
- /package/{tasks.js → tasksExample.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyConnection.js","sourceRoot":"./src/","sources":["LegacyConnection.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2024, Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport type { IoBJson } from '@iobroker/types/build/config';\n\ndeclare global {\n interface Window {\n adapterName: undefined | string;\n socketUrl: undefined | string;\n registerSocketOnLoad: (func: () => void) => void;\n vendorPrefix: undefined | string;\n io: any;\n iob: any;\n }\n}\n\nexport type Severity = 'info' | 'notify' | 'alert';\n\ntype DockerInformation =\n | {\n /** If it is a Docker installation */\n isDocker: boolean;\n /** If it is the official Docker image */\n isOfficial: true;\n /** Semver string for official Docker image */\n officialVersion: string;\n }\n | {\n /** If it is a Docker installation */\n isDocker: boolean;\n /** If it is the official Docker image */\n isOfficial: false;\n };\nexport interface HostInfo {\n /** Converted OS for human readability */\n Platform: NodeJS.Platform | 'docker' | 'Windows' | 'OSX';\n /** The underlying OS */\n os: NodeJS.Platform;\n /** Information about the docker installation */\n dockerInformation?: DockerInformation;\n /** Host architecture */\n Architecture: string;\n /** Number of CPUs */\n CPUs: number | null;\n /** CPU speed */\n Speed: number | null;\n /** CPU model */\n Model: string | null;\n /** Total RAM of host */\n RAM: number;\n /** System uptime in seconds */\n 'System uptime': number;\n /** Node.JS version */\n 'Node.js': string;\n /** Current time to compare to local time */\n time: number;\n /** Timezone offset to compare to local time */\n timeOffset: number;\n /** Number of available adapters */\n 'adapters count': number;\n /** NPM version */\n NPM: string;\n}\ninterface NotificationMessageObject {\n message: string;\n ts: number;\n}\n\ntype MultilingualObject = Exclude<ioBroker.StringOrTranslated, string>;\n\nexport interface FilteredNotificationInformation {\n [scope: string]: {\n description: MultilingualObject;\n name: MultilingualObject;\n categories: {\n [category: string]: {\n description: MultilingualObject;\n name: MultilingualObject;\n severity: Severity;\n instances: {\n [instance: string]: {\n messages: NotificationMessageObject[];\n };\n };\n };\n };\n };\n}\n\nexport type CompactSystemRepositoryEntry = {\n link: string;\n hash?: string;\n stable?: boolean;\n json:\n | {\n _repoInfo: {\n stable?: boolean;\n name?: ioBroker.StringOrTranslated;\n };\n }\n | null\n | undefined;\n};\n\nexport type CompactSystemRepository = {\n _id: ioBroker.HostObject['_id'];\n common: {\n name: ioBroker.HostCommon['name'];\n dontDelete: boolean;\n };\n native: {\n repositories: Record<string, CompactSystemRepositoryEntry>;\n };\n};\n\n/** Possible progress states. */\nexport const PROGRESS = {\n /** The socket is connecting. */\n CONNECTING: 0,\n /** The socket is successfully connected. */\n CONNECTED: 1,\n /** All objects are loaded. */\n OBJECTS_LOADED: 2,\n /** All states are loaded. */\n STATES_LOADED: 3,\n /** The socket is ready for use. */\n READY: 4,\n};\n\nconst PERMISSION_ERROR = 'permissionError';\nconst NOT_CONNECTED = 'notConnectedError';\nconst TIMEOUT_FOR_ADMIN4 = 1300;\n\nexport const ERRORS = {\n PERMISSION_ERROR,\n NOT_CONNECTED,\n};\n\nexport type BinaryStateChangeHandler = (id: string, base64: string | null) => void;\n\nfunction fixAdminUI(obj: ioBroker.AdapterObject): ioBroker.AdapterObject {\n // @ts-expect-error it is deprecated, but still could appear\n if (obj?.common && !obj.common.adminUI) {\n if (obj.common.noConfig) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.config = 'none';\n // @ts-expect-error it is deprecated, but still could appear\n } else if (obj.common.jsonConfig) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.config = 'materialize';\n } else {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.config = 'html';\n }\n\n // @ts-expect-error it is deprecated, but still could appear\n if (obj.common.jsonCustom) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.custom = 'json';\n } else if (obj.common.supportCustoms) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.custom = 'json';\n }\n\n if (obj.common.materializeTab && obj.common.adminTab) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.tab = 'materialize';\n } else if (obj.common.adminTab) {\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI = obj.common.adminUI || {};\n // @ts-expect-error it is deprecated, but still could appear\n obj.common.adminUI.tab = 'html';\n }\n\n // @ts-expect-error it is deprecated, but still could appear\n if (obj.common.adminUI) {\n console.debug(\n // @ts-expect-error it is deprecated, but still could appear\n `Please add to \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n }\n return obj;\n}\n\n/** Converts ioB pattern into regex */\nexport function pattern2RegEx(pattern: string): string {\n pattern = (pattern || '').toString();\n\n const startsWithWildcard = pattern[0] === '*';\n const endsWithWildcard = pattern[pattern.length - 1] === '*';\n\n pattern = pattern.replace(/[-/\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*');\n\n return (startsWithWildcard ? '' : '^') + pattern + (endsWithWildcard ? '' : '$');\n}\n\ninterface ConnectionProps {\n /** The socket name. */\n name?: string;\n /** State IDs to always automatically subscribe to. */\n autoSubscribes?: string[];\n /** Automatically subscribe to logging. */\n autoSubscribeLog?: boolean;\n /** The protocol to use for the socket.io connection. */\n protocol: string;\n /** The host name to use for the socket.io connection. */\n host: string;\n /** The port to use for the socket.io connection. */\n port?: string | number;\n /** The socket.io connection timeout. */\n ioTimeout?: number;\n /** The socket.io command timeout. */\n cmdTimeout?: number;\n /** Flag to indicate if all objects should be loaded or not. Default true (not loaded) */\n doNotLoadAllObjects?: boolean;\n /** Flag to indicate if AccessControlList for current user will be loaded or not. Default true (not loaded) */\n doNotLoadACL?: boolean;\n /** Progress callback. */\n onProgress?: (progress: number) => void;\n /** Ready callback. */\n onReady?: (objects: Record<string, ioBroker.Object>) => void;\n /** Log callback. */\n onLog?: (text: string) => void;\n /** Error callback. */\n onError?: (error: any) => void;\n /** Object change callback. */\n onObjectChange?: ioBroker.ObjectChangeHandler;\n /** Gets called when the system language is determined */\n onLanguage?: (lang: ioBroker.Languages) => void;\n /** Forces the use of the Compact Methods, wich only exists in admin 5 UI. */\n admin5only?: boolean;\n /** The device UUID with which the communication must be established */\n uuid?: string;\n /** Authentication token (used only in cloud) */\n token?: string;\n}\n\nexport interface ConnectOptions {\n path?: string;\n query?: string;\n name?: string;\n timeout?: number;\n uuid?: string;\n}\n\nexport interface SocketClient {\n connect(url?: string, options?: ConnectOptions): void;\n close(): void;\n destroy(): void;\n\n readonly connected: boolean;\n\n on(event: string, callback: (...args: any) => void): void;\n off(event: string, callback: (...args: any) => void): void;\n emit(event: string, ...args: any): boolean;\n}\n\ninterface RenameGroupObject extends ioBroker.GroupObject {\n newId?: ioBroker.ObjectIDs.Group;\n}\n\ninterface Promises {\n installedCompact?: {\n [host: string]: Promise<Record<string, ioBroker.AdapterObject>> | null;\n } | null;\n installed?: {\n [host: string]: Promise<Record<string, ioBroker.AdapterObject>> | null;\n } | null;\n systemConfig?: Promise<ioBroker.SystemConfigObject> | null;\n hosts?: Promise<ioBroker.HostObject[]> | null;\n users?: Promise<ioBroker.UserObject[]> | null;\n compactAdapters?: Promise<Record<string, ioBroker.AdapterObject>> | null;\n repoCompact?: Promise<any> | null;\n version?: Promise<{ version: string; serverName: string }> | null;\n groups?: Promise<ioBroker.GroupObject[]> | null;\n repo?: Promise<Record<string, ioBroker.AdapterObject>> | null;\n cert?: Promise<{ name: string; type: 'public' | 'private' | 'chained' | '' }[]> | null;\n webName?: Promise<string> | null;\n compactInstances?: Promise<Record<string, ioBroker.InstanceObject>> | null;\n getCompactSystemRepositories?: Promise<CompactSystemRepository> | null;\n systemConfigPromise?: Promise<ioBroker.SystemConfigObject> | null;\n hostsCompact?: Promise<ioBroker.HostObject[]> | null;\n uuid?: Promise<string | undefined>;\n [feature: `supportedFeatures_${string}`]: Promise<boolean> | null;\n [type: `instances_${string}`]: Promise<any> | null;\n [_enum: `enums_${string}`]: Promise<any> | null;\n [adapter: `adapter_${string}`]: Promise<any> | null;\n [host: `IPs_${string}`]: Promise<string[]> | null;\n [host: `hostInfo_${string}`]: Promise<HostInfo> | null;\n [host: `hostInfoShort_${string}`]: Promise<HostInfo> | null;\n [host: `rIPs_${string}`]: Promise<{ name: string; address: string; family: 'ipv4' | 'ipv6' }[]> | null;\n currentInstance?: Promise<string> | null;\n}\n\nexport class LegacyConnection {\n // Do not define it as null, else we must check for null everywhere\n private _socket: SocketClient;\n\n private _authTimer: ReturnType<typeof setTimeout> | null | undefined;\n\n private systemLang: ioBroker.Languages = 'en';\n\n private readonly _waitForFirstConnection: Promise<void>;\n\n private _waitForFirstConnectionResolve: (() => void) | null = null;\n\n private _promises: Promises = {};\n\n private readonly _instanceSubscriptions: Record<\n string,\n {\n messageType: string;\n callback: (data: Record<string, any>, sourceInstance: string, messageType: string) => void;\n }[]\n >;\n\n private props: ConnectionProps;\n\n private doNotLoadAllObjects: boolean;\n\n private readonly doNotLoadACL: boolean;\n\n private states: Record<string, ioBroker.State> = {};\n\n private objects: Record<string, ioBroker.Object> | null = null;\n\n private scriptLoadCounter: number | undefined;\n\n private acl: Record<string, any> | null = null;\n\n private firstConnect: boolean = true;\n\n private readonly waitForRestart: boolean = false;\n\n private connected: boolean = false;\n\n private readonly statesSubscribes: Record<\n string,\n { reg: RegExp; cbs: (ioBroker.StateChangeHandler | BinaryStateChangeHandler)[] }\n > = {};\n\n private readonly objectsSubscribes: Record<\n string,\n {\n reg: RegExp;\n cbs: ((id: string, obj: ioBroker.Object | null | undefined, oldObj?: ioBroker.Object | null) => void)[];\n }\n > = {};\n\n private readonly filesSubscribes: Record<\n string,\n { regId: RegExp; cbs: ioBroker.FileChangeHandler[]; regFilePattern: RegExp }\n > = {};\n\n private onConnectionHandlers: ((connected: boolean) => void)[] = [];\n\n private onLogHandlers: ((message: string) => void)[] = [];\n\n private readonly onProgress: (progress: number) => void;\n\n private readonly onError: (\n err:\n | string\n | {\n message: string;\n operation: string;\n type: string;\n id: string;\n },\n ) => void;\n\n private loaded: boolean = false;\n\n private loadTimer: ReturnType<typeof setTimeout> | null = null;\n\n private loadCounter: number = 0;\n\n private admin5only: boolean;\n\n private ignoreState: string = '';\n\n private readonly simStates: Record<string, ioBroker.State> = {};\n\n private autoSubscribes: string[];\n\n private readonly autoSubscribeLog: boolean;\n\n private subscribed: boolean | undefined;\n\n public isSecure: boolean | undefined;\n\n private onCmdStdoutHandler: ((id: string, text: string) => void) | undefined;\n\n private onCmdStderrHandler: ((id: string, text: string) => void) | undefined;\n\n private onCmdExitHandler: ((id: string, exitCode: number) => void) | undefined;\n\n public systemConfig: ioBroker.SystemConfigObject | null = null;\n\n constructor(props: ConnectionProps) {\n props = props || { protocol: window.location.protocol, host: window.location.hostname };\n this.props = props;\n\n this.autoSubscribes = this.props.autoSubscribes || [];\n this.autoSubscribeLog = this.props.autoSubscribeLog || false;\n\n this.props.protocol = this.props.protocol || window.location.protocol;\n this.props.host = this.props.host || window.location.hostname;\n this.props.port =\n this.props.port ||\n (window.location.port === '3000' ? (LegacyConnection.isWeb() ? 8082 : 8081) : window.location.port);\n this.props.ioTimeout = Math.max(this.props.ioTimeout || 20000, 20000);\n this.props.cmdTimeout = Math.max(this.props.cmdTimeout || 5000, 5000);\n this._instanceSubscriptions = {};\n\n // breaking change. Do not load all objects by default is true\n this.doNotLoadAllObjects = this.props.doNotLoadAllObjects === undefined ? true : this.props.doNotLoadAllObjects;\n this.doNotLoadACL = this.props.doNotLoadACL === undefined ? true : this.props.doNotLoadACL;\n\n this.states = {};\n this._waitForFirstConnection = new Promise(resolve => {\n this._waitForFirstConnectionResolve = resolve;\n });\n this.onProgress = this.props.onProgress || (() => {});\n this.onError =\n this.props.onError ||\n ((\n err:\n | string\n | {\n message: string;\n operation: string;\n type: string;\n id: string;\n },\n ) => console.error(err));\n this.admin5only = this.props.admin5only || false;\n\n this.startSocket();\n }\n\n /**\n * Checks if this connection is running in a web adapter and not in an admin.\n *\n * @returns True if running in a web adapter or in a socketio adapter.\n */\n static isWeb(): boolean {\n const adapterName: string | undefined = window.adapterName;\n return (\n adapterName === 'material' ||\n adapterName === 'vis' ||\n adapterName?.startsWith('vis-') ||\n adapterName === 'echarts-show' ||\n window.socketUrl !== undefined\n );\n }\n\n /**\n * Starts the socket.io connection.\n */\n startSocket(): void {\n // if socket io is not yet loaded\n if (typeof window.io === 'undefined' && typeof window.iob === 'undefined') {\n // if in index.html the onLoad function not defined\n if (typeof window.registerSocketOnLoad !== 'function') {\n // poll if loaded\n this.scriptLoadCounter = this.scriptLoadCounter || 0;\n this.scriptLoadCounter++;\n\n if (this.scriptLoadCounter < 30) {\n // wait till the script loaded\n setTimeout(() => this.startSocket(), 100);\n return;\n }\n window.alert('Cannot load socket.io.js!');\n } else {\n // register on load\n window.registerSocketOnLoad(() => this.startSocket());\n }\n return;\n }\n if (this._socket) {\n // socket was initialized, do not repeat\n return;\n }\n\n let host = this.props.host;\n let port = this.props.port;\n let protocol = this.props.protocol.replace(':', '');\n let path = window.location.pathname;\n\n if (window.location.hostname === 'iobroker.net' || window.location.hostname === 'iobroker.pro') {\n path = '';\n } else {\n // if web adapter, socket io could be on another port or even host\n if (window.socketUrl) {\n const parsed = new URL((window as any).socketUrl as string);\n host = parsed.hostname;\n port = parsed.port;\n protocol = parsed.protocol.replace(':', '');\n }\n // get a current path\n const pos = path.lastIndexOf('/');\n if (pos !== -1) {\n path = path.substring(0, pos + 1);\n }\n\n if (LegacyConnection.isWeb()) {\n // remove one level, like echarts, vis, .... We have here: '/echarts/'\n const parts = path.split('/');\n if (parts.length > 2) {\n parts.pop();\n // if it is a version, like in material, so remove it too\n if (parts[parts.length - 1].match(/\\d+\\.\\d+\\.\\d+/)) {\n parts.pop();\n }\n parts.pop();\n path = parts.join('/');\n if (!path.endsWith('/')) {\n path += '/';\n }\n }\n }\n }\n\n const url = port ? `${protocol}://${host}:${port}${path}` : `${protocol}://${host}${path}`;\n\n this._socket = (window.io || window.iob).connect(url, {\n path: path.endsWith('/') ? `${path}socket.io` : `${path}/socket.io`,\n query: 'ws=true',\n name: this.props.name,\n timeout: this.props.ioTimeout,\n uuid: this.props.uuid,\n });\n\n this._socket.on('connect', (noTimeout: boolean | undefined) => {\n // If the user is not admin, it takes some time to install the handlers, because all rights must be checked\n if (noTimeout !== true) {\n setTimeout(\n () =>\n this.getVersion().then(info => {\n const [major, minor, patch] = info.version.split('.');\n const v = parseInt(major, 10) * 10000 + parseInt(minor, 10) * 100 + parseInt(patch, 10);\n if (v < 40102) {\n this._authTimer = null;\n // possible this is an old version of admin\n this.onPreConnect(false, false);\n } else {\n this._socket.emit('authenticate', (isOk: boolean, isSecure: boolean) =>\n this.onPreConnect(isOk, isSecure),\n );\n }\n }),\n 500,\n );\n } else {\n // iobroker websocket waits, till all handlers are installed\n this._socket.emit('authenticate', (isOk: boolean, isSecure: boolean) =>\n this.onPreConnect(isOk, isSecure),\n );\n }\n });\n\n this._socket.on('reconnect', () => {\n this.onProgress(PROGRESS.READY);\n this.connected = true;\n\n if (this.waitForRestart) {\n window.location.reload();\n } else {\n this._subscribe(true);\n this.onConnectionHandlers.forEach(cb => cb(true));\n }\n });\n\n this._socket.on('disconnect', () => {\n this.connected = false;\n this.subscribed = false;\n this.onProgress(PROGRESS.CONNECTING);\n this.onConnectionHandlers.forEach(cb => cb(false));\n });\n\n this._socket.on('reauthenticate', () => LegacyConnection.authenticate());\n\n this._socket.on('log', message => {\n this.props.onLog && this.props.onLog(message);\n this.onLogHandlers.forEach(cb => cb(message));\n });\n\n this._socket.on('error', (err: string | null) => {\n let _err = err || '';\n if (typeof _err.toString !== 'function') {\n _err = JSON.stringify(_err);\n console.error(`Received strange error: ${_err}`);\n }\n _err = _err.toString();\n if (_err.includes('User not authorized')) {\n LegacyConnection.authenticate();\n } else {\n window.alert(`Socket Error: ${err}`);\n }\n });\n\n this._socket.on('connect_error', (err: string) => console.error(`Connect error: ${err}`));\n\n this._socket.on('permissionError', (err: { operation: string; type: string; id?: string }) =>\n this.onError({\n message: 'no permission',\n operation: err.operation,\n type: err.type,\n id: err.id || '',\n }),\n );\n\n this._socket.on('objectChange', (id: string, obj: ioBroker.Object | null) =>\n setTimeout(() => this.objectChange(id, obj), 0),\n );\n\n this._socket.on('stateChange', (id: string, state) => setTimeout(() => this.stateChange(id, state), 0));\n\n this._socket.on('im', (messageType: string, from: string, data) =>\n setTimeout(() => this.instanceMessage(messageType, from, data), 0),\n );\n\n this._socket.on('fileChange', (id: string, fileName: string, size: number | null) =>\n setTimeout(() => this.fileChange(id, fileName, size), 0),\n );\n\n this._socket.on(\n 'cmdStdout',\n (id: string, text: string) => this.onCmdStdoutHandler && this.onCmdStdoutHandler(id, text),\n );\n\n this._socket.on(\n 'cmdStderr',\n (id: string, text: string) => this.onCmdStderrHandler && this.onCmdStderrHandler(id, text),\n );\n\n this._socket.on(\n 'cmdExit',\n (id: string, exitCode: number) => this.onCmdExitHandler && this.onCmdExitHandler(id, exitCode),\n );\n }\n\n /**\n * Called internally.\n */\n private onPreConnect(_isOk: boolean, isSecure: boolean): void {\n if (this._authTimer) {\n clearTimeout(this._authTimer);\n this._authTimer = null;\n }\n\n this.connected = true;\n this.isSecure = isSecure;\n\n if (this.waitForRestart) {\n window.location.reload();\n } else {\n if (this.firstConnect) {\n // retry strategy\n this.loadTimer = setTimeout(() => {\n this.loadTimer = null;\n this.loadCounter++;\n if (this.loadCounter < 10) {\n void this.onConnect().catch(e => this.onError(e));\n }\n }, 1000);\n\n if (!this.loaded) {\n void this.onConnect().catch(e => this.onError(e));\n }\n } else {\n this.onProgress(PROGRESS.READY);\n }\n\n this._subscribe(true);\n this.onConnectionHandlers.forEach(cb => cb(true));\n }\n\n if (this._waitForFirstConnectionResolve) {\n this._waitForFirstConnectionResolve();\n this._waitForFirstConnectionResolve = null;\n }\n }\n\n /**\n * Checks if running in ioBroker cloud\n */\n static isCloud(): boolean {\n if (window.location.hostname.includes('amazonaws.com') || window.location.hostname.includes('iobroker.in')) {\n return true;\n }\n if (typeof window.socketUrl === 'undefined') {\n return false;\n }\n return window.socketUrl.includes('iobroker.in') || window.socketUrl.includes('amazonaws');\n }\n\n /**\n * Checks if the socket is connected.\n */\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Checks if the socket is connected.\n * Promise resolves if once connected.\n */\n waitForFirstConnection(): Promise<void> {\n return this._waitForFirstConnection;\n }\n\n /**\n * Called internally.\n */\n private async _getUserPermissions(): Promise<Record<string, any> | null> {\n if (this.doNotLoadACL) {\n return null;\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('getUserPermissions', (err: string | null, acl: Record<string, any> | null) =>\n err ? reject(new Error(err)) : resolve(acl),\n );\n });\n }\n\n /**\n * Called internally.\n */\n private async onConnect(): Promise<void> {\n let acl: Record<string, any> | null | undefined;\n try {\n acl = await this._getUserPermissions();\n } catch (e) {\n const knownError = e as Error;\n this.onError(`Cannot read user permissions: ${knownError.message}`);\n return;\n }\n if (!this.doNotLoadACL) {\n if (this.loaded) {\n return;\n }\n this.loaded = true;\n this.loadTimer && clearTimeout(this.loadTimer);\n this.loadTimer = null;\n\n this.onProgress(PROGRESS.CONNECTED);\n this.firstConnect = false;\n\n this.acl = acl;\n }\n\n // Read system configuration\n let data: ioBroker.SystemConfigObject | null;\n try {\n if (this.admin5only && !window.vendorPrefix) {\n data = await this.getCompactSystemConfig();\n } else {\n data = await this.getSystemConfig();\n }\n if (this.doNotLoadACL) {\n if (this.loaded) {\n return;\n }\n this.loaded = true;\n this.loadTimer && clearTimeout(this.loadTimer);\n this.loadTimer = null;\n\n this.onProgress(PROGRESS.CONNECTED);\n this.firstConnect = false;\n }\n\n this.systemConfig = data;\n if (this.systemConfig && this.systemConfig.common) {\n this.systemLang = this.systemConfig.common.language;\n } else {\n // @ts-expect-error userLanguage is not standard\n this.systemLang = window.navigator.userLanguage || window.navigator.language;\n\n if (/^(en|de|ru|pt|nl|fr|it|es|pl|uk)-?/.test(this.systemLang)) {\n this.systemLang = this.systemLang.substr(0, 2) as ioBroker.Languages;\n } else if (!/^(en|de|ru|pt|nl|fr|it|es|pl|uk|zh-cn)$/.test(this.systemLang)) {\n this.systemLang = 'en';\n }\n }\n\n this.props.onLanguage && this.props.onLanguage(this.systemLang);\n\n if (!this.doNotLoadAllObjects) {\n await this.getObjects();\n this.onProgress(PROGRESS.READY);\n this.props.onReady && this.objects && this.props.onReady(this.objects);\n } else {\n this.objects = this.admin5only ? {} : { 'system.config': data };\n this.onProgress(PROGRESS.READY);\n this.props.onReady && this.props.onReady(this.objects);\n }\n } catch (e) {\n this.onError(`Cannot read system config: ${e}`);\n }\n }\n\n /**\n * Called internally.\n */\n private static authenticate(): void {\n if (window.location.search.includes('&href=')) {\n window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}${window.location.search}${window.location.hash}`;\n } else {\n window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}?login&href=${window.location.search}${window.location.hash}`;\n }\n }\n\n /**\n * Subscribe to changes of the given state.\n *\n * @param id The ioBroker state ID or array of states\n * @param binary Set to true if the given state is binary and requires Base64 decoding\n * @param cb The callback\n */\n subscribeState(\n id: string | string[],\n binary: boolean | ioBroker.StateChangeHandler | BinaryStateChangeHandler,\n cb?: ioBroker.StateChangeHandler | BinaryStateChangeHandler,\n ): void {\n if (typeof binary === 'function') {\n cb = binary;\n binary = false;\n }\n\n let ids: string[];\n if (!Array.isArray(id)) {\n ids = [id];\n } else {\n ids = id;\n }\n if (!cb) {\n console.error('No callback found for subscribeState');\n return;\n }\n const toSubscribe = [];\n for (let i = 0; i < ids.length; i++) {\n const _id = ids[i];\n if (!this.statesSubscribes[_id]) {\n let reg = _id\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\+/g, '\\\\+')\n .replace(/\\[/g, '\\\\[');\n\n if (!reg.includes('*')) {\n reg += '$';\n }\n this.statesSubscribes[_id] = { reg: new RegExp(reg), cbs: [cb] };\n if (_id !== this.ignoreState) {\n toSubscribe.push(_id);\n }\n } else {\n !this.statesSubscribes[_id].cbs.includes(cb) && this.statesSubscribes[_id].cbs.push(cb);\n }\n }\n\n if (!this.connected) {\n return;\n }\n\n if (toSubscribe.length) {\n // no answer from server required\n this._socket.emit('subscribe', toSubscribe);\n }\n\n if (binary) {\n for (let i = 0; i < ids.length; i++) {\n this.getBinaryState(ids[i])\n .then((base64: string) => cb && (cb as BinaryStateChangeHandler)(ids[i], base64))\n .catch(e => console.error(`Cannot getBinaryState \"${ids[i]}\": ${JSON.stringify(e)}`));\n }\n } else {\n this._socket.emit(\n LegacyConnection.isWeb() ? 'getStates' : 'getForeignStates',\n id,\n (err: string | null, states: Record<string, ioBroker.State>) => {\n err && console.error(`Cannot getForeignStates \"${id}\": ${JSON.stringify(err)}`);\n states && Object.keys(states).forEach(_id => (cb as ioBroker.StateChangeHandler)(_id, states[_id]));\n },\n );\n }\n }\n\n /**\n * Subscribe to changes of the given state.\n */\n subscribeStateAsync(\n /** The ioBroker state ID or array of states */\n id: string | string[],\n /** The callback. */\n cb: ioBroker.StateChangeHandler,\n ): Promise<void> {\n let ids: string[];\n if (!Array.isArray(id)) {\n ids = [id];\n } else {\n ids = id;\n }\n const toSubscribe = [];\n for (let i = 0; i < ids.length; i++) {\n const _id = ids[i];\n if (!this.statesSubscribes[_id]) {\n let reg = _id\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\+/g, '\\\\+')\n .replace(/\\[/g, '\\\\[');\n\n if (!reg.includes('*')) {\n reg += '$';\n }\n this.statesSubscribes[_id] = { reg: new RegExp(reg), cbs: [] };\n this.statesSubscribes[_id].cbs.push(cb);\n if (_id !== this.ignoreState) {\n // no answer from server required\n toSubscribe.push(_id);\n }\n } else {\n !this.statesSubscribes[_id].cbs.includes(cb) && this.statesSubscribes[_id].cbs.push(cb);\n }\n }\n\n if (toSubscribe.length && this.connected) {\n // no answer from server required\n this._socket.emit('subscribe', toSubscribe);\n }\n\n return new Promise((resolve, reject) => {\n if (typeof cb === 'function' && this.connected) {\n this._socket.emit(\n LegacyConnection.isWeb() ? 'getStates' : 'getForeignStates',\n id,\n (err: string | null, states: Record<string, ioBroker.State>) => {\n err && console.error(`Cannot getForeignStates \"${id}\": ${JSON.stringify(err)}`);\n states && Object.keys(states).forEach(_id => cb(_id, states[_id]));\n states\n ? resolve()\n : reject(new Error(`Cannot getForeignStates \"${id}\": ${JSON.stringify(err)}`));\n },\n );\n } else {\n this.connected ? reject(new Error('callback is not a function')) : reject(new Error('not connected'));\n }\n });\n }\n\n /**\n * Unsubscribes all or the given callback from changes of the given state.\n */\n unsubscribeState(\n /** The ioBroker state ID or array of states */\n id: string | string[],\n /** The callback. */\n cb?: ioBroker.StateChangeHandler | BinaryStateChangeHandler,\n ): void {\n let ids: string[];\n if (!Array.isArray(id)) {\n ids = [id];\n } else {\n ids = id;\n }\n const toUnsubscribe = [];\n for (let i = 0; i < ids.length; i++) {\n const _id = ids[i];\n\n if (this.statesSubscribes[_id]) {\n if (cb) {\n const pos = this.statesSubscribes[_id].cbs.indexOf(cb);\n pos !== -1 && this.statesSubscribes[_id].cbs.splice(pos, 1);\n } else {\n this.statesSubscribes[_id].cbs = [];\n }\n\n if (!this.statesSubscribes[_id].cbs || !this.statesSubscribes[_id].cbs.length) {\n delete this.statesSubscribes[_id];\n if (_id !== this.ignoreState) {\n toUnsubscribe.push(_id);\n }\n }\n }\n }\n\n if (toUnsubscribe.length && this.connected) {\n // no answer from server required\n this._socket.emit('unsubscribe', toUnsubscribe);\n }\n }\n\n /**\n * Subscribe to changes of the given object.\n *\n * @param id The ioBroker object ID or array of objects\n * @param cb The callback\n */\n subscribeObject(id: string | string[], cb: ioBroker.ObjectChangeHandler): Promise<void> {\n let ids: string[];\n if (!Array.isArray(id)) {\n ids = [id];\n } else {\n ids = id;\n }\n const toSubscribe = [];\n for (let i = 0; i < ids.length; i++) {\n const _id = ids[i];\n if (!this.objectsSubscribes[_id]) {\n let reg = _id.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*');\n if (!reg.includes('*')) {\n reg += '$';\n }\n this.objectsSubscribes[_id] = { reg: new RegExp(reg), cbs: [cb] };\n toSubscribe.push(_id);\n } else {\n !this.objectsSubscribes[_id].cbs.includes(cb) && this.objectsSubscribes[_id].cbs.push(cb);\n }\n }\n if (this.connected && toSubscribe.length) {\n this._socket.emit('subscribeObjects', toSubscribe);\n }\n\n return Promise.resolve();\n }\n\n /**\n * Unsubscribes all or the given callback from changes of the given object.\n *\n * @param id The ioBroker object ID or array of objects\n * @param cb The callback\n */\n unsubscribeObject(id: string | string[], cb?: ioBroker.ObjectChangeHandler): Promise<void> {\n let ids: string[];\n if (!Array.isArray(id)) {\n ids = [id];\n } else {\n ids = id;\n }\n const toUnsubscribe = [];\n for (let i = 0; i < ids.length; i++) {\n const _id = ids[i];\n if (this.objectsSubscribes[_id]) {\n if (cb) {\n const pos = this.objectsSubscribes[_id].cbs.indexOf(cb);\n pos !== -1 && this.objectsSubscribes[_id].cbs.splice(pos, 1);\n } else {\n this.objectsSubscribes[_id].cbs = [];\n }\n\n if (this.connected && (!this.objectsSubscribes[_id].cbs || !this.objectsSubscribes[_id].cbs.length)) {\n delete this.objectsSubscribes[_id];\n toUnsubscribe.push(_id);\n }\n }\n }\n\n if (this.connected && toUnsubscribe.length) {\n this._socket.emit('unsubscribeObjects', toUnsubscribe);\n }\n\n return Promise.resolve();\n }\n\n /**\n * Called internally.\n */\n private fileChange(id: string, fileName: string, size: number | null): void {\n for (const sub of Object.values(this.filesSubscribes)) {\n if (sub.regId.test(id) && sub.regFilePattern.test(fileName)) {\n for (const cb of sub.cbs) {\n try {\n cb(id, fileName, size);\n } catch (e) {\n console.error(`Error by callback of fileChange: ${e}`);\n }\n }\n }\n }\n }\n\n /**\n * Subscribe to changes of the files.\n *\n * @param id The ioBroker state ID for meta-object. Could be a pattern\n * @param filePattern Pattern or file name, like 'main/*' or 'main/visViews.json`\n * @param cb The callback.\n */\n async subscribeFiles(\n /** The ioBroker state ID for meta-object. Could be a pattern */\n id: string,\n /** Pattern or file name, like 'main/*' or 'main/visViews.json` */\n filePattern: string | string[],\n /** The callback. */\n cb: ioBroker.FileChangeHandler,\n ): Promise<void> {\n if (typeof cb !== 'function') {\n throw new Error('The state change handler must be a function!');\n }\n let filePatterns;\n if (Array.isArray(filePattern)) {\n filePatterns = filePattern;\n } else {\n filePatterns = [filePattern];\n }\n const toSubscribe = [];\n for (let f = 0; f < filePatterns.length; f++) {\n const pattern = filePatterns[f];\n const key = `${id}$%$${pattern}`;\n\n if (!this.filesSubscribes[key]) {\n this.filesSubscribes[key] = {\n regId: new RegExp(pattern2RegEx(id)),\n regFilePattern: new RegExp(pattern2RegEx(pattern)),\n cbs: [cb],\n };\n\n toSubscribe.push(pattern);\n } else {\n !this.filesSubscribes[key].cbs.includes(cb) && this.filesSubscribes[key].cbs.push(cb);\n }\n }\n if (this.connected && toSubscribe.length) {\n this._socket.emit('subscribeFiles', id, toSubscribe);\n }\n return Promise.resolve();\n }\n\n /**\n * Unsubscribes the given callback from changes of files.\n *\n * @param id The ioBroker state ID.\n * @param filePattern Pattern or file name, like 'main/*' or 'main/visViews.json`\n * @param cb The callback.\n */\n unsubscribeFiles(id: string, filePattern: string, cb?: ioBroker.FileChangeHandler): void {\n let filePatterns: string[];\n if (Array.isArray(filePattern)) {\n filePatterns = filePattern;\n } else {\n filePatterns = [filePattern];\n }\n const toUnsubscribe = [];\n for (let f = 0; f < filePatterns.length; f++) {\n const pattern = filePatterns[f];\n const key = `${id}$%$${pattern}`;\n if (this.filesSubscribes[key]) {\n const sub = this.filesSubscribes[key];\n if (cb) {\n const pos = sub.cbs.indexOf(cb);\n pos !== -1 && sub.cbs.splice(pos, 1);\n } else {\n sub.cbs = [];\n }\n\n if (!sub.cbs || !sub.cbs.length) {\n delete this.filesSubscribes[key];\n this.connected && toUnsubscribe.push(pattern);\n }\n }\n }\n\n if (this.connected && toUnsubscribe.length) {\n this._socket.emit('unsubscribeFiles', id, toUnsubscribe);\n }\n }\n\n /**\n * Called internally.\n */\n private objectChange(id: string, obj: ioBroker.Object | null): void {\n // update main.objects cache\n if (!this.objects) {\n return;\n }\n\n let oldObj: Partial<ioBroker.Object> | null;\n\n let changed = false;\n if (obj) {\n if (this.objects[id]) {\n // @ts-expect-error fix later\n oldObj = { _id: id, type: this.objects[id].type };\n }\n\n if (!this.objects[id] || JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n this.objects[id] = obj;\n changed = true;\n }\n } else if (this.objects[id]) {\n // @ts-expect-error fix later\n oldObj = { _id: id, type: this.objects[id].type };\n delete this.objects[id];\n changed = true;\n }\n\n Object.keys(this.objectsSubscribes).forEach(_id => {\n if (_id === id || this.objectsSubscribes[_id].reg.test(id)) {\n this.objectsSubscribes[_id].cbs.forEach(cb => {\n try {\n cb(id, obj, oldObj as ioBroker.Object);\n } catch (e) {\n console.error(`Error by callback of objectChange: ${e}`);\n }\n });\n }\n });\n\n if (changed && this.props.onObjectChange) {\n void this.props.onObjectChange(id, obj);\n }\n }\n\n /**\n * Called internally.\n */\n private stateChange(id: string, state: ioBroker.State | null): void {\n for (const task in this.statesSubscribes) {\n if (\n Object.prototype.hasOwnProperty.call(this.statesSubscribes, task) &&\n this.statesSubscribes[task].reg.test(id)\n ) {\n this.statesSubscribes[task].cbs.forEach(cb => {\n try {\n void (cb as ioBroker.StateChangeHandler)(id, state);\n } catch (e) {\n const knownError = e as Error;\n console.error(`Error by callback of stateChange: ${knownError?.message}`);\n }\n });\n }\n }\n }\n\n /**\n * Called internally.\n *\n * @param messageType The message type\n * @param sourceInstance The source instance\n * @param data Payload\n */\n instanceMessage(messageType: string, sourceInstance: string, data: Record<string, any>): void {\n if (this._instanceSubscriptions[sourceInstance]) {\n this._instanceSubscriptions[sourceInstance].forEach(sub => {\n if (sub.messageType === messageType) {\n sub.callback(data, sourceInstance, messageType);\n }\n });\n }\n }\n\n /**\n * Gets all states.\n *\n * @param pattern The pattern to filter states\n * @param disableProgressUpdate Don't call onProgress() when done\n */\n getStates(pattern?: string | boolean, disableProgressUpdate?: boolean): Promise<Record<string, ioBroker.State>> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (typeof pattern === 'boolean') {\n disableProgressUpdate = pattern;\n pattern = undefined;\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('getStates', pattern, (err: string | null, res: Record<string, ioBroker.State>) => {\n this.states = res;\n !disableProgressUpdate && this.onProgress(PROGRESS.STATES_LOADED);\n err ? reject(new Error(err)) : resolve(this.states);\n });\n });\n }\n\n /**\n * Gets the given state.\n *\n * @param id The state ID\n */\n getState(id: string): Promise<ioBroker.State | null> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n if (id && id === this.ignoreState) {\n return Promise.resolve(this.simStates[id] || ({ val: null, ack: true } as ioBroker.State));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('getState', id, (err: string | null, state: ioBroker.State) =>\n err ? reject(new Error(err)) : resolve(state),\n );\n });\n }\n\n /**\n * Get the given binary state.\n *\n * @deprecated since js-controller 5.0. Use files instead.\n * @param id The state ID.\n */\n getBinaryState(id: string): Promise<string> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n // the data will come in base64\n return new Promise((resolve, reject) => {\n this._socket.emit('getBinaryState', id, (err: string | null, base64: string) =>\n err ? reject(new Error(err)) : resolve(base64),\n );\n });\n }\n\n /**\n * Set the given binary state.\n *\n * @deprecated since js-controller 5.0. Use files instead.\n * @param id The state ID.\n * @param base64 The Base64 encoded binary data.\n */\n setBinaryState(id: string, base64: string): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n // the data will come in base64\n return new Promise((resolve, reject) => {\n this._socket.emit('setBinaryState', id, base64, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Sets the given state value.\n *\n * @param id The state ID\n * @param val The state value\n * @param ack The acknowledgment flag\n */\n setState(id: string, val: string | number | boolean | ioBroker.SettableState | null, ack?: boolean): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n // extra handling for \"nothing_selected\" state for vis\n if (id && id === this.ignoreState) {\n let state: ioBroker.State;\n if (typeof ack === 'boolean') {\n state = val as ioBroker.State;\n } else if (typeof val === 'object' && (val as ioBroker.State).val !== undefined) {\n state = val as ioBroker.State;\n } else {\n state = {\n val: val as string | number | boolean | null,\n ack: false,\n ts: Date.now(),\n lc: Date.now(),\n from: 'system.adapter.vis.0',\n };\n }\n\n this.simStates[id] = state;\n\n // inform subscribers about changes\n if (this.statesSubscribes[id]) {\n for (const cb of this.statesSubscribes[id].cbs) {\n try {\n void (cb as ioBroker.StateChangeHandler)(id, state);\n } catch (e) {\n console.error(`Error by callback of stateChanged: ${e}`);\n }\n }\n }\n\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('setState', id, val, (err: string | null) => (err ? reject(new Error(err)) : resolve()));\n });\n }\n\n /**\n * Gets all objects.\n *\n * @param update Set to true to retrieve all objects from the server (instead of using the local cache)\n * @param disableProgressUpdate Don't call onProgress() when done\n */\n getObjects(update?: boolean, disableProgressUpdate?: boolean): Promise<Record<string, ioBroker.Object>> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n if (!update && this.objects) {\n resolve(this.objects);\n } else {\n this._socket.emit(\n LegacyConnection.isWeb() ? 'getObjects' : 'getAllObjects',\n (err: string | null, res: Record<string, ioBroker.Object>) => {\n this.objects = res;\n disableProgressUpdate && this.onProgress(PROGRESS.OBJECTS_LOADED);\n err ? reject(new Error(err)) : resolve(this.objects);\n },\n );\n }\n });\n }\n\n /**\n * Gets objects by list of IDs.\n *\n * @param list Array of object IDs to retrieve\n */\n getObjectsById(list: string[]): Promise<Record<string, ioBroker.Object>> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('getObjects', list, (err: string | null, res: Record<string, ioBroker.Object>) =>\n err ? reject(new Error(err)) : resolve(res),\n );\n });\n }\n\n /**\n * Called internally.\n */\n private _subscribe(isEnable: boolean): void {\n if (isEnable && !this.subscribed) {\n this.subscribed = true;\n this.autoSubscribes.forEach(id => this._socket.emit('subscribeObjects', id));\n // re-subscribe objects\n Object.keys(this.objectsSubscribes).forEach(id => this._socket.emit('subscribeObjects', id));\n // re-subscribe logs\n this.autoSubscribeLog && this._socket.emit('requireLog', true);\n // re-subscribe states\n const ids = Object.keys(this.statesSubscribes);\n ids.forEach(id => this._socket.emit('subscribe', id));\n ids.length &&\n this._socket.emit(\n LegacyConnection.isWeb() ? 'getStates' : 'getForeignStates',\n ids,\n (err: string | null, states: Record<string, ioBroker.State>) => {\n err && console.error(`Cannot getForeignStates: ${JSON.stringify(err)}`);\n // inform about states\n states && Object.keys(states).forEach(id => this.stateChange(id, states[id]));\n },\n );\n } else if (!isEnable && this.subscribed) {\n this.subscribed = false;\n // un-subscribe objects\n this.autoSubscribes.forEach(id => this._socket.emit('unsubscribeObjects', id));\n Object.keys(this.objectsSubscribes).forEach(id => this._socket.emit('unsubscribeObjects', id));\n // un-subscribe logs\n this.autoSubscribeLog && this._socket.emit('requireLog', false);\n\n // un-subscribe states\n Object.keys(this.statesSubscribes).forEach(id => this._socket.emit('unsubscribe', id));\n }\n }\n\n /**\n * Requests log updates.\n *\n * @param isEnabled Set to true to get logs\n */\n requireLog(isEnabled: boolean): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('requireLog', isEnabled, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Deletes the given object.\n *\n * @param id The object ID\n * @param maintenance Force deletion of non-conform IDs\n */\n delObject(id: string, maintenance?: boolean): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('delObject', id, { maintenance: !!maintenance }, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Deletes the given object and all its children.\n *\n * @param id The object ID\n * @param maintenance Force deletion of non-conform IDs\n */\n delObjects(id: string, maintenance?: boolean): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('delObjects', id, { maintenance: !!maintenance }, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Sets the object.\n */\n setObject(id: string, obj: ioBroker.SettableObject): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!obj) {\n return Promise.reject(new Error('Null object is not allowed'));\n }\n\n obj = JSON.parse(JSON.stringify(obj));\n\n if (Object.prototype.hasOwnProperty.call(obj, 'from')) {\n delete obj.from;\n }\n if (Object.prototype.hasOwnProperty.call(obj, 'user')) {\n delete obj.user;\n }\n if (Object.prototype.hasOwnProperty.call(obj, 'ts')) {\n delete obj.ts;\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('setObject', id, obj, (err: string | null) => (err ? reject(new Error(err)) : resolve()));\n });\n }\n\n /**\n * Gets the object with the given id from the server.\n */\n getObject(id: string): Promise<ioBroker.Object> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n if (id && id === this.ignoreState) {\n return Promise.resolve({\n _id: this.ignoreState,\n type: 'state',\n common: {\n name: 'ignored state',\n type: 'mixed',\n read: true,\n write: true,\n role: 'state',\n },\n native: {},\n });\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('getObject', id, (err: string | null, obj: ioBroker.Object) =>\n err ? reject(new Error(err)) : resolve(obj),\n );\n });\n }\n\n /**\n * Get all instances of the given adapter or all instances of all adapters.\n *\n * @param adapter The name of the adapter\n * @param update Force update\n */\n getAdapterInstances(adapter?: string | boolean, update?: boolean): Promise<ioBroker.InstanceObject[]> {\n if (typeof adapter === 'boolean') {\n update = adapter;\n adapter = '';\n }\n adapter = adapter || '';\n\n if (!update && this._promises[`instances_${adapter}`]) {\n return this._promises[`instances_${adapter}`] as Promise<ioBroker.InstanceObject[]>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`instances_${adapter}`] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n timeout = null;\n this.getObjectView(\n `system.adapter.${adapter ? `${adapter}.` : ''}`,\n `system.adapter.${adapter ? `${adapter}.` : ''}\\u9999`,\n 'instance',\n )\n .then(items =>\n resolve(Object.keys(items).map(id => fixAdminUI(items[id] as ioBroker.AdapterObject))),\n )\n .catch(e => reject(new Error(e)));\n }, TIMEOUT_FOR_ADMIN4);\n\n this._socket.emit(\n 'getAdapterInstances',\n adapter,\n (err: string | null, instances: ioBroker.InstanceObject[]) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n err ? reject(new Error(err)) : resolve(instances);\n }\n },\n );\n });\n\n return this._promises[`instances_${adapter}`] as Promise<ioBroker.InstanceObject[]>;\n }\n\n /**\n * Get adapters with the given name or all adapters.\n *\n * @param adapter The name of the adapter\n * @param update Force update\n */\n getAdapters(adapter?: string | boolean, update?: boolean): Promise<ioBroker.AdapterObject[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (typeof adapter === 'boolean') {\n update = adapter;\n adapter = '';\n }\n\n adapter = adapter || '';\n\n if (!update && this._promises[`adapter_${adapter}`]) {\n return this._promises[`adapter_${adapter}`] as Promise<ioBroker.AdapterObject[]>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`adapter_${adapter}`] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n timeout = null;\n this.getObjectView(`system.adapter.${adapter}.`, `system.adapter.${adapter}.\\u9999`, 'adapter')\n .then(items => {\n resolve(Object.keys(items).map(id => fixAdminUI(items[id] as ioBroker.AdapterObject)));\n })\n .catch(e => reject(new Error(e)));\n }, TIMEOUT_FOR_ADMIN4);\n\n this._socket.emit('getAdapters', adapter, (err: string | null, adapters: ioBroker.AdapterObject[]) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n err ? reject(new Error(err)) : resolve(adapters);\n }\n });\n });\n\n return this._promises[`adapter_${adapter}`] as Promise<ioBroker.AdapterObject[]>;\n }\n\n /**\n * Called internally.\n */\n private _renameGroups(objs: RenameGroupObject[], cb: (err: string | null) => void): void {\n if (!objs || !objs.length) {\n cb && cb(null);\n } else {\n const obj = objs.pop();\n if (!obj) {\n setTimeout(() => this._renameGroups(objs, cb), 0);\n return;\n }\n const oldId = obj._id;\n obj._id = obj.newId as ioBroker.ObjectIDs.Group;\n delete obj.newId;\n\n this.setObject(obj._id, obj)\n .then(() => this.delObject(oldId))\n .then(() => setTimeout(() => this._renameGroups(objs, cb), 0))\n .catch((err: string | null) => cb && cb(err));\n }\n }\n\n /**\n * Rename a group.\n *\n * @param id The id.\n * @param newId The new id.\n * @param newName The new name.\n */\n async renameGroup(id: string, newId: string, newName: ioBroker.StringOrTranslated): Promise<void> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n const groups = await this.getGroups(true);\n if (groups.length) {\n // find all elements\n const groupsToRename: RenameGroupObject[] = (groups as RenameGroupObject[]).filter(group =>\n group._id.startsWith(`${id}.`),\n );\n\n groupsToRename.forEach(group => {\n group.newId = (newId + group._id.substring(id.length)) as ioBroker.ObjectIDs.Group;\n });\n\n await new Promise((resolve, reject) => {\n this._renameGroups(groupsToRename, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(null),\n );\n });\n const obj = groups.find(group => group._id === id);\n\n if (obj) {\n obj._id = newId as ioBroker.ObjectIDs.Group;\n if (newName !== undefined) {\n obj.common = obj.common || ({} as ioBroker.GroupCommon);\n // @ts-expect-error will be corrected in the next js-controller release\n obj.common.name = newName;\n }\n\n return this.setObject(obj._id, obj).then(() => this.delObject(id));\n }\n }\n\n return Promise.resolve();\n }\n\n /**\n * Sends a message to a specific instance or all instances of some specific adapter.\n *\n * @param instance The instance to send this message to.\n * @param command Command name of the target instance.\n * @param data The message data to send.\n */\n sendTo(instance: string, command: string, data: any): Promise<{ result?: any; error?: string }> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise(resolve => {\n this._socket.emit('sendTo', instance, command, data, (result: { result?: any; error?: string }) =>\n resolve(result),\n );\n });\n }\n\n /**\n * Extend an object and create it if it might not exist.\n *\n * @param id The id.\n * @param obj The object.\n */\n extendObject(id: string, obj: ioBroker.PartialObject): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n obj = JSON.parse(JSON.stringify(obj));\n\n if (Object.prototype.hasOwnProperty.call(obj, 'from')) {\n delete obj.from;\n }\n if (Object.prototype.hasOwnProperty.call(obj, 'user')) {\n delete obj.user;\n }\n if (Object.prototype.hasOwnProperty.call(obj, 'ts')) {\n delete obj.ts;\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('extendObject', id, obj, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Register a handler for log messages.\n */\n registerLogHandler(handler: (message: string) => void): void {\n !this.onLogHandlers.includes(handler) && this.onLogHandlers.push(handler);\n }\n\n /**\n * Unregister a handler for log messages.\n */\n unregisterLogHandler(handler: (message: string) => void): void {\n const pos = this.onLogHandlers.indexOf(handler);\n pos !== -1 && this.onLogHandlers.splice(pos, 1);\n }\n\n /**\n * Register a handler for the connection state.\n */\n registerConnectionHandler(handler: (connected: boolean) => void): void {\n !this.onConnectionHandlers.includes(handler) && this.onConnectionHandlers.push(handler);\n }\n\n /**\n * Unregister a handler for the connection state.\n */\n unregisterConnectionHandler(handler: (connected: boolean) => void): void {\n const pos = this.onConnectionHandlers.indexOf(handler);\n pos !== -1 && this.onConnectionHandlers.splice(pos, 1);\n }\n\n /**\n * Set the handler for standard output of a command.\n *\n * @param handler The handler.\n */\n registerCmdStdoutHandler(handler: (id: string, text: string) => void): void {\n this.onCmdStdoutHandler = handler;\n }\n\n /**\n * Unset the handler for standard output of a command.\n */\n unregisterCmdStdoutHandler(/* handler */): void {\n this.onCmdStdoutHandler = undefined;\n }\n\n /**\n * Set the handler for standard error of a command.\n *\n * @param handler The handler.\n */\n registerCmdStderrHandler(handler: (id: string, text: string) => void): void {\n this.onCmdStderrHandler = handler;\n }\n\n /**\n * Unset the handler for standard error of a command.\n */\n unregisterCmdStderrHandler(): void {\n this.onCmdStderrHandler = undefined;\n }\n\n /**\n * Set the handler for exit of a command.\n */\n registerCmdExitHandler(handler: (id: string, exitCode: number) => void): void {\n this.onCmdExitHandler = handler;\n }\n\n /**\n * Unset the handler for exit of a command.\n */\n unregisterCmdExitHandler(): void {\n this.onCmdExitHandler = undefined;\n }\n\n /**\n * Get all enums with the given name.\n */\n getEnums(\n /** The name of the enum. */\n _enum?: string,\n /** Force update. */\n update?: boolean,\n ): Promise<Record<string, ioBroker.EnumObject>> {\n if (!update && this._promises[`enums_${_enum || 'all'}`]) {\n return this._promises[`enums_${_enum || 'all'}`] as Promise<Record<string, ioBroker.EnumObject>>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`enums_${_enum || 'all'}`] = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n 'system',\n 'enum',\n { startkey: `enum.${_enum || ''}`, endkey: `enum.${_enum ? `${_enum}.` : ''}\\u9999` },\n (err: string | null, res: { rows: { value: ioBroker.EnumObject; id: string }[] }) => {\n if (!err && res) {\n const _res: Record<string, ioBroker.EnumObject> = {};\n for (let i = 0; i < res.rows.length; i++) {\n if (_enum && res.rows[i].id === `enum.${_enum}`) {\n continue;\n }\n _res[res.rows[i].id] = res.rows[i].value;\n }\n resolve(_res);\n } else if (err) {\n reject(new Error(err));\n } else {\n reject(new Error('Invalid response while getting enums'));\n }\n },\n );\n });\n\n return this._promises[`enums_${_enum || 'all'}`] as Promise<Record<string, ioBroker.EnumObject>>;\n }\n\n /**\n * Query a predefined object view.\n *\n * @param design design - 'system' or other designs like `custom`.\n * @param type The type of object.\n * @param start The start ID.\n * @param end The end ID.\n */\n getObjectViewCustom(\n /** The design: 'system' or other designs like `custom`. */\n design: string,\n /** The type of object. */\n type: ioBroker.ObjectType,\n /** The start ID. */\n start: string,\n /** The end ID. */\n end?: string,\n ): Promise<Record<string, ioBroker.Object>> {\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n design,\n type,\n { startkey: start, endkey: end },\n (err: string | null, res: { rows: { value: ioBroker.Object; id: string }[] }) => {\n if (!err) {\n const _res: Record<string, ioBroker.Object> = {};\n if (res && res.rows) {\n for (let i = 0; i < res.rows.length; i++) {\n _res[res.rows[i].id] = res.rows[i].value;\n }\n }\n resolve(_res);\n } else {\n reject(new Error(err));\n }\n },\n );\n });\n }\n\n /**\n * Query a predefined object view.\n *\n * @param type The type of object.\n * @param start The start ID.\n * @param end The end ID.\n */\n getObjectViewSystem(\n type: ioBroker.ObjectType,\n start: string,\n end?: string,\n ): Promise<Record<string, ioBroker.Object>> {\n return this.getObjectViewCustom('system', type, start, end);\n }\n\n /**\n * @deprecated since version 1.1.15, cause parameter order does not match backend\n *\n * Query a predefined object view.\n * @param start The start ID.\n * @param end The end ID.\n * @param type The type of object.\n */\n getObjectView(start: string, end: string, type: ioBroker.ObjectType): Promise<Record<string, ioBroker.Object>> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n start = start || '';\n end = end || '\\u9999';\n return this.getObjectViewCustom('system', type, start, end);\n }\n\n /**\n * Get the stored certificates.\n *\n * @param update Force update.\n */\n getCertificates(update?: boolean): Promise<{ name: string; type: 'public' | 'private' | 'chained' | '' }[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (this._promises.cert && !update) {\n return this._promises.cert;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.cert = this.getObject('system.certificates').then(res => {\n const certs: { name: string; type: 'public' | 'private' | 'chained' | '' }[] = [];\n if (res && res.native && res.native.certificates) {\n Object.keys(res.native.certificates).forEach(c => {\n const cert: string = res.native.certificates[c];\n if (!cert) {\n return;\n }\n const _cert: { name: string; type: 'public' | 'private' | 'chained' | '' } = {\n name: c,\n type: '',\n };\n // If it is a filename, it could be everything\n if (cert.length < 700 && (cert.includes('/') || cert.includes('\\\\'))) {\n if (c.toLowerCase().includes('private')) {\n _cert.type = 'private';\n } else if (cert.toLowerCase().includes('private')) {\n _cert.type = 'private';\n } else if (c.toLowerCase().includes('public')) {\n _cert.type = 'public';\n } else if (cert.toLowerCase().includes('public')) {\n _cert.type = 'public';\n }\n certs.push(_cert);\n } else {\n _cert.type =\n cert.substring(0, '-----BEGIN RSA PRIVATE KEY'.length) === '-----BEGIN RSA PRIVATE KEY' ||\n cert.substring(0, '-----BEGIN PRIVATE KEY'.length) === '-----BEGIN PRIVATE KEY'\n ? 'private'\n : 'public';\n\n if (_cert.type === 'public') {\n const m = cert.split('-----END CERTIFICATE-----');\n if (m.filter((t: string) => t.replace(/\\r\\n|\\r|\\n/, '').trim()).length > 1) {\n _cert.type = 'chained';\n }\n }\n\n certs.push(_cert);\n }\n });\n }\n return certs;\n });\n\n return this._promises.cert;\n }\n\n /**\n * Get the logs from a host (only for admin connection).\n */\n getLogs(host: string, linesNumber?: number): Promise<string[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise(resolve => {\n this._socket.emit('sendToHost', host, 'getLogs', linesNumber || 200, (lines: string[]) => resolve(lines));\n });\n }\n\n /**\n * Get the log files (only for admin connection).\n */\n getLogsFiles(host: string): Promise<string[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('readLogs', host, (err: string | null, files: string[]) =>\n err ? reject(new Error(err)) : resolve(files),\n );\n });\n }\n\n /**\n * Delete the logs from a host (only for admin connection).\n */\n delLogs(host: string): Promise<void> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('sendToHost', host, 'delLogs', null, (error: string | null) =>\n error ? reject(new Error(error)) : resolve(),\n );\n });\n }\n\n /**\n * Read the meta items.\n */\n readMetaItems(): Promise<ioBroker.MetaObject[]> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n 'system',\n 'meta',\n { startkey: '', endkey: '\\u9999' },\n (err: string | null, objs: { rows: { value: ioBroker.MetaObject; id: string }[] }) =>\n err\n ? reject(new Error(err))\n : resolve(\n objs.rows &&\n objs.rows.map((obj: { value: ioBroker.MetaObject; id: string }) => obj.value),\n ),\n );\n });\n }\n\n /**\n * Read the directory of an adapter.\n *\n * @param adapter The adapter name.\n * @param fileName The directory name.\n */\n readDir(adapter: string, fileName: string): Promise<ioBroker.ReadDirResult[]> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('readDir', adapter, fileName, (err: string | null, files: ioBroker.ReadDirResult[]) =>\n err ? reject(new Error(err)) : resolve(files),\n );\n });\n }\n\n /**\n * Read a file of an adapter.\n *\n * @param adapter The adapter name.\n * @param fileName The file name.\n * @param base64 If it must be a base64 format.\n */\n readFile(adapter: string, fileName: string, base64?: boolean): Promise<string | { data: string; type: string }> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n if (!base64) {\n this._socket.emit('readFile', adapter, fileName, (err: string | null, data: string, type: string) => {\n err ? reject(new Error(err)) : resolve({ data, type });\n });\n } else {\n this._socket.emit('readFile64', adapter, fileName, base64, (err: string | null, data: string) =>\n err ? reject(new Error(err)) : resolve(data),\n );\n }\n });\n }\n\n /**\n * Write a file of an adapter.\n *\n * @param adapter The adapter name.\n * @param fileName The file name.\n * @param data The data (if it's a Buffer, it will be converted to Base64)\n */\n writeFile64(adapter: string, fileName: string, data: Buffer | string): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n if (typeof data === 'string') {\n this._socket.emit('writeFile', adapter, fileName, data, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n } else {\n const base64 = btoa(\n new Uint8Array(data).reduce((_data, byte) => _data + String.fromCharCode(byte), ''),\n );\n\n this._socket.emit('writeFile64', adapter, fileName, base64, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n }\n });\n }\n\n /**\n * Delete a file of an adapter.\n *\n * @param adapter The adapter name.\n * @param fileName The file name.\n */\n deleteFile(adapter: string, fileName: string): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('unlink', adapter, fileName, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Delete a folder of an adapter.\n * All files in folder will be deleted.\n *\n * @param adapter The adapter name.\n * @param folderName The folder name.\n */\n deleteFolder(adapter: string, folderName: string): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('deleteFolder', adapter, folderName, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Get the list of all hosts.\n *\n * @param update Force update.\n */\n getHosts(update?: boolean): Promise<ioBroker.HostObject[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.hosts) {\n return this._promises.hosts;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.hosts = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n 'system',\n 'host',\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err: string | null, doc: { rows: { value: ioBroker.HostObject; id: string }[] }) => {\n if (err) {\n reject(new Error(err));\n } else {\n resolve(doc.rows.map(item => item.value));\n }\n },\n );\n });\n\n return this._promises.hosts;\n }\n\n /**\n * Get the list of all users.\n *\n * @param update Force update.\n */\n getUsers(update?: boolean): Promise<ioBroker.UserObject[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.users) {\n return this._promises.users;\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.users = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n 'system',\n 'user',\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err: string | null, doc: { rows: { value: ioBroker.UserObject; id: string }[] }) => {\n if (err) {\n reject(new Error(err));\n } else {\n resolve(doc.rows.map(item => item.value));\n }\n },\n );\n });\n\n return this._promises.users;\n }\n\n /**\n * Get the list of all groups.\n *\n * @param update Force update.\n */\n getGroups(update?: boolean): Promise<ioBroker.GroupObject[]> {\n if (!update && this._promises.groups) {\n return this._promises.groups;\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.groups = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getObjectView',\n 'system',\n 'group',\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err: string | null, doc: { rows: { value: ioBroker.GroupObject; id: string }[] }) => {\n if (err) {\n reject(new Error(err));\n } else {\n resolve(doc.rows.map(item => item.value));\n }\n },\n );\n });\n\n return this._promises.groups;\n }\n\n /**\n * Get the host information.\n *\n * @param host The host name.\n * @param update Force update.\n * @param timeoutMs Optional read timeout.\n */\n getHostInfo(host: string, update?: boolean, timeoutMs?: number): Promise<HostInfo> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n\n if (!update && this._promises[`hostInfo_${host}`]) {\n return this._promises[`hostInfo_${host}`] as Promise<HostInfo>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`hostInfo_${host}`] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getHostInfo timeout'));\n }\n }, timeoutMs || this.props.cmdTimeout);\n\n this._socket.emit('sendToHost', host, 'getHostInfo', null, (data: string | HostInfo) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getHostInfo\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getHostInfo\"'));\n } else {\n resolve(data);\n }\n }\n });\n });\n\n return this._promises[`hostInfo_${host}`] as Promise<HostInfo>;\n }\n\n /**\n * Get the host information (short version).\n *\n * @param host The host name.\n * @param update Force update.\n * @param timeoutMs Optional read timeout.\n */\n getHostInfoShort(host: string, update?: boolean, timeoutMs?: number): Promise<HostInfo> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n if (!update && this._promises[`hostInfoShort_${host}`]) {\n return this._promises[`hostInfoShort_${host}`] as Promise<HostInfo>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`hostInfoShort_${host}`] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('hostInfoShort timeout'));\n }\n }, timeoutMs || this.props.cmdTimeout);\n\n this._socket.emit('sendToHost', host, 'getHostInfoShort', null, (data: string | HostInfo) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getHostInfoShort\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getHostInfoShort\"'));\n } else {\n resolve(data);\n }\n }\n });\n });\n\n return this._promises[`hostInfoShort_${host}`] as Promise<HostInfo>;\n }\n\n /**\n * Get the repository.\n *\n * @param host The host name.\n * @param options Options.\n * @param update Force update.\n * @param timeoutMs Timeout in ms.\n */\n getRepository(\n host: string,\n options?: { update: boolean; repo: string } | string,\n update?: boolean,\n timeoutMs?: number,\n ): Promise<Record<string, ioBroker.AdapterObject>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.repo) {\n return this._promises.repo;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n\n this._promises.repo = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getRepository timeout'));\n }\n }, timeoutMs || this.props.cmdTimeout);\n\n this._socket.emit(\n 'sendToHost',\n host,\n 'getRepository',\n options,\n (data: string | Record<string, ioBroker.AdapterObject>) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getRepository\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getRepository\"'));\n } else {\n resolve(data);\n }\n }\n },\n );\n });\n\n return this._promises.repo;\n }\n\n /**\n * Get the installed.\n *\n * @param host The host name.\n * @param update Force update.\n * @param cmdTimeout Timeout in ms.\n */\n getInstalled(host: string, update?: boolean, cmdTimeout?: number): Promise<Record<string, ioBroker.AdapterObject>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n this._promises.installed = this._promises.installed || {};\n\n if (!update && this._promises.installed[host]) {\n return this._promises.installed[host] as Promise<Record<string, ioBroker.AdapterObject>>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n\n this._promises.installed[host] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getInstalled timeout'));\n }\n }, cmdTimeout || this.props.cmdTimeout);\n\n this._socket.emit(\n 'sendToHost',\n host,\n 'getInstalled',\n null,\n (data: string | Record<string, ioBroker.AdapterObject>) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getInstalled\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getInstalled\"'));\n } else {\n resolve(data);\n }\n }\n },\n );\n });\n\n return this._promises.installed[host] as Promise<Record<string, ioBroker.AdapterObject>>;\n }\n\n /**\n * Rename file or folder in ioBroker DB\n *\n * @param adapter Instance name, like `vis-2.0`.\n * @param oldName The current file name, e.g., main/vis-views.json\n * @param newName The new file name, e.g., main/vis-views-new.json\n */\n rename(adapter: string, oldName: string, newName: string): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('rename', adapter, oldName, newName, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Rename file in ioBroker DB\n */\n renameFile(\n /** instance name */\n adapter: string,\n /** current file name, e.g., main/vis-views.json */\n oldName: string,\n /** new file name, e.g., main/vis-views-new.json */\n newName: string,\n ): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('renameFile', adapter, oldName, newName, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Execute a command on a host.\n */\n cmdExec(\n /** The host name. */\n host: string,\n /** The command. */\n cmd: string,\n /** The command ID. */\n cmdId: string,\n /** Timeout of command in ms */\n cmdTimeout: number,\n ): Promise<void> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!host.startsWith(host)) {\n host += `system.host.${host}`;\n }\n\n return new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = cmdTimeout\n ? setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('cmdExec timeout'));\n }\n }, cmdTimeout)\n : null;\n\n this._socket.emit('cmdExec', host, cmdId, cmd, null, (err: string | null) => {\n if (!cmdTimeout || timeout) {\n timeout && clearTimeout(timeout);\n timeout = null;\n if (err) {\n reject(new Error(err));\n } else {\n resolve();\n }\n }\n });\n });\n }\n\n /**\n * Checks if a given feature is supported.\n */\n checkFeatureSupported(\n /** The feature to check. */\n feature: string,\n /** Force update. */\n update?: boolean,\n ): Promise<boolean> {\n if (!update && this._promises[`supportedFeatures_${feature}`]) {\n return this._promises[`supportedFeatures_${feature}`] as Promise<boolean>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises[`supportedFeatures_${feature}`] = new Promise((resolve, reject) => {\n this._socket.emit('checkFeatureSupported', feature, (err: string | null, supported: boolean) =>\n err ? reject(new Error(err)) : resolve(supported),\n );\n });\n\n return this._promises[`supportedFeatures_${feature}`] as Promise<boolean>;\n }\n\n /**\n * Read the base settings of a given host.\n */\n async readBaseSettings(host: string): Promise<Record<string, any>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n const result = await this.checkFeatureSupported('CONTROLLER_READWRITE_BASE_SETTINGS');\n if (result) {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('readBaseSettings timeout'));\n }\n }, this.props.cmdTimeout);\n\n if (host.startsWith('system.host.')) {\n host = host.replace(/^system\\.host\\./, '');\n }\n\n this._socket.emit(\n 'sendToHost',\n host,\n 'readBaseSettings',\n null,\n (data: Record<string, any> | string) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"BaseSettings\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"BaseSettings\"'));\n } else {\n resolve(data);\n }\n }\n },\n );\n });\n }\n return Promise.reject(new Error('Not supported'));\n }\n\n /**\n * Write the base settings of a given host.\n *\n * @param host The host name.\n * @param config The new base settings.\n */\n writeBaseSettings(host: string, config: IoBJson): Promise<{ result?: 'ok'; error?: string }> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return this.checkFeatureSupported('CONTROLLER_READWRITE_BASE_SETTINGS').then(result => {\n if (result) {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('writeBaseSettings timeout'));\n }\n }, this.props.cmdTimeout);\n\n this._socket.emit(\n 'sendToHost',\n host,\n 'writeBaseSettings',\n config,\n (data: { result?: 'ok'; error?: string } | string) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not write \"BaseSettings\"'));\n } else if (!data) {\n reject(new Error('Cannot write \"BaseSettings\"'));\n } else {\n resolve(data as { result?: 'ok'; error?: string });\n }\n }\n },\n );\n });\n }\n\n return Promise.reject(new Error('Not supported'));\n });\n }\n\n /**\n * Send command to restart the iobroker on host\n */\n restartController(host: string): Promise<boolean> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('sendToHost', host, 'restartController', null, (error: string | null) => {\n error ? reject(new Error(error)) : resolve(true);\n });\n });\n }\n\n /**\n * Read statistics information from host\n *\n * @param host Host name\n * @param typeOfDiag one of none, normal, no-city, extended\n */\n getDiagData(host: string, typeOfDiag: 'none' | 'normal' | 'no-city' | 'extended'): Promise<Record<string, any>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return new Promise(resolve => {\n this._socket.emit('sendToHost', host, 'getDiagData', typeOfDiag, (result: Record<string, any>) =>\n resolve(result),\n );\n });\n }\n\n /**\n * Read all states (which might not belong to this adapter) which match the given pattern.\n */\n getForeignStates(pattern?: string): Promise<Record<string, ioBroker.State>> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n if (LegacyConnection.isWeb()) {\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getStates',\n pattern || '*',\n (err: string | null, states: Record<string, ioBroker.State>) =>\n err ? reject(new Error(err)) : resolve(states),\n );\n });\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getForeignStates',\n pattern || '*',\n (err: string | null, states: Record<string, ioBroker.State>) =>\n err ? reject(new Error(err)) : resolve(states),\n );\n });\n }\n\n /**\n * Get foreign objects by pattern, by specific type and resolve their enums. (Only admin)\n */\n getForeignObjects(pattern: string, type?: ioBroker.ObjectType): Promise<Record<string, ioBroker.State>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getForeignObjects',\n pattern || '*',\n type,\n (err: string | null, states: Record<string, ioBroker.State>) =>\n err ? reject(new Error(err)) : resolve(states),\n );\n });\n }\n\n /**\n * Gets the system configuration.\n *\n * @param update Force update.\n */\n getSystemConfig(update?: boolean): Promise<ioBroker.SystemConfigObject> {\n if (!update && this._promises.systemConfig) {\n return this._promises.systemConfig;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.systemConfig = this.getObject('system.config').then(obj => {\n const systemConfig: ioBroker.SystemConfigObject = (obj || {}) as ioBroker.SystemConfigObject;\n systemConfig.common = systemConfig.common || ({} as ioBroker.SystemConfigCommon);\n systemConfig.native = systemConfig.native || {};\n return systemConfig;\n });\n\n return this._promises.systemConfig;\n }\n\n /**\n * Sets the system configuration.\n */\n setSystemConfig(\n obj: ioBroker.SettableObjectWorker<ioBroker.SystemConfigObject>,\n ): Promise<ioBroker.SystemConfigObject> {\n return this.setObject('system.config', obj).then(\n () => (this._promises.systemConfig = Promise.resolve(obj as ioBroker.SystemConfigObject)),\n );\n }\n\n /**\n * Get the raw socket.io socket.\n */\n getRawSocket(): SocketClient {\n return this._socket;\n }\n\n /**\n * Get the history of a given state.\n */\n getHistory(id: string, options: ioBroker.GetHistoryOptions): Promise<ioBroker.GetHistoryResult> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('getHistory', id, options, (err: string | null, values: ioBroker.GetHistoryResult) =>\n err ? reject(new Error(err)) : resolve(values),\n );\n });\n }\n\n /**\n * Get the history of a given state.\n */\n getHistoryEx(\n id: string,\n options: ioBroker.GetHistoryOptions,\n ): Promise<{ values: ioBroker.GetHistoryResult; sessionId: string; stepIgnore: number }> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'getHistory',\n id,\n options,\n (err: string | null, values: ioBroker.GetHistoryResult, stepIgnore: number, sessionId: string) =>\n err ? reject(new Error(err)) : resolve({ values, sessionId, stepIgnore }),\n );\n });\n }\n\n /**\n * Change the password of the given user.\n */\n changePassword(user: string, password: string): Promise<void> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('changePassword', user, password, (err: string | null) =>\n err ? reject(new Error(err)) : resolve(),\n );\n });\n }\n\n /**\n * Get the IP addresses of the given host.\n */\n getIpAddresses(\n host: string,\n /** Force update. */\n update?: boolean,\n ): Promise<string[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!host.startsWith('system.host.')) {\n host = `system.host.${host}`;\n }\n\n if (!update && this._promises[`IPs_${host}`]) {\n return this._promises[`IPs_${host}`] as Promise<string[]>;\n }\n this._promises[`IPs_${host}`] = this.getObject(host).then(obj => (obj?.common ? obj.common.address || [] : []));\n\n return this._promises[`IPs_${host}`] as Promise<string[]>;\n }\n\n /**\n * Get the IP addresses with interface names of the given host or find host by IP.\n */\n getHostByIp(\n ipOrHostName: string,\n /** Force update. */\n update?: boolean,\n ): Promise<{ name: string; address: string; family: 'ipv4' | 'ipv6' }[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (ipOrHostName.startsWith('system.host.')) {\n ipOrHostName = ipOrHostName.replace(/^system\\.host\\./, '');\n }\n\n if (!update && this._promises[`rIPs_${ipOrHostName}`]) {\n return this._promises[`rIPs_${ipOrHostName}`] as Promise<\n { name: string; address: string; family: 'ipv4' | 'ipv6' }[]\n >;\n }\n this._promises[`rIPs_${ipOrHostName}`] = new Promise(resolve => {\n this._socket.emit('getHostByIp', ipOrHostName, (ip: string, host: any) => {\n const IPs4: {\n name: string;\n address: string;\n family: 'ipv4' | 'ipv6';\n }[] = [{ name: '[IPv4] 0.0.0.0 - Listen on all IPs', address: '0.0.0.0', family: 'ipv4' }];\n const IPs6: {\n name: string;\n address: string;\n family: 'ipv4' | 'ipv6';\n }[] = [{ name: '[IPv6] :: - Listen on all IPs', address: '::', family: 'ipv6' }];\n if (host?.native?.hardware?.networkInterfaces) {\n for (const eth in host.native.hardware.networkInterfaces) {\n if (!Object.prototype.hasOwnProperty.call(host.native.hardware.networkInterfaces, eth)) {\n continue;\n }\n for (let num = 0; num < host.native.hardware.networkInterfaces[eth].length; num++) {\n if (host.native.hardware.networkInterfaces[eth][num].family !== 'IPv6') {\n IPs4.push({\n name: `[${host.native.hardware.networkInterfaces[eth][num].family}] ${host.native.hardware.networkInterfaces[eth][num].address} - ${eth}`,\n address: host.native.hardware.networkInterfaces[eth][num].address,\n family: 'ipv4',\n });\n } else {\n IPs6.push({\n name: `[${host.native.hardware.networkInterfaces[eth][num].family}] ${host.native.hardware.networkInterfaces[eth][num].address} - ${eth}`,\n address: host.native.hardware.networkInterfaces[eth][num].address,\n family: 'ipv6',\n });\n }\n }\n }\n }\n for (let i = 0; i < IPs6.length; i++) {\n IPs4.push(IPs6[i]);\n }\n resolve(IPs4);\n });\n });\n\n return this._promises[`rIPs_${ipOrHostName}`] as Promise<\n { name: string; address: string; family: 'ipv4' | 'ipv6' }[]\n >;\n }\n\n /**\n * Encrypt a text\n */\n encrypt(text: string): Promise<string> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('encrypt', text, (err: string | null, _text: string) =>\n err ? reject(new Error(err)) : resolve(_text),\n );\n });\n }\n\n /**\n * Decrypt a text\n */\n decrypt(encryptedText: string): Promise<string> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('decrypt', encryptedText, (err: string | null, text: string) =>\n err ? reject(new Error(err)) : resolve(text),\n );\n });\n }\n\n /**\n * Gets the version.\n */\n getVersion(update?: boolean): Promise<{ version: string; serverName: string }> {\n if (update && this._promises.version) {\n delete this._promises.version;\n }\n\n this._promises.version =\n this._promises.version ||\n new Promise((resolve, reject) => {\n this._socket.emit('getVersion', (err: string | null, version: string, serverName: string) => {\n // support of old socket.io\n if (err && !version && typeof err === 'string' && err.match(/\\d+\\.\\d+\\.\\d+/)) {\n resolve({ version: err, serverName: 'socketio' });\n } else {\n err ? reject(new Error(err)) : resolve({ version, serverName });\n }\n });\n });\n\n return this._promises.version;\n }\n\n /**\n * Gets the web server name.\n */\n getWebServerName(): Promise<string> {\n this._promises.webName =\n this._promises.webName ||\n new Promise((resolve, reject) => {\n this._socket.emit('getAdapterName', (err: string | null, name: string) =>\n err ? reject(new Error(err)) : resolve(name),\n );\n });\n\n return this._promises.webName;\n }\n\n /**\n * Gets the admin version.\n *\n * @deprecated use getVersion()\n */\n getAdminVersion(): Promise<{ version: string; serverName: string }> {\n console.log('Deprecated: use getVersion');\n return this.getVersion();\n }\n\n /**\n * Change access rights for a file\n *\n * @param adapter The adapter name.\n * @param fileName file name with a full path. It could be like vis.0/*\n * @param options like {mode: 0x644}\n * @param options.mode Access rights. Default is 0x644\n */\n chmodFile(\n adapter: string,\n fileName: string,\n options?: { mode: number },\n ): Promise<{ entries: ioBroker.ChownFileResult[]; id: string }> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'chmodFile',\n adapter,\n fileName,\n options,\n (err: string | null, entries: ioBroker.ChownFileResult[], id: string) =>\n err ? reject(new Error(err)) : resolve({ entries, id }),\n );\n });\n }\n\n /**\n * Change an owner or/and owner group for a file\n *\n * @param adapter The adapter name.\n * @param fileName file name with a full path. It could be like vis.0/*\n * @param options like {owner: 'user', ownerGroup: 'group'}\n * @param options.owner User name\n * @param options.ownerGroup Group name\n */\n chownFile(\n adapter: string,\n fileName: string,\n options: { owner?: string; ownerGroup?: string },\n ): Promise<{ entries: ioBroker.ChownFileResult[]; id: string }> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'chownFile',\n adapter,\n fileName,\n options,\n (err: string | null, entries: ioBroker.ChownFileResult[], id: string) =>\n err ? reject(new Error(err)) : resolve({ entries, id }),\n );\n });\n }\n\n /**\n * Check if the file exists\n *\n * @param adapter The adapter name.\n * @param fileName file name with a full path. It could be like vis.0/*\n */\n fileExists(adapter: string, fileName: string): Promise<boolean> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('fileExists', adapter, fileName, (err: string | null, exists: boolean) =>\n err ? reject(new Error(err)) : resolve(exists),\n );\n });\n }\n\n /**\n * Get the alarm notifications from a host (only for admin connection).\n */\n getNotifications(host: string, category?: string): Promise<FilteredNotificationInformation> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise(resolve => {\n this._socket.emit(\n 'sendToHost',\n host,\n 'getNotifications',\n { category },\n (notifications: FilteredNotificationInformation) => resolve(notifications),\n );\n });\n }\n\n /**\n * Clear the alarm notifications on a host (only for admin connection).\n *\n * @param host The host name.\n * @param category optional\n */\n clearNotifications(host: string, category?: string): Promise<{ result: 'ok' }> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise(resolve => {\n this._socket.emit('sendToHost', host, 'clearNotifications', { category }, (result: { result: 'ok' }) =>\n resolve(result),\n );\n });\n }\n\n /**\n * Read if only easy mode is allowed (only for admin connection).\n */\n getIsEasyModeStrict(): Promise<boolean> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('getIsEasyModeStrict', (error: null | string, isStrict: boolean) =>\n error ? reject(new Error(error)) : resolve(isStrict),\n );\n });\n }\n\n /**\n * Read easy mode configuration (only for admin connection).\n */\n getEasyMode(): Promise<any> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('getEasyMode', (error: string | null, config: any) =>\n error ? reject(new Error(error)) : resolve(config),\n );\n });\n }\n\n /**\n * Read current user\n */\n getCurrentUser(): Promise<string> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise(resolve => {\n this._socket.emit('authEnabled', (isSecure: boolean, user: string) => resolve(user));\n });\n }\n\n getCurrentSession(cmdTimeout?: number): Promise<{ expireInSec: number }> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n const controller = new AbortController();\n\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n controller.abort();\n reject(new Error('getCurrentSession timeout'));\n }\n }, cmdTimeout || 5000);\n\n fetch('./session', { signal: controller.signal })\n .then(res => res.json())\n .then(json => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n resolve(json);\n }\n })\n .catch(e => reject(new Error(`getCurrentSession: ${e}`)));\n });\n }\n\n /**\n * Read adapter ratings\n */\n getRatings(update?: boolean): Promise<any> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit('getRatings', update, (err: string | null, ratings: any) =>\n err ? reject(new Error(err)) : resolve(ratings),\n );\n });\n }\n\n /**\n * Read current web, socketio or admin namespace, like admin.0\n */\n getCurrentInstance(): Promise<string> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.currentInstance =\n this._promises.currentInstance ||\n new Promise((resolve, reject) => {\n this._socket.emit('getCurrentInstance', (err: string | null, namespace: string) =>\n err ? reject(new Error(err)) : resolve(namespace),\n );\n });\n\n return this._promises.currentInstance;\n }\n\n // returns very optimized information for adapters to minimize a connection load\n getCompactAdapters(update?: boolean): Promise<Record<string, ioBroker.AdapterObject>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.compactAdapters) {\n return this._promises.compactAdapters;\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n this._promises.compactAdapters = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getCompactAdapters',\n (err: string | null, adapters: Record<string, ioBroker.AdapterObject>) =>\n err ? reject(new Error(err)) : resolve(adapters),\n );\n });\n\n return this._promises.compactAdapters;\n }\n\n getAdaptersResetCache(adapter?: string): void {\n adapter = adapter || '';\n delete this._promises.compactAdapters;\n delete this._promises[`adapter_${adapter}`];\n }\n\n // returns very optimized information for adapters to minimize a connection load\n getCompactInstances(update?: boolean): Promise<Record<string, ioBroker.InstanceObject>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.compactInstances) {\n return this._promises.compactInstances;\n }\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.compactInstances = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getCompactInstances',\n (err: string | null, instances: Record<string, ioBroker.InstanceObject>) =>\n err ? reject(new Error(err)) : resolve(instances),\n );\n });\n\n return this._promises.compactInstances;\n }\n\n getAdapternInstancesResetCache(adapter?: string): void {\n adapter = adapter || '';\n delete this._promises.compactInstances;\n delete this._promises[`instances_${adapter}`];\n }\n\n /**\n * Returns very optimized information for adapters to minimize a connection load.\n * Reads only version of installed adapter\n */\n getCompactInstalled(\n host: string,\n update?: boolean,\n cmdTimeout?: number,\n ): Promise<Record<string, ioBroker.AdapterObject>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n this._promises.installedCompact = this._promises.installedCompact || {};\n\n if (!update && this._promises.installedCompact[host]) {\n return this._promises.installedCompact[host] as Promise<Record<string, ioBroker.AdapterObject>>;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n\n this._promises.installedCompact[host] = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getCompactInstalled timeout'));\n }\n }, cmdTimeout || this.props.cmdTimeout);\n\n this._socket.emit('getCompactInstalled', host, (data: Record<string, ioBroker.AdapterObject> | string) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getCompactInstalled\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getCompactInstalled\"'));\n } else {\n resolve(data);\n }\n }\n });\n });\n\n return this._promises.installedCompact[host] as Promise<Record<string, ioBroker.AdapterObject>>;\n }\n\n // returns very optimized information for adapters to minimize a connection load.\n // reads only version of installed adapter\n getCompactSystemRepositories(update?: boolean, cmdTimeout?: number): Promise<CompactSystemRepository> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!update && this._promises.getCompactSystemRepositories) {\n return this._promises.getCompactSystemRepositories;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.getCompactSystemRepositories = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getCompactSystemRepositories timeout'));\n }\n }, cmdTimeout || this.props.cmdTimeout);\n\n this._socket.emit('getCompactSystemRepositories', (data: CompactSystemRepository | string) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getCompactSystemRepositories\"'));\n } else if (!data || typeof data !== 'object') {\n reject(new Error('Cannot read \"getCompactSystemRepositories\"'));\n } else {\n resolve(data);\n }\n }\n });\n });\n\n return this._promises.getCompactSystemRepositories;\n }\n\n // returns very optimized information for adapters to minimize a connection load\n getCompactSystemConfig(update?: boolean): Promise<ioBroker.SystemConfigObject> {\n if (!update && this._promises.systemConfigPromise) {\n return this._promises.systemConfigPromise;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.systemConfigPromise = new Promise((resolve, reject) => {\n this._socket.emit(\n 'getCompactSystemConfig',\n (err: string | null, systemConfig: ioBroker.SystemConfigObject) =>\n err ? reject(new Error(err)) : resolve(systemConfig),\n );\n });\n\n return this._promises.systemConfigPromise;\n }\n\n /**\n * Get the repository in compact form (only version and icon).\n *\n * @param host The host name.\n * @param update Force update.\n * @param timeoutMs timeout in ms.\n */\n getCompactRepository(\n host: string,\n update?: boolean,\n timeoutMs?: number,\n ): Promise<Record<string, { version: string; icon: string }>> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n\n if (!update && this._promises.repoCompact) {\n return this._promises.repoCompact;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n if (!host.startsWith('system.host.')) {\n host += `system.host.${host}`;\n }\n\n this._promises.repoCompact = new Promise((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n reject(new Error('getCompactRepository timeout'));\n }\n }, timeoutMs || this.props.cmdTimeout);\n\n this._socket.emit(\n 'getCompactRepository',\n host,\n (data: Record<string, { version: string; icon: string }> | string) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n if (data === PERMISSION_ERROR) {\n reject(new Error('May not read \"getCompactRepository\"'));\n } else if (!data) {\n reject(new Error('Cannot read \"getCompactRepository\"'));\n } else {\n resolve(data);\n }\n }\n },\n );\n });\n\n return this._promises.repoCompact;\n }\n\n getInstalledResetCache(): void {\n delete this._promises.repoCompact;\n delete this._promises.repo;\n }\n\n /**\n * Get the list of all hosts in compact form (only _id, common.name, common.icon, common.color, native.hardware.networkInterfaces)\n */\n getCompactHosts(update?: boolean): Promise<ioBroker.HostObject[]> {\n if (LegacyConnection.isWeb()) {\n return Promise.reject(new Error('Allowed only in admin'));\n }\n if (!update && this._promises.hostsCompact) {\n return this._promises.hostsCompact;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.hostsCompact = new Promise((resolve, reject) => {\n this._socket.emit('getCompactHosts', (err: string | null, hosts: ioBroker.HostObject[]) =>\n err ? reject(new Error(err)) : resolve(hosts),\n );\n });\n\n return this._promises.hostsCompact;\n }\n\n /**\n * Get uuid\n */\n getUuid(): Promise<string | undefined> {\n if (this._promises.uuid) {\n return this._promises.uuid;\n }\n\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n this._promises.uuid = this.getObject('system.meta.uuid').then(obj => obj?.native?.uuid);\n\n return this._promises.uuid;\n }\n\n /**\n * Subscribe on instance message\n *\n * @param targetInstance instance, like 'cameras.0'\n * @param messageType message type like 'startCamera/cam3'\n * @param data optional data object\n * @param callback message handler\n */\n subscribeOnInstance(\n targetInstance: string,\n messageType: string,\n data: any,\n callback: (_data: Record<string, any>, sourceInstance: string, _messageType: string) => void,\n ): Promise<{ error?: string; accepted?: boolean; heartbeat?: number }> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n return new Promise((resolve, reject) => {\n this._socket.emit(\n 'clientSubscribe',\n targetInstance,\n messageType,\n data,\n (err: string | null, result: { error?: string; accepted?: boolean; heartbeat?: number }) => {\n if (err) {\n reject(new Error(err));\n } else if (result?.error) {\n reject(new Error(result.error));\n } else {\n if (!targetInstance.startsWith('system.adapter.')) {\n targetInstance = `system.adapter.${targetInstance}`;\n }\n // save callback\n this._instanceSubscriptions[targetInstance] = this._instanceSubscriptions[targetInstance] || [];\n if (\n !this._instanceSubscriptions[targetInstance].find(\n sub => sub.messageType === messageType && sub.callback === callback,\n )\n ) {\n this._instanceSubscriptions[targetInstance].push({\n messageType,\n callback,\n });\n }\n resolve(result);\n }\n },\n );\n });\n }\n\n /**\n * Unsubscribe from instance message\n *\n * @param targetInstance instance, like 'cameras.0'\n * @param messageType message type like 'startCamera/cam3'\n * @param callback message handler. Could be null if all callbacks for this messageType should be unsubscribed\n */\n unsubscribeFromInstance(\n targetInstance: string,\n messageType?: string,\n callback?: (data: Record<string, any>, sourceInstance: string, _messageType: string) => void,\n ): Promise<boolean> {\n if (!targetInstance.startsWith('system.adapter.')) {\n targetInstance = `system.adapter.${targetInstance}`;\n }\n let deleted;\n const promiseResults: Promise<boolean>[] = [];\n do {\n deleted = false;\n const index = this._instanceSubscriptions[targetInstance]?.findIndex(\n sub => (!messageType || sub.messageType === messageType) && (!callback || sub.callback === callback),\n );\n\n if (index !== undefined && index !== null && index !== -1) {\n deleted = true;\n // remember messageType\n const _messageType = this._instanceSubscriptions[targetInstance][index].messageType;\n\n this._instanceSubscriptions[targetInstance].splice(index, 1);\n if (!this._instanceSubscriptions[targetInstance].length) {\n delete this._instanceSubscriptions[targetInstance];\n }\n\n // try to find another subscription for this instance and messageType\n const found =\n this._instanceSubscriptions[targetInstance] &&\n this._instanceSubscriptions[targetInstance].find(sub => sub.messageType === _messageType);\n\n if (!found) {\n promiseResults.push(\n new Promise((resolve, reject) => {\n this._socket.emit(\n 'clientUnsubscribe',\n targetInstance,\n messageType,\n (err: string | null, wasSubscribed: boolean) => {\n if (err) {\n reject(new Error(err));\n } else {\n resolve(wasSubscribed);\n }\n },\n );\n }),\n );\n }\n }\n } while (deleted && (!callback || !messageType));\n\n if (promiseResults.length) {\n return Promise.all(promiseResults).then((results: boolean[]) => results.find(result => result) || false);\n }\n\n return Promise.resolve(false);\n }\n\n /**\n * Send log to ioBroker log\n */\n log(text: string, level?: 'info' | 'debug' | 'warn' | 'error' | 'silly'): void {\n text && this._socket.emit('log', text, level || 'debug');\n }\n\n /**\n * Logout current user\n */\n logout(): Promise<void> {\n if (!this.connected) {\n return Promise.reject(new Error(NOT_CONNECTED));\n }\n\n return new Promise((resolve, reject) => {\n this._socket.emit('logout', (err: string | null) => (err ? reject(new Error(err)) : resolve()));\n });\n }\n\n /**\n * This is a special method for vis.\n * It is used to not send to server the changes about \"nothing_selected\" state\n *\n * @param id The state that has to be ignored by communication\n */\n setStateToIgnore(id?: string | null): void {\n this.ignoreState = id || '';\n }\n}\n"]}
|