iobroker.admin 7.7.1 → 7.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/adminWww/assets/{AdapterUpdateDialog-Bgswiqs9.js → AdapterUpdateDialog-DHGhgEEq.js} +1 -1
- package/adminWww/assets/{Adapters-yQiEeoh8.js → Adapters-CgSIajcF.js} +2 -2
- package/adminWww/assets/{Config-C1Gjt8DC.js → Config-BQSl4bfA.js} +1 -1
- package/adminWww/assets/{CustomModal-CgEtkfCG.js → CustomModal-DNMTLv4y.js} +1 -1
- package/adminWww/assets/{CustomTab-CwioFUor.js → CustomTab-Bl8S8QZW.js} +1 -1
- package/adminWww/assets/{DefaultPropsProvider-DxsXuIyE.js → DefaultPropsProvider-u5xB1Fxz.js} +1 -1
- package/adminWww/assets/{EasyMode-CN-reJVI.js → EasyMode-xDbqrply.js} +1 -1
- package/adminWww/assets/{Enums-8m252lzC.js → Enums-BSICIhWI.js} +1 -1
- package/adminWww/assets/{Fields-lI3YkIzQ.js → Fields-C3JkTmfP.js} +1 -1
- package/adminWww/assets/{Files-fQpSPYWI.js → Files-DK85-COY.js} +2 -2
- package/adminWww/assets/{FilledInput-CKswrNd5.js → FilledInput-CysG4ax_.js} +1 -1
- package/adminWww/assets/{Hosts-BPdUlXV5.js → Hosts-qIsB4Gub.js} +2 -2
- package/adminWww/assets/Instances-BA_DCzs8.js +2 -0
- package/adminWww/assets/{Intro-Dr1-aqO9.js → Intro-00oh6SLw.js} +1 -1
- package/adminWww/assets/{Logs-xCCrWV30.js → Logs-Cvpgh-zN.js} +1 -1
- package/adminWww/assets/Objects-Dp71iotS.js +60 -0
- package/adminWww/assets/{State-nZ6sjU9_.js → State-BqfD2ABf.js} +1 -1
- package/adminWww/assets/{Tabs-BJ1rL35Z.js → Tabs-sxfWgN0b.js} +2 -2
- package/adminWww/assets/{Users-B0iasrSG.js → Users-CDcWqTfZ.js} +1 -1
- package/adminWww/assets/ace-BG5WYul1.js +985 -0
- package/adminWww/assets/{blueGrey-D-KQaGde.js → blueGrey-DYsiMDOn.js} +1 -1
- package/adminWww/assets/{bootstrap-DDrI3lVl.js → bootstrap-BYQTdf9r.js} +91 -103
- package/adminWww/assets/{createSvgIcon-DuKI6CvW.js → createSvgIcon-Bh3KWtyp.js} +1 -1
- package/adminWww/assets/{emotion-react.browser.esm-DApPKwaj.js → emotion-react.browser.esm-BCDt9NrH.js} +1 -1
- package/adminWww/assets/{emotion-styled.browser.esm-Dc05hmeu.js → emotion-styled.browser.esm-CyFqGgyG.js} +1 -1
- package/adminWww/assets/{emotion-utils.browser.esm-DOjH6Olm.js → emotion-utils.browser.esm-pglN4_eI.js} +1 -1
- package/adminWww/assets/{geosearch.module-CWfRtxrN.js → geosearch.module-DH4NhiPj.js} +1 -1
- package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
- package/adminWww/assets/{iconBase-CgxZ5MMC.js → iconBase-C3vi24ZE.js} +1 -1
- package/adminWww/assets/{index-BmWdDCX_.js → index-B1ITPhEY.js} +2 -2
- package/adminWww/assets/{index-D7Rlw-5R.js → index-D--ojYan.js} +1 -1
- package/adminWww/assets/{index-BjVqnwqt.js → index-D3IAEXXP.js} +1 -1
- package/adminWww/assets/{index-HOidq_rM.js → index-DPDg2YA0.js} +1 -1
- package/adminWww/assets/{index-Bsv_DXxB.js → index-DTGUg51P.js} +1 -1
- package/adminWww/assets/{index-BP5kWU3L.js → index-Qa7Q_Dz5.js} +1 -1
- package/adminWww/assets/{index-RvHSqeMD.js → index-qcIeekse.js} +13 -13
- package/adminWww/assets/{index-gHyOgbGJ.js → index-rKfs-rCa.js} +1 -1
- package/adminWww/assets/{index-DH1kmwK1.js → index-wN1ZlPSW.js} +2 -2
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js → iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js} +1 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js → iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js} +1 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +5 -0
- package/adminWww/assets/{sentry-CNy_SQq1.js → sentry-H_UdJ2zx.js} +1 -1
- package/adminWww/assets/{zh-cn-DZTx1vAh.js → zh-cn-vvAC9zpl.js} +3 -3
- package/adminWww/index.html +2 -2
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry.js +2 -2
- package/adminWww/static/js/worker-javascript.js +1 -1
- package/adminWww/static/js/worker-yaml.js +1 -1
- package/io-package.json +14 -14
- package/package.json +10 -9
- package/adminWww/assets/Instances-BStmfz4r.js +0 -2
- package/adminWww/assets/Objects-BF8brXaf.js +0 -60
- package/adminWww/assets/ace-CFIUQz8j.js +0 -970
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js +0 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js +0 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js +0 -10
- package/build-backend/src/lib/checkLinuxPass.js +0 -280
- package/build-backend/src/lib/checkLinuxPass.js.map +0 -1
- package/build-backend/src/lib/testPassword.js +0 -58
- package/build-backend/src/lib/testPassword.js.map +0 -1
- package/build-backend/src/lib/translations.js +0 -27
- package/build-backend/src/lib/translations.js.map +0 -1
- package/build-backend/src/lib/utils.js +0 -344
- package/build-backend/src/lib/utils.js.map +0 -1
- package/build-backend/src/lib/web.js +0 -1165
- package/build-backend/src/lib/web.js.map +0 -1
- package/build-backend/src/main.js +0 -1704
- package/build-backend/src/main.js.map +0 -1
- package/build-backend/src-admin/src/components/Adapters/Utils.js +0 -39
- package/build-backend/src-admin/src/components/Adapters/Utils.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Admin backend\n *\n * Controls Adapter-Processes\n *\n * Copyright 2014-2025 Denis Haev <dogafox@gmail.com>,\n * MIT License\n *\n */\n\nimport * as semver from 'semver';\nimport axios from 'axios';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { join } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nimport { Adapter, type AdapterOptions, commonTools, controllerDir } from '@iobroker/adapter-core';\nimport I18n from '@iobroker/i18n';\nimport { SocketAdmin, type Server, type Store } from '@iobroker/socket-classes';\nimport { SocketIO } from '@iobroker/ws-server';\nimport { getAdapterUpdateText } from './lib/translations';\nimport Web, { type AdminAdapterConfig } from './lib/web';\nimport { checkWellKnownPasswords, setLinuxPassword } from './lib/checkLinuxPass';\nimport type { RepoAdapterObject } from '../src-admin/src/components/Adapters/Utils';\n\nconst adapterName = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), { encoding: 'utf-8' }))\n .name.split('.')\n .pop();\n\nconst { getInstalledInfo } = commonTools;\n\nconst ONE_HOUR_MS = 3_600_000;\nconst ERROR_PERMISSION = 'permissionError';\n\nconst CURRENT_MAX_MAJOR_NODEJS = 20;\nconst CURRENT_MAX_MAJOR_NPM = 8;\n\nlet socket: SocketAdmin;\nlet webServer: Web;\nlet lastRepoUpdate: number;\n\n// Cache of objects\nlet objects: Record<string, ioBroker.Object> = {};\nconst secret = 'Zgfr56gFe87jJOM'; // Will be generated by first start\nlet systemLanguage: ioBroker.Languages = 'en';\n\ninterface UpdateInfo {\n /** Current available version in repository */\n availableVersion: string;\n /** Current installed version */\n installedVersion: string;\n}\n\ninterface NodeVersionInformation {\n /** Node.js version */\n version: string;\n /** npm version */\n npm: string;\n}\n\ninterface WellKnownUserPassword {\n login: string;\n password: string;\n result?: boolean;\n}\n\ninterface NewsMessage {\n id: string;\n 'date-start': string;\n 'date-end': string;\n created: string;\n 'node-version': string;\n 'npm-version': string;\n conditions: Record<string, string>;\n os: string;\n repo: string;\n uuid: string;\n 'number-of-objects': string;\n 'objects-db-type': string;\n class: string;\n title: ioBroker.Translated;\n content: ioBroker.Translated;\n}\n\nclass Admin extends Adapter {\n public declare config: AdminAdapterConfig;\n\n /** secret used for the socket connection */\n public secret: string;\n\n /** Timer to update repository */\n private timerRepo: NodeJS.Timeout;\n\n private updaterTimeout: NodeJS.Timeout;\n\n private ratingTimeout: NodeJS.Timeout;\n\n private timerNews: NodeJS.Timeout;\n\n private _tasks: ioBroker.AnyObject[];\n\n private changedPasswords: WellKnownUserPassword[] = [];\n\n constructor(options: Partial<AdapterOptions> = {}) {\n options = {\n ...options,\n name: adapterName, // adapter name\n logTransporter: true, // receive the logs\n systemConfig: true,\n install: () => void null,\n };\n\n super(options as AdapterOptions);\n\n this.on('objectChange', this.onObjectChange.bind(this));\n this.on('stateChange', this.onStateChange.bind(this));\n this.on('ready', this.onReady.bind(this));\n this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this));\n this.on('fileChange', this.onFileChange.bind(this));\n this.on('log', this.onLog.bind(this));\n }\n\n /**\n * Is called if a subscribed object changes\n *\n * @param id object ID that changed\n * @param obj the changed object value\n */\n onObjectChange(id: string, obj: ioBroker.Object | null | undefined): void {\n if (obj) {\n objects[id] = obj as ioBroker.StateObject;\n\n if (id === 'system.config' && !this.config.language) {\n if (obj.common?.language) {\n systemLanguage = obj.common.language;\n if (webServer) {\n webServer.setLanguage(systemLanguage);\n }\n }\n }\n\n if (id === 'system.repositories' || id.match(/^system\\.adapter\\.[^.]+$/)) {\n if (this.updaterTimeout) {\n clearTimeout(this.updaterTimeout);\n }\n this.updaterTimeout = setTimeout(() => {\n this.updaterTimeout = null;\n void this.writeUpdateInfo();\n }, 5_000);\n }\n } else {\n // console.log('objectDeleted: ' + id);\n if (objects[id]) {\n delete objects[id];\n }\n }\n\n // TODO Build in some threshold of messages\n socket?.objectChange(id, obj);\n }\n\n /**\n * Is called if a subscribed state was changed\n *\n * @param id state ID that changed\n * @param state the changed state value\n */\n onStateChange(id: string, state: ioBroker.State | null | undefined): void {\n socket?.stateChange(id, state);\n }\n\n onFileChange(id: string, fileName: string, size: number): void {\n socket?.fileChange(id, fileName, size);\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n async onReady(): Promise<void> {\n const systemConfig = await this.getForeignObjectAsync('system.config');\n if (systemConfig) {\n systemConfig.native = systemConfig.native || {};\n if (this.config.language) {\n systemLanguage = this.config.language;\n } else if (systemConfig.common?.language) {\n systemLanguage = systemConfig.common.language;\n }\n I18n.init(__dirname, systemLanguage).catch(e => this.log.error(`Cannot init i18n: ${e}`));\n\n if (!systemConfig.native.secret) {\n randomBytes(24, (_ex, buf) => {\n this.secret = buf.toString('hex');\n this.extendForeignObject('system.config', { native: { secret: this.secret } }).catch(e =>\n this.log.error(`Cannot set secret: ${e}`),\n );\n this.init();\n });\n } else {\n this.secret = systemConfig.native.secret;\n this.init();\n }\n } else {\n this.secret = secret;\n this.log.error('Cannot find object system.config');\n }\n }\n\n /**\n * Some message was sent to this instance over the message box. Used by email, pushover, text2speech, ...\n * Using this method requires \"common.messagebox\" property to be set to true in io-package.json\n *\n * @param obj the message object\n */\n onMessage(obj: ioBroker.Message): void {\n if (!obj) {\n return;\n }\n if (obj.command === 'im') {\n // if not instance message\n socket.publishInstanceMessageAll(obj.from, obj.message.m, obj.message.s, obj.message.d);\n } else if (obj.command === 'checkFiles') {\n if (typeof obj.message === 'string') {\n try {\n return (\n obj.callback &&\n this.sendTo(obj.from, obj.command, { result: existsSync(obj.message) }, obj.callback)\n );\n } catch (e) {\n return obj.callback && this.sendTo(obj.from, obj.command, { error: e.message }, obj.callback);\n }\n } else if (Array.isArray(obj.message)) {\n const result: Record<string, boolean> = {};\n for (let f = 0; f < obj.message.length; f++) {\n try {\n result[obj.message[f]] = existsSync(obj.message[f]);\n } catch (e) {\n result[obj.message[f]] = e.message;\n }\n }\n return obj.callback && this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n } else if (obj.command === 'autocomplete') {\n // just for test\n return (\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n [\n { value: 1, label: 'first' },\n { value: 2, label: 'second' },\n ],\n obj.callback,\n )\n );\n } else if (obj.command === 'selectSendTo') {\n this.log.info(`SelectSendTo: ${JSON.stringify(obj.message)}`);\n // just for test\n return (\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n [\n { label: 'Afghanistan', value: 'AF' },\n { label: 'Åland Islands', value: 'AX' },\n { label: 'Albania', value: 'AL' },\n ],\n obj.callback,\n )\n );\n } else if (obj.command === 'url') {\n this.log.info(`url: ${JSON.stringify(obj.message)}`);\n // just for test\n return (\n obj.callback &&\n this.sendTo(obj.from, obj.command, { openUrl: obj.message._origin, saveConfig: true }, obj.callback)\n );\n } else if (obj.command.startsWith('admin:')) {\n return this.processNotificationsGui(obj);\n } else if (obj.command.startsWith('test:')) {\n // just for test\n this.log.info(`test: ${JSON.stringify(obj.message)}`);\n return;\n }\n\n socket?.sendCommand(obj);\n }\n\n processNotificationsGui(obj: ioBroker.Message): void {\n if (obj.command === 'admin:getNotificationSchema') {\n const guiMessage: { login: string; password: string } = obj.message;\n const alreadyDone = this.changedPasswords.find(\n item => item.login === guiMessage.login && item.password === guiMessage.password,\n );\n let schema: any;\n if (alreadyDone?.result === true) {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject(\n 'The password for user \"%s\" was successfully changed',\n guiMessage.login,\n ),\n style: { color: 'green' },\n sm: 12,\n },\n },\n };\n } else if (alreadyDone?.result === false) {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject('Cannot change password for %s:', guiMessage.login),\n style: { color: 'orange' },\n sm: 12,\n },\n _info1: {\n newLine: true,\n type: 'staticText',\n text: `sudo passwd ${guiMessage.login}`,\n style: { fontFamilies: 'monospace', color: 'green', backgroundColor: 'black' },\n sm: 12,\n },\n _info3: {\n newLine: true,\n type: 'staticText',\n text: I18n.getTranslatedObject('Enter your new password by prompt.'),\n style: { fontFamilies: 'monospace', color: 'green', backgroundColor: 'black' },\n sm: 12,\n },\n },\n };\n } else if (alreadyDone) {\n // Ask user for new password and for password repeat\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'header',\n size: 5,\n text: I18n.getTranslatedObject(\n `User \"%s\" has well known password. We suggest to change it.`,\n guiMessage.login,\n ),\n style: { color: 'orange' },\n sm: 12,\n },\n password: {\n newLine: true,\n label: I18n.getTranslatedObject('New password'),\n type: 'password',\n help: I18n.getTranslatedObject('Minimal length is 6 chars'),\n visible: true,\n sm: 12,\n md: 6,\n },\n passwordRepeat: {\n label: I18n.getTranslatedObject('Password repeat'),\n type: 'password',\n visible: true,\n sm: 12,\n md: 6,\n },\n _send: {\n newLine: true,\n type: 'sendto',\n command: 'admin:setPassword',\n jsonData: `{ \"oldPassword\": \"${guiMessage.password}\", \"login\": \"${guiMessage.login}\", \"password\": \"$\\{data.password}\", \"passwordRepeat\": \"$\\{data.passwordRepeat}\" }`,\n label: I18n.getTranslatedObject('Set password'),\n disabled:\n '!data.password || !data.passwordRepeat || data.password.length < 6 || data.password !== data.passwordRepeat',\n sm: 6,\n md: 3,\n variant: 'contained',\n },\n },\n };\n } else {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject(\n 'This message is no more actual and was generated by other instance start',\n ),\n style: { color: 'grey' },\n sm: 12,\n },\n },\n };\n }\n\n this.sendTo(obj.from, obj.command, { schema }, obj.callback);\n } else if (obj.command === 'admin:setPassword') {\n // compare password and passwordRepeat\n const guiMessage: { login: string; password: string; passwordRepeat: string; oldPassword: string } =\n obj.message;\n // empty password isn't allowed\n if (!guiMessage.password) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\"Empty password isn't allowed\"),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else if (guiMessage.password !== guiMessage.passwordRepeat) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject('Password and password repeat are not equal'),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else if (guiMessage.password.length < 6) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject('Password is too short (min 6 chars)'),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else {\n void setLinuxPassword(guiMessage.login, guiMessage.oldPassword, guiMessage.password).then(result => {\n this.changedPasswords = this.changedPasswords.filter(\n item => item.password !== guiMessage.login && item.login !== guiMessage.oldPassword,\n );\n this.changedPasswords.push({\n login: guiMessage.login,\n password: guiMessage.oldPassword,\n result: result === true,\n });\n if (result === true) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\n 'Password successfully changed for \"%s\"',\n guiMessage.login,\n ),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\n `Cannot change password for \"%s\": %s`,\n guiMessage.login,\n result,\n ),\n style: { color: 'red' },\n refresh: true,\n },\n },\n obj.callback,\n );\n }\n });\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n *\n * @param callback Callback after unloading\n */\n onUnload(callback: () => void): void {\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n this.timerRepo = null;\n }\n\n if (this.timerNews) {\n clearTimeout(this.timerNews);\n this.timerNews = null;\n }\n\n if (this.ratingTimeout) {\n clearTimeout(this.ratingTimeout);\n this.ratingTimeout = null;\n }\n\n if (this.updaterTimeout) {\n clearTimeout(this.updaterTimeout);\n this.updaterTimeout = null;\n }\n\n try {\n this.log.info(`terminating http${this.config.secure ? 's' : ''} server on port ${this.config.port}`);\n socket?.close();\n webServer.close();\n callback();\n } catch {\n callback();\n }\n }\n\n onLog(obj: {\n /** Log message */\n message: string;\n /** origin */\n from: string;\n /** timestamp in ms */\n ts: number;\n /** Log message */\n severity: ioBroker.LogLevel;\n /** unique ID of the message */\n _id: number;\n }): void {\n socket?.sendLog(obj);\n }\n\n async createUpdateInfo(): Promise<void> {\n const promises = [];\n // create a connected object and state\n const updatesNumberObj = objects[`${this.namespace}.info.updatesNumber`];\n\n if (!updatesNumberObj || !updatesNumberObj.common || updatesNumberObj.common.type !== 'number') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesNumber',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'Number of adapters to update',\n de: 'Anzahl der zu aktualisierenden Adapter',\n ru: 'Количество адаптеров для обновления',\n pt: 'Número de adaptadores para atualizar',\n nl: 'Aantal adapters om te updaten',\n fr: \"Nombre d'adaptateurs à mettre à jour\",\n it: 'Numero di adattatori da aggiornare',\n es: 'Número de adaptadores para actualizar',\n pl: 'Liczba adapterów do aktualizacji',\n uk: 'Кількість адаптерів для оновлення',\n 'zh-cn': '要更新的适配器数量',\n },\n type: 'number',\n read: true,\n write: false,\n def: 0,\n },\n native: {},\n };\n\n await this.setObject(obj._id, obj);\n }\n\n const updatesListObj = objects[`${this.namespace}.info.updatesList`];\n\n if (!updatesListObj || !updatesListObj.common || updatesListObj.common.type !== 'string') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesList',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'List of adapters to update',\n de: 'Liste der zu aktualisierenden Adapter',\n ru: 'Список адаптеров для обновления',\n pt: 'Lista de adaptadores para atualizar',\n nl: 'Lijst met adapters die moeten worden bijgewerkt',\n fr: 'Liste des adaptateurs à mettre à jour',\n it: 'Elenco degli adattatori da aggiornare',\n es: 'Lista de adaptadores para actualizar',\n pl: 'Lista adapterów do aktualizacji',\n uk: 'Список адаптерів для оновлення',\n 'zh-cn': '要更新的适配器列表',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n };\n\n await this.setObject(obj._id, obj);\n }\n\n const newUpdatesObj = objects[`${this.namespace}.info.newUpdates`];\n\n if (!newUpdatesObj || !newUpdatesObj.common || newUpdatesObj.common.type !== 'boolean') {\n const obj: ioBroker.StateObject = {\n _id: 'info.newUpdates',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'Indicator if new adapter updates are available',\n de: 'Anzeige, ob neue Adapter-Updates verfügbar sind',\n ru: 'Индикатор наличия новых обновлений адаптера',\n pt: 'Indicador se novas atualizações do adaptador estão disponíveis',\n nl: 'Indicator of er nieuwe adapter-updates beschikbaar zijn',\n fr: \"Indicateur si de nouvelles mises à jour de l'adaptateur sont disponibles\",\n it: \"Indicatore se sono disponibili nuovi aggiornamenti dell'adattatore\",\n es: 'Indicador si hay nuevas actualizaciones de adaptadores disponibles',\n pl: 'Wskaźnik, czy dostępne są nowe aktualizacje adaptera',\n uk: 'Індикатор наявності нових оновлень адаптера',\n 'zh-cn': '指示是否有新的适配器更新可用',\n },\n type: 'boolean',\n read: true,\n write: false,\n def: false,\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n const updatesJsonObj = objects[`${this.namespace}.info.updatesJson`];\n\n if (!updatesJsonObj || !updatesJsonObj.common || updatesJsonObj.common.type !== 'string') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesJson',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'JSON string with adapter update information',\n de: 'JSON-String mit Adapteraktualisierungsinformationen',\n ru: 'Строка JSON с информацией об обновлении адаптера',\n pt: 'String JSON com informações de atualização do adaptador',\n nl: 'JSON-tekenreeks met adapter-update-informatie',\n fr: \"Chaîne JSON avec les informations de mise à jour de l'adaptateur\",\n it: \"Stringa JSON con informazioni sull'aggiornamento dell'adattatore\",\n es: 'Cadena JSON con información de actualización del adaptador',\n pl: 'Ciąg JSON z informacjami o aktualizacji adaptera',\n uk: 'Рядок JSON з інформацією про оновлення адаптера',\n 'zh-cn': '带有适配器更新信息的 JSON 字符串',\n },\n type: 'string',\n read: true,\n write: false,\n def: '{}',\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n const lastUpdateCheckObj = objects[`${this.namespace}.info.lastUpdateCheck`];\n\n if (!lastUpdateCheckObj || !lastUpdateCheckObj.common || lastUpdateCheckObj.common.type !== 'number') {\n const obj: ioBroker.StateObject = {\n _id: 'info.lastUpdateCheck',\n type: 'state',\n common: {\n role: 'value.time',\n name: {\n en: 'Timestamp of last update check',\n de: 'Zeitstempel der letzten UpdatePrüfung',\n ru: 'Отметка времени последней проверки обнвлений',\n pt: 'Timestamp da última verificação de atualizaçã',\n nl: 'Tijdstempel van laatste updatecontrole',\n fr: 'Horodatage de la dernière vérificationde mise à jour',\n it: \"Timestamp dell'ultimo controllo di aggiornamento\",\n es: 'Marca de tiempo de la última verificación de actalización',\n pl: 'Znacznik czasu ostatniego sprawdzenia aktualizacji',\n uk: 'Відмітка часу останньої перевірки оновлень',\n 'zh-cn': '上次更新检查的时间戳',\n },\n type: 'number',\n read: true,\n write: false,\n def: 0,\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n await Promise.all(promises);\n }\n\n upToDate(v1: string, v2: string): boolean {\n return semver.gt(v2, v1);\n }\n\n /**\n * Write the update information to the states\n */\n async writeUpdateInfo(\n /** current sources, if given */\n sources?: Record<string, ioBroker.RepositoryJsonAdapterContent>,\n ): Promise<void> {\n if (!objects['system.config'] || !objects['system.config'].common) {\n return this.log.warn('Repository cannot be read. Invalid \"system.config\" object.');\n }\n const activeRepo: string[] | string | undefined = (objects['system.config'] as ioBroker.SystemConfigObject)\n .common?.activeRepo;\n const systemRepos = objects['system.repositories'];\n\n if (!sources) {\n sources = {};\n\n // If multi-repo case. Actual case\n if (Array.isArray(activeRepo)) {\n if (systemRepos?.native?.repositories) {\n for (const repo of activeRepo) {\n if (systemRepos.native.repositories[repo]?.json) {\n Object.assign(sources, systemRepos.native.repositories[repo].json);\n } else {\n await this.setState('info.updatesNumber', 0, true);\n await this.setState('info.updatesList', '', true);\n await this.setState('info.newUpdates', false, true);\n await this.setState('info.updatesJson', '{}', true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n if (systemRepos.native.repositories[repo]) {\n this.log.warn(`Repository cannot be read: Active repo - ${repo}`);\n } else {\n this.log.warn('No repository source configured');\n }\n }\n }\n }\n } else if (activeRepo && systemRepos?.native?.repositories?.[activeRepo]?.json) {\n // This is deprecated and must be deleted after a couple of years: BF 2025.02.07\n sources = systemRepos.native.repositories[activeRepo].json;\n }\n }\n\n if (!Object.keys(sources).length) {\n await this.setState('info.updatesNumber', 0, true);\n await this.setState('info.updatesList', '', true);\n await this.setState('info.newUpdates', false, true);\n await this.setState('info.updatesJson', '{}', true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n if (Array.isArray(activeRepo)) {\n let found = false;\n if (systemRepos?.native?.repositories) {\n activeRepo.forEach(repo => {\n if (systemRepos.native.repositories[repo]) {\n this.log.warn(`Active repository \"${repo}\" cannot be read`);\n found = true;\n }\n });\n }\n if (!found) {\n this.log.warn(\n `No repository source configured. Possible values: ${\n systemRepos?.native?.repositories\n ? Object.keys(systemRepos.native.repositories).join(', ')\n : 'none'\n }. Active repo(s): \"${activeRepo.join('\", \"')}\"`,\n );\n }\n } else if (activeRepo && systemRepos?.native?.repositories?.[activeRepo]) {\n this.log.warn(`Repository cannot be read. Active repo: ${JSON.stringify(activeRepo)}`);\n } else {\n this.log.warn(\n `No repository source configured. Possible values: ${\n systemRepos?.native?.repositories\n ? Object.keys(systemRepos.native.repositories).join(', ')\n : 'none'\n }. Active repo: ${JSON.stringify(activeRepo)}`,\n );\n }\n return;\n }\n\n const installed = getInstalledInfo();\n const list: string[] = [];\n const updatesJson: Record<string, UpdateInfo> = {};\n let newUpdateIndicator = false;\n\n const state = await this.getStateAsync('info.updatesJson');\n let oldUpdates;\n if (typeof state?.val === 'string') {\n try {\n oldUpdates = JSON.parse(state.val) || {};\n } catch (e) {\n oldUpdates = {};\n this.log.warn(`Cannot parse info.updatesJson: ${e}`);\n }\n } else {\n oldUpdates = {};\n }\n\n Object.keys(sources).forEach(name => {\n try {\n if (installed[name]?.version && sources[name].version) {\n if (\n sources[name].version !== installed[name].version &&\n !this.upToDate(sources[name].version, installed[name].version)\n ) {\n // Check if updates are new or already known to user\n if (\n !oldUpdates ||\n !oldUpdates[name] ||\n oldUpdates[name].availableVersion !== sources[name].version\n ) {\n newUpdateIndicator = true;\n } // endIf\n updatesJson[name] = {\n availableVersion: sources[name].version,\n installedVersion: installed[name].version,\n };\n // remove the first part of the name\n const n = name.indexOf('.');\n list.push(n === -1 ? name : name.substring(n + 1));\n }\n }\n } catch (err) {\n this.log.warn(`Error on version check for ${name}: ${err}`);\n }\n });\n\n await this.setState('info.updatesNumber', list.length, true);\n await this.setState('info.updatesList', list.join(', '), true);\n await this.setState('info.newUpdates', newUpdateIndicator, true);\n await this.setState('info.updatesJson', JSON.stringify(updatesJson), true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n\n if (!newUpdateIndicator) {\n return;\n }\n\n const textArr = [];\n for (const [adapter, updateInfo] of Object.entries(updatesJson)) {\n const text = getAdapterUpdateText({\n adapter,\n installedVersion: updateInfo.installedVersion,\n newVersion: updateInfo.availableVersion,\n lang: systemLanguage,\n });\n\n textArr.push(text);\n }\n\n await this.registerNotification('admin', 'adapterUpdates', textArr.join('\\n'));\n }\n\n initSocket(server: Server, store: Store): void {\n socket = new SocketAdmin(this.config, this, objects);\n socket.start(server, SocketIO, {\n userKey: 'connect.sid',\n store,\n secret: this.secret,\n });\n\n // subscribe on all object changes\n socket.subscribe('objectChange', '*');\n\n this.getForeignObjectAsync('system.meta.uuid')\n .then(async obj => {\n if (obj?.native) {\n try {\n await socket.updateRatings();\n } catch (error) {\n this.log.error(`Cannot fetch ratings: ${error}`);\n }\n }\n })\n .catch(error => this.log.error(`Cannot read UUID: ${error}`));\n }\n\n async applyRightsToObjects(pattern: string, types: string[] | string): Promise<number> {\n let len = 0;\n if (typeof types === 'object') {\n for (const type of types) {\n len += await this.applyRightsToObjects(pattern, type);\n }\n } else {\n try {\n const doc = await this.getObjectViewAsync('system', types, {\n startkey: `${pattern}.`,\n endkey: `${pattern}.\\u9999`,\n });\n\n this._tasks = this._tasks || [];\n\n for (const row of doc.rows) {\n const obj: ioBroker.AnyObject = row.value as ioBroker.AnyObject;\n if (!obj.acl || obj.acl.owner !== this.config.defaultUser) {\n obj.acl.owner = this.config.defaultUser;\n await this.setForeignObjectAsync(obj._id, obj);\n len++;\n }\n }\n } catch (e) {\n this.log.error(`Error applying rights to objects: ${e.message}`);\n }\n }\n return len;\n }\n\n async applyRights(): Promise<void> {\n this.config.accessAllowedConfigs = this.config.accessAllowedConfigs || [];\n this.config.accessAllowedTabs = this.config.accessAllowedTabs || [];\n let len = 0;\n for (const id of this.config.accessAllowedConfigs) {\n const obj = await this.getForeignObjectAsync(`system.adapter.${id}`);\n if (obj?.acl && obj.acl.owner !== this.config.defaultUser) {\n obj.acl.owner = this.config.defaultUser;\n await this.setForeignObjectAsync(`system.adapter.${id}`, obj);\n len++;\n }\n }\n\n for (const id of this.config.accessAllowedTabs) {\n if (id.startsWith('devices.')) {\n // change rights of all `alias.*`\n len += await this.applyRightsToObjects('alias', ['state', 'channel']);\n } else if (id.startsWith('javascript.')) {\n // change rights of all script.js.*\n len += await this.applyRightsToObjects('javascript', ['script', 'channel']);\n } else if (id.startsWith('fullcalendar.')) {\n // change rights of all fullcalendar.*\n len += await this.applyRightsToObjects('fullcalendar', ['schedule']);\n } else if (id.startsWith('scenes.')) {\n // change rights of all scenes.*\n len += await this.applyRightsToObjects('scenes', ['state', 'channel']);\n }\n }\n\n if (len) {\n this.log.info(`Updated ${len} objects`);\n }\n }\n\n /**\n * Read news from server and register them as notifications\n */\n async updateNews(): Promise<void> {\n if (this.timerNews) {\n clearTimeout(this.timerNews);\n this.timerNews = null;\n }\n\n this.checkNodeJsVersion().catch(e => this.log.warn(`Cannot check node.js versions: ${e}`));\n\n let oldNews: NewsMessage[];\n let newEtag;\n\n const oldEtag = (await this.getStateAsync('info.newsETag'))?.val;\n\n let etag;\n\n try {\n const res = await axios.get('https://iobroker.live/repo/news-hash.json', {\n timeout: 13_000,\n validateStatus: status => status < 400,\n });\n\n etag = res.data;\n } catch (e) {\n this.log.warn(`Cannot update news: ${e.response ? e.response.data : e.message || e.code}`);\n }\n\n let _newNews;\n\n if (etag && etag.hash !== oldEtag) {\n newEtag = etag.hash;\n\n try {\n const res = await axios.get('https://iobroker.live/repo/news.json', {\n timeout: 14_000,\n validateStatus: status => status < 400,\n });\n\n _newNews = res.data;\n } catch (e) {\n this.log.warn(`Cannot update news_: ${e.response ? e.response.data : e.message || e.code}`);\n }\n } else {\n newEtag = oldEtag;\n _newNews = [];\n }\n\n const newNews = Array.isArray(_newNews) ? _newNews : [];\n\n const newsState = await this.getStateAsync('info.newsFeed');\n\n try {\n oldNews = newsState?.val ? JSON.parse(newsState.val as string) : [];\n } catch {\n oldNews = [];\n }\n\n const originalOldNews = JSON.stringify(oldNews);\n\n const lastState = await this.getStateAsync('info.newsLastId');\n\n // find time of last ID\n let time = '';\n if (lastState?.val) {\n const item = oldNews.find(item => item.id === lastState.val);\n if (item) {\n time = item.created;\n }\n }\n\n try {\n // add all IDs newer than last seen\n newNews.forEach(item => {\n if (!lastState || !time || item.created > time) {\n if (!oldNews.find(it => it.created === item.created)) {\n oldNews.push(item);\n }\n }\n });\n\n oldNews.sort((a, b) => (a.created > b.created ? -1 : a.created < b.created ? 1 : 0));\n\n // delete news older than 3 months\n let i;\n for (i = oldNews.length - 1; i >= 0; i--) {\n if (Date.now() - new Date(oldNews[i].created).getTime() > 180 * 24 * 3_600_000) {\n oldNews.splice(i, 1);\n }\n }\n\n if (originalOldNews !== JSON.stringify(oldNews)) {\n await this.registerNewsNotifications(oldNews, lastState?.val as string);\n await this.setStateAsync('info.newsFeed', JSON.stringify(oldNews), true);\n }\n\n if (newEtag !== oldEtag) {\n await this.setStateAsync('info.newsETag', newEtag, true);\n }\n } catch (e) {\n this.log.error(`Cannot update news: ${e.message}`);\n }\n\n this.timerNews = setTimeout(() => this.updateNews(), 24 * ONE_HOUR_MS + 1);\n }\n\n /**\n * Add the news to the notification system\n *\n * @param messages sorted news\n * @param lastMessageId lastMessageId, all after this has already been seen\n */\n async registerNewsNotifications(messages: NewsMessage[], lastMessageId?: string): Promise<void> {\n const adapters = await this.getObjectViewAsync('system', 'adapter', {\n startkey: 'system.adapter.\\u0000',\n endkey: 'system.adapter.\\u9999',\n });\n\n const operatingSystem = platform();\n\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.\\u0000',\n endkey: 'system.adapter.\\u9999',\n });\n\n const activeRepo = (await this.getForeignObjectAsync('system.config'))?.common.activeRepo;\n const uuid = (await this.getForeignObjectAsync('system.meta.uuid'))?.native.uuid;\n const nodeVersion = process.version;\n const npmVersion = await this.getNpmVersion();\n\n const today = Date.now();\n for (const message of messages) {\n if (!message) {\n continue;\n }\n\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n Object.keys(message.conditions).forEach(key => {\n if (showIt) {\n const adapter = adapters.rows.find(adapter => adapter.id === `system.adapter.${key}`);\n const condition = message.conditions[key];\n\n if (!adapter && condition !== '!installed') {\n showIt = false;\n } else if (adapter && condition === '!installed') {\n showIt = false;\n } else if (adapter && condition === 'active') {\n showIt = this.checkActive(key, instances);\n } else if (adapter && condition === '!active') {\n showIt = !this.checkActive(key, instances);\n } else if (adapter?.value) {\n showIt = this.checkConditions(condition, adapter.value.common.version);\n }\n }\n });\n }\n\n if (showIt && message['node-version']) {\n showIt = this.checkConditions(message['node-version'], nodeVersion);\n }\n if (showIt && message['npm-version']) {\n showIt = this.checkConditions(message['npm-version'], npmVersion);\n }\n if (showIt && message.os) {\n showIt = operatingSystem === message.os;\n }\n if (showIt && message.repo) {\n // If multi-repo\n if (Array.isArray(activeRepo)) {\n showIt = activeRepo.includes(message.repo);\n } else {\n showIt = activeRepo === message.repo;\n }\n }\n if (showIt && message.uuid) {\n if (Array.isArray(message.uuid)) {\n showIt = uuid && message.uuid.find(msgUuid => uuid === msgUuid);\n } else {\n showIt = !!(uuid && uuid === message.uuid);\n }\n }\n\n if (showIt && message['number-of-objects']) {\n const res = await this.getObjectListAsync({ include_docs: true });\n const noObjects = res.rows.length;\n\n showIt = eval(`${noObjects} ${message['number-of-objects']}`);\n }\n\n if (showIt && message['objects-db-type']) {\n const objectsDbType = await this.getObjectsDbType();\n\n if (!message['objects-db-type'].includes(objectsDbType)) {\n showIt = false;\n }\n }\n\n if (showIt) {\n this.log.info(`register notification ${message.class}`);\n await this.registerNotification(\n 'admin',\n `${message.class}News`,\n `${message.title.en}\\n${message.content.en}`,\n );\n }\n }\n }\n\n /**\n * Check if adapter is active\n *\n * @param adapterName name of the adapter\n * @param instances list of instances\n */\n checkActive(\n adapterName: string,\n instances: Awaited<ioBroker.GetObjectViewPromise<ioBroker.InstanceObject>>,\n ): boolean {\n return !!Object.keys(instances)\n .filter(id => id.startsWith(`adapter.system.${adapterName}.`))\n .find(id => instances.rows.find(row => id === row.id)?.value?.common.enabled);\n }\n\n /**\n * Check if conditions met\n *\n * @param condition condition to check\n * @param installedVersion installed version\n */\n checkConditions(condition: string, installedVersion: string): boolean {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n }\n if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch {\n return false;\n }\n } else if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch {\n return false;\n }\n } else if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gte(installedVersion, vers1) && semver.lte(installedVersion, vers2);\n } catch {\n return false;\n }\n } else {\n return true;\n }\n }\n\n /**\n * Get the objects db type\n */\n async getObjectsDbType(): Promise<'jsonl' | 'file' | 'redis'> {\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n return 'jsonl';\n }\n const diagData = await this.sendToHostAsync(this.host, 'getDiagData', 'normal');\n // @ts-expect-error messages are special and cannot be typed easily\n return diagData.objectsType as 'jsonl' | 'file' | 'redis';\n }\n\n /**\n * Get current npm version from controller\n */\n async getNpmVersion(): Promise<string> {\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n throw new Error('Host is offline');\n }\n const hostInfo = await this.sendToHostAsync(this.host, 'getHostInfo', {});\n // @ts-expect-error messages are special and cannot be typed easily\n return hostInfo.NPM;\n }\n\n async checkNodeJsVersion(): Promise<void> {\n // allow only one admin instance to check the versions for every host\n if (this.instance !== 0) {\n const objs = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.admin.',\n endkey: 'system.adapter.admin.\\u9999',\n });\n let min = null;\n // find the lowest active instance on the same host\n for (const row of objs.rows) {\n const obj = row.value;\n if (obj?.common.enabled && obj.common.host === this.host) {\n const instance = parseInt(row.id.split('.').pop());\n if (min === null || min < instance) {\n min = instance;\n }\n }\n }\n if (this.instance !== min) {\n return;\n }\n }\n\n const response = await axios<NodeVersionInformation[]>('https://nodejs.org/download/release/index.json');\n const result = {\n nodeNewest: '',\n nodeNewestNext: '',\n npmNewest: '',\n npmNewestNext: '',\n npmCurrent: '',\n nodeCurrent: process.version,\n };\n\n try {\n result.npmCurrent = await this.getNpmVersion();\n } catch (error) {\n this.log.warn(`Cannot get current npm version: ${error}`);\n }\n\n // https://nodejs.org/download/release/index.json\n // detect a new version of the same major version and new major version (that is allowed by ioBroker)\n try {\n const recommendedVersions = await this.getRecommendedVersions();\n // find newest suggested version\n const nodeNewestNext = response.data.find(item => item.version.startsWith(`v${recommendedVersions.node}.`));\n const nodeCurrentMajor = process.version.split('.')[0];\n const nodeNewest = response.data.find(item => item.version.startsWith(`${nodeCurrentMajor}.`));\n if (nodeNewestNext) {\n result.nodeNewestNext = nodeNewestNext.version;\n }\n if (nodeNewest) {\n result.nodeNewest = nodeNewest.version;\n }\n\n // find newest suggested version\n const npmNewestNext =\n nodeNewestNext || response.data.find(item => item.npm.startsWith(`${recommendedVersions.npm}.`));\n const npmNewest = response.data.find(item => item.version === process.version);\n if (npmNewestNext) {\n result.npmNewestNext = npmNewestNext.npm;\n }\n if (npmNewest) {\n result.npmNewest = npmNewest.npm;\n }\n\n const prefix = `system.host.${this.host}.versions`;\n\n await this.setForeignObjectNotExistsAsync(prefix, {\n type: 'channel',\n common: {\n name: {\n en: 'Node.js/Npm versions',\n de: 'Node.js/Npm Versionen',\n ru: 'Node.js/Npm версии',\n pt: 'Versões Node.js/Npm',\n nl: 'Node.js/Npm versions',\n fr: 'Node.js/Npm versions',\n it: 'Node.js/Npm versioni',\n es: 'Node.js/Npm versiones',\n pl: 'Wersja node.js/Npm',\n uk: 'Версії Node.js/Npm',\n 'zh-cn': '页: 1',\n },\n },\n native: {},\n });\n\n const states: ioBroker.SettableStateObject[] = [\n {\n _id: 'nodeCurrent',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Current node.js version',\n de: 'Aktuelle node.js Version',\n ru: 'Текущая версия node.js',\n pt: 'Versão atual do node.js',\n nl: 'Current Node',\n fr: 'Version actuelle node.js',\n it: 'Versione attuale node.js',\n es: 'Versión actual node.js',\n pl: 'Aktualna wersja.js',\n uk: 'Поточна версія вузла',\n 'zh-cn': '目前没有。',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'nodeNewest',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest node.js version',\n de: 'Neueste node.js Version',\n ru: 'Новейшая версия node.js',\n pt: 'Mais recente versão node.js',\n nl: 'Nieuwste node',\n fr: 'Nouvelle version node.js',\n it: 'Nuova versione node.js',\n es: 'Versión más reciente node.js',\n pl: 'Najnowsza wersja węzła.js',\n uk: 'Остання версія вузла',\n 'zh-cn': '最新版本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'nodeNewestNext',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest next major node.js version',\n de: 'Neueste nächste große node.js Version',\n ru: 'Новейшая следующая версия node.js',\n pt: 'Mais nova versão principal node.js',\n nl: 'Nieuwste volgende grote node',\n fr: 'Nouvelle prochaine version node.js',\n it: 'Nuova versione principale node.js',\n es: 'Versión más reciente node.js',\n pl: 'Najnowsza wersja węzła.js',\n uk: 'Новейшая наступна версія вузла',\n 'zh-cn': '今后最新的重要内容。',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmCurrent',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Current npm version',\n de: 'Aktuelle Version',\n ru: 'Текущая версия npm',\n pt: 'Versão actual npm',\n nl: 'Current Npm versie',\n fr: 'Version actuelle npm',\n it: 'Versione npm attuale',\n es: 'Versión actual npm',\n pl: 'Aktualna wersja',\n uk: 'Поточна версія npm',\n 'zh-cn': '目前的印本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmNewest',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest npm version',\n de: 'Neueste Version',\n ru: 'Новейшая версия npm',\n pt: 'Versão mais recente npm',\n nl: 'Newest Npm versie',\n fr: 'Nouvelle version npm',\n it: 'Nuova versione npm',\n es: 'Versión más reciente npm',\n pl: 'Wersja nowa',\n uk: 'Остання версія npm',\n 'zh-cn': '最新版本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmNewestNext',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest next major NPM version',\n de: 'Neueste nächste große NPM-Version',\n ru: 'Новейшая следующая крупная версия NPM',\n pt: 'Mais nova versão principal do NPM',\n nl: 'NPM',\n fr: 'La version la plus récente',\n it: 'Nuova versione NPM',\n es: 'Versión NPM más reciente',\n pl: 'Nowa wersja NPM',\n uk: 'Новейша наступна велика версія NPM',\n 'zh-cn': '下一次主要国家预防计划',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n ];\n\n for (const state of states) {\n await this.setForeignObjectNotExistsAsync(`${prefix}.${state._id}`, state);\n }\n for (const [key, value] of Object.entries(result)) {\n await this.setForeignStateAsync(`${prefix}.${key}`, value.replace(/^v/, ''), true);\n }\n } catch {\n this.log.warn('Cannot check node.js/npm version');\n }\n }\n\n getData(callback: (adapter: typeof this) => void): void {\n this.log.info('requesting all objects');\n\n this.getObjectList({ include_docs: true }, (_err, res): void => {\n this.log.info('received all objects');\n if (res) {\n objects = {};\n let tmpPath = '';\n for (const row of res.rows) {\n objects[row.doc._id] = row.doc;\n if (row.doc.type === 'instance' && row.doc.common?.tmpPath) {\n if (tmpPath) {\n this.log.warn('tmpPath has multiple definitions!!');\n }\n tmpPath = row.doc.common.tmpPath;\n }\n }\n\n // Some adapters want access on specified tmp directory\n if (tmpPath) {\n this.config.tmpPath = tmpPath;\n this.config.tmpPathAllow = true;\n }\n\n void this.createUpdateInfo().then(() => this.writeUpdateInfo());\n }\n\n if (callback) {\n callback(this);\n }\n });\n }\n\n async checkRevokedVersions(repository: Record<string, ioBroker.RepositoryJsonAdapterContent>): Promise<void> {\n try {\n const adapters = Object.keys(repository);\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999',\n });\n\n for (const _adapter of adapters) {\n if (repository[_adapter].blockedVersions) {\n // read a current version\n if (Array.isArray(repository[_adapter].blockedVersions)) {\n const instance = instances.rows.find(\n item => item.value?.common.name === _adapter && item.value.common.enabled,\n );\n if (instance?.value?.common?.version) {\n for (let i = 0; i < repository[_adapter].blockedVersions.length; i++) {\n try {\n if (\n semver.satisfies(\n instance.value.common.version,\n repository[_adapter].blockedVersions[i],\n )\n ) {\n // stop all instances\n for (let k = 0; k < instances.rows.length; k++) {\n const obj = instances.rows[k].value;\n if (obj?.common.enabled && obj.common.name === _adapter) {\n obj.common.enabled = false;\n await this.setForeignObjectAsync(obj._id, obj);\n this.log.warn(\n `Instance ${obj._id.replace(\n 'system.adapter.',\n '',\n )} was disabled because blocked. Please update ${_adapter} to newer or available version`,\n );\n const hostAlive = await this.getForeignStateAsync(\n `system.host.${obj.common.host}.alive`,\n );\n if (hostAlive?.val) {\n this.sendToHost(obj.common.host, 'addNotification', {\n scope: 'system',\n category: 'accessErrors', // change to 'blocked' when js-controller 4.1. released\n instance: obj._id,\n message: `Instance version was blocked. Please check for updates and update before restarting the instance`,\n });\n } else {\n this.log.warn(\n `Cannot add notification to ${obj.common.host} as it is offline`,\n );\n }\n }\n }\n }\n } catch {\n this.log.error(\n `Cannot check revoked versions: ${repository[_adapter].blockedVersions[i]}`,\n );\n // ignore\n }\n }\n }\n } else {\n this.log.error(\n `Invalid blockedVersions for ${_adapter}: ${JSON.stringify(\n repository[_adapter].blockedVersions,\n )}. Expected array like [\"<= 3.17.4\"] or also [\"~3.14.0\", \"~3.15.0\", \"~3.16.0\"]`,\n );\n }\n }\n }\n } catch (e) {\n this.log.error(`Cannot check revoked versions: ${e}`);\n }\n }\n\n // update icons by all known default objects. Remove this function after 2 years (BF: 2021.04.20)\n updateIcons(): void {\n if (existsSync(`${controllerDir}/io-package.json`)) {\n const ioPackage = JSON.parse(\n readFileSync(join(controllerDir, 'io-package.json'), {\n encoding: 'utf-8',\n }),\n );\n\n ioPackage.objects.forEach(async (obj: ioBroker.AnyObject) => {\n if (obj.common?.icon && obj.common.icon.length > 50) {\n const cObj = await this.getForeignObjectAsync(obj._id);\n if (cObj?.common && (!cObj.common.icon || cObj.common.icon.length < 50)) {\n this.log.debug(`Update icon for ${cObj._id}`);\n cObj.common.icon = obj.common.icon;\n await this.setForeignObjectAsync(cObj._id, cObj);\n }\n }\n });\n }\n }\n\n restartRepoUpdate(): void {\n // start the next cycle\n if (this.config.autoUpdate) {\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n this.timerRepo = null;\n }\n this.log.debug(\n `Next repo update on ${new Date(\n Date.now() + this.config.autoUpdate * ONE_HOUR_MS + 1,\n ).toLocaleString()}`,\n );\n this.timerRepo = setTimeout(\n async () => {\n this.timerRepo = null;\n await this.updateRegister();\n },\n this.config.autoUpdate * ONE_HOUR_MS + 1,\n );\n }\n }\n\n async getRecommendedVersions(): Promise<{ node: number; npm: number }> {\n // Check if the host running\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n return {\n node: CURRENT_MAX_MAJOR_NODEJS,\n npm: CURRENT_MAX_MAJOR_NPM,\n };\n }\n const repository: Record<string, RepoAdapterObject> = (await this.sendToHostAsync(\n this.host,\n 'getRepository',\n {},\n )) as unknown as Record<string, RepoAdapterObject>;\n const repoInfo: {\n repoTime: string;\n recommendedVersions: {\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n } = repository?._repoInfo as unknown as {\n repoTime: string;\n recommendedVersions: {\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n };\n\n if (repoInfo?.recommendedVersions) {\n return {\n node: repoInfo.recommendedVersions?.nodeJsRecommended,\n npm: repoInfo.recommendedVersions?.npmRecommended,\n };\n }\n return {\n node: CURRENT_MAX_MAJOR_NODEJS,\n npm: CURRENT_MAX_MAJOR_NPM,\n };\n }\n\n /**\n * Read repository information from active repository\n */\n async updateRegister(): Promise<void> {\n if (lastRepoUpdate && Date.now() - lastRepoUpdate < 3600000) {\n this.log.error('Automatic repository update is not allowed more than once an hour');\n this.restartRepoUpdate();\n return;\n }\n\n lastRepoUpdate = Date.now();\n\n try {\n const systemConfig = await this.getForeignObjectAsync('system.config');\n if (systemConfig?.common) {\n try {\n const repos = await this.getForeignObjectAsync('system.repositories');\n if (!repos || repos.ts === undefined) {\n // start the next cycle\n this.restartRepoUpdate();\n return;\n }\n\n // Check if repositories exist\n let exists = false;\n const active = systemConfig.common.activeRepo;\n\n // if repo is valid and actual\n if (Array.isArray(active)) {\n if (\n Date.now() < repos.ts + this.config.autoUpdate * ONE_HOUR_MS &&\n !active.find(repo => !repos?.native?.repositories?.[repo]?.json)\n ) {\n exists = true;\n }\n } else if (\n repos?.native?.repositories?.[active]?.json &&\n Date.now() < repos.ts + this.config.autoUpdate * ONE_HOUR_MS\n ) {\n exists = true;\n }\n if (!exists) {\n this.log.info('Request actual repository...');\n // first check if the host is running\n const aliveState = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!aliveState?.val) {\n this.log.error('Host is not alive');\n // start the next cycle\n this.restartRepoUpdate();\n return;\n }\n\n // request repo from host\n this.sendToHost(\n this.host,\n 'getRepository',\n {\n repo: active,\n update: true,\n },\n _repository => {\n // @ts-expect-error fix later\n if (_repository === ERROR_PERMISSION) {\n this.log.error('May not read \"getRepository\"');\n } else {\n this.log.info('Repository received successfully.');\n\n socket?.repoUpdated();\n this.checkRevokedVersions(\n _repository as unknown as Record<string, ioBroker.RepositoryJsonAdapterContent>,\n ).catch(e => this.log.error(`Cannot check revoked versions: ${e}`));\n }\n\n // start the next cycle\n this.restartRepoUpdate();\n },\n );\n } else if (this.config.autoUpdate) {\n let interval = repos.ts + this.config.autoUpdate * ONE_HOUR_MS - Date.now() + 1;\n if (interval > 0x7fffffff) {\n interval = 0x7fffffff;\n }\n this.log.debug(`Next repo update on ${new Date(Date.now() + interval).toLocaleString()}`);\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n }\n this.timerRepo = setTimeout(async () => {\n this.timerRepo = null;\n await this.updateRegister();\n }, interval);\n }\n } catch (err) {\n this.log.error(`May not read \"system.repositories\": ${err}`);\n }\n }\n } catch {\n this.log.error('May not read \"system.config\"');\n }\n }\n\n // this function re-check if the common objects like '0_userdata.0' exist\n async checkCommonObjects(): Promise<void> {\n // try to find js-controller directory\n let objects: ioBroker.Object[];\n try {\n const dir = require.resolve('iobroker.js-controller/io-package.json').replace(/\\\\/g, '/');\n // dir is something like ./node_modules/iobroker.js-controller/build/cjs/main.js\n if (existsSync(dir)) {\n const data = JSON.parse(readFileSync(dir).toString());\n if (data.objects) {\n objects = data.objects;\n }\n }\n } catch {\n // ignore\n }\n if (objects) {\n for (let i = 0; i < objects.length; i++) {\n const obj = await this.getForeignObjectAsync(objects[i]._id);\n if (!obj) {\n await this.setForeignObjectAsync(objects[i]._id, objects[i]);\n }\n }\n } else {\n // check the meta-object 0_userdata.0 and create it if required\n let userData: ioBroker.MetaObject | null | undefined = await this.getForeignObjectAsync('0_userdata.0');\n if (!userData) {\n userData = {\n _id: '0_userdata.0',\n type: 'meta',\n common: {\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCI+DQogICAgPGcgZmlsbD0iY3VycmVudENvbG9yIj4NCiAgICAgICAgPHBhdGggZD0iTTE5LDV2MTRINVY1SDE5IE0xOSwzSDVDMy45LDMsMywzLjksMyw1djE0YzAsMS4xLDAuOSwyLDIsMmgxNGMxLjEsMCwyLTAuOSwyLTJWNUMyMSwzLjksMjAuMSwzLDE5LDNMMTksM3oiLz4NCiAgICAgICAgPHBhdGggZD0iTTE0LDE3SDd2LTJoN1YxN3ogTTE3LDEzSDd2LTJoMTBWMTN6IE0xNyw5SDdWN2gxMFY5eiIvPg0KICAgIDwvZz4NCjwvc3ZnPg==',\n name: {\n en: 'User objects and files root folder',\n de: 'Stammordner für Benutzerobjekte und Dateien',\n ru: 'Корневая папка пользовательских объектов и файлов',\n pt: 'Pasta raiz de objetos e arquivos do usuário',\n nl: 'Hoofdmap van objecten en bestanden van gebruikers',\n fr: 'Objets utilisateur et dossier racine des fichiers',\n it: \"Cartella principale di oggetti e file dell'utente\",\n es: 'Carpeta raíz de objetos y archivos de usuario',\n pl: 'Folder główny obiektów i plików użytkownika',\n uk: \"Коренева папка об'єктів користувача та файлів\",\n 'zh-cn': '用户对象和文件根文件夹',\n },\n desc: {\n en: 'Here you can upload your files or create your private objects and states',\n de: 'Hier können eigene Dateien hochgeladen oder private Objekte und Zustände erstellt werden',\n ru: 'Здесь вы можете загрузить свои файлы или создать свои личные объекты и состояния',\n pt: 'Aqui você pode enviar seus arquivos ou criar seus objetos e estados particulares',\n nl: 'Hier kunt u uw bestanden uploaden of uw privé-objecten en statussen maken',\n fr: 'Ici, vous pouvez télécharger vos fichiers ou créer vos objets et états privés',\n it: 'Qui puoi caricare i tuoi file o creare oggetti e stati privati',\n es: 'Aquí puede cargar sus archivos o crear sus objetos y estados privados',\n pl: 'Tutaj możesz przesyłać pliki lub tworzyć prywatne obiekty i stany',\n uk: \"Тут ви можете завантажити свої файли або створити свої приватні об'єкти та стани\",\n 'zh-cn': '在这里您可以上传文件或创建私有对象和状态',\n },\n type: 'meta.user',\n dontDelete: true,\n },\n acl: {\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n object: 1604,\n },\n } as ioBroker.MetaObject;\n\n await this.setForeignObject(userData._id, userData);\n }\n }\n }\n\n /**\n * Initialize the adapter\n */\n init(): void {\n this.config.defaultUser = this.config.defaultUser || 'admin';\n if (!this.config.defaultUser.match(/^system\\.user\\./)) {\n this.config.defaultUser = `system.user.${this.config.defaultUser}`;\n }\n\n this.checkCommonObjects().catch((e: Error) => this.log.warn(`Cannot check common objects: ${e?.message}`));\n\n this.getData(\n adapter => (webServer = new Web(adapter.config, adapter, this.initSocket.bind(this), { systemLanguage })),\n );\n\n if (\n this.config.accessApplyRights &&\n this.config.accessLimit &&\n !this.config.auth &&\n this.config.defaultUser !== 'system.user.admin'\n ) {\n this.applyRights().catch((e: Error) => this.log.warn(`Cannot apply rights: ${e?.message}`));\n }\n\n // By default, update repository every 24 hours\n if (this.config.autoUpdate === undefined || this.config.autoUpdate === null) {\n this.config.autoUpdate = 24;\n }\n\n // interval in hours\n this.config.autoUpdate = Number(this.config.autoUpdate) || 0;\n if (this.config.autoUpdate && this.config.autoUpdate < 4) {\n this.config.autoUpdate = 4; // only every 4 hours - it is a minimal update interval\n } else if (this.config.autoUpdate > 590) {\n // 0x7FFFFFFF / ONE_HOUR_MS = 596\n this.config.autoUpdate = 590; // max interval is 2147483647 milliseconds\n }\n\n // check info.connected\n void this.getObjectAsync('info.connected').then(obj => {\n if (!obj) {\n const packageJson = JSON.parse(readFileSync(`${__dirname}/../io-package.json`).toString('utf8'));\n const obj = packageJson.instanceObjects.find((o: ioBroker.AnyObject) => o._id === 'info.connected');\n if (obj) {\n return this.setObjectAsync(obj._id, obj);\n }\n }\n });\n\n if (this.config.autoUpdate) {\n void this.updateRegister().catch(e => this.log.error(`Cannot update repository: ${e}`));\n }\n\n void this.updateNews().catch(e => this.log.error(`Cannot update news: ${e}`));\n this.updateIcons();\n void this.validateUserData0().catch(e => this.log.error(`Cannot validate 0_userdata: ${e}`));\n void this.checkWellKnownPasswords().catch(e => this.log.error(`Cannot check well known passwords: ${e}`));\n }\n\n /**\n * Create 0_userdata if it does not exist\n */\n async validateUserData0(): Promise<void> {\n let obj: ioBroker.MetaObject | null | undefined;\n try {\n obj = await this.getForeignObjectAsync('0_userdata.0');\n } catch {\n // ignore\n }\n if (!obj) {\n try {\n const ioContent = readFileSync(`${controllerDir}/io-package.json`).toString('utf8');\n const io = JSON.parse(ioContent);\n if (io.objects) {\n const userData: ioBroker.MetaObject | null = io.objects.find(\n (obj: ioBroker.AnyObject) => obj._id === '0_userdata.0',\n );\n if (userData) {\n await this.setForeignObjectAsync(userData._id, userData);\n this.log.info('Object 0_userdata.0 was re-created');\n }\n }\n } catch (e) {\n this.log.error(`Cannot read ${controllerDir}/io-package.json: ${e}`);\n }\n }\n }\n\n async checkWellKnownPasswords(): Promise<void> {\n if (process.platform !== 'linux') {\n return;\n }\n const found = await checkWellKnownPasswords();\n if (found) {\n this.changedPasswords = this.changedPasswords.filter(\n item => item.login !== found.login && item.password !== found.password,\n );\n this.changedPasswords.push(found);\n\n await this.registerNotification('admin', 'wellKnownPassword', I18n.translate('User: %s', found.login), {\n contextData: {\n admin: {\n notification: {\n login: found.login,\n password: found.password,\n offlineMessage: I18n.getTranslatedObject('Offline message', found.login),\n },\n },\n },\n });\n }\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<AdapterOptions> | undefined) => new Admin(options);\n} else {\n // otherwise start the instance directly\n (() => new Admin())();\n}\n"]}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.extractUrlLink = extractUrlLink;
|
|
4
|
-
function extractUrlLink(adapterRepo) {
|
|
5
|
-
if (!adapterRepo) {
|
|
6
|
-
return '';
|
|
7
|
-
}
|
|
8
|
-
let url = adapterRepo.licenseInformation?.link ||
|
|
9
|
-
// @ts-expect-error licenseUrl is deprecated
|
|
10
|
-
adapterRepo.licenseUrl;
|
|
11
|
-
if (!url || !url.includes('/LICENSE') || !url.includes('raw.githubusercontent.com')) {
|
|
12
|
-
url = adapterRepo.extIcon;
|
|
13
|
-
if (!url) {
|
|
14
|
-
url = adapterRepo.readme;
|
|
15
|
-
if (!url) {
|
|
16
|
-
console.error(`No extIcon for ${adapterRepo.name || JSON.stringify(adapterRepo)}`);
|
|
17
|
-
return '';
|
|
18
|
-
}
|
|
19
|
-
url = url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');
|
|
20
|
-
if (url.includes('/main')) {
|
|
21
|
-
url = `${url.split('/main')[0]}/main/LICENSE`;
|
|
22
|
-
}
|
|
23
|
-
else if (url.includes('/master')) {
|
|
24
|
-
url = `${url.split('/master')[0]}/master/LICENSE`;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (url.includes('/main')) {
|
|
28
|
-
url = `${url.split('/main')[0]}/main/LICENSE`;
|
|
29
|
-
}
|
|
30
|
-
else if (url.includes('/master')) {
|
|
31
|
-
url = `${url.split('/master')[0]}/master/LICENSE`;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
return '';
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return url;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=Utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src-admin/src/components/Adapters/Utils.ts"],"names":[],"mappings":";;AAyBA,wCAkCC;AAlCD,SAAgB,cAAc,CAAC,WAA8B;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,GAAG,GACH,WAAW,CAAC,kBAAkB,EAAE,IAAI;QACpC,4CAA4C;QAC5C,WAAW,CAAC,UAAU,CAAC;IAE3B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QAClF,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,kBAAkB,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,EAAE,CAAC;YACd,CAAC;YACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACpF,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAClD,CAAC;iBAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACtD,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAClD,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["export interface RepoInfo {\n stable?: boolean;\n name?: ioBroker.Translated;\n repoTime: string;\n recommendedVersions?: {\n nodeJsAccepted: number[];\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n}\n\nexport interface RepoAdapterObject extends ioBroker.AdapterCommon {\n versionDate: string;\n controller?: boolean;\n stat?: number;\n node?: string;\n allowAdapterInstall?: boolean;\n allowAdapterUpdate?: boolean;\n allowAdapterDelete?: boolean;\n allowAdapterReadme?: boolean;\n allowAdapterRating?: boolean;\n stable?: string;\n latestVersion?: string;\n}\n\nexport function extractUrlLink(adapterRepo: RepoAdapterObject): string {\n if (!adapterRepo) {\n return '';\n }\n let url =\n adapterRepo.licenseInformation?.link ||\n // @ts-expect-error licenseUrl is deprecated\n adapterRepo.licenseUrl;\n\n if (!url || !url.includes('/LICENSE') || !url.includes('raw.githubusercontent.com')) {\n url = adapterRepo.extIcon;\n if (!url) {\n url = adapterRepo.readme;\n if (!url) {\n console.error(`No extIcon for ${adapterRepo.name || JSON.stringify(adapterRepo)}`);\n return '';\n }\n url = url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else if (url.includes('/master')) {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n }\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else if (url.includes('/master')) {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n } else {\n return '';\n }\n }\n\n return url;\n}\n"]}
|