From 1220d685b6ba30b35dc1020b6d95f293fd97f29d Mon Sep 17 00:00:00 2001
From: arteck <6681528+arteck@users.noreply.github.com>
Date: Tue, 19 May 2026 06:33:44 +0200
Subject: [PATCH 1/5] upd
---
admin/mf-manifest.json | 2 +-
admin/remoteEntry.js | 2 +-
admin/tab.html | 4 +-
build/lib/sandbox.js | 28 +
build/lib/sandbox.js.map | 2 +-
build/main.js | 212 ++++---
build/main.js.map | 2 +-
build/types.d.ts | 4 +
src-admin/package-lock.json | 4 +-
src-admin/package.json | 2 +-
src-editor/package-lock.json | 4 +-
src-editor/package.json | 2 +-
src/lib/sandbox.ts | 24 +
src/main.ts | 207 ++++---
src/types.d.ts | 4 +
test/performance-improvements.test.js | 772 ++++++++++++++++++++++++++
test/performance.test.js | 490 ++++++++++++++++
17 files changed, 1609 insertions(+), 156 deletions(-)
create mode 100644 test/performance-improvements.test.js
create mode 100644 test/performance.test.js
diff --git a/admin/mf-manifest.json b/admin/mf-manifest.json
index 47f00346..a1c79381 100644
--- a/admin/mf-manifest.json
+++ b/admin/mf-manifest.json
@@ -1 +1 @@
-{"id":"iobroker_javascript","name":"iobroker_javascript","metaData":{"name":"iobroker_javascript","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_javascript"},"remoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_javascript","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_javascript:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Dsh1HfIY.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-BkyLyaYT.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-dN73sbyQ.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:prop-types","name":"prop-types","version":"15.8.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CVZSzCXy.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.1.8","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-hwplVCgv.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
\ No newline at end of file
+{"id":"iobroker_javascript","name":"iobroker_javascript","metaData":{"name":"iobroker_javascript","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_javascript"},"remoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_javascript","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_javascript:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Dsh1HfIY.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-BkyLyaYT.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-dN73sbyQ.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:prop-types","name":"prop-types","version":"15.8.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CVZSzCXy.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_javascript:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.1.8","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CexrwGGC.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
\ No newline at end of file
diff --git a/admin/remoteEntry.js b/admin/remoteEntry.js
index d58e9ae0..0cfa11cb 100644
--- a/admin/remoteEntry.js
+++ b/admin/remoteEntry.js
@@ -1 +1 @@
-import"./assets/preload-helper-BDBacUwf.js";import{g as r,i as a}from"./assets/virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-BJ03G6Pu.js";export{r as get,a as init};
+import"./assets/preload-helper-BDBacUwf.js";import{g as r,i as a}from"./assets/virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-DNrEsMrg.js";export{r as get,a as init};
diff --git a/admin/tab.html b/admin/tab.html
index dd18d90c..e5e2fa26 100644
--- a/admin/tab.html
+++ b/admin/tab.html
@@ -115,9 +115,9 @@
type="text/javascript"
src="google-blockly/own/blocks_object.js"
>
-
+
-
+
diff --git a/build/lib/sandbox.js b/build/lib/sandbox.js
index aac37617..3c81114d 100644
--- a/build/lib/sandbox.js
+++ b/build/lib/sandbox.js
@@ -2161,6 +2161,11 @@ function sandBox(script, name, verbose, debug, context) {
: isAck,
scriptName: name,
});
+ // Keep reverse-index in sync for O(1) cleanup in stopScript
+ if (!context.timersByScript.has(name)) {
+ context.timersByScript.set(name, new Set());
+ }
+ context.timersByScript.get(name).add(id);
return context.timerId;
},
clearStateDelayed: function (id, timerId) {
@@ -4401,6 +4406,11 @@ function sandBox(script, name, verbose, debug, context) {
}
adapter.subscribeForeignObjects(pattern);
context.subscriptionsObject.push(subs);
+ // Keep O(1) dispatch map in sync
+ if (!context.subscriptionsObjectMap.has(pattern)) {
+ context.subscriptionsObjectMap.set(pattern, []);
+ }
+ context.subscriptionsObjectMap.get(pattern).push(subs);
return subs;
},
unsubscribeObject: function (subObject) {
@@ -4418,6 +4428,15 @@ function sandBox(script, name, verbose, debug, context) {
if (context.subscriptionsObject[i] === subObject) {
adapter.unsubscribeForeignObjects(subObject.pattern);
context.subscriptionsObject.splice(i, 1);
+ // Keep O(1) dispatch map in sync
+ const mapSubs = context.subscriptionsObjectMap.get(subObject.pattern);
+ if (mapSubs) {
+ const pos = mapSubs.indexOf(subObject);
+ if (pos !== -1)
+ mapSubs.splice(pos, 1);
+ if (!mapSubs.length)
+ context.subscriptionsObjectMap.delete(subObject.pattern);
+ }
sandbox.__engine.__subscriptionsObject--;
return true;
}
@@ -4428,6 +4447,15 @@ function sandBox(script, name, verbose, debug, context) {
context.subscriptionsObject[i].pattern === subObject.pattern) {
deleted++;
adapter.unsubscribeForeignObjects(subObject.pattern);
+ // Keep O(1) dispatch map in sync
+ const mapSubsP = context.subscriptionsObjectMap.get(subObject.pattern);
+ if (mapSubsP) {
+ const pos = mapSubsP.indexOf(context.subscriptionsObject[i]);
+ if (pos !== -1)
+ mapSubsP.splice(pos, 1);
+ if (!mapSubsP.length)
+ context.subscriptionsObjectMap.delete(subObject.pattern);
+ }
context.subscriptionsObject.splice(i, 1);
sandbox.__engine.__subscriptionsObject--;
}
diff --git a/build/lib/sandbox.js.map b/build/lib/sandbox.js.map
index 0de84b79..b5eda25a 100644
--- a/build/lib/sandbox.js.map
+++ b/build/lib/sandbox.js.map
@@ -1 +1 @@
-{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/lib/sandbox.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess, ExecOptions } from 'node:child_process';\nimport * as jsonataMod from 'jsonata';\nimport type { SendMailOptions } from 'nodemailer';\nimport type { AxiosError, AxiosHeaderValue, AxiosResponse, ResponseType } from 'axios';\n\nimport { commonTools } from '@iobroker/adapter-core';\n\nimport { isObject, isArray, promisify, getHttpRequestConfig } from './tools';\nimport type {\n JavaScriptAdapterConfig,\n AstroRule,\n ChangeType,\n CommonAlias,\n FileSubscriptionResult,\n IobSchedule,\n JavascriptContext,\n JsScript,\n LogMessage,\n Pattern,\n PushoverOptions,\n SandboxType,\n Selector,\n SubscribeObject,\n SubscriptionResult,\n TimeRule,\n} from '../types';\nimport * as constsMod from './consts';\nimport * as wordsMod from './words';\nimport * as eventObjMod from './eventObj';\nimport {\n patternCompareFunctions as patternCompareFunctionsMod,\n type PatternEventCompareFunction,\n} from './patternCompareFunctions';\nimport type { ScheduleName, SchedulerRule } from './scheduler';\nimport type { EventObj } from './eventObj';\nimport type { AstroEvent } from './consts';\n\nconst SCRIPT_CODE_MARKER = 'script.js.';\n\nconst pattern2RegEx = commonTools.pattern2RegEx;\n\nexport function sandBox(\n script: JsScript,\n name: string,\n verbose: boolean | undefined,\n debug: boolean | undefined,\n context: JavascriptContext,\n): SandboxType {\n const consts = constsMod;\n const words = wordsMod;\n const eventObj = eventObjMod;\n const patternCompareFunctions = patternCompareFunctionsMod;\n const jsonata = jsonataMod.default;\n\n const adapter: ioBroker.Adapter = context.adapter;\n const mods = context.mods;\n const states = context.states;\n const objects = context.objects;\n const timers = context.timers;\n const enums = context.enums;\n const debugMode = context.debugMode;\n\n // eslint-disable-next-line prefer-const\n let sandbox: SandboxType;\n\n function errorInCallback(e: Error): void {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'errorInCallback',\n });\n context.logError(name, 'Error in callback:', e);\n context.debugMode && console.log(`error$$${name}$$Exception in callback: ${e}`, Date.now());\n }\n\n function subscribePattern(script: JsScript, pattern: string): void {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (!script.subscribes[pattern]) {\n script.subscribes[pattern] = 1;\n } else {\n script.subscribes[pattern]++;\n }\n\n if (!context.subscribedPatterns[pattern]) {\n context.subscribedPatterns[pattern] = 1;\n\n if (sandbox.verbose) {\n sandbox.log(`subscribePattern(pattern=${pattern})`, 'info');\n }\n adapter.subscribeForeignStates(pattern);\n\n // request current value to deliver old value on change.\n if (typeof pattern === 'string' && !pattern.includes('*')) {\n void adapter.getForeignState(pattern, (_err, state) => {\n if (state) {\n states[pattern] = state;\n }\n });\n } else {\n adapter.getForeignStates(\n pattern,\n (_err, _states) => _states && Object.keys(_states).forEach(id => (states[id] = _states[id])),\n );\n }\n } else {\n context.subscribedPatterns[pattern]++;\n }\n }\n }\n\n function unsubscribePattern(script: JsScript, pattern: string): void {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (script.subscribes[pattern]) {\n script.subscribes[pattern]--;\n if (!script.subscribes[pattern]) {\n delete script.subscribes[pattern];\n }\n }\n\n if (context.subscribedPatterns[pattern]) {\n context.subscribedPatterns[pattern]--;\n if (!context.subscribedPatterns[pattern]) {\n adapter.unsubscribeForeignStates(pattern);\n delete context.subscribedPatterns[pattern];\n\n // if the pattern was regex or with * some states will stay in RAM, but it is OK.\n if (states[pattern]) {\n delete states[pattern];\n }\n }\n }\n }\n }\n\n function subscribeFile(script: JsScript, id: string, fileNamePattern: string): void {\n const key = `${id}$%$${fileNamePattern}`;\n if (!script.subscribesFile[key]) {\n script.subscribesFile[key] = 1;\n } else {\n script.subscribesFile[key]++;\n }\n\n if (!context.subscribedPatternsFile[key]) {\n context.subscribedPatternsFile[key] = 1;\n void adapter.subscribeForeignFiles(id, fileNamePattern);\n } else {\n context.subscribedPatternsFile[key]++;\n }\n }\n\n function unsubscribeFile(script: JsScript, id: string, fileNamePattern: string): void {\n const key = `${id}$%$${fileNamePattern}`;\n if (script.subscribesFile[key]) {\n script.subscribesFile[key]--;\n if (!script.subscribesFile[key]) {\n delete script.subscribesFile[key];\n }\n }\n\n if (context.subscribedPatternsFile[key]) {\n context.subscribedPatternsFile[key]--;\n if (!context.subscribedPatternsFile[key]) {\n void adapter.unsubscribeForeignFiles(id, fileNamePattern);\n delete context.subscribedPatternsFile[key];\n }\n }\n }\n\n function getPatternCompareFunctions(pattern: Pattern): PatternEventCompareFunction[] & { logic?: 'and' | 'or' } {\n let func: PatternEventCompareFunction;\n const functions: PatternEventCompareFunction[] & { logic?: 'and' | 'or' } = [];\n functions.logic = pattern.logic || 'and';\n\n for (const key in pattern) {\n if (!Object.prototype.hasOwnProperty.call(pattern, key)) {\n continue;\n }\n if (key === 'logic') {\n continue;\n }\n if (key === 'change' && pattern.change === 'any') {\n continue;\n }\n const _func: (pattern: Pattern) => PatternEventCompareFunction = (\n patternCompareFunctions as unknown as Record PatternEventCompareFunction>\n )[key];\n if (!_func) {\n continue;\n }\n func = _func(pattern);\n if (typeof func !== 'function') {\n continue;\n }\n functions.push(func);\n }\n return functions;\n }\n\n /**\n * Splits a selector string into attribute and value\n *\n * @param selector The selector string to split\n */\n function splitSelectorString(selector: string): Selector {\n const parts = selector.split('=', 2);\n if (parts[1] && parts[1][0] === '\"') {\n parts[1] = parts[1].substring(1);\n const len = parts[1].length;\n if (parts[1] && parts[1][len - 1] === '\"') {\n parts[1] = parts[1].substring(0, len - 1);\n }\n }\n if (parts[1] && parts[1][0] === \"'\") {\n parts[1] = parts[1].substring(1);\n const len = parts[1].length;\n if (parts[1] && parts[1][len - 1] === \"'\") {\n parts[1] = parts[1].substring(0, len - 1);\n }\n }\n\n if (parts[1]) {\n parts[1] = parts[1].trim();\n }\n parts[0] = parts[0].trim();\n\n return { attr: parts[0], value: parts[1] };\n }\n\n /**\n * Transforms a selector string with wildcards into a regular expression\n *\n * @param str The selector string to transform into a regular expression\n */\n function selectorStringToRegExp(str: string): RegExp {\n const startsWithWildcard = str[0] === '*';\n const endsWithWildcard = str[str.length - 1] === '*';\n\n // Sanitize the selector, so it is safe to use in a RegEx\n // Taken from https://stackoverflow.com/a/3561711/10179833 but modified\n // since * has a special meaning in our selector and should not be escaped\n // eslint-disable-next-line no-useless-escape\n str = str.replace(/[-\\/\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*');\n\n return new RegExp((startsWithWildcard ? '' : '^') + str + (endsWithWildcard ? '' : '$'));\n }\n\n /**\n * Adds a regular expression for selectors targeting the state ID\n *\n * @param selector The selector to apply the transform to\n */\n function addRegExpToIdAttrSelectors(selector: Selector): Selector {\n if ((selector.attr === 'id' || selector.attr === 'state.id') && !selector.idRegExp && selector.value) {\n return {\n attr: selector.attr,\n value: selector.value,\n idRegExp: selectorStringToRegExp(selector.value),\n };\n }\n return selector;\n }\n\n /**\n * Tests if a value loosely equals (==) the reference string.\n * In contrast to the equality operator, this treats true == \"true\" as well\n * so we can test common and native attributes for boolean values\n *\n * @param value The value to compare with the reference\n * @param reference The reference to compare the value to\n */\n function looselyEqualsString(value: string | number | boolean | undefined, reference: string): boolean {\n // For booleans, compare the string representation\n // For other types do a loose comparison\n return typeof value === 'boolean'\n ? (value && reference === 'true') || (!value && reference === 'false')\n : value == reference;\n }\n\n /**\n * Returns the `common.type` for a given variable\n */\n function getCommonTypeOf(value: any): ioBroker.CommonType {\n return isArray(value) ? 'array' : isObject(value) ? 'object' : (typeof value as ioBroker.CommonType);\n }\n\n /**\n * Returns if an id is in an allowed namespace for automatic object creations\n *\n * @param id id to check\n */\n function validIdForAutomaticFolderCreation(id: string): boolean {\n return id.startsWith('javascript.') || id.startsWith('0_userdata.0.') || id.startsWith('alias.0.');\n }\n\n /**\n * Iterate through object structure to create missing folder objects\n */\n async function ensureObjectStructure(id: string): Promise {\n if (!validIdForAutomaticFolderCreation(id)) {\n return;\n }\n if (context.folderCreationVerifiedObjects[id] === true) {\n return;\n }\n const idArr = id.split('.');\n idArr.pop(); // the last is created as an object in any way\n if (idArr.length < 3) {\n return; // Nothing to do\n }\n // We just create sublevel projects\n let idToCheck = idArr.splice(0, 2).join('.');\n\n context.folderCreationVerifiedObjects[id] = true;\n for (const part of idArr) {\n idToCheck += `.${part}`;\n if (context.folderCreationVerifiedObjects[idToCheck] === true || objects[idToCheck]) {\n continue;\n }\n context.folderCreationVerifiedObjects[idToCheck] = true;\n let obj: ioBroker.Object | null | undefined;\n try {\n obj = await adapter.getForeignObjectAsync(idToCheck);\n } catch {\n // ignore\n }\n if (!obj?.common) {\n sandbox.log(`Create folder object for ${idToCheck}`, 'debug');\n try {\n await adapter.setForeignObjectAsync(idToCheck, {\n _id: idToCheck,\n type: 'folder',\n common: {\n name: part,\n },\n native: {\n autocreated: 'by automatic ensure logic',\n },\n } as ioBroker.FolderObject);\n } catch (err: any) {\n sandbox.log(`Could not automatically create folder object ${idToCheck}: ${err.message}`, 'info');\n }\n } else {\n //sandbox.log(` already existing \"${idToCheck}\": ${JSON.stringify(obj)}`, 'debug');\n }\n }\n }\n\n function setStateHelper(\n sandbox: SandboxType,\n isCreate: boolean,\n isChanged: boolean,\n id: string,\n state: null | ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | 'true' | 'false' | undefined | ((error?: Error | null) => void),\n callback?: (error?: Error | null) => void,\n ): void {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n\n let stateNotNull: ioBroker.SettableState | ioBroker.StateValue;\n\n if (isAck === true || isAck === false || isAck === 'true' || isAck === 'false') {\n if (state && typeof state === 'object' && state.val !== undefined) {\n stateNotNull = state;\n // we assume that we were given a state object if\n // state is an object that contains a `val` property\n if (!Object.prototype.hasOwnProperty.call(state, 'ack')) {\n stateNotNull.ack = isAck === true || isAck === 'true';\n }\n } else if (state === null) {\n stateNotNull = { val: null, ack: isAck === true || isAck === 'true' };\n } else {\n // otherwise, assume that the given state is the value to be set\n stateNotNull = { val: state as ioBroker.StateValue, ack: isAck === true || isAck === 'true' };\n }\n } else if (state === null) {\n stateNotNull = { val: null };\n } else {\n stateNotNull = state;\n }\n\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n if (isCreate) {\n if (id.match(/^javascript\\.\\d+\\.scriptEnabled/)) {\n sandbox.log(\n `Own states (${id}) should not be used in javascript.X.scriptEnabled.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n } else if (id.match(/^javascript\\.\\d+\\.scriptProblem/)) {\n sandbox.log(\n `Own states (${id}) should not be used in javascript.X.scriptProblem.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n }\n }\n\n const common = objects[id] ? objects[id].common : null;\n if (common?.type && common.type !== 'mixed' && common.type !== 'json') {\n // Find out which type the value has\n let actualCommonType: ioBroker.CommonType | undefined;\n if (typeof stateNotNull === 'object') {\n if (stateNotNull && stateNotNull.val !== undefined && stateNotNull.val !== null) {\n actualCommonType = getCommonTypeOf(stateNotNull.val);\n }\n } else if (stateNotNull !== null && stateNotNull !== undefined) {\n actualCommonType = getCommonTypeOf(stateNotNull);\n }\n // If this is not the expected one, issue a warning\n if (actualCommonType && actualCommonType !== common.type) {\n context.logWithLineInfo(\n `You are assigning a ${actualCommonType} to the state \"${id}\" which expects a ${common.type}. ` +\n `Please fix your code to use a ${common.type} or change the state type to ${actualCommonType}. ` +\n `This warning might become an error in future versions.`,\n );\n }\n\n if (actualCommonType === 'array' || actualCommonType === 'object') {\n try {\n if (typeof stateNotNull === 'object' && typeof stateNotNull.val !== 'undefined') {\n stateNotNull.val = JSON.stringify(stateNotNull.val);\n } else {\n stateNotNull = JSON.stringify(stateNotNull);\n }\n } catch (err: any) {\n context.logWithLineInfo(\n `Could not stringify value for type ${actualCommonType} and id ${id}: ${err.message}`,\n );\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error(\n `Could not stringify value for type ${actualCommonType} and id ${id}: ${err.message}`,\n ),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n }\n }\n }\n // Check min and max of value\n if (typeof stateNotNull === 'object') {\n if (common && typeof stateNotNull.val === 'number') {\n const num: number = stateNotNull.val;\n if (common.min !== undefined && num < common.min) {\n stateNotNull.val = common.min;\n } else if (common.max !== undefined && num > common.max) {\n stateNotNull.val = common.max;\n }\n }\n } else if (common && typeof stateNotNull === 'number') {\n const num: number = stateNotNull;\n if (common.min !== undefined && num < common.min) {\n stateNotNull = common.min;\n }\n if (common.max !== undefined && num > common.max) {\n stateNotNull = common.max;\n }\n }\n\n let stateAsObject: ioBroker.State;\n // modify state here, to make it available in callback\n if (\n stateNotNull === null ||\n typeof stateNotNull !== 'object' ||\n (stateNotNull as ioBroker.SettableState).val === undefined\n ) {\n stateAsObject = context.prepareStateObject(id, {\n val: stateNotNull as ioBroker.StateValue,\n ack: isAck === true || isAck === 'true',\n });\n } else {\n stateAsObject = context.prepareStateObject(id, stateNotNull as ioBroker.SettableState);\n }\n\n // set as comment: from which script this state was set.\n stateAsObject.c = sandbox.scriptName;\n\n if (objects[id]) {\n script.setStatePerMinuteCounter++;\n if (sandbox.verbose) {\n sandbox.log(`setForeignState(id=${id}, state=${JSON.stringify(stateAsObject)})`, 'info');\n }\n\n if (debug) {\n sandbox.log(\n `setForeignState(id=${id}, state=${JSON.stringify(stateAsObject)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n } else {\n if (!(adapter.config as JavaScriptAdapterConfig).subscribe) {\n // store actual state to make possible to process value in callback\n // risk that there will be an error on setState is very low,\n // but we will not store new state if the setStateChanged is called\n if (!isChanged) {\n context.interimStateValues[id] = stateAsObject;\n }\n }\n const errHandler = (err: Error | null | undefined, funcId: string): void => {\n err && sandbox.log(`${funcId}: ${err}`, 'error');\n // If adapter holds all states\n if (err && !(adapter.config as JavaScriptAdapterConfig).subscribe) {\n delete context.interimStateValues[id];\n }\n\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n };\n if (isChanged) {\n if (!(adapter.config as JavaScriptAdapterConfig).subscribe && context.interimStateValues[id]) {\n // if the state is changed, we will compare it with interimStateValues\n const oldState = context.interimStateValues[id];\n const attrs: string[] = Object.keys(stateAsObject).filter(\n attr => attr !== 'ts' && (stateAsObject as Record)[attr] !== undefined,\n );\n if (\n !attrs.every(\n attr =>\n (stateAsObject as Record)[attr] ===\n (oldState as Record)[attr],\n )\n ) {\n // state is changed for sure, and we will call setForeignState\n // and store new state to interimStateValues\n context.interimStateValues[id] = stateAsObject;\n adapter.setForeignState(id, stateAsObject, err => errHandler(err, 'setForeignState'));\n } else {\n // otherwise - do nothing as we have cached state, except callback\n errHandler(null, 'setForeignStateCached');\n }\n } else {\n // adapter doesn't hold all states, or it has not cached then we will simply call setForeignStateChanged\n adapter.setForeignStateChanged(id, { ...stateAsObject, ts: undefined }, err =>\n errHandler(err, 'setForeignStateChanged'),\n );\n }\n } else {\n adapter.setForeignState(id, stateAsObject, err => errHandler(err, 'setForeignState'));\n }\n }\n } else {\n context.logWithLineInfo(`State \"${id}\" not found`);\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox, new Error(`State \"${id}\" not found`));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n }\n }\n\n sandbox = {\n mods,\n _id: script._id,\n // @deprecated use scriptName\n name,\n scriptName: name,\n instance: adapter.instance || 0,\n defaultDataDir: context.getAbsoluteDefaultDataDir(),\n verbose,\n exports: {}, // Polyfill for the export object in TypeScript modules\n require: function (md: string): any {\n if (typeof md === 'string' && md.startsWith('node:')) {\n md = md.replace(/^node:/, '');\n }\n\n if (md === 'request') {\n if (!sandbox.__engine.__deprecatedWarnings.includes(md)) {\n sandbox.log(\n `request package is deprecated - please use httpGet (or a stable lib like axios) instead!`,\n 'warn',\n );\n sandbox.__engine.__deprecatedWarnings.push(md);\n }\n }\n\n if (mods[md]) {\n return mods[md];\n }\n\n let error: Error | undefined;\n\n try {\n mods[md] = require(\n adapter.getAdapterScopedPackageIdentifier ? adapter.getAdapterScopedPackageIdentifier(md) : md,\n );\n return mods[md];\n } catch (e: any) {\n error = e as Error;\n }\n\n try {\n // the user requires a module which is not specified in the additional node modules\n // for backward compatibility we check if the module can simply be required directly before we fail (e.g., direct dependencies of JavaScript adapter)\n adapter.log.debug(`Try direct require of \"${md}\" as not specified in the additional dependencies`);\n mods[md] = require(md);\n\n return mods[md];\n } catch (e: any) {\n context.logError(name, `Error by loading module \"${md}\":`, error || e, 6);\n\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'require',\n });\n }\n },\n Buffer: Buffer,\n __engine: {\n __deprecatedWarnings: [],\n __subscriptionsObject: 0,\n __subscriptions: 0,\n __subscriptionsMessage: 0,\n __subscriptionsFile: 0,\n __subscriptionsLog: 0,\n __schedules: 0,\n },\n\n $: function (selector: string): iobJS.QueryResult {\n // following is supported\n // 'type[commonAttr=something]', 'id[commonAttr=something]', id(enumName=\"something\")', id{nativeName=\"something\"}\n // Type can be state, channel or device\n // Attr can be any of the common attributes and can have wildcards *\n // E.g. \"state[id='hm-rpc.0.*]\" or \"hm-rpc.0.*\" returns all states of adapter instance hm-rpc.0\n // channel(room=\"Living room\") => all states in room \"Living room\"\n // channel{TYPE=BLIND}[state.id=*.LEVEL]\n // Switch all states with .STATE of channels with role \"switch\" in \"Wohnzimmer\" to false\n // $('channel[role=switch][state.id=*.STATE](rooms=Wohnzimmer)').setState(false);\n //\n // Following functions are possible, setValue, getValue (only from first), on, each\n\n // Todo CACHE!!!\n\n const result: iobJS.QueryResult = {} as iobJS.QueryResult;\n\n let name = '';\n const commonStrings: string[] = [];\n const enumStrings: string[] = [];\n const nativeStrings: string[] = [];\n let isInsideName = true;\n let isInsideCommonString = false;\n let isInsideEnumString = false;\n let isInsideNativeString = false;\n let currentCommonString = '';\n let currentNativeString = '';\n let currentEnumString = '';\n\n // parse string\n let selectorHasInvalidType = false;\n if (typeof selector === 'string') {\n for (let i = 0; i < selector.length; i++) {\n if (selector[i] === '{') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideNativeString = true;\n } else if (selector[i] === '}') {\n isInsideNativeString = false;\n nativeStrings.push(currentNativeString);\n currentNativeString = '';\n } else if (selector[i] === '[') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideCommonString = true;\n } else if (selector[i] === ']') {\n isInsideCommonString = false;\n commonStrings.push(currentCommonString);\n currentCommonString = '';\n } else if (selector[i] === '(') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideEnumString = true;\n } else if (selector[i] === ')') {\n isInsideEnumString = false;\n enumStrings.push(currentEnumString);\n currentEnumString = '';\n } else if (isInsideName) {\n name += selector[i];\n } else if (isInsideCommonString) {\n currentCommonString += selector[i];\n } else if (isInsideEnumString) {\n currentEnumString += selector[i];\n } else if (isInsideNativeString) {\n currentNativeString += selector[i];\n } //else {\n // some error\n //}\n }\n } else {\n selectorHasInvalidType = true;\n }\n\n // If some error in the selector\n if (selectorHasInvalidType || isInsideEnumString || isInsideCommonString || isInsideNativeString) {\n result.length = 0;\n result.toArray = function () {\n return [];\n };\n result.each = function () {\n return this;\n };\n result.getState = function () {\n return null;\n };\n result.setState = function () {\n return this;\n };\n result.on = function () {\n return this;\n };\n }\n\n if (isInsideEnumString) {\n sandbox.log(`Invalid selector: enum close bracket \")\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: enum close bracket \")\" cannot be found';\n return result;\n } else if (isInsideCommonString) {\n sandbox.log(`Invalid selector: common close bracket \"]\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: common close bracket \"]\" cannot be found';\n return result;\n } else if (isInsideNativeString) {\n sandbox.log(`Invalid selector: native close bracket \"}\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: native close bracket \"}\" cannot be found';\n return result;\n } else if (selectorHasInvalidType) {\n const message = `Invalid selector: selector must be a string but is of type ${typeof selector}`;\n sandbox.log(message, 'warn');\n result.error = message;\n return result;\n }\n\n let commonSelectors: Selector[] = commonStrings.map(selector => splitSelectorString(selector));\n let nativeSelectors: Selector[] = nativeStrings.map(selector => splitSelectorString(selector));\n const enumSelectorObjects: Selector[] = enumStrings.map(_enum => splitSelectorString(_enum));\n const allSelectors: Selector[] = commonSelectors.concat(nativeSelectors, enumSelectorObjects);\n\n // These selectors match the state or object ID and don't belong in the common/native selectors\n // Also use RegExp for the ID matching\n const stateIdSelectors: Selector[] = allSelectors\n .filter(selector => selector.attr === 'state.id')\n .map(selector => addRegExpToIdAttrSelectors(selector));\n const objectIdSelectors: Selector[] = allSelectors\n .filter(selector => selector.attr === 'id')\n .map(selector => addRegExpToIdAttrSelectors(selector));\n commonSelectors = commonSelectors.filter(\n selector => selector.attr !== 'state.id' && selector.attr !== 'id',\n );\n nativeSelectors = nativeSelectors.filter(\n selector => selector.attr !== 'state.id' && selector.attr !== 'id',\n );\n const enumSelectors: string[] = enumSelectorObjects\n .filter(selector => selector.attr !== 'state.id' && selector.attr !== 'id')\n // enums are filtered by their enum id, so transform the selector into that\n .map(selector => `enum.${selector.attr}.${selector.value}`);\n\n name = name.trim();\n\n if (name === 'channel' || name === 'device') {\n // Fill the channels and devices objects with the IDs of all their states,\n // so we can loop over them afterward\n if (!context.channels || !context.devices) {\n context.channels = {};\n context.devices = {};\n for (const _id in objects) {\n if (Object.prototype.hasOwnProperty.call(objects, _id) && objects[_id].type === 'state') {\n const parts = _id.split('.');\n parts.pop();\n const chn = parts.join('.');\n\n parts.pop();\n const dev = parts.join('.');\n\n context.devices[dev] = context.devices[dev] || [];\n context.devices[dev].push(_id);\n\n context.channels[chn] = context.channels[chn] || [];\n context.channels[chn].push(_id);\n }\n }\n }\n }\n\n if (name === 'schedule') {\n if (!context.schedules) {\n context.schedules = [];\n for (const _id in objects) {\n if (Object.prototype.hasOwnProperty.call(objects, _id) && objects[_id].type === 'schedule') {\n context.schedules.push(_id);\n }\n }\n }\n }\n\n /**\n * applies all selectors targeting an object or state ID\n */\n function applyIDSelectors(objId: string, selectors: Selector[]): boolean {\n // Only keep the ID if it matches every ID selector\n return selectors.every(selector => !selector.idRegExp || selector.idRegExp.test(objId));\n }\n\n /**\n * Applies all selectors targeting the Object common properties\n *\n * @param objId - The ID of the object in question\n */\n function applyCommonSelectors(objId: string): boolean {\n const obj = objects[objId];\n if (!obj?.common) {\n return false;\n }\n const objCommon = obj.common;\n\n // make sure this object satisfies all selectors\n return commonSelectors.every(\n selector =>\n // ensure a property exists\n (selector.value === undefined && objCommon[selector.attr] !== undefined) ||\n // or match exact values\n looselyEqualsString(objCommon[selector.attr], selector.value),\n );\n }\n\n /**\n * Applies all selectors targeting the Object native properties\n *\n * @param objId - The ID of the object in question\n */\n function applyNativeSelectors(objId: string): boolean {\n const obj = objects[objId];\n if (!obj || !obj.native) {\n return false;\n }\n const objNative = obj.native;\n // make sure this object satisfies all selectors\n return nativeSelectors.every(\n selector =>\n // ensure a property exists\n (selector.value === undefined && objNative[selector.attr] !== undefined) ||\n // or match exact values\n looselyEqualsString(objNative[selector.attr], selector.value),\n );\n }\n\n /**\n * Applies all selectors targeting the Objects enums\n *\n * @param objId - The ID of the object in question\n */\n function applyEnumSelectors(objId: string): boolean {\n const enumIds: string[] = [];\n eventObj.getObjectEnumsSync(context, objId, enumIds);\n // make sure this object satisfies all selectors\n return enumSelectors.every(_enum => enumIds.includes(_enum));\n }\n\n let res: string[];\n\n if (name === 'schedule') {\n res = context.schedules || [];\n if (objectIdSelectors.length) {\n res = res.filter(channelId => applyIDSelectors(channelId, objectIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(id => applyCommonSelectors(id));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(id => applyNativeSelectors(id));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(channelId => applyEnumSelectors(channelId));\n }\n } else if (name === 'channel') {\n if (!context.channels) {\n // TODO: fill the channels and maintain them on all places where context.stateIds will be changed\n }\n const channels = context.channels || {};\n\n // go through all channels\n res = Object.keys(channels);\n // filter out those that don't match every ID selector for the channel ID\n if (objectIdSelectors.length) {\n res = res.filter(channelId => applyIDSelectors(channelId, objectIdSelectors));\n }\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(channelId => applyCommonSelectors(channelId));\n }\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(channelId => applyNativeSelectors(channelId));\n }\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(channelId => applyEnumSelectors(channelId));\n }\n\n // retrieve the state ID collection for all remaining channels\n res = res\n .map(id => channels[id])\n // and flatten the array to get only the state IDs\n .reduce((acc, next) => acc.concat(next), []);\n\n // now filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(stateId => applyIDSelectors(stateId, stateIdSelectors));\n }\n } else if (name === 'device') {\n if (!context.devices) {\n // TODO: fill the devices and maintain them on all places where context.stateIds will be changed\n }\n\n const devices = context.devices || {};\n\n // go through all devices\n res = Object.keys(devices);\n // filter out those that don't match every ID selector for the channel ID\n if (objectIdSelectors.length) {\n res = res.filter(deviceId => applyIDSelectors(deviceId, objectIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(deviceId => applyCommonSelectors(deviceId));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(deviceId => applyNativeSelectors(deviceId));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(deviceId => applyEnumSelectors(deviceId));\n }\n\n // retrieve the state ID collection for all remaining devices\n res = res\n .map(id => devices[id])\n // and flatten the array to get only the state IDs\n .reduce((acc, next) => acc.concat(next), []);\n\n // now filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(stateId => applyIDSelectors(stateId, stateIdSelectors));\n }\n } else {\n // go through all states\n res = context.stateIds;\n // if the \"name\" is not state, then we filter for the ID as well\n if (name && name !== 'state') {\n const r = new RegExp(`^${name.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*')}$`);\n res = res.filter(id => r.test(id));\n }\n\n // filter out those that don't match every ID selector for the object ID or the state ID\n if (objectIdSelectors.length) {\n res = res.filter(id => applyIDSelectors(id, objectIdSelectors));\n }\n\n // filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(id => applyIDSelectors(id, stateIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(id => applyCommonSelectors(id));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(id => applyNativeSelectors(id));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(id => applyEnumSelectors(id));\n }\n }\n\n const resUnique: string[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!resUnique.includes(res[i])) {\n resUnique.push(res[i]);\n }\n }\n\n for (let i = 0; i < resUnique.length; i++) {\n result[i] = resUnique[i];\n }\n result.length = resUnique.length;\n\n // Implementing the Symbol.iterator contract makes the query result iterable\n result[Symbol.iterator] = function* () {\n for (let i = 0; i < result.length; i++) {\n yield result[i];\n }\n };\n result.toArray = function (): string[] {\n return [...resUnique];\n };\n result.each = function (callback: (id: string, index: number) => void | false): iobJS.QueryResult {\n if (typeof callback === 'function') {\n let r: boolean | void;\n for (let i = 0; i < this.length; i++) {\n r = callback(result[i], i);\n if (r === false) {\n break;\n }\n }\n }\n return this;\n };\n // @ts-expect-error fix later\n result.getState = function (\n callback?: iobJS.GetStateCallback,\n ): void | null | undefined | iobJS.TypedState | iobJS.AbsentState {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (typeof callback !== 'function') {\n sandbox.log('You cannot use this function synchronous', 'error');\n } else {\n void adapter.getForeignState(\n this[0],\n (err: Error | null | undefined, state?: ioBroker.State | null): void => {\n void callback(\n err,\n context.convertBackStringifiedValues(this[0], state) as\n | iobJS.TypedState\n | iobJS.AbsentState,\n );\n },\n );\n }\n } else {\n if (!this[0]) {\n return null;\n }\n if (context.interimStateValues[this[0]] !== undefined) {\n return context.convertBackStringifiedValues(this[0], context.interimStateValues[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState;\n }\n return context.convertBackStringifiedValues(this[0], states[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState;\n }\n };\n result.getStateAsync = async function (): Promise<\n iobJS.TypedState | iobJS.AbsentState | null | undefined\n > {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n const state = await adapter.getForeignStateAsync(this[0]);\n return context.convertBackStringifiedValues(this[0], state) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n }\n if (!this[0]) {\n return null;\n }\n if (context.interimStateValues[this[0]] !== undefined) {\n return context.convertBackStringifiedValues(this[0], context.interimStateValues[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n }\n return context.convertBackStringifiedValues(this[0], states[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n };\n result.setState = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | 'false' | 'true' | null | iobJS.SetStateCallback,\n callback?: iobJS.SetStateCallback,\n ) {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n void result\n .setStateAsync(state, isAck as boolean | 'false' | 'true')\n .then(() => typeof callback === 'function' && callback());\n return this;\n };\n result.setStateAsync = async function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n for (let i = 0; i < this.length; i++) {\n await sandbox.setStateAsync(this[i], state, isAck);\n }\n };\n result.setStateChanged = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n callback?: () => void,\n ) {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n void result.setStateChangedAsync(state, isAck).then(() => typeof callback === 'function' && callback());\n return this;\n };\n result.setStateChangedAsync = async function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n for (let i = 0; i < this.length; i++) {\n await sandbox.setStateChangedAsync(this[i], state, isAck);\n }\n };\n result.setStateDelayed = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | number | undefined,\n delay?: number | boolean,\n clearRunning?: boolean | (() => void),\n callback?: () => void,\n ) {\n if (typeof isAck !== 'boolean') {\n callback = clearRunning as () => void;\n clearRunning = delay as boolean;\n delay = isAck as number;\n isAck = undefined;\n }\n if (typeof delay !== 'number') {\n callback = clearRunning as () => void;\n clearRunning = delay;\n delay = 0;\n }\n if (typeof clearRunning !== 'boolean') {\n callback = clearRunning;\n clearRunning = true;\n }\n let count = this.length;\n for (let i = 0; i < this.length; i++) {\n sandbox.setStateDelayed(this[i], state, isAck as boolean, delay, clearRunning, () => {\n if (!--count && typeof callback === 'function') {\n callback();\n }\n });\n }\n return this;\n };\n result.on = function (callbackOrId: string | ((data: any) => void), value?: any) {\n for (let i = 0; i < this.length; i++) {\n sandbox.subscribe(this[i], callbackOrId, value);\n }\n return this;\n };\n return result;\n },\n log: function (msg: string, severity?: ioBroker.LogLevel): void {\n severity = severity || 'info';\n\n // disable log in log handler (prevent endless loops)\n if (sandbox.logHandler && (sandbox.logHandler === severity || sandbox.logHandler === '*')) {\n return;\n }\n\n if (!adapter.log[severity]) {\n msg = `Unknown severity level \"${severity}\" by log of [${msg}]`;\n severity = 'warn';\n }\n\n if (msg && typeof msg !== 'string') {\n msg = mods.util.format(msg);\n }\n\n if (debugMode) {\n console.log(`${severity}$$${name}$$${msg}`, Date.now());\n } else {\n adapter.log[severity](`${name}: ${msg}`);\n }\n },\n onLog: function (severity: ioBroker.LogLevel, callback: (info: LogMessage) => void): number {\n if (!['info', 'error', 'debug', 'silly', 'warn', '*'].includes(severity)) {\n sandbox.log(`Unknown severity \"${severity}\"`, 'warn');\n return 0;\n }\n if (typeof callback !== 'function') {\n sandbox.log(`Invalid callback for onLog`, 'warn');\n return 0;\n }\n\n const handler = { id: Date.now() + Math.floor(Math.random() * 10000), cb: callback, sandbox, severity };\n context.logSubscriptions[sandbox.scriptName] = context.logSubscriptions[sandbox.scriptName] || [];\n context.logSubscriptions[sandbox.scriptName].push(handler);\n context.updateLogSubscriptions();\n\n sandbox.__engine.__subscriptionsLog += 1;\n\n sandbox.verbose &&\n sandbox.log(\n `onLog(severity=${severity}, id=${handler.id}) - logSubscriptions=${sandbox.__engine.__subscriptionsLog}`,\n 'info',\n );\n\n if (\n sandbox.__engine.__subscriptionsLog %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsLog} log subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n return handler.id;\n },\n onLogUnregister: function (\n idOrCallbackOrSeverity: number | ioBroker.LogLevel | ((info: LogMessage) => void),\n ): boolean {\n let found = false;\n\n if (context.logSubscriptions?.[sandbox.scriptName]) {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}) - logSubscriptions=${sandbox.__engine.__subscriptionsLog}`,\n 'info',\n );\n\n for (let i = 0; i < context.logSubscriptions[sandbox.scriptName].length; i++) {\n if (\n context.logSubscriptions[sandbox.scriptName][i].cb === idOrCallbackOrSeverity ||\n context.logSubscriptions[sandbox.scriptName][i].id === idOrCallbackOrSeverity ||\n context.logSubscriptions[sandbox.scriptName][i].severity === idOrCallbackOrSeverity\n ) {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}, removing id=${context.logSubscriptions[sandbox.scriptName][i].id})`,\n 'info',\n );\n\n context.logSubscriptions[sandbox.scriptName].splice(i, 1);\n i--;\n sandbox.__engine.__subscriptionsLog--;\n\n found = true;\n\n // if deletion via ID\n if (typeof idOrCallbackOrSeverity === 'number') {\n break;\n }\n } else {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}) NOT = ${JSON.stringify(context.logSubscriptions[sandbox.scriptName][i])}`,\n 'info',\n );\n }\n }\n }\n\n context.updateLogSubscriptions();\n\n return found;\n },\n exec: function (\n cmd: string,\n options?: ExecOptions | ((error: Error | null | string, stdout?: string, stderr?: string) => void),\n callback?: (error: Error | null | string, stdout?: string, stderr?: string) => void,\n ): undefined | ChildProcess {\n if (typeof options === 'function') {\n callback = options as (error: Error | null | string, stdout?: string, stderr?: string) => void;\n options = {};\n }\n if (!(adapter.config as JavaScriptAdapterConfig).enableExec) {\n const error = 'exec is not available. Please enable \"Enable Exec\" option in instance settings';\n sandbox.log(error, 'error');\n\n if (typeof callback === 'function') {\n setImmediate(callback, error, undefined, undefined);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`exec(cmd=${cmd})`, 'info');\n }\n\n if (debug) {\n sandbox.log(words._('Command %s was not executed, while debug mode is active', cmd), 'warn');\n if (typeof callback === 'function') {\n setImmediate(function () {\n callback(null, '', '');\n });\n }\n } else {\n return mods.child_process.exec(\n cmd,\n options,\n (error: Error | null, stdout: string, stderr: string): void => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, error, stdout, stderr);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n );\n }\n }\n },\n email: function (msg: string | SendMailOptions): void {\n if (sandbox.verbose) {\n sandbox.log(`email(msg=${JSON.stringify(msg)})`, 'info');\n }\n sandbox.log(`email(msg=${JSON.stringify(msg)}) is deprecated. Please use sendTo instead!`, 'warn');\n adapter.sendTo('email', msg);\n },\n pushover: function (msg: string | PushoverOptions): void {\n if (sandbox.verbose) {\n sandbox.log(`pushover(msg=${JSON.stringify(msg)})`, 'info');\n }\n sandbox.log(`pushover(msg=${JSON.stringify(msg)}) is deprecated. Please use sendTo instead!`, 'warn');\n adapter.sendTo('pushover', msg);\n },\n httpGet: function (\n url: string,\n options:\n | {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n }\n | ((\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void),\n callback?: (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void,\n ): void {\n if (typeof options === 'function') {\n callback = options as (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void;\n options = {};\n }\n\n const config = {\n ...getHttpRequestConfig(url, options, context.allowSelfSignedCerts),\n method: 'get',\n };\n\n if (sandbox.verbose) {\n sandbox.log(`httpGet(config=${JSON.stringify(config)})`, 'info');\n }\n\n const startTime = Date.now();\n\n mods.axios\n .default(config)\n .then((response: AxiosResponse) => {\n const responseTime = Date.now() - startTime;\n\n if (sandbox.verbose) {\n sandbox.log(`httpGet(url=${url}, responseTime=${responseTime}ms)`, 'info');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, {\n statusCode: response.status,\n data: response.data,\n headers: response.headers as Record,\n responseTime,\n });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n })\n .catch((error: any) => {\n const responseTime = Date.now() - startTime;\n\n sandbox.log(`httpGet(url=${url}, error=${error.message})`, 'error');\n\n if (typeof callback === 'function') {\n let result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n } = {\n statusCode: null,\n data: null,\n headers: {},\n responseTime,\n };\n\n if (error.response) {\n result = {\n statusCode: error.response.status,\n data: error.response.data,\n headers: error.response.headers,\n responseTime,\n };\n }\n\n try {\n callback.call(sandbox, error.message, result);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n },\n httpPost: function (\n url: string,\n data: any,\n options:\n | {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n }\n | ((\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void),\n callback?: (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void,\n ): void {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n const config = {\n ...getHttpRequestConfig(\n url,\n options as {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n context.allowSelfSignedCerts,\n ),\n method: 'post',\n data,\n };\n\n if (sandbox.verbose) {\n sandbox.log(`httpPost(config=${JSON.stringify(config)}, data=${data})`, 'info');\n }\n\n const startTime = Date.now();\n\n mods.axios\n .default(config)\n .then((response: AxiosResponse) => {\n const responseTime = Date.now() - startTime;\n\n if (sandbox.verbose) {\n sandbox.log(`httpPost(url=${url}, responseTime=${responseTime}ms)`, 'info');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, {\n statusCode: response.status,\n data: response.data,\n headers: response.headers,\n responseTime,\n });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n })\n .catch((error: unknown) => {\n const responseTime = Date.now() - startTime;\n\n sandbox.log(`httpPost(url=${url}, error=${(error as Error).message})`, 'error');\n\n if (typeof callback === 'function') {\n let result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n } = {\n statusCode: null,\n data: null,\n headers: {},\n responseTime,\n };\n const response: AxiosResponse | undefined = (error as AxiosError).response;\n\n if (response) {\n result = {\n statusCode: response.status,\n data: response.data,\n headers: response.headers,\n responseTime,\n };\n }\n\n try {\n callback.call(sandbox, new Error((error as AxiosError).message), result);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n },\n createTempFile: function (fileName: string, data: Buffer | string): undefined | string {\n const os = mods.os;\n const path = mods.path;\n const fs = mods.fs;\n\n let tempDirPath = context.tempDirectories?.[sandbox.scriptName];\n\n if (!tempDirPath) {\n // create temp directory\n tempDirPath = fs.mkdtempSync(\n path.join(os.tmpdir(), `${sandbox.scriptName.substring(SCRIPT_CODE_MARKER.length)}-`),\n );\n context.tempDirectories[sandbox.scriptName] = tempDirPath;\n\n sandbox.verbose &&\n sandbox.log(\n `createTempFile(fileName=${fileName}, tempDirPath=${tempDirPath}) created temp directory in ${os.tmpdir()}`,\n 'info',\n );\n }\n\n const filePath = path.join(tempDirPath, fileName);\n\n // is sub dir?\n const fileDir = path.dirname(filePath);\n if (!fs.existsSync(fileDir)) {\n fs.mkdirSync(fileDir, { recursive: true });\n }\n\n if (typeof data === 'undefined') {\n sandbox.log(\n `createTempFile(fileName=${fileName}, fileDir=${fileDir}, filePath=${filePath}) data is undefined, file not created!`,\n 'error',\n );\n\n return undefined;\n }\n\n fs.writeFileSync(filePath, data);\n sandbox.verbose &&\n sandbox.log(`createTempFile(fileName=${fileName}, fileDir=${fileDir}, filePath=${filePath})`, 'info');\n\n return filePath;\n },\n subscribe: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n callbackOrChangeTypeOrId: string | ChangeType | ((event?: EventObj) => void),\n value?: any,\n ):\n | SubscriptionResult\n | IobSchedule\n | string\n | null\n | undefined\n | (SubscriptionResult | IobSchedule | string | null | undefined)[] {\n // If a schedule object is given\n if (\n (typeof pattern === 'string' && pattern[0] === '{') ||\n (typeof pattern === 'object' && (pattern as SchedulerRule).period)\n ) {\n return sandbox.schedule(pattern as SchedulerRule, callbackOrChangeTypeOrId as () => void);\n }\n // If an array of schedules is given\n if (pattern && Array.isArray(pattern)) {\n const result: (IobSchedule | string | null | undefined)[] = [];\n for (const p of pattern) {\n result.push(\n sandbox.subscribe(p as SchedulerRule | string, callbackOrChangeTypeOrId, value) as\n | IobSchedule\n | string\n | null\n | undefined,\n );\n }\n return result;\n }\n\n // detect subscribe('id', 'any', (obj) => {})\n let oPattern: Pattern;\n if (\n (typeof pattern === 'string' || pattern instanceof RegExp) &&\n typeof callbackOrChangeTypeOrId === 'string' &&\n typeof value === 'function'\n ) {\n oPattern = { id: pattern, change: callbackOrChangeTypeOrId as ChangeType };\n callbackOrChangeTypeOrId = value;\n value = undefined;\n } else {\n oPattern = pattern as Pattern;\n }\n\n if (oPattern?.id && Array.isArray(oPattern.id)) {\n const result: (IobSchedule | string | null | undefined)[] = [];\n for (let t = 0; t < oPattern.id.length; t++) {\n const pa: Pattern = JSON.parse(JSON.stringify(oPattern));\n pa.id = oPattern.id[t];\n result.push(\n sandbox.subscribe(pa, callbackOrChangeTypeOrId, value) as\n | IobSchedule\n | string\n | null\n | undefined,\n );\n }\n return result;\n }\n\n // try to detect astro or cron (by spaces)\n if (isObject(pattern) || (typeof pattern === 'string' && pattern.match(/[,/\\d*]+\\s[,/\\d*]+\\s[,/\\d*]+/))) {\n if ((pattern as AstroRule).astro) {\n return sandbox.schedule(pattern as AstroRule, callbackOrChangeTypeOrId as () => void);\n } else if ((pattern as TimeRule).time) {\n return sandbox.schedule(\n (pattern as TimeRule).time as string,\n callbackOrChangeTypeOrId as () => void,\n );\n }\n }\n\n let callback: undefined | ((obj: EventObj) => void);\n\n // source is set by regexp if defined as /regexp/\n if (!isObject(pattern) || pattern instanceof RegExp || (pattern as RegExp).source) {\n oPattern = { id: pattern as string | RegExp, change: 'ne' };\n }\n\n if (oPattern.id !== undefined && !oPattern.id) {\n sandbox.log(`Error by subscription (trigger): empty ID defined. All states matched.`, 'error');\n return;\n } else if (typeof oPattern.id === 'boolean' || typeof oPattern.id === 'number') {\n sandbox.log(`Error by subscription (trigger): Wrong ID of type boolean or number.`, 'error');\n return;\n }\n\n sandbox.__engine.__subscriptions += 1;\n\n if (\n sandbox.__engine.__subscriptions % (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptions} subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n if (oPattern.q === undefined) {\n oPattern.q = 0;\n }\n\n // add adapter namespace if nothing given\n if (oPattern.id && typeof oPattern.id === 'string' && !oPattern.id.includes('.')) {\n oPattern.id = `${adapter.namespace}.${oPattern.id}`;\n }\n\n if (typeof callbackOrChangeTypeOrId === 'function') {\n callback = callbackOrChangeTypeOrId;\n } else {\n if (typeof value === 'undefined') {\n callback = function (obj: EventObj) {\n sandbox.setState(callbackOrChangeTypeOrId, obj.newState.val);\n };\n } else {\n callback = function (/* obj */) {\n sandbox.setState(callbackOrChangeTypeOrId, value);\n };\n }\n }\n\n const subs: SubscriptionResult = {\n pattern: oPattern,\n callback: (obj: EventObj) => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, obj);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n name,\n };\n\n // try to extract adapter\n if (oPattern.id && typeof oPattern.id === 'string') {\n const parts = oPattern.id.split('.');\n const a = `${parts[0]}.${parts[1]}`;\n const _adapter = `system.adapter.${a}`;\n\n if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) {\n const alive = `system.adapter.${a}.alive`;\n context.adapterSubs[alive] = context.adapterSubs[alive] || [];\n\n const subExists = context.adapterSubs[alive].filter(sub => sub === oPattern.id).length > 0;\n\n if (!subExists) {\n context.adapterSubs[alive].push(oPattern.id);\n adapter.sendTo(a, 'subscribe', oPattern.id);\n }\n }\n }\n if (sandbox.verbose) {\n sandbox.log(`subscribe: ${JSON.stringify(subs)}`, 'info');\n }\n\n subscribePattern(script, oPattern.id as string);\n\n subs.patternCompareFunctions = getPatternCompareFunctions(oPattern);\n context.subscriptions.push(subs);\n\n if (oPattern.enumName || oPattern.enumId) {\n context.isEnums = true;\n }\n return subs;\n },\n getSubscriptions: function (): Record {\n const result: Record = {};\n for (let s = 0; s < context.subscriptions.length; s++) {\n result[context.subscriptions[s].pattern.id as string] =\n result[context.subscriptions[s].pattern.id as string] || [];\n result[context.subscriptions[s].pattern.id as string].push({\n name: context.subscriptions[s].name,\n pattern: context.subscriptions[s].pattern,\n });\n }\n if (sandbox.verbose) {\n sandbox.log(`getSubscriptions() => ${JSON.stringify(result)}`, 'info');\n }\n return result;\n },\n getFileSubscriptions: function (): Record {\n const result: Record = {};\n for (let s = 0; s < context.subscriptionsFile.length; s++) {\n const key = `${context.subscriptionsFile[s].id}$%$${context.subscriptionsFile[s].fileNamePattern}`;\n result[key] = result[key] || [];\n result[key].push({\n name: context.subscriptionsFile[s].name,\n id: context.subscriptionsFile[s].id,\n fileNamePattern: context.subscriptionsFile[s].fileNamePattern,\n });\n }\n if (sandbox.verbose) {\n sandbox.log(`getFileSubscriptions() => ${JSON.stringify(result)}`, 'info');\n }\n return result;\n },\n adapterSubscribe: function (id: string): void {\n if (typeof id !== 'string') {\n sandbox.log(`adapterSubscribe: invalid type of id ${typeof id}`, 'error');\n return;\n }\n const parts = id.split('.');\n const _adapter = `system.adapter.${parts[0]}.${parts[1]}`;\n if (objects[_adapter]?.common?.subscribable) {\n const a = `${parts[0]}.${parts[1]}`;\n const alive = `system.adapter.${a}.alive`;\n context.adapterSubs[alive] = context.adapterSubs[alive] || [];\n context.adapterSubs[alive].push(id);\n if (sandbox.verbose) {\n sandbox.log(`adapterSubscribe: ${a} - ${id}`, 'info');\n }\n adapter.sendTo(a, 'subscribe', id);\n }\n },\n adapterUnsubscribe: function (\n idOrObject: string | SubscriptionResult | (string | SubscriptionResult)[],\n ): boolean | boolean[] {\n // todo: BF - it could be an error\n return sandbox.unsubscribe(idOrObject);\n },\n unsubscribe: function (\n idOrObject: string | SubscriptionResult | (string | SubscriptionResult)[],\n ): boolean | boolean[] {\n if (idOrObject && Array.isArray(idOrObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < idOrObject.length; t++) {\n result.push(sandbox.unsubscribe(idOrObject[t]) as boolean);\n }\n return result;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`adapterUnsubscribe(id=${JSON.stringify(idOrObject)})`, 'info');\n }\n\n if (isObject(idOrObject)) {\n for (let i = context.subscriptions.length - 1; i >= 0; i--) {\n if (context.subscriptions[i] === idOrObject) {\n unsubscribePattern(script, context.subscriptions[i].pattern.id as string);\n context.subscriptions.splice(i, 1);\n sandbox.__engine.__subscriptions--;\n return true;\n }\n }\n return false;\n }\n let deleted = 0;\n for (let i = context.subscriptions.length - 1; i >= 0; i--) {\n if (context.subscriptions[i].name === name && context.subscriptions[i].pattern.id === idOrObject) {\n deleted++;\n unsubscribePattern(script, context.subscriptions[i].pattern.id as string);\n context.subscriptions.splice(i, 1);\n sandbox.__engine.__subscriptions--;\n }\n }\n return !!deleted;\n },\n on: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n callbackOrChangeTypeOrId: string | ChangeType | ((event?: EventObj) => void),\n value?: any,\n ):\n | SubscriptionResult\n | IobSchedule\n | string\n | null\n | undefined\n | (SubscriptionResult | IobSchedule | string | null | undefined)[] {\n return sandbox.subscribe(pattern, callbackOrChangeTypeOrId, value);\n },\n onEnumMembers: function (enumId: string, callback: (event?: EventObj) => void): void {\n if (enums.includes(enumId)) {\n const subscriptions: Record = {};\n\n const init = (): void => {\n const obj: ioBroker.EnumObject = objects[enumId] as ioBroker.EnumObject;\n const common: ioBroker.EnumCommon = obj?.common ?? {};\n const members: string[] = common?.members ?? [];\n\n // Remove old subscriptions\n for (const [objId, subscription] of Object.entries(subscriptions)) {\n if (!members.includes(objId)) {\n sandbox.unsubscribe(subscription);\n delete subscriptions[objId];\n }\n }\n\n // Subscribe to all members of enum\n for (const objId of members) {\n if (!Object.keys(subscriptions).includes(objId)) {\n if (objects?.[objId]?.type === 'state') {\n // Just subscribe to states\n subscriptions[objId] = sandbox.subscribe(objId, callback) as\n | string\n | SubscriptionResult; // TODO: more features\n }\n }\n }\n\n sandbox.verbose &&\n sandbox.log(\n `onEnumMembers(id=${enumId}, members=${JSON.stringify(Object.keys(subscriptions))})`,\n 'info',\n );\n };\n\n init();\n\n sandbox.subscribeObject(enumId, obj => obj && init());\n } else {\n sandbox.log(`onEnumMembers: enum with id \"${enumId}\" doesn't exists`, 'error');\n }\n },\n onFile: function (\n id: string,\n fileNamePattern: string | string[],\n withFileOrCallback:\n | boolean\n | ((id: string, fileName: string, size: number, file?: string | Buffer, mimeType?: string) => void),\n callback?: (\n id: string,\n fileName: string,\n size: number | null,\n file?: string | Buffer,\n mimeType?: string,\n ) => void,\n ): undefined | FileSubscriptionResult | (undefined | FileSubscriptionResult)[] {\n if (typeof withFileOrCallback === 'function') {\n callback = withFileOrCallback as (\n id: string,\n fileName: string,\n size: number | null,\n file?: string | Buffer,\n mimeType?: string,\n ) => void;\n withFileOrCallback = false;\n }\n\n if (!adapter.subscribeForeignFiles) {\n sandbox.log(\n 'onFile: your js-controller does not support yet onFile subscribes. Please update to js-controller@4.1.x or newer',\n 'warn',\n );\n return;\n }\n if (!id || !fileNamePattern) {\n sandbox.log(\n 'onFile: invalid parameters. Usage: onFile(\"vis.0\", \"main/*\", true, (id, fileName, size, file, mimeType) => {});',\n 'error',\n );\n return;\n }\n if (typeof callback !== 'function') {\n sandbox.offFile(id, fileNamePattern);\n return;\n }\n\n if (Array.isArray(fileNamePattern)) {\n return fileNamePattern.map(\n filePattern =>\n sandbox.onFile(id, filePattern, withFileOrCallback, callback) as\n | undefined\n | FileSubscriptionResult,\n );\n }\n\n sandbox.__engine.__subscriptionsFile += 1;\n\n sandbox.verbose &&\n sandbox.log(\n `onFile(id=${id}, fileNamePattern=${fileNamePattern}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`,\n 'info',\n );\n\n if (\n sandbox.__engine.__subscriptionsFile %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsFile} file subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n let idRegEx: RegExp | undefined;\n let fileRegEx: RegExp | undefined;\n if (id.includes('*')) {\n idRegEx = new RegExp(pattern2RegEx(id));\n }\n if (fileNamePattern.includes('*')) {\n fileRegEx = new RegExp(pattern2RegEx(fileNamePattern));\n }\n\n const subs: FileSubscriptionResult = {\n id,\n fileNamePattern,\n withFile: withFileOrCallback,\n idRegEx,\n fileRegEx,\n callback: (id: string, fileName: string, size: number | null, withFile: boolean): void => {\n try {\n sandbox.verbose &&\n sandbox.log(`onFile changed(id=${id}, fileName=${fileName}, size=${size})`, 'info');\n\n if (withFile && (size || 0) > 0) {\n adapter\n .readFileAsync(id, fileName)\n .then(data => {\n try {\n callback.call(sandbox, id, fileName, size, data.file, data.mimeType);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n })\n .catch(error => errorInCallback(error));\n } else {\n callback.call(sandbox, id, fileName, size);\n }\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n },\n name,\n };\n\n context.subscriptionsFile.push(subs);\n subscribeFile(script, id, fileNamePattern);\n return subs;\n },\n offFile: function (\n idOrObject: FileSubscriptionResult | string | (FileSubscriptionResult | string)[],\n fileNamePattern?: string | string[],\n ): boolean | boolean[] {\n if (!adapter.unsubscribeForeignFiles) {\n sandbox.log(\n 'offFile: your js-controller does not support yet file unsubscribes. Please update to js-controller@4.1.x or newer',\n 'warn',\n );\n return false;\n }\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(idOrObject=${JSON.stringify(idOrObject)}, fileNamePattern=${JSON.stringify(fileNamePattern)}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`,\n 'info',\n );\n\n if (idOrObject && typeof idOrObject === 'object') {\n if (Array.isArray(idOrObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < idOrObject.length; t++) {\n result.push(sandbox.offFile(idOrObject[t]) as boolean);\n }\n return result;\n }\n for (let i = context.subscriptionsFile.length - 1; i >= 0; i--) {\n if (context.subscriptionsFile[i] === idOrObject) {\n unsubscribeFile(\n script,\n context.subscriptionsFile[i].id,\n context.subscriptionsFile[i].fileNamePattern,\n );\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(type=object, fileNamePattern=${JSON.stringify(fileNamePattern)}, removing id=${context.subscriptionsFile[i].id})`,\n 'info',\n );\n\n context.subscriptionsFile.splice(i, 1);\n sandbox.__engine.__subscriptionsFile--;\n return true;\n }\n }\n return false;\n }\n\n if (fileNamePattern && Array.isArray(fileNamePattern)) {\n const result: boolean[] = [];\n for (let t = 0; t < fileNamePattern.length; t++) {\n result.push(sandbox.offFile(idOrObject, fileNamePattern[t]) as boolean);\n }\n return result;\n }\n\n let deleted = 0;\n for (let i = context.subscriptionsFile.length - 1; i >= 0; i--) {\n if (\n context.subscriptionsFile[i].id === idOrObject &&\n context.subscriptionsFile[i].fileNamePattern === fileNamePattern\n ) {\n deleted++;\n unsubscribeFile(\n script,\n context.subscriptionsFile[i].id,\n context.subscriptionsFile[i].fileNamePattern,\n );\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(type=string, fileNamePattern=${fileNamePattern}, removing id=${context.subscriptionsFile[i].id})`,\n 'info',\n );\n\n context.subscriptionsFile.splice(i, 1);\n sandbox.__engine.__subscriptionsFile--;\n }\n }\n return !!deleted;\n },\n /** Registers a one-time subscription which automatically unsubscribes after the first invocation */\n once: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n callback?: (event?: EventObj) => void,\n ): string | SubscriptionResult | Promise {\n function _once(cb: (obj?: EventObj) => void): string | SubscriptionResult {\n // eslint-disable-next-line prefer-const\n let subscription: string | SubscriptionResult;\n const handler = (obj?: EventObj): void => {\n subscription && sandbox.unsubscribe(subscription);\n typeof cb === 'function' && cb(obj);\n };\n subscription = sandbox.subscribe(pattern, handler) as string | SubscriptionResult;\n return subscription;\n }\n if (typeof callback === 'function') {\n // Callback-style: once(\"id\", (obj) => { ... })\n return _once(callback);\n }\n\n // Promise-style: once(\"id\").then(obj => { ... })\n return new Promise(resolve => _once(resolve));\n },\n schedule: function (\n pattern: SchedulerRule | AstroRule | Date | string,\n callback: () => void,\n ): IobSchedule | string | null | undefined {\n if (typeof callback !== 'function') {\n sandbox.log(`schedule callback missing`, 'error');\n return null;\n }\n\n if (\n (typeof pattern === 'string' && pattern[0] === '{') ||\n (typeof pattern === 'object' && (pattern as SchedulerRule).period)\n ) {\n sandbox.verbose &&\n sandbox.log(\n `schedule(wizard=${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern})`,\n 'info',\n );\n\n if (!context.scheduler) {\n sandbox.log(\n `Cannot schedule \"${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern}\" because scheduler is not available`,\n 'error',\n );\n return null;\n }\n\n const schedule: string | null = context.scheduler.add(\n pattern as SchedulerRule | string,\n sandbox.scriptName,\n callback,\n );\n if (schedule) {\n script.wizards.push(schedule);\n sandbox.__engine.__schedules += 1;\n\n if (\n sandbox.__engine.__schedules %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n }\n\n return schedule;\n }\n\n const adapterConfig: JavaScriptAdapterConfig = adapter.config as JavaScriptAdapterConfig;\n\n if (typeof pattern === 'object' && (pattern as AstroRule).astro) {\n const astroPattern = pattern as AstroRule;\n const nowDate = new Date();\n\n if (\n adapterConfig.latitude === undefined ||\n adapterConfig.longitude === undefined ||\n adapterConfig.latitude === null ||\n adapterConfig.longitude === null\n ) {\n sandbox.log('Longitude or latitude does not set. Cannot use astro.', 'error');\n return null;\n }\n\n // ensure events are calculated independent of current time\n // TODO: use getAstroStartOfDay of adapter?\n const todayNoon = new Date(nowDate);\n todayNoon.setHours(12, 0, 0, 0);\n let ts = mods.suncalc.getTimes(todayNoon, adapterConfig.latitude, adapterConfig.longitude)[\n astroPattern.astro\n ];\n\n // event on the next day, correct or force recalculation at midnight\n if (todayNoon.getDate() !== ts.getDate()) {\n todayNoon.setDate(todayNoon.getDate() - 1);\n ts = mods.suncalc.getTimes(todayNoon, adapterConfig.latitude, adapterConfig.longitude)[\n astroPattern.astro\n ];\n }\n\n if (ts.getTime().toString() === 'NaN') {\n sandbox.log(\n `Cannot calculate \"${astroPattern.astro}\" for ${adapterConfig.latitude}, ${adapterConfig.longitude}`,\n 'warn',\n );\n ts = new Date(nowDate.getTime());\n\n if (\n astroPattern.astro === 'sunriseEnd' ||\n astroPattern.astro === 'goldenHourEnd' ||\n astroPattern.astro === 'sunset' ||\n astroPattern.astro === 'nightEnd' ||\n astroPattern.astro === 'nauticalDusk'\n ) {\n ts.setHours(23);\n ts.setMinutes(59);\n ts.setSeconds(59);\n } else {\n ts.setHours(23);\n ts.setMinutes(59);\n ts.setSeconds(58);\n }\n }\n\n if (ts && astroPattern.shift) {\n ts = new Date(ts.getTime() + astroPattern.shift * 60000);\n }\n\n if (!ts || ts < nowDate) {\n const date = new Date(nowDate);\n // Event doesn't occur today - try again tomorrow\n // Calculate time till 24:00 (local, NOT UTC) and set timeout\n date.setDate(date.getDate() + 1);\n date.setMinutes(0); // Sometimes timer fires at 23:59:59\n date.setHours(0);\n date.setSeconds(1);\n date.setMilliseconds(0);\n\n sandbox.__engine.__schedules += 1;\n\n if (sandbox.__engine.__schedules % adapterConfig.maxTriggersPerScript === 0) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n sandbox.verbose &&\n sandbox.log(\n `schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is tomorrow, waiting until ${date.toISOString()}`,\n 'info',\n );\n\n // Calculate new schedule in the next day\n sandbox.setTimeout(() => {\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n sandbox.schedule(astroPattern, callback);\n }, date.getTime() - Date.now());\n\n return;\n }\n\n sandbox.__engine.__schedules += 1;\n\n if (sandbox.__engine.__schedules % adapterConfig.maxTriggersPerScript === 0) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n sandbox.setTimeout(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n // Reschedule in 2 seconds\n sandbox.setTimeout(() => {\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n sandbox.schedule(astroPattern, callback);\n }, 2000);\n }, ts.getTime() - Date.now());\n\n sandbox.verbose &&\n sandbox.log(\n `schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is today, waiting until ${ts.toISOString()}`,\n 'info',\n );\n } else {\n // fix a problem with sunday and 7\n if (typeof pattern === 'string') {\n // this could be a CRON\n const parts = pattern.replace(/\\s+/g, ' ').split(' ');\n if (parts.length >= 5 && parseInt(parts[5], 10) >= 7) {\n parts[5] = '0';\n }\n pattern = parts.join(' ');\n }\n // created in VM the date object: pattern instanceof Date => false\n // so fix it\n if (typeof pattern === 'object' && (pattern as Date).getDate) {\n pattern = new Date(pattern as Date);\n }\n\n const schedule: IobSchedule = mods.nodeSchedule.scheduleJob(pattern, (): void => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n if (schedule) {\n sandbox.__engine.__schedules += 1;\n\n if (\n sandbox.__engine.__schedules %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n schedule._ioBroker = {\n type: 'cron',\n pattern: pattern as string | Date,\n scriptName: sandbox.scriptName,\n id: `cron_${Date.now()}_${Math.round(Math.random() * 100000)}`,\n };\n\n script.schedules.push(schedule);\n } else {\n sandbox.log(`schedule(cron=${JSON.stringify(pattern)}): cannot create schedule`, 'error');\n }\n\n if (sandbox.verbose) {\n sandbox.log(`schedule(cron=${JSON.stringify(pattern)})`, 'info');\n }\n\n return schedule;\n }\n },\n scheduleById: function (id: string, ack: boolean | (() => void) | undefined, callback?: () => void): void {\n let scheduleId: IobSchedule | string | null | undefined = null;\n let currentExp: string | null = null; // current cron expression\n\n if (typeof ack === 'function') {\n callback = ack;\n ack = undefined;\n }\n\n const rhms = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$/; // hh:mm:ss\n const rhm = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/; // hh:mm\n\n const init = (time: string): void => {\n if (typeof time === 'string') {\n let h: number | undefined = undefined;\n let m: number | undefined = undefined;\n let s: number | undefined = undefined;\n\n let isValid = false;\n\n let result = time.match(rhms);\n if (result) {\n [, h, m, s] = result.map(v => parseInt(v));\n isValid = true;\n } else {\n result = time.match(rhm);\n if (result) {\n [, h, m] = result.map(v => parseInt(v));\n isValid = true;\n }\n }\n\n if (isValid) {\n const cronExp = `${s ?? '0'} ${m ?? '0'} ${h ?? '0'} * * *`;\n\n if (cronExp !== currentExp) {\n sandbox.verbose &&\n sandbox.log(\n `scheduleById(id=${id}): Init with expression ${cronExp} from ${time}`,\n 'info',\n );\n currentExp = cronExp;\n\n if (scheduleId) {\n sandbox.clearSchedule(scheduleId);\n scheduleId = null;\n }\n\n scheduleId = sandbox.schedule(cronExp, () => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n }\n } else {\n sandbox.log(\n `scheduleById(id=${id},time=${time}): cannot create schedule - invalid format (HH:MM:SS or H:M:S required)`,\n 'error',\n );\n }\n } else {\n sandbox.log(\n `scheduleById(id=${id}): cannot create schedule - invalid var type (no string)`,\n 'error',\n );\n }\n };\n\n sandbox.getState(id, (err, state) => {\n if (!err && state?.val) {\n if (sandbox.verbose) {\n sandbox.log(`scheduleById(id=${id}): Init with value ${state.val}`, 'info');\n }\n init(state.val.toString());\n }\n });\n\n const triggerDef: Pattern = { id, change: 'any' };\n if (ack !== undefined) {\n triggerDef.ack = ack;\n }\n\n sandbox.on(triggerDef, obj => {\n if (obj?.state?.val) {\n sandbox.verbose &&\n sandbox.log(`scheduleById(id=${id}): Update with value ${obj.state.val}`, 'info');\n init(obj.state.val.toString());\n }\n });\n },\n getAstroDate: function (pattern: AstroEvent, date?: Date | number, offsetMinutes?: number): Date | undefined {\n if (date === undefined) {\n date = new Date();\n }\n if (typeof date === 'number') {\n date = new Date(date);\n } else {\n date = new Date(date.getTime());\n }\n\n if (!consts.astroList.includes(pattern)) {\n const pos = consts.astroListLow.indexOf(pattern.toLowerCase());\n if (pos !== -1) {\n pattern = consts.astroList[pos];\n }\n }\n\n if (\n (!(adapter.config as JavaScriptAdapterConfig).latitude &&\n ((adapter.config as JavaScriptAdapterConfig).latitude as unknown as number) !== 0) ||\n (!(adapter.config as JavaScriptAdapterConfig).longitude &&\n ((adapter.config as JavaScriptAdapterConfig).longitude as unknown as number) !== 0)\n ) {\n sandbox.log('Longitude or latitude does not set. Cannot use astro.', 'error');\n return;\n }\n\n // ensure events are calculated independent of current time\n date.setHours(12, 0, 0, 0);\n let ts = mods.suncalc.getTimes(\n date,\n (adapter.config as JavaScriptAdapterConfig).latitude,\n (adapter.config as JavaScriptAdapterConfig).longitude,\n )[pattern];\n\n if (ts === undefined || ts.getTime().toString() === 'NaN') {\n sandbox.log(\n `Cannot calculate astro date \"${pattern}\" for ${(adapter.config as JavaScriptAdapterConfig).latitude}, ${(adapter.config as JavaScriptAdapterConfig).longitude}`,\n 'warn',\n );\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getAstroDate(pattern=${pattern}, date=${date.toString()}) => ${ts}`, 'info');\n }\n\n if (offsetMinutes !== undefined) {\n ts = new Date(ts.getTime() + offsetMinutes * 60000);\n }\n return ts;\n },\n isAstroDay: function (): boolean | undefined {\n const nowDate = new Date();\n const dayBegin = sandbox.getAstroDate('sunrise');\n const dayEnd = sandbox.getAstroDate('sunset');\n\n if (dayBegin === undefined || dayEnd === undefined) {\n return;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`isAstroDay() => ${nowDate >= dayBegin && nowDate <= dayEnd}`, 'info');\n }\n\n return nowDate >= dayBegin && nowDate <= dayEnd;\n },\n clearSchedule: function (schedule: IobSchedule | ScheduleName | string): boolean {\n if (context.scheduler?.get(schedule as string | ScheduleName)) {\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => wizard cleared', 'info');\n }\n const pos = script.wizards.indexOf(schedule as string);\n if (pos !== -1) {\n script.wizards.splice(pos, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n }\n context.scheduler.remove(schedule as string | ScheduleName);\n return true;\n }\n for (let i = 0; i < script.schedules.length; i++) {\n // Support both full IobSchedule objects (with nested _ioBroker) and\n // bare _ioBroker metadata objects as returned by getSchedules()\n const ioBrokerMeta =\n schedule && typeof schedule === 'object'\n ? (schedule as IobSchedule)._ioBroker || (schedule as { type?: string; id?: string })\n : undefined;\n if (ioBrokerMeta?.type === 'cron') {\n if (script.schedules[i]._ioBroker.id === ioBrokerMeta.id) {\n if (!mods.nodeSchedule.cancelJob(script.schedules[i])) {\n sandbox.log('Error by canceling scheduled job', 'error');\n }\n script.schedules.splice(i, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => cleared', 'info');\n }\n return true;\n }\n } else if (script.schedules[i] === schedule) {\n if (!mods.nodeSchedule.cancelJob(script.schedules[i])) {\n sandbox.log('Error by canceling scheduled job', 'error');\n }\n script.schedules.splice(i, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => cleared', 'info');\n }\n return true;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => invalid handler', 'warn');\n }\n return false;\n },\n getSchedules: function (allScripts?: boolean): ScheduleName[] {\n const schedules = context.scheduler?.getList() || [];\n if (allScripts) {\n Object.keys(context.scripts).forEach(\n name =>\n context.scripts[name].schedules &&\n context.scripts[name].schedules.forEach(s =>\n schedules.push(JSON.parse(JSON.stringify(s._ioBroker))),\n ),\n );\n } else {\n script.schedules &&\n script.schedules.forEach(s => schedules.push(JSON.parse(JSON.stringify(s._ioBroker))));\n }\n return schedules;\n },\n setState: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | 'true' | 'false' | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return setStateHelper(sandbox, false, false, id, state, isAck, callback);\n },\n setStateChanged: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return setStateHelper(sandbox, false, true, id, state, isAck, callback);\n },\n setStateDelayed: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | number | undefined,\n delay?: number | boolean,\n clearRunning?: boolean | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): number | null {\n // find arguments\n if (typeof isAck !== 'boolean') {\n callback = clearRunning as (err?: Error | null) => void;\n clearRunning = delay as boolean;\n delay = isAck as number;\n isAck = undefined;\n }\n if (typeof delay !== 'number') {\n callback = clearRunning as (err?: Error | null) => void;\n clearRunning = delay as boolean;\n delay = 0;\n }\n if (typeof clearRunning !== 'boolean') {\n callback = clearRunning;\n clearRunning = true;\n }\n\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n sandbox.verbose &&\n sandbox.log(\n `setStateDelayed(id=${id}, state=${JSON.stringify(state)}, isAck=${isAck}, delay=${delay}, clearRunning=${clearRunning})`,\n 'info',\n );\n\n if (clearRunning) {\n if (timers[id]) {\n sandbox.verbose &&\n sandbox.log(`setStateDelayed: clear ${timers[id].length} running timers`, 'info');\n\n for (let i = 0; i < timers[id].length; i++) {\n clearTimeout(timers[id][i].t);\n }\n delete timers[id];\n } else {\n if (sandbox.verbose) {\n sandbox.log('setStateDelayed: no running timers', 'info');\n }\n }\n }\n // If no delay => starts immediately\n if (!delay) {\n sandbox.setState(id, state, isAck, callback);\n return null;\n }\n // If delay\n timers[id] = timers[id] || [];\n\n // calculate timerId\n context.timerId++;\n if (context.timerId > 0xfffffffe) {\n context.timerId = 0;\n }\n\n // Start timeout\n const timer = setTimeout(\n function (_timerId, _id, _state, _isAck) {\n sandbox.setState(_id, _state, _isAck, callback);\n // delete timer handler\n if (timers[_id]) {\n // optimisation\n if (timers[_id].length === 1) {\n delete timers[_id];\n } else {\n for (let t = 0; t < timers[_id].length; t++) {\n if (timers[_id][t].id === _timerId) {\n timers[_id].splice(t, 1);\n break;\n }\n }\n if (!timers[_id].length) {\n delete timers[_id];\n }\n }\n }\n },\n delay,\n context.timerId,\n id,\n state,\n isAck,\n );\n\n // add timer handler\n timers[id].push({\n t: timer,\n id: context.timerId,\n ts: Date.now(),\n delay: delay,\n val:\n isObject(state) && (state as ioBroker.SettableState).val !== undefined\n ? ((state as ioBroker.SettableState).val as ioBroker.StateValue)\n : (state as ioBroker.StateValue),\n ack:\n isObject(state) &&\n (state as ioBroker.SettableState).val !== undefined &&\n (state as ioBroker.SettableState).ack !== undefined\n ? (state as ioBroker.SettableState).ack\n : isAck,\n scriptName: name,\n });\n\n return context.timerId;\n },\n clearStateDelayed: function (id: string, timerId: number): boolean {\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`clearStateDelayed(id=${id}, timerId=${timerId})`, 'info');\n }\n\n if (timers[id]) {\n for (let i = timers[id].length - 1; i >= 0; i--) {\n if (timerId === undefined || timers[id][i].id === timerId) {\n clearTimeout(timers[id][i].t);\n if (timerId !== undefined) {\n timers[id].splice(i, 1);\n }\n if (sandbox.verbose) {\n sandbox.log(`clearStateDelayed: clear timer ${timers[id][i].id}`, 'info');\n }\n }\n }\n if (timerId === undefined) {\n delete timers[id];\n } else {\n if (!timers[id].length) {\n delete timers[id];\n }\n }\n return true;\n }\n return false;\n },\n getStateDelayed: function (\n id: string | number,\n ):\n | null\n | { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }\n | { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n | Record<\n string,\n { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n > {\n const now = Date.now();\n if (id) {\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n // If timerId given\n if (typeof id === 'number') {\n for (const _id_ in timers) {\n if (Object.prototype.hasOwnProperty.call(timers, _id_)) {\n for (let ttt = 0; ttt < timers[_id_].length; ttt++) {\n if (timers[_id_][ttt].id === id) {\n return {\n timerId: id,\n left: timers[_id_][ttt].delay - (now - timers[_id_][ttt].ts),\n delay: timers[_id_][ttt].delay,\n val: timers[_id_][ttt].val,\n ack: timers[_id_][ttt].ack,\n };\n }\n }\n }\n }\n return null;\n }\n\n const result: {\n timerId: number;\n left: number;\n delay: number;\n val: ioBroker.StateValue;\n ack?: boolean;\n }[] = [];\n if (Object.prototype.hasOwnProperty.call(timers, id) && timers[id] && timers[id].length) {\n for (let tt = 0; tt < timers[id].length; tt++) {\n result.push({\n timerId: timers[id][tt].id,\n left: timers[id][tt].delay - (now - timers[id][tt].ts),\n delay: timers[id][tt].delay,\n val: timers[id][tt].val,\n ack: timers[id][tt].ack,\n });\n }\n }\n return result;\n }\n const result: Record<\n string,\n { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n > = {};\n for (const _id in timers) {\n if (Object.prototype.hasOwnProperty.call(timers, _id) && timers[_id] && timers[_id].length) {\n result[_id] = [];\n for (let t = 0; t < timers[_id].length; t++) {\n result[_id].push({\n timerId: timers[_id][t].id,\n left: timers[_id][t].delay - (now - timers[_id][t].ts),\n delay: timers[_id][t].delay,\n val: timers[_id][t].val,\n ack: timers[_id][t].ack,\n });\n }\n }\n }\n return result;\n },\n getStateAsync: async function (id: string): Promise {\n let state: ioBroker.State | null | undefined;\n if (id.includes('.')) {\n state = await adapter.getForeignStateAsync(id);\n } else {\n state = await adapter.getStateAsync(id);\n }\n return context.convertBackStringifiedValues(id, state);\n },\n setStateAsync: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n return new Promise((resolve, reject) =>\n setStateHelper(sandbox, false, false, id, state, isAck, err => (err ? reject(err) : resolve())),\n );\n },\n setStateChangedAsync: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n return new Promise((resolve, reject) =>\n setStateHelper(sandbox, false, true, id, state, isAck, err => (err ? reject(err) : resolve())),\n );\n },\n getState: function (\n id: string,\n callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void,\n ): undefined | void | (ioBroker.State & { notExist?: true }) | null {\n if (typeof id !== 'string') {\n sandbox.log(`getState has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return undefined;\n }\n\n if (typeof callback === 'function') {\n if (!id.includes('.')) {\n adapter.getState(id, (err, state) =>\n callback(err, context.convertBackStringifiedValues(id, state)),\n );\n } else {\n void adapter.getForeignState(id, (err, state) =>\n callback(err, context.convertBackStringifiedValues(id, state)),\n );\n }\n } else {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n sandbox.log(\n 'The \"getState\" method cannot be used synchronously, because the adapter setting \"Do not subscribe to all states on start\" is enabled.',\n 'error',\n );\n sandbox.log(\n `Please disable that setting or use \"getState\" with a callback, e.g.: getState('${id}', (err, state) => { ... });`,\n 'error',\n );\n } else {\n if (states[id]) {\n sandbox.verbose &&\n sandbox.log(\n `getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[id])}`,\n 'info',\n );\n if (context.interimStateValues[id] !== undefined) {\n return context.convertBackStringifiedValues(id, context.interimStateValues[id]);\n }\n return context.convertBackStringifiedValues(id, states[id]);\n } else if (states[`${adapter.namespace}.${id}`]) {\n sandbox.verbose &&\n sandbox.log(\n `getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[`${adapter.namespace}.${id}`])}`,\n 'info',\n );\n if (context.interimStateValues[`${adapter.namespace}.${id}`] !== undefined) {\n return context.convertBackStringifiedValues(\n id,\n context.interimStateValues[`${adapter.namespace}.${id}`],\n );\n }\n return context.convertBackStringifiedValues(id, states[`${adapter.namespace}.${id}`]);\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => not found`, 'info');\n }\n\n context.logWithLineInfo(\n `getState \"${id}\" not found (3)${states[id] !== undefined ? ` states[id]=${JSON.stringify(states[id])}` : ''}`,\n ); ///xxx\n return { val: null, notExist: true } as ioBroker.State & { notExist?: true };\n }\n }\n },\n existsState: function (\n id: string,\n callback?: (err: Error | null | undefined, stateExists?: boolean) => void,\n ): void | boolean {\n if (typeof id !== 'string') {\n sandbox.log(`existsState has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return false;\n }\n\n if (typeof callback === 'function') {\n void adapter.getForeignObject(id, (err, obj) => {\n if (!obj || obj.type !== 'state') {\n callback(err, false);\n return;\n }\n\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n void adapter.getForeignState(id, (err, state) => {\n callback(err, !!state);\n });\n } else {\n callback(err, !!states[id]);\n }\n });\n } else {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n sandbox.log(\n 'The \"existsState\" method cannot be used synchronously, because the adapter setting \"Do not subscribe to all states on start\" is enabled.',\n 'error',\n );\n sandbox.log(\n `Please disable that setting or use \"existsState\" with a callback, e.g.: existsState('${id}', (err, stateExists) => { ... });`,\n 'error',\n );\n } else {\n return !!states[id];\n }\n }\n },\n existsObject: function (\n id: string,\n callback?: (err: Error | null | undefined, objectExists?: boolean) => void,\n ): void | boolean {\n if (typeof id !== 'string') {\n sandbox.log(\n `existsObject has been called with id of type \"${typeof id}\" but expects a string`,\n 'error',\n );\n return false;\n }\n\n if (typeof callback === 'function') {\n void adapter.getForeignObject(id, (err, obj) => callback(err, !!obj));\n } else {\n return !!objects[id];\n }\n },\n getIdByName: function (name: string, alwaysArray?: boolean): string | string[] | null {\n sandbox.verbose &&\n sandbox.log(\n `getIdByName(name=${name}, alwaysArray=${alwaysArray}) => ${JSON.stringify(context.names[name])}`,\n 'info',\n );\n if (Object.prototype.hasOwnProperty.call(context.names, name)) {\n if (alwaysArray) {\n return !Array.isArray(context.names[name]) ? [context.names[name]] : context.names[name];\n }\n return context.names[name];\n }\n if (alwaysArray) {\n return [];\n }\n return null;\n },\n getObject: function (\n id: string,\n enumName: null | string | ((err: Error | null | undefined, obj?: ioBroker.Object | null) => void),\n cb?: (err: Error | null | undefined, obj?: ioBroker.Object | null) => void,\n ): void | ioBroker.Object | null {\n if (typeof id !== 'string') {\n sandbox.log(`getObject has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return null;\n }\n\n if (typeof enumName === 'function') {\n cb = enumName;\n enumName = null;\n }\n // with callback\n if (typeof cb === 'function') {\n void adapter.getForeignObject(id, (err, obj) => {\n if (obj) {\n objects[id] = obj;\n } else if (objects[id]) {\n delete objects[id];\n }\n let result: ioBroker.Object | null | undefined;\n try {\n result = JSON.parse(JSON.stringify(objects[id]));\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getObject',\n });\n sandbox.log(`Object \"${id}\" can't be copied: ${JSON.stringify(err)}`, 'error');\n return cb(null, null);\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n cb(err, result);\n });\n } else {\n if (!objects[id]) {\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => does not exist`, 'info');\n sandbox.log(`Object \"${id}\" does not exist`, 'warn');\n return null;\n }\n if (enumName) {\n const e = eventObj.getObjectEnumsSync(context, id);\n const obj = JSON.parse(JSON.stringify(objects[id]));\n obj.enumIds = JSON.parse(JSON.stringify(e.enumIds));\n obj.enumNames = JSON.parse(JSON.stringify(e.enumNames));\n if (typeof enumName === 'string') {\n const r = new RegExp(`^enum\\\\.${enumName}\\\\.`);\n for (let i = obj.enumIds.length - 1; i >= 0; i--) {\n if (!r.test(obj.enumIds[i])) {\n obj.enumIds.splice(i, 1);\n obj.enumNames.splice(i, 1);\n }\n }\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(obj)}`, 'info');\n\n return obj;\n }\n let result: ioBroker.Object | null | undefined;\n try {\n result = JSON.parse(JSON.stringify(objects[id]));\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getObject',\n });\n sandbox.log(`Object \"${id}\" can't be copied: ${JSON.stringify(err)}`, 'error');\n return null;\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n return result;\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n setObject: function (\n _id: string,\n _obj: ioBroker.Object,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n sandbox.log('Function \"setObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"setObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n extendObject: function (\n _id: string,\n _obj: Partial,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n sandbox.log('Function \"extendObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"extendObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n deleteObject: function (\n _id: string,\n _isRecursive?: boolean | ioBroker.ErrorCallback,\n callback?: ioBroker.ErrorCallback,\n ): void {\n if (typeof _isRecursive === 'function') {\n callback = _isRecursive;\n }\n sandbox.log('Function \"deleteObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"deleteObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n getEnums: function (enumName?: string): { id: string; members: string[]; name: ioBroker.StringOrTranslated }[] {\n const result: { id: string; members: string[]; name: ioBroker.StringOrTranslated }[] = [];\n const r = enumName ? new RegExp(`^enum\\\\.${enumName}\\\\.`) : false;\n for (let i = 0; i < enums.length; i++) {\n if (!r || r.test(enums[i])) {\n const common: ioBroker.EnumCommon =\n (objects[enums[i]] as ioBroker.EnumObject).common || ({} as ioBroker.EnumCommon);\n result.push({\n id: enums[i],\n members: common.members || [],\n name: common.name || '',\n });\n }\n }\n if (sandbox.verbose) {\n sandbox.log(`getEnums(enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n }\n return JSON.parse(JSON.stringify(result));\n },\n createAlias: function (\n name: string,\n alias: string | CommonAlias,\n forceCreation: boolean | Partial | ((err: Error | null) => void) | undefined,\n common?: Partial | Record | ((err: Error | null) => void),\n native?: Record | ((err: Error | null) => void),\n callback?: (err: Error | null) => void,\n ) {\n if (typeof native === 'function') {\n callback = native as (err: Error | null) => void;\n native = {};\n }\n if (typeof common === 'function') {\n callback = common as (err: Error | null) => void;\n common = undefined;\n }\n if (typeof forceCreation === 'function') {\n callback = forceCreation as (err: Error | null) => void;\n forceCreation = undefined;\n }\n if (isObject(forceCreation)) {\n native = common;\n common = forceCreation as Partial;\n forceCreation = undefined;\n }\n\n if (typeof name !== 'string') {\n const err = `Wrong type of name \"${typeof name}\". Expected \"string\".`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name) {\n const err = 'Empty ID is not allowed.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name.startsWith('alias.0.')) {\n name = `alias.0.${name}`;\n }\n\n const _common: Partial = (common as Partial) || {};\n if (isObject(_common.alias)) {\n // alias already in common, use this\n } else if (\n isObject(alias) &&\n (typeof (alias as CommonAlias).id === 'string' || isObject((alias as CommonAlias).id))\n ) {\n _common.alias = alias as CommonAlias;\n } else if (typeof alias === 'string') {\n _common.alias = { id: alias };\n } else {\n const err = 'Source ID needs to be provided as string or object with id property.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n let aliasSourceId = '';\n if (_common.alias) {\n aliasSourceId = isObject(_common.alias.id)\n ? (_common.alias.id as { read: string; write: string }).read\n : (_common.alias.id as string);\n if (!objects[aliasSourceId] && objects[`${adapter.namespace}.${aliasSourceId}`]) {\n aliasSourceId = `${adapter.namespace}.${aliasSourceId}`;\n if (isObject(_common.alias.id)) {\n (_common.alias.id as { read: string; write: string }).read = aliasSourceId;\n } else {\n _common.alias.id = aliasSourceId;\n }\n }\n if (\n isObject(_common.alias.id) &&\n (_common.alias.id as { read: string; write: string }).write &&\n !objects[(_common.alias.id as { read: string; write: string }).write] &&\n objects[`${adapter.namespace}.${(_common.alias.id as { read: string; write: string }).write}`]\n ) {\n (_common.alias.id as { read: string; write: string }).write =\n `${adapter.namespace}.${(_common.alias.id as { read: string; write: string }).write}`;\n }\n }\n const obj = objects[aliasSourceId];\n if (!obj) {\n const err = `Alias source object \"${aliasSourceId}\" does not exist.`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n if (obj.type !== 'state') {\n const err = `Alias source object \"${aliasSourceId}\" must be a state object.`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n if (_common.name === undefined) {\n _common.name = obj.common.name || name;\n }\n if (_common.type === undefined && obj.common.type !== undefined) {\n _common.type = obj.common.type;\n }\n if (_common.role === undefined && obj.common.role !== undefined) {\n _common.role = obj.common.role;\n }\n if (_common.min === undefined && obj.common.min !== undefined) {\n _common.min = obj.common.min;\n }\n if (_common.max === undefined && obj.common.max !== undefined) {\n _common.max = obj.common.max;\n }\n if (_common.step === undefined && obj.common.step !== undefined) {\n _common.step = obj.common.step;\n }\n if (_common.unit === undefined && obj.common.unit !== undefined) {\n _common.unit = obj.common.unit;\n }\n if (_common.desc === undefined && obj.common.desc !== undefined) {\n _common.desc = obj.common.desc;\n }\n\n return sandbox.createState(\n name,\n undefined,\n forceCreation as boolean,\n _common,\n native,\n callback as (err?: Error | null) => void,\n );\n },\n createState: async function (\n name: string,\n initValue: undefined | ioBroker.StateValue | ioBroker.State,\n forceCreation:\n | boolean\n | undefined\n | Record\n | Partial\n | ((err: Error | null) => void),\n common?: Partial | ((err: Error | null) => void),\n native?: Record | ((err: Error | null) => void),\n callback?: (error: Error | null | undefined, id?: string) => void,\n ) {\n if (typeof native === 'function') {\n callback = native as (err?: Error | null) => void;\n native = {};\n }\n if (typeof common === 'function') {\n callback = common as (err?: Error | null) => void;\n common = undefined;\n }\n if (typeof initValue === 'function') {\n callback = initValue as (err?: Error | null) => void;\n initValue = undefined;\n }\n if (typeof forceCreation === 'function') {\n callback = forceCreation as (err?: Error | null) => void;\n forceCreation = undefined;\n }\n if (isObject(initValue)) {\n common = initValue as Partial;\n native = forceCreation as Record;\n forceCreation = undefined;\n initValue = undefined;\n }\n if (isObject(forceCreation)) {\n native = common as Record;\n common = forceCreation as Partial;\n forceCreation = undefined;\n }\n\n if (typeof name !== 'string') {\n const err = `Wrong type of name \"${typeof name}\". Expected \"string\".`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name) {\n const err = 'Empty ID is not allowed.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n const isAlias = name.startsWith('alias.0.');\n\n const _common: ioBroker.StateCommon = (common || {}) as ioBroker.StateCommon;\n _common.name = _common.name || name;\n _common.role = _common.role || 'state';\n _common.type = _common.type || 'mixed';\n if (!isAlias && initValue === undefined) {\n initValue = _common.def;\n }\n\n native = native || {};\n\n // Check min, max and def values for number\n if (_common.type !== undefined && _common.type === 'number') {\n let min = 0;\n let max = 0;\n let def = 0;\n let err: string | undefined;\n if (_common.min !== undefined) {\n min = _common.min;\n if (typeof min !== 'number') {\n min = parseFloat(min);\n if (isNaN(min)) {\n err = `Wrong type of ${name}.common.min`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.min = min;\n }\n }\n if (_common.max !== undefined) {\n max = _common.max;\n if (typeof max !== 'number') {\n max = parseFloat(max);\n if (isNaN(max)) {\n err = `Wrong type of ${name}.common.max`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.max = max;\n }\n }\n\n if (_common.def !== undefined) {\n if (isAlias) {\n delete _common.def;\n } else {\n def = _common.def;\n if (typeof def !== 'number') {\n def = parseFloat(def);\n if (isNaN(def)) {\n err = `Wrong type of ${name}.common.def`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.def = def;\n }\n }\n }\n\n if (_common.min !== undefined && _common.max !== undefined && min > max) {\n _common.max = min;\n _common.min = max;\n }\n if (_common.def !== undefined && _common.min !== undefined && def < min) {\n _common.def = min;\n }\n if (_common.def !== undefined && _common.max !== undefined && def > max) {\n _common.def = max;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log(\n `createState(name=${name}, initValue=${JSON.stringify(initValue)}, forceCreation=${JSON.stringify(forceCreation)}, common=${JSON.stringify(common)}, native=${JSON.stringify(native)}, isAlias=${isAlias})`,\n 'debug',\n );\n }\n\n let id = `${adapter.namespace}.${name}`;\n if (name.match(/^javascript\\.\\d+\\./) || name.startsWith('0_userdata.0.') || isAlias) {\n id = name;\n }\n if (id.match(/^javascript\\.\\d+\\.scriptEnabled/)) {\n sandbox.log(\n `Own states (${id}) should not be created in javascript.X.scriptEnabled.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n } else if (id.match(/^javascript\\.\\d+\\.scriptProblem/)) {\n sandbox.log(\n `Own states (${id}) should not be created in javascript.X.scriptProblem.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n }\n\n // User can create aliases by two ways:\n // - id is starting with \"alias.0.\" and common.alias.id is set, so the state defined in common.alias.id will be created automatically if not exists\n // - id is not starting with \"alias.0.\", but common.alias is set, so the state defined in common.alias will be created automatically if not exists\n if (!isAlias && _common.alias) {\n // check and create if not exists the alias\n let alias: CommonAlias;\n if (typeof _common.alias === 'string') {\n alias = {\n id: _common.alias,\n };\n } else if (typeof _common.alias === 'boolean') {\n const parts = id.split('.');\n parts[0] = 'alias';\n parts[1] = '0';\n\n alias = {\n id: parts.join('.'),\n };\n } else {\n alias = _common.alias;\n }\n delete _common.alias;\n\n if (!(alias.id as string).startsWith('alias.0.')) {\n alias.id = `alias.0.${alias.id as string}`;\n }\n\n let aObj: ioBroker.StateObject | null | undefined;\n try {\n aObj = (await adapter.getForeignObjectAsync(alias.id as string)) as\n | ioBroker.StateObject\n | null\n | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n const _obj: ioBroker.StateObject = {\n _id: alias.id as string,\n type: 'state',\n common: {\n name: `Alias to ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n alias: {\n id,\n read: alias.read,\n write: alias.write,\n },\n },\n native: {},\n };\n\n await adapter.setForeignObjectAsync(alias.id as string, _obj);\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${alias.id as string}\": ${err as Error}`, 'error');\n }\n }\n } else if (isAlias && _common.alias) {\n if (typeof _common.alias === 'string') {\n _common.alias = {\n id: _common.alias,\n };\n }\n const readId = typeof _common.alias.id === 'string' ? _common.alias.id : _common.alias.id.read;\n let writeId: string | undefined =\n typeof _common.alias.id === 'string' ? _common.alias.id : _common.alias.id.write;\n if (writeId === readId) {\n writeId = undefined;\n }\n // try to create the linked states\n let aObj: ioBroker.StateObject | null | undefined;\n try {\n aObj = (await adapter.getForeignObjectAsync(readId)) as ioBroker.StateObject | null | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n await adapter.setForeignObjectAsync(readId, {\n type: 'state',\n common: {\n name: `State for ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n },\n native: {},\n });\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${readId}\": ${err as Error}`, 'error');\n }\n }\n if (writeId && _common.write !== false) {\n try {\n aObj = (await adapter.getForeignObjectAsync(writeId)) as\n | ioBroker.StateObject\n | null\n | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n await adapter.setForeignObjectAsync(writeId, {\n type: 'state',\n common: {\n name: `Write state for ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n },\n native: {},\n });\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${writeId}\": ${err as Error}`, 'error');\n }\n }\n }\n }\n\n let obj: ioBroker.Object | null | undefined;\n try {\n obj = await adapter.getForeignObjectAsync(id);\n } catch {\n // ignore\n }\n\n if (\n obj?._id &&\n validIdForAutomaticFolderCreation(obj._id) &&\n obj.type === 'folder' &&\n obj.native &&\n obj.native.autocreated === 'by automatic ensure logic'\n ) {\n // ignore a default created object because we now have a better defined one\n obj = null;\n }\n\n if (!obj || forceCreation) {\n // create new one\n const newObj: ioBroker.StateObject = {\n _id: id,\n common: _common,\n native,\n type: 'state',\n };\n try {\n await adapter.setForeignObjectAsync(id, newObj);\n } catch (err: unknown) {\n sandbox.log(`Cannot set object \"${id}\": ${err as Error}`, 'warn');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err as Error);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n // Update meta objects\n context.updateObjectContext(id, newObj);\n\n if (!isAlias && initValue !== undefined) {\n if (isObject(initValue) && (initValue as ioBroker.State).ack !== undefined) {\n setStateHelper(sandbox, true, false, id, initValue, callback);\n } else {\n setStateHelper(sandbox, true, false, id, initValue, true, callback);\n }\n } else if (!isAlias && !forceCreation) {\n setStateHelper(sandbox, true, false, id, null, callback);\n } else if (isAlias) {\n try {\n const state = await adapter.getForeignStateAsync(id);\n if (state) {\n states[id] = state;\n }\n } catch {\n // ignore\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n } else if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n await ensureObjectStructure(id);\n } else {\n // state yet exists\n if (\n !(adapter.config as JavaScriptAdapterConfig).subscribe &&\n !states[id] &&\n states[`${adapter.namespace}.${id}`] === undefined\n ) {\n states[id] = {\n val: null,\n ack: true,\n lc: Date.now(),\n ts: Date.now(),\n q: 0,\n from: `system.adapter.${adapter.namespace}`,\n };\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n\n await ensureObjectStructure(id);\n }\n },\n deleteState: function (id: string, callback?: (err: Error | null | undefined, found?: boolean) => void): void {\n // todo: check rights\n // todo: also remove from \"names\"\n\n if (sandbox.verbose) {\n sandbox.log(`deleteState(id=${id})`, 'debug');\n }\n\n let found = false;\n if ((id.startsWith('0_userdata.0.') || id.startsWith(adapter.namespace)) && objects[id]) {\n found = true;\n delete objects[id];\n if (states[id]) {\n delete states[id];\n }\n\n adapter.delForeignObject(id, function (err) {\n err && sandbox.log(`Object for state \"${id}\" does not exist: ${err}`, 'warn');\n\n adapter.delForeignState(id, function (err) {\n err && sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n });\n } else if (objects[`${adapter.namespace}.${id}`]) {\n delete objects[`${adapter.namespace}.${id}`];\n found = true;\n if (states[`${adapter.namespace}.${id}`]) {\n delete states[`${adapter.namespace}.${id}`];\n }\n\n adapter.delObject(id, function (err) {\n err && sandbox.log(`Object for state \"${id}\" does not exist: ${err}`, 'warn');\n\n adapter.delState(id, function (err) {\n err && sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n });\n } else {\n const err = 'Not found';\n sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err), found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n }\n },\n sendTo: function (\n _adapter: string,\n cmd: string,\n msg?: any,\n options?: Record | ((result: any, options: Record, _adapter: string) => void),\n callback?: (result: any, options: Record, _adapter: string) => void,\n ): void {\n const defaultTimeout = 20000;\n\n if (typeof options === 'function') {\n callback = options as (result: any, options: Record, _adapter: string) => void;\n options = { timeout: defaultTimeout };\n }\n\n let timeout: NodeJS.Timeout | null = null;\n if (typeof callback === 'function') {\n const timeoutDuration = parseInt(options?.timeout, 10) || defaultTimeout;\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (sandbox.verbose) {\n sandbox.log(`sendTo => timeout: ${timeoutDuration}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, { error: 'timeout' }, options as Record, _adapter);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutDuration);\n }\n\n let cbFunc: undefined | ((result: any) => void);\n if (timeout) {\n cbFunc = function (result: any): void {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n if (sandbox.verbose && result) {\n sandbox.log(`sendTo => ${JSON.stringify(result)}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, result, options as Record, _adapter);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n };\n }\n\n // If specific instance\n if (_adapter.match(/\\.[0-9]+$/)) {\n sandbox.verbose &&\n sandbox.log(\n `sendTo(instance=${_adapter}, cmd=${cmd}, msg=${JSON.stringify(msg)}, hasCallback=${typeof callback === 'function'})`,\n 'info',\n );\n\n adapter.sendTo(_adapter, cmd, msg, cbFunc, options);\n } else {\n // Send it to all instances\n context.adapter.getObjectView(\n 'system',\n 'instance',\n { startkey: `system.adapter.${_adapter}.`, endkey: `system.adapter.${_adapter}.\\u9999` },\n options,\n (err, res) => {\n if (err || !res) {\n sandbox.log(`sendTo failed: ${err?.message}`, 'error');\n return;\n }\n\n const instances = res.rows.map(item => item.id.substring('system.adapter.'.length));\n\n instances.forEach(instance => {\n sandbox.verbose &&\n sandbox.log(\n `sendTo(instance=${instance}, cmd=${cmd}, msg=${JSON.stringify(msg)}, hasCallback=${typeof callback === 'function'})`,\n 'info',\n );\n adapter.sendTo(instance, cmd, msg, cbFunc, options);\n });\n },\n );\n }\n },\n sendto: function (\n _adapter: string,\n cmd: string,\n msg: any,\n callback?: (result: any, options: Record, _adapter: string) => void,\n ): void {\n return sandbox.sendTo(_adapter, cmd, msg, callback);\n },\n sendToAsync: function (_adapter: string, cmd: string, msg?: any, options?: Record): Promise {\n return new Promise((resolve, reject) => {\n sandbox.sendTo(_adapter, cmd, msg, options, res => {\n if (!res || res.error) {\n reject(res ? new Error(res.error) : new Error('Unknown error'));\n } else {\n resolve(res);\n }\n });\n });\n },\n sendToHost: function (host: string, cmd: string, msg?: any, callback?: (result: any) => void): void {\n if (!(adapter.config as JavaScriptAdapterConfig).enableSendToHost) {\n const error =\n 'sendToHost is not available. Please enable \"Enable SendToHost\" option in instance settings';\n sandbox.log(error, 'error');\n\n if (typeof callback === 'function') {\n // leave it as a normal function and not as a lambda, to hide the \"this\" object\n setImmediate(function () {\n callback(error);\n });\n }\n } else {\n sandbox.verbose &&\n sandbox.log(`sendToHost(adapter=${host}, cmd=${cmd}, msg=${JSON.stringify(msg)})`, 'info');\n adapter.sendToHost(host, cmd, msg, callback);\n }\n },\n sendToHostAsync: function (host: string, cmd: string, msg?: any): Promise {\n return new Promise((resolve, reject) => {\n sandbox.sendToHost(host, cmd, msg, res => {\n if (!res || res.error) {\n reject(res ? new Error(res.error) : new Error('Unknown error'));\n } else {\n resolve(res);\n }\n });\n });\n },\n registerNotification: function (msg: string, isAlert?: boolean): void {\n const category = !isAlert ? 'scriptMessage' : 'scriptAlert';\n\n if (sandbox.verbose) {\n sandbox.log(`registerNotification(msg=${msg}, category=${category})`, 'info');\n }\n\n void adapter.registerNotification('javascript', category, msg);\n },\n setInterval: function (callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout | null {\n if (typeof callback === 'function') {\n const int: NodeJS.Timeout = setInterval(() => {\n try {\n callback.call(sandbox, ...args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, ms);\n script.intervals.push(int);\n\n if (sandbox.verbose) {\n sandbox.log(`setInterval(ms=${ms})`, 'info');\n }\n return int;\n }\n sandbox.log(`Invalid callback for setInterval! - ${typeof callback}`, 'error');\n return null;\n },\n clearInterval: function (id: NodeJS.Timeout): void {\n const pos = script.intervals.indexOf(id);\n if (pos !== -1) {\n if (sandbox.verbose) {\n sandbox.log('clearInterval() => cleared', 'info');\n }\n clearInterval(id);\n script.intervals.splice(pos, 1);\n } else {\n if (sandbox.verbose) {\n sandbox.log('clearInterval() => not found', 'warn');\n }\n }\n },\n setTimeout: function (callback: (args?: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout | null {\n if (typeof callback === 'function') {\n const to = setTimeout(() => {\n // Remove timeout from the list\n const pos = script.timeouts.indexOf(to);\n if (pos !== -1) {\n script.timeouts.splice(pos, 1);\n }\n\n try {\n callback.call(sandbox, ...args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, ms);\n if (sandbox.verbose) {\n sandbox.log(`setTimeout(ms=${ms})`, 'info');\n }\n\n script.timeouts.push(to);\n return to;\n }\n sandbox.log(`Invalid callback for setTimeout! - ${typeof callback}`, 'error');\n return null;\n },\n clearTimeout: function (id: NodeJS.Timeout): void {\n const pos = script.timeouts.indexOf(id);\n if (pos !== -1) {\n if (sandbox.verbose) {\n sandbox.log('clearTimeout() => cleared', 'info');\n }\n clearTimeout(id);\n script.timeouts.splice(pos, 1);\n } else {\n if (sandbox.verbose) {\n sandbox.log('clearTimeout() => not found', 'warn');\n }\n }\n },\n setImmediate: function (callback: (..._args: any[]) => void, ...args: any[]): void {\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.apply(sandbox, args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n if (sandbox.verbose) {\n sandbox.log('setImmediate()', 'info');\n }\n } else {\n sandbox.log(`Invalid callback for setImmediate! - ${typeof callback}`, 'error');\n }\n },\n cb: function (callback: (..._args: any[]) => void): (...args: any[]) => void {\n return function (args: any[]) {\n if (context.scripts[name]?._id === sandbox._id) {\n if (typeof callback === 'function') {\n try {\n callback.apply(sandbox, args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n } else {\n sandbox.log(`Callback for old version of script: ${name}`, 'warn');\n }\n };\n },\n compareTime: function (\n startTime: iobJS.AstroDate | string | Date | number,\n endTime: iobJS.AstroDate | string | Date | number | null,\n operation: 'between' | 'not between' | '<' | '<=' | '>' | '>=' | '==' | '<>' | '!=',\n time?: iobJS.AstroDate | string | Date | number,\n ): boolean {\n if (startTime && typeof startTime === 'string') {\n const pos = consts.astroListLow.indexOf(startTime.toLowerCase());\n if (pos !== -1) {\n const aTime = sandbox.getAstroDate(consts.astroList[pos]);\n if (aTime) {\n startTime = aTime.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n } else {\n startTime = 0;\n }\n }\n } else if (startTime && isObject(startTime) && (startTime as iobJS.AstroDate).astro) {\n const aTime = sandbox.getAstroDate(\n (startTime as iobJS.AstroDate).astro,\n (startTime as iobJS.AstroDate).date || new Date(),\n (startTime as iobJS.AstroDate).offset || 0,\n );\n if (aTime) {\n startTime = aTime.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n } else {\n startTime = 0;\n }\n }\n\n if (endTime && typeof endTime === 'string') {\n const pos = consts.astroListLow.indexOf(endTime.toLowerCase());\n if (pos !== -1) {\n const aTime = sandbox.getAstroDate(consts.astroList[pos]);\n endTime =\n aTime?.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }) || 0;\n }\n } else if (endTime && isObject(endTime) && (endTime as iobJS.AstroDate).astro) {\n const aTime = sandbox.getAstroDate(\n (endTime as iobJS.AstroDate).astro,\n (endTime as iobJS.AstroDate).date || new Date(),\n (endTime as iobJS.AstroDate).offset || 0,\n );\n endTime =\n aTime?.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }) || 0;\n }\n\n // --- Convert \"time\" to number\n let nTime: number | undefined;\n // maybe it is astro date like 'sunrise' or 'sunset'\n if (time && typeof time === 'string') {\n const pos = consts.astroListLow.indexOf(time.toLowerCase());\n if (pos !== -1) {\n nTime = sandbox.getAstroDate(consts.astroList[pos])?.getTime() || 0;\n }\n } else if (time && isObject(time) && (time as iobJS.AstroDate).astro) {\n nTime =\n sandbox\n .getAstroDate(\n (time as iobJS.AstroDate).astro,\n (time as iobJS.AstroDate).date || new Date(),\n (time as iobJS.AstroDate).offset || 0,\n )\n ?.getTime() || 0;\n }\n\n let daily = true;\n if (time) {\n daily = false;\n }\n // if not astro date\n if (!nTime) {\n if (time && !isObject(time)) {\n if (typeof time === 'string' && !time.includes(' ') && !time.includes('T')) {\n const parts = time.split(':');\n const oTime = new Date();\n oTime.setHours(parseInt(parts[0], 10));\n oTime.setMinutes(parseInt(parts[1], 10));\n oTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n oTime.setSeconds(parseInt(parts[2], 10));\n } else {\n oTime.setSeconds(0);\n }\n nTime = oTime.getTime();\n } else {\n nTime = new Date(time as string | number).getTime();\n }\n } else if (!time) {\n const oTime = new Date();\n oTime.setMilliseconds(0);\n nTime = oTime.getTime();\n } else {\n // If Date\n nTime = (time as Date).getTime();\n }\n }\n // --- End of conversion \"time\" to number\n if (typeof startTime === 'string') {\n if (!startTime.includes(' ') && !startTime.includes('T')) {\n const parts = startTime.split(':');\n startTime = new Date();\n startTime.setHours(parseInt(parts[0], 10));\n startTime.setMinutes(parseInt(parts[1], 10));\n startTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n startTime.setSeconds(parseInt(parts[2], 10));\n } else {\n startTime.setSeconds(0);\n }\n } else {\n daily = false;\n startTime = new Date(startTime);\n }\n } else {\n daily = false;\n startTime = new Date(startTime as number | Date);\n }\n const nStartTime = startTime.getTime();\n\n let nEndTime: number | null;\n if (endTime && typeof endTime === 'string') {\n if (!endTime.includes(' ') && !endTime.includes('T')) {\n const parts = endTime.split(':');\n endTime = new Date();\n endTime.setHours(parseInt(parts[0], 10));\n endTime.setMinutes(parseInt(parts[1], 10));\n endTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n endTime.setSeconds(parseInt(parts[2], 10));\n } else {\n endTime.setSeconds(0);\n }\n } else {\n daily = false;\n endTime = new Date(endTime);\n }\n } else if (endTime) {\n daily = false;\n endTime = new Date(endTime as number | Date);\n } else {\n endTime = null;\n }\n\n if (endTime) {\n nEndTime = endTime.getTime();\n } else {\n nEndTime = null;\n }\n\n if (operation === 'between') {\n if (nEndTime) {\n if (nStartTime > nEndTime && daily) {\n return !(nTime >= nEndTime && nTime < nStartTime);\n }\n return nTime >= nStartTime && nTime < nEndTime;\n }\n sandbox.log(`missing or unrecognized endTime expression: ${JSON.stringify(endTime)}`, 'warn');\n return false;\n }\n\n if (operation === 'not between') {\n if (nEndTime) {\n if (nStartTime > nEndTime && daily) {\n return nTime >= nEndTime && nTime < nStartTime;\n }\n return !(nTime >= nStartTime && nTime < nEndTime);\n }\n sandbox.log(`missing or unrecognized endTime expression: ${JSON.stringify(endTime)}`, 'warn');\n return false;\n }\n\n if (operation === '>') {\n return nTime > nStartTime;\n }\n if (operation === '>=') {\n return nTime >= nStartTime;\n }\n if (operation === '<') {\n return nTime < nStartTime;\n }\n if (operation === '<=') {\n return nTime <= nStartTime;\n }\n if (operation === '==') {\n return nTime === nStartTime;\n }\n if (operation === '<>' || operation === '!=') {\n return nTime !== nStartTime;\n }\n sandbox.log(`Invalid operator: ${operation as string}`, 'warn');\n return false;\n },\n onStop: function (cb: () => void, timeout?: number): void {\n if (sandbox.verbose) {\n sandbox.log(`onStop(timeout=${timeout})`, 'info');\n }\n\n script.onStopCb = cb;\n script.onStopTimeout = timeout || 1000;\n },\n formatValue: function (value: number | string, decimals: number | string, format?: string): string {\n if (typeof decimals === 'string') {\n format = decimals;\n decimals = 0;\n }\n if (!format) {\n if (adapter.isFloatComma !== undefined) {\n format = adapter.isFloatComma ? '.,' : ',.';\n } else if (objects['system.config'] && objects['system.config'].common) {\n format = objects['system.config'].common.isFloatComma ? '.,' : ',.';\n }\n }\n return adapter.formatValue(value, decimals, format);\n },\n formatDate: function (\n date: Date | string | number | iobJS.AstroDate,\n format?: string,\n language?: ioBroker.Languages,\n ): string {\n if (!format) {\n if (adapter.dateFormat) {\n format = adapter.dateFormat;\n } else {\n format =\n objects['system.config'] && objects['system.config'].common\n ? objects['system.config'].common.dateFormat || 'DD.MM.YYYY'\n : 'DD.MM.YYYY';\n }\n format = format || 'DD.MM.YYYY';\n }\n // maybe it is astro date like 'sunrise' or 'sunset'\n if (date && typeof date === 'string') {\n const pos = consts.astroListLow.indexOf(date.toLowerCase());\n if (pos !== -1) {\n date = sandbox.getAstroDate(consts.astroList[pos])?.getTime() || 0;\n }\n } else if (date && isObject(date) && (date as iobJS.AstroDate).astro) {\n date =\n sandbox\n .getAstroDate(\n (date as iobJS.AstroDate).astro,\n (date as iobJS.AstroDate).date || new Date(),\n (date as iobJS.AstroDate).offset || 0,\n )\n ?.getTime() || 0;\n }\n\n if (format.match(/[WНOО]+/)) {\n let text: string = adapter.formatDate(date as Date | string | number, format);\n if (!language || !consts.dayOfWeeksFull[language]) {\n language =\n adapter.language ||\n (objects['system.config'] &&\n objects['system.config'].common &&\n objects['system.config'].common.language) ||\n 'en';\n if (!consts.dayOfWeeksFull[language as ioBroker.Languages]) {\n language = 'en';\n }\n }\n if (typeof date === 'number' || typeof date === 'string') {\n date = new Date(date);\n } else if (typeof (date as Date).getMonth !== 'function') {\n sandbox.log(`Invalid date object provided: ${JSON.stringify(date)}`, 'error');\n return 'Invalid date';\n }\n const d: number = (date as Date).getDay();\n text = text.replace('НН', consts.dayOfWeeksFull[language as ioBroker.Languages][d]);\n let initialText = text;\n text = text.replace('WW', consts.dayOfWeeksFull[language as ioBroker.Languages][d]);\n\n if (initialText === text) {\n text = text.replace('W', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n }\n\n text = text.replace('Н', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n text = text.replace('Н', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n const m: number = (date as Date).getMonth();\n initialText = text;\n text = text.replace('OOO', consts.monthFullGen[language as ioBroker.Languages][m]);\n text = text.replace('ООО', consts.monthFullGen[language as ioBroker.Languages][m]);\n text = text.replace('OO', consts.monthFull[language as ioBroker.Languages][m]);\n text = text.replace('ОО', consts.monthFull[language as ioBroker.Languages][m]);\n\n if (initialText === text) {\n text = text.replace('O', consts.monthShort[language as ioBroker.Languages][m]);\n }\n return text;\n }\n return adapter.formatDate(date as string | number | Date, format);\n },\n formatTimeDiff: function (diff: number, format?: string): string {\n if (!format) {\n format = 'hh:mm:ss';\n }\n\n let text = format;\n\n if (sandbox.verbose) {\n sandbox.log(`formatTimeDiff(format=${format}, diff=${diff})`, 'debug');\n }\n\n const second = 1000;\n const minute = 60 * second;\n const hour = 60 * minute;\n const day = 24 * hour;\n const neg = diff < 0;\n diff = Math.abs(diff);\n\n if (/(? void),\n callback?: (err?: Error | null) => void,\n ): void {\n if (typeof data === 'function' || !data) {\n callback = data as (err?: Error | null) => void;\n data = fileName;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `writeFile(adapter=${_adapter}, fileName=${fileName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function (): void {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`writeFile(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n if (callback) {\n adapter.writeFile(_adapter, fileName, data, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.writeFile(_adapter, fileName, data);\n }\n }\n },\n readFile: function (\n _adapter: string,\n fileName: string | ((err: Error | null | undefined, data?: Buffer | string, mimeType?: string) => void),\n callback?: (err: Error | null | undefined, data?: Buffer | string, mimeType?: string) => void,\n ): void {\n if (typeof fileName === 'function') {\n callback = fileName as (\n err: Error | null | undefined,\n data?: Buffer | string,\n mimeType?: string,\n ) => void;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n if (typeof callback !== 'function') {\n sandbox.log(`readFile(adapter=${_adapter}, fileName=${fileName}): no callback`, 'error');\n return;\n }\n _adapter = _adapter || '0_userdata.0';\n if (sandbox.verbose) {\n sandbox.log(`readFile(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n\n adapter.fileExists(_adapter, fileName, (error: Error | null | undefined, result?: boolean): void => {\n if (error) {\n callback(error);\n } else if (!result) {\n callback(new Error('Not exists'));\n } else {\n adapter.readFile(_adapter, fileName, callback);\n }\n });\n },\n unlink: function (\n _adapter: string,\n fileName: string | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n if (typeof fileName === 'function') {\n callback = fileName;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `unlink(adapter=${_adapter}, fileName=${fileName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function (): void {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`unlink(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n if (callback) {\n adapter.unlink(_adapter, fileName, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.unlink(_adapter, fileName);\n }\n }\n },\n delFile: function (\n _adapter: string,\n fileName: string | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return sandbox.unlink(_adapter, fileName as string, callback);\n },\n rename: function (\n _adapter: string,\n oldName: string,\n newName: string,\n callback?: (err?: Error | null) => void,\n ): void {\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `rename(adapter=${_adapter}, oldName=${oldName}, newName=${newName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n sandbox.verbose &&\n sandbox.log(`rename(adapter=${_adapter}, oldName=${oldName}, newName=${newName})`, 'info');\n if (callback) {\n adapter.rename(_adapter, oldName, newName, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.rename(_adapter, oldName, newName);\n }\n }\n },\n renameFile: function (\n _adapter: string,\n oldName: string,\n newName: string,\n callback?: (err?: Error | null) => void,\n ): void {\n return sandbox.rename(_adapter, oldName, newName, callback);\n },\n getHistory: function (\n instance: string | (ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }),\n options:\n | (ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string })\n | ((\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void),\n callback?: (\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void,\n ): void {\n if (isObject(instance)) {\n callback = options as (\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void;\n options = instance as ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string };\n instance = '';\n }\n\n if (typeof callback !== 'function') {\n return sandbox.log('No callback found!', 'error');\n }\n if (!isObject(options)) {\n return sandbox.log('No options found!', 'error');\n }\n if (!(options as ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string }).id) {\n return sandbox.log('No ID found!', 'error');\n }\n const timeoutMs =\n parseInt(\n (options as ioBroker.GetHistoryOptions & { id?: string; timeout?: number })\n ?.timeout as unknown as string,\n 10,\n ) || 20000;\n\n if (!instance) {\n // @ts-expect-error defaultHistory is private attribute of adapter. Fix later\n if (adapter.defaultHistory) {\n // @ts-expect-error defaultHistory is private attribute of adapter. Fix later\n instance = adapter.defaultHistory;\n } else {\n instance = objects['system.config']?.common?.defaultHistory || null;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getHistory(instance=${instance as string}, options=${JSON.stringify(options)})`, 'info');\n }\n\n if (!instance) {\n sandbox.log('No default history instance found!', 'error');\n try {\n callback.call(sandbox, new Error('No default history instance found!'));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n return;\n }\n if ((instance as string).startsWith('system.adapter.')) {\n instance = (instance as string).substring('system.adapter.'.length);\n }\n\n if (!objects[`system.adapter.${instance as string}`]) {\n sandbox.log(`Instance \"${instance as string}\" not found!`, 'error');\n try {\n callback.call(sandbox, new Error(`Instance \"${instance as string}\" not found!`));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n return;\n }\n\n let _timeout: NodeJS.Timeout | null = setTimeout(() => {\n _timeout = null;\n if (sandbox.verbose) {\n sandbox.log('getHistory => timeout', 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Timeout'),\n null,\n options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance as string,\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutMs);\n\n adapter.sendTo(\n instance as string,\n 'getHistory',\n {\n id: (options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }).id,\n options,\n },\n (res: any): void => {\n if (_timeout) {\n clearTimeout(_timeout);\n _timeout = null;\n }\n const result: {\n error?: string;\n result?: ioBroker.GetHistoryResult;\n step?: number;\n sessionId?: string;\n } = res;\n\n if (sandbox.verbose && result?.error) {\n sandbox.log(`getHistory => ${result.error}`, 'error');\n }\n if (sandbox.verbose && result?.result) {\n sandbox.log(`getHistory => ${result.result.length} items`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n result.error ? new Error(result.error) : null,\n result.result,\n options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance as string,\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n },\n );\n },\n runScript: function (scriptName: string, callback?: (err?: Error | null) => void): boolean {\n scriptName = scriptName || name;\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n // start another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot start \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `runScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n typeof callback === 'function' && callback();\n return true;\n }\n if (objects[scriptName].common.enabled) {\n objects[scriptName].common.enabled = false;\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, (/* err, obj */) => {\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err),\n );\n });\n return true;\n }\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err),\n );\n return true;\n },\n runScriptAsync: function (scriptName: string): Promise {\n let done = false;\n return new Promise((resolve, reject) => {\n const result = sandbox.runScript(scriptName, err => {\n if (err) {\n reject(err);\n done = true;\n } else {\n resolve();\n }\n });\n if (result === false && !done) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n startScript: function (\n scriptName: string,\n ignoreIfStarted?: boolean | ((err: Error | null | undefined, started: boolean) => void),\n callback?: (err: Error | null | undefined, started: boolean) => void,\n ): boolean {\n if (typeof ignoreIfStarted === 'function') {\n callback = ignoreIfStarted as (err: Error | null | undefined, started: boolean) => void;\n ignoreIfStarted = false;\n }\n scriptName ||= name;\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n // start another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot start \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `startScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n typeof callback === 'function' && callback(null, false);\n return true;\n }\n if (objects[scriptName].common.enabled) {\n if (!ignoreIfStarted) {\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, () => {\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err, true),\n );\n });\n } else if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n }\n adapter.extendForeignObject(scriptName, { common: { enabled: true } }, err => {\n typeof callback === 'function' && callback(err, true);\n });\n return true;\n },\n startScriptAsync: function (scriptName: string, ignoreIfStarted?: boolean): Promise {\n return new Promise((resolve, reject) => {\n const result = sandbox.startScript(\n scriptName,\n !!ignoreIfStarted,\n (err: Error | null | undefined, started: boolean): void => {\n if (err) {\n reject(err);\n } else {\n resolve(started);\n }\n },\n );\n if (result === false) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n stopScript: function (\n scriptName: string,\n callback?: (err: Error | null | undefined, stopped: boolean) => void,\n ): boolean {\n scriptName = scriptName || name;\n\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n\n // stop another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot stop \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `stopScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n }\n if (objects[scriptName].common.enabled) {\n objects[scriptName].common.enabled = false;\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, err => {\n if (typeof callback === 'function') {\n callback(err, true);\n }\n });\n } else if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n },\n stopScriptAsync: function (scriptName: string): Promise {\n return new Promise((resolve, reject) => {\n const result = sandbox.stopScript(\n scriptName,\n (err: Error | null | undefined, stopped: boolean): void => {\n if (err) {\n reject(err);\n } else {\n resolve(stopped);\n }\n },\n );\n if (result === false) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n isScriptActive: function (scriptName: string): boolean {\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log('Script does not exist', 'error');\n return false;\n }\n return objects[scriptName].common.enabled;\n },\n startInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && !instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, { common: { enabled: true } });\n\n if (sandbox.verbose) {\n sandbox.log(`startInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot start instance \"${instanceName}\", because already running`, 'warn');\n } else {\n sandbox.log(`Cannot start instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n restartInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, {});\n\n if (sandbox.verbose) {\n sandbox.log(`restartInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot restart instance \"${instanceName}\", because not running`, 'warn');\n } else {\n sandbox.log(`Cannot restart instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n stopInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, { common: { enabled: false } });\n\n if (sandbox.verbose) {\n sandbox.log(`stopInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot stop instance \"${instanceName}\", because not running`, 'warn');\n } else {\n sandbox.log(`Cannot stop instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toInt: function (val: boolean | string | number | 'true' | 'false'): number {\n if (val === true || val === 'true') {\n val = 1;\n }\n if (val === false || val === 'false') {\n val = 0;\n }\n val = parseInt(val as unknown as string) || 0;\n return val;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toFloat: function (val: boolean | string | number | 'true' | 'false'): number {\n if (val === true || val === 'true') {\n val = 1;\n }\n if (val === false || val === 'false') {\n val = 0;\n }\n val = parseFloat(val as unknown as string) || 0;\n return val;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toBoolean: function (val: boolean | string | number | 'true' | 'false'): boolean {\n if (val === '1' || val === 'true') {\n val = true;\n }\n if (val === '0' || val === 'false') {\n val = false;\n }\n return !!val;\n },\n getAttr: function (obj: string | Record, path: string | string[]): any {\n if (typeof path === 'string') {\n path = path.split('.');\n }\n if (typeof obj === 'string') {\n try {\n obj = JSON.parse(obj);\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getAttr',\n });\n sandbox.log(`Cannot parse \"${obj.substring(0, 30)}\": ${err as Error}`, 'error');\n\n return null;\n }\n }\n\n const attr: string = path.shift() || '';\n try {\n obj = (obj as Record)[attr];\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getAttr',\n });\n sandbox.log(`Cannot get ${attr} of \"${JSON.stringify(obj)}\": ${err as Error}`, 'error');\n\n return null;\n }\n\n if (!path.length) {\n return obj;\n }\n const type = typeof obj;\n if (obj === null || obj === undefined || type === 'boolean' || type === 'number') {\n return null;\n }\n return sandbox.getAttr(obj, path);\n },\n messageTo: function (\n target: string | { instance: string | null | number; script: string | null; message: string },\n data: any,\n options: { timeout?: number | string } | ((result: any, options: { timeout?: number | string }) => void),\n callback?: (result: any, options: { timeout?: number | string }, instance: string | number | null) => void,\n ) {\n const defaultTimeout = 5000;\n\n if (typeof target !== 'object') {\n target = { instance: null, script: null, message: target };\n }\n if (typeof options === 'function') {\n callback = options;\n options = { timeout: defaultTimeout };\n }\n\n let timeout: NodeJS.Timeout | null = null;\n if (typeof callback === 'function') {\n const timeoutDuration = parseInt(options?.timeout as unknown as string, 10) || defaultTimeout;\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (sandbox.verbose) {\n sandbox.log(`messageTo => timeout: ${timeoutDuration}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, { error: 'timeout' }, options, target.instance);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutDuration);\n }\n let cbFunc: undefined | ((result: any) => void);\n if (timeout) {\n cbFunc = function (res: any) {\n timeout && clearTimeout(timeout);\n const result: { result?: any; error?: string | null } = res;\n\n if (sandbox.verbose && result?.result) {\n sandbox.log(`messageTo => ${JSON.stringify(result)}`, 'debug');\n }\n if (sandbox.verbose && result?.error) {\n sandbox.log(`messageTo => ${result.error}`, 'error');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, result, options, target.instance);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n };\n }\n\n if (target.instance || target.instance === 0) {\n if (\n typeof target.instance === 'string' &&\n target.instance &&\n target.instance.startsWith('system.adapter.')\n ) {\n target.instance = target.instance.substring('system.adapter.'.length);\n } else if (typeof target.instance === 'number') {\n target.instance = `javascript.${target.instance}`;\n }\n\n adapter.sendTo(\n target.instance,\n 'jsMessageBus',\n { message: target.message, script: target.script, data },\n cbFunc,\n );\n } else {\n // Send it to all instances\n context.adapter.getObjectView(\n 'system',\n 'instance',\n { startkey: 'system.adapter.javascript.', endkey: 'system.adapter.javascript.\\u9999' },\n options,\n (err: Error | null | undefined, res): void => {\n if (err || !res) {\n sandbox.log(`messageTo failed: ${err?.message}`, 'error');\n return;\n }\n const len = 'system.adapter.'.length;\n const instances = res.rows.map(item => item.id.substring(len));\n\n instances.forEach(instance => {\n adapter.sendTo(\n instance,\n 'jsMessageBus',\n { message: target.message, script: target.script, data },\n cbFunc,\n );\n });\n },\n );\n }\n },\n messageToAsync: function (\n target: string | { instance: string | null | number; script: string | null; message: string },\n data: any,\n options?: { timeout?: number | string },\n ): Promise {\n return new Promise((resolve, reject) => {\n sandbox.messageTo(target, data, options, (res: any): void => {\n const result: { error?: string } = res;\n if (sandbox.verbose) {\n sandbox.log(`messageTo result => ${JSON.stringify(res)}`, 'debug');\n }\n if (!res || result.error) {\n reject(result ? new Error(result.error) : new Error('Unknown error'));\n } else {\n resolve(result);\n }\n });\n });\n },\n onMessage: function (\n messageName: string,\n callback: (data: any, cb: (result: any) => void) => void,\n ): null | number {\n if (typeof callback !== 'function') {\n sandbox.log('onMessage callback is not a function', 'error');\n\n return null;\n }\n context.messageBusHandlers[sandbox.scriptName] = context.messageBusHandlers[sandbox.scriptName] || {};\n context.messageBusHandlers[sandbox.scriptName][messageName] =\n context.messageBusHandlers[sandbox.scriptName][messageName] || [];\n\n const handler = { id: Date.now() + Math.floor(Math.random() * 10000), cb: callback, sandbox };\n context.messageBusHandlers[sandbox.scriptName][messageName].push(handler);\n\n sandbox.__engine.__subscriptionsMessage += 1;\n\n if (\n sandbox.__engine.__subscriptionsMessage %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsMessage} message subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n return handler.id;\n },\n onMessageUnregister: function (idOrName: number | string): boolean {\n const ctx = context.messageBusHandlers[sandbox.scriptName];\n let found = false;\n if (ctx) {\n if (typeof idOrName === 'number') {\n for (const messageName in ctx) {\n if (Object.prototype.hasOwnProperty.call(ctx, messageName)) {\n for (let i = 0; i < ctx[messageName].length; i++) {\n if (ctx[messageName][i].id === idOrName) {\n ctx[messageName].splice(i, 1);\n if (!ctx[messageName].length) {\n delete ctx[messageName];\n sandbox.__engine.__subscriptionsMessage--;\n }\n found = true;\n break;\n }\n }\n }\n if (found) {\n break;\n }\n }\n } else if (idOrName && ctx[idOrName]) {\n delete ctx[idOrName];\n sandbox.__engine.__subscriptionsMessage--;\n found = true;\n }\n }\n return found;\n },\n console: {\n log: function (msg: string): void {\n sandbox.log(msg, 'info');\n },\n error: function (msg: string): void {\n sandbox.log(msg, 'error');\n },\n warn: function (msg: string): void {\n sandbox.log(msg, 'warn');\n },\n info: function (msg: string): void {\n sandbox.log(msg, 'info');\n },\n debug: function (msg: string): void {\n sandbox.log(msg, 'debug');\n },\n },\n jsonataExpression: function (data: any, expression: string): Promise {\n return jsonata(expression).evaluate(data);\n },\n wait: function (ms: number): Promise {\n return new Promise((resolve: () => void): void => {\n sandbox.setTimeout(resolve, ms);\n });\n },\n sleep: function (ms: number): Promise {\n return sandbox.wait(ms);\n },\n onObject: function (\n pattern: string | string[],\n callback: (id: string, obj?: ioBroker.Object | null) => void,\n ): SubscribeObject | SubscribeObject[] | null {\n return sandbox.subscribeObject(pattern, callback);\n },\n subscribeObject: function (\n pattern: string | string[],\n callback: (id: string, obj?: ioBroker.Object | null) => void,\n ): SubscribeObject | SubscribeObject[] | null {\n if (Array.isArray(pattern)) {\n const result: {\n name: string;\n pattern: string;\n callback: (id: string, obj?: ioBroker.Object | null) => void;\n }[] = [];\n for (let p = 0; p < pattern.length; p++) {\n result.push(\n sandbox.subscribeObject(pattern[p], callback) as {\n name: string;\n pattern: string;\n callback: (id: string, obj?: ioBroker.Object | null) => void;\n },\n );\n }\n return result;\n }\n\n sandbox.__engine.__subscriptionsObject += 1;\n\n if (\n sandbox.__engine.__subscriptionsObject %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsObject} object subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n // source is set by regexp if defined as /regexp/\n if (!pattern || typeof pattern !== 'string') {\n sandbox.log('Error by subscribeObject: pattern can be only string or array of strings.', 'error');\n return null;\n }\n\n if (typeof callback !== 'function') {\n sandbox.log('Error by subscribeObject: callback is not a function', 'error');\n return null;\n }\n\n const subs: SubscribeObject = { pattern, callback, name };\n if (sandbox.verbose) {\n sandbox.log(`subscribeObject: ${JSON.stringify(subs)}`, 'info');\n }\n\n adapter.subscribeForeignObjects(pattern);\n\n context.subscriptionsObject.push(subs);\n\n return subs;\n },\n unsubscribeObject: function (subObject: SubscribeObject | SubscribeObject[]): boolean | boolean[] {\n if (subObject && Array.isArray(subObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < subObject.length; t++) {\n result.push(sandbox.unsubscribeObject(subObject[t]) as boolean);\n }\n return result;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`adapterUnsubscribeObject(id=${JSON.stringify(subObject)})`, 'info');\n }\n\n for (let i = context.subscriptionsObject.length - 1; i >= 0; i--) {\n if (context.subscriptionsObject[i] === subObject) {\n adapter.unsubscribeForeignObjects(subObject.pattern);\n context.subscriptionsObject.splice(i, 1);\n sandbox.__engine.__subscriptionsObject--;\n return true;\n }\n }\n let deleted = 0;\n for (let i = context.subscriptionsObject.length - 1; i >= 0; i--) {\n if (\n context.subscriptionsObject[i].name &&\n context.subscriptionsObject[i].pattern === subObject.pattern\n ) {\n deleted++;\n adapter.unsubscribeForeignObjects(subObject.pattern);\n context.subscriptionsObject.splice(i, 1);\n sandbox.__engine.__subscriptionsObject--;\n }\n }\n return !!deleted;\n },\n // internal function to send the block debugging info to the front-end\n _sendToFrontEnd: function (blockId: string, data: any): void {\n if (context.rulesOpened === sandbox.scriptName) {\n void adapter.setState(\n 'debug.rules',\n JSON.stringify({ ruleId: sandbox.scriptName, blockId, data, ts: Date.now() }),\n true,\n );\n }\n },\n existsStateAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n existsObjectAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n getObjectAsync: function (_id: string, _enumName: null | string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n setObjectAsync: function (_id: string, _obj: ioBroker.Object): Promise<{ id: string }> {\n return Promise.reject(new Error('Not implemented'));\n },\n extendObjectAsync: function (_id: string, _obj: Partial): Promise<{ id: string }> {\n return Promise.reject(new Error('Not implemented'));\n },\n deleteObjectAsync: function (_id: string, _isRecursive?: boolean): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n createStateAsync: function (\n _name: string,\n _initValue: undefined | ioBroker.StateValue | ioBroker.State,\n _forceCreation:\n | boolean\n | undefined\n | Record\n | Partial\n | ((err: Error | null) => void),\n _common?: Partial | ((err: Error | null) => void),\n _native?: Record | ((err: Error | null) => void),\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n createAliasAsync: function (\n _name: string,\n _alias: string | CommonAlias,\n _forceCreation: boolean | Partial | undefined,\n _common?: Partial | Record,\n _native?: Record,\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n deleteStateAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n writeFileAsync: function (\n _adapter: string,\n _fileName: string | Buffer,\n _data?: string | Buffer,\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n readFileAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n unlinkAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n delFileAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n renameAsync: function (_adapter: string, _oldName: string, _newName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n renameFileAsync: function (_adapter: string, _oldName: string, _newName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n getHistoryAsync: function (\n _instance: string | (ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }),\n _options?: ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string },\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n httpGetAsync: function (\n _url: string,\n _options?: {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n ): Promise<{\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n }> {\n return Promise.reject(new Error('Not implemented'));\n },\n httpPostAsync: function (\n _url: string,\n _data: any,\n _options: {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n ): Promise<{\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n }> {\n return Promise.reject(new Error('Not implemented'));\n },\n };\n\n // Create advanced functions that can modify objects\n if ((adapter.config as JavaScriptAdapterConfig).enableSetObject) {\n sandbox.setObject = function (\n id: string,\n obj: ioBroker.Object,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n if (id && typeof id === 'string' && id.startsWith('system.adapter.')) {\n sandbox.log(\n `Using setObject on system object ${id} can be dangerous (protected instance attributes may be lost)`,\n 'info',\n );\n }\n if (debug) {\n sandbox.log(\n `setObject(id=${id}, obj=${JSON.stringify(obj)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setImmediate(function () {\n try {\n callback.call(sandbox, null, { id });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`setObject(id=${id}, obj=${JSON.stringify(obj)})`, 'info');\n }\n adapter.setForeignObject(id, obj, (err, res) => {\n if (!err) {\n // Update meta object data\n context.updateObjectContext(id, obj);\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, res);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n }\n };\n sandbox.extendObject = function (\n id: string,\n obj: Partial,\n callback?: (err?: Error | null, obj?: { id: string }) => void,\n ): void {\n if (debug) {\n sandbox.log(\n `extendObject(id=${id}, obj=${JSON.stringify(obj)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox, null, { id });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`extendObject(id=${id}, obj=${JSON.stringify(obj)})`, 'info');\n }\n if (callback) {\n adapter.extendForeignObject(id, JSON.parse(JSON.stringify(obj)), callback);\n } else {\n void adapter.extendForeignObject(id, JSON.parse(JSON.stringify(obj)));\n }\n }\n };\n sandbox.deleteObject = function (id: string, isRecursive?: boolean, callback?: ioBroker.ErrorCallback): void {\n if (typeof isRecursive === 'function') {\n callback = isRecursive;\n isRecursive = false;\n }\n if (debug) {\n sandbox.log(\n `deleteObject(id=${id}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`deleteObject(id=${id})`, 'info');\n }\n adapter.delForeignObject(id, { recursive: isRecursive }, callback);\n }\n };\n }\n\n // promisify methods on the sandbox\n sandbox.existsStateAsync = promisify(sandbox.existsState);\n sandbox.existsObjectAsync = promisify(sandbox.existsObject);\n sandbox.getObjectAsync = promisify(sandbox.getObject);\n sandbox.setObjectAsync = promisify(sandbox.setObject);\n sandbox.extendObjectAsync = promisify(sandbox.extendObject);\n sandbox.deleteObjectAsync = promisify(sandbox.deleteObject);\n sandbox.createStateAsync = promisify(sandbox.createState);\n sandbox.createAliasAsync = promisify(sandbox.createAlias);\n sandbox.deleteStateAsync = promisify(sandbox.deleteState);\n sandbox.writeFileAsync = promisify(sandbox.writeFile);\n sandbox.readFileAsync = promisify(sandbox.readFile);\n sandbox.unlinkAsync = promisify(sandbox.unlink);\n sandbox.delFileAsync = promisify(sandbox.delFile);\n sandbox.renameAsync = promisify(sandbox.rename);\n sandbox.renameFileAsync = promisify(sandbox.renameFile);\n sandbox.getHistoryAsync = promisify(sandbox.getHistory);\n sandbox.httpGetAsync = promisify(sandbox.httpGet);\n sandbox.httpPostAsync = promisify(sandbox.httpPost);\n\n // Make all predefined properties and methods readonly so scripts cannot overwrite them\n for (const prop of Object.keys(sandbox)) {\n Object.defineProperty(sandbox, prop, {\n configurable: false,\n writable: false,\n });\n }\n\n return sandbox;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/lib/sandbox.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess, ExecOptions } from 'node:child_process';\nimport * as jsonataMod from 'jsonata';\nimport type { SendMailOptions } from 'nodemailer';\nimport type { AxiosError, AxiosHeaderValue, AxiosResponse, ResponseType } from 'axios';\n\nimport { commonTools } from '@iobroker/adapter-core';\n\nimport { isObject, isArray, promisify, getHttpRequestConfig } from './tools';\nimport type {\n JavaScriptAdapterConfig,\n AstroRule,\n ChangeType,\n CommonAlias,\n FileSubscriptionResult,\n IobSchedule,\n JavascriptContext,\n JsScript,\n LogMessage,\n Pattern,\n PushoverOptions,\n SandboxType,\n Selector,\n SubscribeObject,\n SubscriptionResult,\n TimeRule,\n} from '../types';\nimport * as constsMod from './consts';\nimport * as wordsMod from './words';\nimport * as eventObjMod from './eventObj';\nimport {\n patternCompareFunctions as patternCompareFunctionsMod,\n type PatternEventCompareFunction,\n} from './patternCompareFunctions';\nimport type { ScheduleName, SchedulerRule } from './scheduler';\nimport type { EventObj } from './eventObj';\nimport type { AstroEvent } from './consts';\n\nconst SCRIPT_CODE_MARKER = 'script.js.';\n\nconst pattern2RegEx = commonTools.pattern2RegEx;\n\nexport function sandBox(\n script: JsScript,\n name: string,\n verbose: boolean | undefined,\n debug: boolean | undefined,\n context: JavascriptContext,\n): SandboxType {\n const consts = constsMod;\n const words = wordsMod;\n const eventObj = eventObjMod;\n const patternCompareFunctions = patternCompareFunctionsMod;\n const jsonata = jsonataMod.default;\n\n const adapter: ioBroker.Adapter = context.adapter;\n const mods = context.mods;\n const states = context.states;\n const objects = context.objects;\n const timers = context.timers;\n const enums = context.enums;\n const debugMode = context.debugMode;\n\n // eslint-disable-next-line prefer-const\n let sandbox: SandboxType;\n\n function errorInCallback(e: Error): void {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'errorInCallback',\n });\n context.logError(name, 'Error in callback:', e);\n context.debugMode && console.log(`error$$${name}$$Exception in callback: ${e}`, Date.now());\n }\n\n function subscribePattern(script: JsScript, pattern: string): void {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (!script.subscribes[pattern]) {\n script.subscribes[pattern] = 1;\n } else {\n script.subscribes[pattern]++;\n }\n\n if (!context.subscribedPatterns[pattern]) {\n context.subscribedPatterns[pattern] = 1;\n\n if (sandbox.verbose) {\n sandbox.log(`subscribePattern(pattern=${pattern})`, 'info');\n }\n adapter.subscribeForeignStates(pattern);\n\n // request current value to deliver old value on change.\n if (typeof pattern === 'string' && !pattern.includes('*')) {\n void adapter.getForeignState(pattern, (_err, state) => {\n if (state) {\n states[pattern] = state;\n }\n });\n } else {\n adapter.getForeignStates(\n pattern,\n (_err, _states) => _states && Object.keys(_states).forEach(id => (states[id] = _states[id])),\n );\n }\n } else {\n context.subscribedPatterns[pattern]++;\n }\n }\n }\n\n function unsubscribePattern(script: JsScript, pattern: string): void {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (script.subscribes[pattern]) {\n script.subscribes[pattern]--;\n if (!script.subscribes[pattern]) {\n delete script.subscribes[pattern];\n }\n }\n\n if (context.subscribedPatterns[pattern]) {\n context.subscribedPatterns[pattern]--;\n if (!context.subscribedPatterns[pattern]) {\n adapter.unsubscribeForeignStates(pattern);\n delete context.subscribedPatterns[pattern];\n\n // if the pattern was regex or with * some states will stay in RAM, but it is OK.\n if (states[pattern]) {\n delete states[pattern];\n }\n }\n }\n }\n }\n\n function subscribeFile(script: JsScript, id: string, fileNamePattern: string): void {\n const key = `${id}$%$${fileNamePattern}`;\n if (!script.subscribesFile[key]) {\n script.subscribesFile[key] = 1;\n } else {\n script.subscribesFile[key]++;\n }\n\n if (!context.subscribedPatternsFile[key]) {\n context.subscribedPatternsFile[key] = 1;\n void adapter.subscribeForeignFiles(id, fileNamePattern);\n } else {\n context.subscribedPatternsFile[key]++;\n }\n }\n\n function unsubscribeFile(script: JsScript, id: string, fileNamePattern: string): void {\n const key = `${id}$%$${fileNamePattern}`;\n if (script.subscribesFile[key]) {\n script.subscribesFile[key]--;\n if (!script.subscribesFile[key]) {\n delete script.subscribesFile[key];\n }\n }\n\n if (context.subscribedPatternsFile[key]) {\n context.subscribedPatternsFile[key]--;\n if (!context.subscribedPatternsFile[key]) {\n void adapter.unsubscribeForeignFiles(id, fileNamePattern);\n delete context.subscribedPatternsFile[key];\n }\n }\n }\n\n function getPatternCompareFunctions(pattern: Pattern): PatternEventCompareFunction[] & { logic?: 'and' | 'or' } {\n let func: PatternEventCompareFunction;\n const functions: PatternEventCompareFunction[] & { logic?: 'and' | 'or' } = [];\n functions.logic = pattern.logic || 'and';\n\n for (const key in pattern) {\n if (!Object.prototype.hasOwnProperty.call(pattern, key)) {\n continue;\n }\n if (key === 'logic') {\n continue;\n }\n if (key === 'change' && pattern.change === 'any') {\n continue;\n }\n const _func: (pattern: Pattern) => PatternEventCompareFunction = (\n patternCompareFunctions as unknown as Record PatternEventCompareFunction>\n )[key];\n if (!_func) {\n continue;\n }\n func = _func(pattern);\n if (typeof func !== 'function') {\n continue;\n }\n functions.push(func);\n }\n return functions;\n }\n\n /**\n * Splits a selector string into attribute and value\n *\n * @param selector The selector string to split\n */\n function splitSelectorString(selector: string): Selector {\n const parts = selector.split('=', 2);\n if (parts[1] && parts[1][0] === '\"') {\n parts[1] = parts[1].substring(1);\n const len = parts[1].length;\n if (parts[1] && parts[1][len - 1] === '\"') {\n parts[1] = parts[1].substring(0, len - 1);\n }\n }\n if (parts[1] && parts[1][0] === \"'\") {\n parts[1] = parts[1].substring(1);\n const len = parts[1].length;\n if (parts[1] && parts[1][len - 1] === \"'\") {\n parts[1] = parts[1].substring(0, len - 1);\n }\n }\n\n if (parts[1]) {\n parts[1] = parts[1].trim();\n }\n parts[0] = parts[0].trim();\n\n return { attr: parts[0], value: parts[1] };\n }\n\n /**\n * Transforms a selector string with wildcards into a regular expression\n *\n * @param str The selector string to transform into a regular expression\n */\n function selectorStringToRegExp(str: string): RegExp {\n const startsWithWildcard = str[0] === '*';\n const endsWithWildcard = str[str.length - 1] === '*';\n\n // Sanitize the selector, so it is safe to use in a RegEx\n // Taken from https://stackoverflow.com/a/3561711/10179833 but modified\n // since * has a special meaning in our selector and should not be escaped\n // eslint-disable-next-line no-useless-escape\n str = str.replace(/[-\\/\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*');\n\n return new RegExp((startsWithWildcard ? '' : '^') + str + (endsWithWildcard ? '' : '$'));\n }\n\n /**\n * Adds a regular expression for selectors targeting the state ID\n *\n * @param selector The selector to apply the transform to\n */\n function addRegExpToIdAttrSelectors(selector: Selector): Selector {\n if ((selector.attr === 'id' || selector.attr === 'state.id') && !selector.idRegExp && selector.value) {\n return {\n attr: selector.attr,\n value: selector.value,\n idRegExp: selectorStringToRegExp(selector.value),\n };\n }\n return selector;\n }\n\n /**\n * Tests if a value loosely equals (==) the reference string.\n * In contrast to the equality operator, this treats true == \"true\" as well\n * so we can test common and native attributes for boolean values\n *\n * @param value The value to compare with the reference\n * @param reference The reference to compare the value to\n */\n function looselyEqualsString(value: string | number | boolean | undefined, reference: string): boolean {\n // For booleans, compare the string representation\n // For other types do a loose comparison\n return typeof value === 'boolean'\n ? (value && reference === 'true') || (!value && reference === 'false')\n : value == reference;\n }\n\n /**\n * Returns the `common.type` for a given variable\n */\n function getCommonTypeOf(value: any): ioBroker.CommonType {\n return isArray(value) ? 'array' : isObject(value) ? 'object' : (typeof value as ioBroker.CommonType);\n }\n\n /**\n * Returns if an id is in an allowed namespace for automatic object creations\n *\n * @param id id to check\n */\n function validIdForAutomaticFolderCreation(id: string): boolean {\n return id.startsWith('javascript.') || id.startsWith('0_userdata.0.') || id.startsWith('alias.0.');\n }\n\n /**\n * Iterate through object structure to create missing folder objects\n */\n async function ensureObjectStructure(id: string): Promise {\n if (!validIdForAutomaticFolderCreation(id)) {\n return;\n }\n if (context.folderCreationVerifiedObjects[id] === true) {\n return;\n }\n const idArr = id.split('.');\n idArr.pop(); // the last is created as an object in any way\n if (idArr.length < 3) {\n return; // Nothing to do\n }\n // We just create sublevel projects\n let idToCheck = idArr.splice(0, 2).join('.');\n\n context.folderCreationVerifiedObjects[id] = true;\n for (const part of idArr) {\n idToCheck += `.${part}`;\n if (context.folderCreationVerifiedObjects[idToCheck] === true || objects[idToCheck]) {\n continue;\n }\n context.folderCreationVerifiedObjects[idToCheck] = true;\n let obj: ioBroker.Object | null | undefined;\n try {\n obj = await adapter.getForeignObjectAsync(idToCheck);\n } catch {\n // ignore\n }\n if (!obj?.common) {\n sandbox.log(`Create folder object for ${idToCheck}`, 'debug');\n try {\n await adapter.setForeignObjectAsync(idToCheck, {\n _id: idToCheck,\n type: 'folder',\n common: {\n name: part,\n },\n native: {\n autocreated: 'by automatic ensure logic',\n },\n } as ioBroker.FolderObject);\n } catch (err: any) {\n sandbox.log(`Could not automatically create folder object ${idToCheck}: ${err.message}`, 'info');\n }\n } else {\n //sandbox.log(` already existing \"${idToCheck}\": ${JSON.stringify(obj)}`, 'debug');\n }\n }\n }\n\n function setStateHelper(\n sandbox: SandboxType,\n isCreate: boolean,\n isChanged: boolean,\n id: string,\n state: null | ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | 'true' | 'false' | undefined | ((error?: Error | null) => void),\n callback?: (error?: Error | null) => void,\n ): void {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n\n let stateNotNull: ioBroker.SettableState | ioBroker.StateValue;\n\n if (isAck === true || isAck === false || isAck === 'true' || isAck === 'false') {\n if (state && typeof state === 'object' && state.val !== undefined) {\n stateNotNull = state;\n // we assume that we were given a state object if\n // state is an object that contains a `val` property\n if (!Object.prototype.hasOwnProperty.call(state, 'ack')) {\n stateNotNull.ack = isAck === true || isAck === 'true';\n }\n } else if (state === null) {\n stateNotNull = { val: null, ack: isAck === true || isAck === 'true' };\n } else {\n // otherwise, assume that the given state is the value to be set\n stateNotNull = { val: state as ioBroker.StateValue, ack: isAck === true || isAck === 'true' };\n }\n } else if (state === null) {\n stateNotNull = { val: null };\n } else {\n stateNotNull = state;\n }\n\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n if (isCreate) {\n if (id.match(/^javascript\\.\\d+\\.scriptEnabled/)) {\n sandbox.log(\n `Own states (${id}) should not be used in javascript.X.scriptEnabled.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n } else if (id.match(/^javascript\\.\\d+\\.scriptProblem/)) {\n sandbox.log(\n `Own states (${id}) should not be used in javascript.X.scriptProblem.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n }\n }\n\n const common = objects[id] ? objects[id].common : null;\n if (common?.type && common.type !== 'mixed' && common.type !== 'json') {\n // Find out which type the value has\n let actualCommonType: ioBroker.CommonType | undefined;\n if (typeof stateNotNull === 'object') {\n if (stateNotNull && stateNotNull.val !== undefined && stateNotNull.val !== null) {\n actualCommonType = getCommonTypeOf(stateNotNull.val);\n }\n } else if (stateNotNull !== null && stateNotNull !== undefined) {\n actualCommonType = getCommonTypeOf(stateNotNull);\n }\n // If this is not the expected one, issue a warning\n if (actualCommonType && actualCommonType !== common.type) {\n context.logWithLineInfo(\n `You are assigning a ${actualCommonType} to the state \"${id}\" which expects a ${common.type}. ` +\n `Please fix your code to use a ${common.type} or change the state type to ${actualCommonType}. ` +\n `This warning might become an error in future versions.`,\n );\n }\n\n if (actualCommonType === 'array' || actualCommonType === 'object') {\n try {\n if (typeof stateNotNull === 'object' && typeof stateNotNull.val !== 'undefined') {\n stateNotNull.val = JSON.stringify(stateNotNull.val);\n } else {\n stateNotNull = JSON.stringify(stateNotNull);\n }\n } catch (err: any) {\n context.logWithLineInfo(\n `Could not stringify value for type ${actualCommonType} and id ${id}: ${err.message}`,\n );\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error(\n `Could not stringify value for type ${actualCommonType} and id ${id}: ${err.message}`,\n ),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n }\n }\n }\n // Check min and max of value\n if (typeof stateNotNull === 'object') {\n if (common && typeof stateNotNull.val === 'number') {\n const num: number = stateNotNull.val;\n if (common.min !== undefined && num < common.min) {\n stateNotNull.val = common.min;\n } else if (common.max !== undefined && num > common.max) {\n stateNotNull.val = common.max;\n }\n }\n } else if (common && typeof stateNotNull === 'number') {\n const num: number = stateNotNull;\n if (common.min !== undefined && num < common.min) {\n stateNotNull = common.min;\n }\n if (common.max !== undefined && num > common.max) {\n stateNotNull = common.max;\n }\n }\n\n let stateAsObject: ioBroker.State;\n // modify state here, to make it available in callback\n if (\n stateNotNull === null ||\n typeof stateNotNull !== 'object' ||\n (stateNotNull as ioBroker.SettableState).val === undefined\n ) {\n stateAsObject = context.prepareStateObject(id, {\n val: stateNotNull as ioBroker.StateValue,\n ack: isAck === true || isAck === 'true',\n });\n } else {\n stateAsObject = context.prepareStateObject(id, stateNotNull as ioBroker.SettableState);\n }\n\n // set as comment: from which script this state was set.\n stateAsObject.c = sandbox.scriptName;\n\n if (objects[id]) {\n script.setStatePerMinuteCounter++;\n if (sandbox.verbose) {\n sandbox.log(`setForeignState(id=${id}, state=${JSON.stringify(stateAsObject)})`, 'info');\n }\n\n if (debug) {\n sandbox.log(\n `setForeignState(id=${id}, state=${JSON.stringify(stateAsObject)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n } else {\n if (!(adapter.config as JavaScriptAdapterConfig).subscribe) {\n // store actual state to make possible to process value in callback\n // risk that there will be an error on setState is very low,\n // but we will not store new state if the setStateChanged is called\n if (!isChanged) {\n context.interimStateValues[id] = stateAsObject;\n }\n }\n const errHandler = (err: Error | null | undefined, funcId: string): void => {\n err && sandbox.log(`${funcId}: ${err}`, 'error');\n // If adapter holds all states\n if (err && !(adapter.config as JavaScriptAdapterConfig).subscribe) {\n delete context.interimStateValues[id];\n }\n\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n };\n if (isChanged) {\n if (!(adapter.config as JavaScriptAdapterConfig).subscribe && context.interimStateValues[id]) {\n // if the state is changed, we will compare it with interimStateValues\n const oldState = context.interimStateValues[id];\n const attrs: string[] = Object.keys(stateAsObject).filter(\n attr => attr !== 'ts' && (stateAsObject as Record)[attr] !== undefined,\n );\n if (\n !attrs.every(\n attr =>\n (stateAsObject as Record)[attr] ===\n (oldState as Record)[attr],\n )\n ) {\n // state is changed for sure, and we will call setForeignState\n // and store new state to interimStateValues\n context.interimStateValues[id] = stateAsObject;\n adapter.setForeignState(id, stateAsObject, err => errHandler(err, 'setForeignState'));\n } else {\n // otherwise - do nothing as we have cached state, except callback\n errHandler(null, 'setForeignStateCached');\n }\n } else {\n // adapter doesn't hold all states, or it has not cached then we will simply call setForeignStateChanged\n adapter.setForeignStateChanged(id, { ...stateAsObject, ts: undefined }, err =>\n errHandler(err, 'setForeignStateChanged'),\n );\n }\n } else {\n adapter.setForeignState(id, stateAsObject, err => errHandler(err, 'setForeignState'));\n }\n }\n } else {\n context.logWithLineInfo(`State \"${id}\" not found`);\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.call(sandbox, new Error(`State \"${id}\" not found`));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n }\n }\n\n sandbox = {\n mods,\n _id: script._id,\n // @deprecated use scriptName\n name,\n scriptName: name,\n instance: adapter.instance || 0,\n defaultDataDir: context.getAbsoluteDefaultDataDir(),\n verbose,\n exports: {}, // Polyfill for the export object in TypeScript modules\n require: function (md: string): any {\n if (typeof md === 'string' && md.startsWith('node:')) {\n md = md.replace(/^node:/, '');\n }\n\n if (md === 'request') {\n if (!sandbox.__engine.__deprecatedWarnings.includes(md)) {\n sandbox.log(\n `request package is deprecated - please use httpGet (or a stable lib like axios) instead!`,\n 'warn',\n );\n sandbox.__engine.__deprecatedWarnings.push(md);\n }\n }\n\n if (mods[md]) {\n return mods[md];\n }\n\n let error: Error | undefined;\n\n try {\n mods[md] = require(\n adapter.getAdapterScopedPackageIdentifier ? adapter.getAdapterScopedPackageIdentifier(md) : md,\n );\n return mods[md];\n } catch (e: any) {\n error = e as Error;\n }\n\n try {\n // the user requires a module which is not specified in the additional node modules\n // for backward compatibility we check if the module can simply be required directly before we fail (e.g., direct dependencies of JavaScript adapter)\n adapter.log.debug(`Try direct require of \"${md}\" as not specified in the additional dependencies`);\n mods[md] = require(md);\n\n return mods[md];\n } catch (e: any) {\n context.logError(name, `Error by loading module \"${md}\":`, error || e, 6);\n\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'require',\n });\n }\n },\n Buffer: Buffer,\n __engine: {\n __deprecatedWarnings: [],\n __subscriptionsObject: 0,\n __subscriptions: 0,\n __subscriptionsMessage: 0,\n __subscriptionsFile: 0,\n __subscriptionsLog: 0,\n __schedules: 0,\n },\n\n $: function (selector: string): iobJS.QueryResult {\n // following is supported\n // 'type[commonAttr=something]', 'id[commonAttr=something]', id(enumName=\"something\")', id{nativeName=\"something\"}\n // Type can be state, channel or device\n // Attr can be any of the common attributes and can have wildcards *\n // E.g. \"state[id='hm-rpc.0.*]\" or \"hm-rpc.0.*\" returns all states of adapter instance hm-rpc.0\n // channel(room=\"Living room\") => all states in room \"Living room\"\n // channel{TYPE=BLIND}[state.id=*.LEVEL]\n // Switch all states with .STATE of channels with role \"switch\" in \"Wohnzimmer\" to false\n // $('channel[role=switch][state.id=*.STATE](rooms=Wohnzimmer)').setState(false);\n //\n // Following functions are possible, setValue, getValue (only from first), on, each\n\n // Todo CACHE!!!\n\n const result: iobJS.QueryResult = {} as iobJS.QueryResult;\n\n let name = '';\n const commonStrings: string[] = [];\n const enumStrings: string[] = [];\n const nativeStrings: string[] = [];\n let isInsideName = true;\n let isInsideCommonString = false;\n let isInsideEnumString = false;\n let isInsideNativeString = false;\n let currentCommonString = '';\n let currentNativeString = '';\n let currentEnumString = '';\n\n // parse string\n let selectorHasInvalidType = false;\n if (typeof selector === 'string') {\n for (let i = 0; i < selector.length; i++) {\n if (selector[i] === '{') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideNativeString = true;\n } else if (selector[i] === '}') {\n isInsideNativeString = false;\n nativeStrings.push(currentNativeString);\n currentNativeString = '';\n } else if (selector[i] === '[') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideCommonString = true;\n } else if (selector[i] === ']') {\n isInsideCommonString = false;\n commonStrings.push(currentCommonString);\n currentCommonString = '';\n } else if (selector[i] === '(') {\n isInsideName = false;\n if (isInsideCommonString || isInsideEnumString || isInsideNativeString) {\n // Error\n break;\n }\n isInsideEnumString = true;\n } else if (selector[i] === ')') {\n isInsideEnumString = false;\n enumStrings.push(currentEnumString);\n currentEnumString = '';\n } else if (isInsideName) {\n name += selector[i];\n } else if (isInsideCommonString) {\n currentCommonString += selector[i];\n } else if (isInsideEnumString) {\n currentEnumString += selector[i];\n } else if (isInsideNativeString) {\n currentNativeString += selector[i];\n } //else {\n // some error\n //}\n }\n } else {\n selectorHasInvalidType = true;\n }\n\n // If some error in the selector\n if (selectorHasInvalidType || isInsideEnumString || isInsideCommonString || isInsideNativeString) {\n result.length = 0;\n result.toArray = function () {\n return [];\n };\n result.each = function () {\n return this;\n };\n result.getState = function () {\n return null;\n };\n result.setState = function () {\n return this;\n };\n result.on = function () {\n return this;\n };\n }\n\n if (isInsideEnumString) {\n sandbox.log(`Invalid selector: enum close bracket \")\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: enum close bracket \")\" cannot be found';\n return result;\n } else if (isInsideCommonString) {\n sandbox.log(`Invalid selector: common close bracket \"]\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: common close bracket \"]\" cannot be found';\n return result;\n } else if (isInsideNativeString) {\n sandbox.log(`Invalid selector: native close bracket \"}\" cannot be found in \"${selector}\"`, 'warn');\n result.error = 'Invalid selector: native close bracket \"}\" cannot be found';\n return result;\n } else if (selectorHasInvalidType) {\n const message = `Invalid selector: selector must be a string but is of type ${typeof selector}`;\n sandbox.log(message, 'warn');\n result.error = message;\n return result;\n }\n\n let commonSelectors: Selector[] = commonStrings.map(selector => splitSelectorString(selector));\n let nativeSelectors: Selector[] = nativeStrings.map(selector => splitSelectorString(selector));\n const enumSelectorObjects: Selector[] = enumStrings.map(_enum => splitSelectorString(_enum));\n const allSelectors: Selector[] = commonSelectors.concat(nativeSelectors, enumSelectorObjects);\n\n // These selectors match the state or object ID and don't belong in the common/native selectors\n // Also use RegExp for the ID matching\n const stateIdSelectors: Selector[] = allSelectors\n .filter(selector => selector.attr === 'state.id')\n .map(selector => addRegExpToIdAttrSelectors(selector));\n const objectIdSelectors: Selector[] = allSelectors\n .filter(selector => selector.attr === 'id')\n .map(selector => addRegExpToIdAttrSelectors(selector));\n commonSelectors = commonSelectors.filter(\n selector => selector.attr !== 'state.id' && selector.attr !== 'id',\n );\n nativeSelectors = nativeSelectors.filter(\n selector => selector.attr !== 'state.id' && selector.attr !== 'id',\n );\n const enumSelectors: string[] = enumSelectorObjects\n .filter(selector => selector.attr !== 'state.id' && selector.attr !== 'id')\n // enums are filtered by their enum id, so transform the selector into that\n .map(selector => `enum.${selector.attr}.${selector.value}`);\n\n name = name.trim();\n\n if (name === 'channel' || name === 'device') {\n // Fill the channels and devices objects with the IDs of all their states,\n // so we can loop over them afterward\n if (!context.channels || !context.devices) {\n context.channels = {};\n context.devices = {};\n for (const _id in objects) {\n if (Object.prototype.hasOwnProperty.call(objects, _id) && objects[_id].type === 'state') {\n const parts = _id.split('.');\n parts.pop();\n const chn = parts.join('.');\n\n parts.pop();\n const dev = parts.join('.');\n\n context.devices[dev] = context.devices[dev] || [];\n context.devices[dev].push(_id);\n\n context.channels[chn] = context.channels[chn] || [];\n context.channels[chn].push(_id);\n }\n }\n }\n }\n\n if (name === 'schedule') {\n if (!context.schedules) {\n context.schedules = [];\n for (const _id in objects) {\n if (Object.prototype.hasOwnProperty.call(objects, _id) && objects[_id].type === 'schedule') {\n context.schedules.push(_id);\n }\n }\n }\n }\n\n /**\n * applies all selectors targeting an object or state ID\n */\n function applyIDSelectors(objId: string, selectors: Selector[]): boolean {\n // Only keep the ID if it matches every ID selector\n return selectors.every(selector => !selector.idRegExp || selector.idRegExp.test(objId));\n }\n\n /**\n * Applies all selectors targeting the Object common properties\n *\n * @param objId - The ID of the object in question\n */\n function applyCommonSelectors(objId: string): boolean {\n const obj = objects[objId];\n if (!obj?.common) {\n return false;\n }\n const objCommon = obj.common;\n\n // make sure this object satisfies all selectors\n return commonSelectors.every(\n selector =>\n // ensure a property exists\n (selector.value === undefined && objCommon[selector.attr] !== undefined) ||\n // or match exact values\n looselyEqualsString(objCommon[selector.attr], selector.value),\n );\n }\n\n /**\n * Applies all selectors targeting the Object native properties\n *\n * @param objId - The ID of the object in question\n */\n function applyNativeSelectors(objId: string): boolean {\n const obj = objects[objId];\n if (!obj || !obj.native) {\n return false;\n }\n const objNative = obj.native;\n // make sure this object satisfies all selectors\n return nativeSelectors.every(\n selector =>\n // ensure a property exists\n (selector.value === undefined && objNative[selector.attr] !== undefined) ||\n // or match exact values\n looselyEqualsString(objNative[selector.attr], selector.value),\n );\n }\n\n /**\n * Applies all selectors targeting the Objects enums\n *\n * @param objId - The ID of the object in question\n */\n function applyEnumSelectors(objId: string): boolean {\n const enumIds: string[] = [];\n eventObj.getObjectEnumsSync(context, objId, enumIds);\n // make sure this object satisfies all selectors\n return enumSelectors.every(_enum => enumIds.includes(_enum));\n }\n\n let res: string[];\n\n if (name === 'schedule') {\n res = context.schedules || [];\n if (objectIdSelectors.length) {\n res = res.filter(channelId => applyIDSelectors(channelId, objectIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(id => applyCommonSelectors(id));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(id => applyNativeSelectors(id));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(channelId => applyEnumSelectors(channelId));\n }\n } else if (name === 'channel') {\n if (!context.channels) {\n // TODO: fill the channels and maintain them on all places where context.stateIds will be changed\n }\n const channels = context.channels || {};\n\n // go through all channels\n res = Object.keys(channels);\n // filter out those that don't match every ID selector for the channel ID\n if (objectIdSelectors.length) {\n res = res.filter(channelId => applyIDSelectors(channelId, objectIdSelectors));\n }\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(channelId => applyCommonSelectors(channelId));\n }\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(channelId => applyNativeSelectors(channelId));\n }\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(channelId => applyEnumSelectors(channelId));\n }\n\n // retrieve the state ID collection for all remaining channels\n res = res\n .map(id => channels[id])\n // and flatten the array to get only the state IDs\n .reduce((acc, next) => acc.concat(next), []);\n\n // now filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(stateId => applyIDSelectors(stateId, stateIdSelectors));\n }\n } else if (name === 'device') {\n if (!context.devices) {\n // TODO: fill the devices and maintain them on all places where context.stateIds will be changed\n }\n\n const devices = context.devices || {};\n\n // go through all devices\n res = Object.keys(devices);\n // filter out those that don't match every ID selector for the channel ID\n if (objectIdSelectors.length) {\n res = res.filter(deviceId => applyIDSelectors(deviceId, objectIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(deviceId => applyCommonSelectors(deviceId));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(deviceId => applyNativeSelectors(deviceId));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(deviceId => applyEnumSelectors(deviceId));\n }\n\n // retrieve the state ID collection for all remaining devices\n res = res\n .map(id => devices[id])\n // and flatten the array to get only the state IDs\n .reduce((acc, next) => acc.concat(next), []);\n\n // now filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(stateId => applyIDSelectors(stateId, stateIdSelectors));\n }\n } else {\n // go through all states\n res = context.stateIds;\n // if the \"name\" is not state, then we filter for the ID as well\n if (name && name !== 'state') {\n const r = new RegExp(`^${name.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*')}$`);\n res = res.filter(id => r.test(id));\n }\n\n // filter out those that don't match every ID selector for the object ID or the state ID\n if (objectIdSelectors.length) {\n res = res.filter(id => applyIDSelectors(id, objectIdSelectors));\n }\n\n // filter out those that don't match every ID selector for the state ID\n if (stateIdSelectors.length) {\n res = res.filter(id => applyIDSelectors(id, stateIdSelectors));\n }\n\n // filter out those that don't match every common selector\n if (commonSelectors.length) {\n res = res.filter(id => applyCommonSelectors(id));\n }\n\n // filter out those that don't match every native selector\n if (nativeSelectors.length) {\n res = res.filter(id => applyNativeSelectors(id));\n }\n\n // filter out those that don't match every enum selector\n if (enumSelectors.length) {\n res = res.filter(id => applyEnumSelectors(id));\n }\n }\n\n const resUnique: string[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!resUnique.includes(res[i])) {\n resUnique.push(res[i]);\n }\n }\n\n for (let i = 0; i < resUnique.length; i++) {\n result[i] = resUnique[i];\n }\n result.length = resUnique.length;\n\n // Implementing the Symbol.iterator contract makes the query result iterable\n result[Symbol.iterator] = function* () {\n for (let i = 0; i < result.length; i++) {\n yield result[i];\n }\n };\n result.toArray = function (): string[] {\n return [...resUnique];\n };\n result.each = function (callback: (id: string, index: number) => void | false): iobJS.QueryResult {\n if (typeof callback === 'function') {\n let r: boolean | void;\n for (let i = 0; i < this.length; i++) {\n r = callback(result[i], i);\n if (r === false) {\n break;\n }\n }\n }\n return this;\n };\n // @ts-expect-error fix later\n result.getState = function (\n callback?: iobJS.GetStateCallback,\n ): void | null | undefined | iobJS.TypedState | iobJS.AbsentState {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n if (typeof callback !== 'function') {\n sandbox.log('You cannot use this function synchronous', 'error');\n } else {\n void adapter.getForeignState(\n this[0],\n (err: Error | null | undefined, state?: ioBroker.State | null): void => {\n void callback(\n err,\n context.convertBackStringifiedValues(this[0], state) as\n | iobJS.TypedState\n | iobJS.AbsentState,\n );\n },\n );\n }\n } else {\n if (!this[0]) {\n return null;\n }\n if (context.interimStateValues[this[0]] !== undefined) {\n return context.convertBackStringifiedValues(this[0], context.interimStateValues[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState;\n }\n return context.convertBackStringifiedValues(this[0], states[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState;\n }\n };\n result.getStateAsync = async function (): Promise<\n iobJS.TypedState | iobJS.AbsentState | null | undefined\n > {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n const state = await adapter.getForeignStateAsync(this[0]);\n return context.convertBackStringifiedValues(this[0], state) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n }\n if (!this[0]) {\n return null;\n }\n if (context.interimStateValues[this[0]] !== undefined) {\n return context.convertBackStringifiedValues(this[0], context.interimStateValues[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n }\n return context.convertBackStringifiedValues(this[0], states[this[0]]) as\n | iobJS.TypedState\n | iobJS.AbsentState\n | null;\n };\n result.setState = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | 'false' | 'true' | null | iobJS.SetStateCallback,\n callback?: iobJS.SetStateCallback,\n ) {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n void result\n .setStateAsync(state, isAck as boolean | 'false' | 'true')\n .then(() => typeof callback === 'function' && callback());\n return this;\n };\n result.setStateAsync = async function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n for (let i = 0; i < this.length; i++) {\n await sandbox.setStateAsync(this[i], state, isAck);\n }\n };\n result.setStateChanged = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n callback?: () => void,\n ) {\n if (typeof isAck === 'function') {\n callback = isAck;\n isAck = undefined;\n }\n void result.setStateChangedAsync(state, isAck).then(() => typeof callback === 'function' && callback());\n return this;\n };\n result.setStateChangedAsync = async function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n for (let i = 0; i < this.length; i++) {\n await sandbox.setStateChangedAsync(this[i], state, isAck);\n }\n };\n result.setStateDelayed = function (\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | number | undefined,\n delay?: number | boolean,\n clearRunning?: boolean | (() => void),\n callback?: () => void,\n ) {\n if (typeof isAck !== 'boolean') {\n callback = clearRunning as () => void;\n clearRunning = delay as boolean;\n delay = isAck as number;\n isAck = undefined;\n }\n if (typeof delay !== 'number') {\n callback = clearRunning as () => void;\n clearRunning = delay;\n delay = 0;\n }\n if (typeof clearRunning !== 'boolean') {\n callback = clearRunning;\n clearRunning = true;\n }\n let count = this.length;\n for (let i = 0; i < this.length; i++) {\n sandbox.setStateDelayed(this[i], state, isAck as boolean, delay, clearRunning, () => {\n if (!--count && typeof callback === 'function') {\n callback();\n }\n });\n }\n return this;\n };\n result.on = function (callbackOrId: string | ((data: any) => void), value?: any) {\n for (let i = 0; i < this.length; i++) {\n sandbox.subscribe(this[i], callbackOrId, value);\n }\n return this;\n };\n return result;\n },\n log: function (msg: string, severity?: ioBroker.LogLevel): void {\n severity = severity || 'info';\n\n // disable log in log handler (prevent endless loops)\n if (sandbox.logHandler && (sandbox.logHandler === severity || sandbox.logHandler === '*')) {\n return;\n }\n\n if (!adapter.log[severity]) {\n msg = `Unknown severity level \"${severity}\" by log of [${msg}]`;\n severity = 'warn';\n }\n\n if (msg && typeof msg !== 'string') {\n msg = mods.util.format(msg);\n }\n\n if (debugMode) {\n console.log(`${severity}$$${name}$$${msg}`, Date.now());\n } else {\n adapter.log[severity](`${name}: ${msg}`);\n }\n },\n onLog: function (severity: ioBroker.LogLevel, callback: (info: LogMessage) => void): number {\n if (!['info', 'error', 'debug', 'silly', 'warn', '*'].includes(severity)) {\n sandbox.log(`Unknown severity \"${severity}\"`, 'warn');\n return 0;\n }\n if (typeof callback !== 'function') {\n sandbox.log(`Invalid callback for onLog`, 'warn');\n return 0;\n }\n\n const handler = { id: Date.now() + Math.floor(Math.random() * 10000), cb: callback, sandbox, severity };\n context.logSubscriptions[sandbox.scriptName] = context.logSubscriptions[sandbox.scriptName] || [];\n context.logSubscriptions[sandbox.scriptName].push(handler);\n context.updateLogSubscriptions();\n\n sandbox.__engine.__subscriptionsLog += 1;\n\n sandbox.verbose &&\n sandbox.log(\n `onLog(severity=${severity}, id=${handler.id}) - logSubscriptions=${sandbox.__engine.__subscriptionsLog}`,\n 'info',\n );\n\n if (\n sandbox.__engine.__subscriptionsLog %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsLog} log subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n return handler.id;\n },\n onLogUnregister: function (\n idOrCallbackOrSeverity: number | ioBroker.LogLevel | ((info: LogMessage) => void),\n ): boolean {\n let found = false;\n\n if (context.logSubscriptions?.[sandbox.scriptName]) {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}) - logSubscriptions=${sandbox.__engine.__subscriptionsLog}`,\n 'info',\n );\n\n for (let i = 0; i < context.logSubscriptions[sandbox.scriptName].length; i++) {\n if (\n context.logSubscriptions[sandbox.scriptName][i].cb === idOrCallbackOrSeverity ||\n context.logSubscriptions[sandbox.scriptName][i].id === idOrCallbackOrSeverity ||\n context.logSubscriptions[sandbox.scriptName][i].severity === idOrCallbackOrSeverity\n ) {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}, removing id=${context.logSubscriptions[sandbox.scriptName][i].id})`,\n 'info',\n );\n\n context.logSubscriptions[sandbox.scriptName].splice(i, 1);\n i--;\n sandbox.__engine.__subscriptionsLog--;\n\n found = true;\n\n // if deletion via ID\n if (typeof idOrCallbackOrSeverity === 'number') {\n break;\n }\n } else {\n sandbox.verbose &&\n sandbox.log(\n `onLogUnregister(idOrCallbackOrSeverity=${JSON.stringify(idOrCallbackOrSeverity)}) NOT = ${JSON.stringify(context.logSubscriptions[sandbox.scriptName][i])}`,\n 'info',\n );\n }\n }\n }\n\n context.updateLogSubscriptions();\n\n return found;\n },\n exec: function (\n cmd: string,\n options?: ExecOptions | ((error: Error | null | string, stdout?: string, stderr?: string) => void),\n callback?: (error: Error | null | string, stdout?: string, stderr?: string) => void,\n ): undefined | ChildProcess {\n if (typeof options === 'function') {\n callback = options as (error: Error | null | string, stdout?: string, stderr?: string) => void;\n options = {};\n }\n if (!(adapter.config as JavaScriptAdapterConfig).enableExec) {\n const error = 'exec is not available. Please enable \"Enable Exec\" option in instance settings';\n sandbox.log(error, 'error');\n\n if (typeof callback === 'function') {\n setImmediate(callback, error, undefined, undefined);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`exec(cmd=${cmd})`, 'info');\n }\n\n if (debug) {\n sandbox.log(words._('Command %s was not executed, while debug mode is active', cmd), 'warn');\n if (typeof callback === 'function') {\n setImmediate(function () {\n callback(null, '', '');\n });\n }\n } else {\n return mods.child_process.exec(\n cmd,\n options,\n (error: Error | null, stdout: string, stderr: string): void => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, error, stdout, stderr);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n );\n }\n }\n },\n email: function (msg: string | SendMailOptions): void {\n if (sandbox.verbose) {\n sandbox.log(`email(msg=${JSON.stringify(msg)})`, 'info');\n }\n sandbox.log(`email(msg=${JSON.stringify(msg)}) is deprecated. Please use sendTo instead!`, 'warn');\n adapter.sendTo('email', msg);\n },\n pushover: function (msg: string | PushoverOptions): void {\n if (sandbox.verbose) {\n sandbox.log(`pushover(msg=${JSON.stringify(msg)})`, 'info');\n }\n sandbox.log(`pushover(msg=${JSON.stringify(msg)}) is deprecated. Please use sendTo instead!`, 'warn');\n adapter.sendTo('pushover', msg);\n },\n httpGet: function (\n url: string,\n options:\n | {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n }\n | ((\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void),\n callback?: (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void,\n ): void {\n if (typeof options === 'function') {\n callback = options as (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void;\n options = {};\n }\n\n const config = {\n ...getHttpRequestConfig(url, options, context.allowSelfSignedCerts),\n method: 'get',\n };\n\n if (sandbox.verbose) {\n sandbox.log(`httpGet(config=${JSON.stringify(config)})`, 'info');\n }\n\n const startTime = Date.now();\n\n mods.axios\n .default(config)\n .then((response: AxiosResponse) => {\n const responseTime = Date.now() - startTime;\n\n if (sandbox.verbose) {\n sandbox.log(`httpGet(url=${url}, responseTime=${responseTime}ms)`, 'info');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, {\n statusCode: response.status,\n data: response.data,\n headers: response.headers as Record,\n responseTime,\n });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n })\n .catch((error: any) => {\n const responseTime = Date.now() - startTime;\n\n sandbox.log(`httpGet(url=${url}, error=${error.message})`, 'error');\n\n if (typeof callback === 'function') {\n let result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n } = {\n statusCode: null,\n data: null,\n headers: {},\n responseTime,\n };\n\n if (error.response) {\n result = {\n statusCode: error.response.status,\n data: error.response.data,\n headers: error.response.headers,\n responseTime,\n };\n }\n\n try {\n callback.call(sandbox, error.message, result);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n },\n httpPost: function (\n url: string,\n data: any,\n options:\n | {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n }\n | ((\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void),\n callback?: (\n error: Error | null,\n result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n },\n ) => void,\n ): void {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n const config = {\n ...getHttpRequestConfig(\n url,\n options as {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n context.allowSelfSignedCerts,\n ),\n method: 'post',\n data,\n };\n\n if (sandbox.verbose) {\n sandbox.log(`httpPost(config=${JSON.stringify(config)}, data=${data})`, 'info');\n }\n\n const startTime = Date.now();\n\n mods.axios\n .default(config)\n .then((response: AxiosResponse) => {\n const responseTime = Date.now() - startTime;\n\n if (sandbox.verbose) {\n sandbox.log(`httpPost(url=${url}, responseTime=${responseTime}ms)`, 'info');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, {\n statusCode: response.status,\n data: response.data,\n headers: response.headers,\n responseTime,\n });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n })\n .catch((error: unknown) => {\n const responseTime = Date.now() - startTime;\n\n sandbox.log(`httpPost(url=${url}, error=${(error as Error).message})`, 'error');\n\n if (typeof callback === 'function') {\n let result: {\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n } = {\n statusCode: null,\n data: null,\n headers: {},\n responseTime,\n };\n const response: AxiosResponse | undefined = (error as AxiosError).response;\n\n if (response) {\n result = {\n statusCode: response.status,\n data: response.data,\n headers: response.headers,\n responseTime,\n };\n }\n\n try {\n callback.call(sandbox, new Error((error as AxiosError).message), result);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n },\n createTempFile: function (fileName: string, data: Buffer | string): undefined | string {\n const os = mods.os;\n const path = mods.path;\n const fs = mods.fs;\n\n let tempDirPath = context.tempDirectories?.[sandbox.scriptName];\n\n if (!tempDirPath) {\n // create temp directory\n tempDirPath = fs.mkdtempSync(\n path.join(os.tmpdir(), `${sandbox.scriptName.substring(SCRIPT_CODE_MARKER.length)}-`),\n );\n context.tempDirectories[sandbox.scriptName] = tempDirPath;\n\n sandbox.verbose &&\n sandbox.log(\n `createTempFile(fileName=${fileName}, tempDirPath=${tempDirPath}) created temp directory in ${os.tmpdir()}`,\n 'info',\n );\n }\n\n const filePath = path.join(tempDirPath, fileName);\n\n // is sub dir?\n const fileDir = path.dirname(filePath);\n if (!fs.existsSync(fileDir)) {\n fs.mkdirSync(fileDir, { recursive: true });\n }\n\n if (typeof data === 'undefined') {\n sandbox.log(\n `createTempFile(fileName=${fileName}, fileDir=${fileDir}, filePath=${filePath}) data is undefined, file not created!`,\n 'error',\n );\n\n return undefined;\n }\n\n fs.writeFileSync(filePath, data);\n sandbox.verbose &&\n sandbox.log(`createTempFile(fileName=${fileName}, fileDir=${fileDir}, filePath=${filePath})`, 'info');\n\n return filePath;\n },\n subscribe: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n callbackOrChangeTypeOrId: string | ChangeType | ((event?: EventObj) => void),\n value?: any,\n ):\n | SubscriptionResult\n | IobSchedule\n | string\n | null\n | undefined\n | (SubscriptionResult | IobSchedule | string | null | undefined)[] {\n // If a schedule object is given\n if (\n (typeof pattern === 'string' && pattern[0] === '{') ||\n (typeof pattern === 'object' && (pattern as SchedulerRule).period)\n ) {\n return sandbox.schedule(pattern as SchedulerRule, callbackOrChangeTypeOrId as () => void);\n }\n // If an array of schedules is given\n if (pattern && Array.isArray(pattern)) {\n const result: (IobSchedule | string | null | undefined)[] = [];\n for (const p of pattern) {\n result.push(\n sandbox.subscribe(p as SchedulerRule | string, callbackOrChangeTypeOrId, value) as\n | IobSchedule\n | string\n | null\n | undefined,\n );\n }\n return result;\n }\n\n // detect subscribe('id', 'any', (obj) => {})\n let oPattern: Pattern;\n if (\n (typeof pattern === 'string' || pattern instanceof RegExp) &&\n typeof callbackOrChangeTypeOrId === 'string' &&\n typeof value === 'function'\n ) {\n oPattern = { id: pattern, change: callbackOrChangeTypeOrId as ChangeType };\n callbackOrChangeTypeOrId = value;\n value = undefined;\n } else {\n oPattern = pattern as Pattern;\n }\n\n if (oPattern?.id && Array.isArray(oPattern.id)) {\n const result: (IobSchedule | string | null | undefined)[] = [];\n for (let t = 0; t < oPattern.id.length; t++) {\n const pa: Pattern = JSON.parse(JSON.stringify(oPattern));\n pa.id = oPattern.id[t];\n result.push(\n sandbox.subscribe(pa, callbackOrChangeTypeOrId, value) as\n | IobSchedule\n | string\n | null\n | undefined,\n );\n }\n return result;\n }\n\n // try to detect astro or cron (by spaces)\n if (isObject(pattern) || (typeof pattern === 'string' && pattern.match(/[,/\\d*]+\\s[,/\\d*]+\\s[,/\\d*]+/))) {\n if ((pattern as AstroRule).astro) {\n return sandbox.schedule(pattern as AstroRule, callbackOrChangeTypeOrId as () => void);\n } else if ((pattern as TimeRule).time) {\n return sandbox.schedule(\n (pattern as TimeRule).time as string,\n callbackOrChangeTypeOrId as () => void,\n );\n }\n }\n\n let callback: undefined | ((obj: EventObj) => void);\n\n // source is set by regexp if defined as /regexp/\n if (!isObject(pattern) || pattern instanceof RegExp || (pattern as RegExp).source) {\n oPattern = { id: pattern as string | RegExp, change: 'ne' };\n }\n\n if (oPattern.id !== undefined && !oPattern.id) {\n sandbox.log(`Error by subscription (trigger): empty ID defined. All states matched.`, 'error');\n return;\n } else if (typeof oPattern.id === 'boolean' || typeof oPattern.id === 'number') {\n sandbox.log(`Error by subscription (trigger): Wrong ID of type boolean or number.`, 'error');\n return;\n }\n\n sandbox.__engine.__subscriptions += 1;\n\n if (\n sandbox.__engine.__subscriptions % (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptions} subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n if (oPattern.q === undefined) {\n oPattern.q = 0;\n }\n\n // add adapter namespace if nothing given\n if (oPattern.id && typeof oPattern.id === 'string' && !oPattern.id.includes('.')) {\n oPattern.id = `${adapter.namespace}.${oPattern.id}`;\n }\n\n if (typeof callbackOrChangeTypeOrId === 'function') {\n callback = callbackOrChangeTypeOrId;\n } else {\n if (typeof value === 'undefined') {\n callback = function (obj: EventObj) {\n sandbox.setState(callbackOrChangeTypeOrId, obj.newState.val);\n };\n } else {\n callback = function (/* obj */) {\n sandbox.setState(callbackOrChangeTypeOrId, value);\n };\n }\n }\n\n const subs: SubscriptionResult = {\n pattern: oPattern,\n callback: (obj: EventObj) => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, obj);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n name,\n };\n\n // try to extract adapter\n if (oPattern.id && typeof oPattern.id === 'string') {\n const parts = oPattern.id.split('.');\n const a = `${parts[0]}.${parts[1]}`;\n const _adapter = `system.adapter.${a}`;\n\n if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) {\n const alive = `system.adapter.${a}.alive`;\n context.adapterSubs[alive] = context.adapterSubs[alive] || [];\n\n const subExists = context.adapterSubs[alive].filter(sub => sub === oPattern.id).length > 0;\n\n if (!subExists) {\n context.adapterSubs[alive].push(oPattern.id);\n adapter.sendTo(a, 'subscribe', oPattern.id);\n }\n }\n }\n if (sandbox.verbose) {\n sandbox.log(`subscribe: ${JSON.stringify(subs)}`, 'info');\n }\n\n subscribePattern(script, oPattern.id as string);\n\n subs.patternCompareFunctions = getPatternCompareFunctions(oPattern);\n context.subscriptions.push(subs);\n\n if (oPattern.enumName || oPattern.enumId) {\n context.isEnums = true;\n }\n return subs;\n },\n getSubscriptions: function (): Record {\n const result: Record = {};\n for (let s = 0; s < context.subscriptions.length; s++) {\n result[context.subscriptions[s].pattern.id as string] =\n result[context.subscriptions[s].pattern.id as string] || [];\n result[context.subscriptions[s].pattern.id as string].push({\n name: context.subscriptions[s].name,\n pattern: context.subscriptions[s].pattern,\n });\n }\n if (sandbox.verbose) {\n sandbox.log(`getSubscriptions() => ${JSON.stringify(result)}`, 'info');\n }\n return result;\n },\n getFileSubscriptions: function (): Record {\n const result: Record = {};\n for (let s = 0; s < context.subscriptionsFile.length; s++) {\n const key = `${context.subscriptionsFile[s].id}$%$${context.subscriptionsFile[s].fileNamePattern}`;\n result[key] = result[key] || [];\n result[key].push({\n name: context.subscriptionsFile[s].name,\n id: context.subscriptionsFile[s].id,\n fileNamePattern: context.subscriptionsFile[s].fileNamePattern,\n });\n }\n if (sandbox.verbose) {\n sandbox.log(`getFileSubscriptions() => ${JSON.stringify(result)}`, 'info');\n }\n return result;\n },\n adapterSubscribe: function (id: string): void {\n if (typeof id !== 'string') {\n sandbox.log(`adapterSubscribe: invalid type of id ${typeof id}`, 'error');\n return;\n }\n const parts = id.split('.');\n const _adapter = `system.adapter.${parts[0]}.${parts[1]}`;\n if (objects[_adapter]?.common?.subscribable) {\n const a = `${parts[0]}.${parts[1]}`;\n const alive = `system.adapter.${a}.alive`;\n context.adapterSubs[alive] = context.adapterSubs[alive] || [];\n context.adapterSubs[alive].push(id);\n if (sandbox.verbose) {\n sandbox.log(`adapterSubscribe: ${a} - ${id}`, 'info');\n }\n adapter.sendTo(a, 'subscribe', id);\n }\n },\n adapterUnsubscribe: function (\n idOrObject: string | SubscriptionResult | (string | SubscriptionResult)[],\n ): boolean | boolean[] {\n // todo: BF - it could be an error\n return sandbox.unsubscribe(idOrObject);\n },\n unsubscribe: function (\n idOrObject: string | SubscriptionResult | (string | SubscriptionResult)[],\n ): boolean | boolean[] {\n if (idOrObject && Array.isArray(idOrObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < idOrObject.length; t++) {\n result.push(sandbox.unsubscribe(idOrObject[t]) as boolean);\n }\n return result;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`adapterUnsubscribe(id=${JSON.stringify(idOrObject)})`, 'info');\n }\n\n if (isObject(idOrObject)) {\n for (let i = context.subscriptions.length - 1; i >= 0; i--) {\n if (context.subscriptions[i] === idOrObject) {\n unsubscribePattern(script, context.subscriptions[i].pattern.id as string);\n context.subscriptions.splice(i, 1);\n sandbox.__engine.__subscriptions--;\n return true;\n }\n }\n return false;\n }\n let deleted = 0;\n for (let i = context.subscriptions.length - 1; i >= 0; i--) {\n if (context.subscriptions[i].name === name && context.subscriptions[i].pattern.id === idOrObject) {\n deleted++;\n unsubscribePattern(script, context.subscriptions[i].pattern.id as string);\n context.subscriptions.splice(i, 1);\n sandbox.__engine.__subscriptions--;\n }\n }\n return !!deleted;\n },\n on: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n callbackOrChangeTypeOrId: string | ChangeType | ((event?: EventObj) => void),\n value?: any,\n ):\n | SubscriptionResult\n | IobSchedule\n | string\n | null\n | undefined\n | (SubscriptionResult | IobSchedule | string | null | undefined)[] {\n return sandbox.subscribe(pattern, callbackOrChangeTypeOrId, value);\n },\n onEnumMembers: function (enumId: string, callback: (event?: EventObj) => void): void {\n if (enums.includes(enumId)) {\n const subscriptions: Record = {};\n\n const init = (): void => {\n const obj: ioBroker.EnumObject = objects[enumId] as ioBroker.EnumObject;\n const common: ioBroker.EnumCommon = obj?.common ?? {};\n const members: string[] = common?.members ?? [];\n\n // Remove old subscriptions\n for (const [objId, subscription] of Object.entries(subscriptions)) {\n if (!members.includes(objId)) {\n sandbox.unsubscribe(subscription);\n delete subscriptions[objId];\n }\n }\n\n // Subscribe to all members of enum\n for (const objId of members) {\n if (!Object.keys(subscriptions).includes(objId)) {\n if (objects?.[objId]?.type === 'state') {\n // Just subscribe to states\n subscriptions[objId] = sandbox.subscribe(objId, callback) as\n | string\n | SubscriptionResult; // TODO: more features\n }\n }\n }\n\n sandbox.verbose &&\n sandbox.log(\n `onEnumMembers(id=${enumId}, members=${JSON.stringify(Object.keys(subscriptions))})`,\n 'info',\n );\n };\n\n init();\n\n sandbox.subscribeObject(enumId, obj => obj && init());\n } else {\n sandbox.log(`onEnumMembers: enum with id \"${enumId}\" doesn't exists`, 'error');\n }\n },\n onFile: function (\n id: string,\n fileNamePattern: string | string[],\n withFileOrCallback:\n | boolean\n | ((id: string, fileName: string, size: number, file?: string | Buffer, mimeType?: string) => void),\n callback?: (\n id: string,\n fileName: string,\n size: number | null,\n file?: string | Buffer,\n mimeType?: string,\n ) => void,\n ): undefined | FileSubscriptionResult | (undefined | FileSubscriptionResult)[] {\n if (typeof withFileOrCallback === 'function') {\n callback = withFileOrCallback as (\n id: string,\n fileName: string,\n size: number | null,\n file?: string | Buffer,\n mimeType?: string,\n ) => void;\n withFileOrCallback = false;\n }\n\n if (!adapter.subscribeForeignFiles) {\n sandbox.log(\n 'onFile: your js-controller does not support yet onFile subscribes. Please update to js-controller@4.1.x or newer',\n 'warn',\n );\n return;\n }\n if (!id || !fileNamePattern) {\n sandbox.log(\n 'onFile: invalid parameters. Usage: onFile(\"vis.0\", \"main/*\", true, (id, fileName, size, file, mimeType) => {});',\n 'error',\n );\n return;\n }\n if (typeof callback !== 'function') {\n sandbox.offFile(id, fileNamePattern);\n return;\n }\n\n if (Array.isArray(fileNamePattern)) {\n return fileNamePattern.map(\n filePattern =>\n sandbox.onFile(id, filePattern, withFileOrCallback, callback) as\n | undefined\n | FileSubscriptionResult,\n );\n }\n\n sandbox.__engine.__subscriptionsFile += 1;\n\n sandbox.verbose &&\n sandbox.log(\n `onFile(id=${id}, fileNamePattern=${fileNamePattern}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`,\n 'info',\n );\n\n if (\n sandbox.__engine.__subscriptionsFile %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsFile} file subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n let idRegEx: RegExp | undefined;\n let fileRegEx: RegExp | undefined;\n if (id.includes('*')) {\n idRegEx = new RegExp(pattern2RegEx(id));\n }\n if (fileNamePattern.includes('*')) {\n fileRegEx = new RegExp(pattern2RegEx(fileNamePattern));\n }\n\n const subs: FileSubscriptionResult = {\n id,\n fileNamePattern,\n withFile: withFileOrCallback,\n idRegEx,\n fileRegEx,\n callback: (id: string, fileName: string, size: number | null, withFile: boolean): void => {\n try {\n sandbox.verbose &&\n sandbox.log(`onFile changed(id=${id}, fileName=${fileName}, size=${size})`, 'info');\n\n if (withFile && (size || 0) > 0) {\n adapter\n .readFileAsync(id, fileName)\n .then(data => {\n try {\n callback.call(sandbox, id, fileName, size, data.file, data.mimeType);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n })\n .catch(error => errorInCallback(error));\n } else {\n callback.call(sandbox, id, fileName, size);\n }\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n },\n name,\n };\n\n context.subscriptionsFile.push(subs);\n subscribeFile(script, id, fileNamePattern);\n return subs;\n },\n offFile: function (\n idOrObject: FileSubscriptionResult | string | (FileSubscriptionResult | string)[],\n fileNamePattern?: string | string[],\n ): boolean | boolean[] {\n if (!adapter.unsubscribeForeignFiles) {\n sandbox.log(\n 'offFile: your js-controller does not support yet file unsubscribes. Please update to js-controller@4.1.x or newer',\n 'warn',\n );\n return false;\n }\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(idOrObject=${JSON.stringify(idOrObject)}, fileNamePattern=${JSON.stringify(fileNamePattern)}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`,\n 'info',\n );\n\n if (idOrObject && typeof idOrObject === 'object') {\n if (Array.isArray(idOrObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < idOrObject.length; t++) {\n result.push(sandbox.offFile(idOrObject[t]) as boolean);\n }\n return result;\n }\n for (let i = context.subscriptionsFile.length - 1; i >= 0; i--) {\n if (context.subscriptionsFile[i] === idOrObject) {\n unsubscribeFile(\n script,\n context.subscriptionsFile[i].id,\n context.subscriptionsFile[i].fileNamePattern,\n );\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(type=object, fileNamePattern=${JSON.stringify(fileNamePattern)}, removing id=${context.subscriptionsFile[i].id})`,\n 'info',\n );\n\n context.subscriptionsFile.splice(i, 1);\n sandbox.__engine.__subscriptionsFile--;\n return true;\n }\n }\n return false;\n }\n\n if (fileNamePattern && Array.isArray(fileNamePattern)) {\n const result: boolean[] = [];\n for (let t = 0; t < fileNamePattern.length; t++) {\n result.push(sandbox.offFile(idOrObject, fileNamePattern[t]) as boolean);\n }\n return result;\n }\n\n let deleted = 0;\n for (let i = context.subscriptionsFile.length - 1; i >= 0; i--) {\n if (\n context.subscriptionsFile[i].id === idOrObject &&\n context.subscriptionsFile[i].fileNamePattern === fileNamePattern\n ) {\n deleted++;\n unsubscribeFile(\n script,\n context.subscriptionsFile[i].id,\n context.subscriptionsFile[i].fileNamePattern,\n );\n\n sandbox.verbose &&\n sandbox.log(\n `offFile(type=string, fileNamePattern=${fileNamePattern}, removing id=${context.subscriptionsFile[i].id})`,\n 'info',\n );\n\n context.subscriptionsFile.splice(i, 1);\n sandbox.__engine.__subscriptionsFile--;\n }\n }\n return !!deleted;\n },\n /** Registers a one-time subscription which automatically unsubscribes after the first invocation */\n once: function (\n pattern:\n | TimeRule\n | AstroRule\n | Pattern\n | SchedulerRule\n | string\n | (TimeRule | AstroRule | Pattern | SchedulerRule | string)[],\n callback?: (event?: EventObj) => void,\n ): string | SubscriptionResult | Promise {\n function _once(cb: (obj?: EventObj) => void): string | SubscriptionResult {\n // eslint-disable-next-line prefer-const\n let subscription: string | SubscriptionResult;\n const handler = (obj?: EventObj): void => {\n subscription && sandbox.unsubscribe(subscription);\n typeof cb === 'function' && cb(obj);\n };\n subscription = sandbox.subscribe(pattern, handler) as string | SubscriptionResult;\n return subscription;\n }\n if (typeof callback === 'function') {\n // Callback-style: once(\"id\", (obj) => { ... })\n return _once(callback);\n }\n\n // Promise-style: once(\"id\").then(obj => { ... })\n return new Promise(resolve => _once(resolve));\n },\n schedule: function (\n pattern: SchedulerRule | AstroRule | Date | string,\n callback: () => void,\n ): IobSchedule | string | null | undefined {\n if (typeof callback !== 'function') {\n sandbox.log(`schedule callback missing`, 'error');\n return null;\n }\n\n if (\n (typeof pattern === 'string' && pattern[0] === '{') ||\n (typeof pattern === 'object' && (pattern as SchedulerRule).period)\n ) {\n sandbox.verbose &&\n sandbox.log(\n `schedule(wizard=${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern})`,\n 'info',\n );\n\n if (!context.scheduler) {\n sandbox.log(\n `Cannot schedule \"${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern}\" because scheduler is not available`,\n 'error',\n );\n return null;\n }\n\n const schedule: string | null = context.scheduler.add(\n pattern as SchedulerRule | string,\n sandbox.scriptName,\n callback,\n );\n if (schedule) {\n script.wizards.push(schedule);\n sandbox.__engine.__schedules += 1;\n\n if (\n sandbox.__engine.__schedules %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n }\n\n return schedule;\n }\n\n const adapterConfig: JavaScriptAdapterConfig = adapter.config as JavaScriptAdapterConfig;\n\n if (typeof pattern === 'object' && (pattern as AstroRule).astro) {\n const astroPattern = pattern as AstroRule;\n const nowDate = new Date();\n\n if (\n adapterConfig.latitude === undefined ||\n adapterConfig.longitude === undefined ||\n adapterConfig.latitude === null ||\n adapterConfig.longitude === null\n ) {\n sandbox.log('Longitude or latitude does not set. Cannot use astro.', 'error');\n return null;\n }\n\n // ensure events are calculated independent of current time\n // TODO: use getAstroStartOfDay of adapter?\n const todayNoon = new Date(nowDate);\n todayNoon.setHours(12, 0, 0, 0);\n let ts = mods.suncalc.getTimes(todayNoon, adapterConfig.latitude, adapterConfig.longitude)[\n astroPattern.astro\n ];\n\n // event on the next day, correct or force recalculation at midnight\n if (todayNoon.getDate() !== ts.getDate()) {\n todayNoon.setDate(todayNoon.getDate() - 1);\n ts = mods.suncalc.getTimes(todayNoon, adapterConfig.latitude, adapterConfig.longitude)[\n astroPattern.astro\n ];\n }\n\n if (ts.getTime().toString() === 'NaN') {\n sandbox.log(\n `Cannot calculate \"${astroPattern.astro}\" for ${adapterConfig.latitude}, ${adapterConfig.longitude}`,\n 'warn',\n );\n ts = new Date(nowDate.getTime());\n\n if (\n astroPattern.astro === 'sunriseEnd' ||\n astroPattern.astro === 'goldenHourEnd' ||\n astroPattern.astro === 'sunset' ||\n astroPattern.astro === 'nightEnd' ||\n astroPattern.astro === 'nauticalDusk'\n ) {\n ts.setHours(23);\n ts.setMinutes(59);\n ts.setSeconds(59);\n } else {\n ts.setHours(23);\n ts.setMinutes(59);\n ts.setSeconds(58);\n }\n }\n\n if (ts && astroPattern.shift) {\n ts = new Date(ts.getTime() + astroPattern.shift * 60000);\n }\n\n if (!ts || ts < nowDate) {\n const date = new Date(nowDate);\n // Event doesn't occur today - try again tomorrow\n // Calculate time till 24:00 (local, NOT UTC) and set timeout\n date.setDate(date.getDate() + 1);\n date.setMinutes(0); // Sometimes timer fires at 23:59:59\n date.setHours(0);\n date.setSeconds(1);\n date.setMilliseconds(0);\n\n sandbox.__engine.__schedules += 1;\n\n if (sandbox.__engine.__schedules % adapterConfig.maxTriggersPerScript === 0) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n sandbox.verbose &&\n sandbox.log(\n `schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is tomorrow, waiting until ${date.toISOString()}`,\n 'info',\n );\n\n // Calculate new schedule in the next day\n sandbox.setTimeout(() => {\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n sandbox.schedule(astroPattern, callback);\n }, date.getTime() - Date.now());\n\n return;\n }\n\n sandbox.__engine.__schedules += 1;\n\n if (sandbox.__engine.__schedules % adapterConfig.maxTriggersPerScript === 0) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n sandbox.setTimeout(() => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n // Reschedule in 2 seconds\n sandbox.setTimeout(() => {\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n sandbox.schedule(astroPattern, callback);\n }, 2000);\n }, ts.getTime() - Date.now());\n\n sandbox.verbose &&\n sandbox.log(\n `schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is today, waiting until ${ts.toISOString()}`,\n 'info',\n );\n } else {\n // fix a problem with sunday and 7\n if (typeof pattern === 'string') {\n // this could be a CRON\n const parts = pattern.replace(/\\s+/g, ' ').split(' ');\n if (parts.length >= 5 && parseInt(parts[5], 10) >= 7) {\n parts[5] = '0';\n }\n pattern = parts.join(' ');\n }\n // created in VM the date object: pattern instanceof Date => false\n // so fix it\n if (typeof pattern === 'object' && (pattern as Date).getDate) {\n pattern = new Date(pattern as Date);\n }\n\n const schedule: IobSchedule = mods.nodeSchedule.scheduleJob(pattern, (): void => {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n if (schedule) {\n sandbox.__engine.__schedules += 1;\n\n if (\n sandbox.__engine.__schedules %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`,\n 'warn',\n );\n }\n\n schedule._ioBroker = {\n type: 'cron',\n pattern: pattern as string | Date,\n scriptName: sandbox.scriptName,\n id: `cron_${Date.now()}_${Math.round(Math.random() * 100000)}`,\n };\n\n script.schedules.push(schedule);\n } else {\n sandbox.log(`schedule(cron=${JSON.stringify(pattern)}): cannot create schedule`, 'error');\n }\n\n if (sandbox.verbose) {\n sandbox.log(`schedule(cron=${JSON.stringify(pattern)})`, 'info');\n }\n\n return schedule;\n }\n },\n scheduleById: function (id: string, ack: boolean | (() => void) | undefined, callback?: () => void): void {\n let scheduleId: IobSchedule | string | null | undefined = null;\n let currentExp: string | null = null; // current cron expression\n\n if (typeof ack === 'function') {\n callback = ack;\n ack = undefined;\n }\n\n const rhms = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$/; // hh:mm:ss\n const rhm = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/; // hh:mm\n\n const init = (time: string): void => {\n if (typeof time === 'string') {\n let h: number | undefined = undefined;\n let m: number | undefined = undefined;\n let s: number | undefined = undefined;\n\n let isValid = false;\n\n let result = time.match(rhms);\n if (result) {\n [, h, m, s] = result.map(v => parseInt(v));\n isValid = true;\n } else {\n result = time.match(rhm);\n if (result) {\n [, h, m] = result.map(v => parseInt(v));\n isValid = true;\n }\n }\n\n if (isValid) {\n const cronExp = `${s ?? '0'} ${m ?? '0'} ${h ?? '0'} * * *`;\n\n if (cronExp !== currentExp) {\n sandbox.verbose &&\n sandbox.log(\n `scheduleById(id=${id}): Init with expression ${cronExp} from ${time}`,\n 'info',\n );\n currentExp = cronExp;\n\n if (scheduleId) {\n sandbox.clearSchedule(scheduleId);\n scheduleId = null;\n }\n\n scheduleId = sandbox.schedule(cronExp, () => {\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n }\n } else {\n sandbox.log(\n `scheduleById(id=${id},time=${time}): cannot create schedule - invalid format (HH:MM:SS or H:M:S required)`,\n 'error',\n );\n }\n } else {\n sandbox.log(\n `scheduleById(id=${id}): cannot create schedule - invalid var type (no string)`,\n 'error',\n );\n }\n };\n\n sandbox.getState(id, (err, state) => {\n if (!err && state?.val) {\n if (sandbox.verbose) {\n sandbox.log(`scheduleById(id=${id}): Init with value ${state.val}`, 'info');\n }\n init(state.val.toString());\n }\n });\n\n const triggerDef: Pattern = { id, change: 'any' };\n if (ack !== undefined) {\n triggerDef.ack = ack;\n }\n\n sandbox.on(triggerDef, obj => {\n if (obj?.state?.val) {\n sandbox.verbose &&\n sandbox.log(`scheduleById(id=${id}): Update with value ${obj.state.val}`, 'info');\n init(obj.state.val.toString());\n }\n });\n },\n getAstroDate: function (pattern: AstroEvent, date?: Date | number, offsetMinutes?: number): Date | undefined {\n if (date === undefined) {\n date = new Date();\n }\n if (typeof date === 'number') {\n date = new Date(date);\n } else {\n date = new Date(date.getTime());\n }\n\n if (!consts.astroList.includes(pattern)) {\n const pos = consts.astroListLow.indexOf(pattern.toLowerCase());\n if (pos !== -1) {\n pattern = consts.astroList[pos];\n }\n }\n\n if (\n (!(adapter.config as JavaScriptAdapterConfig).latitude &&\n ((adapter.config as JavaScriptAdapterConfig).latitude as unknown as number) !== 0) ||\n (!(adapter.config as JavaScriptAdapterConfig).longitude &&\n ((adapter.config as JavaScriptAdapterConfig).longitude as unknown as number) !== 0)\n ) {\n sandbox.log('Longitude or latitude does not set. Cannot use astro.', 'error');\n return;\n }\n\n // ensure events are calculated independent of current time\n date.setHours(12, 0, 0, 0);\n let ts = mods.suncalc.getTimes(\n date,\n (adapter.config as JavaScriptAdapterConfig).latitude,\n (adapter.config as JavaScriptAdapterConfig).longitude,\n )[pattern];\n\n if (ts === undefined || ts.getTime().toString() === 'NaN') {\n sandbox.log(\n `Cannot calculate astro date \"${pattern}\" for ${(adapter.config as JavaScriptAdapterConfig).latitude}, ${(adapter.config as JavaScriptAdapterConfig).longitude}`,\n 'warn',\n );\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getAstroDate(pattern=${pattern}, date=${date.toString()}) => ${ts}`, 'info');\n }\n\n if (offsetMinutes !== undefined) {\n ts = new Date(ts.getTime() + offsetMinutes * 60000);\n }\n return ts;\n },\n isAstroDay: function (): boolean | undefined {\n const nowDate = new Date();\n const dayBegin = sandbox.getAstroDate('sunrise');\n const dayEnd = sandbox.getAstroDate('sunset');\n\n if (dayBegin === undefined || dayEnd === undefined) {\n return;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`isAstroDay() => ${nowDate >= dayBegin && nowDate <= dayEnd}`, 'info');\n }\n\n return nowDate >= dayBegin && nowDate <= dayEnd;\n },\n clearSchedule: function (schedule: IobSchedule | ScheduleName | string): boolean {\n if (context.scheduler?.get(schedule as string | ScheduleName)) {\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => wizard cleared', 'info');\n }\n const pos = script.wizards.indexOf(schedule as string);\n if (pos !== -1) {\n script.wizards.splice(pos, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n }\n context.scheduler.remove(schedule as string | ScheduleName);\n return true;\n }\n for (let i = 0; i < script.schedules.length; i++) {\n // Support both full IobSchedule objects (with nested _ioBroker) and\n // bare _ioBroker metadata objects as returned by getSchedules()\n const ioBrokerMeta =\n schedule && typeof schedule === 'object'\n ? (schedule as IobSchedule)._ioBroker || (schedule as { type?: string; id?: string })\n : undefined;\n if (ioBrokerMeta?.type === 'cron') {\n if (script.schedules[i]._ioBroker.id === ioBrokerMeta.id) {\n if (!mods.nodeSchedule.cancelJob(script.schedules[i])) {\n sandbox.log('Error by canceling scheduled job', 'error');\n }\n script.schedules.splice(i, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => cleared', 'info');\n }\n return true;\n }\n } else if (script.schedules[i] === schedule) {\n if (!mods.nodeSchedule.cancelJob(script.schedules[i])) {\n sandbox.log('Error by canceling scheduled job', 'error');\n }\n script.schedules.splice(i, 1);\n if (sandbox.__engine.__schedules > 0) {\n sandbox.__engine.__schedules--;\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => cleared', 'info');\n }\n return true;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log('clearSchedule() => invalid handler', 'warn');\n }\n return false;\n },\n getSchedules: function (allScripts?: boolean): ScheduleName[] {\n const schedules = context.scheduler?.getList() || [];\n if (allScripts) {\n Object.keys(context.scripts).forEach(\n name =>\n context.scripts[name].schedules &&\n context.scripts[name].schedules.forEach(s =>\n schedules.push(JSON.parse(JSON.stringify(s._ioBroker))),\n ),\n );\n } else {\n script.schedules &&\n script.schedules.forEach(s => schedules.push(JSON.parse(JSON.stringify(s._ioBroker))));\n }\n return schedules;\n },\n setState: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | 'true' | 'false' | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return setStateHelper(sandbox, false, false, id, state, isAck, callback);\n },\n setStateChanged: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return setStateHelper(sandbox, false, true, id, state, isAck, callback);\n },\n setStateDelayed: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck: boolean | number | undefined,\n delay?: number | boolean,\n clearRunning?: boolean | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): number | null {\n // find arguments\n if (typeof isAck !== 'boolean') {\n callback = clearRunning as (err?: Error | null) => void;\n clearRunning = delay as boolean;\n delay = isAck as number;\n isAck = undefined;\n }\n if (typeof delay !== 'number') {\n callback = clearRunning as (err?: Error | null) => void;\n clearRunning = delay as boolean;\n delay = 0;\n }\n if (typeof clearRunning !== 'boolean') {\n callback = clearRunning;\n clearRunning = true;\n }\n\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n sandbox.verbose &&\n sandbox.log(\n `setStateDelayed(id=${id}, state=${JSON.stringify(state)}, isAck=${isAck}, delay=${delay}, clearRunning=${clearRunning})`,\n 'info',\n );\n\n if (clearRunning) {\n if (timers[id]) {\n sandbox.verbose &&\n sandbox.log(`setStateDelayed: clear ${timers[id].length} running timers`, 'info');\n\n for (let i = 0; i < timers[id].length; i++) {\n clearTimeout(timers[id][i].t);\n }\n delete timers[id];\n } else {\n if (sandbox.verbose) {\n sandbox.log('setStateDelayed: no running timers', 'info');\n }\n }\n }\n // If no delay => starts immediately\n if (!delay) {\n sandbox.setState(id, state, isAck, callback);\n return null;\n }\n // If delay\n timers[id] = timers[id] || [];\n\n // calculate timerId\n context.timerId++;\n if (context.timerId > 0xfffffffe) {\n context.timerId = 0;\n }\n\n // Start timeout\n const timer = setTimeout(\n function (_timerId, _id, _state, _isAck) {\n sandbox.setState(_id, _state, _isAck, callback);\n // delete timer handler\n if (timers[_id]) {\n // optimisation\n if (timers[_id].length === 1) {\n delete timers[_id];\n } else {\n for (let t = 0; t < timers[_id].length; t++) {\n if (timers[_id][t].id === _timerId) {\n timers[_id].splice(t, 1);\n break;\n }\n }\n if (!timers[_id].length) {\n delete timers[_id];\n }\n }\n }\n },\n delay,\n context.timerId,\n id,\n state,\n isAck,\n );\n\n // add timer handler\n timers[id].push({\n t: timer,\n id: context.timerId,\n ts: Date.now(),\n delay: delay,\n val:\n isObject(state) && (state as ioBroker.SettableState).val !== undefined\n ? ((state as ioBroker.SettableState).val as ioBroker.StateValue)\n : (state as ioBroker.StateValue),\n ack:\n isObject(state) &&\n (state as ioBroker.SettableState).val !== undefined &&\n (state as ioBroker.SettableState).ack !== undefined\n ? (state as ioBroker.SettableState).ack\n : isAck,\n scriptName: name,\n });\n // Keep reverse-index in sync for O(1) cleanup in stopScript\n if (!context.timersByScript.has(name)) {\n context.timersByScript.set(name, new Set());\n }\n context.timersByScript.get(name)!.add(id);\n\n return context.timerId;\n },\n clearStateDelayed: function (id: string, timerId: number): boolean {\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`clearStateDelayed(id=${id}, timerId=${timerId})`, 'info');\n }\n\n if (timers[id]) {\n for (let i = timers[id].length - 1; i >= 0; i--) {\n if (timerId === undefined || timers[id][i].id === timerId) {\n clearTimeout(timers[id][i].t);\n if (timerId !== undefined) {\n timers[id].splice(i, 1);\n }\n if (sandbox.verbose) {\n sandbox.log(`clearStateDelayed: clear timer ${timers[id][i].id}`, 'info');\n }\n }\n }\n if (timerId === undefined) {\n delete timers[id];\n } else {\n if (!timers[id].length) {\n delete timers[id];\n }\n }\n return true;\n }\n return false;\n },\n getStateDelayed: function (\n id: string | number,\n ):\n | null\n | { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }\n | { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n | Record<\n string,\n { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n > {\n const now = Date.now();\n if (id) {\n // Check a type of state\n if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {\n id = `${adapter.namespace}.${id}`;\n }\n // If timerId given\n if (typeof id === 'number') {\n for (const _id_ in timers) {\n if (Object.prototype.hasOwnProperty.call(timers, _id_)) {\n for (let ttt = 0; ttt < timers[_id_].length; ttt++) {\n if (timers[_id_][ttt].id === id) {\n return {\n timerId: id,\n left: timers[_id_][ttt].delay - (now - timers[_id_][ttt].ts),\n delay: timers[_id_][ttt].delay,\n val: timers[_id_][ttt].val,\n ack: timers[_id_][ttt].ack,\n };\n }\n }\n }\n }\n return null;\n }\n\n const result: {\n timerId: number;\n left: number;\n delay: number;\n val: ioBroker.StateValue;\n ack?: boolean;\n }[] = [];\n if (Object.prototype.hasOwnProperty.call(timers, id) && timers[id] && timers[id].length) {\n for (let tt = 0; tt < timers[id].length; tt++) {\n result.push({\n timerId: timers[id][tt].id,\n left: timers[id][tt].delay - (now - timers[id][tt].ts),\n delay: timers[id][tt].delay,\n val: timers[id][tt].val,\n ack: timers[id][tt].ack,\n });\n }\n }\n return result;\n }\n const result: Record<\n string,\n { timerId: number; left: number; delay: number; val: ioBroker.StateValue; ack?: boolean }[]\n > = {};\n for (const _id in timers) {\n if (Object.prototype.hasOwnProperty.call(timers, _id) && timers[_id] && timers[_id].length) {\n result[_id] = [];\n for (let t = 0; t < timers[_id].length; t++) {\n result[_id].push({\n timerId: timers[_id][t].id,\n left: timers[_id][t].delay - (now - timers[_id][t].ts),\n delay: timers[_id][t].delay,\n val: timers[_id][t].val,\n ack: timers[_id][t].ack,\n });\n }\n }\n }\n return result;\n },\n getStateAsync: async function (id: string): Promise {\n let state: ioBroker.State | null | undefined;\n if (id.includes('.')) {\n state = await adapter.getForeignStateAsync(id);\n } else {\n state = await adapter.getStateAsync(id);\n }\n return context.convertBackStringifiedValues(id, state);\n },\n setStateAsync: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n return new Promise((resolve, reject) =>\n setStateHelper(sandbox, false, false, id, state, isAck, err => (err ? reject(err) : resolve())),\n );\n },\n setStateChangedAsync: function (\n id: string,\n state: ioBroker.SettableState | ioBroker.StateValue,\n isAck?: boolean,\n ): Promise {\n return new Promise((resolve, reject) =>\n setStateHelper(sandbox, false, true, id, state, isAck, err => (err ? reject(err) : resolve())),\n );\n },\n getState: function (\n id: string,\n callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void,\n ): undefined | void | (ioBroker.State & { notExist?: true }) | null {\n if (typeof id !== 'string') {\n sandbox.log(`getState has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return undefined;\n }\n\n if (typeof callback === 'function') {\n if (!id.includes('.')) {\n adapter.getState(id, (err, state) =>\n callback(err, context.convertBackStringifiedValues(id, state)),\n );\n } else {\n void adapter.getForeignState(id, (err, state) =>\n callback(err, context.convertBackStringifiedValues(id, state)),\n );\n }\n } else {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n sandbox.log(\n 'The \"getState\" method cannot be used synchronously, because the adapter setting \"Do not subscribe to all states on start\" is enabled.',\n 'error',\n );\n sandbox.log(\n `Please disable that setting or use \"getState\" with a callback, e.g.: getState('${id}', (err, state) => { ... });`,\n 'error',\n );\n } else {\n if (states[id]) {\n sandbox.verbose &&\n sandbox.log(\n `getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[id])}`,\n 'info',\n );\n if (context.interimStateValues[id] !== undefined) {\n return context.convertBackStringifiedValues(id, context.interimStateValues[id]);\n }\n return context.convertBackStringifiedValues(id, states[id]);\n } else if (states[`${adapter.namespace}.${id}`]) {\n sandbox.verbose &&\n sandbox.log(\n `getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[`${adapter.namespace}.${id}`])}`,\n 'info',\n );\n if (context.interimStateValues[`${adapter.namespace}.${id}`] !== undefined) {\n return context.convertBackStringifiedValues(\n id,\n context.interimStateValues[`${adapter.namespace}.${id}`],\n );\n }\n return context.convertBackStringifiedValues(id, states[`${adapter.namespace}.${id}`]);\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => not found`, 'info');\n }\n\n context.logWithLineInfo(\n `getState \"${id}\" not found (3)${states[id] !== undefined ? ` states[id]=${JSON.stringify(states[id])}` : ''}`,\n ); ///xxx\n return { val: null, notExist: true } as ioBroker.State & { notExist?: true };\n }\n }\n },\n existsState: function (\n id: string,\n callback?: (err: Error | null | undefined, stateExists?: boolean) => void,\n ): void | boolean {\n if (typeof id !== 'string') {\n sandbox.log(`existsState has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return false;\n }\n\n if (typeof callback === 'function') {\n void adapter.getForeignObject(id, (err, obj) => {\n if (!obj || obj.type !== 'state') {\n callback(err, false);\n return;\n }\n\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n void adapter.getForeignState(id, (err, state) => {\n callback(err, !!state);\n });\n } else {\n callback(err, !!states[id]);\n }\n });\n } else {\n if ((adapter.config as JavaScriptAdapterConfig).subscribe) {\n sandbox.log(\n 'The \"existsState\" method cannot be used synchronously, because the adapter setting \"Do not subscribe to all states on start\" is enabled.',\n 'error',\n );\n sandbox.log(\n `Please disable that setting or use \"existsState\" with a callback, e.g.: existsState('${id}', (err, stateExists) => { ... });`,\n 'error',\n );\n } else {\n return !!states[id];\n }\n }\n },\n existsObject: function (\n id: string,\n callback?: (err: Error | null | undefined, objectExists?: boolean) => void,\n ): void | boolean {\n if (typeof id !== 'string') {\n sandbox.log(\n `existsObject has been called with id of type \"${typeof id}\" but expects a string`,\n 'error',\n );\n return false;\n }\n\n if (typeof callback === 'function') {\n void adapter.getForeignObject(id, (err, obj) => callback(err, !!obj));\n } else {\n return !!objects[id];\n }\n },\n getIdByName: function (name: string, alwaysArray?: boolean): string | string[] | null {\n sandbox.verbose &&\n sandbox.log(\n `getIdByName(name=${name}, alwaysArray=${alwaysArray}) => ${JSON.stringify(context.names[name])}`,\n 'info',\n );\n if (Object.prototype.hasOwnProperty.call(context.names, name)) {\n if (alwaysArray) {\n return !Array.isArray(context.names[name]) ? [context.names[name]] : context.names[name];\n }\n return context.names[name];\n }\n if (alwaysArray) {\n return [];\n }\n return null;\n },\n getObject: function (\n id: string,\n enumName: null | string | ((err: Error | null | undefined, obj?: ioBroker.Object | null) => void),\n cb?: (err: Error | null | undefined, obj?: ioBroker.Object | null) => void,\n ): void | ioBroker.Object | null {\n if (typeof id !== 'string') {\n sandbox.log(`getObject has been called with id of type \"${typeof id}\" but expects a string`, 'error');\n return null;\n }\n\n if (typeof enumName === 'function') {\n cb = enumName;\n enumName = null;\n }\n // with callback\n if (typeof cb === 'function') {\n void adapter.getForeignObject(id, (err, obj) => {\n if (obj) {\n objects[id] = obj;\n } else if (objects[id]) {\n delete objects[id];\n }\n let result: ioBroker.Object | null | undefined;\n try {\n result = JSON.parse(JSON.stringify(objects[id]));\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getObject',\n });\n sandbox.log(`Object \"${id}\" can't be copied: ${JSON.stringify(err)}`, 'error');\n return cb(null, null);\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n cb(err, result);\n });\n } else {\n if (!objects[id]) {\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => does not exist`, 'info');\n sandbox.log(`Object \"${id}\" does not exist`, 'warn');\n return null;\n }\n if (enumName) {\n const e = eventObj.getObjectEnumsSync(context, id);\n const obj = JSON.parse(JSON.stringify(objects[id]));\n obj.enumIds = JSON.parse(JSON.stringify(e.enumIds));\n obj.enumNames = JSON.parse(JSON.stringify(e.enumNames));\n if (typeof enumName === 'string') {\n const r = new RegExp(`^enum\\\\.${enumName}\\\\.`);\n for (let i = obj.enumIds.length - 1; i >= 0; i--) {\n if (!r.test(obj.enumIds[i])) {\n obj.enumIds.splice(i, 1);\n obj.enumNames.splice(i, 1);\n }\n }\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(obj)}`, 'info');\n\n return obj;\n }\n let result: ioBroker.Object | null | undefined;\n try {\n result = JSON.parse(JSON.stringify(objects[id]));\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getObject',\n });\n sandbox.log(`Object \"${id}\" can't be copied: ${JSON.stringify(err)}`, 'error');\n return null;\n }\n sandbox.verbose &&\n sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n return result;\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n setObject: function (\n _id: string,\n _obj: ioBroker.Object,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n sandbox.log('Function \"setObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"setObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n extendObject: function (\n _id: string,\n _obj: Partial,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n sandbox.log('Function \"extendObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"extendObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n // This function will be overloaded later if the modification of objects is allowed\n deleteObject: function (\n _id: string,\n _isRecursive?: boolean | ioBroker.ErrorCallback,\n callback?: ioBroker.ErrorCallback,\n ): void {\n if (typeof _isRecursive === 'function') {\n callback = _isRecursive;\n }\n sandbox.log('Function \"deleteObject\" is not allowed. Use adapter settings to allow it.', 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Function \"deleteObject\" is not allowed. Use adapter settings to allow it.'),\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n },\n getEnums: function (enumName?: string): { id: string; members: string[]; name: ioBroker.StringOrTranslated }[] {\n const result: { id: string; members: string[]; name: ioBroker.StringOrTranslated }[] = [];\n const r = enumName ? new RegExp(`^enum\\\\.${enumName}\\\\.`) : false;\n for (let i = 0; i < enums.length; i++) {\n if (!r || r.test(enums[i])) {\n const common: ioBroker.EnumCommon =\n (objects[enums[i]] as ioBroker.EnumObject).common || ({} as ioBroker.EnumCommon);\n result.push({\n id: enums[i],\n members: common.members || [],\n name: common.name || '',\n });\n }\n }\n if (sandbox.verbose) {\n sandbox.log(`getEnums(enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');\n }\n return JSON.parse(JSON.stringify(result));\n },\n createAlias: function (\n name: string,\n alias: string | CommonAlias,\n forceCreation: boolean | Partial | ((err: Error | null) => void) | undefined,\n common?: Partial | Record | ((err: Error | null) => void),\n native?: Record | ((err: Error | null) => void),\n callback?: (err: Error | null) => void,\n ) {\n if (typeof native === 'function') {\n callback = native as (err: Error | null) => void;\n native = {};\n }\n if (typeof common === 'function') {\n callback = common as (err: Error | null) => void;\n common = undefined;\n }\n if (typeof forceCreation === 'function') {\n callback = forceCreation as (err: Error | null) => void;\n forceCreation = undefined;\n }\n if (isObject(forceCreation)) {\n native = common;\n common = forceCreation as Partial;\n forceCreation = undefined;\n }\n\n if (typeof name !== 'string') {\n const err = `Wrong type of name \"${typeof name}\". Expected \"string\".`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name) {\n const err = 'Empty ID is not allowed.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name.startsWith('alias.0.')) {\n name = `alias.0.${name}`;\n }\n\n const _common: Partial = (common as Partial) || {};\n if (isObject(_common.alias)) {\n // alias already in common, use this\n } else if (\n isObject(alias) &&\n (typeof (alias as CommonAlias).id === 'string' || isObject((alias as CommonAlias).id))\n ) {\n _common.alias = alias as CommonAlias;\n } else if (typeof alias === 'string') {\n _common.alias = { id: alias };\n } else {\n const err = 'Source ID needs to be provided as string or object with id property.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n let aliasSourceId = '';\n if (_common.alias) {\n aliasSourceId = isObject(_common.alias.id)\n ? (_common.alias.id as { read: string; write: string }).read\n : (_common.alias.id as string);\n if (!objects[aliasSourceId] && objects[`${adapter.namespace}.${aliasSourceId}`]) {\n aliasSourceId = `${adapter.namespace}.${aliasSourceId}`;\n if (isObject(_common.alias.id)) {\n (_common.alias.id as { read: string; write: string }).read = aliasSourceId;\n } else {\n _common.alias.id = aliasSourceId;\n }\n }\n if (\n isObject(_common.alias.id) &&\n (_common.alias.id as { read: string; write: string }).write &&\n !objects[(_common.alias.id as { read: string; write: string }).write] &&\n objects[`${adapter.namespace}.${(_common.alias.id as { read: string; write: string }).write}`]\n ) {\n (_common.alias.id as { read: string; write: string }).write =\n `${adapter.namespace}.${(_common.alias.id as { read: string; write: string }).write}`;\n }\n }\n const obj = objects[aliasSourceId];\n if (!obj) {\n const err = `Alias source object \"${aliasSourceId}\" does not exist.`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n if (obj.type !== 'state') {\n const err = `Alias source object \"${aliasSourceId}\" must be a state object.`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n if (_common.name === undefined) {\n _common.name = obj.common.name || name;\n }\n if (_common.type === undefined && obj.common.type !== undefined) {\n _common.type = obj.common.type;\n }\n if (_common.role === undefined && obj.common.role !== undefined) {\n _common.role = obj.common.role;\n }\n if (_common.min === undefined && obj.common.min !== undefined) {\n _common.min = obj.common.min;\n }\n if (_common.max === undefined && obj.common.max !== undefined) {\n _common.max = obj.common.max;\n }\n if (_common.step === undefined && obj.common.step !== undefined) {\n _common.step = obj.common.step;\n }\n if (_common.unit === undefined && obj.common.unit !== undefined) {\n _common.unit = obj.common.unit;\n }\n if (_common.desc === undefined && obj.common.desc !== undefined) {\n _common.desc = obj.common.desc;\n }\n\n return sandbox.createState(\n name,\n undefined,\n forceCreation as boolean,\n _common,\n native,\n callback as (err?: Error | null) => void,\n );\n },\n createState: async function (\n name: string,\n initValue: undefined | ioBroker.StateValue | ioBroker.State,\n forceCreation:\n | boolean\n | undefined\n | Record\n | Partial\n | ((err: Error | null) => void),\n common?: Partial | ((err: Error | null) => void),\n native?: Record | ((err: Error | null) => void),\n callback?: (error: Error | null | undefined, id?: string) => void,\n ) {\n if (typeof native === 'function') {\n callback = native as (err?: Error | null) => void;\n native = {};\n }\n if (typeof common === 'function') {\n callback = common as (err?: Error | null) => void;\n common = undefined;\n }\n if (typeof initValue === 'function') {\n callback = initValue as (err?: Error | null) => void;\n initValue = undefined;\n }\n if (typeof forceCreation === 'function') {\n callback = forceCreation as (err?: Error | null) => void;\n forceCreation = undefined;\n }\n if (isObject(initValue)) {\n common = initValue as Partial;\n native = forceCreation as Record;\n forceCreation = undefined;\n initValue = undefined;\n }\n if (isObject(forceCreation)) {\n native = common as Record;\n common = forceCreation as Partial;\n forceCreation = undefined;\n }\n\n if (typeof name !== 'string') {\n const err = `Wrong type of name \"${typeof name}\". Expected \"string\".`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n if (!name) {\n const err = 'Empty ID is not allowed.';\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n const isAlias = name.startsWith('alias.0.');\n\n const _common: ioBroker.StateCommon = (common || {}) as ioBroker.StateCommon;\n _common.name = _common.name || name;\n _common.role = _common.role || 'state';\n _common.type = _common.type || 'mixed';\n if (!isAlias && initValue === undefined) {\n initValue = _common.def;\n }\n\n native = native || {};\n\n // Check min, max and def values for number\n if (_common.type !== undefined && _common.type === 'number') {\n let min = 0;\n let max = 0;\n let def = 0;\n let err: string | undefined;\n if (_common.min !== undefined) {\n min = _common.min;\n if (typeof min !== 'number') {\n min = parseFloat(min);\n if (isNaN(min)) {\n err = `Wrong type of ${name}.common.min`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.min = min;\n }\n }\n if (_common.max !== undefined) {\n max = _common.max;\n if (typeof max !== 'number') {\n max = parseFloat(max);\n if (isNaN(max)) {\n err = `Wrong type of ${name}.common.max`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.max = max;\n }\n }\n\n if (_common.def !== undefined) {\n if (isAlias) {\n delete _common.def;\n } else {\n def = _common.def;\n if (typeof def !== 'number') {\n def = parseFloat(def);\n if (isNaN(def)) {\n err = `Wrong type of ${name}.common.def`;\n sandbox.log(err, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n _common.def = def;\n }\n }\n }\n\n if (_common.min !== undefined && _common.max !== undefined && min > max) {\n _common.max = min;\n _common.min = max;\n }\n if (_common.def !== undefined && _common.min !== undefined && def < min) {\n _common.def = min;\n }\n if (_common.def !== undefined && _common.max !== undefined && def > max) {\n _common.def = max;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log(\n `createState(name=${name}, initValue=${JSON.stringify(initValue)}, forceCreation=${JSON.stringify(forceCreation)}, common=${JSON.stringify(common)}, native=${JSON.stringify(native)}, isAlias=${isAlias})`,\n 'debug',\n );\n }\n\n let id = `${adapter.namespace}.${name}`;\n if (name.match(/^javascript\\.\\d+\\./) || name.startsWith('0_userdata.0.') || isAlias) {\n id = name;\n }\n if (id.match(/^javascript\\.\\d+\\.scriptEnabled/)) {\n sandbox.log(\n `Own states (${id}) should not be created in javascript.X.scriptEnabled.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n } else if (id.match(/^javascript\\.\\d+\\.scriptProblem/)) {\n sandbox.log(\n `Own states (${id}) should not be created in javascript.X.scriptProblem.*! Please move the states to 0_userdata.0.*`,\n 'info',\n );\n }\n\n // User can create aliases by two ways:\n // - id is starting with \"alias.0.\" and common.alias.id is set, so the state defined in common.alias.id will be created automatically if not exists\n // - id is not starting with \"alias.0.\", but common.alias is set, so the state defined in common.alias will be created automatically if not exists\n if (!isAlias && _common.alias) {\n // check and create if not exists the alias\n let alias: CommonAlias;\n if (typeof _common.alias === 'string') {\n alias = {\n id: _common.alias,\n };\n } else if (typeof _common.alias === 'boolean') {\n const parts = id.split('.');\n parts[0] = 'alias';\n parts[1] = '0';\n\n alias = {\n id: parts.join('.'),\n };\n } else {\n alias = _common.alias;\n }\n delete _common.alias;\n\n if (!(alias.id as string).startsWith('alias.0.')) {\n alias.id = `alias.0.${alias.id as string}`;\n }\n\n let aObj: ioBroker.StateObject | null | undefined;\n try {\n aObj = (await adapter.getForeignObjectAsync(alias.id as string)) as\n | ioBroker.StateObject\n | null\n | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n const _obj: ioBroker.StateObject = {\n _id: alias.id as string,\n type: 'state',\n common: {\n name: `Alias to ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n alias: {\n id,\n read: alias.read,\n write: alias.write,\n },\n },\n native: {},\n };\n\n await adapter.setForeignObjectAsync(alias.id as string, _obj);\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${alias.id as string}\": ${err as Error}`, 'error');\n }\n }\n } else if (isAlias && _common.alias) {\n if (typeof _common.alias === 'string') {\n _common.alias = {\n id: _common.alias,\n };\n }\n const readId = typeof _common.alias.id === 'string' ? _common.alias.id : _common.alias.id.read;\n let writeId: string | undefined =\n typeof _common.alias.id === 'string' ? _common.alias.id : _common.alias.id.write;\n if (writeId === readId) {\n writeId = undefined;\n }\n // try to create the linked states\n let aObj: ioBroker.StateObject | null | undefined;\n try {\n aObj = (await adapter.getForeignObjectAsync(readId)) as ioBroker.StateObject | null | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n await adapter.setForeignObjectAsync(readId, {\n type: 'state',\n common: {\n name: `State for ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n },\n native: {},\n });\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${readId}\": ${err as Error}`, 'error');\n }\n }\n if (writeId && _common.write !== false) {\n try {\n aObj = (await adapter.getForeignObjectAsync(writeId)) as\n | ioBroker.StateObject\n | null\n | undefined;\n } catch {\n // ignore\n }\n if (!aObj) {\n try {\n await adapter.setForeignObjectAsync(writeId, {\n type: 'state',\n common: {\n name: `Write state for ${id}`,\n role: 'state',\n type: _common.type,\n read: _common.read,\n write: _common.write,\n unit: _common.unit,\n },\n native: {},\n });\n } catch (err: unknown) {\n sandbox.log(`Cannot create alias \"${writeId}\": ${err as Error}`, 'error');\n }\n }\n }\n }\n\n let obj: ioBroker.Object | null | undefined;\n try {\n obj = await adapter.getForeignObjectAsync(id);\n } catch {\n // ignore\n }\n\n if (\n obj?._id &&\n validIdForAutomaticFolderCreation(obj._id) &&\n obj.type === 'folder' &&\n obj.native &&\n obj.native.autocreated === 'by automatic ensure logic'\n ) {\n // ignore a default created object because we now have a better defined one\n obj = null;\n }\n\n if (!obj || forceCreation) {\n // create new one\n const newObj: ioBroker.StateObject = {\n _id: id,\n common: _common,\n native,\n type: 'state',\n };\n try {\n await adapter.setForeignObjectAsync(id, newObj);\n } catch (err: unknown) {\n sandbox.log(`Cannot set object \"${id}\": ${err as Error}`, 'warn');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err as Error);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n return;\n }\n\n // Update meta objects\n context.updateObjectContext(id, newObj);\n\n if (!isAlias && initValue !== undefined) {\n if (isObject(initValue) && (initValue as ioBroker.State).ack !== undefined) {\n setStateHelper(sandbox, true, false, id, initValue, callback);\n } else {\n setStateHelper(sandbox, true, false, id, initValue, true, callback);\n }\n } else if (!isAlias && !forceCreation) {\n setStateHelper(sandbox, true, false, id, null, callback);\n } else if (isAlias) {\n try {\n const state = await adapter.getForeignStateAsync(id);\n if (state) {\n states[id] = state;\n }\n } catch {\n // ignore\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n } else if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n await ensureObjectStructure(id);\n } else {\n // state yet exists\n if (\n !(adapter.config as JavaScriptAdapterConfig).subscribe &&\n !states[id] &&\n states[`${adapter.namespace}.${id}`] === undefined\n ) {\n states[id] = {\n val: null,\n ack: true,\n lc: Date.now(),\n ts: Date.now(),\n q: 0,\n from: `system.adapter.${adapter.namespace}`,\n };\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, null, id);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n\n await ensureObjectStructure(id);\n }\n },\n deleteState: function (id: string, callback?: (err: Error | null | undefined, found?: boolean) => void): void {\n // todo: check rights\n // todo: also remove from \"names\"\n\n if (sandbox.verbose) {\n sandbox.log(`deleteState(id=${id})`, 'debug');\n }\n\n let found = false;\n if ((id.startsWith('0_userdata.0.') || id.startsWith(adapter.namespace)) && objects[id]) {\n found = true;\n delete objects[id];\n if (states[id]) {\n delete states[id];\n }\n\n adapter.delForeignObject(id, function (err) {\n err && sandbox.log(`Object for state \"${id}\" does not exist: ${err}`, 'warn');\n\n adapter.delForeignState(id, function (err) {\n err && sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n });\n } else if (objects[`${adapter.namespace}.${id}`]) {\n delete objects[`${adapter.namespace}.${id}`];\n found = true;\n if (states[`${adapter.namespace}.${id}`]) {\n delete states[`${adapter.namespace}.${id}`];\n }\n\n adapter.delObject(id, function (err) {\n err && sandbox.log(`Object for state \"${id}\" does not exist: ${err}`, 'warn');\n\n adapter.delState(id, function (err) {\n err && sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n });\n } else {\n const err = 'Not found';\n sandbox.log(`Cannot delete state \"${id}\": ${err}`, 'error');\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, new Error(err), found);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n }\n },\n sendTo: function (\n _adapter: string,\n cmd: string,\n msg?: any,\n options?: Record | ((result: any, options: Record, _adapter: string) => void),\n callback?: (result: any, options: Record, _adapter: string) => void,\n ): void {\n const defaultTimeout = 20000;\n\n if (typeof options === 'function') {\n callback = options as (result: any, options: Record, _adapter: string) => void;\n options = { timeout: defaultTimeout };\n }\n\n let timeout: NodeJS.Timeout | null = null;\n if (typeof callback === 'function') {\n const timeoutDuration = parseInt(options?.timeout, 10) || defaultTimeout;\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (sandbox.verbose) {\n sandbox.log(`sendTo => timeout: ${timeoutDuration}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, { error: 'timeout' }, options as Record, _adapter);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutDuration);\n }\n\n let cbFunc: undefined | ((result: any) => void);\n if (timeout) {\n cbFunc = function (result: any): void {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n if (sandbox.verbose && result) {\n sandbox.log(`sendTo => ${JSON.stringify(result)}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, result, options as Record, _adapter);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n };\n }\n\n // If specific instance\n if (_adapter.match(/\\.[0-9]+$/)) {\n sandbox.verbose &&\n sandbox.log(\n `sendTo(instance=${_adapter}, cmd=${cmd}, msg=${JSON.stringify(msg)}, hasCallback=${typeof callback === 'function'})`,\n 'info',\n );\n\n adapter.sendTo(_adapter, cmd, msg, cbFunc, options);\n } else {\n // Send it to all instances\n context.adapter.getObjectView(\n 'system',\n 'instance',\n { startkey: `system.adapter.${_adapter}.`, endkey: `system.adapter.${_adapter}.\\u9999` },\n options,\n (err, res) => {\n if (err || !res) {\n sandbox.log(`sendTo failed: ${err?.message}`, 'error');\n return;\n }\n\n const instances = res.rows.map(item => item.id.substring('system.adapter.'.length));\n\n instances.forEach(instance => {\n sandbox.verbose &&\n sandbox.log(\n `sendTo(instance=${instance}, cmd=${cmd}, msg=${JSON.stringify(msg)}, hasCallback=${typeof callback === 'function'})`,\n 'info',\n );\n adapter.sendTo(instance, cmd, msg, cbFunc, options);\n });\n },\n );\n }\n },\n sendto: function (\n _adapter: string,\n cmd: string,\n msg: any,\n callback?: (result: any, options: Record, _adapter: string) => void,\n ): void {\n return sandbox.sendTo(_adapter, cmd, msg, callback);\n },\n sendToAsync: function (_adapter: string, cmd: string, msg?: any, options?: Record): Promise {\n return new Promise((resolve, reject) => {\n sandbox.sendTo(_adapter, cmd, msg, options, res => {\n if (!res || res.error) {\n reject(res ? new Error(res.error) : new Error('Unknown error'));\n } else {\n resolve(res);\n }\n });\n });\n },\n sendToHost: function (host: string, cmd: string, msg?: any, callback?: (result: any) => void): void {\n if (!(adapter.config as JavaScriptAdapterConfig).enableSendToHost) {\n const error =\n 'sendToHost is not available. Please enable \"Enable SendToHost\" option in instance settings';\n sandbox.log(error, 'error');\n\n if (typeof callback === 'function') {\n // leave it as a normal function and not as a lambda, to hide the \"this\" object\n setImmediate(function () {\n callback(error);\n });\n }\n } else {\n sandbox.verbose &&\n sandbox.log(`sendToHost(adapter=${host}, cmd=${cmd}, msg=${JSON.stringify(msg)})`, 'info');\n adapter.sendToHost(host, cmd, msg, callback);\n }\n },\n sendToHostAsync: function (host: string, cmd: string, msg?: any): Promise {\n return new Promise((resolve, reject) => {\n sandbox.sendToHost(host, cmd, msg, res => {\n if (!res || res.error) {\n reject(res ? new Error(res.error) : new Error('Unknown error'));\n } else {\n resolve(res);\n }\n });\n });\n },\n registerNotification: function (msg: string, isAlert?: boolean): void {\n const category = !isAlert ? 'scriptMessage' : 'scriptAlert';\n\n if (sandbox.verbose) {\n sandbox.log(`registerNotification(msg=${msg}, category=${category})`, 'info');\n }\n\n void adapter.registerNotification('javascript', category, msg);\n },\n setInterval: function (callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout | null {\n if (typeof callback === 'function') {\n const int: NodeJS.Timeout = setInterval(() => {\n try {\n callback.call(sandbox, ...args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, ms);\n script.intervals.push(int);\n\n if (sandbox.verbose) {\n sandbox.log(`setInterval(ms=${ms})`, 'info');\n }\n return int;\n }\n sandbox.log(`Invalid callback for setInterval! - ${typeof callback}`, 'error');\n return null;\n },\n clearInterval: function (id: NodeJS.Timeout): void {\n const pos = script.intervals.indexOf(id);\n if (pos !== -1) {\n if (sandbox.verbose) {\n sandbox.log('clearInterval() => cleared', 'info');\n }\n clearInterval(id);\n script.intervals.splice(pos, 1);\n } else {\n if (sandbox.verbose) {\n sandbox.log('clearInterval() => not found', 'warn');\n }\n }\n },\n setTimeout: function (callback: (args?: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout | null {\n if (typeof callback === 'function') {\n const to = setTimeout(() => {\n // Remove timeout from the list\n const pos = script.timeouts.indexOf(to);\n if (pos !== -1) {\n script.timeouts.splice(pos, 1);\n }\n\n try {\n callback.call(sandbox, ...args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, ms);\n if (sandbox.verbose) {\n sandbox.log(`setTimeout(ms=${ms})`, 'info');\n }\n\n script.timeouts.push(to);\n return to;\n }\n sandbox.log(`Invalid callback for setTimeout! - ${typeof callback}`, 'error');\n return null;\n },\n clearTimeout: function (id: NodeJS.Timeout): void {\n const pos = script.timeouts.indexOf(id);\n if (pos !== -1) {\n if (sandbox.verbose) {\n sandbox.log('clearTimeout() => cleared', 'info');\n }\n clearTimeout(id);\n script.timeouts.splice(pos, 1);\n } else {\n if (sandbox.verbose) {\n sandbox.log('clearTimeout() => not found', 'warn');\n }\n }\n },\n setImmediate: function (callback: (..._args: any[]) => void, ...args: any[]): void {\n if (typeof callback === 'function') {\n setImmediate(() => {\n try {\n callback.apply(sandbox, args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n if (sandbox.verbose) {\n sandbox.log('setImmediate()', 'info');\n }\n } else {\n sandbox.log(`Invalid callback for setImmediate! - ${typeof callback}`, 'error');\n }\n },\n cb: function (callback: (..._args: any[]) => void): (...args: any[]) => void {\n return function (args: any[]) {\n if (context.scripts[name]?._id === sandbox._id) {\n if (typeof callback === 'function') {\n try {\n callback.apply(sandbox, args);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n } else {\n sandbox.log(`Callback for old version of script: ${name}`, 'warn');\n }\n };\n },\n compareTime: function (\n startTime: iobJS.AstroDate | string | Date | number,\n endTime: iobJS.AstroDate | string | Date | number | null,\n operation: 'between' | 'not between' | '<' | '<=' | '>' | '>=' | '==' | '<>' | '!=',\n time?: iobJS.AstroDate | string | Date | number,\n ): boolean {\n if (startTime && typeof startTime === 'string') {\n const pos = consts.astroListLow.indexOf(startTime.toLowerCase());\n if (pos !== -1) {\n const aTime = sandbox.getAstroDate(consts.astroList[pos]);\n if (aTime) {\n startTime = aTime.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n } else {\n startTime = 0;\n }\n }\n } else if (startTime && isObject(startTime) && (startTime as iobJS.AstroDate).astro) {\n const aTime = sandbox.getAstroDate(\n (startTime as iobJS.AstroDate).astro,\n (startTime as iobJS.AstroDate).date || new Date(),\n (startTime as iobJS.AstroDate).offset || 0,\n );\n if (aTime) {\n startTime = aTime.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n } else {\n startTime = 0;\n }\n }\n\n if (endTime && typeof endTime === 'string') {\n const pos = consts.astroListLow.indexOf(endTime.toLowerCase());\n if (pos !== -1) {\n const aTime = sandbox.getAstroDate(consts.astroList[pos]);\n endTime =\n aTime?.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }) || 0;\n }\n } else if (endTime && isObject(endTime) && (endTime as iobJS.AstroDate).astro) {\n const aTime = sandbox.getAstroDate(\n (endTime as iobJS.AstroDate).astro,\n (endTime as iobJS.AstroDate).date || new Date(),\n (endTime as iobJS.AstroDate).offset || 0,\n );\n endTime =\n aTime?.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }) || 0;\n }\n\n // --- Convert \"time\" to number\n let nTime: number | undefined;\n // maybe it is astro date like 'sunrise' or 'sunset'\n if (time && typeof time === 'string') {\n const pos = consts.astroListLow.indexOf(time.toLowerCase());\n if (pos !== -1) {\n nTime = sandbox.getAstroDate(consts.astroList[pos])?.getTime() || 0;\n }\n } else if (time && isObject(time) && (time as iobJS.AstroDate).astro) {\n nTime =\n sandbox\n .getAstroDate(\n (time as iobJS.AstroDate).astro,\n (time as iobJS.AstroDate).date || new Date(),\n (time as iobJS.AstroDate).offset || 0,\n )\n ?.getTime() || 0;\n }\n\n let daily = true;\n if (time) {\n daily = false;\n }\n // if not astro date\n if (!nTime) {\n if (time && !isObject(time)) {\n if (typeof time === 'string' && !time.includes(' ') && !time.includes('T')) {\n const parts = time.split(':');\n const oTime = new Date();\n oTime.setHours(parseInt(parts[0], 10));\n oTime.setMinutes(parseInt(parts[1], 10));\n oTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n oTime.setSeconds(parseInt(parts[2], 10));\n } else {\n oTime.setSeconds(0);\n }\n nTime = oTime.getTime();\n } else {\n nTime = new Date(time as string | number).getTime();\n }\n } else if (!time) {\n const oTime = new Date();\n oTime.setMilliseconds(0);\n nTime = oTime.getTime();\n } else {\n // If Date\n nTime = (time as Date).getTime();\n }\n }\n // --- End of conversion \"time\" to number\n if (typeof startTime === 'string') {\n if (!startTime.includes(' ') && !startTime.includes('T')) {\n const parts = startTime.split(':');\n startTime = new Date();\n startTime.setHours(parseInt(parts[0], 10));\n startTime.setMinutes(parseInt(parts[1], 10));\n startTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n startTime.setSeconds(parseInt(parts[2], 10));\n } else {\n startTime.setSeconds(0);\n }\n } else {\n daily = false;\n startTime = new Date(startTime);\n }\n } else {\n daily = false;\n startTime = new Date(startTime as number | Date);\n }\n const nStartTime = startTime.getTime();\n\n let nEndTime: number | null;\n if (endTime && typeof endTime === 'string') {\n if (!endTime.includes(' ') && !endTime.includes('T')) {\n const parts = endTime.split(':');\n endTime = new Date();\n endTime.setHours(parseInt(parts[0], 10));\n endTime.setMinutes(parseInt(parts[1], 10));\n endTime.setMilliseconds(0);\n\n if (parts.length === 3) {\n endTime.setSeconds(parseInt(parts[2], 10));\n } else {\n endTime.setSeconds(0);\n }\n } else {\n daily = false;\n endTime = new Date(endTime);\n }\n } else if (endTime) {\n daily = false;\n endTime = new Date(endTime as number | Date);\n } else {\n endTime = null;\n }\n\n if (endTime) {\n nEndTime = endTime.getTime();\n } else {\n nEndTime = null;\n }\n\n if (operation === 'between') {\n if (nEndTime) {\n if (nStartTime > nEndTime && daily) {\n return !(nTime >= nEndTime && nTime < nStartTime);\n }\n return nTime >= nStartTime && nTime < nEndTime;\n }\n sandbox.log(`missing or unrecognized endTime expression: ${JSON.stringify(endTime)}`, 'warn');\n return false;\n }\n\n if (operation === 'not between') {\n if (nEndTime) {\n if (nStartTime > nEndTime && daily) {\n return nTime >= nEndTime && nTime < nStartTime;\n }\n return !(nTime >= nStartTime && nTime < nEndTime);\n }\n sandbox.log(`missing or unrecognized endTime expression: ${JSON.stringify(endTime)}`, 'warn');\n return false;\n }\n\n if (operation === '>') {\n return nTime > nStartTime;\n }\n if (operation === '>=') {\n return nTime >= nStartTime;\n }\n if (operation === '<') {\n return nTime < nStartTime;\n }\n if (operation === '<=') {\n return nTime <= nStartTime;\n }\n if (operation === '==') {\n return nTime === nStartTime;\n }\n if (operation === '<>' || operation === '!=') {\n return nTime !== nStartTime;\n }\n sandbox.log(`Invalid operator: ${operation as string}`, 'warn');\n return false;\n },\n onStop: function (cb: () => void, timeout?: number): void {\n if (sandbox.verbose) {\n sandbox.log(`onStop(timeout=${timeout})`, 'info');\n }\n\n script.onStopCb = cb;\n script.onStopTimeout = timeout || 1000;\n },\n formatValue: function (value: number | string, decimals: number | string, format?: string): string {\n if (typeof decimals === 'string') {\n format = decimals;\n decimals = 0;\n }\n if (!format) {\n if (adapter.isFloatComma !== undefined) {\n format = adapter.isFloatComma ? '.,' : ',.';\n } else if (objects['system.config'] && objects['system.config'].common) {\n format = objects['system.config'].common.isFloatComma ? '.,' : ',.';\n }\n }\n return adapter.formatValue(value, decimals, format);\n },\n formatDate: function (\n date: Date | string | number | iobJS.AstroDate,\n format?: string,\n language?: ioBroker.Languages,\n ): string {\n if (!format) {\n if (adapter.dateFormat) {\n format = adapter.dateFormat;\n } else {\n format =\n objects['system.config'] && objects['system.config'].common\n ? objects['system.config'].common.dateFormat || 'DD.MM.YYYY'\n : 'DD.MM.YYYY';\n }\n format = format || 'DD.MM.YYYY';\n }\n // maybe it is astro date like 'sunrise' or 'sunset'\n if (date && typeof date === 'string') {\n const pos = consts.astroListLow.indexOf(date.toLowerCase());\n if (pos !== -1) {\n date = sandbox.getAstroDate(consts.astroList[pos])?.getTime() || 0;\n }\n } else if (date && isObject(date) && (date as iobJS.AstroDate).astro) {\n date =\n sandbox\n .getAstroDate(\n (date as iobJS.AstroDate).astro,\n (date as iobJS.AstroDate).date || new Date(),\n (date as iobJS.AstroDate).offset || 0,\n )\n ?.getTime() || 0;\n }\n\n if (format.match(/[WНOО]+/)) {\n let text: string = adapter.formatDate(date as Date | string | number, format);\n if (!language || !consts.dayOfWeeksFull[language]) {\n language =\n adapter.language ||\n (objects['system.config'] &&\n objects['system.config'].common &&\n objects['system.config'].common.language) ||\n 'en';\n if (!consts.dayOfWeeksFull[language as ioBroker.Languages]) {\n language = 'en';\n }\n }\n if (typeof date === 'number' || typeof date === 'string') {\n date = new Date(date);\n } else if (typeof (date as Date).getMonth !== 'function') {\n sandbox.log(`Invalid date object provided: ${JSON.stringify(date)}`, 'error');\n return 'Invalid date';\n }\n const d: number = (date as Date).getDay();\n text = text.replace('НН', consts.dayOfWeeksFull[language as ioBroker.Languages][d]);\n let initialText = text;\n text = text.replace('WW', consts.dayOfWeeksFull[language as ioBroker.Languages][d]);\n\n if (initialText === text) {\n text = text.replace('W', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n }\n\n text = text.replace('Н', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n text = text.replace('Н', consts.dayOfWeeksShort[language as ioBroker.Languages][d]);\n const m: number = (date as Date).getMonth();\n initialText = text;\n text = text.replace('OOO', consts.monthFullGen[language as ioBroker.Languages][m]);\n text = text.replace('ООО', consts.monthFullGen[language as ioBroker.Languages][m]);\n text = text.replace('OO', consts.monthFull[language as ioBroker.Languages][m]);\n text = text.replace('ОО', consts.monthFull[language as ioBroker.Languages][m]);\n\n if (initialText === text) {\n text = text.replace('O', consts.monthShort[language as ioBroker.Languages][m]);\n }\n return text;\n }\n return adapter.formatDate(date as string | number | Date, format);\n },\n formatTimeDiff: function (diff: number, format?: string): string {\n if (!format) {\n format = 'hh:mm:ss';\n }\n\n let text = format;\n\n if (sandbox.verbose) {\n sandbox.log(`formatTimeDiff(format=${format}, diff=${diff})`, 'debug');\n }\n\n const second = 1000;\n const minute = 60 * second;\n const hour = 60 * minute;\n const day = 24 * hour;\n const neg = diff < 0;\n diff = Math.abs(diff);\n\n if (/(? void),\n callback?: (err?: Error | null) => void,\n ): void {\n if (typeof data === 'function' || !data) {\n callback = data as (err?: Error | null) => void;\n data = fileName;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `writeFile(adapter=${_adapter}, fileName=${fileName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function (): void {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`writeFile(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n if (callback) {\n adapter.writeFile(_adapter, fileName, data, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.writeFile(_adapter, fileName, data);\n }\n }\n },\n readFile: function (\n _adapter: string,\n fileName: string | ((err: Error | null | undefined, data?: Buffer | string, mimeType?: string) => void),\n callback?: (err: Error | null | undefined, data?: Buffer | string, mimeType?: string) => void,\n ): void {\n if (typeof fileName === 'function') {\n callback = fileName as (\n err: Error | null | undefined,\n data?: Buffer | string,\n mimeType?: string,\n ) => void;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n if (typeof callback !== 'function') {\n sandbox.log(`readFile(adapter=${_adapter}, fileName=${fileName}): no callback`, 'error');\n return;\n }\n _adapter = _adapter || '0_userdata.0';\n if (sandbox.verbose) {\n sandbox.log(`readFile(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n\n adapter.fileExists(_adapter, fileName, (error: Error | null | undefined, result?: boolean): void => {\n if (error) {\n callback(error);\n } else if (!result) {\n callback(new Error('Not exists'));\n } else {\n adapter.readFile(_adapter, fileName, callback);\n }\n });\n },\n unlink: function (\n _adapter: string,\n fileName: string | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n if (typeof fileName === 'function') {\n callback = fileName;\n fileName = _adapter;\n _adapter = '0_userdata.0';\n }\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `unlink(adapter=${_adapter}, fileName=${fileName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function (): void {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`unlink(adapter=${_adapter}, fileName=${fileName})`, 'info');\n }\n if (callback) {\n adapter.unlink(_adapter, fileName, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.unlink(_adapter, fileName);\n }\n }\n },\n delFile: function (\n _adapter: string,\n fileName: string | ((err?: Error | null) => void),\n callback?: (err?: Error | null) => void,\n ): void {\n return sandbox.unlink(_adapter, fileName as string, callback);\n },\n rename: function (\n _adapter: string,\n oldName: string,\n newName: string,\n callback?: (err?: Error | null) => void,\n ): void {\n _adapter = _adapter || '0_userdata.0';\n\n if (debug) {\n sandbox.log(\n `rename(adapter=${_adapter}, oldName=${oldName}, newName=${newName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n sandbox.verbose &&\n sandbox.log(`rename(adapter=${_adapter}, oldName=${oldName}, newName=${newName})`, 'info');\n if (callback) {\n adapter.rename(_adapter, oldName, newName, callback);\n } else {\n // @ts-expect-error should be fixed in js-controller\n adapter.rename(_adapter, oldName, newName);\n }\n }\n },\n renameFile: function (\n _adapter: string,\n oldName: string,\n newName: string,\n callback?: (err?: Error | null) => void,\n ): void {\n return sandbox.rename(_adapter, oldName, newName, callback);\n },\n getHistory: function (\n instance: string | (ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }),\n options:\n | (ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string })\n | ((\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void),\n callback?: (\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void,\n ): void {\n if (isObject(instance)) {\n callback = options as (\n error: Error | null,\n result?: ioBroker.GetHistoryResult | null,\n options?: ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance?: string,\n ) => void;\n options = instance as ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string };\n instance = '';\n }\n\n if (typeof callback !== 'function') {\n return sandbox.log('No callback found!', 'error');\n }\n if (!isObject(options)) {\n return sandbox.log('No options found!', 'error');\n }\n if (!(options as ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string }).id) {\n return sandbox.log('No ID found!', 'error');\n }\n const timeoutMs =\n parseInt(\n (options as ioBroker.GetHistoryOptions & { id?: string; timeout?: number })\n ?.timeout as unknown as string,\n 10,\n ) || 20000;\n\n if (!instance) {\n // @ts-expect-error defaultHistory is private attribute of adapter. Fix later\n if (adapter.defaultHistory) {\n // @ts-expect-error defaultHistory is private attribute of adapter. Fix later\n instance = adapter.defaultHistory;\n } else {\n instance = objects['system.config']?.common?.defaultHistory || null;\n }\n }\n\n if (sandbox.verbose) {\n sandbox.log(`getHistory(instance=${instance as string}, options=${JSON.stringify(options)})`, 'info');\n }\n\n if (!instance) {\n sandbox.log('No default history instance found!', 'error');\n try {\n callback.call(sandbox, new Error('No default history instance found!'));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n return;\n }\n if ((instance as string).startsWith('system.adapter.')) {\n instance = (instance as string).substring('system.adapter.'.length);\n }\n\n if (!objects[`system.adapter.${instance as string}`]) {\n sandbox.log(`Instance \"${instance as string}\" not found!`, 'error');\n try {\n callback.call(sandbox, new Error(`Instance \"${instance as string}\" not found!`));\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n return;\n }\n\n let _timeout: NodeJS.Timeout | null = setTimeout(() => {\n _timeout = null;\n if (sandbox.verbose) {\n sandbox.log('getHistory => timeout', 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n new Error('Timeout'),\n null,\n options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance as string,\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutMs);\n\n adapter.sendTo(\n instance as string,\n 'getHistory',\n {\n id: (options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }).id,\n options,\n },\n (res: any): void => {\n if (_timeout) {\n clearTimeout(_timeout);\n _timeout = null;\n }\n const result: {\n error?: string;\n result?: ioBroker.GetHistoryResult;\n step?: number;\n sessionId?: string;\n } = res;\n\n if (sandbox.verbose && result?.error) {\n sandbox.log(`getHistory => ${result.error}`, 'error');\n }\n if (sandbox.verbose && result?.result) {\n sandbox.log(`getHistory => ${result.result.length} items`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(\n sandbox,\n result.error ? new Error(result.error) : null,\n result.result,\n options as ioBroker.GetHistoryOptions & { id: string; timeout?: number | string },\n instance as string,\n );\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n },\n );\n },\n runScript: function (scriptName: string, callback?: (err?: Error | null) => void): boolean {\n scriptName = scriptName || name;\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n // start another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot start \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `runScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n typeof callback === 'function' && callback();\n return true;\n }\n if (objects[scriptName].common.enabled) {\n objects[scriptName].common.enabled = false;\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, (/* err, obj */) => {\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err),\n );\n });\n return true;\n }\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err),\n );\n return true;\n },\n runScriptAsync: function (scriptName: string): Promise {\n let done = false;\n return new Promise((resolve, reject) => {\n const result = sandbox.runScript(scriptName, err => {\n if (err) {\n reject(err);\n done = true;\n } else {\n resolve();\n }\n });\n if (result === false && !done) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n startScript: function (\n scriptName: string,\n ignoreIfStarted?: boolean | ((err: Error | null | undefined, started: boolean) => void),\n callback?: (err: Error | null | undefined, started: boolean) => void,\n ): boolean {\n if (typeof ignoreIfStarted === 'function') {\n callback = ignoreIfStarted as (err: Error | null | undefined, started: boolean) => void;\n ignoreIfStarted = false;\n }\n scriptName ||= name;\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n // start another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot start \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `startScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n typeof callback === 'function' && callback(null, false);\n return true;\n }\n if (objects[scriptName].common.enabled) {\n if (!ignoreIfStarted) {\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, () => {\n adapter.extendForeignObject(\n scriptName,\n { common: { enabled: true } },\n err => typeof callback === 'function' && callback(err, true),\n );\n });\n } else if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n }\n adapter.extendForeignObject(scriptName, { common: { enabled: true } }, err => {\n typeof callback === 'function' && callback(err, true);\n });\n return true;\n },\n startScriptAsync: function (scriptName: string, ignoreIfStarted?: boolean): Promise {\n return new Promise((resolve, reject) => {\n const result = sandbox.startScript(\n scriptName,\n !!ignoreIfStarted,\n (err: Error | null | undefined, started: boolean): void => {\n if (err) {\n reject(err);\n } else {\n resolve(started);\n }\n },\n );\n if (result === false) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n stopScript: function (\n scriptName: string,\n callback?: (err: Error | null | undefined, stopped: boolean) => void,\n ): boolean {\n scriptName = scriptName || name;\n\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n\n // stop another script\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log(`Cannot stop \"${scriptName}\", because not found`, 'error');\n return false;\n }\n if (debug) {\n sandbox.log(\n `stopScript(scriptName=${scriptName}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n }\n if (objects[scriptName].common.enabled) {\n objects[scriptName].common.enabled = false;\n adapter.extendForeignObject(scriptName, { common: { enabled: false } }, err => {\n if (typeof callback === 'function') {\n callback(err, true);\n }\n });\n } else if (typeof callback === 'function') {\n callback(null, false);\n }\n return true;\n },\n stopScriptAsync: function (scriptName: string): Promise {\n return new Promise((resolve, reject) => {\n const result = sandbox.stopScript(\n scriptName,\n (err: Error | null | undefined, stopped: boolean): void => {\n if (err) {\n reject(err);\n } else {\n resolve(stopped);\n }\n },\n );\n if (result === false) {\n reject(new Error(`Script ${scriptName} was not found!`));\n }\n });\n },\n isScriptActive: function (scriptName: string): boolean {\n if (!scriptName.match(/^script\\.js\\./)) {\n scriptName = `script.js.${scriptName}`;\n }\n if (!objects[scriptName] || !objects[scriptName].common) {\n sandbox.log('Script does not exist', 'error');\n return false;\n }\n return objects[scriptName].common.enabled;\n },\n startInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && !instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, { common: { enabled: true } });\n\n if (sandbox.verbose) {\n sandbox.log(`startInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot start instance \"${instanceName}\", because already running`, 'warn');\n } else {\n sandbox.log(`Cannot start instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n restartInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, {});\n\n if (sandbox.verbose) {\n sandbox.log(`restartInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot restart instance \"${instanceName}\", because not running`, 'warn');\n } else {\n sandbox.log(`Cannot restart instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n stopInstanceAsync: async function (instanceName: string): Promise {\n const objInstanceId = `system.adapter.${instanceName}`;\n const exists = await adapter.foreignObjectExists(objInstanceId);\n\n if (exists) {\n const instanceObj = await adapter.getForeignObjectAsync(objInstanceId);\n\n if (instanceObj?.type === 'instance' && instanceObj.common.enabled) {\n await adapter.extendForeignObjectAsync(objInstanceId, { common: { enabled: false } });\n\n if (sandbox.verbose) {\n sandbox.log(`stopInstanceAsync (instanceName=${instanceName})`, 'info');\n }\n\n return true;\n }\n sandbox.log(`Cannot stop instance \"${instanceName}\", because not running`, 'warn');\n } else {\n sandbox.log(`Cannot stop instance \"${instanceName}\", because not found`, 'error');\n }\n\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toInt: function (val: boolean | string | number | 'true' | 'false'): number {\n if (val === true || val === 'true') {\n val = 1;\n }\n if (val === false || val === 'false') {\n val = 0;\n }\n val = parseInt(val as unknown as string) || 0;\n return val;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toFloat: function (val: boolean | string | number | 'true' | 'false'): number {\n if (val === true || val === 'true') {\n val = 1;\n }\n if (val === false || val === 'false') {\n val = 0;\n }\n val = parseFloat(val as unknown as string) || 0;\n return val;\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n toBoolean: function (val: boolean | string | number | 'true' | 'false'): boolean {\n if (val === '1' || val === 'true') {\n val = true;\n }\n if (val === '0' || val === 'false') {\n val = false;\n }\n return !!val;\n },\n getAttr: function (obj: string | Record, path: string | string[]): any {\n if (typeof path === 'string') {\n path = path.split('.');\n }\n if (typeof obj === 'string') {\n try {\n obj = JSON.parse(obj);\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getAttr',\n });\n sandbox.log(`Cannot parse \"${obj.substring(0, 30)}\": ${err as Error}`, 'error');\n\n return null;\n }\n }\n\n const attr: string = path.shift() || '';\n try {\n obj = (obj as Record)[attr];\n } catch (err: unknown) {\n void adapter.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'getAttr',\n });\n sandbox.log(`Cannot get ${attr} of \"${JSON.stringify(obj)}\": ${err as Error}`, 'error');\n\n return null;\n }\n\n if (!path.length) {\n return obj;\n }\n const type = typeof obj;\n if (obj === null || obj === undefined || type === 'boolean' || type === 'number') {\n return null;\n }\n return sandbox.getAttr(obj, path);\n },\n messageTo: function (\n target: string | { instance: string | null | number; script: string | null; message: string },\n data: any,\n options: { timeout?: number | string } | ((result: any, options: { timeout?: number | string }) => void),\n callback?: (result: any, options: { timeout?: number | string }, instance: string | number | null) => void,\n ) {\n const defaultTimeout = 5000;\n\n if (typeof target !== 'object') {\n target = { instance: null, script: null, message: target };\n }\n if (typeof options === 'function') {\n callback = options;\n options = { timeout: defaultTimeout };\n }\n\n let timeout: NodeJS.Timeout | null = null;\n if (typeof callback === 'function') {\n const timeoutDuration = parseInt(options?.timeout as unknown as string, 10) || defaultTimeout;\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (sandbox.verbose) {\n sandbox.log(`messageTo => timeout: ${timeoutDuration}`, 'debug');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, { error: 'timeout' }, options, target.instance);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n }, timeoutDuration);\n }\n let cbFunc: undefined | ((result: any) => void);\n if (timeout) {\n cbFunc = function (res: any) {\n timeout && clearTimeout(timeout);\n const result: { result?: any; error?: string | null } = res;\n\n if (sandbox.verbose && result?.result) {\n sandbox.log(`messageTo => ${JSON.stringify(result)}`, 'debug');\n }\n if (sandbox.verbose && result?.error) {\n sandbox.log(`messageTo => ${result.error}`, 'error');\n }\n\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, result, options, target.instance);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n callback = undefined;\n }\n };\n }\n\n if (target.instance || target.instance === 0) {\n if (\n typeof target.instance === 'string' &&\n target.instance &&\n target.instance.startsWith('system.adapter.')\n ) {\n target.instance = target.instance.substring('system.adapter.'.length);\n } else if (typeof target.instance === 'number') {\n target.instance = `javascript.${target.instance}`;\n }\n\n adapter.sendTo(\n target.instance,\n 'jsMessageBus',\n { message: target.message, script: target.script, data },\n cbFunc,\n );\n } else {\n // Send it to all instances\n context.adapter.getObjectView(\n 'system',\n 'instance',\n { startkey: 'system.adapter.javascript.', endkey: 'system.adapter.javascript.\\u9999' },\n options,\n (err: Error | null | undefined, res): void => {\n if (err || !res) {\n sandbox.log(`messageTo failed: ${err?.message}`, 'error');\n return;\n }\n const len = 'system.adapter.'.length;\n const instances = res.rows.map(item => item.id.substring(len));\n\n instances.forEach(instance => {\n adapter.sendTo(\n instance,\n 'jsMessageBus',\n { message: target.message, script: target.script, data },\n cbFunc,\n );\n });\n },\n );\n }\n },\n messageToAsync: function (\n target: string | { instance: string | null | number; script: string | null; message: string },\n data: any,\n options?: { timeout?: number | string },\n ): Promise {\n return new Promise((resolve, reject) => {\n sandbox.messageTo(target, data, options, (res: any): void => {\n const result: { error?: string } = res;\n if (sandbox.verbose) {\n sandbox.log(`messageTo result => ${JSON.stringify(res)}`, 'debug');\n }\n if (!res || result.error) {\n reject(result ? new Error(result.error) : new Error('Unknown error'));\n } else {\n resolve(result);\n }\n });\n });\n },\n onMessage: function (\n messageName: string,\n callback: (data: any, cb: (result: any) => void) => void,\n ): null | number {\n if (typeof callback !== 'function') {\n sandbox.log('onMessage callback is not a function', 'error');\n\n return null;\n }\n context.messageBusHandlers[sandbox.scriptName] = context.messageBusHandlers[sandbox.scriptName] || {};\n context.messageBusHandlers[sandbox.scriptName][messageName] =\n context.messageBusHandlers[sandbox.scriptName][messageName] || [];\n\n const handler = { id: Date.now() + Math.floor(Math.random() * 10000), cb: callback, sandbox };\n context.messageBusHandlers[sandbox.scriptName][messageName].push(handler);\n\n sandbox.__engine.__subscriptionsMessage += 1;\n\n if (\n sandbox.__engine.__subscriptionsMessage %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsMessage} message subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n return handler.id;\n },\n onMessageUnregister: function (idOrName: number | string): boolean {\n const ctx = context.messageBusHandlers[sandbox.scriptName];\n let found = false;\n if (ctx) {\n if (typeof idOrName === 'number') {\n for (const messageName in ctx) {\n if (Object.prototype.hasOwnProperty.call(ctx, messageName)) {\n for (let i = 0; i < ctx[messageName].length; i++) {\n if (ctx[messageName][i].id === idOrName) {\n ctx[messageName].splice(i, 1);\n if (!ctx[messageName].length) {\n delete ctx[messageName];\n sandbox.__engine.__subscriptionsMessage--;\n }\n found = true;\n break;\n }\n }\n }\n if (found) {\n break;\n }\n }\n } else if (idOrName && ctx[idOrName]) {\n delete ctx[idOrName];\n sandbox.__engine.__subscriptionsMessage--;\n found = true;\n }\n }\n return found;\n },\n console: {\n log: function (msg: string): void {\n sandbox.log(msg, 'info');\n },\n error: function (msg: string): void {\n sandbox.log(msg, 'error');\n },\n warn: function (msg: string): void {\n sandbox.log(msg, 'warn');\n },\n info: function (msg: string): void {\n sandbox.log(msg, 'info');\n },\n debug: function (msg: string): void {\n sandbox.log(msg, 'debug');\n },\n },\n jsonataExpression: function (data: any, expression: string): Promise {\n return jsonata(expression).evaluate(data);\n },\n wait: function (ms: number): Promise {\n return new Promise((resolve: () => void): void => {\n sandbox.setTimeout(resolve, ms);\n });\n },\n sleep: function (ms: number): Promise {\n return sandbox.wait(ms);\n },\n onObject: function (\n pattern: string | string[],\n callback: (id: string, obj?: ioBroker.Object | null) => void,\n ): SubscribeObject | SubscribeObject[] | null {\n return sandbox.subscribeObject(pattern, callback);\n },\n subscribeObject: function (\n pattern: string | string[],\n callback: (id: string, obj?: ioBroker.Object | null) => void,\n ): SubscribeObject | SubscribeObject[] | null {\n if (Array.isArray(pattern)) {\n const result: {\n name: string;\n pattern: string;\n callback: (id: string, obj?: ioBroker.Object | null) => void;\n }[] = [];\n for (let p = 0; p < pattern.length; p++) {\n result.push(\n sandbox.subscribeObject(pattern[p], callback) as {\n name: string;\n pattern: string;\n callback: (id: string, obj?: ioBroker.Object | null) => void;\n },\n );\n }\n return result;\n }\n\n sandbox.__engine.__subscriptionsObject += 1;\n\n if (\n sandbox.__engine.__subscriptionsObject %\n (adapter.config as JavaScriptAdapterConfig).maxTriggersPerScript ===\n 0\n ) {\n sandbox.log(\n `More than ${sandbox.__engine.__subscriptionsObject} object subscriptions registered. Check your script!`,\n 'warn',\n );\n }\n\n // source is set by regexp if defined as /regexp/\n if (!pattern || typeof pattern !== 'string') {\n sandbox.log('Error by subscribeObject: pattern can be only string or array of strings.', 'error');\n return null;\n }\n\n if (typeof callback !== 'function') {\n sandbox.log('Error by subscribeObject: callback is not a function', 'error');\n return null;\n }\n\n const subs: SubscribeObject = { pattern, callback, name };\n if (sandbox.verbose) {\n sandbox.log(`subscribeObject: ${JSON.stringify(subs)}`, 'info');\n }\n\n adapter.subscribeForeignObjects(pattern);\n\n context.subscriptionsObject.push(subs);\n // Keep O(1) dispatch map in sync\n if (!context.subscriptionsObjectMap.has(pattern)) {\n context.subscriptionsObjectMap.set(pattern, []);\n }\n context.subscriptionsObjectMap.get(pattern)!.push(subs);\n\n return subs;\n },\n unsubscribeObject: function (subObject: SubscribeObject | SubscribeObject[]): boolean | boolean[] {\n if (subObject && Array.isArray(subObject)) {\n const result: boolean[] = [];\n for (let t = 0; t < subObject.length; t++) {\n result.push(sandbox.unsubscribeObject(subObject[t]) as boolean);\n }\n return result;\n }\n\n if (sandbox.verbose) {\n sandbox.log(`adapterUnsubscribeObject(id=${JSON.stringify(subObject)})`, 'info');\n }\n\n for (let i = context.subscriptionsObject.length - 1; i >= 0; i--) {\n if (context.subscriptionsObject[i] === subObject) {\n adapter.unsubscribeForeignObjects(subObject.pattern);\n context.subscriptionsObject.splice(i, 1);\n // Keep O(1) dispatch map in sync\n const mapSubs = context.subscriptionsObjectMap.get(subObject.pattern);\n if (mapSubs) {\n const pos = mapSubs.indexOf(subObject);\n if (pos !== -1) mapSubs.splice(pos, 1);\n if (!mapSubs.length) context.subscriptionsObjectMap.delete(subObject.pattern);\n }\n sandbox.__engine.__subscriptionsObject--;\n return true;\n }\n }\n let deleted = 0;\n for (let i = context.subscriptionsObject.length - 1; i >= 0; i--) {\n if (\n context.subscriptionsObject[i].name &&\n context.subscriptionsObject[i].pattern === subObject.pattern\n ) {\n deleted++;\n adapter.unsubscribeForeignObjects(subObject.pattern);\n // Keep O(1) dispatch map in sync\n const mapSubsP = context.subscriptionsObjectMap.get(subObject.pattern);\n if (mapSubsP) {\n const pos = mapSubsP.indexOf(context.subscriptionsObject[i]);\n if (pos !== -1) mapSubsP.splice(pos, 1);\n if (!mapSubsP.length) context.subscriptionsObjectMap.delete(subObject.pattern);\n }\n context.subscriptionsObject.splice(i, 1);\n sandbox.__engine.__subscriptionsObject--;\n }\n }\n return !!deleted;\n },\n // internal function to send the block debugging info to the front-end\n _sendToFrontEnd: function (blockId: string, data: any): void {\n if (context.rulesOpened === sandbox.scriptName) {\n void adapter.setState(\n 'debug.rules',\n JSON.stringify({ ruleId: sandbox.scriptName, blockId, data, ts: Date.now() }),\n true,\n );\n }\n },\n existsStateAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n existsObjectAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n getObjectAsync: function (_id: string, _enumName: null | string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n setObjectAsync: function (_id: string, _obj: ioBroker.Object): Promise<{ id: string }> {\n return Promise.reject(new Error('Not implemented'));\n },\n extendObjectAsync: function (_id: string, _obj: Partial): Promise<{ id: string }> {\n return Promise.reject(new Error('Not implemented'));\n },\n deleteObjectAsync: function (_id: string, _isRecursive?: boolean): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n createStateAsync: function (\n _name: string,\n _initValue: undefined | ioBroker.StateValue | ioBroker.State,\n _forceCreation:\n | boolean\n | undefined\n | Record\n | Partial\n | ((err: Error | null) => void),\n _common?: Partial | ((err: Error | null) => void),\n _native?: Record | ((err: Error | null) => void),\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n createAliasAsync: function (\n _name: string,\n _alias: string | CommonAlias,\n _forceCreation: boolean | Partial | undefined,\n _common?: Partial | Record,\n _native?: Record,\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n deleteStateAsync: function (_id: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n writeFileAsync: function (\n _adapter: string,\n _fileName: string | Buffer,\n _data?: string | Buffer,\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n readFileAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n unlinkAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n delFileAsync: function (_adapter: string, _fileName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n renameAsync: function (_adapter: string, _oldName: string, _newName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n renameFileAsync: function (_adapter: string, _oldName: string, _newName?: string): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n getHistoryAsync: function (\n _instance: string | (ioBroker.GetHistoryOptions & { id: string; timeout?: number | string }),\n _options?: ioBroker.GetHistoryOptions & { id?: string; timeout?: number | string },\n ): Promise {\n return Promise.reject(new Error('Not implemented'));\n },\n httpGetAsync: function (\n _url: string,\n _options?: {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n ): Promise<{\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n }> {\n return Promise.reject(new Error('Not implemented'));\n },\n httpPostAsync: function (\n _url: string,\n _data: any,\n _options: {\n timeout?: number;\n responseType?: ResponseType;\n headers?: Record;\n basicAuth?: { user: string; password: string } | null;\n bearerAuth?: string;\n validateCertificate?: boolean;\n },\n ): Promise<{\n statusCode: number | null;\n data: any;\n headers: Record;\n responseTime: number;\n }> {\n return Promise.reject(new Error('Not implemented'));\n },\n };\n\n // Create advanced functions that can modify objects\n if ((adapter.config as JavaScriptAdapterConfig).enableSetObject) {\n sandbox.setObject = function (\n id: string,\n obj: ioBroker.Object,\n callback?: (err?: Error | null, res?: { id: string }) => void,\n ): void {\n if (id && typeof id === 'string' && id.startsWith('system.adapter.')) {\n sandbox.log(\n `Using setObject on system object ${id} can be dangerous (protected instance attributes may be lost)`,\n 'info',\n );\n }\n if (debug) {\n sandbox.log(\n `setObject(id=${id}, obj=${JSON.stringify(obj)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setImmediate(function () {\n try {\n callback.call(sandbox, null, { id });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n });\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`setObject(id=${id}, obj=${JSON.stringify(obj)})`, 'info');\n }\n adapter.setForeignObject(id, obj, (err, res) => {\n if (!err) {\n // Update meta object data\n context.updateObjectContext(id, obj);\n }\n if (typeof callback === 'function') {\n try {\n callback.call(sandbox, err, res);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }\n });\n }\n };\n sandbox.extendObject = function (\n id: string,\n obj: Partial,\n callback?: (err?: Error | null, obj?: { id: string }) => void,\n ): void {\n if (debug) {\n sandbox.log(\n `extendObject(id=${id}, obj=${JSON.stringify(obj)}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox, null, { id });\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`extendObject(id=${id}, obj=${JSON.stringify(obj)})`, 'info');\n }\n if (callback) {\n adapter.extendForeignObject(id, JSON.parse(JSON.stringify(obj)), callback);\n } else {\n void adapter.extendForeignObject(id, JSON.parse(JSON.stringify(obj)));\n }\n }\n };\n sandbox.deleteObject = function (id: string, isRecursive?: boolean, callback?: ioBroker.ErrorCallback): void {\n if (typeof isRecursive === 'function') {\n callback = isRecursive;\n isRecursive = false;\n }\n if (debug) {\n sandbox.log(\n `deleteObject(id=${id}) - ${words._('was not executed, while debug mode is active')}`,\n 'warn',\n );\n if (typeof callback === 'function') {\n setTimeout(function () {\n try {\n callback.call(sandbox);\n } catch (err: unknown) {\n errorInCallback(err as Error);\n }\n }, 0);\n }\n } else {\n if (sandbox.verbose) {\n sandbox.log(`deleteObject(id=${id})`, 'info');\n }\n adapter.delForeignObject(id, { recursive: isRecursive }, callback);\n }\n };\n }\n\n // promisify methods on the sandbox\n sandbox.existsStateAsync = promisify(sandbox.existsState);\n sandbox.existsObjectAsync = promisify(sandbox.existsObject);\n sandbox.getObjectAsync = promisify(sandbox.getObject);\n sandbox.setObjectAsync = promisify(sandbox.setObject);\n sandbox.extendObjectAsync = promisify(sandbox.extendObject);\n sandbox.deleteObjectAsync = promisify(sandbox.deleteObject);\n sandbox.createStateAsync = promisify(sandbox.createState);\n sandbox.createAliasAsync = promisify(sandbox.createAlias);\n sandbox.deleteStateAsync = promisify(sandbox.deleteState);\n sandbox.writeFileAsync = promisify(sandbox.writeFile);\n sandbox.readFileAsync = promisify(sandbox.readFile);\n sandbox.unlinkAsync = promisify(sandbox.unlink);\n sandbox.delFileAsync = promisify(sandbox.delFile);\n sandbox.renameAsync = promisify(sandbox.rename);\n sandbox.renameFileAsync = promisify(sandbox.renameFile);\n sandbox.getHistoryAsync = promisify(sandbox.getHistory);\n sandbox.httpGetAsync = promisify(sandbox.httpGet);\n sandbox.httpPostAsync = promisify(sandbox.httpPost);\n\n // Make all predefined properties and methods readonly so scripts cannot overwrite them\n for (const prop of Object.keys(sandbox)) {\n Object.defineProperty(sandbox, prop, {\n configurable: false,\n writable: false,\n });\n }\n\n return sandbox;\n}\n"]}
\ No newline at end of file
diff --git a/build/main.js b/build/main.js
index 46a1c9ed..b757e7f5 100644
--- a/build/main.js
+++ b/build/main.js
@@ -227,18 +227,18 @@ const jsDeclarationServer = new virtual_tsc_1.Server(typescriptSettings_1.jsDecl
* Stores the IDs of script objects whose change should be ignored because
* the compiled source was just updated
*/
+const HTTP_STATUS_TEXTS = new Map([
+ [400, 'Bad Request'],
+ [401, 'Unauthorized'],
+ [403, 'Forbidden'],
+ [404, 'Not Found'],
+ [429, 'Too Many Requests / Rate Limit'],
+ [500, 'Internal Server Error'],
+ [502, 'Bad Gateway'],
+ [503, 'Service Unavailable'],
+]);
function httpStatusText(code) {
- const texts = {
- 400: 'Bad Request',
- 401: 'Unauthorized',
- 403: 'Forbidden',
- 404: 'Not Found',
- 429: 'Too Many Requests / Rate Limit',
- 500: 'Internal Server Error',
- 502: 'Bad Gateway',
- 503: 'Service Unavailable',
- };
- return texts[code] || `Error ${code}`;
+ return HTTP_STATUS_TEXTS.get(code) ?? `Error ${code}`;
}
class JavaScript extends adapter_core_1.Adapter {
context;
@@ -256,15 +256,25 @@ class JavaScript extends adapter_core_1.Adapter {
states = {};
interimStateValues = {};
stateIds = [];
+ /** Fast O(1) lookup set – always kept in sync with stateIds */
+ stateIdSet = new Set();
+ /** Precomputed "from" string for prepareStateObject – avoids string alloc on every setState */
+ _adapterFrom = '';
subscriptions = [];
subscriptionsFile = [];
subscriptionsObject = [];
+ /** O(1) dispatch map for subscriptionsObject – pattern → subscribers */
+ subscriptionsObjectMap = new Map();
subscribedPatterns = {};
subscribedPatternsFile = {};
adapterSubs = {};
timers = {};
+ /** Reverse-index: scriptName → Set of stateIds that have timers for this script – O(1) cleanup */
+ timersByScript = new Map();
_enums = [];
names = {}; // name: id
+ /** Reverse map: id → name for O(1) getName() lookups */
+ nameById = new Map();
scripts = {};
password = '';
messageBusHandlers = {};
@@ -395,11 +405,13 @@ class JavaScript extends adapter_core_1.Adapter {
subscriptions: this.subscriptions,
subscriptionsFile: this.subscriptionsFile,
subscriptionsObject: this.subscriptionsObject,
+ subscriptionsObjectMap: this.subscriptionsObjectMap,
subscribedPatterns: this.subscribedPatterns,
subscribedPatternsFile: this.subscribedPatternsFile,
adapterSubs: this.adapterSubs,
cacheObjectEnums: {},
timers: this.timers,
+ timersByScript: this.timersByScript,
enums: this._enums,
names: this.names,
scripts: this.scripts,
@@ -494,9 +506,10 @@ class JavaScript extends adapter_core_1.Adapter {
/* ignore */
});
}
- this.subscriptionsObject.forEach(sub => {
- // ToDo: implement comparing with id.0.* too
- if (sub.pattern === id) {
+ // O(1) dispatch via pattern map instead of O(n) forEach
+ const objSubs = this.subscriptionsObjectMap.get(id);
+ if (objSubs) {
+ for (const sub of objSubs) {
try {
sub.callback(id, obj);
}
@@ -504,7 +517,7 @@ class JavaScript extends adapter_core_1.Adapter {
this.log.error(`Error in callback: ${err.toString()}`);
}
}
- });
+ }
// handle Script object updates
if (!obj && formerObj?.type === 'script') {
// Object Deleted just now
@@ -638,9 +651,9 @@ class JavaScript extends adapter_core_1.Adapter {
}
}
}
- else if ( /*!oldState && */!this.stateIds.includes(id)) {
- this.stateIds.push(id);
- this.stateIds.sort();
+ else if ( /*!oldState && */!this.stateIdSet.has(id)) {
+ this.sortedInsert(id);
+ this.stateIdSet.add(id);
}
this.states[id] = state;
}
@@ -652,6 +665,7 @@ class JavaScript extends adapter_core_1.Adapter {
const pos = this.stateIds.indexOf(id);
if (pos !== -1) {
this.stateIds.splice(pos, 1);
+ this.stateIdSet.delete(id);
}
}
const _eventObj = (0, eventObj_1.createEventObject)(this.context, id, this.convertBackStringifiedValues(id, state), this.convertBackStringifiedValues(id, oldState));
@@ -683,20 +697,29 @@ class JavaScript extends adapter_core_1.Adapter {
}
}
async onUnload(callback) {
- await this.debugStop();
- this.stopTimeSchedules();
- if (this.setStateCountCheckInterval) {
- clearInterval(this.setStateCountCheckInterval);
- this.setStateCountCheckInterval = null;
+ try {
+ await this.debugStop();
+ this.stopTimeSchedules();
+ if (this.setStateCountCheckInterval) {
+ clearInterval(this.setStateCountCheckInterval);
+ this.setStateCountCheckInterval = null;
+ }
+ await this.stopAllScripts();
+ }
+ catch (err) {
+ this.log.error(`Error during unload: ${err.message}`);
}
- await this.stopAllScripts();
- if (typeof callback === 'function') {
- callback();
+ finally {
+ if (typeof callback === 'function') {
+ callback();
+ }
}
}
async onReady() {
this.errorLogFunction = this.log;
this.context.errorLogFunction = this.log;
+ // Precompute once – avoids string template alloc on every setState call
+ this._adapterFrom = `system.adapter.${this.namespace}`;
this.config.maxSetStatePerMinute = parseInt(this.config.maxSetStatePerMinute, 10) || 1000;
this.config.maxTriggersPerScript = parseInt(this.config.maxTriggersPerScript, 10) || 100;
if (this.supportsFeature?.('PLUGINS')) {
@@ -1234,14 +1257,16 @@ class JavaScript extends adapter_core_1.Adapter {
}
}
onLog(msg) {
- Object.keys(this.logSubscriptions).forEach((name) => this.logSubscriptions[name].forEach(handler => {
- if (typeof handler.cb === 'function' &&
- (handler.severity === '*' || handler.severity === msg.severity)) {
- handler.sandbox.logHandler = handler.severity || '*';
- handler.cb.call(handler.sandbox, msg);
- handler.sandbox.logHandler = undefined;
- }
- }));
+ for (const name in this.logSubscriptions) {
+ for (const handler of this.logSubscriptions[name]) {
+ if (typeof handler.cb === 'function' &&
+ (handler.severity === '*' || handler.severity === msg.severity)) {
+ handler.sandbox.logHandler = handler.severity || '*';
+ handler.cb.call(handler.sandbox, msg);
+ handler.sandbox.logHandler = undefined;
+ }
+ }
+ }
}
logError(scriptName, msg, e, offs) {
const stack = e.stack ? e.stack.toString().split('\n') : e ? e.toString() : '';
@@ -1495,9 +1520,9 @@ class JavaScript extends adapter_core_1.Adapter {
}
// CHeck setState counter per minute and stop a script if too high
this.setStateCountCheckInterval = setInterval(() => {
- Object.keys(this.scripts).forEach(id => {
+ for (const id in this.scripts) {
if (!this.scripts[id]) {
- return;
+ continue;
}
const currentSetStatePerMinuteCounter = this.scripts[id].setStatePerMinuteCounter;
this.scripts[id].setStatePerMinuteCounter = 0;
@@ -1515,7 +1540,7 @@ class JavaScript extends adapter_core_1.Adapter {
this.scripts[id].setStatePerMinuteProblemCounter--;
this.log.debug(`Script ${id} has NOT reached the maximum of ${this.config.maxSetStatePerMinute} setState calls per minute. Decrease problem counter to ${this.scripts[id].setStatePerMinuteProblemCounter}`);
}
- });
+ }
}, 60000);
}
loadTypeScriptDeclarations() {
@@ -1534,10 +1559,15 @@ class JavaScript extends adapter_core_1.Adapter {
.split(/[,;\s]+/)
.map(s => s.trim())
.filter(s => !!s);
+ // O(1) lookups – avoids O(n²) Array.includes inside loops
+ const installedSet = new Set(installedLibs);
+ const wantsSet = new Set(wantsTypings);
+ const packagesSet = new Set(packages);
// Add all installed libraries the user has requested typings for to the list of packages
for (const lib of installedLibs) {
- if (wantsTypings.includes(lib) && !packages.includes(lib)) {
+ if (wantsSet.has(lib) && !packagesSet.has(lib)) {
packages.push(lib);
+ packagesSet.add(lib);
}
}
// Some packages have submodules (e.g., rxjs/operators) that are not exposed through the main entry point
@@ -1548,8 +1578,9 @@ class JavaScript extends adapter_core_1.Adapter {
continue;
}
const pkgName = lib.substring(0, lib.indexOf('/'));
- if (installedLibs.includes(pkgName) && !packages.includes(lib)) {
+ if (installedSet.has(pkgName) && !packagesSet.has(lib)) {
packages.push(lib);
+ packagesSet.add(lib);
}
}
}
@@ -1583,9 +1614,9 @@ class JavaScript extends adapter_core_1.Adapter {
if (obj) {
// add state to state ID's list
if (obj.type === 'state') {
- if (!this.stateIds.includes(id)) {
- this.stateIds.push(id);
- this.stateIds.sort();
+ if (!this.stateIdSet.has(id)) {
+ this.sortedInsert(id);
+ this.stateIdSet.add(id);
}
if (this.context.devices && this.context.channels) {
const parts = id.split('.');
@@ -1605,6 +1636,7 @@ class JavaScript extends adapter_core_1.Adapter {
const pos = this.stateIds.indexOf(id);
if (pos !== -1) {
this.stateIds.splice(pos, 1);
+ this.stateIdSet.delete(id);
}
if (this.context.devices && this.context.channels) {
const parts = id.split('.');
@@ -1748,6 +1780,7 @@ class JavaScript extends adapter_core_1.Adapter {
for (const id in res) {
if (Object.prototype.hasOwnProperty.call(res, id)) {
this.stateIds.push(id);
+ this.stateIdSet.add(id);
}
}
this.statesInitDone = true;
@@ -1768,17 +1801,18 @@ class JavaScript extends adapter_core_1.Adapter {
this.objects = {};
this.context.objects = this.objects;
for (let i = 0; i < res.rows.length; i++) {
- if (!res.rows[i].doc) {
+ const doc = res.rows[i]?.doc;
+ if (!doc) {
this.log.debug(`Got empty object for index ${i} (${res.rows[i].id})`);
continue;
}
- if (this.objects[res.rows[i].doc._id] === undefined) {
+ if (this.objects[doc._id] === undefined) {
// If was already there, ignore
- this.objects[res.rows[i].doc._id] = res.rows[i].doc;
+ this.objects[doc._id] = doc;
}
- this.objects[res.rows[i].doc._id].type === 'enum' && this._enums.push(res.rows[i].doc._id);
+ doc.type === 'enum' && this._enums.push(doc._id);
// Collect all names
- this.addToNames(this.objects[res.rows[i].doc._id]);
+ this.addToNames(this.objects[doc._id]);
}
this.addGetProperty(this.objects);
const systemConfig = this.objects['system.config'];
@@ -1933,37 +1967,32 @@ class JavaScript extends adapter_core_1.Adapter {
}
this.names[name].push(id);
}
+ // keep reverse-map up to date for O(1) getName()
+ this.nameById.set(id, name);
}
}
removeFromNames(id) {
const n = this.getName(id);
if (n) {
if (Array.isArray(this.names[n])) {
- const pos = this.names[n].indexOf(id);
+ const arr = this.names[n];
+ const pos = arr.indexOf(id);
if (pos > -1) {
- this.names[n].splice(pos, 1);
- if (this.names[n].length === 1) {
- this.names[n] = this.names[n][0];
+ arr.splice(pos, 1);
+ if (arr.length === 1) {
+ this.names[n] = arr[0];
}
}
}
else {
delete this.names[n];
}
+ // keep reverse-map up to date for O(1) getName()
+ this.nameById.delete(id);
}
}
getName(id) {
- for (const n in this.names) {
- if (this.names[n] && Array.isArray(this.names[n])) {
- if (this.names[n].includes(id)) {
- return n;
- }
- }
- else if (this.names[n] === id) {
- return n;
- }
- }
- return null;
+ return this.nameById.get(id) ?? null;
}
async installNpm(npmLib) {
return new Promise((resolve, reject) => {
@@ -1977,6 +2006,7 @@ class JavaScript extends adapter_core_1.Adapter {
const child = this.mods.child_process.exec(cmd, {
windowsHide: true,
cwd: path,
+ timeout: 120_000, // 2 minutes max – prevents infinite blocking
});
child.stdout?.on('data', buf => this.log.info(buf.toString('utf8')));
child.stderr?.on('data', buf => this.log.error(buf.toString('utf8')));
@@ -2157,13 +2187,31 @@ class JavaScript extends adapter_core_1.Adapter {
this.logError(name, 'Error by run:', err);
}
}
+ /**
+ * Inserts `id` into the sorted `stateIds` array using binary search – O(log n).
+ * Much faster than push() + sort() which is O(n log n) on every insertion.
+ */
+ sortedInsert(id) {
+ let lo = 0;
+ let hi = this.stateIds.length;
+ while (lo < hi) {
+ const mid = (lo + hi) >>> 1;
+ if (this.stateIds[mid] < id)
+ lo = mid + 1;
+ else
+ hi = mid;
+ }
+ if (this.stateIds[lo] !== id) {
+ this.stateIds.splice(lo, 0, id);
+ }
+ }
unsubscribe(id) {
if (!id) {
this.log.warn('unsubscribe: empty name');
return;
}
if (Array.isArray(id)) {
- id.forEach(sub => unsubscribe(sub));
+ id.forEach(sub => this.unsubscribe(sub));
return;
}
if (id.constructor && id.constructor.name === 'RegExp') {
@@ -2291,6 +2339,15 @@ class JavaScript extends adapter_core_1.Adapter {
if (this.subscriptionsObject[i].name === name) {
const sub = this.subscriptionsObject.splice(i, 1)[0];
if (sub) {
+ // Remove from O(1) dispatch map
+ const mapSubs = this.subscriptionsObjectMap.get(sub.pattern);
+ if (mapSubs) {
+ const pos = mapSubs.indexOf(sub);
+ if (pos !== -1)
+ mapSubs.splice(pos, 1);
+ if (!mapSubs.length)
+ this.subscriptionsObjectMap.delete(sub.pattern);
+ }
this.unsubscribeForeignObjects(sub.pattern);
}
}
@@ -2303,19 +2360,23 @@ class JavaScript extends adapter_core_1.Adapter {
for (let i = 0; i < this.scripts[name].intervals.length; i++) {
clearInterval(this.scripts[name].intervals[i]);
}
- // Stop all delayed states (setStateDelayed timers)
- for (const stateId of Object.keys(this.timers)) {
- if (this.timers[stateId]) {
- for (let i = this.timers[stateId].length - 1; i >= 0; i--) {
- if (this.timers[stateId][i].scriptName === name) {
- clearTimeout(this.timers[stateId][i].t);
- this.timers[stateId].splice(i, 1);
+ // Stop all delayed states (setStateDelayed timers) – O(1) via reverse-index
+ const scriptStateIds = this.timersByScript.get(name);
+ if (scriptStateIds) {
+ for (const stateId of scriptStateIds) {
+ if (this.timers[stateId]) {
+ for (let i = this.timers[stateId].length - 1; i >= 0; i--) {
+ if (this.timers[stateId][i].scriptName === name) {
+ clearTimeout(this.timers[stateId][i].t);
+ this.timers[stateId].splice(i, 1);
+ }
+ }
+ if (!this.timers[stateId].length) {
+ delete this.timers[stateId];
}
- }
- if (!this.timers[stateId].length) {
- delete this.timers[stateId];
}
}
+ this.timersByScript.delete(name);
}
// Stop all scheduled jobs
for (let i = 0; i < this.scripts[name].schedules.length; i++) {
@@ -2562,6 +2623,11 @@ class JavaScript extends adapter_core_1.Adapter {
this.timeScheduleTimer = setTimeout(() => this.timeSchedule(), interval);
}
async dayTimeSchedules() {
+ // Always clear any existing timer to prevent memory leaks on rapid re-scheduling
+ if (this.dayScheduleTimer) {
+ clearTimeout(this.dayScheduleTimer);
+ this.dayScheduleTimer = null;
+ }
// get astrological event
if (this.config.latitude === undefined ||
this.config.longitude === undefined ||
diff --git a/build/main.js.map b/build/main.js.map
index 11e0f18c..be90df7f 100644
--- a/build/main.js.map
+++ b/build/main.js.map
@@ -1 +1 @@
-{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Javascript adapter\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014-2024 bluefox ,\n *\n * Copyright (c) 2014 hobbyquaker\n */\n\nimport { Script, type ScriptOptions } from 'node:vm';\nimport { readFileSync, existsSync, statSync, writeFileSync, type Stats } from 'node:fs';\nimport { join, sep, normalize } from 'node:path';\nimport { fork, type ForkOptions } from 'node:child_process';\nimport { setTypeScriptResolveOptions, Server } from 'virtual-tsc';\nimport { isDeepStrictEqual } from 'node:util';\nimport prettier from 'prettier';\n\nimport * as dgram from 'node:dgram';\nimport * as crypto from 'node:crypto';\nimport * as dns from 'node:dns';\nimport * as events from 'node:events';\nimport * as http from 'node:http';\nimport * as https from 'node:https';\nimport * as http2 from 'node:http2';\nimport * as net from 'node:net';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as util from 'node:util';\nimport * as child_process from 'node:child_process';\nimport * as stream from 'node:stream';\nimport * as zlib from 'node:zlib';\n\n// @ts-expect-error no types available\nimport * as suncalc from 'suncalc2';\nimport * as axios from 'axios';\n// @ts-expect-error no types available\nimport * as wake_on_lan from 'wake_on_lan';\nimport * as nodeSchedule from 'node-schedule';\n\nimport { getAbsoluteDefaultDataDir, Adapter, EXIT_CODES, type AdapterOptions } from '@iobroker/adapter-core';\nimport type SentryPlugin from '@iobroker/plugin-sentry';\nimport type { GetTimesResult } from 'suncalc';\nimport type { CompileResult } from 'virtual-tsc/build/util';\n\nimport { Mirror } from './lib/mirror';\nimport ProtectFs from './lib/protectFs';\nimport { setLanguage, getLanguage } from './lib/words';\nimport { sandBox } from './lib/sandbox';\nimport { requestModuleNameByUrl } from './lib/nodeModulesManagement';\nimport { resolveProviderCredentials, resolveTestCredentials, listAvailableProviders } from './lib/aiProviderResolver';\nimport {\n translateToolsToAnthropic,\n translateMessagesToAnthropic,\n translateAnthropicResponseToOpenAI,\n} from './lib/anthropicAdapter';\nimport { createEventObject, type EventObj } from './lib/eventObj';\nimport { type AstroEventName, Scheduler } from './lib/scheduler';\nimport { targetTsLib, tsCompilerOptions, jsDeclarationCompilerOptions } from './lib/typescriptSettings';\nimport { hashSource } from './lib/tools';\nimport {\n resolveTypescriptLibs,\n resolveTypings,\n scriptIdToTSFilename,\n transformScriptBeforeCompilation,\n transformGlobalDeclarations,\n} from './lib/typescriptTools';\nimport type {\n FileSubscriptionResult,\n JavascriptContext,\n JavaScriptAdapterConfig,\n JsScript,\n ScriptType,\n SubscriptionResult,\n SubscribeObject,\n JavascriptTimer,\n SandboxType,\n LogMessage,\n DebugState,\n} from './types';\nimport type { PatternEventCompareFunction } from './lib/patternCompareFunctions';\nimport { decryptText } from './lib/crypto';\n\ntype MODULES = {\n fs: ProtectFs;\n 'fs/promises': ProtectFs['promises'];\n dgram: typeof dgram;\n crypto: typeof crypto;\n dns: typeof dns;\n events: typeof events;\n http: typeof http;\n https: typeof https;\n http2: typeof http2;\n net: typeof net;\n os: typeof os;\n path: typeof path;\n util: typeof util;\n child_process: typeof child_process;\n stream: typeof stream;\n zlib: typeof zlib;\n suncalc: typeof suncalc;\n axios: typeof axios;\n wake_on_lan: typeof wake_on_lan;\n nodeSchedule: typeof nodeSchedule;\n};\n\n/**\n * List of forbidden Locations for a mirror directory\n * relative to the default data directory\n * ATTENTION: the same list is also located in index_m.html!!\n */\nconst forbiddenMirrorLocations: string[] = [\n 'backup-objects',\n 'files',\n 'backitup',\n '../backups',\n '../node_modules',\n '../log',\n];\n\nconst packageJson: Record = JSON.parse(readFileSync(`${__dirname}/../package.json`).toString());\nconst SCRIPT_CODE_MARKER = 'script.js.';\n\nlet webstormDebug: string | undefined;\n\nconst isCI = !!process.env.CI;\n\n// ambient declarations for typescript\nlet tsAmbient: Record;\n\n// TypeScript's scripts are only recompiled if their source hash changes.\n// If an adapter update fixes the compilation bugs, a user won't notice until the changes and re-save the script.\n// To avoid that, we also include the\n// adapter version and TypeScript version in the hash\nconst tsSourceHashBase = `versions:adapter=${packageJson.version},typescript=${packageJson.dependencies.typescript}`;\n\n// taken from here: https://stackoverflow.com/questions/11887934/how-to-check-if-dst-daylight-saving-time-is-in-effect-and-if-so-the-offset\nfunction dstOffsetAtDate(dateInput: Date): number {\n const fullYear: number = dateInput.getFullYear() | 0;\n // \"Leap Years are any year that can be exactly divided by 4 (2012, 2016, etc.)\n // except if it can be exactly divided by 100, then it isn't (2100, 2200, etc.)\n // except if it can be exactly divided by 400, then it is (2000, 2400)\"\n // (https://www.mathsisfun.com/leap-years.html).\n const isLeapYear: 1 | 0 = ((fullYear & 3) | ((fullYear / 100) & 3)) === 0 ? 1 : 0;\n // (fullYear & 3) = (fullYear % 4), but faster\n //Alternative:var isLeapYear=(new Date(currentYear,1,29,12)).getDate()===29?1:0\n const fullMonth: number = dateInput.getMonth() | 0;\n return (\n // 1. We know what the time since the Epoch really is\n +dateInput - // same as the dateInput.getTime() method\n // 2. We know what the time since the Epoch at the start of the year is\n +new Date(fullYear, 0) - // day defaults to 1 if not explicitly zeroed\n // 3. Now, subtract what we would expect the time to be if daylight savings\n // did not exist. This yields the time-offset due to daylight savings.\n // Calculate the day of the year in the Gregorian calendar\n // The code below works based upon the facts of signed right shifts\n // • (x) >> n: shifts n and fills in the n highest bits with 0s\n // • (-x) >> n: shifts n and fills in the n highest bits with 1s\n // (This assumes that x is a positive integer)\n ((((-1 + // the first day in the year is day 1\n (31 & (-fullMonth >> 4)) + // January // (-11)>>4 = -1\n ((28 + isLeapYear) & ((1 - fullMonth) >> 4)) + // February\n (31 & ((2 - fullMonth) >> 4)) + // March\n (30 & ((3 - fullMonth) >> 4)) + // April\n (31 & ((4 - fullMonth) >> 4)) + // May\n (30 & ((5 - fullMonth) >> 4)) + // June\n (31 & ((6 - fullMonth) >> 4)) + // July\n (31 & ((7 - fullMonth) >> 4)) + // August\n (30 & ((8 - fullMonth) >> 4)) + // September\n (31 & ((9 - fullMonth) >> 4)) + // October\n (30 & ((10 - fullMonth) >> 4)) + // November\n // There are no months past December: the year rolls into the next.\n // Thus, \"fullMonth\" is 0-based, so it will never be 12 in JavaScript\n\n (dateInput.getDate() | 0)) & // get day of the month\n 0xffff) *\n 24 *\n 60 + // 24 hours in a day, 60 minutes in an hour\n (dateInput.getHours() & 0xff) * 60 + // 60 minutes in an hour\n (dateInput.getMinutes() & 0xff)) |\n 0) *\n 60 *\n 1000 - // 60 seconds in a minute * 1000 milliseconds in a second\n (dateInput.getSeconds() & 0xff) * 1000 - // 1000 milliseconds in a second\n dateInput.getMilliseconds()\n );\n}\n\nconst regExGlobalOld = /_global$/;\nconst regExGlobalNew = /script\\.js\\.global\\./;\n\nfunction checkIsGlobal(obj: ioBroker.ScriptObject): boolean {\n return obj?.common && (regExGlobalOld.test(obj.common.name) || regExGlobalNew.test(obj._id));\n}\n\nfunction fileMatching(sub: FileSubscriptionResult, id: string, fileName: string): boolean {\n if (sub.idRegEx) {\n if (!sub.idRegEx.test(id)) {\n return false;\n }\n } else {\n if (sub.id !== id) {\n return false;\n }\n }\n if (sub.fileRegEx) {\n if (!sub.fileRegEx.test(fileName)) {\n return false;\n }\n } else {\n if (sub.fileNamePattern !== fileName) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getNextTimeEvent(time: string, useNextDay?: boolean): Date {\n const now: Date = getAstroStartOfDay();\n const [timeHours, timeMinutes] = time.split(':');\n const nTimeHours = parseInt(timeHours, 10);\n const nTimeMinutes = parseInt(timeMinutes, 10);\n if (\n useNextDay &&\n (now.getHours() > nTimeHours || (now.getHours() === nTimeHours && now.getMinutes() > nTimeMinutes))\n ) {\n now.setDate(now.getDate() + 1);\n }\n\n now.setHours(nTimeHours);\n now.setMinutes(nTimeMinutes);\n\n return now;\n}\n\nfunction getAstroStartOfDay(): Date {\n const d = new Date();\n d.setMinutes(0);\n d.setSeconds(0);\n d.setMilliseconds(0);\n d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n d.setUTCHours(0);\n\n return d;\n}\n\nfunction formatHoursMinutesSeconds(date: Date): string {\n const h = String(date.getHours());\n const m = String(date.getMinutes());\n const s = String(date.getSeconds());\n\n return `${h.padStart(2, '0')}:${m.padStart(2, '0')}:${s.padStart(2, '0')}`;\n}\n\n// Due to a npm bug, virtual-tsc may be hoisted to the top level node_modules, but\n// TypeScript may still be in the adapter level (https://npm.community/t/packages-with-peerdependencies-are-incorrectly-hoisted/4794),\n// so we need to tell virtual-tsc where TypeScript is\nsetTypeScriptResolveOptions({\n paths: [require.resolve('typescript')],\n});\n\n// compiler instance for global JS declarations\nconst jsDeclarationServer: Server = new Server(jsDeclarationCompilerOptions, isCI ? false : undefined);\n/**\n * Stores the IDs of script objects whose change should be ignored because\n * the compiled source was just updated\n */\n\nfunction httpStatusText(code: number): string {\n const texts: Record = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 429: 'Too Many Requests / Rate Limit',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n };\n return texts[code] || `Error ${code}`;\n}\n\nclass JavaScript extends Adapter {\n declare public config: JavaScriptAdapterConfig;\n\n private readonly context: JavascriptContext;\n\n private errorLogFunction: {\n error: (msg: string) => void;\n warn: (msg: string) => void;\n info: (msg: string) => void;\n debug: (msg: string) => void;\n silly: (msg: string) => void;\n } = {\n error: (msg: string) => console.error(msg),\n warn: (msg: string) => console.warn(msg),\n info: (msg: string) => console.log(msg),\n debug: (msg: string) => console.debug(msg),\n silly: (msg: string) => console.debug(msg),\n };\n\n private readonly mods: MODULES;\n\n private objectsInitDone = false;\n private statesInitDone = false;\n\n private objects: Record = {};\n private states: Record = {};\n private readonly interimStateValues: Record = {};\n private readonly stateIds: string[] = [];\n private readonly subscriptions: SubscriptionResult[] = [];\n private readonly subscriptionsFile: FileSubscriptionResult[] = [];\n private readonly subscriptionsObject: SubscribeObject[] = [];\n private readonly subscribedPatterns: Record = {};\n private readonly subscribedPatternsFile: Record = {};\n private readonly adapterSubs: Record = {};\n private readonly timers: { [scriptName: string]: JavascriptTimer[] } = {};\n private readonly _enums: string[] = [];\n private readonly names: { [name: string]: string | string[] } = {}; // name: id\n private readonly scripts: Record = {};\n private password: string = '';\n private readonly messageBusHandlers: Record<\n string,\n Record void }[]>\n > = {};\n private readonly logSubscriptions: Record<\n string,\n {\n sandbox: SandboxType;\n cb: (info: LogMessage) => void;\n id: number;\n severity: ioBroker.LogLevel | '*';\n }[]\n > = {};\n private readonly tempDirectories: { [scriptName: string]: string } = {}; // name: path\n private readonly folderCreationVerifiedObjects: Record = {};\n\n /** if logs are subscribed or not */\n private logSubscribed = false;\n\n private timeSettings: {\n format12: boolean;\n leadingZeros: boolean;\n } = { format12: false, leadingZeros: true };\n\n private dayScheduleTimer: NodeJS.Timeout | null = null; // schedule for astrological day\n private sunScheduleTimer: NodeJS.Timeout | null = null; // schedule for sun moment times\n private timeScheduleTimer: NodeJS.Timeout | null = null; // schedule for astrological day\n\n private activeStr = ''; // enabled state prefix\n\n private mirror: Mirror | undefined;\n\n private stopCounters: Record = {};\n\n private setStateCountCheckInterval: NodeJS.Timeout | null = null;\n\n private globalScript = '';\n /** Generated declarations for global TypeScripts */\n private globalDeclarations = '';\n // Remember which definitions the global scripts\n // have access to, because it depends on the compilation order\n private knownGlobalDeclarationsByScript: Record = {};\n private globalScriptLines = 0;\n // compiler instance for typescript\n private tsServer: Server;\n\n private readonly ignoreObjectChange: Set = new Set();\n\n private debugState: DebugState = {\n scriptName: '',\n child: null,\n promiseOnEnd: null,\n paused: false,\n started: 0,\n running: false,\n };\n\n constructor(options: Partial = {}) {\n options = {\n ...options,\n name: 'javascript', // adapter name\n useFormatDate: true,\n /**\n * If the JS-Controller catches an unhandled error, this will be called,\n * so we have a chance to handle it ourselves.\n */\n error: (err: Error): boolean => {\n // Identify unhandled errors originating from callbacks in scripts\n // These are not caught by wrapping the execution code in try-catch\n if (err && typeof err.stack === 'string') {\n const scriptCodeMarkerIndex = err.stack.indexOf(SCRIPT_CODE_MARKER);\n if (scriptCodeMarkerIndex > -1) {\n // This is a script error\n let scriptName = err.stack.substring(scriptCodeMarkerIndex);\n scriptName = scriptName.substring(0, scriptName.indexOf(':'));\n this.logError(scriptName, 'Error:', err);\n\n // Leave the script running for now\n // signal to the JS-Controller that we handled the error ourselves\n return true;\n }\n // check if a path contains adaptername but not own node_module\n // this regex matched \"iobroker.javascript/\" if NOT followed by \"node_modules\"\n if (!err.stack.match(/iobroker\\.javascript[/\\\\](?!.*node_modules).*/g)) {\n // This is an error without any info on origin (mostly async errors like connection errors)\n // also consider it as being from a script\n this.log.error(\n 'An error happened which is most likely from one of your scripts, but the originating script could not be detected.',\n );\n this.log.error(`Error: ${err.message}`);\n this.log.error(err.stack);\n\n // signal to the JS-Controller that we handled the error ourselves\n return true;\n }\n }\n\n return false;\n },\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 this.mods = {\n fs: {} as ProtectFs,\n 'fs/promises': {} as ProtectFs['promises'],\n dgram,\n crypto,\n dns,\n events,\n http,\n https,\n http2,\n net,\n os,\n path,\n util,\n child_process,\n stream,\n zlib,\n\n suncalc,\n axios,\n wake_on_lan,\n nodeSchedule,\n };\n\n // check the webstorm debug and just debug modes\n let debugMode: string | undefined;\n if (process.argv) {\n for (let a = 1; a < process.argv.length; a++) {\n if (process.argv[a].startsWith('--webstorm')) {\n webstormDebug = process.argv[a].replace(/^(.*?=\\s*)/, '');\n }\n if (process.argv[a] === '--debugScript') {\n if (!process.argv[a + 1]) {\n console.log('No script name provided');\n process.exit(300);\n } else {\n debugMode = process.argv[a + 1];\n }\n }\n }\n }\n\n this.context = {\n mods: this.mods,\n objects: this.objects,\n states: this.states,\n interimStateValues: this.interimStateValues,\n stateIds: this.stateIds,\n errorLogFunction: this.errorLogFunction,\n subscriptions: this.subscriptions,\n subscriptionsFile: this.subscriptionsFile,\n subscriptionsObject: this.subscriptionsObject,\n subscribedPatterns: this.subscribedPatterns,\n subscribedPatternsFile: this.subscribedPatternsFile,\n adapterSubs: this.adapterSubs,\n cacheObjectEnums: {},\n timers: this.timers,\n enums: this._enums,\n names: this.names,\n scripts: this.scripts,\n messageBusHandlers: this.messageBusHandlers,\n logSubscriptions: this.logSubscriptions,\n tempDirectories: this.tempDirectories,\n folderCreationVerifiedObjects: this.folderCreationVerifiedObjects,\n\n isEnums: false, // If some subscription wants enum\n channels: null,\n devices: null,\n logWithLineInfo: this.logWithLineInfo.bind(this),\n scheduler: null,\n timerId: 0,\n rulesOpened: null, // opened rules\n language: this.language || 'en',\n\n updateLogSubscriptions: this.updateLogSubscriptions.bind(this),\n convertBackStringifiedValues: this.convertBackStringifiedValues.bind(this),\n updateObjectContext: this.updateObjectContext.bind(this),\n prepareStateObject: this.prepareStateObject.bind(this),\n debugMode,\n getAbsoluteDefaultDataDir,\n adapter: this as unknown as ioBroker.Adapter,\n logError: this.logError.bind(this),\n allowSelfSignedCerts: false,\n };\n\n this.tsServer = new Server(tsCompilerOptions, this.tsLog);\n }\n\n async onObjectChange(id: string, obj?: ioBroker.Object | null): Promise {\n // Check if we should ignore this change (once!) because we just updated the compiled sources\n if (this.ignoreObjectChange.has(id)) {\n // Update the cached script object and do nothing more\n this.objects[id] = obj as ioBroker.Object;\n this.ignoreObjectChange.delete(id);\n return;\n }\n\n // When still in initializing: already remember current values,\n // but data structures are initialized elsewhere\n if (!this.objectsInitDone) {\n if (obj) {\n this.objects[id] = obj;\n }\n return;\n }\n\n if (id.startsWith('enum.')) {\n // clear cache\n this.context.cacheObjectEnums = {};\n\n // update this._enums array\n if (obj) {\n // If new\n if (!this._enums.includes(id)) {\n this._enums.push(id);\n this._enums.sort();\n }\n } else {\n const pos = this._enums.indexOf(id);\n // if deleted\n if (pos !== -1) {\n this._enums.splice(pos, 1);\n }\n }\n }\n\n if (id === 'system.config' && obj?.common?.language) {\n // set language for debug messages\n setLanguage(obj.common.language);\n this.language = obj.common.language;\n this.context.language = this.language as ioBroker.Languages;\n }\n\n // update stored time format for variables.dayTime\n if (id === `${this.namespace}.variables.dayTime` && obj?.native) {\n this.timeSettings.format12 = obj.native.format12 || false;\n this.timeSettings.leadingZeros = obj.native.leadingZeros === undefined ? true : obj.native.leadingZeros;\n }\n\n // send changes to the disk mirror\n this.mirror?.onObjectChange(id, obj as ioBroker.ScriptObject | null);\n\n const formerObj = this.objects[id];\n\n this.updateObjectContext(id, obj); // Update all Meta object data\n\n // for the alias object changes on the state objects, we need to manually update the\n // state cache value, because the new value is only published on the next change\n if (obj?.type === 'state' && id.startsWith('alias.0.')) {\n // execute async for speed\n this.getForeignStateAsync(id)\n .then(state => {\n if (state) {\n this.states[id] = state;\n } else if (this.states[id] !== undefined) {\n delete this.states[id];\n }\n })\n .catch(() => {\n /* ignore */\n });\n }\n\n this.subscriptionsObject.forEach(sub => {\n // ToDo: implement comparing with id.0.* too\n if (sub.pattern === id) {\n try {\n sub.callback(id, obj);\n } catch (err: any) {\n this.log.error(`Error in callback: ${err.toString()}`);\n }\n }\n });\n\n // handle Script object updates\n if (!obj && formerObj?.type === 'script') {\n // Object Deleted just now\n if (checkIsGlobal(formerObj)) {\n // it was a global Script, and it was enabled and is now deleted => restart adapter\n if (formerObj.common.enabled) {\n this.log.info(`Active global Script ${id} deleted. Restart instance.`);\n this.restart();\n }\n } else if (formerObj.common?.engine === `system.adapter.${this.namespace}`) {\n // It was a non-global Script and deleted => stop and remove it\n await this.stopScript(id);\n\n // delete scriptEnabled.blabla variable\n const idActive = `scriptEnabled.${id.substring(SCRIPT_CODE_MARKER.length)}`;\n await this.delStateAsync(idActive);\n await this.delObjectAsync(idActive);\n\n // delete scriptProblem.blabla variable\n const idProblem = `scriptProblem.${id.substring(SCRIPT_CODE_MARKER.length)}`;\n await this.delStateAsync(idProblem);\n await this.delObjectAsync(idProblem);\n }\n } else if (!formerObj && obj?.type === 'script') {\n // New script that does not exist before\n if (checkIsGlobal(obj)) {\n // new global script added => restart adapter\n if (obj.common.enabled) {\n this.log.info(`Active global Script ${id} created. Restart instance.`);\n this.restart();\n }\n } else if (obj.common?.engine === `system.adapter.${this.namespace}`) {\n // new non-global script - create states for scripts\n await this.createActiveObject(id, !!obj.common.enabled);\n await this.createProblemObject(id);\n if (obj.common.enabled) {\n // if enabled => Start a script\n await this.loadScriptById(id);\n }\n }\n } else if (obj?.type === 'script' && formerObj?.common) {\n // Script changed ...\n if (checkIsGlobal(obj)) {\n if (obj.common.enabled || formerObj.common.enabled) {\n this.log.info(`Global Script ${id} updated. Restart instance.`);\n this.restart();\n }\n } else {\n // No global script\n if (obj.common?.engine === `system.adapter.${this.namespace}`) {\n // create states for scripts\n await this.createActiveObject(id, !!obj.common.enabled);\n await this.createProblemObject(id);\n }\n\n if (\n (formerObj.common.enabled && !obj.common.enabled) ||\n (formerObj.common.engine === `system.adapter.${this.namespace}` &&\n obj.common.engine !== `system.adapter.${this.namespace}`)\n ) {\n // Script disabled\n if (formerObj.common.enabled && formerObj.common.engine === `system.adapter.${this.namespace}`) {\n // Remove it from executing\n await this.stopScript(id);\n }\n } else if (\n (!formerObj.common.enabled && obj.common.enabled) ||\n (formerObj.common.engine !== `system.adapter.${this.namespace}` &&\n obj.common.engine === `system.adapter.${this.namespace}`)\n ) {\n // Script enabled\n\n if (obj.common.enabled && obj.common.engine === `system.adapter.${this.namespace}`) {\n // Start script\n await this.loadScriptById(id);\n }\n } else if (\n obj.common.engine === `system.adapter.${this.namespace}` ||\n formerObj.common.engine === `system.adapter.${this.namespace}`\n ) {\n // Source changed => restart the script (only on the relevant instance)\n this.stopCounters[id] = this.stopCounters[id] ? this.stopCounters[id] + 1 : 1;\n void this.stopScript(id).then(() => {\n // only start again after stop when \"last\" object change to prevent problems on\n // multiple changes in fast frequency\n if (!--this.stopCounters[id]) {\n void this.loadScriptById(id);\n }\n });\n }\n }\n }\n }\n\n onStateChange(id: string, state?: ioBroker.State | null): void {\n if (this.interimStateValues[id] !== undefined) {\n // any update invalidates the remembered interim value\n delete this.interimStateValues[id];\n }\n if (!id || id.startsWith('messagebox.') || id.startsWith('log.')) {\n return;\n }\n\n if (id === `${this.namespace}.debug.to` && state && !state.ack) {\n if (!this.context.debugMode) {\n this.debugSendToInspector(state.val);\n }\n return;\n }\n\n // When still in initializing: already remember current values,\n // but data structures are initialized elsewhere\n if (!this.statesInitDone) {\n if (state) {\n this.states[id] = state;\n }\n return;\n }\n\n const oldState: ioBroker.State | null | undefined = this.states[id];\n if (state) {\n if (oldState) {\n // enable or disable script\n if (!state.ack && id.startsWith(this.activeStr) && this.objects[id]?.native?.script) {\n void this.extendForeignObject(this.objects[id].native.script, {\n common: { enabled: state.val },\n });\n }\n\n // monitor if the adapter is alive and send all subscriptions once more, after the adapter goes online\n if (/*oldState && */ oldState.val === false && state.val && id.endsWith('.alive')) {\n if (this.adapterSubs[id]) {\n const parts = id.split('.');\n const a = `${parts[2]}.${parts[3]}`;\n for (let t = 0; t < this.adapterSubs[id].length; t++) {\n this.log.info(`Detected coming adapter \"${a}\". Send subscribe: ${this.adapterSubs[id][t]}`);\n this.sendTo(a, 'subscribe', this.adapterSubs[id][t]);\n }\n }\n }\n } else if (/*!oldState && */ !this.stateIds.includes(id)) {\n this.stateIds.push(id);\n this.stateIds.sort();\n }\n this.states[id] = state;\n } else {\n if (oldState) {\n delete this.states[id];\n }\n state = {} as ioBroker.State;\n const pos = this.stateIds.indexOf(id);\n if (pos !== -1) {\n this.stateIds.splice(pos, 1);\n }\n }\n const _eventObj = createEventObject(\n this.context,\n id,\n this.convertBackStringifiedValues(id, state),\n this.convertBackStringifiedValues(id, oldState),\n );\n\n // if this state matches any subscriptions\n for (let i = 0, l = this.subscriptions.length; i < l; i++) {\n const sub = this.subscriptions[i];\n if (sub?.patternCompareFunctions && patternMatching(_eventObj, sub.patternCompareFunctions)) {\n try {\n sub.callback(_eventObj);\n } catch (err: any) {\n this.log.error(`Error in callback: ${err.toString()}`);\n }\n }\n }\n }\n\n onFileChange(id: string, fileName: string, size: number | null): void {\n // if this file matches any subscriptions\n for (let i = 0, l = this.subscriptionsFile.length; i < l; i++) {\n const sub = this.subscriptionsFile[i];\n if (sub && fileMatching(sub, id, fileName)) {\n try {\n sub.callback(id, fileName, size, sub.withFile);\n } catch (err: any) {\n this.log.error(`Error in callback: ${err.toString()}`);\n }\n }\n }\n }\n\n async onUnload(callback: () => void): Promise {\n await this.debugStop();\n this.stopTimeSchedules();\n if (this.setStateCountCheckInterval) {\n clearInterval(this.setStateCountCheckInterval);\n this.setStateCountCheckInterval = null;\n }\n await this.stopAllScripts();\n if (typeof callback === 'function') {\n callback();\n }\n }\n\n async onReady(): Promise {\n this.errorLogFunction = this.log;\n this.context.errorLogFunction = this.log;\n\n this.config.maxSetStatePerMinute = parseInt(this.config.maxSetStatePerMinute as unknown as string, 10) || 1000;\n this.config.maxTriggersPerScript = parseInt(this.config.maxTriggersPerScript as unknown as string, 10) || 100;\n\n if (this.supportsFeature?.('PLUGINS')) {\n const sentryInstance: InstanceType = this.getPluginInstance('sentry') as InstanceType<\n typeof SentryPlugin\n >;\n if (sentryInstance) {\n const Sentry = sentryInstance.getSentryObject();\n Sentry?.withScope(scope => {\n scope.addEventProcessor((event, _hint) => {\n if (event.exception?.values?.[0]) {\n const eventData = event.exception.values[0];\n if (\n eventData.stacktrace?.frames &&\n Array.isArray(eventData.stacktrace.frames) &&\n eventData.stacktrace.frames.length\n ) {\n // Exclude event if script Marker is included\n if (\n eventData.stacktrace.frames.find(frame =>\n frame.filename?.includes(SCRIPT_CODE_MARKER),\n )\n ) {\n return null;\n }\n // Exclude event if own directory is included but not inside own node_modules\n const ownNodeModulesDir = join(__dirname, 'node_modules');\n if (\n !eventData.stacktrace.frames.find(\n frame =>\n frame.filename?.includes(__dirname) &&\n !frame.filename.includes(ownNodeModulesDir),\n )\n ) {\n return null;\n }\n // We have exception data and did not sort it out, so report it\n return event;\n }\n }\n\n // No exception in it ... do not report\n return null;\n });\n });\n }\n }\n\n await this.main();\n }\n\n onMessage(obj: ioBroker.Message): void {\n switch (obj?.command) {\n // process messageTo commands\n case 'toScript':\n case 'jsMessageBus':\n if (\n obj.message &&\n (obj.message.instance === null ||\n obj.message.instance === undefined ||\n `javascript.${obj.message.instance}` === this.namespace ||\n obj.message.instance === this.namespace)\n ) {\n Object.keys(this.messageBusHandlers).forEach(name => {\n // the script name could be script.js.xxx or only xxx\n if (\n (!obj.message.script || obj.message.script === name) &&\n this.messageBusHandlers[name][obj.message.message]\n ) {\n this.messageBusHandlers[name][obj.message.message].forEach(handler => {\n const sandbox = handler.sandbox;\n\n sandbox.verbose && sandbox.log(`onMessage: ${JSON.stringify(obj.message)}`, 'info');\n\n try {\n if (obj.callback) {\n handler.cb.call(sandbox, obj.message.data, (result: any) => {\n if (sandbox.verbose) {\n sandbox.log(`onMessage result: ${JSON.stringify(result)}`, 'info');\n }\n\n this.sendTo(obj.from, obj.command, result, obj.callback);\n });\n } else {\n handler.cb.call(sandbox, obj.message.data, (result: any) => {\n sandbox.verbose &&\n sandbox.log(`onMessage result: ${JSON.stringify(result)}`, 'info');\n });\n }\n } catch (err: unknown) {\n void this.setState(\n `scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`,\n true,\n true,\n );\n this.logError(name, 'Error in callback:', err as Error);\n }\n });\n }\n });\n }\n break;\n\n case 'loadTypings': {\n // Load typings for the editor\n const typings: Record = {};\n\n // try to load TypeScript lib files from disk\n try {\n const typescriptLibs = resolveTypescriptLibs(targetTsLib);\n Object.assign(typings, typescriptLibs);\n } catch {\n /* ok, no lib then */\n }\n\n // provide the already-loaded ioBroker typings and global script declarations\n Object.assign(typings, tsAmbient);\n\n // also provide the known global declarations for each global script\n for (const globalScriptPaths of Object.keys(this.knownGlobalDeclarationsByScript)) {\n typings[`${globalScriptPaths}.d.ts`] = this.knownGlobalDeclarationsByScript[globalScriptPaths];\n }\n\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, { typings }, obj.callback);\n }\n break;\n }\n\n case 'calcAstroAll': {\n if (obj.message) {\n const sunriseOffset =\n parseInt(\n obj.message.sunriseOffset === undefined\n ? this.config.sunriseOffset\n : obj.message.sunriseOffset,\n 10,\n ) || 0;\n const sunsetOffset =\n parseInt(\n obj.message.sunsetOffset === undefined\n ? this.config.sunsetOffset\n : obj.message.sunsetOffset,\n 10,\n ) || 0;\n const longitude =\n parseFloat(\n obj.message.longitude === undefined ? this.config.longitude : obj.message.longitude,\n ) || 0;\n const latitude =\n parseFloat(obj.message.latitude === undefined ? this.config.latitude : obj.message.latitude) ||\n 0;\n const today = getAstroStartOfDay();\n let astroEvents: GetTimesResult & { nextSunrise: Date; nextSunset: Date } = {} as GetTimesResult & {\n nextSunrise: Date;\n nextSunset: Date;\n };\n try {\n astroEvents = this.mods.suncalc.getTimes(today, latitude, longitude);\n } catch (err: unknown) {\n this.log.error(`Cannot calculate astro data: ${err as Error}`);\n }\n if (astroEvents) {\n try {\n astroEvents.nextSunrise = this.getAstroEvent(\n today,\n obj.message.sunriseEvent || this.config.sunriseEvent,\n obj.message.sunriseLimitStart || this.config.sunriseLimitStart,\n obj.message.sunriseLimitEnd || this.config.sunriseLimitEnd,\n sunriseOffset,\n false,\n latitude,\n longitude,\n true,\n );\n astroEvents.nextSunset = this.getAstroEvent(\n today,\n obj.message.sunsetEvent || this.config.sunsetEvent,\n obj.message.sunsetLimitStart || this.config.sunsetLimitStart,\n obj.message.sunsetLimitEnd || this.config.sunsetLimitEnd,\n sunsetOffset,\n true,\n latitude,\n longitude,\n true,\n );\n } catch (err: unknown) {\n this.log.error(`Cannot calculate astro data: ${err as Error}`);\n }\n }\n\n const result: Record = {};\n const keys = Object.keys(astroEvents).sort(\n (a, b) =>\n (astroEvents as unknown as Record)[a] -\n (astroEvents as unknown as Record)[b],\n );\n keys.forEach(key => {\n const validDate =\n (astroEvents as unknown as Record)[key] !== null &&\n !isNaN((astroEvents as unknown as Record)[key].getTime());\n\n result[key] = {\n isValidDate: validDate,\n serverTime: validDate\n ? formatHoursMinutesSeconds((astroEvents as unknown as Record)[key])\n : 'n/a',\n date: validDate\n ? (astroEvents as unknown as Record)[key].toISOString()\n : 'n/a',\n };\n });\n\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n }\n break;\n }\n\n case 'calcAstro': {\n if (obj.message) {\n const longitude =\n parseFloat(\n obj.message.longitude === undefined ? this.config.longitude : obj.message.longitude,\n ) || 0;\n const latitude =\n parseFloat(obj.message.latitude === undefined ? this.config.latitude : obj.message.latitude) ||\n 0;\n const today = getAstroStartOfDay();\n\n const sunriseEvent = obj.message?.sunriseEvent || this.config.sunriseEvent;\n const sunriseLimitStart = obj.message?.sunriseLimitStart || this.config.sunriseLimitStart;\n const sunriseLimitEnd = obj.message?.sunriseLimitEnd || this.config.sunriseLimitEnd;\n const sunriseOffset =\n parseInt(\n obj.message.sunriseOffset === undefined\n ? this.config.sunriseOffset\n : obj.message.sunriseOffset,\n 10,\n ) || 0;\n const nextSunrise = this.getAstroEvent(\n today,\n sunriseEvent,\n sunriseLimitStart,\n sunriseLimitEnd,\n sunriseOffset,\n false,\n latitude,\n longitude,\n true,\n );\n\n const sunsetEvent = obj.message?.sunsetEvent || this.config.sunsetEvent;\n const sunsetLimitStart = obj.message?.sunsetLimitStart || this.config.sunsetLimitStart;\n const sunsetLimitEnd = obj.message?.sunsetLimitEnd || this.config.sunsetLimitEnd;\n const sunsetOffset =\n parseInt(\n obj.message.sunsetOffset === undefined\n ? this.config.sunsetOffset\n : obj.message.sunsetOffset,\n 10,\n ) || 0;\n const nextSunset = this.getAstroEvent(\n today,\n sunsetEvent,\n sunsetLimitStart,\n sunsetLimitEnd,\n sunsetOffset,\n true,\n latitude,\n longitude,\n true,\n );\n\n const validDateSunrise = nextSunrise !== null && !isNaN(nextSunrise.getTime());\n const validDateSunset = nextSunset !== null && !isNaN(nextSunset.getTime());\n\n this.log.debug(\n `calcAstro sunrise: ${sunriseEvent} -> start ${sunriseLimitStart}, end: ${sunriseLimitEnd}, offset: ${sunriseOffset} - ${validDateSunrise ? nextSunrise.toISOString() : 'n/a'}`,\n );\n this.log.debug(\n `calcAstro sunset: ${sunsetEvent} -> start ${sunsetLimitStart}, end: ${sunsetLimitEnd}, offset: ${sunsetOffset} - ${validDateSunset ? nextSunset.toISOString() : 'n/a'}`,\n );\n\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n nextSunrise: {\n isValidDate: validDateSunrise,\n serverTime: validDateSunrise ? formatHoursMinutesSeconds(nextSunrise) : 'n/a',\n date: nextSunrise.toISOString(),\n },\n nextSunset: {\n isValidDate: validDateSunset,\n serverTime: validDateSunset ? formatHoursMinutesSeconds(nextSunset) : 'n/a',\n date: nextSunset.toISOString(),\n },\n },\n obj.callback,\n );\n }\n }\n break;\n }\n\n case 'debug': {\n if (!this.context.debugMode) {\n this.debugStart(obj.message);\n }\n break;\n }\n\n case 'debugStop': {\n if (!this.context.debugMode) {\n void this.debugStop().then(() => console.log('stopped'));\n }\n break;\n }\n\n case 'rulesOn': {\n this.context.rulesOpened = obj.message;\n console.log(`Enable messaging for ${this.context.rulesOpened}`);\n break;\n }\n\n case 'rulesOff': {\n // maybe if (context.rulesOpened === obj.message)\n console.log(`Disable messaging for ${this.context.rulesOpened}`);\n this.context.rulesOpened = null;\n break;\n }\n\n case 'getIoBrokerDataDir': {\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n dataDir: getAbsoluteDefaultDataDir(),\n sep,\n },\n obj.callback,\n );\n }\n break;\n }\n\n case 'chatCompletion': {\n // Proxy chat completion requests to an OpenAI-compatible API endpoint.\n // API keys are resolved server-side from encryptedNative config — they never\n // leave the adapter (frontend only sends `provider`, not the key).\n if (obj.callback) {\n const chatModel = (obj.message?.model || '').trim();\n const messages = obj.message?.messages;\n const tools = obj.message?.tools;\n const provider = (obj.message?.provider || 'openai').trim();\n const { apiKey, baseUrl } = resolveProviderCredentials(this.config, provider, obj.message?.baseUrl);\n // Anthropic, Gemini, and DeepSeek always require an API key; OpenAI-compatible allows empty key with custom base URL\n if (\n !apiKey &&\n (provider === 'anthropic' || provider === 'gemini' || provider === 'deepseek' || !baseUrl)\n ) {\n this.sendTo(obj.from, obj.command, { error: 'No API key provided' }, obj.callback);\n break;\n }\n if (!chatModel || !messages) {\n this.sendTo(obj.from, obj.command, { error: 'Model and messages are required' }, obj.callback);\n break;\n }\n\n let url: string;\n const chatHeaders: Record = {\n 'Content-Type': 'application/json',\n };\n let bodyObj: Record;\n\n if (provider === 'anthropic') {\n url = 'https://api.anthropic.com/v1/messages';\n chatHeaders['x-api-key'] = apiKey;\n chatHeaders['anthropic-version'] = '2023-06-01';\n // Translate OpenAI-format messages/tools into Anthropic's content-block format.\n const { system: systemText, messages: anthropicMessages } =\n translateMessagesToAnthropic(messages);\n const anthropicTools = tools?.length ? translateToolsToAnthropic(tools) : [];\n bodyObj = {\n model: chatModel,\n max_tokens: 8192,\n stream: false,\n ...(systemText ? { system: systemText } : {}),\n messages: anthropicMessages,\n ...(anthropicTools.length ? { tools: anthropicTools } : {}),\n };\n } else if (provider === 'gemini') {\n url = 'https://generativelanguage.googleapis.com/v1beta/openai/chat/completions';\n if (apiKey) {\n chatHeaders.Authorization = `Bearer ${apiKey}`;\n }\n bodyObj = { model: chatModel, messages, stream: false, ...(tools?.length ? { tools } : {}) };\n } else if (provider === 'deepseek') {\n url = 'https://api.deepseek.com/chat/completions';\n chatHeaders.Authorization = `Bearer ${apiKey}`;\n bodyObj = { model: chatModel, messages, stream: false, ...(tools?.length ? { tools } : {}) };\n } else {\n url = `${baseUrl || 'https://api.openai.com/v1'}/chat/completions`;\n if (apiKey) {\n chatHeaders.Authorization = `Bearer ${apiKey}`;\n }\n bodyObj = {\n model: chatModel,\n messages,\n stream: false,\n ...(tools?.length ? { tools } : {}),\n // Disable thinking/reasoning for local models to save context and speed\n ...(baseUrl ? { reasoning_effort: 'none' } : {}),\n };\n }\n\n const body = JSON.stringify(bodyObj);\n const bodyBuffer = Buffer.from(body, 'utf8');\n chatHeaders['Content-Length'] = bodyBuffer.length;\n\n let urlObj: URL;\n try {\n urlObj = new URL(url);\n } catch {\n this.sendTo(obj.from, obj.command, { error: `Invalid API URL: ${url}` }, obj.callback);\n break;\n }\n const isHttps = urlObj.protocol === 'https:';\n const requestModule = isHttps ? https : http;\n\n try {\n const req = requestModule.request(\n url,\n {\n method: 'POST',\n headers: chatHeaders,\n timeout: 600000,\n ...(isHttps && this.config.allowSelfSignedCerts ? { rejectUnauthorized: false } : {}),\n },\n res => {\n let data = '';\n res.on('data', (chunk: Buffer) => {\n data += chunk.toString();\n });\n res.on('end', () => {\n if (res.statusCode === 200) {\n try {\n const parsed = JSON.parse(data);\n let content: string;\n let tool_calls: unknown;\n if (provider === 'anthropic') {\n const translated = translateAnthropicResponseToOpenAI(parsed);\n content = translated.content;\n tool_calls = translated.tool_calls;\n } else {\n const message = parsed.choices?.[0]?.message;\n content = message?.content || '';\n tool_calls = message?.tool_calls;\n }\n if (!content && !(tool_calls as unknown[] | undefined)?.length) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Empty response from API' },\n obj.callback,\n );\n } else {\n this.sendTo(\n obj.from,\n obj.command,\n {\n success: true,\n content,\n ...(tool_calls ? { tool_calls } : {}),\n },\n obj.callback,\n );\n }\n } catch {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid JSON response from API' },\n obj.callback,\n );\n }\n } else {\n let detail = '';\n try {\n const errParsed = JSON.parse(data);\n detail = errParsed.error?.message || data.substring(0, 200);\n } catch {\n detail = data.substring(0, 200);\n }\n this.sendTo(\n obj.from,\n obj.command,\n {\n error: `${detail || httpStatusText(res.statusCode || 0)} (${res.statusCode})`,\n },\n obj.callback,\n );\n }\n });\n },\n );\n\n req.on('error', (err: Error) => {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Connection failed: ${err.message}` },\n obj.callback,\n );\n });\n\n req.on('timeout', () => {\n req.destroy();\n this.sendTo(obj.from, obj.command, { error: 'Connection timeout (600s)' }, obj.callback);\n });\n\n req.write(bodyBuffer);\n req.end();\n } catch (error) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Connection failed: ${(error as Error).toString()}` },\n obj.callback,\n );\n }\n }\n break;\n }\n\n case 'testApiConnection': {\n // Test connection to an OpenAI-compatible API endpoint.\n // The settings-dialog Test button sends the current form value as `apiKey`\n // (so users can test before saving); otherwise we fall back to the stored key.\n if (obj.callback) {\n const provider = (obj.message?.provider || 'openai').trim();\n const { apiKey, baseUrl } = resolveTestCredentials(\n this.config,\n provider,\n obj.message?.apiKey,\n obj.message?.baseUrl,\n );\n // Anthropic, Gemini, and DeepSeek always require an API key; OpenAI-compatible allows empty key with custom base URL\n if (\n !apiKey &&\n (provider === 'anthropic' || provider === 'gemini' || provider === 'deepseek' || !baseUrl)\n ) {\n this.sendTo(obj.from, obj.command, { error: 'No API key provided' }, obj.callback);\n break;\n }\n\n let url: string;\n const testHeaders: Record = {\n 'Content-Type': 'application/json',\n };\n\n if (provider === 'anthropic') {\n url = 'https://api.anthropic.com/v1/models';\n testHeaders['x-api-key'] = apiKey;\n testHeaders['anthropic-version'] = '2023-06-01';\n } else if (provider === 'gemini') {\n url = 'https://generativelanguage.googleapis.com/v1beta/openai/models';\n if (apiKey) {\n testHeaders.Authorization = `Bearer ${apiKey}`;\n }\n } else if (provider === 'deepseek') {\n url = 'https://api.deepseek.com/models';\n testHeaders.Authorization = `Bearer ${apiKey}`;\n } else {\n url = `${baseUrl || 'https://api.openai.com/v1'}/models`;\n if (apiKey) {\n testHeaders.Authorization = `Bearer ${apiKey}`;\n }\n }\n\n let urlObj: URL;\n try {\n urlObj = new URL(url);\n } catch {\n this.sendTo(obj.from, obj.command, { error: `Invalid API URL: ${url}` }, obj.callback);\n break;\n }\n const isHttps = urlObj.protocol === 'https:';\n const requestModule = isHttps ? https : http;\n\n try {\n const req = requestModule.request(\n url,\n {\n method: 'GET',\n headers: testHeaders,\n timeout: 10000,\n ...(isHttps && this.config.allowSelfSignedCerts ? { rejectUnauthorized: false } : {}),\n },\n res => {\n let data = '';\n res.on('data', (chunk: Buffer) => {\n data += chunk.toString();\n });\n res.on('end', () => {\n if (res.statusCode === 200) {\n try {\n const parsed = JSON.parse(data);\n const models: string[] = (parsed.data || [])\n .map((m: { id: string }) =>\n m.id.startsWith('models/') ? m.id.substring(7) : m.id,\n )\n .sort();\n this.sendTo(\n obj.from,\n obj.command,\n { success: true, models, count: models.length },\n obj.callback,\n );\n } catch {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid JSON response from API' },\n obj.callback,\n );\n }\n } else if (res.statusCode === 401) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid API key (401)' },\n obj.callback,\n );\n } else if (res.statusCode === 403) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Access denied (403)' },\n obj.callback,\n );\n } else {\n // Include response body for debugging\n let detail = '';\n try {\n const errParsed = JSON.parse(data);\n detail = errParsed.error?.message || data.substring(0, 200);\n } catch {\n detail = data.substring(0, 200);\n }\n this.sendTo(\n obj.from,\n obj.command,\n {\n error: `${detail || httpStatusText(res.statusCode || 0)} (${res.statusCode})`,\n },\n obj.callback,\n );\n }\n });\n },\n );\n\n req.on('error', (err: Error) => {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Connection failed: ${err.message}` },\n obj.callback,\n );\n });\n\n req.on('timeout', () => {\n req.destroy();\n this.sendTo(obj.from, obj.command, { error: 'Connection timeout (10s)' }, obj.callback);\n });\n\n req.end();\n } catch (error) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Connection failed: ${(error as Error).toString()}` },\n obj.callback,\n );\n }\n }\n break;\n }\n\n case 'getAvailableAiProviders': {\n // Reports which AI providers have stored credentials (keys never leave the backend).\n if (obj.callback) {\n const providers = listAvailableProviders(this.config);\n this.sendTo(obj.from, obj.command, { providers }, obj.callback);\n }\n break;\n }\n\n case 'prettier': {\n // Format the code with Prettier\n if (obj.message && typeof obj.message.code === 'string') {\n try {\n prettier\n .format(obj.message.code, {\n parser: obj.message.type === 'typescript' ? 'babel-ts' : 'babel',\n printWidth: 120,\n semi: true,\n tabWidth: 4,\n useTabs: false,\n trailingComma: 'all',\n singleQuote: true,\n singleAttributePerLine: true,\n endOfLine: 'lf',\n bracketSpacing: true,\n arrowParens: 'avoid',\n quoteProps: 'as-needed',\n })\n .then(formattedCode => {\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, { code: formattedCode }, obj.callback);\n } else {\n this.logWithLineInfo(`Formatted code:\\n${formattedCode}`);\n }\n })\n .catch(e => {\n this.logError('Prettier', 'Error formatting code:', e as Error);\n this.sendTo(obj.from, obj.command, { error: (e as Error).toString() }, obj.callback);\n });\n } catch (e) {\n this.logError('Prettier', 'Error formatting code:', e as Error);\n this.sendTo(obj.from, obj.command, { error: (e as Error).toString() }, obj.callback);\n }\n } else {\n this.sendTo(obj.from, obj.command, { error: 'No code provided' }, obj.callback);\n }\n break;\n }\n }\n }\n\n onLog(msg: any): void {\n Object.keys(this.logSubscriptions).forEach((name: string): void =>\n this.logSubscriptions[name].forEach(handler => {\n if (\n typeof handler.cb === 'function' &&\n (handler.severity === '*' || handler.severity === msg.severity)\n ) {\n handler.sandbox.logHandler = handler.severity || '*';\n handler.cb.call(handler.sandbox, msg);\n handler.sandbox.logHandler = undefined;\n }\n }),\n );\n }\n\n logError(scriptName: string, msg: string, e: Error, offs?: number): void {\n const stack = e.stack ? e.stack.toString().split('\\n') : e ? e.toString() : '';\n if (!msg.includes('\\n')) {\n msg = msg.replace(/[: ]*$/, ': ');\n }\n if (!msg.endsWith(' ')) {\n msg += ':';\n }\n if (!scriptName.startsWith(SCRIPT_CODE_MARKER)) {\n scriptName = SCRIPT_CODE_MARKER + scriptName;\n }\n\n this.errorLogFunction.error(`${scriptName}: ${msg}${this.fixLineNo(stack[0])}`);\n for (let i = offs || 1; i < stack.length; i++) {\n if (!stack[i]) {\n continue;\n }\n if (stack[i].match(/runInNewContext|javascript\\.js:/)) {\n break;\n }\n this.errorLogFunction.error(`${scriptName}: ${this.fixLineNo(stack[i])}`);\n }\n }\n\n logWithLineInfo(msg: string): void {\n this.errorLogFunction.warn(msg);\n\n // get current error stack\n const stack = new Error().stack?.split('\\n');\n\n if (stack) {\n for (let i = 3; i < stack.length; i++) {\n if (!stack[i]) {\n continue;\n }\n if (stack[i].match(/runInContext|runInNewContext|javascript\\.js:/)) {\n break;\n }\n this.errorLogFunction.warn(this.fixLineNo(stack[i]));\n }\n }\n }\n\n async main(): Promise {\n // Patch the font as it sometimes is wrong\n if (!this.context.debugMode) {\n if (await this.patchFont()) {\n this.log.debug('Font patched');\n }\n }\n\n this.log.debug(`config.subscribe (Do not subscribe all states on start): ${this.config.subscribe}`);\n\n // correct jsonConfig for admin\n const instObj: ioBroker.InstanceObject | null | undefined = await this.getForeignObjectAsync(\n `system.adapter.${this.namespace}`,\n );\n if (instObj?.common) {\n if (instObj.common.adminUI?.config !== 'json') {\n if (instObj.common.adminUI) {\n instObj.common.adminUI.config = 'json';\n } else {\n instObj.common.adminUI = { config: 'json' };\n }\n void this.setForeignObject(instObj._id, instObj);\n }\n }\n\n if (webstormDebug) {\n this.errorLogFunction = {\n error: console.error,\n warn: console.warn,\n info: console.info,\n debug: console.log,\n silly: console.log,\n };\n this.context.errorLogFunction = this.errorLogFunction;\n }\n this.activeStr = `${this.namespace}.scriptEnabled.`;\n\n this.mods.fs = new ProtectFs(this.log, getAbsoluteDefaultDataDir());\n this.mods['fs/promises'] = this.mods.fs.promises; // to avoid require('fs/promises');\n\n // try to read TS declarations\n try {\n tsAmbient = {\n 'javascript.d.ts': readFileSync(this.mods.path.join(__dirname, 'lib/javascript.d.ts'), 'utf8'),\n };\n this.tsServer.provideAmbientDeclarations(tsAmbient);\n jsDeclarationServer.provideAmbientDeclarations(tsAmbient);\n } catch (err: unknown) {\n this.log.warn(`Could not read TypeScript ambient declarations: ${err as Error}`);\n // This should not happen, so send an error report to Sentry\n if (this.supportsFeature && this.supportsFeature('PLUGINS')) {\n const sentryInstance = this.getPluginInstance('sentry');\n if (sentryInstance) {\n const sentryObject = sentryInstance.getSentryObject();\n sentryObject?.captureException(err as Error);\n }\n }\n // Keep the adapter from crashing when the included typings cannot be read\n tsAmbient = {};\n }\n\n await this.installLibraries();\n // Load the TS declarations for Node.js and all 3rd party modules\n this.loadTypeScriptDeclarations();\n\n await this.getData();\n this.context.scheduler = new Scheduler(\n this.log,\n Date,\n this.mods.suncalc,\n this.config.latitude,\n this.config.longitude,\n );\n await this.dayTimeSchedules();\n await this.sunTimeSchedules();\n await this.timeSchedule();\n\n // Store allowSelfSignedCerts on the context, so sandbox HTTP functions can use it\n // without setting the global process.env.NODE_TLS_REJECT_UNAUTHORIZED (which affects all adapters in compact mode)\n this.context.allowSelfSignedCerts = this.config.allowSelfSignedCerts;\n\n const doc = await this.getObjectViewAsync('script', 'javascript', {});\n if (doc?.rows?.length) {\n // sort global scripts if configured\n if (this.config.sortGlobalScriptsAlphabetically) {\n doc.rows.sort((a, b) => a.value._id.localeCompare(b.value._id));\n }\n // assemble global script\n for (let g = 0; g < doc.rows.length; g++) {\n const obj = doc.rows[g].value;\n if (checkIsGlobal(obj)) {\n if (obj && obj.common) {\n const engineType = (obj.common.engineType || '').toLowerCase();\n\n if (obj.common.enabled) {\n if (engineType.startsWith('typescript')) {\n // TypeScript\n this.log.info(`${obj._id}: compiling TypeScript source...`);\n // In order to compile global TypeScript, we need to do some transformations\n // 1. For top-level-await, some statements must be wrapped in an immediately-invoked async function\n // 2. If any global script uses `import`, the declarations are no longer visible if they are not exported with `declare global`\n const transformedSource = transformScriptBeforeCompilation(obj.common.source, true);\n // The source code must be transformed in order to support top level await\n // Global scripts must not be treated as a module, otherwise their methods\n // cannot be found by the normal scripts\n // We need to hash both global declarations that are known until now\n // AND the script source, because changing either can change the compilation output\n const sourceHash: string = hashSource(\n tsSourceHashBase + this.globalDeclarations + transformedSource,\n );\n\n let compiled: string | undefined;\n let declarations: string | undefined;\n // If we already stored the compiled source code and the original source hash,\n // use the hash to check whether we can rely on the compiled source code or\n // if we need to compile it again\n if (\n typeof obj.common.compiled === 'string' &&\n typeof obj.common.sourceHash === 'string' &&\n sourceHash === obj.common.sourceHash\n ) {\n // We can reuse the stored source\n compiled = obj.common.compiled;\n declarations = obj.common.declarations;\n this.log.info(\n `${obj._id}: source code did not change, using cached compilation result...`,\n );\n } else {\n // We don't have a hashed source code, or the original source changed, compile it\n const filename = scriptIdToTSFilename(obj._id);\n let tsCompiled: CompileResult;\n try {\n tsCompiled = this.tsServer.compile(filename, transformedSource);\n } catch (err: unknown) {\n this.log.error(`${obj._id}: TypeScript compilation failed:\\n${err as Error}`);\n continue;\n }\n\n const errors = tsCompiled.diagnostics\n .map(diag => `${diag.annotatedSource}\\n`)\n .join('\\n');\n\n if (tsCompiled.success) {\n if (errors.length > 0) {\n this.log.warn(\n `${obj._id}: TypeScript compilation completed with errors:\\n${errors}`,\n );\n } else {\n this.log.info(`${obj._id}: TypeScript compilation successful`);\n }\n compiled = tsCompiled.result;\n // Global scripts that have been transformed to support `import` need to have their declarations transformed aswell\n declarations = transformGlobalDeclarations(tsCompiled.declarations || '');\n\n const newCommon: {\n compiled: string | undefined;\n declarations?: string;\n sourceHash: string;\n } = {\n sourceHash,\n compiled,\n };\n if (declarations) {\n newCommon.declarations = declarations;\n }\n\n // Store the compiled source and the original source hash, so we don't need to do the work again next time\n this.ignoreObjectChange.add(obj._id); // ignore the next change and don't restart scripts\n void this.extendForeignObject(obj._id, {\n common: newCommon,\n });\n } else {\n this.log.error(`${obj._id}: TypeScript compilation failed:\\n${errors}`);\n continue;\n }\n }\n this.globalScript += `${compiled}\\n`;\n // if declarations were generated, remember them\n if (declarations != null) {\n this.provideDeclarationsForGlobalScript(obj._id, declarations);\n }\n } else {\n // javascript\n const sourceCode = obj.common.source;\n this.globalScript += `${sourceCode}\\n`;\n\n // try to compile the declarations so TypeScripts can use\n // functions defined in global JavaScripts\n const filename = scriptIdToTSFilename(obj._id);\n let tsCompiled: CompileResult;\n try {\n tsCompiled = jsDeclarationServer.compile(filename, sourceCode);\n } catch (err: unknown) {\n this.log.warn(\n `${obj._id}: Error while generating type declarations, skipping:\\n${err as Error}`,\n );\n continue;\n }\n // if declarations were generated, remember them\n if (tsCompiled.success && tsCompiled.declarations != null) {\n this.provideDeclarationsForGlobalScript(obj._id, tsCompiled.declarations);\n }\n }\n }\n }\n }\n }\n }\n\n this.globalScript = this.globalScript.replace(/\\r\\n/g, '\\n');\n this.globalScriptLines = this.globalScript.split(/\\n/g).length - 1;\n\n if (doc?.rows?.length) {\n // load all scripts\n for (let i = 0; i < doc.rows.length; i++) {\n if (!checkIsGlobal(doc.rows[i].value)) {\n void this.loadScript(doc.rows[i].value);\n }\n }\n }\n\n if (this.config.mirrorPath?.trim()) {\n this.config.mirrorInstance = parseInt(this.config.mirrorInstance as unknown as string, 10) || 0;\n if (this.instance === this.config.mirrorInstance) {\n const ioBDataDir = getAbsoluteDefaultDataDir() + sep;\n this.config.mirrorPath = normalize(this.config.mirrorPath);\n let mirrorForbidden = false;\n for (let dir of forbiddenMirrorLocations) {\n dir = join(ioBDataDir, dir) + sep;\n if (dir.includes(this.config.mirrorPath) || this.config.mirrorPath.startsWith(dir)) {\n this.log.error(`The Mirror directory is not allowed to be a central ioBroker directory!`);\n this.log.error(`Directory ${this.config.mirrorPath} is not allowed to mirror files!`);\n mirrorForbidden = true;\n break;\n }\n }\n if (!mirrorForbidden) {\n this.mirror = new Mirror({\n adapter: this,\n log: this.log,\n diskRoot: this.config.mirrorPath,\n });\n }\n }\n }\n\n // CHeck setState counter per minute and stop a script if too high\n this.setStateCountCheckInterval = setInterval(() => {\n Object.keys(this.scripts).forEach(id => {\n if (!this.scripts[id]) {\n return;\n }\n const currentSetStatePerMinuteCounter = this.scripts[id].setStatePerMinuteCounter;\n this.scripts[id].setStatePerMinuteCounter = 0;\n if (currentSetStatePerMinuteCounter > this.config.maxSetStatePerMinute) {\n this.scripts[id].setStatePerMinuteProblemCounter++;\n this.log.debug(\n `${id}: Script has reached the maximum of ${this.config.maxSetStatePerMinute} setState calls per minute in ${this.scripts[id].setStatePerMinuteProblemCounter} consecutive minutes`,\n );\n // Allow \"too high counters\" for 1 minute for script starts or such and only\n // stop the script when lasts longer\n if (this.scripts[id].setStatePerMinuteProblemCounter > 1) {\n this.log.error(\n `${id}: Script is calling setState more than ${this.config.maxSetStatePerMinute} times per minute! Stopping Script now! Please check your script!`,\n );\n void this.stopScript(id);\n }\n } else if (this.scripts[id].setStatePerMinuteProblemCounter > 0) {\n this.scripts[id].setStatePerMinuteProblemCounter--;\n this.log.debug(\n `Script ${id} has NOT reached the maximum of ${this.config.maxSetStatePerMinute} setState calls per minute. Decrease problem counter to ${this.scripts[id].setStatePerMinuteProblemCounter}`,\n );\n }\n });\n }, 60000);\n }\n\n private loadTypeScriptDeclarations(): void {\n // try to load the typings on disk for all 3rd party modules\n const packages = [\n 'node', // this provides auto-completion for most builtins\n '@iobroker/types', // this provides auto-completion for most builtins\n ];\n // Also include user-selected libraries (but only those that are also installed)\n if (typeof this.config?.libraries === 'string' && typeof this.config.libraryTypings === 'string') {\n const installedLibs = this.config.libraries\n .split(/[,;\\s]+/)\n .map(s => s.trim().split('@')[0])\n .filter(s => !!s);\n\n const wantsTypings = this.config.libraryTypings\n .split(/[,;\\s]+/)\n .map(s => s.trim())\n .filter(s => !!s);\n // Add all installed libraries the user has requested typings for to the list of packages\n for (const lib of installedLibs) {\n if (wantsTypings.includes(lib) && !packages.includes(lib)) {\n packages.push(lib);\n }\n }\n // Some packages have submodules (e.g., rxjs/operators) that are not exposed through the main entry point\n // If typings are requested for them, also add them if the base module is installed\n for (const lib of wantsTypings) {\n // Extract the package name and check if we need to add it\n if (!lib.includes('/')) {\n continue;\n }\n const pkgName = lib.substring(0, lib.indexOf('/'));\n\n if (installedLibs.includes(pkgName) && !packages.includes(lib)) {\n packages.push(lib);\n }\n }\n }\n for (const pkg of packages) {\n let pkgTypings = resolveTypings(\n pkg,\n this.getAdapterScopedPackageIdentifier ? this.getAdapterScopedPackageIdentifier(pkg) : pkg,\n // node needs ambient typings, so we don't wrap it in declare module\n pkg !== 'node',\n );\n if (!pkgTypings) {\n // Create the empty dummy declarations so users don't get the \"not found\" error\n // for installed packages\n if (pkg.includes('/')) {\n pkgTypings = {\n [`node_modules/${pkg}/index.d.ts`]: `declare module \"${pkg}\";`,\n };\n } else {\n pkgTypings = {\n [`node_modules/@types/${pkg}/index.d.ts`]: `declare module \"${pkg}\";`,\n };\n }\n }\n this.log.debug(`Loaded TypeScript definitions for \"${pkg}\": ${JSON.stringify(Object.keys(pkgTypings))}`);\n // remember the declarations for the editor\n Object.assign(tsAmbient, pkgTypings);\n // and give the language servers access to them\n this.tsServer.provideAmbientDeclarations(pkgTypings);\n jsDeclarationServer.provideAmbientDeclarations(pkgTypings);\n }\n }\n\n updateObjectContext(id: string, obj: ioBroker.Object | null | undefined): void {\n if (obj) {\n // add state to state ID's list\n if (obj.type === 'state') {\n if (!this.stateIds.includes(id)) {\n this.stateIds.push(id);\n this.stateIds.sort();\n }\n if (this.context.devices && this.context.channels) {\n const parts = id.split('.');\n parts.pop();\n const chn = parts.join('.');\n this.context.channels[chn] ||= [];\n this.context.channels[chn].push(id);\n\n parts.pop();\n const dev = parts.join('.');\n this.context.devices[dev] ||= [];\n this.context.devices[dev].push(id);\n }\n }\n } else {\n // delete object from state ID's list\n const pos = this.stateIds.indexOf(id);\n if (pos !== -1) {\n this.stateIds.splice(pos, 1);\n }\n if (this.context.devices && this.context.channels) {\n const parts = id.split('.');\n parts.pop();\n const chn = parts.join('.');\n if (this.context.channels[chn]) {\n const posChn = this.context.channels[chn].indexOf(id);\n posChn !== -1 && this.context.channels[chn].splice(posChn, 1);\n }\n\n parts.pop();\n const dev = parts.join('.');\n if (this.context.devices[dev]) {\n const posDev = this.context.devices[dev].indexOf(id);\n posDev !== -1 && this.context.devices[dev].splice(posDev, 1);\n }\n }\n\n delete this.folderCreationVerifiedObjects[id];\n }\n\n if (!obj && this.objects[id]) {\n // objects were deleted\n this.removeFromNames(id);\n delete this.objects[id];\n } else if (obj && !this.objects[id]) {\n // object was added\n this.objects[id] = obj;\n this.addToNames(obj);\n } else if (obj && this.objects[id].common) {\n // Object just changed\n this.objects[id] = obj;\n\n const n = this.getName(id);\n let nn = this.objects[id].common ? this.objects[id].common.name : '';\n\n if (nn && typeof nn === 'object') {\n nn = nn[getLanguage()] || nn.en;\n }\n\n if (n !== nn) {\n if (n) {\n this.removeFromNames(id);\n }\n if (nn) {\n this.addToNames(obj);\n }\n }\n }\n }\n\n async stopAllScripts(): Promise {\n const scripts = Object.keys(this.scripts);\n const promises: Promise[] = [];\n for (let i = 0; i < scripts.length; i++) {\n promises.push(this.stopScript(scripts[i]));\n }\n return Promise.all(promises).then(() => {});\n }\n\n convertBackStringifiedValues(\n id: string,\n state: ioBroker.State | null | undefined,\n ): ioBroker.State | null | undefined {\n if (\n state &&\n typeof state.val === 'string' &&\n this.objects[id]?.common &&\n (this.objects[id].common.type === 'array' || this.objects[id].common.type === 'object')\n ) {\n try {\n state.val = JSON.parse(state.val);\n } catch (err: any) {\n if (id.startsWith('javascript.') || id.startsWith('0_userdata.0')) {\n this.log.info(\n `Could not parse value for id \"${id}\" into ${this.objects[id].common.type}: ${err.toString()}`,\n );\n } else {\n this.log.debug(\n `Could not parse value for id \"${id}\" into ${this.objects[id].common.type}: ${err.toString()}`,\n );\n }\n }\n }\n return state;\n }\n\n prepareStateObjectSimple(id: string, state: ioBroker.StateValue, isAck: boolean): ioBroker.State {\n // otherwise, assume that the given state is the value to be set\n const oState: ioBroker.State = { val: state, ack: isAck } as ioBroker.State;\n\n return this.prepareStateObject(id, oState);\n }\n\n prepareStateObject(id: string, state: ioBroker.SettableState | null): ioBroker.State {\n let oState: ioBroker.State;\n\n if (state && typeof state === 'object') {\n oState = state as ioBroker.State;\n } else {\n oState = { val: null } as ioBroker.State;\n }\n\n if (this.config.subscribe) {\n return oState;\n }\n // set other values to have a full state object\n // mirrors logic from statesInRedis\n if (oState.ts === undefined) {\n oState.ts = Date.now();\n }\n\n if (oState.q === undefined) {\n oState.q = 0;\n }\n\n oState.from =\n typeof oState.from === 'string' && oState.from !== '' ? oState.from : `system.adapter.${this.namespace}`;\n\n if (oState.lc === undefined) {\n const formerStateValue = this.interimStateValues[id] || this.states[id];\n if (!formerStateValue) {\n oState.lc = oState.ts;\n } else {\n // isDeepStrictEqual works on objects and primitive values\n const hasChanged = !isDeepStrictEqual(formerStateValue.val, oState.val);\n if (!formerStateValue.lc || hasChanged) {\n oState.lc = oState.ts;\n } else {\n oState.lc = formerStateValue.lc;\n }\n }\n }\n\n return oState;\n }\n\n async getData(): Promise {\n await this.subscribeForeignObjectsAsync('*');\n\n if (!this.config.subscribe) {\n await this.subscribeForeignStatesAsync('*');\n } else {\n await this.subscribeStatesAsync('debug.to');\n await this.subscribeStatesAsync('scriptEnabled.*');\n }\n\n this.log.info('requesting all states');\n\n const statesPromise = this.getForeignStatesAsync('*')\n .then(res => {\n if (!res) {\n this.log.error(`Could not initialize states: no result`);\n this.terminate(EXIT_CODES.START_IMMEDIATELY_AFTER_STOP);\n return;\n }\n if (!this.config.subscribe) {\n this.states = Object.assign(res, this.states);\n this.context.states = this.states;\n\n this.addGetProperty(this.states);\n }\n\n // remember all IDs\n for (const id in res) {\n if (Object.prototype.hasOwnProperty.call(res, id)) {\n this.stateIds.push(id);\n }\n }\n this.statesInitDone = true;\n this.log.info('received all states');\n })\n .catch((err: any) => {\n this.log.error(`Could not initialize states: ${err?.message || 'no result'}`);\n this.terminate(EXIT_CODES.START_IMMEDIATELY_AFTER_STOP);\n });\n\n this.log.info('requesting all objects');\n\n const objectsPromise = this.getObjectListAsync({ include_docs: true })\n .then(res => {\n if (!res?.rows) {\n this.log.error(`Could not initialize objects: no result`);\n this.terminate(EXIT_CODES.START_IMMEDIATELY_AFTER_STOP);\n return;\n }\n this.objects = {};\n this.context.objects = this.objects;\n for (let i = 0; i < res.rows.length; i++) {\n if (!res.rows[i].doc) {\n this.log.debug(`Got empty object for index ${i} (${res.rows[i].id})`);\n continue;\n }\n if (this.objects[res.rows[i].doc._id] === undefined) {\n // If was already there, ignore\n this.objects[res.rows[i].doc._id] = res.rows[i].doc;\n }\n this.objects[res.rows[i].doc._id].type === 'enum' && this._enums.push(res.rows[i].doc._id);\n\n // Collect all names\n this.addToNames(this.objects[res.rows[i].doc._id]);\n }\n this.addGetProperty(this.objects);\n\n const systemConfig = this.objects['system.config'];\n this.password = systemConfig?.native?.javascriptPassword\n ? this.decrypt(systemConfig?.native.javascriptPassword)\n : '';\n\n // set language for debug messages\n if (systemConfig?.common?.language) {\n setLanguage(systemConfig.common.language);\n this.language = systemConfig.common.language;\n this.context.language = this.language as ioBroker.Languages;\n } else if (this.language) {\n setLanguage(this.language);\n this.context.language = this.language;\n }\n\n // try to use system coordinates\n if (this.config.useSystemGPS) {\n if (systemConfig?.common?.latitude || systemConfig?.common?.longitude) {\n this.config.latitude = systemConfig.common.latitude;\n this.config.longitude = systemConfig.common.longitude;\n } else if (this.latitude && this.longitude) {\n this.config.latitude = this.latitude;\n this.config.longitude = this.longitude;\n }\n }\n this.config.latitude = parseFloat(this.config.latitude as unknown as string);\n this.config.longitude = parseFloat(this.config.longitude as unknown as string);\n\n if (isNaN(this.config.latitude)) {\n this.log.warn(`Configured latitude is not a number - check (instance/system) configuration`);\n } else if (this.config.latitude < -90 || this.config.latitude > 90) {\n this.log.warn(\n `Configured latitude \"${this.config.latitude}\" is invalid - check (instance/system) configuration`,\n );\n }\n\n if (isNaN(this.config.longitude)) {\n this.log.warn(`Configured longitude is not a number - check (instance/system) configuration`);\n } else if (this.config.longitude < -180 || this.config.longitude > 180) {\n this.log.warn(\n `Configured longitude \"${this.config.longitude}\" is invalid - check (instance/system) configuration`,\n );\n }\n\n this.config.sunriseEvent ||= 'nightEnd';\n this.config.sunriseOffset ||= 0;\n this.config.sunriseLimitStart ||= '06:00';\n this.config.sunriseLimitEnd ||= '12:00';\n\n this.config.sunsetEvent ||= 'dusk';\n this.config.sunsetOffset ||= 0;\n this.config.sunsetLimitStart ||= '18:00';\n this.config.sunsetLimitEnd ||= '23:00';\n\n this.objectsInitDone = true;\n this.log.info('received all objects');\n })\n .catch((err: any) => {\n this.log.error(`Could not initialize objects: ${err?.message || 'no result'}`);\n this.terminate(EXIT_CODES.START_IMMEDIATELY_AFTER_STOP);\n });\n\n return Promise.all([statesPromise, objectsPromise]).then(() => {});\n }\n\n async createActiveObject(id: string, enabled: boolean): Promise {\n const idActive = `${this.namespace}.scriptEnabled.${id.substring(SCRIPT_CODE_MARKER.length)}`;\n\n if (!this.objects[idActive]) {\n this.objects[idActive] = {\n _id: idActive,\n common: {\n name: `scriptEnabled.${id.substring(SCRIPT_CODE_MARKER.length)}`,\n desc: 'controls script activity',\n type: 'boolean',\n write: true,\n read: true,\n role: 'switch.active',\n },\n native: {\n script: id,\n },\n type: 'state',\n };\n try {\n await this.setForeignObjectAsync(idActive, this.objects[idActive]);\n const intermediateStateValue = this.prepareStateObjectSimple(idActive, enabled, true);\n await this.setForeignStateAsync(idActive, enabled, true);\n if (enabled && !this.config.subscribe) {\n this.interimStateValues[idActive] = intermediateStateValue;\n }\n } catch {\n // ignore\n }\n } else {\n const state = await this.getForeignStateAsync(idActive);\n if (state && state.val !== enabled) {\n const intermediateStateValue = this.prepareStateObjectSimple(idActive, enabled, true);\n await this.setForeignStateAsync(idActive, enabled, true);\n if (enabled && !this.config.subscribe) {\n this.interimStateValues[idActive] = intermediateStateValue;\n }\n }\n }\n }\n\n async createProblemObject(id: string): Promise {\n const idProblem = `${this.namespace}.scriptProblem.${id.substring(SCRIPT_CODE_MARKER.length)}`;\n\n if (!this.objects[idProblem]) {\n this.objects[idProblem] = {\n _id: idProblem,\n common: {\n name: `scriptProblem.${id.substring(SCRIPT_CODE_MARKER.length)}`,\n desc: 'Script has a problem',\n type: 'boolean',\n expert: true,\n write: false,\n read: true,\n role: 'indicator.error',\n },\n native: {\n script: id,\n },\n type: 'state',\n };\n try {\n await this.setForeignObjectAsync(idProblem, this.objects[idProblem]);\n await this.setForeignStateAsync(idProblem, false, true);\n } catch {\n // ignore\n }\n } else {\n const state = await this.getForeignStateAsync(idProblem);\n if (state && state.val !== false) {\n await this.setForeignStateAsync(idProblem, false, true);\n }\n }\n }\n\n addToNames(obj: ioBroker.Object): void {\n const id = obj._id;\n\n if (obj.common?.name) {\n let name = obj.common.name;\n if (name && typeof name === 'object') {\n name = name[getLanguage()] || name.en;\n }\n if (!name || typeof name !== 'string') {\n // TODO, take name in current language\n return;\n }\n\n if (!this.names[name]) {\n this.names[name] = id;\n } else {\n // convert to array\n if (!Array.isArray(this.names[name])) {\n this.names[name] = [this.names[name] as string];\n }\n\n (this.names[name] as string[]).push(id);\n }\n }\n }\n\n removeFromNames(id: string): void {\n const n = this.getName(id);\n\n if (n) {\n if (Array.isArray(this.names[n])) {\n const pos = this.names[n].indexOf(id);\n if (pos > -1) {\n this.names[n].splice(pos, 1);\n\n if (this.names[n].length === 1) {\n this.names[n] = this.names[n][0];\n }\n }\n } else {\n delete this.names[n];\n }\n }\n }\n\n getName(id: string): string | null {\n for (const n in this.names) {\n if (this.names[n] && Array.isArray(this.names[n])) {\n if (this.names[n].includes(id)) {\n return n;\n }\n } else if (this.names[n] === id) {\n return n;\n }\n }\n\n return null;\n }\n\n async installNpm(npmLib: string): Promise {\n return new Promise((resolve, reject) => {\n const path = __dirname;\n\n // Also, set the working directory (cwd) of the process instead of using --prefix\n // because that has ugly bugs on Windows\n const cmd = `npm install ${npmLib} --omit=dev`;\n this.log.info(`Installing ${npmLib} into ${__dirname} - cmd: ${cmd}`);\n\n // System call used for update of js-controller itself,\n // because during the installation the npm packet will be deleted too, but some files must be loaded even during the installation process.\n const child = this.mods.child_process.exec(cmd, {\n windowsHide: true,\n cwd: path,\n });\n\n child.stdout?.on('data', buf => this.log.info(buf.toString('utf8')));\n\n child.stderr?.on('data', buf => this.log.error(buf.toString('utf8')));\n\n child.on('err', err => {\n this.log.error(`Cannot install ${npmLib}: ${err}`);\n reject(new Error(`Cannot install ${npmLib}: ${err}`));\n });\n child.on('error', err => {\n this.log.error(`Cannot install ${npmLib}: ${err}`);\n reject(new Error(`Cannot install ${npmLib}: ${err}`));\n });\n\n child.on('exit', (code: number /* , signal */) => {\n if (code) {\n this.log.error(`Cannot install ${npmLib}: ${code}`);\n reject(new Error(`Cannot install ${npmLib}: ${code}`));\n }\n // command succeeded\n resolve(code);\n });\n });\n }\n\n async installLibraries(): Promise {\n if (typeof this.config?.libraries !== 'string') {\n this.config.libraries = '';\n }\n\n const libraries: string[] = this.config.libraries\n .split(/[,;\\s]+/)\n .map(d => d.trim())\n .filter(d => d);\n\n this.log.debug(`Custom libraries in config: \"${this.config.libraries}\": ${JSON.stringify(libraries)}`);\n\n let installedNodeModules: string[] = [];\n const keepModules: string[] = [];\n\n // js-controller >= 6.x\n if (typeof this.listInstalledNodeModules === 'function') {\n installedNodeModules = await this.listInstalledNodeModules();\n\n this.log.debug(`Found installed libraries: ${JSON.stringify(installedNodeModules)}`);\n }\n\n for (const lib of libraries) {\n let depName = lib;\n let version = 'latest';\n\n if (depName.includes('@') && depName.lastIndexOf('@') > 0) {\n const parts = depName.split('@');\n version = parts.pop() ?? 'latest';\n depName = parts.join('@');\n }\n\n /** The real module name, because the dependency can be a URL too */\n let moduleName = depName;\n\n if (URL.canParse(depName)) {\n moduleName = await requestModuleNameByUrl(depName);\n\n this.log.debug(`Found custom library in config: \"${moduleName}@${version}\" (from ${depName})`);\n } else {\n this.log.debug(`Found custom library in config: \"${moduleName}@${version}\"`);\n }\n\n keepModules.push(moduleName);\n\n // js-controller >= 6.x\n if (typeof this.installNodeModule === 'function') {\n try {\n const result = await this.installNodeModule(depName, { version });\n if (result.success) {\n this.log.debug(`Installed custom library: \"${moduleName}@${version}\"`);\n\n const importedModule: any = await this.importNodeModule(moduleName);\n (this.mods as Record)[moduleName] = importedModule.default ?? importedModule;\n } else {\n this.log.warn(`Cannot install custom npm package \"${moduleName}@${version}\"`);\n }\n } catch (err: unknown) {\n this.log.warn(`Cannot install custom npm package \"${moduleName}@${version}\": ${err as Error}`);\n }\n } else if (!existsSync(`${__dirname}/node_modules/${depName}/package.json`)) {\n // js-controller < 6.x\n this.log.info(`Installing custom library (legacy mode): \"${lib}\"`);\n\n try {\n await this.installNpm(lib);\n this.log.info(`Installed custom npm package (legacy mode): \"${lib}\"`);\n } catch (err: any) {\n this.log.warn(`Cannot install custom npm package \"${lib}\" (legacy mode): ${err.toString()}`);\n }\n }\n }\n\n // js-controller >= 6.x\n if (typeof this.uninstallNodeModule === 'function') {\n for (const installedNodeModule of installedNodeModules) {\n if (!keepModules.includes(installedNodeModule)) {\n try {\n await this.uninstallNodeModule(installedNodeModule);\n\n this.log.info(`Removed custom npm package: \"${installedNodeModule}\"`);\n } catch (err: any) {\n this.log.warn(`Cannot remove custom npm package ${installedNodeModule}: ${err.toString()}`);\n }\n }\n }\n }\n }\n\n createVM(source: string, name: string, wrapAsync: boolean): false | JsScript {\n if (this.context.debugMode && name !== this.context.debugMode) {\n return false;\n }\n\n if (!this.context.debugMode) {\n const logSubscriptionsText =\n \"\\n;\\nlog(`registered ${__engine.__subscriptions} subscription${__engine.__subscriptions === 1 ? '' : 's'},\" +\n \" ${__engine.__schedules} schedule${__engine.__schedules === 1 ? '' : 's'},\" +\n \" ${__engine.__subscriptionsMessage} message${__engine.__subscriptionsMessage === 1 ? '' : 's'},\" +\n \" ${__engine.__subscriptionsLog} log${__engine.__subscriptionsLog === 1 ? '' : 's'}\" +\n \" and ${__engine.__subscriptionsFile} file subscription${__engine.__subscriptionsFile === 1 ? '' : 's'}`);\\n\";\n\n if (wrapAsync) {\n source = `(async () => {\\n${source}\\n${logSubscriptionsText}\\n})();`;\n } else {\n if (source.endsWith('export {};\\n')) {\n // If the source ends with \"export {};\" place the log subscriptions before it\n source = source.slice(0, -11); // remove \"export {};\\n\"\n source = `${source}\\n${logSubscriptionsText}\\nexport {};\\n`;\n } else {\n source = `${source}\\n${logSubscriptionsText}`;\n }\n }\n } else {\n if (wrapAsync) {\n source = `(async () => {debugger;\\n${source}\\n})();`;\n } else {\n source = `debugger;${source}`;\n }\n }\n\n try {\n const options: ScriptOptions = {\n filename: name,\n // displayErrors: true,\n // lineOffset: this.globalScriptLines\n };\n return {\n script: new Script(source, options),\n } as JsScript;\n } catch (err: unknown) {\n this.logError(name, `compile failed at`, err as Error);\n return false;\n }\n }\n\n execute(script: JsScript, name: string, engineType: ScriptType, verbose: boolean, debug: boolean): void {\n script.intervals = [];\n script.timeouts = [];\n script.schedules = [];\n script.wizards = [];\n script.name = name;\n script.engineType = engineType;\n script._id = Math.floor(Math.random() * 0xffffffff);\n script.subscribes = {};\n script.subscribesFile = {};\n script.setStatePerMinuteCounter = 0;\n script.setStatePerMinuteProblemCounter = 0;\n void this.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: false,\n ack: true,\n expire: 1000,\n });\n\n const sandbox = sandBox(script, name, verbose, debug, this.context);\n\n try {\n script.script.runInNewContext(sandbox, {\n filename: name,\n displayErrors: true,\n // lineOffset: this.globalScriptLines\n });\n } catch (err: unknown) {\n void this.setState(`scriptProblem.${name.substring(SCRIPT_CODE_MARKER.length)}`, {\n val: true,\n ack: true,\n c: 'execute',\n });\n this.logError(name, 'Error by run:', err as Error);\n }\n }\n\n unsubscribe(id: string | RegExp | string[]): void {\n if (!id) {\n this.log.warn('unsubscribe: empty name');\n return;\n }\n\n if (Array.isArray(id)) {\n id.forEach(sub => unsubscribe(sub));\n return;\n }\n\n if (id.constructor && id.constructor.name === 'RegExp') {\n // adapter.log.warn('unsubscribe: todo - process regexp');\n return;\n }\n\n if (typeof id !== 'string') {\n this.log.error(`unsubscribe: invalid type of id - ${typeof id}`);\n return;\n }\n const parts = id.split('.');\n const _adapter = `system.adapter.${parts[0]}.${parts[1]}`;\n if (this.objects[_adapter]?.common?.subscribable) {\n const a = `${parts[0]}.${parts[1]}`;\n const alive = `system.adapter.${a}.alive`;\n if (this.adapterSubs[alive]) {\n const pos = this.adapterSubs[alive].indexOf(id);\n if (pos !== -1) {\n this.adapterSubs[alive].splice(pos, 1);\n }\n if (!this.adapterSubs[alive].length) {\n delete this.adapterSubs[alive];\n }\n }\n this.sendTo(a, 'unsubscribe', id);\n }\n }\n\n // Analyze if logs are still required or not\n updateLogSubscriptions(): void {\n let found = false;\n // go through all scripts and check if some script still requires logs\n Object.keys(this.logSubscriptions).forEach(scriptName => {\n if (!this.logSubscriptions?.[scriptName] || !this.logSubscriptions[scriptName].length) {\n delete this.logSubscriptions[scriptName];\n } else {\n found = true;\n }\n });\n\n if (this.requireLog) {\n if (found && !this.logSubscribed) {\n this.logSubscribed = true;\n void this.requireLog(this.logSubscribed);\n this.log.info(`Subscribed to log messages (found logSubscriptions)`);\n } else if (!found && this.logSubscribed) {\n this.logSubscribed = false;\n void this.requireLog(this.logSubscribed);\n this.log.info(`Unsubscribed from log messages (not found logSubscriptions)`);\n }\n }\n }\n\n async stopScript(name: string): Promise {\n if (!this.scripts[name]) {\n return false;\n }\n\n this.log.info(`${name}: Stopping script`);\n\n await this.setState(`scriptEnabled.${name.substring(SCRIPT_CODE_MARKER.length)}`, false, true);\n\n if (this.messageBusHandlers[name]) {\n delete this.messageBusHandlers[name];\n }\n\n if (this.tempDirectories[name]) {\n try {\n this.mods.fs.rmSync(this.tempDirectories[name], { recursive: true });\n\n this.log.debug(`${name}: Removed temp directory: ${this.tempDirectories[name]}`);\n } catch {\n this.log.warn(`${name}: Unable to remove temp directory: ${this.tempDirectories[name]}`);\n }\n\n delete this.tempDirectories[name];\n }\n\n if (this.logSubscriptions[name]) {\n delete this.logSubscriptions[name];\n this.updateLogSubscriptions();\n }\n\n if (this.scripts[name]) {\n // Remove from subscriptions\n this.context.isEnums = false;\n if (this.config.subscribe) {\n // check all subscribed IDs\n Object.keys(this.scripts[name].subscribes).forEach(id => {\n if (this.subscribedPatterns[id]) {\n this.subscribedPatterns[id] -= this.scripts[name].subscribes[id];\n if (this.subscribedPatterns[id] <= 0) {\n this.unsubscribeForeignStates(id);\n delete this.subscribedPatterns[id];\n if (this.states[id]) {\n delete this.states[id];\n }\n }\n }\n });\n }\n\n for (let i = this.subscriptions.length - 1; i >= 0; i--) {\n if (this.subscriptions[i].name === name) {\n const sub = this.subscriptions.splice(i, 1)[0];\n if (sub?.pattern.id) {\n this.unsubscribe(sub.pattern.id);\n }\n } else {\n if (\n (!this.context.isEnums && this.subscriptions[i].pattern.enumName) ||\n this.subscriptions[i].pattern.enumId\n ) {\n this.context.isEnums = true;\n }\n }\n }\n\n // check all subscribed files\n Object.keys(this.scripts[name].subscribesFile).forEach(key => {\n if (this.subscribedPatternsFile[key]) {\n this.subscribedPatternsFile[key] -= this.scripts[name].subscribesFile[key];\n if (this.subscribedPatternsFile[key] <= 0) {\n const [id, file] = key.split('$%$');\n void this.unsubscribeForeignFiles(id, file);\n delete this.subscribedPatternsFile[key];\n }\n }\n });\n for (let i = this.subscriptionsFile.length - 1; i >= 0; i--) {\n if (this.subscriptionsFile[i].name === name) {\n this.subscriptionsFile.splice(i, 1);\n }\n }\n\n for (let i = this.subscriptionsObject.length - 1; i >= 0; i--) {\n if (this.subscriptionsObject[i].name === name) {\n const sub = this.subscriptionsObject.splice(i, 1)[0];\n if (sub) {\n this.unsubscribeForeignObjects(sub.pattern);\n }\n }\n }\n\n // Stop all timeouts\n for (let i = 0; i < this.scripts[name].timeouts.length; i++) {\n clearTimeout(this.scripts[name].timeouts[i]);\n }\n // Stop all intervals\n for (let i = 0; i < this.scripts[name].intervals.length; i++) {\n clearInterval(this.scripts[name].intervals[i]);\n }\n // Stop all delayed states (setStateDelayed timers)\n for (const stateId of Object.keys(this.timers)) {\n if (this.timers[stateId]) {\n for (let i = this.timers[stateId].length - 1; i >= 0; i--) {\n if (this.timers[stateId][i].scriptName === name) {\n clearTimeout(this.timers[stateId][i].t);\n this.timers[stateId].splice(i, 1);\n }\n }\n if (!this.timers[stateId].length) {\n delete this.timers[stateId];\n }\n }\n }\n // Stop all scheduled jobs\n for (let i = 0; i < this.scripts[name].schedules.length; i++) {\n if (this.scripts[name].schedules[i]) {\n const _name = this.scripts[name].schedules[i].name;\n if (!this.mods.nodeSchedule.cancelJob(this.scripts[name].schedules[i])) {\n this.log.error(`${name}: Error by canceling scheduled job \"${_name}\"`);\n }\n }\n }\n\n // Stop all time wizards jobs\n if (this.context.scheduler) {\n for (let i = 0; i < this.scripts[name].wizards.length; i++) {\n if (this.scripts[name].wizards[i]) {\n this.context.scheduler.remove(this.scripts[name].wizards[i]);\n }\n }\n }\n\n // if callback for on stop\n if (typeof this.scripts[name].onStopCb === 'function') {\n this.scripts[name].onStopTimeout =\n parseInt(this.scripts[name].onStopTimeout as unknown as string, 10) || 1000;\n\n await new Promise(resolve => {\n let timeout: NodeJS.Timeout | null = setTimeout(() => {\n if (timeout) {\n timeout = null;\n resolve(true);\n }\n }, this.scripts[name].onStopTimeout);\n\n try {\n this.scripts[name].onStopCb(() => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n resolve(true);\n }\n });\n } catch (err: unknown) {\n this.log.error(`${name}: error in onStop callback: ${err as Error}`);\n }\n });\n }\n\n delete this.scripts[name];\n return true;\n }\n return false;\n }\n\n async prepareScript(obj: ioBroker.ScriptObject): Promise {\n if (obj?.common?.enabled && this.debugState.scriptName === obj._id) {\n const id = obj._id;\n await this.debugStop();\n this.log.info(`${id}: Debugging was stopped, because started in normal mode`);\n return this.prepareScript(obj);\n }\n\n if (\n obj?.common?.source &&\n (obj.common.enabled || this.context.debugMode === obj._id) &&\n obj.common.engine === `system.adapter.${this.namespace}`\n ) {\n const name = obj._id;\n\n if (this.password && obj.native?.protected) {\n obj.common.source = decryptText(this.password, obj.common.source);\n }\n\n const nameId = name.substring(SCRIPT_CODE_MARKER.length);\n if (!nameId.length || nameId.endsWith('.')) {\n this.log.error(`${name}: Script name \"${name}\" is invalid!`);\n return false;\n }\n const idActive = `scriptEnabled.${nameId}`;\n if (!this.config.subscribe) {\n this.interimStateValues[idActive] = this.prepareStateObjectSimple(\n `${this.namespace}.${idActive}`,\n true,\n true,\n );\n }\n await this.setState(idActive, true, true);\n obj.common.engineType ||= '' as 'TypeScript/ts' | 'Blockly' | 'Rules' | 'Javascript/js';\n\n if (\n (obj.common.engineType as ScriptType).toLowerCase().startsWith('javascript') ||\n (obj.common.engineType as ScriptType) === 'Blockly' ||\n (obj.common.engineType as ScriptType) === 'Rules'\n ) {\n // Javascript\n this.log.info(`${name}: start JavaScript (${obj.common.engineType})`);\n\n let sourceFn = name;\n if (webstormDebug) {\n const fn = name.replace(/^script\\.js\\./, '').replace(/\\./g, '/');\n sourceFn = this.mods.path.join(webstormDebug, `${fn}.js`);\n }\n const createdScript = this.createVM(`${this.globalScript}\\n${obj.common.source}`, sourceFn, true);\n if (!createdScript) {\n return false;\n }\n this.scripts[name] = createdScript;\n this.execute(\n this.scripts[name],\n sourceFn,\n obj.common.engineType as ScriptType,\n obj.common.verbose,\n obj.common.debug,\n );\n return true;\n }\n\n if (obj.common.engineType.toLowerCase().startsWith('typescript')) {\n // TypeScript\n this.log.info(`${name}: Compiling TypeScript source`);\n // The source code must be transformed in order to support top level await\n // and to force TypeScript to compile the code as a module\n const transformedSource = transformScriptBeforeCompilation(obj.common.source, false);\n // We need to hash both global declarations that are known until now\n // AND the script source, because changing either can change the compilation output\n const sourceHash = hashSource(tsSourceHashBase + this.globalDeclarations + transformedSource);\n\n let compiled: string;\n // If we already stored the compiled source code and the original source hash,\n // use the hash to check whether we can rely on the compiled source code or\n // if we need to compile it again\n if (\n typeof obj.common.compiled === 'string' &&\n typeof obj.common.sourceHash === 'string' &&\n sourceHash === obj.common.sourceHash\n ) {\n // We can reuse the stored source\n compiled = obj.common.compiled;\n this.log.info(`${name}: source code did not change, using cached compilation result...`);\n } else {\n // We don't have a hashed source code, or the original source changed, compile it\n const filename = scriptIdToTSFilename(name);\n let tsCompiled: CompileResult;\n try {\n tsCompiled = this.tsServer.compile(filename, transformedSource);\n } catch (err: unknown) {\n this.log.error(`${obj._id}: TypeScript compilation failed:\\n${err as Error}`);\n return false;\n }\n\n const errors = tsCompiled.diagnostics.map(diag => `${diag.annotatedSource}\\n`).join('\\n');\n\n if (tsCompiled.success) {\n if (errors.length > 0) {\n this.log.warn(`${name}: TypeScript compilation had errors:\\n${errors}`);\n } else {\n this.log.info(`${name}: TypeScript compilation successful`);\n }\n compiled = tsCompiled.result || '';\n\n // Store the compiled source and the original source hash, so we don't need to do the work again next time\n this.ignoreObjectChange.add(name); // ignore the next change and don't restart scripts\n await this.extendForeignObjectAsync(name, {\n common: {\n sourceHash,\n compiled,\n },\n });\n } else {\n this.log.error(`${name}: TypeScript compilation failed:\\n${errors}`);\n return false;\n }\n }\n const createdScript: JsScript | false = this.createVM(`${this.globalScript}\\n${compiled}`, name, false);\n if (!createdScript) {\n return false;\n }\n this.scripts[name] = createdScript;\n this.execute(\n this.scripts[name],\n name,\n obj.common.engineType as ScriptType,\n obj.common.verbose,\n obj.common.debug,\n );\n return true;\n }\n\n this.log.warn(`${obj._id}: Unknown engine type: ${obj.common.engineType}`);\n return false;\n }\n\n let _name: string;\n if (obj?._id) {\n _name = obj._id;\n const scriptIdName = _name.substring(SCRIPT_CODE_MARKER.length);\n\n if (!scriptIdName.length || scriptIdName.endsWith('.')) {\n this.log.error(`${obj._id}: Script name \"${_name}\" is invalid!`);\n return false;\n }\n await this.setState(`scriptEnabled.${scriptIdName}`, false, true);\n }\n if (!obj) {\n this.log.error('Invalid script');\n }\n return false;\n }\n\n async loadScriptById(id: string): Promise {\n let obj: ioBroker.ScriptObject | null | undefined;\n try {\n obj = (await this.getForeignObjectAsync(id)) as ioBroker.ScriptObject | null | undefined;\n } catch (err: any) {\n this.log.error(`${id}: Invalid script: ${err}`);\n }\n if (!obj) {\n return false;\n }\n return this.loadScript(obj);\n }\n\n async loadScript(nameOrObject: ioBroker.ScriptObject): Promise