iobroker.javascript 9.3.1 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/admin/assets/AiChatPanel-p0KAg6Cs.js +237 -0
- package/admin/assets/AiDatapointProvider-DzFpUKkT.js +2 -0
- package/admin/assets/AiDiffView-BPTLnNx1.js +1 -0
- package/admin/assets/AiInlineProvider-CaHd2G2Q.js +5 -0
- package/admin/assets/AiScriptAnalyzer--BHML2rN.js +9 -0
- package/admin/assets/BlocklyEditor-CAjVMhYT.js +81 -0
- package/admin/assets/ContextWrapper-BVc8wTK_.css +1 -0
- package/admin/assets/ContextWrapper-D9CrnNKs.js +127 -0
- package/admin/assets/Debugger-SjROokFI.js +15 -0
- package/admin/assets/Error-DDfrxAt2.js +1 -0
- package/admin/assets/Import-DpTg1Jow.js +1 -0
- package/admin/assets/RulesEditor-BSRFWpEm.css +1 -0
- package/admin/assets/RulesEditor-D0hgrcBc.js +1 -0
- package/admin/assets/ScriptEditor-BGIuoNei.js +2 -0
- package/admin/assets/ScriptEditorVanillaMonaco-DyMQtoTQ.js +3 -0
- package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DWJotR1B.js +1 -0
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CxICLr5Z.js +1243 -0
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BBAXJaqI.js +9 -0
- package/admin/assets/aiCodeLensProvider-hyAmut0e.js +4 -0
- package/admin/assets/aiPromptBuilder-Bs27qOHT.js +7 -0
- package/admin/assets/applyCodeEdit-D3nb7erO.js +1 -0
- package/admin/assets/blocklyDarkTheme-DEiAX5DT.js +1 -0
- package/admin/assets/cronHoverProvider-pKJkSevo.js +2 -0
- package/admin/assets/dist-uw5orDgd.js +4 -0
- package/admin/assets/{docs-compact-CKNGiYh2.js → docs-compact-D7rpMc7r.js} +2 -2
- package/admin/assets/hostInit-BFg5u9hY.js +1 -0
- package/admin/assets/index-B1gICjdq.js +192 -0
- package/admin/assets/index-BHhhebRG.css +1 -0
- package/admin/assets/inlineChatWidget-ZaisTOLh.js +2 -0
- package/admin/assets/inlineDiffController-hTwHHqcc.js +16 -0
- package/admin/assets/mf-entry-bootstrap-0-d6052b31.js +36 -0
- package/admin/assets/mjs-DWqivHEk.js +90 -0
- package/admin/assets/rolldown-runtime-C0FnF6B9.js +1 -0
- package/admin/assets/stateHoverProvider-C7DawIs-.js +9 -0
- package/admin/assets/virtualExposes-Ed0lGq7k.js +1 -0
- package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BYs71IQF.js +1 -0
- package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-DnnXQRkG.js +1 -0
- package/admin/assets/vite-preload-helper-B7qeedMF.js +1 -0
- package/admin/custom/assets/Components-BrDyDHXh.js +1 -0
- package/admin/custom/assets/Components-DftM8alF.css +1 -0
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-CyYJM2-v.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BdzCssLn.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CGb5Cofy.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BVCIAgbo.js +1243 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BkB0anQX.js +1494 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__leaflet__loadShare__.js-h-rCw3iz.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BotqDuw-.js +9 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-Cb5TR7FB.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__leaflet__prebuild__-DARUoA03.js +1 -0
- package/admin/custom/assets/hostInit-DJx2uXXy.js +1 -0
- package/admin/custom/assets/index-uEKAoVT7.js +1 -0
- package/admin/custom/assets/lib-Yj8cfN0A.js +3 -0
- package/admin/custom/assets/mf-entry-bootstrap-0-77793feb.js +36 -0
- package/admin/custom/assets/rolldown-runtime-BcKkbAw3.js +1 -0
- package/admin/custom/assets/setYear-DJ9FbdkO.js +1 -0
- package/admin/custom/assets/virtualExposes-CxDjLoYu.js +1 -0
- package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BU-ugy_7.js +1 -0
- package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BEfZbrf7.js +2 -0
- package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-CTeZ0Jpm.js +2 -0
- package/admin/custom/assets/vite-preload-helper-B7qeedMF.js +1 -0
- package/admin/custom/customComponents.js +1 -1
- package/admin/jsonConfig.json +1 -1
- package/admin/mf-manifest.json +1 -1
- package/admin/mf-stats.json +1 -0
- package/admin/remoteEntry.js +1 -1
- package/admin/tab.html +12 -17
- package/build/lib/debugger.js +1 -1
- package/build/lib/debugger.js.map +1 -1
- package/build/lib/eventObj.js.map +1 -1
- package/build/lib/inspect.js.map +1 -1
- package/build/lib/javascript.d.ts +18 -19
- package/build/lib/nodeModulesManagement.js +3 -1
- package/build/lib/nodeModulesManagement.js.map +1 -1
- package/build/lib/protectFs.js.map +1 -1
- package/build/lib/sandbox.js +84 -31
- package/build/lib/sandbox.js.map +1 -1
- package/build/lib/scheduler.js.map +1 -1
- package/build/lib/tools.js +1 -1
- package/build/lib/tools.js.map +1 -1
- package/build/lib/typescriptSettings.js +16 -10
- package/build/lib/typescriptSettings.js.map +1 -1
- package/build/lib/typescriptTools.js +2 -2
- package/build/lib/typescriptTools.js.map +1 -1
- package/build/main.js +7 -4
- package/build/main.js.map +1 -1
- package/build/src/lib/aiProviderResolver.js +107 -0
- package/build/src/lib/aiProviderResolver.js.map +1 -0
- package/build/src/lib/anthropicAdapter.js +175 -0
- package/build/src/lib/anthropicAdapter.js.map +1 -0
- package/build/src/lib/consts.js +346 -0
- package/build/src/lib/consts.js.map +1 -0
- package/build/src/lib/convert.js +121 -0
- package/build/src/lib/convert.js.map +1 -0
- package/build/src/lib/crypto.js +32 -0
- package/build/src/lib/crypto.js.map +1 -0
- package/build/src/lib/debug.js +163 -0
- package/build/src/lib/debug.js.map +1 -0
- package/build/src/lib/debugger.js +1135 -0
- package/build/src/lib/debugger.js.map +1 -0
- package/build/src/lib/eventObj.js +194 -0
- package/build/src/lib/eventObj.js.map +1 -0
- package/build/src/lib/inspect.js +728 -0
- package/build/src/lib/inspect.js.map +1 -0
- package/build/src/lib/mirror.js +634 -0
- package/build/src/lib/mirror.js.map +1 -0
- package/build/src/lib/nodeModulesManagement.js +26 -0
- package/build/src/lib/nodeModulesManagement.js.map +1 -0
- package/build/src/lib/patternCompareFunctions.js +293 -0
- package/build/src/lib/patternCompareFunctions.js.map +1 -0
- package/build/src/lib/protectFs.js +554 -0
- package/build/src/lib/protectFs.js.map +1 -0
- package/build/src/lib/sandbox.js +4897 -0
- package/build/src/lib/sandbox.js.map +1 -0
- package/build/src/lib/scheduler.js +555 -0
- package/build/src/lib/scheduler.js.map +1 -0
- package/build/src/lib/tools.js +188 -0
- package/build/src/lib/tools.js.map +1 -0
- package/build/src/lib/typescriptSettings.js +39 -0
- package/build/src/lib/typescriptSettings.js.map +1 -0
- package/build/src/lib/typescriptTools.js +435 -0
- package/build/src/lib/typescriptTools.js.map +1 -0
- package/build/src/lib/utils.js +66 -0
- package/build/src/lib/utils.js.map +1 -0
- package/build/src/lib/words.js +76 -0
- package/build/src/lib/words.js.map +1 -0
- package/build/src/main.js +3414 -0
- package/build/src/main.js.map +1 -0
- package/build/types.d.ts +2 -10
- package/io-package.json +15 -15
- package/package.json +15 -16
- package/admin/assets/AiChatPanel-C3bIw_D5.js +0 -317
- package/admin/assets/AiDatapointProvider-B0i3I5Fm.js +0 -2
- package/admin/assets/AiDiffView-RPozjjHf.js +0 -1
- package/admin/assets/AiInlineProvider-DkgjVSFQ.js +0 -7
- package/admin/assets/Save-CkuNSiWL.js +0 -1
- package/admin/assets/ScriptEditor-8UU88tT5.js +0 -2
- package/admin/assets/ScriptEditorVanillaMonaco-Bn8xJ3LV.js +0 -3
- package/admin/assets/applyCodeEdit-BdRnbz2g.js +0 -1
- package/admin/assets/createSvgIcon-DYs_tNrE.js +0 -8
- package/admin/assets/cronHoverProvider-Bg0Vz-1E.js +0 -2
- package/admin/assets/hostInit-LzITLWDa.js +0 -1
- package/admin/assets/index-45IwpC7_.js +0 -1
- package/admin/assets/index-BCK6q-N6.css +0 -1
- package/admin/assets/index-BTsjunTt.css +0 -1
- package/admin/assets/index-BkyLyaYT.js +0 -8
- package/admin/assets/index-C0ZnUCQf.js +0 -990
- package/admin/assets/index-CO9RA-Wq.js +0 -1267
- package/admin/assets/index-CRGWWpGb.js +0 -1
- package/admin/assets/index-CVZSzCXy.js +0 -1
- package/admin/assets/index-CsyuIWlD.js +0 -16
- package/admin/assets/index-Dsh1HfIY.js +0 -1
- package/admin/assets/index-dN73sbyQ.js +0 -193
- package/admin/assets/index-wHNMOf-c.js +0 -5
- package/admin/assets/inheritsLoose-CIXm_zPk.js +0 -29
- package/admin/assets/inlineChatWidget-Cu6rb4Ar.js +0 -2
- package/admin/assets/inlineDiffController-DBLpPOe2.js +0 -16
- package/admin/assets/iobroker_javascript__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-DkBjPSMw.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare___mf_0_mui_mf_1_material__loadShare__.mjs-CV1_X-Lf.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare__prop_mf_2_types__loadShare__.mjs-BCtSFofY.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare__react__loadShare__.mjs-CTZOFJS2.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare__react__loadShare__.mjs_commonjs-proxy-CE9lvhW8.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs-DeVAS-oa.js +0 -1
- package/admin/assets/iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-RQRRZMX5.js +0 -1
- package/admin/assets/localSharedImportMap-Db5DxDmY.js +0 -1
- package/admin/assets/preload-helper-BDBacUwf.js +0 -1
- package/admin/assets/stateHoverProvider-C82xsI7Q.js +0 -9
- package/admin/assets/useTheme-DuTJsNQ-.js +0 -1
- package/admin/assets/virtualExposes-BPsCufin.js +0 -1
- package/admin/assets/virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-Bw22wl4W.js +0 -8
- package/admin/custom/assets/Components-BOms95_F.css +0 -1
- package/admin/custom/assets/Components-CGiJE5Zh.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-sg07E3QA.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-CwjI4A-J.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-B7D2xOvV.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.mjs-ClsgYnEX.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__.mjs-B551AMx-.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_mui_mf_1_material__loadShare__.mjs-KsT5vKjV.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_mui_mf_1_x_mf_2_date_mf_2_pickers__loadShare__.mjs-DgHZUNxn.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare__leaflet__loadShare__.mjs-BYONkEgA.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs-BW9Qbxx5.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs_commonjs-proxy-2W2BYT2K.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare__react_mf_2_dom__loadShare__.mjs-CL--xmjC.js +0 -1
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-D8zcZsJo.js +0 -1
- package/admin/custom/assets/DefaultPropsProvider-CfKHPa-G.js +0 -1
- package/admin/custom/assets/TextField-CxPfV5Sr.js +0 -139
- package/admin/custom/assets/ThemeProvider-DSTCckLJ.js +0 -29
- package/admin/custom/assets/blue-CagzI6CQ.js +0 -1
- package/admin/custom/assets/createSvgIcon-b2B2NI3g.js +0 -1
- package/admin/custom/assets/createTheme-MsdB8zt7.js +0 -8
- package/admin/custom/assets/defaultTheme-CmVP-QNF.js +0 -1
- package/admin/custom/assets/emotion-cache.browser.esm-BgJfNZJN.js +0 -1
- package/admin/custom/assets/emotion-react.browser.esm-chZAeh_-.js +0 -1
- package/admin/custom/assets/emotion-serialize.esm-BUa21YfQ.js +0 -1
- package/admin/custom/assets/emotion-styled.browser.esm-Yi13plpH.js +0 -1
- package/admin/custom/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-CEPeBbh9.js +0 -1
- package/admin/custom/assets/extends-CF3RwP-h.js +0 -1
- package/admin/custom/assets/hostInit-iUL-wyj1.js +0 -1
- package/admin/custom/assets/index-17vbGv00.js +0 -1
- package/admin/custom/assets/index-B5DqCD_a.js +0 -1
- package/admin/custom/assets/index-Bvwv5H7k.js +0 -1
- package/admin/custom/assets/index-CMsuyEZj.js +0 -964
- package/admin/custom/assets/index-CuAhFQ4L.js +0 -1523
- package/admin/custom/assets/index-CzRngQHl.js +0 -31
- package/admin/custom/assets/index-DLNtxshy.js +0 -1
- package/admin/custom/assets/index-DV76KW3-.js +0 -7
- package/admin/custom/assets/index-D_5kZmfw.js +0 -1
- package/admin/custom/assets/index-DlQbqHom.js +0 -8
- package/admin/custom/assets/index-DpJ18x6R.js +0 -1
- package/admin/custom/assets/index-FTmk0JJx.js +0 -55
- package/admin/custom/assets/index-mkhHeJ3Q.js +0 -1
- package/admin/custom/assets/isSameWeek-DDsSIa_t.js +0 -1
- package/admin/custom/assets/jsx-runtime-BplTyRFk.js +0 -1
- package/admin/custom/assets/leaflet-src-B472P7Y1.js +0 -1
- package/admin/custom/assets/localSharedImportMap-BsMINYMr.js +0 -1
- package/admin/custom/assets/preload-helper-BDBacUwf.js +0 -1
- package/admin/custom/assets/useTheme-BV4xOYIL.js +0 -1
- package/admin/custom/assets/useTheme-ldICnlmf.js +0 -1
- package/admin/custom/assets/virtualExposes-D402kVGY.js +0 -2
- package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID_ConfigCustomJavascriptSet__customComponents_js-BzLNCazi.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protectFs.js","sourceRoot":"","sources":["../../src/lib/protectFs.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BufferEncodingOption,\n CopyOptions,\n Dirent,\n MakeDirectoryOptions,\n Mode,\n ObjectEncodingOptions,\n OpenMode,\n PathLike,\n RmDirOptions,\n RmOptions,\n StatOptions,\n Stats,\n TimeLike,\n CopySyncOptions,\n NoParamCallback,\n PathOrFileDescriptor,\n WriteFileOptions,\n EncodingOption,\n FSWatcher,\n ReadStream,\n StatsListener,\n StatWatcher,\n WatchListener,\n WriteStream,\n BigIntStatsListener,\n WatchOptions,\n} from 'node:fs';\nimport type { Abortable } from 'node:events';\nimport type { FileHandle, FlagAndOpenMode } from 'node:fs/promises';\nimport type { URL } from 'node:url';\nimport type { Stream } from 'node:stream';\n\nimport * as nodeFS from 'node:fs';\nimport { sep, normalize, join, resolve } from 'node:path';\n\nexport default class ProtectFs {\n private readonly log: ioBroker.Logger;\n private readonly ioBrokerDataDir: string;\n public readonly promises: {\n access: (path: PathLike, mode?: number) => Promise<void>;\n cp: (source: string | URL, destination: string | URL, opts?: CopyOptions) => Promise<void>;\n readFile: (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ) => Promise<string>;\n readlink: (path: PathLike, options: BufferEncodingOption) => Promise<Buffer>;\n symlink: (target: PathLike, path: PathLike, type?: string | null) => Promise<void>;\n writeFile: (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ) => Promise<void>;\n unlink: (path: PathLike) => Promise<void>;\n appendFile: (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ) => Promise<void>;\n chmod: (path: PathLike, mode: Mode) => Promise<void>;\n copyFile: (src: PathLike, dest: PathLike, mode?: number) => Promise<void>;\n rename: (oldPath: PathLike, newPath: PathLike) => Promise<void>;\n open: (path: PathLike, flags?: string | number, mode?: Mode) => Promise<FileHandle>;\n truncate: (path: PathLike, len?: number) => Promise<void>;\n stat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n utimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n readdir: (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ) => Promise<Dirent[]>;\n lchmod: (path: PathLike, mode: Mode) => Promise<void>;\n lchown: (path: PathLike, uid: number, gid: number) => Promise<void>;\n link: (existingPath: PathLike, newPath: PathLike) => Promise<void>;\n lstat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n lutimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n mkdir: (path: PathLike, options?: Mode | MakeDirectoryOptions | null) => Promise<string | undefined>;\n mkdtemp: (prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null) => Promise<string>;\n rm: (path: PathLike, options?: RmOptions) => Promise<void>;\n rmdir: (path: PathLike, options?: RmDirOptions) => Promise<void>;\n };\n public readonly constants: Record<string, number>;\n static log: ioBroker.Logger | null = null;\n static staticIoBrokerDataDir: string = '';\n\n constructor(log: ioBroker.Logger, ioBrokerDataDir: string) {\n this.ioBrokerDataDir = ioBrokerDataDir;\n ProtectFs.staticIoBrokerDataDir = ioBrokerDataDir;\n\n this.log = log || {\n silly: (message: string): void => console.log(message),\n debug: (message: string): void => console.debug(message),\n info: (message: string): void => console.info(message),\n warn: (message: string): void => console.warn(message),\n error: (message: string): void => console.error(message),\n level: 'info',\n };\n\n ProtectFs.log = this.log;\n\n this.promises = {\n access: async (path: PathLike, mode?: number): Promise<void> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.access(path, mode);\n },\n cp: async (source: string | URL, destination: string | URL, opts?: CopyOptions): Promise<void> => {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n return nodeFS.promises.cp(source, destination, opts);\n },\n readFile: async (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ): Promise<string> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {\n },\n readlink: async (path: PathLike, options: BufferEncodingOption): Promise<Buffer> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {\n },\n symlink: async (target: PathLike, path: PathLike, type?: string | null): Promise<void> => {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {\n },\n writeFile: async (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n /**\n * If all data is successfully written to the file, and `flush`\n * is `true`, `filehandle.sync()` is used to flush the data.\n *\n * @default false\n */\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ): Promise<void> => {\n ProtectFs.checkProtected(file, true);\n return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {\n },\n unlink: async (path: PathLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {\n },\n appendFile: async (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {\n },\n chmod: async (path: PathLike, mode: Mode): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {\n },\n copyFile: async (src: PathLike, dest: PathLike, mode?: number): Promise<void> => {\n ProtectFs.checkProtected(src, false);\n ProtectFs.checkProtected(dest, false);\n return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {\n },\n rename: async (oldPath: PathLike, newPath: PathLike): Promise<void> => {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {\n },\n open: async (path: PathLike, flags?: string | number, mode?: Mode): Promise<FileHandle> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {\n },\n truncate: async (path: PathLike, len?: number): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {\n },\n stat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n ProtectFs.checkProtected(path, true);\n const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {\n return result as Stats;\n },\n utimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {\n },\n readdir: async (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Promise<Dirent[]> => {\n ProtectFs.checkProtected(path, true);\n // @ts-expect-error fix later\n return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {\n },\n lchmod: async (path: PathLike, mode: Mode): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {\n },\n lchown: async (path: PathLike, uid: number, gid: number): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {\n },\n link: async (existingPath: PathLike, newPath: PathLike): Promise<void> => {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {\n },\n lstat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n ProtectFs.checkProtected(path, true);\n const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {\n return res as Stats;\n },\n lutimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {\n },\n mkdir: async (\n path: PathLike,\n options?: Mode | MakeDirectoryOptions | null,\n ): Promise<string | undefined> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {\n },\n mkdtemp: async (\n prefix: string,\n options?: ObjectEncodingOptions | BufferEncoding | null,\n ): Promise<string> => {\n ProtectFs.checkProtected(prefix, false);\n const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {\n return tmp.toString();\n },\n rm: async (path: PathLike, options?: RmOptions): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {\n },\n rmdir: async (path: PathLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.rmdir.call(this, path); // async function rmdir(path, options) {\n },\n };\n\n // Add missing constants\n this.constants = nodeFS.constants;\n\n // Add missing functions\n for (const m in nodeFS) {\n if (\n typeof (nodeFS as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS, m) &&\n !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this[m] = nodeFS[m];\n }\n }\n\n for (const m in nodeFS.promises) {\n if (\n typeof (nodeFS.promises as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS.promises, m) &&\n !Object.hasOwn(this.promises, m)\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this.promises[m] = nodeFS.promises[m];\n }\n }\n }\n\n static checkProtected(file: PathLike | FileHandle, readOnly: boolean): void {\n if ((file as FileHandle).fd) {\n // FileHandle objects bypass path checks — they were already validated at open() time.\n // This is safe because the sandbox only exposes the wrapped fs where open() is protected.\n return;\n }\n let filePath: string;\n try {\n // Use resolve() instead of normalize() to get an absolute path and eliminate .. traversals.\n // Then try realpath to resolve symlinks — fall back to resolved path if file doesn't exist yet.\n const resolved = resolve((file as PathLike).toString());\n try {\n filePath = nodeFS.realpathSync(resolved);\n } catch {\n filePath = resolved;\n }\n } catch {\n filePath = normalize((file as PathLike).toString());\n }\n\n if (filePath.endsWith(`-data${sep}objects.json`) || filePath.endsWith(`-data${sep}objects.jsonl`)) {\n ProtectFs.log?.error(`May not access ${(file as PathLike).toString()}`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(join(ProtectFs.staticIoBrokerDataDir, 'files'))) {\n ProtectFs.log?.error(`May not write ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(`file://${join(ProtectFs.staticIoBrokerDataDir, 'files')}`)) {\n ProtectFs.log?.error(`May not write ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n // Disallow writing into node_modules directories (see #2127)\n if (!readOnly && `${sep}${filePath}${sep}`.includes(`${sep}node_modules${sep}`)) {\n ProtectFs.log?.error(`May not write into node_modules: ${(file as PathLike).toString()}`);\n throw new Error('Permission denied. Writing into node_modules is not allowed');\n }\n }\n\n access(path: PathLike, mode?: number | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.access(path, mode as number | undefined, callback);\n }\n return nodeFS.access(path, mode as NoParamCallback);\n }\n\n accessSync(path: PathLike, mode?: number): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.accessSync(path, mode);\n }\n\n cp(\n source: string | URL,\n destination: string | URL,\n opts?: CopyOptions | ((err: NodeJS.ErrnoException | null) => void),\n callback?: (err: NodeJS.ErrnoException | null) => void,\n ): void {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n if (callback) {\n return nodeFS.cp(source, destination, opts as CopyOptions, callback);\n }\n if (typeof opts === 'function') {\n return nodeFS.cp(source, destination, opts);\n }\n return nodeFS.cp(source, destination, opts as (err: NodeJS.ErrnoException | null) => void);\n }\n\n cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n return nodeFS.cpSync.call(this, source, destination, opts);\n }\n\n readFile(\n path: PathOrFileDescriptor,\n options:\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null\n | ((err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n ): void {\n if (typeof path !== 'number') {\n ProtectFs.checkProtected(path, true);\n }\n if (typeof callback === 'function') {\n return nodeFS.readFile.call(\n this,\n path,\n options as\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null,\n // @ts-expect-error readFile can accept 3 arguments too\n callback,\n );\n }\n return nodeFS.readFile.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n );\n }\n\n readFileSync(\n path: PathOrFileDescriptor,\n options?:\n | {\n encoding: BufferEncoding;\n flag?: string | undefined;\n }\n | BufferEncoding,\n ): string | Buffer {\n if (typeof path !== 'number') {\n ProtectFs.checkProtected(path, true);\n }\n return nodeFS.readFileSync.call(this, path, options);\n }\n\n readlink(\n path: PathLike,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.readlink.call(this, path, options, callback); //\n }\n return nodeFS.readlink.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n );\n }\n\n readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer {\n ProtectFs.checkProtected(path, true);\n return nodeFS.readlinkSync.call(this, path, options);\n }\n\n symlink(\n target: PathLike,\n path: PathLike,\n type?: 'dir' | 'file' | 'junction' | null | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.symlink.call(this, target, path, type as 'dir' | 'file' | 'junction' | null, callback);\n }\n return nodeFS.symlink.call(this, target, path, type as NoParamCallback);\n }\n\n symlinkSync(target: PathLike, path: PathLike, type?: 'dir' | 'file' | 'junction' | null): void {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n return nodeFS.symlinkSync.call(this, target, path, type);\n }\n\n writeFile(\n file: PathLike | number,\n data: string | NodeJS.ArrayBufferView,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.writeFile.call(this, file, data, options, callback);\n }\n return nodeFS.writeFile.call(this, file, data, options as NoParamCallback);\n }\n\n writeFileSync(file: PathLike | number, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n return nodeFS.writeFileSync.call(this, file, data, options);\n }\n\n unlink(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.unlink.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n unlinkSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.unlinkSync.call(this, path);\n }\n\n appendFile(\n file: PathLike | number,\n data: string | Uint8Array,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.appendFile.call(this, file, data, options, callback);\n }\n return nodeFS.appendFile.call(this, file, data, options as NoParamCallback);\n }\n\n appendFileSync(file: PathLike | number, data: string | Uint8Array, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n return nodeFS.appendFileSync.call(this, file, data, options);\n }\n\n chmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chmodSync(path: PathLike, mode: Mode): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chmodSync.call(this, path, mode);\n }\n\n chown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chownSync(path: PathLike, uid: number, gid: number): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chownSync.call(this, path, uid, gid);\n }\n\n copyFile(src: PathLike, dest: PathLike, mode: number | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(src, true);\n ProtectFs.checkProtected(dest, false);\n // @ts-expect-error should work\n return nodeFS.copyFile.call(this, src, dest, mode, callback);\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n ProtectFs.checkProtected(src, true);\n ProtectFs.checkProtected(dest, false);\n return nodeFS.copyFileSync.call(this, src, dest, mode);\n }\n\n rename(oldPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.rename.call(this, oldPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.renameSync.call(this, oldPath, newPath);\n }\n\n open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.open.call(this, path, callback);\n }\n\n openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number {\n ProtectFs.checkProtected(path, true);\n return nodeFS.openSync.call(this, path, flags, mode);\n }\n\n truncate(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.truncate.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n truncateSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.truncateSync.call(this, path);\n }\n\n exists(path: PathLike, callback: (exists: boolean) => void): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.exists.call(this, path, callback);\n }\n\n existsSync(path: PathLike): boolean {\n ProtectFs.checkProtected(path, true);\n return nodeFS.existsSync.call(this, path);\n }\n\n stat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n statSync(path: PathLike, options?: StatOptions): Stats {\n ProtectFs.checkProtected(path, true);\n return nodeFS.statSync.call(this, path, options);\n }\n\n utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.utimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.utimesSync.call(this, path, atime, mtime);\n }\n\n readdir(\n path: PathLike,\n options:\n | (ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n })\n | ((err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[][]) => void),\n callback?: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[]) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.readdir.call(\n this,\n path,\n options as ObjectEncodingOptions & {\n encoding: 'buffer';\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n callback,\n );\n }\n // @ts-expect-error should work\n return nodeFS.readdir.call(this, path, options as (err: NodeJS.ErrnoException | null, files: Dirent[]) => void);\n }\n\n readdirSync(\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Dirent<Buffer | string>[] {\n ProtectFs.checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdirSync.call(this, path, options);\n }\n\n createReadStream(path: PathLike, options?: BufferEncoding): ReadStream {\n ProtectFs.checkProtected(path, true);\n return nodeFS.createReadStream.call(this, path, options);\n }\n\n createWriteStream(path: PathLike, options?: BufferEncoding): WriteStream {\n ProtectFs.checkProtected(path, false);\n return nodeFS.createWriteStream.call(this, path, options);\n }\n\n lchmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchmodSync(path: PathLike, mode: Mode): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchmodSync.call(this, path, mode);\n }\n\n lchown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchownSync(path: PathLike, uid: number, gid: number): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchownSync.call(this, path, uid, gid);\n }\n\n link(existingPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.link.call(this, existingPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.linkSync.call(this, existingPath, newPath);\n }\n\n lstat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n lstatSync(path: PathLike, options?: StatOptions): Stats {\n ProtectFs.checkProtected(path, true);\n return nodeFS.lstatSync.call(this, path, options);\n }\n\n lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lutimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lutimesSync.call(this, path, atime, mtime);\n }\n\n mkdir(\n path: PathLike,\n options:\n | Mode\n | (MakeDirectoryOptions & {\n recursive: true;\n })\n | null\n | undefined\n | ((err: NodeJS.ErrnoException | null, path?: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, path?: string) => void,\n ): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdir.call(this, path, options as MakeDirectoryOptions & { recursive?: boolean }, callback);\n }\n return nodeFS.mkdir.call(this, path, options as (err: NodeJS.ErrnoException | null, path?: string) => void);\n }\n\n mkdirSync(\n path: PathLike,\n options?: MakeDirectoryOptions & {\n recursive: true;\n },\n ): string | undefined {\n ProtectFs.checkProtected(path, false);\n return nodeFS.mkdirSync.call(this, path, options);\n }\n\n mkdtemp(\n prefix: string,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, folder: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, folder: string) => void,\n ): void {\n ProtectFs.checkProtected(prefix, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdtemp.call(this, prefix, options, callback);\n }\n return nodeFS.mkdtemp.call(\n this,\n prefix,\n options as (err: NodeJS.ErrnoException | null, folder: string) => void,\n );\n }\n\n mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer {\n ProtectFs.checkProtected(prefix, false);\n return nodeFS.mkdtempSync.call(this, prefix, options);\n }\n\n rm(path: PathLike, options?: RmOptions | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n return nodeFS.rm.call(this, path, options as RmOptions, callback);\n }\n // @ts-expect-error should work\n return nodeFS.rm.call(this, path, options as NoParamCallback);\n }\n\n rmSync(path: PathLike, options?: RmOptions): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.rmSync.call(this, path, options);\n }\n\n rmdir(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n return (nodeFS.rmdir as (...args: unknown[]) => void).call(this, path, callback);\n }\n return nodeFS.rmdirSync.call(this, path);\n }\n\n rmdirSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.rmdirSync.call(this, path);\n }\n\n watch(\n filename: PathLike,\n options?:\n | (WatchOptions & {\n encoding: 'buffer';\n })\n | 'buffer'\n | WatchListener<string>,\n listener?: WatchListener<string>,\n ): FSWatcher {\n ProtectFs.checkProtected(filename, true);\n if (typeof listener === 'function') {\n // @ts-expect-error should work\n return nodeFS.watch.call(this, filename, options as WatchOptions & { encoding: 'buffer' }, listener);\n }\n\n return nodeFS.watch.call(this, filename, options as WatchListener<string>);\n }\n\n watchFile(filename: PathLike, listener: StatsListener): StatWatcher {\n ProtectFs.checkProtected(filename, true);\n return nodeFS.watchFile.call(this, filename, listener);\n }\n\n unwatchFile(filename: PathLike, listener: StatsListener | BigIntStatsListener): void {\n ProtectFs.checkProtected(filename, true);\n return nodeFS.unwatchFile.call(this, filename, listener as BigIntStatsListener);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"protectFs.js","sourceRoot":"","sources":["../../src/lib/protectFs.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BufferEncodingOption,\n CopyOptions,\n Dirent,\n MakeDirectoryOptions,\n Mode,\n ObjectEncodingOptions,\n OpenMode,\n PathLike,\n RmDirOptions,\n RmOptions,\n StatOptions,\n Stats,\n TimeLike,\n CopySyncOptions,\n NoParamCallback,\n PathOrFileDescriptor,\n WriteFileOptions,\n EncodingOption,\n FSWatcher,\n ReadStream,\n StatsListener,\n StatWatcher,\n WatchListener,\n WriteStream,\n BigIntStatsListener,\n WatchOptions,\n} from 'node:fs';\nimport type { Abortable } from 'node:events';\nimport type { FileHandle, FlagAndOpenMode } from 'node:fs/promises';\nimport type { URL } from 'node:url';\n\nimport * as nodeFS from 'node:fs';\nimport { sep, normalize, join, resolve } from 'node:path';\n\nexport default class ProtectFs {\n private readonly log: ioBroker.Logger;\n private readonly ioBrokerDataDir: string;\n public readonly promises: {\n access: (path: PathLike, mode?: number) => Promise<void>;\n cp: (source: string | URL, destination: string | URL, opts?: CopyOptions) => Promise<void>;\n readFile: (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ) => Promise<string>;\n readlink: (path: PathLike, options: BufferEncodingOption) => Promise<Buffer>;\n symlink: (target: PathLike, path: PathLike, type?: string | null) => Promise<void>;\n writeFile: (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ) => Promise<void>;\n unlink: (path: PathLike) => Promise<void>;\n appendFile: (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined }) | BufferEncoding | null,\n ) => Promise<void>;\n chmod: (path: PathLike, mode: Mode) => Promise<void>;\n copyFile: (src: PathLike, dest: PathLike, mode?: number) => Promise<void>;\n rename: (oldPath: PathLike, newPath: PathLike) => Promise<void>;\n open: (path: PathLike, flags?: string | number, mode?: Mode) => Promise<FileHandle>;\n truncate: (path: PathLike, len?: number) => Promise<void>;\n stat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n utimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n readdir: (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ) => Promise<Dirent[]>;\n lchmod: (path: PathLike, mode: Mode) => Promise<void>;\n lchown: (path: PathLike, uid: number, gid: number) => Promise<void>;\n link: (existingPath: PathLike, newPath: PathLike) => Promise<void>;\n lstat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n lutimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n mkdir: (path: PathLike, options?: Mode | MakeDirectoryOptions | null) => Promise<string | undefined>;\n mkdtemp: (prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null) => Promise<string>;\n rm: (path: PathLike, options?: RmOptions) => Promise<void>;\n rmdir: (path: PathLike, options?: RmDirOptions) => Promise<void>;\n };\n public readonly constants: Record<string, number>;\n static log: ioBroker.Logger | null = null;\n static staticIoBrokerDataDir: string = '';\n\n constructor(log: ioBroker.Logger, ioBrokerDataDir: string) {\n this.ioBrokerDataDir = ioBrokerDataDir;\n ProtectFs.staticIoBrokerDataDir = ioBrokerDataDir;\n\n this.log = log || {\n silly: (message: string): void => console.log(message),\n debug: (message: string): void => console.debug(message),\n info: (message: string): void => console.info(message),\n warn: (message: string): void => console.warn(message),\n error: (message: string): void => console.error(message),\n level: 'info',\n };\n\n ProtectFs.log = this.log;\n\n this.promises = {\n access: async (path: PathLike, mode?: number): Promise<void> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.access(path, mode);\n },\n cp: async (source: string | URL, destination: string | URL, opts?: CopyOptions): Promise<void> => {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n return nodeFS.promises.cp(source, destination, opts);\n },\n readFile: async (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ): Promise<string> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {\n },\n readlink: async (path: PathLike, options: BufferEncodingOption): Promise<Buffer> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {\n },\n symlink: async (target: PathLike, path: PathLike, type?: string | null): Promise<void> => {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {\n },\n writeFile: async (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n /**\n * If all data is successfully written to the file, and `flush`\n * is `true`, `filehandle.sync()` is used to flush the data.\n *\n * @default false\n */\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ): Promise<void> => {\n ProtectFs.checkProtected(file, true);\n return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {\n },\n unlink: async (path: PathLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {\n },\n appendFile: async (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined }) | BufferEncoding | null,\n ): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {\n },\n chmod: async (path: PathLike, mode: Mode): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {\n },\n copyFile: async (src: PathLike, dest: PathLike, mode?: number): Promise<void> => {\n ProtectFs.checkProtected(src, false);\n ProtectFs.checkProtected(dest, false);\n return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {\n },\n rename: async (oldPath: PathLike, newPath: PathLike): Promise<void> => {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {\n },\n open: async (path: PathLike, flags?: string | number, mode?: Mode): Promise<FileHandle> => {\n ProtectFs.checkProtected(path, true);\n return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {\n },\n truncate: async (path: PathLike, len?: number): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {\n },\n stat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n ProtectFs.checkProtected(path, true);\n const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {\n return result as Stats;\n },\n utimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {\n },\n readdir: async (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Promise<Dirent[]> => {\n ProtectFs.checkProtected(path, true);\n // @ts-expect-error fix later\n return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {\n },\n lchmod: async (path: PathLike, mode: Mode): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {\n },\n lchown: async (path: PathLike, uid: number, gid: number): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {\n },\n link: async (existingPath: PathLike, newPath: PathLike): Promise<void> => {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {\n },\n lstat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n ProtectFs.checkProtected(path, true);\n const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {\n return res as Stats;\n },\n lutimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {\n },\n mkdir: async (\n path: PathLike,\n options?: Mode | MakeDirectoryOptions | null,\n ): Promise<string | undefined> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {\n },\n mkdtemp: async (\n prefix: string,\n options?: ObjectEncodingOptions | BufferEncoding | null,\n ): Promise<string> => {\n ProtectFs.checkProtected(prefix, false);\n const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {\n return tmp.toString();\n },\n rm: async (path: PathLike, options?: RmOptions): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {\n },\n rmdir: async (path: PathLike): Promise<void> => {\n ProtectFs.checkProtected(path, false);\n return nodeFS.promises.rmdir.call(this, path); // async function rmdir(path, options) {\n },\n };\n\n // Add missing constants\n this.constants = nodeFS.constants;\n\n // Add missing functions\n for (const m in nodeFS) {\n if (\n typeof (nodeFS as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS, m) &&\n !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this[m] = nodeFS[m];\n }\n }\n\n for (const m in nodeFS.promises) {\n if (\n typeof (nodeFS.promises as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS.promises, m) &&\n !Object.hasOwn(this.promises, m)\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this.promises[m] = nodeFS.promises[m];\n }\n }\n }\n\n static checkProtected(file: PathLike | FileHandle, readOnly: boolean): void {\n if ((file as FileHandle).fd) {\n // FileHandle objects bypass path checks — they were already validated at open() time.\n // This is safe because the sandbox only exposes the wrapped fs where open() is protected.\n return;\n }\n let filePath: string;\n try {\n // Use resolve() instead of normalize() to get an absolute path and eliminate .. traversals.\n // Then try realpath to resolve symlinks — fall back to resolved path if file doesn't exist yet.\n const resolved = resolve((file as PathLike).toString());\n try {\n filePath = nodeFS.realpathSync(resolved);\n } catch {\n filePath = resolved;\n }\n } catch {\n filePath = normalize((file as PathLike).toString());\n }\n\n if (filePath.endsWith(`-data${sep}objects.json`) || filePath.endsWith(`-data${sep}objects.jsonl`)) {\n ProtectFs.log?.error(`May not access ${(file as PathLike).toString()}`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(join(ProtectFs.staticIoBrokerDataDir, 'files'))) {\n ProtectFs.log?.error(`May not write ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(`file://${join(ProtectFs.staticIoBrokerDataDir, 'files')}`)) {\n ProtectFs.log?.error(`May not write ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n // Disallow writing into node_modules directories (see #2127)\n if (!readOnly && `${sep}${filePath}${sep}`.includes(`${sep}node_modules${sep}`)) {\n ProtectFs.log?.error(`May not write into node_modules: ${(file as PathLike).toString()}`);\n throw new Error('Permission denied. Writing into node_modules is not allowed');\n }\n }\n\n access(path: PathLike, mode?: number | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.access(path, mode as number | undefined, callback);\n }\n return nodeFS.access(path, mode as NoParamCallback);\n }\n\n accessSync(path: PathLike, mode?: number): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.accessSync(path, mode);\n }\n\n cp(\n source: string | URL,\n destination: string | URL,\n opts?: CopyOptions | ((err: NodeJS.ErrnoException | null) => void),\n callback?: (err: NodeJS.ErrnoException | null) => void,\n ): void {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n if (callback) {\n return nodeFS.cp(source, destination, opts as CopyOptions, callback);\n }\n if (typeof opts === 'function') {\n return nodeFS.cp(source, destination, opts);\n }\n return nodeFS.cp(source, destination, opts as (err: NodeJS.ErrnoException | null) => void);\n }\n\n cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void {\n ProtectFs.checkProtected(source, false);\n ProtectFs.checkProtected(destination, false);\n return nodeFS.cpSync.call(this, source, destination, opts);\n }\n\n readFile(\n path: PathOrFileDescriptor,\n options:\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null\n | ((err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n ): void {\n if (typeof path !== 'number') {\n ProtectFs.checkProtected(path, true);\n }\n if (typeof callback === 'function') {\n return nodeFS.readFile.call(\n this,\n path,\n options as\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null,\n // @ts-expect-error readFile can accept 3 arguments too\n callback,\n );\n }\n return nodeFS.readFile.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n );\n }\n\n readFileSync(\n path: PathOrFileDescriptor,\n options?:\n | {\n encoding: BufferEncoding;\n flag?: string | undefined;\n }\n | BufferEncoding,\n ): string | Buffer {\n if (typeof path !== 'number') {\n ProtectFs.checkProtected(path, true);\n }\n return nodeFS.readFileSync.call(this, path, options);\n }\n\n readlink(\n path: PathLike,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.readlink.call(this, path, options, callback); //\n }\n return nodeFS.readlink.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n );\n }\n\n readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer {\n ProtectFs.checkProtected(path, true);\n return nodeFS.readlinkSync.call(this, path, options);\n }\n\n symlink(\n target: PathLike,\n path: PathLike,\n type?: 'dir' | 'file' | 'junction' | null | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.symlink.call(this, target, path, type as 'dir' | 'file' | 'junction' | null, callback);\n }\n return nodeFS.symlink.call(this, target, path, type as NoParamCallback);\n }\n\n symlinkSync(target: PathLike, path: PathLike, type?: 'dir' | 'file' | 'junction' | null): void {\n ProtectFs.checkProtected(target, true);\n ProtectFs.checkProtected(path, false);\n return nodeFS.symlinkSync.call(this, target, path, type);\n }\n\n writeFile(\n file: PathLike | number,\n data: string | NodeJS.ArrayBufferView,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.writeFile.call(this, file, data, options, callback);\n }\n return nodeFS.writeFile.call(this, file, data, options as NoParamCallback);\n }\n\n writeFileSync(file: PathLike | number, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n return nodeFS.writeFileSync.call(this, file, data, options);\n }\n\n unlink(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.unlink.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n unlinkSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.unlinkSync.call(this, path);\n }\n\n appendFile(\n file: PathLike | number,\n data: string | Uint8Array,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.appendFile.call(this, file, data, options, callback);\n }\n return nodeFS.appendFile.call(this, file, data, options as NoParamCallback);\n }\n\n appendFileSync(file: PathLike | number, data: string | Uint8Array, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n ProtectFs.checkProtected(file, false);\n }\n return nodeFS.appendFileSync.call(this, file, data, options);\n }\n\n chmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chmodSync(path: PathLike, mode: Mode): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chmodSync.call(this, path, mode);\n }\n\n chown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chownSync(path: PathLike, uid: number, gid: number): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.chownSync.call(this, path, uid, gid);\n }\n\n copyFile(src: PathLike, dest: PathLike, mode: number | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(src, true);\n ProtectFs.checkProtected(dest, false);\n // @ts-expect-error should work\n return nodeFS.copyFile.call(this, src, dest, mode, callback);\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n ProtectFs.checkProtected(src, true);\n ProtectFs.checkProtected(dest, false);\n return nodeFS.copyFileSync.call(this, src, dest, mode);\n }\n\n rename(oldPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.rename.call(this, oldPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n ProtectFs.checkProtected(oldPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.renameSync.call(this, oldPath, newPath);\n }\n\n open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.open.call(this, path, callback);\n }\n\n openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number {\n ProtectFs.checkProtected(path, true);\n return nodeFS.openSync.call(this, path, flags, mode);\n }\n\n truncate(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.truncate.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n truncateSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.truncateSync.call(this, path);\n }\n\n exists(path: PathLike, callback: (exists: boolean) => void): void {\n ProtectFs.checkProtected(path, true);\n return nodeFS.exists.call(this, path, callback);\n }\n\n existsSync(path: PathLike): boolean {\n ProtectFs.checkProtected(path, true);\n return nodeFS.existsSync.call(this, path);\n }\n\n stat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n statSync(path: PathLike, options?: StatOptions): Stats {\n ProtectFs.checkProtected(path, true);\n return nodeFS.statSync.call(this, path, options);\n }\n\n utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.utimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.utimesSync.call(this, path, atime, mtime);\n }\n\n readdir(\n path: PathLike,\n options:\n | (ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n })\n | ((err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[][]) => void),\n callback?: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[]) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.readdir.call(\n this,\n path,\n options as ObjectEncodingOptions & {\n encoding: 'buffer';\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n callback,\n );\n }\n // @ts-expect-error should work\n return nodeFS.readdir.call(this, path, options as (err: NodeJS.ErrnoException | null, files: Dirent[]) => void);\n }\n\n readdirSync(\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Dirent<Buffer | string>[] {\n ProtectFs.checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdirSync.call(this, path, options);\n }\n\n createReadStream(path: PathLike, options?: BufferEncoding): ReadStream {\n ProtectFs.checkProtected(path, true);\n return nodeFS.createReadStream.call(this, path, options);\n }\n\n createWriteStream(path: PathLike, options?: BufferEncoding): WriteStream {\n ProtectFs.checkProtected(path, false);\n return nodeFS.createWriteStream.call(this, path, options);\n }\n\n lchmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchmodSync(path: PathLike, mode: Mode): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchmodSync.call(this, path, mode);\n }\n\n lchown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchownSync(path: PathLike, uid: number, gid: number): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lchownSync.call(this, path, uid, gid);\n }\n\n link(existingPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.link.call(this, existingPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n ProtectFs.checkProtected(existingPath, false);\n ProtectFs.checkProtected(newPath, false);\n return nodeFS.linkSync.call(this, existingPath, newPath);\n }\n\n lstat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n ProtectFs.checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n lstatSync(path: PathLike, options?: StatOptions): Stats {\n ProtectFs.checkProtected(path, true);\n return nodeFS.lstatSync.call(this, path, options);\n }\n\n lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lutimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.lutimesSync.call(this, path, atime, mtime);\n }\n\n mkdir(\n path: PathLike,\n options:\n | Mode\n | (MakeDirectoryOptions & {\n recursive: true;\n })\n | null\n | undefined\n | ((err: NodeJS.ErrnoException | null, path?: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, path?: string) => void,\n ): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdir.call(this, path, options as MakeDirectoryOptions & { recursive?: boolean }, callback);\n }\n return nodeFS.mkdir.call(this, path, options as (err: NodeJS.ErrnoException | null, path?: string) => void);\n }\n\n mkdirSync(\n path: PathLike,\n options?: MakeDirectoryOptions & {\n recursive: true;\n },\n ): string | undefined {\n ProtectFs.checkProtected(path, false);\n return nodeFS.mkdirSync.call(this, path, options);\n }\n\n mkdtemp(\n prefix: string,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, folder: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, folder: string) => void,\n ): void {\n ProtectFs.checkProtected(prefix, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdtemp.call(this, prefix, options, callback);\n }\n return nodeFS.mkdtemp.call(\n this,\n prefix,\n options as (err: NodeJS.ErrnoException | null, folder: string) => void,\n );\n }\n\n mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer {\n ProtectFs.checkProtected(prefix, false);\n return nodeFS.mkdtempSync.call(this, prefix, options);\n }\n\n rm(path: PathLike, options?: RmOptions | NoParamCallback, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n return nodeFS.rm.call(this, path, options as RmOptions, callback);\n }\n // @ts-expect-error should work\n return nodeFS.rm.call(this, path, options as NoParamCallback);\n }\n\n rmSync(path: PathLike, options?: RmOptions): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.rmSync.call(this, path, options);\n }\n\n rmdir(path: PathLike, callback?: NoParamCallback): void {\n ProtectFs.checkProtected(path, false);\n if (typeof callback === 'function') {\n return (nodeFS.rmdir as (...args: unknown[]) => void).call(this, path, callback);\n }\n return nodeFS.rmdirSync.call(this, path);\n }\n\n rmdirSync(path: PathLike): void {\n ProtectFs.checkProtected(path, false);\n return nodeFS.rmdirSync.call(this, path);\n }\n\n watch(\n filename: PathLike,\n options?:\n | (WatchOptions & {\n encoding: 'buffer';\n })\n | 'buffer'\n | WatchListener<string>,\n listener?: WatchListener<string>,\n ): FSWatcher {\n ProtectFs.checkProtected(filename, true);\n if (typeof listener === 'function') {\n // @ts-expect-error should work\n return nodeFS.watch.call(this, filename, options as WatchOptions & { encoding: 'buffer' }, listener);\n }\n\n return nodeFS.watch.call(this, filename, options as WatchListener<string>);\n }\n\n watchFile(filename: PathLike, listener: StatsListener): StatWatcher {\n ProtectFs.checkProtected(filename, true);\n return nodeFS.watchFile.call(this, filename, listener);\n }\n\n unwatchFile(filename: PathLike, listener: StatsListener | BigIntStatsListener): void {\n ProtectFs.checkProtected(filename, true);\n return nodeFS.unwatchFile.call(this, filename, listener as BigIntStatsListener);\n }\n}\n"]}
|
package/build/lib/sandbox.js
CHANGED
|
@@ -33,18 +33,19 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FORBIDDEN_CHARS = void 0;
|
|
37
|
+
exports.isValidPattern = isValidPattern;
|
|
38
|
+
exports.pattern2RegEx = pattern2RegEx;
|
|
36
39
|
exports.isExactId = isExactId;
|
|
37
40
|
exports.removeFromDispatchIndex = removeFromDispatchIndex;
|
|
38
41
|
exports.sandBox = sandBox;
|
|
39
42
|
const jsonataMod = __importStar(require("jsonata"));
|
|
40
|
-
const adapter_core_1 = require("@iobroker/adapter-core");
|
|
41
43
|
const tools_1 = require("./tools");
|
|
42
44
|
const constsMod = __importStar(require("./consts"));
|
|
43
45
|
const wordsMod = __importStar(require("./words"));
|
|
44
46
|
const eventObjMod = __importStar(require("./eventObj"));
|
|
45
47
|
const patternCompareFunctions_1 = require("./patternCompareFunctions");
|
|
46
48
|
const SCRIPT_CODE_MARKER = 'script.js.';
|
|
47
|
-
const pattern2RegEx = adapter_core_1.commonTools.pattern2RegEx;
|
|
48
49
|
// Pre-compiled RegExp constants for formatTimeDiff – avoids recompiling on every call
|
|
49
50
|
const FTD_TEST_D = /(?<!\\)[DTД]/;
|
|
50
51
|
const FTD_REPL_DD = /(?<!\\)(?:DD|TT|ДД)/g;
|
|
@@ -70,6 +71,35 @@ const _SELECTOR_REGEXP_CACHE_MAX = 1000;
|
|
|
70
71
|
const _selectorRegExpCache = new Map();
|
|
71
72
|
/** Monotonically increasing handler-ID counter – avoids Date.now()+random collisions */
|
|
72
73
|
let _handlerIdCounter = 1;
|
|
74
|
+
/** All characters that may not appear in an object ID. */
|
|
75
|
+
exports.FORBIDDEN_CHARS = /[^._\-/ :!#$%&()+=@^{}|~\p{Ll}\p{Lu}\p{Nd}]+/gu;
|
|
76
|
+
/**
|
|
77
|
+
* Checks if a pattern is valid
|
|
78
|
+
*
|
|
79
|
+
* @param pattern The pattern to check for validity
|
|
80
|
+
*/
|
|
81
|
+
function isValidPattern(pattern) {
|
|
82
|
+
pattern = pattern.replace(/\*/g, '');
|
|
83
|
+
return !exports.FORBIDDEN_CHARS.test(pattern);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Converts ioB pattern into regex.
|
|
87
|
+
*
|
|
88
|
+
* This funtion was copied from js-controller, as for the tests it is required, that function must be defined here.
|
|
89
|
+
* Else the adapter-core tries to find js-controller and it is not installed.
|
|
90
|
+
*
|
|
91
|
+
* @param pattern - Regex string to use it in new RegExp(pattern)
|
|
92
|
+
*/
|
|
93
|
+
function pattern2RegEx(pattern) {
|
|
94
|
+
pattern = (pattern || '').toString();
|
|
95
|
+
if (!isValidPattern(pattern)) {
|
|
96
|
+
throw new Error(`The pattern "${pattern}" is not a valid ID pattern`);
|
|
97
|
+
}
|
|
98
|
+
const startsWithWildcard = pattern[0] === '*';
|
|
99
|
+
const endsWithWildcard = pattern[pattern.length - 1] === '*';
|
|
100
|
+
pattern = pattern.replace(/[-/\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*');
|
|
101
|
+
return (startsWithWildcard ? '' : '^') + pattern + (endsWithWildcard ? '' : '$');
|
|
102
|
+
}
|
|
73
103
|
/** Returns true when patId is a plain exact state-ID (no wildcards, no RegExp notation). */
|
|
74
104
|
function isExactId(patId) {
|
|
75
105
|
return (!!patId && typeof patId === 'string' && !patId.includes('*') && !patId.includes('?') && !patId.startsWith('/'));
|
|
@@ -435,7 +465,7 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
435
465
|
actualCommonType = getCommonTypeOf(stateNotNull.val);
|
|
436
466
|
}
|
|
437
467
|
}
|
|
438
|
-
else if (stateNotNull !==
|
|
468
|
+
else if (stateNotNull !== undefined) {
|
|
439
469
|
actualCommonType = getCommonTypeOf(stateNotNull);
|
|
440
470
|
}
|
|
441
471
|
// If this is not the expected one, issue a warning
|
|
@@ -489,9 +519,7 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
489
519
|
}
|
|
490
520
|
let stateAsObject;
|
|
491
521
|
// modify state here, to make it available in callback
|
|
492
|
-
if (stateNotNull === null ||
|
|
493
|
-
typeof stateNotNull !== 'object' ||
|
|
494
|
-
stateNotNull.val === undefined) {
|
|
522
|
+
if (stateNotNull === null || typeof stateNotNull !== 'object' || stateNotNull.val === undefined) {
|
|
495
523
|
stateAsObject = context.prepareStateObject(id, {
|
|
496
524
|
val: stateNotNull,
|
|
497
525
|
ack: isAck === true || isAck === 'true',
|
|
@@ -1387,8 +1415,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1387
1415
|
// create temp directory
|
|
1388
1416
|
tempDirPath = fs.mkdtempSync(path.join(os.tmpdir(), `${sandbox.scriptName.substring(SCRIPT_CODE_MARKER.length)}-`));
|
|
1389
1417
|
context.tempDirectories[sandbox.scriptName] = tempDirPath;
|
|
1390
|
-
sandbox.verbose
|
|
1418
|
+
if (sandbox.verbose) {
|
|
1391
1419
|
sandbox.log(`createTempFile(fileName=${fileName}, tempDirPath=${tempDirPath}) created temp directory in ${os.tmpdir()}`, 'info');
|
|
1420
|
+
}
|
|
1392
1421
|
}
|
|
1393
1422
|
const filePath = path.join(tempDirPath, fileName);
|
|
1394
1423
|
// is sub dir?
|
|
@@ -1401,8 +1430,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1401
1430
|
return undefined;
|
|
1402
1431
|
}
|
|
1403
1432
|
fs.writeFileSync(filePath, data);
|
|
1404
|
-
sandbox.verbose
|
|
1433
|
+
if (sandbox.verbose) {
|
|
1405
1434
|
sandbox.log(`createTempFile(fileName=${fileName}, fileDir=${fileDir}, filePath=${filePath})`, 'info');
|
|
1435
|
+
}
|
|
1406
1436
|
return filePath;
|
|
1407
1437
|
},
|
|
1408
1438
|
subscribe: function (pattern,
|
|
@@ -1663,8 +1693,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1663
1693
|
}
|
|
1664
1694
|
}
|
|
1665
1695
|
}
|
|
1666
|
-
sandbox.verbose
|
|
1696
|
+
if (sandbox.verbose) {
|
|
1667
1697
|
sandbox.log(`onEnumMembers(id=${enumId}, members=${JSON.stringify(Object.keys(subscriptions))})`, 'info');
|
|
1698
|
+
}
|
|
1668
1699
|
};
|
|
1669
1700
|
init();
|
|
1670
1701
|
sandbox.subscribeObject(enumId, obj => obj && init());
|
|
@@ -1694,8 +1725,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1694
1725
|
return fileNamePattern.map(filePattern => sandbox.onFile(id, filePattern, withFileOrCallback, callback));
|
|
1695
1726
|
}
|
|
1696
1727
|
sandbox.__engine.__subscriptionsFile += 1;
|
|
1697
|
-
sandbox.verbose
|
|
1728
|
+
if (sandbox.verbose) {
|
|
1698
1729
|
sandbox.log(`onFile(id=${id}, fileNamePattern=${fileNamePattern}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`, 'info');
|
|
1730
|
+
}
|
|
1699
1731
|
if (sandbox.__engine.__subscriptionsFile %
|
|
1700
1732
|
adapter.config.maxTriggersPerScript ===
|
|
1701
1733
|
0) {
|
|
@@ -1717,8 +1749,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1717
1749
|
fileRegEx,
|
|
1718
1750
|
callback: (id, fileName, size, withFile) => {
|
|
1719
1751
|
try {
|
|
1720
|
-
sandbox.verbose
|
|
1752
|
+
if (sandbox.verbose) {
|
|
1721
1753
|
sandbox.log(`onFile changed(id=${id}, fileName=${fileName}, size=${size})`, 'info');
|
|
1754
|
+
}
|
|
1722
1755
|
if (withFile && (size || 0) > 0) {
|
|
1723
1756
|
adapter
|
|
1724
1757
|
.readFileAsync(id, fileName)
|
|
@@ -1751,8 +1784,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1751
1784
|
sandbox.log('offFile: your js-controller does not support yet file unsubscribes. Please update to js-controller@4.1.x or newer', 'warn');
|
|
1752
1785
|
return false;
|
|
1753
1786
|
}
|
|
1754
|
-
sandbox.verbose
|
|
1787
|
+
if (sandbox.verbose) {
|
|
1755
1788
|
sandbox.log(`offFile(idOrObject=${JSON.stringify(idOrObject)}, fileNamePattern=${JSON.stringify(fileNamePattern)}) - fileSubscriptions=${sandbox.__engine.__subscriptionsFile}`, 'info');
|
|
1789
|
+
}
|
|
1756
1790
|
if (idOrObject && typeof idOrObject === 'object') {
|
|
1757
1791
|
if (Array.isArray(idOrObject)) {
|
|
1758
1792
|
const result = [];
|
|
@@ -1764,8 +1798,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1764
1798
|
for (let i = context.subscriptionsFile.length - 1; i >= 0; i--) {
|
|
1765
1799
|
if (context.subscriptionsFile[i] === idOrObject) {
|
|
1766
1800
|
unsubscribeFile(script, context.subscriptionsFile[i].id, context.subscriptionsFile[i].fileNamePattern);
|
|
1767
|
-
sandbox.verbose
|
|
1801
|
+
if (sandbox.verbose) {
|
|
1768
1802
|
sandbox.log(`offFile(type=object, fileNamePattern=${JSON.stringify(fileNamePattern)}, removing id=${context.subscriptionsFile[i].id})`, 'info');
|
|
1803
|
+
}
|
|
1769
1804
|
context.subscriptionsFile.splice(i, 1);
|
|
1770
1805
|
sandbox.__engine.__subscriptionsFile--;
|
|
1771
1806
|
return true;
|
|
@@ -1786,8 +1821,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1786
1821
|
context.subscriptionsFile[i].fileNamePattern === fileNamePattern) {
|
|
1787
1822
|
deleted++;
|
|
1788
1823
|
unsubscribeFile(script, context.subscriptionsFile[i].id, context.subscriptionsFile[i].fileNamePattern);
|
|
1789
|
-
sandbox.verbose
|
|
1824
|
+
if (sandbox.verbose) {
|
|
1790
1825
|
sandbox.log(`offFile(type=string, fileNamePattern=${fileNamePattern}, removing id=${context.subscriptionsFile[i].id})`, 'info');
|
|
1826
|
+
}
|
|
1791
1827
|
context.subscriptionsFile.splice(i, 1);
|
|
1792
1828
|
sandbox.__engine.__subscriptionsFile--;
|
|
1793
1829
|
}
|
|
@@ -1820,8 +1856,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1820
1856
|
}
|
|
1821
1857
|
if ((typeof pattern === 'string' && pattern[0] === '{') ||
|
|
1822
1858
|
(typeof pattern === 'object' && pattern.period)) {
|
|
1823
|
-
sandbox.verbose
|
|
1859
|
+
if (sandbox.verbose) {
|
|
1824
1860
|
sandbox.log(`schedule(wizard=${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern})`, 'info');
|
|
1861
|
+
}
|
|
1825
1862
|
if (!context.scheduler) {
|
|
1826
1863
|
sandbox.log(`Cannot schedule "${typeof pattern === 'object' ? JSON.stringify(pattern) : pattern}" because scheduler is not available`, 'error');
|
|
1827
1864
|
return null;
|
|
@@ -1893,8 +1930,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1893
1930
|
if (sandbox.__engine.__schedules % adapterConfig.maxTriggersPerScript === 0) {
|
|
1894
1931
|
sandbox.log(`More than ${sandbox.__engine.__schedules} schedules registered. Check your script!`, 'warn');
|
|
1895
1932
|
}
|
|
1896
|
-
sandbox.verbose
|
|
1933
|
+
if (sandbox.verbose) {
|
|
1897
1934
|
sandbox.log(`schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is tomorrow, waiting until ${date.toISOString()}`, 'info');
|
|
1935
|
+
}
|
|
1898
1936
|
// Calculate new schedule in the next day
|
|
1899
1937
|
sandbox.setTimeout(() => {
|
|
1900
1938
|
if (sandbox.__engine.__schedules > 0) {
|
|
@@ -1923,8 +1961,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
1923
1961
|
sandbox.schedule(astroPattern, callback);
|
|
1924
1962
|
}, 2000);
|
|
1925
1963
|
}, ts.getTime() - Date.now());
|
|
1926
|
-
sandbox.verbose
|
|
1964
|
+
if (sandbox.verbose) {
|
|
1927
1965
|
sandbox.log(`schedule(astro=${astroPattern.astro}, offset=${astroPattern.shift}) is today, waiting until ${ts.toISOString()}`, 'info');
|
|
1966
|
+
}
|
|
1928
1967
|
}
|
|
1929
1968
|
else {
|
|
1930
1969
|
// fix a problem with sunday and 7
|
|
@@ -2003,8 +2042,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2003
2042
|
if (isValid) {
|
|
2004
2043
|
const cronExp = `${s ?? '0'} ${m ?? '0'} ${h ?? '0'} * * *`;
|
|
2005
2044
|
if (cronExp !== currentExp) {
|
|
2006
|
-
sandbox.verbose
|
|
2045
|
+
if (sandbox.verbose) {
|
|
2007
2046
|
sandbox.log(`scheduleById(id=${id}): Init with expression ${cronExp} from ${time}`, 'info');
|
|
2047
|
+
}
|
|
2008
2048
|
currentExp = cronExp;
|
|
2009
2049
|
if (scheduleId) {
|
|
2010
2050
|
sandbox.clearSchedule(scheduleId);
|
|
@@ -2044,8 +2084,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2044
2084
|
}
|
|
2045
2085
|
sandbox.on(triggerDef, obj => {
|
|
2046
2086
|
if (obj?.state?.val) {
|
|
2047
|
-
sandbox.verbose
|
|
2087
|
+
if (sandbox.verbose) {
|
|
2048
2088
|
sandbox.log(`scheduleById(id=${id}): Update with value ${obj.state.val}`, 'info');
|
|
2089
|
+
}
|
|
2049
2090
|
init(obj.state.val.toString());
|
|
2050
2091
|
}
|
|
2051
2092
|
});
|
|
@@ -2195,12 +2236,14 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2195
2236
|
if (!objects[id] && objects[`${adapter.namespace}.${id}`]) {
|
|
2196
2237
|
id = `${adapter.namespace}.${id}`;
|
|
2197
2238
|
}
|
|
2198
|
-
sandbox.verbose
|
|
2239
|
+
if (sandbox.verbose) {
|
|
2199
2240
|
sandbox.log(`setStateDelayed(id=${id}, state=${JSON.stringify(state)}, isAck=${isAck}, delay=${delay}, clearRunning=${clearRunning})`, 'info');
|
|
2241
|
+
}
|
|
2200
2242
|
if (clearRunning) {
|
|
2201
2243
|
if (timers[id]) {
|
|
2202
|
-
sandbox.verbose
|
|
2244
|
+
if (sandbox.verbose) {
|
|
2203
2245
|
sandbox.log(`setStateDelayed: clear ${timers[id].length} running timers`, 'info');
|
|
2246
|
+
}
|
|
2204
2247
|
// collect affected scriptNames before deleting
|
|
2205
2248
|
const affectedScripts = new Set(timers[id].map(e => e.scriptName));
|
|
2206
2249
|
for (let i = 0; i < timers[id].length; i++) {
|
|
@@ -2447,16 +2490,18 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2447
2490
|
}
|
|
2448
2491
|
else {
|
|
2449
2492
|
if (states[id]) {
|
|
2450
|
-
sandbox.verbose
|
|
2493
|
+
if (sandbox.verbose) {
|
|
2451
2494
|
sandbox.log(`getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[id])}`, 'info');
|
|
2495
|
+
}
|
|
2452
2496
|
if (context.interimStateValues[id] !== undefined) {
|
|
2453
2497
|
return context.convertBackStringifiedValues(id, context.interimStateValues[id]);
|
|
2454
2498
|
}
|
|
2455
2499
|
return context.convertBackStringifiedValues(id, states[id]);
|
|
2456
2500
|
}
|
|
2457
2501
|
else if (states[`${adapter.namespace}.${id}`]) {
|
|
2458
|
-
sandbox.verbose
|
|
2502
|
+
if (sandbox.verbose) {
|
|
2459
2503
|
sandbox.log(`getState(id=${id}, timerId=${JSON.stringify(timers[id])}) => ${JSON.stringify(states[`${adapter.namespace}.${id}`])}`, 'info');
|
|
2504
|
+
}
|
|
2460
2505
|
if (context.interimStateValues[`${adapter.namespace}.${id}`] !== undefined) {
|
|
2461
2506
|
return context.convertBackStringifiedValues(id, context.interimStateValues[`${adapter.namespace}.${id}`]);
|
|
2462
2507
|
}
|
|
@@ -2514,8 +2559,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2514
2559
|
}
|
|
2515
2560
|
},
|
|
2516
2561
|
getIdByName: function (name, alwaysArray) {
|
|
2517
|
-
sandbox.verbose
|
|
2562
|
+
if (sandbox.verbose) {
|
|
2518
2563
|
sandbox.log(`getIdByName(name=${name}, alwaysArray=${alwaysArray}) => ${JSON.stringify(context.names[name])}`, 'info');
|
|
2564
|
+
}
|
|
2519
2565
|
if (Object.prototype.hasOwnProperty.call(context.names, name)) {
|
|
2520
2566
|
if (alwaysArray) {
|
|
2521
2567
|
return !Array.isArray(context.names[name]) ? [context.names[name]] : context.names[name];
|
|
@@ -2558,15 +2604,17 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2558
2604
|
sandbox.log(`Object "${id}" can't be copied: ${JSON.stringify(err)}`, 'error');
|
|
2559
2605
|
return cb(null, null);
|
|
2560
2606
|
}
|
|
2561
|
-
sandbox.verbose
|
|
2607
|
+
if (sandbox.verbose) {
|
|
2562
2608
|
sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');
|
|
2609
|
+
}
|
|
2563
2610
|
cb(err, result);
|
|
2564
2611
|
});
|
|
2565
2612
|
}
|
|
2566
2613
|
else {
|
|
2567
2614
|
if (!objects[id]) {
|
|
2568
|
-
sandbox.verbose
|
|
2615
|
+
if (sandbox.verbose) {
|
|
2569
2616
|
sandbox.log(`getObject(id=${id}, enumName=${enumName}) => does not exist`, 'info');
|
|
2617
|
+
}
|
|
2570
2618
|
sandbox.log(`Object "${id}" does not exist`, 'warn');
|
|
2571
2619
|
return null;
|
|
2572
2620
|
}
|
|
@@ -2584,8 +2632,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2584
2632
|
}
|
|
2585
2633
|
}
|
|
2586
2634
|
}
|
|
2587
|
-
sandbox.verbose
|
|
2635
|
+
if (sandbox.verbose) {
|
|
2588
2636
|
sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(obj)}`, 'info');
|
|
2637
|
+
}
|
|
2589
2638
|
return obj;
|
|
2590
2639
|
}
|
|
2591
2640
|
let result;
|
|
@@ -2601,8 +2650,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
2601
2650
|
sandbox.log(`Object "${id}" can't be copied: ${JSON.stringify(err)}`, 'error');
|
|
2602
2651
|
return null;
|
|
2603
2652
|
}
|
|
2604
|
-
sandbox.verbose
|
|
2653
|
+
if (sandbox.verbose) {
|
|
2605
2654
|
sandbox.log(`getObject(id=${id}, enumName=${enumName}) => ${JSON.stringify(result)}`, 'info');
|
|
2655
|
+
}
|
|
2606
2656
|
return result;
|
|
2607
2657
|
}
|
|
2608
2658
|
},
|
|
@@ -3378,8 +3428,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
3378
3428
|
}
|
|
3379
3429
|
}
|
|
3380
3430
|
else {
|
|
3381
|
-
sandbox.verbose
|
|
3431
|
+
if (sandbox.verbose) {
|
|
3382
3432
|
sandbox.log(`sendToHost(adapter=${host}, cmd=${cmd}, msg=${JSON.stringify(msg)})`, 'info');
|
|
3433
|
+
}
|
|
3383
3434
|
adapter.sendToHost(host, cmd, msg, callback);
|
|
3384
3435
|
}
|
|
3385
3436
|
},
|
|
@@ -3846,8 +3897,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
3846
3897
|
text = text
|
|
3847
3898
|
.replace(FTD_REPL_SS, seconds.toString().padStart(2, '0'))
|
|
3848
3899
|
.replace(FTD_REPL_S, seconds.toString());
|
|
3849
|
-
sandbox.verbose
|
|
3900
|
+
if (sandbox.verbose) {
|
|
3850
3901
|
sandbox.log(`formatTimeDiff(format=${format}, text=${text}, seconds=${seconds})`, 'debug');
|
|
3902
|
+
}
|
|
3851
3903
|
}
|
|
3852
3904
|
for (const [pattern, replacement] of FTD_UNESCAPE) {
|
|
3853
3905
|
text = text.replace(pattern, replacement);
|
|
@@ -3991,8 +4043,9 @@ function sandBox(script, name, verbose, debug, context, logCollector) {
|
|
|
3991
4043
|
}
|
|
3992
4044
|
}
|
|
3993
4045
|
else {
|
|
3994
|
-
sandbox.verbose
|
|
4046
|
+
if (sandbox.verbose) {
|
|
3995
4047
|
sandbox.log(`rename(adapter=${_adapter}, oldName=${oldName}, newName=${newName})`, 'info');
|
|
4048
|
+
}
|
|
3996
4049
|
if (callback) {
|
|
3997
4050
|
adapter.rename(_adapter, oldName, newName, callback);
|
|
3998
4051
|
}
|