@iobroker/js-controller-cli 7.2.3-alpha.8-20260709-8d8c9c5ed → 7.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +3 -3
- package/build/cjs/lib/_Types.d.ts +1 -8
- package/build/cjs/lib/cli/cliCert.d.ts +4 -7
- package/build/cjs/lib/cli/cliCert.js +6 -10
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +14 -45
- package/build/cjs/lib/cli/cliCommand.js +1 -8
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +2 -5
- package/build/cjs/lib/cli/cliCompact.js +2 -9
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +2 -5
- package/build/cjs/lib/cli/cliDebug.js +1 -8
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +10 -13
- package/build/cjs/lib/cli/cliHost.js +5 -13
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +3 -9
- package/build/cjs/lib/cli/cliLogs.js +1 -12
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +1 -2
- package/build/cjs/lib/cli/cliMessage.js +0 -5
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +18 -21
- package/build/cjs/lib/cli/cliObjects.js +33 -51
- package/build/cjs/lib/cli/cliObjects.js.map +2 -2
- package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
- package/build/cjs/lib/cli/cliPlugin.js +0 -6
- package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
- package/build/cjs/lib/cli/cliProcess.d.ts +4 -8
- package/build/cjs/lib/cli/cliProcess.js +16 -27
- package/build/cjs/lib/cli/cliProcess.js.map +3 -3
- package/build/cjs/lib/cli/cliStates.d.ts +4 -7
- package/build/cjs/lib/cli/cliStates.js +6 -14
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/cli/cliTools.js +0 -11
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.js +46 -47
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/setup/customError.d.ts +0 -4
- package/build/cjs/lib/setup/customError.js +0 -7
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +64 -69
- package/build/cjs/lib/setup/dbConnection.js.map +3 -3
- package/build/cjs/lib/setup/formatters.d.ts +4 -4
- package/build/cjs/lib/setup/formatters.js +0 -5
- package/build/cjs/lib/setup/formatters.js.map +2 -2
- package/build/cjs/lib/setup/multihostClient.js +2 -6
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +0 -5
- package/build/cjs/lib/setup/pluginInfos.js +0 -2
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +0 -34
- package/build/cjs/lib/setup/setupBackup.js +12 -46
- package/build/cjs/lib/setup/setupBackup.js.map +3 -3
- package/build/cjs/lib/setup/setupInstall.d.ts +15 -38
- package/build/cjs/lib/setup/setupInstall.js +24 -42
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +0 -8
- package/build/cjs/lib/setup/setupLicense.js +0 -7
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +1 -55
- package/build/cjs/lib/setup/setupList.js +24 -78
- package/build/cjs/lib/setup/setupList.js.map +3 -3
- package/build/cjs/lib/setup/setupMultihost.js +9 -12
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/cjs/lib/setup/setupPacketManager.js +6 -16
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +0 -6
- package/build/cjs/lib/setup/setupRepo.js +11 -28
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +0 -27
- package/build/cjs/lib/setup/setupSetup.js +33 -52
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/cjs/lib/setup/setupUpgrade.js +10 -19
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +1 -72
- package/build/cjs/lib/setup/setupUpload.js +6 -74
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +14 -23
- package/build/cjs/lib/setup/setupUsers.js +15 -58
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +1 -9
- package/build/cjs/lib/setup/setupVendor.js +6 -13
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/cjs/lib/setup/setupVisDebug.js +15 -21
- package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +9 -13
- package/build/cjs/lib/setup/utils.js.map +3 -3
- package/build/cjs/lib/setup.js +330 -269
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/lib/_Types.d.ts +1 -8
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +4 -7
- package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.js +6 -6
- package/build/esm/lib/cli/cliCert.js.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +14 -45
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +1 -4
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +2 -5
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +2 -5
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +2 -5
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +1 -4
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +10 -13
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +5 -8
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +3 -9
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +1 -8
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +1 -2
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +0 -1
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +18 -21
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +38 -44
- package/build/esm/lib/cli/cliObjects.js.map +1 -1
- package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
- package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
- package/build/esm/lib/cli/cliPlugin.js +1 -1
- package/build/esm/lib/cli/cliPlugin.js.map +1 -1
- package/build/esm/lib/cli/cliProcess.d.ts +4 -8
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +4 -7
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +4 -7
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +2 -6
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/setup/customError.d.ts +0 -4
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +0 -3
- package/build/esm/lib/setup/customError.js.map +1 -1
- package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
- package/build/esm/lib/setup/dbConnection.js +13 -10
- package/build/esm/lib/setup/dbConnection.js.map +1 -1
- package/build/esm/lib/setup/formatters.d.ts +4 -4
- package/build/esm/lib/setup/formatters.js +4 -4
- package/build/esm/lib/setup/pluginInfos.d.ts +0 -5
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +0 -5
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +0 -34
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +12 -46
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +15 -38
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +21 -38
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +0 -8
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +0 -6
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +1 -55
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +8 -61
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +6 -5
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +0 -9
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +0 -6
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +14 -30
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +0 -27
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +21 -36
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +6 -14
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +1 -72
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +5 -72
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +14 -23
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +14 -56
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +1 -9
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +1 -7
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +14 -21
- package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
- package/build/esm/lib/setup/utils.d.ts +1 -1
- package/build/esm/lib/setup/utils.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.js +4 -2
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/esm/lib/setup.d.ts.map +1 -1
- package/build/esm/lib/setup.js +211 -162
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -14
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupList.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * List different objects for CLI\n *\n * Copyright 2013-2026 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\nimport fs from 'fs-extra';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\n\ninterface File {\n adapter: string;\n path: string;\n file: ioBroker.ReadDirResult;\n}\n\ninterface IdValueObject {\n id: string;\n value: any;\n}\n\ninterface FlagObject {\n alive?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n port?: number;\n ssl?: boolean;\n ip?: string;\n}\n\ninterface CLIListOptions {\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: (exitCode?: number) => void;\n}\n\nexport type ListType =\n | 'objects'\n | 'o'\n | 'states'\n | 's'\n | 'adapters'\n | 'a'\n | 'instances'\n | 'i'\n | 'users'\n | 'u'\n | 'groups'\n | 'g'\n | 'hosts'\n | 'h'\n | 'enums'\n | 'e'\n | 'files'\n | 'f';\n\ninterface AdapterListEntry {\n /** The object id */\n id: string;\n /** Adapter name */\n name: string;\n /** Version of adapter */\n version: string;\n /** The configured upgrade policy */\n 'upgrade policy': ioBroker.AutoUpgradePolicy;\n}\n\n/**\n * CLI command to list adapters, instances, objects and files\n */\nexport class List {\n private config: Record<string, any>;\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: (exitCode?: number) => void;\n\n /**\n * @param options The objects/states clients, config and process-exit callback\n */\n constructor(options: CLIListOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid Modified arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.config = fs.readJSONSync(tools.getConfigFileName());\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n }\n\n private static _perm2str(perm: number): string {\n let result = '';\n // user\n result += perm & 0x400 ? 'r' : '-';\n result += perm & 0x200 ? 'w' : '-';\n result += perm & 0x100 ? 'x' : '-';\n // group\n result += perm & 0x040 ? 'r' : '-';\n result += perm & 0x020 ? 'w' : '-';\n result += perm & 0x010 ? 'x' : '-';\n // any\n result += perm & 0x004 ? 'r' : '-';\n result += perm & 0x002 ? 'w' : '-';\n result += perm & 0x001 ? 'x' : '-';\n return result;\n }\n\n /**\n * Print the table header for a file listing\n *\n * @param adapter Optional adapter name printed above the header\n */\n showFileHeader(adapter?: string): void {\n if (adapter) {\n console.log(`\\n-- ${adapter} --`);\n }\n\n console.log(' Modified at |Permission| User | Group | Size | Name');\n console.log('----------------+----------+--------------+--------------+------+---------');\n }\n\n /**\n * Print a single file as a table row\n *\n * @param adapter The adapter the file belongs to\n * @param path The directory path of the file\n * @param file The file entry to print\n */\n showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n let time = '';\n if (file.modifiedAt) {\n const ts = new Date(file.modifiedAt);\n time = ts.toISOString();\n time = time.replace('T', ' ');\n time = `${time.substring(0, 16)} `;\n }\n text += time.padEnd(17);\n\n if (file.acl) {\n text += (file.isDir ? 'd' : '-') + List._perm2str(file.acl.permissions || 0);\n let owner: string = file.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group: string = file.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `${file.isDir ? 'd' : '-'}?????????${new Array(31).join(' ')}`;\n }\n const size = file.stats && file.stats.size ? file.stats.size.toString() : '';\n\n text += ` ${size.padStart(6)} ${adapter}${!path || path[0] === '/' ? '' : '/'}${path}/${file.file}`;\n if (file.isDir) {\n text += '/';\n console.log(text);\n } else {\n console.log(text);\n }\n }\n\n /**\n * Print the table header for an object listing\n */\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n /**\n * Print a single object as a table row\n *\n * @param obj The object to print\n */\n showObject(obj: ioBroker.AnyObject): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n if (obj.acl) {\n text += `${List._perm2str(obj.acl.object || 0)} ${\n obj.type === 'state' ? List._perm2str(obj.acl.state || 0) : ' '\n }`;\n let owner: string = obj.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group: string = obj.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `?????????${obj.type === 'state' ? ' ?????????' : ' '}${new Array(31).join(' ')}`;\n }\n text += ` ${obj._id}`;\n console.log(text);\n }\n\n /**\n * Recursively list the files in a directory of an adapter\n *\n * @param adapter The adapter the files belong to\n * @param path The directory path to list\n * @param allFiles Accumulator of files collected so far, or the callback\n * @param callback Called with all collected files\n */\n listDirectory(\n adapter: string,\n path: string | null | undefined,\n allFiles?: File[] | ((allFiles: File[]) => void),\n callback?: (allFiles: File[]) => void,\n ): void {\n if (typeof path === 'function') {\n callback = path;\n path = '';\n allFiles = [];\n }\n if (typeof allFiles === 'function') {\n callback = allFiles;\n allFiles = [];\n }\n const _allFiles = allFiles || [];\n const _path = path || '';\n\n this.objects.readDir(adapter, _path, null, (err, files) => {\n if (err && err.code === 'ENOTDIR') {\n const pos = _path.lastIndexOf('/');\n if (pos !== -1) {\n const dir = _path.substring(0, pos);\n const fname = _path.substring(pos + 1);\n this.objects.readDir(adapter, dir, null, (err, files) => {\n if (err) {\n console.log(`Cannot read \"${path}\": ${err.message}`);\n typeof callback === 'function' && callback(_allFiles);\n } else {\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n if (file.file === fname) {\n _allFiles.push({ adapter, path: _path, file });\n break;\n }\n }\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n } else if (typeof callback === 'function') {\n callback(_allFiles);\n }\n } else {\n let count = 0;\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n _allFiles.push({ adapter: adapter, path: _path, file });\n if (file.isDir) {\n count++;\n this.listDirectory(adapter, `${path}/${file.file}`, allFiles, () => {\n if (!--count && callback) {\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n }\n }\n if (!count && typeof callback === 'function') {\n callback(_allFiles);\n }\n }\n });\n }\n\n /**\n * Comparator that sorts two file entries by their full path\n *\n * @param a The first file entry\n * @param b The second file entry\n */\n sortFiles(a: File, b: File): number {\n let a1 = a.path + a.file.file;\n if (a1[0] !== '/') {\n a1 = `/${a1}`;\n }\n let b1 = b.path + b.file.file;\n if (b1[0] !== '/') {\n b1 = `/${b1}`;\n }\n return a1.localeCompare(b1);\n }\n\n /**\n * List the files of the given adapters\n *\n * @param adapters The adapters whose files should be listed\n * @param filter Optional name filter, or the callback\n * @param callback Called once all files have been listed\n */\n listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void> {\n if (typeof filter === 'function') {\n callback = filter;\n filter = null;\n }\n if (filter) {\n filter = filter.replace(/\\*/g, '');\n if (filter[filter.length - 1] === '/') {\n filter = filter.substring(0, filter.length - 1);\n }\n }\n\n if (adapters && adapters.length) {\n const adapter = adapters.shift() as string;\n this.listDirectory(adapter, filter, files => {\n files.sort(this.sortFiles);\n this.showFileHeader(adapter);\n\n files\n .filter(f => !filter || `${f.path}/${f.file.file}`.startsWith(filter))\n .forEach(f => this.showFile(f.adapter, f.path, f.file));\n\n return this.listAdaptersFiles(adapters, filter, callback);\n });\n } else {\n return tools.maybeCallback(callback);\n }\n }\n\n private _readOnlineState(\n lines: IdValueObject[],\n flags: FlagObject,\n cb: (res: string[]) => void,\n _result?: string[],\n ): void {\n const result = _result || [];\n if (!lines?.length) {\n cb(result);\n } else {\n const task = lines.shift() as IdValueObject;\n const id = `${task.id}.alive`;\n this.states.getState(id, (_err, state) => {\n if (state?.val) {\n result.push(`+ ${task.value}`);\n } else if (!flags.alive) {\n result.push(` ${task.value}`);\n }\n setImmediate(() => this._readOnlineState(lines, flags, cb, result));\n });\n }\n }\n\n /**\n * List items of the given type matching the filter\n *\n * @param type The kind of items to list (e.g. adapters, instances, objects)\n * @param filter A filter applied to the listed items\n * @param flags Additional flags controlling the output\n */\n list(type: ListType, filter: string, flags: FlagObject): void {\n this.objects.getObject('system.config', (err, systemConf) => {\n const lang: ioBroker.Languages = systemConf?.common?.language || 'en';\n switch (type) {\n case 'objects':\n case 'o':\n this.objects.getObjectList({}, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(filter)) : null;\n for (const obj of objs.rows) {\n let name = obj.value?.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n if (obj.value.type) {\n const id = obj.value._id;\n const type = obj.value.type;\n\n console.log(`${id.padStart(39)}: ${type.padStart(39)} - ${name || ''}`);\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'states':\n case 's':\n this.states.getKeys(filter || '*', (err, keys) => {\n if (err) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n\n if (!keys) {\n return void this.processExit();\n }\n\n this.states.getStates(keys, (err, states) => {\n if (err || !states) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (!state) {\n continue;\n }\n\n const id = keys[i];\n const from = state.from || '';\n const type = typeof state.val;\n\n console.log(\n `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${\n state.ack ? ' ack' : 'not ack'\n } ${JSON.stringify(state.val)}`,\n );\n }\n this.processExit();\n });\n });\n break;\n\n case 'adapters':\n case 'a':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n const adapterList: AdapterListEntry[] = [];\n for (const obj of objs.rows) {\n if (obj.value.type !== 'adapter') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n adapterList.push({\n id,\n name,\n version: obj.value.common.version,\n 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none',\n });\n }\n }\n\n console.table(adapterList);\n this.processExit();\n },\n );\n break;\n\n case 'instances':\n case 'i':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n objs.rows.sort((a, b) => {\n if (a.id > b.id) {\n return 1;\n } else if (a.id < b.id) {\n return -1;\n }\n return 0;\n });\n const lines = [];\n for (const row of objs.rows) {\n if (row.value.type !== 'instance') {\n continue;\n }\n\n let name = row.value.common?.name;\n\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(row.value._id) || (name && reg.test(name))) {\n if (flags.enabled && !row.value.common.enabled) {\n continue;\n }\n if (flags.disabled && row.value.common.enabled) {\n continue;\n }\n if (flags.port && row.value.native.port === undefined) {\n continue;\n }\n if (flags.ssl && row.value.native.secure === undefined) {\n continue;\n }\n if (flags.ip && row.value.native.bind === undefined) {\n continue;\n }\n\n let id: string = row.value._id;\n let host = row.value.common.host;\n\n if (id.length < 40) {\n id = id.padEnd(40);\n }\n if (name && name.length < 22) {\n name = name.padEnd(22);\n }\n\n if (host && host.length < 40) {\n host = host.padEnd(40);\n }\n\n let text = `${id}: ${name || ''}: ${host} - ${\n row.value.common.enabled ? ' enabled' : 'disabled'\n }`;\n\n if (this.config.system && this.config.system.compact && row.value.common.compact) {\n text += `, compact ${\n row.value.common.compact && row.value.common.runAsCompactMode\n ? `enabled (group ${\n row.value.common.compactGroup !== undefined\n ? row.value.common.compactGroup\n : 1\n })`\n : 'disabled'\n }`;\n }\n\n if (row.value.native && row.value.native.port) {\n text += `, port: ${row.value.native.port}`;\n }\n if (row.value.native && row.value.native.bind) {\n text += `, bind: ${row.value.native.bind}`;\n }\n if (row.value.native && row.value.native.secure) {\n text += ' (SSL)';\n }\n if (row.value.native && row.value.native.defaultUser) {\n text += `, run as: ${row.value.native.defaultUser}`;\n }\n lines.push({ id: row.value._id, value: text });\n }\n }\n this._readOnlineState(lines, flags, result => {\n console.log(result.join('\\n'));\n console.log('\\n+ instance is alive');\n this.processExit();\n });\n },\n );\n break;\n\n case 'users':\n case 'u':\n this.objects.getObjectList(\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err, objs) => {\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, groups) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.user.${filter}`))\n : null;\n console.log(\n ' ID | Name | Active | Groups',\n );\n console.log(\n '---------------------------------------+-------------+----------+--------------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'user') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}| ${name.padEnd(11)} | ${\n obj.value.common.enabled ? ' enabled' : 'disabled'\n } |`;\n if (groups) {\n const gs = [];\n // find all groups\n for (const group of groups.rows) {\n if (\n group.value.common.members &&\n group.value.common.members.indexOf(obj.value._id) !== -1\n ) {\n gs.push(group.value._id.substring(13));\n }\n }\n console.log(`${text} ${gs.join(', ')}`);\n }\n }\n }\n this.processExit();\n },\n );\n },\n );\n break;\n\n case 'groups':\n case 'g':\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.group.${filter}`)) : null;\n console.log('');\n console.log(\n ' system.group | object | state | file | user | others | users',\n );\n console.log(\n ' | l r w d | l r w d | l r w c d | w c d | |',\n );\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'group') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id.substring(13);\n if (id === 'administrator') {\n obj.value.common.acl = {\n file: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n object: {\n read: true,\n write: true,\n create: true,\n delete: true,\n list: true,\n },\n state: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n users: {\n write: true,\n create: true,\n delete: true,\n list: true,\n read: true,\n },\n other: {\n execute: true,\n http: true,\n sendto: true,\n },\n };\n }\n\n let text = id.padEnd(19);\n text += ' | ';\n if (obj.value.common.acl?.object) {\n text += `${obj.value.common.acl.object.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.state) {\n text += ' ';\n text += `${obj.value.common.acl.state.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.file) {\n text += ' ';\n text += `${obj.value.common.acl.file.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.users) {\n text += ' ';\n text += `${obj.value.common.acl.users.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.other) {\n text += ' ';\n let others = '';\n for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) {\n others += `${r + (otherPerm ? '+' : '-')} `;\n }\n\n text += `${others.padEnd(22)}|`;\n } else {\n text += `${new Array(25).join(' ')}|`;\n }\n\n if (obj.value.common.members) {\n for (let m = 0; m < obj.value.common.members.length; m++) {\n obj.value.common.members[m] = obj.value.common.members[m].substring(\n 12,\n ) as ioBroker.ObjectIDs.User;\n }\n text += ` ${obj.value.common.members.join(', ')}`;\n }\n console.log(text);\n }\n }\n\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete');\n this.processExit();\n },\n );\n break;\n\n case 'h':\n case 'hosts':\n this.objects.getObjectList(\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n this.states.getKeys('system.host.*', (err, keys) => {\n if (!keys) {\n this.processExit();\n return;\n }\n this.states.getStates(keys, (err, states) => {\n if (!states) {\n this.processExit();\n return;\n }\n\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.host.${filter}`))\n : null;\n\n for (const obj of objs.rows) {\n if (obj.value.type !== 'host') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(12);\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const hostname = obj.value.common.hostname;\n\n const version = obj.value.common.installedVersion;\n let alive = '';\n let uptime = '';\n for (let k = 0; k < keys.length; k++) {\n if (keys[k] === `${obj.value._id}.alive`) {\n alive = 'alive';\n }\n if (keys[k] === `${obj.value._id}.uptime`) {\n uptime = states[k]!.val?.toString() || '-';\n }\n }\n alive = alive || 'dead';\n\n if (!uptime) {\n uptime = '-';\n }\n const text = `${id.padEnd(\n 19,\n )} ${name} (version: ${version}, hostname: ${hostname.padEnd(\n 14,\n )}, ${alive}, uptime: ${uptime})`;\n // todo\n console.log(text);\n }\n }\n\n this.processExit();\n });\n });\n },\n );\n break;\n\n case 'enums':\n case 'e':\n this.objects.getObjectList({ startkey: 'enum.', endkey: 'enum.\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`enum.${filter}`)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'enum') {\n continue;\n }\n\n let name = obj.value.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n console.log(\n '\\n=====================================================================================',\n );\n const id = obj.value._id.substring(5);\n\n console.log(`${id.padEnd(19)}(${name})`);\n console.log(\n '-------------------------------------------------------------------------------------',\n );\n\n if (obj.value.common.members) {\n console.log(obj.value.common.members.join(', '));\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'files':\n case 'f':\n this.objects.getObjectList({ startkey: '', endkey: '\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n\n const adapter = filter || null;\n const names = filter ? filter.split('/') : null;\n if (names && !names[0]) {\n names.splice(0, 1);\n }\n\n const adapters = objs.rows\n .filter(\n row =>\n row.value.type === 'meta' &&\n !(\n names &&\n adapter &&\n row.value._id !== names[0] &&\n !row.value._id.startsWith(`${names[0]}.`)\n ),\n )\n .map(row => row.value._id);\n\n if (names) {\n names.shift();\n }\n\n return this.listAdaptersFiles(adapters, names ? names.join('/') : null, () =>\n this.processExit(),\n );\n });\n break;\n }\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["fs", "err", "files", "type"]
|
|
4
|
+
"sourcesContent": ["/**\n * List different objects for CLI\n *\n * Copyright 2013-2024 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\n\ninterface File {\n adapter: string;\n path: string;\n file: ioBroker.ReadDirResult;\n}\n\ninterface IdValueObject {\n id: string;\n value: any;\n}\n\ninterface FlagObject {\n alive?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n port?: number;\n ssl?: boolean;\n ip?: string;\n}\n\ninterface CLIListOptions {\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: (exitCode?: number) => void;\n}\n\nexport type ListType =\n | 'objects'\n | 'o'\n | 'states'\n | 's'\n | 'adapters'\n | 'a'\n | 'instances'\n | 'i'\n | 'users'\n | 'u'\n | 'groups'\n | 'g'\n | 'hosts'\n | 'h'\n | 'enums'\n | 'e'\n | 'files'\n | 'f';\n\ninterface AdapterListEntry {\n /** The object id */\n id: string;\n /** Adapter name */\n name: string;\n /** Version of adapter */\n version: string;\n /** The configured upgrade policy */\n 'upgrade policy': ioBroker.AutoUpgradePolicy;\n}\n\nexport class List {\n private config: Record<string, any>;\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: (exitCode?: number) => void;\n\n constructor(options: CLIListOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid Modified arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.config = fs.readJSONSync(tools.getConfigFileName());\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n }\n\n private static _perm2str(perm: number): string {\n let result = '';\n // user\n result += perm & 0x400 ? 'r' : '-';\n result += perm & 0x200 ? 'w' : '-';\n result += perm & 0x100 ? 'x' : '-';\n // group\n result += perm & 0x040 ? 'r' : '-';\n result += perm & 0x020 ? 'w' : '-';\n result += perm & 0x010 ? 'x' : '-';\n // any\n result += perm & 0x004 ? 'r' : '-';\n result += perm & 0x002 ? 'w' : '-';\n result += perm & 0x001 ? 'x' : '-';\n return result;\n }\n\n showFileHeader(adapter?: string): void {\n if (adapter) {\n console.log(`\\n-- ${adapter} --`);\n }\n\n console.log(' Modified at |Permission| User | Group | Size | Name');\n console.log('----------------+----------+--------------+--------------+------+---------');\n }\n\n showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n let time = '';\n if (file.modifiedAt) {\n const ts = new Date(file.modifiedAt);\n time = ts.toISOString();\n time = time.replace('T', ' ');\n time = `${time.substring(0, 16)} `;\n }\n text += time.padEnd(17);\n\n if (file.acl) {\n text += (file.isDir ? 'd' : '-') + List._perm2str(file.acl.permissions || 0);\n let owner = file.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = file.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `${file.isDir ? 'd' : '-'}?????????${new Array(31).join(' ')}`;\n }\n const size = file.stats && file.stats.size ? file.stats.size.toString() : '';\n\n text += ` ${size.padStart(6)} ${adapter}${!path || path[0] === '/' ? '' : '/'}${path}/${file.file}`;\n if (file.isDir) {\n text += '/';\n console.log(text);\n } else {\n console.log(text);\n }\n }\n\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n showObject(obj: ioBroker.AnyObject): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n if (obj.acl) {\n text += `${List._perm2str(obj.acl.object || 0)} ${\n obj.type === 'state' ? List._perm2str(obj.acl.state || 0) : ' '\n }`;\n let owner = obj.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = obj.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `?????????${obj.type === 'state' ? ' ?????????' : ' '}${new Array(31).join(' ')}`;\n }\n text += ` ${obj._id}`;\n console.log(text);\n }\n\n listDirectory(\n adapter: string,\n path: string | null | undefined,\n allFiles?: File[] | ((allFiles: File[]) => void),\n callback?: (allFiles: File[]) => void,\n ): void {\n if (typeof path === 'function') {\n callback = path;\n path = '';\n allFiles = [];\n }\n if (typeof allFiles === 'function') {\n callback = allFiles;\n allFiles = [];\n }\n const _allFiles = allFiles || [];\n const _path = path || '';\n\n this.objects.readDir(adapter, _path, null, (err, files) => {\n if (err && err.code === 'ENOTDIR') {\n const pos = _path.lastIndexOf('/');\n if (pos !== -1) {\n const dir = _path.substring(0, pos);\n const fname = _path.substring(pos + 1);\n this.objects.readDir(adapter, dir, null, (err, files) => {\n if (err) {\n console.log(`Cannot read \"${path}\": ${err.message}`);\n typeof callback === 'function' && callback(_allFiles);\n } else {\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n if (file.file === fname) {\n _allFiles.push({ adapter, path: _path, file });\n break;\n }\n }\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n } else if (typeof callback === 'function') {\n callback(_allFiles);\n }\n } else {\n let count = 0;\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n _allFiles.push({ adapter: adapter, path: _path, file });\n if (file.isDir) {\n count++;\n this.listDirectory(adapter, `${path}/${file.file}`, allFiles, () => {\n if (!--count && callback) {\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n }\n }\n if (!count && typeof callback === 'function') {\n callback(_allFiles);\n }\n }\n });\n }\n\n sortFiles(a: File, b: File): number {\n let a1 = a.path + a.file.file;\n if (a1[0] !== '/') {\n a1 = `/${a1}`;\n }\n let b1 = b.path + b.file.file;\n if (b1[0] !== '/') {\n b1 = `/${b1}`;\n }\n return a1.localeCompare(b1);\n }\n\n listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void> {\n if (typeof filter === 'function') {\n callback = filter;\n filter = null;\n }\n if (filter) {\n filter = filter.replace(/\\*/g, '');\n if (filter[filter.length - 1] === '/') {\n filter = filter.substring(0, filter.length - 1);\n }\n }\n\n if (adapters && adapters.length) {\n const adapter = adapters.shift() as string;\n this.listDirectory(adapter, filter, files => {\n files.sort(this.sortFiles);\n this.showFileHeader(adapter);\n\n files\n .filter(f => !filter || `${f.path}/${f.file.file}`.startsWith(filter))\n .forEach(f => this.showFile(f.adapter, f.path, f.file));\n\n this.listAdaptersFiles(adapters, filter, callback);\n });\n } else {\n return tools.maybeCallback(callback);\n }\n }\n\n private _readOnlineState(\n lines: IdValueObject[],\n flags: FlagObject,\n cb: (res: any[]) => void,\n _result?: any[],\n ): void {\n const result = _result || [];\n if (!lines || !lines.length) {\n cb(result);\n } else {\n const task = lines.shift() as IdValueObject;\n const id = `${task.id}.alive`;\n this.states.getState(id, (err, state) => {\n if (state && state.val) {\n result.push(`+ ${task.value}`);\n } else if (!flags.alive) {\n result.push(` ${task.value}`);\n }\n setImmediate(() => this._readOnlineState(lines, flags, cb, result));\n });\n }\n }\n\n list(type: ListType, filter: string, flags: FlagObject): void {\n this.objects.getObject('system.config', (err, systemConf) => {\n const lang: ioBroker.Languages = systemConf?.common?.language || 'en';\n switch (type) {\n case 'objects':\n case 'o':\n this.objects.getObjectList({}, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(filter)) : null;\n for (const obj of objs.rows) {\n let name = obj.value?.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n if (obj.value.type) {\n const id = obj.value._id;\n const type = obj.value.type;\n\n console.log(`${id.padStart(39)}: ${type.padStart(39)} - ${name || ''}`);\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'states':\n case 's':\n this.states.getKeys(filter || '*', (err, keys) => {\n if (err) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n\n if (!keys) {\n return void this.processExit();\n }\n\n this.states.getStates(keys, (err, states) => {\n if (err || !states) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (!state) {\n continue;\n }\n\n const id = keys[i];\n const from = state.from || '';\n const type = typeof state.val;\n\n console.log(\n `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${\n state.ack ? ' ack' : 'not ack'\n } ${JSON.stringify(state.val)}`,\n );\n }\n this.processExit();\n });\n });\n break;\n\n case 'adapters':\n case 'a':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n const adapterList: AdapterListEntry[] = [];\n for (const obj of objs.rows) {\n if (obj.value.type !== 'adapter') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n adapterList.push({\n id,\n name,\n version: obj.value.common.version,\n 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none',\n });\n }\n }\n\n console.table(adapterList);\n this.processExit();\n },\n );\n break;\n\n case 'instances':\n case 'i':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n objs.rows.sort((a, b) => {\n if (a.id > b.id) {\n return 1;\n } else if (a.id < b.id) {\n return -1;\n }\n return 0;\n });\n const lines = [];\n for (const row of objs.rows) {\n if (row.value.type !== 'instance') {\n continue;\n }\n\n let name = row.value.common?.name;\n\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(row.value._id) || (name && reg.test(name))) {\n if (flags.enabled && !row.value.common.enabled) {\n continue;\n }\n if (flags.disabled && row.value.common.enabled) {\n continue;\n }\n if (flags.port && row.value.native.port === undefined) {\n continue;\n }\n if (flags.ssl && row.value.native.secure === undefined) {\n continue;\n }\n if (flags.ip && row.value.native.bind === undefined) {\n continue;\n }\n\n let id: string = row.value._id;\n let host = row.value.common.host;\n\n if (id.length < 40) {\n id = id.padEnd(40);\n }\n if (name && name.length < 22) {\n name = name.padEnd(22);\n }\n\n if (host && host.length < 40) {\n host = host.padEnd(40);\n }\n\n let text = `${id}: ${name || ''}: ${host} - ${\n row.value.common.enabled ? ' enabled' : 'disabled'\n }`;\n\n if (this.config.system && this.config.system.compact && row.value.common.compact) {\n text += `, compact ${\n row.value.common.compact && row.value.common.runAsCompactMode\n ? `enabled (group ${\n row.value.common.compactGroup !== undefined\n ? row.value.common.compactGroup\n : 1\n })`\n : 'disabled'\n }`;\n }\n\n if (row.value.native && row.value.native.port) {\n text += `, port: ${row.value.native.port}`;\n }\n if (row.value.native && row.value.native.bind) {\n text += `, bind: ${row.value.native.bind}`;\n }\n if (row.value.native && row.value.native.secure) {\n text += ' (SSL)';\n }\n if (row.value.native && row.value.native.defaultUser) {\n text += `, run as: ${row.value.native.defaultUser}`;\n }\n lines.push({ id: row.value._id, value: text });\n }\n }\n this._readOnlineState(lines, flags, result => {\n console.log(result.join('\\n'));\n console.log('\\n+ instance is alive');\n this.processExit();\n });\n },\n );\n break;\n\n case 'users':\n case 'u':\n this.objects.getObjectList(\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err, objs) => {\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, groups) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.user.${filter}`))\n : null;\n console.log(\n ' ID | Name | Active | Groups',\n );\n console.log(\n '---------------------------------------+-------------+----------+--------------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'user') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}| ${name.padEnd(11)} | ${\n obj.value.common.enabled ? ' enabled' : 'disabled'\n } |`;\n if (groups) {\n const gs = [];\n // find all groups\n for (const group of groups.rows) {\n if (\n group.value.common.members &&\n group.value.common.members.indexOf(obj.value._id) !== -1\n ) {\n gs.push(group.value._id.substring(13));\n }\n }\n console.log(`${text} ${gs.join(', ')}`);\n }\n }\n }\n this.processExit();\n },\n );\n },\n );\n break;\n\n case 'groups':\n case 'g':\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.group.${filter}`)) : null;\n console.log('');\n console.log(\n ' system.group | object | state | file | user | others | users',\n );\n console.log(\n ' | l r w d | l r w d | l r w c d | w c d | |',\n );\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'group') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id.substring(13);\n if (id === 'administrator') {\n obj.value.common.acl = {\n file: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n object: {\n read: true,\n write: true,\n create: true,\n delete: true,\n list: true,\n },\n state: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n users: {\n write: true,\n create: true,\n delete: true,\n list: true,\n read: true,\n },\n other: {\n execute: true,\n http: true,\n sendto: true,\n },\n };\n }\n\n let text = id.padEnd(19);\n text += ' | ';\n if (obj.value.common.acl?.object) {\n text += `${obj.value.common.acl.object.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.state) {\n text += ' ';\n text += `${obj.value.common.acl.state.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.file) {\n text += ' ';\n text += `${obj.value.common.acl.file.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.users) {\n text += ' ';\n text += `${obj.value.common.acl.users.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.other) {\n text += ' ';\n let others = '';\n for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) {\n others += `${r + (otherPerm ? '+' : '-')} `;\n }\n\n text += `${others.padEnd(22)}|`;\n } else {\n text += `${new Array(25).join(' ')}|`;\n }\n\n if (obj.value.common.members) {\n for (let m = 0; m < obj.value.common.members.length; m++) {\n obj.value.common.members[m] = obj.value.common.members[m].substring(\n 12,\n ) as ioBroker.ObjectIDs.User;\n }\n text += ` ${obj.value.common.members.join(', ')}`;\n }\n console.log(text);\n }\n }\n\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete');\n this.processExit();\n },\n );\n break;\n\n case 'h':\n case 'hosts':\n this.objects.getObjectList(\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n this.states.getKeys('system.host.*', (err, keys) => {\n if (!keys) {\n this.processExit();\n return;\n }\n this.states.getStates(keys, (err, states) => {\n if (!states) {\n this.processExit();\n return;\n }\n\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.host.${filter}`))\n : null;\n\n for (const obj of objs.rows) {\n if (obj.value.type !== 'host') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(12);\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const hostname = obj.value.common.hostname;\n\n const version = obj.value.common.installedVersion;\n let alive = '';\n let uptime = '';\n for (let k = 0; k < keys.length; k++) {\n if (keys[k] === `${obj.value._id}.alive`) {\n alive = 'alive';\n }\n if (keys[k] === `${obj.value._id}.uptime`) {\n uptime = states[k]!.val?.toString() || '-';\n }\n }\n alive = alive || 'dead';\n\n if (!uptime) {\n uptime = '-';\n }\n const text = `${id.padEnd(\n 19,\n )} ${name} (version: ${version}, hostname: ${hostname.padEnd(\n 14,\n )}, ${alive}, uptime: ${uptime})`;\n // todo\n console.log(text);\n }\n }\n\n this.processExit();\n });\n });\n },\n );\n break;\n\n case 'enums':\n case 'e':\n this.objects.getObjectList({ startkey: 'enum.', endkey: 'enum.\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`enum.${filter}`)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'enum') {\n continue;\n }\n\n let name = obj.value.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n console.log(\n '\\n=====================================================================================',\n );\n const id = obj.value._id.substring(5);\n\n console.log(`${id.padEnd(19)}(${name})`);\n console.log(\n '-------------------------------------------------------------------------------------',\n );\n\n if (obj.value.common.members) {\n console.log(obj.value.common.members.join(', '));\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'files':\n case 'f':\n this.objects.getObjectList({ startkey: '', endkey: '\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n\n const adapter = filter || null;\n const names = filter ? filter.split('/') : null;\n if (names && !names[0]) {\n names.splice(0, 1);\n }\n\n const adapters = objs.rows\n .filter(\n row =>\n row.value.type === 'meta' &&\n !(\n names &&\n adapter &&\n row.value._id !== names[0] &&\n !row.value._id.startsWith(`${names[0]}.`)\n ),\n )\n .map(row => row.value._id);\n\n if (names) {\n names.shift();\n }\n\n this.listAdaptersFiles(adapters, names ? names.join('/') : null, () => this.processExit());\n });\n break;\n }\n });\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AASA,kCAA2B;AAC3B,sBAAe;AACf,IAAAA,+BAAsB;AA6DhB,MAAO,KAAI;EACL;EACA;EACA;EACS;EAEjB,YAAY,SAAuB;AAC/B,cAAU,WAAW,CAAA;AAErB,QAAI,CAAC,QAAQ,QAAQ;AACjB,YAAM,IAAI,MAAM,+CAA+C;IACnE;AACA,QAAI,CAAC,QAAQ,SAAS;AAClB,YAAM,IAAI,MAAM,uCAAuC;IAC3D;AACA,QAAI,CAAC,QAAQ,aAAa;AACtB,YAAM,IAAI,MAAM,2CAA2C;IAC/D;AAEA,SAAK,SAAS,gBAAAC,QAAG,aAAa,mCAAM,kBAAiB,CAAE;AAEvD,SAAK,UAAU,QAAQ;AACvB,SAAK,SAAS,QAAQ;AACtB,SAAK,cAAc,QAAQ;EAC/B;EAEQ,OAAO,UAAU,MAAY;AACjC,QAAI,SAAS;AAEb,cAAU,OAAO,OAAQ,MAAM;AAC/B,cAAU,OAAO,MAAQ,MAAM;AAC/B,cAAU,OAAO,MAAQ,MAAM;AAE/B,cAAU,OAAO,KAAQ,MAAM;AAC/B,cAAU,OAAO,KAAQ,MAAM;AAC/B,cAAU,OAAO,KAAQ,MAAM;AAE/B,cAAU,OAAO,IAAQ,MAAM;AAC/B,cAAU,OAAO,IAAQ,MAAM;AAC/B,cAAU,OAAO,IAAQ,MAAM;AAC/B,WAAO;EACX;EAEA,eAAe,SAAgB;AAC3B,QAAI,SAAS;AACT,cAAQ,IAAI;KAAQ,OAAO,KAAK;IACpC;AAEA,YAAQ,IAAI,wEAAwE;AACpF,YAAQ,IAAI,4EAA4E;EAC5F;EAEA,SAAS,SAAiB,MAAc,MAA4B;AAEhE,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,KAAK,YAAY;AACjB,YAAM,KAAK,IAAI,KAAK,KAAK,UAAU;AACnC,aAAO,GAAG,YAAW;AACrB,aAAO,KAAK,QAAQ,KAAK,GAAG;AAC5B,aAAO,GAAG,KAAK,UAAU,GAAG,EAAE,CAAC;IACnC;AACA,YAAQ,KAAK,OAAO,EAAE;AAEtB,QAAI,KAAK,KAAK;AACV,eAAS,KAAK,QAAQ,MAAM,OAAO,KAAK,UAAU,KAAK,IAAI,eAAe,CAAC;AAC3E,UAAI,QAAQ,KAAK,IAAI;AAErB,cAAQ,MAAM,UAAU,EAAE;AAE1B,cAAQ,IAAI,MAAM,SAAS,EAAE,CAAC;AAC9B,UAAI,QAAQ,KAAK,IAAI;AAErB,cAAQ,MAAM,UAAU,EAAE;AAC1B,cAAQ,IAAI,MAAM,SAAS,EAAE,CAAC;IAClC,OAAO;AACH,cAAQ,GAAG,KAAK,QAAQ,MAAM,GAAG,YAAY,IAAI,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC;IACxE;AACA,UAAM,OAAO,KAAK,SAAS,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK,SAAQ,IAAK;AAE1E,YAAQ,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI;AACjG,QAAI,KAAK,OAAO;AACZ,cAAQ;AACR,cAAQ,IAAI,IAAI;IACpB,OAAO;AACH,cAAQ,IAAI,IAAI;IACpB;EACJ;EAEA,mBAAgB;AACZ,YAAQ,IAAI,uDAAuD;AACnE,YAAQ,IAAI,kEAAkE;EAClF;EAEA,WAAW,KAAuB;AAE9B,QAAI,OAAO;AACX,QAAI,IAAI,KAAK;AACT,cAAQ,GAAG,KAAK,UAAU,IAAI,IAAI,UAAU,CAAC,CAAC,IAC1C,IAAI,SAAS,UAAU,KAAK,UAAU,IAAI,IAAI,SAAS,CAAC,IAAI,WAChE;AACA,UAAI,QAAQ,IAAI,IAAI;AAEpB,cAAQ,MAAM,UAAU,EAAE;AAE1B,cAAQ,IAAI,MAAM,SAAS,EAAE,CAAC;AAC9B,UAAI,QAAQ,IAAI,IAAI;AAEpB,cAAQ,MAAM,UAAU,EAAE;AAC1B,cAAQ,IAAI,MAAM,SAAS,EAAE,CAAC;IAClC,OAAO;AACH,cAAQ,YAAY,IAAI,SAAS,UAAU,eAAe,YAAY,GAAG,IAAI,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC;IACpG;AACA,YAAQ,IAAI,IAAI,GAAG;AACnB,YAAQ,IAAI,IAAI;EACpB;EAEA,cACI,SACA,MACA,UACA,UAAqC;AAErC,QAAI,OAAO,SAAS,YAAY;AAC5B,iBAAW;AACX,aAAO;AACP,iBAAW,CAAA;IACf;AACA,QAAI,OAAO,aAAa,YAAY;AAChC,iBAAW;AACX,iBAAW,CAAA;IACf;AACA,UAAM,YAAY,YAAY,CAAA;AAC9B,UAAM,QAAQ,QAAQ;AAEtB,SAAK,QAAQ,QAAQ,SAAS,OAAO,MAAM,CAAC,KAAK,UAAS;AACtD,UAAI,OAAO,IAAI,SAAS,WAAW;AAC/B,cAAM,MAAM,MAAM,YAAY,GAAG;AACjC,YAAI,QAAQ,IAAI;AACZ,gBAAM,MAAM,MAAM,UAAU,GAAG,GAAG;AAClC,gBAAM,QAAQ,MAAM,UAAU,MAAM,CAAC;AACrC,eAAK,QAAQ,QAAQ,SAAS,KAAK,MAAM,CAACC,MAAKC,WAAS;AACpD,gBAAID,MAAK;AACL,sBAAQ,IAAI,gBAAgB,IAAI,MAAMA,KAAI,OAAO,EAAE;AACnD,qBAAO,aAAa,cAAc,SAAS,SAAS;YACxD,OAAO;AAEH,yBAAW,QAAQC,QAAO;AACtB,oBAAI,KAAK,SAAS,OAAO,KAAK,SAAS,MAAM;AACzC;gBACJ;AACA,oBAAI,KAAK,SAAS,OAAO;AACrB,4BAAU,KAAK,EAAE,SAAS,MAAM,OAAO,KAAI,CAAE;AAC7C;gBACJ;cACJ;AACA,qBAAO,aAAa,cAAc,SAAS,SAAS;YACxD;UACJ,CAAC;QACL,WAAW,OAAO,aAAa,YAAY;AACvC,mBAAS,SAAS;QACtB;MACJ,OAAO;AACH,YAAI,QAAQ;AAEZ,mBAAW,QAAQ,OAAO;AACtB,cAAI,KAAK,SAAS,OAAO,KAAK,SAAS,MAAM;AACzC;UACJ;AACA,oBAAU,KAAK,EAAE,SAAkB,MAAM,OAAO,KAAI,CAAE;AACtD,cAAI,KAAK,OAAO;AACZ;AACA,iBAAK,cAAc,SAAS,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,MAAK;AAC/D,kBAAI,CAAC,EAAE,SAAS,UAAU;AACtB,uBAAO,aAAa,cAAc,SAAS,SAAS;cACxD;YACJ,CAAC;UACL;QACJ;AACA,YAAI,CAAC,SAAS,OAAO,aAAa,YAAY;AAC1C,mBAAS,SAAS;QACtB;MACJ;IACJ,CAAC;EACL;EAEA,UAAU,GAAS,GAAO;AACtB,QAAI,KAAK,EAAE,OAAO,EAAE,KAAK;AACzB,QAAI,GAAG,CAAC,MAAM,KAAK;AACf,WAAK,IAAI,EAAE;IACf;AACA,QAAI,KAAK,EAAE,OAAO,EAAE,KAAK;AACzB,QAAI,GAAG,CAAC,MAAM,KAAK;AACf,WAAK,IAAI,EAAE;IACf;AACA,WAAO,GAAG,cAAc,EAAE;EAC9B;EAEA,kBAAkB,UAAoB,QAAwB,UAAqB;AAC/E,QAAI,OAAO,WAAW,YAAY;AAC9B,iBAAW;AACX,eAAS;IACb;AACA,QAAI,QAAQ;AACR,eAAS,OAAO,QAAQ,OAAO,EAAE;AACjC,UAAI,OAAO,OAAO,SAAS,CAAC,MAAM,KAAK;AACnC,iBAAS,OAAO,UAAU,GAAG,OAAO,SAAS,CAAC;MAClD;IACJ;AAEA,QAAI,YAAY,SAAS,QAAQ;AAC7B,YAAM,UAAU,SAAS,MAAK;AAC9B,WAAK,cAAc,SAAS,QAAQ,WAAQ;AACxC,cAAM,KAAK,KAAK,SAAS;AACzB,aAAK,eAAe,OAAO;AAE3B,cACK,OAAO,OAAK,CAAC,UAAU,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,GAAG,WAAW,MAAM,CAAC,EACpE,QAAQ,OAAK,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;AAE1D,aAAK,kBAAkB,UAAU,QAAQ,QAAQ;MACrD,CAAC;IACL,OAAO;AACH,aAAO,mCAAM,cAAc,QAAQ;IACvC;EACJ;EAEQ,iBACJ,OACA,OACA,IACA,SAAe;AAEf,UAAM,SAAS,WAAW,CAAA;AAC1B,QAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AACzB,SAAG,MAAM;IACb,OAAO;AACH,YAAM,OAAO,MAAM,MAAK;AACxB,YAAM,KAAK,GAAG,KAAK,EAAE;AACrB,WAAK,OAAO,SAAS,IAAI,CAAC,KAAK,UAAS;AACpC,YAAI,SAAS,MAAM,KAAK;AACpB,iBAAO,KAAK,KAAK,KAAK,KAAK,EAAE;QACjC,WAAW,CAAC,MAAM,OAAO;AACrB,iBAAO,KAAK,KAAK,KAAK,KAAK,EAAE;QACjC;AACA,qBAAa,MAAM,KAAK,iBAAiB,OAAO,OAAO,IAAI,MAAM,CAAC;MACtE,CAAC;IACL;EACJ;EAEA,KAAK,MAAgB,QAAgB,OAAiB;AAClD,SAAK,QAAQ,UAAU,iBAAiB,CAAC,KAAK,eAAc;AACxD,YAAM,OAA2B,YAAY,QAAQ,YAAY;AACjE,cAAQ,MAAM;QACV,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cAAc,CAAA,GAAI,CAACD,MAAK,SAAQ;AACzC,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,kBAAM,MAAM,SAAS,IAAI,OAAO,mCAAM,cAAc,MAAM,CAAC,IAAI;AAC/D,uBAAW,OAAO,KAAK,MAAM;AACzB,kBAAI,OAAO,IAAI,OAAO,QAAQ;AAC9B,kBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,uBAAO,KAAK,IAAI,KAAK,KAAK;cAC9B;AAEA,kBAAI,CAAC,OAAO,IAAI,KAAK,IAAI,MAAM,GAAG,KAAM,QAAQ,IAAI,KAAK,IAAI,GAAI;AAC7D,oBAAI,IAAI,MAAM,MAAM;AAChB,wBAAM,KAAK,IAAI,MAAM;AACrB,wBAAME,QAAO,IAAI,MAAM;AAEvB,0BAAQ,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,KAAKA,MAAK,SAAS,EAAE,CAAC,MAAM,QAAQ,EAAE,EAAE;gBAC1E;cACJ;YACJ;AACA,iBAAK,YAAW;UACpB,CAAC;AACD;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,OAAO,QAAQ,UAAU,KAAK,CAACF,MAAK,SAAQ;AAC7C,gBAAIA,MAAK;AACL,sBAAQ,MAAMA,IAAG;AACjB,qBAAO,KAAK,KAAK,YAAY,uCAAW,iBAAiB;YAC7D;AAEA,gBAAI,CAAC,MAAM;AACP,qBAAO,KAAK,KAAK,YAAW;YAChC;AAEA,iBAAK,OAAO,UAAU,MAAM,CAACA,MAAK,WAAU;AACxC,kBAAIA,QAAO,CAAC,QAAQ;AAChB,wBAAQ,MAAMA,IAAG;AACjB,uBAAO,KAAK,KAAK,YAAY,uCAAW,iBAAiB;cAC7D;AACA,uBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,sBAAM,QAAQ,OAAO,CAAC;AACtB,oBAAI,CAAC,OAAO;AACR;gBACJ;AAEA,sBAAM,KAAK,KAAK,CAAC;AACjB,sBAAM,OAAO,MAAM,QAAQ;AAC3B,sBAAME,QAAO,OAAO,MAAM;AAE1B,wBAAQ,IACJ,GAAG,GAAG,OAAO,EAAE,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC,MAAMA,MAAK,OAAO,CAAC,CAAC,KAC1D,MAAM,MAAM,YAAY,SAC5B,IAAI,KAAK,UAAU,MAAM,GAAG,CAAC,EAAE;cAEvC;AACA,mBAAK,YAAW;YACpB,CAAC;UACL,CAAC;AACD;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cACT,EAAE,UAAU,mBAAmB,QAAQ,wBAAuB,GAC9D,CAACF,MAAK,SAAQ;AACV,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,kBAAM,MAAM,SAAS,IAAI,OAAO,mCAAM,cAAc,kBAAkB,MAAM,EAAE,CAAC,IAAI;AACnF,kBAAM,cAAkC,CAAA;AACxC,uBAAW,OAAO,KAAK,MAAM;AACzB,kBAAI,IAAI,MAAM,SAAS,WAAW;AAC9B;cACJ;AAEA,kBACI,CAAC,OACD,IAAI,KAAK,IAAI,MAAM,GAAG,KACrB,IAAI,MAAM,UAAU,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,GACrD;AACE,sBAAM,KAAK,IAAI,MAAM;AACrB,oBAAI,OAAO,IAAI,MAAM,OAAO;AAC5B,oBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,yBAAO,KAAK,IAAI,KAAK,KAAK;gBAC9B;AAEA,4BAAY,KAAK;kBACb;kBACA;kBACA,SAAS,IAAI,MAAM,OAAO;kBAC1B,kBAAkB,IAAI,MAAM,OAAO,oBAAoB;iBAC1D;cACL;YACJ;AAEA,oBAAQ,MAAM,WAAW;AACzB,iBAAK,YAAW;UACpB,CAAC;AAEL;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cACT,EAAE,UAAU,mBAAmB,QAAQ,wBAAuB,GAC9D,CAACA,MAAK,SAAQ;AACV,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,kBAAM,MAAM,SAAS,IAAI,OAAO,mCAAM,cAAc,kBAAkB,MAAM,EAAE,CAAC,IAAI;AACnF,iBAAK,KAAK,KAAK,CAAC,GAAG,MAAK;AACpB,kBAAI,EAAE,KAAK,EAAE,IAAI;AACb,uBAAO;cACX,WAAW,EAAE,KAAK,EAAE,IAAI;AACpB,uBAAO;cACX;AACA,qBAAO;YACX,CAAC;AACD,kBAAM,QAAQ,CAAA;AACd,uBAAW,OAAO,KAAK,MAAM;AACzB,kBAAI,IAAI,MAAM,SAAS,YAAY;AAC/B;cACJ;AAEA,kBAAI,OAAO,IAAI,MAAM,QAAQ;AAE7B,kBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,uBAAO,KAAK,IAAI,KAAK,KAAK;cAC9B;AAEA,kBAAI,CAAC,OAAO,IAAI,KAAK,IAAI,MAAM,GAAG,KAAM,QAAQ,IAAI,KAAK,IAAI,GAAI;AAC7D,oBAAI,MAAM,WAAW,CAAC,IAAI,MAAM,OAAO,SAAS;AAC5C;gBACJ;AACA,oBAAI,MAAM,YAAY,IAAI,MAAM,OAAO,SAAS;AAC5C;gBACJ;AACA,oBAAI,MAAM,QAAQ,IAAI,MAAM,OAAO,SAAS,QAAW;AACnD;gBACJ;AACA,oBAAI,MAAM,OAAO,IAAI,MAAM,OAAO,WAAW,QAAW;AACpD;gBACJ;AACA,oBAAI,MAAM,MAAM,IAAI,MAAM,OAAO,SAAS,QAAW;AACjD;gBACJ;AAEA,oBAAI,KAAa,IAAI,MAAM;AAC3B,oBAAI,OAAO,IAAI,MAAM,OAAO;AAE5B,oBAAI,GAAG,SAAS,IAAI;AAChB,uBAAK,GAAG,OAAO,EAAE;gBACrB;AACA,oBAAI,QAAQ,KAAK,SAAS,IAAI;AAC1B,yBAAO,KAAK,OAAO,EAAE;gBACzB;AAEA,oBAAI,QAAQ,KAAK,SAAS,IAAI;AAC1B,yBAAO,KAAK,OAAO,EAAE;gBACzB;AAEA,oBAAI,OAAO,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,MACpC,IAAI,MAAM,OAAO,UAAU,aAAa,UAC5C;AAEA,oBAAI,KAAK,OAAO,UAAU,KAAK,OAAO,OAAO,WAAW,IAAI,MAAM,OAAO,SAAS;AAC9E,0BAAQ,aACJ,IAAI,MAAM,OAAO,WAAW,IAAI,MAAM,OAAO,mBACvC,kBACI,IAAI,MAAM,OAAO,iBAAiB,SAC5B,IAAI,MAAM,OAAO,eACjB,CACV,MACA,UACV;gBACJ;AAEA,oBAAI,IAAI,MAAM,UAAU,IAAI,MAAM,OAAO,MAAM;AAC3C,0BAAQ,WAAW,IAAI,MAAM,OAAO,IAAI;gBAC5C;AACA,oBAAI,IAAI,MAAM,UAAU,IAAI,MAAM,OAAO,MAAM;AAC3C,0BAAQ,WAAW,IAAI,MAAM,OAAO,IAAI;gBAC5C;AACA,oBAAI,IAAI,MAAM,UAAU,IAAI,MAAM,OAAO,QAAQ;AAC7C,0BAAQ;gBACZ;AACA,oBAAI,IAAI,MAAM,UAAU,IAAI,MAAM,OAAO,aAAa;AAClD,0BAAQ,aAAa,IAAI,MAAM,OAAO,WAAW;gBACrD;AACA,sBAAM,KAAK,EAAE,IAAI,IAAI,MAAM,KAAK,OAAO,KAAI,CAAE;cACjD;YACJ;AACA,iBAAK,iBAAiB,OAAO,OAAO,YAAS;AACzC,sBAAQ,IAAI,OAAO,KAAK,IAAI,CAAC;AAC7B,sBAAQ,IAAI,uBAAuB;AACnC,mBAAK,YAAW;YACpB,CAAC;UACL,CAAC;AAEL;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cACT,EAAE,UAAU,gBAAgB,QAAQ,qBAAoB,GACxD,CAACA,MAAK,SAAQ;AACV,iBAAK,QAAQ,cACT,EAAE,UAAU,iBAAiB,QAAQ,sBAAqB,GAC1D,CAACA,MAAK,WAAU;AACZ,kBAAI,CAAC,MAAM;AACP,qBAAK,YAAW;AAChB;cACJ;AACA,oBAAM,MAAM,SACN,IAAI,OAAO,mCAAM,cAAc,eAAe,MAAM,EAAE,CAAC,IACvD;AACN,sBAAQ,IACJ,0EAA0E;AAE9E,sBAAQ,IACJ,iFAAiF;AAErF,yBAAW,OAAO,KAAK,MAAM;AACzB,oBAAI,IAAI,MAAM,SAAS,QAAQ;AAC3B;gBACJ;AAEA,oBACI,CAAC,OACD,IAAI,KAAK,IAAI,MAAM,GAAG,KACrB,IAAI,MAAM,UACP,IAAI,KACA,mCAAM,SAAS,IAAI,MAAM,OAAO,IAAI,IAC9B,IAAI,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI,MAAM,OAAO,KAAK,KACrD,IAAI,MAAM,OAAO,IAAI,GAErC;AACE,wBAAM,KAAK,IAAI,MAAM;AACrB,sBAAI,OAAO,IAAI,MAAM,OAAO;AAC5B,sBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,2BAAO,KAAK,IAAI,KAAK,KAAK;kBAC9B;AAEA,wBAAM,OAAO,GAAG,GAAG,OAAO,EAAE,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC,MAC7C,IAAI,MAAM,OAAO,UAAU,aAAa,UAC5C;AACA,sBAAI,QAAQ;AACR,0BAAM,KAAK,CAAA;AAEX,+BAAW,SAAS,OAAO,MAAM;AAC7B,0BACI,MAAM,MAAM,OAAO,WACnB,MAAM,MAAM,OAAO,QAAQ,QAAQ,IAAI,MAAM,GAAG,MAAM,IACxD;AACE,2BAAG,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;sBACzC;oBACJ;AACA,4BAAQ,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE;kBAC1C;gBACJ;cACJ;AACA,mBAAK,YAAW;YACpB,CAAC;UAET,CAAC;AAEL;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cACT,EAAE,UAAU,iBAAiB,QAAQ,sBAAqB,GAC1D,CAACA,MAAK,SAAQ;AACV,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,kBAAM,MAAM,SAAS,IAAI,OAAO,mCAAM,cAAc,gBAAgB,MAAM,EAAE,CAAC,IAAI;AACjF,oBAAQ,IAAI,EAAE;AACd,oBAAQ,IACJ,8FAA8F;AAElG,oBAAQ,IACJ,wFAAwF;AAE5F,oBAAQ,IACJ,iGAAiG;AAErG,uBAAW,OAAO,KAAK,MAAM;AACzB,kBAAI,IAAI,MAAM,SAAS,SAAS;AAC5B;cACJ;AACA,kBACI,CAAC,OACD,IAAI,KAAK,IAAI,MAAM,GAAG,KACrB,IAAI,MAAM,UACP,IAAI,KACA,mCAAM,SAAS,IAAI,MAAM,OAAO,IAAI,IAC9B,IAAI,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI,MAAM,OAAO,KAAK,KACrD,IAAI,MAAM,OAAO,IAAI,GAErC;AACE,sBAAM,KAAK,IAAI,MAAM,IAAI,UAAU,EAAE;AACrC,oBAAI,OAAO,iBAAiB;AACxB,sBAAI,MAAM,OAAO,MAAM;oBACnB,MAAM;sBACF,MAAM;sBACN,OAAO;sBACP,QAAQ;sBACR,QAAQ;sBACR,MAAM;;oBAEV,QAAQ;sBACJ,MAAM;sBACN,OAAO;sBACP,QAAQ;sBACR,QAAQ;sBACR,MAAM;;oBAEV,OAAO;sBACH,MAAM;sBACN,OAAO;sBACP,QAAQ;sBACR,QAAQ;sBACR,MAAM;;oBAEV,OAAO;sBACH,OAAO;sBACP,QAAQ;sBACR,QAAQ;sBACR,MAAM;sBACN,MAAM;;oBAEV,OAAO;sBACH,SAAS;sBACT,MAAM;sBACN,QAAQ;;;gBAGpB;AAEA,oBAAI,OAAO,GAAG,OAAO,EAAE;AACvB,wBAAQ;AACR,oBAAI,IAAI,MAAM,OAAO,KAAK,QAAQ;AAC9B,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,OAAO,OAAO,MAAM,GAAG;AACvD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,OAAO,OAAO,MAAM,GAAG;AACvD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,OAAO,QAAQ,MAAM,GAAG;AACxD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,OAAO,SAAS,MAAM,GAAG;AACzD,0BAAQ;gBACZ,OAAO;AACH,0BAAQ;gBACZ;AACA,oBAAI,IAAI,MAAM,OAAO,KAAK,OAAO;AAC7B,0BAAQ;AACR,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,MAAM,GAAG;AACtD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,MAAM,GAAG;AACtD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,QAAQ,MAAM,GAAG;AACvD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,SAAS,MAAM,GAAG;AACxD,0BAAQ;gBACZ,OAAO;AACH,0BAAQ;gBACZ;AACA,oBAAI,IAAI,MAAM,OAAO,KAAK,MAAM;AAC5B,0BAAQ;AACR,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM,GAAG;AACrD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM,GAAG;AACrD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,KAAK,QAAQ,MAAM,GAAG;AACtD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,KAAK,SAAS,MAAM,GAAG;AACvD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,KAAK,SAAS,MAAM,GAAG;AACvD,0BAAQ;gBACZ,OAAO;AACH,0BAAQ;gBACZ;AACA,oBAAI,IAAI,MAAM,OAAO,KAAK,OAAO;AAC7B,0BAAQ;AACR,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,QAAQ,MAAM,GAAG;AACvD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,SAAS,MAAM,GAAG;AACxD,0BAAQ,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,SAAS,MAAM,GAAG;AACxD,0BAAQ;gBACZ,OAAO;AACH,0BAAQ;gBACZ;AACA,oBAAI,IAAI,MAAM,OAAO,KAAK,OAAO;AAC7B,0BAAQ;AACR,sBAAI,SAAS;AACb,6BAAW,CAAC,GAAG,SAAS,KAAK,OAAO,QAAQ,IAAI,MAAM,OAAO,IAAI,KAAK,GAAG;AACrE,8BAAU,GAAG,KAAK,YAAY,MAAM,IAAI;kBAC5C;AAEA,0BAAQ,GAAG,OAAO,OAAO,EAAE,CAAC;gBAChC,OAAO;AACH,0BAAQ,GAAG,IAAI,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC;gBACtC;AAEA,oBAAI,IAAI,MAAM,OAAO,SAAS;AAC1B,2BAAS,IAAI,GAAG,IAAI,IAAI,MAAM,OAAO,QAAQ,QAAQ,KAAK;AACtD,wBAAI,MAAM,OAAO,QAAQ,CAAC,IAAI,IAAI,MAAM,OAAO,QAAQ,CAAC,EAAE,UACtD,EAAE;kBAEV;AACA,0BAAQ,IAAI,IAAI,MAAM,OAAO,QAAQ,KAAK,IAAI,CAAC;gBACnD;AACA,wBAAQ,IAAI,IAAI;cACpB;YACJ;AAEA,oBAAQ,IACJ,iGAAiG;AAErG,oBAAQ,IAAI,qDAAqD;AACjE,iBAAK,YAAW;UACpB,CAAC;AAEL;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cACT,EAAE,UAAU,gBAAgB,QAAQ,qBAAoB,GACxD,CAACA,MAAK,SAAQ;AACV,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,iBAAK,OAAO,QAAQ,iBAAiB,CAACA,MAAK,SAAQ;AAC/C,kBAAI,CAAC,MAAM;AACP,qBAAK,YAAW;AAChB;cACJ;AACA,mBAAK,OAAO,UAAU,MAAM,CAACA,MAAK,WAAU;AACxC,oBAAI,CAAC,QAAQ;AACT,uBAAK,YAAW;AAChB;gBACJ;AAEA,sBAAM,MAAM,SACN,IAAI,OAAO,mCAAM,cAAc,eAAe,MAAM,EAAE,CAAC,IACvD;AAEN,2BAAW,OAAO,KAAK,MAAM;AACzB,sBAAI,IAAI,MAAM,SAAS,QAAQ;AAC3B;kBACJ;AACA,sBACI,CAAC,OACD,IAAI,KAAK,IAAI,MAAM,GAAG,KACrB,IAAI,MAAM,UAAU,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,GACrD;AACE,0BAAM,KAAK,IAAI,MAAM,IAAI,UAAU,EAAE;AACrC,wBAAI,OAAO,IAAI,MAAM,OAAO;AAC5B,wBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,6BAAO,KAAK,IAAI,KAAK,KAAK;oBAC9B;AAEA,0BAAM,WAAW,IAAI,MAAM,OAAO;AAElC,0BAAM,UAAU,IAAI,MAAM,OAAO;AACjC,wBAAI,QAAQ;AACZ,wBAAI,SAAS;AACb,6BAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,0BAAI,KAAK,CAAC,MAAM,GAAG,IAAI,MAAM,GAAG,UAAU;AACtC,gCAAQ;sBACZ;AACA,0BAAI,KAAK,CAAC,MAAM,GAAG,IAAI,MAAM,GAAG,WAAW;AACvC,iCAAS,OAAO,CAAC,EAAG,KAAK,SAAQ,KAAM;sBAC3C;oBACJ;AACA,4BAAQ,SAAS;AAEjB,wBAAI,CAAC,QAAQ;AACT,+BAAS;oBACb;AACA,0BAAM,OAAO,GAAG,GAAG,OACf,EAAE,CACL,IAAI,IAAI,cAAc,OAAO,eAAe,SAAS,OAClD,EAAE,CACL,KAAK,KAAK,aAAa,MAAM;AAE9B,4BAAQ,IAAI,IAAI;kBACpB;gBACJ;AAEA,qBAAK,YAAW;cACpB,CAAC;YACL,CAAC;UACL,CAAC;AAEL;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cAAc,EAAE,UAAU,SAAS,QAAQ,cAAa,GAAI,CAACA,MAAK,SAAQ;AACnF,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AACA,kBAAM,MAAM,SAAS,IAAI,OAAO,mCAAM,cAAc,QAAQ,MAAM,EAAE,CAAC,IAAI;AACzE,uBAAW,OAAO,KAAK,MAAM;AACzB,kBAAI,IAAI,MAAM,SAAS,QAAQ;AAC3B;cACJ;AAEA,kBAAI,OAAO,IAAI,MAAM,QAAQ;AAC7B,kBAAI,mCAAM,SAAS,IAAI,GAAG;AACtB,uBAAO,KAAK,IAAI,KAAK,KAAK;cAC9B;AAEA,kBAAI,CAAC,OAAO,IAAI,KAAK,IAAI,MAAM,GAAG,KAAM,QAAQ,IAAI,KAAK,IAAI,GAAI;AAC7D,wBAAQ,IACJ,yFAAyF;AAE7F,sBAAM,KAAK,IAAI,MAAM,IAAI,UAAU,CAAC;AAEpC,wBAAQ,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC,IAAI,IAAI,GAAG;AACvC,wBAAQ,IACJ,uFAAuF;AAG3F,oBAAI,IAAI,MAAM,OAAO,SAAS;AAC1B,0BAAQ,IAAI,IAAI,MAAM,OAAO,QAAQ,KAAK,IAAI,CAAC;gBACnD;cACJ;YACJ;AACA,iBAAK,YAAW;UACpB,CAAC;AACD;QAEJ,KAAK;QACL,KAAK;AACD,eAAK,QAAQ,cAAc,EAAE,UAAU,IAAI,QAAQ,SAAQ,GAAI,CAACA,MAAK,SAAQ;AACzE,gBAAI,CAAC,MAAM;AACP,mBAAK,YAAW;AAChB;YACJ;AAEA,kBAAM,UAAU,UAAU;AAC1B,kBAAM,QAAQ,SAAS,OAAO,MAAM,GAAG,IAAI;AAC3C,gBAAI,SAAS,CAAC,MAAM,CAAC,GAAG;AACpB,oBAAM,OAAO,GAAG,CAAC;YACrB;AAEA,kBAAM,WAAW,KAAK,KACjB,OACG,SACI,IAAI,MAAM,SAAS,UACnB,EACI,SACA,WACA,IAAI,MAAM,QAAQ,MAAM,CAAC,KACzB,CAAC,IAAI,MAAM,IAAI,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,EAC3C,EAER,IAAI,SAAO,IAAI,MAAM,GAAG;AAE7B,gBAAI,OAAO;AACP,oBAAM,MAAK;YACf;AAEA,iBAAK,kBAAkB,UAAU,QAAQ,MAAM,KAAK,GAAG,IAAI,MAAM,MAAM,KAAK,YAAW,CAAE;UAC7F,CAAC;AACD;MACR;IACJ,CAAC;EACL;;",
|
|
6
|
+
"names": ["import_js_controller_common", "fs", "err", "files", "type"]
|
|
7
7
|
}
|
|
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
8
|
var __export = (target, all) => {
|
|
10
9
|
for (var name in all)
|
|
11
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -38,11 +37,9 @@ var import_node_readline = __toESM(require("node:readline"), 1);
|
|
|
38
37
|
var import_readline_sync = __toESM(require("readline-sync"), 1);
|
|
39
38
|
var import_prompt = __toESM(require("prompt"), 1);
|
|
40
39
|
var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
40
|
+
var import_js_controller_common2 = require("@iobroker/js-controller-common");
|
|
41
41
|
var import_multihostClient = require("./multihostClient.js");
|
|
42
42
|
class Multihost {
|
|
43
|
-
static {
|
|
44
|
-
__name(this, "Multihost");
|
|
45
|
-
}
|
|
46
43
|
configName;
|
|
47
44
|
params;
|
|
48
45
|
objects;
|
|
@@ -106,7 +103,7 @@ class Multihost {
|
|
|
106
103
|
async showMHState(config, changed) {
|
|
107
104
|
if (config.multihostService.enabled) {
|
|
108
105
|
let warningShown = false;
|
|
109
|
-
const hasLocalObjectsServer = await (0,
|
|
106
|
+
const hasLocalObjectsServer = await (0, import_js_controller_common2.isLocalObjectsDbServer)(config.objects.type, config.objects.host, true);
|
|
110
107
|
if (hasLocalObjectsServer) {
|
|
111
108
|
console.log("Changing objects server to accept connections on all IP addresses.");
|
|
112
109
|
config.objects.host = import_js_controller_common.tools.getListenAllAddress();
|
|
@@ -119,7 +116,7 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
119
116
|
warningShown = true;
|
|
120
117
|
console.log(`Please check the binding of the configured ${config.objects.type} server to allow remote connections.`);
|
|
121
118
|
}
|
|
122
|
-
const hasLocalStatesServer = await (0,
|
|
119
|
+
const hasLocalStatesServer = await (0, import_js_controller_common2.isLocalStatesDbServer)(config.states.type, config.states.host, true);
|
|
123
120
|
if (hasLocalStatesServer) {
|
|
124
121
|
console.log("Changing states server to accept connections on all IP addresses.");
|
|
125
122
|
config.states.host = import_js_controller_common.tools.getListenAllAddress();
|
|
@@ -205,7 +202,7 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
205
202
|
} else {
|
|
206
203
|
this.objects.getObject("system.config", (_err2, obj) => {
|
|
207
204
|
config.multihostService.password = import_js_controller_common.tools.encrypt(obj.native.secret, password.password);
|
|
208
|
-
this.showMHState(config, changed)
|
|
205
|
+
this.showMHState(config, changed);
|
|
209
206
|
callback();
|
|
210
207
|
});
|
|
211
208
|
}
|
|
@@ -214,11 +211,11 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
214
211
|
}
|
|
215
212
|
});
|
|
216
213
|
} else {
|
|
217
|
-
this.showMHState(config, changed)
|
|
214
|
+
this.showMHState(config, changed);
|
|
218
215
|
callback();
|
|
219
216
|
}
|
|
220
217
|
} else {
|
|
221
|
-
this.showMHState(config, changed)
|
|
218
|
+
this.showMHState(config, changed);
|
|
222
219
|
callback();
|
|
223
220
|
}
|
|
224
221
|
}
|
|
@@ -228,7 +225,7 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
228
225
|
status() {
|
|
229
226
|
const config = this.getConfig();
|
|
230
227
|
config.multihostService = config.multihostService || { enabled: false, secure: true };
|
|
231
|
-
this.showMHState(config, false)
|
|
228
|
+
this.showMHState(config, false);
|
|
232
229
|
}
|
|
233
230
|
/**
|
|
234
231
|
* Read password from cli
|
|
@@ -252,8 +249,8 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
252
249
|
const config = this.getConfig();
|
|
253
250
|
config.objects = oObjects;
|
|
254
251
|
config.states = oStates;
|
|
255
|
-
const hasLocalObjectsServer = await (0,
|
|
256
|
-
const hasLocalStatesServer = await (0,
|
|
252
|
+
const hasLocalObjectsServer = await (0, import_js_controller_common2.isLocalObjectsDbServer)(config.objects.type, config.objects.host, true);
|
|
253
|
+
const hasLocalStatesServer = await (0, import_js_controller_common2.isLocalStatesDbServer)(config.states.type, config.states.host, true);
|
|
257
254
|
if (hasLocalObjectsServer || hasLocalStatesServer) {
|
|
258
255
|
callback(new Error(`IP Address of the remote host is ${import_js_controller_common.tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`));
|
|
259
256
|
} else if ((!Array.isArray(config.states.host) || config.states.host.length === 1) && (!Array.isArray(config.objects.host) || config.objects.host.length === 1)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupMultihost.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport readline from 'node:readline';\nimport readlineSync from 'readline-sync';\nimport prompt from 'prompt';\n\nimport { isLocalObjectsDbServer, isLocalStatesDbServer, tools } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { MHClient, type BrowseResultEntry } from './multihostClient.js';\n\ninterface MHParams {\n secure?: boolean;\n persist?: boolean;\n debug?: boolean;\n}\n\n/** Options for Multihost CLI */\nexport interface CLIMultihostOptions {\n /** Redis client for objects DB */\n objects: ObjectsRedisClient;\n /** Additional parameters */\n params?: MHParams;\n}\n\n/**\n * Multihost CLI class\n * Handles multihost related commands\n */\nexport class Multihost {\n private readonly configName: string;\n private params: MHParams;\n private objects: ObjectsRedisClient;\n\n /**\n * Constructor\n *\n * @param options options for the Multihost CLI\n */\n constructor(options: CLIMultihostOptions) {\n this.configName = tools.getConfigFileName();\n this.params = options.params || {};\n this.objects = options.objects;\n }\n\n /**\n * Retrieve config (iobroker.json content)\n */\n getConfig(): ioBroker.IoBrokerJson {\n let config;\n // read actual configuration\n try {\n if (fs.existsSync(this.configName)) {\n config = fs.readJsonSync(this.configName);\n } else {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n } catch {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n return config;\n }\n\n /**\n * Show hosts on CLI\n *\n * @param list list of hosts\n */\n showHosts(list: BrowseResultEntry[]): void {\n if (!list || !list.length) {\n console.info(\n 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!',\n );\n } else {\n for (let i = 0; i < list.length; i++) {\n console.log(\n `${i + 1} | ${list[i].hostname!.padStart(20)} | ${list[i].slave ? 'slave' : ' host'} | ${list[\n i\n ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}`,\n );\n }\n }\n }\n\n /**\n * Start MH browsing\n */\n async browse(): Promise<BrowseResultEntry[]> {\n const mhClient = new MHClient();\n try {\n return await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);\n }\n }\n\n /**\n * Show MH state on CLI\n *\n * @param config iob config\n * @param changed if config has changed\n */\n private async showMHState(config: ioBroker.IoBrokerJson, changed: boolean): Promise<void> {\n if (config.multihostService.enabled) {\n let warningShown = false;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host, true);\n\n if (hasLocalObjectsServer) {\n console.log('Changing objects server to accept connections on all IP addresses.');\n config.objects.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.objects.type === 'redis') {\n warningShown = true;\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n warningShown = true;\n console.log(\n `Please check the binding of the configured ${config.objects.type} server to allow remote connections.`,\n );\n }\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalStatesServer) {\n console.log('Changing states server to accept connections on all IP addresses.');\n config.states.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.states.type === 'redis') {\n !warningShown &&\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n !warningShown &&\n console.log(\n `Please check the binding of the configured ${config.states.type} server to allow remote connections.`,\n );\n }\n }\n if (!changed) {\n console.log('No configuration change needed.');\n } else {\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Please restart ioBroker for the changes to take effect: \"iobroker restart\"');\n }\n console.log('\\n');\n console.log(`Multihost discovery server: ${config.multihostService.enabled ? 'enabled' : 'disabled'}`);\n console.log(`Discovery authentication: ${config.multihostService.secure ? 'enabled' : 'disabled'}`);\n console.log(\n `Persistent activation: ${\n config.multihostService.enabled && config.multihostService.persist ? 'enabled' : 'disabled'\n }`,\n );\n console.log(\n `Objects: ${config.objects.type} on ${Array.isArray(config.objects.host) ? config.objects.host.join(', ') : config.objects.host}`,\n );\n console.log(\n `States: ${config.states.type} on ${Array.isArray(config.states.host) ? config.states.host.join(', ') : config.states.host}`,\n );\n }\n\n /**\n * Enables or disables the multihost discovery server in the config json\n *\n * @param isEnable - if the server should be activated or deactivated\n * @param callback - callback function to be executed\n */\n enable(isEnable: boolean, callback: (err?: Error) => void): void {\n let changed = false;\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n\n if (isEnable && !config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = true;\n config.multihostService.password = '';\n console.log(\n 'Multihost discovery server activated on this host. If iobroker is currently not running please start before trying to discover this host.',\n );\n console.log(\n 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.',\n );\n if (!this.params.persist) {\n console.log(\n 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag',\n );\n }\n } else if (!isEnable && config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = false;\n config.multihostService.password = '';\n console.log('Multihost discovery server deactivated on this host.');\n }\n if (this.params.secure === undefined) {\n this.params.secure = true;\n }\n\n this.params.persist = !!this.params.persist;\n\n if (\n isEnable &&\n (config.multihostService.secure !== this.params.secure ||\n (config.multihostService.secure && !config.multihostService.password) ||\n config.multihostService.persist !== this.params.persist)\n ) {\n changed = true;\n config.multihostService.secure = this.params.secure;\n config.multihostService.persist = this.params.persist;\n console.log(`Discovery authentication ${this.params.secure ? 'activated' : 'deactivated'}.`);\n if (config.multihostService.secure) {\n prompt.message = '';\n prompt.delimiter = '';\n const schema = {\n properties: {\n password: {\n description: 'Enter secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n passwordRepeat: {\n description: 'Repeat secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n },\n };\n prompt.start();\n\n prompt.get(schema, (_err, password) => {\n if (password?.password) {\n if (password.password !== password.passwordRepeat) {\n callback(new Error('Secret phrases are not equal!'));\n } else {\n this.objects.getObject('system.config', (_err, obj) => {\n config.multihostService.password = tools.encrypt(\n obj!.native.secret,\n password.password as string,\n );\n this.showMHState(config, changed).catch(e =>\n console.error(`Cannot show multihost state: ${e.message}`),\n );\n callback();\n });\n }\n } else {\n callback(new Error('No secret phrase entered!'));\n }\n });\n } else {\n this.showMHState(config, changed).catch(e =>\n console.error(`Cannot show multihost state: ${e.message}`),\n );\n callback();\n }\n } else {\n this.showMHState(config, changed).catch(e => console.error(`Cannot show multihost state: ${e.message}`));\n callback();\n }\n }\n\n /**\n * Show the MH status\n */\n status(): void {\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n this.showMHState(config, false).catch(e => console.error(`Cannot show multihost state: ${e.message}`));\n }\n\n /**\n * Read password from cli\n */\n readPassword(): string {\n return readlineSync.question('Enter secret phrase for connection: ', { hideEchoBack: true });\n }\n\n /**\n * Connect to given MH server\n *\n * @param mhClient MultiHost Client used for connection\n * @param ip IP address of server\n * @param pass password\n * @param callback callback\n */\n connectHelper(mhClient: MHClient, ip: string, pass: string, callback: (err?: Error) => void): void {\n mhClient.connect(ip, pass, async (err, oObjects, oStates, ipHost) => {\n if (err) {\n callback(new Error(`Cannot connect to \"${ip}\": ${err.message}`));\n } else if (oObjects && oStates) {\n const config = this.getConfig();\n config.objects = oObjects;\n config.states = oStates;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(\n config.objects.type,\n config.objects.host,\n true,\n );\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalObjectsServer || hasLocalStatesServer) {\n callback(\n new Error(\n `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`,\n ),\n );\n } else if (\n (!Array.isArray(config.states.host) || config.states.host.length === 1) &&\n (!Array.isArray(config.objects.host) || config.objects.host.length === 1)\n ) {\n const sHost = Array.isArray(config.states.host) ? config.states.host[0] : config.states.host;\n // If server delivers 0.0.0.0 or ::, set to actual IP of the host\n if (tools.isListenAllAddress(sHost)) {\n config.states.host = ipHost ?? '';\n }\n const oHost = Array.isArray(config.objects.host) ? config.objects.host[0] : config.objects.host;\n // If server delivers 0.0.0.0 or ::, set to actual IP of the host\n if (tools.isListenAllAddress(oHost)) {\n config.objects.host = ipHost ?? '';\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n } else {\n // Find if any of the hosts is \"listen all\" or reachable\n if (Array.isArray(config.states.host)) {\n config.states.host = config.states.host.map((sHost: string) =>\n tools.isListenAllAddress(sHost) ? (ipHost ?? '') : sHost,\n );\n }\n if (Array.isArray(config.objects.host)) {\n config.objects.host = config.objects.host.map((oHost: string) =>\n tools.isListenAllAddress(oHost) ? (ipHost ?? '') : oHost,\n );\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n }\n } else {\n callback(new Error('No configuration received!'));\n }\n });\n }\n\n /**\n * Connect to MH Server\n *\n * @param index index of host to connect to\n * @param pass password\n * @param callback callback\n */\n async connect(\n index: number | null,\n pass: string | null,\n callback: (err?: Error, list?: BrowseResultEntry[]) => void,\n ): Promise<void> {\n if (typeof pass === 'function') {\n callback = pass;\n pass = null;\n }\n if (typeof index === 'function') {\n callback = index;\n index = null;\n }\n\n const mhClient = new MHClient();\n let list: BrowseResultEntry[];\n\n try {\n list = await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n callback(new Error(`Cannot browse: ${e.message}`));\n return;\n }\n\n this.showHosts(list);\n\n if (index !== null && index !== undefined && index > 0) {\n if (list && index < list.length + 1) {\n if (!pass) {\n callback(new Error('No password defined: please use \"multihost connect <NUMBER> <PASSWORD>\"'));\n } else {\n this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);\n }\n } else {\n callback(new Error(`Invalid index: ${index}`));\n }\n } else if (list && list.length) {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question('Please select host [1]: ', answer => {\n if (answer === '' || answer === null || answer === undefined) {\n index = 1;\n }\n index = parseInt(answer, 10) - 1;\n const listEntry = list[index];\n if (!listEntry) {\n rl.close();\n callback(new Error(`Invalid index: ${answer}`));\n } else {\n if (listEntry.auth) {\n const password = this.readPassword();\n if (password) {\n this.connectHelper(mhClient, listEntry.ip!, password, callback);\n } else {\n callback(new Error('No password entered!'));\n }\n } else {\n this.connectHelper(mhClient, listEntry.ip!, '', callback);\n }\n }\n });\n } else {\n callback(undefined, list);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["fs", "path", "prompt", "_err", "readlineSync", "readline"]
|
|
4
|
+
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport readline from 'node:readline';\nimport readlineSync from 'readline-sync';\nimport prompt from 'prompt';\n\nimport { tools } from '@iobroker/js-controller-common';\nimport { isLocalObjectsDbServer, isLocalStatesDbServer } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { MHClient, type BrowseResultEntry } from './multihostClient.js';\n\ninterface MHParams {\n secure?: boolean;\n persist?: boolean;\n debug?: boolean;\n}\n\n/** Options for Multihost CLI */\nexport interface CLIMultihostOptions {\n /** Redis client for objects DB */\n objects: ObjectsRedisClient;\n /** Additional parameters */\n params?: MHParams;\n}\n\n/**\n * Multihost CLI class\n * Handles multihost related commands\n */\nexport class Multihost {\n private readonly configName: string;\n private params: MHParams;\n private objects: ObjectsRedisClient;\n\n /**\n * Constructor\n *\n * @param options options for the Multihost CLI\n */\n constructor(options: CLIMultihostOptions) {\n this.configName = tools.getConfigFileName();\n this.params = options.params || {};\n this.objects = options.objects;\n }\n\n /**\n * Retrieve config (iobroker.json content)\n */\n getConfig(): ioBroker.IoBrokerJson {\n let config;\n // read actual configuration\n try {\n if (fs.existsSync(this.configName)) {\n config = fs.readJsonSync(this.configName);\n } else {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n } catch {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n return config;\n }\n\n /**\n * Show hosts on CLI\n *\n * @param list list of hosts\n */\n showHosts(list: BrowseResultEntry[]): void {\n if (!list || !list.length) {\n console.info(\n 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!',\n );\n } else {\n for (let i = 0; i < list.length; i++) {\n console.log(\n `${i + 1} | ${list[i].hostname!.padStart(20)} | ${list[i].slave ? 'slave' : ' host'} | ${list[\n i\n ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}`,\n );\n }\n }\n }\n\n /**\n * Start MH browsing\n */\n async browse(): Promise<BrowseResultEntry[]> {\n const mhClient = new MHClient();\n try {\n return await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);\n }\n }\n\n /**\n * Show MH state on CLI\n *\n * @param config iob config\n * @param changed if config has changed\n */\n private async showMHState(config: ioBroker.IoBrokerJson, changed: boolean): Promise<void> {\n if (config.multihostService.enabled) {\n let warningShown = false;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host, true);\n\n if (hasLocalObjectsServer) {\n console.log('Changing objects server to accept connections on all IP addresses.');\n config.objects.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.objects.type === 'redis') {\n warningShown = true;\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n warningShown = true;\n console.log(\n `Please check the binding of the configured ${config.objects.type} server to allow remote connections.`,\n );\n }\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalStatesServer) {\n console.log('Changing states server to accept connections on all IP addresses.');\n config.states.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.states.type === 'redis') {\n !warningShown &&\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n !warningShown &&\n console.log(\n `Please check the binding of the configured ${config.states.type} server to allow remote connections.`,\n );\n }\n }\n if (!changed) {\n console.log('No configuration change needed.');\n } else {\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Please restart ioBroker for the changes to take effect: \"iobroker restart\"');\n }\n console.log('\\n');\n console.log(`Multihost discovery server: ${config.multihostService.enabled ? 'enabled' : 'disabled'}`);\n console.log(`Discovery authentication: ${config.multihostService.secure ? 'enabled' : 'disabled'}`);\n console.log(\n `Persistent activation: ${\n config.multihostService.enabled && config.multihostService.persist ? 'enabled' : 'disabled'\n }`,\n );\n console.log(\n `Objects: ${config.objects.type} on ${Array.isArray(config.objects.host) ? config.objects.host.join(', ') : config.objects.host}`,\n );\n console.log(\n `States: ${config.states.type} on ${Array.isArray(config.states.host) ? config.states.host.join(', ') : config.states.host}`,\n );\n }\n\n /**\n * Enables or disables the multihost discovery server in the config json\n *\n * @param isEnable - if the server should be activated or deactivated\n * @param callback - callback function to be executed\n */\n enable(isEnable: boolean, callback: (err?: Error) => void): void {\n let changed = false;\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n\n if (isEnable && !config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = true;\n config.multihostService.password = '';\n console.log(\n 'Multihost discovery server activated on this host. If iobroker is currently not running please start before trying to discover this host.',\n );\n console.log(\n 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.',\n );\n if (!this.params.persist) {\n console.log(\n 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag',\n );\n }\n } else if (!isEnable && config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = false;\n config.multihostService.password = '';\n console.log('Multihost discovery server deactivated on this host.');\n }\n if (this.params.secure === undefined) {\n this.params.secure = true;\n }\n\n this.params.persist = !!this.params.persist;\n\n if (\n isEnable &&\n (config.multihostService.secure !== this.params.secure ||\n (config.multihostService.secure && !config.multihostService.password) ||\n config.multihostService.persist !== this.params.persist)\n ) {\n changed = true;\n config.multihostService.secure = this.params.secure;\n config.multihostService.persist = this.params.persist;\n console.log(`Discovery authentication ${this.params.secure ? 'activated' : 'deactivated'}.`);\n if (config.multihostService.secure) {\n prompt.message = '';\n prompt.delimiter = '';\n const schema = {\n properties: {\n password: {\n description: 'Enter secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n passwordRepeat: {\n description: 'Repeat secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n },\n };\n prompt.start();\n\n prompt.get(schema, (_err, password) => {\n if (password?.password) {\n if (password.password !== password.passwordRepeat) {\n callback(new Error('Secret phrases are not equal!'));\n } else {\n this.objects.getObject('system.config', (_err, obj) => {\n config.multihostService.password = tools.encrypt(\n obj!.native.secret,\n password.password as string,\n );\n this.showMHState(config, changed);\n callback();\n });\n }\n } else {\n callback(new Error('No secret phrase entered!'));\n }\n });\n } else {\n this.showMHState(config, changed);\n callback();\n }\n } else {\n this.showMHState(config, changed);\n callback();\n }\n }\n\n /**\n * Show the MH status\n */\n status(): void {\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n this.showMHState(config, false);\n }\n\n /**\n * Read password from cli\n */\n readPassword(): string {\n return readlineSync.question('Enter secret phrase for connection: ', { hideEchoBack: true });\n }\n\n /**\n * Connect to given MH server\n *\n * @param mhClient MultiHost Client used for connection\n * @param ip IP address of server\n * @param pass password\n * @param callback callback\n */\n connectHelper(mhClient: MHClient, ip: string, pass: string, callback: (err?: Error) => void): void {\n mhClient.connect(ip, pass, async (err, oObjects, oStates, ipHost) => {\n if (err) {\n callback(new Error(`Cannot connect to \"${ip}\": ${err.message}`));\n } else if (oObjects && oStates) {\n const config = this.getConfig();\n config.objects = oObjects;\n config.states = oStates;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(\n config.objects.type,\n config.objects.host,\n true,\n );\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalObjectsServer || hasLocalStatesServer) {\n callback(\n new Error(\n `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`,\n ),\n );\n } else if (\n (!Array.isArray(config.states.host) || config.states.host.length === 1) &&\n (!Array.isArray(config.objects.host) || config.objects.host.length === 1)\n ) {\n const sHost = Array.isArray(config.states.host) ? config.states.host[0] : config.states.host;\n // If server delivers 0.0.0.0 or ::, set to actual IP of the host\n if (tools.isListenAllAddress(sHost)) {\n config.states.host = ipHost ?? '';\n }\n const oHost = Array.isArray(config.objects.host) ? config.objects.host[0] : config.objects.host;\n // If server delivers 0.0.0.0 or ::, set to actual IP of the host\n if (tools.isListenAllAddress(oHost)) {\n config.objects.host = ipHost ?? '';\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n } else {\n // Find if any of the hosts is \"listen all\" or reachable\n if (Array.isArray(config.states.host)) {\n config.states.host = config.states.host.map((sHost: string) =>\n tools.isListenAllAddress(sHost) ? (ipHost ?? '') : sHost,\n );\n }\n if (Array.isArray(config.objects.host)) {\n config.objects.host = config.objects.host.map((oHost: string) =>\n tools.isListenAllAddress(oHost) ? (ipHost ?? '') : oHost,\n );\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n }\n } else {\n callback(new Error('No configuration received!'));\n }\n });\n }\n\n /**\n * Connect to MH Server\n *\n * @param index index of host to connect to\n * @param pass password\n * @param callback callback\n */\n async connect(\n index: number | null,\n pass: string | null,\n callback: (err?: Error, list?: BrowseResultEntry[]) => void,\n ): Promise<void> {\n if (typeof pass === 'function') {\n callback = pass;\n pass = null;\n }\n if (typeof index === 'function') {\n callback = index;\n index = null;\n }\n\n const mhClient = new MHClient();\n let list: BrowseResultEntry[];\n\n try {\n list = await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n callback(new Error(`Cannot browse: ${e.message}`));\n return;\n }\n\n this.showHosts(list);\n\n if (index !== null && index !== undefined && index > 0) {\n if (list && index < list.length + 1) {\n if (!pass) {\n callback(new Error('No password defined: please use \"multihost connect <NUMBER> <PASSWORD>\"'));\n } else {\n this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);\n }\n } else {\n callback(new Error(`Invalid index: ${index}`));\n }\n } else if (list && list.length) {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question('Please select host [1]: ', answer => {\n if (answer === '' || answer === null || answer === undefined) {\n index = 1;\n }\n index = parseInt(answer, 10) - 1;\n const listEntry = list[index];\n if (!listEntry) {\n rl.close();\n callback(new Error(`Invalid index: ${answer}`));\n } else {\n if (listEntry.auth) {\n const password = this.readPassword();\n if (password) {\n this.connectHelper(mhClient, listEntry.ip!, password, callback);\n } else {\n callback(new Error('No password entered!'));\n }\n } else {\n this.connectHelper(mhClient, listEntry.ip!, '', callback);\n }\n }\n });\n } else {\n callback(undefined, list);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_js_controller_common", "fs", "path", "prompt", "_err", "readlineSync", "readline"]
|
|
7
7
|
}
|
|
@@ -16,16 +16,12 @@ interface PacketManagerOptions {
|
|
|
16
16
|
manager?: Manager;
|
|
17
17
|
logger?: Logger;
|
|
18
18
|
}
|
|
19
|
-
/** Describes a system packet that should be upgraded */
|
|
20
19
|
export interface UpgradePacket {
|
|
21
20
|
/** Name of the packet which should be upgraded */
|
|
22
21
|
name: string;
|
|
23
22
|
/** Optional version */
|
|
24
23
|
version?: string;
|
|
25
24
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Wrapper around the system packet manager (apt or yum) to query and upgrade system packages
|
|
28
|
-
*/
|
|
29
25
|
export declare class PacketManager {
|
|
30
26
|
private manager;
|
|
31
27
|
private readonly logger;
|
|
@@ -33,15 +29,9 @@ export declare class PacketManager {
|
|
|
33
29
|
private sudo;
|
|
34
30
|
private readonly _readyPromise;
|
|
35
31
|
private readonly COMMANDS;
|
|
36
|
-
/**
|
|
37
|
-
* @param options The packet manager to use, a logger and the log level
|
|
38
|
-
*/
|
|
39
32
|
constructor(options?: PacketManagerOptions);
|
|
40
33
|
/** Starts the initialization process */
|
|
41
34
|
private _init;
|
|
42
|
-
/**
|
|
43
|
-
* Resolve once the packet manager has finished its asynchronous initialization
|
|
44
|
-
*/
|
|
45
35
|
ready(): Promise<void>;
|
|
46
36
|
/**
|
|
47
37
|
* Tests if the given command can be executed
|
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -33,9 +32,6 @@ var LOG_LEVELS;
|
|
|
33
32
|
LOG_LEVELS2[LOG_LEVELS2["error"] = 0] = "error";
|
|
34
33
|
})(LOG_LEVELS || (LOG_LEVELS = {}));
|
|
35
34
|
class PacketManager {
|
|
36
|
-
static {
|
|
37
|
-
__name(this, "PacketManager");
|
|
38
|
-
}
|
|
39
35
|
manager;
|
|
40
36
|
logger;
|
|
41
37
|
dpkg;
|
|
@@ -47,18 +43,15 @@ class PacketManager {
|
|
|
47
43
|
yum: "check-update"
|
|
48
44
|
}
|
|
49
45
|
};
|
|
50
|
-
/**
|
|
51
|
-
* @param options The packet manager to use, a logger and the log level
|
|
52
|
-
*/
|
|
53
46
|
constructor(options = { logLevel: LOG_LEVELS.info }) {
|
|
54
47
|
this.manager = options?.manager || "";
|
|
55
48
|
this.logger = options?.logger || {
|
|
56
|
-
silly:
|
|
57
|
-
info:
|
|
58
|
-
log:
|
|
59
|
-
warn:
|
|
60
|
-
error:
|
|
61
|
-
debug:
|
|
49
|
+
silly: (text) => options.logLevel >= LOG_LEVELS.silly && console.log(text),
|
|
50
|
+
info: (text) => options.logLevel >= LOG_LEVELS.info && console.log(text),
|
|
51
|
+
log: (text) => options.logLevel >= LOG_LEVELS.log && console.log(text),
|
|
52
|
+
warn: (text) => options.logLevel >= LOG_LEVELS.warn && console.warn(text),
|
|
53
|
+
error: (text) => options.logLevel >= LOG_LEVELS.error && console.error(text),
|
|
54
|
+
debug: (text) => options.logLevel >= LOG_LEVELS.debug && console.log(text)
|
|
62
55
|
};
|
|
63
56
|
this.dpkg = false;
|
|
64
57
|
this.sudo = false;
|
|
@@ -78,9 +71,6 @@ class PacketManager {
|
|
|
78
71
|
this.logger.debug(`Detected dpkg: ${this.dpkg}`);
|
|
79
72
|
}
|
|
80
73
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Resolve once the packet manager has finished its asynchronous initialization
|
|
83
|
-
*/
|
|
84
74
|
ready() {
|
|
85
75
|
return this._readyPromise;
|
|
86
76
|
}
|